diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..3c7ec69 --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,21 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", "core", + "dump", + "vector", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "Settings", + "unpack", + -- Silence "accessing undefined field copy of global table". + table = { fields = { "copy" } } +} + +-- Overwrites minetest.handle_node_drops +files["mods/creative/init.lua"].globals = { "minetest" } + +-- Don't report on legacy definitions of globals. +files["mods/default/legacy.lua"].global = false diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..5253938 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,12 @@ +language: generic +sudo: false +addons: + apt: + packages: + - luarocks +before_install: + - luarocks install --local luacheck +script: +- $HOME/.luarocks/bin/luacheck --no-color ./mods +notifications: + email: false diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..48f0b8d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,519 @@ +License of media (textures and sounds) +-------------------------------------- +Copyright (C) 2010-2012 celeron55, Perttu Ahola +See README.txt in each mod directory for information about other authors. + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +License of menu/header.png +Copyright (C) 2015 paramat CC BY-SA 3.0 + + +License of source code +---------------------- +Copyright (C) 2010-2012 celeron55, Perttu Ahola +See README.txt in each mod directory for information about other authors. + + 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/README.txt b/README.txt new file mode 100644 index 0000000..97ad70a --- /dev/null +++ b/README.txt @@ -0,0 +1,28 @@ +Minetest Game [minetest_game] +============================= +The main subgame for the Minetest engine +======================================== + +To use this subgame with the Minetest engine, insert this repository as + /games/minetest_game + +The Minetest engine can be found in: + https://github.com/minetest/minetest/ + +Compatibility +-------------- +The Minetest Game github master HEAD is generally compatible with the github +master HEAD of the Minetest engine. + +Additionally, when the Minetest engine is tagged to be a certain version (eg. +0.4.10), Minetest Game is tagged with the version too. + +When stable releases are made, Minetest Game is packaged and made available in + http://minetest.net/download +and in case the repository has grown too much, it may be reset. In that sense, +this is not a "real" git repository. (Package maintainers please note!) + +Licensing +--------- + +See LICENSE.txt diff --git a/game.conf b/game.conf new file mode 100644 index 0000000..4dea949 --- /dev/null +++ b/game.conf @@ -0,0 +1 @@ +name = Minetest Game diff --git a/game_api.txt b/game_api.txt new file mode 100644 index 0000000..d33c7c9 --- /dev/null +++ b/game_api.txt @@ -0,0 +1,866 @@ +Minetest Game API +================= +GitHub Repo: https://github.com/minetest/minetest_game + +Introduction +------------ + +The Minetest Game subgame 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.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"} + } + } + +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. + +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 + +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 + + +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`. + * `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 +--------- + +### 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 + } + +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) + +Player API +---------- + +The player API can register player models and update the player's appearence + +`default.player_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] + +`default.registered_player_models[name]` + + * Get a model's definition + * see [#Model definition] + +`default.player_set_model(player, model_name)` + + * Change a player's model + * `player`: PlayerRef + * `model_name`: model registered with player_register_model() + +`default.player_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 + +`default.player_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 + +default.player_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}, + -- ... + }, + } + +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 + +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/menu/header.png b/menu/header.png new file mode 100644 index 0000000..2ecda83 Binary files /dev/null and b/menu/header.png differ diff --git a/menu/icon.png b/menu/icon.png new file mode 100644 index 0000000..bf90c82 Binary files /dev/null and b/menu/icon.png differ diff --git a/minetest.conf b/minetest.conf new file mode 100644 index 0000000..e69de29 diff --git a/minetest.conf.example b/minetest.conf.example new file mode 100644 index 0000000..9393b1a --- /dev/null +++ b/minetest.conf.example @@ -0,0 +1,53 @@ +# This file contains settings of Minetest Game that can be changed in minetest.conf +# By default, all the settings are commented and not functional. +# Uncomment settings by removing the preceding #. + +# Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled +#creative_mode = false + +# Sets the behaviour of the inventory items when a player dies. +# "bones": Store all items inside a bone node but drop items if inside protected area +# "drop": Drop all items on the ground +# "keep": Player keeps all items +#bones_mode = "bones" + +# The time in seconds after which the bones of a dead player can be looted by everyone +# 0 to disable +#share_bones_time = 1200 + +# 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 = 300 + +# Whether fire should be enabled. If disabled, 'basic flame' nodes will disappear. +# 'permanent flame' nodes will remain with either setting. +#enable_fire = true + +# Enable flame sound. +#flame_sound = true + +# Whether lavacooling should be enabled. +#enable_lavacooling = true + +# Whether the stuff in initial_stuff should be given to new players +#give_initial_stuff = false +#initial_stuff = default:pick_steel,default:axe_steel,default:shovel_steel,default:torch 99,default:cobble 99 + +# Whether the TNT mod should be enabled +#enable_tnt = + +# The radius of a TNT explosion +#tnt_radius = 3 + +# Enable the stairs mod ABM that replaces the old 'upside down' +# stair and slab nodes in old maps with the new param2 versions. +#enable_stairs_replace_abm = false + +# Whether you allow respawning in beds +# Default value is true +#enable_bed_respawn = true + +# Whether players can skip night by sleeping +# Default value is true +#enable_bed_night_skip = true diff --git a/mods/3d_armor-version-0.4.11/.gitignore b/mods/3d_armor-version-0.4.11/.gitignore new file mode 100644 index 0000000..ba96b08 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/.gitignore @@ -0,0 +1,11 @@ +## Generic ignorable patterns and files +*~ +.*.swp +*bak* +tags +*.vim +armor.conf + +## Eclipse project files & directories +.project +.settings diff --git a/mods/3d_armor-version-0.4.11/3d_armor/LICENSE.txt b/mods/3d_armor-version-0.4.11/3d_armor/LICENSE.txt new file mode 100644 index 0000000..e1949c0 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/LICENSE.txt @@ -0,0 +1,9 @@ +[mod] 3d Armor [3d_armor] +========================= + +License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 + +License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0 + +https://github.com/daviddoesminetest/3d-armors-new-textures + diff --git a/mods/3d_armor-version-0.4.11/3d_armor/README.txt b/mods/3d_armor-version-0.4.11/3d_armor/README.txt new file mode 100644 index 0000000..a0cb3b1 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/README.txt @@ -0,0 +1,191 @@ +[mod] Visible Player Armor [3d_armor] +===================================== + +Depends: default + +Recommends: sfinv, unified_inventory or smart_inventory (use only one to avoid conflicts) + +Supports: player_monoids and armor_monoid + +Adds craftable armor that is visible to other players. Each armor item worn contributes to +a player's armor group level making them less vulnerable to weapons. + +Armor takes damage when a player is hurt but also offers a percentage chance of healing. +Overall level is boosted by 10% when wearing a full matching set. + +Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1 +protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava. + +Armor Configuration +------------------- + +Override the following default settings by adding them to your minetest.conf file. + +-- Set false to disable individual armor materials. +armor_material_wood = true +armor_material_cactus = true +armor_material_steel = true +armor_material_bronze = true +armor_material_diamond = true +armor_material_gold = true +armor_material_mithril = true +armor_material_crystal = true + +-- Increase this if you get initialization glitches when a player first joins. +armor_init_delay = 1 + +-- Number of initialization attempts. +-- Use in conjunction with armor_init_delay if initialization problems persist. +armor_init_times = 1 + +-- Increase this if armor is not getting into bones due to server lag. +armor_bones_delay = 1 + +-- How often player armor items are updated. +armor_update_time = 1 + +-- Drop armor when a player dies. +-- Uses bones mod if present, otherwise items are dropped around the player. +armor_drop = true + +-- Pulverise armor when a player dies, overrides armor_drop. +armor_destroy = false + +-- You can use this to increase or decrease overall armor effectiveness, +-- eg: level_multiplier = 0.5 will reduce armor level by half. +armor_level_multiplier = 1 + +-- You can use this to increase or decrease overall armor healing, +-- eg: armor_heal_multiplier = 0 will disable healing altogether. +armor_heal_multiplier = 1 + +-- Enable water protection (periodically restores breath when activated) +armor_water_protect = true + +-- Enable fire protection (defaults true if using ethereal mod) +armor_fire_protect = false + +-- Enable punch damage effects. +armor_punch_damage = true + +-- Enable migration of old armor inventories +armor_migrate_old_inventory = true + +API +--- + +Armor Registration: + +armor:register_armor(name, def) + +Wrapper function for `minetest.register_tool`, while registering armor as +a tool item is still supported, this may be deprecated in future so new code +should use this method. + +Additional fields supported by 3d_armor: + + texture = + preview = + armor_groups = + damage_groups =
+ reciprocate_damage = + on_equip = + on_unequip = + on_destroy = + on_damage = + on_punched = + +armor:register_armor_group(group, base) + +Example: + +armor:register_armor_group("radiation", 100) + +armor:register_armor("mod_name:speed_boots", { + description = "Speed Boots", + inventory_image = "mod_name_speed_boots_inv.png", + texture = "mod_name_speed_boots.png", + preview = "mod_name_speed_boots_preview.png", + groups = {armor_feet=1, armor_use=500, physics_speed=1.2, flammable=1}, + armor_groups = {fleshy=10, radiation=10}, + damage_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}, + reciprocate_damage = true, + on_destroy = function(player, index, stack) + local pos = player:getpos() + if pos then + minetest.sound_play({ + name = "mod_name_break_sound", + pos = pos, + gain = 0.5, + }) + end + end, +}) + +See armor.lua, technic_armor and shields mods for more examples. + +Default groups: + +Elements: armor_head, armor_torso, armor_legs, armor_feet +Attributes: armor_heal, armor_fire, armor_water +Physics: physics_jump, physics_speed, physics_gravity +Durability: armor_use, flammable + +Notes: + +Elements may be modified by dependent mods, eg shields adds armor_shield. +Attributes and physics values are 'stackable', durability is determined +by the level of armor_use, total uses == approx (65535/armor_use), non-fleshy +damage groups need to be defined in the tool/weapon used against the player. + +Reciprocal tool damage will be done only by the first armor inventory item + with `reciprocate_damage = true` + +Armor Functions: + +armor:set_player_armor(player) + +Primarily an internal function but can be called externally to apply any +changes that might not otherwise get handled. + +armor:punch(player, hitter, time_from_last_punch, tool_capabilities) + +Used to apply damage to all equipped armor based on the damage groups of +each individual item.`hitter`, `time_from_last_punch` and `tool_capabilities` +are optional but should be valid if included. + +armor:damage(player, index, stack, use) + +Adds wear to a single armor itemstack, triggers `on_damage` callbacks and +updates the necessary inventories. Also handles item destruction callbacks +and so should NOT be called from `on_unequip` to avoid an infinite loop. + +Item Callbacks: + +on_equip = func(player, index, stack) +on_unequip = func(player, index, stack) +on_destroy = func(player, index, stack) +on_damage = func(player, index, stack) +on_punched = func(player, hitter, time_from_last_punch, tool_capabilities) + +Notes: + +`on_punched` is called every time a player is punched or takes damage, `hitter`, +`time_from_last_punch` and `tool_capabilities` can be `nil` and will be in the +case of fall damage, etc. When fire protection is enabled, hitter == "fire" +in the event of fire damage. Return `false` to override armor damage effects. +When armor is destroyed `stack` will contain a copy of the previous stack. + +Global Callbacks: + +armor:register_on_update(func(player)) +armor:register_on_equip(func(player, index, stack)) +armor:register_on_unequip(func(player, index, stack)) +armor:register_on_destroy(func(player, index, stack)) + +Global Callback Example: + +armor:register_on_update(function(player) + print(player:get_player_name().." armor updated!") +end) + diff --git a/mods/3d_armor-version-0.4.11/3d_armor/api.lua b/mods/3d_armor-version-0.4.11/3d_armor/api.lua new file mode 100644 index 0000000..dcc2b38 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/api.lua @@ -0,0 +1,535 @@ +-- support for i18n +local S = armor_i18n.gettext + +local skin_previews = {} +local use_player_monoids = minetest.global_exists("player_monoids") +local use_armor_monoid = minetest.global_exists("armor_monoid") +local armor_def = setmetatable({}, { + __index = function() + return setmetatable({ + groups = setmetatable({}, { + __index = function() + return 0 + end}) + }, { + __index = function() + return 0 + end + }) + end, +}) +local armor_textures = setmetatable({}, { + __index = function() + return setmetatable({}, { + __index = function() + return "blank.png" + end + }) + end +}) + +armor = { + timer = 0, + elements = {"head", "torso", "legs", "feet"}, + physics = {"jump", "speed", "gravity"}, + attributes = {"heal", "fire", "water"}, + formspec = "image[2.5,0;2,4;armor_preview]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + default.get_hotbar_bg(0, 4.7).. + "list[current_player;main;0,4.7;8,1;]".. + "list[current_player;main;0,5.85;8,3;8]", + def = armor_def, + textures = armor_textures, + default_skin = "character", + materials = { + wood = "group:wood", + cactus = "default:cactus", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + diamond = "default:diamond", + gold = "default:gold_ingot", + mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", + }, + fire_nodes = { + {"default:lava_source", 5, 8}, + {"default:lava_flowing", 5, 8}, + {"fire:basic_flame", 3, 4}, + {"fire:permanent_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"ethereal:fire_flower", 2, 1}, + {"default:torch", 1, 1}, + {"default:torch_ceiling", 1, 1}, + {"default:torch_wall", 1, 1}, + }, + registered_groups = {["fleshy"]=100}, + registered_callbacks = { + on_update = {}, + on_equip = {}, + on_unequip = {}, + on_damage = {}, + on_destroy = {}, + }, + migrate_old_inventory = true, + version = "0.4.11", +} + +armor.config = { + init_delay = 2, + init_times = 10, + bones_delay = 1, + update_time = 1, + drop = minetest.get_modpath("bones") ~= nil, + destroy = false, + level_multiplier = 1, + heal_multiplier = 1, + material_wood = true, + material_cactus = true, + material_steel = true, + material_bronze = true, + material_diamond = true, + material_gold = true, + material_mithril = true, + material_crystal = true, + water_protect = true, + fire_protect = minetest.get_modpath("ethereal") ~= nil, + punch_damage = true, +} + +-- Armor Registration + +armor.register_armor = function(self, name, def) + minetest.register_tool(name, def) +end + +armor.register_armor_group = function(self, group, base) + base = base or 100 + self.registered_groups[group] = base + if use_armor_monoid then + armor_monoid.register_armor_group(group, base) + end +end + +-- Armor callbacks + +armor.register_on_update = function(self, func) + if type(func) == "function" then + table.insert(self.registered_callbacks.on_update, func) + end +end + +armor.register_on_equip = function(self, func) + if type(func) == "function" then + table.insert(self.registered_callbacks.on_equip, func) + end +end + +armor.register_on_unequip = function(self, func) + if type(func) == "function" then + table.insert(self.registered_callbacks.on_unequip, func) + end +end + +armor.register_on_damage = function(self, func) + if type(func) == "function" then + table.insert(self.registered_callbacks.on_damage, func) + end +end + +armor.register_on_destroy = function(self, func) + if type(func) == "function" then + table.insert(self.registered_callbacks.on_destroy, func) + end +end + +armor.run_callbacks = function(self, callback, player, index, stack) + if stack then + local def = stack:get_definition() or {} + if type(def[callback]) == "function" then + def[callback](player, index, stack) + end + end + local callbacks = self.registered_callbacks[callback] + if callbacks then + for _, func in pairs(callbacks) do + func(player, index, stack) + end + end +end + +armor.update_player_visuals = function(self, player) + if not player then + return + end + local name = player:get_player_name() + if self.textures[name] then + default.player_set_textures(player, { + self.textures[name].skin, + self.textures[name].armor, + self.textures[name].wielditem, + }) + end + self:run_callbacks("on_update", player) +end + +armor.set_player_armor = function(self, player) + local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") + if not name then + return + end + local state = 0 + local count = 0 + local material = {count=1} + local preview = armor:get_preview(name) + local texture = "3d_armor_trans.png" + local skintexture = armor:get_player_skin(name) + local textures = {} + local physics = {} + local attributes = {} + local levels = {} + local groups = {} + local change = {} + for _, phys in pairs(self.physics) do + physics[phys] = 1 + end + for _, attr in pairs(self.attributes) do + attributes[attr] = 0 + end + for group, _ in pairs(self.registered_groups) do + change[group] = 1 + levels[group] = 0 + end + local list = armor_inv:get_list("armor") + if type(list) ~= "table" then + return + end + for i, stack in pairs(list) do + if stack:get_count() == 1 then + local def = stack:get_definition() + for _, element in pairs(self.elements) do + if def.groups["armor_"..element] then + if def.armor_groups then + for group, level in pairs(def.armor_groups) do + if levels[group] then + levels[group] = levels[group] + level + end + end + else + local level = def.groups["armor_"..element] + levels["fleshy"] = levels["fleshy"] + level + end + break + end + -- DEPRECATED, use armor_groups instead + if def.groups["armor_radiation"] and levels["radiation"] then + levels["radiation"] = def.groups["armor_radiation"] + end + end + local item = stack:get_name() + local tex = def.texture or item:gsub("%:", "_") + tex = tex:gsub(".png$", "") + local prev = def.preview or tex.."_preview" + prev = prev:gsub(".png$", "") + if def.groups["clothing"] then + skintexture = skintexture.."^"..tex..".png" + else + texture = texture.."^"..tex..".png" + end + preview = preview.."^"..prev..".png" + state = state + stack:get_wear() + count = count + 1 + for _, phys in pairs(self.physics) do + local value = def.groups["physics_"..phys] or 0 + physics[phys] = physics[phys] + value + end + for _, attr in pairs(self.attributes) do + local value = def.groups["armor_"..attr] or 0 + attributes[attr] = attributes[attr] + value + end + local mat = string.match(item, "%:.+_(.+)$") + if material.name then + if material.name == mat then + material.count = material.count + 1 + end + else + material.name = mat + end + end + end + for group, level in pairs(levels) do + if level > 0 then + level = level * armor.config.level_multiplier + if material.name and material.count == #self.elements then + level = level * 1.1 + end + end + local base = self.registered_groups[group] + self.def[name].groups[group] = level + if level > base then + level = base + end + groups[group] = base - level + change[group] = groups[group] / base + end + for _, attr in pairs(self.attributes) do + self.def[name][attr] = attributes[attr] + end + for _, phys in pairs(self.physics) do + self.def[name][phys] = physics[phys] + end + if use_armor_monoid then + armor_monoid.monoid:add_change(player, change, "3d_armor:armor") + else + player:set_armor_groups(groups) + end + if use_player_monoids then + player_monoids.speed:add_change(player, physics.speed, + "3d_armor:physics") + player_monoids.jump:add_change(player, physics.jump, + "3d_armor:physics") + player_monoids.gravity:add_change(player, physics.gravity, + "3d_armor:physics") + else + player:set_physics_override(physics) + end + self.textures[name].armor = texture + self.textures[name].skin = skintexture + self.textures[name].preview = preview + self.def[name].level = self.def[name].groups.fleshy or 0 + self.def[name].state = state + self.def[name].count = count + self:update_player_visuals(player) +end + +armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities) + local name, armor_inv = self:get_valid_player(player, "[punch]") + if not name then + return + end + local state = 0 + local count = 0 + local recip = true + local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1} + local list = armor_inv:get_list("armor") + for i, stack in pairs(list) do + if stack:get_count() == 1 then + local name = stack:get_name() + local use = minetest.get_item_group(name, "armor_use") or 0 + local damage = use > 0 + local def = stack:get_definition() or {} + if type(def.on_punched) == "function" then + damage = def.on_punched(player, hitter, time_from_last_punch, + tool_capabilities) ~= false and damage == true + end + if damage == true and tool_capabilities then + local damage_groups = def.damage_groups or default_groups + local level = damage_groups.level or 0 + local groupcaps = tool_capabilities.groupcaps or {} + local uses = 0 + damage = false + for group, caps in pairs(groupcaps) do + local maxlevel = caps.maxlevel or 0 + local diff = maxlevel - level + if diff == 0 then + diff = 1 + end + if diff > 0 and caps.times then + local group_level = damage_groups[group] + if group_level then + local time = caps.times[group_level] + if time then + local dt = time_from_last_punch or 0 + if dt > time / diff then + if caps.uses then + uses = caps.uses * math.pow(3, diff) + end + damage = true + break + end + end + end + end + end + if damage == true and recip == true and hitter and + def.reciprocate_damage == true and uses > 0 then + local item = hitter:get_wielded_item() + if item and item:get_name() ~= "" then + item:add_wear(65535 / uses) + hitter:set_wielded_item(item) + end + -- reciprocate tool damage only once + recip = false + end + end + if damage == true and hitter == "fire" then + damage = minetest.get_item_group(name, "flammable") > 0 + end + if damage == true then + self:damage(player, i, stack, use) + end + state = state + stack:get_wear() + count = count + 1 + end + end + self.def[name].state = state + self.def[name].count = count +end + +armor.damage = function(self, player, index, stack, use) + local old_stack = ItemStack(stack) + stack:add_wear(use) + self:run_callbacks("on_damage", player, index, stack) + self:set_inventory_stack(player, index, stack) + if stack:get_count() == 0 then + self:run_callbacks("on_unequip", player, index, old_stack) + self:run_callbacks("on_destroy", player, index, old_stack) + self:set_player_armor(player) + end +end + +armor.get_player_skin = function(self, name) + if (self.skin_mod == "skins" or self.skin_mod == "simple_skins") and skins.skins[name] then + return skins.skins[name]..".png" + elseif self.skin_mod == "u_skins" and u_skins.u_skins[name] then + return u_skins.u_skins[name]..".png" + elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then + return wardrobe.playerSkins[name] + end + return armor.default_skin..".png" +end + +armor.add_preview = function(self, preview) + skin_previews[preview] = true +end + +armor.get_preview = function(self, name) + local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png") + if skin_previews[preview] then + return preview + end + return "character_preview.png" +end + +armor.get_armor_formspec = function(self, name, listring) + if armor.def[name].init_time == 0 then + return "label[0,0;Armor not initialized!]" + end + local formspec = armor.formspec.. + "list[detached:"..name.."_armor;armor;0,0.5;2,3;]" + if listring == true then + formspec = formspec.."listring[current_player;main]".. + "listring[detached:"..name.."_armor;armor]" + end + formspec = formspec:gsub("armor_preview", armor.textures[name].preview) + formspec = formspec:gsub("armor_level", armor.def[name].level) + for _, attr in pairs(self.attributes) do + formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr]) + end + for group, _ in pairs(self.registered_groups) do + formspec = formspec:gsub("armor_group_"..group, + armor.def[name].groups[group]) + end + return formspec +end + +armor.serialize_inventory_list = function(self, list) + local list_table = {} + for _, stack in ipairs(list) do + table.insert(list_table, stack:to_string()) + end + return minetest.serialize(list_table) +end + +armor.deserialize_inventory_list = function(self, list_string) + local list_table = minetest.deserialize(list_string) + local list = {} + for _, stack in ipairs(list_table or {}) do + table.insert(list, ItemStack(stack)) + end + return list +end + +armor.load_armor_inventory = function(self, player) + local msg = "[load_armor_inventory]" + local name = player:get_player_name() + if not name then + minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) + return + end + local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + local armor_list_string = player:get_attribute("3d_armor_inventory") + if armor_list_string then + armor_inv:set_list("armor", self:deserialize_inventory_list(armor_list_string)) + return true + end +end + +armor.save_armor_inventory = function(self, player) + local msg = "[save_armor_inventory]" + local name = player:get_player_name() + if not name then + minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) + return + end + local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + player:set_attribute("3d_armor_inventory", self:serialize_inventory_list(armor_inv:get_list("armor"))) +end + +armor.update_inventory = function(self, player) + -- DEPRECATED: Legacy inventory support +end + +armor.set_inventory_stack = function(self, player, i, stack) + local msg = "[set_inventory_stack]" + local name = player:get_player_name() + if not name then + minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) + return + end + local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + armor_inv:set_stack("armor", i, stack) + self:save_armor_inventory(player) +end + +armor.get_valid_player = function(self, player, msg) + msg = msg or "" + if not player then + minetest.log("warning", S("3d_armor: Player reference is nil @1", msg)) + return + end + local name = player:get_player_name() + if not name then + minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) + return + end + local inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + return name, inv +end + +armor.drop_armor = function(pos, stack) + local node = minetest.get_node_or_nil(pos) + if node then + local obj = minetest.add_item(pos, stack) + if obj then + obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)}) + end + end +end diff --git a/mods/3d_armor-version-0.4.11/3d_armor/armor.conf.example b/mods/3d_armor-version-0.4.11/3d_armor/armor.conf.example new file mode 100644 index 0000000..9ce34b4 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/armor.conf.example @@ -0,0 +1,65 @@ +-- DEPRECATED, will not be supported in future versions + +-- See README.txt for new configuration options. + +-- Armor Configuration (defaults) + +-- You can remove any unwanted armor materials from this table. +-- Note that existing armor that is removed will show up as an unknown item. +ARMOR_MATERIALS = { + wood = "group:wood", + cactus = "default:cactus", + steel = "default:steel_ingot", + bronze = "default:bronze_ingot", + diamond = "default:diamond", + gold = "default:gold_ingot", + mithril = "moreores:mithril_ingot", + crystal = "ethereal:crystal_ingot", +} + +-- Enable fire protection (defaults true if using ethereal mod) +ARMOR_FIRE_PROTECT = false + +-- Fire protection nodes, (name, protection level, damage) +ARMOR_FIRE_NODES = { + {"default:lava_source", 5, 4}, + {"default:lava_flowing", 5, 4}, + {"fire:basic_flame", 3, 4}, + {"fire:permanent_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"ethereal:fire_flower", 2, 1}, + {"default:torch", 1, 1}, +} + +-- Increase this if you get initialization glitches when a player first joins. +ARMOR_INIT_DELAY = 1 + +-- Number of initialization attempts. +-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist. +ARMOR_INIT_TIMES = 1 + +-- Increase this if armor is not getting into bones due to server lag. +ARMOR_BONES_DELAY = 1 + +-- How often player armor/wield items are updated. +ARMOR_UPDATE_TIME = 1 + +-- Drop armor when a player dies. +-- Uses bones mod if present, otherwise items are dropped around the player. +ARMOR_DROP = true + +-- Pulverise armor when a player dies, overrides ARMOR_DROP. +ARMOR_DESTROY = false + +-- You can use this to increase or decrease overall armor effectiveness, +-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half. +ARMOR_LEVEL_MULTIPLIER = 1 + +-- You can use this to increase or decrease overall armor healing, +-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether. +ARMOR_HEAL_MULTIPLIER = 1 + +-- You can use this to increase or decrease overall armor radiation protection, +-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection. +-- Note: patched technic mod is required +ARMOR_RADIATION_MULTIPLIER = 1 diff --git a/mods/3d_armor-version-0.4.11/3d_armor/armor.lua b/mods/3d_armor-version-0.4.11/3d_armor/armor.lua new file mode 100644 index 0000000..85d120a --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/armor.lua @@ -0,0 +1,346 @@ +-- support for i18n +local S = armor_i18n.gettext + +armor:register_armor("3d_armor:helmet_admin", { + description = S("Admin Helmet"), + inventory_image = "3d_armor_inv_helmet_admin.png", + armor_groups = {fleshy=100}, + groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1, + not_in_creative_inventory=1}, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +armor:register_armor("3d_armor:chestplate_admin", { + description = S("Admin Chestplate"), + inventory_image = "3d_armor_inv_chestplate_admin.png", + armor_groups = {fleshy=100}, + groups = {armor_torso=1, armor_heal=100, armor_use=0, + not_in_creative_inventory=1}, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +armor:register_armor("3d_armor:leggings_admin", { + description = S("Admin Leggings"), + inventory_image = "3d_armor_inv_leggings_admin.png", + armor_groups = {fleshy=100}, + groups = {armor_legs=1, armor_heal=100, armor_use=0, + not_in_creative_inventory=1}, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +armor:register_armor("3d_armor:boots_admin", { + description = S("Admin Boots"), + inventory_image = "3d_armor_inv_boots_admin.png", + armor_groups = {fleshy=100}, + groups = {armor_feet=1, armor_heal=100, armor_use=0, + not_in_creative_inventory=1}, + on_drop = function(itemstack, dropper, pos) + return + end, +}) + +minetest.register_alias("adminboots", "3d_armor:boots_admin") +minetest.register_alias("adminhelmet", "3d_armor:helmet_admin") +minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin") +minetest.register_alias("adminleggings", "3d_armor:leggings_admin") + +if armor.materials.wood then + armor:register_armor("3d_armor:helmet_wood", { + description = S("Wood Helmet"), + inventory_image = "3d_armor_inv_helmet_wood.png", + groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:chestplate_wood", { + description = S("Wood Chestplate"), + inventory_image = "3d_armor_inv_chestplate_wood.png", + groups = {armor_torso=1, armor_heal=0, armor_use=2000, flammable=1}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:leggings_wood", { + description = S("Wood Leggings"), + inventory_image = "3d_armor_inv_leggings_wood.png", + groups = {armor_legs=1, armor_heal=0, armor_use=2000, flammable=1}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:boots_wood", { + description = S("Wood Boots"), + inventory_image = "3d_armor_inv_boots_wood.png", + armor_groups = {fleshy=5}, + damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, + groups = {armor_feet=1, armor_heal=0, armor_use=2000, flammable=1}, + }) +end + +if armor.materials.cactus then + armor:register_armor("3d_armor:helmet_cactus", { + description = S("Cactus Helmet"), + inventory_image = "3d_armor_inv_helmet_cactus.png", + groups = {armor_head=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:chestplate_cactus", { + description = S("Cactus Chestplate"), + inventory_image = "3d_armor_inv_chestplate_cactus.png", + groups = {armor_torso=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:leggings_cactus", { + description = S("Cactus Leggings"), + inventory_image = "3d_armor_inv_leggings_cactus.png", + groups = {armor_legs=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, + }) + armor:register_armor("3d_armor:boots_cactus", { + description = S("Cactus Boots"), + inventory_image = "3d_armor_inv_boots_cactus.png", + groups = {armor_feet=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, + }) +end + +if armor.materials.steel then + armor:register_armor("3d_armor:helmet_steel", { + description = S("Steel Helmet"), + inventory_image = "3d_armor_inv_helmet_steel.png", + groups = {armor_head=1, armor_heal=0, armor_use=800, + physics_speed=-0.01, physics_gravity=0.01}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:chestplate_steel", { + description = S("Steel Chestplate"), + inventory_image = "3d_armor_inv_chestplate_steel.png", + groups = {armor_torso=1, armor_heal=0, armor_use=800, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:leggings_steel", { + description = S("Steel Leggings"), + inventory_image = "3d_armor_inv_leggings_steel.png", + groups = {armor_legs=1, armor_heal=0, armor_use=800, + physics_speed=-0.03, physics_gravity=0.03}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:boots_steel", { + description = S("Steel Boots"), + inventory_image = "3d_armor_inv_boots_steel.png", + groups = {armor_feet=1, armor_heal=0, armor_use=800, + physics_speed=-0.01, physics_gravity=0.01}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + }) +end + +if armor.materials.bronze then + armor:register_armor("3d_armor:helmet_bronze", { + description = S("Bronze Helmet"), + inventory_image = "3d_armor_inv_helmet_bronze.png", + groups = {armor_head=1, armor_heal=6, armor_use=400, + physics_speed=-0.01, physics_gravity=0.01}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:chestplate_bronze", { + description = S("Bronze Chestplate"), + inventory_image = "3d_armor_inv_chestplate_bronze.png", + groups = {armor_torso=1, armor_heal=6, armor_use=400, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:leggings_bronze", { + description = S("Bronze Leggings"), + inventory_image = "3d_armor_inv_leggings_bronze.png", + groups = {armor_legs=1, armor_heal=6, armor_use=400, + physics_speed=-0.03, physics_gravity=0.03}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, + }) + armor:register_armor("3d_armor:boots_bronze", { + description = S("Bronze Boots"), + inventory_image = "3d_armor_inv_boots_bronze.png", + groups = {armor_feet=1, armor_heal=6, armor_use=400, + physics_speed=-0.01, physics_gravity=0.01}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, + }) +end + +if armor.materials.diamond then + armor:register_armor("3d_armor:helmet_diamond", { + description = S("Diamond Helmet"), + inventory_image = "3d_armor_inv_helmet_diamond.png", + groups = {armor_head=1, armor_heal=12, armor_use=200}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, + }) + armor:register_armor("3d_armor:chestplate_diamond", { + description = S("Diamond Chestplate"), + inventory_image = "3d_armor_inv_chestplate_diamond.png", + groups = {armor_torso=1, armor_heal=12, armor_use=200}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, + }) + armor:register_armor("3d_armor:leggings_diamond", { + description = S("Diamond Leggings"), + inventory_image = "3d_armor_inv_leggings_diamond.png", + groups = {armor_legs=1, armor_heal=12, armor_use=200}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, + }) + armor:register_armor("3d_armor:boots_diamond", { + description = S("Diamond Boots"), + inventory_image = "3d_armor_inv_boots_diamond.png", + groups = {armor_feet=1, armor_heal=12, armor_use=200}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, + }) +end + +if armor.materials.gold then + armor:register_armor("3d_armor:helmet_gold", { + description = S("Gold Helmet"), + inventory_image = "3d_armor_inv_helmet_gold.png", + groups = {armor_head=1, armor_heal=6, armor_use=300, + physics_speed=-0.02, physics_gravity=0.02}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, + }) + armor:register_armor("3d_armor:chestplate_gold", { + description = S("Gold Chestplate"), + inventory_image = "3d_armor_inv_chestplate_gold.png", + groups = {armor_torso=1, armor_heal=6, armor_use=300, + physics_speed=-0.05, physics_gravity=0.05}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, + }) + armor:register_armor("3d_armor:leggings_gold", { + description = S("Gold Leggings"), + inventory_image = "3d_armor_inv_leggings_gold.png", + groups = {armor_legs=1, armor_heal=6, armor_use=300, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, + }) + armor:register_armor("3d_armor:boots_gold", { + description = S("Gold Boots"), + inventory_image = "3d_armor_inv_boots_gold.png", + groups = {armor_feet=1, armor_heal=6, armor_use=300, + physics_speed=-0.02, physics_gravity=0.02}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, + }) +end + +if armor.materials.mithril then + armor:register_armor("3d_armor:helmet_mithril", { + description = S("Mithril Helmet"), + inventory_image = "3d_armor_inv_helmet_mithril.png", + groups = {armor_head=1, armor_heal=12, armor_use=100}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:chestplate_mithril", { + description = S("Mithril Chestplate"), + inventory_image = "3d_armor_inv_chestplate_mithril.png", + groups = {armor_torso=1, armor_heal=12, armor_use=100}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:leggings_mithril", { + description = S("Mithril Leggings"), + inventory_image = "3d_armor_inv_leggings_mithril.png", + groups = {armor_legs=1, armor_heal=12, armor_use=100}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:boots_mithril", { + description = S("Mithril Boots"), + inventory_image = "3d_armor_inv_boots_mithril.png", + groups = {armor_feet=1, armor_heal=12, armor_use=100}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) +end + +if armor.materials.crystal then + armor:register_armor("3d_armor:helmet_crystal", { + description = S("Crystal Helmet"), + inventory_image = "3d_armor_inv_helmet_crystal.png", + groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=1}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:chestplate_crystal", { + description = S("Crystal Chestplate"), + inventory_image = "3d_armor_inv_chestplate_crystal.png", + groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=1}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:leggings_crystal", { + description = S("Crystal Leggings"), + inventory_image = "3d_armor_inv_leggings_crystal.png", + groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=1}, + armor_groups = {fleshy=20}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) + armor:register_armor("3d_armor:boots_crystal", { + description = S("Crystal Boots"), + inventory_image = "3d_armor_inv_boots_crystal.png", + groups = {armor_feet=1, armor_heal=12, armor_use=100, physics_speed=1, + physics_jump=0.5, armor_fire=1}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + }) +end + +for k, v in pairs(armor.materials) do + minetest.register_craft({ + output = "3d_armor:helmet_"..k, + recipe = { + {v, v, v}, + {v, "", v}, + {"", "", ""}, + }, + }) + minetest.register_craft({ + output = "3d_armor:chestplate_"..k, + recipe = { + {v, "", v}, + {v, v, v}, + {v, v, v}, + }, + }) + minetest.register_craft({ + output = "3d_armor:leggings_"..k, + recipe = { + {v, v, v}, + {v, "", v}, + {v, "", v}, + }, + }) + minetest.register_craft({ + output = "3d_armor:boots_"..k, + recipe = { + {v, "", v}, + {v, "", v}, + }, + }) +end diff --git a/mods/3d_armor-version-0.4.11/3d_armor/crafting_guide.txt b/mods/3d_armor-version-0.4.11/3d_armor/crafting_guide.txt new file mode 100644 index 0000000..abd1519 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/crafting_guide.txt @@ -0,0 +1,79 @@ +3d_armor -- Crafting Guide +-------------------------- + +Helmets: + ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | | X | ++---+---+---+ +| | | | ++---+---+---+ + +[3d_armor:helmet_wood] X = [default:wood] +[3d_armor:helmet_cactus] X = [default:cactus] +[3d_armor:helmet_steel] X = [default:steel_ingot] +[3d_armor:helmet_bronze] X = [default:bronze_ingot] +[3d_armor:helmet_diamond] X = [default:diamond] +[3d_armor:helmet_gold] X = [default:gold_ingot] +[3d_armor:helmet_mithril] X = [moreores:mithril_ingot] * +[3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] ** + +Chestplates: + ++---+---+---+ +| X | | X | ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | X | X | ++---+---+---+ + +[3d_armor:chestplate_wood] X = [default:wood] +[3d_armor:chestplate_cactus] X = [default:cactus] +[3d_armor:chestplate_steel] X = [default:steel_ingot] +[3d_armor:chestplate_bronze] X = [default:bronze_ingot] +[3d_armor:chestplate_diamond] X = [default:diamond] +[3d_armor:chestplate_gold] X = [default:gold_ingot] +[3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] * +[3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] ** + +Leggings: + ++---+---+---+ +| X | X | X | ++---+---+---+ +| X | | X | ++---+---+---+ +| X | | X | ++---+---+---+ + +[3d_armor:leggings_wood] X = [default:wood] +[3d_armor:leggings_cactus] X = [default:cactus] +[3d_armor:leggings_steel] X = [default:steel_ingot] +[3d_armor:leggings_bronze] X = [default:bronze_ingot] +[3d_armor:leggings_diamond] X = [default:diamond] +[3d_armor:leggings_gold] X = [default:gold_ingot] +[3d_armor:leggings_mithril] X = [moreores:mithril_ingot] * +[3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] ** + +Boots: + ++---+---+---+ +| X | | X | ++---+---+---+ +| X | | X | ++---+---+---+ + +[3d_armor:boots_wood] X = [default:wood] +[3d_armor:boots_cactus] X = [default:cactus] +[3d_armor:boots_steel] X = [default:steel_ingot] +[3d_armor:boots_bronze] X = [default:bronze_ingot +[3d_armor:boots_diamond] X = [default:diamond] +[3d_armor:boots_gold] X = [default:gold_ingot] +[3d_armor:boots_mithril] X = [moreores:mithril_ingot] * +[3d_armor:boots_crystal] X = [ethereal:crystal_ingot] ** + + * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 +** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal diff --git a/mods/3d_armor-version-0.4.11/3d_armor/depends.txt b/mods/3d_armor-version-0.4.11/3d_armor/depends.txt new file mode 100644 index 0000000..fa1b233 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/depends.txt @@ -0,0 +1,7 @@ +default +player_monoids? +armor_monoid? +fire? +ethereal? +bakedclay? +intllib? diff --git a/mods/3d_armor-version-0.4.11/3d_armor/description.txt b/mods/3d_armor-version-0.4.11/3d_armor/description.txt new file mode 100644 index 0000000..b0a9b0a --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/description.txt @@ -0,0 +1 @@ +Adds craftable armor that is visible to other players. diff --git a/mods/3d_armor-version-0.4.11/3d_armor/init.lua b/mods/3d_armor-version-0.4.11/3d_armor/init.lua new file mode 100644 index 0000000..cf82eaa --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/init.lua @@ -0,0 +1,418 @@ +-- support for i18n +armor_i18n = { } +local MP = minetest.get_modpath(minetest.get_current_modname()) +armor_i18n.gettext, armor_i18n.ngettext = dofile(MP.."/intllib.lua") +-- escaping formspec +armor_i18n.fgettext = function(...) return minetest.formspec_escape(armor_i18n.gettext(...)) end +-- local functions +local S = armor_i18n.gettext +local F = armor_i18n.fgettext + +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local worldpath = minetest.get_worldpath() +local last_punch_time = {} +local pending_players = {} +local timer = 0 + +dofile(modpath.."/api.lua") + +-- Legacy Config Support + +local input = io.open(modpath.."/armor.conf", "r") +if input then + dofile(modpath.."/armor.conf") + input:close() + input = nil +end +input = io.open(worldpath.."/armor.conf", "r") +if input then + dofile(worldpath.."/armor.conf") + input:close() + input = nil +end +for name, _ in pairs(armor.config) do + local global = "ARMOR_"..name:upper() + if minetest.global_exists(global) then + armor.config[name] = _G[global] + end +end +if minetest.global_exists("ARMOR_MATERIALS") then + armor.materials = table.copy(ARMOR_MATERIALS) +end +if minetest.global_exists("ARMOR_FIRE_NODES") then + armor.fire_nodes = table.copy(ARMOR_FIRE_NODES) +end + +-- Load Configuration + +for name, config in pairs(armor.config) do + local setting = minetest.settings:get("armor_"..name) + if type(config) == "number" then + setting = tonumber(setting) + elseif type(config) == "boolean" then + setting = minetest.settings:get_bool("armor_"..name) + end + if setting ~= nil then + armor.config[name] = setting + end +end +for material, _ in pairs(armor.materials) do + local key = "material_"..material + if armor.config[key] == false then + armor.materials[material] = nil + end +end + +-- Mod Compatibility + +if minetest.get_modpath("technic") then + armor.formspec = armor.formspec.. + "label[5,2.5;"..F("Radiation")..": armor_group_radiation]" + armor:register_armor_group("radiation") +end +local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"} +for _, mod in pairs(skin_mods) do + local path = minetest.get_modpath(mod) + if path then + local dir_list = minetest.get_dir_list(path.."/textures") + for _, fn in pairs(dir_list) do + if fn:find("_preview.png$") then + armor:add_preview(fn) + end + end + armor.skin_mod = mod + end +end +if not minetest.get_modpath("moreores") then + armor.materials.mithril = nil +end +if not minetest.get_modpath("ethereal") then + armor.materials.crystal = nil +end + +--dofile(modpath.."/armor.lua") + +-- Armor Initialization + +armor.formspec = armor.formspec.. + "label[5,1;"..F("Level")..": armor_level]".. + "label[5,1.5;"..F("Heal")..": armor_attr_heal]" +if armor.config.fire_protect then + armor.formspec = armor.formspec.."label[5,2;"..F("Fire")..": armor_fire]" +end +armor:register_on_destroy(function(player, index, stack) + local name = player:get_player_name() + local def = stack:get_definition() + if name and def and def.description then + minetest.chat_send_player(name, S("Your @1 got destroyed!", def.description)) + end +end) + +local function init_player_armor(player) + local name = player:get_player_name() + local pos = player:getpos() + if not name or not pos then + return false + end + local armor_inv = minetest.create_detached_inventory(name.."_armor", { + on_put = function(inv, listname, index, stack, player) + armor:save_armor_inventory(player) + armor:run_callbacks("on_equip", player, index, stack) + armor:set_player_armor(player) + end, + on_take = function(inv, listname, index, stack, player) + armor:save_armor_inventory(player) + armor:run_callbacks("on_unequip", player, index, stack) + armor:set_player_armor(player) + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player) + armor:save_armor_inventory(player) + armor:set_player_armor(player) + end, + allow_put = function(inv, listname, index, stack, player) + local def = stack:get_definition() or {} + local allowed = 0 + for _, element in pairs(armor.elements) do + if def.groups["armor_"..element] then + allowed = 1 + for i = 1, 6 do + local item = inv:get_stack("armor", i):get_name() + if minetest.get_item_group(item, "armor_"..element) == def.groups["armor_"..element] then + return 0 + end + end + end + end + return allowed + end, + allow_take = function(inv, listname, index, stack, player) + return stack:get_count() + end, + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + return count + end, + }, name) + armor_inv:set_size("armor", 6) + if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then + local player_inv = player:get_inventory() + player_inv:set_size("armor", 6) + for i=1, 6 do + local stack = player_inv:get_stack("armor", i) + armor_inv:set_stack("armor", i, stack) + end + armor:save_armor_inventory(player) + player_inv:set_size("armor", 0) + end + for i=1, 6 do + local stack = armor_inv:get_stack("armor", i) + armor:run_callbacks("on_equip", player, i, stack) + end + armor.def[name] = { + init_time = minetest.get_gametime(), + level = 0, + state = 0, + count = 0, + groups = {}, + } + for _, phys in pairs(armor.physics) do + armor.def[name][phys] = 1 + end + for _, attr in pairs(armor.attributes) do + armor.def[name][attr] = 0 + end + for group, _ in pairs(armor.registered_groups) do + armor.def[name].groups[group] = 0 + end + local skin = armor:get_player_skin(name) + armor.textures[name] = { + skin = skin, + armor = "3d_armor_trans.png", + wielditem = "3d_armor_trans.png", + preview = armor.default_skin.."_preview.png", + } + local texture_path = minetest.get_modpath("player_textures") + if texture_path then + local dir_list = minetest.get_dir_list(texture_path.."/textures") + for _, fn in pairs(dir_list) do + if fn == "player_"..name..".png" then + armor.textures[name].skin = fn + break + end + end + end + armor:set_player_armor(player) + return true +end + +-- Armor Player Model + +default.player_register_model("3d_armor_character.b3d", { + animation_speed = 30, + textures = { + armor.default_skin..".png", + "3d_armor_trans.png", + "3d_armor_trans.png", + }, + 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}, + }, +}) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = armor:get_valid_player(player, "[on_player_receive_fields]") + if not name then + return + end + for field, _ in pairs(fields) do + if string.find(field, "skins_set") then + minetest.after(0, function(player) + local skin = armor:get_player_skin(name) + armor.textures[name].skin = skin + armor:set_player_armor(player) + end, player) + end + end +end) + +minetest.register_on_joinplayer(function(player) + default.player_set_model(player, "3d_armor_character.b3d") + minetest.after(0, function(player) + if init_player_armor(player) == false then + pending_players[player] = 0 + end + end, player) +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + if name then + armor.def[name] = nil + armor.textures[name] = nil + end + pending_players[player] = nil +end) + +if armor.config.drop == true or armor.config.destroy == true then + minetest.register_on_dieplayer(function(player) + local name, armor_inv = armor:get_valid_player(player, "[on_dieplayer]") + if not name then + return + end + local drop = {} + for i=1, armor_inv:get_size("armor") do + local stack = armor_inv:get_stack("armor", i) + if stack:get_count() > 0 then + table.insert(drop, stack) + armor:set_inventory_stack(player, i, nil) + armor:run_callbacks("on_unequip", player, i, stack) + end + end + armor:set_player_armor(player) + local pos = player:getpos() + if pos and armor.config.destroy == false then + minetest.after(armor.config.bones_delay, function() + local meta = nil + local maxp = vector.add(pos, 8) + local minp = vector.subtract(pos, 8) + local bones = minetest.find_nodes_in_area(minp, maxp, {"bones:bones"}) + for _, p in pairs(bones) do + local m = minetest.get_meta(p) + if m:get_string("owner") == name then + meta = m + break + end + end + if meta then + local inv = meta:get_inventory() + for _,stack in ipairs(drop) do + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + else + armor.drop_armor(pos, stack) + end + end + else + for _,stack in ipairs(drop) do + armor.drop_armor(pos, stack) + end + end + end) + end + end) +end + +if armor.config.punch_damage == true then + minetest.register_on_punchplayer(function(player, hitter, + time_from_last_punch, tool_capabilities) + local name = player:get_player_name() + if name then + armor:punch(player, hitter, time_from_last_punch, tool_capabilities) + last_punch_time[name] = minetest.get_gametime() + end + end) +end + +minetest.register_on_player_hpchange(function(player, hp_change) + if player and hp_change < 0 then + local name = player:get_player_name() + if name then + local heal = armor.def[name].heal + heal = heal * armor.config.heal_multiplier + if heal >= math.random(100) then + hp_change = 0 + end + -- check if armor damage was handled by fire or on_punchplayer + local time = last_punch_time[name] or 0 + if time == 0 or time + 1 < minetest.get_gametime() then + armor:punch(player) + end + end + end + return hp_change +end, true) + +minetest.register_globalstep(function(dtime) + timer = timer + dtime + if timer > armor.config.init_delay then + for player, count in pairs(pending_players) do + local remove = init_player_armor(player) == true + pending_players[player] = count + 1 + if remove == false and count > armor.config.init_times then + minetest.log("warning", S("3d_armor: Failed to initialize player")) + remove = true + end + if remove == true then + pending_players[player] = nil + end + end + timer = 0 + end +end) + +-- Fire Protection and water breating, added by TenPlus1 + +if armor.config.fire_protect == true then + -- override hot nodes so they do not hurt player anywhere but mod + for _, row in pairs(armor.fire_nodes) do + if minetest.registered_nodes[row[1]] then + minetest.override_item(row[1], {damage_per_second = 0}) + end + end +else + print (S("[3d_armor] Fire Nodes disabled")) +end + +if armor.config.water_protect == true or armor.config.fire_protect == true then + minetest.register_globalstep(function(dtime) + armor.timer = armor.timer + dtime + if armor.timer < armor.config.update_time then + return + end + for _,player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local pos = player:getpos() + local hp = player:get_hp() + if not name or not pos or not hp then + return + end + -- water breathing + if armor.config.water_protect == true then + if armor.def[name].water > 0 and + player:get_breath() < 10 then + player:set_breath(10) + end + end + -- fire protection + if armor.config.fire_protect == true then + local fire_damage = true + pos.y = pos.y + 1.4 -- head level + local node_head = minetest.get_node(pos).name + pos.y = pos.y - 1.2 -- feet level + local node_feet = minetest.get_node(pos).name + -- is player inside a hot node? + for _, row in pairs(armor.fire_nodes) do + -- check fire protection, if not enough then get hurt + if row[1] == node_head or row[1] == node_feet then + if fire_damage == true then + armor:punch(player, "fire") + last_punch_time[name] = minetest.get_gametime() + fire_damage = false + end + if hp > 0 and armor.def[name].fire < row[2] then + hp = hp - row[3] * armor.config.update_time + player:set_hp(hp) + break + end + end + end + end + end + armor.timer = 0 + end) +end diff --git a/mods/3d_armor-version-0.4.11/3d_armor/intllib.lua b/mods/3d_armor-version-0.4.11/3d_armor/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/mods/3d_armor-version-0.4.11/3d_armor/locale/fr.po b/mods/3d_armor-version-0.4.11/3d_armor/locale/fr.po new file mode 100644 index 0000000..013e961 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/locale/fr.po @@ -0,0 +1,384 @@ +# 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-06 18:20+0200\n" +"PO-Revision-Date: 2017-08-06 18:20+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" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player name is nil @1" +msgstr "3d_armor : Nom du joueur non trouvé @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "3d_armor : Inventaire du joueur non trouvé @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Detached armor inventory is nil @1" +msgstr "3d_armor : Inventaire détaché pour l'armure non trouvé @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor : Référence au joueur non trouvée @1" + +#: ../3d_armor/armor.lua +msgid "Admin Helmet" +msgstr "Casque d'admin" + +#: ../3d_armor/armor.lua +msgid "Admin Chestplate" +msgstr "Cuirasse d'admin" + +#: ../3d_armor/armor.lua +msgid "Admin Leggings" +msgstr "Jambières d'admin" + +#: ../3d_armor/armor.lua +msgid "Admin Boots" +msgstr "Bottes d'admin" + +#: ../3d_armor/armor.lua +msgid "Wood Helmet" +msgstr "Casque en bois" + +#: ../3d_armor/armor.lua +msgid "Wood Chestplate" +msgstr "Cuirasse en bois" + +#: ../3d_armor/armor.lua +msgid "Wood Leggings" +msgstr "Jambières en bois" + +#: ../3d_armor/armor.lua +msgid "Wood Boots" +msgstr "Bottes en bois" + +#: ../3d_armor/armor.lua +msgid "Cactus Helmet" +msgstr "Casque en cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Chestplate" +msgstr "Cuirasse en cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Leggings" +msgstr "Jambières en cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Boots" +msgstr "Bottes en cactus" + +#: ../3d_armor/armor.lua +msgid "Steel Helmet" +msgstr "Casque en acier" + +#: ../3d_armor/armor.lua +msgid "Steel Chestplate" +msgstr " = Cuirasse en acier" + +#: ../3d_armor/armor.lua +msgid "Steel Leggings" +msgstr "Jambières en acier" + +#: ../3d_armor/armor.lua +msgid "Steel Boots" +msgstr "Bottes en acier" + +#: ../3d_armor/armor.lua +msgid "Bronze Helmet" +msgstr "Casque en bronze" + +#: ../3d_armor/armor.lua +msgid "Bronze Chestplate" +msgstr "Cuirasse en bronze" + +#: ../3d_armor/armor.lua +msgid "Bronze Leggings" +msgstr "Jambières en bronze" + +#: ../3d_armor/armor.lua +msgid "Bronze Boots" +msgstr "Bottes en bronze" + +#: ../3d_armor/armor.lua +msgid "Diamond Helmet" +msgstr "Casque en diamant" + +#: ../3d_armor/armor.lua +msgid "Diamond Chestplate" +msgstr "Cuirasse en diamant" + +#: ../3d_armor/armor.lua +msgid "Diamond Leggings" +msgstr "Jambières en diamant" + +#: ../3d_armor/armor.lua +msgid "Diamond Boots" +msgstr "Bottes en diamant" + +#: ../3d_armor/armor.lua +msgid "Gold Helmet" +msgstr "Casque en or" + +#: ../3d_armor/armor.lua +msgid "Gold Chestplate" +msgstr "Cuirasse en or" + +#: ../3d_armor/armor.lua +msgid "Gold Leggings" +msgstr "Jambières en or" + +#: ../3d_armor/armor.lua +msgid "Gold Boots" +msgstr "Bottes en or" + +#: ../3d_armor/armor.lua +msgid "Mithril Helmet" +msgstr "Casque en mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Chestplate" +msgstr "Cuirasse en mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Leggings" +msgstr "Jambières en mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Boots" +msgstr "Bottes en mithril" + +#: ../3d_armor/armor.lua +msgid "Crystal Helmet" +msgstr "Casque en cristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Chestplate" +msgstr "Cuirasse en cristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Leggings" +msgstr "Jambières en cristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Boots" +msgstr "Bottes en cristal" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Radiation" +msgstr "Radiation" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Level" +msgstr "Niveau" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Heal" +msgstr "Soins" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Fire" +msgstr "Fire" + +#: ../3d_armor/init.lua +msgid "Your @1 got destroyed!" +msgstr "Une partie de votre armure a été détruite : @1 !" + +#: ../3d_armor/init.lua +msgid "3d_armor: Failed to initialize player" +msgstr "3d_armor : Impossible d'initialiser le joueur" + +#: ../3d_armor/init.lua +msgid "[3d_armor] Fire Nodes disabled" +msgstr "[3d_armor] Noeuds de type feu désactivés" + +#: ../3d_armor_ip/init.lua +msgid "3d_armor_ip: Mod loaded but unused." +msgstr "3d_armor_ip : Mod chargé mais inutilisé." + +#: ../3d_armor_ip/init.lua +msgid "Back" +msgstr "Retour" + +#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua +msgid "Armor" +msgstr "Armure" + +#: ../3d_armor_sfinv/init.lua +msgid "3d_armor_sfinv: Mod loaded but unused." +msgstr "3d_armor_sfinv : Mod chargé mais inutilisé." + +#: ../3d_armor_stand/init.lua +msgid "Armor stand top" +msgstr "Haut de support d'armure" + +#: ../3d_armor_stand/init.lua +msgid "Armor stand" +msgstr "Support d'armure" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand" +msgstr "Support d'armure" + +#: ../3d_armor_stand/init.lua +msgid "Locked Armor stand" +msgstr "Support d'armure verrouillé" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand (owned by @1)" +msgstr "Support d'armure (propriété de @1)" + +#: ../3d_armor_ui/init.lua +msgid "3d_armor_ui: Mod loaded but unused." +msgstr "3d_armor_ui : Mod chargé mais inutilisé." + +#: ../3d_armor_ui/init.lua +msgid "3d Armor" +msgstr "Armure 3d" + +#: ../3d_armor_ui/init.lua +msgid "Armor not initialized!" +msgstr "Armure non initialisée !" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit : Mod chargé mais non utilisé." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Casque 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Cuirasse 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Manches 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Jambières 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "Bottes 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Combinaison 'Hazmat'" + +#: ../shields/init.lua +msgid "Admin Shield" +msgstr "Bouclier d'admin" + +#: ../shields/init.lua +msgid "Wooden Shield" +msgstr "Bouclier en bois" + +#: ../shields/init.lua +msgid "Enhanced Wood Shield" +msgstr "Bouclier en bois amélioré" + +#: ../shields/init.lua +msgid "Cactus Shield" +msgstr "Bouclier en cactus" + +#: ../shields/init.lua +msgid "Enhanced Cactus Shield" +msgstr "Bouclier en cactus amélioré" + +#: ../shields/init.lua +msgid "Steel Shield" +msgstr "Bouclier en acier" + +#: ../shields/init.lua +msgid "Bronze Shield" +msgstr "Bouclier en bronze" + +#: ../shields/init.lua +msgid "Diamond Shield" +msgstr "Bouclier en diamant" + +#: ../shields/init.lua +msgid "Gold Shield" +msgstr "Bouclier en or" + +#: ../shields/init.lua +msgid "Mithril Shield" +msgstr "Bouclier en mithril" + +#: ../shields/init.lua +msgid "Crystal Shield" +msgstr "Bouclier en cristal" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor : Mod chargé mais non utilisé." + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "plomb" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "laiton" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "fonte" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "acier au carbone" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "acier inoxydable" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "étain" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "argent" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Casque" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Cuirasse" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Jambières" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "Bottes" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Bouclier" + +#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string) +#: ../technic_armor/init.lua +msgid "@1 @2" +msgstr "@2 en @1" diff --git a/mods/3d_armor-version-0.4.11/3d_armor/locale/it.po b/mods/3d_armor-version-0.4.11/3d_armor/locale/it.po new file mode 100644 index 0000000..9e44322 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/locale/it.po @@ -0,0 +1,384 @@ +# ITALIAN LOCALE FILE FOR THE 3D ARMOR MODULE +# Copyright (C) 2012-2017 Stuart Jones +# This file is distributed under the same license as the 3D ARMOR package. +# Hamlet , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Italian localization file for the 3D Armor module\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-06 18:20+0200\n" +"PO-Revision-Date: 2017-08-18 00:36+0100\n" +"Last-Translator: H4mlet \n" +"Language-Team: ITALIANO\n" +"Language: it\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" +"X-Generator: Poedit 1.6.10\n" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player name is nil @1" +msgstr "3d_armor: Il nome della/del gicatrice/tore è nullo @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "3d_armor: L'inventario della/del giocatrice/tore è nullo @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Detached armor inventory is nil @1" +msgstr "3d_armor: L'inventario staccato dell'armatura è nullo @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor: Il riferimento alla/al giocatrice/tore è nullo @1" + +#: ../3d_armor/armor.lua +msgid "Admin Helmet" +msgstr "Elmo dell'amministratrice/tore" + +#: ../3d_armor/armor.lua +msgid "Admin Chestplate" +msgstr "Corazza dell'amministratrice/tore" + +#: ../3d_armor/armor.lua +msgid "Admin Leggings" +msgstr "Gambali dell'amministratrice/tore" + +#: ../3d_armor/armor.lua +msgid "Admin Boots" +msgstr "Stivali dell'amministratrice/tore" + +#: ../3d_armor/armor.lua +msgid "Wood Helmet" +msgstr "Elmo di legno" + +#: ../3d_armor/armor.lua +msgid "Wood Chestplate" +msgstr "Corazza di legno" + +#: ../3d_armor/armor.lua +msgid "Wood Leggings" +msgstr "Gambali di legno" + +#: ../3d_armor/armor.lua +msgid "Wood Boots" +msgstr "Stivali di legno" + +#: ../3d_armor/armor.lua +msgid "Cactus Helmet" +msgstr "Elmo di cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Chestplate" +msgstr "Corazza di cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Leggings" +msgstr "Gambali di cactus" + +#: ../3d_armor/armor.lua +msgid "Cactus Boots" +msgstr "Stivali di cactus" + +#: ../3d_armor/armor.lua +msgid "Steel Helmet" +msgstr "Elmo di acciaio" + +#: ../3d_armor/armor.lua +msgid "Steel Chestplate" +msgstr "Corazza di acciaio" + +#: ../3d_armor/armor.lua +msgid "Steel Leggings" +msgstr "Gambali di acciaio" + +#: ../3d_armor/armor.lua +msgid "Steel Boots" +msgstr "Stivali di acciaio" + +#: ../3d_armor/armor.lua +msgid "Bronze Helmet" +msgstr "Elmo di bronzo" + +#: ../3d_armor/armor.lua +msgid "Bronze Chestplate" +msgstr "Corazza di bronzo" + +#: ../3d_armor/armor.lua +msgid "Bronze Leggings" +msgstr "Gambali di bronzo" + +#: ../3d_armor/armor.lua +msgid "Bronze Boots" +msgstr "Stivali di bronzo" + +#: ../3d_armor/armor.lua +msgid "Diamond Helmet" +msgstr "Elmo di diamante" + +#: ../3d_armor/armor.lua +msgid "Diamond Chestplate" +msgstr "Corazza di diamante" + +#: ../3d_armor/armor.lua +msgid "Diamond Leggings" +msgstr "Gambali di diamante" + +#: ../3d_armor/armor.lua +msgid "Diamond Boots" +msgstr "Stivali di diamante" + +#: ../3d_armor/armor.lua +msgid "Gold Helmet" +msgstr "Elmo d'oro" + +#: ../3d_armor/armor.lua +msgid "Gold Chestplate" +msgstr "Corazza d'oro" + +#: ../3d_armor/armor.lua +msgid "Gold Leggings" +msgstr "Gambali d'oro" + +#: ../3d_armor/armor.lua +msgid "Gold Boots" +msgstr "Stivali d'oro" + +#: ../3d_armor/armor.lua +msgid "Mithril Helmet" +msgstr "Elmo di mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Chestplate" +msgstr "Corazza di mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Leggings" +msgstr "Gambali di mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Boots" +msgstr "Stivali di mithril" + +#: ../3d_armor/armor.lua +msgid "Crystal Helmet" +msgstr "Elmo di cristallo" + +#: ../3d_armor/armor.lua +msgid "Crystal Chestplate" +msgstr "Corazza di cristallo" + +#: ../3d_armor/armor.lua +msgid "Crystal Leggings" +msgstr "Gambali di cristallo" + +#: ../3d_armor/armor.lua +msgid "Crystal Boots" +msgstr "Stivali di cristallo" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Radiation" +msgstr "Radiazione" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Level" +msgstr "Livello" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Heal" +msgstr "Guarigione" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Fire" +msgstr "Fuoco" + +#: ../3d_armor/init.lua +msgid "Your @1 got destroyed!" +msgstr "Il/i vostro/i @1 è/sono stato/i distrutto/i!" + +#: ../3d_armor/init.lua +msgid "3d_armor: Failed to initialize player" +msgstr "3d_armor: Inizializzazione della/del giocatrice/tore fallita" + +#: ../3d_armor/init.lua +msgid "[3d_armor] Fire Nodes disabled" +msgstr "[3d_armor] Nodi fuoco disabilitati" + +#: ../3d_armor_ip/init.lua +msgid "3d_armor_ip: Mod loaded but unused." +msgstr "3d_armor_ip: Mod caricato ma inutilizzato." + +#: ../3d_armor_ip/init.lua +msgid "Back" +msgstr "Indietro" + +#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua +msgid "Armor" +msgstr "Armatura" + +#: ../3d_armor_sfinv/init.lua +msgid "3d_armor_sfinv: Mod loaded but unused." +msgstr "3d_armor_sfinv: Mod caricato ma inutilizzato." + +#: ../3d_armor_stand/init.lua +msgid "Armor stand top" +msgstr "Parte superiore del supporto per armatura" + +#: ../3d_armor_stand/init.lua +msgid "Armor stand" +msgstr "Supporto per armatura" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand" +msgstr "Supporto per armatura" + +#: ../3d_armor_stand/init.lua +msgid "Locked Armor stand" +msgstr "Supporto per armatura chiuso a chiave" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand (owned by @1)" +msgstr "Supporto per armatura (di proprietà di @1)" + +#: ../3d_armor_ui/init.lua +msgid "3d_armor_ui: Mod loaded but unused." +msgstr "3d_armor_ui: Mod caricato ma inutilizzato." + +#: ../3d_armor_ui/init.lua +msgid "3d Armor" +msgstr "Armatura 3D" + +#: ../3d_armor_ui/init.lua +msgid "Armor not initialized!" +msgstr "Armatura non inizializzata!" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit: Mod caricato ma inutilizzato." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Elmo hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Corazza hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Manica hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Gambali hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "Stivali hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Completo hazmat" + +#: ../shields/init.lua +msgid "Admin Shield" +msgstr "Scudo dell'amministratrice/tore" + +#: ../shields/init.lua +msgid "Wooden Shield" +msgstr "Scudo di legno" + +#: ../shields/init.lua +msgid "Enhanced Wood Shield" +msgstr "Scudo di legno migliorato" + +#: ../shields/init.lua +msgid "Cactus Shield" +msgstr "Scudo di cactus" + +#: ../shields/init.lua +msgid "Enhanced Cactus Shield" +msgstr "Scudo di cactus migliorato" + +#: ../shields/init.lua +msgid "Steel Shield" +msgstr "Scudo di acciaio" + +#: ../shields/init.lua +msgid "Bronze Shield" +msgstr "Scudo di bronzo" + +#: ../shields/init.lua +msgid "Diamond Shield" +msgstr "Scudo di diamante" + +#: ../shields/init.lua +msgid "Gold Shield" +msgstr "Scudo d'oro" + +#: ../shields/init.lua +msgid "Mithril Shield" +msgstr "Scudo di mithril" + +#: ../shields/init.lua +msgid "Crystal Shield" +msgstr "Scudo di cristallo" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor: Mod caricato ma inutilizzato." + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "Piombo" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "Ottone" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "Ghisa" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "Acciaio al carbonio" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "Acciaio inossidabile" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "Stagno" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "Argento" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Elmo" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Corazza" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Gambali" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "Stivali" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Scudo" + +#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string) +#: ../technic_armor/init.lua +msgid "@1 @2" +msgstr "@2 di @1" diff --git a/mods/3d_armor-version-0.4.11/3d_armor/locale/ms.po b/mods/3d_armor-version-0.4.11/3d_armor/locale/ms.po new file mode 100644 index 0000000..c86546f --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/locale/ms.po @@ -0,0 +1,386 @@ +# 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-06 18:20+0200\n" +"PO-Revision-Date: 2018-02-07 13:25+0800\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.6\n" +"Last-Translator: MuhdNurHidayat (MNH48) \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ms\n" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player name is nil @1" +msgstr "3d_armor: Nama pemain tiada nilai @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "3d_armor: Inventori pemain tiada nilai @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Detached armor inventory is nil @1" +msgstr "3d_armor: Inventori perisai terpisah tiada nilai @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor: Rujukan pemain tiada nilai @1" + +#: ../3d_armor/armor.lua +msgid "Admin Helmet" +msgstr "Helmet Pentadbir" + +#: ../3d_armor/armor.lua +msgid "Admin Chestplate" +msgstr "Perisai Dada Pentadbir" + +#: ../3d_armor/armor.lua +msgid "Admin Leggings" +msgstr "Perisai Kaki Pentadbir" + +#: ../3d_armor/armor.lua +msgid "Admin Boots" +msgstr "But Pentadbir" + +#: ../3d_armor/armor.lua +msgid "Wood Helmet" +msgstr "Helmet Kayu" + +#: ../3d_armor/armor.lua +msgid "Wood Chestplate" +msgstr "Perisai Dada Kayu" + +#: ../3d_armor/armor.lua +msgid "Wood Leggings" +msgstr "Perisai Kaki Kayu" + +#: ../3d_armor/armor.lua +msgid "Wood Boots" +msgstr "But Kayu" + +#: ../3d_armor/armor.lua +msgid "Cactus Helmet" +msgstr "Helmet Kaktus" + +#: ../3d_armor/armor.lua +msgid "Cactus Chestplate" +msgstr "Perisai Dada Kaktus" + +#: ../3d_armor/armor.lua +msgid "Cactus Leggings" +msgstr "Perisai Kaki Kaktus" + +#: ../3d_armor/armor.lua +msgid "Cactus Boots" +msgstr "But Kaktus" + +#: ../3d_armor/armor.lua +msgid "Steel Helmet" +msgstr "Helmet Keluli" + +#: ../3d_armor/armor.lua +msgid "Steel Chestplate" +msgstr "Perisai Dada Keluli" + +#: ../3d_armor/armor.lua +msgid "Steel Leggings" +msgstr "Perisai Kaki Keluli" + +#: ../3d_armor/armor.lua +msgid "Steel Boots" +msgstr "But Keluli" + +#: ../3d_armor/armor.lua +msgid "Bronze Helmet" +msgstr "Helmet Gangsa" + +#: ../3d_armor/armor.lua +msgid "Bronze Chestplate" +msgstr "Perisai Dada Gangsa" + +#: ../3d_armor/armor.lua +msgid "Bronze Leggings" +msgstr "Perisai Kaki Gangsa" + +#: ../3d_armor/armor.lua +msgid "Bronze Boots" +msgstr "But Gangsa" + +# 'Diamond' should be translated as 'intan' because the more common word 'berlian' is only specifically used for the gemstone diamond. +#: ../3d_armor/armor.lua +msgid "Diamond Helmet" +msgstr "Helmet Intan" + +#: ../3d_armor/armor.lua +msgid "Diamond Chestplate" +msgstr "Perisai Dada Intan" + +#: ../3d_armor/armor.lua +msgid "Diamond Leggings" +msgstr "Perisai Kaki Intan" + +#: ../3d_armor/armor.lua +msgid "Diamond Boots" +msgstr "But Intan" + +#: ../3d_armor/armor.lua +msgid "Gold Helmet" +msgstr "Helmet Emas" + +#: ../3d_armor/armor.lua +msgid "Gold Chestplate" +msgstr "Perisai Dada Emas" + +#: ../3d_armor/armor.lua +msgid "Gold Leggings" +msgstr "Perisai Kaki Emas" + +#: ../3d_armor/armor.lua +msgid "Gold Boots" +msgstr "But Emas" + +#: ../3d_armor/armor.lua +msgid "Mithril Helmet" +msgstr "Helmet Mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Chestplate" +msgstr "Perisai Dada Mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Leggings" +msgstr "Perisai Kaki Mithril" + +#: ../3d_armor/armor.lua +msgid "Mithril Boots" +msgstr "But Mithril" + +#: ../3d_armor/armor.lua +msgid "Crystal Helmet" +msgstr "Helmet Kristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Chestplate" +msgstr "Perisai Dada Kristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Leggings" +msgstr "Perisai Kaki Kristal" + +#: ../3d_armor/armor.lua +msgid "Crystal Boots" +msgstr "But Kristal" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Radiation" +msgstr "Radiasi" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Level" +msgstr "Tahap" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Heal" +msgstr "Pulih" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Fire" +msgstr "Api" + +#: ../3d_armor/init.lua +msgid "Your @1 got destroyed!" +msgstr "@1 anda telah musnah!" + +#: ../3d_armor/init.lua +msgid "3d_armor: Failed to initialize player" +msgstr "3d_armor: Gagal mengasalkan pemain" + +#: ../3d_armor/init.lua +msgid "[3d_armor] Fire Nodes disabled" +msgstr "[3d_armor] Nod-nod Api dilumpuhkan" + +#: ../3d_armor_ip/init.lua +msgid "3d_armor_ip: Mod loaded but unused." +msgstr "3d_armor_ip: Mods dimuatkan tetapi tidak digunakan." + +#: ../3d_armor_ip/init.lua +msgid "Back" +msgstr "Kembali" + +#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua +msgid "Armor" +msgstr "Perisai" + +#: ../3d_armor_sfinv/init.lua +msgid "3d_armor_sfinv: Mod loaded but unused." +msgstr "3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan." + +#: ../3d_armor_stand/init.lua +msgid "Armor stand top" +msgstr "Bhg atas dirian perisai" + +#: ../3d_armor_stand/init.lua +msgid "Armor stand" +msgstr "Dirian perisai" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand" +msgstr "Dirian Perisai" + +#: ../3d_armor_stand/init.lua +msgid "Locked Armor stand" +msgstr "Dirian perisai Berkunci" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand (owned by @1)" +msgstr "Dirian Perisai (milik @1)" + +#: ../3d_armor_ui/init.lua +msgid "3d_armor_ui: Mod loaded but unused." +msgstr "3d_armor_ui: Mods dimuatkan tetapi tidak digunakan." + +#: ../3d_armor_ui/init.lua +msgid "3d Armor" +msgstr "Perisai 3d" + +#: ../3d_armor_ui/init.lua +msgid "Armor not initialized!" +msgstr "Perisai tidak diasalkan!" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit: Mods dimuatkan tetapi tidak digunakan." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Helmet Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Perisai Dada Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Perisai Tangan Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Perisai Kaki Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "But Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Pakaian Keselamatan" + +#: ../shields/init.lua +msgid "Admin Shield" +msgstr "Perisai Pegang Pentadbir" + +#: ../shields/init.lua +msgid "Wooden Shield" +msgstr "Perisai Pegang Kayu" + +#: ../shields/init.lua +msgid "Enhanced Wood Shield" +msgstr "Perisai Pegang Kayu Kukuh" + +#: ../shields/init.lua +msgid "Cactus Shield" +msgstr "Perisai Pegang Kaktus" + +#: ../shields/init.lua +msgid "Enhanced Cactus Shield" +msgstr "Perisai Pegang Kaktus Kukuh" + +#: ../shields/init.lua +msgid "Steel Shield" +msgstr "Perisai Pegang Keluli" + +#: ../shields/init.lua +msgid "Bronze Shield" +msgstr "Perisai Pegang Gangsa" + +#: ../shields/init.lua +msgid "Diamond Shield" +msgstr "Perisai Pegang Intan" + +#: ../shields/init.lua +msgid "Gold Shield" +msgstr "Perisai Pegang Emas" + +#: ../shields/init.lua +msgid "Mithril Shield" +msgstr "Perisai Pegang Mithril" + +#: ../shields/init.lua +msgid "Crystal Shield" +msgstr "Perisai Pegang Kristal" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor: Mods dimuatkan tetapi tidak digunakan." + +# 'Lead' here is the chemical compound so the translation is 'plumbum', not 'pimpin' (act of leading). +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "Plumbum" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "Loyang" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "Besi Tuang" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "Keluli Karbon" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "Keluli Tahan Karat" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "Timah" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "Perak" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Helmet" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Perisai Dada" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Perisai Kaki" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "But" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Perisai Pegang" + +#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string) +#: ../technic_armor/init.lua +msgid "@1 @2" +msgstr "@2 @1" diff --git a/mods/3d_armor-version-0.4.11/3d_armor/locale/template.pot b/mods/3d_armor-version-0.4.11/3d_armor/locale/template.pot new file mode 100644 index 0000000..20b7504 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/locale/template.pot @@ -0,0 +1,383 @@ +# 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-06 18:20+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" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player name is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Detached armor inventory is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Admin Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Admin Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Admin Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Admin Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Wood Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Wood Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Wood Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Wood Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Cactus Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Cactus Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Cactus Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Cactus Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Steel Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Steel Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Steel Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Steel Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Bronze Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Bronze Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Bronze Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Bronze Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Diamond Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Diamond Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Diamond Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Diamond Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Gold Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Gold Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Gold Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Gold Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Mithril Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Mithril Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Mithril Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Mithril Boots" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Crystal Helmet" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Crystal Chestplate" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Crystal Leggings" +msgstr "" + +#: ../3d_armor/armor.lua +msgid "Crystal Boots" +msgstr "" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Radiation" +msgstr "" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Level" +msgstr "" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Heal" +msgstr "" + +#: ../3d_armor/init.lua ../3d_armor_ui/init.lua +msgid "Fire" +msgstr "" + +#: ../3d_armor/init.lua +msgid "Your @1 got destroyed!" +msgstr "" + +#: ../3d_armor/init.lua +msgid "3d_armor: Failed to initialize player" +msgstr "" + +#: ../3d_armor/init.lua +msgid "[3d_armor] Fire Nodes disabled" +msgstr "" + +#: ../3d_armor_ip/init.lua +msgid "3d_armor_ip: Mod loaded but unused." +msgstr "" + +#: ../3d_armor_ip/init.lua +msgid "Back" +msgstr "" + +#: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua +msgid "Armor" +msgstr "" + +#: ../3d_armor_sfinv/init.lua +msgid "3d_armor_sfinv: Mod loaded but unused." +msgstr "" + +#: ../3d_armor_stand/init.lua +msgid "Armor stand top" +msgstr "" + +#: ../3d_armor_stand/init.lua +msgid "Armor stand" +msgstr "" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand" +msgstr "" + +#: ../3d_armor_stand/init.lua +msgid "Locked Armor stand" +msgstr "" + +#: ../3d_armor_stand/init.lua +msgid "Armor Stand (owned by @1)" +msgstr "" + +#: ../3d_armor_ui/init.lua +msgid "3d_armor_ui: Mod loaded but unused." +msgstr "" + +#: ../3d_armor_ui/init.lua +msgid "3d Armor" +msgstr "" + +#: ../3d_armor_ui/init.lua +msgid "Armor not initialized!" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "" + +#: ../shields/init.lua +msgid "Admin Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Wooden Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Enhanced Wood Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Cactus Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Enhanced Cactus Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Steel Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Bronze Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Diamond Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Gold Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Mithril Shield" +msgstr "" + +#: ../shields/init.lua +msgid "Crystal Shield" +msgstr "" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "" + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "" + +#. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string) +#: ../technic_armor/init.lua +msgid "@1 @2" +msgstr "" diff --git a/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.b3d b/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.b3d new file mode 100644 index 0000000..7c27cae Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.b3d differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.blend b/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.blend new file mode 100644 index 0000000..f61e222 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/models/3d_armor_character.blend differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_trans.png b/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_trans.png new file mode 100644 index 0000000..4a31242 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_trans.png differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_ui_form.png b/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_ui_form.png new file mode 100644 index 0000000..993809f Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/textures/3d_armor_ui_form.png differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/textures/character_preview.png b/mods/3d_armor-version-0.4.11/3d_armor/textures/character_preview.png new file mode 100644 index 0000000..82a0ae4 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/textures/character_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/textures/inventory_plus_armor.png b/mods/3d_armor-version-0.4.11/3d_armor/textures/inventory_plus_armor.png new file mode 100644 index 0000000..f317c70 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/3d_armor/textures/inventory_plus_armor.png differ diff --git a/mods/3d_armor-version-0.4.11/3d_armor/textures/preview_index.txt b/mods/3d_armor-version-0.4.11/3d_armor/textures/preview_index.txt new file mode 100644 index 0000000..9e2fe9d --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/textures/preview_index.txt @@ -0,0 +1,44 @@ +3d_armor/textures/3d_armor_helmet_wood.png:head +3d_armor/textures/3d_armor_chestplate_wood.png:torso +3d_armor/textures/3d_armor_leggings_wood.png:legs +3d_armor/textures/3d_armor_boots_wood.png:feet + +3d_armor/textures/3d_armor_helmet_cactus.png:head +3d_armor/textures/3d_armor_chestplate_cactus.png:torso +3d_armor/textures/3d_armor_leggings_cactus.png:legs +3d_armor/textures/3d_armor_boots_cactus.png:feet + +3d_armor/textures/3d_armor_helmet_steel.png:head +3d_armor/textures/3d_armor_chestplate_steel.png:torso +3d_armor/textures/3d_armor_leggings_steel.png:legs +3d_armor/textures/3d_armor_boots_steel.png:feet + +3d_armor/textures/3d_armor_helmet_bronze.png:head +3d_armor/textures/3d_armor_chestplate_bronze.png:torso +3d_armor/textures/3d_armor_leggings_bronze.png:legs +3d_armor/textures/3d_armor_boots_bronze.png:feet + +3d_armor/textures/3d_armor_helmet_gold.png:head +3d_armor/textures/3d_armor_chestplate_gold.png:torso +3d_armor/textures/3d_armor_leggings_gold.png:legs +3d_armor/textures/3d_armor_boots_gold.png:feet + +3d_armor/textures/3d_armor_helmet_diamond.png:head +3d_armor/textures/3d_armor_chestplate_diamond.png:torso +3d_armor/textures/3d_armor_leggings_diamond.png:legs +3d_armor/textures/3d_armor_boots_diamond.png:feet + +3d_armor/textures/3d_armor_helmet_mithril.png:head +3d_armor/textures/3d_armor_chestplate_mithril.png:torso +3d_armor/textures/3d_armor_leggings_mithril.png:legs +3d_armor/textures/3d_armor_boots_mithril.png:feet + +3d_armor/textures/3d_armor_helmet_crystal.png:head +3d_armor/textures/3d_armor_chestplate_crystal.png:torso +3d_armor/textures/3d_armor_leggings_crystal.png:legs +3d_armor/textures/3d_armor_boots_crystal.png:feet + +3d_armor/textures/3d_armor_helmet_admin.png:head +3d_armor/textures/3d_armor_chestplate_admin.png:torso +3d_armor/textures/3d_armor_leggings_admin.png:legs +3d_armor/textures/3d_armor_boots_admin.png:feet diff --git a/mods/3d_armor-version-0.4.11/3d_armor/tools/updatepo.sh b/mods/3d_armor-version-0.4.11/3d_armor/tools/updatepo.sh new file mode 100644 index 0000000..21ca5b5 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor/tools/updatepo.sh @@ -0,0 +1,25 @@ +#! /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 \ + --language=Lua \ + --sort-by-file \ + --keyword=S \ + --keyword=NS:1,2 \ + --keyword=N_ \ + --keyword=F \ + --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/3d_armor-version-0.4.11/3d_armor_ip/LICENSE.txt b/mods/3d_armor-version-0.4.11/3d_armor_ip/LICENSE.txt new file mode 100644 index 0000000..96ff8c3 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ip/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor integration to inventory plus [3d_armor_ip] +========================================================== + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ip/depends.txt b/mods/3d_armor-version-0.4.11/3d_armor_ip/depends.txt new file mode 100644 index 0000000..e96293b --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ip/depends.txt @@ -0,0 +1,2 @@ +3d_armor +inventory_plus? diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ip/description.txt b/mods/3d_armor-version-0.4.11/3d_armor_ip/description.txt new file mode 100644 index 0000000..01e1b54 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ip/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the inventory plus diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ip/init.lua b/mods/3d_armor-version-0.4.11/3d_armor_ip/init.lua new file mode 100644 index 0000000..ea6fa57 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ip/init.lua @@ -0,0 +1,38 @@ +-- support for i18n +local S = armor_i18n.gettext +local F = armor_i18n.fgettext + +if not minetest.global_exists("inventory_plus") then + minetest.log("warning", S("3d_armor_ip: Mod loaded but unused.")) + return +end + +armor.formspec = "size[8,8.5]button[6,0;2,0.5;main;"..F("Back").."]"..armor.formspec +armor:register_on_update(function(player) + local name = player:get_player_name() + local formspec = armor:get_armor_formspec(name, true) + local page = player:get_inventory_formspec() + if page:find("detached:"..name.."_armor") then + inventory_plus.set_inventory_formspec(player, formspec) + end +end) + +if minetest.get_modpath("crafting") then + inventory_plus.get_formspec = function(player, page) + end +end + +minetest.register_on_joinplayer(function(player) + inventory_plus.register_button(player,"armor", S("Armor")) +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if fields.armor then + local name = armor:get_valid_player(player, "[on_player_receive_fields]") + if not name then + return + end + local formspec = armor:get_armor_formspec(name, true) + inventory_plus.set_inventory_formspec(player, formspec) + end +end) diff --git a/mods/3d_armor-version-0.4.11/3d_armor_sfinv/LICENSE.txt b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/LICENSE.txt new file mode 100644 index 0000000..5b4d955 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor sfinv integration [3d_armor_sfinv] +================================================= + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-version-0.4.11/3d_armor_sfinv/depends.txt b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/depends.txt new file mode 100644 index 0000000..c7beeda --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/depends.txt @@ -0,0 +1,2 @@ +3d_armor +sfinv? diff --git a/mods/3d_armor-version-0.4.11/3d_armor_sfinv/description.txt b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/description.txt new file mode 100644 index 0000000..0ef2ae9 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the sfinv inventory diff --git a/mods/3d_armor-version-0.4.11/3d_armor_sfinv/init.lua b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/init.lua new file mode 100644 index 0000000..a937127 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_sfinv/init.lua @@ -0,0 +1,21 @@ +-- support for i18n +local S = armor_i18n.gettext + +if not minetest.global_exists("sfinv") then + minetest.log("warning", S("3d_armor_sfinv: Mod loaded but unused.")) + return +end + +sfinv.register_page("3d_armor:armor", { + title = S("Armor"), + get = function(self, player, context) + local name = player:get_player_name() + local formspec = armor:get_armor_formspec(name, true) + return sfinv.make_formspec(player, context, formspec, false) + end +}) +armor:register_on_update(function(player) + if sfinv.enabled then + sfinv.set_player_inventory_formspec(player) + end +end) diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ui/LICENSE.txt b/mods/3d_armor-version-0.4.11/3d_armor_ui/LICENSE.txt new file mode 100644 index 0000000..5dd82c8 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ui/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor integration to unified inventory [3d_armor_ui] +============================================================= + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ui/depends.txt b/mods/3d_armor-version-0.4.11/3d_armor_ui/depends.txt new file mode 100644 index 0000000..cf4ccf9 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ui/depends.txt @@ -0,0 +1,2 @@ +3d_armor +unified_inventory? diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ui/description.txt b/mods/3d_armor-version-0.4.11/3d_armor_ui/description.txt new file mode 100644 index 0000000..873f876 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ui/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the unified inventory diff --git a/mods/3d_armor-version-0.4.11/3d_armor_ui/init.lua b/mods/3d_armor-version-0.4.11/3d_armor_ui/init.lua new file mode 100644 index 0000000..69eee9e --- /dev/null +++ b/mods/3d_armor-version-0.4.11/3d_armor_ui/init.lua @@ -0,0 +1,52 @@ +-- support for i18n +local S = armor_i18n.gettext +local F = armor_i18n.fgettext + +if not minetest.global_exists("unified_inventory") then + minetest.log("warning", S("3d_armor_ui: Mod loaded but unused.")) + return +end + +if unified_inventory.sfinv_compat_layer then + return +end + +armor:register_on_update(function(player) + local name = player:get_player_name() + if unified_inventory.current_page[name] == "armor" then + unified_inventory.set_inventory_formspec(player, "armor") + end +end) + +unified_inventory.register_button("armor", { + type = "image", + image = "inventory_plus_armor.png", + tooltip = S("3d Armor") +}) + +unified_inventory.register_page("armor", { + get_formspec = function(player, perplayer_formspec) + local fy = perplayer_formspec.formspec_y + local name = player:get_player_name() + if armor.def[name].init_time == 0 then + return {formspec="label[0,0;"..F("Armor not initialized!").."]"} + end + local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]".. + "label[0,0;"..F("Armor").."]".. + "list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]".. + "image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]".. + "label[5.0,"..(fy + 0.0)..";"..F("Level")..": "..armor.def[name].level.."]".. + "label[5.0,"..(fy + 0.5)..";"..F("Heal")..": "..armor.def[name].heal.."]".. + "listring[current_player;main]".. + "listring[detached:"..name.."_armor;armor]" + if armor.config.fire_protect then + formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. + F("Fire")..": "..armor.def[name].fire.."]" + end + if minetest.global_exists("technic") then + formspec = formspec.."label[5.0,"..(fy + 1.5)..";".. + F("Radiation")..": "..armor.def[name].groups["radiation"].."]" + end + return {formspec=formspec} + end, +}) diff --git a/mods/3d_armor-version-0.4.11/LICENSE.md b/mods/3d_armor-version-0.4.11/LICENSE.md new file mode 100644 index 0000000..56c93cd --- /dev/null +++ b/mods/3d_armor-version-0.4.11/LICENSE.md @@ -0,0 +1,9 @@ +3D Armor - Visible Player Armor +=============================== + +License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 + +Armor Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0 + +Special credit to Jordach and MirceaKitsune for providing the default 3d character model. + diff --git a/mods/3d_armor-version-0.4.11/README.md b/mods/3d_armor-version-0.4.11/README.md new file mode 100644 index 0000000..9cff8a0 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/README.md @@ -0,0 +1,69 @@ +Modpack - 3d Armor [0.4.11] +=========================== + +### Table of Contents + + + + +- [[mod] Visible Player Armor [3d_armor]](#mod-visible-player-armor-3d_armor) +- [[mod] Visible Wielded Items [wieldview]](#mod-visible-wielded-items-wieldview) +- [[mod] Shields [shields]](#mod-shields-shields) +- [[mod] 3d Armor Stand [3d_armor_stand]](#mod-3d-armor-stand-3d_armor_stand) + + + + +[mod] Visible Player Armor [3d_armor] +------------------------------------- + +Minetest Version: 0.4.16 + +Game: minetest_game and many derivatives + +Depends: default + +Adds craftable armor that is visible to other players. Each armor item worn contributes to +a player's armor group level making them less vulnerable to attack. + +Armor takes damage when a player is hurt, however, many armor items offer a 'stackable' +percentage chance of restoring the lost health points. Overall armor level is boosted by 10% +when wearing a full matching set (helmet, chestplate, leggings and boots of the same material) + +Fire protection has been added by TenPlus1 and in use when ethereal mod is found and crystal +armor has been enabled. each piece of armor offers 1 fire protection, level 1 protects +against torches, level 2 against crystal spikes, 3 for fire and 5 protects when in lava. + +Compatible with sfinv, inventory plus or unified inventory by enabling the appropriate +inventory module, [3d_armor_sfinv], [3d_armor_ip] and [3d_armor_ui] respectively. +Also compatible with [smart_inventory] without the need for additional modules. + +built in support player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam +and [simple_skins] by TenPlus1. + +Armor can be configured by adding a file called armor.conf in 3d_armor mod or world directory. +see armor.conf.example for all available options. + +For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods + +[mod] Visible Wielded Items [wieldview] +--------------------------------------- + +Depends: 3d_armor + +Makes hand wielded items visible to other players. + +[mod] Shields [shields] +----------------------- + +Depends: 3d_armor + +Originally a part of 3d_armor, shields have been re-included as an optional extra. +If you do not want shields then simply remove the shields folder from the modpack. + +[mod] 3d Armor Stand [3d_armor_stand] +------------------------------------- + +Depends: 3d_armor + +Adds a chest-like armor stand for armor storage and display. diff --git a/mods/3d_armor-version-0.4.11/description.txt b/mods/3d_armor-version-0.4.11/description.txt new file mode 100644 index 0000000..2da5ba4 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/description.txt @@ -0,0 +1 @@ +Visible player armor & wielded items. diff --git a/mods/3d_armor-version-0.4.11/modern_armor/depends.txt b/mods/3d_armor-version-0.4.11/modern_armor/depends.txt new file mode 100644 index 0000000..ac739a4 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/modern_armor/depends.txt @@ -0,0 +1 @@ +3d_armor \ No newline at end of file diff --git a/mods/3d_armor-version-0.4.11/modern_armor/init.lua b/mods/3d_armor-version-0.4.11/modern_armor/init.lua new file mode 100644 index 0000000..931e4da --- /dev/null +++ b/mods/3d_armor-version-0.4.11/modern_armor/init.lua @@ -0,0 +1,151 @@ +--[[ +modern_armor_loot = +{ +"modern_armor_inv_helmet_biker", "modern_armor_inv_helmet_construction", "modern_armor_inv_helmet_military", "modern_armor_inv_helmet_swat", +"modern_armor_inv_vest_civilian", "modern_armor_inv_vest_military", "modern_armor_inv_vest_police", "modern_armor_inv_vest_swat" +} +--]] +local enable_craft = true + +armor:register_armor("modern_armor:vest_civilian", { + description = ("Civilian Soft Armor"), + inventory_image = "modern_armor_inv_vest_civilian.png", + groups = {armor_torso=1, armor_heal=0, armor_use=800, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=7}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) +armor:register_armor("modern_armor:vest_police", { + description = ("Police Soft Armor"), + inventory_image = "modern_armor_inv_vest_police.png", + groups = {armor_torso=1, armor_heal=0, armor_use=800, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=7}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) +armor:register_armor("modern_armor:vest_swat", { + description = ("SWAT Plate Carrier"), + inventory_image = "modern_armor_inv_vest_swat.png", + groups = {armor_torso=1, armor_heal=0, armor_use=800, + physics_speed=-0.08, physics_gravity=0.08}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) +armor:register_armor("modern_armor:vest_military", { + description = ("Military Plate Carrier"), + inventory_image = "modern_armor_inv_vest_military.png", + groups = {armor_torso=1, armor_heal=0, armor_use=800, + physics_speed=-0.08, physics_gravity=0.08}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) + +armor:register_armor("modern_armor:helmet_swat", { + description = ("SWAT Helmet"), + inventory_image = "modern_armor_inv_helmet_swat.png", + groups = {armor_head=1, armor_heal=0, armor_use=800}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) + +armor:register_armor("modern_armor:helmet_military", { + description = ("Military Helmet"), + inventory_image = "modern_armor_inv_helmet_military.png", + groups = {armor_head=1, armor_heal=0, armor_use=800}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) + +armor:register_armor("modern_armor:helmet_construction", { + description = ("Construction Helmet"), + inventory_image = "modern_armor_inv_helmet_construction.png", + groups = {armor_head=1, armor_heal=0, armor_use=800}, + armor_groups = {fleshy=3}, + + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) +armor:register_armor("modern_armor:helmet_biker", { + description = ("Biker Helmet"), + inventory_image = "modern_armor_inv_helmet_biker.png", + groups = {armor_head=1, armor_heal=0, armor_use=800}, + armor_groups = {fleshy=3}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, +}) + +if enable_craft then +minetest.register_craftitem("modern_armor:kevlar", { + description = "Kevlar", + inventory_image = "modern_armor_kevlar.png", +}) +minetest.register_craft({ + output = "modern_armor:kevlar 4", + recipe = { + {"default:paper","group:wool","default:paper"}, + {"group:wool","default:paper","group:wool"}, + {"default:paper","group:wool","default:paper"} + } +}) +minetest.register_craft({ + output = "modern_armor:vest_civilian", + recipe = { + {"modern_armor:kevlar","","modern_armor:kevlar"}, + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"}, + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"} + } +}) +minetest.register_craft({ + output = "modern_armor:vest_police", + recipe = { + {"modern_armor:kevlar","default:gold_ingot","modern_armor:kevlar"}, + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"}, + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"} + } +}) +minetest.register_craft({ + output = "modern_armor:vest_swat", + recipe = { + {"modern_armor:kevlar","","modern_armor:kevlar"}, + {"modern_armor:kevlar","technic:copper_plate","modern_armor:kevlar"}, + {"modern_armor:kevlar","technic:copper_plate","modern_armor:kevlar"} + } +}) +minetest.register_craft({ + output = "modern_armor:vest_military", + recipe = { + {"modern_armor:kevlar","","modern_armor:kevlar"}, + {"modern_armor:kevlar","technic:composite_plate","modern_armor:kevlar"}, + {"modern_armor:kevlar","technic:composite_plate","modern_armor:kevlar"} + } +}) +minetest.register_craft({ + output = "modern_armor:helmet_swat", + recipe = { + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"}, + {"modern_armor:kevlar","default:glass","modern_armor:kevlar"}, + {"default:steel_ingot","",""} + } +}) +minetest.register_craft({ + output = "modern_armor:helmet_military", + recipe = { + {"modern_armor:kevlar","modern_armor:kevlar","modern_armor:kevlar"}, + {"modern_armor:kevlar","default:glass","modern_armor:kevlar"}, + {"default:steel_ingot","dye:yellow",""} + } +}) +minetest.register_craft({ + output = "modern_armor:helmet_construction", + recipe = { + {"homedecor:plastic_sheeting","homedecor:plastic_sheeting","homedecor:plastic_sheeting"}, + {"homedecor:plastic_sheeting","wool:yellow","homedecor:plastic_sheeting"} + } +}) +minetest.register_craft({ + output = "modern_armor:helmet_biker", + recipe = { + {"homedecor:plastic_sheeting","homedecor:plastic_sheeting","homedecor:plastic_sheeting"}, + {"homedecor:plastic_sheeting","default:glass","homedecor:plastic_sheeting"}, + {"homedecor:plastic_sheeting","wool:black","homedecor:plastic_sheeting"}, + } +}) +end \ No newline at end of file diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker.png new file mode 100644 index 0000000..e823700 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker_preview.png new file mode 100644 index 0000000..3b09848 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_biker_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction.png new file mode 100644 index 0000000..7973e1d Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction_preview.png new file mode 100644 index 0000000..8ece1ca Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_construction_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military.png new file mode 100644 index 0000000..113093d Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military_preview.png new file mode 100644 index 0000000..18e19f0 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_military_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat.png new file mode 100644 index 0000000..650b875 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat_preview.png new file mode 100644 index 0000000..a452d1e Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_helmet_swat_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_biker.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_biker.png new file mode 100644 index 0000000..91a2223 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_biker.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_construction.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_construction.png new file mode 100644 index 0000000..a659bf3 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_construction.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_military.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_military.png new file mode 100644 index 0000000..79761aa Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_military.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_swat.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_swat.png new file mode 100644 index 0000000..fdba96e Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_helmet_swat.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_civilian.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_civilian.png new file mode 100644 index 0000000..7196850 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_civilian.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_military.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_military.png new file mode 100644 index 0000000..60e0d7a Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_military.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_police.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_police.png new file mode 100644 index 0000000..90f3c1e Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_police.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_swat.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_swat.png new file mode 100644 index 0000000..5d75746 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_inv_vest_swat.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_kevlar.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_kevlar.png new file mode 100644 index 0000000..c98d744 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_kevlar.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian.png new file mode 100644 index 0000000..b49261c Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian_preview.png new file mode 100644 index 0000000..51b1760 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_civilian_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military.png new file mode 100644 index 0000000..8c3dd17 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military_preview.png new file mode 100644 index 0000000..b6541cd Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_military_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police.png new file mode 100644 index 0000000..eee97f7 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police_preview.png new file mode 100644 index 0000000..2bd93ff Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_police_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat.png new file mode 100644 index 0000000..fe82e4d Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat.png differ diff --git a/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat_preview.png b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat_preview.png new file mode 100644 index 0000000..3ddec85 Binary files /dev/null and b/mods/3d_armor-version-0.4.11/modern_armor/textures/modern_armor_vest_swat_preview.png differ diff --git a/mods/3d_armor-version-0.4.11/modpack.txt b/mods/3d_armor-version-0.4.11/modpack.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/3d_armor-version-0.4.11/preview_gen.py b/mods/3d_armor-version-0.4.11/preview_gen.py new file mode 100644 index 0000000..a18954d --- /dev/null +++ b/mods/3d_armor-version-0.4.11/preview_gen.py @@ -0,0 +1,81 @@ +#!/usr/bin/python + +import os +import sys +import Image + +try : + arg = sys.argv[1] +except IndexError : + print "Usage: preview_gen.py " + sys.exit(1) + +try : + index = open(arg, "r") +except IOError : + print "Failed to open index file%s" %s (arg) + sys.exit(1) + +preview = [] + +for line in index.readlines() : + if ":" in line : + line = line.rstrip('\n') + preview.append(line.split(':')) + +print "Generating preview images..." +for fn, place in preview : + try : + imi = Image.open(fn) + except IOError : + print "Failed to open %s" % (fn) + sys.exit(1) + + w, h = imi.size + if h != w / 2: + print "Incompatible texture size %s" % (fn) + sys.exit(1) + + s = w / 64 + imo = Image.new("RGBA", (16 * s, 32 * s)) + + if place == "all" or place == "head" : + face = (40 * s, 8 * s, 48 * s, 16 * s) + side_l = (56 * s, 8 * s, 57 * s, 16 * s) + side_r = (63 * s, 8 * s, 64 * s, 16 * s) + imo.paste(imi.crop(side_l), (4 * s, 0, 5 * s, 8 * s)) + imo.paste(imi.crop(side_r), (11 * s, 0, 12 * s, 8 * s)) + imo.paste(imi.crop(face), (4 * s, 0, 12 * s, 8 * s)) + + if place == "all" or place == "torso" : + arm = (44 * s, 20 * s, 48 * s, 32 * s) + body = (20 * s, 20 * s, 28 * s, 32 * s) + imo.paste(imi.crop(arm), (0 * s, 8 * s, 4 * s, 20 * s)) + imo.paste(imi.crop(arm).transpose(Image.FLIP_LEFT_RIGHT), + (12 * s, 8 * s, 16 * s, 20 * s)) + imo.paste(imi.crop(body), (4 * s, 8 * s, 12 * s, 20 * s)) + + if place == "all" or place == "legs" : + leg = (4 * s, 20 * s, 8 * s, 32 * s) + imo.paste(imi.crop(leg), (4 * s, 20 * s, 8 * s, 32 * s)) + imo.paste(imi.crop(leg).transpose(Image.FLIP_LEFT_RIGHT), + (8 * s, 20 * s, 12 * s, 32 * s)) + + if place == "all" or place == "feet" : + boot = (20 * s, 4 * s, 24 * s, 11 * s) + imo.paste(imi.crop(boot), (4 * s, 25 * s, 8 * s, 32 * s)) + imo.paste(imi.crop(boot).transpose(Image.FLIP_LEFT_RIGHT), + (8 * s, 25 * s, 12 * s, 32 * s)) + + size = (32 * s, 64 * s) + imo = imo.resize(size) + + if place == "shield" : + shield = (0, 0, 16 * s, 16 * s) + imo.paste(imi.crop(shield), (16 * s, 32 * s, 32 * s, 48 * s)) + + outfile = fn.replace(".png", "_preview.png") + imo.save(outfile) + print outfile + + diff --git a/mods/3d_armor-version-0.4.11/screenshot.png b/mods/3d_armor-version-0.4.11/screenshot.png new file mode 100644 index 0000000..f568cea Binary files /dev/null and b/mods/3d_armor-version-0.4.11/screenshot.png differ diff --git a/mods/3d_armor-version-0.4.11/wieldview/LICENSE.txt b/mods/3d_armor-version-0.4.11/wieldview/LICENSE.txt new file mode 100644 index 0000000..fff42d8 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] visible wielded items [wieldview] +======================================= + +License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-version-0.4.11/wieldview/README.txt b/mods/3d_armor-version-0.4.11/wieldview/README.txt new file mode 100644 index 0000000..ffa5ef0 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/README.txt @@ -0,0 +1,23 @@ +[mod] visible wielded items [wieldview] +======================================= + +Depends on: 3d_armor + +Makes hand wielded items visible to other players. + +default settings: [minetest.conf] + +# Set number of seconds between visible wielded item updates. +wieldview_update_time = 2 + +# Show nodes as tiles, disabled by default +wieldview_node_tiles = false + + +Info for modders +################ + +Wield image transformation: To apply a simple transformation to the item in +hand, add the group “wieldview_transform” to the item definition. The group +rating equals one of the numbers used for the [transform texture modifier +of the Lua API. diff --git a/mods/3d_armor-version-0.4.11/wieldview/depends.txt b/mods/3d_armor-version-0.4.11/wieldview/depends.txt new file mode 100644 index 0000000..b6cac21 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/depends.txt @@ -0,0 +1 @@ +3d_armor diff --git a/mods/3d_armor-version-0.4.11/wieldview/description.txt b/mods/3d_armor-version-0.4.11/wieldview/description.txt new file mode 100644 index 0000000..0d51ad9 --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/description.txt @@ -0,0 +1 @@ +Makes hand wielded items visible to other players. diff --git a/mods/3d_armor-version-0.4.11/wieldview/init.lua b/mods/3d_armor-version-0.4.11/wieldview/init.lua new file mode 100644 index 0000000..45f9fca --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/init.lua @@ -0,0 +1,83 @@ +local time = 0 +local update_time = tonumber(minetest.settings:get("wieldview_update_time")) +if not update_time then + update_time = 2 + minetest.settings:set("wieldview_update_time", tostring(update_time)) +end +local node_tiles = minetest.settings:get_bool("wieldview_node_tiles") +if not node_tiles then + node_tiles = false + minetest.settings:set("wieldview_node_tiles", "false") +end + +wieldview = { + wielded_item = {}, + transform = {}, +} + +dofile(minetest.get_modpath(minetest.get_current_modname()).."/transform.lua") + +wieldview.get_item_texture = function(self, item) + local texture = "3d_armor_trans.png" + if item ~= "" then + if minetest.registered_items[item] then + if minetest.registered_items[item].inventory_image ~= "" then + texture = minetest.registered_items[item].inventory_image + elseif node_tiles == true and minetest.registered_items[item].tiles + and type(minetest.registered_items[item].tiles[1]) == "string" + and minetest.registered_items[item].tiles[1] ~= "" then + texture = minetest.inventorycube(minetest.registered_items[item].tiles[1]) + end + end + -- Get item image transformation, first from group, then from transform.lua + local transform = minetest.get_item_group(item, "wieldview_transform") + if transform == 0 then + transform = wieldview.transform[item] + end + if transform then + -- This actually works with groups ratings because transform1, transform2, etc. + -- have meaning and transform0 is used for identidy, so it can be ignored + texture = texture.."^[transform"..tostring(transform) + end + end + return texture +end + +wieldview.update_wielded_item = function(self, player) + if not player then + return + end + local name = player:get_player_name() + local stack = player:get_wielded_item() + local item = stack:get_name() + if not item then + return + end + if self.wielded_item[name] then + if self.wielded_item[name] == item then + return + end + armor.textures[name].wielditem = self:get_item_texture(item) + armor:update_player_visuals(player) + end + self.wielded_item[name] = item +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + wieldview.wielded_item[name] = "" + minetest.after(0, function(player) + wieldview:update_wielded_item(player) + end, player) +end) + +minetest.register_globalstep(function(dtime) + time = time + dtime + if time > update_time then + for _,player in ipairs(minetest.get_connected_players()) do + wieldview:update_wielded_item(player) + end + time = 0 + end +end) + diff --git a/mods/3d_armor-version-0.4.11/wieldview/transform.lua b/mods/3d_armor-version-0.4.11/wieldview/transform.lua new file mode 100644 index 0000000..4d5133e --- /dev/null +++ b/mods/3d_armor-version-0.4.11/wieldview/transform.lua @@ -0,0 +1,24 @@ +-- Wielded Item Transformations - http://dev.minetest.net/texture + +wieldview.transform = { + ["default:torch"]="R270", + ["default:sapling"]="R270", + ["flowers:dandelion_white"]="R270", + ["flowers:dandelion_yellow"]="R270", + ["flowers:geranium"]="R270", + ["flowers:rose"]="R270", + ["flowers:tulip"]="R270", + ["flowers:viola"]="R270", + ["bucket:bucket_empty"]="R270", + ["bucket:bucket_water"]="R270", + ["bucket:bucket_lava"]="R270", + ["screwdriver:screwdriver"]="R270", + ["screwdriver:screwdriver1"]="R270", + ["screwdriver:screwdriver2"]="R270", + ["screwdriver:screwdriver3"]="R270", + ["screwdriver:screwdriver4"]="R270", + ["vessels:glass_bottle"]="R270", + ["vessels:drinking_glass"]="R270", + ["vessels:steel_bottle"]="R270", +} + diff --git a/mods/WorldEdit-1.2/.gitignore b/mods/WorldEdit-1.2/.gitignore new file mode 100644 index 0000000..5236e1e --- /dev/null +++ b/mods/WorldEdit-1.2/.gitignore @@ -0,0 +1,2 @@ +*~ + diff --git a/mods/WorldEdit-1.2/ChatCommands.md b/mods/WorldEdit-1.2/ChatCommands.md new file mode 100644 index 0000000..e553648 --- /dev/null +++ b/mods/WorldEdit-1.2/ChatCommands.md @@ -0,0 +1,465 @@ +Chat Commands +------------- +For more information, see the [README](README.md). + +Many commands also have shorter names that can be typed faster. For example, if we wanted to use `//move ? 5`, we could instead type `//m ? 5`. All shortened names are listed below: + +| Short Name | Original Name | +|:-----------|:-------------------| +| `//i` | `//inspect` | +| `//rst` | `//reset` | +| `//mk` | `//mark` | +| `//umk` | `//unmark` | +| `//1` | `//pos1` | +| `//2` | `//pos2` | +| `//fp` | `//fixedpos` | +| `//v` | `//volume` | +| `//s` | `//set` | +| `//r` | `//replace` | +| `//ri` | `//replaceinverse` | +| `//hcube` | `//hollowcube` | +| `//hspr` | `//hollowsphere` | +| `//spr` | `//sphere` | +| `//hdo` | `//hollowdome` | +| `//do` | `//dome` | +| `//hcyl` | `//hollowcylinder` | +| `//cyl` | `//cylinder` | +| `//hpyr` | `//hollowpyramid` | +| `//pyr` | `//pyramid` | + +### `//about` + +Get information about the mod. + + //about + +### `//inspect on/off/1/0/true/false/yes/no/enable/disable/` + +Enable or disable node inspection. + + //inspect on + //inspect off + //inspect 1 + //inspect 0 + //inspect true + //inspect false + //inspect yes + //inspect no + //inspect enable + //inspect disable + //inspect + +### `//reset` + +Reset the region so that it is empty. + + //reset + +### `//mark` + +Show markers at the region positions. + + //mark + +### `//unmark` + +Hide markers if currently shown. + + //unmark + +### `//pos1` + +Set WorldEdit region position 1 to the player's location. + + //pos1 + +### `//pos2` + +Set WorldEdit region position 2 to the player's location. + + //pos2 + +### `//p set/set1/set2/get` + +Set WorldEdit region, WorldEdit position 1, or WorldEdit position 2 by punching nodes, or display the current WorldEdit region. + + //p set + //p set1 + //p set2 + //p get + +### `//fixedpos set1 x y z` + +Set a WorldEdit region position to the position at (``, ``, ``). + + //fixedpos set1 0 0 0 + //fixedpos set1 -30 5 28 + //fixedpos set2 1004 -200 432 + +### `//volume` + +Display the volume of the current WorldEdit region. + + //volume + +### `//deleteblocks` + +Delete the MapBlocks (16x16x16 units) that contain the selected region. This means that mapgen will be invoked for that area. As only whole MapBlocks get removed, the deleted area is usually larger than the selected one. Also, mapgen can trigger mechanisms like mud reflow or cavegen, which affects nodes (up to 112 nodes away) outside the MapBlock, so dont use this near buildings. Note that active entities are not part of a MapBlock and do not get deleted. + + //deleteblocks + +### `//set ` + +Set the current WorldEdit region to ``. + + //set air + //set cactus + //set Blue Lightstone + //set dirt with grass + +### `//param2 ` + +Set the param2 value of all nodes in the current WorldEdit region to ``. + +### `//mix ...` + +Fill the current WorldEdit region with a random mix of ``, `...`. + + //mix air + //mix cactus stone glass sandstone + //mix Bronze + //mix default:cobble air + +### `//replace ` + +Replace all instances of `` with `` in the current WorldEdit region. + + //replace Cobblestone air + //replace lightstone_blue glass + //replace dirt Bronze Block + //replace mesecons:wire_00000000_off flowers:flower_tulip + +### `//replaceinverse ` + +Replace all nodes other than `` with `` in the current WorldEdit region. + + //replaceinverse Cobblestone air + //replaceinverse flowers:flower_waterlily glass + //replaceinverse dirt Bronze Block + //replaceinverse mesecons:wire_00000000_off flowers:flower_tulip + +### `//hollowcube ` + +Adds a hollow cube with its ground level centered at WorldEdit position 1 with dimensions `` x `` x ``, composed of ``. + + //hollowcube 6 5 6 Diamond Block + +### `//cube ` + +Adds a cube with its ground level centered at WorldEdit position 1 with dimensions `` x `` x ``, composed of ``. + + //cube 6 5 6 Diamond Block + //cube 7 2 1 default:cobble + +### `//hollowsphere ` + +Add hollow sphere centered at WorldEdit position 1 with radius ``, composed of ``. + + //hollowsphere 5 Diamond Block + //hollowsphere 12 glass + //hollowsphere 17 mesecons:wire_00000000_off + +### `//sphere ` + +Add sphere centered at WorldEdit position 1 with radius ``, composed of ``. + + //sphere 5 Diamond Block + //sphere 12 glass + //sphere 17 mesecons:wire_00000000_off + +### `//hollowdome ` + +Add hollow dome centered at WorldEdit position 1 with radius ``, composed of ``. + + //hollowdome 5 Diamond Block + //hollowdome -12 glass + //hollowdome 17 mesecons:wire_00000000_off + +### `//dome ` + +Add dome centered at WorldEdit position 1 with radius ``, composed of ``. + + //dome 5 Diamond Block + //dome -12 glass + //dome 17 mesecons:wire_00000000_off + +### `//hollowcylinder x/y/z/? [radius2] ` + +Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length ``, base radius `` (and top radius `[radius2]`), composed of ``. + +Despite its name this command allows you to create cones (`radius2` = 0) as well as any shapes inbetween (0 < `radius2` < `radius1`). +Swapping `radius1` and `radius2` will create the same object but upside-down. + + //hollowcylinder x +5 8 Bronze Block + //hollowcylinder y 28 10 glass + //hollowcylinder z -12 3 mesecons:wire_00000000_off + //hollowcylinder ? 2 4 default:stone + + //hollowcylinder y 10 10 0 walls:cobble + //hollowcylinder x 6 0 5 Dirt + //hollowcylinder z 20 10 20 default:desert_stone + +### `//cylinder x/y/z/? [radius2] ` + +Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length ``, base radius `` (and top radius `[radius2]`), composed of ``. +Can also create shapes other than cylinders, e.g. cones (see documentation above). + + //cylinder x +5 8 Bronze Block + //cylinder y 28 10 glass + //cylinder z -12 3 mesecons:wire_00000000_off + //cylinder ? 2 4 default:stone + + //cylinder y 10 10 0 walls:cobble + //cylinder x 6 0 5 Dirt + //cylinder z 20 10 20 default:desert_stone + +### `//hollowpyramid x/y/z? ` + +Add hollow pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height ``, composed of ``. + + //hollowpyramid x 8 Diamond Block + //hollowpyramid y -5 glass + //hollowpyramid z 2 mesecons:wire_00000000_off + //hollowpyramid ? 12 mesecons:wire_00000000_off + +### `//pyramid x/y/z? ` + +Add pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height ``, composed of ``. + + //pyramid x 8 Diamond Block + //pyramid y -5 glass + //pyramid z 2 mesecons:wire_00000000_off + //pyramid ? 12 mesecons:wire_00000000_off + +### `//spiral ` + +Add spiral centered at WorldEdit position 1 with side length ``, height ``, space between walls ``, composed of ``. + + //spiral 20 5 3 Diamond Block + //spiral 5 2 1 glass + //spiral 7 1 5 mesecons:wire_00000000_off + +### `//copy x/y/z/? ` + +Copy the current WorldEdit region along the x/y/z/? axis by `` nodes. + + //copy x 15 + //copy y -7 + //copy z +4 + //copy ? 8 + +### `//move x/y/z/? ` + +Move the current WorldEdit positions and region along the x/y/z/? axis by `` nodes. + + //move x 15 + //move y -7 + //move z +4 + //move ? -1 + +### `//stack x/y/z/? ` + +Stack the current WorldEdit region along the x/y/z/? axis `` times. + + //stack x 3 + //stack y -1 + //stack z +5 + //stack ? 12 + +### `//stack2 ` + +Stack the current WorldEdit region `` times by offset ``, ``, ``. + + //stack2 5 3 8 2 + //stack2 1 -1 -1 -1 + +### `//scale ` + +Scale the current WorldEdit positions and region by a factor of positive integer `` with position 1 as the origin. + + //scale 2 + //scale 1 + //scale 10 + +### `//transpose x/y/z/? x/y/z/?` + +Transpose the current WorldEdit positions and region along the x/y/z/? and x/y/z/? axes. + + //transpose x y + //transpose x z + //transpose y z + //transpose ? y + +### `//flip x/y/z/?` + +Flip the current WorldEdit region along the x/y/z/? axis. + + //flip x + //flip y + //flip z + //flip ? + +### `//rotate x/y/z/? ` + +Rotate the current WorldEdit positions and region along the x/y/z/? axis by angle `` (90 degree increment). + + //rotate x 90 + //rotate y 180 + //rotate z 270 + //rotate ? -90 + +### `//orient ` + +Rotate oriented nodes in the current WorldEdit region around the Y axis by angle `` (90 degree increment) + + //orient 90 + //orient 180 + //orient 270 + //orient -90 + +### `//fixlight` + +Fixes the lighting in the current WorldEdit region. + + //fixlight + +### `//drain` + +Removes any fluid node within the current WorldEdit region. + + //drain + +### `//hide` + +Hide all nodes in the current WorldEdit region non-destructively. + + //hide + +### `//suppress ` + +Suppress all in the current WorldEdit region non-destructively. + + //suppress Diamond Block + //suppress glass + //suppress mesecons:wire_00000000_off + +### `//highlight ` + +Highlight in the current WorldEdit region by hiding everything else non-destructively. + + //highlight Diamond Block + //highlight glass + //highlight mesecons:wire_00000000_off + +### `//restore` + +Restores nodes hidden with WorldEdit in the current WorldEdit region. + + //restore + +### `//save ` + +Save the current WorldEdit region to "(world folder)/schems/``.we". + + //save some random filename + //save huge_base + +### `//allocate ` + +Set the region defined by nodes from "(world folder)/schems/``.we" as the current WorldEdit region. + + //allocate some random filename + //allocate huge_base + +### `//load ` + +Load nodes from "(world folder)/schems/``.we" with position 1 of the current WorldEdit region as the origin. + + //load some random filename + //load huge_base + +### `//lua ` + +Executes `` as a Lua chunk in the global namespace. + + //lua worldedit.pos1["singleplayer"] = {x=0, y=0, z=0} + //lua worldedit.rotate(worldedit.pos1["singleplayer"], worldedit.pos2["singleplayer"], "y", 90) + +### `//luatransform ` + +Executes `` as a Lua chunk in the global namespace with the variable pos available, for each node in the current WorldEdit region. + + //luatransform minetest.add_node(pos, {name="default:stone"}) + //luatransform if minetest.get_node(pos).name == "air" then minetest.add_node(pos, {name="default:water_source"}) + +### `//mtschemcreate ` + +Save the current WorldEdit region using the Minetest Schematic format to "(world folder)/schems/``.mts". + + //mtschemcreate some random filename + //mtschemcreate huge_base + +### `//mtschemplace ` + +Load nodes from "(world folder)/schems/``.mts" with position 1 of the current WorldEdit region as the origin. + + //mtschemplace some random filename + //mtschemplace huge_base + +### `//mtschemprob start/finish/get` + +After using `//mtschemprob start` all nodes punched will bring up a text field where a probablity can be entered. +This mode can be left with `//mtschemprob finish`. `//mtschemprob get` will display the probabilities saved for the nodes. + + //mtschemprob get + +### `//clearobjects` + +Clears all objects within the WorldEdit region. + + //clearobjects + +### `//shift x/y/z/?/up/down/left/right/front/back [+|-]` + +Shifts the selection area by `[+|-]` without touching its contents. The shifting axis can be absolute (`x/y/z`) or +relative (`up/down/left/right/front/back`). + + //shift left 5 + +### `//expand [+|-]x/y/z/?/up/down/left/right/front/back [reverse-amount]` + +Expands the selection by `` in the selected absolute or relative axis. If specified, the selection can be expanded in the +opposite direction over the same axis by `[reverse-amount]`. + + //expand right 7 5 + +### `//contract [+|-]x/y/z/?/up/down/left/right/front/back [reverse-amount]` + +Contracts the selection by `` in the selected absolute or relative axis. If specified, the selection can be contracted in the +opposite direction over the same axis by `[reverse-amount]`. + + //expand right 7 5 + +### `//outset [hv] ` + +Expands the selection in all directions by ``. If specified, the selection can be expanded horizontally in the x and z axes `[h]` +or vertically in the y axis `[v]`. + + //outset v 5 + +### `//inset [hv] ` + +Contracts the selection in all directions by ``. If specified, the selection can be contracted horizontally in the x and z axes `[h]` +or vertically in the y axis `[v]`. + + //outset v 5 diff --git a/mods/WorldEdit-1.2/LICENSE.txt b/mods/WorldEdit-1.2/LICENSE.txt new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/mods/WorldEdit-1.2/LICENSE.txt @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/mods/WorldEdit-1.2/README.md b/mods/WorldEdit-1.2/README.md new file mode 100644 index 0000000..c781e57 --- /dev/null +++ b/mods/WorldEdit-1.2/README.md @@ -0,0 +1,161 @@ +WorldEdit v1.2 +============== +The ultimate in-game world editing tool for [Minetest](http://minetest.net/)! Tons of functionality to help with building, fixing, and more. + +For more information, see the [forum topic](https://forum.minetest.net/viewtopic.php?id=572) at the Minetest forums. + +# New users should see the [tutorial](Tutorial.md). + +![Screenshot](http://i.imgur.com/lwhodrv.png) + +Installing +---------- + +If you are using Windows, consider installing this mod using [MODSTER](https://forum.minetest.net/viewtopic.php?id=6497), a super simple mod installer that will take care of everything for you. If you are using MODSTER, skip directly to step 6 in the instructions below. + +There is a nice installation guide over at the [Minetest Wiki](http://wiki.minetest.com/wiki/Installing_mods). Here is a short summary: + +1. Download the mod from the [official releases page](https://github.com/Uberi/Minetest-WorldEdit/releases). The download links are labelled "Source Code". If you are using Windows, you will probably want to download the ZIP version. +2. You should have a file named `SOMETHING.zip` or `SOMETHING.tar.gz`. +3. Extract this file using your archiver of choice. If you are using Windows, open the ZIP file and move the folder inside to a safe place outside of the ZIP file. +4. Make sure that you now have a folder with a file named README.md inside it. If you just have another folder inside this folder, use this nested folder instead. +5. Move this folder into the `MINETEST_FOLDER/mods` folder, where `MINETEST_FOLDER` is the folder Minetest is located in. +6. Open Minetest to a world selection screen. +7. Select a world you want to use WorldEdit in by left clicking on it once, and press the **Configure** button. +8. You should have a mod selection screen. Select the one named something like `Minetest-WorldEdit` by left clicking once and press the **Enable MP** button. +9. Press the **Save** button. You can now use WorldEdit in that world. Repeat steps 7 to 9 to enable WorldEdit for other worlds too. + +If you are having trouble, try asking for help in the [IRC channel](http://webchat.freenode.net/?channels=#minetest) (faster but may not always have helpers online) or ask on the [forum topic](https://forum.minetest.net/viewtopic.php?id=572) (slower but more likely to get help). + +Usage +----- +WorldEdit works primarily through the WorldEdit GUI and chat commands. Depending on your key bindings, you can invoke chat entry with the "t" key, and open the chat console with the "F10" key. + +WorldEdit has a huge potential for abuse by untrusted players. Therefore, users will not be able to use WorldEdit unless they have the `worldedit` privelege. This is available by default in single player, but in multiplayer the permission must be explicitly given by someone with the right credentials, using the follwoing chat command: `/grant worldedit`. This privelege can later be removed using the following chat command: `/revoke worldedit`. + +Certain functions/commands such as WorldEdit `//lua` and `//luatransform` chat commands additionally require the `server` privilege. This is because it is extremely dangerous to give access to these commands to untrusted players, since they essentially are able to control the computer the server is running on. Give this privilege only to people you trust with your computer. + +For in-game information about these commands, type `/help ` in the chat. For example, to learn more about the `//copy` command, simply type `/help /copy` to display information relevant to copying a region. + +Interface +--------- +WorldEdit is accessed in-game in two main ways. + +The GUI adds a screen to each player's inventory that gives access to various WorldEdit functions. The [tutorial](Tutorial.md) and the [Chat Commands Reference](ChatCommands.md) may be helpful in learning to use it. + +The chat interface adds many chat commands that perform various WorldEdit powered tasks. It is documented in the [Chat Commands Reference](ChatCommands.md). + +Compatibility +------------- +This mod supports Minetest versions 0.4.8 and newer. Older versions of WorldEdit may work with older versions of Minetest, but are not recommended or supported. + +WorldEdit works quite well with other mods, and does not have any known mod conflicts. + +WorldEdit GUI requires one of [sfinv](https://github.com/minetest/minetest_game/tree/master/mods/sfinv) (included in minetest_game since 0.4.15), [Unified Inventory](https://forum.minetest.net/viewtopic.php?id=3933) or [Inventory++](https://forum.minetest.net/viewtopic.php?id=6204). + +If you use any other inventory manager mods, note that they may conflict with the WorldEdit GUI. If this is the case, it may be necessary to disable them. + +WorldEdit API +------------- +WorldEdit exposes all significant functionality in a simple Lua interface. + +Adding WorldEdit to the file "depends.txt" in your mod gives you access to all of the `worldedit` functions. The API is useful for tasks such as high-performance node manipulation, alternative interfaces, and map creation. + +AGPLv3 compatible mods may further include WorldEdit files in their own mods. This may be useful if a modder wishes to completely avoid any dependencies on WorldEdit. Note that it is required to give credit to the authors. + +This API is documented in the [WorldEdit API Reference](WorldEdit%20API.md). + +Axes +---- +The coordinate system is the same as that used by Minetest; positive Y is upwards, positive X is rightwards, and positive Z is forwards, if a player is facing North (positive Z axis). + +When an axis is specified in a WorldEdit chat command, it is specified as one of the following values: `x`, `y`, `z`, or `?`. + +In the GUI, there is a dropdown menu for this purpose. The "Look direction" option has the same effect as `?` does in chat commands. + +The value `?` represents the axis the player is currently facing. If the player is facing more than one axis, the axis the player face direction is closest to will be used. + +Nodes +----- +Node names are required for many types of commands that identify or modify specific types of nodes. They can be specified in a number of ways. + +First, by description - the tooltip that appears when hovering over the item in an inventory. This is case insensitive and includes values such as "Cobblestone" and "bronze block". Note that certain commands (namely, `//replace` and `//replaceinverse`) do not support descriptions that contain spaces in the `` field. + +Second, by name - the node name that is defined by code, but without the mod name prefix. This is case sensitive and includes values such as "piston_normal_off" and "cactus". Nodes defined in the `default` mod always take precedence over other nodes when searching for the correct one, and if there are multiple possible nodes (such as "a:celery" and "b:celery"), one is chosen in no particular order. + +Finally, by full name - the unambiguous identifier of the node, prefixes and all. This is case sensitive and includes values such as "default:stone" and "mesecons:wire_00000000_off". + +The node name "air" can be used anywhere a normal node name can, and acts as a blank node. This is useful for clearing or removing nodes. For example, `//set air` would remove all the nodes in the current WorldEdit region. Similarly, `//sphere 10 air`, when WorldEdit position 1 underground, would dig a large sphere out of the ground. + +Regions +------- +Most WorldEdit commands operate on regions. Regions are a set of two positions that define a 3D cuboid. They are local to each player and chat commands affect only the region for the player giving the commands. + +Each positions together define two opposing corners of the cube. With two opposing corners it is possible to determine both the location and dimensions of the region. + +Regions are not saved between server restarts. They start off as empty regions, and cannot be used with most WorldEdit commands until they are set to valid values. + +Markers +------- +Entities are used to mark the location of the WorldEdit regions. They appear as boxes containing the number 1 or 2, and represent position 1 and 2 of the WorldEdit region, respectively. + +To remove the entities, simply punch them. This does not reset the positions themselves. + +Schematics +---------- +WorldEdit supports two different types of schematics. + +The first is the WorldEdit Schematic format, with the file extension ".we", and in some older versions, ".wem". There have been several previous versions of the WorldEdit Schematic format, but WorldEdit is capable of loading any past versions, and will always support them - there is no need to worry about schematics becoming obselete. + +As of version 5, WorldEdit schematics include a header. The header is seperated from the content by a colon (`:`). It contains fields seperated by commas (`,`). Currently only one field is used, which contains the version in ASCII decimal. + +The current version of the WorldEdit Schematic format is essentially an array of node data tables in Lua 5.1 table syntax preceded by a header. +Specifically it looks like this: + + 5:return { + { + y = , + x = , + z = , + name = , + param1 = , + param2 = , + meta = , + }, + <...> + } + + +The ordering of the values and minor aspects of the syntax, such as trailing commas or newlines, are not guaranteed to stay the same in future versions. + +The WorldEdit Schematic format is accessed via the WorldEdit API, or WorldEdit serialization chat commands such as `//serialize` and `//deserialize`. + +The second is the Minetest Schematic format (MTS). The details of this format may be found in the Minetest documentation and are out of the scope of this document. Access to this format is done via specialized MTS commands such as `//mtschemcreate` and `//mtschemplace`. + +Authors +------- +WorldEdit would not be possible without the contributions of many developers and designers. Below, they are listed alphabetically: + + cheapie + cornernote + cyisfor + danierukun + electricface + est31 + kaeza + khonkhortisan + pickardjoe + Sebastien Ponce + sfan5 + ShadowNinja + spillz + Uberi/Temperest + +License +------- +Copyright 2013 sfan5, Anthony Zhang (Uberi/Temperest), and Brett O'Donnell (cornernote). + +This mod is licensed under the [GNU Affero General Public License](http://www.gnu.org/licenses/agpl-3.0.html). + +Basically, this means everyone is free to use, modify, and distribute the files, as long as these modifications are also licensed the same way. +Most importantly, the Affero variant of the GPL requires you to publish your modifications in source form, even if the mod is run only on the server, and not distributed. diff --git a/mods/WorldEdit-1.2/Tutorial.md b/mods/WorldEdit-1.2/Tutorial.md new file mode 100644 index 0000000..bcac1aa --- /dev/null +++ b/mods/WorldEdit-1.2/Tutorial.md @@ -0,0 +1,120 @@ +WorldEdit Tutorial +================== +This is a step-by-step tutorial outlining the basic usage of WorldEdit. For more information, see the [README](README.md). + +Let's start with a few assumptions: + +* You have a compatible version of Minetest working. + * See the [README](README.md) for compatibility information. +* You have WorldEdit installed as a mod. + * If using Windows, [MODSTER](https://forum.minetest.net/viewtopic.php?pid=101463) makes installing mods totally painless. + * Simply download the file, extract the archive, and move it to the correct mod folder for Minetest. + * See the installation instructions in [README](README.md) if you need more details. +* You are familiar with the basics of the game. + * How to walk, jump, and climb. + * How to dig, place, and punch blocks. + * One of the following: + * How to type into the chat and read text from it. + * How to open the inventory screen and press buttons on it. + +Overview +-------- +WorldEdit has a "region", which is simply a cuboid area defined by two markers, both of which the player can move around. Every player can have their own region with their own two markers. + +WorldEdit GUI buttons and chat commands generally work inside the region selected, or around the first marker. + +If you are using the chat commands, follow the steps under **Chat Commands**. If you are using the WorldEdit GUI, follow the steps under **WorldEdit GUI**. + +Step 1: Selecting a region +-------------------------- +### Chat Commands + +In the chat prompt, enter `//p set`. In the chat, you are prompted to punch two nodes to set the positions of the two markers. + +Punch a nearby node. Be careful of breakable ones such as torches. A black cube reading "1" will appear around the node. This is the marker for WorldEdit position 1. + +Walk away from the node you just punched. Now, punch another node. A black cube reading "2" will appear around the node. This is the marker for WorldEdit position 2. + +### WorldEdit GUI + +Open the main WorldEdit GUI from your inventory screen. The icon looks like a globe with a red dot in the center. + +Press the "Get/Set Positions" button. On the new screen, press the "Set Position 1" button. The inventory screen should close. + +Punch a nearby node. Be careful of breakable ones such as torches. A black cube reading "1" will appear around the node. This is the marker for WorldEdit position 1. + +Walk away from the node you just punched. Open your inventory again. It should be on the same page as it was before. + +Press the "Set Position 2" button. The inventory screen should close. + +Now, punch another node. A black cube reading "2" will appear around the node. This is the marker for WorldEdit position 2. + +Step 2: Region commands +----------------------- +### Chat Commands + +In the chat prompt, enter `//set mese`. In the chat, you will see a message showing the number of nodes set after a small delay. + +Look at the place between the two markers: it is now filled with MESE blocks! + +The `//set ` command fills the region with whatever node you want. It is a region-oriented command, which means it works inside the WorldEdit region only. + +Now, try a few different variations, such as `//set torch`, `//set cobble`, and `//set water`. + +### WorldEdit GUI + +Open the main WorldEdit GUI from your inventory screen. + +Press the "Set Nodes" button. You should see a new screen with various options for setting nodes. + +Enter "mese" in the "Name" field. Press Search if you would like to see what the node you just entered looks like. + +Press the "Set Nodes" button on this screen. In the chat, you will see a message showing the number of nodes set after a small delay. + +Look at the place between the two markers: it is now filled with MESE blocks! + +The "Set Nodes" function fills the region with whatever node you want. It is a region-oriented command, which means it works inside the WorldEdit region only. + +Now, try a few different variations on the node name, such as "torch", "cobble", and "water". + +Step 3: Position commands +------------------------- +### Chat Commands + +In the chat prompt, enter `//hollowdome 30 glass`. In the chat, you will see a message showing the number of nodes set after a small delay. + +Look around marker 1: it is now surrounded by a hollow glass dome! + +The `//hollowdome ` command creates a hollow dome centered around marker 1, made of any node you want. It is a position-oriented command, which means it works around marker 1 and can go outside the WorldEdit region. + +### WorldEdit GUI + +Open the main WorldEdit GUI from your inventory screen. + +Press the "Sphere/Dome" button. You should see a new screen with various options for making spheres or domes. + +Enter "glass" in the "Name" field. Press Search if you would like to see what the node you just entered looks like. + +Enter "30" in the "Radius" field. + +Press the "Hollow Dome" button on this screen. In the chat, you will see a message showing the number of nodes added after a small delay. + +Look around marker 1: it is now surrounded by a hollow glass dome! + +The "Hollow Dome" function creates a hollow dome centered around marker 1, made of any node you want. It is a position-oriented command, which means it works around marker 1 and can go outside the WorldEdit region. + +Step 4: Other commands +---------------------- +### Chat Commands + +There are many more commands than what is shown here. See the [Chat Commands Reference](ChatCommands.md) for a detailed list of them, along with descriptions and examples for every single one. + +If you're in-game and forgot how a command works, just use the `/help ` command, without the first forward slash. For example, to see some information about the `//set ` command mentioned earlier, simply use `/help /set`. + +A very useful command to check out is the `//save ` command, which can save everything inside the WorldEdit region to a file, stored on the computer hosting the server (the player's computer, in single player mode). You can then later use `//load ` to load the data in a file into a world, even another world on another computer. + +### WorldEdit GUI + +This only scratches the surface of what WorldEdit is capable of. Most of the functions in the WorldEdit GUI correspond to chat commands, and so the [Chat Commands Reference](ChatCommands.md) may be useful if you get stuck. + +It is helpful to explore the various buttons in the interface and check out what they do. Learning the chat command interface is also useful if you use WorldEdit intensively - an experienced chat command user can usually work faster than an experienced WorldEdit GUI user. \ No newline at end of file diff --git a/mods/WorldEdit-1.2/WorldEdit API.md b/mods/WorldEdit-1.2/WorldEdit API.md new file mode 100644 index 0000000..f1a69d5 --- /dev/null +++ b/mods/WorldEdit-1.2/WorldEdit API.md @@ -0,0 +1,237 @@ +WorldEdit API +============= +The WorldEdit API is composed of multiple modules, each of which is independent and can be used without the other. Each module is contained within a single file. + +If needed, individual modules such as visualization.lua can be removed without affecting the rest of the program. The only file that cannot be removed is init.lua, which is necessary for the mod to run. + +For more information, see the [README](README.md). + +General +------- + +### value = worldedit.version + +Contains the current version of WorldEdit in a table of the form `{major=MAJOR_INTEGER, minor=MINOR_INTEGER}`, where `MAJOR_INTEGER` is the major version (the number before the period) as an integer, and `MINOR_INTEGER` is the minor version (the number after the period) as an integer. This is intended for version checking purposes. + +### value = worldedit.version_string + +Contains the current version of WorldEdit in the form of a string `"MAJOR_INTEGER.MINOR_INTEGER"`, where `MAJOR_INTEGER` is the major version (the number before the period) as an integer, and `MINOR_INTEGER` is the minor version (the number after the period) as an integer. This is intended for display purposes. + +Manipulations +------------- +Contained in manipulations.lua, this module allows several node operations to be applied over a region. + +### count = worldedit.set(pos1, pos2, node_name) + +Sets a region defined by positions `pos1` and `pos2` to `node_name`. To clear a region, use "air" as the value of `node_name`. + +Returns the number of nodes set. + +### `count = worldedit.set_param2(pos1, pos2, param2)` + +Sets the param2 values of all nodes in a region defined by positions `pos1` and `pos2` to `param2`. + +Returns the number of nodes set. + +### count = worldedit.replace(pos1, pos2, searchnode, replacenode) + +Replaces all instances of `searchnode` with `replacenode` in a region defined by positions `pos1` and `pos2`. + +Returns the number of nodes replaced. + +### count = worldedit.replaceinverse(pos1, pos2, searchnode, replacenode) + +Replaces all nodes other than `searchnode` with `replacenode` in a region defined by positions `pos1` and `pos2`. + +Returns the number of nodes replaced. + +### count = worldedit.copy(pos1, pos2, axis, amount) + +Copies the region defined by positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z") by `amount` nodes. + +Returns the number of nodes copied. + +### count = worldedit.copy2(pos1, pos2, off) + +Copies the region defined by positions `pos1` and `pos2` by the offset vector `off`. + +Returns the number of nodes copied. + +### count = worldedit.move(pos1, pos2, axis, amount) + +Moves the region defined by positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z") by `amount` nodes. + +Returns the number of nodes moved. + +### count = worldedit.stack(pos1, pos2, axis, count) + +Duplicates the region defined by positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z") `count` times. + +Returns the number of nodes stacked. + +### count = worldedit.stack2(pos1, pos2, direction, amount) + +Duplicates the region defined by positions `pos1` and `pos2` `amount` times with offset vector `direction`. + +Returns the number of nodes stacked. + +### count, newpos1, newpos2 = worldedit.stretch(pos1, pos2, stretchx, stretchy, stretchz) + +Stretches the region defined by positions `pos1` and `pos2` by an factor of positive integers `stretchx`, `stretchy`. and `stretchz` along the X, Y, and Z axes, respectively, with `pos1` as the origin. + +Returns the number of nodes stretched, the new scaled position 1, and the new scaled position 2. + +### count, newpos1, newpos2 = worldedit.transpose(pos1, pos2, axis1, axis2) + +Transposes a region defined by the positions `pos1` and `pos2` between the `axis1` and `axis2` axes ("x" or "y" or "z"). + +Returns the number of nodes transposed, the new transposed position 1, and the new transposed position 2. + +### count = worldedit.flip(pos1, pos2, axis) + +Flips a region defined by the positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z"). + +Returns the number of nodes flipped. + +### count, newpos2, newpos2 = worldedit.rotate(pos1, pos2, angle) + +Rotates a region defined by the positions `pos1` and `pos2` by `angle` degrees clockwise around the y axis (supporting 90 degree increments only). + +Returns the number of nodes rotated, the new position 1, and the new position 2. + +### count = worldedit.orient(pos1, pos2, angle) + +Rotates all oriented nodes in a region defined by the positions `pos1` and `pos2` by `angle` degrees clockwise (90 degree increment) around the Y axis. + +Returns the number of nodes oriented. + +### count = worldedit.fixlight(pos1, pos2) + +Fixes the lighting in a region defined by positions `pos1` and `pos2`. + +Returns the number of nodes updated. + +### count = worldedit.clearobjects(pos1, pos2) + +Clears all objects in a region defined by the positions `pos1` and `pos2`. + +Returns the number of objects cleared. + +Primitives +---------- +Contained in primitives.lua, this module allows the creation of several geometric primitives. + +### count = worldedit.cube(pos, width, height, length, node_name, hollow) + +Adds a cube with its ground level centered at `pos`, the dimensions `width` x `height` x `length`, composed of `node_name`. + +Returns the number of nodes added. + +### count = worldedit.sphere(pos, radius, node_name, hollow) + +Adds a sphere centered at `pos` with radius `radius`, composed of `node_name`. + +Returns the number of nodes added. + +### count = worldedit.dome(pos, radius, node_name, hollow) + +Adds a dome centered at `pos` with radius `radius`, composed of `node_name`. + +Returns the number of nodes added. + +### count = worldedit.cylinder(pos, axis, length, radius1, radius2, node_name, hollow) + +Adds a cylinder-like at `pos` along the `axis` axis ("x" or "y" or "z") with length `length`, base radius `radius1` and top radius `radius2`, composed of `node_name`. + +Returns the number of nodes added. + +### count = worldedit.pyramid(pos, axis, height, node_name, hollow) + +Adds a pyramid centered at `pos` along the `axis` axis ("x" or "y" or "z") with height `height`, composed of `node_name`. + +Returns the number of nodes added. + +### count = worldedit.spiral(pos, length, height, spacer, node_name) + +Adds a spiral centered at `pos` with side length `length`, height `height`, space between walls `spacer`, composed of `node_name`. + +Returns the number of nodes added. + +Visualization +------------- +Contained in visualization.lua, this module allows nodes to be visualized in different ways. + +### volume = worldedit.volume(pos1, pos2) + +Determines the volume of the region defined by positions `pos1` and `pos2`. + +Returns the volume. + +### count = worldedit.hide(pos1, pos2) + +Hides all nodes in a region defined by positions `pos1` and `pos2` by non-destructively replacing them with invisible nodes. + +Returns the number of nodes hidden. + +### count = worldedit.suppress(pos1, pos2, node_name) + +Suppresses all instances of `node_name` in a region defined by positions `pos1` and `pos2` by non-destructively replacing them with invisible nodes. + +Returns the number of nodes suppressed. + +### count = worldedit.highlight(pos1, pos2, node_name) + +Highlights all instances of `node_name` in a region defined by positions `pos1` and `pos2` by non-destructively hiding all other nodes. + +Returns the number of nodes found. + +### count = worldedit.restore(pos1, pos2) + +Restores all nodes hidden with WorldEdit functions in a region defined by positions `pos1` and `pos2`. + +Returns the number of nodes restored. + +Serialization +------------- +Contained in serialization.lua, this module allows regions of nodes to be serialized and deserialized to formats suitable for use outside MineTest. + +### version, extra_fields, content = worldedit.read_header(value) + +Reads the header from serialized data `value`. + +Returns the version as a positive integer (nil for unknown versions), +extra header fields (nil if not supported), and the content after the header. + +### data, count = worldedit.serialize(pos1, pos2) + +Converts the region defined by positions `pos1` and `pos2` into a single string. + +Returns the serialized data and the number of nodes serialized, or nil. + +### pos1, pos2, count = worldedit.allocate(origin_pos, value) + +Determines the volume the nodes represented by string `value` would occupy if deserialized at `origin_pos`. + +Returns the two corner positions and the number of nodes, or nil. + +### count = worldedit.deserialize(origin_pos, value) + +Loads the nodes represented by string `value` at position `origin_pos`. + +Returns the number of nodes deserialized or nil. + +Code +---- +Contained in code.lua, this module allows arbitrary Lua code to be used with WorldEdit. + +### error = worldedit.lua(code) + +Executes `code` as a Lua chunk in the global namespace. + +Returns an error if the code fails or nil otherwise. + +### error = worldedit.luatransform(pos1, pos2, code) + +Executes `code` as a Lua chunk in the global namespace with the variable `pos` available, for each node in a region defined by positions `pos1` and `pos2`. + +Returns an error if the code fails or nil otherwise. diff --git a/mods/WorldEdit-1.2/config.ld b/mods/WorldEdit-1.2/config.ld new file mode 100644 index 0000000..69be224 --- /dev/null +++ b/mods/WorldEdit-1.2/config.ld @@ -0,0 +1,12 @@ +project = "WorldEdit" +title = "WorldEdit API Documentation" +description = "Minetest mod to mass-modify nodes" +format = "markdown" +file = {"worldedit"} +topics = { + "README.md", + "Tutorial.md", + "ChatCommands.md", + "LICENSE.txt" +} + diff --git a/mods/WorldEdit-1.2/modpack.txt b/mods/WorldEdit-1.2/modpack.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/WorldEdit-1.2/worldedit/code.lua b/mods/WorldEdit-1.2/worldedit/code.lua new file mode 100644 index 0000000..48c992e --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/code.lua @@ -0,0 +1,52 @@ +--- Lua code execution functions. +-- @module worldedit.code + +--- Executes `code` as a Lua chunk in the global namespace. +-- @return An error message if the code fails, or nil on success. +function worldedit.lua(code) + local func, err = loadstring(code) + if not func then -- Syntax error + return err + end + local good, err = pcall(func) + if not good then -- Runtime error + return err + end + return nil +end + + +--- Executes `code` as a Lua chunk in the global namespace with the variable +-- pos available, for each node in a region defined by positions `pos1` and +-- `pos2`. +-- @return An error message if the code fails, or nil on success. +function worldedit.luatransform(pos1, pos2, code) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local factory, err = loadstring("return function(pos) " .. code .. " end") + if not factory then -- Syntax error + return err + end + local func = factory() + + worldedit.keep_loaded(pos1, pos2) + + local pos = {x=pos1.x, y=0, z=0} + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local good, err = pcall(func, pos) + if not good then -- Runtime error + return err + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return nil +end + diff --git a/mods/WorldEdit-1.2/worldedit/common.lua b/mods/WorldEdit-1.2/worldedit/common.lua new file mode 100644 index 0000000..be9a2c9 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/common.lua @@ -0,0 +1,114 @@ +--- Common functions [INTERNAL]. All of these functions are internal! +-- @module worldedit.common + +--- Copies and modifies positions `pos1` and `pos2` so that each component of +-- `pos1` is less than or equal to the corresponding component of `pos2`. +-- Returns the new positions. +function worldedit.sort_pos(pos1, pos2) + pos1 = {x=pos1.x, y=pos1.y, z=pos1.z} + pos2 = {x=pos2.x, y=pos2.y, z=pos2.z} + if pos1.x > pos2.x then + pos2.x, pos1.x = pos1.x, pos2.x + end + if pos1.y > pos2.y then + pos2.y, pos1.y = pos1.y, pos2.y + end + if pos1.z > pos2.z then + pos2.z, pos1.z = pos1.z, pos2.z + end + return pos1, pos2 +end + + +--- Determines the volume of the region defined by positions `pos1` and `pos2`. +-- @return The volume. +function worldedit.volume(pos1, pos2) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + return (pos2.x - pos1.x + 1) * + (pos2.y - pos1.y + 1) * + (pos2.z - pos1.z + 1) +end + + +--- Gets other axes given an axis. +-- @raise Axis must be x, y, or z! +function worldedit.get_axis_others(axis) + if axis == "x" then + return "y", "z" + elseif axis == "y" then + return "x", "z" + elseif axis == "z" then + return "x", "y" + else + error("Axis must be x, y, or z!") + end +end + + +function worldedit.keep_loaded(pos1, pos2) + local manip = minetest.get_voxel_manip() + manip:read_from_map(pos1, pos2) +end + + +local mh = {} +worldedit.manip_helpers = mh + + +--- Generates an empty VoxelManip data table for an area. +-- @return The empty data table. +function mh.get_empty_data(area) + -- Fill emerged area with ignore so that blocks in the area that are + -- only partially modified aren't overwriten. + local data = {} + local c_ignore = minetest.get_content_id("ignore") + for i = 1, worldedit.volume(area.MinEdge, area.MaxEdge) do + data[i] = c_ignore + end + return data +end + + +function mh.init(pos1, pos2) + local manip = minetest.get_voxel_manip() + local emerged_pos1, emerged_pos2 = manip:read_from_map(pos1, pos2) + local area = VoxelArea:new({MinEdge=emerged_pos1, MaxEdge=emerged_pos2}) + return manip, area +end + + +function mh.init_radius(pos, radius) + local pos1 = vector.subtract(pos, radius) + local pos2 = vector.add(pos, radius) + return mh.init(pos1, pos2) +end + + +function mh.init_axis_radius(base_pos, axis, radius) + return mh.init_axis_radius_length(base_pos, axis, radius, radius) +end + + +function mh.init_axis_radius_length(base_pos, axis, radius, length) + local other1, other2 = worldedit.get_axis_others(axis) + local pos1 = { + [axis] = base_pos[axis], + [other1] = base_pos[other1] - radius, + [other2] = base_pos[other2] - radius + } + local pos2 = { + [axis] = base_pos[axis] + length, + [other1] = base_pos[other1] + radius, + [other2] = base_pos[other2] + radius + } + return mh.init(pos1, pos2) +end + + +function mh.finish(manip, data) + -- Update map + manip:set_data(data) + manip:write_to_map() + manip:update_map() +end + diff --git a/mods/WorldEdit-1.2/worldedit/compatibility.lua b/mods/WorldEdit-1.2/worldedit/compatibility.lua new file mode 100644 index 0000000..1f6e02b --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/compatibility.lua @@ -0,0 +1,74 @@ +--- Compatibility functions. +-- @module worldedit.compatibility + +local function deprecated(new_func) + local info = debug.getinfo(1, "n") + local msg = "worldedit." .. info.name .. "() is deprecated." + if new_func then + msg = msg .. " Use worldedit." .. new_func .. "() instead." + end + minetest.log("deprecated", msg) +end + +worldedit.allocate_old = worldedit.allocate + +worldedit.deserialize_old = worldedit.deserialize + +function worldedit.metasave(pos1, pos2, filename) + deprecated("save") + local file, err = io.open(filename, "wb") + if err then return 0 end + local data, count = worldedit.serialize(pos1, pos2) + file:write(data) + file:close() + return count +end + +function worldedit.metaload(originpos, filename) + deprecated("load") + filename = minetest.get_worldpath() .. "/schems/" .. file .. ".wem" + local file, err = io.open(filename, "wb") + if err then return 0 end + local data = file:read("*a") + return worldedit.deserialize(originpos, data) +end + +function worldedit.scale(pos1, pos2, factor) + deprecated("stretch") + return worldedit.stretch(pos1, pos2, factor, factor, factor) +end + +function worldedit.valueversion(value) + deprecated("read_header") + local version = worldedit.read_header(value) + if not version or version > worldedit.LATEST_SERIALIZATION_VERSION then + return 0 + end + return version +end + +function worldedit.replaceinverse(pos1, pos2, search_node, replace_node) + deprecated("replace") + return worldedit.replace(pos1, pos2, search_node, replace_node, true) +end + +function worldedit.clearobjects(...) + deprecated("clear_objects") + return worldedit.clear_objects(...) +end + +function worldedit.hollow_sphere(pos, radius, node_name) + deprecated("sphere") + return worldedit.sphere(pos, radius, node_name, true) +end + +function worldedit.hollow_dome(pos, radius, node_name) + deprecated("dome") + return worldedit.dome(pos, radius, node_name, true) +end + +function worldedit.hollow_cylinder(pos, axis, length, radius, node_name) + deprecated("cylinder") + return worldedit.cylinder(pos, axis, length, radius, node_name, true) +end + diff --git a/mods/WorldEdit-1.2/worldedit/cuboid.lua b/mods/WorldEdit-1.2/worldedit/cuboid.lua new file mode 100644 index 0000000..ce20761 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/cuboid.lua @@ -0,0 +1,258 @@ +-- Expands or contracts the cuboid in all axes by amount (positive or negative) +worldedit.cuboid_volumetric_expand = function(name, amount) + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + + if pos1 == nil or pos2 == nil then + return false, "Undefined cuboid" + end + + local delta1 = vector.new() + local delta2 = vector.new() + local delta_dir1 + local delta_dir2 + + delta1 = vector.add(delta1, amount) + delta2 = vector.add(delta2, amount) + delta_dir1, delta_dir2 = worldedit.get_expansion_directions(pos1, pos2) + delta1 = vector.multiply(delta1, delta_dir1) + delta2 = vector.multiply(delta2, delta_dir2) + worldedit.pos1[name] = vector.add(pos1, delta1) + worldedit.pos2[name] = vector.add(pos2, delta2) + + return true +end + + +-- Expands or contracts the cuboid in a single axis by amount (positive or negative) +worldedit.cuboid_linear_expand = function(name, axis, direction, amount) + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + + if pos1 == nil or pos2 == nil then + return false, "undefined cuboid" + end + + if direction ~= 1 and direction ~= -1 then + return false, "invalid marker" + end + + local marker = worldedit.marker_get_closest_to_axis(name, axis, direction) + local deltavect = vector.new() + + if axis == 'x' then + deltavect.x = amount * direction + elseif axis == 'y' then + deltavect.y = amount * direction + elseif axis == 'z' then + deltavect.z = amount * direction + else + return false, "invalid axis" + end + + worldedit.marker_move(name, marker, deltavect) + return true +end + + +-- Shifts the cuboid by '+-amount' in axis 'axis' +worldedit.cuboid_shift = function(name, axis, amount) + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + + if pos1 == nil or pos2 == nil then + return false, "undefined cuboid" + end + + if axis == 'x' then + worldedit.pos1[name].x = pos1.x + amount + worldedit.pos2[name].x = pos2.x + amount + elseif axis == 'y' then + worldedit.pos1[name].y = pos1.y + amount + worldedit.pos2[name].y = pos2.y + amount + elseif axis == 'z' then + worldedit.pos1[name].z = pos1.z + amount + worldedit.pos2[name].z = pos2.z + amount + else + return false, "invalid axis" + end + + return true +end + + +-- Moves the location of a single marker by adding deltavector +worldedit.marker_move = function(name, marker, deltavector) + if marker ~= 1 and marker ~= 2 then + return false + end + + if marker == 1 then + local pos = worldedit.pos1[name] + worldedit.pos1[name] = vector.add(deltavector, pos) + else + local pos = worldedit.pos2[name] + worldedit.pos2[name] = vector.add(deltavector, pos) + end + + return true +end + +-- Updates the location ingame of the markers +worldedit.marker_update = function(name, marker) + if marker == nil then + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + elseif marker == 1 then + worldedit.mark_pos1(name) + elseif marker == 2 then + worldedit.mark_pos2(name) + else + minetest.debug( + "worldedit: Invalid execution of function update_markers") + end +end + + +-- Returns two vectors with the directions for volumetric expansion +worldedit.get_expansion_directions = function(mark1, mark2) + if mark1 == nil or mark2 == nil then + return + end + local dir1 = vector.new() + local dir2 = vector.new() + + if mark1.x < mark2.x then + dir1.x = -1 + dir2.x = 1 + else + dir1.x = 1 + dir2.x = -1 + end + if mark1.y < mark2.y then + dir1.y = -1 + dir2.y = 1 + else + dir1.y = 1 + dir2.y = -1 + end + if mark1.z < mark2.z then + dir1.z = -1 + dir2.z = 1 + else + dir1.z = 1 + dir2.z = -1 + end + return dir1, dir2 +end + + +-- Return the marker that is closest to the player +worldedit.marker_get_closest_to_player = function(name) + local playerpos = minetest.get_player_by_name(name):getpos() + local dist1 = vector.distance(playerpos, worldedit.pos1[name]) + local dist2 = vector.distance(playerpos, worldedit.pos2[name]) + + if dist1 < dist2 then + return 1 + else + return 2 + end +end + + +-- Returns the closest marker to the specified axis and direction +worldedit.marker_get_closest_to_axis = function(name, axis, direction) + local pos1 = vector.new() + local pos2 = vector.new() + + if direction ~= 1 and direction ~= -1 then + return nil + end + + if axis == 'x' then + pos1.x = worldedit.pos1[name].x * direction + pos2.x = worldedit.pos2[name].x * direction + if pos1.x > pos2.x then + return 1 + else + return 2 + end + elseif axis == 'y' then + pos1.y = worldedit.pos1[name].y * direction + pos2.y = worldedit.pos2[name].y * direction + if pos1.y > pos2.y then + return 1 + else + return 2 + end + elseif axis == 'z' then + pos1.z = worldedit.pos1[name].z * direction + pos2.z = worldedit.pos2[name].z * direction + if pos1.z > pos2.z then + return 1 + else + return 2 + end + else + return nil + end +end + + +-- Translates up, down, left, right, front, back to their corresponding axes and +-- directions according to faced direction +worldedit.translate_direction = function(name, direction) + local axis, dir = worldedit.player_axis(name) + local resaxis, resdir + + if direction == "up" then + return 'y', 1 + end + + if direction == "down" then + return 'y', -1 + end + + if direction == "front" then + if axis == "y" then + resaxis = nil + resdir = nil + else + resaxis = axis + resdir = dir + end + end + + if direction == "back" then + if axis == "y" then + resaxis = nil + resdir = nil + else + resaxis = axis + resdir = -dir + end + end + + if direction == "left" then + if axis == 'x' then + resaxis = 'z' + resdir = dir + elseif axis == 'z' then + resaxis = 'x' + resdir = -dir + end + end + + if direction == "right" then + if axis == 'x' then + resaxis = 'z' + resdir = -dir + elseif axis == 'z' then + resaxis = 'x' + resdir = dir + end + end + + return resaxis, resdir +end \ No newline at end of file diff --git a/mods/WorldEdit-1.2/worldedit/init.lua b/mods/WorldEdit-1.2/worldedit/init.lua new file mode 100644 index 0000000..8c828c2 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/init.lua @@ -0,0 +1,48 @@ +--- Worldedit. +-- @module worldedit +-- @release 1.2 +-- @copyright 2013 sfan5, Anthony Zhang (Uberi/Temperest), and Brett O'Donnell (cornernote). +-- @license GNU Affero General Public License version 3 (AGPLv3) +-- @author sfan5 +-- @author Anthony Zang (Uberi/Temperest) +-- @author Bret O'Donnel (cornernote) +-- @author ShadowNinja + + +worldedit = {} + +local ver = {major=1, minor=2} +worldedit.version = ver +worldedit.version_string = string.format("%d.%d", ver.major, ver.minor) + +if not minetest.get_voxel_manip then + local err_msg = "This version of WorldEdit requires Minetest 0.4.8 or later! You have an old version." + minetest.log("error", string.rep("#", 128)) + minetest.log("error", err_msg) + minetest.log("error", string.rep("#", 128)) + error(err_msg) +end + +local path = minetest.get_modpath(minetest.get_current_modname()) + +local function load_module(path) + local file = io.open(path, "r") + if not file then return end + file:close() + return dofile(path) +end + +dofile(path .. "/common.lua") +load_module(path .. "/manipulations.lua") +load_module(path .. "/primitives.lua") +load_module(path .. "/visualization.lua") +load_module(path .. "/serialization.lua") +load_module(path .. "/code.lua") +load_module(path .. "/compatibility.lua") +load_module(path .. "/cuboid.lua") + + +if minetest.setting_getbool("log_mods") then + print("[WorldEdit] Loaded!") +end + diff --git a/mods/WorldEdit-1.2/worldedit/manipulations.lua b/mods/WorldEdit-1.2/worldedit/manipulations.lua new file mode 100644 index 0000000..c73fbb6 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/manipulations.lua @@ -0,0 +1,649 @@ +--- Generic node manipulations. +-- @module worldedit.manipulations + +local mh = worldedit.manip_helpers + + +--- Sets a region to `node_names`. +-- @param pos1 +-- @param pos2 +-- @param node_names Node name or list of node names. +-- @return The number of nodes set. +function worldedit.set(pos1, pos2, node_names) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local manip, area = mh.init(pos1, pos2) + local data = mh.get_empty_data(area) + + if type(node_names) == "string" then -- Only one type of node + local id = minetest.get_content_id(node_names) + -- Fill area with node + for i in area:iterp(pos1, pos2) do + data[i] = id + end + else -- Several types of nodes specified + local node_ids = {} + for i, v in ipairs(node_names) do + node_ids[i] = minetest.get_content_id(v) + end + -- Fill area randomly with nodes + local id_count, rand = #node_ids, math.random + for i in area:iterp(pos1, pos2) do + data[i] = node_ids[rand(id_count)] + end + end + + mh.finish(manip, data) + + return worldedit.volume(pos1, pos2) +end + +--- Sets param2 of a region. +-- @param pos1 +-- @param pos2 +-- @param param2 Value of param2 to set +-- @return The number of nodes set. +function worldedit.set_param2(pos1, pos2, param2) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local manip, area = mh.init(pos1, pos2) + local param2_data = manip:get_param2_data() + + -- Set param2 for every node + for i in area:iterp(pos1, pos2) do + param2_data[i] = param2 + end + + -- Update map + manip:set_param2_data(param2_data) + manip:write_to_map() + manip:update_map() + + return worldedit.volume(pos1, pos2) +end + +--- Replaces all instances of `search_node` with `replace_node` in a region. +-- When `inverse` is `true`, replaces all instances that are NOT `search_node`. +-- @return The number of nodes replaced. +function worldedit.replace(pos1, pos2, search_node, replace_node, inverse) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local manip, area = mh.init(pos1, pos2) + local data = manip:get_data() + + local search_id = minetest.get_content_id(search_node) + local replace_id = minetest.get_content_id(replace_node) + + local count = 0 + + --- TODO: This could be shortened by checking `inverse` in the loop, + -- but that would have a speed penalty. Is the penalty big enough + -- to matter? + if not inverse then + for i in area:iterp(pos1, pos2) do + if data[i] == search_id then + data[i] = replace_id + count = count + 1 + end + end + else + for i in area:iterp(pos1, pos2) do + if data[i] ~= search_id then + data[i] = replace_id + count = count + 1 + end + end + end + + mh.finish(manip, data) + + return count +end + + +--- Duplicates a region `amount` times with offset vector `direction`. +-- Stacking is spread across server steps, one copy per step. +-- @return The number of nodes stacked. +function worldedit.stack2(pos1, pos2, direction, amount, finished) + local i = 0 + local translated = {x=0, y=0, z=0} + local function next_one() + if i < amount then + i = i + 1 + translated.x = translated.x + direction.x + translated.y = translated.y + direction.y + translated.z = translated.z + direction.z + worldedit.copy2(pos1, pos2, translated) + minetest.after(0, next_one) + else + if finished then + finished() + end + end + end + next_one() + return worldedit.volume(pos1, pos2) * amount +end + + +--- Copies a region along `axis` by `amount` nodes. +-- @param pos1 +-- @param pos2 +-- @param axis Axis ("x", "y", or "z") +-- @param amount +-- @return The number of nodes copied. +function worldedit.copy(pos1, pos2, axis, amount) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local get_node, get_meta, set_node = minetest.get_node, + minetest.get_meta, minetest.set_node + -- Copy things backwards when negative to avoid corruption. + -- FIXME: Lots of code duplication here. + if amount < 0 then + local pos = {} + pos.x = pos1.x + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) -- Obtain current node + local meta = get_meta(pos):to_table() -- Get meta of current node + local value = pos[axis] -- Store current position + pos[axis] = value + amount -- Move along axis + set_node(pos, node) -- Copy node to new position + get_meta(pos):from_table(meta) -- Set metadata of new node + pos[axis] = value -- Restore old position + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + else + local pos = {} + pos.x = pos2.x + while pos.x >= pos1.x do + pos.y = pos2.y + while pos.y >= pos1.y do + pos.z = pos2.z + while pos.z >= pos1.z do + local node = get_node(pos) -- Obtain current node + local meta = get_meta(pos):to_table() -- Get meta of current node + local value = pos[axis] -- Store current position + pos[axis] = value + amount -- Move along axis + set_node(pos, node) -- Copy node to new position + get_meta(pos):from_table(meta) -- Set metadata of new node + pos[axis] = value -- Restore old position + pos.z = pos.z - 1 + end + pos.y = pos.y - 1 + end + pos.x = pos.x - 1 + end + end + return worldedit.volume(pos1, pos2) +end + +--- Copies a region by offset vector `off`. +-- @param pos1 +-- @param pos2 +-- @param off +-- @return The number of nodes copied. +function worldedit.copy2(pos1, pos2, off) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local get_node, get_meta, set_node = minetest.get_node, + minetest.get_meta, minetest.set_node + local pos = {} + pos.x = pos2.x + while pos.x >= pos1.x do + pos.y = pos2.y + while pos.y >= pos1.y do + pos.z = pos2.z + while pos.z >= pos1.z do + local node = get_node(pos) -- Obtain current node + local meta = get_meta(pos):to_table() -- Get meta of current node + local newpos = vector.add(pos, off) -- Calculate new position + set_node(newpos, node) -- Copy node to new position + get_meta(newpos):from_table(meta) -- Set metadata of new node + pos.z = pos.z - 1 + end + pos.y = pos.y - 1 + end + pos.x = pos.x - 1 + end + return worldedit.volume(pos1, pos2) +end + +--- Moves a region along `axis` by `amount` nodes. +-- @return The number of nodes moved. +function worldedit.move(pos1, pos2, axis, amount) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + --- TODO: Move slice by slice using schematic method in the move axis + -- and transfer metadata in separate loop (and if the amount is + -- greater than the length in the axis, copy whole thing at a time and + -- erase original after, using schematic method). + local get_node, get_meta, set_node, remove_node = minetest.get_node, + minetest.get_meta, minetest.set_node, minetest.remove_node + -- Copy things backwards when negative to avoid corruption. + --- FIXME: Lots of code duplication here. + if amount < 0 then + local pos = {} + pos.x = pos1.x + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) -- Obtain current node + local meta = get_meta(pos):to_table() -- Get metadata of current node + remove_node(pos) -- Remove current node + local value = pos[axis] -- Store current position + pos[axis] = value + amount -- Move along axis + set_node(pos, node) -- Move node to new position + get_meta(pos):from_table(meta) -- Set metadata of new node + pos[axis] = value -- Restore old position + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + else + local pos = {} + pos.x = pos2.x + while pos.x >= pos1.x do + pos.y = pos2.y + while pos.y >= pos1.y do + pos.z = pos2.z + while pos.z >= pos1.z do + local node = get_node(pos) -- Obtain current node + local meta = get_meta(pos):to_table() -- Get metadata of current node + remove_node(pos) -- Remove current node + local value = pos[axis] -- Store current position + pos[axis] = value + amount -- Move along axis + set_node(pos, node) -- Move node to new position + get_meta(pos):from_table(meta) -- Set metadata of new node + pos[axis] = value -- Restore old position + pos.z = pos.z - 1 + end + pos.y = pos.y - 1 + end + pos.x = pos.x - 1 + end + end + return worldedit.volume(pos1, pos2) +end + + +--- Duplicates a region along `axis` `amount` times. +-- Stacking is spread across server steps, one copy per step. +-- @param pos1 +-- @param pos2 +-- @param axis Axis direction, "x", "y", or "z". +-- @param count +-- @return The number of nodes stacked. +function worldedit.stack(pos1, pos2, axis, count) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + local length = pos2[axis] - pos1[axis] + 1 + if count < 0 then + count = -count + length = -length + end + local amount = 0 + local copy = worldedit.copy + local i = 1 + function next_one() + if i <= count then + i = i + 1 + amount = amount + length + copy(pos1, pos2, axis, amount) + minetest.after(0, next_one) + end + end + next_one() + return worldedit.volume(pos1, pos2) * count +end + + +--- Stretches a region by a factor of positive integers along the X, Y, and Z +-- axes, respectively, with `pos1` as the origin. +-- @param pos1 +-- @param pos2 +-- @param stretch_x Amount to stretch along X axis. +-- @param stretch_y Amount to stretch along Y axis. +-- @param stretch_z Amount to stretch along Z axis. +-- @return The number of nodes scaled. +-- @return The new scaled position 1. +-- @return The new scaled position 2. +function worldedit.stretch(pos1, pos2, stretch_x, stretch_y, stretch_z) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + -- Prepare schematic of large node + local get_node, get_meta, place_schematic = minetest.get_node, + minetest.get_meta, minetest.place_schematic + local placeholder_node = {name="", param1=255, param2=0} + local nodes = {} + for i = 1, stretch_x * stretch_y * stretch_z do + nodes[i] = placeholder_node + end + local schematic = {size={x=stretch_x, y=stretch_y, z=stretch_z}, data=nodes} + + local size_x, size_y, size_z = stretch_x - 1, stretch_y - 1, stretch_z - 1 + + local new_pos2 = { + x = pos1.x + (pos2.x - pos1.x) * stretch_x + size_x, + y = pos1.y + (pos2.y - pos1.y) * stretch_y + size_y, + z = pos1.z + (pos2.z - pos1.z) * stretch_z + size_z, + } + worldedit.keep_loaded(pos1, new_pos2) + + local pos = {x=pos2.x, y=0, z=0} + local big_pos = {x=0, y=0, z=0} + while pos.x >= pos1.x do + pos.y = pos2.y + while pos.y >= pos1.y do + pos.z = pos2.z + while pos.z >= pos1.z do + local node = get_node(pos) -- Get current node + local meta = get_meta(pos):to_table() -- Get meta of current node + + -- Calculate far corner of the big node + local pos_x = pos1.x + (pos.x - pos1.x) * stretch_x + local pos_y = pos1.y + (pos.y - pos1.y) * stretch_y + local pos_z = pos1.z + (pos.z - pos1.z) * stretch_z + + -- Create large node + placeholder_node.name = node.name + placeholder_node.param2 = node.param2 + big_pos.x, big_pos.y, big_pos.z = pos_x, pos_y, pos_z + place_schematic(big_pos, schematic) + + -- Fill in large node meta + if next(meta.fields) ~= nil or next(meta.inventory) ~= nil then + -- Node has meta fields + for x = 0, size_x do + for y = 0, size_y do + for z = 0, size_z do + big_pos.x = pos_x + x + big_pos.y = pos_y + y + big_pos.z = pos_z + z + -- Set metadata of new node + get_meta(big_pos):from_table(meta) + end + end + end + end + pos.z = pos.z - 1 + end + pos.y = pos.y - 1 + end + pos.x = pos.x - 1 + end + return worldedit.volume(pos1, pos2) * stretch_x * stretch_y * stretch_z, pos1, new_pos2 +end + + +--- Transposes a region between two axes. +-- @return The number of nodes transposed. +-- @return The new transposed position 1. +-- @return The new transposed position 2. +function worldedit.transpose(pos1, pos2, axis1, axis2) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local compare + local extent1, extent2 = pos2[axis1] - pos1[axis1], pos2[axis2] - pos1[axis2] + + if extent1 > extent2 then + compare = function(extent1, extent2) + return extent1 > extent2 + end + else + compare = function(extent1, extent2) + return extent1 < extent2 + end + end + + -- Calculate the new position 2 after transposition + local new_pos2 = {x=pos2.x, y=pos2.y, z=pos2.z} + new_pos2[axis1] = pos1[axis1] + extent2 + new_pos2[axis2] = pos1[axis2] + extent1 + + local upper_bound = {x=pos2.x, y=pos2.y, z=pos2.z} + if upper_bound[axis1] < new_pos2[axis1] then upper_bound[axis1] = new_pos2[axis1] end + if upper_bound[axis2] < new_pos2[axis2] then upper_bound[axis2] = new_pos2[axis2] end + worldedit.keep_loaded(pos1, upper_bound) + + local pos = {x=pos1.x, y=0, z=0} + local get_node, get_meta, set_node = minetest.get_node, + minetest.get_meta, minetest.set_node + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local extent1, extent2 = pos[axis1] - pos1[axis1], pos[axis2] - pos1[axis2] + if compare(extent1, extent2) then -- Transpose only if below the diagonal + local node1 = get_node(pos) + local meta1 = get_meta(pos):to_table() + local value1, value2 = pos[axis1], pos[axis2] -- Save position values + pos[axis1], pos[axis2] = pos1[axis1] + extent2, pos1[axis2] + extent1 -- Swap axis extents + local node2 = get_node(pos) + local meta2 = get_meta(pos):to_table() + set_node(pos, node1) + get_meta(pos):from_table(meta1) + pos[axis1], pos[axis2] = value1, value2 -- Restore position values + set_node(pos, node2) + get_meta(pos):from_table(meta2) + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return worldedit.volume(pos1, pos2), pos1, new_pos2 +end + + +--- Flips a region along `axis`. +-- @return The number of nodes flipped. +function worldedit.flip(pos1, pos2, axis) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + --- TODO: Flip the region slice by slice along the flip axis using schematic method. + local pos = {x=pos1.x, y=0, z=0} + local start = pos1[axis] + pos2[axis] + pos2[axis] = pos1[axis] + math.floor((pos2[axis] - pos1[axis]) / 2) + local get_node, get_meta, set_node = minetest.get_node, + minetest.get_meta, minetest.set_node + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node1 = get_node(pos) + local meta1 = get_meta(pos):to_table() + local value = pos[axis] -- Save position + pos[axis] = start - value -- Shift position + local node2 = get_node(pos) + local meta2 = get_meta(pos):to_table() + set_node(pos, node1) + get_meta(pos):from_table(meta1) + pos[axis] = value -- Restore position + set_node(pos, node2) + get_meta(pos):from_table(meta2) + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return worldedit.volume(pos1, pos2) +end + + +--- Rotates a region clockwise around an axis. +-- @param pos1 +-- @param pos2 +-- @param axis Axis ("x", "y", or "z"). +-- @param angle Angle in degrees (90 degree increments only). +-- @return The number of nodes rotated. +-- @return The new first position. +-- @return The new second position. +function worldedit.rotate(pos1, pos2, axis, angle) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local other1, other2 = worldedit.get_axis_others(axis) + angle = angle % 360 + + local count + if angle == 90 then + worldedit.flip(pos1, pos2, other1) + count, pos1, pos2 = worldedit.transpose(pos1, pos2, other1, other2) + elseif angle == 180 then + worldedit.flip(pos1, pos2, other1) + count = worldedit.flip(pos1, pos2, other2) + elseif angle == 270 then + worldedit.flip(pos1, pos2, other2) + count, pos1, pos2 = worldedit.transpose(pos1, pos2, other1, other2) + else + error("Only 90 degree increments are supported!") + end + return count, pos1, pos2 +end + + +--- Rotates all oriented nodes in a region clockwise around the Y axis. +-- @param pos1 +-- @param pos2 +-- @param angle Angle in degrees (90 degree increments only). +-- @return The number of nodes oriented. +-- TODO: Support 6D facedir rotation along arbitrary axis. +function worldedit.orient(pos1, pos2, angle) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + local registered_nodes = minetest.registered_nodes + + local wallmounted = { + [90] = {[0]=0, 1, 5, 4, 2, 3}, + [180] = {[0]=0, 1, 3, 2, 5, 4}, + [270] = {[0]=0, 1, 4, 5, 3, 2} + } + local facedir = { + [90] = {[0]=1, 2, 3, 0}, + [180] = {[0]=2, 3, 0, 1}, + [270] = {[0]=3, 0, 1, 2} + } + + angle = angle % 360 + if angle == 0 then + return 0 + end + if angle % 90 ~= 0 then + error("Only 90 degree increments are supported!") + end + local wallmounted_substitution = wallmounted[angle] + local facedir_substitution = facedir[angle] + + worldedit.keep_loaded(pos1, pos2) + + local count = 0 + local set_node, get_node, get_meta, swap_node = minetest.set_node, + minetest.get_node, minetest.get_meta, minetest.swap_node + local pos = {x=pos1.x, y=0, z=0} + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) + local def = registered_nodes[node.name] + if def then + if def.paramtype2 == "wallmounted" then + node.param2 = wallmounted_substitution[node.param2] + local meta = get_meta(pos):to_table() + set_node(pos, node) + get_meta(pos):from_table(meta) + count = count + 1 + elseif def.paramtype2 == "facedir" then + node.param2 = facedir_substitution[node.param2] + local meta = get_meta(pos):to_table() + set_node(pos, node) + get_meta(pos):from_table(meta) + count = count + 1 + end + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return count +end + + +--- Attempts to fix the lighting in a region. +-- @return The number of nodes updated. +function worldedit.fixlight(pos1, pos2) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local vmanip = minetest.get_voxel_manip(pos1, pos2) + vmanip:write_to_map() + vmanip:update_map() -- this updates the lighting + + return worldedit.volume(pos1, pos2) +end + + +--- Clears all objects in a region. +-- @return The number of objects cleared. +function worldedit.clear_objects(pos1, pos2) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + -- Offset positions to include full nodes (positions are in the center of nodes) + local pos1x, pos1y, pos1z = pos1.x - 0.5, pos1.y - 0.5, pos1.z - 0.5 + local pos2x, pos2y, pos2z = pos2.x + 0.5, pos2.y + 0.5, pos2.z + 0.5 + + -- Center of region + local center = { + x = pos1x + ((pos2x - pos1x) / 2), + y = pos1y + ((pos2y - pos1y) / 2), + z = pos1z + ((pos2z - pos1z) / 2) + } + -- Bounding sphere radius + local radius = math.sqrt( + (center.x - pos1x) ^ 2 + + (center.y - pos1y) ^ 2 + + (center.z - pos1z) ^ 2) + local count = 0 + for _, obj in pairs(minetest.get_objects_inside_radius(center, radius)) do + local entity = obj:get_luaentity() + -- Avoid players and WorldEdit entities + if not obj:is_player() and (not entity or + not entity.name:find("^worldedit:")) then + local pos = obj:getpos() + if pos.x >= pos1x and pos.x <= pos2x and + pos.y >= pos1y and pos.y <= pos2y and + pos.z >= pos1z and pos.z <= pos2z then + -- Inside region + obj:remove() + count = count + 1 + end + end + end + return count +end + diff --git a/mods/WorldEdit-1.2/worldedit/primitives.lua b/mods/WorldEdit-1.2/worldedit/primitives.lua new file mode 100644 index 0000000..aae79f1 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/primitives.lua @@ -0,0 +1,328 @@ +--- Functions for creating primitive shapes. +-- @module worldedit.primitives + +local mh = worldedit.manip_helpers + + +--- Adds a cube +-- @param pos Position of ground level center of cube +-- @param width Cube width. (x) +-- @param height Cube height. (y) +-- @param length Cube length. (z) +-- @param node_name Name of node to make cube of. +-- @param hollow Whether the cube should be hollow. +-- @return The number of nodes added. +function worldedit.cube(pos, width, height, length, node_name, hollow) + -- Set up voxel manipulator + local basepos = vector.subtract(pos, {x=math.floor(width/2), y=0, z=math.floor(length/2)}) + local manip, area = mh.init(basepos, vector.add(basepos, {x=width, y=height, z=length})) + local data = mh.get_empty_data(area) + + -- Add cube + local node_id = minetest.get_content_id(node_name) + local stride = {x=1, y=area.ystride, z=area.zstride} + local offset = vector.subtract(basepos, area.MinEdge) + local count = 0 + + for z = 0, length-1 do + local index_z = (offset.z + z) * stride.z + 1 -- +1 for 1-based indexing + for y = 0, height-1 do + local index_y = index_z + (offset.y + y) * stride.y + for x = 0, width-1 do + local is_wall = z == 0 or z == length-1 + or y == 0 or y == height-1 + or x == 0 or x == width-1 + if not hollow or is_wall then + local i = index_y + (offset.x + x) + data[i] = node_id + count = count + 1 + end + end + end + end + + mh.finish(manip, data) + return count +end + +--- Adds a sphere of `node_name` centered at `pos`. +-- @param pos Position to center sphere at. +-- @param radius Sphere radius. +-- @param node_name Name of node to make shere of. +-- @param hollow Whether the sphere should be hollow. +-- @return The number of nodes added. +function worldedit.sphere(pos, radius, node_name, hollow) + local manip, area = mh.init_radius(pos, radius) + + local data = mh.get_empty_data(area) + + -- Fill selected area with node + local node_id = minetest.get_content_id(node_name) + local min_radius, max_radius = radius * (radius - 1), radius * (radius + 1) + local offset_x, offset_y, offset_z = pos.x - area.MinEdge.x, pos.y - area.MinEdge.y, pos.z - area.MinEdge.z + local stride_z, stride_y = area.zstride, area.ystride + local count = 0 + for z = -radius, radius do + -- Offset contributed by z plus 1 to make it 1-indexed + local new_z = (z + offset_z) * stride_z + 1 + for y = -radius, radius do + local new_y = new_z + (y + offset_y) * stride_y + for x = -radius, radius do + local squared = x * x + y * y + z * z + if squared <= max_radius and (not hollow or squared >= min_radius) then + -- Position is on surface of sphere + local i = new_y + (x + offset_x) + data[i] = node_id + count = count + 1 + end + end + end + end + + mh.finish(manip, data) + + return count +end + + +--- Adds a dome. +-- @param pos Position to center dome at. +-- @param radius Dome radius. Negative for concave domes. +-- @param node_name Name of node to make dome of. +-- @param hollow Whether the dome should be hollow. +-- @return The number of nodes added. +-- TODO: Add axis option. +function worldedit.dome(pos, radius, node_name, hollow) + local min_y, max_y = 0, radius + if radius < 0 then + radius = -radius + min_y, max_y = -radius, 0 + end + + local manip, area = mh.init_axis_radius(pos, "y", radius) + local data = mh.get_empty_data(area) + + -- Add dome + local node_id = minetest.get_content_id(node_name) + local min_radius, max_radius = radius * (radius - 1), radius * (radius + 1) + local offset_x, offset_y, offset_z = pos.x - area.MinEdge.x, pos.y - area.MinEdge.y, pos.z - area.MinEdge.z + local stride_z, stride_y = area.zstride, area.ystride + local count = 0 + for z = -radius, radius do + local new_z = (z + offset_z) * stride_z + 1 --offset contributed by z plus 1 to make it 1-indexed + for y = min_y, max_y do + local new_y = new_z + (y + offset_y) * stride_y + for x = -radius, radius do + local squared = x * x + y * y + z * z + if squared <= max_radius and (not hollow or squared >= min_radius) then + -- Position is in dome + local i = new_y + (x + offset_x) + data[i] = node_id + count = count + 1 + end + end + end + end + + mh.finish(manip, data) + + return count +end + +--- Adds a cylinder. +-- @param pos Position to center base of cylinder at. +-- @param axis Axis ("x", "y", or "z") +-- @param length Cylinder length. +-- @param radius1 Cylinder base radius. +-- @param radius2 Cylinder top radius. +-- @param node_name Name of node to make cylinder of. +-- @param hollow Whether the cylinder should be hollow. +-- @return The number of nodes added. +function worldedit.cylinder(pos, axis, length, radius1, radius2, node_name, hollow) + local other1, other2 = worldedit.get_axis_others(axis) + + -- Backwards compatibility + if type(radius2) == "string" then + hollow = node_name + node_name = radius2 + radius2 = radius1 -- straight cylinder + end + + -- Handle negative lengths + local current_pos = {x=pos.x, y=pos.y, z=pos.z} + if length < 0 then + length = -length + current_pos[axis] = current_pos[axis] - length + radius1, radius2 = radius2, radius1 + end + + -- Set up voxel manipulator + local manip, area = mh.init_axis_radius_length(current_pos, axis, math.max(radius1, radius2), length) + local data = mh.get_empty_data(area) + + -- Add desired shape (anything inbetween cylinder & cone) + local node_id = minetest.get_content_id(node_name) + local stride = {x=1, y=area.ystride, z=area.zstride} + local offset = { + x = current_pos.x - area.MinEdge.x, + y = current_pos.y - area.MinEdge.y, + z = current_pos.z - area.MinEdge.z, + } + local count = 0 + for i = 0, length - 1 do + -- Calulate radius for this "height" in the cylinder + local radius = radius1 + (radius2 - radius1) * (i + 1) / length + radius = math.floor(radius + 0.5) -- round + local min_radius, max_radius = radius * (radius - 1), radius * (radius + 1) + + for index2 = -radius, radius do + -- Offset contributed by other axis 1 plus 1 to make it 1-indexed + local new_index2 = (index2 + offset[other1]) * stride[other1] + 1 + for index3 = -radius, radius do + local new_index3 = new_index2 + (index3 + offset[other2]) * stride[other2] + local squared = index2 * index2 + index3 * index3 + if squared <= max_radius and (not hollow or squared >= min_radius) then + -- Position is in cylinder, add node here + local vi = new_index3 + (offset[axis] + i) * stride[axis] + data[vi] = node_id + count = count + 1 + end + end + end + end + + mh.finish(manip, data) + + return count +end + + +--- Adds a pyramid. +-- @param pos Position to center base of pyramid at. +-- @param axis Axis ("x", "y", or "z") +-- @param height Pyramid height. +-- @param node_name Name of node to make pyramid of. +-- @param hollow Whether the pyramid should be hollow. +-- @return The number of nodes added. +function worldedit.pyramid(pos, axis, height, node_name, hollow) + local other1, other2 = worldedit.get_axis_others(axis) + + -- Set up voxel manipulator + local manip, area = mh.init_axis_radius(pos, axis, + height >= 0 and height or -height) + local data = mh.get_empty_data(area) + + -- Handle inverted pyramids + local start_axis, end_axis, step + if height > 0 then + height = height - 1 + step = 1 + else + height = height + 1 + step = -1 + end + + -- Add pyramid + local node_id = minetest.get_content_id(node_name) + local stride = {x=1, y=area.ystride, z=area.zstride} + local offset = { + x = pos.x - area.MinEdge.x, + y = pos.y - area.MinEdge.y, + z = pos.z - area.MinEdge.z, + } + local size = math.abs(height * step) + local count = 0 + -- For each level of the pyramid + for index1 = 0, height, step do + -- Offset contributed by axis plus 1 to make it 1-indexed + local new_index1 = (index1 + offset[axis]) * stride[axis] + 1 + for index2 = -size, size do + local new_index2 = new_index1 + (index2 + offset[other1]) * stride[other1] + for index3 = -size, size do + local i = new_index2 + (index3 + offset[other2]) * stride[other2] + if (not hollow or size - math.abs(index2) < 2 or size - math.abs(index3) < 2) then + data[i] = node_id + count = count + 1 + end + end + end + size = size - 1 + end + + mh.finish(manip, data) + + return count +end + +--- Adds a spiral. +-- @param pos Position to center spiral at. +-- @param length Spral length. +-- @param height Spiral height. +-- @param spacer Space between walls. +-- @param node_name Name of node to make spiral of. +-- @return Number of nodes added. +-- TODO: Add axis option. +function worldedit.spiral(pos, length, height, spacer, node_name) + local extent = math.ceil(length / 2) + + local manip, area = mh.init_axis_radius_length(pos, "y", extent, height) + local data = mh.get_empty_data(area) + + -- Set up variables + local node_id = minetest.get_content_id(node_name) + local stride = {x=1, y=area.ystride, z=area.zstride} + local offset_x, offset_y, offset_z = pos.x - area.MinEdge.x, pos.y - area.MinEdge.y, pos.z - area.MinEdge.z + local i = offset_z * stride.z + offset_y * stride.y + offset_x + 1 + + -- Add first column + local count = height + local column = i + for y = 1, height do + data[column] = node_id + column = column + stride.y + end + + -- Add spiral segments + local stride_axis, stride_other = stride.x, stride.z + local sign = -1 + local segment_length = 0 + spacer = spacer + 1 + -- Go through each segment except the last + for segment = 1, math.floor(length / spacer) * 2 do + -- Change sign and length every other turn starting with the first + if segment % 2 == 1 then + sign = -sign + segment_length = segment_length + spacer + end + -- Fill segment + for index = 1, segment_length do + -- Move along the direction of the segment + i = i + stride_axis * sign + local column = i + -- Add column + for y = 1, height do + data[column] = node_id + column = column + stride.y + end + end + count = count + segment_length * height + stride_axis, stride_other = stride_other, stride_axis -- Swap axes + end + + -- Add shorter final segment + sign = -sign + for index = 1, segment_length do + i = i + stride_axis * sign + local column = i + -- Add column + for y = 1, height do + data[column] = node_id + column = column + stride.y + end + end + count = count + segment_length * height + + mh.finish(manip, data) + + return count +end diff --git a/mods/WorldEdit-1.2/worldedit/serialization.lua b/mods/WorldEdit-1.2/worldedit/serialization.lua new file mode 100644 index 0000000..8cff9b8 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/serialization.lua @@ -0,0 +1,239 @@ +--- Schematic serialization and deserialiation. +-- @module worldedit.serialization + +worldedit.LATEST_SERIALIZATION_VERSION = 5 +local LATEST_SERIALIZATION_HEADER = worldedit.LATEST_SERIALIZATION_VERSION .. ":" + + +--[[ +Serialization version history: + 1: Original format. Serialized Lua table with a weird linked format... + 2: Position and node seperated into sub-tables in fields `1` and `2`. + 3: List of nodes, one per line, with fields seperated by spaces. + Format: + 4: Serialized Lua table containing a list of nodes with `x`, `y`, `z`, + `name`, `param1`, `param2`, and `meta` fields. + 5: Added header and made `param1`, `param2`, and `meta` fields optional. + Header format: ,,...: +--]] + + +--- Reads the header of serialized data. +-- @param value Serialized WorldEdit data. +-- @return The version as a positive natural number, or 0 for unknown versions. +-- @return Extra header fields as a list of strings, or nil if not supported. +-- @return Content (data after header). +function worldedit.read_header(value) + if value:find("^[0-9]+[%-:]") then + local header_end = value:find(":", 1, true) + local header = value:sub(1, header_end - 1):split(",") + local version = tonumber(header[1]) + table.remove(header, 1) + local content = value:sub(header_end + 1) + return version, header, content + end + -- Old versions that didn't include a header with a version number + if value:find("([+-]?%d+)%s+([+-]?%d+)%s+([+-]?%d+)") and not value:find("%{") then -- List format + return 3, nil, value + elseif value:find("^[^\"']+%{%d+%}") then + if value:find("%[\"meta\"%]") then -- Meta flat table format + return 2, nil, value + end + return 1, nil, value -- Flat table format + elseif value:find("%{") then -- Raw nested table format + return 4, nil, value + end + return nil +end + + +--- Converts the region defined by positions `pos1` and `pos2` +-- into a single string. +-- @return The serialized data. +-- @return The number of nodes serialized. +function worldedit.serialize(pos1, pos2) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local pos = {x=pos1.x, y=0, z=0} + local count = 0 + local result = {} + local get_node, get_meta = minetest.get_node, minetest.get_meta + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) + if node.name ~= "air" and node.name ~= "ignore" then + count = count + 1 + local meta = get_meta(pos):to_table() + + local meta_empty = true + -- Convert metadata item stacks to item strings + for name, inventory in pairs(meta.inventory) do + for index, stack in ipairs(inventory) do + meta_empty = false + inventory[index] = stack.to_string and stack:to_string() or stack + end + end + for k in pairs(meta) do + if k ~= "inventory" then + meta_empty = false + break + end + end + + result[count] = { + x = pos.x - pos1.x, + y = pos.y - pos1.y, + z = pos.z - pos1.z, + name = node.name, + param1 = node.param1 ~= 0 and node.param1 or nil, + param2 = node.param2 ~= 0 and node.param2 or nil, + meta = not meta_empty and meta or nil, + } + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + -- Serialize entries + result = minetest.serialize(result) + return LATEST_SERIALIZATION_HEADER .. result, count +end + + +--- Loads the schematic in `value` into a node list in the latest format. +-- Contains code based on [table.save/table.load](http://lua-users.org/wiki/SaveTableToFile) +-- by ChillCode, available under the MIT license. +-- @return A node list in the latest format, or nil on failure. +local function load_schematic(value) + local version, header, content = worldedit.read_header(value) + local nodes = {} + if version == 1 or version == 2 then -- Original flat table format + local tables = minetest.deserialize(content) + if not tables then return nil end + + -- Transform the node table into an array of nodes + for i = 1, #tables do + for j, v in pairs(tables[i]) do + if type(v) == "table" then + tables[i][j] = tables[v[1]] + end + end + end + nodes = tables[1] + + if version == 1 then --original flat table format + for i, entry in ipairs(nodes) do + local pos = entry[1] + entry.x, entry.y, entry.z = pos.x, pos.y, pos.z + entry[1] = nil + local node = entry[2] + entry.name, entry.param1, entry.param2 = node.name, node.param1, node.param2 + entry[2] = nil + end + end + elseif version == 3 then -- List format + for x, y, z, name, param1, param2 in content:gmatch( + "([+-]?%d+)%s+([+-]?%d+)%s+([+-]?%d+)%s+" .. + "([^%s]+)%s+(%d+)%s+(%d+)[^\r\n]*[\r\n]*") do + param1, param2 = tonumber(param1), tonumber(param2) + table.insert(nodes, { + x = tonumber(x), + y = tonumber(y), + z = tonumber(z), + name = name, + param1 = param1 ~= 0 and param1 or nil, + param2 = param2 ~= 0 and param2 or nil, + }) + end + elseif version == 4 or version == 5 then -- Nested table format + if not jit then + -- This is broken for larger tables in the current version of LuaJIT + nodes = minetest.deserialize(content) + else + -- XXX: This is a filthy hack that works surprisingly well - in LuaJIT, `minetest.deserialize` will fail due to the register limit + nodes = {} + content = content:gsub("return%s*{", "", 1):gsub("}%s*$", "", 1) -- remove the starting and ending values to leave only the node data + local escaped = content:gsub("\\\\", "@@"):gsub("\\\"", "@@"):gsub("(\"[^\"]*\")", function(s) return string.rep("@", #s) end) + local startpos, startpos1, endpos = 1, 1 + while true do -- go through each individual node entry (except the last) + startpos, endpos = escaped:find("},%s*{", startpos) + if not startpos then + break + end + local current = content:sub(startpos1, startpos) + local entry = minetest.deserialize("return " .. current) + table.insert(nodes, entry) + startpos, startpos1 = endpos, endpos + end + local entry = minetest.deserialize("return " .. content:sub(startpos1)) -- process the last entry + table.insert(nodes, entry) + end + else + return nil + end + return nodes +end + +--- Determines the volume the nodes represented by string `value` would occupy +-- if deserialized at `origin_pos`. +-- @return Low corner position. +-- @return High corner position. +-- @return The number of nodes. +function worldedit.allocate(origin_pos, value) + local nodes = load_schematic(value) + if not nodes then return nil end + return worldedit.allocate_with_nodes(origin_pos, nodes) +end + + +-- Internal +function worldedit.allocate_with_nodes(origin_pos, nodes) + local huge = math.huge + local pos1x, pos1y, pos1z = huge, huge, huge + local pos2x, pos2y, pos2z = -huge, -huge, -huge + local origin_x, origin_y, origin_z = origin_pos.x, origin_pos.y, origin_pos.z + for i, entry in ipairs(nodes) do + local x, y, z = origin_x + entry.x, origin_y + entry.y, origin_z + entry.z + if x < pos1x then pos1x = x end + if y < pos1y then pos1y = y end + if z < pos1z then pos1z = z end + if x > pos2x then pos2x = x end + if y > pos2y then pos2y = y end + if z > pos2z then pos2z = z end + end + local pos1 = {x=pos1x, y=pos1y, z=pos1z} + local pos2 = {x=pos2x, y=pos2y, z=pos2z} + return pos1, pos2, #nodes +end + + +--- Loads the nodes represented by string `value` at position `origin_pos`. +-- @return The number of nodes deserialized. +function worldedit.deserialize(origin_pos, value) + local nodes = load_schematic(value) + if not nodes then return nil end + + local pos1, pos2 = worldedit.allocate_with_nodes(origin_pos, nodes) + worldedit.keep_loaded(pos1, pos2) + + local origin_x, origin_y, origin_z = origin_pos.x, origin_pos.y, origin_pos.z + local count = 0 + local add_node, get_meta = minetest.add_node, minetest.get_meta + for i, entry in ipairs(nodes) do + entry.x, entry.y, entry.z = origin_x + entry.x, origin_y + entry.y, origin_z + entry.z + -- Entry acts as both position and node + add_node(entry, entry) + if entry.meta then + get_meta(entry):from_table(entry.meta) + end + end + return #nodes +end + diff --git a/mods/WorldEdit-1.2/worldedit/textures/worldedit_wand.png b/mods/WorldEdit-1.2/worldedit/textures/worldedit_wand.png new file mode 100644 index 0000000..13eb121 Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit/textures/worldedit_wand.png differ diff --git a/mods/WorldEdit-1.2/worldedit/visualization.lua b/mods/WorldEdit-1.2/worldedit/visualization.lua new file mode 100644 index 0000000..dce6bfa --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit/visualization.lua @@ -0,0 +1,131 @@ +--- Functions for visibly hiding nodes +-- @module worldedit.visualization + +minetest.register_node("worldedit:placeholder", { + drawtype = "airlike", + paramtype = "light", + sunlight_propagates = true, + diggable = false, + walkable = false, + groups = {not_in_creative_inventory=1}, +}) + +--- Hides all nodes in a region defined by positions `pos1` and `pos2` by +-- non-destructively replacing them with invisible nodes. +-- @return The number of nodes hidden. +function worldedit.hide(pos1, pos2) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local pos = {x=pos1.x, y=0, z=0} + local get_node, get_meta, swap_node = minetest.get_node, + minetest.get_meta, minetest.swap_node + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) + if node.name ~= "air" and node.name ~= "worldedit:placeholder" then + -- Save the node's original name + get_meta(pos):set_string("worldedit_placeholder", node.name) + -- Swap in placeholder node + node.name = "worldedit:placeholder" + swap_node(pos, node) + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return worldedit.volume(pos1, pos2) +end + +--- Suppresses all instances of `node_name` in a region defined by positions +-- `pos1` and `pos2` by non-destructively replacing them with invisible nodes. +-- @return The number of nodes suppressed. +function worldedit.suppress(pos1, pos2, node_name) + -- Ignore placeholder supression + if node_name == "worldedit:placeholder" then + return 0 + end + + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local nodes = minetest.find_nodes_in_area(pos1, pos2, node_name) + local get_node, get_meta, swap_node = minetest.get_node, + minetest.get_meta, minetest.swap_node + for _, pos in ipairs(nodes) do + local node = get_node(pos) + -- Save the node's original name + get_meta(pos):set_string("worldedit_placeholder", node.name) + -- Swap in placeholder node + node.name = "worldedit:placeholder" + swap_node(pos, node) + end + return #nodes +end + +--- Highlights all instances of `node_name` in a region defined by positions +-- `pos1` and `pos2` by non-destructively hiding all other nodes. +-- @return The number of nodes found. +function worldedit.highlight(pos1, pos2, node_name) + pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local pos = {x=pos1.x, y=0, z=0} + local get_node, get_meta, swap_node = minetest.get_node, + minetest.get_meta, minetest.swap_node + local count = 0 + while pos.x <= pos2.x do + pos.y = pos1.y + while pos.y <= pos2.y do + pos.z = pos1.z + while pos.z <= pos2.z do + local node = get_node(pos) + if node.name == node_name then -- Node found + count = count + 1 + elseif node.name ~= "worldedit:placeholder" then -- Hide other nodes + -- Save the node's original name + get_meta(pos):set_string("worldedit_placeholder", node.name) + -- Swap in placeholder node + node.name = "worldedit:placeholder" + swap_node(pos, node) + end + pos.z = pos.z + 1 + end + pos.y = pos.y + 1 + end + pos.x = pos.x + 1 + end + return count +end + +-- Restores all nodes hidden with WorldEdit functions in a region defined +-- by positions `pos1` and `pos2`. +-- @return The number of nodes restored. +function worldedit.restore(pos1, pos2) + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + worldedit.keep_loaded(pos1, pos2) + + local nodes = minetest.find_nodes_in_area(pos1, pos2, "worldedit:placeholder") + local get_node, get_meta, swap_node = minetest.get_node, + minetest.get_meta, minetest.swap_node + for _, pos in ipairs(nodes) do + local node = get_node(pos) + local meta = get_meta(pos) + local data = meta:to_table() + node.name = data.fields.worldedit_placeholder + data.fields.worldedit_placeholder = nil + meta:from_table(data) + swap_node(pos, node) + end + return #nodes +end + diff --git a/mods/WorldEdit-1.2/worldedit_commands/.gitignore b/mods/WorldEdit-1.2/worldedit_commands/.gitignore new file mode 100644 index 0000000..e4e5f6c --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/.gitignore @@ -0,0 +1 @@ +*~ \ No newline at end of file diff --git a/mods/WorldEdit-1.2/worldedit_commands/cuboid.lua b/mods/WorldEdit-1.2/worldedit_commands/cuboid.lua new file mode 100644 index 0000000..88f0260 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/cuboid.lua @@ -0,0 +1,240 @@ +minetest.register_chatcommand("/outset", { + params = "[h|v] ", + description = "outset the selection", + privs = {worldedit=true}, + func = function(name, param) + local find, _, dir, amount = param:find("(%a*)%s*([+-]?%d+)") + + if find == nil then + return false, "invalid usage: " .. param + end + + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + + if pos1 == nil or pos2 == nil then + return false, + "Undefined region. Region must be defined beforehand." + end + + local hv_test = dir:find("[^hv]+") + + if hv_test ~= nil then + return false, "Invalid direction." + end + + if dir == "" or dir == "hv" or dir == "vh" then + assert(worldedit.cuboid_volumetric_expand(name, amount)) + elseif dir == "h" then + assert(worldedit.cuboid_linear_expand(name, 'x', 1, amount)) + assert(worldedit.cuboid_linear_expand(name, 'x', -1, amount)) + assert(worldedit.cuboid_linear_expand(name, 'z', 1, amount)) + assert(worldedit.cuboid_linear_expand(name, 'z', -1, amount)) + elseif dir == "v" then + assert(worldedit.cuboid_linear_expand(name, 'y', 1, amount)) + assert(worldedit.cuboid_linear_expand(name, 'y', -1, amount)) + else + return false, "Invalid number of arguments" + end + + worldedit.marker_update(name) + return true, "Region outset by " .. amount .. " blocks" + end, + } +) + + +minetest.register_chatcommand("/inset", { + params = "[h|v] ", + description = "inset the selection", + privs = {worldedit=true}, + func = function(name, param) + local find, _, dir, amount = param:find("(%a*)%s*([+-]?%d+)") + + if find == nil then + return false, "invalid usage: " .. param + end + + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + + if pos1 == nil or pos2 == nil then + return false, + "Undefined region. Region must be defined beforehand." + end + + local hv_test = dir:find("[^hv]+") + + if hv_test ~= nil then + return false, "Invalid direction." + end + + if dir == "" or dir == "vh" or dir == "hv" then + assert(worldedit.cuboid_volumetric_expand(name, -amount)) + elseif dir == "h" then + assert(worldedit.cuboid_linear_expand(name, 'x', 1, -amount)) + assert(worldedit.cuboid_linear_expand(name, 'x', -1, -amount)) + assert(worldedit.cuboid_linear_expand(name, 'z', 1, -amount)) + assert(worldedit.cuboid_linear_expand(name, 'z', -1, -amount)) + elseif dir == "v" then + assert(worldedit.cuboid_linear_expand(name, 'y', 1, -amount)) + assert(worldedit.cuboid_linear_expand(name, 'y', -1, -amount)) + else + return false, "Invalid number of arguments" + end + + worldedit.marker_update(name) + return true, "Region inset by " .. amount .. " blocks" + end, + } +) + + +minetest.register_chatcommand("/shift", { + params = "[x|y|z|?|up|down|left|right|front|back] [+|-]", + description = "Moves the selection region. Does not move contents.", + privs = {worldedit=true}, + func = function(name, param) + local pos1 = worldedit.pos1[name] + local pos2 = worldedit.pos2[name] + local find, _, direction, amount = param:find("([%?%l]+)%s*([+-]?%d+)") + + if find == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + + if pos1 == nil or pos2 == nil then + worldedit.player_notify(name, + "Undefined region. Region must be defined beforehand.") + return + end + + local axis, dir + if direction == "x" or direction == "y" or direction == "z" then + axis, dir = direction, 1 + elseif direction == "?" then + axis, dir = worldedit.player_axis(name) + else + axis, dir = worldedit.translate_direction(name, direction) + end + + if axis == nil or dir == nil then + return false, "Invalid if looking straight up or down" + end + + assert(worldedit.cuboid_shift(name, axis, amount * dir)) + worldedit.marker_update(name) + + return true, "Region shifted by " .. amount .. " nodes" + end, + } +) + + +minetest.register_chatcommand("/expand", { + params = "[+|-] [reverse-amount]", + description = "expand the selection in one or two directions at once", + privs = {worldedit=true}, + func = function(name, param) + local find, _, sign, direction, amount, + rev_amount = param:find("([+-]?)([%?%l]+)%s*(%d+)%s*(%d*)") + + if find == nil then + worldedit.player_notify(name, "invalid use: " .. param) + return + end + + if worldedit.pos1[name] == nil or worldedit.pos2[name] == nil then + worldedit.player_notify(name, + "Undefined region. Region must be defined beforehand.") + return + end + + local absolute = direction:find("[xyz?]") + local dir, axis + + if rev_amount == "" then + rev_amount = 0 + end + + if absolute == nil then + axis, dir = worldedit.translate_direction(name, direction) + + if axis == nil or dir == nil then + return false, "Invalid if looking straight up or down" + end + else + if direction == "?" then + axis, dir = worldedit.player_axis(name) + else + axis = direction + dir = 1 + end + end + + if sign == "-" then + dir = -dir + end + + worldedit.cuboid_linear_expand(name, axis, dir, amount) + worldedit.cuboid_linear_expand(name, axis, -dir, rev_amount) + worldedit.marker_update(name) + return true, "Region expanded by " .. (amount + rev_amount) .. " nodes" + end, + } +) + + +minetest.register_chatcommand("/contract", { + params = "[+|-] [reverse-amount]", + description = "contract the selection in one or two directions at once", + privs = {worldedit=true}, + func = function(name, param) + local find, _, sign, direction, amount, + rev_amount = param:find("([+-]?)([%?%l]+)%s*(%d+)%s*(%d*)") + + if find == nil then + worldedit.player_notify(name, "invalid use: " .. param) + return + end + + if worldedit.pos1[name] == nil or worldedit.pos2[name] == nil then + worldedit.player_notify(name, + "Undefined region. Region must be defined beforehand.") + return + end + + local absolute = direction:find("[xyz?]") + local dir, axis + + if rev_amount == "" then + rev_amount = 0 + end + + if absolute == nil then + axis, dir = worldedit.translate_direction(name, direction) + + if axis == nil or dir == nil then + return false, "Invalid if looking straight up or down" + end + else + if direction == "?" then + axis, dir = worldedit.player_axis(name) + else + axis = direction + dir = 1 + end + end + + if sign == "-" then + dir = -dir + end + + worldedit.cuboid_linear_expand(name, axis, dir, -amount) + worldedit.cuboid_linear_expand(name, axis, -dir, -rev_amount) + worldedit.marker_update(name) + return true, "Region contracted by " .. (amount + rev_amount) .. " nodes" + end, + } +) diff --git a/mods/WorldEdit-1.2/worldedit_commands/depends.txt b/mods/WorldEdit-1.2/worldedit_commands/depends.txt new file mode 100644 index 0000000..df8caff --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/depends.txt @@ -0,0 +1 @@ +worldedit \ No newline at end of file diff --git a/mods/WorldEdit-1.2/worldedit_commands/init.lua b/mods/WorldEdit-1.2/worldedit_commands/init.lua new file mode 100644 index 0000000..c24e5c6 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/init.lua @@ -0,0 +1,1351 @@ +minetest.register_privilege("worldedit", "Can use WorldEdit commands") + +worldedit.set_pos = {} +worldedit.inspect = {} + +worldedit.pos1 = {} +worldedit.pos2 = {} +if minetest.place_schematic then + worldedit.prob_pos = {} + worldedit.prob_list = {} +end + +dofile(minetest.get_modpath("worldedit_commands") .. "/cuboid.lua") +dofile(minetest.get_modpath("worldedit_commands") .. "/mark.lua") +dofile(minetest.get_modpath("worldedit_commands") .. "/wand.lua") +local safe_region, check_region, reset_pending = dofile(minetest.get_modpath("worldedit_commands") .. "/safe.lua") + +local function get_position(name) --position 1 retrieval function for when not using `safe_region` + local pos1 = worldedit.pos1[name] + if pos1 == nil then + worldedit.player_notify(name, "no position 1 selected") + end + return pos1 +end + +-- normalize_nodename wrapper for convenience purposes +local function get_node(name, nodename) + local node = worldedit.normalize_nodename(nodename) + if not node then + worldedit.player_notify(name, "invalid node name: " .. nodename) + return nil + end + return node +end + +function worldedit.player_notify(name, message) + minetest.chat_send_player(name, "WorldEdit -!- " .. message, false) +end + +local function string_endswith(full, part) + return full:find(part, 1, true) == #full - #part + 1 +end + +-- normalizes node "description" `nodename`, returning a string (or nil) +worldedit.normalize_nodename = function(nodename) + nodename = nodename:gsub("^%s*(.-)%s*$", "%1") -- strip spaces + if nodename == "" then return nil end + + local fullname = ItemStack({name=nodename}):get_name() -- resolve aliases + if minetest.registered_nodes[fullname] or fullname == "air" then -- full name + return fullname + end + for key, value in pairs(minetest.registered_nodes) do + if string_endswith(key, ":" .. nodename) then -- matches name (w/o mod part) + return key + end + end + nodename = nodename:lower() -- lowercase both for case insensitive comparison + for key, value in pairs(minetest.registered_nodes) do + local desc = value.description:lower() + if desc == nodename then -- matches description + return key + end + if string_endswith(desc, " block") and desc == nodename.." block" then + -- fuzzy description match (e.g. "Steel" == "Steel Block") + return key + end + end + + local match = nil + for key, value in pairs(minetest.registered_nodes) do + if value.description:lower():find(nodename, 1, true) ~= nil then + if match ~= nil then + return nil + end + match = key -- substring description match (only if no ambiguities) + end + end + return match +end + +-- Determines the axis in which a player is facing, returning an axis ("x", "y", or "z") and the sign (1 or -1) +function worldedit.player_axis(name) + local dir = minetest.get_player_by_name(name):get_look_dir() + local x, y, z = math.abs(dir.x), math.abs(dir.y), math.abs(dir.z) + if x > y then + if x > z then + return "x", dir.x > 0 and 1 or -1 + end + elseif y > z then + return "y", dir.y > 0 and 1 or -1 + end + return "z", dir.z > 0 and 1 or -1 +end + +local function mkdir(path) + if minetest.mkdir then + minetest.mkdir(path) + else + os.execute('mkdir "' .. path .. '"') + end +end + +local function check_filename(name) + return name:find("^[%w%s%^&'@{}%[%],%$=!%-#%(%)%%%.%+~_]+$") ~= nil +end + + +minetest.register_chatcommand("/about", { + params = "", + description = "Get information about the mod", + func = function(name, param) + worldedit.player_notify(name, "WorldEdit " .. worldedit.version_string .. " is available on this server. Type /help to get a list of commands, or get more information at https://github.com/Uberi/MineTest-WorldEdit/") + end, +}) + +-- mostly copied from builtin/chatcommands.lua with minor modifications +minetest.register_chatcommand("/help", { + privs = {}, + params = "[all/]", + description = "Get help for WorldEdit commands", + func = function(name, param) + local function is_we_command(cmd) + return cmd:sub(0, 1) == "/" + end + local function format_help_line(cmd, def) + local msg = minetest.colorize("#00ffff", "/"..cmd) + if def.params and def.params ~= "" then + msg = msg .. " " .. def.params + end + if def.description and def.description ~= "" then + msg = msg .. ": " .. def.description + end + return msg + end + + if not minetest.check_player_privs(name, "worldedit") then + return false, "You are not allowed to use any WorldEdit commands." + end + if param == "" then + local msg = "" + local cmds = {} + for cmd, def in pairs(minetest.chatcommands) do + if is_we_command(cmd) and minetest.check_player_privs(name, def.privs) then + cmds[#cmds + 1] = cmd:sub(2) -- strip the / + end + end + table.sort(cmds) + return true, "Available commands: " .. table.concat(cmds, " ") .. "\n" + .. "Use '//help ' to get more information," + .. " or '//help all' to list everything." + elseif param == "all" then + local cmds = {} + for cmd, def in pairs(minetest.chatcommands) do + if is_we_command(cmd) and minetest.check_player_privs(name, def.privs) then + cmds[#cmds + 1] = format_help_line(cmd, def) + end + end + table.sort(cmds) + return true, "Available commands:\n"..table.concat(cmds, "\n") + else + return minetest.chatcommands["help"].func(name, "/" .. param) + end + end, +}) + +minetest.register_chatcommand("/inspect", { + params = "on/off/1/0/true/false/yes/no/enable/disable/", + description = "Enable or disable node inspection", + privs = {worldedit=true}, + func = function(name, param) + if param == "on" or param == "1" or param == "true" or param == "yes" or param == "enable" or param == "" then + worldedit.inspect[name] = true + local axis, sign = worldedit.player_axis(name) + worldedit.player_notify(name, string.format("inspector: inspection enabled for %s, currently facing the %s axis", + name, axis .. (sign > 0 and "+" or "-"))) + elseif param == "off" or param == "0" or param == "false" or param == "no" or param == "disable" then + worldedit.inspect[name] = nil + worldedit.player_notify(name, "inspector: inspection disabled") + else + worldedit.player_notify(name, "invalid usage: " .. param) + end + end, +}) + +local function get_node_rlight(pos) + local vecs = { -- neighboring nodes + {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 ret = 0 + for _, v in ipairs(vecs) do + ret = math.max(ret, minetest.get_node_light(vector.add(pos, v))) + end + return ret +end + +minetest.register_on_punchnode(function(pos, node, puncher) + local name = puncher:get_player_name() + if worldedit.inspect[name] then + local axis, sign = worldedit.player_axis(name) + message = string.format("inspector: %s at %s (param1=%d, param2=%d, received light=%d) punched facing the %s axis", + node.name, minetest.pos_to_string(pos), node.param1, node.param2, get_node_rlight(pos), axis .. (sign > 0 and "+" or "-")) + worldedit.player_notify(name, message) + end +end) + +minetest.register_chatcommand("/reset", { + params = "", + description = "Reset the region so that it is empty", + privs = {worldedit=true}, + func = function(name, param) + worldedit.pos1[name] = nil + worldedit.pos2[name] = nil + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + worldedit.set_pos[name] = nil + --make sure the user does not try to confirm an operation after resetting pos: + reset_pending(name) + worldedit.player_notify(name, "region reset") + end, +}) + +minetest.register_chatcommand("/mark", { + params = "", + description = "Show markers at the region positions", + privs = {worldedit=true}, + func = function(name, param) + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + worldedit.player_notify(name, "region marked") + end, +}) + +minetest.register_chatcommand("/unmark", { + params = "", + description = "Hide markers if currently shown", + privs = {worldedit=true}, + func = function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + worldedit.pos1[name] = nil + worldedit.pos2[name] = nil + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + worldedit.pos1[name] = pos1 + worldedit.pos2[name] = pos2 + worldedit.player_notify(name, "region unmarked") + end, +}) + +minetest.register_chatcommand("/pos1", { + params = "", + description = "Set WorldEdit region position 1 to the player's location", + privs = {worldedit=true}, + func = function(name, param) + local pos = minetest.get_player_by_name(name):getpos() + pos.x, pos.y, pos.z = math.floor(pos.x + 0.5), math.floor(pos.y + 0.5), math.floor(pos.z + 0.5) + worldedit.pos1[name] = pos + worldedit.mark_pos1(name) + worldedit.player_notify(name, "position 1 set to " .. minetest.pos_to_string(pos)) + end, +}) + +minetest.register_chatcommand("/pos2", { + params = "", + description = "Set WorldEdit region position 2 to the player's location", + privs = {worldedit=true}, + func = function(name, param) + local pos = minetest.get_player_by_name(name):getpos() + pos.x, pos.y, pos.z = math.floor(pos.x + 0.5), math.floor(pos.y + 0.5), math.floor(pos.z + 0.5) + worldedit.pos2[name] = pos + worldedit.mark_pos2(name) + worldedit.player_notify(name, "position 2 set to " .. minetest.pos_to_string(pos)) + end, +}) + +minetest.register_chatcommand("/p", { + params = "set/set1/set2/get", + description = "Set WorldEdit region, WorldEdit position 1, or WorldEdit position 2 by punching nodes, or display the current WorldEdit region", + privs = {worldedit=true}, + func = function(name, param) + if param == "set" then --set both WorldEdit positions + worldedit.set_pos[name] = "pos1" + worldedit.player_notify(name, "select positions by punching two nodes") + elseif param == "set1" then --set WorldEdit position 1 + worldedit.set_pos[name] = "pos1only" + worldedit.player_notify(name, "select position 1 by punching a node") + elseif param == "set2" then --set WorldEdit position 2 + worldedit.set_pos[name] = "pos2" + worldedit.player_notify(name, "select position 2 by punching a node") + elseif param == "get" then --display current WorldEdit positions + if worldedit.pos1[name] ~= nil then + worldedit.player_notify(name, "position 1: " .. minetest.pos_to_string(worldedit.pos1[name])) + else + worldedit.player_notify(name, "position 1 not set") + end + if worldedit.pos2[name] ~= nil then + worldedit.player_notify(name, "position 2: " .. minetest.pos_to_string(worldedit.pos2[name])) + else + worldedit.player_notify(name, "position 2 not set") + end + else + worldedit.player_notify(name, "unknown subcommand: " .. param) + end + end, +}) + +minetest.register_chatcommand("/fixedpos", { + params = "set1/set2 x y z", + description = "Set a WorldEdit region position to the position at (, , )", + privs = {worldedit=true}, + func = function(name, param) + local found, _, flag, x, y, z = param:find("^(set[12])%s+([+-]?%d+)%s+([+-]?%d+)%s+([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + local pos = {x=tonumber(x), y=tonumber(y), z=tonumber(z)} + if flag == "set1" then + worldedit.pos1[name] = pos + worldedit.mark_pos1(name) + worldedit.player_notify(name, "position 1 set to " .. minetest.pos_to_string(pos)) + else --flag == "set2" + worldedit.pos2[name] = pos + worldedit.mark_pos2(name) + worldedit.player_notify(name, "position 2 set to " .. minetest.pos_to_string(pos)) + end + end, +}) + +minetest.register_on_punchnode(function(pos, node, puncher) + local name = puncher:get_player_name() + if name ~= "" and worldedit.set_pos[name] ~= nil then --currently setting position + if worldedit.set_pos[name] == "pos1" then --setting position 1 + worldedit.pos1[name] = pos + worldedit.mark_pos1(name) + worldedit.set_pos[name] = "pos2" --set position 2 on the next invocation + worldedit.player_notify(name, "position 1 set to " .. minetest.pos_to_string(pos)) + elseif worldedit.set_pos[name] == "pos1only" then --setting position 1 only + worldedit.pos1[name] = pos + worldedit.mark_pos1(name) + worldedit.set_pos[name] = nil --finished setting positions + worldedit.player_notify(name, "position 1 set to " .. minetest.pos_to_string(pos)) + elseif worldedit.set_pos[name] == "pos2" then --setting position 2 + worldedit.pos2[name] = pos + worldedit.mark_pos2(name) + worldedit.set_pos[name] = nil --finished setting positions + worldedit.player_notify(name, "position 2 set to " .. minetest.pos_to_string(pos)) + elseif worldedit.set_pos[name] == "prob" then --setting Minetest schematic node probabilities + worldedit.prob_pos[name] = pos + minetest.show_formspec(puncher:get_player_name(), "prob_val_enter", "field[text;;]") + end + end +end) + +minetest.register_chatcommand("/volume", { + params = "", + description = "Display the volume of the current WorldEdit region", + privs = {worldedit=true}, + func = function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + if pos1 == nil or pos2 == nil then + worldedit.player_notify(name, "no region selected") + return nil + end + + local volume = worldedit.volume(pos1, pos2) + local abs = math.abs + worldedit.player_notify(name, "current region has a volume of " .. volume .. " nodes (" + .. abs(pos2.x - pos1.x) + 1 .. "*" + .. abs(pos2.y - pos1.y) + 1 .. "*" + .. abs(pos2.z - pos1.z) + 1 .. ")") + end, +}) + +minetest.register_chatcommand("/deleteblocks", { + params = "", + description = "remove all MapBlocks (16x16x16) containing the selected area from the map", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local success = minetest.delete_area(pos1, pos2) + if success then + worldedit.player_notify(name, "Area deleted.") + else + worldedit.player_notify(name, "There was an error during deletion of the area.") + end + end), +}) + +minetest.register_chatcommand("/set", { + params = "", + description = "Set the current WorldEdit region to ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local node = get_node(name, param) + if not node then return end + + local count = worldedit.set(worldedit.pos1[name], worldedit.pos2[name], node) + worldedit.player_notify(name, count .. " nodes set") + end, check_region), +}) + +minetest.register_chatcommand("/param2", { + params = "", + description = "Set param2 of all nodes in the current WorldEdit region to ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local param2 = tonumber(param) + if not param2 then + worldedit.player_notify(name, "Invalid or missing param2 argument") + return + elseif param2 < 0 or param2 > 255 then + worldedit.player_notify(name, "Param2 is out of range (must be between 0 and 255 inclusive)!") + return + end + + local count = worldedit.set_param2(worldedit.pos1[name], worldedit.pos2[name], param2) + worldedit.player_notify(name, count .. " nodes altered") + end, check_region), +}) + +minetest.register_chatcommand("/mix", { + params = " ...", + description = "Fill the current WorldEdit region with a random mix of , ...", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local nodes = {} + for nodename in param:gmatch("[^%s]+") do + local node = get_node(name, nodename) + if not node then return end + nodes[#nodes + 1] = node + end + + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local count = worldedit.set(pos1, pos2, nodes) + worldedit.player_notify(name, count .. " nodes set") + end, check_region), +}) + +local check_replace = function(name, param) + local found, _, searchnode, replacenode = param:find("^([^%s]+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local newsearchnode = worldedit.normalize_nodename(searchnode) + if not newsearchnode then + worldedit.player_notify(name, "invalid search node name: " .. searchnode) + return nil + end + local newreplacenode = worldedit.normalize_nodename(replacenode) + if not newreplacenode then + worldedit.player_notify(name, "invalid replace node name: " .. replacenode) + return nil + end + return check_region(name, param) +end + +minetest.register_chatcommand("/replace", { + params = " ", + description = "Replace all instances of with in the current WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, search_node, replace_node = param:find("^([^%s]+)%s+(.+)$") + local norm_search_node = worldedit.normalize_nodename(search_node) + local norm_replace_node = worldedit.normalize_nodename(replace_node) + local count = worldedit.replace(worldedit.pos1[name], worldedit.pos2[name], + norm_search_node, norm_replace_node) + worldedit.player_notify(name, count .. " nodes replaced") + end, check_replace), +}) + +minetest.register_chatcommand("/replaceinverse", { + params = " ", + description = "Replace all nodes other than with in the current WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, search_node, replace_node = param:find("^([^%s]+)%s+(.+)$") + local norm_search_node = worldedit.normalize_nodename(search_node) + local norm_replace_node = worldedit.normalize_nodename(replace_node) + local count = worldedit.replace(worldedit.pos1[name], worldedit.pos2[name], + norm_search_node, norm_replace_node, true) + worldedit.player_notify(name, count .. " nodes replaced") + end, check_replace), +}) + +local check_cube = function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + local found, _, w, h, l, nodename = param:find("^(%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + return tonumber(w) * tonumber(h) * tonumber(l) +end + +minetest.register_chatcommand("/hollowcube", { + params = " ", + description = "Add a hollow cube with its ground level centered at WorldEdit position 1 with dimensions x x , composed of .", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, w, h, l, nodename = param:find("^(%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.cube(worldedit.pos1[name], tonumber(w), tonumber(h), tonumber(l), node, true) + worldedit.player_notify(name, count .. " nodes added") + end, check_cube), +}) + +minetest.register_chatcommand("/cube", { + params = " ", + description = "Add a cube with its ground level centered at WorldEdit position 1 with dimensions x x , composed of .", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, w, h, l, nodename = param:find("^(%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.cube(worldedit.pos1[name], tonumber(w), tonumber(h), tonumber(l), node) + worldedit.player_notify(name, count .. " nodes added") + end, check_cube), +}) + +local check_sphere = function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + return math.ceil((4 * math.pi * (tonumber(radius) ^ 3)) / 3) --volume of sphere +end + +minetest.register_chatcommand("/hollowsphere", { + params = " ", + description = "Add hollow sphere centered at WorldEdit position 1 with radius , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.sphere(worldedit.pos1[name], tonumber(radius), node, true) + worldedit.player_notify(name, count .. " nodes added") + end, check_sphere), +}) + +minetest.register_chatcommand("/sphere", { + params = " ", + description = "Add sphere centered at WorldEdit position 1 with radius , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.sphere(worldedit.pos1[name], tonumber(radius), node) + worldedit.player_notify(name, count .. " nodes added") + end, check_sphere), +}) + +local check_dome = function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + return math.ceil((2 * math.pi * (tonumber(radius) ^ 3)) / 3) --volume of dome +end + +minetest.register_chatcommand("/hollowdome", { + params = " ", + description = "Add hollow dome centered at WorldEdit position 1 with radius , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.dome(worldedit.pos1[name], tonumber(radius), node, true) + worldedit.player_notify(name, count .. " nodes added") + end, check_dome), +}) + +minetest.register_chatcommand("/dome", { + params = " ", + description = "Add dome centered at WorldEdit position 1 with radius , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, radius, nodename = param:find("^(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.dome(worldedit.pos1[name], tonumber(radius), node) + worldedit.player_notify(name, count .. " nodes added") + end, check_dome), +}) + +local check_cylinder = function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + -- two radii + local found, _, axis, length, radius1, radius2, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + if found == nil then + -- single radius + found, _, axis, length, radius1, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(.+)$") + radius2 = radius1 + end + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + local radius = math.max(tonumber(radius1), tonumber(radius2)) + return math.ceil(math.pi * (radius ^ 2) * tonumber(length)) +end + +minetest.register_chatcommand("/hollowcylinder", { + params = "x/y/z/? [radius2] ", + description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length , base radius (and top radius [radius2]), composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + -- two radii + local found, _, axis, length, radius1, radius2, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + if found == nil then + -- single radius + found, _, axis, length, radius1, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(.+)$") + radius2 = radius1 + end + length = tonumber(length) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + length = length * sign + end + local node = get_node(name, nodename) + local count = worldedit.cylinder(worldedit.pos1[name], axis, length, tonumber(radius1), tonumber(radius2), node, true) + worldedit.player_notify(name, count .. " nodes added") + end, check_cylinder), +}) + +minetest.register_chatcommand("/cylinder", { + params = "x/y/z/? [radius2] ", + description = "Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length , base radius (and top radius [radius2]), composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + -- two radii + local found, _, axis, length, radius1, radius2, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + if found == nil then + -- single radius + found, _, axis, length, radius1, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+(.+)$") + radius2 = radius1 + end + length = tonumber(length) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + length = length * sign + end + local node = get_node(name, nodename) + local count = worldedit.cylinder(worldedit.pos1[name], axis, length, tonumber(radius1), tonumber(radius2), node) + worldedit.player_notify(name, count .. " nodes added") + end, check_cylinder), +}) + +local check_pyramid = function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + local found, _, axis, height, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + height = tonumber(height) + return math.ceil(((height * 2 + 1) ^ 2) * height / 3) +end + +minetest.register_chatcommand("/hollowpyramid", { + params = "x/y/z/? ", + description = "Add hollow pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, axis, height, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(.+)$") + height = tonumber(height) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + height = height * sign + end + local node = get_node(name, nodename) + local count = worldedit.pyramid(worldedit.pos1[name], axis, height, node, true) + worldedit.player_notify(name, count .. " nodes added") + end, check_pyramid), +}) + +minetest.register_chatcommand("/pyramid", { + params = "x/y/z/? ", + description = "Add pyramid centered at WorldEdit position 1 along the x/y/z/? axis with height , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, axis, height, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(.+)$") + height = tonumber(height) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + height = height * sign + end + local node = get_node(name, nodename) + local count = worldedit.pyramid(worldedit.pos1[name], axis, height, node) + worldedit.player_notify(name, count .. " nodes added") + end, check_pyramid), +}) + +minetest.register_chatcommand("/spiral", { + params = " ", + description = "Add spiral centered at WorldEdit position 1 with side length , height , space between walls , composed of ", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, length, height, space, nodename = param:find("^(%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + local node = get_node(name, nodename) + local count = worldedit.spiral(worldedit.pos1[name], tonumber(length), tonumber(height), tonumber(space), node) + worldedit.player_notify(name, count .. " nodes added") + end, + function(name, param) + if worldedit.pos1[name] == nil then + worldedit.player_notify(name, "no position 1 selected") + return nil + end + local found, _, length, height, space, nodename = param:find("^(%d+)%s+(%d+)%s+(%d+)%s+(.+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + local node = get_node(name, nodename) + if not node then return nil end + return 1 -- TODO: return an useful value + end), +}) + +minetest.register_chatcommand("/copy", { + params = "x/y/z/? ", + description = "Copy the current WorldEdit region along the x/y/z/? axis by nodes", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + amount = tonumber(amount) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + amount = amount * sign + end + + local count = worldedit.copy(worldedit.pos1[name], worldedit.pos2[name], axis, amount) + worldedit.player_notify(name, count .. " nodes copied") + end, + function(name, param) + local volume = check_region(name, param) + return volume and volume * 2 or volume + end), +}) + +minetest.register_chatcommand("/move", { + params = "x/y/z/? ", + description = "Move the current WorldEdit region along the x/y/z/? axis by nodes", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + amount = tonumber(amount) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + amount = amount * sign + end + + local count = worldedit.move(pos1, pos2, axis, amount) + + pos1[axis] = pos1[axis] + amount + pos2[axis] = pos2[axis] + amount + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + worldedit.player_notify(name, count .. " nodes moved") + end, check_region), +}) + +minetest.register_chatcommand("/stack", { + params = "x/y/z/? ", + description = "Stack the current WorldEdit region along the x/y/z/? axis times", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, axis, repetitions = param:find("^([xyz%?])%s+([+-]?%d+)$") + repetitions = tonumber(repetitions) + if axis == "?" then + axis, sign = worldedit.player_axis(name) + repetitions = repetitions * sign + end + local count = worldedit.stack(worldedit.pos1[name], worldedit.pos2[name], axis, repetitions) + worldedit.player_notify(name, count .. " nodes stacked") + end, + function(name, param) + local found, _, axis, repetitions = param:find("^([xyz%?])%s+([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + local count = check_region(name, param) + if count then return (tonumber(repetitions) + 1) * count end + return nil + end), +}) + +minetest.register_chatcommand("/stack2", { + params = " ", + description = "Stack the current WorldEdit region times by offset , , ", + privs = {worldedit=true}, + func = function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + if pos1 == nil or pos2 == nil then + worldedit.player_notify(name, "Select a position first!") + return + end + local repetitions, incs = param:match("(%d+)%s*(.+)") + if repetitions == nil then + worldedit.player_notify(name, "invalid count: " .. param) + return + end + repetitions = tonumber(repetitions) + + local x, y, z = incs:match("([+-]?%d+) ([+-]?%d+) ([+-]?%d+)") + if x == nil then + worldedit.player_notify(name, "invalid increments: " .. param) + return + end + x, y, z = tonumber(x), tonumber(y), tonumber(z) + + local count = worldedit.volume(pos1, pos2) * repetitions + + return safe_region(function() + worldedit.stack2(pos1, pos2, {x=x, y=y, z=z}, repetitions, + function() worldedit.player_notify(name, count .. " nodes stacked") end) + end, function() + return count + end)(name,param) -- more hax --wip: clean this up a little bit + end +}) + + +minetest.register_chatcommand("/stretch", { + params = " ", + description = "Scale the current WorldEdit positions and region by a factor of , , along the X, Y, and Z axes, repectively, with position 1 as the origin", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local found, _, stretchx, stretchy, stretchz = param:find("^(%d+)%s+(%d+)%s+(%d+)$") + stretchx, stretchy, stretchz = tonumber(stretchx), tonumber(stretchy), tonumber(stretchz) + local count, pos1, pos2 = worldedit.stretch(pos1, pos2, stretchx, stretchy, stretchz) + + --reset markers to scaled positions + worldedit.pos1[name] = pos1 + worldedit.pos2[name] = pos2 + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + + worldedit.player_notify(name, count .. " nodes stretched") + end, + function(name, param) + local found, _, stretchx, stretchy, stretchz = param:find("^(%d+)%s+(%d+)%s+(%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + stretchx, stretchy, stretchz = tonumber(stretchx), tonumber(stretchy), tonumber(stretchz) + if stretchx == 0 or stretchy == 0 or stretchz == 0 then + worldedit.player_notify(name, "invalid scaling factors: " .. param) + end + local count = check_region(name, param) + if count then return tonumber(stretchx) * tonumber(stretchy) * tonumber(stretchz) * count end + return nil + end), +}) + +minetest.register_chatcommand("/transpose", { + params = "x/y/z/? x/y/z/?", + description = "Transpose the current WorldEdit region along the x/y/z/? and x/y/z/? axes", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local found, _, axis1, axis2 = param:find("^([xyz%?])%s+([xyz%?])$") + if axis1 == "?" then axis1 = worldedit.player_axis(name) end + if axis2 == "?" then axis2 = worldedit.player_axis(name) end + local count, pos1, pos2 = worldedit.transpose(pos1, pos2, axis1, axis2) + + --reset markers to transposed positions + worldedit.pos1[name] = pos1 + worldedit.pos2[name] = pos2 + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + + worldedit.player_notify(name, count .. " nodes transposed") + end, + function(name, param) + local found, _, axis1, axis2 = param:find("^([xyz%?])%s+([xyz%?])$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + if axis1 == axis2 then + worldedit.player_notify(name, "invalid usage: axes must be different") + return nil + end + return check_region(name, param) + end), +}) + +minetest.register_chatcommand("/flip", { + params = "x/y/z/?", + description = "Flip the current WorldEdit region along the x/y/z/? axis", + privs = {worldedit=true}, + func = safe_region(function(name, param) + if param == "?" then param = worldedit.player_axis(name) end + local count = worldedit.flip(worldedit.pos1[name], worldedit.pos2[name], param) + worldedit.player_notify(name, count .. " nodes flipped") + end, + function(name, param) + if param ~= "x" and param ~= "y" and param ~= "z" and param ~= "?" then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + return check_region(name, param) + end), +}) + +minetest.register_chatcommand("/rotate", { + params = " ", + description = "Rotate the current WorldEdit region around the axis by angle (90 degree increment)", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + local found, _, axis, angle = param:find("^([xyz%?])%s+([+-]?%d+)$") + if axis == "?" then axis = worldedit.player_axis(name) end + local count, pos1, pos2 = worldedit.rotate(pos1, pos2, axis, angle) + + --reset markers to rotated positions + worldedit.pos1[name] = pos1 + worldedit.pos2[name] = pos2 + worldedit.mark_pos1(name) + worldedit.mark_pos2(name) + + worldedit.player_notify(name, count .. " nodes rotated") + end, + function(name, param) + local found, _, axis, angle = param:find("^([xyz%?])%s+([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + if angle % 90 ~= 0 then + worldedit.player_notify(name, "invalid usage: angle must be multiple of 90") + return nil + end + return check_region(name, param) + end), +}) + +minetest.register_chatcommand("/orient", { + params = "", + description = "Rotate oriented nodes in the current WorldEdit region around the Y axis by angle (90 degree increment)", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local found, _, angle = param:find("^([+-]?%d+)$") + local count = worldedit.orient(worldedit.pos1[name], worldedit.pos2[name], angle) + worldedit.player_notify(name, count .. " nodes oriented") + end, + function(name, param) + local found, _, angle = param:find("^([+-]?%d+)$") + if found == nil then + worldedit.player_notify(name, "invalid usage: " .. param) + return nil + end + if angle % 90 ~= 0 then + worldedit.player_notify(name, "invalid usage: angle must be multiple of 90") + return nil + end + return check_region(name, param) + end), +}) + +minetest.register_chatcommand("/fixlight", { + params = "", + description = "Fix the lighting in the current WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local count = worldedit.fixlight(worldedit.pos1[name], worldedit.pos2[name]) + worldedit.player_notify(name, count .. " nodes updated") + end), +}) + +minetest.register_chatcommand("/drain", { + params = "", + description = "Remove any fluid node within the current WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + -- TODO: make an API function for this + local count = 0 + local pos1, pos2 = worldedit.sort_pos(worldedit.pos1[name], worldedit.pos2[name]) + for x = pos1.x, pos2.x do + for y = pos1.y, pos2.y do + for z = pos1.z, pos2.z do + local n = minetest.get_node({x=x, y=y, z=z}).name + local d = minetest.registered_nodes[n] + if d ~= nil and (d["drawtype"] == "liquid" or d["drawtype"] == "flowingliquid") then + minetest.remove_node({x=x, y=y, z=z}) + count = count + 1 + end + end + end + end + worldedit.player_notify(name, count .. " nodes updated") + end), +}) + +minetest.register_chatcommand("/hide", { + params = "", + description = "Hide all nodes in the current WorldEdit region non-destructively", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local count = worldedit.hide(worldedit.pos1[name], worldedit.pos2[name]) + worldedit.player_notify(name, count .. " nodes hidden") + end), +}) + +minetest.register_chatcommand("/suppress", { + params = "", + description = "Suppress all in the current WorldEdit region non-destructively", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local node = get_node(name, param) + local count = worldedit.suppress(worldedit.pos1[name], worldedit.pos2[name], node) + worldedit.player_notify(name, count .. " nodes suppressed") + end, check_region), +}) + +minetest.register_chatcommand("/highlight", { + params = "", + description = "Highlight in the current WorldEdit region by hiding everything else non-destructively", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local node = get_node(name, param) + local count = worldedit.highlight(worldedit.pos1[name], worldedit.pos2[name], node) + worldedit.player_notify(name, count .. " nodes highlighted") + end, check_region), +}) + +minetest.register_chatcommand("/restore", { + params = "", + description = "Restores nodes hidden with WorldEdit in the current WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local count = worldedit.restore(worldedit.pos1[name], worldedit.pos2[name]) + worldedit.player_notify(name, count .. " nodes restored") + end), +}) + +minetest.register_chatcommand("/save", { + params = "", + description = "Save the current WorldEdit region to \"(world folder)/schems/.we\"", + privs = {worldedit=true}, + func = safe_region(function(name, param) + if param == "" then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + if not check_filename(param) then + worldedit.player_notify(name, "Disallowed file name: " .. param) + return + end + local result, count = worldedit.serialize(worldedit.pos1[name], + worldedit.pos2[name]) + + local path = minetest.get_worldpath() .. "/schems" + -- Create directory if it does not already exist + mkdir(path) + + local filename = path .. "/" .. param .. ".we" + local file, err = io.open(filename, "wb") + if err ~= nil then + worldedit.player_notify(name, "Could not save file to \"" .. filename .. "\"") + return + end + file:write(result) + file:flush() + file:close() + + worldedit.player_notify(name, count .. " nodes saved") + end), +}) + +minetest.register_chatcommand("/allocate", { + params = "", + description = "Set the region defined by nodes from \"(world folder)/schems/.we\" as the current WorldEdit region", + privs = {worldedit=true}, + func = function(name, param) + local pos = get_position(name) + if pos == nil then return end + + if param == "" then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + if not check_filename(param) then + worldedit.player_notify(name, "Disallowed file name: " .. param) + return + end + + local filename = minetest.get_worldpath() .. "/schems/" .. param .. ".we" + local file, err = io.open(filename, "rb") + if err ~= nil then + worldedit.player_notify(name, "could not open file \"" .. filename .. "\"") + return + end + local value = file:read("*a") + file:close() + + local version = worldedit.read_header(value) + if version == 0 then + worldedit.player_notify(name, "File is invalid!") + return + elseif version > worldedit.LATEST_SERIALIZATION_VERSION then + worldedit.player_notify(name, "File was created with newer version of WorldEdit!") + end + local nodepos1, nodepos2, count = worldedit.allocate(pos, value) + + worldedit.pos1[name] = nodepos1 + worldedit.mark_pos1(name) + worldedit.pos2[name] = nodepos2 + worldedit.mark_pos2(name) + + worldedit.player_notify(name, count .. " nodes allocated") + end, +}) + +minetest.register_chatcommand("/load", { + params = "", + description = "Load nodes from \"(world folder)/schems/[.we[m]]\" with position 1 of the current WorldEdit region as the origin", + privs = {worldedit=true}, + func = function(name, param) + local pos = get_position(name) + if pos == nil then return end + + if param == "" then + worldedit.player_notify(name, "invalid usage: " .. param) + return + end + if not string.find(param, "^[%w \t.,+-_=!@#$%%^&*()%[%]{};'\"]+$") then + worldedit.player_notify(name, "invalid file name: " .. param) + return + end + + --find the file in the world path + local testpaths = { + minetest.get_worldpath() .. "/schems/" .. param, + minetest.get_worldpath() .. "/schems/" .. param .. ".we", + minetest.get_worldpath() .. "/schems/" .. param .. ".wem", + } + local file, err + for index, path in ipairs(testpaths) do + file, err = io.open(path, "rb") + if not err then + break + end + end + if err then + worldedit.player_notify(name, "could not open file \"" .. param .. "\"") + return + end + local value = file:read("*a") + file:close() + + local version = worldedit.read_header(value) + if version == 0 then + worldedit.player_notify(name, "File is invalid!") + return + elseif version > worldedit.LATEST_SERIALIZATION_VERSION then + worldedit.player_notify(name, "File was created with newer version of WorldEdit!") + return + end + + local count = worldedit.deserialize(pos, value) + + worldedit.player_notify(name, count .. " nodes loaded") + end, +}) + +minetest.register_chatcommand("/lua", { + params = "", + description = "Executes as a Lua chunk in the global namespace", + privs = {worldedit=true, server=true}, + func = function(name, param) + local err = worldedit.lua(param) + if err then + worldedit.player_notify(name, "code error: " .. err) + minetest.log("action", name.." tried to execute "..param) + else + worldedit.player_notify(name, "code successfully executed", false) + minetest.log("action", name.." executed "..param) + end + end, +}) + +minetest.register_chatcommand("/luatransform", { + params = "", + description = "Executes as a Lua chunk in the global namespace with the variable pos available, for each node in the current WorldEdit region", + privs = {worldedit=true, server=true}, + func = safe_region(function(name, param) + local err = worldedit.luatransform(worldedit.pos1[name], worldedit.pos2[name], param) + if err then + worldedit.player_notify(name, "code error: " .. err, false) + minetest.log("action", name.." tried to execute luatransform "..param) + else + worldedit.player_notify(name, "code successfully executed", false) + minetest.log("action", name.." executed luatransform "..param) + end + end), +}) + +minetest.register_chatcommand("/mtschemcreate", { + params = "", + description = "Save the current WorldEdit region using the Minetest ".. + "Schematic format to \"(world folder)/schems/.mts\"", + privs = {worldedit=true}, + func = safe_region(function(name, param) + if param == nil then + worldedit.player_notify(name, "No filename specified") + return + end + if not check_filename(param) then + worldedit.player_notify(name, "Disallowed file name: " .. param) + return + end + + local path = minetest.get_worldpath() .. "/schems" + -- Create directory if it does not already exist + mkdir(path) + + local filename = path .. "/" .. param .. ".mts" + local ret = minetest.create_schematic(worldedit.pos1[name], + worldedit.pos2[name], worldedit.prob_list[name], + filename) + if ret == nil then + worldedit.player_notify(name, "Failed to create Minetest schematic", false) + else + worldedit.player_notify(name, "Saved Minetest schematic to " .. param, false) + end + worldedit.prob_list[name] = {} + end), +}) + +minetest.register_chatcommand("/mtschemplace", { + params = "", + description = "Load nodes from \"(world folder)/schems/.mts\" with position 1 of the current WorldEdit region as the origin", + privs = {worldedit=true}, + func = function(name, param) + if param == "" then + worldedit.player_notify(name, "no filename specified") + return + end + if not check_filename(param) then + worldedit.player_notify(name, "Disallowed file name: " .. param) + return + end + + local pos = get_position(name) + if pos == nil then return end + + local path = minetest.get_worldpath() .. "/schems/" .. param .. ".mts" + if minetest.place_schematic(pos, path) == nil then + worldedit.player_notify(name, "failed to place Minetest schematic", false) + else + worldedit.player_notify(name, "placed Minetest schematic " .. param .. + " at " .. minetest.pos_to_string(pos), false) + end + end, +}) + +minetest.register_chatcommand("/mtschemprob", { + params = "start/finish/get", + description = "Begins node probability entry for Minetest schematics, gets the nodes that have probabilities set, or ends node probability entry", + privs = {worldedit=true}, + func = function(name, param) + if param == "start" then --start probability setting + worldedit.set_pos[name] = "prob" + worldedit.prob_list[name] = {} + worldedit.player_notify(name, "select Minetest schematic probability values by punching nodes") + elseif param == "finish" then --finish probability setting + worldedit.set_pos[name] = nil + worldedit.player_notify(name, "finished Minetest schematic probability selection") + elseif param == "get" then --get all nodes that had probabilities set on them + local text = "" + local problist = worldedit.prob_list[name] + if problist == nil then + return + end + for k,v in pairs(problist) do + local prob = math.floor(((v.prob / 256) * 100) * 100 + 0.5) / 100 + text = text .. minetest.pos_to_string(v.pos) .. ": " .. prob .. "% | " + end + worldedit.player_notify(name, "currently set node probabilities:") + worldedit.player_notify(name, text) + else + worldedit.player_notify(name, "unknown subcommand: " .. param) + end + end, +}) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname == "prob_val_enter" and not (fields.text == "" or fields.text == nil) then + local name = player:get_player_name() + local prob_entry = {pos=worldedit.prob_pos[name], prob=tonumber(fields.text)} + local index = table.getn(worldedit.prob_list[name]) + 1 + worldedit.prob_list[name][index] = prob_entry + end +end) + +minetest.register_chatcommand("/clearobjects", { + params = "", + description = "Clears all objects within the WorldEdit region", + privs = {worldedit=true}, + func = safe_region(function(name, param) + local count = worldedit.clear_objects(worldedit.pos1[name], worldedit.pos2[name]) + worldedit.player_notify(name, count .. " objects cleared") + end), +}) diff --git a/mods/WorldEdit-1.2/worldedit_commands/mark.lua b/mods/WorldEdit-1.2/worldedit_commands/mark.lua new file mode 100644 index 0000000..bc46a7f --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/mark.lua @@ -0,0 +1,181 @@ +worldedit.marker1 = {} +worldedit.marker2 = {} +worldedit.marker_region = {} + +--marks worldedit region position 1 +worldedit.mark_pos1 = function(name) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + + if pos1 ~= nil then + --make area stay loaded + local manip = minetest.get_voxel_manip() + manip:read_from_map(pos1, pos1) + end + if worldedit.marker1[name] ~= nil then --marker already exists + worldedit.marker1[name]:remove() --remove marker + worldedit.marker1[name] = nil + end + if pos1 ~= nil then + --add marker + worldedit.marker1[name] = minetest.add_entity(pos1, "worldedit:pos1") + if worldedit.marker1[name] ~= nil then + worldedit.marker1[name]:get_luaentity().player_name = name + end + end + worldedit.mark_region(name) +end + +--marks worldedit region position 2 +worldedit.mark_pos2 = function(name) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + + if pos2 ~= nil then + --make area stay loaded + local manip = minetest.get_voxel_manip() + manip:read_from_map(pos2, pos2) + end + if worldedit.marker2[name] ~= nil then --marker already exists + worldedit.marker2[name]:remove() --remove marker + worldedit.marker2[name] = nil + end + if pos2 ~= nil then + --add marker + worldedit.marker2[name] = minetest.add_entity(pos2, "worldedit:pos2") + if worldedit.marker2[name] ~= nil then + worldedit.marker2[name]:get_luaentity().player_name = name + end + end + worldedit.mark_region(name) +end + +worldedit.mark_region = function(name) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + + if worldedit.marker_region[name] ~= nil then --marker already exists + --wip: make the area stay loaded somehow + for _, entity in ipairs(worldedit.marker_region[name]) do + entity:remove() + end + worldedit.marker_region[name] = nil + end + + if pos1 ~= nil and pos2 ~= nil then + local pos1, pos2 = worldedit.sort_pos(pos1, pos2) + + local vec = vector.subtract(pos2, pos1) + local maxside = math.max(vec.x, math.max(vec.y, vec.z)) + local limit = tonumber(minetest.setting_get("active_object_send_range_blocks")) * 16 + if maxside > limit * 1.5 then + -- The client likely won't be able to see the plane markers as intended anyway, + -- thus don't place them and also don't load the area into memory + return + end + + local thickness = 0.2 + local sizex, sizey, sizez = (1 + pos2.x - pos1.x) / 2, (1 + pos2.y - pos1.y) / 2, (1 + pos2.z - pos1.z) / 2 + + --make area stay loaded + local manip = minetest.get_voxel_manip() + manip:read_from_map(pos1, pos2) + + local markers = {} + + --XY plane markers + for _, z in ipairs({pos1.z - 0.5, pos2.z + 0.5}) do + local marker = minetest.add_entity({x=pos1.x + sizex - 0.5, y=pos1.y + sizey - 0.5, z=z}, "worldedit:region_cube") + if marker ~= nil then + marker:set_properties({ + visual_size={x=sizex * 2, y=sizey * 2}, + collisionbox = {-sizex, -sizey, -thickness, sizex, sizey, thickness}, + }) + marker:get_luaentity().player_name = name + table.insert(markers, marker) + end + end + + --YZ plane markers + for _, x in ipairs({pos1.x - 0.5, pos2.x + 0.5}) do + local marker = minetest.add_entity({x=x, y=pos1.y + sizey - 0.5, z=pos1.z + sizez - 0.5}, "worldedit:region_cube") + if marker ~= nil then + marker:set_properties({ + visual_size={x=sizez * 2, y=sizey * 2}, + collisionbox = {-thickness, -sizey, -sizez, thickness, sizey, sizez}, + }) + marker:setyaw(math.pi / 2) + marker:get_luaentity().player_name = name + table.insert(markers, marker) + end + end + + worldedit.marker_region[name] = markers + end +end + +minetest.register_entity(":worldedit:pos1", { + initial_properties = { + visual = "cube", + visual_size = {x=1.1, y=1.1}, + textures = {"worldedit_pos1.png", "worldedit_pos1.png", + "worldedit_pos1.png", "worldedit_pos1.png", + "worldedit_pos1.png", "worldedit_pos1.png"}, + collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55}, + physical = false, + }, + on_step = function(self, dtime) + if worldedit.marker1[self.player_name] == nil then + self.object:remove() + end + end, + on_punch = function(self, hitter) + self.object:remove() + worldedit.marker1[self.player_name] = nil + end, +}) + +minetest.register_entity(":worldedit:pos2", { + initial_properties = { + visual = "cube", + visual_size = {x=1.1, y=1.1}, + textures = {"worldedit_pos2.png", "worldedit_pos2.png", + "worldedit_pos2.png", "worldedit_pos2.png", + "worldedit_pos2.png", "worldedit_pos2.png"}, + collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55}, + physical = false, + }, + on_step = function(self, dtime) + if worldedit.marker2[self.player_name] == nil then + self.object:remove() + end + end, + on_punch = function(self, hitter) + self.object:remove() + worldedit.marker2[self.player_name] = nil + end, +}) + +minetest.register_entity(":worldedit:region_cube", { + initial_properties = { + visual = "upright_sprite", + visual_size = {x=1.1, y=1.1}, + textures = {"worldedit_cube.png"}, + visual_size = {x=10, y=10}, + physical = false, + }, + on_step = function(self, dtime) + if worldedit.marker_region[self.player_name] == nil then + self.object:remove() + return + end + end, + on_punch = function(self, hitter) + local markers = worldedit.marker_region[self.player_name] + if not markers then + return + end + for _, entity in ipairs(markers) do + entity:remove() + end + worldedit.marker_region[self.player_name] = nil + end, +}) + diff --git a/mods/WorldEdit-1.2/worldedit_commands/safe.lua b/mods/WorldEdit-1.2/worldedit_commands/safe.lua new file mode 100644 index 0000000..3b2818d --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/safe.lua @@ -0,0 +1,65 @@ +local safe_region_callback = {} +local safe_region_param = {} + +local function check_region(name, param) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] --obtain positions + if pos1 == nil or pos2 == nil then + worldedit.player_notify(name, "no region selected") + return nil + end + return worldedit.volume(pos1, pos2) +end + +--`callback` is a callback to run when the user confirms +--`nodes_needed` is a function accepting `param`, `pos1`, and `pos2` to calculate the number of nodes needed +local function safe_region(callback, nodes_needed) + --default node volume calculation + nodes_needed = nodes_needed or check_region + + return function(name, param) + --check if the operation applies to a safe number of nodes + local count = nodes_needed(name, param) + if count == nil then return end --invalid command + if count < 10000 then + return callback(name, param) + end + + --save callback to call later + safe_region_callback[name], safe_region_param[name] = callback, param + worldedit.player_notify(name, "WARNING: this operation could affect up to " .. count .. " nodes; type //y to continue or //n to cancel") + end +end + +local function reset_pending(name) + safe_region_callback[name], safe_region_param[name] = nil, nil +end + +minetest.register_chatcommand("/y", { + params = "", + description = "Confirm a pending operation", + func = function(name) + local callback, param = safe_region_callback[name], safe_region_param[name] + if not callback then + worldedit.player_notify(name, "no operation pending") + return + end + + safe_region_callback[name], safe_region_param[name] = nil, nil --reset pending operation + callback(name, param) + end, +}) + +minetest.register_chatcommand("/n", { + params = "", + description = "Confirm a pending operation", + func = function(name) + if not safe_region_callback[name] then + worldedit.player_notify(name, "no operation pending") + return + end + safe_region_callback[name], safe_region_param[name] = nil, nil + end, +}) + + +return safe_region, check_region, reset_pending diff --git a/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_cube.png b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_cube.png new file mode 100644 index 0000000..fde36a8 Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_cube.png differ diff --git a/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos1.png b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos1.png new file mode 100644 index 0000000..4c304aa Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos1.png differ diff --git a/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos2.png b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos2.png new file mode 100644 index 0000000..1502f16 Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit_commands/textures/worldedit_pos2.png differ diff --git a/mods/WorldEdit-1.2/worldedit_commands/wand.lua b/mods/WorldEdit-1.2/worldedit_commands/wand.lua new file mode 100644 index 0000000..0780801 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_commands/wand.lua @@ -0,0 +1,24 @@ +minetest.register_tool(":worldedit:wand", { + description = "WorldEdit Wand tool, Left-click to set 1st position, right-click to set 2nd", + inventory_image = "worldedit_wand.png", + stack_max = 1, -- there is no need to have more than one + liquids_pointable = true, -- ground with only water on can be selected as well + + on_use = function(itemstack, placer, pointed_thing) + if placer ~= nil and pointed_thing ~= nil and pointed_thing.type == "node" then + local name = placer:get_player_name() + worldedit.pos1[name] = pointed_thing.under + worldedit.mark_pos1(name) + end + return itemstack -- nothing consumed, nothing changed + end, + + on_place = function(itemstack, placer, pointed_thing) -- Left Click + if placer ~= nil and pointed_thing ~= nil and pointed_thing.type == "node" then + local name = placer:get_player_name() + worldedit.pos2[name] = pointed_thing.under + worldedit.mark_pos2(name) + end + return itemstack -- nothing consumed, nothing changed + end, +}) diff --git a/mods/WorldEdit-1.2/worldedit_gui/depends.txt b/mods/WorldEdit-1.2/worldedit_gui/depends.txt new file mode 100644 index 0000000..2558dce --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_gui/depends.txt @@ -0,0 +1,6 @@ +worldedit +worldedit_commands +unified_inventory? +inventory_plus? +sfinv? +creative? diff --git a/mods/WorldEdit-1.2/worldedit_gui/functionality.lua b/mods/WorldEdit-1.2/worldedit_gui/functionality.lua new file mode 100644 index 0000000..c25b790 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_gui/functionality.lua @@ -0,0 +1,790 @@ +--saved state for each player +local gui_nodename1 = {} --mapping of player names to node names +local gui_nodename2 = {} --mapping of player names to node names +local gui_axis1 = {} --mapping of player names to axes (one of 1, 2, 3, or 4, representing the axes in the `axis_indices` table below) +local gui_axis2 = {} --mapping of player names to axes (one of 1, 2, 3, or 4, representing the axes in the `axis_indices` table below) +local gui_distance1 = {} --mapping of player names to a distance (arbitrary strings may also appear as values) +local gui_distance2 = {} --mapping of player names to a distance (arbitrary strings may also appear as values) +local gui_distance3 = {} --mapping of player names to a distance (arbitrary strings may also appear as values) +local gui_count1 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values) +local gui_count2 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values) +local gui_count3 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values) +local gui_angle = {} --mapping of player names to an angle (one of 90, 180, 270, representing the angle in degrees clockwise) +local gui_filename = {} --mapping of player names to file names + +--set default values +setmetatable(gui_nodename1, {__index = function() return "Cobblestone" end}) +setmetatable(gui_nodename2, {__index = function() return "Stone" end}) +setmetatable(gui_axis1, {__index = function() return 4 end}) +setmetatable(gui_axis2, {__index = function() return 1 end}) +setmetatable(gui_distance1, {__index = function() return "10" end}) +setmetatable(gui_distance2, {__index = function() return "5" end}) +setmetatable(gui_distance3, {__index = function() return "2" end}) +setmetatable(gui_count1, {__index = function() return "3" end}) +setmetatable(gui_count2, {__index = function() return "6" end}) +setmetatable(gui_count3, {__index = function() return "4" end}) +setmetatable(gui_angle, {__index = function() return 90 end}) +setmetatable(gui_filename, {__index = function() return "building" end}) + +local axis_indices = {["X axis"]=1, ["Y axis"]=2, ["Z axis"]=3, ["Look direction"]=4} +local axis_values = {"x", "y", "z", "?"} +setmetatable(axis_indices, {__index = function () return 4 end}) +setmetatable(axis_values, {__index = function () return "?" end}) + +local angle_indices = {["90 degrees"]=1, ["180 degrees"]=2, ["270 degrees"]=3} +local angle_values = {90, 180, 270} +setmetatable(angle_indices, {__index = function () return 1 end}) +setmetatable(angle_values, {__index = function () return 90 end}) + +-- given multiple sets of privileges, produces a single set of privs that would have the same effect as requiring all of them at the same time +local combine_privs = function(...) + local result = {} + for i, privs in ipairs({...}) do + for name, value in pairs(privs) do + if result[name] ~= nil and result[name] ~= value then --the priv must be both true and false, which can never happen + return {__fake_priv_that_nobody_has__=true} --privilege table that can never be satisfied + end + result[name] = value + end + end + return result +end + +-- display node (or unknown_node image otherwise) at specified pos in formspec +local formspec_node = function(pos, nodename) + return nodename and string.format("item_image[%s;1,1;%s]", pos, nodename) + or string.format("image[%s;1,1;worldedit_gui_unknown.png]", pos) +end + +-- two further priv helpers +local function we_privs(command) + return minetest.chatcommands["/" .. command].privs +end + +local function combine_we_privs(list) + local args = {} + for _, t in ipairs(list) do + table.insert(args, we_privs(t)) + end + return combine_privs(unpack(args)) +end + +worldedit.register_gui_function("worldedit_gui_about", { + name = "About", + privs = {interact=true}, + on_select = function(name) + minetest.chatcommands["/about"].func(name, "") + end, +}) + +worldedit.register_gui_function("worldedit_gui_inspect", { + name = "Toggle Inspect", + privs = we_privs("inspect"), + on_select = function(name) + minetest.chatcommands["/inspect"].func(name, worldedit.inspect[name] and "disable" or "enable") + end, +}) + +worldedit.register_gui_function("worldedit_gui_region", { + name = "Get/Set Region", + privs = combine_we_privs({"p", "pos1", "pos2", "reset", "mark", "unmark", "volume", "fixedpos"}), + get_formspec = function(name) + local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name] + return "size[9,7]" .. worldedit.get_formspec_header("worldedit_gui_region") .. + "button_exit[0,1;3,0.8;worldedit_gui_p_get;Get Positions]" .. + "button_exit[3,1;3,0.8;worldedit_gui_p_set1;Choose Position 1]" .. + "button_exit[6,1;3,0.8;worldedit_gui_p_set2;Choose Position 2]" .. + "button_exit[0,2;3,0.8;worldedit_gui_pos1;Position 1 Here]" .. + "button_exit[3,2;3,0.8;worldedit_gui_pos2;Position 2 Here]" .. + "button_exit[6,2;3,0.8;worldedit_gui_reset;Reset Region]" .. + "button_exit[0,3;3,0.8;worldedit_gui_mark;Mark Region]" .. + "button_exit[3,3;3,0.8;worldedit_gui_unmark;Unmark Region]" .. + "button_exit[6,3;3,0.8;worldedit_gui_volume;Region Volume]" .. + "label[0,4.7;Position 1]" .. + string.format("field[2,5;1.5,0.8;worldedit_gui_fixedpos_pos1x;X ;%s]", pos1 and pos1.x or "") .. + string.format("field[3.5,5;1.5,0.8;worldedit_gui_fixedpos_pos1y;Y ;%s]", pos1 and pos1.y or "") .. + string.format("field[5,5;1.5,0.8;worldedit_gui_fixedpos_pos1z;Z ;%s]", pos1 and pos1.z or "") .. + "button_exit[6.5,4.68;2.5,0.8;worldedit_gui_fixedpos_pos1_submit;Set Position 1]" .. + "label[0,6.2;Position 2]" .. + string.format("field[2,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2x;X ;%s]", pos2 and pos2.x or "") .. + string.format("field[3.5,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2y;Y ;%s]", pos2 and pos2.y or "") .. + string.format("field[5,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2z;Z ;%s]", pos2 and pos2.z or "") .. + "button_exit[6.5,6.18;2.5,0.8;worldedit_gui_fixedpos_pos2_submit;Set Position 2]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_region", function(name, fields) + if fields.worldedit_gui_p_get then + minetest.chatcommands["/p"].func(name, "get") + return true + elseif fields.worldedit_gui_p_set1 then + minetest.chatcommands["/p"].func(name, "set1") + return true + elseif fields.worldedit_gui_p_set2 then + minetest.chatcommands["/p"].func(name, "set2") + return true + elseif fields.worldedit_gui_pos1 then + minetest.chatcommands["/pos1"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_pos2 then + minetest.chatcommands["/pos2"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_reset then + minetest.chatcommands["/reset"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_mark then + minetest.chatcommands["/mark"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_unmark then + minetest.chatcommands["/unmark"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_volume then + minetest.chatcommands["/volume"].func(name, "") + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_fixedpos_pos1_submit then + minetest.chatcommands["/fixedpos"].func(name, string.format("set1 %s %s %s", + tostring(fields.worldedit_gui_fixedpos_pos1x), + tostring(fields.worldedit_gui_fixedpos_pos1y), + tostring(fields.worldedit_gui_fixedpos_pos1z))) + worldedit.show_page(name, "worldedit_gui_region") + return true + elseif fields.worldedit_gui_fixedpos_pos2_submit then + minetest.chatcommands["/fixedpos"].func(name, string.format("set2 %s %s %s", + tostring(fields.worldedit_gui_fixedpos_pos2x), + tostring(fields.worldedit_gui_fixedpos_pos2y), + tostring(fields.worldedit_gui_fixedpos_pos2z))) + worldedit.show_page(name, "worldedit_gui_region") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_set", { + name = "Set Nodes", + privs = we_privs("set"), + get_formspec = function(name) + local node = gui_nodename1[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_set") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_set_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_set_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_set_submit;Set Nodes]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_set", function(name, fields) + if fields.worldedit_gui_set_search or fields.worldedit_gui_set_submit then + gui_nodename1[name] = tostring(fields.worldedit_gui_set_node) + worldedit.show_page(name, "worldedit_gui_set") + if fields.worldedit_gui_set_submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/set"].func(name, n) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_replace", { + name = "Replace Nodes", + privs = combine_we_privs({"replace", "replaceinverse"}), + get_formspec = function(name) + local search, replace = gui_nodename1[name], gui_nodename2[name] + local search_nodename, replace_nodename = worldedit.normalize_nodename(search), worldedit.normalize_nodename(replace) + return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_replace") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_replace_search;Name;%s]", minetest.formspec_escape(search)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_replace_search_search;Search]" .. + formspec_node("5.5,1.1", search_nodename) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_replace_replace;Name;%s]", minetest.formspec_escape(replace)) .. + "button[4,2.18;1.5,0.8;worldedit_gui_replace_replace_search;Search]" .. + formspec_node("5.5,2.1", replace_nodename) .. + "button_exit[0,3.5;3,0.8;worldedit_gui_replace_submit;Replace Nodes]" .. + "button_exit[3.5,3.5;3,0.8;worldedit_gui_replace_submit_inverse;Replace Inverse]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_replace", function(name, fields) + if fields.worldedit_gui_replace_search_search or fields.worldedit_gui_replace_replace_search + or fields.worldedit_gui_replace_submit or fields.worldedit_gui_replace_submit_inverse then + gui_nodename1[name] = tostring(fields.worldedit_gui_replace_search) + gui_nodename2[name] = tostring(fields.worldedit_gui_replace_replace) + worldedit.show_page(name, "worldedit_gui_replace") + + local submit = nil + if fields.worldedit_gui_replace_submit then + submit = "replace" + elseif fields.worldedit_gui_replace_submit_inverse then + submit = "replaceinverse" + end + if submit then + local n1 = worldedit.normalize_nodename(gui_nodename1[name]) + local n2 = worldedit.normalize_nodename(gui_nodename2[name]) + if n1 and n2 then + minetest.chatcommands["/"..submit].func(name, string.format("%s %s", n1, n2)) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_sphere_dome", { + name = "Sphere/Dome", + privs = combine_we_privs({"hollowsphere", "sphere", "hollowdome", "dome"}), + get_formspec = function(name) + local node, radius = gui_nodename1[name], gui_distance2[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,5]" .. worldedit.get_formspec_header("worldedit_gui_sphere_dome") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_sphere_dome_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_sphere_dome_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_sphere_dome_radius;Radius;%s]", minetest.formspec_escape(radius)) .. + "button_exit[0,3.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow;Hollow Sphere]" .. + "button_exit[3.5,3.5;3,0.8;worldedit_gui_sphere_dome_submit_solid;Solid Sphere]" .. + "button_exit[0,4.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow_dome;Hollow Dome]" .. + "button_exit[3.5,4.5;3,0.8;worldedit_gui_sphere_dome_submit_solid_dome;Solid Dome]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_sphere_dome", function(name, fields) + if fields.worldedit_gui_sphere_dome_search + or fields.worldedit_gui_sphere_dome_submit_hollow or fields.worldedit_gui_sphere_dome_submit_solid + or fields.worldedit_gui_sphere_dome_submit_hollow_dome or fields.worldedit_gui_sphere_dome_submit_solid_dome then + gui_nodename1[name] = tostring(fields.worldedit_gui_sphere_dome_node) + gui_distance2[name] = tostring(fields.worldedit_gui_sphere_dome_radius) + worldedit.show_page(name, "worldedit_gui_sphere_dome") + + local submit = nil + if fields.worldedit_gui_sphere_dome_submit_hollow then + submit = "hollowsphere" + elseif fields.worldedit_gui_sphere_dome_submit_solid then + submit = "sphere" + elseif fields.worldedit_gui_sphere_dome_submit_hollow_dome then + submit = "hollowdome" + elseif fields.worldedit_gui_sphere_dome_submit_solid_dome then + submit = "dome" + end + if submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/"..submit].func(name, string.format("%s %s", gui_distance2[name], n)) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_cylinder", { + name = "Cylinder", + privs = combine_we_privs({"hollowcylinder", "cylinder"}), + get_formspec = function(name) + local node, axis, length = gui_nodename1[name], gui_axis1[name], gui_distance1[name] + local radius1, radius2 = gui_distance2[name], gui_distance3[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_cylinder") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_cylinder_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_cylinder_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_cylinder_length;Length;%s]", minetest.formspec_escape(length)) .. + string.format("dropdown[4,2.18;2.5;worldedit_gui_cylinder_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + string.format("field[0.5,3.5;2,0.8;worldedit_gui_cylinder_radius1;Base Radius;%s]", minetest.formspec_escape(radius1)) .. + string.format("field[2.5,3.5;2,0.8;worldedit_gui_cylinder_radius2;Top Radius;%s]", minetest.formspec_escape(radius2)) .. + "label[0.25,4;Equal base and top radius creates a cylinder,\n".. + "zero top radius creates a cone.\nConsult documentation for more information.]".. + "button_exit[0,5.5;3,0.8;worldedit_gui_cylinder_submit_hollow;Hollow Cylinder]" .. + "button_exit[3.5,5.5;3,0.8;worldedit_gui_cylinder_submit_solid;Solid Cylinder]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_cylinder", function(name, fields) + if fields.worldedit_gui_cylinder_search + or fields.worldedit_gui_cylinder_submit_hollow or fields.worldedit_gui_cylinder_submit_solid then + gui_nodename1[name] = tostring(fields.worldedit_gui_cylinder_node) + gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis] + gui_distance1[name] = tostring(fields.worldedit_gui_cylinder_length) + gui_distance2[name] = tostring(fields.worldedit_gui_cylinder_radius1) + gui_distance3[name] = tostring(fields.worldedit_gui_cylinder_radius2) + worldedit.show_page(name, "worldedit_gui_cylinder") + + local submit = nil + if fields.worldedit_gui_cylinder_submit_hollow then + submit = "hollowcylinder" + elseif fields.worldedit_gui_cylinder_submit_solid then + submit = "cylinder" + end + if submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + local args = string.format("%s %s %s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], gui_distance2[name], gui_distance3[name], n) + minetest.chatcommands["/"..submit].func(name, args) + end + end + return true + end + if fields.worldedit_gui_cylinder_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis] + worldedit.show_page(name, "worldedit_gui_cylinder") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_pyramid", { + name = "Pyramid", + privs = we_privs("pyramid"), + get_formspec = function(name) + local node, axis, length = gui_nodename1[name], gui_axis1[name], gui_distance1[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_pyramid") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_pyramid_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_pyramid_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_pyramid_length;Length;%s]", minetest.formspec_escape(length)) .. + string.format("dropdown[4,2.18;2.5;worldedit_gui_pyramid_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + "button_exit[0,3.5;3,0.8;worldedit_gui_pyramid_submit_hollow;Hollow Pyramid]" .. + "button_exit[3.5,3.5;3,0.8;worldedit_gui_pyramid_submit_solid;Solid Pyramid]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_pyramid", function(name, fields) + if fields.worldedit_gui_pyramid_search or fields.worldedit_gui_pyramid_submit_solid or fields.worldedit_gui_pyramid_submit_hollow or fields.worldedit_gui_pyramid_axis then + gui_nodename1[name] = tostring(fields.worldedit_gui_pyramid_node) + gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis] + gui_distance1[name] = tostring(fields.worldedit_gui_pyramid_length) + worldedit.show_page(name, "worldedit_gui_pyramid") + + local submit = nil + if fields.worldedit_gui_pyramid_submit_solid then + submit = "pyramid" + elseif fields.worldedit_gui_pyramid_submit_hollow then + submit = "hollowpyramid" + end + if submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/"..submit].func(name, string.format("%s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], n)) + end + end + return true + end + if fields.worldedit_gui_pyramid_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis] + worldedit.show_page(name, "worldedit_gui_pyramid") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_spiral", { + name = "Spiral", + privs = we_privs("spiral"), + get_formspec = function(name) + local node, length, height, space = gui_nodename1[name], gui_distance1[name], gui_distance2[name], gui_distance3[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_spiral") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_spiral_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_spiral_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_spiral_length;Side Length;%s]", minetest.formspec_escape(length)) .. + string.format("field[0.5,3.5;4,0.8;worldedit_gui_spiral_height;Height;%s]", minetest.formspec_escape(height)) .. + string.format("field[0.5,4.5;4,0.8;worldedit_gui_spiral_space;Wall Spacing;%s]", minetest.formspec_escape(space)) .. + "button_exit[0,5.5;3,0.8;worldedit_gui_spiral_submit;Spiral]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_spiral", function(name, fields) + if fields.worldedit_gui_spiral_search or fields.worldedit_gui_spiral_submit then + gui_nodename1[name] = fields.worldedit_gui_spiral_node + gui_distance1[name] = tostring(fields.worldedit_gui_spiral_length) + gui_distance2[name] = tostring(fields.worldedit_gui_spiral_height) + gui_distance3[name] = tostring(fields.worldedit_gui_spiral_space) + worldedit.show_page(name, "worldedit_gui_spiral") + if fields.worldedit_gui_spiral_submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/spiral"].func(name, string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n)) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_copy_move", { + name = "Copy/Move", + privs = combine_we_privs({"copy", "move"}), + get_formspec = function(name) + local axis = gui_axis1[name] or 4 + local amount = gui_distance1[name] or "10" + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_copy_move") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_copy_move_amount;Amount;%s]", minetest.formspec_escape(amount)) .. + string.format("dropdown[4,1.18;2.5;worldedit_gui_copy_move_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_copy_move_copy;Copy Region]" .. + "button_exit[3.5,2.5;3,0.8;worldedit_gui_copy_move_move;Move Region]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_copy_move", function(name, fields) + if fields.worldedit_gui_copy_move_copy or fields.worldedit_gui_copy_move_move then + gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4 + gui_distance1[name] = tostring(fields.worldedit_gui_copy_move_amount) + worldedit.show_page(name, "worldedit_gui_copy_move") + if fields.worldedit_gui_copy_move_copy then + minetest.chatcommands["/copy"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name])) + else --fields.worldedit_gui_copy_move_move + minetest.chatcommands["/move"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name])) + end + return true + end + if fields.worldedit_gui_copy_move_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4 + worldedit.show_page(name, "worldedit_gui_copy_move") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_stack", { + name = "Stack", + privs = we_privs("stack"), + get_formspec = function(name) + local axis, count = gui_axis1[name], gui_count1[name] + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_stack") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_stack_count;Count;%s]", minetest.formspec_escape(count)) .. + string.format("dropdown[4,1.18;2.5;worldedit_gui_stack_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_stack_submit;Stack]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_stack", function(name, fields) + if fields.worldedit_gui_stack_submit then + gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis] + gui_count1[name] = tostring(fields.worldedit_gui_stack_count) + worldedit.show_page(name, "worldedit_gui_stack") + minetest.chatcommands["/stack"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_count1[name])) + return true + end + if fields.worldedit_gui_stack_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis] + worldedit.show_page(name, "worldedit_gui_stack") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_stretch", { + name = "Stretch", + privs = we_privs("stretch"), + get_formspec = function(name) + local stretchx, stretchy, stretchz = gui_count1[name], gui_count2[name], gui_count3[name] + return "size[5,5]" .. worldedit.get_formspec_header("worldedit_gui_stretch") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_stretch_x;Stretch X;%s]", minetest.formspec_escape(stretchx)) .. + string.format("field[0.5,2.5;4,0.8;worldedit_gui_stretch_y;Stretch Y;%s]", minetest.formspec_escape(stretchy)) .. + string.format("field[0.5,3.5;4,0.8;worldedit_gui_stretch_z;Stretch Z;%s]", minetest.formspec_escape(stretchz)) .. + "button_exit[0,4.5;3,0.8;worldedit_gui_stretch_submit;Stretch]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_stretch", function(name, fields) + if fields.worldedit_gui_stretch_submit then + gui_count1[name] = tostring(fields.worldedit_gui_stretch_x) + gui_count2[name] = tostring(fields.worldedit_gui_stretch_y) + gui_count3[name] = tostring(fields.worldedit_gui_stretch_z) + worldedit.show_page(name, "worldedit_gui_stretch") + minetest.chatcommands["/stretch"].func(name, string.format("%s %s %s", gui_count1[name], gui_count2[name], gui_count3[name])) + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_transpose", { + name = "Transpose", + privs = we_privs("transpose"), + get_formspec = function(name) + local axis1, axis2 = gui_axis1[name], gui_axis2[name] + return "size[5.5,3]" .. worldedit.get_formspec_header("worldedit_gui_transpose") .. + string.format("dropdown[0,1;2.5;worldedit_gui_transpose_axis1;X axis,Y axis,Z axis,Look direction;%d]", axis1) .. + string.format("dropdown[3,1;2.5;worldedit_gui_transpose_axis2;X axis,Y axis,Z axis,Look direction;%d]", axis2) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_transpose_submit;Transpose]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_transpose", function(name, fields) + if fields.worldedit_gui_transpose_submit then + gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1] + worldedit.show_page(name, "worldedit_gui_transpose") + minetest.chatcommands["/transpose"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], axis_values[gui_axis2[name]])) + return true + end + if fields.worldedit_gui_transpose_axis1 then + gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1] + worldedit.show_page(name, "worldedit_gui_transpose") + return true + end + if fields.worldedit_gui_transpose_axis2 then + gui_axis2[name] = axis_indices[fields.worldedit_gui_transpose_axis2] + worldedit.show_page(name, "worldedit_gui_transpose") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_flip", { + name = "Flip", + privs = we_privs("flip"), + get_formspec = function(name) + local axis = gui_axis1[name] + return "size[5,3]" .. worldedit.get_formspec_header("worldedit_gui_flip") .. + string.format("dropdown[0,1;2.5;worldedit_gui_flip_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_flip_submit;Flip]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_flip", function(name, fields) + if fields.worldedit_gui_flip_submit then + gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis] + worldedit.show_page(name, "worldedit_gui_flip") + minetest.chatcommands["/flip"].func(name, axis_values[gui_axis1[name]]) + return true + end + if fields.worldedit_gui_flip_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis] + worldedit.show_page(name, "worldedit_gui_flip") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_rotate", { + name = "Rotate", + privs = we_privs("rotate"), + get_formspec = function(name) + local axis, angle = gui_axis1[name], gui_angle[name] + return "size[5.5,3]" .. worldedit.get_formspec_header("worldedit_gui_rotate") .. + string.format("dropdown[0,1;2.5;worldedit_gui_rotate_angle;90 degrees,180 degrees,270 degrees;%s]", angle) .. + string.format("dropdown[3,1;2.5;worldedit_gui_rotate_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_rotate_submit;Rotate]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_rotate", function(name, fields) + if fields.worldedit_gui_rotate_submit then + gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis] + gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle] + worldedit.show_page(name, "worldedit_gui_rotate") + minetest.chatcommands["/rotate"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], angle_values[gui_angle[name]])) + return true + end + if fields.worldedit_gui_rotate_axis then + gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis] + worldedit.show_page(name, "worldedit_gui_rotate") + return true + end + if fields.worldedit_gui_rotate_angle then + gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle] + worldedit.show_page(name, "worldedit_gui_rotate") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_orient", { + name = "Orient", + privs = we_privs("orient"), + get_formspec = function(name) + local angle = gui_angle[name] + return "size[5,3]" .. worldedit.get_formspec_header("worldedit_gui_orient") .. + string.format("dropdown[0,1;2.5;worldedit_gui_orient_angle;90 degrees,180 degrees,270 degrees;%s]", angle) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_orient_submit;Orient]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_orient", function(name, fields) + if fields.worldedit_gui_orient_submit then + gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle] + worldedit.show_page(name, "worldedit_gui_orient") + minetest.chatcommands["/orient"].func(name, tostring(angle_values[gui_angle[name]])) + return true + end + if fields.worldedit_gui_orient_angle then + gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle] + worldedit.show_page(name, "worldedit_gui_orient") + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_fixlight", { + name = "Fix Lighting", + privs = we_privs("fixlight"), + on_select = function(name) + minetest.chatcommands["/fixlight"].func(name, "") + end, +}) + +worldedit.register_gui_function("worldedit_gui_hide", { + name = "Hide Region", + privs = we_privs("hide"), + on_select = function(name) + minetest.chatcommands["/hide"].func(name, "") + end, +}) + +worldedit.register_gui_function("worldedit_gui_suppress", { + name = "Suppress Nodes", + privs = we_privs("suppress"), + get_formspec = function(name) + local node = gui_nodename1[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_suppress") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_suppress_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_suppress_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_suppress_submit;Suppress Nodes]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_suppress", function(name, fields) + if fields.worldedit_gui_suppress_search or fields.worldedit_gui_suppress_submit then + gui_nodename1[name] = tostring(fields.worldedit_gui_suppress_node) + worldedit.show_page(name, "worldedit_gui_suppress") + if fields.worldedit_gui_suppress_submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/suppress"].func(name, n) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_highlight", { + name = "Highlight Nodes", + privs = we_privs("highlight"), + get_formspec = function(name) + local node = gui_nodename1[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_highlight") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_highlight_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_highlight_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_highlight_submit;Highlight Nodes]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_highlight", function(name, fields) + if fields.worldedit_gui_highlight_search or fields.worldedit_gui_highlight_submit then + gui_nodename1[name] = tostring(fields.worldedit_gui_highlight_node) + worldedit.show_page(name, "worldedit_gui_highlight") + if fields.worldedit_gui_highlight_submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + minetest.chatcommands["/highlight"].func(name, n) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_restore", { + name = "Restore Region", + privs = we_privs("restore"), + on_select = function(name) + minetest.chatcommands["/restore"].func(name, "") + end, +}) + +worldedit.register_gui_function("worldedit_gui_save_load", { + name = "Save/Load", + privs = combine_we_privs({"save", "allocate", "load"}), + get_formspec = function(name) + local filename = gui_filename[name] + return "size[6,4]" .. worldedit.get_formspec_header("worldedit_gui_save_load") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_save_filename;Filename;%s]", minetest.formspec_escape(filename)) .. + "button_exit[0,2.5;3,0.8;worldedit_gui_save_load_submit_save;Save]" .. + "button_exit[3,2.5;3,0.8;worldedit_gui_save_load_submit_allocate;Allocate]" .. + "button_exit[0,3.5;3,0.8;worldedit_gui_save_load_submit_load;Load]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_save_load", function(name, fields) + if fields.worldedit_gui_save_load_submit_save or fields.worldedit_gui_save_load_submit_allocate or fields.worldedit_gui_save_load_submit_load then + gui_filename[name] = tostring(fields.worldedit_gui_save_filename) + worldedit.show_page(name, "worldedit_gui_save_load") + if fields.worldedit_gui_save_load_submit_save then + minetest.chatcommands["/save"].func(name, gui_filename[name]) + elseif fields.worldedit_gui_save_load_submit_allocate then + minetest.chatcommands["/allocate"].func(name, gui_filename[name]) + else --fields.worldedit_gui_save_load_submit_load + minetest.chatcommands["/load"].func(name, gui_filename[name]) + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_cube", { + name = "Cuboid", -- technically the command is misnamed, I know... + privs = combine_we_privs({"hollowcube", "cube"}), + get_formspec = function(name) + local width, height, length = gui_distance1[name], gui_distance2[name], gui_distance3[name] + local node = gui_nodename1[name] + local nodename = worldedit.normalize_nodename(node) + return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_cube") .. + string.format("field[0.5,1.5;4,0.8;worldedit_gui_cube_node;Name;%s]", minetest.formspec_escape(node)) .. + "button[4,1.18;1.5,0.8;worldedit_gui_cube_search;Search]" .. + formspec_node("5.5,1.1", nodename) .. + string.format("field[0.5,2.5;1,0.8;worldedit_gui_cube_width;Width;%s]", minetest.formspec_escape(width)) .. + string.format("field[1.5,2.5;1,0.8;worldedit_gui_cube_height;Height;%s]", minetest.formspec_escape(height)) .. + string.format("field[2.5,2.5;1,0.8;worldedit_gui_cube_length;Length;%s]", minetest.formspec_escape(length)) .. + "button_exit[0,3.5;3,0.8;worldedit_gui_cube_submit_hollow;Hollow Cuboid]" .. + "button_exit[3.5,3.5;3,0.8;worldedit_gui_cube_submit_solid;Solid Cuboid]" + end, +}) + +worldedit.register_gui_handler("worldedit_gui_cube", function(name, fields) + if fields.worldedit_gui_cube_search + or fields.worldedit_gui_cube_submit_hollow or fields.worldedit_gui_cube_submit_solid then + gui_nodename1[name] = tostring(fields.worldedit_gui_cube_node) + gui_distance1[name] = tostring(fields.worldedit_gui_cube_width) + gui_distance2[name] = tostring(fields.worldedit_gui_cube_height) + gui_distance3[name] = tostring(fields.worldedit_gui_cube_length) + worldedit.show_page(name, "worldedit_gui_cube") + + local submit = nil + if fields.worldedit_gui_cube_submit_hollow then + submit = "hollowcube" + elseif fields.worldedit_gui_cube_submit_solid then + submit = "cube" + end + if submit then + local n = worldedit.normalize_nodename(gui_nodename1[name]) + if n then + local args = string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n) + minetest.chatcommands["/"..submit].func(name, args) + end + end + return true + end + return false +end) + +worldedit.register_gui_function("worldedit_gui_clearobjects", { + name = "Clear Objects", + privs = we_privs("clearobjects"), + on_select = function(name) + minetest.chatcommands["/clearobjects"].func(name, "") + end, +}) diff --git a/mods/WorldEdit-1.2/worldedit_gui/init.lua b/mods/WorldEdit-1.2/worldedit_gui/init.lua new file mode 100644 index 0000000..137a057 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_gui/init.lua @@ -0,0 +1,236 @@ +worldedit = worldedit or {} + +--[[ +Example: + + worldedit.register_gui_function("worldedit_gui_hollow_cylinder", { + name = "Make Hollow Cylinder", + privs = {worldedit=true}, + get_formspec = function(name) return "some formspec here" end, + on_select = function(name) print(name .. " clicked the button!") end, + }) + +Use `nil` for the `options` parameter to unregister the function associated with the given identifier. + +Use `nil` for the `get_formspec` field to denote that the function does not have its own screen. + +The `privs` field may not be `nil`. + +If the identifier is already registered to another function, it will be replaced by the new one. + +The `on_select` function must not call `worldedit.show_page` +]] + +worldedit.pages = {} --mapping of identifiers to options +local identifiers = {} --ordered list of identifiers +worldedit.register_gui_function = function(identifier, options) + if options.privs == nil or next(options.privs) == nil then + error("privs unset") + end + worldedit.pages[identifier] = options + table.insert(identifiers, identifier) +end + +--[[ +Example: + + worldedit.register_gui_handler("worldedit_gui_hollow_cylinder", function(name, fields) + print(minetest.serialize(fields)) + end) +]] + +worldedit.register_gui_handler = function(identifier, handler) + local enabled = true + minetest.register_on_player_receive_fields(function(player, formname, fields) + if not enabled then return false end + enabled = false + minetest.after(0.2, function() enabled = true end) + local name = player:get_player_name() + + --ensure the player has permission to perform the action + local entry = worldedit.pages[identifier] + if entry and minetest.check_player_privs(name, entry.privs) then + return handler(name, fields) + end + return false + end) +end + +worldedit.get_formspec_header = function(identifier) + local entry = worldedit.pages[identifier] or {} + return "button[0,0;2,0.5;worldedit_gui;Back]" .. + string.format("label[2,0;WorldEdit GUI > %s]", entry.name or "") +end + +local get_formspec = function(name, identifier) + if worldedit.pages[identifier] then + return worldedit.pages[identifier].get_formspec(name) + end + return worldedit.pages["worldedit_gui"].get_formspec(name) --default to showing main page if an unknown page is given +end + +--implement worldedit.show_page(name, page) in different ways depending on the available APIs +if rawget(_G, "unified_inventory") then --unified inventory installed + local old_func = worldedit.register_gui_function + worldedit.register_gui_function = function(identifier, options) + old_func(identifier, options) + unified_inventory.register_page(identifier, {get_formspec=function(player) return {formspec=options.get_formspec(player:get_player_name())} end}) + end + + unified_inventory.register_button("worldedit_gui", { + type = "image", + image = "inventory_plus_worldedit_gui.png", + }) + + minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.worldedit_gui then --main page + worldedit.show_page(name, "worldedit_gui") + return true + elseif fields.worldedit_gui_exit then --return to original page + local player = minetest.get_player_by_name(name) + if player then + unified_inventory.set_inventory_formspec(player, "craft") + end + return true + end + return false + end) + + worldedit.show_page = function(name, page) + local player = minetest.get_player_by_name(name) + if player then + player:set_inventory_formspec(get_formspec(name, page)) + end + end +elseif rawget(_G, "inventory_plus") then --inventory++ installed + minetest.register_on_joinplayer(function(player) + local can_worldedit = minetest.check_player_privs(player:get_player_name(), {worldedit=true}) + if can_worldedit then + inventory_plus.register_button(player, "worldedit_gui", "WorldEdit") + end + end) + + --show the form when the button is pressed and hide it when done + local gui_player_formspecs = {} + minetest.register_on_player_receive_fields(function(player, formname, fields) + local name = player:get_player_name() + if fields.worldedit_gui then --main page + gui_player_formspecs[name] = player:get_inventory_formspec() + worldedit.show_page(name, "worldedit_gui") + return true + elseif fields.worldedit_gui_exit then --return to original page + if gui_player_formspecs[name] then + inventory_plus.set_inventory_formspec(player, inventory_plus.get_formspec(player, "main")) + end + return true + end + return false + end) + + worldedit.show_page = function(name, page) + local player = minetest.get_player_by_name(name) + if player then + inventory_plus.set_inventory_formspec(player, get_formspec(name, page)) + end + end +elseif rawget(_G, "sfinv") then --sfinv installed (part of minetest_game since 0.4.15) + assert(sfinv.enabled) + local orig_get = sfinv.pages["sfinv:crafting"].get + sfinv.override_page("sfinv:crafting", { + get = function(self, player, context) + local can_worldedit = minetest.check_player_privs(player, {worldedit=true}) + local fs = orig_get(self, player, context) + return fs .. (can_worldedit and "image_button[0,0;1,1;inventory_plus_worldedit_gui.png;worldedit_gui;]" or "") + end + }) + + --compatibility with pre-0.4.16 sfinv + local set_page = sfinv.set_page or function(player, name) + --assumptions: src pg has no leave callback, dst pg has no enter callback + local ctx = {page=name} + sfinv.contexts[player:get_player_name()] = ctx + sfinv.set_player_inventory_formspec(player, ctx) + end + + --show the form when the button is pressed and hide it when done + minetest.register_on_player_receive_fields(function(player, formname, fields) + if fields.worldedit_gui then --main page + worldedit.show_page(player:get_player_name(), "worldedit_gui") + return true + elseif fields.worldedit_gui_exit then --return to original page + set_page(player, "sfinv:crafting") + return true + end + return false + end) + + worldedit.show_page = function(name, page) + local player = minetest.get_player_by_name(name) + if player then + player:set_inventory_formspec(get_formspec(name, page)) + end + end +else + error( + "worldedit_gui requires a supported \"gui management\" mod to be installed\n".. + "To use the GUI you need to either\n".. + "* Use minetest_game (at least 0.4.15) or a subgame with compatible sfinv\n".. + "* Install Unified Inventory or Inventory++\n".. + "If you do not want to use worldedit_gui, disable it by editing world.mt or from the Main Menu" + ) +end + +worldedit.register_gui_function("worldedit_gui", { + name = "WorldEdit GUI", + privs = {interact=true}, + get_formspec = function(name) + --create a form with all the buttons arranged in a grid + local buttons, x, y, index = {}, 0, 1, 0 + local width, height = 3, 0.8 + local columns = 5 + for i, identifier in pairs(identifiers) do + if identifier ~= "worldedit_gui" then + local entry = worldedit.pages[identifier] + table.insert(buttons, string.format((entry.get_formspec and "button" or "button_exit") .. + "[%g,%g;%g,%g;%s;%s]", x, y, width, height, identifier, minetest.formspec_escape(entry.name))) + + index, x = index + 1, x + width + if index == columns then --row is full + x, y = 0, y + height + index = 0 + end + end + end + if index == 0 then --empty row + y = y - height + end + return string.format("size[%g,%g]", math.max(columns * width, 5), math.max(y + 0.5, 3)) .. + "button[0,0;2,0.5;worldedit_gui_exit;Back]" .. + "label[2,0;WorldEdit GUI]" .. + table.concat(buttons) + end, +}) + +worldedit.register_gui_handler("worldedit_gui", function(name, fields) + for identifier, entry in pairs(worldedit.pages) do --check for WorldEdit GUI main formspec button selection + if fields[identifier] and identifier ~= "worldedit_gui" then + --ensure player has permission to perform action + local has_privs, missing_privs = minetest.check_player_privs(name, entry.privs) + if not has_privs then + worldedit.player_notify(name, "you are not allowed to use this function (missing privileges: " .. table.concat(missing_privs, ", ") .. ")") + return false + end + if entry.on_select then + entry.on_select(name) + end + if entry.get_formspec then + worldedit.show_page(name, identifier) + end + return true + end + end + return false +end) + +dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/functionality.lua") diff --git a/mods/WorldEdit-1.2/worldedit_gui/textures/inventory_plus_worldedit_gui.png b/mods/WorldEdit-1.2/worldedit_gui/textures/inventory_plus_worldedit_gui.png new file mode 100644 index 0000000..ff9404b Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit_gui/textures/inventory_plus_worldedit_gui.png differ diff --git a/mods/WorldEdit-1.2/worldedit_gui/textures/worldedit_gui_unknown.png b/mods/WorldEdit-1.2/worldedit_gui/textures/worldedit_gui_unknown.png new file mode 100644 index 0000000..f57436c Binary files /dev/null and b/mods/WorldEdit-1.2/worldedit_gui/textures/worldedit_gui_unknown.png differ diff --git a/mods/WorldEdit-1.2/worldedit_shortcommands/depends.txt b/mods/WorldEdit-1.2/worldedit_shortcommands/depends.txt new file mode 100644 index 0000000..a741c93 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_shortcommands/depends.txt @@ -0,0 +1 @@ +worldedit_commands diff --git a/mods/WorldEdit-1.2/worldedit_shortcommands/init.lua b/mods/WorldEdit-1.2/worldedit_shortcommands/init.lua new file mode 100644 index 0000000..c8b0ab2 --- /dev/null +++ b/mods/WorldEdit-1.2/worldedit_shortcommands/init.lua @@ -0,0 +1,52 @@ +--provides shorter names for the commands in `worldedit_commands` + +--returns true if command could not be aliased, false otherwise +worldedit.alias_chatcommand = function(alias, original_command) + if not minetest.chatcommands[original_command] then + minetest.log("error", "worldedit_shortcommands: original command " .. original_command .. " does not exist") + return true + end + if minetest.chatcommands[alias] then + minetest.log("error", "worldedit_shortcommands: alias " .. alias .. " already exists") + return true + end + minetest.register_chatcommand(alias, minetest.chatcommands[original_command]) + return false +end + +worldedit.alias_chatcommand("/i", "/inspect") +worldedit.alias_chatcommand("/rst", "/reset") +worldedit.alias_chatcommand("/mk", "/mark") +worldedit.alias_chatcommand("/umk", "/unmark") +worldedit.alias_chatcommand("/1", "/pos1") +worldedit.alias_chatcommand("/2", "/pos2") +worldedit.alias_chatcommand("/fp", "/fixedpos") +worldedit.alias_chatcommand("/v", "/volume") +worldedit.alias_chatcommand("/s", "/set") +worldedit.alias_chatcommand("/r", "/replace") +worldedit.alias_chatcommand("/ri", "/replaceinverse") +worldedit.alias_chatcommand("/hcube", "/hollowcube") +worldedit.alias_chatcommand("/hspr", "/hollowsphere") +worldedit.alias_chatcommand("/spr", "/sphere") +worldedit.alias_chatcommand("/hdo", "/hollowdome") +worldedit.alias_chatcommand("/do", "/dome") +worldedit.alias_chatcommand("/hcyl", "/hollowcylinder") +worldedit.alias_chatcommand("/cyl", "/cylinder") +worldedit.alias_chatcommand("/hpyr", "/hollowpyramid") +worldedit.alias_chatcommand("/pyr", "/pyramid") +worldedit.alias_chatcommand("/spl", "/spiral") +worldedit.alias_chatcommand("/m", "/move") +worldedit.alias_chatcommand("/c", "/copy") +worldedit.alias_chatcommand("/stk", "/stack") +worldedit.alias_chatcommand("/sch", "/stretch") +worldedit.alias_chatcommand("/tps", "/transpose") +worldedit.alias_chatcommand("/fl", "/flip") +worldedit.alias_chatcommand("/rot", "/rotate") +worldedit.alias_chatcommand("/ort", "/orient") +worldedit.alias_chatcommand("/hi", "/hide") +worldedit.alias_chatcommand("/sup", "/suppress") +worldedit.alias_chatcommand("/hlt", "/highlight") +worldedit.alias_chatcommand("/rsr", "/restore") +worldedit.alias_chatcommand("/l", "/lua") +worldedit.alias_chatcommand("/lt", "/luatransform") +worldedit.alias_chatcommand("/clro", "/clearobjects") diff --git a/mods/addcrosshair/depends.txt b/mods/addcrosshair/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/mods/addcrosshair/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/addcrosshair/init.lua b/mods/addcrosshair/init.lua new file mode 100644 index 0000000..b85061d --- /dev/null +++ b/mods/addcrosshair/init.lua @@ -0,0 +1,16 @@ +local function setflags(player) + player:hud_set_flags({crosshair=false}) +end +minetest.register_on_joinplayer(function(player) + + local hud = player:hud_add({ + hud_elem_type = "image", + position = {x = .5, y = .5}, + offset = {x = 0, y = 0}, + text = "crosshair.png", + scale = { x = 1, y = 1}, + alignment = { x = 0, y = 0 }, + }) + minetest.after(0, setflags, player) + +end) \ No newline at end of file diff --git a/mods/anticombatlog/depends.txt b/mods/anticombatlog/depends.txt new file mode 100644 index 0000000..4a84cc0 --- /dev/null +++ b/mods/anticombatlog/depends.txt @@ -0,0 +1,3 @@ +default +playeranim? +playertag? diff --git a/mods/anticombatlog/init.lua b/mods/anticombatlog/init.lua new file mode 100644 index 0000000..765db14 --- /dev/null +++ b/mods/anticombatlog/init.lua @@ -0,0 +1,234 @@ +-- How long in seconds until a battle ends (times since last hit) +local battletimeout = 15 +local armor_installed = minetest.get_modpath("3d_armor") +-- Fight start message +local FightMessage = "You entered a Fight!" + +-- Fight end message +local EndFightMessage = "The Fight is Over!" + +local playerinpvp = {} + +minetest.register_privilege("combatlog", { + description = "Used to kill a combat logger when he joins.", + give_to_singleplayer= false, +}) + +local incombat_hud = {} + +local function setplayerpvp(playername) + if not playerinpvp[playername] then + playerinpvp[playername] = 0 + local player = minetest.get_player_by_name(playername) + incombat_hud[playername] = player:hud_add({ + hud_elem_type = "image", + position = {x = 1, y = .75}, + offset = {x = -220, y = 0}, + text = "incombat.png", + scale = { x = 10, y = 10}, + alignment = { x = 1, y = 0 }, + }) + --minetest.chat_send_player(playername, FightMessage) + end +end + +local function resettime(playername) + if playerinpvp[playername] ~= nil then + playerinpvp[playername] = 0 + end +end + +local function endtimer(playername) + if playerinpvp[playername] ~= nil then + local player = minetest.get_player_by_name(playername) + if player then + player:hud_remove(incombat_hud[playername]) + end + --minetest.chat_send_player(playername, EndFightMessage) + playerinpvp[playername] = nil + end +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 +local function dropinventory(invref, pos) + for i = 1, invref:get_size("main") do + drop(pos, invref:get_stack("main", i)) + end +end + +local function killcombatlogger(player) + local player_inv = player:get_inventory() + local armor_inv = minetest.get_inventory({type="detached", name=player:get_player_name().."_armor"}) + player_inv:set_list("main", {}) + player_inv:set_list("craft", {}) + if armor_installed then + player_inv:set_list("armor", {}) + armor_inv:set_list("armor", {}) + armor:save_armor_inventory(player) + end + player:set_hp(0) + local privs = minetest.get_player_privs(player:get_player_name()) + privs.combatlog = nil + privs.interact = true + minetest.set_player_privs(player:get_player_name(), privs) + minetest.chat_send_player(player:get_player_name(), "You died after combat logging.") + +end +local ghost_player = {} +local function on_combatlog(player, playername) + --minetest.chat_send_all("*** "..tostring(playername).." Combat Logged!") + local skin = "character.png" + local armortex = "" + if armor_installed then + skin = armor.textures[playername].skin or "character.png" + armortex = armor.textures[playername].armor + end + local pos = player:getpos() + pos.y = pos.y + 1 + local obj = minetest.add_entity(pos, "anticombatlog:ghost") + ghost_player[playername] = obj + if obj then + obj:set_armor_groups(player:get_armor_groups()) + obj:set_properties({nametag = playername}) + obj:set_hp(player:get_hp()) + obj:set_wielded_item(player:get_wielded_item()) + obj:setyaw(player:get_look_horizontal()) + if armor_installed then + obj:set_properties({textures = {skin.."^"..armortex}}) + else + obj:set_properties({textures = {skin}}) + end + end + local ghost_inv = minetest.create_detached_inventory(playername.."_ghost", {}) + local player_inv = player:get_inventory() + local armor_inv = minetest.get_inventory({type="detached", name=playername.."_armor"}) + for i = 1, player_inv:get_size("main") do + ghost_inv:set_size("main", (ghost_inv:get_size("main")+1)) + ghost_inv:add_item("main", player_inv:get_stack("main", i)) + end + for i = 1, player_inv:get_size("craft") do + ghost_inv:set_size("main", (ghost_inv:get_size("main")+1)) + ghost_inv:add_item("main", player_inv:get_stack("craft", i)) + end + if armor_installed and armor_inv then + for i = 1, armor_inv:get_size("armor") do + ghost_inv:set_size("main", (ghost_inv:get_size("main")+1)) + ghost_inv:add_item("main", armor_inv:get_stack("armor", i)) + end + end + minetest.after((battletimeout - playerinpvp[playername]) or battletimeout, function(obj) + obj:remove() + end, obj) + +end + +minetest.register_on_punchplayer(function(player, hitter) + if not (player:is_player() and hitter:is_player() ) then + return + end + + local hittername = hitter:get_player_name() + local victimname = player:get_player_name() + + setplayerpvp(hittername) + setplayerpvp(victimname) -- moved OPCE check + + resettime(hittername) + resettime(victimname) -- won't affect non-registered victims +end) + +minetest.register_globalstep(function(dtime) + for fighter,oldtime in pairs(playerinpvp) do + if playerinpvp[fighter] then + local newtime = oldtime + dtime + playerinpvp[fighter] = newtime + if newtime >= battletimeout then + endtimer(fighter) + end + end + end +end) +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + if playerinpvp[name] and playerinpvp[name] > 0 then + on_combatlog(player, name) + --endtimer(name) + end +end) +minetest.register_on_dieplayer(function(player) + local name = player:get_player_name() + endtimer(name) +end) +minetest.register_on_joinplayer(function(player) + local playername = player:get_player_name() + if ghost_player[playername] and ghost_player[playername]:get_luaentity() then + player:set_hp(ghost_player[playername]:get_hp()) + ghost_player[playername]:remove() + incombat_hud[playername] = player:hud_add({ + hud_elem_type = "image", + position = {x = 1, y = .75}, + offset = {x = -220, y = 0}, + text = "incombat.png", + scale = { x = 10, y = 10}, + alignment = { x = 1, y = 0 }, + }) + end + local privs = minetest.get_player_privs(playername) + if privs.combatlog and not privs.ban then + minetest.after(.1, killcombatlogger, player) + end +end) + +minetest.register_entity("anticombatlog:ghost", +{ + hp_max = 20, + physical = false, + collisionbox = {-0.35,-1.0,-0.35, 0.35,0.8,0.35}, + visual = "mesh", + visual_size = {x=1, y=1}, + mesh = "character.b3d", + textures = {"character.png"}, -- number of required textures depends on visual + is_visible = true, + on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir) + if tool_capabilities then + -- Get tool-based damage + local current_damage = tool_capabilities.damage_groups.fleshy + -- Check if player is punching before full punch interval + if time_from_last_punch < tool_capabilities.full_punch_interval then + -- Calculate damage for current tool based on the time from last punch + current_damage = + math.floor( + (time_from_last_punch / tool_capabilities.full_punch_interval) * current_damage + ) + end + -- Remove guard if killed + if self.object:get_hp() - current_damage <= 0 then + local playername = self.object:get_properties().nametag + local invref = minetest.get_inventory({type="detached", name=playername.."_ghost"}) + local pos = self.object:get_pos() + dropinventory(invref, pos) + local privs = minetest.get_player_privs(playername) + privs.combatlog = true + privs.interact = nil + minetest.set_player_privs(playername, privs) + self.object:remove() + end + end + end, + on_activate = function(self, staticdata, dtime_s) + if staticdata == "expired" then + self.object:remove() + end + end, + get_staticdata = function(self) + return "expired" + end, +}) \ No newline at end of file diff --git a/mods/anticombatlog/textures/incombat.png b/mods/anticombatlog/textures/incombat.png new file mode 100644 index 0000000..7705394 Binary files /dev/null and b/mods/anticombatlog/textures/incombat.png differ diff --git a/mods/banondie/init.lua b/mods/banondie/init.lua new file mode 100644 index 0000000..40d0f97 --- /dev/null +++ b/mods/banondie/init.lua @@ -0,0 +1,58 @@ +local deadbanned = {} +local deathlength = 3600 + +local world_path = minetest.get_worldpath() +local file = world_path .. "/deadpeople.txt" + +local function banondie_read() + local input = io.open(file, "r") + if input then + repeat + local name, deathtime = string.match(input:read("*l"), "(%D+) (%d+)") + if name and deathtime then + deadbanned[name] = deathtime + end + until input:read(0) == nil + io.close(input) + end +end + +minetest.after(5, banondie_read) + +local function banondie_save() + if not deadbanned then + return + end + local data = {} + local output = io.open(file, "w") + for name, deathtime in pairs(deadbanned) do + table.insert(data, string.format("%s %s\n", name, deathtime)) + end + table.insert(data, string.format("%s", "end")) + output:write(table.concat(data)) + io.close(output) +end + +minetest.register_on_dieplayer(function(player) + if minetest.get_player_privs(player:get_player_name()).ban == nil then + deadbanned[player:get_player_name()] = os.time() + banondie_save() + end +end) + +minetest.register_on_respawnplayer(function(player) + if minetest.get_player_privs(player:get_player_name()).ban == nil then + minetest.kick_player(player:get_player_name(), "You died. You must wait in hour before joining again.") + end +end) + +minetest.register_on_prejoinplayer(function(name, ip) + if deadbanned[name] then + if (os.time() - deadbanned[name]) > deathlength then + deadbanned[name] = nil + banondie_save() + elseif minetest.get_player_privs(name).ban == nil then + return "You died. You must wait in hour before joining again." + end + end +end) \ No newline at end of file diff --git a/mods/bedrock2/COPYING b/mods/bedrock2/COPYING new file mode 100644 index 0000000..5a8e332 --- /dev/null +++ b/mods/bedrock2/COPYING @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/mods/bedrock2/README.md b/mods/bedrock2/README.md new file mode 100644 index 0000000..5309a58 --- /dev/null +++ b/mods/bedrock2/README.md @@ -0,0 +1,11 @@ +# Bedrock [`bedrock2`] + +Version 1.2.2 + +## Description +This mod adds an indestructible bedrock layer at the bottom of the world. + +## Configuration +This mod recognizes the following minetest.conf setting: + +* `bedrock2_y`: Sets the Y coordinate on which the bedrock layer will be created (default: -30912). diff --git a/mods/bedrock2/depends.txt b/mods/bedrock2/depends.txt new file mode 100644 index 0000000..22c1fff --- /dev/null +++ b/mods/bedrock2/depends.txt @@ -0,0 +1,2 @@ +intllib? +mesecons_mvps? diff --git a/mods/bedrock2/description.txt b/mods/bedrock2/description.txt new file mode 100644 index 0000000..0de789f --- /dev/null +++ b/mods/bedrock2/description.txt @@ -0,0 +1 @@ +Adds an indestructable bedrock layer at the bottom of the world. diff --git a/mods/bedrock2/init.lua b/mods/bedrock2/init.lua new file mode 100644 index 0000000..6bccf84 --- /dev/null +++ b/mods/bedrock2/init.lua @@ -0,0 +1,56 @@ +-- 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 + +local bedrock = {} + +bedrock.layer = -2000 -- determined as appropriate by experiment +bedrock.node = {name = "bedrock2:bedrock"} + +local depth = tonumber(minetest.setting_get("bedrock2_y")) +if depth ~= nil then + bedrock.layer = depth +end + +minetest.register_on_generated(function(minp, maxp) + if maxp.y >= bedrock.layer and minp.y <= bedrock.layer then + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local data = vm:get_data() + local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + local c_bedrock = minetest.get_content_id("bedrock2:bedrock") + + for x = minp.x, maxp.x do + for z = minp.z, maxp.z do + local p_pos = area:index(x, bedrock.layer, z) + data[p_pos] = c_bedrock + end + end + + vm:set_data(data) + vm:calc_lighting() + vm:update_liquids() + vm:write_to_map() + end +end) + +minetest.register_node("bedrock2:bedrock", { + description = S("Bedrock"), + _doc_items_longdesc = S("Bedrock is a very hard block. It cannot be mined, altered, destroyed or moved by any means. It appears at the bottom of the world in a flat layer."), + tiles = {"bedrock2_bedrock.png"}, + groups = {immortal=1, not_in_creative_inventory=1, }, + sounds = { footstep = { name = "bedrock2_step", gain = 1 } }, + is_ground_content = false, + on_blast = function() end, + on_destruct = function () end, + can_dig = function() return false end, + diggable = false, + drop = "", +}) + +if minetest.get_modpath("mesecons_mvps") ~= nil then + mesecon.register_mvps_stopper("bedrock2:bedrock") +end diff --git a/mods/bedrock2/locale/de.txt b/mods/bedrock2/locale/de.txt new file mode 100644 index 0000000..5e082dc --- /dev/null +++ b/mods/bedrock2/locale/de.txt @@ -0,0 +1,2 @@ +Bedrock = Grundgestein +Bedrock is a very hard block. It cannot be mined, altered, destroyed or moved by any means. It appears at the bottom of the world in a flat layer. = Grundgestein ist sehr hart. Es kann nicht gegraben, verändert, zerstört oder bewegt werden. Es taucht am Boden der Welt in einer flachen Ebene auf. diff --git a/mods/bedrock2/locale/template.txt b/mods/bedrock2/locale/template.txt new file mode 100644 index 0000000..555f804 --- /dev/null +++ b/mods/bedrock2/locale/template.txt @@ -0,0 +1,2 @@ +Bedrock +Bedrock is a very hard block. It cannot be mined, altered, destroyed or moved by any means. It appears at the bottom of the world in a flat layer. diff --git a/mods/bedrock2/mod.conf b/mods/bedrock2/mod.conf new file mode 100644 index 0000000..2223c7e --- /dev/null +++ b/mods/bedrock2/mod.conf @@ -0,0 +1 @@ +name = bedrock2 diff --git a/mods/bedrock2/screenshot.png b/mods/bedrock2/screenshot.png new file mode 100644 index 0000000..471d13e Binary files /dev/null and b/mods/bedrock2/screenshot.png differ diff --git a/mods/bedrock2/settingtypes.txt b/mods/bedrock2/settingtypes.txt new file mode 100644 index 0000000..e9f9818 --- /dev/null +++ b/mods/bedrock2/settingtypes.txt @@ -0,0 +1,2 @@ +# Sets the height (Y) at which the bedrock layer will be created. +bedrock2_y (Bedrock height) int -30912 diff --git a/mods/bedrock2/sounds/bedrock2_step.1.ogg b/mods/bedrock2/sounds/bedrock2_step.1.ogg new file mode 100644 index 0000000..63f364d Binary files /dev/null and b/mods/bedrock2/sounds/bedrock2_step.1.ogg differ diff --git a/mods/bedrock2/sounds/bedrock2_step.2.ogg b/mods/bedrock2/sounds/bedrock2_step.2.ogg new file mode 100644 index 0000000..cb3b91c Binary files /dev/null and b/mods/bedrock2/sounds/bedrock2_step.2.ogg differ diff --git a/mods/bedrock2/sounds/bedrock2_step.3.ogg b/mods/bedrock2/sounds/bedrock2_step.3.ogg new file mode 100644 index 0000000..2f97002 Binary files /dev/null and b/mods/bedrock2/sounds/bedrock2_step.3.ogg differ diff --git a/mods/bedrock2/textures/bedrock2_bedrock.png b/mods/bedrock2/textures/bedrock2_bedrock.png new file mode 100644 index 0000000..2d29423 Binary files /dev/null and b/mods/bedrock2/textures/bedrock2_bedrock.png differ diff --git a/mods/beds/README.txt b/mods/beds/README.txt new file mode 100644 index 0000000..cda6ebd --- /dev/null +++ b/mods/beds/README.txt @@ -0,0 +1,26 @@ +Minetest Game mod: beds +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by BlockMen (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +BlockMen (CC BY-SA 3.0) + +This mod adds a bed to Minetest which allows to skip the night. +To sleep, rightclick the bed. If playing in singleplayer mode the night gets skipped +immediately. If playing multiplayer you get shown how many other players are in bed too, +if all players are sleeping the night gets skipped. The night skip can be forced if more +than 50% of the players are lying in bed and use this option. + +Another feature is a controlled respawning. If you have slept in bed (not just lying in +it) your respawn point is set to the beds location and you will respawn there after +death. +You can disable the respawn at beds by setting "enable_bed_respawn = false" in +minetest.conf. +You can disable the night skip feature by setting "enable_bed_night_skip = false" in +minetest.conf or by using the /set command in-game. diff --git a/mods/beds/api.lua b/mods/beds/api.lua new file mode 100644 index 0000000..9349545 --- /dev/null +++ b/mods/beds/api.lua @@ -0,0 +1,171 @@ + +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, + }) + + 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/beds/beds.lua b/mods/beds/beds.lua new file mode 100644 index 0000000..bb2fd5d --- /dev/null +++ b/mods/beds/beds.lua @@ -0,0 +1,104 @@ +-- Fancy shaped bed + +beds.register_bed("beds:fancy_bed", { + description = "Fancy Bed", + inventory_image = "beds_bed_fancy.png", + wield_image = "beds_bed_fancy.png", + tiles = { + bottom = { + "beds_bed_top1.png", + "default_wood.png", + "beds_bed_side1.png", + "beds_bed_side1.png^[transformFX", + "default_wood.png", + "beds_bed_foot.png", + }, + top = { + "beds_bed_top2.png", + "default_wood.png", + "beds_bed_side2.png", + "beds_bed_side2.png^[transformFX", + "beds_bed_head.png", + "default_wood.png", + } + }, + nodebox = { + bottom = { + {-0.5, -0.5, -0.5, -0.375, -0.065, -0.4375}, + {0.375, -0.5, -0.5, 0.5, -0.065, -0.4375}, + {-0.5, -0.375, -0.5, 0.5, -0.125, -0.4375}, + {-0.5, -0.375, -0.5, -0.4375, -0.125, 0.5}, + {0.4375, -0.375, -0.5, 0.5, -0.125, 0.5}, + {-0.4375, -0.3125, -0.4375, 0.4375, -0.0625, 0.5}, + }, + top = { + {-0.5, -0.5, 0.4375, -0.375, 0.1875, 0.5}, + {0.375, -0.5, 0.4375, 0.5, 0.1875, 0.5}, + {-0.5, 0, 0.4375, 0.5, 0.125, 0.5}, + {-0.5, -0.375, 0.4375, 0.5, -0.125, 0.5}, + {-0.5, -0.375, -0.5, -0.4375, -0.125, 0.5}, + {0.4375, -0.375, -0.5, 0.5, -0.125, 0.5}, + {-0.4375, -0.3125, -0.5, 0.4375, -0.0625, 0.4375}, + } + }, + selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5}, + recipe = { + {"", "", "group:stick"}, + {"wool:red", "wool:red", "wool:white"}, + {"group:wood", "group:wood", "group:wood"}, + }, +}) + +-- Simple shaped bed + +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"} + }, +}) + +-- Aliases for PilzAdam's beds mod + +minetest.register_alias("beds:bed_bottom_red", "beds:bed_bottom") +minetest.register_alias("beds:bed_top_red", "beds:bed_top") + +-- Fuel + +minetest.register_craft({ + type = "fuel", + recipe = "beds:fancy_bed_bottom", + burntime = 13, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "beds:bed_bottom", + burntime = 12, +}) diff --git a/mods/beds/depends.txt b/mods/beds/depends.txt new file mode 100644 index 0000000..470ec30 --- /dev/null +++ b/mods/beds/depends.txt @@ -0,0 +1,2 @@ +default +wool diff --git a/mods/beds/functions.lua b/mods/beds/functions.lua new file mode 100644 index 0000000..78df9a1 --- /dev/null +++ b/mods/beds/functions.lua @@ -0,0 +1,220 @@ +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) + 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 + 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) + 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: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/beds/init.lua b/mods/beds/init.lua new file mode 100644 index 0000000..8b25890 --- /dev/null +++ b/mods/beds/init.lua @@ -0,0 +1,17 @@ +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/beds/license.txt b/mods/beds/license.txt new file mode 100644 index 0000000..0494b36 --- /dev/null +++ b/mods/beds/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/beds/spawns.lua b/mods/beds/spawns.lua new file mode 100644 index 0000000..6b1f404 --- /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: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/beds/textures/beds_bed.png b/mods/beds/textures/beds_bed.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..e877c80 Binary files /dev/null and b/mods/beds/textures/beds_bed_top_top.png differ diff --git a/mods/beds/textures/beds_transparent.png b/mods/beds/textures/beds_transparent.png new file mode 100644 index 0000000..2dc0e3d Binary files /dev/null and b/mods/beds/textures/beds_transparent.png differ diff --git a/mods/boats/README.txt b/mods/boats/README.txt new file mode 100644 index 0000000..59631d9 --- /dev/null +++ b/mods/boats/README.txt @@ -0,0 +1,15 @@ +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/boats/depends.txt b/mods/boats/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/boats/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/boats/init.lua b/mods/boats/init.lua new file mode 100644 index 0000000..ce67e91 --- /dev/null +++ b/mods/boats/init.lua @@ -0,0 +1,275 @@ +-- +-- 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() + default.player_attached[name] = false + default.player_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, y = 11, z = -3}, {x = 0, y = 0, z = 0}) + default.player_attached[name] = true + minetest.after(0.2, function() + default.player_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() + default.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: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:setyaw(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, +}) diff --git a/mods/boats/license.txt b/mods/boats/license.txt new file mode 100644 index 0000000..d4afe75 --- /dev/null +++ b/mods/boats/license.txt @@ -0,0 +1,63 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures and model) +-------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Zeg9 +Copyright (C) 2012-2016 thetoon +Copyright (C) 2012-2016 PavelS(SokolovPavel) +Copyright (C) 2016 sofar (sofar@foo-projects.org) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/boats/models/boats_boat.obj b/mods/boats/models/boats_boat.obj new file mode 100644 index 0000000..0f21e47 --- /dev/null +++ b/mods/boats/models/boats_boat.obj @@ -0,0 +1,358 @@ +# Blender v2.76 (sub 11) OBJ File: 'boat.blend' +# www.blender.org +mtllib boat.mtl +o boats_boat +v -6.786140 -3.033999 -9.415440 +v -6.786140 -1.967150 -9.415440 +v -6.786140 -1.967150 8.793510 +v -6.786140 -3.033999 8.793510 +v 5.732520 -1.967150 -9.415440 +v 5.732520 -3.033999 -9.415440 +v 5.732520 -3.033999 8.793510 +v 5.732520 -1.967150 8.793510 +v -2.233900 -3.033999 -9.415440 +v -2.233900 -1.967150 -9.415440 +v -2.233900 -1.967150 8.793510 +v -2.233900 -3.033999 8.793510 +v 2.318340 -3.033999 -9.415440 +v 2.318340 -1.967150 -9.415440 +v 2.318340 -1.967150 8.793510 +v 2.318340 -3.033999 8.793510 +v -3.371960 -3.033999 8.793510 +v -3.371960 -1.967150 8.793510 +v -3.371960 -1.967150 -9.415440 +v -3.371960 -3.033999 -9.415440 +v 2.318340 0.276645 8.793510 +v 1.180280 -1.967150 8.793510 +v 5.732520 0.276645 8.793510 +v 5.732520 1.039180 8.793510 +v 6.870580 0.276645 8.793510 +v 6.870580 -1.967150 8.793510 +v 2.318340 1.039180 8.793510 +v 1.180280 0.276645 8.793510 +v 1.180280 1.039180 8.793510 +v 1.180280 -3.033999 8.793510 +v -2.233900 0.276645 8.793510 +v -3.371960 0.276645 8.793510 +v -2.233900 1.039180 8.793510 +v -3.371960 1.039180 8.793510 +v -6.786140 0.276645 8.793510 +v -7.786200 0.276645 8.793510 +v -7.786200 -1.967150 8.793510 +v -6.786140 1.039180 8.793510 +v 1.180280 -1.967150 -9.415440 +v 1.180280 -3.033999 -9.415440 +v 2.318340 0.276645 -9.415440 +v 1.180280 0.276645 -9.415440 +v 2.318340 1.039180 -9.415440 +v 5.732520 0.276645 -9.415440 +v 6.870580 -1.967150 -9.415440 +v 5.732520 1.039180 -9.415440 +v 6.870580 0.276645 -9.415440 +v 0.042220 1.039180 -9.415440 +v 1.180280 1.039180 -9.415440 +v 0.042220 -1.967150 -9.415440 +v -1.095840 -1.967150 -9.415440 +v -2.233900 0.276645 -9.415440 +v -3.371960 0.276645 -9.415440 +v -2.233900 1.039180 -9.415440 +v -1.095840 1.039180 -9.415440 +v -3.371960 1.039180 -9.415440 +v -6.786140 0.276645 -9.415440 +v -6.786140 1.039180 -9.415440 +v -7.786200 -1.967150 -9.415440 +v -7.786200 0.276645 -9.415440 +v -1.095840 0.156645 -12.044100 +v -1.095840 -4.601110 -9.415440 +v -1.095840 1.039181 -10.802900 +v -1.095840 2.868579 -10.802900 +v -1.095840 2.868580 -7.883420 +v -1.095840 3.746069 -12.034100 +v -1.095840 3.746070 -7.883420 +v -1.095840 0.156645 -14.294900 +v -1.095840 -4.601110 -14.284900 +v 0.042220 -4.601110 -14.284900 +v 0.042220 -4.601110 -9.415440 +v 0.042220 1.039181 -10.802900 +v 0.042220 0.156645 -12.044100 +v 0.042220 2.868579 -10.802900 +v 0.042220 0.156645 -14.294900 +v 0.042220 3.746069 -12.034100 +v 0.042220 3.746070 -7.883420 +v 0.042220 2.868580 -7.883420 +v -1.096322 -3.033999 -9.415440 +v 0.044046 -3.035397 -9.415440 +vt 1.000000 0.187500 +vt -1.000000 0.312500 +vt 1.000000 0.312500 +vt 0.687500 1.000000 +vt 0.500000 0.875000 +vt 0.500000 0.625000 +vt -1.000000 0.062500 +vt 1.000000 0.062500 +vt 1.000000 -0.000000 +vt -1.000000 0.125000 +vt 1.000000 0.125000 +vt 0.437500 0.125000 +vt 0.312500 0.500000 +vt 0.312500 0.125000 +vt 1.000000 0.625000 +vt -1.000000 0.500000 +vt 1.000000 0.500000 +vt 0.187500 0.687500 +vt -0.187500 0.687500 +vt -0.187500 0.312500 +vt 1.000000 0.812500 +vt -1.000000 0.937500 +vt -1.000000 0.812500 +vt 0.812500 0.687500 +vt 1.187500 0.687500 +vt 0.812500 0.312500 +vt 1.000000 0.562500 +vt 0.312500 0.437500 +vt 1.000000 0.437500 +vt 1.000000 0.750000 +vt -1.000000 0.875000 +vt -1.000000 0.750000 +vt -1.000000 1.000000 +vt 1.000000 1.000000 +vt 0.437500 0.625000 +vt 0.562500 0.437500 +vt 0.562500 0.625000 +vt -1.000000 0.437500 +vt -1.000000 0.000000 +vt 0.500000 0.062500 +vt 0.375000 0.750000 +vt 0.500000 0.750000 +vt -1.000000 0.250000 +vt -1.000000 0.687500 +vt 1.000000 0.687500 +vt 0.625000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.250000 +vt 1.000000 0.937500 +vt 0.437500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.812500 +vt 0.437500 0.312500 +vt 0.437500 0.437500 +vt 0.687500 0.812500 +vt 0.000000 0.687500 +vt 0.000000 0.812500 +vt -1.000000 0.562500 +vt 0.875000 0.812500 +vt 0.875000 0.687500 +vt 0.250000 0.312500 +vt 0.562500 0.187500 +vt 0.250000 0.187500 +vt -1.000000 0.187500 +vt 0.312500 0.625000 +vt 0.312500 0.187500 +vt 0.312500 -0.187500 +vt 1.000000 -0.187500 +vt 0.687500 0.500000 +vt -0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.500000 +vt -1.000000 0.625000 +vt 0.812500 0.187500 +vt 1.187500 0.187500 +vt 1.187500 0.312500 +vt 1.312500 0.312500 +vt 1.312500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.312500 +vt 1.187500 0.812500 +vt 0.812500 0.812500 +vt 0.187500 0.312500 +vt 0.312500 0.687500 +vt 0.687500 0.687500 +vt -0.187500 0.187500 +vt 0.187500 0.187500 +vt -0.312500 0.687500 +vt -0.312500 0.312500 +vt 0.187500 0.812500 +vt -0.187500 0.812500 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.562500 0.812500 +vt 0.562500 0.687500 +vt 0.312500 0.562500 +vt 1.000000 0.875000 +vt 0.375000 0.062500 +vt -1.000000 0.375000 +vt 0.625000 0.500000 +vt 0.875000 0.562500 +vt 0.937500 0.812500 +vt 0.937500 0.687500 +vt 0.875000 0.937500 +vt 0.562500 0.312500 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.002100 -1.000000 +vn 0.001200 -1.000000 0.000000 +vn 0.000000 0.002800 -1.000000 +vn -0.001200 -1.000000 0.000200 +g boats_boat_boats_boat_None +usemtl None +s off +f 41/1/1 27/2/1 43/3/1 +f 76/4/2 74/5/2 72/6/2 +f 8/7/2 6/1/2 5/8/2 +f 15/9/1 13/10/1 16/11/1 +f 51/12/3 71/13/3 50/14/3 +f 56/15/2 32/16/2 53/17/2 +f 15/18/3 8/19/3 23/20/3 +f 22/21/2 40/22/2 39/23/2 +f 19/24/4 2/25/4 53/26/4 +f 70/27/5 62/28/5 69/29/5 +f 11/30/5 19/31/5 10/32/5 +f 4/15/5 20/33/5 17/34/5 +f 72/35/3 64/36/3 63/37/3 +f 13/8/5 7/38/5 16/7/5 +f 23/39/6 47/11/6 44/9/6 +f 68/40/7 70/41/7 69/42/7 +f 80/43/8 40/10/8 30/11/8 +f 3/15/1 1/32/1 4/30/1 +f 20/44/2 18/27/2 17/45/2 +f 74/17/5 65/46/5 64/47/5 +f 31/43/1 54/47/1 52/48/1 +f 22/47/5 14/43/5 15/48/5 +f 46/1/2 23/7/2 44/8/2 +f 57/21/1 38/22/1 58/49/1 +f 61/50/9 76/51/9 73/52/9 +f 37/45/5 2/23/5 3/21/5 +f 78/28/3 67/53/3 65/54/3 +f 64/5/1 66/4/1 63/6/1 +f 76/55/6 67/56/6 77/57/6 +f 47/17/2 26/10/2 45/11/2 +f 5/16/5 26/47/5 8/17/5 +f 33/58/6 48/59/6 55/60/6 +f 29/38/2 42/3/2 49/29/2 +f 32/44/6 52/21/6 53/45/6 +f 58/15/6 34/33/6 56/34/6 +f 27/7/6 46/29/6 43/8/6 +f 73/61/6 68/62/6 61/63/6 +f 21/58/6 42/29/6 28/38/6 +f 11/29/1 9/58/1 12/27/1 +f 59/45/1 36/2/1 60/3/1 +f 60/9/6 35/10/6 57/11/6 +f 41/1/1 21/64/1 27/2/1 +f 72/6/2 48/65/2 50/66/2 +f 50/66/2 71/67/2 70/68/2 +f 70/68/2 75/17/2 73/69/2 +f 76/4/2 77/70/2 74/5/2 +f 77/70/2 78/71/2 74/5/2 +f 50/66/2 70/68/2 73/69/2 +f 73/69/2 76/4/2 72/6/2 +f 72/6/2 50/66/2 73/69/2 +f 8/7/2 7/64/2 6/1/2 +f 15/9/1 14/39/1 13/10/1 +f 51/12/3 62/72/3 71/13/3 +f 56/15/2 34/73/2 32/16/2 +f 32/26/3 34/74/3 38/75/3 +f 35/76/3 36/77/3 37/78/3 +f 32/26/3 38/75/3 35/76/3 +f 29/66/3 33/79/3 31/80/3 +f 32/26/3 35/76/3 3/25/3 +f 28/51/3 29/66/3 31/80/3 +f 31/80/3 32/26/3 18/24/3 +f 3/25/3 4/81/3 17/82/3 +f 35/76/3 37/78/3 3/25/3 +f 21/83/3 28/51/3 22/84/3 +f 3/25/3 17/82/3 18/24/3 +f 11/85/3 12/55/3 30/52/3 +f 32/26/3 3/25/3 18/24/3 +f 11/85/3 30/52/3 22/84/3 +f 31/80/3 18/24/3 11/85/3 +f 24/86/3 27/87/3 21/83/3 +f 28/51/3 31/80/3 11/85/3 +f 11/85/3 22/84/3 28/51/3 +f 24/86/3 21/83/3 23/20/3 +f 26/88/3 25/89/3 23/20/3 +f 23/20/3 21/83/3 15/18/3 +f 15/18/3 16/90/3 7/91/3 +f 21/83/3 22/84/3 15/18/3 +f 8/19/3 26/88/3 23/20/3 +f 15/18/3 7/91/3 8/19/3 +f 22/21/2 30/49/2 40/22/2 +f 47/89/4 45/88/4 5/19/4 +f 5/19/4 6/91/4 13/90/4 +f 5/19/4 13/90/4 14/18/4 +f 44/20/4 47/89/4 5/19/4 +f 43/87/4 46/86/4 44/20/4 +f 41/83/4 43/87/4 44/20/4 +f 44/20/4 5/19/4 14/18/4 +f 39/84/4 40/52/4 80/50/4 +f 44/20/4 14/18/4 41/83/4 +f 42/51/4 41/83/4 39/84/4 +f 39/84/4 80/50/4 50/92/4 +f 41/83/4 14/18/4 39/84/4 +f 48/93/4 49/66/4 42/51/4 +f 50/92/4 48/93/4 42/51/4 +f 80/50/4 79/94/4 50/92/4 +f 50/92/4 42/51/4 39/84/4 +f 54/79/4 55/62/4 52/80/4 +f 50/92/4 79/94/4 51/95/4 +f 52/80/4 55/62/4 51/95/4 +f 51/95/4 79/94/4 10/85/4 +f 79/94/4 9/55/4 10/85/4 +f 53/26/4 52/80/4 10/85/4 +f 58/75/4 56/74/4 53/26/4 +f 59/78/4 60/77/4 57/76/4 +f 57/76/4 58/75/4 53/26/4 +f 52/80/4 51/95/4 10/85/4 +f 19/24/4 20/82/4 1/81/4 +f 53/26/4 10/85/4 19/24/4 +f 59/78/4 57/76/4 2/25/4 +f 19/24/4 1/81/4 2/25/4 +f 2/25/4 57/76/4 53/26/4 +f 70/27/5 71/96/5 62/28/5 +f 11/30/5 18/97/5 19/31/5 +f 4/15/5 1/73/5 20/33/5 +f 72/35/3 74/54/3 64/36/3 +f 13/8/5 6/29/5 7/38/5 +f 23/39/6 25/10/6 47/11/6 +f 68/40/7 75/98/7 70/41/7 +f 30/11/5 12/17/5 79/99/5 +f 79/99/10 80/43/10 30/11/10 +f 12/17/5 9/16/5 79/99/5 +f 3/15/1 2/73/1 1/32/1 +f 20/44/2 19/58/2 18/27/2 +f 74/17/5 78/100/5 65/46/5 +f 31/43/1 33/99/1 54/47/1 +f 22/47/5 39/99/5 14/43/5 +f 46/1/2 24/64/2 23/7/2 +f 57/21/1 35/23/1 38/22/1 +f 61/50/9 66/53/9 76/51/9 +f 37/45/5 59/44/5 2/23/5 +f 78/28/3 77/51/3 67/53/3 +f 62/67/1 51/66/1 69/68/1 +f 51/66/1 55/65/1 63/6/1 +f 68/17/1 69/68/1 61/69/1 +f 61/69/1 69/68/1 51/66/1 +f 61/69/1 51/66/1 63/6/1 +f 65/71/1 67/70/1 64/5/1 +f 61/69/1 63/6/1 66/4/1 +f 64/5/1 67/70/1 66/4/1 +f 76/55/6 66/85/6 67/56/6 +f 47/17/2 25/16/2 26/10/2 +f 5/16/5 45/99/5 26/47/5 +f 55/60/6 54/101/6 33/58/6 +f 33/58/6 29/22/6 48/59/6 +f 48/59/6 72/102/6 63/103/6 +f 29/22/6 49/104/6 48/59/6 +f 48/59/6 63/103/6 55/60/6 +f 29/38/2 28/2/2 42/3/2 +f 32/44/6 31/23/6 52/21/6 +f 58/15/6 38/73/6 34/33/6 +f 27/7/6 24/38/6 46/29/6 +f 73/61/6 75/105/6 68/62/6 +f 21/58/6 41/27/6 42/29/6 +f 11/29/1 10/38/1 9/58/1 +f 59/45/1 37/44/1 36/2/1 +f 60/9/6 36/39/6 35/10/6 diff --git a/mods/boats/textures/boats_inventory.png b/mods/boats/textures/boats_inventory.png new file mode 100644 index 0000000..f9d082e Binary files /dev/null and b/mods/boats/textures/boats_inventory.png differ diff --git a/mods/boats/textures/boats_wield.png b/mods/boats/textures/boats_wield.png new file mode 100644 index 0000000..f998b5b Binary files /dev/null and b/mods/boats/textures/boats_wield.png differ diff --git a/mods/bones/README.txt b/mods/bones/README.txt new file mode 100644 index 0000000..91bcd10 --- /dev/null +++ b/mods/bones/README.txt @@ -0,0 +1,12 @@ +Minetest Game mod: bones +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +All textures: paramat (CC BY-SA 3.0) diff --git a/mods/bones/depends.txt b/mods/bones/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/bones/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/bones/init.lua b/mods/bones/init.lua new file mode 100644 index 0000000..8688fa1 --- /dev/null +++ b/mods/bones/init.lua @@ -0,0 +1,255 @@ +-- Minetest 0.4 mod: bones +-- See README.txt for licensing and other information. + +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: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/bones/license.txt b/mods/bones/license.txt new file mode 100644 index 0000000..fe52584 --- /dev/null +++ b/mods/bones/license.txt @@ -0,0 +1,58 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + diff --git a/mods/bones/textures/bones_bottom.png b/mods/bones/textures/bones_bottom.png new file mode 100644 index 0000000..859c6bb Binary files /dev/null and b/mods/bones/textures/bones_bottom.png differ diff --git a/mods/bones/textures/bones_front.png b/mods/bones/textures/bones_front.png new file mode 100644 index 0000000..1e52437 Binary files /dev/null and b/mods/bones/textures/bones_front.png differ diff --git a/mods/bones/textures/bones_rear.png b/mods/bones/textures/bones_rear.png new file mode 100644 index 0000000..4cfe236 Binary files /dev/null and b/mods/bones/textures/bones_rear.png differ diff --git a/mods/bones/textures/bones_side.png b/mods/bones/textures/bones_side.png new file mode 100644 index 0000000..a07595f Binary files /dev/null and b/mods/bones/textures/bones_side.png differ diff --git a/mods/bones/textures/bones_top.png b/mods/bones/textures/bones_top.png new file mode 100644 index 0000000..198a8a2 Binary files /dev/null and b/mods/bones/textures/bones_top.png differ diff --git a/mods/brewing/depends.txt b/mods/brewing/depends.txt new file mode 100644 index 0000000..260389c --- /dev/null +++ b/mods/brewing/depends.txt @@ -0,0 +1,4 @@ +farming +default +bucket +hud? \ No newline at end of file diff --git a/mods/brewing/init.lua b/mods/brewing/init.lua new file mode 100644 index 0000000..dfc9929 --- /dev/null +++ b/mods/brewing/init.lua @@ -0,0 +1,241 @@ +minetest.register_node("brewing:cauldron_full",{ + drawtype="nodebox", + description= "Filled Cauldron", + tiles = {"lottpotion_cauldron_top.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", + "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1}, + legacy_facedir_simple = true, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {-0.375, -0.375, -0.375, 0.375, -0.3125, 0.375}, + {-0.5, -0.375, -0.375, -0.375, 0.4375, 0.375}, + {0.375, -0.375, -0.375, 0.5, 0.4375, 0.375}, + {-0.375, -0.375, 0.375, 0.375, 0.4375, 0.5}, + {-0.375, -0.375, -0.5, 0.375, 0.4375, -0.375}, + {-0.375, 0.25, -0.375, 0.375, 0.3125, 0.375}, + } + }, + on_punch = function(pos, node, player) + local player_inv = player:get_inventory() + local itemstack = player:get_wielded_item() + if itemstack:get_name() == "vessels:drinking_glass" then + minetest.set_node(pos, {name="brewing:cauldron_two_third_full"}) + if player_inv:room_for_item("main", 1) then + itemstack:take_item(1) + player_inv:add_item("main", "brewing:drinking_glass_water") + end + player:set_wielded_item(itemstack) + elseif itemstack:get_name() == "bucket:bucket_empty" then + minetest.set_node(pos, {name="brewing:cauldron_empty"}) + itemstack:take_item() + player_inv:add_item("main", "bucket:bucket_water") + end + end, +}) + +minetest.register_node("brewing:cauldron_two_third_full",{ + drawtype="nodebox", + description= "Two Third Filled Cauldron", + tiles = {"lottpotion_cauldron_top.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", + "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1, not_in_creative_inventory=1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {-0.375, -0.375, -0.375, 0.375, -0.3125, 0.375}, + {-0.5, -0.375, -0.375, -0.375, 0.4375, 0.375}, + {0.375, -0.375, -0.375, 0.5, 0.4375, 0.375}, + {-0.375, -0.375, 0.375, 0.375, 0.4375, 0.5}, + {-0.375, -0.375, -0.5, 0.375, 0.4375, -0.375}, + {-0.375, 0.0625, -0.375, 0.375, 0.125, 0.375}, + } + }, + on_punch = function(pos, node, player) + local player_inv = player:get_inventory() + local itemstack = player:get_wielded_item() + if itemstack:get_name() == "vessels:drinking_glass" then + minetest.set_node(pos, {name="brewing:cauldron_one_third_full"}) + if player_inv:room_for_item("main", 1) then + itemstack:take_item(1) + player_inv:add_item("main", "brewing:drinking_glass_water") + end + player:set_wielded_item(itemstack) + end + end, +}) + +minetest.register_node("brewing:cauldron_one_third_full",{ + drawtype="nodebox", + description= "One Third Filled Cauldron", + tiles = {"lottpotion_cauldron_top.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", + "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png", "lottpotion_cauldron_side.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1, not_in_creative_inventory=1}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {-0.375, -0.375, -0.375, 0.375, -0.3125, 0.375}, + {-0.5, -0.375, -0.375, -0.375, 0.4375, 0.375}, + {0.375, -0.375, -0.375, 0.5, 0.4375, 0.375}, + {-0.375, -0.375, 0.375, 0.375, 0.4375, 0.5}, + {-0.375, -0.375, -0.5, 0.375, 0.4375, -0.375}, + {-0.375, -0.125, -0.375, 0.375, -0.0625, 0.375}, + } + }, + on_punch = function(pos, node, player) + local player_inv = player:get_inventory() + local itemstack = player:get_wielded_item() + if itemstack:get_name() == "vessels:drinking_glass" then + minetest.set_node(pos, {name="brewing:cauldron_empty"}) + if player_inv:room_for_item("main", 1) then + itemstack:take_item(1) + player_inv:add_item("main", "brewing:drinking_glass_water") + end + player:set_wielded_item(itemstack) + end + end, +}) + +minetest.register_node("brewing:cauldron_empty",{ + drawtype="nodebox", + description= "Empty Cauldron", + tiles = {"lottpotion_cauldron_side.png"}, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1,level=2}, + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {-0.375, -0.375, -0.375, 0.375, -0.3125, 0.375}, + {-0.5, -0.375, -0.375, -0.375, 0.4375, 0.375}, + {0.375, -0.375, -0.375, 0.5, 0.4375, 0.375}, + {-0.375, -0.375, 0.375, 0.375, 0.4375, 0.5}, + {-0.375, -0.375, -0.5, 0.375, 0.4375, -0.375}, + {-0.375, -0.125, -0.375, 0.375, -0.25, 0.375}, + }, + }, + on_rightclick = function(pos, node, clicker, itemstack) + if itemstack:get_name() == "bucket:bucket_water" then + minetest.set_node(pos, {name="brewing:cauldron_full"}) + return {name="bucket:bucket_empty"} + end + end +}) + +minetest.register_node("brewing:drinking_glass_water", { + description = "Drinking Glass (Water)", + drawtype = "plantlike", + tiles = {"lottpotion_glass_water.png"}, + inventory_image = "lottpotion_glass_water.png", + wield_image = "lottpotion_glass_water.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} + }, + groups = {vessel=1,dig_immediate=3,attached_node=1}, + --sounds = default.node_sound_glass_defaults(), +}) + +local recipes = { +--MAKE YOUR OWN DRINK HERE! +--drink api: description, itemname, fill value, craft items. + {"Wine", "wine", 4, {"default:apple", "cake:sugar", "brewing:cider"}}, + {"Beer", "beer", 2, {"farming:wheat", "farming:wheat", "cake:sugar" ,"brewing:drinking_glass_water"}}, + {"Cider", "cider", 2 , {"default:apple", "cake:sugar", "brewing:drinking_glass_water"}}, + {"Ale", "ale", 2, {"farming:seed_wheat", "farming:wheat", "cake:sugar", "brewing:drinking_glass_water"}}, + {"Root Beer", "rootbeer", 2, {"farming:seed_wheat", "default:sapling", "cake:sugar", "brewing:drinking_glass_water"}}, +} +for _, data in pairs(recipes) do + minetest.register_node("brewing:"..data[2], { + description = data[1], + drawtype = "plantlike", + tiles = {"lottpotion_"..data[2]..".png^brewing_fizz.png"}, + inventory_image = "lottpotion_"..data[2]..".png^brewing_fizz.png", + wield_image = "lottpotion_"..data[2]..".png^brewing_fizz.png", + paramtype = "light", + walkable = false, + on_punch = function(pos, node, player) + local player_inv = player:get_inventory() + if not player_inv then return end + if player_inv:room_for_item("main", 1) then + minetest.remove_node(pos) + player_inv:add_item("main", "brewing:"..data[2]) + end + --player:set_wielded_item(itemstack) + end, + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + local there = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + if minetest.env:get_node(there).name == "air" then + minetest.add_node(there, {name="brewing:"..data[2]}) + itemstack:take_item() + return itemstack + end + end, + groups = {vessel=1,dig_immediate=4,attached_node=1}, + + on_use = function(itemstack, player, pointed_thing) + local player_inv = player:get_inventory() + minetest.item_eat(data[3]) + player_inv:add_item("main", "vessels:drinking_glass") + end, + + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.4, 0.25} + }, + groups = {vessel=1,dig_immediate=3,attached_node=1}, + --sounds = default.node_sound_glass_defaults(), + }) + minetest.register_craftitem( "brewing:"..data[2].."_unbrewed", { + description = "Unbrewed ".. data[1], + inventory_image = "lottpotion_"..data[2]..".png", + wield_image = "lottpotion_"..data[2]..".png", + }) + minetest.register_craft({ + type = "shapeless", + output = "brewing:"..data[2].."_unbrewed", + recipe = data[4], + }) + minetest.register_craft({ + output = "brewing:"..data[2], + type = "cooking", + cooktime = 7.9, + recipe = "brewing:"..data[2].."_unbrewed" + }) + if minetest.get_modpath("hud") ~= nil then + overwritefood("brewing:"..data[2], data[3], "vessels:drinking_glass") + end +end +minetest.register_craft({ + output = 'brewing:cauldron_empty', + recipe = { + {'default:steel_ingot', '', 'default:steel_ingot'}, + {'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/brewing/textures/brewing_fizz.png b/mods/brewing/textures/brewing_fizz.png new file mode 100644 index 0000000..3798170 Binary files /dev/null and b/mods/brewing/textures/brewing_fizz.png differ diff --git a/mods/brewing/textures/lottpotion_ale.png b/mods/brewing/textures/lottpotion_ale.png new file mode 100644 index 0000000..4feb818 Binary files /dev/null and b/mods/brewing/textures/lottpotion_ale.png differ diff --git a/mods/brewing/textures/lottpotion_beer.png b/mods/brewing/textures/lottpotion_beer.png new file mode 100644 index 0000000..141609a Binary files /dev/null and b/mods/brewing/textures/lottpotion_beer.png differ diff --git a/mods/brewing/textures/lottpotion_cauldron_side.png b/mods/brewing/textures/lottpotion_cauldron_side.png new file mode 100644 index 0000000..761876e Binary files /dev/null and b/mods/brewing/textures/lottpotion_cauldron_side.png differ diff --git a/mods/brewing/textures/lottpotion_cauldron_top.png b/mods/brewing/textures/lottpotion_cauldron_top.png new file mode 100644 index 0000000..204ef80 Binary files /dev/null and b/mods/brewing/textures/lottpotion_cauldron_top.png differ diff --git a/mods/brewing/textures/lottpotion_cider.png b/mods/brewing/textures/lottpotion_cider.png new file mode 100644 index 0000000..17aa6dc Binary files /dev/null and b/mods/brewing/textures/lottpotion_cider.png differ diff --git a/mods/brewing/textures/lottpotion_glass_water.png b/mods/brewing/textures/lottpotion_glass_water.png new file mode 100644 index 0000000..8165d74 Binary files /dev/null and b/mods/brewing/textures/lottpotion_glass_water.png differ diff --git a/mods/brewing/textures/lottpotion_rootbeer.png b/mods/brewing/textures/lottpotion_rootbeer.png new file mode 100644 index 0000000..92b5682 Binary files /dev/null and b/mods/brewing/textures/lottpotion_rootbeer.png differ diff --git a/mods/brewing/textures/lottpotion_water_glass.png b/mods/brewing/textures/lottpotion_water_glass.png new file mode 100644 index 0000000..9d94a16 Binary files /dev/null and b/mods/brewing/textures/lottpotion_water_glass.png differ diff --git a/mods/brewing/textures/lottpotion_wine.png b/mods/brewing/textures/lottpotion_wine.png new file mode 100644 index 0000000..3d27ee6 Binary files /dev/null and b/mods/brewing/textures/lottpotion_wine.png differ diff --git a/mods/bucket/README.txt b/mods/bucket/README.txt new file mode 100644 index 0000000..45e0ec5 --- /dev/null +++ b/mods/bucket/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: bucket +========================= +See license.txt for license information. + +Authors of source code +---------------------- +Kahrl (LGPL 2.1) +celeron55, Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (textures) +--------------------------- +ElementW (CC BY-SA 3.0) diff --git a/mods/bucket/depends.txt b/mods/bucket/depends.txt new file mode 100644 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 100644 index 0000000..62392e9 --- /dev/null +++ b/mods/bucket/init.lua @@ -0,0 +1,216 @@ +-- 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: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( + "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/bucket/license.txt b/mods/bucket/license.txt new file mode 100644 index 0000000..a5156ae --- /dev/null +++ b/mods/bucket/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 2011-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2015-2016 ElementW + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/bucket/textures/bucket.png b/mods/bucket/textures/bucket.png new file mode 100644 index 0000000..17b0c49 Binary files /dev/null and b/mods/bucket/textures/bucket.png differ diff --git a/mods/bucket/textures/bucket_lava.png b/mods/bucket/textures/bucket_lava.png new file mode 100644 index 0000000..ac6108d Binary files /dev/null and b/mods/bucket/textures/bucket_lava.png differ diff --git a/mods/bucket/textures/bucket_river_water.png b/mods/bucket/textures/bucket_river_water.png new file mode 100644 index 0000000..d4648bb Binary files /dev/null and b/mods/bucket/textures/bucket_river_water.png differ diff --git a/mods/bucket/textures/bucket_water.png b/mods/bucket/textures/bucket_water.png new file mode 100644 index 0000000..5af836b Binary files /dev/null and b/mods/bucket/textures/bucket_water.png differ diff --git a/mods/cake/README.txt b/mods/cake/README.txt new file mode 100644 index 0000000..5665dea --- /dev/null +++ b/mods/cake/README.txt @@ -0,0 +1,36 @@ +Minetest 0.4 mod: cake +====================== + +License of source code: +----------------------- +The MIT License (MIT) + +Copyright (c) 2015 MrIbby + +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. + +Authors and licenses of textures: +--------------------------------- +TenPlus1 (WTFPL): + cake.png + cake_bottom.png, derivative + cake_inner.png, derivative + cake_side.png, derivative + cake_sugar.png + cake_top.png, derivative diff --git a/mods/cake/depends.txt b/mods/cake/depends.txt new file mode 100644 index 0000000..c53185f --- /dev/null +++ b/mods/cake/depends.txt @@ -0,0 +1,5 @@ +bucket +farming +awards? +food? +intllib? diff --git a/mods/cake/description.txt b/mods/cake/description.txt new file mode 100644 index 0000000..319d217 --- /dev/null +++ b/mods/cake/description.txt @@ -0,0 +1 @@ +Adds delicious cakes to Minetest! diff --git a/mods/cake/init.lua b/mods/cake/init.lua new file mode 100644 index 0000000..5094ed7 --- /dev/null +++ b/mods/cake/init.lua @@ -0,0 +1,167 @@ +local throwable_cake = false + +-- CAKE -- + +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end + +local sizes = {-0.4375, -0.3125, -0.1875, -0.0625, 0.0625, 0.1875, 0.3125} + +for i, size in ipairs(sizes) do + local slice = i - 1 + local name + local description + local drop + local tiles + + if slice == 0 then + name = "cake:cake" + description = S("Cake") + drop = nil + tiles = {"cake_top.png", "cake_bottom.png", "cake_side.png"} + else + name = "cake:cake_"..slice + drop = '' + tiles = {"cake_top.png", "cake_bottom.png", "cake_side.png", "cake_inner.png", "cake_side.png", "cake_side.png"} + end + + minetest.register_node(name, { + description = description, + drop = drop, + drawtype = "nodebox", + tiles = tiles, + inventory_image = "cake.png", + wield_image = "cake.png", + paramtype = "light", + is_ground_content = false, + groups = {crumbly=3}, + --sounds = sounds, + node_box = { + type = "fixed", + fixed = { + {size, -0.5, -0.4375, 0.4375, 0, 0.4375}, + } + }, + on_rightclick = function(pos, node, clicker) + -- clicker:set_hp(clicker:get_hp() + 1) + local name = clicker:get_player_name() + local h = tonumber(hud.hunger[name]) + h = h + 2 + hud.hunger[name] = h + hud.set_hunger(clicker) + if i < #sizes then + minetest.swap_node(pos, {name="cake:cake_"..i}) + else + minetest.remove_node(pos) + end + end, + }) +end + +minetest.register_craftitem("cake:cake_uncooked", { + description = S("Uncooked Cake"), + inventory_image = "cake_uncooked.png", +}) + +if not minetest.get_modpath("food") then + minetest.register_craftitem("cake:sugar", { + description = S("Sugar"), + inventory_image = "cake_sugar.png", + groups = {food_sugar=1} + }) + + minetest.register_craft({ + type = "shapeless", + output = "cake:sugar", + recipe = {"default:papyrus"} + }) +else + minetest.register_alias("cake:sugar", "food:sugar") +end + +minetest.register_craft({ + type = "shapeless", + output = "cake:cake_uncooked", + recipe = {"farming:flour", "group:water_bucket", "group:food_sugar", "group:food_sugar"}, + replacements = { + {"group:water_bucket", "bucket:bucket_empty"}, + + -- Not needed >0.4.13 + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"bucket:bucket_river_water", "bucket:bucket_empty"} + } +}) +minetest.register_craft({ + output = "cake:cake", + type = "cooking", + cooktime = 15, + recipe = "cake:cake_uncooked" +}) + +-- THROWABLE CAKE -- + +minetest.register_entity("cake:cake_entity", { + physical = false, + timer = 0, + textures = {"cake.png"}, + lastpos = {}, + collisionbox = {0,0,0,0,0,0}, + on_step = function(self, dtime) + self.timer=self.timer+dtime + local pos = self.object:getpos() + local node = minetest.get_node(pos) + + if self.timer>0.2 then + local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + for k, obj in pairs(objs) do + if obj:get_luaentity() == nil or obj:get_luaentity().name ~= "cake:cake_entity" and obj:get_luaentity().name ~= "__builtin:item" then + obj:set_hp(obj:get_hp() + 7) + self.object:remove() + end + end + end + + if self.lastpos.x~=nil then + if node.name ~= "air" then + minetest.add_item(self.lastpos, 'cake:cake') + self.object:remove() + end + end + self.lastpos={x=pos.x, y=pos.y, z=pos.z} + end, +}) + +if throwable_cake then + minetest.override_item("cake:cake", { + on_use = function(itemstack, player, pointed_thing) + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + local playerpos = player:getpos() + local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, "cake:cake_entity") + local dir = player:get_look_dir() + obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19}) + obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) + obj:setyaw(player:get_look_yaw()+math.pi) + return itemstack + end, + }) +end + +-- CAKE AWARD -- +if minetest.get_modpath("awards") then + awards.register_achievement("award_the_lie", { + title = S("The Lie"), + description = S("Craft a cake"), + icon = "cake.png", + trigger = { + type = "craft", + item = "cake:cake", + target = 1 + } + }) +end diff --git a/mods/cake/locale/de.txt b/mods/cake/locale/de.txt new file mode 100644 index 0000000..a905b2a --- /dev/null +++ b/mods/cake/locale/de.txt @@ -0,0 +1,2 @@ +Cake = Kuchen +Sugar = Zucker diff --git a/mods/cake/locale/es.txt b/mods/cake/locale/es.txt new file mode 100644 index 0000000..d0271ae --- /dev/null +++ b/mods/cake/locale/es.txt @@ -0,0 +1,2 @@ +Cake = Pastel +Sugar = Azúcar diff --git a/mods/cake/locale/fr.txt b/mods/cake/locale/fr.txt new file mode 100644 index 0000000..557bfad --- /dev/null +++ b/mods/cake/locale/fr.txt @@ -0,0 +1,2 @@ +Cake = Gâteau +Sugar = Sucre diff --git a/mods/cake/locale/pt.txt b/mods/cake/locale/pt.txt new file mode 100644 index 0000000..b10fdea --- /dev/null +++ b/mods/cake/locale/pt.txt @@ -0,0 +1,2 @@ +Cake = Bolo +Sugar = Açúcar diff --git a/mods/cake/locale/ru.txt b/mods/cake/locale/ru.txt new file mode 100644 index 0000000..7274378 --- /dev/null +++ b/mods/cake/locale/ru.txt @@ -0,0 +1,2 @@ +Cake = Пирожное +Sugar = Сахар diff --git a/mods/cake/mod.conf b/mods/cake/mod.conf new file mode 100644 index 0000000..21ae169 --- /dev/null +++ b/mods/cake/mod.conf @@ -0,0 +1 @@ +name = cake diff --git a/mods/cake/screenshot.png b/mods/cake/screenshot.png new file mode 100644 index 0000000..3307068 Binary files /dev/null and b/mods/cake/screenshot.png differ diff --git a/mods/cake/textures/cake.png b/mods/cake/textures/cake.png new file mode 100644 index 0000000..22c70d4 Binary files /dev/null and b/mods/cake/textures/cake.png differ diff --git a/mods/cake/textures/cake_bottom.png b/mods/cake/textures/cake_bottom.png new file mode 100644 index 0000000..84d8ad3 Binary files /dev/null and b/mods/cake/textures/cake_bottom.png differ diff --git a/mods/cake/textures/cake_inner.png b/mods/cake/textures/cake_inner.png new file mode 100644 index 0000000..f1d0b52 Binary files /dev/null and b/mods/cake/textures/cake_inner.png differ diff --git a/mods/cake/textures/cake_side.png b/mods/cake/textures/cake_side.png new file mode 100644 index 0000000..87902d1 Binary files /dev/null and b/mods/cake/textures/cake_side.png differ diff --git a/mods/cake/textures/cake_sugar.png b/mods/cake/textures/cake_sugar.png new file mode 100644 index 0000000..5cb7fa0 Binary files /dev/null and b/mods/cake/textures/cake_sugar.png differ diff --git a/mods/cake/textures/cake_top.png b/mods/cake/textures/cake_top.png new file mode 100644 index 0000000..764566f Binary files /dev/null and b/mods/cake/textures/cake_top.png differ diff --git a/mods/cake/textures/cake_uncooked.png b/mods/cake/textures/cake_uncooked.png new file mode 100644 index 0000000..984d0d1 Binary files /dev/null and b/mods/cake/textures/cake_uncooked.png differ diff --git a/mods/carts/README.txt b/mods/carts/README.txt new file mode 100644 index 0000000..31ce644 --- /dev/null +++ b/mods/carts/README.txt @@ -0,0 +1,22 @@ +Carts (formerly boost_cart) +========================== + +Carts, based almost entirely on the mod boost_cart [1], which +itself is based on (and fully compatible with) the carts mod [2]. + +The model was originally designed by stujones11 [3] (CC-0). + +Cart textures are based on original work from PixelBOX (WTFPL). + + +[1] https://github.com/SmallJoker/boost_cart/ +[2] https://github.com/PilzAdam/carts/ +[3] https://github.com/stujones11/railcart/ + + +Features +---------- +- A fast cart for your railway or roller coaster (up to 7 m/s!) +- Boost and brake rails +- Rail junction switching with the 'right-left' walking keys +- Handbrake with the 'back' key diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua new file mode 100644 index 0000000..031e456 --- /dev/null +++ b/mods/carts/cart_entity.lua @@ -0,0 +1,404 @@ +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() + local vel = self.object:getvelocity() + 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: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 + 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: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"}, + }, +}) diff --git a/mods/carts/depends.txt b/mods/carts/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/carts/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua new file mode 100644 index 0000000..9b7e2c6 --- /dev/null +++ b/mods/carts/functions.lua @@ -0,0 +1,232 @@ +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 default.player_attached[player_name] == status then + return + end + default.player_attached[player_name] = status + + if status then + player:set_attach(obj, "", {x=0, y=6, 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) + if vector.equals(old_pos, pos_) then + return true + end + + local pos = vector.round(pos_) + local pf_pos = vector.round(old_pos) + local pf_dir = vector.new(old_dir) + + for i = 1, 3 do + 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) + + if vector.equals(pf_pos, pos) then + -- Success! Cart moved on correctly + return true + end + 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 = 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 diff --git a/mods/carts/init.lua b/mods/carts/init.lua new file mode 100644 index 0000000..53b33cc --- /dev/null +++ b/mods/carts/init.lua @@ -0,0 +1,20 @@ + +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") + +-- Support for non-default games +if not default.player_attached then + default.player_attached = {} +end + +dofile(carts.modpath.."/cart_entity.lua") diff --git a/mods/carts/license.txt b/mods/carts/license.txt new file mode 100644 index 0000000..6c5beb4 --- /dev/null +++ b/mods/carts/license.txt @@ -0,0 +1,54 @@ + +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 SmallJoker +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 +----------------- + +CC-0, see: https://creativecommons.org/share-your-work/public-domain/cc0/, except +if other license is mentioned. + + +Authors +--------- +Originally from PixelBOX (Gambit): + carts_cart_side.png + carts_cart_top.png + carts_cart_front.png* + carts_cart.png* + +sofar + stujones11: + carts_cart.b3d and carts_cart.blend + +hexafraction, modified by sofar + carts_rail_*.png + +http://www.freesound.org/people/YleArkisto/sounds/253159/ - YleArkisto - CC-BY-3.0 + carts_cart_moving.*.ogg diff --git a/mods/carts/models/carts_cart.b3d b/mods/carts/models/carts_cart.b3d new file mode 100644 index 0000000..4e7eba3 Binary files /dev/null and b/mods/carts/models/carts_cart.b3d differ diff --git a/mods/carts/models/carts_cart.blend b/mods/carts/models/carts_cart.blend new file mode 100644 index 0000000..7d2515e Binary files /dev/null and b/mods/carts/models/carts_cart.blend differ diff --git a/mods/carts/rails.lua b/mods/carts/rails.lua new file mode 100644 index 0000000..066779d --- /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/carts/sounds/carts_cart_moving.1.ogg b/mods/carts/sounds/carts_cart_moving.1.ogg new file mode 100644 index 0000000..869e765 Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.1.ogg differ diff --git a/mods/carts/sounds/carts_cart_moving.2.ogg b/mods/carts/sounds/carts_cart_moving.2.ogg new file mode 100644 index 0000000..b4cc508 Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.2.ogg differ diff --git a/mods/carts/sounds/carts_cart_moving.3.ogg b/mods/carts/sounds/carts_cart_moving.3.ogg new file mode 100644 index 0000000..e19a782 Binary files /dev/null and b/mods/carts/sounds/carts_cart_moving.3.ogg differ diff --git a/mods/carts/textures/carts_cart.png b/mods/carts/textures/carts_cart.png new file mode 100644 index 0000000..965347c Binary files /dev/null and b/mods/carts/textures/carts_cart.png differ diff --git a/mods/carts/textures/carts_cart_front.png b/mods/carts/textures/carts_cart_front.png new file mode 100644 index 0000000..38955b2 Binary files /dev/null and b/mods/carts/textures/carts_cart_front.png differ diff --git a/mods/carts/textures/carts_cart_side.png b/mods/carts/textures/carts_cart_side.png new file mode 100644 index 0000000..f53808c Binary files /dev/null and b/mods/carts/textures/carts_cart_side.png differ diff --git a/mods/carts/textures/carts_cart_top.png b/mods/carts/textures/carts_cart_top.png new file mode 100644 index 0000000..d9a31a9 Binary files /dev/null and b/mods/carts/textures/carts_cart_top.png differ diff --git a/mods/carts/textures/carts_rail_crossing.png b/mods/carts/textures/carts_rail_crossing.png new file mode 100644 index 0000000..e10f3b1 Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing.png differ diff --git a/mods/carts/textures/carts_rail_crossing_brk.png b/mods/carts/textures/carts_rail_crossing_brk.png new file mode 100644 index 0000000..0bf455e Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing_brk.png differ diff --git a/mods/carts/textures/carts_rail_crossing_pwr.png b/mods/carts/textures/carts_rail_crossing_pwr.png new file mode 100644 index 0000000..d763d50 Binary files /dev/null and b/mods/carts/textures/carts_rail_crossing_pwr.png differ diff --git a/mods/carts/textures/carts_rail_curved.png b/mods/carts/textures/carts_rail_curved.png new file mode 100644 index 0000000..b320f0d Binary files /dev/null and b/mods/carts/textures/carts_rail_curved.png differ diff --git a/mods/carts/textures/carts_rail_curved_brk.png b/mods/carts/textures/carts_rail_curved_brk.png new file mode 100644 index 0000000..ca40723 Binary files /dev/null and b/mods/carts/textures/carts_rail_curved_brk.png differ diff --git a/mods/carts/textures/carts_rail_curved_pwr.png b/mods/carts/textures/carts_rail_curved_pwr.png new file mode 100644 index 0000000..781bbd0 Binary files /dev/null and b/mods/carts/textures/carts_rail_curved_pwr.png differ diff --git a/mods/carts/textures/carts_rail_straight.png b/mods/carts/textures/carts_rail_straight.png new file mode 100644 index 0000000..30dcafe Binary files /dev/null and b/mods/carts/textures/carts_rail_straight.png differ diff --git a/mods/carts/textures/carts_rail_straight_brk.png b/mods/carts/textures/carts_rail_straight_brk.png new file mode 100644 index 0000000..0c69052 Binary files /dev/null and b/mods/carts/textures/carts_rail_straight_brk.png differ diff --git a/mods/carts/textures/carts_rail_straight_pwr.png b/mods/carts/textures/carts_rail_straight_pwr.png new file mode 100644 index 0000000..e067ff1 Binary files /dev/null and b/mods/carts/textures/carts_rail_straight_pwr.png differ diff --git a/mods/carts/textures/carts_rail_t_junction.png b/mods/carts/textures/carts_rail_t_junction.png new file mode 100644 index 0000000..8b1b946 Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction.png differ diff --git a/mods/carts/textures/carts_rail_t_junction_brk.png b/mods/carts/textures/carts_rail_t_junction_brk.png new file mode 100644 index 0000000..6b4f6fa Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction_brk.png differ diff --git a/mods/carts/textures/carts_rail_t_junction_pwr.png b/mods/carts/textures/carts_rail_t_junction_pwr.png new file mode 100644 index 0000000..dd0eede Binary files /dev/null and b/mods/carts/textures/carts_rail_t_junction_pwr.png differ diff --git a/mods/clumpfall/LICENSE.txt b/mods/clumpfall/LICENSE.txt new file mode 100644 index 0000000..2db2a18 --- /dev/null +++ b/mods/clumpfall/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/mods/clumpfall/README.md b/mods/clumpfall/README.md new file mode 100644 index 0000000..a2a47df --- /dev/null +++ b/mods/clumpfall/README.md @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------------------------------------- +Clump Fall Nodes +[clumpfall] +------------------------------------------------------------------------------------------------------------- + +------------------------------------------------------------------------------------------------------------- +About +------------------------------------------------------------------------------------------------------------- +This mod is designed to allow almost every node in Minetest to fall down, similar to sand or gravel. However, there are two key differences between regular Falling Nodes and Clump Fall Nodes; first that nodes that are part of the new "clump_fall_node" group will fall down slowly in small "clumps", gradually cascading until there is nothing left in the air. The other key difference is that individual nodes don't automatically fall just because nothing is immediately underneath them. Instead, if there's a block below and to the side or corner of the node in question, then the node still won't fall. Because Clump Fall Nodes only start to fall if there are no other Clump Fall Nodes connected to their underside, lower edges, or lower corners, this means that pyramid shapes will often become structurally sound. It also means that cubic houses won't need to be completely filled with supports in order to keep their roofs from collapsing, and that giant holes won't appear on the world's surface every time a cave collapses. + +------------------------------------------------------------------------------------------------------------- +Dependencies and Support +------------------------------------------------------------------------------------------------------------- +This mod has only one dependency, for the mod entitycontrol, which is used to fix some glitches with Clump Fall Behavior. Other than that, support that this mod has for others is built-in and automatic, able to effect all added nodes without much issue, and is able to correctly differentiate between nodes that should be Clump Fall Nodes and nodes that are Falling Nodes, Attached Nodes, Liquid, or Unbreakable. + +------------------------------------------------------------------------------------------------------------- +License +------------------------------------------------------------------------------------------------------------- +The Apache 2.0 License is used with this mod. See http://www.apache.org/licenses/LICENSE-2.0 or LICENSE.md for more details. + +------------------------------------------------------------------------------------------------------------- +Installation +------------------------------------------------------------------------------------------------------------- +Download, unzip, and place within the usual minetest/current/mods folder, and it will behave in relation to the Minetest engine like any other mod. diff --git a/mods/clumpfall/changelog.txt b/mods/clumpfall/changelog.txt new file mode 100644 index 0000000..af9bfb3 --- /dev/null +++ b/mods/clumpfall/changelog.txt @@ -0,0 +1,29 @@ +Initial Clump: + +New group "clump_fall_node" created that applies to nodes that aren't, air, ignore, or part of the groups falling_node, attached_node, or liquid + +Set the above + to occur after every other mod has registered nodes, so that nodes from every mod will be affected + +Added a check between two points for clump_fall_nodes that are susceptible to falling + +Created a seperate clump_fall function that performes the above + once every second + +It also, upon looping, changes the area to be checked in response to the locations of the last nodes that fell + +Furthermore, it removes nodes to fall and spawns the appropriate falling_nodes in their place + +Made a method to spawn a falling node while also automatically giving it the node and metadata information about the node that is trying to fall + +This clump_fall function has lastly been registered to occur automatically on nodes that are punched, broken, and placed + +Beds have been excluded from the clump_fall_node group due to major issues with how they fall + +Documented most of the above + +Clump The Second: + +Created this changelog + +Added an actual description to the documentation of spawn_falling_node (whoops), also revisioned a few other random pieces of documentation + +Whenever a node falls, all nearby falling_nodes and attached_nodes are updated to prevent such nodes from floating after clump_fall_nodes fall + +Clump Fall Nodes no longer repeatedly try to fall when placed on top of nodes in the falling_node group like sand or gravel + +Split a majority of init.lua into functions.lua and override.lua, with clumpfall as the global variable + *Renamed function clump_fall to do_clump_fall to be less confusable with global clumpfall + -Re-included beds in the clump_fall_node group + +Made override_entity method and used it to fix issue where sand can land on a floating block without causing that floating block to fall by making falling nodes punch themselves after landing + *Moved that override_entity method to the entitycontrol mod and added a dependency and depends.txt for that + *Turned the individual checks inside of the check_group_for_fall function into the function check_individual_for_fall, so it can be used for other purposes + +Heavily modified behavior of objects that are in both clump_fall_node and bed groups: + +You can now fix half beds by punching them (Well, unless they're the untouchable top parts, for now...) + +More importantly, beds' on_destruct method has been fixed to account for the possibility of half beds being destroyed. + +Also, beds are more thorough when checking their other halves, so a destroyed bed will only destroy its own other half, given that such exists + +Added functions that will add to existing on_dig, on_place, and on_punch events instead of replacing them completely. This fixes issues with nodes like Mesecon Switches that will either turn on/off when punched, or will fall down when punched and without support. Now, these kinds of nodes properly do both. + *Overrides the previously changed on_place in this mod now change the after_place_node event because that gives a pos argument usable for the clump_fall function diff --git a/mods/clumpfall/depends.txt b/mods/clumpfall/depends.txt new file mode 100644 index 0000000..b27c3e0 --- /dev/null +++ b/mods/clumpfall/depends.txt @@ -0,0 +1 @@ +entitycontrol diff --git a/mods/clumpfall/functions.lua b/mods/clumpfall/functions.lua new file mode 100644 index 0000000..9ce65b5 --- /dev/null +++ b/mods/clumpfall/functions.lua @@ -0,0 +1,247 @@ +--[[ + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--]] + +clumpfall.functions = {} --global functions variable + +--[[ +Description: + Searches for clump_fall_nodes within a given volume of radius clump_radius and all of the center points between the 3D points given by the parameters. +Parameters: + Two 3D vectors; the first is the smaller, and the second is the larger. These are the two corners of the volume to be searched through. Note that clump_radius is added on to these min and max points, so keep that in mind in relation to the size of the volume that is actually effected by this function. +Returns: + A table containing the positions of all clump_fall_nodes found +--]] +function clumpfall.functions.check_group_for_fall(min_pos, max_pos) + --Local created to temporarily store clump_fall_nodes that should fall down + local nodes_that_can_fall = {} + + --iterates through the entire cubic volume contained between the minimum and maximum positions + for t = min_pos.z - clumpfall.clump_radius, max_pos.z + clumpfall.clump_radius do + for n = min_pos.y - clumpfall.clump_radius, max_pos.y + clumpfall.clump_radius do + for i = min_pos.x - clumpfall.clump_radius, max_pos.x + clumpfall.clump_radius do + --Creates a 3D vector to store the position that is currently being inspected + local check_this = {x=i, y=n, z=t} + + --If at least one clump_fall_node was found underneath, nothing else will happen. If none are found, the current position will be placed within the table nodes_that_can_fall. Also won't make a node fall if any walkable node is directly underneath, even if that node is not a clump_fall_node + if clumpfall.functions.check_individual_for_fall(check_this) then + table.insert(nodes_that_can_fall, check_this) + end + end + end + end + + --Once all this looping is complete, the list of nodes that can fall is complete and can be returned. + return nodes_that_can_fall +end + +--[[ +Description: + Checks a 3x3 area under the given pos for clump fall nodes that can be used as supports, and for a non-clump walkable node +Parameters: + check_pos: The 3D Vector {x=?, y=?, z=?} as the location in which to check +Returns: + true if none of the described supports are found, false is supports are found, nothing if this isn't a clump fall node being checked +--]] +function clumpfall.functions.check_individual_for_fall(check_pos) + --If the position currently being checked belongs to the clump_fall_node group, then + if minetest.get_item_group(minetest.get_node(check_pos).name, "clump_fall_node") ~= 0 then + --First create a variable that assumes that there are no clump_fall_nodes underneath the current position + local has_bottom_support = false + local walkable_node_underneath = false + + --This then checks each node under the current position within a 3x3 area for blocks within the clump_fall_node group + for b = check_pos.z - 1, check_pos.z + 1 do + for a = check_pos.x - 1, check_pos.x + 1 do + local bottom_pos = {x=a, y=check_pos.y-1, z=b} + --As long as at least a single node belongs to the clump_fall_node group, has_bottom_support will be set to true. + if minetest.get_item_group(minetest.get_node(bottom_pos).name, "clump_fall_node") ~= 0 then + has_bottom_support = true + end + end + end + + --If no registered node underneath the node being checked is walkable, then set walkable_node_underneath to true + if minetest.registered_nodes[minetest.get_node({x=check_pos.x, y=check_pos.y-1, z=check_pos.z}).name].walkable == true then + walkable_node_underneath = true + end + + --Return true only if the node checked is 100% able to fall + return has_bottom_support == false and walkable_node_underneath == false + end +end + +--[[ +Description: + Initiate a clump fall that starts within the given 3D points, and if needed, will cascade farther until there is nothing left in the area that can fall +Parameters: + Any number of 3D vectors of which to draw a cubic volume around. This volume will be the starting point for this clump fall +Returns: + Nothing +--]] +function clumpfall.functions.do_clump_fall(...) + --Used to store an array version of the arguments + local arg_array = ({...})[1] + --Used to store an array version of the arguments once they are standardized + local node_pos_to_check = {} + + --This check is needed to properly standardize the arguments. Without it, results of this function would be needlessly inconsistant. + if type(arg_array[1]) ~= "table" then + node_pos_to_check = {arg_array} + else + node_pos_to_check = arg_array + end + + --List of postions of nodes that check_group_for_fall() found to need falling + local node_pos_to_fall = {} + --Variable that assumes that no nodes needed to fall + local found_no_fallable_nodes = true + --Stores the largest x, y, and z values out of the 3D vertices given by the arguments + local max_pos = {x, y, z} + --Stores the smallest x, y, and z values out of the 3D vertices given by the arguments + local min_pos = {x, y, z} + --To be used later in this function, this stores the largest x, y, and z values of nodes that were actually found to need falling. + local new_max_pos = {x, y, z} + --To be used later in this function, this stores the smallest x, y, and z values of nodes that were actually found to need falling. + local new_min_pos = {x, y, z} + + --Compares max_pos and min_pos to the list of arguments, and individually sets the x, y, and z values of each to, respectively, the largest/smallest x/y/z values + for v, pos_find_minmax in pairs(node_pos_to_check) do + if max_pos.x == nil or max_pos.x < pos_find_minmax.x then + max_pos.x = pos_find_minmax.x + end + if max_pos.y == nil or max_pos.y < pos_find_minmax.y then + max_pos.y = pos_find_minmax.y + end + if max_pos.z == nil or max_pos.z < pos_find_minmax.z then + max_pos.z = pos_find_minmax.z + end + if min_pos.x == nil or min_pos.x > pos_find_minmax.x then + min_pos.x = pos_find_minmax.x + end + if min_pos.y == nil or min_pos.y > pos_find_minmax.y then + min_pos.y = pos_find_minmax.y + end + if min_pos.z == nil or min_pos.z > pos_find_minmax.z then + min_pos.z = pos_find_minmax.z + end + end + + --Now that min_pos and max_pos have been calculated, they can be used to find fallable nodes + node_pos_to_fall = clumpfall.functions.check_group_for_fall(min_pos, max_pos) + + --Next, iterate through each of the newfound clump_fall_node positions, if any... + for v,pos_fall in pairs(node_pos_to_fall) do + --Used to store the node at the current position + local node_fall = minetest.get_node(pos_fall) + + --Make one more check in case the node at the current postion already fell or has otherwise been replaced + if minetest.get_item_group(node_fall.name, "clump_fall_node") ~= 0 then + --Finally, a falling_node is placed at the current position just as the node that used to be here is removed + minetest.remove_node(pos_fall) + clumpfall.functions.spawn_falling_node(pos_fall, node_fall) + + --Update nearby nodes to stop blocks in the falling_node and attached_node groups from floating + clumpfall.functions.update_nearby_nonclump(pos_fall) + --Since a node has truly been found that needed to fall, found_no_fallable_nodes can be set to false + found_no_fallable_nodes = false + + --Compares new_max_pos and new_min_pos to the location of each falling node, and individually sets the x, y, and z values of each to, respectively, the largest/smallest x/y/z values + if new_max_pos.x == nil or new_max_pos.x < pos_fall.x then + new_max_pos.x = pos_fall.x + end + if new_max_pos.y == nil or new_max_pos.y < pos_fall.y then + new_max_pos.y = pos_fall.y + end + if new_max_pos.z == nil or new_max_pos.z < pos_fall.z then + new_max_pos.z = pos_fall.z + end + if new_min_pos.x == nil or new_min_pos.x > pos_fall.x then + new_min_pos.x = pos_fall.x + end + if new_min_pos.y == nil or new_min_pos.y > pos_fall.y then + new_min_pos.y = pos_fall.y + end + if new_min_pos.z == nil or new_min_pos.z > pos_fall.z then + new_min_pos.z = pos_fall.z + end + end + end + + --If nodes were found that need to fall in the next round of cascading, loop by calling this very method after 1 second of in-game time passes + if found_no_fallable_nodes == false then + --This will be used with the new min and max position that have been found. + --These are used instead of the old ones so that the range of cascading can't expand indefinitely and cause crashes + minetest.after(1, clumpfall.functions.do_clump_fall, {new_min_pos, new_max_pos}) + end +end + +--[[ +Description: + Spawn a falling_node version of the given node with the given metadata +Parameters: + pos: The postion to spawn the falling_node + node: The node itself to imitate (NOT its name or location) +Returns: + Nothing +--]] +function clumpfall.functions.spawn_falling_node(pos, node) + --Gets the metadata of the node at the current position + local meta = minetest.get_meta(pos) + --Will be used to store any metadata in a table + local metatable = {} + + --If there is any metadata, then + if meta ~= nil then + --Convert that metadata to a table and store it in metatable + metatable = meta:to_table() + end + + --Create a __builtin:falling_node entity and add it to minetest + local entity_fall = minetest.add_entity(pos, "__builtin:falling_node") + --If successful, then + if entity_fall then + --Set its nodetype and metadata to the given arguments node and meta, respectively + entity_fall:get_luaentity():set_node(node, metatable) + end +end + +--[[ +Description: + Checks the position for any falling nodes or attached nodes to call check_for_falling with, so that falling Clump Fall Nodes do not leave behind floating sand/gravel/plants/etc. The size of the volume checked is based on clump_radius. +Parameters: + pos as the 3D vector {x=?, y=?, z=?} of the position to check around +Returns: + Nothing +--]] +function clumpfall.functions.update_nearby_nonclump(pos) + --Iterates through the entire cubic volume with radius clump_radius and pos as its center + for t = pos.z - clumpfall.clump_radius, pos.z + clumpfall.clump_radius do + for n = pos.y - clumpfall.clump_radius, pos.y + clumpfall.clump_radius do + for i = pos.x - clumpfall.clump_radius, pos.x + clumpfall.clump_radius do + --check_pos is used to store the point that is currently being checked. + local check_pos = {x=i, y=n, z=t} + --check_name is used to store the name of the node at check_pos + local check_name = minetest.get_node(check_pos).name + + --If the node being checked doesn't belong to the falling_node or attached_node groups, then + if minetest.get_item_group(check_name, "falling_node") ~= 0 or minetest.get_item_group(check_name, "attached_node") ~= 0 then + --Call the method check_for_falling which will cause those nodes to begin falling if nothing is underneath. + minetest.check_for_falling(check_pos) + end + end + end + end +end diff --git a/mods/clumpfall/init.lua b/mods/clumpfall/init.lua new file mode 100644 index 0000000..bb93823 --- /dev/null +++ b/mods/clumpfall/init.lua @@ -0,0 +1,35 @@ +--[[ + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--]] + +clumpfall = {} --global variable + +--the maximum radius of blocks to cause to fall at once. +clumpfall.clump_radius = 1 + +--Short for modpath, this stores this really long but automatic modpath get +local mp = minetest.get_modpath(minetest.get_current_modname()).."/" + +--Load other lua components +dofile(mp.."functions.lua") +dofile(mp.."override.lua") + +--After all items have been registered and 0 seconds have passed, set the do_clump_fall function to run at any postion where a node is dug, placed, or punched, +minetest.after(0, clumpfall.override.register_add_on_digplacepunchnode, clumpfall.functions.do_clump_fall) +--run the make_nodes_fallable function to make most nodes into Clump Fall Nodes, +minetest.after(0, clumpfall.override.make_nodes_fallable) +--and run the place_node() fix +minetest.after(0, clumpfall.override.fix_falling_nodes) + diff --git a/mods/clumpfall/override.lua b/mods/clumpfall/override.lua new file mode 100644 index 0000000..9d927ca --- /dev/null +++ b/mods/clumpfall/override.lua @@ -0,0 +1,360 @@ +--[[ + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--]] + +clumpfall.override = {} --global override variable + +--[[ +Description: + Overrides the on_dig event of the given node in such a way that it adds the provided function to on_dig, without deleting the old on_dig method +Parameters: + nodename: The internal name of the node that will be overridden + new_on_dig: The name of the function that will be called in addition to nodename's usual on_dig event +Returns: + Nothing +--]] +function clumpfall.override.add_dig_event(nodename, new_on_dig) + --Store the old on_dig event for later use + local old_on_dig = minetest.registered_nodes[nodename].on_dig + --Create a function that calls both the old and new on_dig methods + local master_on_dig = function(pos, node, player) + --Call the old on_dig function if there is one set + if old_on_dig ~= nil then + old_on_dig(pos, node, player) + end + + --Then, call the new on_punch method + new_on_dig(pos, node, player) + end + + --Override the given node with the combination of old and new on_dig functions + minetest.override_item(nodename, {on_dig = master_on_dig}) +end + +--[[ +Description: + Overrides the after_place_node event of the given node in such a way that it adds the provided function to after_place_node, without deleting the old after_place_node method +Parameters: + nodename: The internal name of the node that will be overridden + new_after_place: The name of the function that will be called in addition to nodename's usual after_place_node event +Returns: + Nothing +--]] +function clumpfall.override.add_after_place_event(nodename, new_after_place) + --Store the old after_place_node event for later use + local old_after_place = minetest.registered_nodes[nodename].after_place_node + --Create a function that calls both the old and new after_place_node methods + local master_after_place = function(pos, itemstack, placer, pointed_thing) + --Call the old after_place_node function if there is one set + if old_after_place ~= nil then + old_after_place(pos, itemstack, placer, pointed_thing) + end + + --Then, call the new on_punch method + new_after_place(pos, itemstack, placer, pointed_thing) + end + + --Override the given node with the combination of old and new after_place_node functions + minetest.override_item(nodename, {after_place_node = master_after_place}) +end + +--[[ +Description: + Overrides the on_punch event of the given node in such a way that it adds the provided function to on_punch, without deleting the old on_punch method +Parameters: + nodename: The internal name of the node that will be overridden + new_on_punch: The name of the function that will be called in addition to nodename's usual on_punch event +Returns: + Nothing +--]] +function clumpfall.override.add_punch_event(nodename, new_on_punch) + --Store the old on_punch event for later use + local old_on_punch = minetest.registered_nodes[nodename].on_punch + --Create a function that calls both the old and new on_punch methods + local master_on_punch = function(pos, node, player, pointed_thing) + --Call the old on_punch function if there is one set + if old_on_punch ~= nil then + old_on_punch(pos, node, player, pointed_thing) + end + + --Then, call the new on_punch method + new_on_punch(pos, node, player, pointed_thing) + end + + --Override the given node with the combination of old and new on_punch functions + minetest.override_item(nodename, {on_punch = master_on_punch}) +end + +--[[ +Description: + Add a punch event to beds so that if a player punches a half bed, that bed will instantly spawn its other half in the event that said other half doesn't exist, or it will destroy itself if it is unable to spawn its other half +Parameters: + bed_to_override: The name of the bed half to make fixable via punching +Returns: + Nothing +--]] +function clumpfall.override.bed_update_on_punch(bed_to_override) + clumpfall.override.add_punch_event(bed_to_override, + function(pos, node) + --If this is indeed a bed being affected and it doens't need to clump fall instead, then + if clumpfall.functions.check_individual_for_fall(pos) == false and minetest.get_item_group(node.name, "bed") ~= 0 then + --Create local variables to store the bed's name without _top or _bottom at the end, the suffix of its other half, and the position of its other half + local base_node_name + local other_suffix + local other_pos + + --If this half's name ends in "_bottom", then + if node.name:sub(#node.name - #"bottom", #node.name) == "_bottom" then + --The other half must be the top half, so update variables accordingly. + base_node_name = node.name:sub(1, #node.name - #"_bottom") + other_suffix = "_top" + other_pos = vector.add(pos, minetest.facedir_to_dir(node.param2)) + else + --Otherwise, the other half is the bottom half. + base_node_name = node.name:sub(1, #node.name - #"_top") + other_suffix = "_bottom" + other_pos = vector.subtract(pos, minetest.facedir_to_dir(node.param2)) + end + + --If the name of the node at the other half's position is not actually the name of the other half or that other half is turned incorrectly, then... + if minetest.get_node(other_pos).name ~= base_node_name..other_suffix or minetest.get_node(other_pos).param2 ~= node.param2 then + --Check if the other half is simply missing by seeing it the node at the other half's position is walkable. + if minetest.registered_nodes[minetest.get_node(other_pos).name].walkable == false then + --If not, spawn the other half with the correct position and direction + minetest.set_node(other_pos, {name = base_node_name..other_suffix, param2 = node.param2}) + else + --Otherwise, replace this bed half with air and spawn it as an item + minetest.set_node(pos, {name = "air"}) + minetest.spawn_item(pos, base_node_name.."_bottom") + end + end + end + end) +end + +--[[ +Description: + Completely override the on_destruct method of a given bed with a fixed version of the destruct_bed function +Parameters: + bed_name: The name of the bed half to override +Returns: + Nothing +--]] +function clumpfall.override.set_fix_destruct_bed(bed_name) + --Stores a number reporesenting which half of a bed this is + local bed_half + + --If this bed half's name ends in _bottom, + if bed_name:sub(#bed_name - #"bottom", #bed_name) == "_bottom" then + --Set bed_half = 1. + bed_half = 1 + else + --Otherwise, this is half 2. + bed_half = 2 + end + + --Override the on_dustruct of the node known by the given name + minetest.override_item(bed_name, + { + on_destruct = function(pos) + --Call the fixed destruct_bed at on_destruct's postion and the value of bed_half + clumpfall.override.fix_destruct_bed(pos, bed_half) + --Just in case there was only one bed punched, reset reverse to false afterwards + reverse = false + end + }) +end + +--[[ +Description: + Destroy a bed in such a way that the other half will also be destroyed, but only if that other half actually exists and this half hasn't already been destroyed +Parameters: + pos: The position of the bed half to destroy + n: A number representing which half of the bed is currently being destoryed +Returns: + Nothing +--]] +--reverse: global variable that defaults to false, and is used in determining if the other bed half should be destroyed +reverse = false +function clumpfall.override.fix_destruct_bed(pos, n) + --Store the node at the given position + local node = minetest.get_node(pos) + --Will be used to store the position of the other bed half + local other + + --Based on n and this node's param2 (direction), get the other half's postion + 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 + + --Flip the value inside of reverse. If reverse was false before, it is true now and this bed will destroy the other half. If not, this half will do nothing more. + reverse = not reverse + + --If the other half is indeed a bed, it is this bed's other half (and not the other half of a completely different bed), and reverse is true, then + if minetest.get_item_group(minetest.get_node(other).name, "bed") ~= 0 and minetest.get_node(other).param2 == node.param2 and reverse then + --Delete the other node without spawning an item; this will call the entirety of that bed half's on_destruct before reverse is automatically reset to false + minetest.remove_node(other) + --Use the helper function check_for_falling to update nodes near the other half + minetest.check_for_falling(other) + end +end + + +--[[ +Description: + Overrides falling_node entities with an on_step method that has one key difference compared to usual: when it lands, it calls on_place to prevent glitches +Parameters: + None +Returns: + Nothing +--]] +function clumpfall.override.fix_falling_nodes() + entitycontrol.override_entity("__builtin:falling_node", + { + on_step = function(self, dtime) + -- Set gravity + local acceleration = self.object:getacceleration() + if not vector.equals(acceleration, {x = 0, y = -10, z = 0}) then + self.object:setacceleration({x = 0, y = -10, z = 0}) + end + -- Turn to actual node when colliding with ground, or continue to move + local pos = self.object:getpos() + -- Position of bottom center point + local bcp = {x = pos.x, y = pos.y - 0.7, z = pos.z} + -- Avoid bugs caused by an unloaded node below + local bcn = minetest.get_node_or_nil(bcp) + local bcd = bcn and minetest.registered_nodes[bcn.name] + if bcn and + (not bcd or bcd.walkable or + (minetest.get_item_group(self.node.name, "float") ~= 0 and + bcd.liquidtype ~= "none")) then + if bcd and bcd.leveled and + bcn.name == self.node.name then + local addlevel = self.node.level + if not addlevel or addlevel <= 0 then + addlevel = bcd.leveled + end + if minetest.add_node_level(bcp, addlevel) == 0 then + self.object:remove() + return + end + elseif bcd and bcd.buildable_to and + (minetest.get_item_group(self.node.name, "float") == 0 or + bcd.liquidtype == "none") then + minetest.remove_node(bcp) + return + end + local np = {x = bcp.x, y = bcp.y + 1, z = bcp.z} + -- Check what's here + local n2 = minetest.get_node(np) + local nd = minetest.registered_nodes[n2.name] + -- If it's not air or liquid, remove node and replace it with + -- it's drops + if n2.name ~= "air" and (not nd or nd.liquidtype == "none") then + minetest.remove_node(np) + if nd and nd.buildable_to == false then + -- Add dropped items + local drops = minetest.get_node_drops(n2.name, "") + for _, dropped_item in pairs(drops) do + minetest.add_item(np, dropped_item) + end + end + -- Run script hook + for _, callback in pairs(minetest.registered_on_dignodes) do + callback(np, n2) + end + end + -- Create node and remove entity + if minetest.registered_nodes[self.node.name] then + --This is what's different from the norm; after setting the node, it punches the node. This updates the node without issues caused by calling on_place without any actual player that placed the node + minetest.set_node(np, self.node) + minetest.punch_node(np) + if self.meta then + local meta = minetest.get_meta(np) + meta:from_table(self.meta) + end + end + self.object:remove() + minetest.check_for_falling(np) + return + end + local vel = self.object:getvelocity() + if vector.equals(vel, {x = 0, y = 0, z = 0}) then + local npos = self.object:getpos() + self.object:setpos(vector.round(npos)) + end + end + }) +end + +--[[ +Description: + This function iterates through every registered node, including those that were registered by other mods, and turns ones that don't already fall by themselves and aren't unbreakable into clump_fall_nodes +Parameters: + None +Returns: + Nothing +--]] +function clumpfall.override.make_nodes_fallable() + --Inspect each registered node, one at a time + for nodename, nodereal in pairs(minetest.registered_nodes) do + --create a temporary list of the current node's groups + local temp_node_group_list = nodereal.groups + + --Ensure that the nodes being modified aren't the placeholder block types that tecnically don't exist + if nodename ~= "air" and nodename ~= "ignore" and + minetest.get_item_group(nodename, "falling_node") == 0 and --Don't need to affect nodes that already fall by themselves + minetest.get_item_group(nodename, "attached_node") == 0 and --Same thing for nodes in this group, which fall when no longer attached to another node + minetest.get_item_group(nodename, "liquid") == 0 and --Same thing for nodes in this group, which do technically fall and spread around + minetest.get_item_group(nodename, "unbreakable") == 0 then --Lastly, if a block is invulnerable to begin with, it shouldn't fall down like a typical node + --Initialize a new group variable in the temp list known as "clump_fall_node" as 1 + temp_node_group_list.clump_fall_node = 1 + --Override the node's previous group list with the one that includes the new clump_fall_node group + minetest.override_item(nodename, {groups = temp_node_group_list}) + else + --For the rest, ensure that clump_fall_node is set to 0 and properly initialized + temp_node_group_list.clump_fall_node = 0 + --Override the node's previous group list with the one that includes the new clump_fall_node group + minetest.override_item(nodename, {groups = temp_node_group_list}) + end + + if minetest.get_item_group(nodename, "bed") ~= 0 then + clumpfall.override.bed_update_on_punch(nodename) + clumpfall.override.set_fix_destruct_bed(nodename) + end + end +end + +--[[ +Description: + Overrides the on_dig, after_place_node, and on_punch events of all registered nodes in such a way that it adds the provided function to on_dig, on_place and on_punch, without deleting any old methods +Parameters: + new_on_event: The name of the function that will be called in addition whenever a node is punched, placed, or dug up +Returns: + Nothing +--]] +function clumpfall.override.register_add_on_digplacepunchnode(new_on_event) + --For every registered node, + for nodename, nodereal in pairs(minetest.registered_nodes) do + --Add the given new_on_event to each node's on_dig, after_place_node, and on_punch events + clumpfall.override.add_dig_event(nodename, new_on_event) + clumpfall.override.add_after_place_event(nodename, new_on_event) + clumpfall.override.add_punch_event(nodename, new_on_event) + end +end diff --git a/mods/cozy/README b/mods/cozy/README new file mode 100644 index 0000000..76e918e --- /dev/null +++ b/mods/cozy/README @@ -0,0 +1,3 @@ +Description: Adds commands to /lay or /sit. +License: WTFPL +Depends: default diff --git a/mods/cozy/depends.txt b/mods/cozy/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/cozy/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/cozy/description.txt b/mods/cozy/description.txt new file mode 100644 index 0000000..d21798a --- /dev/null +++ b/mods/cozy/description.txt @@ -0,0 +1 @@ +Sit and lay using chat commands diff --git a/mods/cozy/init.lua b/mods/cozy/init.lua new file mode 100644 index 0000000..913e73e --- /dev/null +++ b/mods/cozy/init.lua @@ -0,0 +1,53 @@ +minetest.register_globalstep(function(dtime) + local players = minetest.get_connected_players() + for i=1, #players do + local name = players[i]:get_player_name() + if default.player_attached[name] and not players[i]:get_attach() and + (players[i]:get_player_control().up == true or + players[i]:get_player_control().down == true or + players[i]:get_player_control().left == true or + players[i]:get_player_control().right == true or + players[i]:get_player_control().jump == true) then + players[i]:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0}) +-- players[i]:set_physics_override(1, 1, 1) + default.player_attached[name] = false + default.player_set_animation(players[i], "stand", 30) + end + end +end) + +minetest.register_chatcommand("sit", { + description = "Sit down", + func = function(name) + local player = minetest.get_player_by_name(name) + if default.player_attached[name] then + player:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0}) +-- player:set_physics_override(1, 1, 1) + default.player_attached[name] = false + default.player_set_animation(player, "stand", 30) + else + player:set_eye_offset({x=0, y=-7, z=2}, {x=0, y=0, z=0}) +-- player:set_physics_override(0, 0, 0) + default.player_attached[name] = true + default.player_set_animation(player, "sit", 30) + end + end +}) + +minetest.register_chatcommand("lay", { + description = "Lay down", + func = function(name) + local player = minetest.get_player_by_name(name) + if default.player_attached[name] then + player:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0}) +-- player:set_physics_override(1, 1, 1) + default.player_attached[name] = false + default.player_set_animation(player, "stand", 30) + else + player:set_eye_offset({x=0, y=-13, z=0}, {x=0, y=0, z=0}) +-- player:set_physics_override(0, 0, 0) + default.player_attached[name] = true + default.player_set_animation(player, "lay", 0) + end + end +}) diff --git a/mods/cozy/screenshot.png b/mods/cozy/screenshot.png new file mode 100644 index 0000000..24720b9 Binary files /dev/null and b/mods/cozy/screenshot.png differ diff --git a/mods/creative/README.txt b/mods/creative/README.txt new file mode 100644 index 0000000..82357f3 --- /dev/null +++ b/mods/creative/README.txt @@ -0,0 +1,12 @@ +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/creative/depends.txt b/mods/creative/depends.txt new file mode 100644 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 100644 index 0000000..2a590e3 --- /dev/null +++ b/mods/creative/init.lua @@ -0,0 +1,63 @@ +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) + 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 100644 index 0000000..0aad92b --- /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[] + 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] + 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 100644 index 0000000..4ad1d5f --- /dev/null +++ b/mods/creative/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2016 Jean-Patrick G. (kilbith) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/creative/textures/creative_trash_icon.png b/mods/creative/textures/creative_trash_icon.png new file mode 100644 index 0000000..e789ad6 Binary files /dev/null and b/mods/creative/textures/creative_trash_icon.png differ diff --git a/mods/currency/Money_Info.txt b/mods/currency/Money_Info.txt new file mode 100644 index 0000000..e38a5aa --- /dev/null +++ b/mods/currency/Money_Info.txt @@ -0,0 +1,33 @@ +Mine-Geld +--------- + +They have no recipe. +A good starting amount is about 250Mg on a server + +You currently get a basic income of 1 Minegeld per day, +so long as you dig at least one node in that day +and have an empty inventory slot for the money to go in. + +Lump Conversion + +Coal Lump ~1Mg +Iron Lump ~4Mg +Copper Lump ~4Mg +Gold Lump ~5Mg +Mese Crystal ~40Mg +Diamond ~50Mg + +Ingot Conversion + +Steel Ingot ~5Mg +Copper Ingot ~5Mg +Gold Ingot ~6Mg + +Block Conversion + +Coal Block ~9Mg +Steel Block ~45Mg +Copper Block ~45Mg +Gold Block ~54Mg +Mese Block ~360Mg +Diamond Block ~450Mg diff --git a/mods/currency/README.md b/mods/currency/README.md new file mode 100644 index 0000000..f4471a7 --- /dev/null +++ b/mods/currency/README.md @@ -0,0 +1,4 @@ +currency +======== + +Repo for Currency Mod diff --git a/mods/currency/barter.lua b/mods/currency/barter.lua new file mode 100644 index 0000000..abd7fc6 --- /dev/null +++ b/mods/currency/barter.lua @@ -0,0 +1,165 @@ +barter = {} + +barter.chest = {} +barter.chest.formspec = { + main = "size[8,9]".. + "list[current_name;pl1;0,0;3,4;]".. + "list[current_name;pl2;5,0;3,4;]".. + "list[current_player;main;0,5;8,4;]", + pl1 = { + start = "button[3,1;1,1;pl1_start;Start]", + player = function(name) return "label[3,0;"..name.."]" end, + accept1 = "button[3,1;1,1;pl1_accept1;Confirm]".. + "button[3,2;1,1;pl1_cancel;Cancel]", + accept2 = "button[3,1;1,1;pl1_accept2;Exchange]".. + "button[3,2;1,1;pl1_cancel;Cancel]", + }, + pl2 = { + start = "button[4,1;1,1;pl2_start;Start]", + player = function(name) return "label[4,0;"..name.."]" end, + accept1 = "button[4,1;1,1;pl2_accept1;Confirm]".. + "button[4,2;1,1;pl2_cancel;Cancel]", + accept2 = "button[4,1;1,1;pl2_accept2;Exchange]".. + "button[4,2;1,1;pl2_cancel;Cancel]", + }, +} + +barter.chest.check_privilege = function(listname,playername,meta) + if listname == "pl1" then + if playername ~= meta:get_string("pl1") then + return false + elseif meta:get_int("pl1step") ~= 1 then + return false + end + end + if listname == "pl2" then + if playername ~= meta:get_string("pl2") then + return false + elseif meta:get_int("pl2step") ~= 1 then + return false + end + end + return true +end + +barter.chest.update_formspec = function(meta) + formspec = barter.chest.formspec.main + pl_formspec = function (n) + if meta:get_int(n.."step")==0 then + formspec = formspec .. barter.chest.formspec[n].start + else + formspec = formspec .. barter.chest.formspec[n].player(meta:get_string(n)) + if meta:get_int(n.."step") == 1 then + formspec = formspec .. barter.chest.formspec[n].accept1 + elseif meta:get_int(n.."step") == 2 then + formspec = formspec .. barter.chest.formspec[n].accept2 + end + end + end + pl_formspec("pl1") pl_formspec("pl2") + meta:set_string("formspec",formspec) +end + +barter.chest.give_inventory = function(inv,list,playername) + player = minetest.get_player_by_name(playername) + if player then + for k,v in ipairs(inv:get_list(list)) do + player:get_inventory():add_item("main",v) + inv:remove_item(list,v) + end + end +end + +barter.chest.cancel = function(meta) + barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1")) + barter.chest.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl2")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0) +end + +barter.chest.exchange = function(meta) + barter.chest.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2")) + barter.chest.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl1")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0) +end + +minetest.register_node("currency:barter", { + drawtype = "nodebox", + description = "Barter Table", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"barter_top.png", + "barter_base.png", + "barter_side.png"}, + inventory_image = "barter_top.png", + node_box = { + type = "fixed", + fixed = { + {-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000}, + {-0.437500,-0.500000,-0.437500,-0.250000,0.500000,-0.250000}, + {-0.437500,-0.500000,0.250000,-0.250000,0.500000,0.437500}, + {0.250000,-0.500000,-0.437500,0.437500,0.500000,-0.250000}, + {0.250000,-0.500000,0.250000,0.437500,0.500000,0.447500}, + }, + }, + groups = {choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Barter Table") + meta:set_string("pl1","") + meta:set_string("pl2","") + barter.chest.update_formspec(meta) + local inv = meta:get_inventory() + inv:set_size("pl1", 3*4) + inv:set_size("pl2", 3*4) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + pl_receive_fields = function(n) + if fields[n.."_start"] and meta:get_string(n) == "" then + meta:set_string(n,sender:get_player_name()) + end + if meta:get_string(n) == "" then + meta:set_int(n.."step",0) + elseif meta:get_int(n.."step")==0 then + meta:set_int(n.."step",1) + end + if sender:get_player_name() == meta:get_string(n) then + if meta:get_int(n.."step")==1 and fields[n.."_accept1"] then + meta:set_int(n.."step",2) + end + if meta:get_int(n.."step")==2 and fields[n.."_accept2"] then + meta:set_int(n.."step",3) + if n == "pl1" and meta:get_int("pl2step") == 3 then barter.chest.exchange(meta) end + if n == "pl2" and meta:get_int("pl1step") == 3 then barter.chest.exchange(meta) end + end + if fields[n.."_cancel"] then barter.chest.cancel(meta) end + end + end + pl_receive_fields("pl1") pl_receive_fields("pl2") + -- End + barter.chest.update_formspec(meta) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not barter.chest.check_privilege(from_list,player:get_player_name(),meta) then return 0 end + if not barter.chest.check_privilege(to_list,player:get_player_name(),meta) then return 0 end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not barter.chest.check_privilege(listname,player:get_player_name(),meta) then return 0 end + return stack:get_count() + end, +}) diff --git a/mods/currency/crafting.lua b/mods/currency/crafting.lua new file mode 100644 index 0000000..cb6992b --- /dev/null +++ b/mods/currency/crafting.lua @@ -0,0 +1,71 @@ +minetest.register_craft({ + output = 'currency:safe', + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:mese_crystal', 'default:steel_ingot'}, + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'currency:shop', + recipe = { + {'default:sign_wall'}, + {'default:chest_locked'}, + } +}) +--[[ +minetest.register_craft({ + output = 'currency:barter', + recipe = { + {'default:sign_wall'}, + {'default:chest'}, + } +}) +--]] +minetest.register_craft({ + type = "shapeless", + output = "currency:minegeld_5", + recipe = {"currency:minegeld", "currency:minegeld", "currency:minegeld", "currency:minegeld", "currency:minegeld"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "currency:minegeld_10", + recipe = {"currency:minegeld_5", "currency:minegeld_5"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "currency:minegeld_5 2", + recipe = {"currency:minegeld_10"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "currency:minegeld 5", + recipe = {"currency:minegeld_5"}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "currency:minegeld_bundle", + recipe = { + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld", + "group:minegeld" + }, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "currency:minegeld_bundle", + burntime = 1, +}) + diff --git a/mods/currency/craftitems.lua b/mods/currency/craftitems.lua new file mode 100644 index 0000000..715c153 --- /dev/null +++ b/mods/currency/craftitems.lua @@ -0,0 +1,26 @@ +minetest.register_craftitem("currency:minegeld", { + description = "1 MineGeld Note", + inventory_image = "minegeld.png", + stack_max = 30000, + groups = {minegeld = 1} +}) + +minetest.register_craftitem("currency:minegeld_5", { + description = "5 MineGeld Note", + inventory_image = "minegeld_5.png", + stack_max = 30000, + groups = {minegeld = 1} +}) + +minetest.register_craftitem("currency:minegeld_10", { + description = "10 MineGeld Note", + inventory_image = "minegeld_10.png", + stack_max = 30000, + groups = {minegeld = 1} +}) + +minetest.register_craftitem("currency:minegeld_bundle", { + description = "Bundle of random Minegeld notes", + inventory_image = "minegeld_bundle.png", + stack_max = 30000, +}) diff --git a/mods/currency/depends.txt b/mods/currency/depends.txt new file mode 100644 index 0000000..d3f04d8 --- /dev/null +++ b/mods/currency/depends.txt @@ -0,0 +1,2 @@ +default +pipeworks? diff --git a/mods/currency/description.txt b/mods/currency/description.txt new file mode 100644 index 0000000..aca9890 --- /dev/null +++ b/mods/currency/description.txt @@ -0,0 +1 @@ +Provides shops, barter tables, safes, and three denominations of currency, called "Minegeld". diff --git a/mods/currency/income.lua b/mods/currency/income.lua new file mode 100644 index 0000000..9856ec9 --- /dev/null +++ b/mods/currency/income.lua @@ -0,0 +1,13 @@ +players_income = {} + +local timer = 0 +local function income() + for _,player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local inv = player:get_inventory() + inv:add_item("main", {name="currency:minegeld_1", count=count}) + minetest.log("info", "[Currency] basic income for "..name.."") + end + minetest.after(600, income) +end +minetest.after(600, income) \ No newline at end of file diff --git a/mods/currency/init.lua b/mods/currency/init.lua new file mode 100644 index 0000000..845e4a7 --- /dev/null +++ b/mods/currency/init.lua @@ -0,0 +1,20 @@ +minetest.log("info", " Currency mod loading... ") +local modpath = minetest.get_modpath("currency") + +dofile(modpath.."/craftitems.lua") +minetest.log("info", "[Currency] Craft_items Loaded!") +dofile(modpath.."/shop.lua") +minetest.log("info", "[Currency] Shop Loaded!") +--dofile(modpath.."/barter.lua") +--minetest.log("info", "[Currency] Barter Loaded!") +dofile(modpath.."/safe.lua") +minetest.log("info", "[Currency] Safe Loaded!") +dofile(modpath.."/crafting.lua") +minetest.log("info", "[Currency] Crafting Loaded!") + +if minetest.setting_getbool("creative_mode") then + minetest.log("info", "[Currency] Creative mode in use, skipping basic income.") +else + dofile(modpath.."/income.lua") + minetest.log("info", "[Currency] Income Loaded!") +end diff --git a/mods/currency/mod.conf b/mods/currency/mod.conf new file mode 100644 index 0000000..6679a26 --- /dev/null +++ b/mods/currency/mod.conf @@ -0,0 +1 @@ +name = currency diff --git a/mods/currency/safe.lua b/mods/currency/safe.lua new file mode 100644 index 0000000..a98b88e --- /dev/null +++ b/mods/currency/safe.lua @@ -0,0 +1,113 @@ +function default.get_safe_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + "list[nodemeta:".. spos .. ";main;1,1;6,2;]".. + "list[current_player;main;0,5;8,4;]" + return formspec +end + +local function has_safe_privilege(meta, player) + local name = "" + if player then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + name = player:get_player_name() + end + if meta:get_string("owner") == "" then + return true + end + if name ~= meta:get_string("owner") then + return false + end + return true +end + +minetest.register_node("currency:safe", { + description = "Safe", + inventory_image = "safe_front.png", + paramtype = "light", + paramtype2 = "facedir", + tiles = {"safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_side.png", + "safe_front.png",}, + is_ground_content = false, + groups = {cracky=1}, + 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", "Safe (owned by ".. + meta:get_string("owner")..")") + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Safe") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 6*2) + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and has_safe_privilege(meta, player) + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + if not has_safe_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a safe belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_safe_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a safe belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + if not has_safe_privilege(meta, player) then + minetest.log("action", player:get_player_name().. + " tried to access a safe belonging to ".. + meta:get_string("owner").." at ".. + minetest.pos_to_string(pos)) + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + minetest.log("action", player:get_player_name().. + " moves stuff in safe 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 safe 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 safe at "..minetest.pos_to_string(pos)) + end, + on_rightclick = function(pos, node, clicker) + local meta = minetest.get_meta(pos) + if has_safe_privilege(meta, clicker) then + minetest.show_formspec( + clicker:get_player_name(), + "currency:safe", + default.get_safe_formspec(pos) + ) + end + end, +}) diff --git a/mods/currency/shop.lua b/mods/currency/shop.lua new file mode 100644 index 0000000..d5c416f --- /dev/null +++ b/mods/currency/shop.lua @@ -0,0 +1,222 @@ +default.shop = {} +default.shop.current_shop = {} +default.shop.formspec = { + customer = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,9.5]".. + "label[0,0;Customer gives (pay here !)]".. + "list[current_player;customer_gives;0,0.5;3,2;]".. + "label[0,2.5;Customer gets]".. + "list[current_player;customer_gets;0,3;3,2;]".. + "label[5,0;Owner wants]".. + "list["..list_name..";owner_wants;5,0.5;3,2;]".. + "label[5,2.5;Owner gives]".. + "list["..list_name..";owner_gives;5,3;3,2;]".. + "list[current_player;main;0,5.5;8,4;]".. + "button[3,2;2,1;exchange;Exchange]" + return formspec + end, + owner = function(pos) + local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z + local formspec = "size[8,9.5]".. + "label[0,0;Customers gave:]".. + "list["..list_name..";customers_gave;0,0.5;3,2;]".. + "label[0,2.5;Your stock:]".. + "list["..list_name..";stock;0,3;3,2;]".. + "label[5,0;You want:]".. + "list["..list_name..";owner_wants;5,0.5;3,2;]".. + "label[5,2.5;In exchange, you give:]".. + "list["..list_name..";owner_gives;5,3;3,2;]".. + "label[0,5;Owner, Use(E)+Place(RMB) for customer interface]".. + "list[current_player;main;0,5.5;8,4;]" + return formspec + end, +} + +default.shop.check_privilege = function(listname,playername,meta) + --[[if listname == "pl1" then + if playername ~= meta:get_string("pl1") then + return false + elseif meta:get_int("pl1step") ~= 1 then + return false + end + end + if listname == "pl2" then + if playername ~= meta:get_string("pl2") then + return false + elseif meta:get_int("pl2step") ~= 1 then + return false + end + end]] + return true +end + + +default.shop.give_inventory = function(inv,list,playername) + player = minetest.get_player_by_name(playername) + if player then + for k,v in ipairs(inv:get_list(list)) do + player:get_inventory():add_item("main",v) + inv:remove_item(list,v) + end + end +end + +default.shop.cancel = function(meta) + --[[default.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl1")) + default.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl2")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0)]] +end + +default.shop.exchange = function(meta) + --[[default.shop.give_inventory(meta:get_inventory(),"pl1",meta:get_string("pl2")) + default.shop.give_inventory(meta:get_inventory(),"pl2",meta:get_string("pl1")) + meta:set_string("pl1","") + meta:set_string("pl2","") + meta:set_int("pl1step",0) + meta:set_int("pl2step",0)]] +end + +minetest.register_node("currency:shop", { + description = "Shop", + paramtype2 = "facedir", + tiles = {"shop_top.png", + "shop_top.png", + "shop_side.png", + "shop_side.png", + "shop_back.png", + "shop_front.png"}, + --inventory_image = "shop_front.png", + groups = {choppy=2,oddly_breakable_by_hand=2,tubedevice=1,tubedevice_receiver=1}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer, itemstack) + local owner = placer:get_player_name() + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Exchange shop (owned by "..owner..")") + meta:set_string("owner",owner) + --[[meta:set_string("pl1","") + meta:set_string("pl2","")]] + local inv = meta:get_inventory() + inv:set_size("customers_gave", 3*2) + inv:set_size("stock", 3*2) + inv:set_size("owner_wants", 3*2) + inv:set_size("owner_gives", 3*2) + if minetest.get_modpath("pipeworks") then pipeworks.after_place(pos) end + end, + after_dig_node = (pipeworks and pipeworks.after_dig), + tube = { + insert_object = function(pos, node, stack, direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:add_item("stock",stack) + end, + can_insert = function(pos,node,stack,direction) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:room_for_item("stock", stack) + end, + input_inventory = "customers_gave", + connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1} + }, + on_rightclick = function(pos, node, clicker, itemstack) + clicker:get_inventory():set_size("customer_gives", 3*2) + clicker:get_inventory():set_size("customer_gets", 3*2) + default.shop.current_shop[clicker:get_player_name()] = pos + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if (clicker:get_player_name() == owner or owner == "") and not clicker:get_player_control().aux1 then + minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",default.shop.formspec.owner(pos)) + else + minetest.show_formspec(clicker:get_player_name(),"currency:shop_formspec",default.shop.formspec.customer(pos)) + end + end, + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if player:get_player_name() ~= owner or owner == "" then return 0 end + return count + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if player:get_player_name() ~= owner and owner ~= "" then return 0 end + return stack:get_count() + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if player:get_player_name() ~= owner and owner ~= "" then return 0 end + return stack:get_count() + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("stock") and inv:is_empty("customers_gave") and inv:is_empty("owner_wants") and inv:is_empty("owner_gives") + end +}) + +minetest.register_on_player_receive_fields(function(sender, formname, fields) + if formname == "currency:shop_formspec" and fields.exchange ~= nil and fields.exchange ~= "" then + local name = sender:get_player_name() + local pos = default.shop.current_shop[name] + local meta = minetest.get_meta(pos) + if meta:get_string("owner") == name then + minetest.chat_send_player(name,"This is your own shop, you can't exchange to yourself !") + else + local minv = meta:get_inventory() + local pinv = sender:get_inventory() + local invlist_tostring = function(invlist) + local out = {} + for i, item in pairs(invlist) do + out[i] = item:to_string() + end + return out + end + local wants = minv:get_list("owner_wants") + local gives = minv:get_list("owner_gives") + if wants == nil or gives == nil then return end -- do not crash the server + -- Check if we can exchange + local can_exchange = true + local owners_fault = false + for i, item in pairs(wants) do + if not pinv:contains_item("customer_gives",item) then + can_exchange = false + end + end + for i, item in pairs(gives) do + if not minv:contains_item("stock",item) then + can_exchange = false + owners_fault = true + end + end + if can_exchange then + for i, item in pairs(wants) do + pinv:remove_item("customer_gives",item) + minv:add_item("customers_gave",item) + end + for i, item in pairs(gives) do + minv:remove_item("stock",item) + pinv:add_item("customer_gets",item) + end + minetest.chat_send_player(name,"Exchanged!") + else + if owners_fault then + minetest.chat_send_player(name,"Exchange can not be done, contact the shop owner.") + else + minetest.chat_send_player(name,"Exchange can not be done, check if you put all items !") + end + end + end + end +end) + +minetest.register_craft({ + output = 'currency:shop', + recipe = { + {'default:sign_wall'}, + {'default:chest_locked'}, + } +}) \ No newline at end of file diff --git a/mods/currency/textures/barter_base.png b/mods/currency/textures/barter_base.png new file mode 100644 index 0000000..b4e2599 Binary files /dev/null and b/mods/currency/textures/barter_base.png differ diff --git a/mods/currency/textures/barter_side.png b/mods/currency/textures/barter_side.png new file mode 100644 index 0000000..57c1d7c Binary files /dev/null and b/mods/currency/textures/barter_side.png differ diff --git a/mods/currency/textures/barter_top.png b/mods/currency/textures/barter_top.png new file mode 100644 index 0000000..8ce9256 Binary files /dev/null and b/mods/currency/textures/barter_top.png differ diff --git a/mods/currency/textures/minegeld.png b/mods/currency/textures/minegeld.png new file mode 100644 index 0000000..79e36ff Binary files /dev/null and b/mods/currency/textures/minegeld.png differ diff --git a/mods/currency/textures/minegeld_10.png b/mods/currency/textures/minegeld_10.png new file mode 100644 index 0000000..acdb05e Binary files /dev/null and b/mods/currency/textures/minegeld_10.png differ diff --git a/mods/currency/textures/minegeld_5.png b/mods/currency/textures/minegeld_5.png new file mode 100644 index 0000000..5c66ac6 Binary files /dev/null and b/mods/currency/textures/minegeld_5.png differ diff --git a/mods/currency/textures/minegeld_bundle.png b/mods/currency/textures/minegeld_bundle.png new file mode 100644 index 0000000..c6b339d Binary files /dev/null and b/mods/currency/textures/minegeld_bundle.png differ diff --git a/mods/currency/textures/safe_front.png b/mods/currency/textures/safe_front.png new file mode 100644 index 0000000..0d4c007 Binary files /dev/null and b/mods/currency/textures/safe_front.png differ diff --git a/mods/currency/textures/safe_side.png b/mods/currency/textures/safe_side.png new file mode 100644 index 0000000..1ec4c1f Binary files /dev/null and b/mods/currency/textures/safe_side.png differ diff --git a/mods/currency/textures/shop_back.png b/mods/currency/textures/shop_back.png new file mode 100644 index 0000000..4b1e882 Binary files /dev/null and b/mods/currency/textures/shop_back.png differ diff --git a/mods/currency/textures/shop_front.png b/mods/currency/textures/shop_front.png new file mode 100644 index 0000000..fd8c117 Binary files /dev/null and b/mods/currency/textures/shop_front.png differ diff --git a/mods/currency/textures/shop_side.png b/mods/currency/textures/shop_side.png new file mode 100644 index 0000000..86fad5b Binary files /dev/null and b/mods/currency/textures/shop_side.png differ diff --git a/mods/currency/textures/shop_top.png b/mods/currency/textures/shop_top.png new file mode 100644 index 0000000..fbbef09 Binary files /dev/null and b/mods/currency/textures/shop_top.png differ diff --git a/mods/default/README.txt b/mods/default/README.txt new file mode 100644 index 0000000..75f869d --- /dev/null +++ b/mods/default/README.txt @@ -0,0 +1,300 @@ +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) + +Authors of media (textures, models and sounds) +---------------------------------------------- +Everything not listed in here: +celeron55, Perttu Ahola (CC BY-SA 3.0) + +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 + +Cisoun's conifers mod (CC BY-SA 3.0): + default_pine_needles.png + +Originating from G4JC's Almost MC Texture Pack (CC BY-SA 3.0): + default_torch.png + default_torch_on_ceiling.png + default_torch_on_floor.png + +VanessaE's animated torches (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 + +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_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 + +MirceaKitsune (CC BY-SA 3.0): + character.x + +Jordach (CC BY-SA 3.0): + character.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 + +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_acacia_tree.png + default_acacia_tree_top.png + default_acacia_wood.png + default_acacia_bush_stem.png + default_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) + +brunob.santos (CC BY-SA 4.0): + default_desert_cobble.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 (WTFPL): + default_gravel.png -- Derived from Gambit's PixelBOX texture pack light gravel + +Neuromancer (CC BY-SA 2.0): + default_cobble.png, based on texture by Brane praefect + default_mossycobble.png, based on texture by Brane praefect + +Neuromancer (CC BY-SA 3.0): + 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 + default_item_smoke.ogg, based on sound by http://opengameart.org/users/bart + +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 + +CloudyProton (CC BY-SA 3.0): + default_book_written.png, based on default_book.png by Gambit + +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_snow_footstep.1.ogg + default_snow_footstep.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 + diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua new file mode 100644 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/crafting.lua b/mods/default/crafting.lua new file mode 100644 index 0000000..2d11d26 --- /dev/null +++ b/mods/default/crafting.lua @@ -0,0 +1,1154 @@ +-- 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: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'}, + } +}) + +-- +-- 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: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: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: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 = 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: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 100644 index 0000000..e1d224d --- /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: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("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:getpos(), new_stack) + end -- else: added to inventory successfully + end + + return itemstack + end + end +}) + +minetest.register_craftitem("default:coal_lump", { + description = "Coal Lump", + inventory_image = "default_coal_lump.png", + 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/functions.lua b/mods/default/functions.lua new file mode 100644 index 0000000..4c8d2f0 --- /dev/null +++ b/mods/default/functions.lua @@ -0,0 +1,580 @@ +-- mods/default/functions.lua + +-- +-- 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 + +-- +-- 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"}, + 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 + + +-- +-- 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 +}) + + +-- +-- 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 + + +-- +-- Coral death near air +-- + +minetest.register_abm({ + nodenames = {"default:coral_brown", "default:coral_orange"}, + neighbors = {"air"}, + interval = 17, + chance = 5, + catch_up = false, + action = function(pos, node) + minetest.set_node(pos, {name = "default:coral_skeleton"}) + end, +}) + + +-- +-- NOTICE: This method is not an official part of the API yet! +-- This method may change in future. +-- + +function default.can_interact_with_node(player, pos) + if player then + if minetest.check_player_privs(player, "protection_bypass") then + return true + end + else + return false + end + + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + + if not owner or owner == "" or owner == player:get_player_name() then + return true + end + + -- is player wielding the right key? + local item = player:get_wielded_item() + if item:get_name() == "default:key" then + local key_meta = item:get_meta() + + if key_meta:get_string("secret") == "" then + local key_oldmeta = item:get_metadata() + if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then + return false + end + + key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret) + item:set_metadata("") + end + + return meta:get_string("key_lock_secret") == key_meta:get_string("secret") + end + + return false +end diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua new file mode 100644 index 0000000..05056e6 --- /dev/null +++ b/mods/default/furnace.lua @@ -0,0 +1,337 @@ + +-- +-- Formspecs +-- + +local function active_formspec(fuel_percent, item_percent) + 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) + return formspec +end + +local inactive_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) + +-- +-- 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 = 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, "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", "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", 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 100644 index 0000000..7b5f62f --- /dev/null +++ b/mods/default/init.lua @@ -0,0 +1,52 @@ +-- 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 = "bgcolor[#080808BB;true]" +default.gui_bg_img = "background[5,5;1,1;gui_formbg.png;true]" +default.gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]" + +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.."/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.."/mapgen.lua") +dofile(default_path.."/player.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 100644 index 0000000..c34e60e --- /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:getpos() + 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: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/default/legacy.lua b/mods/default/legacy.lua new file mode 100644 index 0000000..a8c8ad5 --- /dev/null +++ b/mods/default/legacy.lua @@ -0,0 +1,25 @@ +-- 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 diff --git a/mods/default/license.txt b/mods/default/license.txt new file mode 100644 index 0000000..7dcd24c --- /dev/null +++ b/mods/default/license.txt @@ -0,0 +1,177 @@ +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 + CloudyProton + +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-ShareAlike 4.0 International (CC BY-SA 4.0) +Copyright (C) 2014-2016 brunob.santos + +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/4.0/ + +----------------------- + +Attribution-ShareAlike 2.0 Generic (CC BY-SA 2.0) +Copyright (C) 2014-2016 Neuromancer + +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/2.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/ diff --git a/mods/default/mapgen.lua b/mods/default/mapgen.lua new file mode 100644 index 0000000..028a008 --- /dev/null +++ b/mods/default/mapgen.lua @@ -0,0 +1,1826 @@ +-- +-- 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") + + +-- +-- Register ores +-- + +-- Blob ores +-- These first to avoid other ores in blobs + +-- Mgv6 + +function default.register_mgv6_blob_ores() + + -- Clay + -- This first to avoid clay in sand blobs + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -15, + y_max = 0, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:sand", + wherein = {"default:stone", "default:desert_stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 0, + 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 = 12 * 12 * 12, + 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 + }, + }) +end + + +-- All mapgens except mgv6 + +function default.register_blob_ores() + + -- Clay + + minetest.register_ore({ + ore_type = "blob", + ore = "default:clay", + wherein = {"default:sand"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -15, + y_max = 0, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.0 + }, + }) + + -- Silver sand + + minetest.register_ore({ + ore_type = "blob", + ore = "default:silver_sand", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 2316, + octaves = 1, + persist = 0.0 + }, + biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", + "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", + "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", + "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", + "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", + "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", + "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", + "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} + }) + + -- Dirt + + minetest.register_ore({ + ore_type = "blob", + ore = "default:dirt", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 17676, + octaves = 1, + persist = 0.0 + }, + biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", + "deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore", + "rainforest", "rainforest_swamp", "floatland_grassland", + "floatland_coniferous_forest"} + }) + + -- Gravel + + minetest.register_ore({ + ore_type = "blob", + ore = "default:gravel", + wherein = {"default:stone"}, + clust_scarcity = 16 * 16 * 16, + clust_size = 5, + y_min = -31000, + y_max = 31000, + noise_threshold = 0.0, + noise_params = { + offset = 0.5, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = 766, + octaves = 1, + persist = 0.0 + }, + biomes = {"icesheet_ocean", "tundra", "tundra_beach", "tundra_ocean", + "taiga", "taiga_ocean", "snowy_grassland", "snowy_grassland_ocean", + "grassland", "grassland_dunes", "grassland_ocean", "coniferous_forest", + "coniferous_forest_dunes", "coniferous_forest_ocean", "deciduous_forest", + "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", + "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", + "rainforest", "rainforest_swamp", "rainforest_ocean", "underground", + "floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} + }) +end + + +-- Scatter ores +-- All mapgens + +function default.register_ores() + + -- Coal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 9, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 8 * 8 * 8, + clust_num_ores = 8, + clust_size = 3, + y_min = -31000, + y_max = 64, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_coal", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_min = -31000, + y_max = 0, + }) + + -- Iron + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 12, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 7 * 7 * 7, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = 0, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_iron", + wherein = "default:stone", + clust_scarcity = 24 * 24 * 24, + clust_num_ores = 27, + clust_size = 6, + y_min = -31000, + y_max = -64, + }) + + -- Copper + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 12 * 12 * 12, + clust_num_ores = 4, + clust_size = 3, + y_min = -63, + y_max = -16, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_copper", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -64, + }) + + -- Tin + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 4, + clust_size = 3, + y_min = -127, + y_max = -32, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_tin", + wherein = "default:stone", + clust_scarcity = 10 * 10 * 10, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -128, + }) + + -- Gold + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 3, + clust_size = 2, + y_min = -255, + y_max = -64, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_gold", + wherein = "default:stone", + clust_scarcity = 13 * 13 * 13, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -256, + }) + + -- Mese crystal + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 18 * 18 * 18, + clust_num_ores = 3, + clust_size = 2, + y_min = -255, + y_max = -64, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_mese", + wherein = "default:stone", + clust_scarcity = 14 * 14 * 14, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -256, + }) + + -- Diamond + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 17 * 17 * 17, + clust_num_ores = 4, + clust_size = 3, + y_min = -255, + y_max = -128, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:stone_with_diamond", + wherein = "default:stone", + clust_scarcity = 15 * 15 * 15, + clust_num_ores = 4, + clust_size = 3, + y_min = -31000, + y_max = -256, + }) + + -- Mese block + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_min = 1025, + y_max = 31000, + }) + + minetest.register_ore({ + ore_type = "scatter", + ore = "default:mese", + wherein = "default:stone", + clust_scarcity = 36 * 36 * 36, + clust_num_ores = 3, + clust_size = 2, + y_min = -31000, + y_max = -1024, + }) +end + + +-- +-- Register biomes +-- + +-- All mapgens except mgv6 + +function default.register_biomes(upper_limit) + + -- Icesheet + + minetest.register_biome({ + name = "icesheet", + node_dust = "default:snowblock", + node_top = "default:snowblock", + depth_top = 1, + node_filler = "default:snowblock", + depth_filler = 3, + node_stone = "default:ice", + node_water_top = "default:ice", + depth_water_top = 10, + --node_water = "", + node_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_min = -8, + y_max = upper_limit, + heat_point = 0, + humidity_point = 73, + }) + + minetest.register_biome({ + name = "icesheet_ocean", + node_dust = "default:snowblock", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + node_water_top = "default:ice", + depth_water_top = 10, + --node_water = "", + --node_river_water = "", + y_min = -112, + y_max = -9, + heat_point = 0, + humidity_point = 73, + }) + + -- Tundra + + minetest.register_biome({ + name = "tundra", + node_dust = "default:snowblock", + --node_top = , + --depth_top = , + --node_filler = , + --depth_filler = , + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_min = 2, + y_max = upper_limit, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_beach", + --node_dust = "", + node_top = "default:gravel", + depth_top = 1, + node_filler = "default:gravel", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_min = -3, + y_max = 1, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_min = -112, + y_max = -4, + heat_point = 0, + humidity_point = 40, + }) + + -- Taiga + + minetest.register_biome({ + name = "taiga", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 2, + y_max = upper_limit, + heat_point = 25, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "taiga_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 1, + heat_point = 25, + humidity_point = 70, + }) + + -- Snowy grassland + + minetest.register_biome({ + name = "snowy_grassland", + node_dust = "default:snow", + node_top = "default:dirt_with_snow", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 20, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "snowy_grassland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 20, + humidity_point = 35, + }) + + -- Grassland + + minetest.register_biome({ + name = "grassland", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 6, + y_max = upper_limit, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 2, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = 5, + heat_point = 50, + humidity_point = 35, + }) + + minetest.register_biome({ + name = "grassland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 50, + humidity_point = 35, + }) + + -- Coniferous forest + + minetest.register_biome({ + name = "coniferous_forest", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 6, + y_max = upper_limit, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_dunes", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = 5, + heat_point = 45, + humidity_point = 70, + }) + + minetest.register_biome({ + name = "coniferous_forest_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 45, + humidity_point = 70, + }) + + -- Deciduous forest + + minetest.register_biome({ + name = "deciduous_forest", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 1, + y_max = upper_limit, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_shore", + --node_dust = "", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -1, + y_max = 0, + heat_point = 60, + humidity_point = 68, + }) + + minetest.register_biome({ + name = "deciduous_forest_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = -2, + heat_point = 60, + humidity_point = 68, + }) + + -- Desert + + minetest.register_biome({ + name = "desert", + --node_dust = "", + node_top = "default:desert_sand", + depth_top = 1, + node_filler = "default:desert_sand", + depth_filler = 1, + node_stone = "default:desert_stone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 92, + humidity_point = 16, + }) + + minetest.register_biome({ + name = "desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:desert_stone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 92, + humidity_point = 16, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 60, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "sandstone_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 60, + humidity_point = 0, + }) + + -- Cold desert + + minetest.register_biome({ + name = "cold_desert", + --node_dust = "", + node_top = "default:silver_sand", + depth_top = 1, + node_filler = "default:silver_sand", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 5, + y_max = upper_limit, + heat_point = 40, + humidity_point = 0, + }) + + minetest.register_biome({ + name = "cold_desert_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = 4, + heat_point = 40, + humidity_point = 0, + }) + + -- Savanna + + minetest.register_biome({ + name = "savanna", + --node_dust = "", + node_top = "default:dirt_with_dry_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 1, + y_max = upper_limit, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_shore", + --node_dust = "", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -1, + y_max = 0, + heat_point = 89, + humidity_point = 42, + }) + + minetest.register_biome({ + name = "savanna_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = -2, + heat_point = 89, + humidity_point = 42, + }) + + -- Rainforest + + minetest.register_biome({ + name = "rainforest", + --node_dust = "", + node_top = "default:dirt_with_rainforest_litter", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = 1, + y_max = upper_limit, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_swamp", + --node_dust = "", + node_top = "default:dirt", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -1, + y_max = 0, + heat_point = 86, + humidity_point = 65, + }) + + minetest.register_biome({ + name = "rainforest_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + node_riverbed = "default:sand", + depth_riverbed = 2, + y_min = -112, + y_max = -2, + heat_point = 86, + humidity_point = 65, + }) + + -- Underground + + minetest.register_biome({ + name = "underground", + --node_dust = "", + --node_top = "", + --depth_top = , + --node_filler = "", + --depth_filler = , + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = -31000, + y_max = -113, + heat_point = 50, + humidity_point = 50, + }) +end + + +-- Biomes for floatlands + +function default.register_floatland_biomes(floatland_level, shadow_limit) + + -- Coniferous forest + + minetest.register_biome({ + name = "floatland_coniferous_forest", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 70, + }) + + -- Grassland + + minetest.register_biome({ + name = "floatland_grassland", + --node_dust = "", + node_top = "default:dirt_with_grass", + depth_top = 1, + node_filler = "default:dirt", + depth_filler = 1, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 35, + }) + + -- Sandstone desert + + minetest.register_biome({ + name = "floatland_sandstone_desert", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 1, + node_stone = "default:sandstone", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = floatland_level + 2, + y_max = 31000, + heat_point = 50, + humidity_point = 0, + }) + + -- Floatland ocean / underground + + minetest.register_biome({ + name = "floatland_ocean", + --node_dust = "", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + --node_riverbed = "", + --depth_riverbed = , + y_min = shadow_limit, + y_max = floatland_level + 1, + heat_point = 50, + humidity_point = 50, + }) +end + + +-- +-- Register decorations +-- + +-- Mgv6 + +function default.register_mgv6_decorations() + + -- Papyrus + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 100, y = 100, z = 100}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + y_min = 1, + y_max = 1, + decoration = "default:papyrus", + height = 2, + height_max = 4, + spawn_by = "default:water_source", + num_spawn_by = 1, + }) + + -- Cacti + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.012, + scale = 0.024, + spread = {x = 100, y = 100, z = 100}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:cactus", + height = 3, + height_max = 4, + }) + + -- Long grasses + + for length = 1, 5 do + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.007, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:grass_"..length, + }) + end + + -- Dry shrubs + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.035, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "default:dry_shrub", + }) +end + + +-- All mapgens except mgv6 + +local function register_grass_decoration(offset, scale, length) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "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 = {"grassland", "grassland_dunes", "deciduous_forest", + "coniferous_forest", "coniferous_forest_dunes", + "floatland_grassland", "floatland_coniferous_forest"}, + y_min = 1, + y_max = 31000, + decoration = "default:grass_" .. length, + }) +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 = {"savanna"}, + y_min = 1, + y_max = 31000, + decoration = "default:dry_grass_" .. length, + }) +end + + +function default.register_decorations() + + -- Apple tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.036, + scale = 0.022, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/apple_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0018, + scale = 0.0011, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/apple_log.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Jungle tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"rainforest", "rainforest_swamp"}, + y_min = -1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_rainforest_litter", "default:dirt"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"rainforest", "rainforest_swamp"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/jungle_log.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Taiga and temperate coniferous forest pine tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.036, + scale = 0.022, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest", "floatland_coniferous_forest"}, + y_min = 2, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/pine_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_snow", "default:dirt_with_grass"}, + sidelen = 80, + noise_params = { + offset = 0.0018, + scale = 0.0011, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"taiga", "coniferous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/pine_log.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Acacia tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.002, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_tree.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.001, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"savanna"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_log.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Aspen tree and log + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.015, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_tree.mts", + flags = "place_center_x, place_center_z", + }) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0.0, + scale = -0.0008, + spread = {x = 250, y = 250, z = 250}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {"deciduous_forest"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/aspen_log.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Large cactus + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_min = 5, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/large_cactus.mts", + flags = "place_center_x", + rotation = "random", + }) + + -- Cactus + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + noise_params = { + offset = -0.0003, + scale = 0.0009, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_min = 5, + y_max = 31000, + decoration = "default:cactus", + height = 2, + height_max = 5, + }) + + -- Papyrus + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.3, + scale = 0.7, + spread = {x = 200, y = 200, z = 200}, + seed = 354, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna_shore"}, + y_min = 0, + y_max = 0, + schematic = minetest.get_modpath("default") .. "/schematics/papyrus.mts", + }) + + -- Bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"snowy_grassland", "grassland", "deciduous_forest", + "floatland_grassland"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Acacia bush + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna"}, + y_min = 1, + y_max = 31000, + schematic = minetest.get_modpath("default") .. "/schematics/acacia_bush.mts", + flags = "place_center_x, place_center_z", + }) + + -- Grasses + + 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) + + -- Dry grasses + + 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) + + -- Junglegrass + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"rainforest"}, + y_min = 1, + y_max = 31000, + decoration = "default:junglegrass", + }) + + -- Dry shrub + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", + "default:sand", "default:silver_sand"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.02, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert", "sandstone_desert", "cold_desert"}, + y_min = 2, + y_max = 31000, + decoration = "default:dry_shrub", + }) + + -- Coral reef + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:sand"}, + noise_params = { + offset = -0.15, + scale = 0.1, + spread = {x = 100, y = 100, z = 100}, + seed = 7013, + octaves = 3, + persist = 1, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "rainforest_ocean", + }, + y_min = -8, + y_max = -2, + schematic = minetest.get_modpath("default") .. "/schematics/corals.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) +end + + +-- +-- Detect mapgen, flags and parameters to select functions +-- + +-- Get setting or default +local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or + "mountains, ridges, nofloatlands" +local captures_float = string.match(mgv7_spflags, "floatlands") +local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") + +local mgv7_floatland_level = minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 +local mgv7_shadow_limit = minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 + +minetest.clear_registered_biomes() +minetest.clear_registered_ores() +minetest.clear_registered_decorations() + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then + default.register_mgv6_blob_ores() + default.register_ores() + default.register_mgv6_decorations() +elseif mg_name == "v7" and captures_float == "floatlands" and + captures_nofloat ~= "nofloatlands" then + -- Mgv7 with floatlands + default.register_biomes(mgv7_shadow_limit - 1) + default.register_floatland_biomes(mgv7_floatland_level, mgv7_shadow_limit) + default.register_blob_ores() + default.register_ores() + default.register_decorations() +else + default.register_biomes(31000) + default.register_blob_ores() + default.register_ores() + default.register_decorations() +end diff --git a/mods/default/models/character.b3d b/mods/default/models/character.b3d new file mode 100644 index 0000000..9ab4543 Binary files /dev/null and b/mods/default/models/character.b3d differ diff --git a/mods/default/models/character.blend b/mods/default/models/character.blend new file mode 100644 index 0000000..fca9f65 Binary files /dev/null and b/mods/default/models/character.blend differ diff --git a/mods/default/models/character.png b/mods/default/models/character.png new file mode 100644 index 0000000..0502178 Binary files /dev/null and b/mods/default/models/character.png differ diff --git a/mods/default/models/chest_open.obj b/mods/default/models/chest_open.obj new file mode 100644 index 0000000..72ba175 --- /dev/null +++ b/mods/default/models/chest_open.obj @@ -0,0 +1,79 @@ +# Blender v2.78 (sub 0) OBJ File: 'chest-open.blend' +# www.blender.org +o Top_Cube.002_None_Top_Cube.002_None_bottom +v -0.500000 0.408471 0.720970 +v -0.500000 1.115578 0.013863 +v -0.500000 0.894607 -0.207108 +v -0.500000 0.187501 0.499999 +v 0.500000 1.115578 0.013863 +v 0.500000 0.408471 0.720970 +v 0.500000 0.187501 0.499999 +v 0.500000 0.894607 -0.207108 +v -0.500000 0.187500 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.187500 -0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 1.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 0.0000 0.6875 +vt 1.0000 1.0000 +vt 0.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 0.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 1.0000 1.0000 +vt 1.0000 0.6875 +vt 1.0000 0.0000 +vt 0.0000 1.0000 +vt 0.0000 0.6875 +vt 0.0000 0.6875 +vt 0.0000 0.0000 +vt 1.0000 0.5000 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5000 +vt 0.0000 0.0000 +vt 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn -0.0000 -1.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.7071 -0.7071 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 1.0000 -0.0000 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Top +s off +f 6/1/1 5/2/1 2/3/1 1/4/1 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Bottom +f 11/5/2 10/6/2 14/7/2 13/8/2 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Right-Left +f 1/9/3 2/10/3 3/11/3 4/12/3 +f 5/13/4 6/1/4 7/14/4 8/15/4 +f 4/12/3 9/16/3 10/17/3 11/18/3 +f 12/19/4 7/14/4 13/8/4 14/20/4 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Back +f 6/21/5 1/9/5 4/12/5 7/22/5 +f 7/22/6 4/12/6 11/18/6 13/23/6 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Front +f 2/10/7 5/24/7 8/25/7 3/11/7 +f 9/16/8 12/26/8 14/27/8 10/17/8 +g Top_Cube.002_None_Top_Cube.002_None_bottom_Top_Cube.002_None_Top_Cube.002_None_bottom_Inside +f 4/28/9 3/29/9 8/30/9 7/31/9 +f 7/31/10 12/32/10 9/33/10 4/28/10 diff --git a/mods/default/models/torch_ceiling.obj b/mods/default/models/torch_ceiling.obj new file mode 100644 index 0000000..ea51f3c --- /dev/null +++ b/mods/default/models/torch_ceiling.obj @@ -0,0 +1,58 @@ +# Blender v2.77 (sub 0) OBJ File: 'torch_ceiling.blend' +# www.blender.org +mtllib torch_ceiling.mtl +o Cube_Cube.001 +v -0.062469 -0.047331 0.068152 +v -0.062469 -0.559515 -0.164388 +v -0.062469 0.004344 -0.045667 +v -0.062469 -0.507839 -0.278206 +v 0.062531 -0.047331 0.068152 +v 0.062531 -0.559515 -0.164388 +v 0.062531 0.004344 -0.045667 +v 0.062531 -0.507839 -0.278206 +v 0.353584 0.040000 0.363553 +v 0.353584 -0.397500 0.363553 +v -0.353522 0.040000 -0.343553 +v -0.353522 -0.397500 -0.343553 +v 0.353584 0.040000 -0.343553 +v -0.353522 0.040000 0.363553 +v 0.353584 -0.397500 -0.343553 +v -0.353522 -0.397500 0.363553 +vt 0.5625 0.5000 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.5000 +vt 0.4375 0.0000 +vt 0.5625 0.0000 +vt 0.5625 0.1250 +vt 0.4375 0.1250 +vt 0.5625 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.6250 +vt 0.4375 0.0000 +vt 0.5625 0.6250 +vt 0.5625 0.0000 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vt 0.0000 0.5625 +vt 0.0000 0.5625 +vt 1.0000 0.5625 +vt 1.0000 1.0000 +vt 0.0000 1.0000 +vn 0.0000 0.9105 0.4134 +vn -0.0000 -0.4134 0.9105 +vn -1.0000 0.0000 0.0000 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/9/2 4/6/2 8/5/2 7/10/2 +f 1/11/3 3/9/3 4/6/3 2/12/3 +f 5/13/2 1/11/2 2/12/2 6/14/2 +f 7/10/3 8/5/3 6/14/3 5/13/3 +usemtl Material.002 +f 9/15/4 10/16/4 12/17/4 11/18/4 +f 13/19/5 14/20/5 16/21/5 15/22/5 diff --git a/mods/default/models/torch_floor.obj b/mods/default/models/torch_floor.obj new file mode 100644 index 0000000..e2487ef --- /dev/null +++ b/mods/default/models/torch_floor.obj @@ -0,0 +1,50 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_floor.blend' +# www.blender.org +mtllib torch_floor.mtl +o Cube_Cube.001 +v 0.062500 0.062500 -0.062500 +v 0.062500 -0.500000 -0.062500 +v 0.062500 0.062500 0.062500 +v 0.062500 -0.500000 0.062500 +v -0.062500 0.062500 -0.062500 +v -0.062500 -0.500000 -0.062500 +v -0.062500 0.062500 0.062500 +v -0.062500 -0.500000 0.062500 +v -0.353553 -0.500000 0.353553 +v -0.353553 0.500000 0.353553 +v 0.353553 -0.500000 -0.353553 +v 0.353553 0.500000 -0.353553 +v -0.353553 -0.500000 -0.353553 +v 0.353553 -0.500000 0.353553 +v -0.353553 0.500000 -0.353553 +v 0.353553 0.500000 0.353553 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.000000 -0.707100 +vn -0.707100 -0.000000 0.707100 +g Cube_Cube.001_Cube_Cube.001_Material.001 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +g Cube_Cube.001_Cube_Cube.001_Material.002 +usemtl Material.002 +f 9/9/4 10/10/4 12/11/4 11/12/4 +f 13/12/5 14/9/5 16/10/5 15/11/5 diff --git a/mods/default/models/torch_wall.obj b/mods/default/models/torch_wall.obj new file mode 100644 index 0000000..57baa9e --- /dev/null +++ b/mods/default/models/torch_wall.obj @@ -0,0 +1,64 @@ +# Blender v2.76 (sub 11) OBJ File: 'torch_wall.blend' +# www.blender.org +mtllib torch_wall.mtl +o Cube_Cube.001 +v 0.062469 -0.195248 0.023570 +v 0.062469 -0.476498 -0.463570 +v 0.062469 -0.303502 0.086070 +v 0.062469 -0.584752 -0.401070 +v -0.062531 -0.195248 0.023570 +v -0.062531 -0.476498 -0.463570 +v -0.062531 -0.303502 0.086070 +v -0.062531 -0.584752 -0.401070 +v -0.353584 -0.613553 0.022500 +v -0.353584 -0.613553 0.460000 +v 0.353522 0.093553 0.022500 +v 0.353522 0.093553 0.460000 +v -0.353584 0.093553 0.022500 +v 0.353522 -0.613553 0.022500 +v -0.353584 0.093553 0.460000 +v 0.353522 -0.613553 0.460000 +v 0.353553 0.056811 -0.121957 +v 0.353553 -0.224439 -0.609096 +v -0.353553 -0.555561 0.231596 +v -0.353553 -0.836811 -0.255543 +v -0.353553 0.056811 -0.121957 +v -0.353553 -0.224439 -0.609096 +v 0.353553 -0.555561 0.231596 +v 0.353553 -0.836811 -0.255543 +vt 0.562500 0.500000 +vt 0.562500 0.625000 +vt 0.437500 0.625000 +vt 0.437500 0.500000 +vt 0.437500 0.000000 +vt 0.562500 0.000000 +vt 0.562500 0.125000 +vt 0.437500 0.125000 +vt 0.000000 0.562500 +vt 0.000000 -0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.562500 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn -0.000000 0.500000 0.866000 +vn -0.000000 0.866000 -0.500000 +vn 1.000000 0.000000 0.000000 +vn -0.707100 0.612400 -0.353600 +vn -0.707100 -0.612400 0.353600 +vn -0.707100 0.707100 -0.000000 +vn -0.707100 -0.707100 -0.000000 +g Cube_Cube.001_Cube_Cube.001_Material.001 +usemtl Material.001 +s off +f 3/1/1 1/2/1 5/3/1 7/4/1 +f 8/5/1 4/6/1 2/7/1 6/8/1 +f 3/2/2 4/6/2 8/5/2 7/3/2 +f 1/3/3 3/2/3 4/6/3 2/5/3 +f 5/2/2 1/3/2 2/5/2 6/6/2 +f 7/3/3 8/5/3 6/6/3 5/2/3 +f 17/9/4 18/10/4 20/11/4 19/12/4 +f 21/9/5 22/10/5 24/11/5 23/12/5 +g Cube_Cube.001_Cube_Cube.001_Material.002 +usemtl Material.002 +f 9/12/6 10/13/6 12/14/6 11/9/6 +f 13/9/7 14/12/7 16/13/7 15/14/7 diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua new file mode 100644 index 0000000..1361255 --- /dev/null +++ b/mods/default/nodes.lua @@ -0,0 +1,2460 @@ +-- 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:sand +default:desert_sand +default:silver_sand + +default:gravel + +default:clay + +default:snow +default:snowblock + +default: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: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:bush_stem +default:bush_leaves +default:bush_sapling +default:acacia_bush_stem +default:acacia_bush_leaves +default:acacia_bush_sapling + +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:chest +default:chest_locked + +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.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: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}, + }, + }, + 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", + tiles = {"default_ice.png"}, + is_ground_content = false, + paramtype = "light", + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +-- +-- Trees +-- + +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(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 = "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(0), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer, itemstack) + minetest.set_node(pos, {name = "default:apple", param2 = 1}) + 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(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: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(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 = 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(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 = 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(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", + 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(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, +}) + + +-- +-- 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, + 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 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) + 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 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 + +local open_chests = {} + +local function chest_lid_close(pn) + local pos = open_chests[pn].pos + local sound = open_chests[pn].sound + local swap = open_chests[pn].swap + + 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 + + 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 + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "default:chest" then + return + end + if not player or not fields.quit then + return + end + local pn = player:get_player_name() + + if not open_chests[pn] then + return + end + + chest_lid_close(pn) + return true +end) + +minetest.register_on_leaveplayer(function(player) + local pn = player:get_player_name() + if open_chests[pn] then + chest_lid_close(pn) + end +end) + +function default.register_chest(name, d) + local def = table.copy(d) + def.drawtype = "mesh" + def.visual = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.legacy_facedir_simple = true + def.is_ground_content = false + + if def.protected then + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Locked Chest") + meta:set_string("owner", "") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.after_place_node = function(pos, placer) + local meta = minetest.get_meta(pos) + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", "Locked Chest (owned by " .. + meta:get_string("owner") .. ")") + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") and + default.can_interact_with_node(player, pos) + end + def.allow_metadata_inventory_move = function(pos, from_list, from_index, + to_list, to_index, count, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return count + end + def.allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not default.can_interact_with_node(player, pos) then + return 0 + end + return stack:get_count() + end + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if not default.can_interact_with_node(clicker, pos) then + return itemstack + end + + minetest.sound_play(def.sound_open, {gain = 0.3, + pos = pos, max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, + { name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + def.on_blast = function() end + def.on_key_use = function(pos, player) + local secret = minetest.get_meta(pos):get_string("key_lock_secret") + local itemstack = player:get_wielded_item() + local key_meta = itemstack:get_meta() + + if key_meta:get_string("secret") == "" then + key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret) + itemstack:set_metadata("") + end + + if secret ~= key_meta:get_string("secret") then + return + end + + minetest.show_formspec( + player:get_player_name(), + "default:chest_locked", + get_chest_formspec(pos) + ) + end + def.on_skeleton_key_use = function(pos, player, newsecret) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + local pn = player:get_player_name() + + -- verify placer is owner of lockable chest + if owner ~= pn then + minetest.record_protection_violation(pos, pn) + minetest.chat_send_player(pn, "You do not own this chest.") + return nil + end + + local secret = meta:get_string("key_lock_secret") + if secret == "" then + secret = newsecret + meta:set_string("key_lock_secret", secret) + end + + return secret, "a locked chest", owner + end + else + def.on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Chest") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end + def.can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end + def.on_rightclick = function(pos, node, clicker) + minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos, + max_hear_distance = 10}) + if not chest_lid_obstructed(pos) then + minetest.swap_node(pos, { + name = "default:" .. name .. "_open", + param2 = node.param2 }) + end + minetest.after(0.2, minetest.show_formspec, + clicker:get_player_name(), + "default:chest", get_chest_formspec(pos)) + open_chests[clicker:get_player_name()] = { pos = pos, + sound = def.sound_close, swap = name } + end + 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.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.register_chest("chest_locked", { + description = "Locked Chest", + tiles = { + "default_chest_top.png", + "default_chest_top.png", + "default_chest_side.png", + "default_chest_side.png", + "default_chest_lock.png", + "default_chest_inside.png" + }, + sounds = default.node_sound_wood_defaults(), + sound_open = "default_chest_open", + sound_close = "default_chest_close", + groups = {choppy = 2, oddly_breakable_by_hand = 2}, + protected = true, +}) + +local bookshelf_formspec = + "size[8,7;]" .. + 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 get_bookshelf_formspec(inv) + local formspec = bookshelf_formspec + local invlist = inv and inv:get_list("books") + -- Inventory slots overlay + local bx, by = 0, 0.3 + for i = 1, 16 do + if i == 9 then + bx = 0 + by = by + 1 + end + if not invlist or invlist[i]:is_empty() then + formspec = formspec .. + "image[" .. bx .. "," .. by .. ";1,1;default_bookshelf_slot.png]" + end + bx = bx + 1 + end + return formspec +end + +minetest.register_node("default:bookshelf", { + description = "Bookshelf", + tiles = {"default_wood.png", "default_wood.png", "default_wood.png", + "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) + 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 = {} + 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 = "Wooden 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 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 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 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() +}) + +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 +-- + +if minetest.get_mapgen_setting("mg_name") == "v6" then + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 3, + }) +else + default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = {"default:apple", "default:leaves"}, + radius = 3, + }) + + default.register_leafdecay({ + trunks = {"default:jungletree"}, + leaves = {"default:jungleleaves"}, + radius = 2, + }) + + default.register_leafdecay({ + trunks = {"default:pine_tree"}, + leaves = {"default:pine_needles"}, + radius = 2, + }) +end + +default.register_leafdecay({ + trunks = {"default:acacia_tree"}, + leaves = {"default:acacia_leaves"}, + radius = 2, +}) + +default.register_leafdecay({ + trunks = {"default:aspen_tree"}, + leaves = {"default:aspen_leaves"}, + radius = 3, +}) + +default.register_leafdecay({ + trunks = {"default:bush_stem"}, + leaves = {"default:bush_leaves"}, + radius = 1, +}) + +default.register_leafdecay({ + trunks = {"default:acacia_bush_stem"}, + leaves = {"default:acacia_bush_leaves"}, + radius = 1, +}) diff --git a/mods/default/player.lua b/mods/default/player.lua new file mode 100644 index 0000000..0a2078d --- /dev/null +++ b/mods/default/player.lua @@ -0,0 +1,154 @@ +-- Minetest 0.4 mod: player +-- See README.txt for licensing and other information. + +-- Player animation blending +-- Note: This is currently broken due to a bug in Irrlicht, leave at 0 +local animation_blend = 0 + +default.registered_player_models = { } + +-- Local for speed. +local models = default.registered_player_models + +function default.player_register_model(name, def) + models[name] = def +end + +-- Default player appearance +default.player_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, }, + }, +}) + +-- Player stats and animations +local player_model = {} +local player_textures = {} +local player_anim = {} +local player_sneak = {} +default.player_attached = {} + +function default.player_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 default.player_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}, + }) + default.player_set_animation(player, "stand") + else + player:set_properties({ + textures = { "player.png", "player_back.png", }, + visual = "upright_sprite", + }) + end + player_model[name] = model_name +end + +function default.player_set_textures(player, textures) + local name = player:get_player_name() + player_textures[name] = textures + player:set_properties({textures = textures,}) +end + +function default.player_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 + +-- Update appearance when the player joins +minetest.register_on_joinplayer(function(player) + default.player_attached[player:get_player_name()] = false + default.player_set_model(player, "character.b3d") + player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30) + + player:hud_set_hotbar_image("gui_hotbar.png") + player:hud_set_hotbar_selected_image("gui_hotbar_selected.png") +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 = default.player_set_animation +local player_attached = default.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/default/schematics/acacia_bush.mts b/mods/default/schematics/acacia_bush.mts new file mode 100644 index 0000000..df95586 Binary files /dev/null and b/mods/default/schematics/acacia_bush.mts differ diff --git a/mods/default/schematics/acacia_log.mts b/mods/default/schematics/acacia_log.mts new file mode 100644 index 0000000..037bca8 Binary files /dev/null and b/mods/default/schematics/acacia_log.mts differ diff --git a/mods/default/schematics/acacia_tree.mts b/mods/default/schematics/acacia_tree.mts new file mode 100644 index 0000000..4732ade 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 100644 index 0000000..23e8e4b Binary files /dev/null and b/mods/default/schematics/acacia_tree_from_sapling.mts differ diff --git a/mods/default/schematics/apple_log.mts b/mods/default/schematics/apple_log.mts new file mode 100644 index 0000000..e7ee8f2 Binary files /dev/null and b/mods/default/schematics/apple_log.mts differ diff --git a/mods/default/schematics/apple_tree.mts b/mods/default/schematics/apple_tree.mts new file mode 100644 index 0000000..2bd57c1 Binary files /dev/null and b/mods/default/schematics/apple_tree.mts differ diff --git a/mods/default/schematics/apple_tree_from_sapling.mts b/mods/default/schematics/apple_tree_from_sapling.mts new file mode 100644 index 0000000..d258ab1 Binary files /dev/null and b/mods/default/schematics/apple_tree_from_sapling.mts differ diff --git a/mods/default/schematics/aspen_log.mts b/mods/default/schematics/aspen_log.mts new file mode 100644 index 0000000..180e6fd Binary files /dev/null and b/mods/default/schematics/aspen_log.mts differ diff --git a/mods/default/schematics/aspen_tree.mts b/mods/default/schematics/aspen_tree.mts new file mode 100644 index 0000000..429a831 Binary files /dev/null and b/mods/default/schematics/aspen_tree.mts differ diff --git a/mods/default/schematics/aspen_tree_from_sapling.mts b/mods/default/schematics/aspen_tree_from_sapling.mts new file mode 100644 index 0000000..b7ab3ee Binary files /dev/null and b/mods/default/schematics/aspen_tree_from_sapling.mts differ diff --git a/mods/default/schematics/bush.mts b/mods/default/schematics/bush.mts new file mode 100644 index 0000000..d08cf5f Binary files /dev/null and b/mods/default/schematics/bush.mts differ diff --git a/mods/default/schematics/corals.mts b/mods/default/schematics/corals.mts new file mode 100644 index 0000000..e1bd7de Binary files /dev/null and b/mods/default/schematics/corals.mts differ diff --git a/mods/default/schematics/jungle_log.mts b/mods/default/schematics/jungle_log.mts new file mode 100644 index 0000000..54fa16d Binary files /dev/null and b/mods/default/schematics/jungle_log.mts differ diff --git a/mods/default/schematics/jungle_tree.mts b/mods/default/schematics/jungle_tree.mts new file mode 100644 index 0000000..01a1b11 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 100644 index 0000000..f93f014 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 100644 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 100644 index 0000000..1333a7c Binary files /dev/null and b/mods/default/schematics/papyrus.mts differ diff --git a/mods/default/schematics/pine_log.mts b/mods/default/schematics/pine_log.mts new file mode 100644 index 0000000..744c38b Binary files /dev/null and b/mods/default/schematics/pine_log.mts differ diff --git a/mods/default/schematics/pine_tree.mts b/mods/default/schematics/pine_tree.mts new file mode 100644 index 0000000..6f27d83 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 100644 index 0000000..e42a996 Binary files /dev/null and b/mods/default/schematics/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 100644 index 0000000..0692049 Binary files /dev/null and b/mods/default/schematics/snowy_pine_tree_from_sapling.mts differ diff --git a/mods/default/sounds/default_break_glass.1.ogg b/mods/default/sounds/default_break_glass.1.ogg new file mode 100644 index 0000000..b1ccc5f Binary files /dev/null and b/mods/default/sounds/default_break_glass.1.ogg differ diff --git a/mods/default/sounds/default_break_glass.2.ogg b/mods/default/sounds/default_break_glass.2.ogg new file mode 100644 index 0000000..b6cc9e8 Binary files /dev/null and b/mods/default/sounds/default_break_glass.2.ogg differ diff --git a/mods/default/sounds/default_break_glass.3.ogg b/mods/default/sounds/default_break_glass.3.ogg new file mode 100644 index 0000000..ae6a6bf Binary files /dev/null and b/mods/default/sounds/default_break_glass.3.ogg differ diff --git a/mods/default/sounds/default_chest_close.ogg b/mods/default/sounds/default_chest_close.ogg new file mode 100644 index 0000000..53ff23d 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 100644 index 0000000..c73c072 Binary files /dev/null and b/mods/default/sounds/default_chest_open.ogg differ diff --git a/mods/default/sounds/default_cool_lava.1.ogg b/mods/default/sounds/default_cool_lava.1.ogg new file mode 100644 index 0000000..42506dd Binary files /dev/null and b/mods/default/sounds/default_cool_lava.1.ogg differ diff --git a/mods/default/sounds/default_cool_lava.2.ogg b/mods/default/sounds/default_cool_lava.2.ogg new file mode 100644 index 0000000..2747ab8 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.2.ogg differ diff --git a/mods/default/sounds/default_cool_lava.3.ogg b/mods/default/sounds/default_cool_lava.3.ogg new file mode 100644 index 0000000..8baeac3 Binary files /dev/null and b/mods/default/sounds/default_cool_lava.3.ogg differ diff --git a/mods/default/sounds/default_dig_choppy.ogg b/mods/default/sounds/default_dig_choppy.ogg new file mode 100644 index 0000000..e2ecd84 Binary files /dev/null and b/mods/default/sounds/default_dig_choppy.ogg differ diff --git a/mods/default/sounds/default_dig_cracky.ogg b/mods/default/sounds/default_dig_cracky.ogg new file mode 100644 index 0000000..da11679 Binary files /dev/null and b/mods/default/sounds/default_dig_cracky.ogg differ diff --git a/mods/default/sounds/default_dig_crumbly.ogg b/mods/default/sounds/default_dig_crumbly.ogg new file mode 100644 index 0000000..a0b2a1f Binary files /dev/null and b/mods/default/sounds/default_dig_crumbly.ogg differ diff --git a/mods/default/sounds/default_dig_dig_immediate.ogg b/mods/default/sounds/default_dig_dig_immediate.ogg new file mode 100644 index 0000000..e65d766 Binary files /dev/null and b/mods/default/sounds/default_dig_dig_immediate.ogg differ diff --git a/mods/default/sounds/default_dig_metal.ogg b/mods/default/sounds/default_dig_metal.ogg new file mode 100644 index 0000000..0b58509 Binary files /dev/null and b/mods/default/sounds/default_dig_metal.ogg differ diff --git a/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg new file mode 100644 index 0000000..ef4d7b1 Binary files /dev/null and b/mods/default/sounds/default_dig_oddly_breakable_by_hand.ogg differ diff --git a/mods/default/sounds/default_dig_snappy.ogg b/mods/default/sounds/default_dig_snappy.ogg new file mode 100644 index 0000000..3686fcd Binary files /dev/null and b/mods/default/sounds/default_dig_snappy.ogg differ diff --git a/mods/default/sounds/default_dirt_footstep.1.ogg b/mods/default/sounds/default_dirt_footstep.1.ogg new file mode 100644 index 0000000..84a197d 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 100644 index 0000000..2e23b8a Binary files /dev/null and b/mods/default/sounds/default_dirt_footstep.2.ogg differ diff --git a/mods/default/sounds/default_dug_metal.1.ogg b/mods/default/sounds/default_dug_metal.1.ogg new file mode 100644 index 0000000..5d6cb5b Binary files /dev/null and b/mods/default/sounds/default_dug_metal.1.ogg differ diff --git a/mods/default/sounds/default_dug_metal.2.ogg b/mods/default/sounds/default_dug_metal.2.ogg new file mode 100644 index 0000000..63567fc Binary files /dev/null and b/mods/default/sounds/default_dug_metal.2.ogg differ diff --git a/mods/default/sounds/default_dug_node.1.ogg b/mods/default/sounds/default_dug_node.1.ogg new file mode 100644 index 0000000..c04975d Binary files /dev/null and b/mods/default/sounds/default_dug_node.1.ogg differ diff --git a/mods/default/sounds/default_dug_node.2.ogg b/mods/default/sounds/default_dug_node.2.ogg new file mode 100644 index 0000000..9f20926 Binary files /dev/null and b/mods/default/sounds/default_dug_node.2.ogg differ diff --git a/mods/default/sounds/default_glass_footstep.ogg b/mods/default/sounds/default_glass_footstep.ogg new file mode 100644 index 0000000..191287a Binary files /dev/null and b/mods/default/sounds/default_glass_footstep.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.1.ogg b/mods/default/sounds/default_grass_footstep.1.ogg new file mode 100644 index 0000000..22d1ad6 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.1.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.2.ogg b/mods/default/sounds/default_grass_footstep.2.ogg new file mode 100644 index 0000000..4ccd8a0 Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.2.ogg differ diff --git a/mods/default/sounds/default_grass_footstep.3.ogg b/mods/default/sounds/default_grass_footstep.3.ogg new file mode 100644 index 0000000..20db84e Binary files /dev/null and b/mods/default/sounds/default_grass_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.1.ogg b/mods/default/sounds/default_gravel_footstep.1.ogg new file mode 100644 index 0000000..8d260ce Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.1.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.2.ogg b/mods/default/sounds/default_gravel_footstep.2.ogg new file mode 100644 index 0000000..2aba2c6 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.2.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.3.ogg b/mods/default/sounds/default_gravel_footstep.3.ogg new file mode 100644 index 0000000..1bcd8a1 Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.3.ogg differ diff --git a/mods/default/sounds/default_gravel_footstep.4.ogg b/mods/default/sounds/default_gravel_footstep.4.ogg new file mode 100644 index 0000000..696c9ff Binary files /dev/null and b/mods/default/sounds/default_gravel_footstep.4.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.1.ogg b/mods/default/sounds/default_hard_footstep.1.ogg new file mode 100644 index 0000000..1748bc5 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.1.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.2.ogg b/mods/default/sounds/default_hard_footstep.2.ogg new file mode 100644 index 0000000..fe39fd7 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.2.ogg differ diff --git a/mods/default/sounds/default_hard_footstep.3.ogg b/mods/default/sounds/default_hard_footstep.3.ogg new file mode 100644 index 0000000..5030e06 Binary files /dev/null and b/mods/default/sounds/default_hard_footstep.3.ogg differ diff --git a/mods/default/sounds/default_item_smoke.ogg b/mods/default/sounds/default_item_smoke.ogg new file mode 100644 index 0000000..038a46e Binary files /dev/null and b/mods/default/sounds/default_item_smoke.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.1.ogg b/mods/default/sounds/default_metal_footstep.1.ogg new file mode 100644 index 0000000..841286b Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.1.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.2.ogg b/mods/default/sounds/default_metal_footstep.2.ogg new file mode 100644 index 0000000..aa61ed3 Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.2.ogg differ diff --git a/mods/default/sounds/default_metal_footstep.3.ogg b/mods/default/sounds/default_metal_footstep.3.ogg new file mode 100644 index 0000000..4cc1ca4 Binary files /dev/null and b/mods/default/sounds/default_metal_footstep.3.ogg differ diff --git a/mods/default/sounds/default_place_node.1.ogg b/mods/default/sounds/default_place_node.1.ogg new file mode 100644 index 0000000..46b9756 Binary files /dev/null and b/mods/default/sounds/default_place_node.1.ogg differ diff --git a/mods/default/sounds/default_place_node.2.ogg b/mods/default/sounds/default_place_node.2.ogg new file mode 100644 index 0000000..d34c01a Binary files /dev/null and b/mods/default/sounds/default_place_node.2.ogg differ diff --git a/mods/default/sounds/default_place_node.3.ogg b/mods/default/sounds/default_place_node.3.ogg new file mode 100644 index 0000000..fc29365 Binary files /dev/null and b/mods/default/sounds/default_place_node.3.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.1.ogg b/mods/default/sounds/default_place_node_hard.1.ogg new file mode 100644 index 0000000..9f97fac Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.1.ogg differ diff --git a/mods/default/sounds/default_place_node_hard.2.ogg b/mods/default/sounds/default_place_node_hard.2.ogg new file mode 100644 index 0000000..1d3b3de Binary files /dev/null and b/mods/default/sounds/default_place_node_hard.2.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.1.ogg b/mods/default/sounds/default_place_node_metal.1.ogg new file mode 100644 index 0000000..5da085e Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.1.ogg differ diff --git a/mods/default/sounds/default_place_node_metal.2.ogg b/mods/default/sounds/default_place_node_metal.2.ogg new file mode 100644 index 0000000..5ee67fc Binary files /dev/null and b/mods/default/sounds/default_place_node_metal.2.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.1.ogg b/mods/default/sounds/default_sand_footstep.1.ogg new file mode 100644 index 0000000..65b68c7 Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.1.ogg differ diff --git a/mods/default/sounds/default_sand_footstep.2.ogg b/mods/default/sounds/default_sand_footstep.2.ogg new file mode 100644 index 0000000..57f35f3 Binary files /dev/null and b/mods/default/sounds/default_sand_footstep.2.ogg differ diff --git a/mods/default/sounds/default_snow_footstep.1.ogg b/mods/default/sounds/default_snow_footstep.1.ogg new file mode 100644 index 0000000..3260b91 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 100644 index 0000000..4aac1e7 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 100644 index 0000000..cf4235b Binary files /dev/null and b/mods/default/sounds/default_snow_footstep.3.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.1.ogg b/mods/default/sounds/default_tool_breaks.1.ogg new file mode 100644 index 0000000..2a571ae Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.1.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.2.ogg b/mods/default/sounds/default_tool_breaks.2.ogg new file mode 100644 index 0000000..1789352 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.2.ogg differ diff --git a/mods/default/sounds/default_tool_breaks.3.ogg b/mods/default/sounds/default_tool_breaks.3.ogg new file mode 100644 index 0000000..a99c4b7 Binary files /dev/null and b/mods/default/sounds/default_tool_breaks.3.ogg differ diff --git a/mods/default/sounds/default_water_footstep.1.ogg b/mods/default/sounds/default_water_footstep.1.ogg new file mode 100644 index 0000000..63b9744 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.1.ogg differ diff --git a/mods/default/sounds/default_water_footstep.2.ogg b/mods/default/sounds/default_water_footstep.2.ogg new file mode 100644 index 0000000..8d79c1f Binary files /dev/null and b/mods/default/sounds/default_water_footstep.2.ogg differ diff --git a/mods/default/sounds/default_water_footstep.3.ogg b/mods/default/sounds/default_water_footstep.3.ogg new file mode 100644 index 0000000..f889150 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.3.ogg differ diff --git a/mods/default/sounds/default_water_footstep.4.ogg b/mods/default/sounds/default_water_footstep.4.ogg new file mode 100644 index 0000000..6f1eab8 Binary files /dev/null and b/mods/default/sounds/default_water_footstep.4.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.1.ogg b/mods/default/sounds/default_wood_footstep.1.ogg new file mode 100644 index 0000000..34f63a1 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.1.ogg differ diff --git a/mods/default/sounds/default_wood_footstep.2.ogg b/mods/default/sounds/default_wood_footstep.2.ogg new file mode 100644 index 0000000..124fc29 Binary files /dev/null and b/mods/default/sounds/default_wood_footstep.2.ogg differ diff --git a/mods/default/sounds/player_damage.ogg b/mods/default/sounds/player_damage.ogg new file mode 100644 index 0000000..7888087 Binary files /dev/null and b/mods/default/sounds/player_damage.ogg differ diff --git a/mods/default/textures/bubble.png b/mods/default/textures/bubble.png new file mode 100644 index 0000000..100fe15 Binary files /dev/null and b/mods/default/textures/bubble.png differ diff --git a/mods/default/textures/crack_anylength.png b/mods/default/textures/crack_anylength.png new file mode 100644 index 0000000..297eced Binary files /dev/null and b/mods/default/textures/crack_anylength.png differ diff --git a/mods/default/textures/default_acacia_bush_sapling.png b/mods/default/textures/default_acacia_bush_sapling.png new file mode 100644 index 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..f23d122 Binary files /dev/null and b/mods/default/textures/default_book_written.png differ diff --git a/mods/default/textures/default_bookshelf.png b/mods/default/textures/default_bookshelf.png new file mode 100644 index 0000000..10d6483 Binary files /dev/null and b/mods/default/textures/default_bookshelf.png differ diff --git a/mods/default/textures/default_bookshelf_slot.png b/mods/default/textures/default_bookshelf_slot.png new file mode 100644 index 0000000..cd2c8bc Binary files /dev/null and b/mods/default/textures/default_bookshelf_slot.png differ diff --git a/mods/default/textures/default_brick.png b/mods/default/textures/default_brick.png new file mode 100644 index 0000000..ab19121 Binary files /dev/null and b/mods/default/textures/default_brick.png differ diff --git a/mods/default/textures/default_bronze_block.png b/mods/default/textures/default_bronze_block.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..cf46aa2 Binary files /dev/null and b/mods/default/textures/default_cactus_top.png differ diff --git a/mods/default/textures/default_chest_front.png b/mods/default/textures/default_chest_front.png new file mode 100644 index 0000000..85227d8 Binary files /dev/null and b/mods/default/textures/default_chest_front.png differ diff --git a/mods/default/textures/default_chest_inside.png b/mods/default/textures/default_chest_inside.png new file mode 100644 index 0000000..5f7b6b1 Binary files /dev/null and b/mods/default/textures/default_chest_inside.png differ diff --git a/mods/default/textures/default_chest_lock.png b/mods/default/textures/default_chest_lock.png new file mode 100644 index 0000000..73f46c7 Binary files /dev/null and b/mods/default/textures/default_chest_lock.png differ diff --git a/mods/default/textures/default_chest_side.png b/mods/default/textures/default_chest_side.png new file mode 100644 index 0000000..44a65a4 Binary files /dev/null and b/mods/default/textures/default_chest_side.png differ diff --git a/mods/default/textures/default_chest_top.png b/mods/default/textures/default_chest_top.png new file mode 100644 index 0000000..f4a92ee Binary files /dev/null and b/mods/default/textures/default_chest_top.png differ diff --git a/mods/default/textures/default_clay.png b/mods/default/textures/default_clay.png new file mode 100644 index 0000000..76e5a40 Binary files /dev/null and b/mods/default/textures/default_clay.png differ diff --git a/mods/default/textures/default_clay_brick.png b/mods/default/textures/default_clay_brick.png new file mode 100644 index 0000000..dc7a431 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 100644 index 0000000..c1d0220 Binary files /dev/null and b/mods/default/textures/default_clay_lump.png differ diff --git a/mods/default/textures/default_cloud.png b/mods/default/textures/default_cloud.png new file mode 100644 index 0000000..faf0ec1 Binary files /dev/null and b/mods/default/textures/default_cloud.png differ diff --git a/mods/default/textures/default_coal_block.png b/mods/default/textures/default_coal_block.png new file mode 100644 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 100644 index 0000000..792961d Binary files /dev/null and b/mods/default/textures/default_coal_lump.png differ diff --git a/mods/default/textures/default_cobble.png b/mods/default/textures/default_cobble.png new file mode 100644 index 0000000..d379840 Binary files /dev/null and b/mods/default/textures/default_cobble.png differ diff --git a/mods/default/textures/default_copper_block.png b/mods/default/textures/default_copper_block.png new file mode 100644 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 100644 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 100644 index 0000000..998c592 Binary files /dev/null and b/mods/default/textures/default_copper_lump.png differ diff --git a/mods/default/textures/default_coral_brown.png b/mods/default/textures/default_coral_brown.png new file mode 100644 index 0000000..8a775fe Binary files /dev/null and b/mods/default/textures/default_coral_brown.png differ diff --git a/mods/default/textures/default_coral_orange.png b/mods/default/textures/default_coral_orange.png new file mode 100644 index 0000000..cefac62 Binary files /dev/null and b/mods/default/textures/default_coral_orange.png differ diff --git a/mods/default/textures/default_coral_skeleton.png b/mods/default/textures/default_coral_skeleton.png new file mode 100644 index 0000000..fa48f15 Binary files /dev/null and b/mods/default/textures/default_coral_skeleton.png differ diff --git a/mods/default/textures/default_desert_cobble.png b/mods/default/textures/default_desert_cobble.png new file mode 100644 index 0000000..184a9d8 Binary files /dev/null and b/mods/default/textures/default_desert_cobble.png differ diff --git a/mods/default/textures/default_desert_sand.png b/mods/default/textures/default_desert_sand.png new file mode 100644 index 0000000..371b8c7 Binary files /dev/null and b/mods/default/textures/default_desert_sand.png differ diff --git a/mods/default/textures/default_desert_sandstone.png b/mods/default/textures/default_desert_sandstone.png new file mode 100644 index 0000000..52e445f Binary files /dev/null and b/mods/default/textures/default_desert_sandstone.png differ diff --git a/mods/default/textures/default_desert_sandstone_block.png b/mods/default/textures/default_desert_sandstone_block.png new file mode 100644 index 0000000..8fc54e7 Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_block.png differ diff --git a/mods/default/textures/default_desert_sandstone_brick.png b/mods/default/textures/default_desert_sandstone_brick.png new file mode 100644 index 0000000..ab58db5 Binary files /dev/null and b/mods/default/textures/default_desert_sandstone_brick.png differ diff --git a/mods/default/textures/default_desert_stone.png b/mods/default/textures/default_desert_stone.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..20c33ed Binary files /dev/null and b/mods/default/textures/default_diamond_block.png differ diff --git a/mods/default/textures/default_dirt.png b/mods/default/textures/default_dirt.png new file mode 100644 index 0000000..ca7e4ae Binary files /dev/null and b/mods/default/textures/default_dirt.png differ diff --git a/mods/default/textures/default_dry_grass.png b/mods/default/textures/default_dry_grass.png new file mode 100644 index 0000000..03455c3 Binary files /dev/null and b/mods/default/textures/default_dry_grass.png differ diff --git a/mods/default/textures/default_dry_grass_1.png b/mods/default/textures/default_dry_grass_1.png new file mode 100644 index 0000000..5cf68a3 Binary files /dev/null and b/mods/default/textures/default_dry_grass_1.png differ diff --git a/mods/default/textures/default_dry_grass_2.png b/mods/default/textures/default_dry_grass_2.png new file mode 100644 index 0000000..c925ace Binary files /dev/null and b/mods/default/textures/default_dry_grass_2.png differ diff --git a/mods/default/textures/default_dry_grass_3.png b/mods/default/textures/default_dry_grass_3.png new file mode 100644 index 0000000..4e4d84e Binary files /dev/null and b/mods/default/textures/default_dry_grass_3.png differ diff --git a/mods/default/textures/default_dry_grass_4.png b/mods/default/textures/default_dry_grass_4.png new file mode 100644 index 0000000..d315849 Binary files /dev/null and b/mods/default/textures/default_dry_grass_4.png differ diff --git a/mods/default/textures/default_dry_grass_5.png b/mods/default/textures/default_dry_grass_5.png new file mode 100644 index 0000000..871d04c Binary files /dev/null and b/mods/default/textures/default_dry_grass_5.png differ diff --git a/mods/default/textures/default_dry_grass_side.png b/mods/default/textures/default_dry_grass_side.png new file mode 100644 index 0000000..ef375b7 Binary files /dev/null and b/mods/default/textures/default_dry_grass_side.png differ diff --git a/mods/default/textures/default_dry_shrub.png b/mods/default/textures/default_dry_shrub.png new file mode 100644 index 0000000..e8a7f27 Binary files /dev/null and b/mods/default/textures/default_dry_shrub.png differ diff --git a/mods/default/textures/default_fence_acacia_wood.png b/mods/default/textures/default_fence_acacia_wood.png new file mode 100644 index 0000000..3b973f3 Binary files /dev/null and b/mods/default/textures/default_fence_acacia_wood.png differ diff --git a/mods/default/textures/default_fence_aspen_wood.png b/mods/default/textures/default_fence_aspen_wood.png new file mode 100644 index 0000000..0a6558e Binary files /dev/null and b/mods/default/textures/default_fence_aspen_wood.png differ diff --git a/mods/default/textures/default_fence_junglewood.png b/mods/default/textures/default_fence_junglewood.png new file mode 100644 index 0000000..c390941 Binary files /dev/null and b/mods/default/textures/default_fence_junglewood.png differ diff --git a/mods/default/textures/default_fence_overlay.png b/mods/default/textures/default_fence_overlay.png new file mode 100644 index 0000000..718184c Binary files /dev/null and b/mods/default/textures/default_fence_overlay.png differ diff --git a/mods/default/textures/default_fence_pine_wood.png b/mods/default/textures/default_fence_pine_wood.png new file mode 100644 index 0000000..74609d9 Binary files /dev/null and b/mods/default/textures/default_fence_pine_wood.png differ diff --git a/mods/default/textures/default_fence_wood.png b/mods/default/textures/default_fence_wood.png new file mode 100644 index 0000000..1e76430 Binary files /dev/null and b/mods/default/textures/default_fence_wood.png differ diff --git a/mods/default/textures/default_flint.png b/mods/default/textures/default_flint.png new file mode 100644 index 0000000..226c740 Binary files /dev/null and b/mods/default/textures/default_flint.png differ diff --git a/mods/default/textures/default_footprint.png b/mods/default/textures/default_footprint.png new file mode 100644 index 0000000..41d9546 Binary files /dev/null and b/mods/default/textures/default_footprint.png differ diff --git a/mods/default/textures/default_furnace_bottom.png b/mods/default/textures/default_furnace_bottom.png new file mode 100644 index 0000000..b79ed06 Binary files /dev/null and b/mods/default/textures/default_furnace_bottom.png differ diff --git a/mods/default/textures/default_furnace_fire_bg.png b/mods/default/textures/default_furnace_fire_bg.png new file mode 100644 index 0000000..126204a Binary files /dev/null and b/mods/default/textures/default_furnace_fire_bg.png differ diff --git a/mods/default/textures/default_furnace_fire_fg.png b/mods/default/textures/default_furnace_fire_fg.png new file mode 100644 index 0000000..63888f3 Binary files /dev/null and b/mods/default/textures/default_furnace_fire_fg.png differ diff --git a/mods/default/textures/default_furnace_front.png b/mods/default/textures/default_furnace_front.png new file mode 100644 index 0000000..8c1798e Binary files /dev/null and b/mods/default/textures/default_furnace_front.png differ diff --git a/mods/default/textures/default_furnace_front_active.png b/mods/default/textures/default_furnace_front_active.png new file mode 100644 index 0000000..ea43ed9 Binary files /dev/null and b/mods/default/textures/default_furnace_front_active.png differ diff --git a/mods/default/textures/default_furnace_side.png b/mods/default/textures/default_furnace_side.png new file mode 100644 index 0000000..33408cf Binary files /dev/null and b/mods/default/textures/default_furnace_side.png differ diff --git a/mods/default/textures/default_furnace_top.png b/mods/default/textures/default_furnace_top.png new file mode 100644 index 0000000..b79ed06 Binary files /dev/null and b/mods/default/textures/default_furnace_top.png differ diff --git a/mods/default/textures/default_glass.png b/mods/default/textures/default_glass.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..d5a1be7 Binary files /dev/null and b/mods/default/textures/default_gold_lump.png differ diff --git a/mods/default/textures/default_grass.png b/mods/default/textures/default_grass.png new file mode 100644 index 0000000..0181fab Binary files /dev/null and b/mods/default/textures/default_grass.png differ diff --git a/mods/default/textures/default_grass_1.png b/mods/default/textures/default_grass_1.png new file mode 100644 index 0000000..e9faa2c Binary files /dev/null and b/mods/default/textures/default_grass_1.png differ diff --git a/mods/default/textures/default_grass_2.png b/mods/default/textures/default_grass_2.png new file mode 100644 index 0000000..03729a0 Binary files /dev/null and b/mods/default/textures/default_grass_2.png differ diff --git a/mods/default/textures/default_grass_3.png b/mods/default/textures/default_grass_3.png new file mode 100644 index 0000000..92ca1b5 Binary files /dev/null and b/mods/default/textures/default_grass_3.png differ diff --git a/mods/default/textures/default_grass_4.png b/mods/default/textures/default_grass_4.png new file mode 100644 index 0000000..c782a33 Binary files /dev/null and b/mods/default/textures/default_grass_4.png differ diff --git a/mods/default/textures/default_grass_5.png b/mods/default/textures/default_grass_5.png new file mode 100644 index 0000000..b727e9c Binary files /dev/null and b/mods/default/textures/default_grass_5.png differ diff --git a/mods/default/textures/default_grass_side.png b/mods/default/textures/default_grass_side.png new file mode 100644 index 0000000..bfd538d Binary files /dev/null and b/mods/default/textures/default_grass_side.png differ diff --git a/mods/default/textures/default_gravel.png b/mods/default/textures/default_gravel.png new file mode 100644 index 0000000..8852d38 Binary files /dev/null and b/mods/default/textures/default_gravel.png differ diff --git a/mods/default/textures/default_ice.png b/mods/default/textures/default_ice.png new file mode 100644 index 0000000..2874e1e Binary files /dev/null and b/mods/default/textures/default_ice.png differ diff --git a/mods/default/textures/default_iron_lump.png b/mods/default/textures/default_iron_lump.png new file mode 100644 index 0000000..db61a94 Binary files /dev/null and b/mods/default/textures/default_iron_lump.png differ diff --git a/mods/default/textures/default_item_smoke.png b/mods/default/textures/default_item_smoke.png new file mode 100644 index 0000000..d62fb3b Binary files /dev/null and b/mods/default/textures/default_item_smoke.png differ diff --git a/mods/default/textures/default_junglegrass.png b/mods/default/textures/default_junglegrass.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..8d17917 Binary files /dev/null and b/mods/default/textures/default_junglewood.png differ diff --git a/mods/default/textures/default_key.png b/mods/default/textures/default_key.png new file mode 100644 index 0000000..783d313 Binary files /dev/null and b/mods/default/textures/default_key.png differ diff --git a/mods/default/textures/default_key_skeleton.png b/mods/default/textures/default_key_skeleton.png new file mode 100644 index 0000000..2b3497d Binary files /dev/null and b/mods/default/textures/default_key_skeleton.png differ diff --git a/mods/default/textures/default_ladder_steel.png b/mods/default/textures/default_ladder_steel.png new file mode 100644 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 100644 index 0000000..c167fff Binary files /dev/null and b/mods/default/textures/default_ladder_wood.png differ diff --git a/mods/default/textures/default_lava.png b/mods/default/textures/default_lava.png new file mode 100644 index 0000000..e8958de Binary files /dev/null and b/mods/default/textures/default_lava.png differ diff --git a/mods/default/textures/default_lava_flowing_animated.png b/mods/default/textures/default_lava_flowing_animated.png new file mode 100644 index 0000000..2ec0746 Binary files /dev/null and b/mods/default/textures/default_lava_flowing_animated.png differ diff --git a/mods/default/textures/default_lava_source_animated.png b/mods/default/textures/default_lava_source_animated.png new file mode 100644 index 0000000..32267a6 Binary files /dev/null and b/mods/default/textures/default_lava_source_animated.png differ diff --git a/mods/default/textures/default_leaves.png b/mods/default/textures/default_leaves.png new file mode 100644 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 100644 index 0000000..eb60f9f Binary files /dev/null and b/mods/default/textures/default_leaves_simple.png differ diff --git a/mods/default/textures/default_mese_block.png b/mods/default/textures/default_mese_block.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..6834bd3 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 100644 index 0000000..0c3a1a1 Binary files /dev/null and b/mods/default/textures/default_meselamp.png differ diff --git a/mods/default/textures/default_mineral_coal.png b/mods/default/textures/default_mineral_coal.png new file mode 100644 index 0000000..6d1386b Binary files /dev/null and b/mods/default/textures/default_mineral_coal.png differ diff --git a/mods/default/textures/default_mineral_copper.png b/mods/default/textures/default_mineral_copper.png new file mode 100644 index 0000000..c4c518e Binary files /dev/null and b/mods/default/textures/default_mineral_copper.png differ diff --git a/mods/default/textures/default_mineral_diamond.png b/mods/default/textures/default_mineral_diamond.png new file mode 100644 index 0000000..39c0f83 Binary files /dev/null and b/mods/default/textures/default_mineral_diamond.png differ diff --git a/mods/default/textures/default_mineral_gold.png b/mods/default/textures/default_mineral_gold.png new file mode 100644 index 0000000..2220add Binary files /dev/null and b/mods/default/textures/default_mineral_gold.png differ diff --git a/mods/default/textures/default_mineral_iron.png b/mods/default/textures/default_mineral_iron.png new file mode 100644 index 0000000..bfec8b1 Binary files /dev/null and b/mods/default/textures/default_mineral_iron.png differ diff --git a/mods/default/textures/default_mineral_mese.png b/mods/default/textures/default_mineral_mese.png new file mode 100644 index 0000000..6952670 Binary files /dev/null and b/mods/default/textures/default_mineral_mese.png differ diff --git a/mods/default/textures/default_mineral_tin.png b/mods/default/textures/default_mineral_tin.png new file mode 100644 index 0000000..232d4b5 Binary files /dev/null and b/mods/default/textures/default_mineral_tin.png differ diff --git a/mods/default/textures/default_mossycobble.png b/mods/default/textures/default_mossycobble.png new file mode 100644 index 0000000..1ae7c91 Binary files /dev/null and b/mods/default/textures/default_mossycobble.png differ diff --git a/mods/default/textures/default_obsidian.png b/mods/default/textures/default_obsidian.png new file mode 100644 index 0000000..8f4a49c Binary files /dev/null and b/mods/default/textures/default_obsidian.png differ diff --git a/mods/default/textures/default_obsidian_block.png b/mods/default/textures/default_obsidian_block.png new file mode 100644 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 100644 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 100644 index 0000000..d5ac83d Binary files /dev/null and b/mods/default/textures/default_obsidian_glass.png differ diff --git a/mods/default/textures/default_obsidian_glass_detail.png b/mods/default/textures/default_obsidian_glass_detail.png new file mode 100644 index 0000000..a8bbec9 Binary files /dev/null and b/mods/default/textures/default_obsidian_glass_detail.png differ diff --git a/mods/default/textures/default_obsidian_shard.png b/mods/default/textures/default_obsidian_shard.png new file mode 100644 index 0000000..a988d8c Binary files /dev/null and b/mods/default/textures/default_obsidian_shard.png differ diff --git a/mods/default/textures/default_paper.png b/mods/default/textures/default_paper.png new file mode 100644 index 0000000..8f23924 Binary files /dev/null and b/mods/default/textures/default_paper.png differ diff --git a/mods/default/textures/default_papyrus.png b/mods/default/textures/default_papyrus.png new file mode 100644 index 0000000..a85e809 Binary files /dev/null and b/mods/default/textures/default_papyrus.png differ diff --git a/mods/default/textures/default_pine_needles.png b/mods/default/textures/default_pine_needles.png new file mode 100644 index 0000000..ad7373b 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..7ccb11d Binary files /dev/null and b/mods/default/textures/default_rainforest_litter_side.png differ diff --git a/mods/default/textures/default_river_water.png b/mods/default/textures/default_river_water.png new file mode 100644 index 0000000..3b55c5f Binary files /dev/null and b/mods/default/textures/default_river_water.png differ diff --git a/mods/default/textures/default_river_water_flowing_animated.png b/mods/default/textures/default_river_water_flowing_animated.png new file mode 100644 index 0000000..536acc5 Binary files /dev/null and b/mods/default/textures/default_river_water_flowing_animated.png differ diff --git a/mods/default/textures/default_river_water_source_animated.png b/mods/default/textures/default_river_water_source_animated.png new file mode 100644 index 0000000..daa5653 Binary files /dev/null and b/mods/default/textures/default_river_water_source_animated.png differ diff --git a/mods/default/textures/default_sand.png b/mods/default/textures/default_sand.png new file mode 100644 index 0000000..645a300 Binary files /dev/null and b/mods/default/textures/default_sand.png differ diff --git a/mods/default/textures/default_sandstone.png b/mods/default/textures/default_sandstone.png new file mode 100644 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 100644 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 100644 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 100644 index 0000000..3fd64f0 Binary files /dev/null and b/mods/default/textures/default_sapling.png differ diff --git a/mods/default/textures/default_sign_steel.png b/mods/default/textures/default_sign_steel.png new file mode 100644 index 0000000..3ca0c59 Binary files /dev/null and b/mods/default/textures/default_sign_steel.png differ diff --git a/mods/default/textures/default_sign_wall_steel.png b/mods/default/textures/default_sign_wall_steel.png new file mode 100644 index 0000000..2227477 Binary files /dev/null and b/mods/default/textures/default_sign_wall_steel.png differ diff --git a/mods/default/textures/default_sign_wall_wood.png b/mods/default/textures/default_sign_wall_wood.png new file mode 100644 index 0000000..40552c7 Binary files /dev/null and b/mods/default/textures/default_sign_wall_wood.png differ diff --git a/mods/default/textures/default_sign_wood.png b/mods/default/textures/default_sign_wood.png new file mode 100644 index 0000000..d0559da Binary files /dev/null and b/mods/default/textures/default_sign_wood.png differ diff --git a/mods/default/textures/default_silver_sand.png b/mods/default/textures/default_silver_sand.png new file mode 100644 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 100644 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 100644 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 100644 index 0000000..93d87a5 Binary files /dev/null and b/mods/default/textures/default_silver_sandstone_brick.png differ diff --git a/mods/default/textures/default_snow.png b/mods/default/textures/default_snow.png new file mode 100644 index 0000000..fcbef0e Binary files /dev/null and b/mods/default/textures/default_snow.png differ diff --git a/mods/default/textures/default_snow_side.png b/mods/default/textures/default_snow_side.png new file mode 100644 index 0000000..03456c8 Binary files /dev/null and b/mods/default/textures/default_snow_side.png differ diff --git a/mods/default/textures/default_snowball.png b/mods/default/textures/default_snowball.png new file mode 100644 index 0000000..3a4dc1f Binary files /dev/null and b/mods/default/textures/default_snowball.png differ diff --git a/mods/default/textures/default_steel_block.png b/mods/default/textures/default_steel_block.png new file mode 100644 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 100644 index 0000000..8100b01 Binary files /dev/null and b/mods/default/textures/default_steel_ingot.png differ diff --git a/mods/default/textures/default_stick.png b/mods/default/textures/default_stick.png new file mode 100644 index 0000000..0378d07 Binary files /dev/null and b/mods/default/textures/default_stick.png differ diff --git a/mods/default/textures/default_stone.png b/mods/default/textures/default_stone.png new file mode 100644 index 0000000..63cb7c4 Binary files /dev/null and b/mods/default/textures/default_stone.png differ diff --git a/mods/default/textures/default_stone_block.png b/mods/default/textures/default_stone_block.png new file mode 100644 index 0000000..3b771e7 Binary files /dev/null and b/mods/default/textures/default_stone_block.png differ diff --git a/mods/default/textures/default_stone_brick.png b/mods/default/textures/default_stone_brick.png new file mode 100644 index 0000000..4dbb49d Binary files /dev/null and b/mods/default/textures/default_stone_brick.png differ diff --git a/mods/default/textures/default_tin_block.png b/mods/default/textures/default_tin_block.png new file mode 100644 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 100644 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 100644 index 0000000..72bd339 Binary files /dev/null and b/mods/default/textures/default_tin_lump.png differ diff --git a/mods/default/textures/default_tool_bronzeaxe.png b/mods/default/textures/default_tool_bronzeaxe.png new file mode 100644 index 0000000..8ae43b5 Binary files /dev/null and b/mods/default/textures/default_tool_bronzeaxe.png differ diff --git a/mods/default/textures/default_tool_bronzepick.png b/mods/default/textures/default_tool_bronzepick.png new file mode 100644 index 0000000..c88a5f0 Binary files /dev/null and b/mods/default/textures/default_tool_bronzepick.png differ diff --git a/mods/default/textures/default_tool_bronzeshovel.png b/mods/default/textures/default_tool_bronzeshovel.png new file mode 100644 index 0000000..d7d800e Binary files /dev/null and b/mods/default/textures/default_tool_bronzeshovel.png differ diff --git a/mods/default/textures/default_tool_bronzesword.png b/mods/default/textures/default_tool_bronzesword.png new file mode 100644 index 0000000..cdab898 Binary files /dev/null and b/mods/default/textures/default_tool_bronzesword.png differ diff --git a/mods/default/textures/default_tool_diamondaxe.png b/mods/default/textures/default_tool_diamondaxe.png new file mode 100644 index 0000000..e32a0bf Binary files /dev/null and b/mods/default/textures/default_tool_diamondaxe.png differ diff --git a/mods/default/textures/default_tool_diamondpick.png b/mods/default/textures/default_tool_diamondpick.png new file mode 100644 index 0000000..f9883c6 Binary files /dev/null and b/mods/default/textures/default_tool_diamondpick.png differ diff --git a/mods/default/textures/default_tool_diamondshovel.png b/mods/default/textures/default_tool_diamondshovel.png new file mode 100644 index 0000000..d0fe24d Binary files /dev/null and b/mods/default/textures/default_tool_diamondshovel.png differ diff --git a/mods/default/textures/default_tool_diamondsword.png b/mods/default/textures/default_tool_diamondsword.png new file mode 100644 index 0000000..dbccd0e Binary files /dev/null and b/mods/default/textures/default_tool_diamondsword.png differ diff --git a/mods/default/textures/default_tool_meseaxe.png b/mods/default/textures/default_tool_meseaxe.png new file mode 100644 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 100644 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 100644 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 100644 index 0000000..d395d3a Binary files /dev/null and b/mods/default/textures/default_tool_mesesword.png differ diff --git a/mods/default/textures/default_tool_steelaxe.png b/mods/default/textures/default_tool_steelaxe.png new file mode 100644 index 0000000..1528cad Binary files /dev/null and b/mods/default/textures/default_tool_steelaxe.png differ diff --git a/mods/default/textures/default_tool_steelpick.png b/mods/default/textures/default_tool_steelpick.png new file mode 100644 index 0000000..a7543a1 Binary files /dev/null and b/mods/default/textures/default_tool_steelpick.png differ diff --git a/mods/default/textures/default_tool_steelshovel.png b/mods/default/textures/default_tool_steelshovel.png new file mode 100644 index 0000000..65e4045 Binary files /dev/null and b/mods/default/textures/default_tool_steelshovel.png differ diff --git a/mods/default/textures/default_tool_steelsword.png b/mods/default/textures/default_tool_steelsword.png new file mode 100644 index 0000000..630a339 Binary files /dev/null and b/mods/default/textures/default_tool_steelsword.png differ diff --git a/mods/default/textures/default_tool_stoneaxe.png b/mods/default/textures/default_tool_stoneaxe.png new file mode 100644 index 0000000..cc36054 Binary files /dev/null and b/mods/default/textures/default_tool_stoneaxe.png differ diff --git a/mods/default/textures/default_tool_stonepick.png b/mods/default/textures/default_tool_stonepick.png new file mode 100644 index 0000000..237d739 Binary files /dev/null and b/mods/default/textures/default_tool_stonepick.png differ diff --git a/mods/default/textures/default_tool_stoneshovel.png b/mods/default/textures/default_tool_stoneshovel.png new file mode 100644 index 0000000..11711bd Binary files /dev/null and b/mods/default/textures/default_tool_stoneshovel.png differ diff --git a/mods/default/textures/default_tool_stonesword.png b/mods/default/textures/default_tool_stonesword.png new file mode 100644 index 0000000..1a493ac Binary files /dev/null and b/mods/default/textures/default_tool_stonesword.png differ diff --git a/mods/default/textures/default_tool_woodaxe.png b/mods/default/textures/default_tool_woodaxe.png new file mode 100644 index 0000000..68f1fd8 Binary files /dev/null and b/mods/default/textures/default_tool_woodaxe.png differ diff --git a/mods/default/textures/default_tool_woodpick.png b/mods/default/textures/default_tool_woodpick.png new file mode 100644 index 0000000..0aed583 Binary files /dev/null and b/mods/default/textures/default_tool_woodpick.png differ diff --git a/mods/default/textures/default_tool_woodshovel.png b/mods/default/textures/default_tool_woodshovel.png new file mode 100644 index 0000000..dcef2b5 Binary files /dev/null and b/mods/default/textures/default_tool_woodshovel.png differ diff --git a/mods/default/textures/default_tool_woodsword.png b/mods/default/textures/default_tool_woodsword.png new file mode 100644 index 0000000..c78ba50 Binary files /dev/null and b/mods/default/textures/default_tool_woodsword.png differ diff --git a/mods/default/textures/default_torch_animated.png b/mods/default/textures/default_torch_animated.png new file mode 100644 index 0000000..cdf33ef Binary files /dev/null and b/mods/default/textures/default_torch_animated.png differ diff --git a/mods/default/textures/default_torch_on_ceiling_animated.png b/mods/default/textures/default_torch_on_ceiling_animated.png new file mode 100644 index 0000000..3a8b5ad Binary files /dev/null and b/mods/default/textures/default_torch_on_ceiling_animated.png differ diff --git a/mods/default/textures/default_torch_on_floor.png b/mods/default/textures/default_torch_on_floor.png new file mode 100644 index 0000000..bc4bdd6 Binary files /dev/null and b/mods/default/textures/default_torch_on_floor.png differ diff --git a/mods/default/textures/default_torch_on_floor_animated.png b/mods/default/textures/default_torch_on_floor_animated.png new file mode 100644 index 0000000..ad51c03 Binary files /dev/null and b/mods/default/textures/default_torch_on_floor_animated.png differ diff --git a/mods/default/textures/default_tree.png b/mods/default/textures/default_tree.png new file mode 100644 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 100644 index 0000000..da99bce Binary files /dev/null and b/mods/default/textures/default_tree_top.png differ diff --git a/mods/default/textures/default_water.png b/mods/default/textures/default_water.png new file mode 100644 index 0000000..00500e9 Binary files /dev/null and b/mods/default/textures/default_water.png differ diff --git a/mods/default/textures/default_water_flowing_animated.png b/mods/default/textures/default_water_flowing_animated.png new file mode 100644 index 0000000..070d797 Binary files /dev/null and b/mods/default/textures/default_water_flowing_animated.png differ diff --git a/mods/default/textures/default_water_source_animated.png b/mods/default/textures/default_water_source_animated.png new file mode 100644 index 0000000..7e7f9ff Binary files /dev/null and b/mods/default/textures/default_water_source_animated.png differ diff --git a/mods/default/textures/default_wood.png b/mods/default/textures/default_wood.png new file mode 100644 index 0000000..af56d6c Binary files /dev/null and b/mods/default/textures/default_wood.png differ diff --git a/mods/default/textures/gui_formbg.png b/mods/default/textures/gui_formbg.png new file mode 100644 index 0000000..c543466 Binary files /dev/null and b/mods/default/textures/gui_formbg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_bg.png b/mods/default/textures/gui_furnace_arrow_bg.png new file mode 100644 index 0000000..046d8cd Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_bg.png differ diff --git a/mods/default/textures/gui_furnace_arrow_fg.png b/mods/default/textures/gui_furnace_arrow_fg.png new file mode 100644 index 0000000..8d3c396 Binary files /dev/null and b/mods/default/textures/gui_furnace_arrow_fg.png differ diff --git a/mods/default/textures/gui_hb_bg.png b/mods/default/textures/gui_hb_bg.png new file mode 100644 index 0000000..99248e1 Binary files /dev/null and b/mods/default/textures/gui_hb_bg.png differ diff --git a/mods/default/textures/gui_hotbar.png b/mods/default/textures/gui_hotbar.png new file mode 100644 index 0000000..73fb3ca Binary files /dev/null and b/mods/default/textures/gui_hotbar.png differ diff --git a/mods/default/textures/gui_hotbar_selected.png b/mods/default/textures/gui_hotbar_selected.png new file mode 100644 index 0000000..40bafe6 Binary files /dev/null and b/mods/default/textures/gui_hotbar_selected.png differ diff --git a/mods/default/textures/heart.png b/mods/default/textures/heart.png new file mode 100644 index 0000000..6d4e228 Binary files /dev/null and b/mods/default/textures/heart.png differ diff --git a/mods/default/textures/player.png b/mods/default/textures/player.png new file mode 100644 index 0000000..6d61c43 Binary files /dev/null and b/mods/default/textures/player.png differ diff --git a/mods/default/textures/player_back.png b/mods/default/textures/player_back.png new file mode 100644 index 0000000..5e9ef05 Binary files /dev/null and b/mods/default/textures/player_back.png differ diff --git a/mods/default/textures/wieldhand.png b/mods/default/textures/wieldhand.png new file mode 100644 index 0000000..69f4b7b Binary files /dev/null and b/mods/default/textures/wieldhand.png differ diff --git a/mods/default/tools.lua b/mods/default/tools.lua new file mode 100644 index 0000000..77ea969 --- /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_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_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.00, [2]=1.60, [3]=0.80}, uses=30, 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_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_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.50, [2]=0.90, [3]=0.40}, uses=40, 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_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_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.50, [2]=1.40, [3]=1.00}, uses=30, 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=2}, + }, + 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_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_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.5, [2]=1.20, [3]=0.35}, uses=40, maxlevel=2}, + }, + damage_groups = {fleshy=6}, + }, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_tool("default:sword_mese", { + description = "Mese Sword", + inventory_image = "default_tool_mesesword.png", + 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 +}) diff --git a/mods/default/torch.lua b/mods/default/torch.lua new file mode 100644 index 0000000..a7b83cf --- /dev/null +++ b/mods/default/torch.lua @@ -0,0 +1,147 @@ + +--[[ + +Torch mod - formerly mod "Torches" +====================== + +(c) Copyright BlockMen (2013-2015) +(C) Copyright sofar (2016) + +This mod changes the default torch drawtype from "torchlike" to "mesh", +giving the torch a three dimensional appearance. The mesh contains the +proper pixel mapping to make the animation appear as a particle above +the torch, while in fact the animation is just the texture of the mesh. + + +License: +~~~~~~~~ +(c) Copyright BlockMen (2013-2015) + +Textures and Meshes/Models: +CC-BY 3.0 BlockMen +Note that the models were entirely done from scratch by sofar. + +Code: +Licensed under the GNU LGPL version 2.1 or higher. +You can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt + +--]] + +minetest.register_node("default:torch", { + description = "Torch", + drawtype = "mesh", + mesh = "torch_floor.obj", + inventory_image = "default_torch_on_floor.png", + wield_image = "default_torch_on_floor.png", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + liquids_pointable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_bottom = {-1/8, -1/2, -1/8, 1/8, 2/16, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick and + not (placer 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 +}) + +minetest.register_node("default:torch_wall", { + drawtype = "mesh", + mesh = "torch_wall.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_side = {-1/2, -1/2, -1/8, -1/8, 1/8, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_node("default:torch_ceiling", { + drawtype = "mesh", + mesh = "torch_ceiling.obj", + tiles = {{ + name = "default_torch_on_floor_animated.png", + animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} + }}, + paramtype = "light", + paramtype2 = "wallmounted", + sunlight_propagates = true, + walkable = false, + light_source = 12, + groups = {choppy=2, dig_immediate=3, flammable=1, not_in_creative_inventory=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_lbm({ + name = "default:3dtorch", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 == 0 then + minetest.set_node(pos, {name = "default:torch_ceiling", + param2 = node.param2}) + elseif node.param2 == 1 then + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + end + end +}) diff --git a/mods/default/trees.lua b/mods/default/trees.lua new file mode 100644 index 0000000..44176d7 --- /dev/null +++ b/mods/default/trees.lua @@ -0,0 +1,537 @@ +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) + 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 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 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 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 diff --git a/mods/digiboard/depends.txt b/mods/digiboard/depends.txt new file mode 100644 index 0000000..2cec86e --- /dev/null +++ b/mods/digiboard/depends.txt @@ -0,0 +1,2 @@ +default +digilines diff --git a/mods/digiboard/init.lua b/mods/digiboard/init.lua new file mode 100644 index 0000000..0a3055e --- /dev/null +++ b/mods/digiboard/init.lua @@ -0,0 +1,50 @@ +--Digiboard by bas080 +minetest.register_node("digiboard:keyboard", { + description = "Digilines Keyboard", + tiles = {"keyboard_top.png", "keyboard_bottom.png", "keyboard_side.png", "keyboard_side.png", "keyboard_side.png", "keyboard_side.png"}, + walkable = true, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-4/8, -4/8, 0, 4/8, -3/8, 4/8}, + }, + }, + selection_box = { + type = "fixed", + fixed = { + {-4/8, -4/8, 0, 4/8, -3/8, 4/8}, + }, + }, + digiline = { receptor = {}, + effector = { + action = function(pos, node, channel, msg) + end + }, + }, + groups = {choppy = 3, dig_immediate = 2}, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", "field[text;;]") + meta:set_string("infotext", "Keyboard") + meta:set_int("lines", 0) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.env:get_meta(pos) + local text = fields.text + local channel = "keyboard" + if text ~= nil then + digiline:receptor_send(pos, digiline.rules.default, channel, text) + end + end, +}) + +minetest.register_craft({ + output = "digiboard:keyboard 2", + recipe = { + {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}, + {"","digilines:wire_std_00000000",""} + } +}) \ No newline at end of file diff --git a/mods/digiboard/textures/keyboard_bottom.png b/mods/digiboard/textures/keyboard_bottom.png new file mode 100644 index 0000000..47155a5 Binary files /dev/null and b/mods/digiboard/textures/keyboard_bottom.png differ diff --git a/mods/digiboard/textures/keyboard_side.png b/mods/digiboard/textures/keyboard_side.png new file mode 100644 index 0000000..c5183f4 Binary files /dev/null and b/mods/digiboard/textures/keyboard_side.png differ diff --git a/mods/digiboard/textures/keyboard_top.png b/mods/digiboard/textures/keyboard_top.png new file mode 100644 index 0000000..3e20f9c Binary files /dev/null and b/mods/digiboard/textures/keyboard_top.png differ diff --git a/mods/digilines/.gitignore b/mods/digilines/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/mods/digilines/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/mods/digilines/.luacheckrc b/mods/digilines/.luacheckrc new file mode 100644 index 0000000..6d89a3f --- /dev/null +++ b/mods/digilines/.luacheckrc @@ -0,0 +1,12 @@ + +read_globals = { + "minetest", + "default", + "pipeworks", + "dump", + "VoxelArea", +} + +globals = { + "digilines", +} diff --git a/mods/digilines/LICENSE.txt b/mods/digilines/LICENSE.txt new file mode 100644 index 0000000..9569df7 --- /dev/null +++ b/mods/digilines/LICENSE.txt @@ -0,0 +1,188 @@ +The LGPLv3 applies to all code in this project. +The WTFPL applies to textures and any other content in this project which is not source code. + +============================================================= + +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. + + +============================================================= + + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/digilines/README.inventory b/mods/digilines/README.inventory new file mode 100644 index 0000000..a88115f --- /dev/null +++ b/mods/digilines/README.inventory @@ -0,0 +1,62 @@ +Basic idea: place this chest down at the end of a pipeline. Feed stuff into it. Attach a luacontroller to it with a digiline in between. Program the luacontroller to turn on a wire to stop the pipeline when the chest is full. Don't put more than one kind of item down the pipeline into the chest, unless you want weird tricksy behavior. + +...[F]===[C]--{L} + |__________| + [B] +F: filter +B: blinky plant +C: digiline chest +L: luacontroller +==: pipe +__: mesecons +--: digiline + +Make sure you use mem in the luacontroller to keep the mesecon wire on indefinitely after the chest signals full. When it signals "take" someone took an item out and you can start the pipeline up again. +This may be a bad idea if they only take half a stack or something. Oh well. + +When you put something in, you get a "put" to indicate it's OK (sort of (still buggy)) and can fit inside the chest. When you get a "lost", that means it won't fit inside the chest, and will bounce, possibly popping out. When you get a "overflow" that means you tried to add something to a chest that just filled up, and the stack will bounce. When you get a "full" that means the chest just filled up. + +"Filled up" for all intents and purposes, means taking the type of whatever just went into the chest, and seeing if at least 1 of that type can be added to the chest. If it cannot, then it's filled up. That means a chest full of stacks of 30 copper and one spot of 98 gold, and you add one gold to that, it will say it's full. Add 30 copper to it, and it won't. + +Generally you'll be working with full stacks in pipeworks. Even the non-mese filters will accumulate items in a chest, and not spread them out into multiple stacks. And generally your destination chests will each have one of any kind of item. So all you have to worry about is when you've got 99 everywhere, and one space possibly free. A mese filter can fail on that in fact, for instance if you have room for 45 gold, and it tries to push a stack of 50 gold. All 50 will bounce! The code for chests isn't smart enough to add the 45 and bounce the leftover 5. So only use mese filters when you're sure a full stack has accumulated for the filter to push, and there are no partial stacks at the destination. + +For some reason when an "overflow" happens, when it checks if the stack can fit inside the chest, the answer is yes it can fit! Then it doesn't. Sort of buggy. + +itemstack - the qualified name, a space, then the amount. If the space and amount are ommitted, that represents just 1. + +examples: "default:chest 33" "default:coal" "default:axe_diamond" + +bounce + - when an item cannot enter the destination container it will travel back up the tube it came from, going along alternate routes if they exist, but otherwise popping out of the tube. + +popping out + - the little thingy travelling through the tube disappears, and an entity of the item appears, as if it was just dropped. This entity can expire, losing your items permanently! + + +The messages are: + + +put + - this means that the inventory claimed it could fit that stack of items inside it. Inventories lie. But with the above caveats this is quite usable. +lost + - the stack couldn't fit in the chest and bounces. +full + - the chest has been filled. The itemstack is what filled it. count is what's leftover. + until chests can suck up part of a stack and not bounce the whole stack, that count will + always be 0 +overflow + - generally this is the same as lost, except that the "put" event happened, meaning that the + itemstack was allowed in the chest. + - this will happen with two stacks in rapid succession, the first filling the chest, and the + second bouncing. the in this case will be the amount of the second. + - overflow can't happen with two different kinds of items, you'll get a put, maybe full, then lost for the second kind + +Tricky situation: +if you have a blank spot and put say 82 torches down your pipeline, followed by 99 coal, the 82 torches will go in the chest, and the chest will see that 1 more torch can fit since that would only go to 83. Since 1 more torch can fit, no "full" message will fire off. Then when the coal hits the chest, the "fail" message will fire and the coal will bounce out. The chest couldn't predict that coal would be coming next, so it couldn't know that the chest is full, for coal, while not full for torches. + +TODO: + - make chest.lua a mixin that gets both default and locked chests + - digiline aware furnaces + - digiline aware technic machines, grinders, alloy furnaces, etc + - the pipes going into the chests don't snap to the pipe holes in the digiline chests. They still act fine as pipeworks destinations though. + - digiline chests seem to be immune to filters. But it's late and I'm shipping this. Someone else can figure out why the chests aren't acting like pipeworks chests, despite cloning the pipeworks chest's object. Oh who am I kidding. I'll do it myself I guess, once I've lost hope of aid again. diff --git a/mods/digilines/README.md b/mods/digilines/README.md new file mode 100644 index 0000000..3d57f52 --- /dev/null +++ b/mods/digilines/README.md @@ -0,0 +1,14 @@ +Digilines +========== +- The minetest counterpart for bus systems like i2c, SPI, RS232, USB - + + +This mod adds digiline wires, an RTC (Real Time Clock), a light sensor as well as an LCD Screen. +Can be used together with the luacontroller from mesecons. See the luacontroller manual for more information. + +Send "GET" to RTC or light sensor to retrieve Data, send any text to LCD to display it. +Select channel by right-clicking items. + +License: + Code: LGPL + Textures: WTFPL diff --git a/mods/digilines/characters b/mods/digilines/characters new file mode 100644 index 0000000..b36eea4 --- /dev/null +++ b/mods/digilines/characters @@ -0,0 +1,282 @@ +A +_a_ +7 +B +_b_ +5 +C +_c_ +6 +D +_d_ +6 +E +_e_ +5 +F +_f_ +5 +G +_g_ +6 +H +_h_ +6 +I +_i_ +1 +J +_j_ +4 +K +_k_ +5 +L +_l_ +4 +M +_m_ +7 +N +_n_ +6 +O +_o_ +6 +P +_p_ +5 +Q +_q_ +7 +R +_r_ +5 +S +_s_ +5 +T +_t_ +5 +U +_u_ +6 +V +_v_ +7 +W +_w_ +9 +X +_x_ +5 +Y +_y_ +7 +Z +_z_ +5 +a +_a +5 +b +_b +5 +c +_c +4 +d +_d +5 +e +_e +4 +f +_f +4 +g +_g +5 +h +_h +5 +i +_i +1 +j +_j +1 +k +_k +4 +l +_l +1 +m +_m +7 +n +_n +5 +o +_o +5 +p +_p +5 +q +_q +5 +r +_r +3 +s +_s +4 +t +_t +3 +u +_u +4 +v +_v +5 +w +_w +7 +x +_x +5 +y +_y +4 +z +_z +4 + +_sp +2 +0 +_0 +4 +1 +_1 +2 +2 +_2 +4 +3 +_3 +4 +4 +_4 +4 +5 +_5 +4 +6 +_6 +4 +7 +_7 +4 +8 +_8 +4 +9 +_9 +4 +( +_bl +2 +) +_br +2 +{ +_cl +3 +} +_cr +3 +[ +_sl +2 +] +_sr +2 +' +_ap +1 +! +_ex +1 +? +_qu +4 +@ +_at +5 +# +_hs +5 +$ +_dl +4 +% +_pr +5 +^ +_ca +3 +& +_am +5 +* +_as +3 +_ +_un +3 ++ +_ps +3 +- +_mn +3 += +_eq +3 +; +_sm +1 +: +_co +1 +, +_cm +2 +" +_qo +3 +/ +_dv +5 +~ +_tl +4 +< +_lt +3 +> +_gt +3 +\ +_re +5 +| +_vb +1 +. +_dt +1 diff --git a/mods/digilines/depends.txt b/mods/digilines/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/digilines/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/digilines/description.txt b/mods/digilines/description.txt new file mode 100644 index 0000000..078bc92 --- /dev/null +++ b/mods/digilines/description.txt @@ -0,0 +1 @@ +This mod adds digiline wires, an RTC (Real Time Clock), a light sensor as well as an LCD Screen. Can be used together with the luacontroller from mesecons. diff --git a/mods/digilines/init.lua b/mods/digilines/init.lua new file mode 100644 index 0000000..21c1c8e --- /dev/null +++ b/mods/digilines/init.lua @@ -0,0 +1,82 @@ + +digilines = {} + +-- Backwards compatibility code. +-- We define a proxy table whose methods can be called with the +-- `foo:bar` notation, and it will redirect the call to the +-- real function, dropping the first implicit argument. +local digiline; digiline = setmetatable({}, { + __index = function(_, k) + -- Get method from real table. + local v = digilines[k] + if type(v) == "function" then + -- We need to wrap functions in order to ignore + -- the implicit `self` argument. + local f = v + return function(self, ...) + -- Trap invalid calls of the form `digiline.foo(...)`. + assert(self == digiline) + return f(...) + end + end + return v + end, +}) +rawset(_G, "digiline", digiline) + +-- Let's test our proxy table. +function digilines._testproxy(x) + return x +end + +-- Test using old `digiline:foobar` form. +assert(digiline:_testproxy("foobar") == "foobar") + +-- Test using new `digilines.foobar` form. +assert(digilines._testproxy("foobar") == "foobar") + +-- Test calling incorrect form raises an error. +assert(not pcall(function() digiline._testproxy("foobar") end)) + +local modpath = minetest.get_modpath("digilines") +dofile(modpath .. "/presetrules.lua") +dofile(modpath .. "/util.lua") +dofile(modpath .. "/internal.lua") +dofile(modpath .. "/wires_common.lua") +dofile(modpath .. "/wire_std.lua") + +function digilines.receptor_send(pos, rules, channel, msg) + local checked = {} + checked[minetest.hash_node_position(pos)] = true -- exclude itself + for _,rule in ipairs(rules) do + if digilines.rules_link(pos, digilines.addPosRule(pos, rule)) then + digilines.transmit(digilines.addPosRule(pos, rule), channel, msg, checked) + end + end +end + +minetest.register_craft({ + output = 'digilines:wire_std_00000000 2', + recipe = { + {'mesecons_materials:fiber', 'mesecons_materials:fiber', 'mesecons_materials:fiber'}, + {'mesecons_insulated:insulated_off', 'mesecons_insulated:insulated_off', 'default:gold_ingot'}, + {'mesecons_materials:fiber', 'mesecons_materials:fiber', 'mesecons_materials:fiber'}, + } +}) + +-- former submods +if minetest.is_yes(minetest.setting_get("digilines_enable_inventory") or true) then + dofile(modpath .. "/inventory.lua") +end + +if minetest.is_yes(minetest.setting_get("digilines_enable_lcd") or true) then + dofile(modpath .. "/lcd.lua") +end + +if minetest.is_yes(minetest.setting_get("digilines_enable_lightsensor") or true) then + dofile(modpath .. "/lightsensor.lua") +end + +if minetest.is_yes(minetest.setting_get("digilines_enable_rtc") or true) then + dofile(modpath .. "/rtc.lua") +end diff --git a/mods/digilines/internal.lua b/mods/digilines/internal.lua new file mode 100644 index 0000000..2528f35 --- /dev/null +++ b/mods/digilines/internal.lua @@ -0,0 +1,119 @@ +function digilines.getspec(node) + if not minetest.registered_nodes[node.name] then return false end + return minetest.registered_nodes[node.name].digiline +end + +function digilines.importrules(spec, node) + if type(spec) == 'function' then + return spec(node) + elseif spec then + return spec + else + return digilines.rules.default + end +end + +function digilines.getAnyInputRules(pos) + local node = digilines.get_node_force(pos) + local spec = digilines.getspec(node) + if not spec then return end + + if spec.wire then + return digilines.importrules(spec.wire.rules, node) + end + if spec.effector then + return digilines.importrules(spec.effector.rules, node) + end +end + +function digilines.getAnyOutputRules(pos) + local node = digilines.get_node_force(pos) + local spec = digilines.getspec(node) + if not spec then return end + + if spec.wire then + return digilines.importrules(spec.wire.rules, node) + end + if spec.receptor then + return digilines.importrules(spec.receptor.rules, node) + end +end + +function digilines.rules_link(output, input) + local outputrules = digilines.getAnyOutputRules(output) + local inputrules = digilines.getAnyInputRules (input) + + if not outputrules or not inputrules then return false end + + + for _, orule in ipairs(outputrules) do + if digilines.cmpPos(digilines.addPosRule(output, orule), input) then + for _, irule in ipairs(inputrules) do + if digilines.cmpPos(digilines.addPosRule(input, irule), output) then + return true + end + end + end + end + return false +end + +function digilines.rules_link_anydir(output, input) + return digilines.rules_link(output, input) + or digilines.rules_link(input, output) +end + +local function queue_new() + return {nextRead = 1, nextWrite = 1} +end + +local function queue_empty(queue) + return queue.nextRead == queue.nextWrite +end + +local function queue_enqueue(queue, object) + local nextWrite = queue.nextWrite + queue[nextWrite] = object + queue.nextWrite = nextWrite + 1 +end + +local function queue_dequeue(queue) + local nextRead = queue.nextRead + local object = queue[nextRead] + queue[nextRead] = nil + queue.nextRead = nextRead + 1 + return object +end + +function digilines.transmit(pos, channel, msg, checked) + digilines.vm_begin() + local queue = queue_new() + queue_enqueue(queue, pos) + while not queue_empty(queue) do + local curPos = queue_dequeue(queue) + local node = digilines.get_node_force(curPos) + local spec = digilines.getspec(node) + if spec then + -- Effector actions --> Receive + if spec.effector then + spec.effector.action(curPos, node, channel, msg) + end + + -- Cable actions --> Transmit + if spec.wire then + local rules = digilines.importrules(spec.wire.rules, node) + for _, rule in ipairs(rules) do + local nextPos = digilines.addPosRule(curPos, rule) + if digilines.rules_link(curPos, nextPos) then + local checkedID = minetest.hash_node_position(nextPos) + if not checked[checkedID] then + checked[checkedID] = true + queue_enqueue(queue, nextPos) + end + end + end + end + end + end + digilines.vm_end() +end diff --git a/mods/digilines/inventory.lua b/mods/digilines/inventory.lua new file mode 100644 index 0000000..70cb133 --- /dev/null +++ b/mods/digilines/inventory.lua @@ -0,0 +1,151 @@ +local function sendMessage(pos, msg, channel) + if channel == nil then + channel = minetest.get_meta(pos):get_string("channel") + end + digilines.receptor_send(pos,digilines.rules.default,channel,msg) +end + +local function maybeString(stack) + if type(stack)=='string' then return stack + elseif type(stack)=='table' then return dump(stack) + else return stack:to_string() + end +end + +local function can_insert(pos, stack) + local can = minetest.get_meta(pos):get_inventory():room_for_item("main", stack) + if can then + sendMessage(pos,"put "..maybeString(stack)) + else + -- overflow and lost means that items are gonna be out as entities :/ + sendMessage(pos,"lost "..maybeString(stack)) + end + return can +end + +local tubeconn = minetest.get_modpath("pipeworks") and "^pipeworks_tube_connection_wooden.png" or "" +local tubescan = minetest.get_modpath("pipeworks") and function(pos) pipeworks.scan_for_tube_objects(pos) end or nil + +minetest.register_alias("digilines_inventory:chest", "digilines:chest") +minetest.register_node("digilines:chest", { + description = "Digiline Chest", + tiles = { + "default_chest_top.png"..tubeconn, + "default_chest_top.png"..tubeconn, + "default_chest_side.png"..tubeconn, + "default_chest_side.png"..tubeconn, + "default_chest_side.png"..tubeconn, + "default_chest_front.png", + }, + paramtype2 = "facedir", + legacy_facedir_simple = true, + groups = {choppy=2, oddly_breakable_by_hand=2, tubedevice=1, tubedevice_receiver=1}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Digiline Chest") + meta:set_string("formspec", "size[8,10]".. + ((default and default.gui_bg) or "").. + ((default and default.gui_bg_img) or "").. + ((default and default.gui_slots) or "").. + "label[0,0;Digiline Chest]".. + "list[current_name;main;0,1;8,4;]".. + "field[2,5.5;5,1;channel;Channel;${channel}]".. + ((default and default.get_hotbar_bg) and default.get_hotbar_bg(0,6) or "").. + "list[current_player;main;0,6;8,4;]") + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + after_place_node = tubescan, + after_dig_node = tubescan, + can_dig = function(pos) + return minetest.get_meta(pos):get_inventory():is_empty("main") + end, + on_receive_fields = function(pos, _, fields, sender) + 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 + if fields.channel ~= nil then + minetest.get_meta(pos):set_string("channel",fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function() end + } + }, + tube = { + connect_sides = {left=1, right=1, back=1, front=1, bottom=1, top=1}, + connects = function(i,param2) + return not pipeworks.connects.facingFront(i,param2) + end, + input_inventory = "main", + can_insert = function(pos, _, stack) + return can_insert(pos, stack) + end, + insert_object = function(pos, _, stack) + local inv = minetest.get_meta(pos):get_inventory() + local leftover = inv:add_item("main", stack) + local count = leftover:get_count() + if count == 0 then + local derpstack = stack:get_name()..' 1' + if not inv:room_for_item("main", derpstack) then + -- when you can't put a single more of whatever you just put, + -- you'll get a put for it, then a full + sendMessage(pos,"full "..maybeString(stack)..' '..tostring(count)) + end + else + -- this happens when the chest has received two stacks in a row and + -- filled up exactly with the first one. + -- You get a put for the first stack, a put for the second + -- and then a overflow with the first in stack and the second in leftover + -- and NO full? + sendMessage(pos,"overflow "..maybeString(stack)..' '..tostring(count)) + end + return leftover + end, + }, + allow_metadata_inventory_put = function(pos, _, _, stack) + if not can_insert(pos, stack) then + sendMessage(pos,"uoverflow "..maybeString(stack)) + end + return stack:get_count() + end, + on_metadata_inventory_move = function(pos, _, _, _, _, _, 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, _, _, stack, player) + local channel = minetest.get_meta(pos):get_string("channel") + local send = function(msg) + sendMessage(pos,msg,channel) + end + -- direction is only for furnaces + -- as the item has already been put, can_insert should return false if the chest is now full. + local derpstack = stack:get_name()..' 1' + if can_insert(pos,derpstack) then + send("uput "..maybeString(stack)) + else + send("ufull "..maybeString(stack)) + end + minetest.log("action", player:get_player_name().." puts stuff into chest at "..minetest.pos_to_string(pos)) + end, + on_metadata_inventory_take = function(pos, listname, _, stack, player) + local meta = minetest.get_meta(pos) + local channel = meta:get_string("channel") + local inv = meta:get_inventory() + if inv:is_empty(listname) then + sendMessage(pos, "empty", channel) + end + sendMessage(pos,"utake "..maybeString(stack)) + minetest.log("action", player:get_player_name().." takes stuff from chest at "..minetest.pos_to_string(pos)) + end +}) + +minetest.register_craft({ + type = "shapeless", + output = "digilines:chest", + recipe = {"default:chest", "digilines:wire_std_00000000"} +}) diff --git a/mods/digilines/lcd.lua b/mods/digilines/lcd.lua new file mode 100644 index 0000000..ce17dac --- /dev/null +++ b/mods/digilines/lcd.lua @@ -0,0 +1,233 @@ +--* parts are currently not possible because you cannot set the pitch of an entity from lua + +-- Font: 04.jp.org + +-- load characters map +local chars_file = io.open(minetest.get_modpath("digilines").."/characters", "r") +local charmap = {} +local max_chars = 12 +if not chars_file then + print("[digilines] E: LCD: character map file not found") +else + while true do + local char = chars_file:read("*l") + if char == nil then + break + end + local img = chars_file:read("*l") + chars_file:read("*l") + charmap[char] = img + end +end + +-- CONSTANTS +local LCD_WITH = 100 +local LCD_PADDING = 8 + +local LINE_LENGTH = 12 +local NUMBER_OF_LINES = 5 + +local LINE_HEIGHT = 14 +local CHAR_WIDTH = 5 + +local create_lines = function(text) + local line = "" + local line_num = 1 + local tab = {} + for word in string.gmatch(text, "%S+") do + if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then + if line ~= "" then + line = line.." "..word + else + line = word + end + else + table.insert(tab, line) + if word ~= "|" then + line = word + else + line = "" + end + line_num = line_num+1 + if line_num > NUMBER_OF_LINES then + return tab + end + end + end + table.insert(tab, line) + return tab +end + +local generate_line = function(s, ypos) + local i = 1 + local parsed = {} + local width = 0 + local chars = 0 + while chars < max_chars and i <= #s do + local file = nil + if charmap[s:sub(i, i)] ~= nil then + file = charmap[s:sub(i, i)] + i = i + 1 + elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then + file = charmap[s:sub(i, i + 1)] + i = i + 2 + else + print("[digilines] W: LCD: unknown symbol in '"..s.."' at "..i) + i = i + 1 + end + if file ~= nil then + width = width + CHAR_WIDTH + table.insert(parsed, file) + chars = chars + 1 + end + end + width = width - 1 + + local texture = "" + local xpos = math.floor((LCD_WITH - 2 * LCD_PADDING - width) / 2 + LCD_PADDING) + for ii = 1, #parsed do + texture = texture..":"..xpos..","..ypos.."="..parsed[ii]..".png" + xpos = xpos + CHAR_WIDTH + 1 + end + return texture +end + +local generate_texture = function(lines) + local texture = "[combine:"..LCD_WITH.."x"..LCD_WITH + local ypos = 16 + for i = 1, #lines do + texture = texture..generate_line(lines[i], ypos) + ypos = ypos + LINE_HEIGHT + end + return texture +end + +local lcds = { + -- on ceiling + --* [0] = {delta = {x = 0, y = 0.4, z = 0}, pitch = math.pi / -2}, + -- on ground + --* [1] = {delta = {x = 0, y =-0.4, z = 0}, pitch = math.pi / 2}, + -- sides + [2] = {delta = {x = 0.437, y = 0, z = 0}, yaw = math.pi / -2}, + [3] = {delta = {x = -0.437, y = 0, z = 0}, yaw = math.pi / 2}, + [4] = {delta = {x = 0, y = 0, z = 0.437}, yaw = 0}, + [5] = {delta = {x = 0, y = 0, z = -0.437}, yaw = math.pi}, +} + +local reset_meta = function(pos) + minetest.get_meta(pos):set_string("formspec", "field[channel;Channel;${channel}]") +end + +local clearscreen = function(pos) + local objects = minetest.get_objects_inside_radius(pos, 0.5) + for _, o in ipairs(objects) do + local o_entity = o:get_luaentity() + if o_entity and o_entity.name == "digilines_lcd:text" then + o:remove() + end + end +end + +local prepare_writing = function(pos) + local lcd_info = lcds[minetest.get_node(pos).param2] + if lcd_info == nil then return end + local text = minetest.add_entity( + {x = pos.x + lcd_info.delta.x, + y = pos.y + lcd_info.delta.y, + z = pos.z + lcd_info.delta.z}, "digilines_lcd:text") + text:setyaw(lcd_info.yaw or 0) + --* text:setpitch(lcd_info.yaw or 0) + return text +end + +local on_digiline_receive = function(pos, _, channel, msg) + local meta = minetest.get_meta(pos) + local setchan = meta:get_string("channel") + if setchan ~= channel then return end + + meta:set_string("text", msg) + meta:set_string("infotext", msg) + clearscreen(pos) + if msg ~= "" then + prepare_writing(pos) + end +end + +local lcd_box = { + type = "wallmounted", + wall_top = {-8/16, 7/16, -8/16, 8/16, 8/16, 8/16} +} + +minetest.register_alias("digilines_lcd:lcd", "digilines:lcd") +minetest.register_node("digilines:lcd", { + drawtype = "nodebox", + description = "Digiline LCD", + inventory_image = "lcd_lcd.png", + wield_image = "lcd_lcd.png", + tiles = {"lcd_anyside.png"}, + + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "wallmounted", + node_box = lcd_box, + selection_box = lcd_box, + groups = {choppy = 3, dig_immediate = 2}, + + after_place_node = function (pos) + local param2 = minetest.get_node(pos).param2 + if param2 == 0 or param2 == 1 then + minetest.add_node(pos, {name = "digilines:lcd", param2 = 3}) + end + prepare_writing (pos) + end, + + on_construct = function(pos) + reset_meta(pos) + end, + + on_destruct = function(pos) + clearscreen(pos) + end, + + on_receive_fields = function(pos, _, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + + digiline = + { + receptor = {}, + effector = { + action = on_digiline_receive + }, + }, + + light_source = 6, +}) + +minetest.register_entity(":digilines_lcd:text", { + collisionbox = { 0, 0, 0, 0, 0, 0 }, + visual = "upright_sprite", + textures = {}, + + on_activate = function(self) + local meta = minetest.get_meta(self.object:getpos()) + local text = meta:get_string("text") + self.object:set_properties({textures={generate_texture(create_lines(text))}}) + end +}) + +minetest.register_craft({ + output = "digilines:lcd 2", + recipe = { + {"default:steel_ingot", "digilines:wire_std_00000000", "default:steel_ingot"}, + {"mesecons_lightstone:lightstone_green_off","mesecons_lightstone:lightstone_green_off","mesecons_lightstone:lightstone_green_off"}, + {"default:glass","default:glass","default:glass"} + } +}) diff --git a/mods/digilines/lightsensor.lua b/mods/digilines/lightsensor.lua new file mode 100644 index 0000000..1c7237b --- /dev/null +++ b/mods/digilines/lightsensor.lua @@ -0,0 +1,63 @@ +local GET_COMMAND = "GET" + +local lsensor_nodebox = +{ + type = "fixed", + fixed = { + { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab + + { -7/16, -7/16, -7/16, -4/16, -5/16, 7/16 }, -- bonds + { 4/16, -7/16, -7/16, 7/16, -5/16, 7/16 }, + { -7/16, -7/16, -7/16, 7/16, -5/16, -4/16 }, + { -7/16, -7/16, 4/16, 7/16, -5/16, 7/16 }, + + { -1/16, -7/16, -1/16, 1/16, -5/16, 1/16 }, -- pin thing in the middle + } +} + +local lsensor_selbox = +{ + type = "fixed", + fixed = {{ -8/16, -8/16, -8/16, 8/16, -3/16, 8/16 }} +} + +local on_digiline_receive = function (pos, _, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if channel == setchan and msg == GET_COMMAND then + local lightval = minetest.get_node_light(pos) + digilines.receptor_send(pos, digilines.rules.default, channel, lightval) + end +end + +minetest.register_alias("digilines_lightsensor:lightsensor", "digilines:lightsensor") +minetest.register_node("digilines:lightsensor", { + description = "Digiline Lightsensor", + drawtype = "nodebox", + tiles = {"digilines_lightsensor.png"}, + + paramtype = "light", + groups = {dig_immediate=2}, + selection_box = lsensor_selbox, + node_box = lsensor_nodebox, + digiline = + { + receptor = {}, + effector = { + action = on_digiline_receive + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, _, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, +}) diff --git a/mods/digilines/mod.conf b/mods/digilines/mod.conf new file mode 100644 index 0000000..0b01ac5 --- /dev/null +++ b/mods/digilines/mod.conf @@ -0,0 +1 @@ +name = digilines diff --git a/mods/digilines/presetrules.lua b/mods/digilines/presetrules.lua new file mode 100644 index 0000000..a0ab508 --- /dev/null +++ b/mods/digilines/presetrules.lua @@ -0,0 +1,15 @@ +digilines.rules = {} + +digilines.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}} diff --git a/mods/digilines/rtc.lua b/mods/digilines/rtc.lua new file mode 100644 index 0000000..a82f774 --- /dev/null +++ b/mods/digilines/rtc.lua @@ -0,0 +1,59 @@ +local GET_COMMAND = "GET" + +local rtc_nodebox = +{ + type = "fixed", + fixed = { + { -8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }, -- bottom slab + + { -7/16, -7/16, -7/16, 7/16, -5/16, 7/16 }, + } +} + +local rtc_selbox = +{ + type = "fixed", + fixed = {{ -8/16, -8/16, -8/16, 8/16, -3/16, 8/16 }} +} + +local on_digiline_receive = function (pos, _, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if channel == setchan and msg == GET_COMMAND then + local timeofday = minetest.get_timeofday() + digilines.receptor_send(pos, digilines.rules.default, channel, timeofday) + end +end + +minetest.register_alias("digilines_rtc:rtc", "digilines:rtc") +minetest.register_node("digilines:rtc", { + description = "Digiline Real Time Clock (RTC)", + drawtype = "nodebox", + tiles = {"digilines_rtc.png"}, + + paramtype = "light", + paramtype2 = "facedir", + groups = {dig_immediate=2}, + selection_box = rtc_selbox, + node_box = rtc_nodebox, + digiline = + { + receptor = {}, + effector = { + action = on_digiline_receive + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, _, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, +}) diff --git a/mods/digilines/screenshot.png b/mods/digilines/screenshot.png new file mode 100644 index 0000000..e699cea Binary files /dev/null and b/mods/digilines/screenshot.png differ diff --git a/mods/digilines/settingtypes.txt b/mods/digilines/settingtypes.txt new file mode 100644 index 0000000..ad16ac8 --- /dev/null +++ b/mods/digilines/settingtypes.txt @@ -0,0 +1,13 @@ + +# If enabled, makes some nodes with inventories (like chests) send signals +# when items are moved in the inventory. +digilines_enable_inventory (Enable inventory signals) bool true + +# Enable or disable the LCD panel with visible text. +digilines_enable_lcd (Enable LCD) bool true + +# Enable or disable the light sensor component. +digilines_enable_lightsensor (Enable light sensor) bool true + +# Enable or disable the real time clock component. +digilines_enable_rtc (Enable RTC) bool true diff --git a/mods/digilines/textures/_0.png b/mods/digilines/textures/_0.png new file mode 100644 index 0000000..b030879 Binary files /dev/null and b/mods/digilines/textures/_0.png differ diff --git a/mods/digilines/textures/_1.png b/mods/digilines/textures/_1.png new file mode 100644 index 0000000..ae28369 Binary files /dev/null and b/mods/digilines/textures/_1.png differ diff --git a/mods/digilines/textures/_2.png b/mods/digilines/textures/_2.png new file mode 100644 index 0000000..7375c68 Binary files /dev/null and b/mods/digilines/textures/_2.png differ diff --git a/mods/digilines/textures/_3.png b/mods/digilines/textures/_3.png new file mode 100644 index 0000000..d724811 Binary files /dev/null and b/mods/digilines/textures/_3.png differ diff --git a/mods/digilines/textures/_4.png b/mods/digilines/textures/_4.png new file mode 100644 index 0000000..0fff433 Binary files /dev/null and b/mods/digilines/textures/_4.png differ diff --git a/mods/digilines/textures/_5.png b/mods/digilines/textures/_5.png new file mode 100644 index 0000000..43010df Binary files /dev/null and b/mods/digilines/textures/_5.png differ diff --git a/mods/digilines/textures/_6.png b/mods/digilines/textures/_6.png new file mode 100644 index 0000000..1eba38c Binary files /dev/null and b/mods/digilines/textures/_6.png differ diff --git a/mods/digilines/textures/_7.png b/mods/digilines/textures/_7.png new file mode 100644 index 0000000..dbcd2d1 Binary files /dev/null and b/mods/digilines/textures/_7.png differ diff --git a/mods/digilines/textures/_8.png b/mods/digilines/textures/_8.png new file mode 100644 index 0000000..edf6ef5 Binary files /dev/null and b/mods/digilines/textures/_8.png differ diff --git a/mods/digilines/textures/_9.png b/mods/digilines/textures/_9.png new file mode 100644 index 0000000..c276c11 Binary files /dev/null and b/mods/digilines/textures/_9.png differ diff --git a/mods/digilines/textures/_a.png b/mods/digilines/textures/_a.png new file mode 100644 index 0000000..8f3f59c Binary files /dev/null and b/mods/digilines/textures/_a.png differ diff --git a/mods/digilines/textures/_a_.png b/mods/digilines/textures/_a_.png new file mode 100644 index 0000000..4da193c Binary files /dev/null and b/mods/digilines/textures/_a_.png differ diff --git a/mods/digilines/textures/_am.png b/mods/digilines/textures/_am.png new file mode 100644 index 0000000..75d0287 Binary files /dev/null and b/mods/digilines/textures/_am.png differ diff --git a/mods/digilines/textures/_ap.png b/mods/digilines/textures/_ap.png new file mode 100644 index 0000000..5dd3325 Binary files /dev/null and b/mods/digilines/textures/_ap.png differ diff --git a/mods/digilines/textures/_as.png b/mods/digilines/textures/_as.png new file mode 100644 index 0000000..3c7a25a Binary files /dev/null and b/mods/digilines/textures/_as.png differ diff --git a/mods/digilines/textures/_at.png b/mods/digilines/textures/_at.png new file mode 100644 index 0000000..4f9841c Binary files /dev/null and b/mods/digilines/textures/_at.png differ diff --git a/mods/digilines/textures/_b.png b/mods/digilines/textures/_b.png new file mode 100644 index 0000000..baf4eaa Binary files /dev/null and b/mods/digilines/textures/_b.png differ diff --git a/mods/digilines/textures/_b_.png b/mods/digilines/textures/_b_.png new file mode 100644 index 0000000..b00a378 Binary files /dev/null and b/mods/digilines/textures/_b_.png differ diff --git a/mods/digilines/textures/_bl.png b/mods/digilines/textures/_bl.png new file mode 100644 index 0000000..546ca4e Binary files /dev/null and b/mods/digilines/textures/_bl.png differ diff --git a/mods/digilines/textures/_br.png b/mods/digilines/textures/_br.png new file mode 100644 index 0000000..5700fa6 Binary files /dev/null and b/mods/digilines/textures/_br.png differ diff --git a/mods/digilines/textures/_c.png b/mods/digilines/textures/_c.png new file mode 100644 index 0000000..eedd639 Binary files /dev/null and b/mods/digilines/textures/_c.png differ diff --git a/mods/digilines/textures/_c_.png b/mods/digilines/textures/_c_.png new file mode 100644 index 0000000..cab6518 Binary files /dev/null and b/mods/digilines/textures/_c_.png differ diff --git a/mods/digilines/textures/_ca.png b/mods/digilines/textures/_ca.png new file mode 100644 index 0000000..d359c88 Binary files /dev/null and b/mods/digilines/textures/_ca.png differ diff --git a/mods/digilines/textures/_cl.png b/mods/digilines/textures/_cl.png new file mode 100644 index 0000000..55396b9 Binary files /dev/null and b/mods/digilines/textures/_cl.png differ diff --git a/mods/digilines/textures/_cm.png b/mods/digilines/textures/_cm.png new file mode 100644 index 0000000..28beedf Binary files /dev/null and b/mods/digilines/textures/_cm.png differ diff --git a/mods/digilines/textures/_co.png b/mods/digilines/textures/_co.png new file mode 100644 index 0000000..b161819 Binary files /dev/null and b/mods/digilines/textures/_co.png differ diff --git a/mods/digilines/textures/_cr.png b/mods/digilines/textures/_cr.png new file mode 100644 index 0000000..ac466a9 Binary files /dev/null and b/mods/digilines/textures/_cr.png differ diff --git a/mods/digilines/textures/_d.png b/mods/digilines/textures/_d.png new file mode 100644 index 0000000..a5f0699 Binary files /dev/null and b/mods/digilines/textures/_d.png differ diff --git a/mods/digilines/textures/_d_.png b/mods/digilines/textures/_d_.png new file mode 100644 index 0000000..9a0e3ed Binary files /dev/null and b/mods/digilines/textures/_d_.png differ diff --git a/mods/digilines/textures/_dl.png b/mods/digilines/textures/_dl.png new file mode 100644 index 0000000..72184ad Binary files /dev/null and b/mods/digilines/textures/_dl.png differ diff --git a/mods/digilines/textures/_dt.png b/mods/digilines/textures/_dt.png new file mode 100644 index 0000000..61c1e4a Binary files /dev/null and b/mods/digilines/textures/_dt.png differ diff --git a/mods/digilines/textures/_dv.png b/mods/digilines/textures/_dv.png new file mode 100644 index 0000000..996d7cd Binary files /dev/null and b/mods/digilines/textures/_dv.png differ diff --git a/mods/digilines/textures/_e.png b/mods/digilines/textures/_e.png new file mode 100644 index 0000000..29e32e6 Binary files /dev/null and b/mods/digilines/textures/_e.png differ diff --git a/mods/digilines/textures/_e_.png b/mods/digilines/textures/_e_.png new file mode 100644 index 0000000..c7f19c1 Binary files /dev/null and b/mods/digilines/textures/_e_.png differ diff --git a/mods/digilines/textures/_eq.png b/mods/digilines/textures/_eq.png new file mode 100644 index 0000000..daf8424 Binary files /dev/null and b/mods/digilines/textures/_eq.png differ diff --git a/mods/digilines/textures/_ex.png b/mods/digilines/textures/_ex.png new file mode 100644 index 0000000..b5da8e9 Binary files /dev/null and b/mods/digilines/textures/_ex.png differ diff --git a/mods/digilines/textures/_f.png b/mods/digilines/textures/_f.png new file mode 100644 index 0000000..6835912 Binary files /dev/null and b/mods/digilines/textures/_f.png differ diff --git a/mods/digilines/textures/_f_.png b/mods/digilines/textures/_f_.png new file mode 100644 index 0000000..3698ed2 Binary files /dev/null and b/mods/digilines/textures/_f_.png differ diff --git a/mods/digilines/textures/_g.png b/mods/digilines/textures/_g.png new file mode 100644 index 0000000..5a85cde Binary files /dev/null and b/mods/digilines/textures/_g.png differ diff --git a/mods/digilines/textures/_g_.png b/mods/digilines/textures/_g_.png new file mode 100644 index 0000000..cc7bbc5 Binary files /dev/null and b/mods/digilines/textures/_g_.png differ diff --git a/mods/digilines/textures/_gt.png b/mods/digilines/textures/_gt.png new file mode 100644 index 0000000..f30855a Binary files /dev/null and b/mods/digilines/textures/_gt.png differ diff --git a/mods/digilines/textures/_h.png b/mods/digilines/textures/_h.png new file mode 100644 index 0000000..1a66a9e Binary files /dev/null and b/mods/digilines/textures/_h.png differ diff --git a/mods/digilines/textures/_h_.png b/mods/digilines/textures/_h_.png new file mode 100644 index 0000000..87beafc Binary files /dev/null and b/mods/digilines/textures/_h_.png differ diff --git a/mods/digilines/textures/_ha.png b/mods/digilines/textures/_ha.png new file mode 100644 index 0000000..4618ced Binary files /dev/null and b/mods/digilines/textures/_ha.png differ diff --git a/mods/digilines/textures/_hs.png b/mods/digilines/textures/_hs.png new file mode 100644 index 0000000..6f12bec Binary files /dev/null and b/mods/digilines/textures/_hs.png differ diff --git a/mods/digilines/textures/_i.png b/mods/digilines/textures/_i.png new file mode 100644 index 0000000..f001142 Binary files /dev/null and b/mods/digilines/textures/_i.png differ diff --git a/mods/digilines/textures/_i_.png b/mods/digilines/textures/_i_.png new file mode 100644 index 0000000..fc658b8 Binary files /dev/null and b/mods/digilines/textures/_i_.png differ diff --git a/mods/digilines/textures/_j.png b/mods/digilines/textures/_j.png new file mode 100644 index 0000000..87d2f26 Binary files /dev/null and b/mods/digilines/textures/_j.png differ diff --git a/mods/digilines/textures/_j_.png b/mods/digilines/textures/_j_.png new file mode 100644 index 0000000..c0d9ac2 Binary files /dev/null and b/mods/digilines/textures/_j_.png differ diff --git a/mods/digilines/textures/_k.png b/mods/digilines/textures/_k.png new file mode 100644 index 0000000..34f9336 Binary files /dev/null and b/mods/digilines/textures/_k.png differ diff --git a/mods/digilines/textures/_k_.png b/mods/digilines/textures/_k_.png new file mode 100644 index 0000000..86b623d Binary files /dev/null and b/mods/digilines/textures/_k_.png differ diff --git a/mods/digilines/textures/_l.png b/mods/digilines/textures/_l.png new file mode 100644 index 0000000..defe7ec Binary files /dev/null and b/mods/digilines/textures/_l.png differ diff --git a/mods/digilines/textures/_l_.png b/mods/digilines/textures/_l_.png new file mode 100644 index 0000000..3fe1de2 Binary files /dev/null and b/mods/digilines/textures/_l_.png differ diff --git a/mods/digilines/textures/_lt.png b/mods/digilines/textures/_lt.png new file mode 100644 index 0000000..ec7219d Binary files /dev/null and b/mods/digilines/textures/_lt.png differ diff --git a/mods/digilines/textures/_m.png b/mods/digilines/textures/_m.png new file mode 100644 index 0000000..e0fe039 Binary files /dev/null and b/mods/digilines/textures/_m.png differ diff --git a/mods/digilines/textures/_m_.png b/mods/digilines/textures/_m_.png new file mode 100644 index 0000000..9164da6 Binary files /dev/null and b/mods/digilines/textures/_m_.png differ diff --git a/mods/digilines/textures/_mn.png b/mods/digilines/textures/_mn.png new file mode 100644 index 0000000..935a2fe Binary files /dev/null and b/mods/digilines/textures/_mn.png differ diff --git a/mods/digilines/textures/_n.png b/mods/digilines/textures/_n.png new file mode 100644 index 0000000..ac10fd9 Binary files /dev/null and b/mods/digilines/textures/_n.png differ diff --git a/mods/digilines/textures/_n_.png b/mods/digilines/textures/_n_.png new file mode 100644 index 0000000..d4355c1 Binary files /dev/null and b/mods/digilines/textures/_n_.png differ diff --git a/mods/digilines/textures/_o.png b/mods/digilines/textures/_o.png new file mode 100644 index 0000000..080e99d Binary files /dev/null and b/mods/digilines/textures/_o.png differ diff --git a/mods/digilines/textures/_o_.png b/mods/digilines/textures/_o_.png new file mode 100644 index 0000000..2d19051 Binary files /dev/null and b/mods/digilines/textures/_o_.png differ diff --git a/mods/digilines/textures/_p.png b/mods/digilines/textures/_p.png new file mode 100644 index 0000000..3050959 Binary files /dev/null and b/mods/digilines/textures/_p.png differ diff --git a/mods/digilines/textures/_p_.png b/mods/digilines/textures/_p_.png new file mode 100644 index 0000000..0cca011 Binary files /dev/null and b/mods/digilines/textures/_p_.png differ diff --git a/mods/digilines/textures/_pr.png b/mods/digilines/textures/_pr.png new file mode 100644 index 0000000..b835141 Binary files /dev/null and b/mods/digilines/textures/_pr.png differ diff --git a/mods/digilines/textures/_ps.png b/mods/digilines/textures/_ps.png new file mode 100644 index 0000000..1f4b5c1 Binary files /dev/null and b/mods/digilines/textures/_ps.png differ diff --git a/mods/digilines/textures/_q.png b/mods/digilines/textures/_q.png new file mode 100644 index 0000000..945b6cf Binary files /dev/null and b/mods/digilines/textures/_q.png differ diff --git a/mods/digilines/textures/_q_.png b/mods/digilines/textures/_q_.png new file mode 100644 index 0000000..f3bf455 Binary files /dev/null and b/mods/digilines/textures/_q_.png differ diff --git a/mods/digilines/textures/_qo.png b/mods/digilines/textures/_qo.png new file mode 100644 index 0000000..5d261e3 Binary files /dev/null and b/mods/digilines/textures/_qo.png differ diff --git a/mods/digilines/textures/_qu.png b/mods/digilines/textures/_qu.png new file mode 100644 index 0000000..5eb597a Binary files /dev/null and b/mods/digilines/textures/_qu.png differ diff --git a/mods/digilines/textures/_r.png b/mods/digilines/textures/_r.png new file mode 100644 index 0000000..39e9fce Binary files /dev/null and b/mods/digilines/textures/_r.png differ diff --git a/mods/digilines/textures/_r_.png b/mods/digilines/textures/_r_.png new file mode 100644 index 0000000..6c71c1e Binary files /dev/null and b/mods/digilines/textures/_r_.png differ diff --git a/mods/digilines/textures/_re.png b/mods/digilines/textures/_re.png new file mode 100644 index 0000000..1614837 Binary files /dev/null and b/mods/digilines/textures/_re.png differ diff --git a/mods/digilines/textures/_s.png b/mods/digilines/textures/_s.png new file mode 100644 index 0000000..a0ada1a Binary files /dev/null and b/mods/digilines/textures/_s.png differ diff --git a/mods/digilines/textures/_s_.png b/mods/digilines/textures/_s_.png new file mode 100644 index 0000000..9b018bb Binary files /dev/null and b/mods/digilines/textures/_s_.png differ diff --git a/mods/digilines/textures/_sl.png b/mods/digilines/textures/_sl.png new file mode 100644 index 0000000..08c9547 Binary files /dev/null and b/mods/digilines/textures/_sl.png differ diff --git a/mods/digilines/textures/_sm.png b/mods/digilines/textures/_sm.png new file mode 100644 index 0000000..385c64f Binary files /dev/null and b/mods/digilines/textures/_sm.png differ diff --git a/mods/digilines/textures/_sp.png b/mods/digilines/textures/_sp.png new file mode 100644 index 0000000..4f38a35 Binary files /dev/null and b/mods/digilines/textures/_sp.png differ diff --git a/mods/digilines/textures/_sr.png b/mods/digilines/textures/_sr.png new file mode 100644 index 0000000..bc9c0a2 Binary files /dev/null and b/mods/digilines/textures/_sr.png differ diff --git a/mods/digilines/textures/_t.png b/mods/digilines/textures/_t.png new file mode 100644 index 0000000..c55731a Binary files /dev/null and b/mods/digilines/textures/_t.png differ diff --git a/mods/digilines/textures/_t_.png b/mods/digilines/textures/_t_.png new file mode 100644 index 0000000..773e666 Binary files /dev/null and b/mods/digilines/textures/_t_.png differ diff --git a/mods/digilines/textures/_tl.png b/mods/digilines/textures/_tl.png new file mode 100644 index 0000000..059fe68 Binary files /dev/null and b/mods/digilines/textures/_tl.png differ diff --git a/mods/digilines/textures/_u.png b/mods/digilines/textures/_u.png new file mode 100644 index 0000000..98bf8e6 Binary files /dev/null and b/mods/digilines/textures/_u.png differ diff --git a/mods/digilines/textures/_u_.png b/mods/digilines/textures/_u_.png new file mode 100644 index 0000000..35ce915 Binary files /dev/null and b/mods/digilines/textures/_u_.png differ diff --git a/mods/digilines/textures/_un.png b/mods/digilines/textures/_un.png new file mode 100644 index 0000000..01f547a Binary files /dev/null and b/mods/digilines/textures/_un.png differ diff --git a/mods/digilines/textures/_v.png b/mods/digilines/textures/_v.png new file mode 100644 index 0000000..b692d11 Binary files /dev/null and b/mods/digilines/textures/_v.png differ diff --git a/mods/digilines/textures/_v_.png b/mods/digilines/textures/_v_.png new file mode 100644 index 0000000..8049771 Binary files /dev/null and b/mods/digilines/textures/_v_.png differ diff --git a/mods/digilines/textures/_vb.png b/mods/digilines/textures/_vb.png new file mode 100644 index 0000000..7fed7dc Binary files /dev/null and b/mods/digilines/textures/_vb.png differ diff --git a/mods/digilines/textures/_w.png b/mods/digilines/textures/_w.png new file mode 100644 index 0000000..6a58b07 Binary files /dev/null and b/mods/digilines/textures/_w.png differ diff --git a/mods/digilines/textures/_w_.png b/mods/digilines/textures/_w_.png new file mode 100644 index 0000000..64904de Binary files /dev/null and b/mods/digilines/textures/_w_.png differ diff --git a/mods/digilines/textures/_x.png b/mods/digilines/textures/_x.png new file mode 100644 index 0000000..b769e13 Binary files /dev/null and b/mods/digilines/textures/_x.png differ diff --git a/mods/digilines/textures/_x_.png b/mods/digilines/textures/_x_.png new file mode 100644 index 0000000..2f6d067 Binary files /dev/null and b/mods/digilines/textures/_x_.png differ diff --git a/mods/digilines/textures/_y.png b/mods/digilines/textures/_y.png new file mode 100644 index 0000000..777b55e Binary files /dev/null and b/mods/digilines/textures/_y.png differ diff --git a/mods/digilines/textures/_y_.png b/mods/digilines/textures/_y_.png new file mode 100644 index 0000000..0c40de9 Binary files /dev/null and b/mods/digilines/textures/_y_.png differ diff --git a/mods/digilines/textures/_z.png b/mods/digilines/textures/_z.png new file mode 100644 index 0000000..ae010fe Binary files /dev/null and b/mods/digilines/textures/_z.png differ diff --git a/mods/digilines/textures/_z_.png b/mods/digilines/textures/_z_.png new file mode 100644 index 0000000..1c3e053 Binary files /dev/null and b/mods/digilines/textures/_z_.png differ diff --git a/mods/digilines/textures/digiline_std.png b/mods/digilines/textures/digiline_std.png new file mode 100644 index 0000000..721797c Binary files /dev/null and b/mods/digilines/textures/digiline_std.png differ diff --git a/mods/digilines/textures/digiline_std_bump.png b/mods/digilines/textures/digiline_std_bump.png new file mode 100644 index 0000000..068a4a9 Binary files /dev/null and b/mods/digilines/textures/digiline_std_bump.png differ diff --git a/mods/digilines/textures/digiline_std_inv.png b/mods/digilines/textures/digiline_std_inv.png new file mode 100644 index 0000000..f66f6c7 Binary files /dev/null and b/mods/digilines/textures/digiline_std_inv.png differ diff --git a/mods/digilines/textures/digiline_std_vertical.png b/mods/digilines/textures/digiline_std_vertical.png new file mode 100644 index 0000000..1de0ead Binary files /dev/null and b/mods/digilines/textures/digiline_std_vertical.png differ diff --git a/mods/digilines/textures/digilines_lightsensor.png b/mods/digilines/textures/digilines_lightsensor.png new file mode 100644 index 0000000..aa88495 Binary files /dev/null and b/mods/digilines/textures/digilines_lightsensor.png differ diff --git a/mods/digilines/textures/digilines_rtc.png b/mods/digilines/textures/digilines_rtc.png new file mode 100644 index 0000000..a7b1d84 Binary files /dev/null and b/mods/digilines/textures/digilines_rtc.png differ diff --git a/mods/digilines/textures/lcd_anyside.png b/mods/digilines/textures/lcd_anyside.png new file mode 100644 index 0000000..fe88e8d Binary files /dev/null and b/mods/digilines/textures/lcd_anyside.png differ diff --git a/mods/digilines/textures/lcd_lcd.png b/mods/digilines/textures/lcd_lcd.png new file mode 100644 index 0000000..c959fa1 Binary files /dev/null and b/mods/digilines/textures/lcd_lcd.png differ diff --git a/mods/digilines/util.lua b/mods/digilines/util.lua new file mode 100644 index 0000000..ac15fab --- /dev/null +++ b/mods/digilines/util.lua @@ -0,0 +1,156 @@ +function digilines.addPosRule(p, r) + return {x = p.x + r.x, y = p.y + r.y, z = p.z + r.z} +end + +function digilines.cmpPos(p1, p2) + return (p1.x == p2.x and p1.y == p2.y and p1.z == p2.z) +end + +--Rules rotation Functions: +function digilines.rotate_rules_right(rules) + local nr={} + for i, rule in ipairs(rules) do + nr[i]={} + nr[i].z=rule.x + nr[i].x=-rule.z + nr[i].y=rule.y + end + return nr +end + +function digilines.rotate_rules_left(rules) + local nr={} + for i, rule in ipairs(rules) do + nr[i]={} + nr[i].z=-rule.x + nr[i].x=rule.z + nr[i].y=rule.y + end + return nr +end + +function digilines.rotate_rules_down(rules) + local nr={} + for i, rule in ipairs(rules) do + nr[i]={} + nr[i].y=rule.x + nr[i].x=-rule.y + nr[i].z=rule.z + end + return nr +end + +function digilines.rotate_rules_up(rules) + local nr={} + for i, rule in ipairs(rules) do + nr[i]={} + nr[i].y=-rule.x + nr[i].x=rule.y + nr[i].z=rule.z + end + return nr +end + +function digilines.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] = digilines.tablecopy(item) + else + newtable[idx] = item + end + end + + return newtable +end + + + +-- VoxelManipulator-based node access functions: + +-- Maps from a hashed mapblock position (as returned by hash_blockpos) to a +-- table. +-- +-- Contents of the table are: +-- “va” → the VoxelArea +-- “data” → the data array +-- “param1” → the param1 array +-- “param2” → the param2 array +-- +-- Nil if no bulk-VM operation is in progress. +local vm_cache = nil + +-- Starts a bulk-VoxelManipulator operation. +-- +-- During a bulk-VoxelManipulator operation, calls to get_node_force operate +-- directly on VM-loaded arrays, which should be faster for reading many nodes +-- in rapid succession. However, the cache must be flushed with vm_end once the +-- scan is finished, to avoid using stale data in future. +function digilines.vm_begin() + vm_cache = {} +end + +-- Ends a bulk-VoxelManipulator operation, freeing the cached data. +function digilines.vm_end() + vm_cache = nil +end + +-- The dimension of a mapblock in nodes. +local MAPBLOCKSIZE = 16 + +-- Converts a node position into a hash of a mapblock position. +local function vm_hash_blockpos(pos) + return minetest.hash_node_position({ + x = math.floor(pos.x / MAPBLOCKSIZE), + y = math.floor(pos.y / MAPBLOCKSIZE), + z = math.floor(pos.z / MAPBLOCKSIZE) + }) +end + +-- Gets the cache entry covering a position, populating it if necessary. +local function vm_get_or_create_entry(pos) + local hash = vm_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 = {va = va, data = vm:get_data(), param1 = vm:get_light_data(), param2 = vm:get_param2_data()} + vm_cache[hash] = tbl + end + return tbl +end + +-- Gets the node at a position during a bulk-VoxelManipulator operation. +local function vm_get_node(pos) + local tbl = vm_get_or_create_entry(pos) + local index = tbl.va:indexp(pos) + local node_value = tbl.data[index] + 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 + +-- Gets the node at a given position, regardless of whether it is loaded or +-- not. +-- +-- Outside a bulk-VoxelManipulator operation, if the mapblock is not loaded, it +-- is pulled into the server’s main map data cache and then accessed from +-- there. +-- +-- Inside a bulk-VoxelManipulator operation, the operation’s VM cache is used. +function digilines.get_node_force(pos) + if vm_cache then + return vm_get_node(pos) + end + local node = minetest.get_node(pos) + if node.name == "ignore" 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(pos) + end + return node +end diff --git a/mods/digilines/wire_std.lua b/mods/digilines/wire_std.lua new file mode 100644 index 0000000..177e795 --- /dev/null +++ b/mods/digilines/wire_std.lua @@ -0,0 +1,121 @@ +-- naming scheme: wire:(xp)(zp)(xm)(zm)_on/off +-- The conditions in brackets define whether there is a digiline at that place or not +-- 1 = there is one; 0 = there is none +-- y always means y+ + +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 box_bump2 = { -3/32, -13/32, -3/32, 3/32, -12/32, 3/32 } + +local box_xp = {1/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} +local box_zp = {-1/16, -.5, 1/16, 1/16, -.5+1/16, 8/16} +local box_xm = {-8/16, -.5, -1/16, -1/16, -.5+1/16, 1/16} +local box_zm = {-1/16, -.5, -8/16, 1/16, -.5+1/16, -1/16} + +local box_xpy = {.5-1/16, -.5+1/16, -1/16, .5, .4999+1/16, 1/16} +local box_zpy = {-1/16, -.5+1/16, .5-1/16, 1/16, .4999+1/16, .5} +local box_xmy = {-.5, -.5+1/16, -1/16, -.5+1/16, .4999+1/16, 1/16} +local box_zmy = {-1/16, -.5+1/16, -.5, 1/16, .4999+1/16, -.5+1/16} + +for xp=0, 1 do +for zp=0, 1 do +for xm=0, 1 do +for zm=0, 1 do +for xpy=0, 1 do +for zpy=0, 1 do +for xmy=0, 1 do +for zmy=0, 1 do + if (xpy == 1 and xp == 0) or (zpy == 1 and zp == 0) + or (xmy == 1 and xm == 0) or (zmy == 1 and zm == 0) then break end + + local groups + local nodeid = tostring(xp )..tostring(zp )..tostring(xm )..tostring(zm ).. + tostring(xpy)..tostring(zpy)..tostring(xmy)..tostring(zmy) + + local wiredesc + + if nodeid == "00000000" then + groups = {dig_immediate = 3} + wiredesc = "Digiline" + else + groups = {dig_immediate = 3, not_in_creative_inventory = 1} + end + + local nodebox = {} + local adjx = false + local adjz = false + if xp == 1 then table.insert(nodebox, box_xp) adjx = true end + if zp == 1 then table.insert(nodebox, box_zp) adjz = true end + if xm == 1 then table.insert(nodebox, box_xm) adjx = true end + if zm == 1 then table.insert(nodebox, box_zm) adjz = true end + if xpy == 1 then table.insert(nodebox, box_xpy) end + if zpy == 1 then table.insert(nodebox, box_zpy) end + if xmy == 1 then table.insert(nodebox, box_xmy) end + if zmy == 1 then table.insert(nodebox, box_zmy) end + + local tiles + if adjx and adjz and (xp + zp + xm + zm > 2) then + table.insert(nodebox, box_bump1) + table.insert(nodebox, box_bump2) + tiles = { + "digiline_std_bump.png", + "digiline_std_bump.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png" + } + else + table.insert(nodebox, box_center) + tiles = { + "digiline_std.png", + "digiline_std.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png", + "digiline_std_vertical.png" + } + end + + if nodeid == "00000000" then + nodebox = {-8/16, -.5, -1/16, 8/16, -.5+1/16, 1/16} + end + + minetest.register_node("digilines:wire_std_"..nodeid, { + description = wiredesc, + drawtype = "nodebox", + tiles = tiles, + inventory_image = "digiline_std_inv.png", + wield_image = "digiline_std_inv.png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + digiline = + { + wire = + { + basename = "digilines:wire_std_", + use_autoconnect = true + } + }, + selection_box = { + type = "fixed", + fixed = {-.5, -.5, -.5, .5, -.5+1/16, .5} + }, + node_box = { + type = "fixed", + fixed = nodebox + }, + groups = groups, + walkable = false, + stack_max = 99, + drop = "digilines:wire_std_00000000" + }) +end +end +end +end +end +end +end +end diff --git a/mods/digilines/wires_common.lua b/mods/digilines/wires_common.lua new file mode 100644 index 0000000..8ac1d29 --- /dev/null +++ b/mods/digilines/wires_common.lua @@ -0,0 +1,88 @@ +minetest.register_on_placenode(function(pos, node) + if minetest.registered_nodes[node.name].digiline then + digilines.update_autoconnect(pos) + end +end) + +minetest.register_on_dignode(function(pos, node) + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].digiline then +-- need to make sure that node exists (unknown nodes!) + digilines.update_autoconnect(pos) + end +end) + +function digilines.update_autoconnect(pos, secondcall) + local xppos = {x=pos.x+1, y=pos.y, z=pos.z} + local zppos = {x=pos.x, y=pos.y, z=pos.z+1} + local xmpos = {x=pos.x-1, y=pos.y, z=pos.z} + local zmpos = {x=pos.x, y=pos.y, z=pos.z-1} + local xpympos = {x=pos.x+1, y=pos.y-1, z=pos.z} + local zpympos = {x=pos.x, y=pos.y-1, z=pos.z+1} + local xmympos = {x=pos.x-1, y=pos.y-1, z=pos.z} + local zmympos = {x=pos.x, y=pos.y-1, z=pos.z-1} + local xpypos = {x=pos.x+1, y=pos.y+1, z=pos.z} + local zpypos = {x=pos.x, y=pos.y+1, z=pos.z+1} + local xmypos = {x=pos.x-1, y=pos.y+1, z=pos.z} + local zmypos = {x=pos.x, y=pos.y+1, z=pos.z-1} + + if secondcall == nil then + digilines.update_autoconnect(xppos, true) + digilines.update_autoconnect(zppos, true) + digilines.update_autoconnect(xmpos, true) + digilines.update_autoconnect(zmpos, true) + + digilines.update_autoconnect(xpypos, true) + digilines.update_autoconnect(zpypos, true) + digilines.update_autoconnect(xmypos, true) + digilines.update_autoconnect(zmypos, true) + + digilines.update_autoconnect(xpympos, true) + digilines.update_autoconnect(zpympos, true) + digilines.update_autoconnect(xmympos, true) + digilines.update_autoconnect(zmympos, true) + end + + local def = minetest.registered_nodes[minetest.get_node(pos).name] + local digilinespec = def and def.digiline + if not (digilinespec and digilinespec.wire and + digilinespec.wire.use_autoconnect) then + return nil + end + + local zmg = digilines.rules_link_anydir(pos, zmpos) + local zmymg = digilines.rules_link_anydir(pos, zmympos) + local xmg = digilines.rules_link_anydir(pos, xmpos) + local xmymg = digilines.rules_link_anydir(pos, xmympos) + local zpg = digilines.rules_link_anydir(pos, zppos) + local zpymg = digilines.rules_link_anydir(pos, zpympos) + local xpg = digilines.rules_link_anydir(pos, xppos) + local xpymg = digilines.rules_link_anydir(pos, xpympos) + + + local xpyg = digilines.rules_link_anydir(pos, xpypos) + local zpyg = digilines.rules_link_anydir(pos, zpypos) + local xmyg = digilines.rules_link_anydir(pos, xmypos) + local zmyg = digilines.rules_link_anydir(pos, zmypos) + + local zm, xm, zp, xp, xpy, zpy, xmy, zmy + if zmg or zmymg then zm = 1 else zm = 0 end + if xmg or xmymg then xm = 1 else xm = 0 end + if zpg or zpymg then zp = 1 else zp = 0 end + if xpg or xpymg then xp = 1 else xp = 0 end + + if xpyg then xpy = 1 else xpy = 0 end + if zpyg then zpy = 1 else zpy = 0 end + if xmyg then xmy = 1 else xmy = 0 end + if zmyg then zmy = 1 else zmy = 0 end + + if xpy == 1 then xp = 1 end + if zpy == 1 then zp = 1 end + if xmy == 1 then xm = 1 end + if zmy == 1 then zm = 1 end + + local nodeid = tostring(xp )..tostring(zp )..tostring(xm )..tostring(zm ).. + tostring(xpy)..tostring(zpy)..tostring(xmy)..tostring(zmy) + + + minetest.set_node(pos, {name = digilinespec.wire.basename..nodeid}) +end diff --git a/mods/doors/README.txt b/mods/doors/README.txt new file mode 100644 index 0000000..9ad7093 --- /dev/null +++ b/mods/doors/README.txt @@ -0,0 +1,84 @@ +Minetest Game mod: doors +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by PilzAdam (MIT) + +Modified by BlockMen (MIT): Added sounds, glass doors (glass, obsidian glass) and trapdoor. + +Modified by sofar (sofar@foo-projects.org) (MIT): +Added Steel trapdoor. +Re-implemented most of the door algorithms, added meshes, UV wrapped texture. +Added doors API to facilitate coding mods accessing and operating doors. +Added Fence Gate model, code, and sounds. + +Various Minetest developers and contributors (MIT) + + +Authors of media (textures) +--------------------------- +Following textures created by Fernando Zapata (CC BY-SA 3.0): + door_wood.png + door_wood_a.png + door_wood_a_r.png + door_wood_b.png + door_wood_b_r.png + +Following textures created by BlockMen (CC BY-SA 3.0): + door_trapdoor.png + door_obsidian_glass_side.png + +Following textures created by celeron55 (CC BY-SA 3.0): + door_glass_a.png + door_glass_b.png + +Following textures created by PenguinDad (CC BY-SA 4.0): + door_glass.png + door_obsidian_glass.png + +Following textures created by sofar (CC-BY-SA-3.0): + doors_trapdoor_steel.png + doors_trapdoor_steel_side.png + door_trapdoor_side.png + +Obsidian door textures by red-001 based on textures by Pilzadam and BlockMen (CC BY-SA 3.0): + door_obsidian_glass.png + +Glass door textures by red-001 based on textures by celeron55 (CC BY-SA 3.0): + door_glass.png + +All other textures (created by PilzAdam) (CC BY-SA 3.0): + +Door textures were converted to the new texture map by sofar, paramat and +red-001, under the same license as the originals. + + +Authors of media (models) +------------------------- +Door 3d models by sofar (CC-BY-SA-3.0) + - door_a.obj + - door_b.obj +Fence gate models by sofar (CC-BY-SA-3.0) + - fencegate_open.obj + - fencegate_closed.obj + + +Authors of media (sounds) +------------------------- +Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen + door_open.ogg +Closing-Sound created by bennstir (CC BY 3.0) + door_close.ogg +fencegate_open.ogg: + http://www.freesound.org/people/mhtaylor67/sounds/126041/ - (CC0 1.0) +fencegate_close.ogg: + http://www.freesound.org/people/BarkersPinhead/sounds/274807/ - (CC-BY-3.0) + http://www.freesound.org/people/rivernile7/sounds/249573/ - (CC-BY-3.0) +Steel door sounds open & close (CC-BY-3.0) by HazMatt + - http://www.freesound.org/people/HazMattt/sounds/187283/ + doors_steel_door_open.ogg + doors_steel_door_close.ogg +doors_glass_door_open.ogg, doors_glass_door_close.ogg: + https://www.freesound.org/people/SkeetMasterFunk69/sounds/235546/ (CC0 1.0) diff --git a/mods/doors/depends.txt b/mods/doors/depends.txt new file mode 100644 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 100644 index 0000000..41e8b21 --- /dev/null +++ b/mods/doors/init.lua @@ -0,0 +1,859 @@ +-- 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 + 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 = {}, + 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 = "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} +}) + + +----fuels---- + +minetest.register_craft({ + type = "fuel", + recipe = "doors:trapdoor", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:door_wood", + burntime = 14, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_wood_closed", + burntime = 7, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_acacia_wood_closed", + burntime = 8, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_junglewood_closed", + burntime = 9, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_pine_wood_closed", + burntime = 6, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "doors:gate_aspen_wood_closed", + burntime = 5, +}) diff --git a/mods/doors/license.txt b/mods/doors/license.txt new file mode 100644 index 0000000..8ce73c4 --- /dev/null +++ b/mods/doors/license.txt @@ -0,0 +1,164 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2015-2016 sofar (sofar@foo-projects.org) +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, models and sounds) +----------------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2011-2016 Fernando Zapata +Copyright (C) 2014-2016 celeron55 +Copyright (C) 2012-2016 PilzAdam +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2015-2016 sofar +Copyright (C) 2016 red-001 +Copyright (C) 2016 paramat + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +Copyright (C) 2014-2016 PenguinDad + +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/4.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2014 CGEffex +Copyright (C) 2014 bennstir +Copyright (C) 2016 BarkersPinhead +Copyright (C) 2016 rivernile7 +Copyright (C) 2016 HazMatt + +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 +mhtaylor67 +SkeetMasterFunk69 + +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/doors/models/door_a.obj b/mods/doors/models/door_a.obj new file mode 100644 index 0000000..bd5127b --- /dev/null +++ b/mods/doors/models/door_a.obj @@ -0,0 +1,40 @@ +# Blender v2.76 (sub 0) OBJ File: 'door_a.blend' +# www.blender.org +mtllib door_a.mtl +o Cube_Cube.001 +v 0.499000 -0.499000 -0.499000 +v 0.499000 1.499000 -0.499000 +v 0.499000 -0.499000 -0.375000 +v 0.499000 1.499000 -0.375000 +v -0.499000 -0.499000 -0.499000 +v -0.499000 1.499000 -0.499000 +v -0.499000 -0.499000 -0.375000 +v -0.499000 1.499000 -0.375000 +vt 0.842105 1.000000 +vt 0.894737 1.000000 +vt 0.894737 0.000000 +vt 0.842105 0.000000 +vt 0.421053 1.000000 +vt 0.421053 0.000000 +vt 0.947368 1.000000 +vt 0.947368 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.500000 +vt 0.947368 0.500000 +vt 1.000000 1.000000 +vt 1.000000 0.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 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/5/2 8/1/2 7/4/2 3/6/2 +f 8/2/3 6/7/3 5/8/3 7/3/3 +f 6/9/4 2/5/4 1/6/4 5/10/4 +f 1/11/5 3/12/5 7/7/5 5/13/5 +f 6/14/6 8/8/6 4/12/6 2/11/6 diff --git a/mods/doors/models/door_b.obj b/mods/doors/models/door_b.obj new file mode 100644 index 0000000..c5607b8 --- /dev/null +++ b/mods/doors/models/door_b.obj @@ -0,0 +1,40 @@ +# Blender v2.76 (sub 0) OBJ File: 'door_b.blend' +# www.blender.org +mtllib door_b.mtl +o Cube_Cube.001 +v -0.499000 -0.499000 -0.499000 +v -0.499000 1.499000 -0.499000 +v -0.499000 -0.499000 -0.375000 +v -0.499000 1.499000 -0.375000 +v 0.499000 -0.499000 -0.499000 +v 0.499000 1.499000 -0.499000 +v 0.499000 -0.499000 -0.375000 +v 0.499000 1.499000 -0.375000 +vt 0.842105 1.000000 +vt 0.842105 0.000000 +vt 0.894737 0.000000 +vt 0.894737 1.000000 +vt 0.421053 1.000000 +vt 0.421053 0.000000 +vt 0.947368 0.000000 +vt 0.947368 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.500000 +vt 0.947368 0.500000 +vt 1.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 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +usemtl None +s off +f 2/1/1 1/2/1 3/3/1 4/4/1 +f 4/5/2 3/6/2 7/2/2 8/1/2 +f 8/4/3 7/3/3 5/7/3 6/8/3 +f 6/9/4 5/10/4 1/6/4 2/5/4 +f 1/11/5 5/12/5 7/13/5 3/7/5 +f 6/8/6 2/13/6 4/12/6 8/14/6 diff --git a/mods/doors/models/doors_fencegate_closed.obj b/mods/doors/models/doors_fencegate_closed.obj new file mode 100644 index 0000000..0050f70 --- /dev/null +++ b/mods/doors/models/doors_fencegate_closed.obj @@ -0,0 +1,106 @@ +# Blender v2.76 (sub 0) OBJ File: 'gate_closed.blend' +# www.blender.org +mtllib gate_closed.mtl +o Cube_Cube.001 +v -0.625000 -0.500000 0.125000 +v -0.625000 0.500100 0.125000 +v -0.625000 -0.500000 -0.125000 +v -0.625000 0.500100 -0.125000 +v -0.375000 -0.500000 0.125000 +v -0.375000 0.500100 0.125000 +v -0.375000 -0.500000 -0.125000 +v -0.375000 0.500100 -0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 0.500100 0.125000 +v 0.375000 -0.500000 -0.125000 +v 0.375000 0.500100 -0.125000 +v 0.625000 -0.500000 0.125000 +v 0.625000 0.500100 0.125000 +v 0.625000 -0.500000 -0.125000 +v 0.625000 0.500100 -0.125000 +v -0.375000 0.187500 0.062500 +v -0.375000 0.312500 0.062500 +v -0.375000 0.187500 -0.062500 +v -0.375000 0.312500 -0.062500 +v 0.375000 0.187500 0.062500 +v 0.375000 0.312500 0.062500 +v 0.375000 0.187500 -0.062500 +v 0.375000 0.312500 -0.062500 +v -0.374831 0.187348 0.062500 +v -0.156342 0.187363 0.062500 +v -0.374831 0.187348 -0.062500 +v -0.156342 0.187363 -0.062500 +v 0.374981 -0.343683 0.062500 +v 0.375065 -0.187304 0.062500 +v 0.374981 -0.343683 -0.062500 +v 0.375065 -0.187304 -0.062500 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt -0.000000 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.750000 +vt 0.250000 1.000000 +vt 0.500000 -0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.750000 +vt 0.500000 1.000000 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt -0.000000 0.687500 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 1.000000 0.687500 +vt 0.813740 0.249033 +vt 0.201557 0.249293 +vt 0.120995 0.125498 +vt 0.987404 0.125469 +vt 0.125000 0.375000 +vt 0.812500 0.375000 +vt 0.937500 0.500000 +vt 0.062500 0.500000 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.312500 0.437500 +vt 0.312500 0.312500 +vt 1.000000 0.312500 +vt 1.000000 0.437500 +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.578000 -0.816100 0.000000 +vn 0.576200 0.817300 0.000000 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/4/2 8/5/2 7/6/2 3/1/2 +f 8/7/3 6/8/3 5/9/3 7/10/3 +f 6/2/4 2/9/4 1/8/4 5/3/4 +f 1/9/5 3/10/5 7/11/5 5/12/5 +f 6/6/6 8/1/6 4/13/6 2/14/6 +f 10/1/1 12/2/1 11/3/1 9/4/1 +f 12/2/2 16/9/2 15/8/2 11/3/2 +f 16/7/3 14/8/3 13/9/3 15/10/3 +f 14/4/4 10/5/4 9/6/4 13/1/4 +f 9/12/5 11/11/5 15/15/5 13/16/5 +f 14/14/6 16/13/6 12/17/6 10/18/6 +f 20/2/2 24/3/2 23/19/2 19/20/2 +f 22/1/4 18/4/4 17/21/4 21/22/4 +f 17/23/5 19/24/5 23/25/5 21/26/5 +f 22/21/6 24/5/6 20/6/6 18/22/6 +f 28/27/2 32/28/2 31/29/2 27/30/2 +f 30/31/4 26/32/4 25/33/4 29/34/4 +f 25/35/7 27/10/7 31/7/7 29/36/7 +f 30/37/8 32/38/8 28/39/8 26/40/8 diff --git a/mods/doors/models/doors_fencegate_open.obj b/mods/doors/models/doors_fencegate_open.obj new file mode 100644 index 0000000..3fb727f --- /dev/null +++ b/mods/doors/models/doors_fencegate_open.obj @@ -0,0 +1,112 @@ +# Blender v2.76 (sub 0) OBJ File: 'gate_open.blend' +# www.blender.org +mtllib gate_open.mtl +o Cube_Cube.001 +v -0.625000 -0.500000 0.125000 +v -0.625000 0.500100 0.125000 +v -0.625000 -0.500000 -0.125000 +v -0.625000 0.500100 -0.125000 +v -0.375000 -0.500000 0.125000 +v -0.375000 0.500100 0.125000 +v -0.375000 -0.500000 -0.125000 +v -0.375000 0.500100 -0.125000 +v 0.375000 -0.500000 0.125000 +v 0.375000 0.500100 0.125000 +v 0.375000 -0.500000 -0.125000 +v 0.375000 0.500100 -0.125000 +v 0.625000 -0.500000 0.125000 +v 0.625000 0.500100 0.125000 +v 0.625000 -0.500000 -0.125000 +v 0.625000 0.500100 -0.125000 +v 0.434859 0.187500 -0.872359 +v 0.434859 0.312500 -0.872359 +v 0.559859 0.187500 -0.872359 +v 0.559859 0.312500 -0.872359 +v 0.434859 0.187500 -0.122359 +v 0.434859 0.312500 -0.122359 +v 0.559859 0.187500 -0.122359 +v 0.559859 0.312500 -0.122359 +v 0.434859 0.187348 -0.872190 +v 0.434859 0.187363 -0.653701 +v 0.559859 0.187348 -0.872190 +v 0.559859 0.187363 -0.653701 +v 0.434859 -0.343683 -0.122379 +v 0.434859 -0.187304 -0.122294 +v 0.559859 -0.343683 -0.122379 +v 0.559859 -0.187304 -0.122294 +v 0.499560 -0.442900 0.005495 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 1.000000 -0.000000 +vt 1.000000 0.250000 +vt 0.000000 0.250000 +vt -0.000000 0.000000 +vt 0.250000 0.000000 +vt 0.250000 0.250000 +vt 0.250000 0.750000 +vt 0.250000 1.000000 +vt 0.500000 -0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.750000 +vt 0.500000 1.000000 +vt 1.000000 0.625000 +vt 0.000000 0.625000 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt -0.000000 0.687500 +vt 0.000000 0.562500 +vt 1.000000 0.562500 +vt 1.000000 0.687500 +vt 0.813740 0.249033 +vt 0.201557 0.249293 +vt 0.120995 0.125498 +vt 0.987404 0.125469 +vt 0.125000 0.375000 +vt 0.812500 0.375000 +vt 0.937500 0.500000 +vt 0.062500 0.500000 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.312500 0.437500 +vt 0.312500 0.312500 +vt 1.000000 0.312500 +vt 1.000000 0.437500 +vt 0.312500 0.625000 +vt 0.312500 0.500000 +vt 0.187500 0.500000 +vt 0.187500 0.625000 +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.000000 -0.816100 -0.578000 +vn 0.000000 0.817300 0.576200 +usemtl None +s off +f 2/1/1 4/2/1 3/3/1 1/4/1 +f 4/4/2 8/5/2 7/6/2 3/1/2 +f 8/7/3 6/8/3 5/9/3 7/10/3 +f 6/2/4 2/9/4 1/8/4 5/3/4 +f 1/9/5 3/10/5 7/11/5 5/12/5 +f 6/6/6 8/1/6 4/13/6 2/14/6 +f 10/1/1 12/2/1 11/3/1 9/4/1 +f 12/2/2 16/9/2 15/8/2 11/3/2 +f 16/7/3 14/8/3 13/9/3 15/10/3 +f 14/4/4 10/5/4 9/6/4 13/1/4 +f 9/12/5 11/11/5 15/15/5 13/16/5 +f 14/14/6 16/13/6 12/17/6 10/18/6 +f 20/2/3 24/3/3 23/19/3 19/20/3 +f 22/1/1 18/4/1 17/21/1 21/22/1 +f 17/23/5 19/24/5 23/25/5 21/26/5 +f 22/21/6 24/5/6 20/6/6 18/22/6 +f 28/27/3 32/28/3 31/29/3 27/30/3 +f 30/31/1 26/32/1 25/33/1 29/34/1 +f 25/35/7 27/10/7 31/7/7 29/36/7 +f 30/37/8 32/38/8 28/39/8 26/40/8 +f 17/41/2 18/42/2 20/43/2 19/44/2 diff --git a/mods/doors/sounds/doors_door_close.ogg b/mods/doors/sounds/doors_door_close.ogg new file mode 100644 index 0000000..fede4af Binary files /dev/null and b/mods/doors/sounds/doors_door_close.ogg differ diff --git a/mods/doors/sounds/doors_door_open.ogg b/mods/doors/sounds/doors_door_open.ogg new file mode 100644 index 0000000..9a4c4f1 Binary files /dev/null and b/mods/doors/sounds/doors_door_open.ogg differ diff --git a/mods/doors/sounds/doors_fencegate_close.ogg b/mods/doors/sounds/doors_fencegate_close.ogg new file mode 100644 index 0000000..d42590f Binary files /dev/null and b/mods/doors/sounds/doors_fencegate_close.ogg differ diff --git a/mods/doors/sounds/doors_fencegate_open.ogg b/mods/doors/sounds/doors_fencegate_open.ogg new file mode 100644 index 0000000..f6dfd1d Binary files /dev/null and b/mods/doors/sounds/doors_fencegate_open.ogg differ diff --git a/mods/doors/sounds/doors_glass_door_close.ogg b/mods/doors/sounds/doors_glass_door_close.ogg new file mode 100644 index 0000000..b3c1355 Binary files /dev/null and b/mods/doors/sounds/doors_glass_door_close.ogg differ diff --git a/mods/doors/sounds/doors_glass_door_open.ogg b/mods/doors/sounds/doors_glass_door_open.ogg new file mode 100644 index 0000000..66e6812 Binary files /dev/null and b/mods/doors/sounds/doors_glass_door_open.ogg differ diff --git a/mods/doors/sounds/doors_steel_door_close.ogg b/mods/doors/sounds/doors_steel_door_close.ogg new file mode 100644 index 0000000..aea7be6 Binary files /dev/null and b/mods/doors/sounds/doors_steel_door_close.ogg differ diff --git a/mods/doors/sounds/doors_steel_door_open.ogg b/mods/doors/sounds/doors_steel_door_open.ogg new file mode 100644 index 0000000..de87477 Binary files /dev/null and b/mods/doors/sounds/doors_steel_door_open.ogg differ diff --git a/mods/doors/textures/doors_blank.png b/mods/doors/textures/doors_blank.png new file mode 100644 index 0000000..1914264 Binary files /dev/null and b/mods/doors/textures/doors_blank.png differ diff --git a/mods/doors/textures/doors_door_glass.png b/mods/doors/textures/doors_door_glass.png new file mode 100644 index 0000000..26c427b Binary files /dev/null and b/mods/doors/textures/doors_door_glass.png differ diff --git a/mods/doors/textures/doors_door_obsidian_glass.png b/mods/doors/textures/doors_door_obsidian_glass.png new file mode 100644 index 0000000..07ac5b2 Binary files /dev/null and b/mods/doors/textures/doors_door_obsidian_glass.png differ diff --git a/mods/doors/textures/doors_door_steel.png b/mods/doors/textures/doors_door_steel.png new file mode 100644 index 0000000..f42f335 Binary files /dev/null and b/mods/doors/textures/doors_door_steel.png differ diff --git a/mods/doors/textures/doors_door_wood.png b/mods/doors/textures/doors_door_wood.png new file mode 100644 index 0000000..7b18203 Binary files /dev/null and b/mods/doors/textures/doors_door_wood.png differ diff --git a/mods/doors/textures/doors_item_glass.png b/mods/doors/textures/doors_item_glass.png new file mode 100644 index 0000000..791a58a Binary files /dev/null and b/mods/doors/textures/doors_item_glass.png differ diff --git a/mods/doors/textures/doors_item_obsidian_glass.png b/mods/doors/textures/doors_item_obsidian_glass.png new file mode 100644 index 0000000..1026d43 Binary files /dev/null and b/mods/doors/textures/doors_item_obsidian_glass.png differ diff --git a/mods/doors/textures/doors_item_steel.png b/mods/doors/textures/doors_item_steel.png new file mode 100644 index 0000000..dd99e13 Binary files /dev/null and b/mods/doors/textures/doors_item_steel.png differ diff --git a/mods/doors/textures/doors_item_wood.png b/mods/doors/textures/doors_item_wood.png new file mode 100644 index 0000000..d3a62ab Binary files /dev/null and b/mods/doors/textures/doors_item_wood.png differ diff --git a/mods/doors/textures/doors_trapdoor.png b/mods/doors/textures/doors_trapdoor.png new file mode 100644 index 0000000..e92c8b2 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor.png differ diff --git a/mods/doors/textures/doors_trapdoor_side.png b/mods/doors/textures/doors_trapdoor_side.png new file mode 100644 index 0000000..c45d870 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_side.png differ diff --git a/mods/doors/textures/doors_trapdoor_steel.png b/mods/doors/textures/doors_trapdoor_steel.png new file mode 100644 index 0000000..4ba507d Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel.png differ diff --git a/mods/doors/textures/doors_trapdoor_steel_side.png b/mods/doors/textures/doors_trapdoor_steel_side.png new file mode 100644 index 0000000..44c4344 Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel_side.png differ diff --git a/mods/dye/README.txt b/mods/dye/README.txt new file mode 100644 index 0000000..a2fbdd2 --- /dev/null +++ b/mods/dye/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: dye +====================== +See license.txt for license information. +See init.lua for documentation. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Perttu Ahola (celeron55) (CC BY-SA 3.0) diff --git a/mods/dye/depends.txt b/mods/dye/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/dye/init.lua b/mods/dye/init.lua new file mode 100644 index 0000000..8028457 --- /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/dye/license.txt b/mods/dye/license.txt new file mode 100644 index 0000000..bf9d350 --- /dev/null +++ b/mods/dye/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/dye/textures/dye_black.png b/mods/dye/textures/dye_black.png new file mode 100644 index 0000000..1055b6c Binary files /dev/null and b/mods/dye/textures/dye_black.png differ diff --git a/mods/dye/textures/dye_blue.png b/mods/dye/textures/dye_blue.png new file mode 100644 index 0000000..d1377c6 Binary files /dev/null and b/mods/dye/textures/dye_blue.png differ diff --git a/mods/dye/textures/dye_brown.png b/mods/dye/textures/dye_brown.png new file mode 100644 index 0000000..77d475c Binary files /dev/null and b/mods/dye/textures/dye_brown.png differ diff --git a/mods/dye/textures/dye_cyan.png b/mods/dye/textures/dye_cyan.png new file mode 100644 index 0000000..239d66c Binary files /dev/null and b/mods/dye/textures/dye_cyan.png differ diff --git a/mods/dye/textures/dye_dark_green.png b/mods/dye/textures/dye_dark_green.png new file mode 100644 index 0000000..9606ccf Binary files /dev/null and b/mods/dye/textures/dye_dark_green.png differ diff --git a/mods/dye/textures/dye_dark_grey.png b/mods/dye/textures/dye_dark_grey.png new file mode 100644 index 0000000..060737b Binary files /dev/null and b/mods/dye/textures/dye_dark_grey.png differ diff --git a/mods/dye/textures/dye_green.png b/mods/dye/textures/dye_green.png new file mode 100644 index 0000000..0d99ee1 Binary files /dev/null and b/mods/dye/textures/dye_green.png differ diff --git a/mods/dye/textures/dye_grey.png b/mods/dye/textures/dye_grey.png new file mode 100644 index 0000000..5efb028 Binary files /dev/null and b/mods/dye/textures/dye_grey.png differ diff --git a/mods/dye/textures/dye_magenta.png b/mods/dye/textures/dye_magenta.png new file mode 100644 index 0000000..c84df62 Binary files /dev/null and b/mods/dye/textures/dye_magenta.png differ diff --git a/mods/dye/textures/dye_orange.png b/mods/dye/textures/dye_orange.png new file mode 100644 index 0000000..0844907 Binary files /dev/null and b/mods/dye/textures/dye_orange.png differ diff --git a/mods/dye/textures/dye_pink.png b/mods/dye/textures/dye_pink.png new file mode 100644 index 0000000..c3dec22 Binary files /dev/null and b/mods/dye/textures/dye_pink.png differ diff --git a/mods/dye/textures/dye_red.png b/mods/dye/textures/dye_red.png new file mode 100644 index 0000000..14eafbf Binary files /dev/null and b/mods/dye/textures/dye_red.png differ diff --git a/mods/dye/textures/dye_violet.png b/mods/dye/textures/dye_violet.png new file mode 100644 index 0000000..600cbb4 Binary files /dev/null and b/mods/dye/textures/dye_violet.png differ diff --git a/mods/dye/textures/dye_white.png b/mods/dye/textures/dye_white.png new file mode 100644 index 0000000..2a840a4 Binary files /dev/null and b/mods/dye/textures/dye_white.png differ diff --git a/mods/dye/textures/dye_yellow.png b/mods/dye/textures/dye_yellow.png new file mode 100644 index 0000000..fe75775 Binary files /dev/null and b/mods/dye/textures/dye_yellow.png differ diff --git a/mods/entitycontrol/LICENSE.txt b/mods/entitycontrol/LICENSE.txt new file mode 100644 index 0000000..2db2a18 --- /dev/null +++ b/mods/entitycontrol/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/mods/entitycontrol/README.md b/mods/entitycontrol/README.md new file mode 100644 index 0000000..2d7de0d --- /dev/null +++ b/mods/entitycontrol/README.md @@ -0,0 +1,24 @@ +------------------------------------------------------------------------------------------------------------- +Entity Control Function Library +[entitycontrol] +------------------------------------------------------------------------------------------------------------- + +------------------------------------------------------------------------------------------------------------- +About +------------------------------------------------------------------------------------------------------------- +This mod currently gives two functions: override_entity and unregister_entity. Using override_entity will allow you to change any aspect of the given entity type, while unregister_entity will remove the given entity from Minetest entirely. + +------------------------------------------------------------------------------------------------------------- +Dependencies and Support +------------------------------------------------------------------------------------------------------------- +This mod has no dependencies, and no optional dependencies. It's designed to work alongside and for any mod. + +------------------------------------------------------------------------------------------------------------- +License +------------------------------------------------------------------------------------------------------------- +The Apache 2.0 License is used with this mod. See http://www.apache.org/licenses/LICENSE-2.0 or LICENSE.md for more details. + +------------------------------------------------------------------------------------------------------------- +Installation +------------------------------------------------------------------------------------------------------------- +Download, unzip, and place within the usual mods folder of your version of Minetest, and it will behave in relation to the Minetest engine like any other mod. Then, in your own mod, put "entitycontrol" into your depends.txt (if you don't have one, you can just create one and it'll work automatically) and call the functions in this mod however you like. diff --git a/mods/entitycontrol/init.lua b/mods/entitycontrol/init.lua new file mode 100644 index 0000000..e3b4899 --- /dev/null +++ b/mods/entitycontrol/init.lua @@ -0,0 +1,80 @@ +--[[ + Copyright 2018 Noodlemire + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--]] + +entitycontrol = {} --global variable + +--[[ +Description: + Alters the properties of the given entity according to the given parameters +Parameters: + name: The name of the entity to alter. + redefinition: A list of changes to apply to the given entity. The exact changes can be anything except for its name and type. +Returns: + Nothing +--]] +function entitycontrol.override_entity(name, redefinition) + --Stores the current definition of the entity that has the given name + local entity_to_override = minetest.registered_entities[name] + + --Throw an error if the redefinition tries to rename an entity + if redefinition.name ~= nil then + error("Attempt to redefine name of "..name.." to "..dump(redefinition.name), 2) + end + + --Throw an error if the redefinition tries to turn an entity into something that is not an entity + if redefinition.type ~= nil then + error("Attempt to redefine type of "..name.." to "..dump(redefinition.type), 2) + end + + --Throw an error if there is no entity is known by the given name + if not entity_to_override then + error("Attempt to override non-existent item "..name, 2) + end + + --For each given redefinition, + for i, v in pairs(redefinition) do + --Set the index i of the entity to override to value v + rawset(entity_to_override, i, v) + end + + --Once the entity has been fully overridden, it can be placed back into minetest's list of registered entities in order to finalize the changes. + minetest.registered_entities[name] = entity_to_override +end + +--[[ +Description: + Removes a type of entity from minetest so that it will never be spawned again +Parameters: + name: The name of the entity to remove +Returns: + Nothing +--]] +function entitycontrol.unregister_entity(name) + --Stores the current definition of the entity that has the given name + local entity_to_unregister = minetest.registered_entities[name] + + --If this definition does not exist, neither does the entity. + if not entity_to_unregister then + --Say so in the debug.txt + minetest.log("warning", "Item " ..name.." already does not exist, so it will not be unregistered.") + --And leave since there's nothing to do. + return + end + + --Otherwise, empty out the registration of the name of the entity to unregister. + minetest.registered_entities[name] = nil +end + diff --git a/mods/farming/.gitignore b/mods/farming/.gitignore new file mode 100644 index 0000000..3e88fa7 --- /dev/null +++ b/mods/farming/.gitignore @@ -0,0 +1 @@ +farming.conf diff --git a/mods/farming/README.md b/mods/farming/README.md new file mode 100644 index 0000000..272ff79 --- /dev/null +++ b/mods/farming/README.md @@ -0,0 +1,62 @@ +# Farming Redo Mod +### by TenPlus1 + +https://forum.minetest.net/viewtopic.php?id=9019 + +Farming Redo is a simplified version of the built-in farming mod in minetest and comes with wheat, cotton, carrot, cucumber, potato and tomato to start out with which spawn throughout the map... new foods need only be planted on tilled soil so no seeds are required, original wheat and cotton will require seeds which are found inside normal and jungle grass... + +This mod works by adding your new plant to the {growing=1} group and numbering the stages from _1 to as many stages as you like, but the underscore MUST be used only once in the node name to separate plant from stage number e.g. + +"farming:cotton_1" through to "farming:cotton_8" +"farming:wheat_1" through to "farming:wheat_8" +"farming:cucumber_4" through to "farming:cucumber_4" + +### Changelog: + +- 1.38 - Pumpkin grows into block, use chopping board to cut into slices, same with melon block, cocoa pods are no longer walkable +- 1.37 - Added custom 'growth_check(pos, nodename) function for crop nodes to use (check cocoa.lua for example) +- 1.36 - Added Beetroot, Beetroot Soup (6x beetroot, 1x bowl), fix register_plant() issue, add new recipes +- 1.35 - Deprecated bronze/mese/diamond hoe's, added hoe bomb and deprecated hoe's as lucky block prizes +- 1.34 - Added scarecrow Base (5x sticks in a cross shape) +- 1.33 - Added cooking utensils (wooden bowl, saucepan, cooking pot, baking tray, skillet, cutting board, mortar & pestle, juicer, glass mixing bowl) for easier food crafts. +- 1.32 - Added Pea plant (textures by Andrey01) - also added Wooden Bowl and Pea Soup crafts +- 1.31 - Added Pineapple which can be found growing in savannah areas (place pineapple in crafting to obtain 5x rings to eat and a top for re-planting), also Salt which is made from cooking a bucket of water, added food groups so it's more compatible with Ruben's food mods. +- 1.30 - Added Garlic, Pepper and Onions thanks to Grizzly Adam for sharing textures +- 1.29 - Updating functions so requires Minetest 0.4.16 and above to run +- 1.28 - Added chili peppers and bowl of chili, optimized code and fixed a few bugs, added porridge +- 1.27 - Added meshoptions to api and wheat plants, added farming.rarity setting to spawn more/less crops on map, have separate cotton/string items (4x cotton = 1x wool, 2x cotton = 2x string) +- 1.26 - Added support for [toolranks] mod when using hoe's +- 1.25 - Added check for farming.conf setting file to disable specific crops globally (inside mod folder) or world specific (inside world folder) +- 1.24 - Added Hemp which can be crafted into fibre, paper, string, rope and oil. +- 1.23 - Huge code tweak and tidy done and added barley seeds to be found in dry grass, barley can make flour for bread also. +- 1.22 - Added grape bushes at high climates which can be cultivated into grape vines using trellis (9 sticks). +- 1.21 - Added auto-refill code for planting crops (thanks crabman77), also fixed a few bugs +- 1.20b - Tidied code, made api compatible with new 0.4.13 changes and changed to soil texture overlays +- 1.20 - NEW growing routine added that allows crops to grow while player is away doing other things (thanks prestidigitator) +- 1.14 - Added Green Beans from Crops mod (thanks sofar), little bushels in the wild but need to be grown using beanpoles crafted with 4 sticks (2 either side) +- 1.13 - Fixed seed double-placement glitch. Mapgen now uses 0.4.12+ for plant generation +- 1.12 - Player cannot place seeds in protected area, also growing speeds changed to match defaults +- 1.11 - Added Straw Bale, streamlined growing abm a little, fixed melon rotation bug with screwdriver +- 1.10 - Added Blueberry Bush and Blueberry Muffins, also Pumpkin/Melon easier to pick up, added check for unloaded map +- 1.09 - Corn now uses single nodes instead of 1 ontop of the other, Ethanol recipe is more expensive (requires 5 corn) and some code cleanup. +- 1.08 - Added Farming Plus compatibility, plus can be removed and no more missing nodes +- 1.07 - Added Rhubarb and Rhubarb Pie +- 1.06 - register_hoe and register_plant added for compatibility with default farming mod, although any plants registered will use farming redo to grow +- 1.05 - Added Raspberry Bushels and Raspberry Smoothie +- 1.04 - Added Donuts... normal, chocolate and apple... and a few code cleanups and now compatible with jungletree's from MoreTrees mod +- 1.03 - Bug fixes and more compatibility as drop-in replacement for built-in farming mod +- 1.02 - Added farming.mod string to help other mods identify which farming mod is running, if it returns "redo" then you're using this one, "" empty is built-in mod +- 1.01 - Crafting coffee or ethanol returns empty bucket/bottle, also Cocoa spawns a little rarer +- 1.0 - Added Cocoa which randomly grows on jungle tree's, pods give cocoa beans which can be used to farm more pods on a jungle trunk or make Cookies which have been added (or other treats) +- 0.9 - Added Pumpkin, Jack 'O Lantern, Pumpkin Slice and Sugar (a huge thanks to painterly.net for allowing me to use their textures) +- 0.8 - Added Watermelon and Melon Slice +- 0.7 - Added Coffee, Coffee Beans, Drinking Cup, Cold and Hot Cup of Coffee +- 0.6 - Added Corn, Corn on the Cob... Also reworked Abm +- 0.5 - Added Carrot, Cucumber, Potato (and Baked Potato), Tomato +- 0.4 - Checks for Protection, also performance changes +- 0.3 - Added Diamond and Mese hoe +- 0.2 - Fixed check for wet soil +- 0.1 - Fixed growing bug +- 0.0 - Initial release + +### Lucky Blocks: 30 diff --git a/mods/farming/README.txt b/mods/farming/README.txt new file mode 100644 index 0000000..3ccd8c3 --- /dev/null +++ b/mods/farming/README.txt @@ -0,0 +1,37 @@ +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/farming/api.lua b/mods/farming/api.lua new file mode 100644 index 0000000..1c63ee3 --- /dev/null +++ b/mods/farming/api.lua @@ -0,0 +1,398 @@ + +-- 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", ""} + } + }) + 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 = {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/api.txt b/mods/farming/api.txt new file mode 100644 index 0000000..eda1289 --- /dev/null +++ b/mods/farming/api.txt @@ -0,0 +1,53 @@ +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 + } + +Note: Any crops registered with the above function will use the new growing routines, also if crops are manually added with the {growing=1} group they will also grow. + +### Crop functions + +If a mod registers nodes to be used as crops using the {growing=1} group then an additional function can be used for custom growth checks instead of the standard 'are we above wet soil'. + +growth_check = function(pos, node_name) + -- check surrounding for jungle tree + if minetest.find_node_near(pos, 1, {"default:jungletree"}) then + return false -- place next growth stage + end + return true -- condition not met, skip next growth stage until next check +end, diff --git a/mods/farming/compatibility.lua b/mods/farming/compatibility.lua new file mode 100644 index 0000000..808000d --- /dev/null +++ b/mods/farming/compatibility.lua @@ -0,0 +1,172 @@ + +--= Helpers + +local eth = minetest.get_modpath("ethereal") +local alias = function(orig, new) + minetest.register_alias(orig, new) +end + +--= Overrides (add food_* group to apple and brown mushroom) + +minetest.override_item("default:apple", { + groups = {food_apple = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1}, +}) + +if minetest.registered_nodes["flowers:mushroom_brown"] then +minetest.override_item("flowers:mushroom_brown", { + light_source = 1, + groups = {food_mushroom = 1, snappy = 3, attached_node = 1, flammable = 2}, +}) +end + +--= Aliases + +-- Banana +if eth then + alias("farming_plus:banana_sapling", "ethereal:banana_tree_sapling") + alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + alias("farming_plus:banana", "ethereal:banana") +else + minetest.register_node(":ethereal:banana", { + description = "Banana", + drawtype = "torchlike", + tiles = {"banana_single.png"}, + inventory_image = "banana_single.png", + wield_image = "banana_single.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.5, -0.2, 0.2, 0.2, 0.2} + }, + groups = {food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + }) + + minetest.register_node(":ethereal:bananaleaves", { + description = "Banana Leaves", + tiles = {"banana_leaf.png"}, + inventory_image = "banana_leaf.png", + wield_image = "banana_leaf.png", + paramtype = "light", + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + }) + + alias("farming_plus:banana_sapling", "default:sapling") + alias("farming_plus:banana_leaves", "ethereal:bananaleaves") + alias("farming_plus:banana", "ethereal:banana") +end + +-- Carrot +alias("farming_plus:carrot_seed", "farming:carrot") +alias("farming_plus:carrot_1", "farming:carrot_1") +alias("farming_plus:carrot_2", "farming:carrot_4") +alias("farming_plus:carrot_3", "farming:carrot_6") +alias("farming_plus:carrot", "farming:carrot_8") +alias("farming_plus:carrot_item", "farming:carrot") + +-- Cocoa +alias("farming_plus:cocoa_sapling", "farming:cocoa_beans") +alias("farming_plus:cocoa_leaves", "default:leaves") +alias("farming_plus:cocoa", "default:apple") +alias("farming_plus:cocoa_bean", "farming:cocoa_beans") + +-- Orange +alias("farming_plus:orange_1", "farming:tomato_1") +alias("farming_plus:orange_2", "farming:tomato_4") +alias("farming_plus:orange_3", "farming:tomato_6") + +if eth then + alias("farming_plus:orange_item", "ethereal:orange") + alias("farming_plus:orange", "ethereal:orange") + alias("farming_plus:orange_seed", "ethereal:orange_tree_sapling") +else + minetest.register_node(":ethereal:orange", { + description = "Orange", + drawtype = "plantlike", + tiles = {"farming_orange.png"}, + inventory_image = "farming_orange.png", + wield_image = "farming_orange.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.3, -0.2, 0.2, 0.2, 0.2} + }, + groups = {food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + }) + + alias("farming_plus:orange_item", "ethereal:orange") + alias("farming_plus:orange", "ethereal:orange") + alias("farming_plus:orange_seed", "default:sapling") +end + +-- Potato +alias("farming_plus:potato_item", "farming:potato") +alias("farming_plus:potato_1", "farming:potato_1") +alias("farming_plus:potato_2", "farming:potato_2") +alias("farming_plus:potato", "farming:potato_3") +alias("farming_plus:potato_seed", "farming:potato") + +-- Pumpkin +alias("farming:pumpkin_seed", "farming:pumpkin_slice") +alias("farming:pumpkin_face", "farming:jackolantern") +alias("farming:pumpkin_face_light", "farming:jackolantern_on") +alias("farming:big_pumpkin", "farming:jackolantern") +alias("farming:big_pumpkin_side", "air") +alias("farming:big_pumpkin_top", "air") +alias("farming:big_pumpkin_corner", "air") +alias("farming:scarecrow", "farming:jackolantern") +alias("farming:scarecrow_light", "farming:jackolantern_on") +alias("farming:pumpkin_flour", "farming:pumpkin_dough") + +-- Rhubarb +alias("farming_plus:rhubarb_seed", "farming:rhubarb") +alias("farming_plus:rhubarb_1", "farming:rhubarb_1") +alias("farming_plus:rhubarb_2", "farming:rhubarb_2") +alias("farming_plus:rhubarb", "farming:rhubarb_3") +alias("farming_plus:rhubarb_item", "farming:rhubarb") + +-- Strawberry +if eth then + alias("farming_plus:strawberry_item", "ethereal:strawberry") + alias("farming_plus:strawberry_seed", "ethereal:strawberry") + alias("farming_plus:strawberry_1", "ethereal:strawberry_1") + alias("farming_plus:strawberry_2", "ethereal:strawberry_3") + alias("farming_plus:strawberry_3", "ethereal:strawberry_5") + alias("farming_plus:strawberry", "ethereal:strawberry_7") +else + minetest.register_craftitem(":ethereal:strawberry", { + description = "Strawberry", + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + groups = {food_strawberry = 1, flammable = 2}, + on_use = minetest.item_eat(1), + }) + + alias("farming_plus:strawberry_item", "ethereal:strawberry") + alias("farming_plus:strawberry_seed", "ethereal:strawberry") + alias("farming_plus:strawberry_1", "farming:raspberry_1") + alias("farming_plus:strawberry_2", "farming:raspberry_2") + alias("farming_plus:strawberry_3", "farming:raspberry_3") + alias("farming_plus:strawberry", "farming:raspberry_4") +end + +-- Tomato +alias("farming_plus:tomato_seed", "farming:tomato") +alias("farming_plus:tomato_item", "farming:tomato") +alias("farming_plus:tomato_1", "farming:tomato_2") +alias("farming_plus:tomato_2", "farming:tomato_4") +alias("farming_plus:tomato_3", "farming:tomato_6") +alias("farming_plus:tomato", "farming:tomato_8") + +-- Weed +alias("farming:weed", "default:grass_2") diff --git a/mods/farming/crops/barley.lua b/mods/farming/crops/barley.lua new file mode 100644 index 0000000..f509335 --- /dev/null +++ b/mods/farming/crops/barley.lua @@ -0,0 +1,105 @@ + +local S = farming.intllib + +-- barley seeds +minetest.register_node("farming:seed_barley", { + description = S("Barley Seed"), + tiles = {"farming_barley_seed.png"}, + inventory_image = "farming_barley_seed.png", + wield_image = "farming_barley_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:barley_1") + end, +}) + +-- harvested barley +minetest.register_craftitem("farming:barley", { + description = S("Barley"), + inventory_image = "farming_barley.png", + groups = {food_barley = 1, flammable = 2}, +}) + +-- flour +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "farming:barley", "farming:barley", "farming:barley", + "farming:barley", "farming:mortar_pestle" + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- barley definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_barley_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:barley_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_barley_2.png"} +minetest.register_node("farming:barley_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_barley_3.png"} +minetest.register_node("farming:barley_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_barley_4.png"} +minetest.register_node("farming:barley_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_barley_5.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 2}, + } +} +minetest.register_node("farming:barley_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_barley_6.png"} +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 2}, + {items = {'farming:seed_barley'}, rarity = 1}, + } +} +minetest.register_node("farming:barley_6", table.copy(crop_def)) + +-- stage 7 (final) +crop_def.tiles = {"farming_barley_7.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:barley'}, rarity = 1}, + {items = {'farming:barley'}, rarity = 3}, + {items = {'farming:seed_barley'}, rarity = 1}, + {items = {'farming:seed_barley'}, rarity = 3}, + } +} +minetest.register_node("farming:barley_7", table.copy(crop_def)) diff --git a/mods/farming/crops/beans.lua b/mods/farming/crops/beans.lua new file mode 100644 index 0000000..a575956 --- /dev/null +++ b/mods/farming/crops/beans.lua @@ -0,0 +1,249 @@ +--[[ + All textures by + (C) Auke Kok + CC-BY-SA-3.0 +]] + +local S = farming.intllib + +-- place beans +local function place_beans(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if placer and def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- is player planting crop? + local name = placer and placer:get_player_name() or "" + + -- check for protection + if minetest.is_protected(pt.under, name) then + return + end + + -- check if pointing at bean pole + if under.name ~= "farming:beanpole" then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.under, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + + if placer or not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- beans +minetest.register_craftitem("farming:beans", { + description = S("Green Beans"), + inventory_image = "farming_beans.png", + groups = {food_beans = 1, flammable = 2}, + on_use = minetest.item_eat(1), + + on_place = function(itemstack, placer, pointed_thing) + return place_beans(itemstack, placer, pointed_thing, "farming:beanpole_1") + end, +}) + +-- beans can be used for green dye +minetest.register_craft({ + output = "dye:green", + recipe = { + {'farming:beans'}, + } +}) + +-- beanpole +minetest.register_node("farming:beanpole", { + description = S("Bean Pole (place on soil before planting beans)"), + drawtype = "plantlike", + tiles = {"farming_beanpole.png"}, + inventory_image = "farming_beanpole.png", + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:beanpole", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + if minetest.is_protected(pt.above, placer:get_player_name()) then + return + end + + local nodename = under.name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:beanpole"}) + + if not farming.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:beanpole", + recipe = { + {'', '', ''}, + {'default:stick', '', 'default:stick'}, + {'default:stick', '', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:beanpole", + burntime = 10, +}) + +-- green bean definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_beanpole_1.png"}, + visual_scale = 1.90, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:beanpole_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_beanpole_2.png"} +minetest.register_node("farming:beanpole_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_beanpole_3.png"} +minetest.register_node("farming:beanpole_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_beanpole_4.png"} +minetest.register_node("farming:beanpole_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_beanpole_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:beanpole'}, rarity = 1}, + {items = {'farming:beans 3'}, rarity = 1}, + {items = {'farming:beans 2'}, rarity = 2}, + {items = {'farming:beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:beanpole_5", table.copy(crop_def)) + +-- wild green bean bush (this is what you find on the map) +minetest.register_node("farming:beanbush", { + drawtype = "plantlike", + tiles = {"farming_beanbush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:beans 1'}, rarity = 1}, + {items = {'farming:beans 1'}, rarity = 2}, + {items = {'farming:beans 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/mods/farming/crops/beetroot.lua b/mods/farming/crops/beetroot.lua new file mode 100644 index 0000000..e683a94 --- /dev/null +++ b/mods/farming/crops/beetroot.lua @@ -0,0 +1,85 @@ + +local S = farming.intllib + +-- beetroot +minetest.register_craftitem("farming:beetroot", { + description = S("Beetroot"), + inventory_image = "farming_beetroot.png", + groups = {food_beetroot = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:beetroot_1") + end, + on_use = minetest.item_eat(1), +}) + +-- beetroot soup +minetest.register_craftitem("farming:beetroot_soup", { + description = S("Beetroot Soup"), + inventory_image = "farming_beetroot_soup.png", + groups = {flammable = 2}, + on_use = minetest.item_eat(6, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:beetroot_soup", + recipe = { + "group:food_beetroot", "group:food_beetroot", + "group:food_beetroot", "group:food_beetroot", + "group:food_beetroot", "group:food_beetroot","group:food_bowl" + } +}) + +-- red dye +minetest.register_craft({ + type = "shapeless", + output = "dye:red", + recipe = {"group:food_beetroot"}, +}) + +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_beetroot_1.png"}, + paramtype = "light", +-- paramtype2 = "meshoptions", +-- place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:beetroot_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_beetroot_2.png"} +minetest.register_node("farming:beetroot_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_beetroot_3.png"} +minetest.register_node("farming:beetroot_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_beetroot_4.png"} +minetest.register_node("farming:beetroot_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_beetroot_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 4, items = { + {items = {'farming:beetroot'}, rarity = 1}, + {items = {'farming:beetroot'}, rarity = 2}, + {items = {'farming:beetroot'}, rarity = 3}, + {items = {'farming:beetroot'}, rarity = 4}, + } +} +minetest.register_node("farming:beetroot_5", table.copy(crop_def)) diff --git a/mods/farming/crops/blueberry.lua b/mods/farming/crops/blueberry.lua new file mode 100644 index 0000000..9a30387 --- /dev/null +++ b/mods/farming/crops/blueberry.lua @@ -0,0 +1,85 @@ + +local S = farming.intllib + +-- blueberries +minetest.register_craftitem("farming:blueberries", { + description = S("Blueberries"), + inventory_image = "farming_blueberries.png", + groups = {food_blueberries = 1, food_blueberry = 1, food_berry = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:blueberry_1") + end, + on_use = minetest.item_eat(1), +}) + +-- blueberry muffin (thanks to sosogirl123 @ deviantart.com for muffin image) + +minetest.register_craftitem("farming:muffin_blueberry", { + description = S("Blueberry Muffin"), + inventory_image = "farming_blueberry_muffin.png", + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:muffin_blueberry 2", + recipe = { + {"group:food_blueberries", "group:food_bread", "group:food_blueberries"}, + } +}) + +-- Blueberry Pie + +minetest.register_craftitem("farming:blueberry_pie", { + description = S("Blueberry Pie"), + inventory_image = "farming_blueberry_pie.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:blueberry_pie", + type = "shapeless", + recipe = { + "group:food_flour", "group:food_sugar", + "group:food_blueberries", "group:food_baking_tray" + }, +}) + +-- blueberry definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_blueberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:blueberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_blueberry_2.png"} +minetest.register_node("farming:blueberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_blueberry_3.png"} +minetest.register_node("farming:blueberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_blueberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:blueberries 2'}, rarity = 1}, + {items = {'farming:blueberries'}, rarity = 2}, + {items = {'farming:blueberries'}, rarity = 3}, + } +} +minetest.register_node("farming:blueberry_4", table.copy(crop_def)) diff --git a/mods/farming/crops/carrot.lua b/mods/farming/crops/carrot.lua new file mode 100644 index 0000000..0aefcfd --- /dev/null +++ b/mods/farming/crops/carrot.lua @@ -0,0 +1,96 @@ + +--[[ + Original textures from PixelBox texture pack + https://forum.minetest.net/viewtopic.php?id=4990 +]] + +local S = farming.intllib + +-- carrot +minetest.register_craftitem("farming:carrot", { + description = S("Carrot"), + inventory_image = "farming_carrot.png", + groups = {food_carrot = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:carrot_1") + end, + on_use = minetest.item_eat(4), +}) + +-- golden carrot +minetest.register_craftitem("farming:carrot_gold", { + description = S("Golden Carrot"), + inventory_image = "farming_carrot_gold.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:carrot_gold", + recipe = { + {"", "default:gold_lump", ""}, + {"default:gold_lump", "group:food_carrot", "default:gold_lump"}, + {"", "default:gold_lump", ""}, + } +}) + +-- carrot definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_carrot_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + + +-- stage 1 +minetest.register_node("farming:carrot_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_carrot_2.png"} +minetest.register_node("farming:carrot_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_carrot_3.png"} +minetest.register_node("farming:carrot_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_carrot_4.png"} +minetest.register_node("farming:carrot_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_carrot_5.png"} +minetest.register_node("farming:carrot_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_carrot_6.png"} +minetest.register_node("farming:carrot_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_carrot_7.png"} +crop_def.drop = { + items = { + {items = {'farming:carrot'}, rarity = 1}, + {items = {'farming:carrot 2'}, rarity = 3}, + } +} +minetest.register_node("farming:carrot_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_carrot_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:carrot 2'}, rarity = 1}, + {items = {'farming:carrot 3'}, rarity = 2}, + } +} +minetest.register_node("farming:carrot_8", table.copy(crop_def)) diff --git a/mods/farming/crops/chili.lua b/mods/farming/crops/chili.lua new file mode 100644 index 0000000..9889162 --- /dev/null +++ b/mods/farming/crops/chili.lua @@ -0,0 +1,92 @@ + +local S = farming.intllib + +-- chili pepper +minetest.register_craftitem("farming:chili_pepper", { + description = S("Chili Pepper"), + inventory_image = "farming_chili_pepper.png", + groups = {food_chili_pepper = 1, flammable = 4}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:chili_1") + end, + on_use = minetest.item_eat(2), +}) + +-- bowl of chili +minetest.register_craftitem("farming:chili_bowl", { + description = S("Bowl of Chili"), + inventory_image = "farming_chili_bowl.png", + on_use = minetest.item_eat(8, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:chili_bowl", + recipe = { + "group:food_chili_pepper", "group:food_barley", + "group:food_tomato", "group:food_beans", "group:food_bowl" + }, +}) + +-- chili can be used for red dye +minetest.register_craft({ + output = "dye:red", + recipe = { + {'farming:chili_pepper'}, + } +}) + +-- chili definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_chili_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:chili_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_chili_2.png"} +minetest.register_node("farming:chili_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_chili_3.png"} +minetest.register_node("farming:chili_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_chili_4.png"} +minetest.register_node("farming:chili_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_chili_5.png"} +minetest.register_node("farming:chili_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_chili_6.png"} +minetest.register_node("farming:chili_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_chili_7.png"} +minetest.register_node("farming:chili_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_chili_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:chili_pepper 3'}, rarity = 1}, + {items = {'farming:chili_pepper 2'}, rarity = 2}, + } +} +minetest.register_node("farming:chili_8", table.copy(crop_def)) diff --git a/mods/farming/crops/cocoa.lua b/mods/farming/crops/cocoa.lua new file mode 100644 index 0000000..ecefcea --- /dev/null +++ b/mods/farming/crops/cocoa.lua @@ -0,0 +1,210 @@ + +local S = farming.intllib + +-- place cocoa +local function place_cocoa(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if placer and def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- check if pointing at jungletree + if under.name ~= "default:jungletree" + or minetest.get_node(pt.above).name ~= "air" then + return + end + + -- is player planting crop? + local name = placer and placer:get_player_name() or "" + + -- check for protection + if minetest.is_protected(pt.above, name) then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.above, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + + if placer and not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:cocoa_beans", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- cocoa beans +minetest.register_craftitem("farming:cocoa_beans", { + description = S("Cocoa Beans"), + inventory_image = "farming_cocoa_beans.png", + groups = {food_cocoa = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return place_cocoa(itemstack, placer, pointed_thing, "farming:cocoa_1") + end, +}) + +minetest.register_craft( { + output = "dye:brown 2", + recipe = { + { "farming:cocoa_beans" }, + } +}) + +-- chocolate cookie +minetest.register_craftitem("farming:cookie", { + description = S("Cookie"), + inventory_image = "farming_cookie.png", + on_use = minetest.item_eat(2), +}) + +minetest.register_craft( { + output = "farming:cookie 8", + recipe = { + {"group:food_wheat", "group:food_cocoa", "group:food_wheat" }, + } +}) + +-- bar of dark chocolate (thanks to Ice Pandora for her deviantart.com chocolate tutorial) +minetest.register_craftitem("farming:chocolate_dark", { + description = S("Bar of Dark Chocolate"), + inventory_image = "farming_chocolate_dark.png", + on_use = minetest.item_eat(3), +}) + +minetest.register_craft( { + output = "farming:chocolate_dark", + recipe = { + {"group:food_cocoa", "group:food_cocoa", "group:food_cocoa"}, + } +}) + +-- cocoa definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cocoa_1.png"}, + paramtype = "light", + walkable = false, + drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + } + }, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = { + snappy = 3, flammable = 2, plant = 1, growing = 1, + not_in_creative_inventory=1, leafdecay = 1, leafdecay_drop = 1 + }, + sounds = default.node_sound_leaves_defaults(), + growth_check = function(pos, node_name) + if minetest.find_node_near(pos, 1, {"default:jungletree"}) then + return false + end + return true + end, +} + +-- stage 1 +minetest.register_node("farming:cocoa_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cocoa_2.png"} +minetest.register_node("farming:cocoa_2", table.copy(crop_def)) + +-- stage3 +crop_def.tiles = {"farming_cocoa_3.png"} +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 1'}, rarity = 1}, + } +} +minetest.register_node("farming:cocoa_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_cocoa_4.png"} +crop_def.groups.growing = 0 +crop_def.growth_check = nil +crop_def.drop = { + items = { + {items = {'farming:cocoa_beans 2'}, rarity = 1}, + {items = {'farming:cocoa_beans 1'}, rarity = 2}, + {items = {'farming:cocoa_beans 1'}, rarity = 4}, + } +} +minetest.register_node("farming:cocoa_4", table.copy(crop_def)) + +-- add random cocoa pods to jungle tree's +minetest.register_on_generated(function(minp, maxp) + + if maxp.y < 0 then + return + end + + local pos, dir + local cocoa = minetest.find_nodes_in_area(minp, maxp, "default:jungletree") + + for n = 1, #cocoa do + + pos = cocoa[n] + + if minetest.find_node_near(pos, 1, + {"default:jungleleaves", "moretrees:jungletree_leaves_green"}) then + + dir = math.random(1, 80) + + if dir == 1 then + pos.x = pos.x + 1 + elseif dir == 2 then + pos.x = pos.x - 1 + elseif dir == 3 then + pos.z = pos.z + 1 + elseif dir == 4 then + pos.z = pos.z -1 + end + + if dir < 5 + and minetest.get_node(pos).name == "air" + and minetest.get_node_light(pos) > 12 then + + --print ("Cocoa Pod added at " .. minetest.pos_to_string(pos)) + + minetest.swap_node(pos, { + name = "farming:cocoa_" .. tostring(math.random(1, 4)) + }) + end + + end + end +end) diff --git a/mods/farming/crops/coffee.lua b/mods/farming/crops/coffee.lua new file mode 100644 index 0000000..f98694b --- /dev/null +++ b/mods/farming/crops/coffee.lua @@ -0,0 +1,88 @@ + +local S = farming.intllib + +-- coffee +minetest.register_craftitem("farming:coffee_beans", { + description = S("Coffee Beans"), + inventory_image = "farming_coffee_beans.png", + groups = {food_coffee = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:coffee_1") + end, +}) + +-- cold cup of coffee +minetest.register_node("farming:coffee_cup", { + description = S("Cup of Coffee"), + drawtype = "torchlike", --"plantlike", + tiles = {"farming_coffee_cup.png"}, + inventory_image = "farming_coffee_cup.png", + wield_image = "farming_coffee_cup.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + on_use = minetest.item_eat(2, "vessels:drinking_glass"), + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_alias("farming:coffee_cup_hot", "farming:coffee_cup") +minetest.register_alias("farming:drinking_cup", "vessels:drinking_glass") + +minetest.register_craft( { + output = "farming:coffee_cup", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_coffee", + "bucket:bucket_water", "group:food_saucepan"}, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_saucepan", "farming:saucepan"}, + } +}) + +-- coffee definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_coffee_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:coffee_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_coffee_2.png"} +minetest.register_node("farming:coffee_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_coffee_3.png"} +minetest.register_node("farming:coffee_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_coffee_4.png"} +minetest.register_node("farming:coffee_4", table.copy(crop_def)) + +-- stage 5 (final) +crop_def.tiles = {"farming_coffee_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:coffee_beans 2'}, rarity = 1}, + {items = {'farming:coffee_beans 2'}, rarity = 2}, + {items = {'farming:coffee_beans 2'}, rarity = 3}, + } +} +minetest.register_node("farming:coffee_5", table.copy(crop_def)) diff --git a/mods/farming/crops/corn.lua b/mods/farming/crops/corn.lua new file mode 100644 index 0000000..4847903 --- /dev/null +++ b/mods/farming/crops/corn.lua @@ -0,0 +1,149 @@ + +--[[ + Original textures from GeMinecraft + http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1440575-1-2-5-generation-minecraft-beta-1-2-farming-and +]] + +local S = farming.intllib + +-- corn +minetest.register_craftitem("farming:corn", { + description = S("Corn"), + inventory_image = "farming_corn.png", + groups = {food_corn = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:corn_1") + end, + on_use = minetest.item_eat(3), +}) + +-- corn on the cob (texture by TenPlus1) +minetest.register_craftitem("farming:corn_cob", { + description = S("Corn on the Cob"), + inventory_image = "farming_corn_cob.png", + groups = {food_corn_cooked = 1, flammable = 2}, + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:corn_cob", + recipe = "group:food_corn" +}) + +-- cornstarch +minetest.register_craftitem("farming:cornstarch", { + description = S("Cornstarch"), + inventory_image = "farming_cornstarch.png", + groups = {food_cornstarch = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:cornstarch", + recipe = { + {"group:food_mortar_pestle", "group:food_corn_cooked", "group:food_baking_tray"}, + {"", "group:food_bowl", ""}, + }, + replacements = { + {"group:food_mortar_pestle", "farming:mortar_pestle"}, + {"group:food_baking_tray", "farming:baking_tray"}, + } +}) + +-- ethanol (thanks to JKMurray for this idea) +minetest.register_node("farming:bottle_ethanol", { + description = S("Bottle of Ethanol"), + drawtype = "plantlike", + tiles = {"farming_bottle_ethanol.png"}, + inventory_image = "farming_bottle_ethanol.png", + wield_image = "farming_bottle_ethanol.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:bottle_ethanol", + recipe = { + { "vessels:glass_bottle", "group:food_corn", "group:food_corn"}, + { "group:food_corn", "group:food_corn", "group:food_corn"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:bottle_ethanol", + burntime = 80, --240, + replacements = {{ "farming:bottle_ethanol", "vessels:glass_bottle"}} +}) + +-- corn definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_corn_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:corn_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_corn_2.png"} +minetest.register_node("farming:corn_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_corn_3.png"} +minetest.register_node("farming:corn_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_corn_4.png"} +minetest.register_node("farming:corn_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_corn_5.png"} +minetest.register_node("farming:corn_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_corn_6.png"} +crop_def.visual_scale = 1.9 -- 1.45 +minetest.register_node("farming:corn_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_corn_7.png"} +crop_def.drop = { + items = { + {items = {'farming:corn'}, rarity = 1}, + {items = {'farming:corn'}, rarity = 2}, + {items = {'farming:corn'}, rarity = 3}, + } +} +minetest.register_node("farming:corn_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_corn_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:corn 2'}, rarity = 1}, + {items = {'farming:corn 2'}, rarity = 2}, + {items = {'farming:corn 2'}, rarity = 2}, + } +} +minetest.register_node("farming:corn_8", table.copy(crop_def)) diff --git a/mods/farming/crops/cotton.lua b/mods/farming/crops/cotton.lua new file mode 100644 index 0000000..7f893ec --- /dev/null +++ b/mods/farming/crops/cotton.lua @@ -0,0 +1,151 @@ + +local S = farming.intllib + +-- cotton seeds +minetest.register_node("farming:seed_cotton", { + description = S("Cotton Seed"), + tiles = {"farming_cotton_seed.png"}, + inventory_image = "farming_cotton_seed.png", + wield_image = "farming_cotton_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:cotton_1") + end, +}) + +-- cotton / string + +minetest.register_craftitem("farming:cotton", { + description = S("Cotton"), + inventory_image = "farming_cotton.png", + groups = {flammable = 4}, +}) + +minetest.register_craftitem("farming:string", { + description = S("String"), + inventory_image = "farming_string.png", + groups = {flammable = 2}, +}) + +-- cotton to wool +minetest.register_craft({ + output = "wool:white", + recipe = { + {"farming:cotton", "farming:cotton"}, + {"farming:cotton", "farming:cotton"}, + } +}) + +-- cotton to string +minetest.register_craft({ + output = "farming:string 2", + recipe = { + {"farming:cotton"}, + {"farming:cotton"}, + } +}) + +-- can be used as fuel +minetest.register_craft({ + type = "fuel", + recipe = "farming:string", + burntime = 1, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:cotton", + burntime = 1, +}) + +-- cotton definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cotton_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cotton_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cotton_2.png"} +minetest.register_node("farming:cotton_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cotton_3.png"} +minetest.register_node("farming:cotton_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_cotton_4.png"} +minetest.register_node("farming:cotton_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_cotton_5.png"} +crop_def.drop = { + items = { + {items = {"farming:seed_cotton"}, rarity = 1}, + } +} +minetest.register_node("farming:cotton_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_cotton_6.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_cotton_7.png"} +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + } +} +minetest.register_node("farming:cotton_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_cotton_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {"farming:cotton"}, rarity = 1}, + {items = {"farming:cotton"}, rarity = 2}, + {items = {"farming:cotton"}, rarity = 3}, + {items = {"farming:seed_cotton"}, rarity = 1}, + {items = {"farming:seed_cotton"}, rarity = 2}, + {items = {"farming:seed_cotton"}, rarity = 3}, + } +} +minetest.register_node("farming:cotton_8", table.copy(crop_def)) + +--[[ Cotton (example, is already registered in cotton.lua) +farming.register_plant("farming:cotton", { + description = "Cotton seed", + inventory_image = "farming_cotton_seed.png", + groups = {flammable = 2}, + steps = 8, +})]] diff --git a/mods/farming/crops/cucumber.lua b/mods/farming/crops/cucumber.lua new file mode 100644 index 0000000..4e6981c --- /dev/null +++ b/mods/farming/crops/cucumber.lua @@ -0,0 +1,56 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- cucumber +minetest.register_craftitem("farming:cucumber", { + description = S("Cucumber"), + inventory_image = "farming_cucumber.png", + groups = {food_cucumber = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:cucumber_1") + end, + on_use = minetest.item_eat(4), +}) + +-- cucumber definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_cucumber_1.png"}, + paramtype = "light", + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:cucumber_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_cucumber_2.png"} +minetest.register_node("farming:cucumber_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_cucumber_3.png"} +minetest.register_node("farming:cucumber_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_cucumber_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:cucumber 2'}, rarity = 1}, + {items = {'farming:cucumber 2'}, rarity = 2}, + } +} +minetest.register_node("farming:cucumber_4", table.copy(crop_def)) diff --git a/mods/farming/crops/garlic.lua b/mods/farming/crops/garlic.lua new file mode 100644 index 0000000..f2bb16d --- /dev/null +++ b/mods/farming/crops/garlic.lua @@ -0,0 +1,128 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:garlic_clove", { + description = S("Garlic clove"), + inventory_image = "crops_garlic_clove.png", + groups = {food_garlic_clove = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:garlic_1") + end, +}) + +-- garlic bulb +minetest.register_craftitem("farming:garlic", { + description = S("Garlic"), + inventory_image = "crops_garlic.png", + on_use = minetest.item_eat(1), + groups = {food_garlic = 1, flammable = 3}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:garlic_clove 9", + recipe = { "farming:garlic" } +}) + +minetest.register_craft({ + output = "farming:garlic", + recipe = { + {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"}, + {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"}, + {"farming:garlic_clove", "farming:garlic_clove", "farming:garlic_clove"} + } +}) + +-- garlic braid +minetest.register_node("farming:garlic_braid", { + description = S("Garlic Braid"), + inventory_image = "crops_garlic_braid.png", + wield_image = "crops_garlic_braid.png", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + tiles = { + "crops_garlic_braid_side.png","crops_garlic_braid.png", + "crops_garlic_braid_side.png^[transformFx","crops_garlic_braid_side.png", + "crops_garlic_braid.png","crops_garlic_braid.png" + }, + groups = {vessel = 1, dig_immediate = 3, flammable = 3}, + sounds = default.node_sound_leaves_defaults(), + node_box = { + type = "fixed", + fixed = { + {-0.13, -0.45, 0.5, 0.13, 0.45, 0.24}, + }, + } +}) + +minetest.register_craft({ + output = "farming:garlic_braid", + recipe = { + {"farming:garlic", "farming:garlic", "farming:garlic"}, + {"farming:garlic", "farming:garlic", "farming:garlic"}, + {"farming:garlic", "farming:garlic", "farming:garlic"} + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:garlic 9", + recipe = { "farming:garlic_braid" } +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + tiles = {"crops_garlic_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:garlic_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_garlic_plant_2.png"} +minetest.register_node("farming:garlic_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_garlic_plant_3.png"} +minetest.register_node("farming:garlic_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_garlic_plant_4.png"} +minetest.register_node("farming:garlic_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_garlic_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 1}, + {items = {'farming:garlic'}, rarity = 2}, + {items = {'farming:garlic'}, rarity = 5}, + } +} +minetest.register_node("farming:garlic_5", table.copy(crop_def)) diff --git a/mods/farming/crops/grapes.lua b/mods/farming/crops/grapes.lua new file mode 100644 index 0000000..d8c6c3f --- /dev/null +++ b/mods/farming/crops/grapes.lua @@ -0,0 +1,256 @@ + +local S = farming.intllib + +-- place trellis +local function place_grapes(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if placer and def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + -- is player planting seed? + local name = placer and placer:get_player_name() or "" + + -- check for protection + if minetest.is_protected(pt.under, name) then + return + end + + -- check if pointing at trellis + if under.name ~= "farming:trellis" then + return + end + + -- add the node and remove 1 item from the itemstack + minetest.set_node(pt.under, {name = plantname}) + + minetest.sound_play("default_place_node", {pos = pt.under, gain = 1.0}) + + if placer and not farming.is_creative(placer:get_player_name()) then + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.20, + farming.refill_plant, + placer, + "farming:grapes", + placer:get_wield_index() + ) + end + end + + return itemstack +end + +-- grapes +minetest.register_craftitem("farming:grapes", { + description = S("Grapes"), + inventory_image = "farming_grapes.png", + on_use = minetest.item_eat(2), + groups = {food_grapes = 1, flammable = 3}, + + on_place = function(itemstack, placer, pointed_thing) + return place_grapes(itemstack, placer, pointed_thing, "farming:grapes_1") + end, +}) + +-- grapes can be used for violet dye +minetest.register_craft({ + output = "dye:violet", + recipe = { + {'farming:grapes'}, + } +}) + +-- trellis +minetest.register_node("farming:trellis", { + description = S("Trellis (place on soil before planting grapes)"), + drawtype = "plantlike", + tiles = {"farming_trellis.png"}, + inventory_image = "farming_trellis.png", + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = "farming:trellis", + selection_box = farming.select, + groups = {snappy = 3, flammable = 2, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + + on_place = function(itemstack, placer, pointed_thing) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- return if any of the nodes are not registered + if not minetest.registered_nodes[under.name] then + return + end + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + if minetest.is_protected(pt.above, placer:get_player_name()) then + return + end + + local nodename = under.name + + if minetest.get_item_group(nodename, "soil") < 2 then + return + end + + local top = { + x = pointed_thing.above.x, + y = pointed_thing.above.y + 1, + z = pointed_thing.above.z + } + + nodename = minetest.get_node(top).name + + if nodename ~= "air" then + return + end + + minetest.set_node(pointed_thing.above, {name = "farming:trellis"}) + + if not farming.is_creative(placer:get_player_name()) then + itemstack:take_item() + end + + return itemstack + end +}) + +minetest.register_craft({ + output = "farming:trellis", + recipe = { + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:trellis", + burntime = 15, +}) + +-- grapes definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_grapes_1.png"}, + visual_scale = 1.9, -- 1.45, + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, not_in_creative_inventory = 1, + attached_node = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:grapes_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_grapes_2.png"} +minetest.register_node("farming:grapes_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_grapes_3.png"} +minetest.register_node("farming:grapes_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_grapes_4.png"} +minetest.register_node("farming:grapes_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_grapes_5.png"} +minetest.register_node("farming:grapes_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_grapes_6.png"} +minetest.register_node("farming:grapes_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_grapes_7.png"} +minetest.register_node("farming:grapes_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_grapes_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:trellis'}, rarity = 1}, + {items = {'farming:grapes 3'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } +} +minetest.register_node("farming:grapes_8", table.copy(crop_def)) + +-- wild grape vine (this is what you find on the map) +minetest.register_node("farming:grapebush", { + drawtype = "plantlike", + tiles = {"farming_grapebush.png"}, + paramtype = "light", + waving = 1, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = { + items = { + {items = {'farming:grapes 1'}, rarity = 1}, + {items = {'farming:grapes 1'}, rarity = 2}, + {items = {'farming:grapes 1'}, rarity = 3}, + } + }, + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory=1 + }, + sounds = default.node_sound_leaves_defaults(), +}) diff --git a/mods/farming/crops/hemp.lua b/mods/farming/crops/hemp.lua new file mode 100644 index 0000000..eb522a9 --- /dev/null +++ b/mods/farming/crops/hemp.lua @@ -0,0 +1,251 @@ + +local S = farming.intllib + +-- hemp seeds +minetest.register_node("farming:seed_hemp", { + description = S("Hemp Seed"), + tiles = {"farming_hemp_seed.png"}, + inventory_image = "farming_hemp_seed.png", + wield_image = "farming_hemp_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:hemp_1") + end, +}) + +-- harvested hemp +minetest.register_craftitem("farming:hemp_leaf", { + description = S("Hemp Leaf"), + inventory_image = "farming_hemp_leaf.png", +}) + +-- hemp oil +minetest.register_node("farming:hemp_oil", { + description = S("Bottle of Hemp Oil"), + drawtype = "plantlike", + tiles = {"farming_hemp_oil.png"}, + inventory_image = "farming_hemp_oil.png", + wield_image = "farming_hemp_oil.png", + paramtype = "light", + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, + groups = {food_oil = 1, vessel = 1, dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"", "vessels:glass_bottle", ""} + } +}) + +minetest.register_craft( { + output = "farming:hemp_oil", + recipe = { + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", "farming:seed_hemp", "farming:seed_hemp"}, + {"farming:seed_hemp", "vessels:glass_bottle", "farming:seed_hemp"} + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hemp_oil", + burntime = 20, + replacements = {{ "farming:hemp_oil", "vessels:glass_bottle"}} +}) + +-- hemp fibre +minetest.register_craftitem("farming:hemp_fibre", { + description = S("Hemp Fibre"), + inventory_image = "farming_hemp_fibre.png", +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_water", "bucket:bucket_empty"}} +}) + +minetest.register_craft( { + output = "farming:hemp_fibre 8", + recipe = { + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "bucket:bucket_river_water", "farming:hemp_leaf"}, + {"farming:hemp_leaf", "farming:hemp_leaf", "farming:hemp_leaf"} + }, + replacements = {{ "bucket:bucket_river_water", "bucket:bucket_empty"}} +}) + +-- hemp block +minetest.register_node("farming:hemp_block", { + description = S("Hemp Block"), + tiles = {"farming_hemp_block.png"}, + paramtype = "light", + groups = {snappy = 1, oddly_breakable_by_hand = 1, flammable = 2} +}) + +minetest.register_craft( { + output = "farming:hemp_block", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"} + }, +}) + +-- check and register stairs +if minetest.global_exists("stairs") then + + if stairs.mod and stairs.mod == "redo" then + + stairs.register_all("hemp_block", "farming:hemp_block", + {snappy = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block", + default.node_sound_leaves_defaults()) + else + + stairs.register_stair_and_slab("hemp_block", "farming:hemp_block", + {snappy = 1, flammable = 2}, + {"farming_hemp_block.png"}, + "Hemp Block Stair", + "Hemp Block Slab", + default.node_sound_leaves_defaults()) + end +end + +-- paper +minetest.register_craft( { + output = "default:paper", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + } +}) + +-- string +minetest.register_craft( { + output = "farming:cotton", + recipe = { + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + {"farming:hemp_fibre"}, + } +}) + +-- hemp rope +minetest.register_node("farming:hemp_rope", { + description = S("Hemp Rope"), + walkable = false, + climbable = true, + sunlight_propagates = true, + paramtype = "light", + tiles = {"farming_hemp_rope.png"}, + wield_image = "farming_hemp_rope.png", + inventory_image = "farming_hemp_rope.png", + drawtype = "plantlike", + groups = {flammable = 2, choppy = 3, oddly_breakable_by_hand = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7}, + }, +}) + +-- string +minetest.register_craft( { + output = "farming:hemp_rope 6", + recipe = { + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + {"farming:cotton", "farming:cotton", "farming:cotton"}, + {"farming:hemp_fibre", "farming:hemp_fibre", "farming:hemp_fibre"}, + } +}) + +-- hemp definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_hemp_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:hemp_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_hemp_2.png"} +minetest.register_node("farming:hemp_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_hemp_3.png"} +minetest.register_node("farming:hemp_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_hemp_4.png"} +minetest.register_node("farming:hemp_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_hemp_5.png"} +minetest.register_node("farming:hemp_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_hemp_6.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + } +} +minetest.register_node("farming:hemp_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_hemp_7.png"} +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 3}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 3}, + } +} +minetest.register_node("farming:hemp_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_hemp_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:hemp_leaf 2'}, rarity = 1}, + {items = {'farming:hemp_leaf'}, rarity = 2}, + {items = {'farming:seed_hemp'}, rarity = 1}, + {items = {'farming:seed_hemp'}, rarity = 2}, + } +} +minetest.register_node("farming:hemp_8", table.copy(crop_def)) diff --git a/mods/farming/crops/melon.lua b/mods/farming/crops/melon.lua new file mode 100644 index 0000000..1791fdf --- /dev/null +++ b/mods/farming/crops/melon.lua @@ -0,0 +1,87 @@ + +local S = farming.intllib + +-- melon +minetest.register_craftitem("farming:melon_slice", { + description = S("Melon Slice"), + inventory_image = "farming_melon_slice.png", + groups = {food_melon_slice = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:melon_1") + end, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:melon_8", + recipe = { + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + {"farming:melon_slice", "farming:melon_slice", "farming:melon_slice"}, + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:melon_slice 9", + recipe = {"farming:melon_8", "farming:cutting_board"}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}}, +}) + +-- melon definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_melon_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:melon_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_melon_2.png"} +minetest.register_node("farming:melon_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_melon_3.png"} +minetest.register_node("farming:melon_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_melon_4.png"} +minetest.register_node("farming:melon_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_melon_5.png"} +minetest.register_node("farming:melon_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_melon_6.png"} +minetest.register_node("farming:melon_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_melon_7.png"} +minetest.register_node("farming:melon_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.drawtype = "nodebox" +crop_def.description = S("Melon") +crop_def.tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png"} +crop_def.selection_box = {-.5, -.5, -.5, .5, .5, .5} +crop_def.walkable = true +crop_def.groups = { + food_melon = 1, snappy = 1, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 +} +--crop_def.drop = "farming:melon_slice 9" +crop_def.drop = "farming:melon_8" +minetest.register_node("farming:melon_8", table.copy(crop_def)) diff --git a/mods/farming/crops/onion.lua b/mods/farming/crops/onion.lua new file mode 100644 index 0000000..d9268f8 --- /dev/null +++ b/mods/farming/crops/onion.lua @@ -0,0 +1,68 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:onion", { + description = S("Onion"), + inventory_image = "crops_onion.png", + groups = {food_onion = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:onion_1") + end, + on_use = minetest.item_eat(1), +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + tiles = {"crops_onion_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:onion_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_onion_plant_2.png"} +minetest.register_node("farming:onion_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_onion_plant_3.png"} +minetest.register_node("farming:onion_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_onion_plant_4.png"} +minetest.register_node("farming:onion_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_onion_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:onion'}, rarity = 1}, + {items = {'farming:onion'}, rarity = 1}, + {items = {'farming:onion'}, rarity = 2}, + {items = {'farming:onion'}, rarity = 2}, + {items = {'farming:onion'}, rarity = 5}, + } +} +minetest.register_node("farming:onion_5", table.copy(crop_def)) diff --git a/mods/farming/crops/peas.lua b/mods/farming/crops/peas.lua new file mode 100644 index 0000000..e50564e --- /dev/null +++ b/mods/farming/crops/peas.lua @@ -0,0 +1,89 @@ + +local S = farming.intllib + +-- Textures for Pea crop and Peas were done by Andrey01 + +-- pea pod +minetest.register_craftitem("farming:pea_pod", { + description = S("Pea Pod"), + inventory_image = "farming_pea_pod.png", + groups = {food_pea_pod = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pea_1") + end +}) + +minetest.register_craftitem("farming:peas", { + description = S("Peas"), + inventory_image = "farming_pea_peas.png", + groups = {food_peas = 1, flammable = 2}, + on_use = minetest.item_eat(1) +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:peas", + recipe = {"farming:pea_pod"} +}) + +-- pea soup +minetest.register_craftitem("farming:pea_soup", { + description = S("Pea Soup"), + inventory_image = "farming_pea_soup.png", + groups = {flammable = 2}, + on_use = minetest.item_eat(4, "farming:bowl"), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pea_soup", + recipe = {"group:food_peas", "group:food_peas", "group:food_bowl"} +}) + +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_pea_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pea_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pea_2.png"} +minetest.register_node("farming:pea_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pea_3.png"} +minetest.register_node("farming:pea_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pea_4.png"} +minetest.register_node("farming:pea_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pea_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 5, items = { + {items = {'farming:pea_pod'}, rarity = 1}, + {items = {'farming:pea_pod'}, rarity = 2}, + {items = {'farming:pea_pod'}, rarity = 3}, + {items = {'farming:pea_pod'}, rarity = 4}, + {items = {'farming:pea_pod'}, rarity = 5}, + } +} +minetest.register_node("farming:pea_5", table.copy(crop_def)) diff --git a/mods/farming/crops/pepper.lua b/mods/farming/crops/pepper.lua new file mode 100644 index 0000000..498556e --- /dev/null +++ b/mods/farming/crops/pepper.lua @@ -0,0 +1,106 @@ + +--[[ + Original textures from Crops Plus mod + Copyright (C) 2018 Grizzly Adam + https://forum.minetest.net/viewtopic.php?f=9&t=19488 +]] + +local S = farming.intllib + +-- peppercorn (seed) +minetest.register_craftitem("farming:peppercorn", { + description = S("Peppercorn"), + inventory_image = "crops_peppercorn.png", + groups = {food_peppercorn = 1, flammable = 3}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pepper_1") + end, +}) + +-- green pepper +minetest.register_craftitem("farming:pepper", { + description = S("Pepper"), + inventory_image = "crops_pepper.png", + on_use = minetest.item_eat(2), + groups = {food_pepper = 1, flammable = 3}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:peppercorn", + recipe = {"farming:pepper"} +}) + +-- ground pepper +minetest.register_node("farming:pepper_ground", { + description = ("Ground Pepper"), + inventory_image = "crops_pepper_ground.png", + wield_image = "crops_pepper_ground.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"crops_pepper_ground.png"}, + groups = { + vessel = 1, food_pepper_ground = 1, + dig_immediate = 3, attached_node = 1 + }, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, +}) + +minetest.register_craft( { + output = "farming:pepper_ground", + type = "shapeless", + recipe = {"group:food_peppercorn", "vessels:glass_bottle", "farming:mortar_pestle"}, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + tiles = {"crops_pepper_plant_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 1, + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 3, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pepper_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"crops_pepper_plant_2.png"} +minetest.register_node("farming:pepper_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"crops_pepper_plant_3.png"} +minetest.register_node("farming:pepper_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"crops_pepper_plant_4.png"} +minetest.register_node("farming:pepper_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"crops_pepper_plant_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + max_items = 2, items = { + {items = {'farming:pepper 2'}, rarity = 1}, + {items = {'farming:pepper'}, rarity = 2}, + {items = {'farming:pepper'}, rarity = 3}, + } +} +minetest.register_node("farming:pepper_5", table.copy(crop_def)) diff --git a/mods/farming/crops/pineapple.lua b/mods/farming/crops/pineapple.lua new file mode 100644 index 0000000..3525136 --- /dev/null +++ b/mods/farming/crops/pineapple.lua @@ -0,0 +1,129 @@ + +local S = farming.intllib + +-- pineapple top +minetest.register_craftitem("farming:pineapple_top", { + description = S("Pineapple Top"), + inventory_image = "farming_pineapple_top.png", + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pineapple_1") + end, +}) + +-- pineapple +minetest.register_node("farming:pineapple", { + description = S("Pineapple"), + drawtype = "plantlike", + tiles = {"farming_pineapple.png"}, + inventory_image = "farming_pineapple.png", + wield_image = "farming_pineapple.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27} + }, + groups = {food_pineapple = 1, fleshy = 3, dig_immediate = 3, flammable = 2}, +}) + +-- pineapple +minetest.register_craftitem("farming:pineapple_ring", { + description = S("Pineapple Ring"), + inventory_image = "farming_pineapple_ring.png", + groups = {food_pineapple_ring = 1, flammable = 2}, + on_use = minetest.item_eat(1), +}) + +minetest.register_craft( { + output = "farming:pineapple_ring 5", + type = "shapeless", + recipe = {"group:food_pineapple"}, + replacements = {{"farming:pineapple", "farming:pineapple_top"}} +}) + +-- pineapple juice +minetest.register_craftitem("farming:pineapple_juice", { + description = S("Pineapple Juice"), + inventory_image = "farming_pineapple_juice.png", + on_use = minetest.item_eat(4, "vessels:drinking_glass"), +}) + +minetest.register_craft({ + output = "farming:pineapple_juice", + type = "shapeless", + recipe = {"vessels:drinking_glass", "group:food_pineapple_ring", + "group:food_pineapple_ring", "group:food_pineapple_ring", + "farming:juicer"}, + replacements = { + {"group:food_juicer", "farming:juicer"}, + }, +}) + +minetest.register_craft({ + output = "farming:pineapple_juice 2", + type = "shapeless", + recipe = { + "vessels:drinking_glass", "vessels:drinking_glass", + "group:food_pineapple", "farming:juicer" + }, + replacements = { + {"group:food_juicer", "farming:juicer"}, + }, +}) + +-- crop definition +local crop_def = { + drawtype = "plantlike", + visual_scale = 1.5, + tiles = {"farming_pineapple_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pineapple_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pineapple_2.png"} +minetest.register_node("farming:pineapple_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pineapple_3.png"} +minetest.register_node("farming:pineapple_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pineapple_4.png"} +minetest.register_node("farming:pineapple_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pineapple_5.png"} +minetest.register_node("farming:pineapple_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_pineapple_6.png"} +minetest.register_node("farming:pineapple_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_pineapple_7.png"} +minetest.register_node("farming:pineapple_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_pineapple_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:pineapple'}, rarity = 1}, + {items = {'farming:pineapple'}, rarity = 15}, + } +} +minetest.register_node("farming:pineapple_8", table.copy(crop_def)) diff --git a/mods/farming/crops/potato.lua b/mods/farming/crops/potato.lua new file mode 100644 index 0000000..a1512c2 --- /dev/null +++ b/mods/farming/crops/potato.lua @@ -0,0 +1,94 @@ + +--[[ + Original textures from DocFarming mod + https://forum.minetest.net/viewtopic.php?id=3948 +]] + +local S = farming.intllib + +-- potato +minetest.register_craftitem("farming:potato", { + description = S("Potato"), + inventory_image = "farming_potato.png", + groups = {food_potato = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:potato_1") + end, + on_use = minetest.item_eat(1), +}) + +-- baked potato +minetest.register_craftitem("farming:baked_potato", { + description = S("Baked Potato"), + inventory_image = "farming_baked_potato.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "farming:baked_potato", + recipe = "group:food_potato" +}) + +-- Potato and cucumber Salad +minetest.register_craftitem("farming:potato_salad", { + description = S("Cucumber and Potato Salad"), + inventory_image = "farming_potato_salad.png", + on_use = minetest.item_eat(10, "farming:bowl"), +}) + +minetest.register_craft({ + output = "farming:potato_salad", + recipe = { + {"group:food_cucumber"}, + {"farming:baked_potato"}, + {"group:food_bowl"}, + } +}) + +-- potato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_potato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:potato_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_potato_2.png"} +minetest.register_node("farming:potato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_potato_3.png"} +crop_def.drop = { + items = { + {items = {'farming:potato'}, rarity = 1}, + {items = {'farming:potato'}, rarity = 3}, + } +} +minetest.register_node("farming:potato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_potato_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:potato 2'}, rarity = 1}, + {items = {'farming:potato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:potato_4", table.copy(crop_def)) diff --git a/mods/farming/crops/pumpkin.lua b/mods/farming/crops/pumpkin.lua new file mode 100644 index 0000000..4abbe13 --- /dev/null +++ b/mods/farming/crops/pumpkin.lua @@ -0,0 +1,214 @@ + +--[[ + Big thanks to PainterlyPack.net for allowing me to use these textures +]] + +local S = farming.intllib + +-- pumpkin slice +minetest.register_craftitem("farming:pumpkin_slice", { + description = S("Pumpkin Slice"), + inventory_image = "farming_pumpkin_slice.png", + groups = {food_pumpkin_slice = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:pumpkin_1") + end, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:pumpkin", + recipe = { + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + {"farming:pumpkin_slice", "farming:pumpkin_slice", "farming:pumpkin_slice"}, + } +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:pumpkin_slice 9", + recipe = {"farming:pumpkin", "farming:cutting_board"}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}}, +}) + +-- jack 'o lantern +minetest.register_node("farming:jackolantern", { + description = S("Jack 'O Lantern (punch to turn on and off)"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_off.png" + }, + paramtype2 = "facedir", + groups = {choppy = 1, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern_on" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_node("farming:jackolantern_on", { + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_side.png", + "farming_pumpkin_face_on.png" + }, + light_source = default.LIGHT_MAX - 1, + paramtype2 = "facedir", + groups = { + choppy = 1, oddly_breakable_by_hand = 1, flammable = 2, + not_in_creative_inventory = 1 + }, + sounds = default.node_sound_wood_defaults(), + drop = "farming:jackolantern", + on_punch = function(pos, node, puncher) + node.name = "farming:jackolantern" + minetest.swap_node(pos, node) + end, +}) + +minetest.register_craft({ + output = "farming:jackolantern", + recipe = { + {"default:torch"}, + {"group:food_pumpkin"}, + } +}) + +--- wooden scarecrow base +minetest.register_node("farming:scarecrow_bottom", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + tiles = {"default_wood.png"}, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-1/16, -8/16, -1/16, 1/16, 8/16, 1/16}, + {-12/16, 4/16, -1/16, 12/16, 2/16, 1/16}, + }, + }, + groups = {snappy = 3, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:scarecrow_bottom", + recipe = { + {"", "group:stick", "",}, + {"group:stick", "group:stick", "group:stick",}, + {"", "group:stick", "",} + } +}) + +-- pumpkin bread +minetest.register_craftitem("farming:pumpkin_bread", { + description = S("Pumpkin Bread"), + inventory_image = "farming_pumpkin_bread.png", + on_use = minetest.item_eat(8), + groups = {food_bread = 1, flammable = 2}, +}) + +minetest.register_craftitem("farming:pumpkin_dough", { + description = S("Pumpkin Dough"), + inventory_image = "farming_pumpkin_dough.png", +}) + +minetest.register_craft({ + output = "farming:pumpkin_dough", + type = "shapeless", + recipe = {"group:food_flour", "group:food_pumpkin_slice", "group:food_pumpkin_slice"} +}) + +minetest.register_craft({ + type = "cooking", + output = "farming:pumpkin_bread", + recipe = "farming:pumpkin_dough", + cooktime = 10 +}) + +-- pumpkin definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_pumpkin_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:pumpkin_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_pumpkin_2.png"} +minetest.register_node("farming:pumpkin_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_pumpkin_3.png"} +minetest.register_node("farming:pumpkin_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_pumpkin_4.png"} +minetest.register_node("farming:pumpkin_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_pumpkin_5.png"} +minetest.register_node("farming:pumpkin_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_pumpkin_6.png"} +minetest.register_node("farming:pumpkin_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_pumpkin_7.png"} +minetest.register_node("farming:pumpkin_7", table.copy(crop_def)) + +-- stage 8 (final) +--[[ +crop_def.tiles = {"farming_pumpkin_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:pumpkin_slice 9'}, rarity = 1}, + } +} +minetest.register_node("farming:pumpkin_8", table.copy(crop_def)) +]] + +minetest.register_node("farming:pumpkin_8", { + description = S("Pumpkin"), + tiles = { + "farming_pumpkin_top.png", + "farming_pumpkin_top.png", + "farming_pumpkin_side.png" + }, + groups = { + food_pumpkin = 1, choppy = 1, oddly_breakable_by_hand = 1, + flammable = 2, plant = 1 + }, +-- drop = { +-- items = { +-- {items = {'farming:pumpkin_slice 9'}, rarity = 1}, +-- } +-- }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_alias("farming:pumpkin", "farming:pumpkin_8") diff --git a/mods/farming/crops/raspberry.lua b/mods/farming/crops/raspberry.lua new file mode 100644 index 0000000..713ea2f --- /dev/null +++ b/mods/farming/crops/raspberry.lua @@ -0,0 +1,69 @@ + +local S = farming.intllib + +-- raspberries +minetest.register_craftitem("farming:raspberries", { + description = S("Raspberries"), + inventory_image = "farming_raspberries.png", + groups = {food_raspberries = 1, food_raspberry = 1, food_berry = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:raspberry_1") + end, + on_use = minetest.item_eat(1), +}) + +-- raspberry smoothie +minetest.register_craftitem("farming:smoothie_raspberry", { + description = S("Raspberry Smoothie"), + inventory_image = "farming_raspberry_smoothie.png", + on_use = minetest.item_eat(2, "vessels:drinking_glass"), +}) + +minetest.register_craft({ + output = "farming:smoothie_raspberry", + recipe = { + {"default:snow"}, + {"group:food_raspberries"}, + {"vessels:drinking_glass"}, + } +}) + +-- raspberries definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_raspberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:raspberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_raspberry_2.png"} +minetest.register_node("farming:raspberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_raspberry_3.png"} +minetest.register_node("farming:raspberry_3", table.copy(crop_def)) + +-- stage 4 (final) +crop_def.tiles = {"farming_raspberry_4.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:raspberries 2'}, rarity = 1}, + {items = {'farming:raspberries'}, rarity = 2}, + {items = {'farming:raspberries'}, rarity = 3}, + } +} +minetest.register_node("farming:raspberry_4", table.copy(crop_def)) diff --git a/mods/farming/crops/rhubarb.lua b/mods/farming/crops/rhubarb.lua new file mode 100644 index 0000000..90a2d8b --- /dev/null +++ b/mods/farming/crops/rhubarb.lua @@ -0,0 +1,66 @@ + +local S = farming.intllib + +-- rhubarb +minetest.register_craftitem("farming:rhubarb", { + description = S("Rhubarb"), + inventory_image = "farming_rhubarb.png", + groups = {food_rhubarb = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:rhubarb_1") + end, + on_use = minetest.item_eat(1), +}) + +-- rhubarb pie +minetest.register_craftitem("farming:rhubarb_pie", { + description = S("Rhubarb Pie"), + inventory_image = "farming_rhubarb_pie.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:rhubarb_pie", + recipe = { + {"farming:baking_tray", "group:food_sugar", ""}, + {"group:food_rhubarb", "group:food_rhubarb", "group:food_rhubarb"}, + {"group:food_wheat", "group:food_wheat", "group:food_wheat"}, + }, + replacements = {{"group:food_baking_tray", "farming:baking_tray"}} +}) + +-- rhubarb definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_rhubarb_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:rhubarb_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_rhubarb_2.png"} +minetest.register_node("farming:rhubarb_2", table.copy(crop_def)) + +-- stage 3 (final) +crop_def.tiles = {"farming_rhubarb_3.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:rhubarb 2'}, rarity = 1}, + {items = {'farming:rhubarb'}, rarity = 2}, + {items = {'farming:rhubarb'}, rarity = 3}, + } +} +minetest.register_node("farming:rhubarb_3", table.copy(crop_def)) diff --git a/mods/farming/crops/tomato.lua b/mods/farming/crops/tomato.lua new file mode 100644 index 0000000..53012a8 --- /dev/null +++ b/mods/farming/crops/tomato.lua @@ -0,0 +1,79 @@ + +--[[ + Textures edited from: + http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1288375-food-plus-mod-more-food-than-you-can-imagine-v2-9) +]] + +local S = farming.intllib + +-- tomato +minetest.register_craftitem("farming:tomato", { + description = S("Tomato"), + inventory_image = "farming_tomato.png", + groups = {food_tomato = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:tomato_1") + end, + on_use = minetest.item_eat(4), +}) + +-- tomato definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_tomato_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:tomato_1", table.copy(crop_def)) + +-- stage2 +crop_def.tiles = {"farming_tomato_2.png"} +minetest.register_node("farming:tomato_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_tomato_3.png"} +minetest.register_node("farming:tomato_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_tomato_4.png"} +minetest.register_node("farming:tomato_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_tomato_5.png"} +minetest.register_node("farming:tomato_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_tomato_6.png"} +minetest.register_node("farming:tomato_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_tomato_7.png"} +crop_def.drop = { + items = { + {items = {'farming:tomato'}, rarity = 1}, + {items = {'farming:tomato'}, rarity = 3}, + } +} +minetest.register_node("farming:tomato_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_tomato_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:tomato 3'}, rarity = 1}, + {items = {'farming:tomato 3'}, rarity = 2}, + } +} +minetest.register_node("farming:tomato_8", table.copy(crop_def)) diff --git a/mods/farming/crops/wheat.lua b/mods/farming/crops/wheat.lua new file mode 100644 index 0000000..abf3ada --- /dev/null +++ b/mods/farming/crops/wheat.lua @@ -0,0 +1,244 @@ + +local S = farming.intllib + +-- wheat seeds +minetest.register_node("farming:seed_wheat", { + description = S("Wheat Seed"), + tiles = {"farming_wheat_seed.png"}, + inventory_image = "farming_wheat_seed.png", + wield_image = "farming_wheat_seed.png", + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "farming:wheat_1") + end, +}) + +-- harvested wheat +minetest.register_craftitem("farming:wheat", { + description = S("Wheat"), + inventory_image = "farming_wheat.png", + groups = {food_wheat = 1, flammable = 4}, +}) + +-- straw +minetest.register_node("farming:straw", { + description = S("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_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"}, + } +}) + +-- check and register stairs +if minetest.global_exists("stairs") then + + if stairs.mod and stairs.mod == "redo" then + + stairs.register_all("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw", + default.node_sound_leaves_defaults()) + else + + stairs.register_stair_and_slab("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.node_sound_leaves_defaults()) + end +end + +-- flour +minetest.register_craftitem("farming:flour", { + description = S("Flour"), + inventory_image = "farming_flour.png", + groups = {food_flour = 1, flammable = 1}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:flour", + recipe = { + "farming:wheat", "farming:wheat", "farming:wheat", + "farming:wheat", "farming:mortar_pestle" + }, + replacements = {{"group:food_mortar_pestle", "farming:mortar_pestle"}}, +}) + +-- bread +minetest.register_craftitem("farming:bread", { + description = S("Bread"), + inventory_image = "farming_bread.png", + on_use = minetest.item_eat(5), + groups = {food_bread = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:bread", + recipe = "farming:flour" +}) + +-- sliced bread +minetest.register_craftitem("farming:bread_slice", { + description = S("Sliced Bread"), + inventory_image = "farming_bread_slice.png", + on_use = minetest.item_eat(1), + groups = {food_bread_slice = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:bread_slice 5", + recipe = {"farming:bread", "group:food_cutting_board"}, + replacements = {{"group:food_cutting_board", "farming:cutting_board"}}, +}) + +-- toast +minetest.register_craftitem("farming:toast", { + description = S("Toast"), + inventory_image = "farming_toast.png", + on_use = minetest.item_eat(1), + groups = {food_toast = 1, flammable = 2}, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:toast", + recipe = "farming:bread_slice" +}) + +-- toast sandwich +minetest.register_craftitem("farming:toast_sandwich", { + description = S("Toast Sandwich"), + inventory_image = "farming_toast_sandwich.png", + on_use = minetest.item_eat(4), + groups = {flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:toast_sandwich", + recipe = { + {"farming:bread_slice"}, + {"farming:toast"}, + {"farming:bread_slice"}, + } +}) + +-- wheat definition +local crop_def = { + drawtype = "plantlike", + tiles = {"farming_wheat_1.png"}, + paramtype = "light", + paramtype2 = "meshoptions", + place_param2 = 3, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = farming.select, + groups = { + snappy = 3, flammable = 4, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() +} + +-- stage 1 +minetest.register_node("farming:wheat_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"farming_wheat_2.png"} +minetest.register_node("farming:wheat_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"farming_wheat_3.png"} +minetest.register_node("farming:wheat_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"farming_wheat_4.png"} +minetest.register_node("farming:wheat_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"farming_wheat_5.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 2}, + } +} +minetest.register_node("farming:wheat_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"farming_wheat_6.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 2}, + {items = {'farming:seed_wheat'}, rarity = 1}, + } +} +minetest.register_node("farming:wheat_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"farming_wheat_7.png"} +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_7", table.copy(crop_def)) + +-- stage 8 (final) +crop_def.tiles = {"farming_wheat_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {'farming:wheat'}, rarity = 1}, + {items = {'farming:wheat'}, rarity = 3}, + {items = {'farming:seed_wheat'}, rarity = 1}, + {items = {'farming:seed_wheat'}, rarity = 3}, + } +} +minetest.register_node("farming:wheat_8", table.copy(crop_def)) + +-- fuels +minetest.register_craft({ + type = "fuel", + recipe = "farming:straw", + burntime = 3, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:wheat", + burntime = 1, +}) diff --git a/mods/farming/depends.txt b/mods/farming/depends.txt new file mode 100644 index 0000000..650885b --- /dev/null +++ b/mods/farming/depends.txt @@ -0,0 +1,5 @@ +default +stairs? +intllib? +lucky_block? +toolranks? diff --git a/mods/farming/description.txt b/mods/farming/description.txt new file mode 100644 index 0000000..58bdc81 --- /dev/null +++ b/mods/farming/description.txt @@ -0,0 +1 @@ +Adds many plants and food to Minetest \ No newline at end of file diff --git a/mods/farming/farming.conf_example b/mods/farming/farming.conf_example new file mode 100644 index 0000000..f652e9c --- /dev/null +++ b/mods/farming/farming.conf_example @@ -0,0 +1,34 @@ + +--[[ + Farming settings can be changed here and kept inside mod folder + even after the mod has been updated, or you can place inside + world folder for map specific settings. +--]] + +-- true to enable crop/food in-game and on mapgen +farming.carrot = true +farming.potato = true +farming.tomato = true +farming.cucumber = true +farming.corn = true +farming.coffee = true +farming.melon = true +farming.pumpkin = true +farming.cocoa = true +farming.raspberry = true +farming.blueberry = true +farming.rhubarb = true +farming.beans = true +farming.grapes = true +farming.barley = true +farming.chili = true +farming.hemp = true +farming.onion = true +farming.garlic = true +farming.pepper = true +farming.pineapple = true +farming.peas = true +farming.beetroot = true + +-- rarety of crops on map, default is 0.001 (higher number = more crops) +farming.rarety = 0.002 diff --git a/mods/farming/food.lua b/mods/farming/food.lua new file mode 100644 index 0000000..01cf0fa --- /dev/null +++ b/mods/farming/food.lua @@ -0,0 +1,188 @@ + +local S = farming.intllib + +--= Sugar + +minetest.register_craftitem("farming:sugar", { + description = S("Sugar"), + inventory_image = "farming_sugar.png", + groups = {food_sugar = 1, flammable = 3}, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 3, + output = "farming:sugar 2", + recipe = "default:papyrus", +}) + + +--= Salt + +minetest.register_node("farming:salt", { + description = ("Salt"), + inventory_image = "farming_salt.png", + wield_image = "farming_salt.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"farming_salt.png"}, + groups = {food_salt = 1, vessel = 1, dig_immediate = 3, + attached_node = 1}, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 15, + output = "farming:salt", + recipe = "bucket:bucket_water", + replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}} +}) + +--= Rose Water + +minetest.register_node("farming:rose_water", { + description = ("Rose Water"), + inventory_image = "farming_rose_water.png", + wield_image = "farming_rose_water.png", + drawtype = "plantlike", + visual_scale = 0.8, + paramtype = "light", + tiles = {"farming_rose_water.png"}, + groups = {food_rose_water = 1, vessel = 1, dig_immediate = 3, + attached_node = 1}, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.3, 0.25} + }, +}) + +minetest.register_craft({ + output = "farming:rose_water", + recipe = { + {"flowers:rose", "flowers:rose", "flowers:rose"}, + {"flowers:rose", "flowers:rose", "flowers:rose"}, + {"bucket:bucket_water", "group:food_pot", "vessels:glass_bottle"}, + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"}, + {"group:food_pot", "farming:pot"}, + } +}) + +--[[= Turkish Delight + +minetest.register_craftitem("farming:turkish_delight", { + description = S("Turkish Delight"), + inventory_image = "farming_turkish_delight.png", + groups = {flammable = 3}, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + output = "farming:turkish_delight 4", + recipe = { + {"group:food_gelatin", "group:food_sugar", "group:food_gelatin"}, + {"group:food_sugar", "group:food_rose_water", "group:food_sugar"}, + {"group:food_cornstarch", "group:food_sugar", "dye:pink"}, + }, + replacements = { + {"group:food_cornstarch", "farming:bowl"}, + {"group:food_rose_water", "vessels:glass_bottle"}, + }, +}) +--]] +--= Garlic Bread + +minetest.register_craftitem("farming:garlic_bread", { + description = S("Garlic Bread"), + inventory_image = "farming_garlic_bread.png", + groups = {flammable = 3}, + on_use = minetest.item_eat(2), +}) + +minetest.register_craft({ + type = "shapeless", + output = "farming:garlic_bread", + recipe = {"group:food_toast", "group:food_garlic_clove", "group:food_garlic_clove"}, +}) + +--= Donuts (thanks to Bockwurst for making the donut images) + +minetest.register_craftitem("farming:donut", { + description = S("Donut"), + inventory_image = "farming_donut.png", + on_use = minetest.item_eat(4), +}) + +minetest.register_craft({ + output = "farming:donut 3", + recipe = { + {"", "group:food_wheat", ""}, + {"group:food_wheat", "group:food_sugar", "group:food_wheat"}, + {"", "group:food_wheat", ""}, + } +}) + +minetest.register_craftitem("farming:donut_chocolate", { + description = S("Chocolate Donut"), + inventory_image = "farming_donut_chocolate.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:donut_chocolate", + recipe = { + {'group:food_cocoa'}, + {'farming:donut'}, + } +}) + +minetest.register_craftitem("farming:donut_apple", { + description = S("Apple Donut"), + inventory_image = "farming_donut_apple.png", + on_use = minetest.item_eat(6), +}) + +minetest.register_craft({ + output = "farming:donut_apple", + recipe = { + {'default:apple'}, + {'farming:donut'}, + } +}) + +--= Porridge Oats + +minetest.register_craftitem("farming:porridge", { + description = S("Porridge"), + inventory_image = "farming_porridge.png", + on_use = minetest.item_eat(6, "farming:bowl"), +}) + +minetest.after(0, function() + + local fluid = "bucket:bucket_water" + local fluid_return = "bucket:bucket_water" + + if minetest.get_modpath("mobs") and mobs and mobs.mod == "redo" then + fluid = "group:food_milk" + fluid_return = "mobs:bucket_milk" + end + + minetest.register_craft({ + type = "shapeless", + output = "farming:porridge", + recipe = { + "group:food_barley", "group:food_barley", "group:food_wheat", + "group:food_wheat", "group:food_bowl", fluid + }, + replacements = {{fluid_return, "bucket:bucket_empty"}} + }) +end) diff --git a/mods/farming/grass.lua b/mods/farming/grass.lua new file mode 100644 index 0000000..9644254 --- /dev/null +++ b/mods/farming/grass.lua @@ -0,0 +1,43 @@ + +for i = 4, 5 do + + -- Override default grass and have it drop Wheat Seeds + + minetest.override_item("default:grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_wheat'}, rarity = 5}, + {items = {'default:grass_1'}}, + } + }, + }) + + -- Override default dry grass and have it drop Barley Seeds + + if minetest.registered_nodes["default:dry_grass_1"] then + + minetest.override_item("default:dry_grass_" .. i, { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_barley'}, rarity = 6}, + {items = {'default:dry_grass_1'}}, + } + }, + }) + end + +end + +-- Override default Jungle Grass and have it drop Cotton Seeds + +minetest.override_item("default:junglegrass", { + drop = { + max_items = 1, + items = { + {items = {'farming:seed_cotton'}, rarity = 8}, + {items = {'default:junglegrass'}}, + } + }, +}) diff --git a/mods/farming/hoes.lua b/mods/farming/hoes.lua new file mode 100644 index 0000000..633e6f0 --- /dev/null +++ b/mods/farming/hoes.lua @@ -0,0 +1,332 @@ + +local S = farming.intllib +local tr = minetest.get_modpath("toolranks") + +-- Hoe registration function + +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 = S("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 + +-- Turns dirt with group soil=1 into soil + +function farming.hoe_on_use(itemstack, user, pointed_thing, uses) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + local upos = pointed_thing.under + + if minetest.is_protected(upos, user:get_player_name()) then + minetest.record_protection_violation(upos, user:get_player_name()) + return + end + + 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] + or 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 dirt + if minetest.get_item_group(under.name, "soil") ~= 1 then + return + end + + -- turn the node into soil, wear out item and play sound + minetest.set_node(pt.under, {name = "farming:soil"}) + + minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}) + + local wear = 65535 / (uses -1) + + if farming.is_creative(user:get_player_name()) then + if tr then + wear = 1 + else + wear = 0 + end + end + + if tr then + itemstack = toolranks.new_afteruse(itemstack, user, under, {wear = wear}) + else + itemstack:add_wear(wear) + end + + return itemstack +end + +-- Define Hoes + +farming.register_hoe(":farming:hoe_wood", { + description = S("Wooden Hoe"), + inventory_image = "farming_tool_woodhoe.png", + max_uses = 30, + material = "group:wood" +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:hoe_wood", + burntime = 5, +}) + +farming.register_hoe(":farming:hoe_stone", { + description = S("Stone Hoe"), + inventory_image = "farming_tool_stonehoe.png", + max_uses = 90, + material = "group:stone" +}) + +farming.register_hoe(":farming:hoe_steel", { + description = S("Steel Hoe"), + inventory_image = "farming_tool_steelhoe.png", + max_uses = 200, + material = "default:steel_ingot" +}) + +farming.register_hoe(":farming:hoe_bronze", { + description = S("Bronze Hoe"), + inventory_image = "farming_tool_bronzehoe.png", + max_uses = 500, + groups = {not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_mese", { + description = S("Mese Hoe"), + inventory_image = "farming_tool_mesehoe.png", + max_uses = 350, + groups = {not_in_creative_inventory = 1}, +}) + +farming.register_hoe(":farming:hoe_diamond", { + description = S("Diamond Hoe"), + inventory_image = "farming_tool_diamondhoe.png", + max_uses = 500, + groups = {not_in_creative_inventory = 1}, +}) + +-- Toolranks support +if tr then + +minetest.override_item("farming:hoe_wood", { + original_description = "Wood Hoe", + description = toolranks.create_description("Wood Hoe")}) + +minetest.override_item("farming:hoe_stone", { + original_description = "Stone Hoe", + description = toolranks.create_description("Stone Hoe")}) + +minetest.override_item("farming:hoe_steel", { + original_description = "Steel Hoe", + description = toolranks.create_description("Steel Hoe")}) + +minetest.override_item("farming:hoe_bronze", { + original_description = "Bronze Hoe", + description = toolranks.create_description("Bronze Hoe")}) + +minetest.override_item("farming:hoe_mese", { + original_description = "Mese Hoe", + description = toolranks.create_description("Mese Hoe")}) + +minetest.override_item("farming:hoe_diamond", { + original_description = "Diamond Hoe", + description = toolranks.create_description("Diamond Hoe")}) +end + + +-- hoe bomb function +local function hoe_area(pos, player) + + -- check for protection + if minetest.is_protected(pos, player:get_player_name()) then + minetest.record_protection_violation(pos, player:get_player_name()) + return + end + + local r = 5 -- radius + + -- remove flora (grass, flowers etc.) + local res = minetest.find_nodes_in_area( + {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, + {x = pos.x + r, y = pos.y + 2, z = pos.z + r}, + {"group:flora"}) + + for n = 1, #res do + minetest.swap_node(res[n], {name = "air"}) + end + + -- replace dirt with tilled soil + res = nil + res = minetest.find_nodes_in_area_under_air( + {x = pos.x - r, y = pos.y - 1, z = pos.z - r}, + {x = pos.x + r, y = pos.y + 2, z = pos.z + r}, + {"group:soil"}) + + for n = 1, #res do + minetest.swap_node(res[n], {name = "farming:soil"}) + end +end + + +-- throwable hoe bomb +minetest.register_entity("farming:hoebomb_entity", { + physical = true, + visual = "sprite", + visual_size = {x = 1.0, y = 1.0}, + textures = {"farming_hoe_bomb.png"}, + collisionbox = {0,0,0,0,0,0}, + lastpos = {}, + player = "", + + on_step = function(self, dtime) + + if not self.player then + + self.object:remove() + + return + end + + local pos = self.object:get_pos() + + if self.lastpos.x ~= nil then + + local vel = self.object:getvelocity() + + -- only when potion hits something physical + if vel.x == 0 + or vel.y == 0 + or vel.z == 0 then + + if self.player ~= "" then + + -- round up coords to fix glitching through doors + self.lastpos = vector.round(self.lastpos) + + hoe_area(self.lastpos, self.player) + end + + self.object:remove() + + return + + end + end + + self.lastpos = pos + end +}) + + +-- actual throwing function +local function throw_potion(itemstack, player) + + local playerpos = player:get_pos() + + local obj = minetest.add_entity({ + x = playerpos.x, + y = playerpos.y + 1.5, + z = playerpos.z + }, "farming:hoebomb_entity") + + local dir = player:get_look_dir() + local velocity = 20 + + obj:setvelocity({ + x = dir.x * velocity, + y = dir.y * velocity, + z = dir.z * velocity + }) + + obj:setacceleration({ + x = dir.x * -3, + y = -9.5, + z = dir.z * -3 + }) + + obj:setyaw(player:get_look_yaw() + math.pi) + obj:get_luaentity().player = player +end + + +-- hoe bomb item +minetest.register_craftitem("farming:hoe_bomb", { + description = S("Hoe Bomb (use or throw on grassy areas to hoe land"), + inventory_image = "farming_hoe_bomb.png", + groups = {flammable = 2, not_in_creative_inventory = 1}, + on_use = function(itemstack, user, pointed_thing) + + if pointed_thing.type == "node" then + hoe_area(pointed_thing.above, user) + else + throw_potion(itemstack, user) + + if not farming.is_creative(user:get_player_name()) then + + itemstack:take_item() + + return itemstack + end + end + end, +}) diff --git a/mods/farming/init.lua b/mods/farming/init.lua new file mode 100644 index 0000000..038ba6d --- /dev/null +++ b/mods/farming/init.lua @@ -0,0 +1,681 @@ +--[[ + Farming Redo Mod + by TenPlus1 + NEW growing routine by prestidigitator + auto-refill by crabman77 +]] + +farming = {} +farming.mod = "redo" +farming.version = "20180617" +farming.path = minetest.get_modpath("farming") +farming.select = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} +} + + +local creative_mode_cache = minetest.settings:get_bool("creative_mode") + +function farming.is_creative(name) + return creative_mode_cache or minetest.check_player_privs(name, {creative = true}) +end + + +local statistics = dofile(farming.path .. "/statistics.lua") + +-- Intllib +local S = dofile(farming.path .. "/intllib.lua") +farming.intllib = S + + +-- Utility Function +local time_speed = tonumber(minetest.settings:get("time_speed")) or 72 +local SECS_PER_CYCLE = (time_speed > 0 and (24 * 60 * 60) / time_speed) or 0 +local function clamp(x, min, max) + return (x < min and min) or (x > max and max) or x +end + + +-- return amount of day or night that has elapsed +-- dt is time elapsed, count_day if true counts day, otherwise night +local function day_or_night_time(dt, count_day) + + local t_day = minetest.get_timeofday() + local t1_day = t_day - dt / SECS_PER_CYCLE + local t1_c, t2_c -- t1_c < t2_c and t2_c always in [0, 1) + + if count_day then + + if t_day < 0.25 then + t1_c = t1_day + 0.75 -- Relative to sunup, yesterday + t2_c = t_day + 0.75 + else + t1_c = t1_day - 0.25 -- Relative to sunup, today + t2_c = t_day - 0.25 + end + else + if t_day < 0.75 then + t1_c = t1_day + 0.25 -- Relative to sundown, yesterday + t2_c = t_day + 0.25 + else + t1_c = t1_day - 0.75 -- Relative to sundown, today + t2_c = t_day - 0.75 + end + end + + local dt_c = clamp(t2_c, 0, 0.5) - clamp(t1_c, 0, 0.5) -- this cycle + + if t1_c < -0.5 then + local nc = math.floor(-t1_c) + t1_c = t1_c + nc + dt_c = dt_c + 0.5 * nc + clamp(-t1_c - 0.5, 0, 0.5) + end + + return dt_c * SECS_PER_CYCLE +end + + +-- Growth Logic +local STAGE_LENGTH_AVG = 160.0 +local STAGE_LENGTH_DEV = STAGE_LENGTH_AVG / 6 + + +-- return plant name and stage from node provided +local function plant_name_stage(node) + + local name + + if type(node) == "table" then + + if node.name then + name = node.name + elseif node.x and node.y and node.z then + node = minetest.get_node_or_nil(node) + name = node and node.name + end + else + name = tostring(node) + end + + if not name or name == "ignore" then + return nil + end + + local sep_pos = name:find("_[^_]+$") + + if sep_pos and sep_pos > 1 then + + local stage = tonumber(name:sub(sep_pos + 1)) + + if stage and stage >= 0 then + return name:sub(1, sep_pos - 1), stage + end + end + + return name, 0 +end + + +-- Map from node name to +-- { plant_name = ..., name = ..., stage = n, stages_left = { node_name, ... } } + +local plant_stages = {} + +farming.plant_stages = plant_stages + +--- Registers the stages of growth of a (possible plant) node. + -- + -- @param node + -- Node or position table, or node name. + -- @return + -- The (possibly zero) number of stages of growth the plant will go through + -- before being fully grown, or nil if not a plant. + +local register_plant_node + +-- Recursive helper +local function reg_plant_stages(plant_name, stage, force_last) + + local node_name = plant_name and plant_name .. "_" .. stage + local node_def = node_name and minetest.registered_nodes[node_name] + + if not node_def then + return nil + end + + local stages = plant_stages[node_name] + + if stages then + return stages + end + + if minetest.get_item_group(node_name, "growing") > 0 then + + local ns = reg_plant_stages(plant_name, stage + 1, true) + local stages_left = (ns and { ns.name, unpack(ns.stages_left) }) or {} + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = stages_left + } + + if #stages_left > 0 then + + local old_constr = node_def.on_construct + local old_destr = node_def.on_destruct + + minetest.override_item(node_name, + { + on_construct = function(pos) + + if old_constr then + old_constr(pos) + end + + farming.handle_growth(pos) + end, + + on_destruct = function(pos) + + minetest.get_node_timer(pos):stop() + + if old_destr then + old_destr(pos) + end + end, + + on_timer = function(pos, elapsed) + return farming.plant_growth_timer(pos, elapsed, node_name) + end, + }) + end + + elseif force_last then + + stages = { + plant_name = plant_name, + name = node_name, + stage = stage, + stages_left = {} + } + else + return nil + end + + plant_stages[node_name] = stages + + return stages +end + + +local register_plant_node = function(node) + + local plant_name, stage = plant_name_stage(node) + + if plant_name then + + local stages = reg_plant_stages(plant_name, stage, false) + return stages and #stages.stages_left + else + return nil + end +end + + +local function set_growing(pos, stages_left) + + if not stages_left then + return + end + + local timer = minetest.get_node_timer(pos) + + if stages_left > 0 then + + if not timer:is_started() then + + local stage_length = statistics.normal(STAGE_LENGTH_AVG, STAGE_LENGTH_DEV) + + stage_length = clamp(stage_length, 0.5 * STAGE_LENGTH_AVG, 3.0 * STAGE_LENGTH_AVG) + + timer:set(stage_length, -0.5 * math.random() * STAGE_LENGTH_AVG) + end + + elseif timer:is_started() then + timer:stop() + end +end + + +-- detects a crop at given position, starting or stopping growth timer when needed +function farming.handle_growth(pos, node) + + if not pos then + return + end + + local stages_left = register_plant_node(node or pos) + + if stages_left then + set_growing(pos, stages_left) + end +end + + +minetest.after(0, function() + + for _, node_def in ipairs(minetest.registered_nodes) do + register_plant_node(node_def) + end +end) + + +-- Just in case a growing type or added node is missed (also catches existing +-- nodes added to map before timers were incorporated). +minetest.register_abm({ + nodenames = { "group:growing" }, + interval = 300, + chance = 1, + catch_up = false, + action = function(pos, node) + farming.handle_growth(pos, node) + end +}) + + +-- Plant timer function that grows plants under the right conditions. +function farming.plant_growth_timer(pos, elapsed, node_name) + + local stages = plant_stages[node_name] + + if not stages then + return false + end + + local max_growth = #stages.stages_left + + if max_growth <= 0 then + return false + end + + -- custom growth check + local chk = minetest.registered_nodes[node_name].growth_check + + if chk then + + if chk(pos, node_name) then + return true + end + + -- otherwise check for wet soil beneath crop + else + local under = minetest.get_node({ x = pos.x, y = pos.y - 1, z = pos.z }) + + if minetest.get_item_group(under.name, "soil") < 3 then + return true + end + end + + local growth + local light_pos = {x = pos.x, y = pos.y, z = pos.z} -- was y + 1 + local lambda = elapsed / STAGE_LENGTH_AVG + + if lambda < 0.1 then + return true + end + + local MIN_LIGHT = minetest.registered_nodes[node_name].minlight or 13 + local MAX_LIGHT = minetest.registered_nodes[node_name].maxlight or 15 + --print ("---", MIN_LIGHT, MAX_LIGHT) + + if max_growth == 1 or lambda < 2.0 then + + local light = (minetest.get_node_light(light_pos) or 0) + --print ("light level:", light) + + if light < MIN_LIGHT or light > MAX_LIGHT then + return true + end + + growth = 1 + else + local night_light = (minetest.get_node_light(light_pos, 0) or 0) + local day_light = (minetest.get_node_light(light_pos, 0.5) or 0) + local night_growth = night_light >= MIN_LIGHT and night_light <= MAX_LIGHT + local day_growth = day_light >= MIN_LIGHT and day_light <= MAX_LIGHT + + if not night_growth then + + if not day_growth then + return true + end + + lambda = day_or_night_time(elapsed, true) / STAGE_LENGTH_AVG + + elseif not day_growth then + + lambda = day_or_night_time(elapsed, false) / STAGE_LENGTH_AVG + end + + growth = statistics.poisson(lambda, max_growth) + + if growth < 1 then + return true + end + end + + if minetest.registered_nodes[stages.stages_left[growth]] then + + local p2 = minetest.registered_nodes[stages.stages_left[growth] ].place_param2 or 1 + + minetest.swap_node(pos, {name = stages.stages_left[growth], param2 = p2}) + else + return true + end + + return growth ~= max_growth +end + + +-- refill placed plant by crabman (26/08/2015) updated by TenPlus1 +function farming.refill_plant(player, plantname, index) + + local inv = player:get_inventory() + local old_stack = inv:get_stack("main", index) + + if old_stack:get_name() ~= "" then + return + end + + for i, stack in ipairs(inv:get_list("main")) do + + if stack:get_name() == plantname and i ~= index then + + inv:set_stack("main", index, stack) + stack:clear() + inv:set_stack("main", i, stack) + + return + end + end +end + + +-- Place Seeds on Soil +function farming.place_seed(itemstack, placer, pointed_thing, plantname) + + local pt = pointed_thing + + -- check if pointing at a node + if not pt or pt.type ~= "node" then + return + end + + local under = minetest.get_node(pt.under) + + -- am I right-clicking on something that has a custom on_place set? + -- thanks to Krock for helping with this issue :) + local def = minetest.registered_nodes[under.name] + if placer and def and def.on_rightclick then + return def.on_rightclick(pt.under, under, placer, itemstack) + end + + local above = minetest.get_node(pt.above) + + -- check if pointing at the top of the node + if pt.above.y ~= pt.under.y + 1 then + return + end + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] + or not minetest.registered_nodes[above.name] then + return + end + + -- can I replace above node, and am I pointing at soil + if not minetest.registered_nodes[above.name].buildable_to + or minetest.get_item_group(under.name, "soil") < 2 + -- avoid multiple seed placement bug + or minetest.get_item_group(above.name, "plant") ~= 0 then + return + end + + -- is player planting seed? + local name = placer and placer:get_player_name() or "" + + -- if not protected then add node and remove 1 item from the itemstack + if not minetest.is_protected(pt.above, name) then + + local p2 = minetest.registered_nodes[plantname].place_param2 or 1 + + minetest.set_node(pt.above, {name = plantname, param2 = p2}) + +--minetest.get_node_timer(pt.above):start(1) + + minetest.sound_play("default_place_node", {pos = pt.above, gain = 1.0}) + + if placer and not farming.is_creative(placer:get_player_name()) then + + local name = itemstack:get_name() + + itemstack:take_item() + + -- check for refill + if itemstack:get_count() == 0 then + + minetest.after(0.10, + farming.refill_plant, + placer, + name, + placer:get_wield_index() + ) + end + end + + return itemstack + end +end + + +-- Function to register plants (default farming compatibility) +farming.register_plant = function(name, def) + + if not def.steps then + return nil + end + + local mname = name:split(":")[1] + local pname = name:split(":")[2] + + -- Check def + def.description = def.description or S("Seed") + def.inventory_image = def.inventory_image or "unknown_item.png" + def.minlight = def.minlight or 13 + def.maxlight = def.maxlight or 15 + + -- Register seed + minetest.register_node(":" .. mname .. ":seed_" .. pname, { + + description = def.description, + tiles = {def.inventory_image}, + inventory_image = def.inventory_image, + wield_image = def.inventory_image, + drawtype = "signlike", + groups = {seed = 1, snappy = 3, attached_node = 1, flammable = 2}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + place_param2 = def.place_param2 or nil, + next_plant = mname .. ":" .. pname .. "_1", + + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, + pointed_thing, mname .. ":" .. pname .. "_1") + end, + }) + + -- Register harvest + minetest.register_craftitem(":" .. mname .. ":" .. pname, { + description = pname:gsub("^%l", string.upper), + inventory_image = mname .. "_" .. pname .. ".png", + 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 g = { + snappy = 3, flammable = 2, plant = 1, growing = 1, + attached_node = 1, not_in_creative_inventory = 1, + } + + -- Last step doesn't need growing=1 so Abm never has to check these + if i == def.steps then + g.growing = 0 + end + + local node_name = mname .. ":" .. pname .. "_" .. i + + local next_plant = nil + + if i < def.steps then + next_plant = mname .. ":" .. pname .. "_" .. (i + 1) + end + + minetest.register_node(node_name, { + drawtype = "plantlike", + waving = 1, + tiles = {mname .. "_" .. pname .. "_" .. i .. ".png"}, + paramtype = "light", + paramtype2 = def.paramtype2, + place_param2 = def.place_param2, + walkable = false, + buildable_to = true, + sunlight_propagates = true, + drop = drop, + selection_box = farming.select, + groups = g, + sounds = default.node_sound_leaves_defaults(), + minlight = def.minlight, + maxlight = def.maxlight, + next_plant = next_plant, + }) + end + + -- Return info + return {seed = mname .. ":seed_" .. pname, harvest = mname .. ":" .. pname} +end + + +-- default settings +farming.carrot = true +farming.potato = true +farming.tomato = true +farming.cucumber = true +farming.corn = true +farming.coffee = true +farming.melon = true +farming.pumpkin = true +farming.cocoa = true +farming.raspberry = true +farming.blueberry = true +farming.rhubarb = true +farming.beans = true +farming.grapes = true +farming.barley = true +farming.chili = true +farming.hemp = true +farming.garlic = true +farming.onion = true +farming.pepper = true +farming.pineapple = true +farming.peas = true +farming.beetroot = true +farming.rarety = 0.002 -- 0.006 + + +-- Load new global settings if found inside mod folder +local input = io.open(farming.path.."/farming.conf", "r") +if input then + dofile(farming.path .. "/farming.conf") + input:close() + input = nil +end + +-- load new world-specific settings if found inside world folder +local worldpath = minetest.get_worldpath() +local input = io.open(worldpath.."/farming.conf", "r") +if input then + dofile(worldpath .. "/farming.conf") + input:close() + input = nil +end + + +-- important items +dofile(farming.path.."/soil.lua") +dofile(farming.path.."/hoes.lua") +dofile(farming.path.."/grass.lua") +dofile(farming.path.."/utensils.lua") + +-- default crops +dofile(farming.path.."/crops/wheat.lua") +dofile(farming.path.."/crops/cotton.lua") + + +-- helper function +local function ddoo(file, check) + + if check then + dofile(farming.path .. "/crops/" .. file) + end +end + +-- add additional crops and food (if enabled) +ddoo("carrot.lua", farming.carrot) +ddoo("potato.lua", farming.potato) +ddoo("tomato.lua", farming.tomato) +ddoo("cucumber.lua", farming.cucumber) +ddoo("corn.lua", farming.corn) +ddoo("coffee.lua", farming.coffee) +ddoo("melon.lua", farming.melon) +ddoo("pumpkin.lua", farming.pumpkin) +ddoo("cocoa.lua", farming.cocoa) +ddoo("raspberry.lua", farming.raspberry) +ddoo("blueberry.lua", farming.blueberry) +ddoo("rhubarb.lua", farming.rhubarb) +ddoo("beans.lua", farming.beans) +ddoo("grapes.lua", farming.grapes) +ddoo("barley.lua", farming.barley) +ddoo("hemp.lua", farming.hemp) +ddoo("garlic.lua", farming.garlic) +ddoo("onion.lua", farming.onion) +ddoo("pepper.lua", farming.pepper) +ddoo("pineapple.lua", farming.pineapple) +ddoo("peas.lua", farming.peas) +ddoo("beetroot.lua", farming.beetroot) +ddoo("chili.lua", farming.chili) + +dofile(farming.path.."/food.lua") +dofile(farming.path.."/mapgen.lua") +dofile(farming.path.."/compatibility.lua") -- Farming Plus compatibility +dofile(farming.path.."/lucky_block.lua") diff --git a/mods/farming/intllib.lua b/mods/farming/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/mods/farming/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/mods/farming/license.txt b/mods/farming/license.txt new file mode 100644 index 0000000..b7bb7a9 --- /dev/null +++ b/mods/farming/license.txt @@ -0,0 +1,130 @@ +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. + + +License of media (textures): +---------------------------- +Created by PilzAdam (License: WTFPL): + farming_bread.png + farming_soil.png + farming_soil_wet.png + farming_soil_wet_side.png + farming_string.png + +Created by Napiophelios (CC BY-SA 3.0): + farming_cotton.png + +Created by Calinou (License: CC BY-SA): + farming_tool_bronzehoe.png + farming_tool_steelhoe.png + farming_tool_stonehoe.png + farming_tool_woodhoe.png + farming_tool_mesehoe.png + farming_tool_diamondhoe.png + +Created by VanessaE (License: WTFPL): + farming_cotton_seed.png + farming_wheat_seed.png + farming_flour.png + farming_wheat.png + farming_wheat_1.png + farming_wheat_2.png + farming_wheat_3.png + farming_wheat_4.png + farming_wheat_5.png + farming_wheat_5.png + farming_wheat_7.png + farming_wheat_8.png + farming_cotton_1.png + farming_cotton_2.png + farming_cotton_3.png + farming_cotton_4.png + farming_cotton_5.png + farming_cotton_6.png + farming_cotton_7.png + farming_cotton_8.png + +Created by Doc (License: WTFPL): + farming_cucumber.png + farming_cucumber_1.png + farming_cucumber_2.png + farming_cucumber_3.png + farming_cucumber_4.png + farming_potato.png + farming_potato_1.png + farming_potato_2.png + farming_potato_3.png + farming_potato_4.png + farming_raspberries.png + farming_raspberry_1.png + farming_raspberry_2.png + farming_raspberry_3.png + farming_raspberry_4.png + +Created by Gambit: + default_junglegrass.png + farming_carrot.png + farming_carrot_1.png + farming_carrot_2.png + farming_carrot_3.png + farming_carrot_4.png + farming_carrot_5.png + farming_carrot_6.png + farming_carrot_7.png + farming_carrot_8.png + +Created by JoseTheCrafter and edited by TenPlus1: + farming_tomato.png + farming_tomato_1.png + farming_tomato_2.png + farming_tomato_3.png + farming_tomato_4.png + farming_tomato_5.png + farming_tomato_6.png + farming_tomato_7.png + farming_tomato_8.png + +Created by GeMinecraft and edited by TenPlus1: + farming_corn.png + farming_corn_cob.png + farming_corn_1.png + farming_corn_2.png + farming_corn_3.png + farming_corn_4.png + farming_corn_5.png + farming_corn_6.png + farming_corn_7.png + farming_corn_8.png + +Created by TenPlus1 + farming_cocoa_1.png + farming_cocoa_2.png + farming_cocoa_3.png + farming_cocoa_beans.png + farming_cookie.png + farming_raspberry_smoothie.png + farming_rhubarb_1.png + farming_rhubarb_2.png + farming_rhubarb_3.png + farming_rhubarb.png + farming_rhubarb_pie.png + farming_hemp*.png diff --git a/mods/farming/locale/de.po b/mods/farming/locale/de.po new file mode 100644 index 0000000..731b31d --- /dev/null +++ b/mods/farming/locale/de.po @@ -0,0 +1,262 @@ +# German Translation for farming mod. +# Copyright (C) 2017 +# This file is distributed under the same license as the farming package. +# Xanthin. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-03-31 HO:MI+ZONE\n" +"PO-Revision-Date: 2016-03-31 HO:MI+ZONE\n" +"Last-Translator: Xanthin\n" +"Language-Team: \n" +"Language: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "Gerstenkörner" + +#: barley.lua +msgid "Barley" +msgstr "Gerste" + +#: beanpole.lua +msgid "Green Beans" +msgstr "Grüne Bohnen" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "Bohnenstange (vor dem Pflanzen der Bohnen auf den\nAckerboden stellen)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "Blaubeeren" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "Blaubeermuffin" + +#: carrot.lua +msgid "Carrot" +msgstr "Möhre" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "Goldene Möhre" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "Kakaobohne" + +#: cocoa.lua +msgid "Cookie" +msgstr "Keks" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "Tafel Zartbitterschokolade" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "Kaffeebohnen" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "Tasse (leer)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "Kalte Tasse Kaffee" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "Heiße Tasse Kaffee" + +#: corn.lua +msgid "Corn" +msgstr "Mais" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "Maiskolben" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "Flasche Ethanol" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "Baumwollsamen" + +#: cotton.lua +msgid "Cotton" +msgstr "Baumwolle" + +#: cucumber.lua +msgid "Cucumber" +msgstr "Gurke" + +#: donut.lua +msgid "Donut" +msgstr "Donut" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "Schokodonut" + +#: donut.lua +msgid "Apple Donut" +msgstr "Apfeldonut" + +#: grapes.lua +msgid "Grapes" +msgstr "Weintrauben" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "Spalier (vor dem Pflanzen der Weintrauben auf den\nAckerboden stellen)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "Hanfsamen" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "Hanfblatt" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "Flasche mit Hanföl" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "Hanffaser" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Hanfseil" + +#: hoes.lua +msgid "Hoe" +msgstr "Hacke" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "Holzhacke" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "Steinhacke" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "Stahlhacke" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "Bronzehacke" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "Mesehacke" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "Diamanthacke" + +#: init.lua +msgid "Seed" +msgstr "Saatgut" + +#: melon.lua +msgid "Melon Slice" +msgstr "Melonenscheibe" + +#: melon.lua +msgid "Melon" +msgstr "Melone" + +#: potato.lua +msgid "Potato" +msgstr "Kartoffel" + +#: potato.lua +msgid "Baked Potato" +msgstr "Ofenkartoffel" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "Kürbis" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "Kürbisscheibe" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "Kürbislaterne (Punch zum Ein- und Ausschalten)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "Kürbisbrot" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "Kürbisteig" + +#: raspberry.lua +msgid "Raspberries" +msgstr "Himbeeren" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "Himbeersmoothie" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "Rhabarber" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "Rhabarberkuchen" + +#: soil.lua +msgid "Soil" +msgstr "Ackerboden" + +#: soil.lua +msgid "Wet Soil" +msgstr "Bewässerter Ackerboden" + +#: sugar.lua +msgid "Sugar" +msgstr "Zucker" + +#: tomato.lua +msgid "Tomato" +msgstr "Tomate" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "Weizenkörner" + +#: wheat.lua +msgid "Wheat" +msgstr "Weizen" + +#: wheat.lua +msgid "Straw" +msgstr "Stroh" + +#: wheat.lua +msgid "Flour" +msgstr "Mehl" + +#: wheat.lua +msgid "Bread" +msgstr "Brot" diff --git a/mods/farming/locale/fr.po b/mods/farming/locale/fr.po new file mode 100644 index 0000000..7b50640 --- /dev/null +++ b/mods/farming/locale/fr.po @@ -0,0 +1,259 @@ +# 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: 2018-03-27 20:21+0200\n" +"PO-Revision-Date: 2018-03-27 22:16+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.7.1\n" +"Last-Translator: \n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Language: fr\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "Graine d'orge" + +#: barley.lua +msgid "Barley" +msgstr "Orge" + +#: beanpole.lua +msgid "Green Beans" +msgstr "Haricots verts" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "Tuteur pour haricots (placer sur le sol avant de planter des haricots)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "Myrtilles" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "Gâteau aux myrtilles" + +#: carrot.lua +msgid "Carrot" +msgstr "Carotte" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "Carotte dorée" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "Fèves de chocolat" + +#: cocoa.lua +msgid "Cookie" +msgstr "Biscuit" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "Barre de chocolat noir" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "Grains de café" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "Tasse (vide)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "Tasse de café froid" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "Tasse de café chaud" + +#: corn.lua +msgid "Corn" +msgstr "Maïs" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "Épi de maïs" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "Bouteille de'éthanol" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "Graines de coton" + +#: cotton.lua +msgid "Cotton" +msgstr "Coton" + +#: cucumber.lua +msgid "Cucumber" +msgstr "Concombre" + +#: donut.lua +msgid "Donut" +msgstr "Beignet" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "Beignet au chocolat" + +#: donut.lua +msgid "Apple Donut" +msgstr "Beignet aux pommes" + +#: grapes.lua +msgid "Grapes" +msgstr "Raisins" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "Treillis (placer sur le sol avant de planter les raisins)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "Graines de chanvre" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "Feuille de chanvre" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "Bouteille d'huile de chanvre" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "Fibre de chanvre" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Corde de chanvre" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "Houe en bois" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "Houe en pierre" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "Houe en acier" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "Houe en bronze" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "Houe en mese" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "Houe en diamant" + +#: init.lua +msgid "Seed" +msgstr "Graine" + +#: melon.lua +msgid "Melon Slice" +msgstr "Tranche de melon" + +#: melon.lua +msgid "Melon" +msgstr "Melon" + +#: potato.lua +msgid "Potato" +msgstr "Pomme de terre" + +#: potato.lua +msgid "Baked Potato" +msgstr "Pomme de terre cuite" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "Citrouille" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "Tranche de citrouille" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "Jack 'O Lantern (tapé pour allumer et éteindre)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "Pain à la citrouille" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "Pâte à la citrouille" + +#: raspberry.lua +msgid "Raspberries" +msgstr "Framboises" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "Smoothie aux framboises" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "Rhubarbe" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "Tarte à la rhubarbe" + +#: soil.lua +msgid "Soil" +msgstr "Sol" + +#: soil.lua +msgid "Wet Soil" +msgstr "Sol humide" + +#: sugar.lua +msgid "Sugar" +msgstr "Sucre" + +#: tomato.lua +msgid "Tomato" +msgstr "Tomate" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "Graine de blé" + +#: wheat.lua +msgid "Wheat" +msgstr "Blé" + +#: wheat.lua +msgid "Straw" +msgstr "Paille" + +#: wheat.lua +msgid "Flour" +msgstr "Farine" + +#: wheat.lua +msgid "Bread" +msgstr "Pain" diff --git a/mods/farming/locale/pt.po b/mods/farming/locale/pt.po new file mode 100644 index 0000000..bc4352f --- /dev/null +++ b/mods/farming/locale/pt.po @@ -0,0 +1,258 @@ +# Portuguese Translation for farming mod. +# Copyright (C) 2017 +# This file is distributed under the same license as the farming package. +# BrunoMine , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: 1.27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-16 17:38-0300\n" +"PO-Revision-Date: 2017-08-17 17:01-0300\n" +"Last-Translator: BrunoMine \n" +"Language-Team: \n" +"Language: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Gtranslator 2.91.7\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "Sementes de Cevada" + +#: barley.lua +msgid "Barley" +msgstr "Cevada" + +#: beanpole.lua +msgid "Green Beans" +msgstr "Feijoes Verdes" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "Apoio de feijao (coloque no solo antes de plantar feijao)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "Mirtilos" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "Muffin de Mirtilos" + +#: carrot.lua +msgid "Carrot" +msgstr "Cenoura" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "Cenoura Dourada" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "Amendoas de Cacau" + +#: cocoa.lua +msgid "Cookie" +msgstr "Cookie" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "Barra de Chocolate Preto" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "Grao de Cafe" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "Xicara (vazia)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "Xicara de Cafe Frio" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "Xicara de Cafe Quente" + +#: corn.lua +msgid "Corn" +msgstr "Milho" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "Espiga de Milho" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "Garrafa de Etanol" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "Sementes de Algodao" + +#: cotton.lua +msgid "Cotton" +msgstr "Algodao" + +#: cucumber.lua +msgid "Cucumber" +msgstr "Pepino" + +#: donut.lua +msgid "Donut" +msgstr "Donut" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "Donut de Chocolate" + +#: donut.lua +msgid "Apple Donut" +msgstr "Donut de Maça" + +#: grapes.lua +msgid "Grapes" +msgstr "Uvas" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "Grade de Ripas (colocar no solo antes de plantar uvas)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "Sementes de Canhamo" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "Folha de Canhamo" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "Garrafa de Oleo de Canhamo" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "Fibra de Canhamo" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Corda de Canhamo" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "Enxada de Madeira" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "Enxada de Pedra" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "Enxada de Aço" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "Enxada de Bronze" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "Enxada de Mese" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "Enxada de Diamante" + +#: init.lua +msgid "Seed" +msgstr "Sementes" + +#: melon.lua +msgid "Melon Slice" +msgstr "Sementes de Melancia" + +#: melon.lua +msgid "Melon" +msgstr "Melancia" + +#: potato.lua +msgid "Potato" +msgstr "Batata" + +#: potato.lua +msgid "Baked Potato" +msgstr "Batata Cozida" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "Abobora" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "Pedaço de Abobora" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "Jack 'O Lantern (Socos para ligar e desligar)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "Pao de Abobora" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "Massa de Abobora" + +#: raspberry.lua +msgid "Raspberries" +msgstr "Framboesa" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "Batida de Framboesa" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "Ruibarbo" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "Torta de Ruibarbo" + +#: soil.lua +msgid "Soil" +msgstr "Solo" + +#: soil.lua +msgid "Wet Soil" +msgstr "Solo Seco" + +#: sugar.lua +msgid "Sugar" +msgstr "Açucar" + +#: tomato.lua +msgid "Tomato" +msgstr "Tomate" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "Sementes de Trigo" + +#: wheat.lua +msgid "Wheat" +msgstr "Trigo" + +#: wheat.lua +msgid "Straw" +msgstr "Palha" + +#: wheat.lua +msgid "Flour" +msgstr "Farinha" + +#: wheat.lua +msgid "Bread" +msgstr "Pao" diff --git a/mods/farming/locale/ru.po b/mods/farming/locale/ru.po new file mode 100644 index 0000000..607c96d --- /dev/null +++ b/mods/farming/locale/ru.po @@ -0,0 +1,262 @@ +# Russian translation for farming mod. +# Copyright (C) 2018 +# This file is distributed under the same license as the farming package. +# codexp , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: 1.27\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-22 01:25+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: barley.lua +msgid "Barley Seed" +msgstr "семена ячменя" + +#: barley.lua +msgid "Barley" +msgstr "ячмень" + +#: beanpole.lua +msgid "Green Beans" +msgstr "зеленая фасоль" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "жердь для бобовых (установите на почву перед посадкой бобовых)" + +#: blueberry.lua +msgid "Blueberries" +msgstr "голубика" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "кекс из голубики" + +#: carrot.lua +msgid "Carrot" +msgstr "морковь" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "золотая морковь" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "бобы какао" + +#: cocoa.lua +msgid "Cookie" +msgstr "печенье" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "плитка темного шоколада" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "кофе в зернах" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "чашка (пустая)" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "холодная чашка кофе" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "горячая чашка кофе" + +#: corn.lua +msgid "Corn" +msgstr "кукуруза" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "початок кукурузы" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "бутылка этилового спирта" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "семена хлопка" + +#: cotton.lua +msgid "Cotton" +msgstr "хлопок" + +#: cucumber.lua +msgid "Cucumber" +msgstr "огурец" + +#: donut.lua +msgid "Donut" +msgstr "пончик" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "шоколадный пончик" + +#: donut.lua +msgid "Apple Donut" +msgstr "яблочный пончик" + +#: grapes.lua +msgid "Grapes" +msgstr "виноград" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "решетка (поставьте на почву для посадки винограда)" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "семена конопли" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "листья конопли" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "бутылка конопляного масла" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "Пенька" + +#: hoes.lua +msgid "Hoe" +msgstr "мотыга" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "деревянная мотыга" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "каменная мотыга" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "стальная мотыга" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "бронзовая мотыга" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "магическая мотыга" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "алмазная мотыга" + +#: init.lua +msgid "Seed" +msgstr "семена" + +#: melon.lua +msgid "Melon Slice" +msgstr "ломтик арбуза" + +#: melon.lua +msgid "Melon" +msgstr "арбуз" + +#: potato.lua +msgid "Potato" +msgstr "картофель" + +#: potato.lua +msgid "Baked Potato" +msgstr "запеченный картофель" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "тыква" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "ломтик тыквы" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "светильник джека (удар для включения и отключения)" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "тыквенный хлеб" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "тыквенное тесто" + +#: raspberry.lua +msgid "Raspberries" +msgstr "малина" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "малиновый коктейль" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "ревень" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "пирог из ревеня" + +#: soil.lua +msgid "Soil" +msgstr "земля" + +#: soil.lua +msgid "Wet Soil" +msgstr "мокрая земля" + +#: sugar.lua +msgid "Sugar" +msgstr "сахар" + +#: tomato.lua +msgid "Tomato" +msgstr "помидор" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "" + +#: wheat.lua +msgid "Wheat" +msgstr "семена пшеницы" + +#: wheat.lua +msgid "Straw" +msgstr "солома" + +#: wheat.lua +msgid "Flour" +msgstr "мука" + +#: wheat.lua +msgid "Bread" +msgstr "хлеб" diff --git a/mods/farming/locale/template.pot b/mods/farming/locale/template.pot new file mode 100644 index 0000000..210d946 --- /dev/null +++ b/mods/farming/locale/template.pot @@ -0,0 +1,258 @@ +# 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-16 17:38-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" + +#: barley.lua +msgid "Barley Seed" +msgstr "" + +#: barley.lua +msgid "Barley" +msgstr "" + +#: beanpole.lua +msgid "Green Beans" +msgstr "" + +#: beanpole.lua +msgid "Bean Pole (place on soil before planting beans)" +msgstr "" + +#: blueberry.lua +msgid "Blueberries" +msgstr "" + +#: blueberry.lua +msgid "Blueberry Muffin" +msgstr "" + +#: carrot.lua +msgid "Carrot" +msgstr "" + +#: carrot.lua +msgid "Golden Carrot" +msgstr "" + +#: cocoa.lua +msgid "Cocoa Beans" +msgstr "" + +#: cocoa.lua +msgid "Cookie" +msgstr "" + +#: cocoa.lua +msgid "Bar of Dark Chocolate" +msgstr "" + +#: coffee.lua +msgid "Coffee Beans" +msgstr "" + +#: coffee.lua +msgid "Drinking Cup (empty)" +msgstr "" + +#: coffee.lua +msgid "Cold Cup of Coffee" +msgstr "" + +#: coffee.lua +msgid "Hot Cup of Coffee" +msgstr "" + +#: corn.lua +msgid "Corn" +msgstr "" + +#: corn.lua +msgid "Corn on the Cob" +msgstr "" + +#: corn.lua +msgid "Bottle of Ethanol" +msgstr "" + +#: cotton.lua +msgid "Cotton Seed" +msgstr "" + +#: cotton.lua +msgid "Cotton" +msgstr "" + +#: cucumber.lua +msgid "Cucumber" +msgstr "" + +#: donut.lua +msgid "Donut" +msgstr "" + +#: donut.lua +msgid "Chocolate Donut" +msgstr "" + +#: donut.lua +msgid "Apple Donut" +msgstr "" + +#: grapes.lua +msgid "Grapes" +msgstr "" + +#: grapes.lua +msgid "Trellis (place on soil before planting grapes)" +msgstr "" + +#: hemp.lua +msgid "Hemp Seed" +msgstr "" + +#: hemp.lua +msgid "Hemp Leaf" +msgstr "" + +#: hemp.lua +msgid "Bottle of Hemp Oil" +msgstr "" + +#: hemp.lua +msgid "Hemp Fibre" +msgstr "" + +#: hemp.lua +msgid "Hemp Rope" +msgstr "" + +#: hoes.lua +msgid "Wooden Hoe" +msgstr "" + +#: hoes.lua +msgid "Stone Hoe" +msgstr "" + +#: hoes.lua +msgid "Steel Hoe" +msgstr "" + +#: hoes.lua +msgid "Bronze Hoe" +msgstr "" + +#: hoes.lua +msgid "Mese Hoe" +msgstr "" + +#: hoes.lua +msgid "Diamond Hoe" +msgstr "" + +#: init.lua +msgid "Seed" +msgstr "" + +#: melon.lua +msgid "Melon Slice" +msgstr "" + +#: melon.lua +msgid "Melon" +msgstr "" + +#: potato.lua +msgid "Potato" +msgstr "" + +#: potato.lua +msgid "Baked Potato" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Slice" +msgstr "" + +#: pumpkin.lua +msgid "Jack 'O Lantern (punch to turn on and off)" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Bread" +msgstr "" + +#: pumpkin.lua +msgid "Pumpkin Dough" +msgstr "" + +#: raspberry.lua +msgid "Raspberries" +msgstr "" + +#: raspberry.lua +msgid "Raspberry Smoothie" +msgstr "" + +#: rhubarb.lua +msgid "Rhubarb" +msgstr "" + +#: rhubarb.lua +msgid "Rhubarb Pie" +msgstr "" + +#: soil.lua +msgid "Soil" +msgstr "" + +#: soil.lua +msgid "Wet Soil" +msgstr "" + +#: sugar.lua +msgid "Sugar" +msgstr "" + +#: tomato.lua +msgid "Tomato" +msgstr "" + +#: wheat.lua +msgid "Wheat Seed" +msgstr "" + +#: wheat.lua +msgid "Wheat" +msgstr "" + +#: wheat.lua +msgid "Straw" +msgstr "" + +#: wheat.lua +msgid "Flour" +msgstr "" + +#: wheat.lua +msgid "Bread" +msgstr "" diff --git a/mods/farming/lucky_block.lua b/mods/farming/lucky_block.lua new file mode 100644 index 0000000..b24ed32 --- /dev/null +++ b/mods/farming/lucky_block.lua @@ -0,0 +1,38 @@ + +-- add lucky blocks + +if minetest.get_modpath("lucky_block") then + + lucky_block:add_blocks({ + {"dro", {"farming:corn"}, 5}, + {"dro", {"farming:coffee_cup_hot"}, 1}, + {"dro", {"farming:bread"}, 5}, + {"nod", "farming:jackolantern", 0}, + {"tro", "farming:jackolantern_on"}, + {"nod", "default:river_water_source", 1}, + {"tel"}, + {"dro", {"farming:trellis", "farming:grapes"}, 5}, + {"dro", {"farming:bottle_ethanol"}, 1}, + {"nod", "farming:melon", 0}, + {"dro", {"farming:donut", "farming:donut_chocolate", "farming:donut_apple"}, 5}, + {"dro", {"farming:hemp_leaf", "farming:hemp_fibre", "farming:seed_hemp"}, 5}, + {"nod", "fire:permanent_flame", 1}, + {"dro", {"farming:chili_pepper", "farming:chili_bowl"}, 5}, + {"dro", {"farming:bowl"}, 3}, + {"dro", {"farming:saucepan"}, 1}, + {"dro", {"farming:pot"}, 1}, + {"dro", {"farming:baking_tray"}, 1}, + {"dro", {"farming:skillet"}, 1}, + {"exp", 4}, + {"dro", {"farming:mortar_pestle"}, 1}, + {"dro", {"farming:cutting_board"}, 1}, + {"dro", {"farming:juicer"}, 1}, + {"dro", {"farming:mixing_bowl"}, 1}, + {"dro", {"farming:hoe_bronze"}, 1}, + {"dro", {"farming:hoe_mese"}, 1}, + {"dro", {"farming:hoe_diamond"}, 1}, + {"dro", {"farming:hoe_bomb"}, 10}, + {"dro", {"farming:turkish_delight"}, 5}, + {"lig"}, + }) +end diff --git a/mods/farming/mapgen.lua b/mods/farming/mapgen.lua new file mode 100644 index 0000000..2554a15 --- /dev/null +++ b/mods/farming/mapgen.lua @@ -0,0 +1,142 @@ + +-- decoration function +local function register_plant(name, min, max, spawnon, spawnby, num, enabled) + + if enabled ~= true then + return + end + + minetest.register_decoration({ + deco_type = "simple", + place_on = spawnon or {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 329, + octaves = 3, + persist = 0.6 + }, + y_min = min, + y_max = max, + decoration = "farming:" .. name, + spawn_by = spawnby, + num_spawn_by = num, + }) +end + + +-- add crops to mapgen +register_plant("potato_3", 15, 40, nil, "", -1, farming.potato) +register_plant("tomato_7", 5, 20, nil, "", -1, farming.tomato) +register_plant("corn_7", 12, 22, nil, "", -1, farming.corn) +register_plant("coffee_5", 20, 45, {"default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter"}, "", -1, farming.coffee) +register_plant("raspberry_4", 3, 10, nil, "", -1, farming.raspberry) +register_plant("rhubarb_3", 3, 15, nil, "", -1, farming.rhubarb) +register_plant("blueberry_4", 3, 10, nil, "", -1, farming.blueberry) +register_plant("beanbush", 18, 35, nil, "", -1, farming.beans) +register_plant("grapebush", 25, 45, nil, "", -1, farming.grapes) +register_plant("onion_5", 5, 22, nil, "", -1, farming.onion) +register_plant("garlic_5", 3, 30, nil, "group:tree", 1, farming.garlic) +register_plant("pea_5", 25, 50, nil, "", -1, farming.peas) +register_plant("beetroot_5", 1, 15, nil, "", -1, farming.beetroot) + + +if minetest.get_mapgen_setting("mg_name") == "v6" then + + register_plant("carrot_8", 1, 30, nil, "group:water", 1, farming.carrot) + register_plant("cucumber_4", 1, 20, nil, "group:water", 1, farming.cucumber) + register_plant("melon_8", 1, 20, nil, "group:water", 1, farming.melon) + register_plant("pumpkin_8", 1, 20, nil, "group:water", 1, farming.pumpkin) +else + -- v7 maps have a beach so plants growing near water is limited to 6 high + register_plant("carrot_8", 1, 15, nil, "", -1, farming.carrot) + register_plant("cucumber_4", 1, 10, nil, "", -1, farming.cucumber) + register_plant("melon_8", 1, 6, {"default:dirt_with_dry_grass", + "default:dirt_with_rainforest_litter"}, "", -1, farming.melon) + register_plant("pumpkin_8", 1, 6, nil, "", -1, farming.pumpkin) +end + +if farming.hemp then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.6 + }, + y_min = 3, + y_max = 45, + decoration = "farming:hemp_7", + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.chili then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 760, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = {"farming:chili_8"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.pepper then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 933, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = {"farming:pepper_5"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) +end + +if farming.pineapple then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = farming.rarety, -- 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 917, + octaves = 3, + persist = 0.6 + }, + y_min = 18, + y_max = 30, + decoration = {"farming:pineapple_8"}, +}) +end diff --git a/mods/farming/mod.conf b/mods/farming/mod.conf new file mode 100644 index 0000000..80ab8b0 --- /dev/null +++ b/mods/farming/mod.conf @@ -0,0 +1 @@ +name = farming \ No newline at end of file diff --git a/mods/farming/nodes.lua b/mods/farming/nodes.lua new file mode 100644 index 0000000..1e746ec --- /dev/null +++ b/mods/farming/nodes.lua @@ -0,0 +1,181 @@ +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(), +}) + +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/farming/screenshot.png b/mods/farming/screenshot.png new file mode 100644 index 0000000..aba30f0 Binary files /dev/null and b/mods/farming/screenshot.png differ diff --git a/mods/farming/soil.lua b/mods/farming/soil.lua new file mode 100644 index 0000000..0b4844a --- /dev/null +++ b/mods/farming/soil.lua @@ -0,0 +1,67 @@ + +local S = farming.intllib + +-- normal soil +minetest.register_node("farming:soil", { + description = S("Soil"), + tiles = {"default_dirt.png^farming_soil.png", "default_dirt.png"}, + drop = "default:dirt", + groups = {crumbly = 3, not_in_creative_inventory = 1, soil = 2}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- wet soil +minetest.register_node("farming:soil_wet", { + description = S("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}, + sounds = default.node_sound_dirt_defaults(), +}) + +-- sand is not soil, change existing sand-soil to use normal soil +minetest.register_alias("farming:desert_sand_soil", "farming:soil") +minetest.register_alias("farming:desert_sand_soil_wet", "farming:soil_wet") + +-- if water near soil then change to wet soil +minetest.register_abm({ + nodenames = {"farming:soil", "farming:soil_wet"}, + interval = 15, + chance = 4, + catch_up = false, + + action = function(pos, node) + + pos.y = pos.y + 1 + local nn = minetest.get_node_or_nil(pos) + pos.y = pos.y - 1 + + if nn then nn = nn.name else return end + + -- what's on top of soil, if solid/not plant change soil to dirt + if minetest.registered_nodes[nn] + and minetest.registered_nodes[nn].walkable + and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = "default:dirt"}) + return + end + + -- if map around soil not loaded then skip until loaded + if minetest.find_node_near(pos, 3, {"ignore"}) then + return + end + + -- check if there is water nearby and change soil accordingly + if minetest.find_node_near(pos, 3, {"group:water"}) then + if node.name == "farming:soil" then + minetest.set_node(pos, {name = "farming:soil_wet"}) + end + + elseif node.name == "farming:soil_wet" then + minetest.set_node(pos, {name = "farming:soil"}) + + elseif node.name == "farming:soil" and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = "default:dirt"}) + end + end, +}) \ No newline at end of file diff --git a/mods/farming/statistics.lua b/mods/farming/statistics.lua new file mode 100644 index 0000000..c8defa2 --- /dev/null +++ b/mods/farming/statistics.lua @@ -0,0 +1,174 @@ +local statistics = {} +local ROOT_2 = math.sqrt(2.0) + +-- Approximations for erf(x) and erfInv(x) from +-- https://en.wikipedia.org/wiki/Error_function + +local erf +local erf_inv + +local A = 8 * (math.pi - 3.0)/(3.0 * math.pi * (4.0 - math.pi)) +local B = 4.0 / math.pi +local C = 2.0/(math.pi * A) +local D = 1.0 / A + +erf = function(x) + + if x == 0 then return 0; end + + local xSq = x * x + local aXSq = A * xSq + local v = math.sqrt(1.0 - math.exp(-xSq * (B + aXSq) / (1.0 + aXSq))) + + return (x > 0 and v) or -v +end + +erf_inv = function(x) + + if x == 0 then return 0; end + + if x <= -1 or x >= 1 then return nil; end + + local y = math.log(1 - x * x) + local u = C + 0.5 * y + local v = math.sqrt(math.sqrt(u * u - D * y) - u) + + return (x > 0 and v) or -v +end + +local function std_normal(u) + return ROOT_2 * erf_inv(2.0 * u - 1.0) +end + +local poisson +local cdf_table = {} + +local function generate_cdf(lambda_index, lambda) + + local max = math.ceil(4 * lambda) + local pdf = math.exp(-lambda) + local cdf = pdf + local t = { [0] = pdf } + + for i = 1, max - 1 do + pdf = pdf * lambda / i + cdf = cdf + pdf + t[i] = cdf + end + + return t +end + +for li = 1, 100 do + cdf_table[li] = generate_cdf(li, 0.25 * li) +end + +poisson = function(lambda, max) + + if max < 2 then + return (math.random() < math.exp(-lambda) and 0) or 1 + elseif lambda >= 2 * max then + return max + end + + local u = math.random() + local lambda_index = math.floor(4 * lambda + 0.5) + local cdfs = cdf_table[lambda_index] + + if cdfs then + + lambda = 0.25 * lambda_index + + if u < cdfs[0] then return 0; end + if max > #cdfs then max = #cdfs + 1 else max = math.floor(max); end + if u >= cdfs[max - 1] then return max; end + + if max > 4 then -- Binary search + + local s = 0 + + while s + 1 < max do + + local m = math.floor(0.5 * (s + max)) + + if u < cdfs[m] then max = m; else s = m; end + end + else + for i = 1, max - 1 do + if u < cdfs[i] then return i; end + end + end + + return max + else + local x = lambda + math.sqrt(lambda) * std_normal(u) + + return (x < 0.5 and 0) or (x >= max - 0.5 and max) or math.floor(x + 0.5) + end +end + +-- Error function. +statistics.erf = erf + +-- Inverse error function. +statistics.erf_inv = erf_inv + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @return + -- Any real number (actually between -3.0 and 3.0). + +statistics.std_normal = function() + + local u = math.random() + + if u < 0.001 then + return -3.0 + elseif u > 0.999 then + return 3.0 + end + + return std_normal(u) +end + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @param mu + -- The distribution mean. + -- @param sigma + -- The distribution standard deviation. + -- @return + -- Any real number (actually between -3*sigma and 3*sigma). + +statistics.normal = function(mu, sigma) + + local u = math.random() + + if u < 0.001 then + return mu - 3.0 * sigma + elseif u > 0.999 then + return mu + 3.0 * sigma + end + + return mu + sigma * std_normal(u) +end + +--- Poisson distribution function. + -- + -- @param lambda + -- The distribution mean and variance. + -- @param max + -- The distribution maximum. + -- @return + -- An integer between 0 and max (both inclusive). + +statistics.poisson = function(lambda, max) + + lambda, max = tonumber(lambda), tonumber(max) + + if not lambda or not max or lambda <= 0 or max < 1 then return 0; end + + return poisson(lambda, max) +end + +return statistics diff --git a/mods/farming/textures/banana_leaf.png b/mods/farming/textures/banana_leaf.png new file mode 100644 index 0000000..5800cbf Binary files /dev/null and b/mods/farming/textures/banana_leaf.png differ diff --git a/mods/farming/textures/banana_single.png b/mods/farming/textures/banana_single.png new file mode 100644 index 0000000..b15ed2f Binary files /dev/null and b/mods/farming/textures/banana_single.png differ diff --git a/mods/farming/textures/crops_garlic.png b/mods/farming/textures/crops_garlic.png new file mode 100644 index 0000000..a73638c Binary files /dev/null and b/mods/farming/textures/crops_garlic.png differ diff --git a/mods/farming/textures/crops_garlic_braid.png b/mods/farming/textures/crops_garlic_braid.png new file mode 100644 index 0000000..f5fa269 Binary files /dev/null and b/mods/farming/textures/crops_garlic_braid.png differ diff --git a/mods/farming/textures/crops_garlic_braid_side.png b/mods/farming/textures/crops_garlic_braid_side.png new file mode 100644 index 0000000..ce467b7 Binary files /dev/null and b/mods/farming/textures/crops_garlic_braid_side.png differ diff --git a/mods/farming/textures/crops_garlic_clove.png b/mods/farming/textures/crops_garlic_clove.png new file mode 100644 index 0000000..bfc1cee Binary files /dev/null and b/mods/farming/textures/crops_garlic_clove.png differ diff --git a/mods/farming/textures/crops_garlic_plant_1.png b/mods/farming/textures/crops_garlic_plant_1.png new file mode 100644 index 0000000..61eb9a8 Binary files /dev/null and b/mods/farming/textures/crops_garlic_plant_1.png differ diff --git a/mods/farming/textures/crops_garlic_plant_2.png b/mods/farming/textures/crops_garlic_plant_2.png new file mode 100644 index 0000000..217fd25 Binary files /dev/null and b/mods/farming/textures/crops_garlic_plant_2.png differ diff --git a/mods/farming/textures/crops_garlic_plant_3.png b/mods/farming/textures/crops_garlic_plant_3.png new file mode 100644 index 0000000..557b017 Binary files /dev/null and b/mods/farming/textures/crops_garlic_plant_3.png differ diff --git a/mods/farming/textures/crops_garlic_plant_4.png b/mods/farming/textures/crops_garlic_plant_4.png new file mode 100644 index 0000000..80ef076 Binary files /dev/null and b/mods/farming/textures/crops_garlic_plant_4.png differ diff --git a/mods/farming/textures/crops_garlic_plant_5.png b/mods/farming/textures/crops_garlic_plant_5.png new file mode 100644 index 0000000..8b8c31a Binary files /dev/null and b/mods/farming/textures/crops_garlic_plant_5.png differ diff --git a/mods/farming/textures/crops_onion.png b/mods/farming/textures/crops_onion.png new file mode 100644 index 0000000..2099c63 Binary files /dev/null and b/mods/farming/textures/crops_onion.png differ diff --git a/mods/farming/textures/crops_onion_plant_1.png b/mods/farming/textures/crops_onion_plant_1.png new file mode 100644 index 0000000..dea2d4b Binary files /dev/null and b/mods/farming/textures/crops_onion_plant_1.png differ diff --git a/mods/farming/textures/crops_onion_plant_2.png b/mods/farming/textures/crops_onion_plant_2.png new file mode 100644 index 0000000..1f850f1 Binary files /dev/null and b/mods/farming/textures/crops_onion_plant_2.png differ diff --git a/mods/farming/textures/crops_onion_plant_3.png b/mods/farming/textures/crops_onion_plant_3.png new file mode 100644 index 0000000..d9af239 Binary files /dev/null and b/mods/farming/textures/crops_onion_plant_3.png differ diff --git a/mods/farming/textures/crops_onion_plant_4.png b/mods/farming/textures/crops_onion_plant_4.png new file mode 100644 index 0000000..962b21b Binary files /dev/null and b/mods/farming/textures/crops_onion_plant_4.png differ diff --git a/mods/farming/textures/crops_onion_plant_5.png b/mods/farming/textures/crops_onion_plant_5.png new file mode 100644 index 0000000..dfb1f7f Binary files /dev/null and b/mods/farming/textures/crops_onion_plant_5.png differ diff --git a/mods/farming/textures/crops_pepper.png b/mods/farming/textures/crops_pepper.png new file mode 100644 index 0000000..bb8f40c Binary files /dev/null and b/mods/farming/textures/crops_pepper.png differ diff --git a/mods/farming/textures/crops_pepper_ground.png b/mods/farming/textures/crops_pepper_ground.png new file mode 100644 index 0000000..d72405a Binary files /dev/null and b/mods/farming/textures/crops_pepper_ground.png differ diff --git a/mods/farming/textures/crops_pepper_plant_1.png b/mods/farming/textures/crops_pepper_plant_1.png new file mode 100644 index 0000000..43ce6ba Binary files /dev/null and b/mods/farming/textures/crops_pepper_plant_1.png differ diff --git a/mods/farming/textures/crops_pepper_plant_2.png b/mods/farming/textures/crops_pepper_plant_2.png new file mode 100644 index 0000000..556f952 Binary files /dev/null and b/mods/farming/textures/crops_pepper_plant_2.png differ diff --git a/mods/farming/textures/crops_pepper_plant_3.png b/mods/farming/textures/crops_pepper_plant_3.png new file mode 100644 index 0000000..24e92e1 Binary files /dev/null and b/mods/farming/textures/crops_pepper_plant_3.png differ diff --git a/mods/farming/textures/crops_pepper_plant_4.png b/mods/farming/textures/crops_pepper_plant_4.png new file mode 100644 index 0000000..e33554d Binary files /dev/null and b/mods/farming/textures/crops_pepper_plant_4.png differ diff --git a/mods/farming/textures/crops_pepper_plant_5.png b/mods/farming/textures/crops_pepper_plant_5.png new file mode 100644 index 0000000..c2c92eb Binary files /dev/null and b/mods/farming/textures/crops_pepper_plant_5.png differ diff --git a/mods/farming/textures/crops_peppercorn.png b/mods/farming/textures/crops_peppercorn.png new file mode 100644 index 0000000..0ee3c49 Binary files /dev/null and b/mods/farming/textures/crops_peppercorn.png differ diff --git a/mods/farming/textures/default_junglegrass.png b/mods/farming/textures/default_junglegrass.png new file mode 100644 index 0000000..5d8cdbc Binary files /dev/null and b/mods/farming/textures/default_junglegrass.png differ diff --git a/mods/farming/textures/farming_baked_potato.png b/mods/farming/textures/farming_baked_potato.png new file mode 100644 index 0000000..425c4ae Binary files /dev/null and b/mods/farming/textures/farming_baked_potato.png differ diff --git a/mods/farming/textures/farming_baking_tray.png b/mods/farming/textures/farming_baking_tray.png new file mode 100644 index 0000000..be1711c Binary files /dev/null and b/mods/farming/textures/farming_baking_tray.png differ diff --git a/mods/farming/textures/farming_barley.png b/mods/farming/textures/farming_barley.png new file mode 100644 index 0000000..ca929e0 Binary files /dev/null and b/mods/farming/textures/farming_barley.png differ diff --git a/mods/farming/textures/farming_barley_1.png b/mods/farming/textures/farming_barley_1.png new file mode 100644 index 0000000..4a458b1 Binary files /dev/null and b/mods/farming/textures/farming_barley_1.png differ diff --git a/mods/farming/textures/farming_barley_2.png b/mods/farming/textures/farming_barley_2.png new file mode 100644 index 0000000..96610c2 Binary files /dev/null and b/mods/farming/textures/farming_barley_2.png differ diff --git a/mods/farming/textures/farming_barley_3.png b/mods/farming/textures/farming_barley_3.png new file mode 100644 index 0000000..ef14b5b Binary files /dev/null and b/mods/farming/textures/farming_barley_3.png differ diff --git a/mods/farming/textures/farming_barley_4.png b/mods/farming/textures/farming_barley_4.png new file mode 100644 index 0000000..f7c9054 Binary files /dev/null and b/mods/farming/textures/farming_barley_4.png differ diff --git a/mods/farming/textures/farming_barley_5.png b/mods/farming/textures/farming_barley_5.png new file mode 100644 index 0000000..68c0d68 Binary files /dev/null and b/mods/farming/textures/farming_barley_5.png differ diff --git a/mods/farming/textures/farming_barley_6.png b/mods/farming/textures/farming_barley_6.png new file mode 100644 index 0000000..496a218 Binary files /dev/null and b/mods/farming/textures/farming_barley_6.png differ diff --git a/mods/farming/textures/farming_barley_7.png b/mods/farming/textures/farming_barley_7.png new file mode 100644 index 0000000..1c636af Binary files /dev/null and b/mods/farming/textures/farming_barley_7.png differ diff --git a/mods/farming/textures/farming_barley_seed.png b/mods/farming/textures/farming_barley_seed.png new file mode 100644 index 0000000..2f00a20 Binary files /dev/null and b/mods/farming/textures/farming_barley_seed.png differ diff --git a/mods/farming/textures/farming_beanbush.png b/mods/farming/textures/farming_beanbush.png new file mode 100644 index 0000000..637e716 Binary files /dev/null and b/mods/farming/textures/farming_beanbush.png differ diff --git a/mods/farming/textures/farming_beanpole.png b/mods/farming/textures/farming_beanpole.png new file mode 100644 index 0000000..ed07572 Binary files /dev/null and b/mods/farming/textures/farming_beanpole.png differ diff --git a/mods/farming/textures/farming_beanpole_1.png b/mods/farming/textures/farming_beanpole_1.png new file mode 100644 index 0000000..ef2bd5a Binary files /dev/null and b/mods/farming/textures/farming_beanpole_1.png differ diff --git a/mods/farming/textures/farming_beanpole_2.png b/mods/farming/textures/farming_beanpole_2.png new file mode 100644 index 0000000..34143e4 Binary files /dev/null and b/mods/farming/textures/farming_beanpole_2.png differ diff --git a/mods/farming/textures/farming_beanpole_3.png b/mods/farming/textures/farming_beanpole_3.png new file mode 100644 index 0000000..d693f17 Binary files /dev/null and b/mods/farming/textures/farming_beanpole_3.png differ diff --git a/mods/farming/textures/farming_beanpole_4.png b/mods/farming/textures/farming_beanpole_4.png new file mode 100644 index 0000000..c779b25 Binary files /dev/null and b/mods/farming/textures/farming_beanpole_4.png differ diff --git a/mods/farming/textures/farming_beanpole_5.png b/mods/farming/textures/farming_beanpole_5.png new file mode 100644 index 0000000..910f8a0 Binary files /dev/null and b/mods/farming/textures/farming_beanpole_5.png differ diff --git a/mods/farming/textures/farming_beans.png b/mods/farming/textures/farming_beans.png new file mode 100644 index 0000000..ad5cf85 Binary files /dev/null and b/mods/farming/textures/farming_beans.png differ diff --git a/mods/farming/textures/farming_beetroot.png b/mods/farming/textures/farming_beetroot.png new file mode 100644 index 0000000..6a60168 Binary files /dev/null and b/mods/farming/textures/farming_beetroot.png differ diff --git a/mods/farming/textures/farming_beetroot_1.png b/mods/farming/textures/farming_beetroot_1.png new file mode 100644 index 0000000..8b75e10 Binary files /dev/null and b/mods/farming/textures/farming_beetroot_1.png differ diff --git a/mods/farming/textures/farming_beetroot_2.png b/mods/farming/textures/farming_beetroot_2.png new file mode 100644 index 0000000..9c1ce1e Binary files /dev/null and b/mods/farming/textures/farming_beetroot_2.png differ diff --git a/mods/farming/textures/farming_beetroot_3.png b/mods/farming/textures/farming_beetroot_3.png new file mode 100644 index 0000000..0f28e5e Binary files /dev/null and b/mods/farming/textures/farming_beetroot_3.png differ diff --git a/mods/farming/textures/farming_beetroot_4.png b/mods/farming/textures/farming_beetroot_4.png new file mode 100644 index 0000000..35f211b Binary files /dev/null and b/mods/farming/textures/farming_beetroot_4.png differ diff --git a/mods/farming/textures/farming_beetroot_5.png b/mods/farming/textures/farming_beetroot_5.png new file mode 100644 index 0000000..c4b8957 Binary files /dev/null and b/mods/farming/textures/farming_beetroot_5.png differ diff --git a/mods/farming/textures/farming_beetroot_soup.png b/mods/farming/textures/farming_beetroot_soup.png new file mode 100644 index 0000000..4df562e Binary files /dev/null and b/mods/farming/textures/farming_beetroot_soup.png differ diff --git a/mods/farming/textures/farming_blueberries.png b/mods/farming/textures/farming_blueberries.png new file mode 100644 index 0000000..b0c4931 Binary files /dev/null and b/mods/farming/textures/farming_blueberries.png differ diff --git a/mods/farming/textures/farming_blueberry_1.png b/mods/farming/textures/farming_blueberry_1.png new file mode 100644 index 0000000..83832c8 Binary files /dev/null and b/mods/farming/textures/farming_blueberry_1.png differ diff --git a/mods/farming/textures/farming_blueberry_2.png b/mods/farming/textures/farming_blueberry_2.png new file mode 100644 index 0000000..308a0ca Binary files /dev/null and b/mods/farming/textures/farming_blueberry_2.png differ diff --git a/mods/farming/textures/farming_blueberry_3.png b/mods/farming/textures/farming_blueberry_3.png new file mode 100644 index 0000000..43d2ab1 Binary files /dev/null and b/mods/farming/textures/farming_blueberry_3.png differ diff --git a/mods/farming/textures/farming_blueberry_4.png b/mods/farming/textures/farming_blueberry_4.png new file mode 100644 index 0000000..75fb69a Binary files /dev/null and b/mods/farming/textures/farming_blueberry_4.png differ diff --git a/mods/farming/textures/farming_blueberry_muffin.png b/mods/farming/textures/farming_blueberry_muffin.png new file mode 100644 index 0000000..b1253d7 Binary files /dev/null and b/mods/farming/textures/farming_blueberry_muffin.png differ diff --git a/mods/farming/textures/farming_blueberry_pie.png b/mods/farming/textures/farming_blueberry_pie.png new file mode 100644 index 0000000..2174686 Binary files /dev/null and b/mods/farming/textures/farming_blueberry_pie.png differ diff --git a/mods/farming/textures/farming_bottle_ethanol.png b/mods/farming/textures/farming_bottle_ethanol.png new file mode 100644 index 0000000..84e6162 Binary files /dev/null and b/mods/farming/textures/farming_bottle_ethanol.png differ diff --git a/mods/farming/textures/farming_bowl.png b/mods/farming/textures/farming_bowl.png new file mode 100644 index 0000000..627c22e Binary files /dev/null and b/mods/farming/textures/farming_bowl.png differ diff --git a/mods/farming/textures/farming_bread.png b/mods/farming/textures/farming_bread.png new file mode 100644 index 0000000..bd00e3e Binary files /dev/null and b/mods/farming/textures/farming_bread.png differ diff --git a/mods/farming/textures/farming_bread_slice.png b/mods/farming/textures/farming_bread_slice.png new file mode 100644 index 0000000..ff2714d Binary files /dev/null and b/mods/farming/textures/farming_bread_slice.png differ diff --git a/mods/farming/textures/farming_carrot.png b/mods/farming/textures/farming_carrot.png new file mode 100644 index 0000000..73f2fd4 Binary files /dev/null and b/mods/farming/textures/farming_carrot.png differ diff --git a/mods/farming/textures/farming_carrot_1.png b/mods/farming/textures/farming_carrot_1.png new file mode 100644 index 0000000..bbeae7e Binary files /dev/null and b/mods/farming/textures/farming_carrot_1.png differ diff --git a/mods/farming/textures/farming_carrot_2.png b/mods/farming/textures/farming_carrot_2.png new file mode 100644 index 0000000..b24ecc0 Binary files /dev/null and b/mods/farming/textures/farming_carrot_2.png differ diff --git a/mods/farming/textures/farming_carrot_3.png b/mods/farming/textures/farming_carrot_3.png new file mode 100644 index 0000000..8400505 Binary files /dev/null and b/mods/farming/textures/farming_carrot_3.png differ diff --git a/mods/farming/textures/farming_carrot_4.png b/mods/farming/textures/farming_carrot_4.png new file mode 100644 index 0000000..32ee262 Binary files /dev/null and b/mods/farming/textures/farming_carrot_4.png differ diff --git a/mods/farming/textures/farming_carrot_5.png b/mods/farming/textures/farming_carrot_5.png new file mode 100644 index 0000000..0bcd9c1 Binary files /dev/null and b/mods/farming/textures/farming_carrot_5.png differ diff --git a/mods/farming/textures/farming_carrot_6.png b/mods/farming/textures/farming_carrot_6.png new file mode 100644 index 0000000..a17c6b2 Binary files /dev/null and b/mods/farming/textures/farming_carrot_6.png differ diff --git a/mods/farming/textures/farming_carrot_7.png b/mods/farming/textures/farming_carrot_7.png new file mode 100644 index 0000000..d26eee7 Binary files /dev/null and b/mods/farming/textures/farming_carrot_7.png differ diff --git a/mods/farming/textures/farming_carrot_8.png b/mods/farming/textures/farming_carrot_8.png new file mode 100644 index 0000000..00b6d92 Binary files /dev/null and b/mods/farming/textures/farming_carrot_8.png differ diff --git a/mods/farming/textures/farming_carrot_gold.png b/mods/farming/textures/farming_carrot_gold.png new file mode 100644 index 0000000..b817101 Binary files /dev/null and b/mods/farming/textures/farming_carrot_gold.png differ diff --git a/mods/farming/textures/farming_chili_1.png b/mods/farming/textures/farming_chili_1.png new file mode 100644 index 0000000..aa11988 Binary files /dev/null and b/mods/farming/textures/farming_chili_1.png differ diff --git a/mods/farming/textures/farming_chili_2.png b/mods/farming/textures/farming_chili_2.png new file mode 100644 index 0000000..ae34506 Binary files /dev/null and b/mods/farming/textures/farming_chili_2.png differ diff --git a/mods/farming/textures/farming_chili_3.png b/mods/farming/textures/farming_chili_3.png new file mode 100644 index 0000000..5e1d901 Binary files /dev/null and b/mods/farming/textures/farming_chili_3.png differ diff --git a/mods/farming/textures/farming_chili_4.png b/mods/farming/textures/farming_chili_4.png new file mode 100644 index 0000000..d97769b Binary files /dev/null and b/mods/farming/textures/farming_chili_4.png differ diff --git a/mods/farming/textures/farming_chili_5.png b/mods/farming/textures/farming_chili_5.png new file mode 100644 index 0000000..dd4755d Binary files /dev/null and b/mods/farming/textures/farming_chili_5.png differ diff --git a/mods/farming/textures/farming_chili_6.png b/mods/farming/textures/farming_chili_6.png new file mode 100644 index 0000000..4ee057b Binary files /dev/null and b/mods/farming/textures/farming_chili_6.png differ diff --git a/mods/farming/textures/farming_chili_7.png b/mods/farming/textures/farming_chili_7.png new file mode 100644 index 0000000..5912c2e Binary files /dev/null and b/mods/farming/textures/farming_chili_7.png differ diff --git a/mods/farming/textures/farming_chili_8.png b/mods/farming/textures/farming_chili_8.png new file mode 100644 index 0000000..976eb52 Binary files /dev/null and b/mods/farming/textures/farming_chili_8.png differ diff --git a/mods/farming/textures/farming_chili_bowl.png b/mods/farming/textures/farming_chili_bowl.png new file mode 100644 index 0000000..6454ba3 Binary files /dev/null and b/mods/farming/textures/farming_chili_bowl.png differ diff --git a/mods/farming/textures/farming_chili_pepper.png b/mods/farming/textures/farming_chili_pepper.png new file mode 100644 index 0000000..922cec4 Binary files /dev/null and b/mods/farming/textures/farming_chili_pepper.png differ diff --git a/mods/farming/textures/farming_chocolate_dark.png b/mods/farming/textures/farming_chocolate_dark.png new file mode 100644 index 0000000..03243b2 Binary files /dev/null and b/mods/farming/textures/farming_chocolate_dark.png differ diff --git a/mods/farming/textures/farming_cocoa_1.png b/mods/farming/textures/farming_cocoa_1.png new file mode 100644 index 0000000..18fd362 Binary files /dev/null and b/mods/farming/textures/farming_cocoa_1.png differ diff --git a/mods/farming/textures/farming_cocoa_2.png b/mods/farming/textures/farming_cocoa_2.png new file mode 100644 index 0000000..c304ee0 Binary files /dev/null and b/mods/farming/textures/farming_cocoa_2.png differ diff --git a/mods/farming/textures/farming_cocoa_3.png b/mods/farming/textures/farming_cocoa_3.png new file mode 100644 index 0000000..d66b47d Binary files /dev/null and b/mods/farming/textures/farming_cocoa_3.png differ diff --git a/mods/farming/textures/farming_cocoa_4.png b/mods/farming/textures/farming_cocoa_4.png new file mode 100644 index 0000000..990a8b4 Binary files /dev/null and b/mods/farming/textures/farming_cocoa_4.png differ diff --git a/mods/farming/textures/farming_cocoa_beans.png b/mods/farming/textures/farming_cocoa_beans.png new file mode 100644 index 0000000..4022f8e Binary files /dev/null and b/mods/farming/textures/farming_cocoa_beans.png differ diff --git a/mods/farming/textures/farming_coffee_1.png b/mods/farming/textures/farming_coffee_1.png new file mode 100644 index 0000000..97c207a Binary files /dev/null and b/mods/farming/textures/farming_coffee_1.png differ diff --git a/mods/farming/textures/farming_coffee_2.png b/mods/farming/textures/farming_coffee_2.png new file mode 100644 index 0000000..a659f85 Binary files /dev/null and b/mods/farming/textures/farming_coffee_2.png differ diff --git a/mods/farming/textures/farming_coffee_3.png b/mods/farming/textures/farming_coffee_3.png new file mode 100644 index 0000000..93088c8 Binary files /dev/null and b/mods/farming/textures/farming_coffee_3.png differ diff --git a/mods/farming/textures/farming_coffee_4.png b/mods/farming/textures/farming_coffee_4.png new file mode 100644 index 0000000..37a609f Binary files /dev/null and b/mods/farming/textures/farming_coffee_4.png differ diff --git a/mods/farming/textures/farming_coffee_5.png b/mods/farming/textures/farming_coffee_5.png new file mode 100644 index 0000000..e624fbe Binary files /dev/null and b/mods/farming/textures/farming_coffee_5.png differ diff --git a/mods/farming/textures/farming_coffee_beans.png b/mods/farming/textures/farming_coffee_beans.png new file mode 100644 index 0000000..0786f4e Binary files /dev/null and b/mods/farming/textures/farming_coffee_beans.png differ diff --git a/mods/farming/textures/farming_coffee_cup.png b/mods/farming/textures/farming_coffee_cup.png new file mode 100644 index 0000000..d3820bc Binary files /dev/null and b/mods/farming/textures/farming_coffee_cup.png differ diff --git a/mods/farming/textures/farming_cookie.png b/mods/farming/textures/farming_cookie.png new file mode 100644 index 0000000..e80be35 Binary files /dev/null and b/mods/farming/textures/farming_cookie.png differ diff --git a/mods/farming/textures/farming_corn.png b/mods/farming/textures/farming_corn.png new file mode 100644 index 0000000..2a2894a Binary files /dev/null and b/mods/farming/textures/farming_corn.png differ diff --git a/mods/farming/textures/farming_corn_1.png b/mods/farming/textures/farming_corn_1.png new file mode 100644 index 0000000..60e8b99 Binary files /dev/null and b/mods/farming/textures/farming_corn_1.png differ diff --git a/mods/farming/textures/farming_corn_2.png b/mods/farming/textures/farming_corn_2.png new file mode 100644 index 0000000..6ba6cc9 Binary files /dev/null and b/mods/farming/textures/farming_corn_2.png differ diff --git a/mods/farming/textures/farming_corn_3.png b/mods/farming/textures/farming_corn_3.png new file mode 100644 index 0000000..c5fa80b Binary files /dev/null and b/mods/farming/textures/farming_corn_3.png differ diff --git a/mods/farming/textures/farming_corn_4.png b/mods/farming/textures/farming_corn_4.png new file mode 100644 index 0000000..a43632d Binary files /dev/null and b/mods/farming/textures/farming_corn_4.png differ diff --git a/mods/farming/textures/farming_corn_5.png b/mods/farming/textures/farming_corn_5.png new file mode 100644 index 0000000..7b6fb02 Binary files /dev/null and b/mods/farming/textures/farming_corn_5.png differ diff --git a/mods/farming/textures/farming_corn_6.png b/mods/farming/textures/farming_corn_6.png new file mode 100644 index 0000000..313697b Binary files /dev/null and b/mods/farming/textures/farming_corn_6.png differ diff --git a/mods/farming/textures/farming_corn_7.png b/mods/farming/textures/farming_corn_7.png new file mode 100644 index 0000000..6a937e7 Binary files /dev/null and b/mods/farming/textures/farming_corn_7.png differ diff --git a/mods/farming/textures/farming_corn_8.png b/mods/farming/textures/farming_corn_8.png new file mode 100644 index 0000000..77e442b Binary files /dev/null and b/mods/farming/textures/farming_corn_8.png differ diff --git a/mods/farming/textures/farming_corn_cob.png b/mods/farming/textures/farming_corn_cob.png new file mode 100644 index 0000000..a2fd9da Binary files /dev/null and b/mods/farming/textures/farming_corn_cob.png differ diff --git a/mods/farming/textures/farming_cornstarch.png b/mods/farming/textures/farming_cornstarch.png new file mode 100644 index 0000000..d5f8218 Binary files /dev/null and b/mods/farming/textures/farming_cornstarch.png differ diff --git a/mods/farming/textures/farming_cotton.png b/mods/farming/textures/farming_cotton.png new file mode 100644 index 0000000..8aa50e4 Binary files /dev/null and b/mods/farming/textures/farming_cotton.png differ diff --git a/mods/farming/textures/farming_cotton_1.png b/mods/farming/textures/farming_cotton_1.png new file mode 100644 index 0000000..5fc2180 Binary files /dev/null and b/mods/farming/textures/farming_cotton_1.png differ diff --git a/mods/farming/textures/farming_cotton_2.png b/mods/farming/textures/farming_cotton_2.png new file mode 100644 index 0000000..db4f4a3 Binary files /dev/null and b/mods/farming/textures/farming_cotton_2.png differ diff --git a/mods/farming/textures/farming_cotton_3.png b/mods/farming/textures/farming_cotton_3.png new file mode 100644 index 0000000..df3d7a7 Binary files /dev/null and b/mods/farming/textures/farming_cotton_3.png differ diff --git a/mods/farming/textures/farming_cotton_4.png b/mods/farming/textures/farming_cotton_4.png new file mode 100644 index 0000000..f314b07 Binary files /dev/null and b/mods/farming/textures/farming_cotton_4.png differ diff --git a/mods/farming/textures/farming_cotton_5.png b/mods/farming/textures/farming_cotton_5.png new file mode 100644 index 0000000..3e89085 Binary files /dev/null and b/mods/farming/textures/farming_cotton_5.png differ diff --git a/mods/farming/textures/farming_cotton_6.png b/mods/farming/textures/farming_cotton_6.png new file mode 100644 index 0000000..f4bd4fb Binary files /dev/null and b/mods/farming/textures/farming_cotton_6.png differ diff --git a/mods/farming/textures/farming_cotton_7.png b/mods/farming/textures/farming_cotton_7.png new file mode 100644 index 0000000..466d40a Binary files /dev/null and b/mods/farming/textures/farming_cotton_7.png differ diff --git a/mods/farming/textures/farming_cotton_8.png b/mods/farming/textures/farming_cotton_8.png new file mode 100644 index 0000000..f835ba5 Binary files /dev/null and b/mods/farming/textures/farming_cotton_8.png differ diff --git a/mods/farming/textures/farming_cotton_seed.png b/mods/farming/textures/farming_cotton_seed.png new file mode 100644 index 0000000..f1d5b8a Binary files /dev/null and b/mods/farming/textures/farming_cotton_seed.png differ diff --git a/mods/farming/textures/farming_cucumber.png b/mods/farming/textures/farming_cucumber.png new file mode 100644 index 0000000..2acb7b2 Binary files /dev/null and b/mods/farming/textures/farming_cucumber.png differ diff --git a/mods/farming/textures/farming_cucumber_1.png b/mods/farming/textures/farming_cucumber_1.png new file mode 100644 index 0000000..e008fd1 Binary files /dev/null and b/mods/farming/textures/farming_cucumber_1.png differ diff --git a/mods/farming/textures/farming_cucumber_2.png b/mods/farming/textures/farming_cucumber_2.png new file mode 100644 index 0000000..9c345ff Binary files /dev/null and b/mods/farming/textures/farming_cucumber_2.png differ diff --git a/mods/farming/textures/farming_cucumber_3.png b/mods/farming/textures/farming_cucumber_3.png new file mode 100644 index 0000000..25f3c54 Binary files /dev/null and b/mods/farming/textures/farming_cucumber_3.png differ diff --git a/mods/farming/textures/farming_cucumber_4.png b/mods/farming/textures/farming_cucumber_4.png new file mode 100644 index 0000000..fc62f2f Binary files /dev/null and b/mods/farming/textures/farming_cucumber_4.png differ diff --git a/mods/farming/textures/farming_cutting_board.png b/mods/farming/textures/farming_cutting_board.png new file mode 100644 index 0000000..90b3f9c Binary files /dev/null and b/mods/farming/textures/farming_cutting_board.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil.png b/mods/farming/textures/farming_desert_sand_soil.png new file mode 100644 index 0000000..1450e01 Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil_wet.png b/mods/farming/textures/farming_desert_sand_soil_wet.png new file mode 100644 index 0000000..cffa955 Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil_wet.png differ diff --git a/mods/farming/textures/farming_desert_sand_soil_wet_side.png b/mods/farming/textures/farming_desert_sand_soil_wet_side.png new file mode 100644 index 0000000..fbb2815 Binary files /dev/null and b/mods/farming/textures/farming_desert_sand_soil_wet_side.png differ diff --git a/mods/farming/textures/farming_donut.png b/mods/farming/textures/farming_donut.png new file mode 100644 index 0000000..8985299 Binary files /dev/null and b/mods/farming/textures/farming_donut.png differ diff --git a/mods/farming/textures/farming_donut_apple.png b/mods/farming/textures/farming_donut_apple.png new file mode 100644 index 0000000..6dfe63d Binary files /dev/null and b/mods/farming/textures/farming_donut_apple.png differ diff --git a/mods/farming/textures/farming_donut_chocolate.png b/mods/farming/textures/farming_donut_chocolate.png new file mode 100644 index 0000000..aa4b93f Binary files /dev/null and b/mods/farming/textures/farming_donut_chocolate.png differ diff --git a/mods/farming/textures/farming_flour.png b/mods/farming/textures/farming_flour.png new file mode 100644 index 0000000..b1a9783 Binary files /dev/null and b/mods/farming/textures/farming_flour.png differ diff --git a/mods/farming/textures/farming_garlic_bread.png b/mods/farming/textures/farming_garlic_bread.png new file mode 100644 index 0000000..b760004 Binary files /dev/null and b/mods/farming/textures/farming_garlic_bread.png differ diff --git a/mods/farming/textures/farming_grapebush.png b/mods/farming/textures/farming_grapebush.png new file mode 100644 index 0000000..c2e6620 Binary files /dev/null and b/mods/farming/textures/farming_grapebush.png differ diff --git a/mods/farming/textures/farming_grapes.png b/mods/farming/textures/farming_grapes.png new file mode 100644 index 0000000..aa00ed6 Binary files /dev/null and b/mods/farming/textures/farming_grapes.png differ diff --git a/mods/farming/textures/farming_grapes_1.png b/mods/farming/textures/farming_grapes_1.png new file mode 100644 index 0000000..64a935d Binary files /dev/null and b/mods/farming/textures/farming_grapes_1.png differ diff --git a/mods/farming/textures/farming_grapes_2.png b/mods/farming/textures/farming_grapes_2.png new file mode 100644 index 0000000..6cc2a33 Binary files /dev/null and b/mods/farming/textures/farming_grapes_2.png differ diff --git a/mods/farming/textures/farming_grapes_3.png b/mods/farming/textures/farming_grapes_3.png new file mode 100644 index 0000000..66d6310 Binary files /dev/null and b/mods/farming/textures/farming_grapes_3.png differ diff --git a/mods/farming/textures/farming_grapes_4.png b/mods/farming/textures/farming_grapes_4.png new file mode 100644 index 0000000..57cdc73 Binary files /dev/null and b/mods/farming/textures/farming_grapes_4.png differ diff --git a/mods/farming/textures/farming_grapes_5.png b/mods/farming/textures/farming_grapes_5.png new file mode 100644 index 0000000..aad41f4 Binary files /dev/null and b/mods/farming/textures/farming_grapes_5.png differ diff --git a/mods/farming/textures/farming_grapes_6.png b/mods/farming/textures/farming_grapes_6.png new file mode 100644 index 0000000..2e23a3c Binary files /dev/null and b/mods/farming/textures/farming_grapes_6.png differ diff --git a/mods/farming/textures/farming_grapes_7.png b/mods/farming/textures/farming_grapes_7.png new file mode 100644 index 0000000..9e70b6d Binary files /dev/null and b/mods/farming/textures/farming_grapes_7.png differ diff --git a/mods/farming/textures/farming_grapes_8.png b/mods/farming/textures/farming_grapes_8.png new file mode 100644 index 0000000..5093a06 Binary files /dev/null and b/mods/farming/textures/farming_grapes_8.png differ diff --git a/mods/farming/textures/farming_hemp_1.png b/mods/farming/textures/farming_hemp_1.png new file mode 100644 index 0000000..6fb4510 Binary files /dev/null and b/mods/farming/textures/farming_hemp_1.png differ diff --git a/mods/farming/textures/farming_hemp_2.png b/mods/farming/textures/farming_hemp_2.png new file mode 100644 index 0000000..a676173 Binary files /dev/null and b/mods/farming/textures/farming_hemp_2.png differ diff --git a/mods/farming/textures/farming_hemp_3.png b/mods/farming/textures/farming_hemp_3.png new file mode 100644 index 0000000..57136d5 Binary files /dev/null and b/mods/farming/textures/farming_hemp_3.png differ diff --git a/mods/farming/textures/farming_hemp_4.png b/mods/farming/textures/farming_hemp_4.png new file mode 100644 index 0000000..b375cf3 Binary files /dev/null and b/mods/farming/textures/farming_hemp_4.png differ diff --git a/mods/farming/textures/farming_hemp_5.png b/mods/farming/textures/farming_hemp_5.png new file mode 100644 index 0000000..890a3d2 Binary files /dev/null and b/mods/farming/textures/farming_hemp_5.png differ diff --git a/mods/farming/textures/farming_hemp_6.png b/mods/farming/textures/farming_hemp_6.png new file mode 100644 index 0000000..258d4e3 Binary files /dev/null and b/mods/farming/textures/farming_hemp_6.png differ diff --git a/mods/farming/textures/farming_hemp_7.png b/mods/farming/textures/farming_hemp_7.png new file mode 100644 index 0000000..1ce3a8d Binary files /dev/null and b/mods/farming/textures/farming_hemp_7.png differ diff --git a/mods/farming/textures/farming_hemp_8.png b/mods/farming/textures/farming_hemp_8.png new file mode 100644 index 0000000..8d2143f Binary files /dev/null and b/mods/farming/textures/farming_hemp_8.png differ diff --git a/mods/farming/textures/farming_hemp_block.png b/mods/farming/textures/farming_hemp_block.png new file mode 100644 index 0000000..285a2cd Binary files /dev/null and b/mods/farming/textures/farming_hemp_block.png differ diff --git a/mods/farming/textures/farming_hemp_fibre.png b/mods/farming/textures/farming_hemp_fibre.png new file mode 100644 index 0000000..fe3c918 Binary files /dev/null and b/mods/farming/textures/farming_hemp_fibre.png differ diff --git a/mods/farming/textures/farming_hemp_leaf.png b/mods/farming/textures/farming_hemp_leaf.png new file mode 100644 index 0000000..997c8f0 Binary files /dev/null and b/mods/farming/textures/farming_hemp_leaf.png differ diff --git a/mods/farming/textures/farming_hemp_oil.png b/mods/farming/textures/farming_hemp_oil.png new file mode 100644 index 0000000..fa8afe2 Binary files /dev/null and b/mods/farming/textures/farming_hemp_oil.png differ diff --git a/mods/farming/textures/farming_hemp_rope.png b/mods/farming/textures/farming_hemp_rope.png new file mode 100644 index 0000000..03a7082 Binary files /dev/null and b/mods/farming/textures/farming_hemp_rope.png differ diff --git a/mods/farming/textures/farming_hemp_seed.png b/mods/farming/textures/farming_hemp_seed.png new file mode 100644 index 0000000..6be42c8 Binary files /dev/null and b/mods/farming/textures/farming_hemp_seed.png differ diff --git a/mods/farming/textures/farming_hoe_bomb.png b/mods/farming/textures/farming_hoe_bomb.png new file mode 100644 index 0000000..e8db9b1 Binary files /dev/null and b/mods/farming/textures/farming_hoe_bomb.png differ diff --git a/mods/farming/textures/farming_juicer.png b/mods/farming/textures/farming_juicer.png new file mode 100644 index 0000000..46265e4 Binary files /dev/null and b/mods/farming/textures/farming_juicer.png differ diff --git a/mods/farming/textures/farming_melon_1.png b/mods/farming/textures/farming_melon_1.png new file mode 100644 index 0000000..3c6ea6d Binary files /dev/null and b/mods/farming/textures/farming_melon_1.png differ diff --git a/mods/farming/textures/farming_melon_2.png b/mods/farming/textures/farming_melon_2.png new file mode 100644 index 0000000..185ed82 Binary files /dev/null and b/mods/farming/textures/farming_melon_2.png differ diff --git a/mods/farming/textures/farming_melon_3.png b/mods/farming/textures/farming_melon_3.png new file mode 100644 index 0000000..6e661f9 Binary files /dev/null and b/mods/farming/textures/farming_melon_3.png differ diff --git a/mods/farming/textures/farming_melon_4.png b/mods/farming/textures/farming_melon_4.png new file mode 100644 index 0000000..d9199f3 Binary files /dev/null and b/mods/farming/textures/farming_melon_4.png differ diff --git a/mods/farming/textures/farming_melon_5.png b/mods/farming/textures/farming_melon_5.png new file mode 100644 index 0000000..755cbd3 Binary files /dev/null and b/mods/farming/textures/farming_melon_5.png differ diff --git a/mods/farming/textures/farming_melon_6.png b/mods/farming/textures/farming_melon_6.png new file mode 100644 index 0000000..b31a5b4 Binary files /dev/null and b/mods/farming/textures/farming_melon_6.png differ diff --git a/mods/farming/textures/farming_melon_7.png b/mods/farming/textures/farming_melon_7.png new file mode 100644 index 0000000..3aebfdd Binary files /dev/null and b/mods/farming/textures/farming_melon_7.png differ diff --git a/mods/farming/textures/farming_melon_side.png b/mods/farming/textures/farming_melon_side.png new file mode 100644 index 0000000..88e40c6 Binary files /dev/null and b/mods/farming/textures/farming_melon_side.png differ diff --git a/mods/farming/textures/farming_melon_slice.png b/mods/farming/textures/farming_melon_slice.png new file mode 100644 index 0000000..6ee9775 Binary files /dev/null and b/mods/farming/textures/farming_melon_slice.png differ diff --git a/mods/farming/textures/farming_melon_top.png b/mods/farming/textures/farming_melon_top.png new file mode 100644 index 0000000..f387dbd Binary files /dev/null and b/mods/farming/textures/farming_melon_top.png differ diff --git a/mods/farming/textures/farming_mixing_bowl.png b/mods/farming/textures/farming_mixing_bowl.png new file mode 100644 index 0000000..e96edf0 Binary files /dev/null and b/mods/farming/textures/farming_mixing_bowl.png differ diff --git a/mods/farming/textures/farming_mortar_pestle.png b/mods/farming/textures/farming_mortar_pestle.png new file mode 100644 index 0000000..abfeb9e Binary files /dev/null and b/mods/farming/textures/farming_mortar_pestle.png differ diff --git a/mods/farming/textures/farming_orange.png b/mods/farming/textures/farming_orange.png new file mode 100644 index 0000000..8b9ec29 Binary files /dev/null and b/mods/farming/textures/farming_orange.png differ diff --git a/mods/farming/textures/farming_pea_1.png b/mods/farming/textures/farming_pea_1.png new file mode 100644 index 0000000..eb48e36 Binary files /dev/null and b/mods/farming/textures/farming_pea_1.png differ diff --git a/mods/farming/textures/farming_pea_2.png b/mods/farming/textures/farming_pea_2.png new file mode 100644 index 0000000..4db7551 Binary files /dev/null and b/mods/farming/textures/farming_pea_2.png differ diff --git a/mods/farming/textures/farming_pea_3.png b/mods/farming/textures/farming_pea_3.png new file mode 100644 index 0000000..980d6ea Binary files /dev/null and b/mods/farming/textures/farming_pea_3.png differ diff --git a/mods/farming/textures/farming_pea_4.png b/mods/farming/textures/farming_pea_4.png new file mode 100644 index 0000000..551eaf4 Binary files /dev/null and b/mods/farming/textures/farming_pea_4.png differ diff --git a/mods/farming/textures/farming_pea_5.png b/mods/farming/textures/farming_pea_5.png new file mode 100644 index 0000000..907760d Binary files /dev/null and b/mods/farming/textures/farming_pea_5.png differ diff --git a/mods/farming/textures/farming_pea_peas.png b/mods/farming/textures/farming_pea_peas.png new file mode 100644 index 0000000..d70b283 Binary files /dev/null and b/mods/farming/textures/farming_pea_peas.png differ diff --git a/mods/farming/textures/farming_pea_pod.png b/mods/farming/textures/farming_pea_pod.png new file mode 100644 index 0000000..1c19c9f Binary files /dev/null and b/mods/farming/textures/farming_pea_pod.png differ diff --git a/mods/farming/textures/farming_pea_soup.png b/mods/farming/textures/farming_pea_soup.png new file mode 100644 index 0000000..03753cf Binary files /dev/null and b/mods/farming/textures/farming_pea_soup.png differ diff --git a/mods/farming/textures/farming_pineapple.png b/mods/farming/textures/farming_pineapple.png new file mode 100644 index 0000000..febf22a Binary files /dev/null and b/mods/farming/textures/farming_pineapple.png differ diff --git a/mods/farming/textures/farming_pineapple_1.png b/mods/farming/textures/farming_pineapple_1.png new file mode 100644 index 0000000..262eff7 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_1.png differ diff --git a/mods/farming/textures/farming_pineapple_2.png b/mods/farming/textures/farming_pineapple_2.png new file mode 100644 index 0000000..4b96d17 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_2.png differ diff --git a/mods/farming/textures/farming_pineapple_3.png b/mods/farming/textures/farming_pineapple_3.png new file mode 100644 index 0000000..90464a1 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_3.png differ diff --git a/mods/farming/textures/farming_pineapple_4.png b/mods/farming/textures/farming_pineapple_4.png new file mode 100644 index 0000000..be58e53 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_4.png differ diff --git a/mods/farming/textures/farming_pineapple_5.png b/mods/farming/textures/farming_pineapple_5.png new file mode 100644 index 0000000..2526f83 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_5.png differ diff --git a/mods/farming/textures/farming_pineapple_6.png b/mods/farming/textures/farming_pineapple_6.png new file mode 100644 index 0000000..741e0e3 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_6.png differ diff --git a/mods/farming/textures/farming_pineapple_7.png b/mods/farming/textures/farming_pineapple_7.png new file mode 100644 index 0000000..22bad23 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_7.png differ diff --git a/mods/farming/textures/farming_pineapple_8.png b/mods/farming/textures/farming_pineapple_8.png new file mode 100644 index 0000000..5182c4f Binary files /dev/null and b/mods/farming/textures/farming_pineapple_8.png differ diff --git a/mods/farming/textures/farming_pineapple_juice.png b/mods/farming/textures/farming_pineapple_juice.png new file mode 100644 index 0000000..43a54c7 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_juice.png differ diff --git a/mods/farming/textures/farming_pineapple_ring.png b/mods/farming/textures/farming_pineapple_ring.png new file mode 100644 index 0000000..deb2e6d Binary files /dev/null and b/mods/farming/textures/farming_pineapple_ring.png differ diff --git a/mods/farming/textures/farming_pineapple_top.png b/mods/farming/textures/farming_pineapple_top.png new file mode 100644 index 0000000..f653d83 Binary files /dev/null and b/mods/farming/textures/farming_pineapple_top.png differ diff --git a/mods/farming/textures/farming_porridge.png b/mods/farming/textures/farming_porridge.png new file mode 100644 index 0000000..cd4466f Binary files /dev/null and b/mods/farming/textures/farming_porridge.png differ diff --git a/mods/farming/textures/farming_pot.png b/mods/farming/textures/farming_pot.png new file mode 100644 index 0000000..d28411d Binary files /dev/null and b/mods/farming/textures/farming_pot.png differ diff --git a/mods/farming/textures/farming_potato.png b/mods/farming/textures/farming_potato.png new file mode 100644 index 0000000..6e91d6a Binary files /dev/null and b/mods/farming/textures/farming_potato.png differ diff --git a/mods/farming/textures/farming_potato_1.png b/mods/farming/textures/farming_potato_1.png new file mode 100644 index 0000000..a9c0040 Binary files /dev/null and b/mods/farming/textures/farming_potato_1.png differ diff --git a/mods/farming/textures/farming_potato_2.png b/mods/farming/textures/farming_potato_2.png new file mode 100644 index 0000000..c81830c Binary files /dev/null and b/mods/farming/textures/farming_potato_2.png differ diff --git a/mods/farming/textures/farming_potato_3.png b/mods/farming/textures/farming_potato_3.png new file mode 100644 index 0000000..a3d7920 Binary files /dev/null and b/mods/farming/textures/farming_potato_3.png differ diff --git a/mods/farming/textures/farming_potato_4.png b/mods/farming/textures/farming_potato_4.png new file mode 100644 index 0000000..405b7e56 Binary files /dev/null and b/mods/farming/textures/farming_potato_4.png differ diff --git a/mods/farming/textures/farming_potato_salad.png b/mods/farming/textures/farming_potato_salad.png new file mode 100644 index 0000000..0028c91 Binary files /dev/null and b/mods/farming/textures/farming_potato_salad.png differ diff --git a/mods/farming/textures/farming_pumpkin_1.png b/mods/farming/textures/farming_pumpkin_1.png new file mode 100644 index 0000000..e5b9a2b Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_1.png differ diff --git a/mods/farming/textures/farming_pumpkin_2.png b/mods/farming/textures/farming_pumpkin_2.png new file mode 100644 index 0000000..d977e8c Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_2.png differ diff --git a/mods/farming/textures/farming_pumpkin_3.png b/mods/farming/textures/farming_pumpkin_3.png new file mode 100644 index 0000000..83f8190 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_3.png differ diff --git a/mods/farming/textures/farming_pumpkin_4.png b/mods/farming/textures/farming_pumpkin_4.png new file mode 100644 index 0000000..20de004 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_4.png differ diff --git a/mods/farming/textures/farming_pumpkin_5.png b/mods/farming/textures/farming_pumpkin_5.png new file mode 100644 index 0000000..59fa78e Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_5.png differ diff --git a/mods/farming/textures/farming_pumpkin_6.png b/mods/farming/textures/farming_pumpkin_6.png new file mode 100644 index 0000000..6ae543e Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_6.png differ diff --git a/mods/farming/textures/farming_pumpkin_7.png b/mods/farming/textures/farming_pumpkin_7.png new file mode 100644 index 0000000..79190e0 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_7.png differ diff --git a/mods/farming/textures/farming_pumpkin_8.png b/mods/farming/textures/farming_pumpkin_8.png new file mode 100644 index 0000000..b941442 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_8.png differ diff --git a/mods/farming/textures/farming_pumpkin_bread.png b/mods/farming/textures/farming_pumpkin_bread.png new file mode 100644 index 0000000..0dfae08 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_bread.png differ diff --git a/mods/farming/textures/farming_pumpkin_dough.png b/mods/farming/textures/farming_pumpkin_dough.png new file mode 100644 index 0000000..62ea7a6 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_dough.png differ diff --git a/mods/farming/textures/farming_pumpkin_face_off.png b/mods/farming/textures/farming_pumpkin_face_off.png new file mode 100644 index 0000000..df70171 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_face_off.png differ diff --git a/mods/farming/textures/farming_pumpkin_face_on.png b/mods/farming/textures/farming_pumpkin_face_on.png new file mode 100644 index 0000000..fa71c9d Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_face_on.png differ diff --git a/mods/farming/textures/farming_pumpkin_side.png b/mods/farming/textures/farming_pumpkin_side.png new file mode 100644 index 0000000..2d30f20 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_side.png differ diff --git a/mods/farming/textures/farming_pumpkin_slice.png b/mods/farming/textures/farming_pumpkin_slice.png new file mode 100644 index 0000000..1fb659e Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_slice.png differ diff --git a/mods/farming/textures/farming_pumpkin_top.png b/mods/farming/textures/farming_pumpkin_top.png new file mode 100644 index 0000000..7928345 Binary files /dev/null and b/mods/farming/textures/farming_pumpkin_top.png differ diff --git a/mods/farming/textures/farming_raspberries.png b/mods/farming/textures/farming_raspberries.png new file mode 100644 index 0000000..ab96e1b Binary files /dev/null and b/mods/farming/textures/farming_raspberries.png differ diff --git a/mods/farming/textures/farming_raspberry_1.png b/mods/farming/textures/farming_raspberry_1.png new file mode 100644 index 0000000..d1a7ffc Binary files /dev/null and b/mods/farming/textures/farming_raspberry_1.png differ diff --git a/mods/farming/textures/farming_raspberry_2.png b/mods/farming/textures/farming_raspberry_2.png new file mode 100644 index 0000000..308a0ca Binary files /dev/null and b/mods/farming/textures/farming_raspberry_2.png differ diff --git a/mods/farming/textures/farming_raspberry_3.png b/mods/farming/textures/farming_raspberry_3.png new file mode 100644 index 0000000..43d2ab1 Binary files /dev/null and b/mods/farming/textures/farming_raspberry_3.png differ diff --git a/mods/farming/textures/farming_raspberry_4.png b/mods/farming/textures/farming_raspberry_4.png new file mode 100644 index 0000000..32da6b9 Binary files /dev/null and b/mods/farming/textures/farming_raspberry_4.png differ diff --git a/mods/farming/textures/farming_raspberry_smoothie.png b/mods/farming/textures/farming_raspberry_smoothie.png new file mode 100644 index 0000000..fe178d1 Binary files /dev/null and b/mods/farming/textures/farming_raspberry_smoothie.png differ diff --git a/mods/farming/textures/farming_rhubarb.png b/mods/farming/textures/farming_rhubarb.png new file mode 100644 index 0000000..7d416ab Binary files /dev/null and b/mods/farming/textures/farming_rhubarb.png differ diff --git a/mods/farming/textures/farming_rhubarb_1.png b/mods/farming/textures/farming_rhubarb_1.png new file mode 100644 index 0000000..01585b1 Binary files /dev/null and b/mods/farming/textures/farming_rhubarb_1.png differ diff --git a/mods/farming/textures/farming_rhubarb_2.png b/mods/farming/textures/farming_rhubarb_2.png new file mode 100644 index 0000000..71845c7 Binary files /dev/null and b/mods/farming/textures/farming_rhubarb_2.png differ diff --git a/mods/farming/textures/farming_rhubarb_3.png b/mods/farming/textures/farming_rhubarb_3.png new file mode 100644 index 0000000..b412f7e Binary files /dev/null and b/mods/farming/textures/farming_rhubarb_3.png differ diff --git a/mods/farming/textures/farming_rhubarb_pie.png b/mods/farming/textures/farming_rhubarb_pie.png new file mode 100644 index 0000000..1f77b53 Binary files /dev/null and b/mods/farming/textures/farming_rhubarb_pie.png differ diff --git a/mods/farming/textures/farming_rose_water.png b/mods/farming/textures/farming_rose_water.png new file mode 100644 index 0000000..96e546f Binary files /dev/null and b/mods/farming/textures/farming_rose_water.png differ diff --git a/mods/farming/textures/farming_salt.png b/mods/farming/textures/farming_salt.png new file mode 100644 index 0000000..2b23e33 Binary files /dev/null and b/mods/farming/textures/farming_salt.png differ diff --git a/mods/farming/textures/farming_saucepan.png b/mods/farming/textures/farming_saucepan.png new file mode 100644 index 0000000..2625d45 Binary files /dev/null and b/mods/farming/textures/farming_saucepan.png differ diff --git a/mods/farming/textures/farming_skillet.png b/mods/farming/textures/farming_skillet.png new file mode 100644 index 0000000..60d26a1 Binary files /dev/null and b/mods/farming/textures/farming_skillet.png differ diff --git a/mods/farming/textures/farming_soil.png b/mods/farming/textures/farming_soil.png new file mode 100644 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 100644 index 0000000..0b4487d Binary files /dev/null and b/mods/farming/textures/farming_soil_wet.png differ diff --git a/mods/farming/textures/farming_soil_wet_side.png b/mods/farming/textures/farming_soil_wet_side.png new file mode 100644 index 0000000..f0b1bd4 Binary files /dev/null and b/mods/farming/textures/farming_soil_wet_side.png differ diff --git a/mods/farming/textures/farming_straw.png b/mods/farming/textures/farming_straw.png new file mode 100644 index 0000000..e427772 Binary files /dev/null and b/mods/farming/textures/farming_straw.png differ diff --git a/mods/farming/textures/farming_string.png b/mods/farming/textures/farming_string.png new file mode 100644 index 0000000..e2bbfd7 Binary files /dev/null and b/mods/farming/textures/farming_string.png differ diff --git a/mods/farming/textures/farming_sugar.png b/mods/farming/textures/farming_sugar.png new file mode 100644 index 0000000..5cb7fa0 Binary files /dev/null and b/mods/farming/textures/farming_sugar.png differ diff --git a/mods/farming/textures/farming_toast.png b/mods/farming/textures/farming_toast.png new file mode 100644 index 0000000..8a4524e Binary files /dev/null and b/mods/farming/textures/farming_toast.png differ diff --git a/mods/farming/textures/farming_toast_sandwich.png b/mods/farming/textures/farming_toast_sandwich.png new file mode 100644 index 0000000..c60ff5a Binary files /dev/null and b/mods/farming/textures/farming_toast_sandwich.png differ diff --git a/mods/farming/textures/farming_tomato.png b/mods/farming/textures/farming_tomato.png new file mode 100644 index 0000000..586aa56 Binary files /dev/null and b/mods/farming/textures/farming_tomato.png differ diff --git a/mods/farming/textures/farming_tomato_1.png b/mods/farming/textures/farming_tomato_1.png new file mode 100644 index 0000000..d858e58 Binary files /dev/null and b/mods/farming/textures/farming_tomato_1.png differ diff --git a/mods/farming/textures/farming_tomato_2.png b/mods/farming/textures/farming_tomato_2.png new file mode 100644 index 0000000..9d9ed6d Binary files /dev/null and b/mods/farming/textures/farming_tomato_2.png differ diff --git a/mods/farming/textures/farming_tomato_3.png b/mods/farming/textures/farming_tomato_3.png new file mode 100644 index 0000000..fe3dcf0 Binary files /dev/null and b/mods/farming/textures/farming_tomato_3.png differ diff --git a/mods/farming/textures/farming_tomato_4.png b/mods/farming/textures/farming_tomato_4.png new file mode 100644 index 0000000..27c3282 Binary files /dev/null and b/mods/farming/textures/farming_tomato_4.png differ diff --git a/mods/farming/textures/farming_tomato_5.png b/mods/farming/textures/farming_tomato_5.png new file mode 100644 index 0000000..f369a68 Binary files /dev/null and b/mods/farming/textures/farming_tomato_5.png differ diff --git a/mods/farming/textures/farming_tomato_6.png b/mods/farming/textures/farming_tomato_6.png new file mode 100644 index 0000000..0135cb5 Binary files /dev/null and b/mods/farming/textures/farming_tomato_6.png differ diff --git a/mods/farming/textures/farming_tomato_7.png b/mods/farming/textures/farming_tomato_7.png new file mode 100644 index 0000000..4cd85f5 Binary files /dev/null and b/mods/farming/textures/farming_tomato_7.png differ diff --git a/mods/farming/textures/farming_tomato_8.png b/mods/farming/textures/farming_tomato_8.png new file mode 100644 index 0000000..0b49025 Binary files /dev/null and b/mods/farming/textures/farming_tomato_8.png differ diff --git a/mods/farming/textures/farming_tool_bronzehoe.png b/mods/farming/textures/farming_tool_bronzehoe.png new file mode 100644 index 0000000..ef07a80 Binary files /dev/null and b/mods/farming/textures/farming_tool_bronzehoe.png differ diff --git a/mods/farming/textures/farming_tool_diamondhoe.png b/mods/farming/textures/farming_tool_diamondhoe.png new file mode 100644 index 0000000..093acb8 Binary files /dev/null and b/mods/farming/textures/farming_tool_diamondhoe.png differ diff --git a/mods/farming/textures/farming_tool_mesehoe.png b/mods/farming/textures/farming_tool_mesehoe.png new file mode 100644 index 0000000..ffd597a Binary files /dev/null and b/mods/farming/textures/farming_tool_mesehoe.png differ diff --git a/mods/farming/textures/farming_tool_steelhoe.png b/mods/farming/textures/farming_tool_steelhoe.png new file mode 100644 index 0000000..893a695 Binary files /dev/null and b/mods/farming/textures/farming_tool_steelhoe.png differ diff --git a/mods/farming/textures/farming_tool_stonehoe.png b/mods/farming/textures/farming_tool_stonehoe.png new file mode 100644 index 0000000..4f8dade Binary files /dev/null and b/mods/farming/textures/farming_tool_stonehoe.png differ diff --git a/mods/farming/textures/farming_tool_woodhoe.png b/mods/farming/textures/farming_tool_woodhoe.png new file mode 100644 index 0000000..8b20d2d Binary files /dev/null and b/mods/farming/textures/farming_tool_woodhoe.png differ diff --git a/mods/farming/textures/farming_trellis.png b/mods/farming/textures/farming_trellis.png new file mode 100644 index 0000000..855b932 Binary files /dev/null and b/mods/farming/textures/farming_trellis.png differ diff --git a/mods/farming/textures/farming_turkish_delight.png b/mods/farming/textures/farming_turkish_delight.png new file mode 100644 index 0000000..198ffc4 Binary files /dev/null and b/mods/farming/textures/farming_turkish_delight.png differ diff --git a/mods/farming/textures/farming_wheat.png b/mods/farming/textures/farming_wheat.png new file mode 100644 index 0000000..1e0ad3b Binary files /dev/null and b/mods/farming/textures/farming_wheat.png differ diff --git a/mods/farming/textures/farming_wheat_1.png b/mods/farming/textures/farming_wheat_1.png new file mode 100644 index 0000000..c16ad94 Binary files /dev/null and b/mods/farming/textures/farming_wheat_1.png differ diff --git a/mods/farming/textures/farming_wheat_2.png b/mods/farming/textures/farming_wheat_2.png new file mode 100644 index 0000000..baddb4c Binary files /dev/null and b/mods/farming/textures/farming_wheat_2.png differ diff --git a/mods/farming/textures/farming_wheat_3.png b/mods/farming/textures/farming_wheat_3.png new file mode 100644 index 0000000..36ebb19 Binary files /dev/null and b/mods/farming/textures/farming_wheat_3.png differ diff --git a/mods/farming/textures/farming_wheat_4.png b/mods/farming/textures/farming_wheat_4.png new file mode 100644 index 0000000..735ed77 Binary files /dev/null and b/mods/farming/textures/farming_wheat_4.png differ diff --git a/mods/farming/textures/farming_wheat_5.png b/mods/farming/textures/farming_wheat_5.png new file mode 100644 index 0000000..f40b5f0 Binary files /dev/null and b/mods/farming/textures/farming_wheat_5.png differ diff --git a/mods/farming/textures/farming_wheat_6.png b/mods/farming/textures/farming_wheat_6.png new file mode 100644 index 0000000..e9c78e0 Binary files /dev/null and b/mods/farming/textures/farming_wheat_6.png differ diff --git a/mods/farming/textures/farming_wheat_7.png b/mods/farming/textures/farming_wheat_7.png new file mode 100644 index 0000000..cc26ca9 Binary files /dev/null and b/mods/farming/textures/farming_wheat_7.png differ diff --git a/mods/farming/textures/farming_wheat_8.png b/mods/farming/textures/farming_wheat_8.png new file mode 100644 index 0000000..d050093 Binary files /dev/null and b/mods/farming/textures/farming_wheat_8.png differ diff --git a/mods/farming/textures/farming_wheat_seed.png b/mods/farming/textures/farming_wheat_seed.png new file mode 100644 index 0000000..a9031fb Binary files /dev/null and b/mods/farming/textures/farming_wheat_seed.png differ diff --git a/mods/farming/textures/strawberry.png b/mods/farming/textures/strawberry.png new file mode 100644 index 0000000..5b43e6b Binary files /dev/null and b/mods/farming/textures/strawberry.png differ diff --git a/mods/farming/textures/vessels_drinking_cup.png b/mods/farming/textures/vessels_drinking_cup.png new file mode 100644 index 0000000..2eba232 Binary files /dev/null and b/mods/farming/textures/vessels_drinking_cup.png differ diff --git a/mods/farming/utensils.lua b/mods/farming/utensils.lua new file mode 100644 index 0000000..4a15298 --- /dev/null +++ b/mods/farming/utensils.lua @@ -0,0 +1,163 @@ + +local S = farming.intllib + +-- wooden bowl + +minetest.register_craftitem("farming:bowl", { + description = S("Wooden Bowl"), + inventory_image = "farming_bowl.png", + groups = {food_bowl = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:bowl 4", + recipe = { + {"group:wood", "", "group:wood"}, + {"", "group:wood", ""}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "farming:bowl", + burntime = 10, +}) + +-- saucepan + +minetest.register_craftitem("farming:saucepan", { + description = S("Saucepan"), + inventory_image = "farming_saucepan.png", + groups = {food_saucepan = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:saucepan", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "group:stick", ""}, + } +}) + +-- cooking pot + +minetest.register_craftitem("farming:pot", { + description = S("Cooking Pot"), + inventory_image = "farming_pot.png", + groups = {food_pot = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:pot", + recipe = { + {"group:stick", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:steel_ingot", "default:steel_ingot"}, + } +}) + +-- baking tray + +minetest.register_craftitem("farming:baking_tray", { + description = S("Baking Tray"), + inventory_image = "farming_baking_tray.png", + groups = {food_baking_tray = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:baking_tray", + recipe = { + {"default:clay_brick", "default:clay_brick", "default:clay_brick"}, + {"default:clay_brick", "", "default:clay_brick"}, + {"default:clay_brick", "default:clay_brick", "default:clay_brick"}, + } +}) + +-- skillet + +minetest.register_craftitem("farming:skillet", { + description = S("Skillet"), + inventory_image = "farming_skillet.png", + groups = {food_skillet = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:skillet", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:steel_ingot", ""}, + {"", "", "group:stick"}, + } +}) + +-- mortar and pestle + +minetest.register_craftitem("farming:mortar_pestle", { + description = S("Mortar and Pestle"), + inventory_image = "farming_mortar_pestle.png", + groups = {food_mortar_pestle = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:mortar_pestle", + recipe = { + {"default:stone", "group:stick", "default:stone"}, + {"", "default:stone", ""}, + } +}) + +-- cutting board + +minetest.register_craftitem("farming:cutting_board", { + description = S("Cutting Board"), + inventory_image = "farming_cutting_board.png", + groups = {food_cutting_board = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:cutting_board", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "group:stick", ""}, + {"", "", "group:wood"}, + } +}) + +-- juicer + +minetest.register_craftitem("farming:juicer", { + description = S("Juicer"), + inventory_image = "farming_juicer.png", + groups = {food_juicer = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:juicer", + recipe = { + {"", "default:stone", ""}, + {"default:stone", "", "default:stone"}, + } +}) + +-- glass mixing bowl + +minetest.register_craftitem("farming:mixing_bowl", { + description = S("Glass Mixing Bowl"), + inventory_image = "farming_mixing_bowl.png", + groups = {food_mixing_bowl = 1, flammable = 2}, +}) + +minetest.register_craft({ + output = "farming:mixing_bowl", + recipe = { + {"default:glass", "group:stick", "default:glass"}, + {"", "default:glass", ""}, + } +}) + +minetest.register_craft( { + type = "shapeless", + output = "vessels:glass_fragments", + recipe = { + "farming:mixing_bowl", + }, +}) diff --git a/mods/fire/README.txt b/mods/fire/README.txt new file mode 100644 index 0000000..099da1c --- /dev/null +++ b/mods/fire/README.txt @@ -0,0 +1,35 @@ +Minetest Game mod: fire +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (textures and sounds) +-------------------------------------- +Everything not listed in here: +Copyright (C) 2012 Perttu Ahola (celeron55) (CC BY-SA 3.0) + +Muadtralk (CC BY-SA 3.0) + fire_basic_flame_animated.png + +Gambit (CC BY-SA 3.0) + fire_flint_steel.png + +dobroide (CC BY 3.0) +http://www.freesound.org/people/dobroide/sounds/4211/ + fire_small.ogg + +Dynamicell (CC BY 3.0) +http://www.freesound.org/people/Dynamicell/sounds/17548/ + fire_large.ogg + fire_fire.*.ogg + +fire_small.ogg and fire_large.ogg are unused but kept temporarily to not break +other mods that may use them. + +Benboncan (CC BY 3.0) +https://www.freesound.org/people/Benboncan/sounds/66457/ + fire_flint_and_steel.ogg diff --git a/mods/fire/depends.txt b/mods/fire/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/fire/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/fire/init.lua b/mods/fire/init.lua new file mode 100644 index 0000000..f97636b --- /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: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/fire/license.txt b/mods/fire/license.txt new file mode 100644 index 0000000..43f9cd7 --- /dev/null +++ b/mods/fire/license.txt @@ -0,0 +1,84 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures and sounds) +--------------------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Muadtralk +Copyright (C) 2013-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ + +----------------------- + +Attribution 3.0 Unported (CC BY 3.0) +Copyright (C) 2005 dobroide +Copyright (C) 2006 Dynamicell +Copyright (C) 2009 Benboncan + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by/3.0/ diff --git a/mods/fire/sounds/fire_extinguish_flame.1.ogg b/mods/fire/sounds/fire_extinguish_flame.1.ogg new file mode 100644 index 0000000..42506dd Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.1.ogg differ diff --git a/mods/fire/sounds/fire_extinguish_flame.2.ogg b/mods/fire/sounds/fire_extinguish_flame.2.ogg new file mode 100644 index 0000000..2747ab8 Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.2.ogg differ diff --git a/mods/fire/sounds/fire_extinguish_flame.3.ogg b/mods/fire/sounds/fire_extinguish_flame.3.ogg new file mode 100644 index 0000000..8baeac3 Binary files /dev/null and b/mods/fire/sounds/fire_extinguish_flame.3.ogg differ diff --git a/mods/fire/sounds/fire_fire.1.ogg b/mods/fire/sounds/fire_fire.1.ogg new file mode 100644 index 0000000..cbfee4c Binary files /dev/null and b/mods/fire/sounds/fire_fire.1.ogg differ diff --git a/mods/fire/sounds/fire_fire.2.ogg b/mods/fire/sounds/fire_fire.2.ogg new file mode 100644 index 0000000..e8d0eb1 Binary files /dev/null and b/mods/fire/sounds/fire_fire.2.ogg differ diff --git a/mods/fire/sounds/fire_fire.3.ogg b/mods/fire/sounds/fire_fire.3.ogg new file mode 100644 index 0000000..5cad3d9 Binary files /dev/null and b/mods/fire/sounds/fire_fire.3.ogg differ diff --git a/mods/fire/sounds/fire_flint_and_steel.ogg b/mods/fire/sounds/fire_flint_and_steel.ogg new file mode 100644 index 0000000..6996e16 Binary files /dev/null and b/mods/fire/sounds/fire_flint_and_steel.ogg differ diff --git a/mods/fire/sounds/fire_large.ogg b/mods/fire/sounds/fire_large.ogg new file mode 100644 index 0000000..fe78e62 Binary files /dev/null and b/mods/fire/sounds/fire_large.ogg differ diff --git a/mods/fire/sounds/fire_small.ogg b/mods/fire/sounds/fire_small.ogg new file mode 100644 index 0000000..5aac595 Binary files /dev/null and b/mods/fire/sounds/fire_small.ogg differ diff --git a/mods/fire/textures/fire_basic_flame.png b/mods/fire/textures/fire_basic_flame.png new file mode 100644 index 0000000..1da0702 Binary files /dev/null and b/mods/fire/textures/fire_basic_flame.png differ diff --git a/mods/fire/textures/fire_basic_flame_animated.png b/mods/fire/textures/fire_basic_flame_animated.png new file mode 100644 index 0000000..1cdd9fd Binary files /dev/null and b/mods/fire/textures/fire_basic_flame_animated.png differ diff --git a/mods/fire/textures/fire_flint_steel.png b/mods/fire/textures/fire_flint_steel.png new file mode 100644 index 0000000..c262ebc Binary files /dev/null and b/mods/fire/textures/fire_flint_steel.png differ diff --git a/mods/flowers/README.txt b/mods/flowers/README.txt new file mode 100644 index 0000000..2a5e4de --- /dev/null +++ b/mods/flowers/README.txt @@ -0,0 +1,26 @@ +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/flowers/depends.txt b/mods/flowers/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/flowers/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/flowers/init.lua b/mods/flowers/init.lua new file mode 100644 index 0000000..1f55a3f --- /dev/null +++ b/mods/flowers/init.lua @@ -0,0 +1,310 @@ +-- 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", + "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", + {-2 / 16, -0.5, -2 / 16, 2 / 16, 4 / 16, 2 / 16}, + {color_yellow = 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} + }, +} + +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) + -- Maximum flower density created by mapgen is 13 per 9x9 area. + -- The limit of 7 below was tuned by in-game testing to result in a maximum + -- flower density by ABM spread of 13 per 9x9 area. + -- Warning: Setting this limit theoretically without in-game testing + -- results in a maximum flower density by ABM spread that is far too high. + if #minetest.find_nodes_in_area(pos0, pos1, "group:flora") > 7 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_above = {x = soil.x, y = soil.y + 1, z = soil.z} + light = minetest.get_node_light(soil_above) + if light and light >= 13 and + -- Desert sand is in the soil group + minetest.get_node(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 = {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, + 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 = {-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 +}) diff --git a/mods/flowers/license.txt b/mods/flowers/license.txt new file mode 100644 index 0000000..d301162 --- /dev/null +++ b/mods/flowers/license.txt @@ -0,0 +1,62 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Ironzorg, VanessaE +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 RHRhino +Copyright (C) 2015-2016 Gambit +Copyright (C) 2016 yyt16384 + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/flowers/mapgen.lua b/mods/flowers/mapgen.lua new file mode 100644 index 0000000..2b96090 --- /dev/null +++ b/mods/flowers/mapgen.lua @@ -0,0 +1,171 @@ +-- +-- Mgv6 +-- + +local function register_mgv6_flower(name) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.006, + spread = {x = 100, y = 100, z = 100}, + seed = 436, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "flowers:"..name, + }) +end + +local function register_mgv6_mushroom(name) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.04, + spread = {x = 100, y = 100, z = 100}, + seed = 7133, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 30, + decoration = "flowers:"..name, + spawn_by = "default:tree", + num_spawn_by = 1, + }) +end + +local function register_mgv6_waterlily() + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 100, y = 100, z = 100}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + y_min = 0, + y_max = 0, + schematic = minetest.get_modpath("flowers").."/schematics/waterlily.mts", + rotation = "random", + }) +end + +function flowers.register_mgv6_decorations() + register_mgv6_flower("rose") + register_mgv6_flower("tulip") + register_mgv6_flower("dandelion_yellow") + register_mgv6_flower("geranium") + register_mgv6_flower("viola") + register_mgv6_flower("dandelion_white") + + register_mgv6_mushroom("mushroom_brown") + register_mgv6_mushroom("mushroom_red") + + register_mgv6_waterlily() +end + + +-- +-- All other biome API mapgens +-- + +local function register_flower(seed, name) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + sidelen = 16, + noise_params = { + offset = -0.015, + scale = 0.025, + spread = {x = 200, y = 200, z = 200}, + seed = seed, + octaves = 3, + persist = 0.6 + }, + biomes = {"grassland", "deciduous_forest", "coniferous_forest", + "floatland_grassland", "floatland_coniferous_forest"}, + y_min = 1, + y_max = 31000, + decoration = "flowers:"..name, + }) +end + +local function register_mushroom(name) + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + 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_min = 1, + y_max = 31000, + decoration = "flowers:"..name, + }) +end + +local function register_waterlily() + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt"}, + 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 = {"rainforest_swamp", "savanna_shore", "deciduous_forest_shore"}, + y_min = 0, + y_max = 0, + schematic = minetest.get_modpath("flowers") .. "/schematics/waterlily.mts", + rotation = "random", + }) +end + +function flowers.register_decorations() + register_flower(436, "rose") + register_flower(19822, "tulip") + register_flower(1220999, "dandelion_yellow") + register_flower(36662, "geranium") + register_flower(1133, "viola") + register_flower(73133, "dandelion_white") + + register_mushroom("mushroom_brown") + register_mushroom("mushroom_red") + + register_waterlily() +end + + +-- +-- Detect mapgen to select functions +-- + +local mg_name = minetest.get_mapgen_setting("mg_name") +if mg_name == "v6" then + flowers.register_mgv6_decorations() +else + flowers.register_decorations() +end diff --git a/mods/flowers/schematics/waterlily.mts b/mods/flowers/schematics/waterlily.mts new file mode 100644 index 0000000..69e1d8e Binary files /dev/null and b/mods/flowers/schematics/waterlily.mts differ diff --git a/mods/flowers/textures/flowers_dandelion_white.png b/mods/flowers/textures/flowers_dandelion_white.png new file mode 100644 index 0000000..1bc02fb Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_white.png differ diff --git a/mods/flowers/textures/flowers_dandelion_yellow.png b/mods/flowers/textures/flowers_dandelion_yellow.png new file mode 100644 index 0000000..ec11c1c Binary files /dev/null and b/mods/flowers/textures/flowers_dandelion_yellow.png differ diff --git a/mods/flowers/textures/flowers_geranium.png b/mods/flowers/textures/flowers_geranium.png new file mode 100644 index 0000000..88de1d7 Binary files /dev/null and b/mods/flowers/textures/flowers_geranium.png differ diff --git a/mods/flowers/textures/flowers_mushroom_brown.png b/mods/flowers/textures/flowers_mushroom_brown.png new file mode 100644 index 0000000..33ffcd4 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_brown.png differ diff --git a/mods/flowers/textures/flowers_mushroom_red.png b/mods/flowers/textures/flowers_mushroom_red.png new file mode 100644 index 0000000..a68f5d5 Binary files /dev/null and b/mods/flowers/textures/flowers_mushroom_red.png differ diff --git a/mods/flowers/textures/flowers_rose.png b/mods/flowers/textures/flowers_rose.png new file mode 100644 index 0000000..e3b841d Binary files /dev/null and b/mods/flowers/textures/flowers_rose.png differ diff --git a/mods/flowers/textures/flowers_tulip.png b/mods/flowers/textures/flowers_tulip.png new file mode 100644 index 0000000..471fcd3 Binary files /dev/null and b/mods/flowers/textures/flowers_tulip.png differ diff --git a/mods/flowers/textures/flowers_viola.png b/mods/flowers/textures/flowers_viola.png new file mode 100644 index 0000000..ca2d750 Binary files /dev/null and b/mods/flowers/textures/flowers_viola.png differ diff --git a/mods/flowers/textures/flowers_waterlily.png b/mods/flowers/textures/flowers_waterlily.png new file mode 100644 index 0000000..305c445 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily.png differ diff --git a/mods/flowers/textures/flowers_waterlily_bottom.png b/mods/flowers/textures/flowers_waterlily_bottom.png new file mode 100644 index 0000000..3dbeaf4 Binary files /dev/null and b/mods/flowers/textures/flowers_waterlily_bottom.png differ diff --git a/mods/frisk/AUTHORS b/mods/frisk/AUTHORS new file mode 100644 index 0000000..cdbdbea --- /dev/null +++ b/mods/frisk/AUTHORS @@ -0,0 +1,4 @@ +AUTHORS +------- + +Vitalie Ciubotaru diff --git a/mods/frisk/CHANGES b/mods/frisk/CHANGES new file mode 100644 index 0000000..ede66a0 --- /dev/null +++ b/mods/frisk/CHANGES @@ -0,0 +1,8 @@ +Changelog: + +0.0.2 +* Mod renamed from 'inspector' to 'frisk' (another 'inspector' mod exists) +* Fixed inventory permissions (dropping and moving disabled) + +0.0.1 +* Initial release \ No newline at end of file diff --git a/mods/frisk/LICENSE b/mods/frisk/LICENSE new file mode 100644 index 0000000..10926e8 --- /dev/null +++ b/mods/frisk/LICENSE @@ -0,0 +1,675 @@ + GNU 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. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/mods/frisk/depends.txt b/mods/frisk/depends.txt new file mode 100644 index 0000000..c48fe0d --- /dev/null +++ b/mods/frisk/depends.txt @@ -0,0 +1,3 @@ +default +intllib? + diff --git a/mods/frisk/description.txt b/mods/frisk/description.txt new file mode 100644 index 0000000..bc3fd0a --- /dev/null +++ b/mods/frisk/description.txt @@ -0,0 +1 @@ +a screening device to view other players' inventory \ No newline at end of file diff --git a/mods/frisk/init.lua b/mods/frisk/init.lua new file mode 100644 index 0000000..c60b8c9 --- /dev/null +++ b/mods/frisk/init.lua @@ -0,0 +1,80 @@ +minetest.log('action', '[MOD] Frisk loading ...') +local frisk_version = "0.0.2" + +local i18n --internationalization +if minetest.get_modpath("intllib") then + i18n = intllib.Getter() +else + i18n = function(s,a,...) + a={a,...} + local v = s:gsub("@(%d+)", function(n) + return a[tonumber(n)] + end) + return v + end +end + +local function finishfrisk(player, pName, oldpos) + local pPlayer = minetest.get_player_by_name(pName) + local name = player:get_player_name() + if (pPlayer:getpos().x ~= oldpos.x) or (pPlayer:getpos().y ~= oldpos.y) or (pPlayer:getpos().z ~= oldpos.z) then + minetest.chat_send_player(pName, "You moved, frisk canceled.") + minetest.chat_send_player(name, pName.." moved, fisk canceled.") + return + end + local detached_inv = minetest.create_detached_inventory(pName, { + allow_move = function() + return 0 + end, + allow_put = function() + return 0 + end, + allow_take = function() + return 0 + end, + }) --InvRef + local player_inv = minetest.get_inventory({type='player', name = pName}) --InvRef + detached_inv:set_list('main', player_inv:get_list('main')) + detached_inv:set_list('craft', player_inv:get_list('craft')) + local formspec = + 'size[8,8]' .. + 'label[0,0;' .. i18n("@1\'s inventory", pName) ..']'.. + 'list[detached:'.. pName..';craft;3,0;3,3;]'.. + 'list[detached:'.. pName..';main;0,4;8,4;]' + minetest.show_formspec(player:get_player_name(), 'frisk:frisk', formspec) + minetest.chat_send_player(pName, "You were frisked by "..name..".") +end + +local function startfrisk(stack, player, pointedThing) + local obj = pointedThing.ref + if obj and pointedThing.type == "object" then + local pName = obj:get_player_name() + if pName ~= "" then + local name = player:get_player_name() + minetest.chat_send_player(pName, name.." is frisking you, move to cancel.") + minetest.chat_send_player(name, "You are frisking "..pName..".") + local oldpos = obj:getpos() + minetest.after(8, finishfrisk, player, pName, oldpos) + end + end +end + +minetest.register_privilege("frisk", "Player can check other players\' inventory.") + +minetest.register_tool('frisk:screen', { + description = i18n('Screening Device'), + inventory_image = 'frisk_screen.png', + range = 1, + on_use = startfrisk, +}) + +minetest.register_craft({ + output = 'frisk:screen', + recipe = { + {'', 'default:steel_ingot', ''}, + {'default:steel_ingot', 'default:glass', 'default:steel_ingot'}, + {'', 'default:steel_ingot',''}, + } +}) + +minetest.log('action', 'MOD: Frisk version ' .. frisk_version .. ' loaded.') diff --git a/mods/frisk/locale/ro.txt b/mods/frisk/locale/ro.txt new file mode 100644 index 0000000..2576fe1 --- /dev/null +++ b/mods/frisk/locale/ro.txt @@ -0,0 +1,3 @@ +@1\'s inventory = Inventarul lui @1 +Screening Device = Dispozitivul de scanare +You do not have the 'frisk' privilege = Nu ai arivilegiul 'frisk' diff --git a/mods/frisk/locale/ru.txt b/mods/frisk/locale/ru.txt new file mode 100644 index 0000000..9216fac --- /dev/null +++ b/mods/frisk/locale/ru.txt @@ -0,0 +1,3 @@ +@1\'s inventory = инвентарь игрока @1 +Screening Device = Устройство для сканирования +You do not have the 'frisk' privilege = У тебя нет привилегии 'frisk' diff --git a/mods/frisk/locale/template.txt b/mods/frisk/locale/template.txt new file mode 100644 index 0000000..146781d --- /dev/null +++ b/mods/frisk/locale/template.txt @@ -0,0 +1,3 @@ +@1\'s inventory = +Screening Device = +You do not have the 'frisk' privilege = diff --git a/mods/frisk/readme.txt b/mods/frisk/readme.txt new file mode 100644 index 0000000..b424e40 --- /dev/null +++ b/mods/frisk/readme.txt @@ -0,0 +1,25 @@ +FRISK MOD V0.0.2 +------------- + +This mod adds a screening device to view other players' inventory. + +Screening device +---------------- +Sometimes it is necessary to check another player's inventory (e.g. checking for weapons in demilitarized areas, searching for stolen items, verifying consumer solvency etc.). A player with an 'frisk' privilege can use the screening device to see the content of another player's inventory. Stop and frisk them. + + ingot +ingot glass ingot + ingot + +AUTHORS +------- +See file AUTHORS + +CHNAGES +------- +See file CHANGES + +LICENSE +------- +- code is GPLv3+ +- media files are CC-BY-SA 4.0+ diff --git a/mods/frisk/screenshot.png b/mods/frisk/screenshot.png new file mode 100644 index 0000000..32c4b9b Binary files /dev/null and b/mods/frisk/screenshot.png differ diff --git a/mods/frisk/textures/frisk_screen.png b/mods/frisk/textures/frisk_screen.png new file mode 100644 index 0000000..7f957e4 Binary files /dev/null and b/mods/frisk/textures/frisk_screen.png differ diff --git a/mods/frisk/textures/screen.svg b/mods/frisk/textures/screen.svg new file mode 100644 index 0000000..999a529 --- /dev/null +++ b/mods/frisk/textures/screen.svg @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/mods/give_initial_stuff/README.txt b/mods/give_initial_stuff/README.txt new file mode 100644 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 100644 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 100644 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 100644 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/guide/README.md b/mods/guide/README.md new file mode 100644 index 0000000..65efb48 --- /dev/null +++ b/mods/guide/README.md @@ -0,0 +1,14 @@ +Minetest News +==== + +News that pops up in a formspec when a player joins the server + +Create a text file called news.txt in the world folder. + +This text file can be updated any time and will always be current in game without a server reboot + +To add extra articles just create a text file for each article in the world folder in the format + +news_[article name].txt + +(i.e. news_crafting.txt would show an article for the command /news crafting) diff --git a/mods/guide/init.lua b/mods/guide/init.lua new file mode 100644 index 0000000..465e937 --- /dev/null +++ b/mods/guide/init.lua @@ -0,0 +1,45 @@ + +local guide = {} + +guide.path = minetest.get_worldpath() + +function guide.formspec(player,article) + + if ( article == "" or article == nil ) then + article = "guide.txt" + else + article = "guide_"..article..".txt" + end + + local guidefile = io.open(guide.path.."/"..article,"r") + + local formspec = "size[12,10]" + + if guidefile ~= nil then + local guidecontent = guidefile:read("*a") + formspec = formspec.."textarea[.25,.25;12,10;guide;;"..guidecontent.."]" + else + formspec = formspec.."label[.25,.25;Article does not exist]" + end + formspec = formspec.."button_exit[.25,9;2,1;exit;Close" + if ( guidefile ~= nil ) then + guidefile:close() + end + return formspec +end + +function guide.show_formspec(player) + local name = player:get_player_name() + minetest.show_formspec(name,"guide",guide.formspec(player)) + minetest.log('action','Showing formspec to '..name) +end + + +minetest.register_chatcommand("guide",{ + params = "
", + description="Shows the server guide", + func = function (name,params) + local player = minetest.get_player_by_name(name) + minetest.show_formspec(name,"guide",guide.formspec(player,params)) + end, +}) \ No newline at end of file diff --git a/mods/hbhunger/README.md b/mods/hbhunger/README.md new file mode 100644 index 0000000..fa245da --- /dev/null +++ b/mods/hbhunger/README.md @@ -0,0 +1,97 @@ +# Hunger with HUD bar [`hbhunger`] + +* Version: 0.5.2 + +## 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/hbhunger/changelog.txt b/mods/hbhunger/changelog.txt new file mode 100644 index 0000000..a56dbcb --- /dev/null +++ b/mods/hbhunger/changelog.txt @@ -0,0 +1,51 @@ +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/hbhunger/depends.txt b/mods/hbhunger/depends.txt new file mode 100644 index 0000000..24c8887 --- /dev/null +++ b/mods/hbhunger/depends.txt @@ -0,0 +1,33 @@ +hudbars +intllib? +default? +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? +mushroom? +seaplants? +pizza? +nssm? +thirsty? \ No newline at end of file diff --git a/mods/hbhunger/description.txt b/mods/hbhunger/description.txt new file mode 100644 index 0000000..77e6159 --- /dev/null +++ b/mods/hbhunger/description.txt @@ -0,0 +1 @@ +Adds a simple hunger meachanic with satiation, food poisoning and different healing. diff --git a/mods/hbhunger/hunger.lua b/mods/hbhunger/hunger.lua new file mode 100644 index 0000000..79070f7 --- /dev/null +++ b/mods/hbhunger/hunger.lua @@ -0,0 +1,470 @@ +-- 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, object=user}) + + -- 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 + + --sound:eat + itemstack:add_item(replace_with_item) + end + return itemstack + end +end + +if minetest.get_modpath("default") ~= nil then + hbhunger.register_food("default:apple", 2) +end +if minetest.get_modpath("flowers") ~= nil then + hbhunger.register_food("flowers:mushroom_brown", 1) + hbhunger.register_food("flowers: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("mushroom") ~= nil then + hbhunger.register_food("mushroom:brown", 1) + hbhunger.register_food("mushroom:red", 1, "", 3) + -- mushroom potions: red = strong poison, brown = light restorative + if minetest.get_modpath("vessels") then + hbhunger.register_food("mushroom:brown_essence", 1, "vessels:glass_bottle", nil, 4) + hbhunger.register_food("mushroom:poison", 1, "vessels:glass_bottle", 10) + 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/hbhunger/init.lua b/mods/hbhunger/init.lua new file mode 100644 index 0000000..4cdee76 --- /dev/null +++ b/mods/hbhunger/init.lua @@ -0,0 +1,162 @@ +local S +if (minetest.get_modpath("intllib")) then + S = intllib.Getter() +else + S = function ( s ) return s end +end + +if minetest.setting_getbool("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 > 15 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() + local thirst = {} + + if minetest.get_modpath("thirsty") then + thirst = tonumber(thirsty.get_hydro(player)) + else + thirst = 20 + end + if timer > 15 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 and thirst > 10 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 > 15 then timer = 0 end + if timer2 > hbhunger.HUNGER_TICK then timer2 = 0 end +end) + +end diff --git a/mods/hbhunger/locale/de.txt b/mods/hbhunger/locale/de.txt new file mode 100644 index 0000000..3a06d93 --- /dev/null +++ b/mods/hbhunger/locale/de.txt @@ -0,0 +1 @@ +Satiation = Sättigung diff --git a/mods/hbhunger/locale/pt.txt b/mods/hbhunger/locale/pt.txt new file mode 100644 index 0000000..44fe452 --- /dev/null +++ b/mods/hbhunger/locale/pt.txt @@ -0,0 +1 @@ +Satiation = Saciedade diff --git a/mods/hbhunger/locale/template.txt b/mods/hbhunger/locale/template.txt new file mode 100644 index 0000000..37a578d --- /dev/null +++ b/mods/hbhunger/locale/template.txt @@ -0,0 +1 @@ +Satiation diff --git a/mods/hbhunger/mod.conf b/mods/hbhunger/mod.conf new file mode 100644 index 0000000..dc67cd6 --- /dev/null +++ b/mods/hbhunger/mod.conf @@ -0,0 +1 @@ +name = hbhunger diff --git a/mods/hbhunger/screenshot.png b/mods/hbhunger/screenshot.png new file mode 100644 index 0000000..5af6583 Binary files /dev/null and b/mods/hbhunger/screenshot.png differ diff --git a/mods/hbhunger/sounds/hbhunger_eat_generic.ogg b/mods/hbhunger/sounds/hbhunger_eat_generic.ogg new file mode 100644 index 0000000..7e052b7 Binary files /dev/null and b/mods/hbhunger/sounds/hbhunger_eat_generic.ogg differ diff --git a/mods/hbhunger/textures/hbhunger_bar.png b/mods/hbhunger/textures/hbhunger_bar.png new file mode 100644 index 0000000..c94bf52 Binary files /dev/null and b/mods/hbhunger/textures/hbhunger_bar.png differ diff --git a/mods/hbhunger/textures/hbhunger_bar_health_poison.png b/mods/hbhunger/textures/hbhunger_bar_health_poison.png new file mode 100644 index 0000000..255a287 Binary files /dev/null and b/mods/hbhunger/textures/hbhunger_bar_health_poison.png differ diff --git a/mods/hbhunger/textures/hbhunger_bgicon.png b/mods/hbhunger/textures/hbhunger_bgicon.png new file mode 100644 index 0000000..07e21e7 Binary files /dev/null and b/mods/hbhunger/textures/hbhunger_bgicon.png differ diff --git a/mods/hbhunger/textures/hbhunger_icon.png b/mods/hbhunger/textures/hbhunger_icon.png new file mode 100644 index 0000000..a5cc2a1 Binary files /dev/null and b/mods/hbhunger/textures/hbhunger_icon.png differ diff --git a/mods/hbhunger/textures/hbhunger_icon_health_poison.png b/mods/hbhunger/textures/hbhunger_icon_health_poison.png new file mode 100644 index 0000000..8ce2db8 Binary files /dev/null and b/mods/hbhunger/textures/hbhunger_icon_health_poison.png differ diff --git a/mods/hide_minimap/Readme.md b/mods/hide_minimap/Readme.md new file mode 100644 index 0000000..8307afe --- /dev/null +++ b/mods/hide_minimap/Readme.md @@ -0,0 +1,9 @@ +##hide_minimap: a Minetest mod. + +This mod allows server admins to hide the minimap to normal players, and allow certain players to use it with the minimap priv. + +Its main purpose is for extreme survival servers, please do not use it unless you really need to, as the minimap is an awesome feature! (If this mod becomes used on too many servers, I may have to add a check for my name into the code, which allows me to always use it...!) However, on extreme survival servers, where the chief purpose is survival, it serves a point. + +*Depends:* None! + +*License:* MIT diff --git a/mods/hide_minimap/bower.json b/mods/hide_minimap/bower.json new file mode 100644 index 0000000..d6a3df1 --- /dev/null +++ b/mods/hide_minimap/bower.json @@ -0,0 +1,16 @@ +{ + "name": "hide_minimap", + "description": "A mod which makes the minimap require a priv to use.", + "keywords": [ + "minimap", "map" + ], + "homepage": "http://example.com/", + "forum": "https://forum.minetest.net/viewtopic.php?f=9&t=13038", + "screenshots": [], + "authors": [ + "Amaz" + ], + "license": "MIT", + "dependencies": { }, + "ignore": [ ] +} diff --git a/mods/hide_minimap/init.lua b/mods/hide_minimap/init.lua new file mode 100644 index 0000000..9edd1a2 --- /dev/null +++ b/mods/hide_minimap/init.lua @@ -0,0 +1,20 @@ +minetest.register_privilege("minimap", { + description = "Allows players to use the minimap", + give_to_singleplayer = false, +}) + +local time = 0 +minetest.register_globalstep(function(dtime) + time = time + dtime + if time > 20 then + for _,player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local privs = minetest.get_player_privs(name) + if not privs.minimap then + player:hud_set_flags({minimap = false}) + elseif privs.minimap == true then + player:hud_set_flags({minimap = true}) + end + end + end +end) diff --git a/mods/hide_minimap/license.txt b/mods/hide_minimap/license.txt new file mode 100644 index 0000000..5915f63 --- /dev/null +++ b/mods/hide_minimap/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Amaz + +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/hudbars/API.md b/mods/hudbars/API.md new file mode 100644 index 0000000..312be99 --- /dev/null +++ b/mods/hudbars/API.md @@ -0,0 +1,193 @@ +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 an active HUD bar. + +### `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. diff --git a/mods/hudbars/README.md b/mods/hudbars/README.md new file mode 100644 index 0000000..9a5500c --- /dev/null +++ b/mods/hudbars/README.md @@ -0,0 +1,56 @@ +# 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.7.1. + +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 + +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/hudbars/changelog.txt b/mods/hudbars/changelog.txt new file mode 100644 index 0000000..e2e6b56 --- /dev/null +++ b/mods/hudbars/changelog.txt @@ -0,0 +1,92 @@ +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/hudbars/depends.txt b/mods/hudbars/depends.txt new file mode 100644 index 0000000..77e8d97 --- /dev/null +++ b/mods/hudbars/depends.txt @@ -0,0 +1 @@ +intllib? diff --git a/mods/hudbars/description.txt b/mods/hudbars/description.txt new file mode 100644 index 0000000..9e10e89 --- /dev/null +++ b/mods/hudbars/description.txt @@ -0,0 +1 @@ +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/hudbars/init.lua b/mods/hudbars/init.lua new file mode 100644 index 0000000..89d8b1c --- /dev/null +++ b/mods/hudbars/init.lua @@ -0,0 +1,561 @@ +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.setting_get(sname) + elseif stype == "bool" then + sval = minetest.setting_getbool(sname) + elseif stype == "number" then + sval = tonumber(minetest.setting_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 + +-- (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.setting_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 + +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 = nil + 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 + +--register built-in HUD bars +if minetest.setting_getbool("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.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then + local hide + if minetest.setting_getbool("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.setting_getbool("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.setting_getbool("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/hudbars/locale/de.txt b/mods/hudbars/locale/de.txt new file mode 100644 index 0000000..578764e --- /dev/null +++ b/mods/hudbars/locale/de.txt @@ -0,0 +1,3 @@ +Health = Leben +Breath = Atem +%s: %d/%d = %s: %d/%d diff --git a/mods/hudbars/locale/pt.txt b/mods/hudbars/locale/pt.txt new file mode 100644 index 0000000..2de6265 --- /dev/null +++ b/mods/hudbars/locale/pt.txt @@ -0,0 +1,5 @@ +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/hudbars/locale/template.txt b/mods/hudbars/locale/template.txt new file mode 100644 index 0000000..0a26b8f --- /dev/null +++ b/mods/hudbars/locale/template.txt @@ -0,0 +1,5 @@ +Health +Breath + +# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” +%s: %d/%d diff --git a/mods/hudbars/mod.conf b/mods/hudbars/mod.conf new file mode 100644 index 0000000..add28e6 --- /dev/null +++ b/mods/hudbars/mod.conf @@ -0,0 +1 @@ +name = hudbars diff --git a/mods/hudbars/screenshot.png b/mods/hudbars/screenshot.png new file mode 100644 index 0000000..88ee323 Binary files /dev/null and b/mods/hudbars/screenshot.png differ diff --git a/mods/hudbars/settingtypes.txt b/mods/hudbars/settingtypes.txt new file mode 100644 index 0000000..3e4390e --- /dev/null +++ b/mods/hudbars/settingtypes.txt @@ -0,0 +1,119 @@ +[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/hudbars/textures/hudbars_bar_background.png b/mods/hudbars/textures/hudbars_bar_background.png new file mode 100644 index 0000000..cbc6c3f Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_background.png differ diff --git a/mods/hudbars/textures/hudbars_bar_breath.png b/mods/hudbars/textures/hudbars_bar_breath.png new file mode 100644 index 0000000..7d19a57 Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_breath.png differ diff --git a/mods/hudbars/textures/hudbars_bar_health.png b/mods/hudbars/textures/hudbars_bar_health.png new file mode 100644 index 0000000..6530916 Binary files /dev/null and b/mods/hudbars/textures/hudbars_bar_health.png differ diff --git a/mods/hudbars/textures/hudbars_bgicon_breath.png b/mods/hudbars/textures/hudbars_bgicon_breath.png new file mode 100644 index 0000000..176629a Binary files /dev/null and b/mods/hudbars/textures/hudbars_bgicon_breath.png differ diff --git a/mods/hudbars/textures/hudbars_bgicon_health.png b/mods/hudbars/textures/hudbars_bgicon_health.png new file mode 100644 index 0000000..e2be276 Binary files /dev/null and b/mods/hudbars/textures/hudbars_bgicon_health.png differ diff --git a/mods/hudbars/textures/hudbars_icon_breath.png b/mods/hudbars/textures/hudbars_icon_breath.png new file mode 100644 index 0000000..d1a5bcc Binary files /dev/null and b/mods/hudbars/textures/hudbars_icon_breath.png differ diff --git a/mods/hudbars/textures/hudbars_icon_health.png b/mods/hudbars/textures/hudbars_icon_health.png new file mode 100644 index 0000000..941e973 Binary files /dev/null and b/mods/hudbars/textures/hudbars_icon_health.png differ diff --git a/mods/inbox/README.md b/mods/inbox/README.md new file mode 100644 index 0000000..7bcb82d --- /dev/null +++ b/mods/inbox/README.md @@ -0,0 +1,21 @@ +# Inbox for Minetest + +[![home](https://img.shields.io/badge/inbox-home-blue.svg?style=flat-square)](https://github.com/bas080/inbox/) +[![download](https://img.shields.io/github/tag/bas080/inbox.svg?style=flat-square&label=release)](https://github.com/bas080/inbox/archive/master.zip) +[![git](https://img.shields.io/badge/git-project-green.svg?style=flat-square)](https://github.com/bas080/inbox) +[![forum](https://img.shields.io/badge/minetest-mod-green.svg?style=flat-square)](http://forum.minetest.net/viewtopic.php?f=11&t=7040) +[![bower](https://img.shields.io/badge/bower-mod-green.svg?style=flat-square)](https://minetest-bower.herokuapp.com/mods/inbox) + + +## Description + +Safely share nodes and items with your neighbours + + +## Project Resources + +* [Home](https://github.com/bas080/inbox/) +* [Download](https://github.com/bas080/inbox/archive/master.zip) +* [Project](https://github.com/bas080/inbox) +* [Forum](http://forum.minetest.net/viewtopic.php?f=11&t=7040) +* [Bower](https://minetest-bower.herokuapp.com/mods/inbox) diff --git a/mods/inbox/bower.json b/mods/inbox/bower.json new file mode 100644 index 0000000..6e2f440 --- /dev/null +++ b/mods/inbox/bower.json @@ -0,0 +1,17 @@ +{ + "name": "inbox", + "description": "Safely share nodes and items with your neighbours", + "keywords": [ + "inbox", + "chest", + "mail" + ], + "homepage": "https://github.com/bas080/inbox/", + "screenshots": [ + "https://dl.dropboxusercontent.com/u/419967/Screenshots/screenshot_3163443807.png" + ], + "authors": [ + "Bas080" + ], + "license": "WTFPL" +} diff --git a/mods/inbox/depends.txt b/mods/inbox/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/inbox/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/inbox/init.lua b/mods/inbox/init.lua new file mode 100644 index 0000000..ac103ca --- /dev/null +++ b/mods/inbox/init.lua @@ -0,0 +1,228 @@ +minetest.register_alias("protector:mailbox", "inbox:empty") + +local inbox = {} + +-- Boilerplate to support localized strings if intllib mod is installed. +local S +if intllib then + S = intllib.Getter() +else + S = function(s) return s end +end + +--[[ +TODO +* Different node_box and texture for empty mailbox +]] + +minetest.register_craft({ + output ="inbox:empty 4", + recipe = { + {"","default:steel_ingot",""}, + {"default:steel_ingot","","default:steel_ingot"}, + {"default:steel_ingot","default:steel_ingot","default:steel_ingot"} + } +}) + +minetest.register_node("inbox:empty", { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-4/12, -6/12, -6/12, 4/12, 0/12, 6/12}, + {-3/12, 0/12, -6/12, 3/12, 2/12, 6/12}, + {3/12, -1/12, -4/12, 4.5/12, 1/12, 3/12}, + {3/12, -2/12, 1/12, 4.5/12, 1/12, 3/12} + } + }, + description = S("Mailbox"), + tiles = {"inbox_top_empty.png", "inbox_bottom_empty.png", "inbox_east_empty.png", + "inbox_west_empty.png", "inbox_back_empty.png", "inbox_front_empty.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2}, + sounds = default.node_sound_wood_defaults(), + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + local owner = placer:get_player_name() + meta:set_string("owner", owner) + meta:set_string("infotext", S("%s's Mailbox"):format(owner)) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + inv:set_size("drop", 1) + end, + on_rightclick = function(pos, node, clicker, itemstack) + local meta = minetest.get_meta(pos) + local player = clicker:get_player_name() + local owner = meta:get_string("owner") + if owner == player or owner == "" then + minetest.show_formspec( + player, + "default:chest_locked", + inbox.get_inbox_formspec(pos)) + else + minetest.show_formspec( + player, + "default:chest_locked", + inbox.get_inbox_insert_formspec(pos)) + end + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + return (player:get_player_name() == owner or owner == "") and inv:is_empty("main") + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "drop" and inv:room_for_item("main", stack) then + inv:remove_item("drop", stack) + inv:add_item("main", stack) + local node = minetest.get_node(pos) + minetest.swap_node(pos, + { name="inbox:full", + param2 = node.param2 }) + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == "main" then + return 0 + end + if listname == "drop" then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:room_for_item("main", stack) then + return -1 + else + return 0 + end + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if player:get_player_name() ~= owner and owner ~= "" then + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos) + return 0 + end, +}) + +minetest.register_node("inbox:full", { + paramtype = "light", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-4/12, -6/12, -6/12, 4/12, 0/12, 6/12}, + {-3/12, 0/12, -6/12, 3/12, 2/12, 6/12}, + {3/12, 0/12, -4/12, 4/12, 5/12, -2/12}, + {3/12, 3/12, -2/12, 4/12, 5/12, 0/12} + } + }, + description = S("Mailbox"), + tiles = {"inbox_top_full.png", "inbox_bottom_full.png", "inbox_east_full.png", + "inbox_west_full.png", "inbox_back_full.png", "inbox_front_full.png"}, + paramtype2 = "facedir", + groups = {choppy=2,oddly_breakable_by_hand=2, not_in_creative_inventory = 1}, + sounds = default.node_sound_wood_defaults(), + drop = {"inbox:empty"}, + after_place_node = function(pos, placer, itemstack) + local meta = minetest.get_meta(pos) + local owner = placer:get_player_name() + meta:set_string("owner", owner) + meta:set_string("infotext", S("%s's Mailbox"):format(owner)) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + inv:set_size("drop", 1) + end, + on_rightclick = function(pos, node, clicker, itemstack) + local meta = minetest.get_meta(pos) + local player = clicker:get_player_name() + local owner = meta:get_string("owner") + if owner == player or owner == "" then + minetest.show_formspec( + player, + "default:chest_locked", + inbox.get_inbox_formspec(pos)) + else + minetest.show_formspec( + player, + "default:chest_locked", + inbox.get_inbox_insert_formspec(pos)) + end + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + local inv = meta:get_inventory() + return (player:get_player_name() == owner or owner == "") and inv:is_empty("main") + end, + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if listname == "drop" and inv:room_for_item("main", stack) then + inv:remove_item("drop", stack) + inv:add_item("main", stack) + end + end, + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:is_empty("main") then + local node = minetest.get_node(pos) + minetest.swap_node(pos, + { name="inbox:empty", + param2 = node.param2 }) + end + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == "main" then + return 0 + end + if listname == "drop" then + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + if inv:room_for_item("main", stack) then + return -1 + else + return 0 + end + end + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local owner = meta:get_string("owner") + if player:get_player_name() ~= owner and owner ~= "" then + return 0 + end + return stack:get_count() + end, + allow_metadata_inventory_move = function(pos) + return 0 + end, +}) + +function inbox.get_inbox_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + "list[nodemeta:".. spos .. ";main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]" + return formspec +end + +function inbox.get_inbox_insert_formspec(pos) + local spos = pos.x .. "," .. pos.y .. "," ..pos.z + local formspec = + "size[8,9]".. + "list[nodemeta:".. spos .. ";drop;3.5,2;1,1;]".. + "list[current_player;main;0,5;8,4;]" + return formspec +end + +print(S("[Mod]Inbox Loaded!")) diff --git a/mods/inbox/locale/de.txt b/mods/inbox/locale/de.txt new file mode 100644 index 0000000..b4225b5 --- /dev/null +++ b/mods/inbox/locale/de.txt @@ -0,0 +1,5 @@ +# Translation by Xanthin + +Mailbox = Briefkasten +%s's Mailbox = %s's Briefkasten +[Mod]Inbox Loaded! = [Mod]Inbox Geladen! diff --git a/mods/inbox/locale/template.txt b/mods/inbox/locale/template.txt new file mode 100644 index 0000000..b510ab4 --- /dev/null +++ b/mods/inbox/locale/template.txt @@ -0,0 +1,5 @@ +# Template + +Mailbox = +%s's Mailbox = +[Mod]Inbox Loaded! = diff --git a/mods/inbox/mod.conf b/mods/inbox/mod.conf new file mode 100644 index 0000000..0537434 --- /dev/null +++ b/mods/inbox/mod.conf @@ -0,0 +1 @@ +name = inbox diff --git a/mods/inbox/textures/inbox_back_empty.png b/mods/inbox/textures/inbox_back_empty.png new file mode 100644 index 0000000..48e2eff Binary files /dev/null and b/mods/inbox/textures/inbox_back_empty.png differ diff --git a/mods/inbox/textures/inbox_back_full.png b/mods/inbox/textures/inbox_back_full.png new file mode 100644 index 0000000..346aa92 Binary files /dev/null and b/mods/inbox/textures/inbox_back_full.png differ diff --git a/mods/inbox/textures/inbox_bottom_empty.png b/mods/inbox/textures/inbox_bottom_empty.png new file mode 100644 index 0000000..b765802 Binary files /dev/null and b/mods/inbox/textures/inbox_bottom_empty.png differ diff --git a/mods/inbox/textures/inbox_bottom_full.png b/mods/inbox/textures/inbox_bottom_full.png new file mode 100644 index 0000000..027b832 Binary files /dev/null and b/mods/inbox/textures/inbox_bottom_full.png differ diff --git a/mods/inbox/textures/inbox_east_empty.png b/mods/inbox/textures/inbox_east_empty.png new file mode 100644 index 0000000..dbff261 Binary files /dev/null and b/mods/inbox/textures/inbox_east_empty.png differ diff --git a/mods/inbox/textures/inbox_east_full.png b/mods/inbox/textures/inbox_east_full.png new file mode 100644 index 0000000..176a193 Binary files /dev/null and b/mods/inbox/textures/inbox_east_full.png differ diff --git a/mods/inbox/textures/inbox_front_empty.png b/mods/inbox/textures/inbox_front_empty.png new file mode 100644 index 0000000..8a7a907 Binary files /dev/null and b/mods/inbox/textures/inbox_front_empty.png differ diff --git a/mods/inbox/textures/inbox_front_full.png b/mods/inbox/textures/inbox_front_full.png new file mode 100644 index 0000000..bd8a963 Binary files /dev/null and b/mods/inbox/textures/inbox_front_full.png differ diff --git a/mods/inbox/textures/inbox_side_and_back_empty.png b/mods/inbox/textures/inbox_side_and_back_empty.png new file mode 100644 index 0000000..343732b Binary files /dev/null and b/mods/inbox/textures/inbox_side_and_back_empty.png differ diff --git a/mods/inbox/textures/inbox_side_and_back_full.png b/mods/inbox/textures/inbox_side_and_back_full.png new file mode 100644 index 0000000..343732b Binary files /dev/null and b/mods/inbox/textures/inbox_side_and_back_full.png differ diff --git a/mods/inbox/textures/inbox_top_empty.png b/mods/inbox/textures/inbox_top_empty.png new file mode 100644 index 0000000..f1293a1 Binary files /dev/null and b/mods/inbox/textures/inbox_top_empty.png differ diff --git a/mods/inbox/textures/inbox_top_full.png b/mods/inbox/textures/inbox_top_full.png new file mode 100644 index 0000000..fcda957 Binary files /dev/null and b/mods/inbox/textures/inbox_top_full.png differ diff --git a/mods/inbox/textures/inbox_west_empty.png b/mods/inbox/textures/inbox_west_empty.png new file mode 100644 index 0000000..aa685ae Binary files /dev/null and b/mods/inbox/textures/inbox_west_empty.png differ diff --git a/mods/inbox/textures/inbox_west_full.png b/mods/inbox/textures/inbox_west_full.png new file mode 100644 index 0000000..0d4dbfb Binary files /dev/null and b/mods/inbox/textures/inbox_west_full.png differ diff --git a/mods/interact/Readme.md b/mods/interact/Readme.md new file mode 100644 index 0000000..73c3c20 --- /dev/null +++ b/mods/interact/Readme.md @@ -0,0 +1,16 @@ +##Interact: A mod for Minetest. + +This mod is designed to automatically grant new players on a server interact. A formspec will be show when the player joins, and there is a command to bring the formspec up later in the game. +There are 3 screens that they go through. The first one is a check if they like griefing (One for really stupid griefers!), the next checks if the player just wants to look round the server, and the final one shows the rules, and asks the player to accept them. Finally, there is a screen which offers the player a quiz, which s/he has to complete successfully to get interact. + +Almost everything in the mod can be configured to how you want it. + +####Configuring the mod: +You will probably want to replace the default rules with your own in rules.lua. Also, the quiz should be adapted to your rules, thus the quiz questions are found in rules.lua also. + +Everything else that you need to configure the mod can be found in config.lua. If you want to, have a look over it before running the mod, to see if everything seems to be as you want it! + +####Notes: +1. This mod is based on the (old) [rules](https://github.com/CraigyDavi/Craig-Server_game/blob/df8beb15e6b02ab6dd22f94349453c51819238c4/mods/_misc/rules.lua) on [Craig's Server.](https://forum.minetest.net/viewtopic.php?f=10&t=7010) +2. That mod was, in turn based on this [mod.](https://github.com/ChaosWormz/mt_terms_of_use) +3. I may add randomly selected messages at some point. diff --git a/mods/interact/config.lua b/mods/interact/config.lua new file mode 100644 index 0000000..3d154c6 --- /dev/null +++ b/mods/interact/config.lua @@ -0,0 +1,42 @@ +interact = {} + +interact.configured = true --Change this to true when you've configured the mod! +interact.default_language = "english" + +--Which answer is needed for the quiz questions. interact.quiz1-4 takes true or false. +--True is left, false is right. +--Please, please spell true and false right!!! If you spell it wrong it won't work! +--interact.quiz can be 1, 2 or 3. +--1 is the top one by the question, 2 is the bottom left one, 3 is the bottom right one. +--Make sure these agree with your answers! + +interact.quiz1 = true +interact.quiz2 = true +interact.quiz3 = false +interact.quiz4 = true +interact.quiz_multi = 3 + +--Which screens to show. +interact.screen1 = true --The welcome a first question screen. +interact.screen2 = true --The visit or interact screen. +interact.screen4 = true --The quiz screen. + +--Ban or kick griefers? Default is kick, set to true for ban. +interact.grief_ban = false + +--Kick, ban or ignore players who disagree with the rules. +--Options are "kick" "ban" "nothing" +interact.disagree_action = "nothing" + +--The fouth screen-- +--Should there be a back to rules button? +interact.s4_to_rules_button = true + + +--What to do on a wrong quiz. +--Options are "kick" "ban" "reshow" "rules" and "nothing" +interact.on_wrong_quiz = "reshow" + + +--The priv required to use the /rules command. If fast is a default priv, I recomend replacing shout with that. +interact.priv = {shout = true} diff --git a/mods/interact/depends.txt b/mods/interact/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/interact/description.txt b/mods/interact/description.txt new file mode 100644 index 0000000..f0ec0d1 --- /dev/null +++ b/mods/interact/description.txt @@ -0,0 +1,3 @@ +A mod that gives the interact priv to players who want it. +It displays the rules, and then provides a simple quiz on them. +If the player completes the quiz sucsesfully, then s/he is given interact. diff --git a/mods/interact/init.lua b/mods/interact/init.lua new file mode 100644 index 0000000..60a348f --- /dev/null +++ b/mods/interact/init.lua @@ -0,0 +1,280 @@ +rule_table = {} +rule_language = {} +dofile(minetest.get_modpath("interact") .. "/rules-english.lua") --I put the rules in their own file so that they don't get lost/overlooked! +dofile(minetest.get_modpath("interact") .. "/rules-russian.lua") +dofile(minetest.get_modpath("interact") .. "/rules-deutsch.lua") +dofile(minetest.get_modpath("interact") .. "/config.lua") + +local rule1 = 0 +local rule2 = 0 +local rule3 = 0 +local rule4 = 0 +local multi = 0 + +local all_languages = interact.default_language +for k in pairs(rule_table) do + if k ~= interact.default_language then + all_languages = all_languages..", "..k + if rule_table[k].secondaryname then + all_languages = all_languages.." ("..rule_table[k].secondaryname..")" + end + end +end + +local function make_formspec(player, language) + if not language then language = interact.default_language end + local name = player:get_player_name() + local size = { "size[10,4]" } + table.insert(size, "label[1,0.5;List of Languages (eg: /rules english)]") + table.insert(size, "label[1,1;"..all_languages.."]") + table.insert(size, "label[0.5,0;" ..rule_table[language].s1_header.. "]") + table.insert(size, "label[0.5,3.25;" ..rule_table[language].s1_l2.. "]") + table.insert(size, "label[0.5,3.75;" ..rule_table[language].s1_l3.. "]") + table.insert(size, "button_exit[5.5,3.4;2,0.5;no;" ..rule_table[language].s1_b1.. "]") + table.insert(size, "button[7.5,3.4;2,0.5;yes;" ..rule_table[language].s1_b2.. "]") + return table.concat(size) +end + +local function make_formspec2(player, language) + if not language then language = interact.default_language end + local name = player:get_player_name() + local size = { "size[10,4]" } + table.insert(size, "label[0.5,0.5;" ..rule_table[language].s2_l1.. "]") + table.insert(size, "label[0.5,1;" ..rule_table[language].s2_l2.. "]") + table.insert(size, "button_exit[2.5,3.4;3.5,0.5;interact;" ..rule_table[language].s2_b1.. "]") + table.insert(size, "button_exit[6.4,3.4;3.6,0.5;visit;" ..rule_table[language].s2_b2.. "]") + return table.concat(size) +end + +local function make_formspec3(player, language) + if not language then language = interact.default_language end + local size = { "size[10,8]" } + table.insert(size, "textarea[0.5,0.5;9.5,7.5;TOS;" ..rule_table[language].s3_header.. ";" ..rule_table[language].rules.. "]") + table.insert(size, "button[5.5,7.4;2,0.5;decline;" ..rule_table[language].s3_b2.. "]") + table.insert(size, "button_exit[7.5,7.4;2,0.5;accept;" ..rule_table[language].s3_b1.. "]") + return table.concat(size) +end + +local function make_formspec4(player, language) + if not language then language = interact.default_language end + local name = player:get_player_name() + local size = { "size[10,9]" } + if interact.s4_to_rules_button == true then + table.insert(size, "button_exit[7.75,0.25;2.1,0.1;rules;" ..rule_table[language].s4_to_rules.. "]") + end + table.insert(size, "label[0.25,0;" ..rule_table[language].s4_header.."]") + table.insert(size, "label[0.5,0.5;" ..rule_table[language].question1.."]") + table.insert(size, "checkbox[0.25,1;rule1_true;" ..rule_table[language].s4_question1_true.."]") + table.insert(size, "checkbox[4,1;rule1_false;" ..rule_table[language].s4_question1_false.. "]") + table.insert(size, "label[0.5,2;" ..rule_table[language].question2.. "]") + table.insert(size, "checkbox[0.25,2.5;rule2_true;" ..rule_table[language].s4_question2_true.. "]") + table.insert(size, "checkbox[4,2.5;rule2_false;" ..rule_table[language].s4_question2_false.. "]") + table.insert(size, "label[0.5,3.5;" ..rule_table[language].question3.. "]") + table.insert(size, "checkbox[0.25,4;rule3_true;" ..rule_table[language].s4_question3_true.. "]") + table.insert(size, "checkbox[4,4;rule3_false;" ..rule_table[language].s4_question3_false.. "]") + table.insert(size, "label[0.5,5;" ..rule_table[language].question4.. "]") + table.insert(size, "checkbox[0.25,5.5;rule4_true;" ..rule_table[language].s4_question4_true.. "]") + table.insert(size, "checkbox[4,5.5;rule4_false;" ..rule_table[language].s4_question4_false.."]") + table.insert(size, "label[0.5,6.5;" ..rule_table[language].multiquestion.. "]") + table.insert(size, "checkbox[4.75,6.25;multi_choice1;" ..rule_table[language].mq_answer1.. "]") + table.insert(size, "checkbox[0.25,7;multi_choice2;" ..rule_table[language].mq_answer2.. "]") + table.insert(size, "checkbox[4.75,7;multi_choice3;" ..rule_table[language].mq_answer3.."]") + table.insert(size, "button_exit[3,8.4;3.5,0.5;submit;" ..rule_table[language].s4_submit.."]") + return table.concat(size) +end + +local server_formspec = "size[10,4]" .. + "label[0.5,0.5;Hey, you! Yes, you, the admin! What do you think you're doing]" .. + "label[0.5,0.9;ignoring warnings in the terminal? You should watch it carefully!]" .. + "label[0.5,1.5;Before you do anything else, open rules.lua in the interact mod]" .. + "label[0.5,1.9;and put your rules there. Then, open config.lua, and look at the]" .. + "label[0.5,2.3;settings. Configure them so that they match up with your rules.]" .. + "label[0.5,2.7;Then, set interact.configured to true, and this message will go away]" .. + "label[0.5,3.1;once you've restarted the server.]" .. + "label[0.5,3.6;Thank you!]" + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "interact_welcome" then return end + local name = player:get_player_name() + local language = rule_language[name] or interact.default_language + if fields.no then + if interact.screen2 == false then + minetest.after(1, function() + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end) + else + minetest.after(1, function() + minetest.show_formspec(name, "interact_visit", make_formspec2(player, language)) + end) + end + return + elseif fields.yes then + if interact.grief_ban ~= true then + --minetest.kick_player(name, rule_table[language].msg_grief) + minetest.chat_send_player(name, rule_table[language].msg_grief) + else + minetest.ban_player(name) + end + return + end +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "interact_visit" then return end + local name = player:get_player_name() + local language = rule_language[name] or interact.default_language + if fields.interact then + minetest.after(1, function() + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end) + return + elseif fields.visit then + minetest.chat_send_player(name, rule_table[language].visit_msg) + minetest.log("action", name.. " is just visiting.") + return + end +end) + + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "interact_rules" then return end + local name = player:get_player_name() + local language = rule_language[name] or interact.default_language + if fields.accept then + if interact.screen4 == false then + if minetest.check_player_privs(name, interact.priv) then + minetest.chat_send_player(name, rule_table[language].interact_msg1) + minetest.chat_send_player(name, rule_table[language].interact_msg2) + local privs = minetest.get_player_privs(name) + privs.interact = true + minetest.set_player_privs(name, privs) + minetest.log("action", "Granted " ..name.. " interact.") + end + else + minetest.after(1, function() + minetest.show_formspec(name, "interact_quiz", make_formspec4(player, language)) + end) + end + return + elseif fields.decline then + if interact.disagree_action == "kick" then + minetest.kick_player(name, rule_table[language].disagree_msg) + elseif interact.disagree_action == "ban" then + minetest.ban_player(name) + else + minetest.chat_send_player(name, rule_table[language].disagree_msg) + end + return + end +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "interact_quiz" then return end + local name = player:get_player_name() + local language = rule_language[name] or interact.default_language + if fields.rules then + minetest.after(1, function() + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end) + return + end + if fields.rule1_true then rule1 = true + elseif fields.rule1_false then rule1 = false + elseif fields.rule2_true then rule2 = true + elseif fields.rule2_false then rule2 = false + elseif fields.rule3_true then rule3 = true + elseif fields.rule3_false then rule3 = false + elseif fields.rule4_true then rule4 = true + elseif fields.rule4_false then rule4 = false + elseif fields.multi_choice1 then multi = 1 + elseif fields.multi_choice2 then multi = 2 + elseif fields.multi_choice3 then multi = 3 end + if fields.submit and rule1 == interact.quiz1 and rule2 == interact.quiz2 and + rule3 == interact.quiz3 and rule4 == interact.quiz4 and multi == interact.quiz_multi then + rule1 = 0 + rule2 = 0 + rule3 = 0 + rule4 = 0 + multi = 0 + if minetest.check_player_privs(name, interact.priv) then + minetest.chat_send_player(name, rule_table[language].interact_msg1) + minetest.chat_send_player(name, rule_table[language].interact_msg2) + local privs = minetest.get_player_privs(name) + privs.interact = true + minetest.set_player_privs(name, privs) + minetest.log("action", "Granted " ..name.. " interact.") + end + elseif fields.submit then + rule1 = 0 + rule2 = 0 + rule3 = 0 + rule4 = 0 + multi = 0 + if interact.on_wrong_quiz == "kick" then + minetest.kick_player(name, rule_table[language].wrong_quiz_kick_msg) + elseif interact.on_wrong_quiz == "ban" then + minetest.ban_player(name) + elseif interact.on_wrong_quiz == "reshow" then + minetest.chat_send_player(name, rule_table[language].quiz_try_again_msg) + minetest.after(1, function() + minetest.show_formspec(name, "interact_quiz", make_formspec4(player, language)) + end) + elseif interact.on_wrong_quiz == "rules" then + minetest.chat_send_player(name, rule_table[language].quiz_rules_msg) + minetest.after(1, function() + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end) + else + minetest.chat_send_player(name, rule_table[language].quiz_fail_msg) + end + end +end) + +minetest.register_chatcommand("rules",{ + params = "", + description = "Shows the server rules", + privs = interact.priv, + func = function (name,params) + local player = minetest.get_player_by_name(name) + local language = rule_language[name] or interact.default_language + if params ~= "" and rule_table[params:lower()] then + language = params:lower() + rule_language[name] = language + elseif params ~= "" then + minetest.chat_send_player(name, "There is no translation for '"..params:lower().."', Opening rules in '"..language.."'") + end + if interact.screen1 ~= false then + minetest.after(1, function() + minetest.show_formspec(name, "interact_welcome", make_formspec(player, language)) + end) + elseif interact.screen2 ~= false then + minetest.after(1, function() + minetest.show_formspec(name, "interact_visit", make_formspec2(player, language)) + end) + else + minetest.after(1, function() + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end) + end + end +}) + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + local language = rule_language[name] or interact.default_language + if not minetest.get_player_privs(name).interact then + if interact.screen1 ~= false then + minetest.show_formspec(name, "interact_welcome", make_formspec(player, language)) + elseif interact.screen2 ~= false then + minetest.show_formspec(name, "interact_visit", make_formspec2(player, language)) + else + minetest.show_formspec(name, "interact_rules", make_formspec3(player, language)) + end + elseif minetest.get_player_privs(name).server and interact.configured == false then + minetest.show_formspec(name, "interact_no_changes_made", server_formspec) + end +end) + +if not interact.configured then + minetest.log("warning", "Mod \"Interact\" has not been configured! Please open config.lua in its folder and configure it. See the readme of the mod for more details.") +end diff --git a/mods/interact/license.txt b/mods/interact/license.txt new file mode 100644 index 0000000..5915f63 --- /dev/null +++ b/mods/interact/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Amaz + +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/interact/mod.conf b/mods/interact/mod.conf new file mode 100644 index 0000000..9458ed8 --- /dev/null +++ b/mods/interact/mod.conf @@ -0,0 +1,7 @@ +name = interact +title = Interact +author = Amaz +description = A mod that gives the interact priv to players who want it and who have agreed to the rules. +license = MIT +forum = https://forum.minetest.net/viewtopic.php?f=11&t=11200 +version = 1.0 diff --git a/mods/interact/rules-deutsch.lua b/mods/interact/rules-deutsch.lua new file mode 100644 index 0000000..af9f1a1 --- /dev/null +++ b/mods/interact/rules-deutsch.lua @@ -0,0 +1,103 @@ +--The actual rules. +local language = "german" --must be all lowercase +local yes = "Ja." +local no = "Nein." +rule_table[language] = { +secondaryname = "deutsch", --secondary name, usually the language name in english, or in the actual language. + +rules = [[ +Regeln: + +1. Spielerkämpfe sind erlaubt. Loggen sie nicht immer ab und ein! +2. Sei nicht *übermäßig* grausam, destruktiv oder unangemessen. +3. Sie dürfen fluchen, aber machen sie das nicht öfter und spammen Sie nicht. +4. Kein "Dating" oder ähnliches. +5. Räume ganze Wälder nicht ohne Neupflanzung aus. +6. Wenn du ein Königreich überfallen lässt, während seine Mitglieder offline sind, darfst du nicht viel zerstören oder stehlen. +7. Bitte behalte deine Gebäude zu mittelalterlichen Zeiten und befolge die Gesetze der Physik. +8. Gehackte Clients oder csms, die einen pvp-Vorteil bieten, sind nicht erlaubt. (Es ist jedoch erlaubt, ohne WLAN durch Wände zu gehen.) + +Denken Sie daran: Eine gewisse Zerstörung während des Krieges ist O.K. "Sei einfach nicht *übermäßig* grausam" +]], + +--The questions on the rules, if the quiz is used. +--The checkboxes for the first 4 questions are in config.lua +question1 = "Dürfen sie Spielerkämpfe machen?", +question2 = "Solltest du nach dem Zerstörung des Bäumes, wieder neu bepflanzen?", +question3 = "Dürfen Sie Mädchen, die online sind, küssen, stattdessen Smoothes zu geben?", +question4 = "Darfst du ab und zu etwas von deinen Feinden zerstören?", +multiquestion = "Welchen Baustil müssen sie verwenden?", + +--The answers to the multiple choice questions. Only one of these should be true. +mq_answer1 = "Moderne, super große Wolkenkratzer.", +mq_answer2 = "Raumstationen, oben im Himmel.", +mq_answer3 = "Mittelalterlich, ohne fliegende Teile.", + +--The first screen-- +--The text at the top. +s1_header = "Hallo, willkommen bei Persistent Kingdoms!", +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s1_l2 = "Könnten Sie bitte sagen, wenn Sie gerne viele Dinge griefen?", +s1_l3 = "Griefing zerstört Orte und richtet in Allgemein Chaos ein.", +--The buttons. Each can have 15 characters, max. +s1_b1 = "Nein!", +s1_b2 = "Ja!", + +--The message to send kicked griefers. +msg_grief = "Eine Menge der *Grief* wird herabgeschraubt. Leichte Kriegszerstörungen lassen wir noch gelten.", + +--The second screen-- +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s2_l1 = "Möchtest du also interact haben oder möchtest du Dinge auf dem Server anschauen?", +s2_l2 = "", +--The buttons. These ones can have a maximum of 26 characters. +s2_b1 = "Ja, ich möchte interact haben!", +s2_b2 = "Ich möchte Dinge anschauen.", + +--The message the player is sent if s/he is just visiting. +visit_msg = "Viel Spaß beim Schauen! Wenn Sie interagieren möchten, schreib '/rules' im chat, um den Vorgang der Regeln wiederholen.", + +--The third screen-- +--The header for the rules box, this can have 60 characters, max. +s3_header = "Hier sind die Regeln:", + +--The buttons. Each can have 15 characters, max. +s3_b1 = "Ich stimme zu", +s3_b2 = "Ich stimme nicht zu", + +--The message to send players who disagree when they are kicked for disagring with the rules. +disagree_msg = "Dann tschüß! Sie müssen den Regeln zustimmen, um auf dem Server zu spielen.", + +--The back to rules button. 13 characters, max. +s4_to_rules = "Zurück zu den Regeln", + +--The header for screen 4. 60 characters max, although this is a bit of a squash. I recomend 55 as a max. +s4_header = "Zeit für ein Quiz über die Regeln!", + +--Since the questions are intrinsically connected with the rules, they are to be found in rules.lua +--The trues are limited to 24 characters. The falses can have 36 characters. + +s4_question1_true = yes, +s4_question1_false = no, +s4_question2_true = yes, +s4_question2_false = no, +s4_question3_true = yes, +s4_question3_false = no, +s4_question4_true = yes, +s4_question4_false = no, + +s4_submit = "Einreichen!", + +--The message to send the player if reshow is the on_wrong_quiz option. +quiz_try_again_msg = "Versuch es noch einmal.", +--The message sent to the player if rules is the on_wrong_quiz option. +quiz_rules_msg = "Schau dir die Regeln nochmal an:", +--The kick reason if kick is the on_wrong_quiz option. +wrong_quiz_kick_msg = "Achten Sie beim nächsten Mal mehr Aufmerksamkeit!", +--The message sent to the player if nothing is the on_wrong_quiz option. +quiz_fail_msg = "Sie haben eine Frage falsch beantwortet. Schreib '/rules' im Chat, um es erneut zu versuchen. (lies sie sorgfältig)", + +--The messages send to the player after interact is granted. +interact_msg1 = "Danke, dass du die Regeln akzeptiert hast, jetzt kannst du mit den Dingen interagieren.", +interact_msg2 = "Viel Glück! Schreib '/guide' im Chat, um loszulegen!", +} \ No newline at end of file diff --git a/mods/interact/rules-english.lua b/mods/interact/rules-english.lua new file mode 100644 index 0000000..673f67d --- /dev/null +++ b/mods/interact/rules-english.lua @@ -0,0 +1,103 @@ +--The actual rules. +local language = "english" --must be all lowercase +local yes = "Yes." +local no = "No." +rule_table[language] = { +secondaryname = nil, --secondary name, usually the language name in english, or in the actual language. + +rules = [[ +Rules: + +1. PVP is allowed. Don't Combat log! +2. Don't be *overly* cruel, destructive, or inappropriate. +3. Keep swearing to a minimum, and don't spam. +4. No "Dating" or the like. +5. Don't clear out entire forests without replanting. +6. If you raid a kingdom while it's members are offline, you may not destroy or steal much. +7. Please keep your builds medieval-ish times, and follow the laws of physics. +8. Hacked clients or csms that give a pvp advantage are disallowed. (However, lagging through walls is allowed.) + +Remember: A some destruction during war is O.K. just "Don't be *overly* cruel" +]], + +--The questions on the rules, if the quiz is used. +--The checkboxes for the first 4 questions are in config.lua +question1 = "Is PVP is allowed?", +question2 = "Should you replant after your tree genocide?", +question3 = "Can you give online girls big, online smooches?", +question4 = "Can you destroy a bit of your enemies's stuff every once in a while?", +multiquestion = "What building style to use?", + +--The answers to the multiple choice questions. Only one of these should be true. +mq_answer1 = "Modern, super tall Skyscrapers.", +mq_answer2 = "Space stations, up in the sky.", +mq_answer3 = "Medieval, with no flying parts.", + +--The first screen-- +--The text at the top. +s1_header = "Hello, welcome to Persistent Kingdoms!", +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s1_l2 = "Could you please tell me if you like to grief a lot?", +s1_l3 = "Griefing is destroying places and generally making a mess.", +--The buttons. Each can have 15 characters, max. +s1_b1 = "No, I don't.", +s1_b2 = "Yes, I do!", + +--The message to send kicked griefers. +msg_grief = "A *lot* of griefing is looked down upon, though some war destruction might be ok.", + +--The second screen-- +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s2_l1 = "So, do you want interact, or do you just want to look around the server?", +s2_l2 = "", +--The buttons. These ones can have a maximum of 26 characters. +s2_b1 = "Yes, I want interact!", +s2_b2 = "I just want to look round.", + +--The message the player is sent if s/he is just visiting. +visit_msg = "Have a nice time looking round! If you want interact just type /rules, and you can go through the process again!", + +--The third screen-- +--The header for the rules box, this can have 60 characters, max. +s3_header = "Here are the rules:", + +--The buttons. Each can have 15 characters, max. +s3_b1 = "I agree", +s3_b2 = "I disagree", + +--The message to send players who disagree when they are kicked for disagring with the rules. +disagree_msg = "Bye then! You have to agree to the rules to play on the server.", + +--The back to rules button. 13 characters, max. +s4_to_rules = "Back to rules", + +--The header for screen 4. 60 characters max, although this is a bit of a squash. I recomend 55 as a max. +s4_header = "Time for a quiz on the rules!", + +--Since the questions are intrinsically connected with the rules, they are to be found in rules.lua +--The trues are limited to 24 characters. The falses can have 36 characters. + +s4_question1_true = yes, +s4_question1_false = no, +s4_question2_true = yes, +s4_question2_false = no, +s4_question3_true = yes, +s4_question3_false = no, +s4_question4_true = yes, +s4_question4_false = no, + +s4_submit = "Submit!", + +--The message to send the player if reshow is the on_wrong_quiz option. +quiz_try_again_msg = "Have another go.", +--The message sent to the player if rules is the on_wrong_quiz option. +quiz_rules_msg = "Have another look at the rules:", +--The kick reason if kick is the on_wrong_quiz option. +wrong_quiz_kick_msg = "Pay more attention next time!", +--The message sent to the player if nothing is the on_wrong_quiz option. +quiz_fail_msg = "You answered a question incorrectly. type in '/rules' to try again. (read them carefully)", + +--The messages send to the player after interact is granted. +interact_msg1 = "Thanks for accepting the rules, you now are able to interact with things.", +interact_msg2 = "Happy Kingdoming! Do /guide for help getting started!", +} \ No newline at end of file diff --git a/mods/interact/rules-russian.lua b/mods/interact/rules-russian.lua new file mode 100644 index 0000000..533a6a2 --- /dev/null +++ b/mods/interact/rules-russian.lua @@ -0,0 +1,102 @@ +--The actual rules. +local language = "russian" --must be all lowercase +local yes = "да." +local no = "нет." +rule_table[language] = { +secondaryname = "русский", --secondary name, usually the language name in english, or in the actual language. +rules = [[ +Rules: + +1. PVP разрешен. +2. Не будьте чрезмерно жестокими, разрушительными или неуместными. +3. не ругайтесь слишком много, и не спам. +4. нет "знакомства". +5. Не уничтожайте целые леса без посадки снова. +6. Если вы совершаете набег на королевство, когда его члены находятся в автономном режиме, вы не можете много разрушать или украсть. +7. Пожалуйста, строите только средневековую эпоху и следуйте законам физики. +8. Взломанные клиенты или csms, которые дают преимущество pvp, запрещены. (Однако допускается «отставание» через стены.) + +Помните: некоторые разрушения во время войны разрешены. просто «Не будьте чрезмерно жестокими» +]], + +--The questions on the rules, if the quiz is used. +--The checkboxes for the first 4 questions are in config.lua +question1 = "Разрешено ли PVP?", +question2 = "если вы снова сажаете деревья после их резки?", +question3 = "Можете ли вы дать онлайн-девушкам большие, онлайн-поцелуи?", +question4 = "Можете ли вы уничтожить небольшую часть здания ваших врагов?", +multiquestion = "Какой стиль строительства вы должны использовать?", + +--The answers to the multiple choice questions. Only one of these should be true. +mq_answer1 = "Современные, высокие высокие небоскребы.", +mq_answer2 = "Космические станции, вверх по небу.", +mq_answer3 = "Средневековые, без летающих частей.", + +--The first screen-- +--The text at the top. +s1_header = "Привет, добро пожаловать в Persistent Kingdoms!", +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s1_l2 = "действительно хотите уничтожить или 'grief'?", +s1_l3 = "'Griefing' уничтожает пространство и создает беспорядок.", +--The buttons. Each can have 15 characters, max. +s1_b1 = "Нет, не знаю.", +s1_b2 = "Да!", + +--The message to send kicked griefers. +msg_grief = "Много griefing смотрится сверху вниз, хотя какое-то разрушение войны может быть в порядке.", + +--The second screen-- +--Lines one and two. Make sure each line is less than 70 characters, or they will run off the screen. +s2_l1 = "Итак, вы хотите взаимодействовать, или просто хотите посмотреть вокруг сервера?", +s2_l2 = "", +--The buttons. These ones can have a maximum of 26 characters. +s2_b1 = "Да, я хочу взаимодействовать!", +s2_b2 = "Я просто хочу, чтобы оглядеться.", + +--The message the player is sent if s/he is just visiting. +visit_msg = "Приятного просмотра! Если вы хотите взаимодействовать, просто введите '/rules russian', и вы сможете снова пройти процесс!", + +--The third screen-- +--The header for the rules box, this can have 60 characters, max. +s3_header = "Вот правила:", + +--The buttons. Each can have 15 characters, max. +s3_b1 = "согласен", +s3_b2 = "я не согласен", + +--The message to send players who disagree when they are kicked for disagring with the rules. +disagree_msg = "До свидания! Вы должны согласиться с правилами игры на сервере.", + +--The back to rules button. 13 characters, max. +s4_to_rules = "Вернуться к правилам", + +--The header for screen 4. 60 characters max, although this is a bit of a squash. I recomend 55 as a max. +s4_header = "Время для викторины по правилам!", + +--Since the questions are intrinsically connected with the rules, they are to be found in rules.lua +--The trues are limited to 24 characters. The falses can have 36 characters. + +s4_question1_true = yes, +s4_question1_false = no, +s4_question2_true = yes, +s4_question2_false = no, +s4_question3_true = yes, +s4_question3_false = no, +s4_question4_true = yes, +s4_question4_false = no, + +s4_submit = "регистрировать!", + +--The message to send the player if reshow is the on_wrong_quiz option. +quiz_try_again_msg = "попробуй еще раз.", +--The message sent to the player if rules is the on_wrong_quiz option. +quiz_rules_msg = "Попробуйте еще раз взглянуть на правила:", +--The kick reason if kick is the on_wrong_quiz option. +wrong_quiz_kick_msg = "Обратите внимание в следующий раз!", +--The message sent to the player if nothing is the on_wrong_quiz option. +quiz_fail_msg = "Вы ответили на вопрос неправильно. введите '/rules', чтобы повторить попытку. (внимательно прочитайте их)", + +--The messages send to the player after interact is granted. +interact_msg1 = "Спасибо, что приняли правила, теперь вы можете взаимодействовать с вещами.", +interact_msg2 = "повеселись! Я предлагаю найти других российских игроков, чтобы объединиться. '/guide'", +} \ No newline at end of file diff --git a/mods/interact/screenshot.png b/mods/interact/screenshot.png new file mode 100644 index 0000000..eb544ba Binary files /dev/null and b/mods/interact/screenshot.png differ diff --git a/mods/itemframes/.gitignore b/mods/itemframes/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/mods/itemframes/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/mods/itemframes/depends.txt b/mods/itemframes/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/itemframes/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/itemframes/init.lua b/mods/itemframes/init.lua new file mode 100644 index 0000000..7c84643 --- /dev/null +++ b/mods/itemframes/init.lua @@ -0,0 +1,222 @@ +local tmp = {} + +minetest.register_entity("itemframes:item",{ + hp_max = 1, + visual="wielditem", + visual_size={x=.33,y=.33}, + collisionbox = {0,0,0,0,0,0}, + physical=false, + textures={"air"}, + on_activate = function(self, staticdata) + if tmp.nodename ~= nil and tmp.texture ~= nil then + self.nodename = tmp.nodename + tmp.nodename = nil + self.texture = tmp.texture + tmp.texture = nil + else + if staticdata ~= nil and staticdata ~= "" then + local data = staticdata:split(';') + if data and data[1] and data[2] then + self.nodename = data[1] + self.texture = data[2] + end + end + end + if self.texture ~= nil then + self.object:set_properties({textures={self.texture}}) + end + if self.nodename == "itemframes:pedestal" then + self.object:set_properties({automatic_rotate=1}) + end + end, + get_staticdata = function(self) + if self.nodename ~= nil and self.texture ~= nil then + return self.nodename .. ';' .. self.texture + end + return "" + end, +}) + + +local facedir = {} +facedir[0] = {x=0,y=0,z=1} +facedir[1] = {x=1,y=0,z=0} +facedir[2] = {x=0,y=0,z=-1} +facedir[3] = {x=-1,y=0,z=0} + +local remove_item = function(pos, node) + local objs = nil + if node.name == "itemframes:frame" then + objs = minetest.env:get_objects_inside_radius(pos, .5) + elseif node.name == "itemframes:pedestal" then + objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y+1,z=pos.z}, .5) + end + if objs then + for _, obj in ipairs(objs) do + if obj and obj:get_luaentity() and obj:get_luaentity().name == "itemframes:item" then + obj:remove() + end + end + end +end + +local update_item = function(pos, node) + remove_item(pos, node) + local meta = minetest.env:get_meta(pos) + if meta:get_string("item") ~= "" then + if node.name == "itemframes:frame" then + local posad = facedir[node.param2] + if not posad then return end + pos.x = pos.x + posad.x*6.5/16 + pos.y = pos.y + posad.y*6.5/16 + pos.z = pos.z + posad.z*6.5/16 + elseif node.name == "itemframes:pedestal" then + pos.y = pos.y + 12/16+.33 + end + tmp.nodename = node.name + tmp.texture = ItemStack(meta:get_string("item")):get_name() + local e = minetest.env:add_entity(pos,"itemframes:item") + if node.name == "itemframes:frame" then + local yaw = math.pi*2 - node.param2 * math.pi/2 + e:setyaw(yaw) + end + end +end + +local drop_item = function(pos, node) + local meta = minetest.env:get_meta(pos) + if meta:get_string("item") ~= "" then + if node.name == "itemframes:frame" then + minetest.env:add_item(pos, meta:get_string("item")) + elseif node.name == "itemframes:pedestal" then + minetest.env:add_item({x=pos.x,y=pos.y+1,z=pos.z}, meta:get_string("item")) + end + meta:set_string("item","") + end + remove_item(pos, node) +end + +minetest.register_node("itemframes:frame",{ + description = "Item frame", + drawtype = "nodebox", + node_box = { type = "fixed", fixed = {-0.5, -0.5, 7/16, 0.5, 0.5, 0.5} }, + selection_box = { type = "fixed", fixed = {-0.5, -0.5, 7/16, 0.5, 0.5, 0.5} }, + tiles = {"itemframes_frame.png"}, + inventory_image = "itemframes_frame.png", + wield_image = "itemframes_frame.png", + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + groups = { choppy=2,dig_immediate=2 }, + legacy_wallmounted = true, + sounds = default.node_sound_defaults(), + after_place_node = function(pos, placer, itemstack) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner",placer:get_player_name()) + meta:set_string("infotext","Item frame (owned by "..placer:get_player_name()..")") + end, + on_rightclick = function(pos, node, clicker, itemstack) + if not itemstack then return end + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + if clicker:get_player_name() == owner or owner == "" then + drop_item(pos,node) + local s = itemstack:take_item() + meta:set_string("item",s:to_string()) + update_item(pos,node) + end + return itemstack + end, + on_punch = function(pos,node,puncher) + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + if puncher:get_player_name() == owner or owner == "" then + drop_item(pos, node) + end + end, + can_dig = function(pos,player) + + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + return player:get_player_name() == owner or owner == "" + end, +}) + + +minetest.register_node("itemframes:pedestal",{ + description = "Pedestal", + drawtype = "nodebox", + node_box = { type = "fixed", fixed = { + {-7/16, -8/16, -7/16, 7/16, -7/16, 7/16}, -- bottom plate + {-6/16, -7/16, -6/16, 6/16, -6/16, 6/16}, -- bottom plate (upper) + {-0.25, -6/16, -0.25, 0.25, 11/16, 0.25}, -- pillar + {-7/16, 11/16, -7/16, 7/16, 12/16, 7/16}, -- top plate + } }, + --selection_box = { type = "fixed", fixed = {-7/16, -0.5, -7/16, 7/16, 12/16, 7/16} }, + tiles = {"itemframes_pedestal.png"}, + paramtype = "light", + groups = { cracky=3 }, + sounds = default.node_sound_defaults(), + after_place_node = function(pos, placer, itemstack) + local meta = minetest.env:get_meta(pos) + meta:set_string("owner",placer:get_player_name()) + meta:set_string("infotext","Pedestal (owned by "..placer:get_player_name()..")") + end, + on_rightclick = function(pos, node, clicker, itemstack) + if not itemstack then return end + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + if clicker:get_player_name() == owner or owner == "" then + drop_item(pos,node) + local s = itemstack:take_item() + meta:set_string("item",s:to_string()) + update_item(pos,node) + end + return itemstack + end, + on_punch = function(pos,node,puncher) + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + if puncher:get_player_name() == owner or owner == "" then + drop_item(pos,node) + end + end, + can_dig = function(pos,player) + + local meta = minetest.env:get_meta(pos) + local owner = meta:get_string("owner") + return player:get_player_name() == owner or owner == "" + end, +}) + +-- automatically restore entities lost from frames/pedestals +-- due to /clearobjects or similar + +minetest.register_abm({ + nodenames = { "itemframes:frame", "itemframes:pedestal" }, + interval = 15, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + if #minetest.get_objects_inside_radius(pos, 0.5) > 0 then return end + update_item(pos, node) + end +}) + +-- crafts + +minetest.register_craft({ + output = 'itemframes:frame', + recipe = { + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:paper', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + } +}) +minetest.register_craft({ + output = 'itemframes:pedestal', + recipe = { + {'default:stone', 'default:stone', 'default:stone'}, + {'', 'default:stone', ''}, + {'default:stone', 'default:stone', 'default:stone'}, + } +}) diff --git a/mods/itemframes/textures/itemframes_frame.png b/mods/itemframes/textures/itemframes_frame.png new file mode 100644 index 0000000..9ea9a30 Binary files /dev/null and b/mods/itemframes/textures/itemframes_frame.png differ diff --git a/mods/itemframes/textures/itemframes_pedestal.png b/mods/itemframes/textures/itemframes_pedestal.png new file mode 100644 index 0000000..e39abd3 Binary files /dev/null and b/mods/itemframes/textures/itemframes_pedestal.png differ diff --git a/mods/knifesword/depends.txt b/mods/knifesword/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/mods/knifesword/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/knifesword/init.lua b/mods/knifesword/init.lua new file mode 100644 index 0000000..ec2343e --- /dev/null +++ b/mods/knifesword/init.lua @@ -0,0 +1,30 @@ +minetest.override_item("default:sword_wood", { + description = "Wooden Knife", + inventory_image = "default_tool_woodsword.png", + range = 2, +}) +minetest.override_item("default:sword_stone", { + description = "Stone Knife", + inventory_image = "default_tool_stonesword.png", + range = 2, +}) +minetest.override_item("default:sword_steel", { + description = "Steel Knife", + inventory_image = "default_tool_steelsword.png", + range = 2, +}) +minetest.override_item("default:sword_bronze", { + description = "Bronze Knife", + inventory_image = "default_tool_bronzesword.png", + range = 2, +}) +minetest.override_item("default:sword_mese", { + description = "Mese Knife", + inventory_image = "default_tool_mesesword.png", + range = 2, +}) +minetest.override_item("default:sword_diamond", { + description = "Diamond Knife", + inventory_image = "default_tool_diamondsword.png", + range = 2, +}) \ No newline at end of file diff --git a/mods/knifesword/textures/default_tool_bronzesword.png b/mods/knifesword/textures/default_tool_bronzesword.png new file mode 100644 index 0000000..a256f53 Binary files /dev/null and b/mods/knifesword/textures/default_tool_bronzesword.png differ diff --git a/mods/knifesword/textures/default_tool_diamondsword.png b/mods/knifesword/textures/default_tool_diamondsword.png new file mode 100644 index 0000000..dbd66c0 Binary files /dev/null and b/mods/knifesword/textures/default_tool_diamondsword.png differ diff --git a/mods/knifesword/textures/default_tool_mesesword.png b/mods/knifesword/textures/default_tool_mesesword.png new file mode 100644 index 0000000..14d1715 Binary files /dev/null and b/mods/knifesword/textures/default_tool_mesesword.png differ diff --git a/mods/knifesword/textures/default_tool_steelsword.png b/mods/knifesword/textures/default_tool_steelsword.png new file mode 100644 index 0000000..bacbbd1 Binary files /dev/null and b/mods/knifesword/textures/default_tool_steelsword.png differ diff --git a/mods/knifesword/textures/default_tool_stonesword.png b/mods/knifesword/textures/default_tool_stonesword.png new file mode 100644 index 0000000..a92e516 Binary files /dev/null and b/mods/knifesword/textures/default_tool_stonesword.png differ diff --git a/mods/knifesword/textures/default_tool_woodsword.png b/mods/knifesword/textures/default_tool_woodsword.png new file mode 100644 index 0000000..81a4c28 Binary files /dev/null and b/mods/knifesword/textures/default_tool_woodsword.png differ diff --git a/mods/knockout/LICENSE b/mods/knockout/LICENSE new file mode 100644 index 0000000..a69d857 --- /dev/null +++ b/mods/knockout/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Billy S + +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/knockout/README.md b/mods/knockout/README.md new file mode 100644 index 0000000..5c66f24 --- /dev/null +++ b/mods/knockout/README.md @@ -0,0 +1,7 @@ +# knockout +Adds a knockout system to minetest. +Once a player is knocked out, (s)he can be picked up by other players and moved around. +To pick up a player, right-click them once they are knocked out. +To drop a player, jump. +While a player is knocked out, they cannot move, talk, or run /killme. +They are also annoyed by a persistant formspec telling them how long they will be knocked out for. diff --git a/mods/knockout/api.lua b/mods/knockout/api.lua new file mode 100644 index 0000000..c2ae38c --- /dev/null +++ b/mods/knockout/api.lua @@ -0,0 +1,12 @@ +-- toolname is the name of the tool (ex "default:pick_wood") +-- chance is the chance that the target will be knocked out when hit with the tool +-- (A value betwen 1 and 0; 1 = will happen every time; 0 = will never happed. Note that a chance of 1 may fail to knock players out if the tool is not used wiht a full punch) +-- max_health is the maximum health the player will have to be knocked out with the tool +-- (If the player's health is greater then max_health, they won't be knocked out, regardless of chance) +-- max_time is the maximum time (in seconds) that the player will be knocked out for (note that this would happen if the player was hit when they had 0 hp, aka never) +-- the minimum time the player will be knocked out for is half of max_time +-- The actual time the player is knocked out for is calculated by the following equation: +-- time knocked out = max_time * (1 - current hp / (max_health * 2)) +knockout.register_tool = function(toolname, chance, max_health, max_time) + knockout.tools[toolname] = {chance = chance, max_health = max_health, max_time = max_time} +end diff --git a/mods/knockout/depends.txt b/mods/knockout/depends.txt new file mode 100644 index 0000000..15d4f38 --- /dev/null +++ b/mods/knockout/depends.txt @@ -0,0 +1,2 @@ +default +lottweapons? diff --git a/mods/knockout/handlers.lua b/mods/knockout/handlers.lua new file mode 100644 index 0000000..6dc707f --- /dev/null +++ b/mods/knockout/handlers.lua @@ -0,0 +1,87 @@ +-- Create formspec structure +local function getFs(name) + return "size[5,3]label[1.4,1;You are unconscious!]label[0.8,2;Time remaining: " .. tostring(knockout.knocked_out[name]) .. " seconds]" +end + +-- Globalstep to revive players +local gs_time = 0 +minetest.register_globalstep(function(dtime) + -- Decrease knockout time + gs_time = gs_time + dtime + if gs_time >= 1 then + gs_time = 0 + for name, _ in pairs(knockout.knocked_out) do + local p = minetest.get_player_by_name(name) + if p ~= nil then + if p:get_hp() > 0 then + knockout.decrease_knockout_time(name, 1) + minetest.show_formspec(name, "knockout:fs", getFs(name)) + end + end + end + knockout.save() + end + for name, carried in pairs(knockout.carrying) do + -- Check for player drop + local p = minetest.get_player_by_name(name) + if p:get_player_control().jump then + knockout.carrier_drop(name) + end + -- Set the look direction to make it more realistic + local c = minetest.get_player_by_name(carried) + c:set_look_horizontal(p:get_look_horizontal()) + end +end) + +-- Oh no you don't. I like that formspec open +minetest.register_on_player_receive_fields(function(player, fName, _) + if player:get_hp() <= 0 then return false end + if fName == "knockout:fs" then + local name = player:get_player_name() + minetest.show_formspec(name, fName, getFs(name)) + return true + end +end) + +-- If the player is killed, they "wake up" +minetest.register_on_dieplayer(function(p) + local pName = p:get_player_name() + knockout.wake_up(pName) + -- If the player is carrying another player, drop them + knockout.carrier_drop(pName) +end) + +-- If the player was carrying another player, drop them +minetest.register_on_leaveplayer(function(p, _) + knockout.carrier_drop(p:get_player_name()) +end) + +-- Catch those pesky players that try to leave/join to get un-knocked out +minetest.register_on_joinplayer(function(p) + local koed = false + local name = p:get_player_name() + if knockout.knocked_out[name] ~= nil then + minetest.after(1, knockout.knockout, name) + end +end) + +-- Catch whacks with various tools and calculate if the victim should be knocked out +minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage) + local victim = player:get_player_name() + local currHp = player:get_hp() + if knockout.knocked_out[victim] ~= nil then return end + if currHp <= 0 then return end + local tool = hitter:get_wielded_item():get_name() -- Get tool used + local def = knockout.tools[tool] + if def == nil then return end + -- Calculate + if currHp <= def.max_health then + local chanceMult = time_from_last_punch / tool_capabilities.full_punch_interval -- You can't knock people out with lots of love taps + if chanceMult > 1 then chanceMult = 1 end + if math.random() < def.chance * chanceMult then + -- Knocked out + local koTime = math.floor(def.max_time * (1 - currHp / (def.max_health * 2))) + knockout.knockout(victim, koTime) + end + end +end) diff --git a/mods/knockout/init.lua b/mods/knockout/init.lua new file mode 100644 index 0000000..ba817a1 --- /dev/null +++ b/mods/knockout/init.lua @@ -0,0 +1,195 @@ +local path = minetest.get_modpath(minetest.get_current_modname()) +dofile(path .. "/overrides.lua") + +-- Create globals +knockout = {} +knockout.knocked_out = {} +knockout.carrying = {} +knockout.tools = {} + +-- Create mod storage +knockout.storage = minetest.get_mod_storage() + +-- Created locals +local knockout_huds = {} + +-- Register entity + +minetest.register_entity("knockout:entity", { + hp_max = 1000, + physical = true, + weight = 5, + collisionbox = {-0.35, 0, -0.35, 0.35, 1.8, 0.35}, + visual = "cube", + textures = {"invisible.png", "invisible.png", "invisible.png", "invisible.png", "invisible.png", "invisible.png"}, + is_visible = true, + makes_footstep_sound = false, + automatic_rotate = false, + on_activate = function(e, sdata, dtime) + e.grabbed_name = sdata + e.object:set_armor_groups({immortal = 1}) + local p = minetest.get_player_by_name(e.grabbed_name) + if p ~= nil then + e.object:set_yaw(p:get_look_horizontal()) + end + end, + on_punch = function(e, puncher, time_from_last_punch, tool_capabilities, dir) + -- The player can't punch themselves + if puncher:get_player_name() == e.grabbed_name then return end + -- If punched with a water bucket revive + local tool = puncher:get_wielded_item():get_name() + if tool == "bucket:bucket_water" then + knockout.wake_up(e.grabbed_name) + return + end + -- Otherwise hurt the player + local p = minetest.get_player_by_name(e.grabbed_name) + if p == nil then + e.object:remove() + else + p:set_detach() + p:punch(puncher, time_from_last_punch, tool_capabilities, dir) + p:set_attach(e.object, "", {x = 0, y = 10, z = 0}, {x = 0, y = 0, z = 0}) + end + end, + on_rightclick = function(e, clicker) + local cName = clicker:get_player_name() + if cName == e.grabbed_name then return end + for carryer, carried in pairs(knockout.carrying) do + if carryer == cName or carried == e.grabbed_name then return end + end + victim = minetest.get_player_by_name(e.grabbed_name) + if victim then + victim:set_attach(clicker, "", {x = 0, y = 0, z = -15}, {x = 0, y = 0, z = 0}) + knockout.carrying[cName] = e.grabbed_name + e.object:remove() + end + end, + on_step = function(e, dtime) + if knockout.knocked_out[e.grabbed_name] == nil or minetest.get_player_by_name(e.grabbed_name) == nil then + e.object:remove() + end + end +}) + +-- Load knocked out players +knockout.load = function() + local ko = knockout.storage:get_string("knocked_out") + if ko ~= "" then + knockout.knocked_out = minetest.deserialize(ko) + end +end + +-- Save knocked out players +knockout.save = function() + knockout.storage:set_string("knocked_out", minetest.serialize(knockout.knocked_out)) +end + +-- Drop a player +knockout.carrier_drop = function(pName) -- pname = name of carrier + if knockout.carrying[pName] then + local cName = knockout.carrying[pName] + local carried = minetest.get_player_by_name(cName) + if carried then + carried:set_detach() + knockout.knockout(cName) + end + knockout.carrying[pName] = nil + end +end + +-- Knock out player +knockout.knockout = function(pName, duration) + local p = minetest.get_player_by_name(pName) + if not p then return end + if duration == nil then + if knockout.knocked_out[pName] == nil then return end + else + knockout.knocked_out[pName] = duration + end + -- Incase player is riding a horse or something + p:set_detach() + -- If the player is carrying another player, fix that + knockout.carrier_drop(pName) + -- Freeze player using entites + local pos = p:get_pos() + local e = minetest.add_entity(pos, "knockout:entity", pName) + p:set_attach(e, "", {x = 0, y = 10, z = 0}, {x = 0, y = 0, z = 0}) + -- Make player lay down + default.player_attached[pName] = true + default.player_set_animation(p, "lay") + -- Black screen + if knockout_huds[pName] == nil then + knockout_huds[pName] = p:hud_add({ + hud_elem_type = "image", + text = "knockout_black.png", + name = "knockedout", + position = {x = 0.5, y = 0.5}, + scale = {x= -110, y= -110}, + alignment = {x = 0, y = 0}, + + }) + end + -- No interacting for you, player + local privs = minetest.get_player_privs(pName) + privs.shout = nil + privs.interact = nil + minetest.set_player_privs(pName, privs) + -- Save + knockout.save() +end + +-- Wake up player +knockout.wake_up = function(pName) + local p = minetest.get_player_by_name(pName) + knockout.knocked_out[pName] = nil + -- Un-freeze player + local e = p:get_attach() + if e ~= nil then + local pos = e:get_pos() + e:remove() + p:set_detach() + p:set_pos(pos) + end + -- Make player stand back up + default.player_attached[pName] = false + default.player_set_animation(p, "stand") + p:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0}) + -- If the player was being carried, remove that + for name, carried in pairs(knockout.carrying) do + if carried == pName then + knockout.carrying[name] = nil + break + end + end + -- Give the whiny player their privs back already + local privs = minetest.get_player_privs(pName) + privs.shout = true + privs.interact = true + minetest.set_player_privs(pName, privs) + -- Hide formspec + if p:get_hp() > 0 then + minetest.close_formspec(pName, "knockout:fs") + end + -- Un-black screen + if knockout_huds[pName] ~= nil then + p:hud_remove(knockout_huds[pName]) + knockout_huds[pName] = nil + end + -- Save + knockout.save() +end + +-- Decrease knockout time +knockout.decrease_knockout_time = function(pName, by) + knockout.knocked_out[pName] = knockout.knocked_out[pName] - by + if knockout.knocked_out[pName] <= 0 then + knockout.wake_up(pName) + end +end + +-- Init +knockout.load() +dofile(path .. "/api.lua") +dofile(path .. "/handlers.lua") +dofile(path .. "/tools.lua") diff --git a/mods/knockout/overrides.lua b/mods/knockout/overrides.lua new file mode 100644 index 0000000..e69de29 diff --git a/mods/knockout/textures/invisible.png b/mods/knockout/textures/invisible.png new file mode 100644 index 0000000..ccdfdbd Binary files /dev/null and b/mods/knockout/textures/invisible.png differ diff --git a/mods/knockout/textures/knockout_bat.png b/mods/knockout/textures/knockout_bat.png new file mode 100644 index 0000000..513224a Binary files /dev/null and b/mods/knockout/textures/knockout_bat.png differ diff --git a/mods/knockout/textures/knockout_black.png b/mods/knockout/textures/knockout_black.png new file mode 100644 index 0000000..58cd79d Binary files /dev/null and b/mods/knockout/textures/knockout_black.png differ diff --git a/mods/knockout/tools.lua b/mods/knockout/tools.lua new file mode 100644 index 0000000..edbf04e --- /dev/null +++ b/mods/knockout/tools.lua @@ -0,0 +1,72 @@ +--------------- +--DEFINITIONS-- +--------------- +--[[ +minetest.register_tool("knockout:bat", { + description = "Knockout Bat | Knocks out players with less then 4 hearts", + inventory_image = "knockout_bat.png", +}) + +minetest.register_craft({ + output = "knockout:bat", + recipe = { + {"", "group:wood", "group:wood"}, + {"", "default:steel_ingot", "group:wood"}, + {"group:wood", "", ""}, + } +}) + +--]] + + + + +-------------- +--KNOCK OUT--- +-------------- +--knockout.register_tool("knockout:bat", 0.8, 8, 120) + +----------- +--DEFAULT-- +----------- + +-- Fist +knockout.register_tool("", 0.6, 6, 80) + +-- picks have no knockout chance +-- shovels have slight knockout chance with low knockout time +knockout.register_tool("default:shovel_wood", 0.1, 10, 20) +knockout.register_tool("default:shovel_stone", 0.05, 10, 20) +knockout.register_tool("default:shovel_steel", 0.07, 10, 20) +knockout.register_tool("default:shovel_bronze", 0.07, 10, 20) +knockout.register_tool("default:shovel_mese", 0.1, 10, 20) +knockout.register_tool("default:shovel_diamond", 0.1, 10, 20) +-- Low-level axes have a slight knockout chance with medium knockout time +knockout.register_tool("default:axe_wood", 0.3, 3, 100) +knockout.register_tool("default:axe_stone", 0.1, 4, 110) +-- Swords have a slight knockout chance with high knockout time, except for wooden sword = club +knockout.register_tool("default:sword_wood", 0.7, 6, 140) +knockout.register_tool("default:sword_stone", 0.3, 6, 150) +knockout.register_tool("default:sword_steel", 0.1, 7, 150) +knockout.register_tool("default:sword_bronze", 0.1, 7, 150) +knockout.register_tool("default:sword_mese", 0.05, 8, 160) +knockout.register_tool("default:sword_diamond", 0.05, 9, 160) +-- Hoes have no knockout chance + +----------------- +--LOTT WEAPONS-- +----------------- +if minetest.get_modpath("lottweapons") ~= nil then + -- Battleaxes (Low knockout chance, high knockout time.) + knockout.register_tool("lottweapons:wood_battleaxe", 0.2, 4, 140) + knockout.register_tool("lottweapons:stone_battleaxe", 0.1, 6, 150) + knockout.register_tool("lottweapons:copper_battleaxe", 0.05, 7, 150) + knockout.register_tool("lottweapons:steel_battleaxe", 0.05, 7, 150) + -- Warhammers (high knockout chance, medium knockout time for lower levels.) + knockout.register_tool("lottweapons:wood_warhammer", 0.7, 7, 80) + knockout.register_tool("lottweapons:stone_warhammer", 0.3, 4, 100) + knockout.register_tool("lottweapons:copper_warhammer", 0.1, 4, 120) + knockout.register_tool("lottweapons:steel_warhammer", 0.1, 5, 120) + -- Spears have no knockout chance + -- Daggers have no knockout chance +end diff --git a/mods/lib_mount/.gitattributes b/mods/lib_mount/.gitattributes new file mode 100644 index 0000000..bdb0cab --- /dev/null +++ b/mods/lib_mount/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# 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/lib_mount/.gitignore b/mods/lib_mount/.gitignore new file mode 100644 index 0000000..cd2946a --- /dev/null +++ b/mods/lib_mount/.gitignore @@ -0,0 +1,47 @@ +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/mods/lib_mount/README.txt b/mods/lib_mount/README.txt new file mode 100644 index 0000000..9516587 --- /dev/null +++ b/mods/lib_mount/README.txt @@ -0,0 +1,7 @@ + +Minetest mod: lib_mount +======================= +by blert2112 + +Based on the Boats mod by: PilzAdam. +License of source code: WTFPL diff --git a/mods/lib_mount/depends.txt b/mods/lib_mount/depends.txt new file mode 100644 index 0000000..4c20936 --- /dev/null +++ b/mods/lib_mount/depends.txt @@ -0,0 +1,2 @@ +default +mobs? diff --git a/mods/lib_mount/init.lua b/mods/lib_mount/init.lua new file mode 100644 index 0000000..8b7fd81 --- /dev/null +++ b/mods/lib_mount/init.lua @@ -0,0 +1,331 @@ + +local enable_crash = true +local crash_threshold = 6.5 -- ignored if enable_crash=false + +------------------------------------------------------------------------------ + +local mobs_redo = false +if minetest.get_modpath("mobs") then + if mobs.mod and mobs.mod == "redo" then + mobs_redo = true + end +end + +-- +-- Helper functions +-- + +--local function is_group(pos, group) +-- local nn = minetest.get_node(pos).name +-- return minetest.get_item_group(nn, group) ~= 0 +--end + +local function node_is(pos) + local node = minetest.get_node(pos) + if node.name == "air" then + return "air" + end + if minetest.get_item_group(node.name, "liquid") ~= 0 then + return "liquid" + end + if minetest.get_item_group(node.name, "walkable") ~= 0 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 ^ 2 + v.z ^ 2) +end + +local function force_detach(player) + local attached_to = player:get_attach() + if attached_to then + local entity = attached_to:get_luaentity() + if entity.driver and entity.driver == player then + entity.driver = nil + elseif entity.passenger and entity.passenger == player then + entity.passenger = nil + end + player:set_detach() + default.player_attached[player:get_player_name()] = false + player:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0}) + end +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) + +------------------------------------------------------------------------------- + + +lib_mount = {} + +function lib_mount.attach(entity, player, is_passenger) + local attach_at, eye_offset = {}, {} + + if not entity.player_rotation then + entity.player_rotation = {x=0, y=0, z=0} + end + + local rot_view = 0 + if entity.player_rotation.y == 90 then + rot_view = math.pi/2 + end + + if is_passenger == true then + if not entity.passenger_attach_at then + entity.passenger_attach_at = {x=0, y=0, z=0} + end + if not entity.passenger_eye_offset then + entity.passenger_eye_offset = {x=0, y=0, z=0} + end + attach_at = entity.passenger_attach_at + eye_offset = entity.passenger_eye_offset + entity.passenger = player + else + if not entity.driver_attach_at then + entity.driver_attach_at = {x=0, y=0, z=0} + end + if not entity.driver_eye_offset then + entity.driver_eye_offset = {x=0, y=0, z=0} + end + attach_at = entity.driver_attach_at + eye_offset = entity.driver_eye_offset + entity.driver = player + end + + force_detach(player) + + player:set_attach(entity.object, "", attach_at, entity.player_rotation) + default.player_attached[player:get_player_name()] = true + player:set_eye_offset(eye_offset, {x=0, y=0, z=0}) + minetest.after(0.2, function() + default.player_set_animation(player, "sit" , 30) + end) + player:set_look_yaw(entity.object:getyaw() - rot_view) +end + +function lib_mount.detach(player, offset) + force_detach(player) + default.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 + +local aux_timer = 0 + +function lib_mount.drive(entity, dtime, is_mob, moving_anim, stand_anim, jump_height, can_fly) + aux_timer = aux_timer + dtime + + if can_fly and can_fly == true then + jump_height = 0 + end + + 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 + local ctrl = entity.driver:get_player_control() + if ctrl.aux1 then + if aux_timer >= 0.2 then + entity.mouselook = not entity.mouselook + aux_timer = 0 + end + end + if ctrl.up then + if get_sign(entity.v) >= 0 then + entity.v = entity.v + entity.accel/10 + else + entity.v = entity.v + entity.braking/10 + end + elseif ctrl.down then + if entity.max_speed_reverse == 0 and entity.v == 0 then return end + if get_sign(entity.v) < 0 then + entity.v = entity.v - entity.accel/10 + else + entity.v = entity.v - entity.braking/10 + end + end + if entity.mouselook then + if ctrl.left then + entity.object:setyaw(entity.object:getyaw()+get_sign(entity.v)*math.rad(1+dtime)*entity.turn_spd) + elseif ctrl.right then + entity.object:setyaw(entity.object:getyaw()-get_sign(entity.v)*math.rad(1+dtime)*entity.turn_spd) + end + else + entity.object:setyaw(entity.driver:get_look_yaw() - rot_steer) + end + if ctrl.jump then + if jump_height > 0 and velo.y == 0 then + velo.y = velo.y + (jump_height * 3) + 1 + acce_y = acce_y + (acce_y * 3) + 1 + end + if can_fly and can_fly == true then + velo.y = velo.y + 1 + acce_y = acce_y + 1 + end + end + if ctrl.sneak then + if can_fly and can_fly == true then + velo.y = velo.y - 1 + acce_y = acce_y - 1 + 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 is_mob and mobs_redo == true then + if stand_anim and stand_anim ~= nil then + set_animation(entity, stand_anim) + end + end + return + end + + -- set animation + if is_mob and mobs_redo == true then + if moving_anim and moving_anim ~= nil then + set_animation(entity, moving_anim) + end + 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" then + 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 +-- elseif ni == "walkable" then +-- v = 0 +-- new_acce.y = 1 + 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 + if is_mob then + entity.object:set_hp(entity.object:get_hp() - intensity) + else + if entity.driver then + local drvr = entity.driver + lib_mount.detach(drvr, {x=0, y=0, z=0}) + drvr:setvelocity(new_velo) + drvr:set_hp(drvr:get_hp() - intensity) + end + if entity.passenger then + local pass = entity.passenger + lib_mount.detach(pass, {x=0, y=0, z=0}) + pass:setvelocity(new_velo) + pass:set_hp(pass:get_hp() - intensity) + end + local pos = entity.object:getpos() + minetest.add_item(pos, entity.drop_on_destroy) + entity.removed = true + -- delay remove to ensure player is detached + minetest.after(0.1, function() + entity.object:remove() + end) + end + end + end + + entity.v2 = v +end diff --git a/mods/lockpicks/README.md b/mods/lockpicks/README.md new file mode 100644 index 0000000..98f9467 --- /dev/null +++ b/mods/lockpicks/README.md @@ -0,0 +1,6 @@ +lockpicks +========= + +Mod to add lockpicks to MineTest + +See forum info at: https://forum.minetest.net/viewtopic.php?f=9&t=9224 diff --git a/mods/lockpicks/defaults.lua b/mods/lockpicks/defaults.lua new file mode 100644 index 0000000..c8e90bf --- /dev/null +++ b/mods/lockpicks/defaults.lua @@ -0,0 +1,71 @@ +function make_pickable(nodename, itemname, lockedgroup, newinfotext) + local groupies = minetest.registered_nodes[nodename].groups + groupies.locked = lockedgroup + minetest.override_item(nodename, { + groups = groupies, + on_dig = function(pos, node, digger) + local meta = minetest.get_meta(pos) + local can_pick = false + if meta:get_string("owner") ~= "" then + if digger:get_wielded_item():get_tool_capabilities().groupcaps.locked then + if digger:get_wielded_item():get_tool_capabilities().groupcaps.locked.maxlevel <= lockedgroup then + can_pick = true + end + end + end + if minetest.get_modpath("ctf_protect") ~= nil then + if minetest.is_protected(pos, digger:get_player_name()) then + can_pick = false + end + end + if can_pick then + local wielditem = digger:get_wielded_item() + local wieldlevel = digger:get_wielded_item():get_tool_capabilities().max_drop_level + if math.random() > math.pow(.66, wieldlevel) then + meta:set_string("owner", "") + meta:set_string("infotext", newinfotext) + minetest.chat_send_player(digger:get_player_name(), "You picked the lock!") + else + wielditem:clear() + digger:set_wielded_item(wieldeditem) + minetest.chat_send_player(digger:get_player_name(), "Your lockpick broke!") + end + return false + else + local inv = meta:get_inventory() + if inv:is_empty("main") and default.can_interact_with_node(digger, pos) then + minetest.remove_node(pos) + digger:get_inventory():add_item('main', itemname or nodename) + end + end + end + }) +end + +make_pickable("default:chest_locked", nil, 2, "Lockpicked Chest") + +if minetest.get_modpath("doors") ~= nil then + make_pickable("doors:door_steel_a", "doors:door_steel", 2, "Lockpicked Door") + make_pickable("doors:door_steel_b", "doors:door_steel", 2, "Lockpicked Door") + make_pickable("doors:trapdoor_steel", nil, 2, "Lockpicked Trapdoor") + make_pickable("doors:trapdoor_steel_open", "doors:trapdoor_steel", 2, "Lockpicked Trapdoor") +end +if minetest.get_modpath("inbox") ~= nil then + make_pickable("inbox:empty", nil, 2, "Lockpicked Mailbox") + make_pickable("inbox:full", "inbox:empty", 2, "Lockpicked Mailbox") +end +if minetest.get_modpath("itemframes") ~= nil then + make_pickable("itemframes:frame", nil, 2, "Lockpicked Itemframe") + make_pickable("itemframes:pedestal", nil, 2, "Lockpicked Pedestal") +end +if minetest.get_modpath("currency") ~= nil then + make_pickable("currency:shop", nil, 2, "Lockpicked Shop") + make_pickable("currency:safe", nil, 1, "Lockpicked Safe") +end +if minetest.get_modpath("3d_armor_stand") ~= nil then + make_pickable("3d_armor_stand:locked_armor_stand", nil, 2, "Lockpicked Armor Stand") +end +if minetest.get_modpath("signs") ~= nil then + make_pickable("default:sign_wall_steel", nil, 2, "Lockpicked Sign") + make_pickable("signs:sign_yard_steel", "default:sign_wall_steel", 2, "Lockpicked Sign") +end diff --git a/mods/lockpicks/depends.txt b/mods/lockpicks/depends.txt new file mode 100644 index 0000000..cacd01a --- /dev/null +++ b/mods/lockpicks/depends.txt @@ -0,0 +1,8 @@ +default +3d_armor_stand? +currency? +itemframes? +doors? +ctf_protect? +moreores? +signs? \ No newline at end of file diff --git a/mods/lockpicks/description.txt b/mods/lockpicks/description.txt new file mode 100644 index 0000000..87d712c --- /dev/null +++ b/mods/lockpicks/description.txt @@ -0,0 +1 @@ +Adds lockpicks to Minetest and updates most locked objects to be breakable. \ No newline at end of file diff --git a/mods/lockpicks/init.lua b/mods/lockpicks/init.lua new file mode 100644 index 0000000..712a988 --- /dev/null +++ b/mods/lockpicks/init.lua @@ -0,0 +1,149 @@ +--lockpicks v0.8 by HeroOfTheWinds +--Adds a variety of lockpicks and redefines most locked objects to allow them to be 'picked' and unlocked. + +local breakexp = .66 --exponent for tools to determine + +local has_moreores = false +if minetest.get_modpath("moreores") ~= nil then + has_moreores = true +end + +--lockpick definitions +--[[minetest.register_tool("lockpicks:lockpick_wood", { + description="Wooden Lockpick", + inventory_image = "wooden_lockpick.png", + tool_capabilities = { + max_drop_level = 1, + groupcaps = {locked={maxlevel=1, uses=10, times={[3]=5.00}}} + } +})--]] +minetest.register_tool("lockpicks:lockpick_steel", { + description="Steel Lockpick", + inventory_image = "steel_lockpick.png", + tool_capabilities = { + max_drop_level = 2, + groupcaps = {locked={maxlevel=2, uses=20, times={[2]=7.00,[3]=4.50}}} + } +}) +minetest.register_tool("lockpicks:lockpick_copper", { + description="Copper Lockpick", + inventory_image = "copper_lockpick.png", + tool_capabilities = { + max_drop_level = 3, + groupcaps = {locked={maxlevel=2, uses=30, times={[2]=6.00,[3]=4.00}}} + } +}) +if has_moreores then +minetest.register_tool("lockpicks:lockpick_silver", { + description="Silver Lockpick", + inventory_image = "silver_lockpick.png", + tool_capabilities = { + max_drop_level = 4, + groupcaps = {locked={maxlevel=3, uses=40, times={[1]=20.00,[2]=5.00,[3]=3.00}}} + } +}) +end +minetest.register_tool("lockpicks:lockpick_gold", { + description="Gold Lockpick", + inventory_image = "gold_lockpick.png", + tool_capabilities = { + max_drop_level = 5, + groupcaps = {locked={maxlevel=3, uses=50, times={[1]=15.00,[2]=4.50,[3]=2.00}}} + } +}) +if has_moreores then +minetest.register_tool("lockpicks:lockpick_mithril", { + description="Mithril Lockpick", + inventory_image = "mithril_lockpick.png", + tool_capabilities = { + max_drop_level = 6, + groupcaps = {locked={maxlevel=3, uses=50, times={[1]=10.00,[2]=4.00,[3]=1.00}}} + } +}) +end + +--self-explanatory - taken from original locked chest code +function has_locked_chest_privilege(meta, player) + if player:get_player_name() ~= meta:get_string("owner") then + return false + end + return true +end + +function get_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 + + +--locked node definitions + +--load technic chests +modpath=minetest.get_modpath("lockpicks") + +dofile(modpath.."/defaults.lua") + +--pick recipe definitions +minetest.register_craft({ + output = "lockpicks:lockpick_wood", + recipe = { + {"", "default:stick", "default:stick"}, + {"", "default:stick", ""}, + {"", "default:wood", ""} + } +}) +minetest.register_craft({ + output = "lockpicks:lockpick_steel", + recipe = { + {"", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:steel_ingot", ""}, + {"", "default:wood", ""} + } +}) +minetest.register_craft({ + output = "lockpicks:lockpick_copper", + recipe = { + {"", "default:copper_ingot", "default:copper_ingot"}, + {"", "default:copper_ingot", ""}, + {"", "default:steel_ingot", ""} + } +}) +if has_moreores then +minetest.register_craft({ + output = "lockpicks:lockpick_silver", + recipe = { + {"", "moreores:silver_ingot", "moreores:silver_ingot"}, + {"", "moreores:silver_ingot", ""}, + {"", "default:steel_ingot", ""} + } +}) +end +minetest.register_craft({ + output = "lockpicks:lockpick_gold", + recipe = { + {"", "default:gold_ingot", "default:gold_ingot"}, + {"", "default:gold_ingot", ""}, + {"", "default:steel_ingot", ""} + } +}) +if has_moreores then +minetest.register_craft({ + output = "lockpicks:lockpick_mithril", + recipe = { + {"", "moreores:mithril_ingot", "moreores:mithril_ingot"}, + {"", "moreores:mithril_ingot", ""}, + {"", "default:steel_ingot", ""} + } +}) +end \ No newline at end of file diff --git a/mods/lockpicks/license.txt b/mods/lockpicks/license.txt new file mode 100644 index 0000000..c73f8ae --- /dev/null +++ b/mods/lockpicks/license.txt @@ -0,0 +1,14 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + diff --git a/mods/lockpicks/textures/copper_lockpick.png b/mods/lockpicks/textures/copper_lockpick.png new file mode 100644 index 0000000..f46a6a0 Binary files /dev/null and b/mods/lockpicks/textures/copper_lockpick.png differ diff --git a/mods/lockpicks/textures/gold_lockpick.png b/mods/lockpicks/textures/gold_lockpick.png new file mode 100644 index 0000000..e15502c Binary files /dev/null and b/mods/lockpicks/textures/gold_lockpick.png differ diff --git a/mods/lockpicks/textures/mithril_lockpick.png b/mods/lockpicks/textures/mithril_lockpick.png new file mode 100644 index 0000000..48a9e53 Binary files /dev/null and b/mods/lockpicks/textures/mithril_lockpick.png differ diff --git a/mods/lockpicks/textures/silver_lockpick.png b/mods/lockpicks/textures/silver_lockpick.png new file mode 100644 index 0000000..16caff5 Binary files /dev/null and b/mods/lockpicks/textures/silver_lockpick.png differ diff --git a/mods/lockpicks/textures/steel_lockpick.png b/mods/lockpicks/textures/steel_lockpick.png new file mode 100644 index 0000000..2a9b5fa Binary files /dev/null and b/mods/lockpicks/textures/steel_lockpick.png differ diff --git a/mods/lockpicks/textures/wooden_lockpick.png b/mods/lockpicks/textures/wooden_lockpick.png new file mode 100644 index 0000000..484c344 Binary files /dev/null and b/mods/lockpicks/textures/wooden_lockpick.png differ diff --git a/mods/marker/init.lua b/mods/marker/init.lua new file mode 100644 index 0000000..9c4502d --- /dev/null +++ b/mods/marker/init.lua @@ -0,0 +1,71 @@ +local marker = {} +minetest.register_chatcommand("mrkr", { + params = "[], [], []", + description = "Adds a waypoint marker at the selected position.", + privs = {}, + func = function(name, param) + local x, y, z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + local player = minetest.get_player_by_name(name) + if not z then + minetest.chat_send_player(name, "You must have 3 coordinates!") + return + end + if marker[name] then + player:hud_remove(marker[name]) + end + marker[name] = player:hud_add({ + hud_elem_type = "waypoint", + name = x..", "..y..", "..z, + number = 0xFF0000, + world_pos = {x=x, y=y, z=z} + }) + end +}) +minetest.register_chatcommand("marker", { + params = "[], [], []", + description = "Adds a waypoint marker at the selected position.", + privs = {}, + func = function(name, param) + local x, y, z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$") + local player = minetest.get_player_by_name(name) + if not z then + minetest.chat_send_player(name, "You must have 3 coordinates!") + return + end + if marker[name] then + player:hud_remove(marker[name]) + end + marker[name] = player:hud_add({ + hud_elem_type = "waypoint", + name = x..", "..y..", "..z, + number = 0xFF0000, + world_pos = {x=x, y=y, z=z} + }) + end +}) +minetest.register_chatcommand("clrmrkr", { + params = "", + description = "Removes the marker waypoint.", + privs = {}, + func = function(name) + local player = minetest.get_player_by_name(name) + if marker[name] then + if player:hud_remove(marker[name]) then + marker[name] = nil + end + end + end +}) +minetest.register_chatcommand("clearmarker", { + params = "", + description = "Removes the marker waypoint.", + privs = {}, + func = function(name) + local player = minetest.get_player_by_name(name) + if marker[name] then + if player:hud_remove(marker[name]) then + marker[name] = nil + end + end + end +}) \ No newline at end of file diff --git a/mods/memorandum/depends.txt b/mods/memorandum/depends.txt new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/mods/memorandum/depends.txt @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/mods/memorandum/init.lua b/mods/memorandum/init.lua new file mode 100644 index 0000000..20ff7cd --- /dev/null +++ b/mods/memorandum/init.lua @@ -0,0 +1,362 @@ +----------------------------------------------------------------------------------------------- +local title = "Memorandum" +local version = "0.0.8" +local mname = "memorandum" +----------------------------------------------------------------------------------------------- +-- { left , bottom , front , right , top , back } +local sheet = { -1/2 , -1/2 , -1/2 , 1/2 , -7/16 , 1/2 } +local info = '"' +local sign = '" Signed by ' + +minetest.register_craftitem(":default:paper", { + description = "Paper", + inventory_image = "default_paper.png", + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + local direction = minetest.dir_to_facedir(placer:get_look_dir()) + local there = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + if minetest.env:get_node(there).name == "air" then + minetest.add_node(there, {name="memorandum:letter_empty", param2=direction}) + itemstack:take_item() + return itemstack + end + end, +}) + +minetest.register_node("memorandum:letter_empty", { + drawtype = "nodebox", + tiles = {"memorandum_letter_empty.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + walkable = false, + node_box = {type = "fixed", fixed = sheet}, + groups = {snappy=3,dig_immediate=3,not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string( + "formspec", + "size[10,7]".. + "field[1,1;8.5,1;text; Write a Letter;${text}]".. + "field[1,3;4.25,1;signed; Sign Letter (optional);${signed}]".. + "button_exit[0.75,5;4.25,1;text,signed;Done]".. + "button_exit[0.75,6;4.25,1;exit;Exit]" + ) + meta:set_string("infotext", info..'"') + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + fields.text = fields.text + fields.signed = fields.signed + --[[print((sender:get_player_name() or "").." wrote \""..fields.text.. + "\" to paper at "..minetest.pos_to_string(pos))]] + local direction = minetest.env:get_node(pos).param2 + if fields.text == nil then + fields.text = "" + end + if fields.signed == nil then + fields.signed = "" + end + if fields.text ~= "" then + minetest.env:add_node(pos, {name="memorandum:letter_written", param2=direction}) + end + meta:set_string("text", fields.text) + meta:set_string("signed", "") + meta:set_string("infotext", info..fields.text..'" Unsigned') + if fields.signed ~= "" then + meta:set_string("signed", fields.signed) + meta:set_string("infotext", info..fields.text..sign..fields.signed) + end + end, + on_dig = function(pos, node, digger) + if digger:is_player() and digger:get_inventory() then + digger:get_inventory():add_item("main", {name="default:paper", count=1, wear=0, metadata=""}) + end + minetest.remove_node(pos) + end, +}) + +minetest.register_craftitem("memorandum:letter", { + description = "Letter", + inventory_image = "default_paper.png^memorandum_letters.png", + stack_max = 1, + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + local player = user:get_player_name() + local text = itemstack:get_metadata() + local scnt = string.sub (text, -2, -1) + if scnt == "00" then + mssg = string.sub (text, 1, -3) + sgnd = "" + elseif tonumber(scnt) == nil then -- to support previous versions + mssg = string.sub (text, 37, -1) + sgnd = "" + else + mssg = string.sub (text, 1, -scnt -3) + sgnd = string.sub (text, -scnt-2, -3) + end + if scnt == "00" or tonumber(scnt) == nil then + minetest.chat_send_player(player, info..mssg..'" Unsigned', false) + else + minetest.chat_send_player(player, info..mssg..sign..sgnd, false) + end + end, + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + local there = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local direction = minetest.dir_to_facedir(placer:get_look_dir()) + local meta = minetest.env:get_meta(there) + local text = itemstack:get_metadata() + local scnt = string.sub (text, -2, -1) + if scnt == "00" then + mssg = string.sub (text, 1, -3) + sgnd = "" + elseif tonumber(scnt) == nil then -- to support previous versions + mssg = string.sub (text, 37, -1) + sgnd = "" + else + mssg = string.sub (text, 1, -scnt -3) + sgnd = string.sub (text, -scnt-2, -3) + end + if minetest.env:get_node(there).name == "air" then + minetest.add_node(there, {name="memorandum:letter_written", param2=direction}) + if scnt == "00" or tonumber(scnt) == nil then + meta:set_string("infotext", info..mssg..'" Unsigned') + else + meta:set_string("infotext", info..mssg..sign..sgnd) + end + meta:set_string("text", mssg) + meta:set_string("signed", sgnd) + itemstack:take_item() + return itemstack + end + end, +}) + +minetest.register_node("memorandum:letter_written", { + drawtype = "nodebox", + tiles = {"memorandum_letter_empty.png^memorandum_letter_text.png"}, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + walkable = false, + node_box = {type = "fixed", fixed = sheet}, + groups = {snappy=3,dig_immediate=3,not_in_creative_inventory=1}, + sounds = default.node_sound_leaves_defaults(), + on_receive_fields = function(pos, formname, fields, sender) + local item = sender:get_wielded_item() + if item:get_name() == "memorandum:eraser" then + local meta = minetest.get_meta(pos) + fields.text = fields.text + fields.signed = fields.signed + if fields.text == nil then + fields.text = "" + end + if fields.signed == nil then + fields.signed = "" + end + --[[print((sender:get_player_name() or "").." wrote \""..fields.text.. + "\" to paper at "..minetest.pos_to_string(pos))]] + local direction = minetest.env:get_node(pos).param2 + if fields.text == "" then + minetest.env:add_node(pos, {name="memorandum:letter_empty", param2=direction}) + end + meta:set_string("text", fields.text) + meta:set_string("signed", "") + meta:set_string("infotext", info..fields.text..'" Unsigned') + if fields.signed ~= "" then + meta:set_string("signed", fields.signed) + meta:set_string("infotext", info..fields.text..sign..fields.signed) + end + end + end, + on_dig = function(pos, node, digger) + if digger:is_player() and digger:get_inventory() then + local meta = minetest.get_meta(pos) + local text = meta:get_string("text") + local signed = meta:get_string("signed") + local signcount = string.len(signed) + local item = digger:get_wielded_item() + local inv = digger:get_inventory() + if string.len(signed) < 10 then + signcount = "0"..string.len(signed) + end + if signed == '" Unsigned' then + signcount = "00" + end + if item:get_name() == "vessels:glass_bottle" then + inv:remove_item("main", "vessels:glass_bottle") + inv:add_item("main", {name="memorandum:message", count=1, wear=0, metadata=text..signed..signcount}) + else + inv:add_item("main", {name="memorandum:letter", count=1, wear=0, metadata=text..signed..signcount}) + end + end + minetest.remove_node(pos) + end, +}) + +local function eraser_wear(itemstack, user, pointed_thing, uses) + itemstack:add_wear(65535/(uses-1)) + return itemstack +end + +minetest.register_tool("memorandum:eraser", { + description = "Eraser", + inventory_image = "memorandum_eraser.png", + wield_image = "memorandum_eraser.png^[transformR90",--^[transformFX", + wield_scale = {x = 0.5, y = 0.5, z = 1}, + on_use = function(itemstack, user, pointed_thing) + local pt = pointed_thing + if pt and pt.under then + local node = minetest.get_node(pt.under) + local meta = minetest.get_meta(pt.under) + local player = user:get_player_name() + local signer = meta:get_string("signed") + if string.find(node.name, "memorandum:letter_written") then + if signer == player or signer == "" then + meta:set_string( + "formspec", + "size[10,7]".. + "field[1,1;8.5,1;text; Edit Text;${text}]".. + "field[1,3;4.25,1;signed; Edit Signature;${signed}]".. + "button_exit[0.75,5;4.25,1;text,signed;Done]" + ) + if not minetest.setting_getbool("creative_mode") then + return eraser_wear(itemstack, user, pointed_thing, 30) + else + return {name="memorandum:eraser", count=1, wear=0, metadata=""} + end + end + end + end + end, +}) + +minetest.register_node("memorandum:message", { + description = "Message in a Bottle", + drawtype = "plantlike", + tiles = {"vessels_glass_bottle.png^memorandum_message.png"}, + inventory_image = "vessels_glass_bottle_inv.png^memorandum_message.png", + wield_image = "vessels_glass_bottle.png^memorandum_message.png", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = {-1/4, -1/2, -1/4, 1/4, 4/10, 1/4} + }, + stack_max = 1, + groups = {vessel=1,dig_immediate=3,attached_node=1,not_in_creative_inventory=1}, + --sounds = default.node_sound_glass_defaults(), + on_use = function(itemstack, user, pointed_thing) + local pt = pointed_thing + if pt.under then + local meta = minetest.get_meta(pt.above) + local text = itemstack:get_metadata() + local scnt = string.sub (text, -2, -1) + if scnt == "00" then + mssg = string.sub (text, 1, -3) + sgnd = "" + elseif tonumber(scnt) == nil then -- to support previous versions + mssg = string.sub (text, 37, -1) + sgnd = "" + else + mssg = string.sub (text, 1, -scnt -3) + sgnd = string.sub (text, -scnt-2, -3) + end + if minetest.get_node(pt.above).name == "air" then + minetest.add_node(pt.above, {name="memorandum:letter_written", param2=math.random(0,3)}) + if scnt == "00" or tonumber(scnt) == nil then + meta:set_string("infotext", info..mssg..'" Unsigned') + else + meta:set_string("infotext", info..mssg..sign..sgnd) + end + meta:set_string("text", mssg) + meta:set_string("signed", sgnd) + itemstack:take_item() + user:get_inventory():add_item("main", {name="vessels:glass_bottle", count=1, wear=0, metadata=""}) + return itemstack + end + end + end, + on_place = function(itemstack, placer, pointed_thing) + local pt = pointed_thing + local meta = minetest.get_meta(pt.above) + local text = itemstack:get_metadata() + local scnt = string.sub (text, -2, -1) + if scnt == "00" then + mssg = string.sub (text, 1, -3) + sgnd = "" + elseif tonumber(scnt) == nil then -- to support previous versions + mssg = string.sub (text, 37, -1) + sgnd = "" + else + mssg = string.sub (text, 1, -scnt -3) + sgnd = string.sub (text, -scnt-2, -3) + end + if minetest.get_node(pt.above).name == "air" then + minetest.add_node(pt.above, {name="memorandum:message"}) + meta:set_string("text", mssg) + meta:set_string("signed", sgnd) + itemstack:take_item() + return itemstack + end + end, + on_dig = function(pos, node, digger) + if digger:is_player() and digger:get_inventory() then + local meta = minetest.get_meta(pos) + local text = meta:get_string("text") + local signed = meta:get_string("signed") + local signcount = string.len(signed) + local item = digger:get_wielded_item() + if string.len(signed) < 10 then + signcount = "0"..string.len(signed) + end + if signed == '" Unsigned' then + signcount = "00" + end + digger:get_inventory():add_item("main", {name="memorandum:message", count=1, wear=0, metadata=text..signed..signcount}) + end + minetest.remove_node(pos) + end, +}) + +if minetest.get_modpath("farming") ~= nil then +minetest.register_craft({ + type = "shapeless", + output = "memorandum:eraser", + recipe = {"farming:bread"}, +}) +end +if minetest.get_modpath("candles") ~= nil then +minetest.register_craft({ + type = "shapeless", + output = "memorandum:eraser", + recipe = {"candles:wax"}, +}) +end +if minetest.get_modpath("bees") ~= nil then +minetest.register_craft({ + type = "shapeless", + output = "memorandum:eraser", + recipe = {"bees:honey_comb"}, +}) +end +if minetest.get_modpath("technic") ~= nil then +minetest.register_craft({ + type = "shapeless", + output = "memorandum:eraser", + recipe = {"technic:raw_latex"}, +}) +end + +--[[minetest.register_craft({ + type = "shapeless", + output = "default:paper", + recipe = {"memorandum:letter","memorandum:eraser"}, + replacements = { + {"memorandum:eraser", "memorandum:eraser"} + }, +})]] +----------------------------------------------------------------------------------------------- +print("[Mod] "..title.." ["..version.."] ["..mname.."] Loaded...") +----------------------------------------------------------------------------------------------- diff --git a/mods/memorandum/patch01.txt b/mods/memorandum/patch01.txt new file mode 100644 index 0000000..819a201 --- /dev/null +++ b/mods/memorandum/patch01.txt @@ -0,0 +1,28 @@ +--- memorandum.old/init.lua ++++ memorandum/init.lua +@@ -52,6 +52,12 @@ + --[[print((sender:get_player_name() or "").." wrote \""..fields.text.. + "\" to paper at "..minetest.pos_to_string(pos))]] + local direction = minetest.env:get_node(pos).param2 ++ if fields.text == nil then ++ fields.text = "" ++ end ++ if fields.signed == nil then ++ fields.signed = "" ++ end + if fields.text ~= "" then + minetest.env:add_node(pos, {name="memorandum:letter_written", param2=direction}) + end +@@ -144,6 +150,12 @@ + local meta = minetest.get_meta(pos) + fields.text = fields.text + fields.signed = fields.signed ++ if fields.text == nil then ++ fields.text = "" ++ end ++ if fields.signed == nil then ++ fields.signed = "" ++ end + --[[print((sender:get_player_name() or "").." wrote \""..fields.text.. + "\" to paper at "..minetest.pos_to_string(pos))]] + local direction = minetest.env:get_node(pos).param2 diff --git a/mods/memorandum/textures/alternates/memorandum_eraser.png b/mods/memorandum/textures/alternates/memorandum_eraser.png new file mode 100644 index 0000000..4ec390e Binary files /dev/null and b/mods/memorandum/textures/alternates/memorandum_eraser.png differ diff --git a/mods/memorandum/textures/memorandum_eraser.png b/mods/memorandum/textures/memorandum_eraser.png new file mode 100644 index 0000000..1b25084 Binary files /dev/null and b/mods/memorandum/textures/memorandum_eraser.png differ diff --git a/mods/memorandum/textures/memorandum_letter_empty.png b/mods/memorandum/textures/memorandum_letter_empty.png new file mode 100644 index 0000000..1c9f6ba Binary files /dev/null and b/mods/memorandum/textures/memorandum_letter_empty.png differ diff --git a/mods/memorandum/textures/memorandum_letter_text.png b/mods/memorandum/textures/memorandum_letter_text.png new file mode 100644 index 0000000..81f27af Binary files /dev/null and b/mods/memorandum/textures/memorandum_letter_text.png differ diff --git a/mods/memorandum/textures/memorandum_letters.png b/mods/memorandum/textures/memorandum_letters.png new file mode 100644 index 0000000..fb25500 Binary files /dev/null and b/mods/memorandum/textures/memorandum_letters.png differ diff --git a/mods/memorandum/textures/memorandum_message.png b/mods/memorandum/textures/memorandum_message.png new file mode 100644 index 0000000..8a82157 Binary files /dev/null and b/mods/memorandum/textures/memorandum_message.png differ diff --git a/mods/memorandum/textures/not in use/memorandum_seal.png b/mods/memorandum/textures/not in use/memorandum_seal.png new file mode 100644 index 0000000..6c5208a Binary files /dev/null and b/mods/memorandum/textures/not in use/memorandum_seal.png differ diff --git a/mods/mesecons/.gitignore b/mods/mesecons/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/mods/mesecons/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/mods/mesecons/COPYING.txt b/mods/mesecons/COPYING.txt new file mode 100644 index 0000000..61bf7e2 --- /dev/null +++ b/mods/mesecons/COPYING.txt @@ -0,0 +1,30 @@ +The Mesecons Mod for Minetest is + Copyright (C) 2011-2016 Mesecons Mod Developer Team and contributors + +See the version control system log for information about other authors. + +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. + +License of media (textures, sounds and documentation) +----------------------------------------------------- +Copyright (C) 2011-2016 Mesecons Mod Developer Team and contributors + +All textures, sounds and documentation files are licensed under the +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/mesecons/LICENSE.txt b/mods/mesecons/LICENSE.txt new file mode 100644 index 0000000..0d2fd18 --- /dev/null +++ b/mods/mesecons/LICENSE.txt @@ -0,0 +1,532 @@ +The LGPLv3 applies to all code in this project. +The CC-BY-SA-3.0 license applies to textures and any other content in this project which is not source code. + +================================================================= + +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. + +================================================================= + +Creative Commons Legal Code + +Attribution-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +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 + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined below) for the purposes of this + License. + c. "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 adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same + License Elements as this License. + d. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + g. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + h. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + i. "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. + j. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + k. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(c), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(c), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You + Distribute or Publicly Perform; (II) You may not offer or impose any + terms on the Adaptation that restrict the terms of the Applicable + License or the ability of the recipient of the Adaptation to exercise + the rights granted to that recipient under the terms of the Applicable + License; (III) You must keep intact all notices that refer to the + Applicable License and to the disclaimer of warranties with every copy + of the Work as included in the Adaptation You Distribute or Publicly + Perform; (IV) when You Distribute or Publicly Perform the Adaptation, + You may not impose any effective technological measures on the + Adaptation that restrict the ability of a recipient of the Adaptation + from You to exercise the rights granted to that recipient under the + terms of the Applicable License. This Section 4(b) applies to the + Adaptation as incorporated in a Collection, but this does not require + the Collection apart from the Adaptation itself to be made subject to + the terms of the Applicable License. + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Ssection 3(b), in the case of an + Adaptation, a credit identifying the use of the Work in the Adaptation + (e.g., "French translation of the Work by Original Author," or + "Screenplay based on original Work by Original Author"). The credit + required by this Section 4(c) may be implemented in any reasonable + manner; provided, however, that in the case of a Adaptation or + Collection, at a minimum such credit will appear, if a credit for all + contributing authors of the Adaptation or Collection appears, then as + part of these credits and in a manner at least as prominent as the + credits for the other contributing authors. For the avoidance of + doubt, You may only use the credit required by this Section for the + purpose of attribution in the manner set out above and, by exercising + Your rights under this License, You may not implicitly or explicitly + assert or imply any connection with, sponsorship or endorsement by the + Original Author, Licensor and/or Attribution Parties, as appropriate, + of You or Your use of the Work, without the separate, express prior + written permission of the Original Author, Licensor and/or Attribution + Parties. + d. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. 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 + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. 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. + d. 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. + e. 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. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of the License. + + Creative Commons may be contacted at http://creativecommons.org/. diff --git a/mods/mesecons/README.md b/mods/mesecons/README.md new file mode 100644 index 0000000..37cd2d5 --- /dev/null +++ b/mods/mesecons/README.md @@ -0,0 +1,79 @@ + ######################################################################## + ## __ __ _____ _____ _____ _____ _____ _ _ _____ ## + ## | \ / | | ___| | ___| | ___| | ___| | _ | | \ | | | ___| ## + ## | \/ | | |___ | |___ | |___ | | | | | | | \| | | |___ ## + ## | |\__/| | | ___| |___ | | ___| | | | | | | | | |___ | ## + ## | | | | | |___ ___| | | |___ | |___ | |_| | | |\ | ___| | ## + ## |_| |_| |_____| |_____| |_____| |_____| |_____| |_| \_| |_____| ## + ## ## + ######################################################################## + +MESECONS by Jeija and contributors + +Mezzee-what? +------------ +[Mesecons](http://mesecons.net/)! They're yellow, they're conductive, and they'll add a whole new dimension to Minetest's gameplay. + +Mesecons is a mod for [Minetest](http://minetest.net/) that implements a ton of items related to digital circuitry, such as wires, buttons, lights, and even programmable controllers. Among other things, there are also pistons, solar panels, pressure plates, and note blocks. + +Mesecons has a similar goal to Redstone in Minecraft, but works in its own way, with different rules and mechanics. + +OK, I want in. +-------------- +Go get it! + +[DOWNLOAD IT NOW](https://github.com/Jeija/minetest-mod-mesecons/archive/master.zip) + +Now go ahead and install it like any other Minetest mod. Don't know how? Check out [the wonderful page about it](http://wiki.minetest.com/wiki/Mods) over at the Minetest Wiki. For your convenience, here's a quick summary: + +1. If Mesecons is still in a ZIP file, extract the folder inside to somewhere on the computer. +2. Make sure that when you open the folder, you can directly find `README.md` in the listing. If you just see another folder, move that folder up one level and delete the old one. +3. Open up the Minetest mods folder - usually `/mods/`. If you see the `minetest` or folder inside of that, that is your mod folder instead. +4. Copy the Mesecons folder into the mods folder. + +Don't like some parts of Mesecons? Open up the Mesecons folder and delete the subfolder containing the mod you don't want. If you didn't want movestones, for example, all you have to do is delete the `mesecons_movestones` folder and they will no longer be available. + +There are no dependencies - it will work right after installing! + +How do I use this thing? +------------------------ +How about a [quick overview video](https://www.youtube.com/watch?v=6kmeQj6iW5k)? + +Or maybe a [comprehensive reference](http://mesecons.net/items.html) is your style? + +An overview for the very newest of new beginners? How does [this one](http://uberi.mesecons.net/projects/MeseconsBasics/index.html) look? + +Want to get more into building? Why not check out the [Mesecons Laboratory](http://uberi.mesecons.net/), a website dedicated to advanced Mesecons builders? + +Want to contribute to Mesecons itself? Check out the [source code](https://github.com/Jeija/minetest-mod-mesecons)! + +Who wrote it anyways? +--------------------- +These awesome people made Mesecons possible! + +| Contributor | Contribution | +| --------------- | -------------------------------- | +| Hawk777 | Code for VoxelManip caching | +| Jat15 | Various tweaks. | +| Jeija | **Main developer! Everything.** | +| Jordach | Noteblock sounds. | +| khonkhortistan | Code, recipes, textures. | +| Kotolegokot | Nodeboxes for items. | +| minerd247 | Textures. | +| Nore/Novatux | Code. | +| RealBadAngel | Fixes, improvements. | +| sfan5 | Code, recipes, textures. | +| suzenako | Piston sounds. | +| Uberi/Temperest | Code, textures, documentation. | +| VanessaE | Code, recipes, textures, design. | +| Whiskers75 | Logic gates implementation. | + +There are also a whole bunch of other people helping with everything from code to testing and feedback. Mesecons would also not be possible without their help! + +Alright, how can I use it? +-------------------------- +All textures in this project are licensed under the CC-BY-SA 3.0 (Creative Commons Attribution-ShareAlike 3.0 Generic). That means you can distribute and remix them as much as you want to, under the condition that you give credit to the authors and the project, and that if you remix and release them, they must be under the same or similar license to this one. + +All code in this project is licensed under the LGPL version 3 or later. That means you have unlimited freedom to distribute and modify the work however you see fit, provided that if you decide to distribute it or any modified versions of it, you must also use the same license. The LGPL also grants the additional freedom to write extensions for the software and distribute them without the extensions being subject to the terms of the LGPL, although the software itself retains its license. + +No warranty is provided, express or implied, for any part of the project. diff --git a/mods/mesecons/documentation.json b/mods/mesecons/documentation.json new file mode 100644 index 0000000..f318501 --- /dev/null +++ b/mods/mesecons/documentation.json @@ -0,0 +1,64 @@ +{ + "Conductors" : { + "Mesecon" : "mesecons_wires/doc/mesecon", + "Insulated Wire" : "mesecons_insulated/doc/insulated", + "T-Junction" : "mesecons_extrawires/doc/tjunction", + "Crossing" : "mesecons_extrawires/doc/crossing", + "Corner" : "mesecons_extrawires/doc/corner", + "Vertical Wire" : "mesecons_extrawires/doc/vertical", + "Mese" : "mesecons_extrawires/doc/mese" + }, + "Receptors" : { + "Power Plant" : "mesecons_powerplant/doc/powerplant", + "Blinky Plant" : "mesecons_blinkyplant/doc/blinkyplant", + "Switch" : "mesecons_switch/doc/switch", + "Object Detector" : "mesecons_detector/doc/objectdetector", + "Node Detector" : "mesecons_detector/doc/nodedetector", + "Wall Lever" : "mesecons_walllever/doc/walllever", + "Pressure Plate" : "mesecons_pressureplates/doc/pressureplate_wood", + "Pressure Plate" : "mesecons_pressureplates/doc/pressureplate_stone", + "Water Turbine" : "mesecons_hydroturbine/doc/waterturbine", + "Solar Panel" : "mesecons_solarpanel/doc/solarpanel", + "Wall Button" : "mesecons_button/doc/button" + }, + "Effectors" : { + "Noteblock" : "mesecons_noteblock/doc/noteblock", + "Lamp" : "mesecons_lamp/doc/lamp", + "Piston" : "mesecons_pistons/doc/piston", + "Sticky Piston" : "mesecons_pistons/doc/piston_sticky", + "Movestone" : "mesecons_movestones/doc/movestone", + "Sticky Movestone" : "mesecons_movestones/doc/movestone_sticky", + "Removestone" : "mesecons_random/doc/removestone", + "Ghoststone" : "mesecons_random/doc/ghoststone", + "Command Block" : "mesecons_commandblock/doc/commandblock", + "Lightstones" : { + "Dark Grey" : "mesecons_lightstone/doc/lightstone_darkgrey", + "Light Grey" : "mesecons_lightstone/doc/lightstone_lightgrey", + "Green" : "mesecons_lightstone/doc/lightstone_green", + "Red" : "mesecons_lightstone/doc/lightstone_red", + "Blue" : "mesecons_lightstone/doc/lightstone_blue", + "Yellow" : "mesecons_lightstone/doc/lightstone_yellow" + } + }, + "Logic" : { + "Luacontroller" : "mesecons_luacontroller/doc/luacontroller", + "FPGA" : "mesecons_fpga/doc/fpga", + "FPGA Programmer" : "mesecons_fpga/doc/programmer", + "Torch" : "mesecons_torch/doc/torch", + "Delayer" : "mesecons_delayer/doc/delayer", + "Gates" : { + "Diode" : "mesecons_gates/doc/diode", + "NOT Gate" : "mesecons_gates/doc/not", + "AND Gate" : "mesecons_gates/doc/and", + "NAND Gate" : "mesecons_gates/doc/nand", + "OR Gate" : "mesecons_gates/doc/or", + "NOR Gate" : "mesecons_gates/doc/nor", + "XOR Gate" : "mesecons_gates/doc/xor" + } + }, + "Crafts" : { + "Silicon" : "mesecons_materials/doc/silicon", + "Glue" : "mesecons_materials/doc/glue", + "Fiber" : "mesecons_materials/doc/fiber" + } +} diff --git a/mods/mesecons/mesecons/actionqueue.lua b/mods/mesecons/mesecons/actionqueue.lua new file mode 100644 index 0000000..f3479ce --- /dev/null +++ b/mods/mesecons/mesecons/actionqueue.lua @@ -0,0 +1,105 @@ +mesecon.queue.actions={} -- contains all ActionQueue actions + +function mesecon.queue:add_function(name, func) + mesecon.queue.funcs[name] = func +end + +-- If add_action with twice the same overwritecheck and same position are called, the first one is overwritten +-- use overwritecheck nil to never overwrite, but just add the event to the queue +-- priority specifies the order actions are executed within one globalstep, highest first +-- should be between 0 and 1 +function mesecon.queue:add_action(pos, func, params, time, overwritecheck, priority) + -- Create Action Table: + time = time or 0 -- time <= 0 --> execute, time > 0 --> wait time until execution + priority = priority or 1 + local action = { pos=mesecon.tablecopy(pos), + func=func, + params=mesecon.tablecopy(params or {}), + time=time, + owcheck=(overwritecheck and mesecon.tablecopy(overwritecheck)) or nil, + priority=priority} + + local toremove = nil + -- Otherwise, add the action to the queue + if overwritecheck then -- check if old action has to be overwritten / removed: + for i, ac in ipairs(mesecon.queue.actions) do + if(vector.equals(pos, ac.pos) + and mesecon.cmpAny(overwritecheck, ac.owcheck)) then + toremove = i + break + end + end + end + + if (toremove ~= nil) then + table.remove(mesecon.queue.actions, toremove) + end + + table.insert(mesecon.queue.actions, action) +end + +-- execute the stored functions on a globalstep +-- if however, the pos of a function is not loaded (get_node_or_nil == nil), do NOT execute the function +-- this makes sure that resuming mesecons circuits when restarting minetest works fine +-- However, even that does not work in some cases, that's why we delay the time the globalsteps +-- start to be execute by 5 seconds +local get_highest_priority = function (actions) + local highestp = -1 + local highesti + for i, ac in ipairs(actions) do + if ac.priority > highestp then + highestp = ac.priority + highesti = i + end + end + + return highesti +end + +local m_time = 0 +local resumetime = mesecon.setting("resumetime", 4) +minetest.register_globalstep(function (dtime) + m_time = m_time + dtime + -- don't even try if server has not been running for XY seconds; resumetime = time to wait + -- after starting the server before processing the ActionQueue, don't set this too low + if (m_time < resumetime) then return end + local actions = mesecon.tablecopy(mesecon.queue.actions) + local actions_now={} + + mesecon.queue.actions = {} + + -- sort actions into two categories: + -- those toexecute now (actions_now) and those to execute later (mesecon.queue.actions) + for i, ac in ipairs(actions) do + if ac.time > 0 then + ac.time = ac.time - dtime -- executed later + table.insert(mesecon.queue.actions, ac) + else + table.insert(actions_now, ac) + end + end + + while(#actions_now > 0) do -- execute highest priorities first, until all are executed + local hp = get_highest_priority(actions_now) + mesecon.queue:execute(actions_now[hp]) + table.remove(actions_now, hp) + end +end) + +function mesecon.queue:execute(action) + -- ignore if action queue function name doesn't exist, + -- (e.g. in case the action queue savegame was written by an old mesecons version) + if mesecon.queue.funcs[action.func] then + mesecon.queue.funcs[action.func](action.pos, unpack(action.params)) + end +end + + +-- Store and read the ActionQueue to / from a file +-- so that upcoming actions are remembered when the game +-- is restarted +mesecon.queue.actions = mesecon.file2table("mesecon_actionqueue") + +minetest.register_on_shutdown(function() + mesecon.table2file("mesecon_actionqueue", mesecon.queue.actions) +end) diff --git a/mods/mesecons/mesecons/depends.txt b/mods/mesecons/mesecons/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/mesecons/mesecons/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/mesecons/mesecons/init.lua b/mods/mesecons/mesecons/init.lua new file mode 100644 index 0000000..83e611b --- /dev/null +++ b/mods/mesecons/mesecons/init.lua @@ -0,0 +1,128 @@ +-- |\ /| ____ ____ ____ _____ ____ _____ +-- | \ / | | | | | | | |\ | | +-- | \/ | |___ ____ |___ | | | | \ | |____ +-- | | | | | | | | | \ | | +-- | | |___ ____| |___ |____ |____| | \| ____| +-- by Jeija, Uberi (Temperest), sfan5, VanessaE, Hawk777 and contributors +-- +-- +-- +-- This mod adds mesecons[=minecraft redstone] and different receptors/effectors to minetest. +-- See the documentation on the forum for additional information, especially about crafting +-- +-- +-- For basic development resources, see http://mesecons.net/developers.html +-- +-- +-- +--Quick draft for the mesecons array in the node's definition +--mesecons = +--{ +-- receptor = +-- { +-- state = mesecon.state.on/off +-- rules = rules/get_rules +-- }, +-- effector = +-- { +-- action_on = function +-- action_off = function +-- action_change = function +-- rules = rules/get_rules +-- }, +-- conductor = +-- { +-- state = mesecon.state.on/off +-- offstate = opposite state (for state = on only) +-- onstate = opposite state (for state = off only) +-- rules = rules/get_rules +-- } +--} + +-- PUBLIC VARIABLES +mesecon={} -- contains all functions and all global variables +mesecon.queue={} -- contains the ActionQueue +mesecon.queue.funcs={} -- contains all ActionQueue functions + +-- Settings +dofile(minetest.get_modpath("mesecons").."/settings.lua") + +-- Utilities like comparing positions, +-- adding positions and rules, +-- mostly things that make the source look cleaner +dofile(minetest.get_modpath("mesecons").."/util.lua"); + +-- Presets (eg default rules) +dofile(minetest.get_modpath("mesecons").."/presets.lua"); + +-- The ActionQueue +-- Saves all the actions that have to be execute in the future +dofile(minetest.get_modpath("mesecons").."/actionqueue.lua"); + +-- Internal stuff +-- This is the most important file +-- it handles signal transmission and basically everything else +-- It is also responsible for managing the nodedef things, +-- like calling action_on/off/change +dofile(minetest.get_modpath("mesecons").."/internal.lua"); + +-- API +-- these are the only functions you need to remember + +mesecon.queue:add_function("receptor_on", function (pos, rules) + mesecon.vm_begin() + + rules = rules or mesecon.rules.default + + -- Call turnon on all linking positions + for _, rule in ipairs(mesecon.flattenrules(rules)) do + local np = vector.add(pos, rule) + local rulenames = mesecon.rules_link_rule_all(pos, rule) + for _, rulename in ipairs(rulenames) do + mesecon.turnon(np, rulename) + end + end + + mesecon.vm_commit() +end) + +function mesecon.receptor_on(pos, rules) + mesecon.queue:add_action(pos, "receptor_on", {rules}, nil, rules) +end + +mesecon.queue:add_function("receptor_off", function (pos, rules) + rules = rules or mesecon.rules.default + + -- Call turnoff on all linking positions + for _, rule in ipairs(mesecon.flattenrules(rules)) do + local np = vector.add(pos, rule) + local rulenames = mesecon.rules_link_rule_all(pos, rule) + for _, rulename in ipairs(rulenames) do + mesecon.vm_begin() + mesecon.changesignal(np, minetest.get_node(np), rulename, mesecon.state.off, 2) + + -- Turnoff returns true if turnoff process was successful, no onstate receptor + -- was found along the way. Commit changes that were made in voxelmanip. If turnoff + -- returns true, an onstate receptor was found, abort voxelmanip transaction. + if (mesecon.turnoff(np, rulename)) then + mesecon.vm_commit() + else + mesecon.vm_abort() + end + end + end +end) + +function mesecon.receptor_off(pos, rules) + mesecon.queue:add_action(pos, "receptor_off", {rules}, nil, rules) +end + + +print("[OK] Mesecons") + +-- Deprecated stuff +-- To be removed in future releases +dofile(minetest.get_modpath("mesecons").."/legacy.lua"); + +--Services like turnoff receptor on dignode and so on +dofile(minetest.get_modpath("mesecons").."/services.lua"); diff --git a/mods/mesecons/mesecons/internal.lua b/mods/mesecons/mesecons/internal.lua new file mode 100644 index 0000000..e5ba91e --- /dev/null +++ b/mods/mesecons/mesecons/internal.lua @@ -0,0 +1,599 @@ +-- 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/mesecons/mesecons/legacy.lua b/mods/mesecons/mesecons/legacy.lua new file mode 100644 index 0000000..ad7093a --- /dev/null +++ b/mods/mesecons/mesecons/legacy.lua @@ -0,0 +1,14 @@ +-- Un-forceload any forceloaded mapblocks from older versions of Mesecons which +-- used forceloading instead of VoxelManipulators. +local BLOCKSIZE = 16 + +-- convert block hash --> node position +local function unhash_blockpos(hash) + return vector.multiply(minetest.get_position_from_hash(hash), BLOCKSIZE) +end + +local old_forceloaded_blocks = mesecon.file2table("mesecon_forceloaded") +for hash, _ in pairs(old_forceloaded_blocks) do + minetest.forceload_free_block(unhash_blockpos(hash)) +end +os.remove(minetest.get_worldpath()..DIR_DELIM.."mesecon_forceloaded") diff --git a/mods/mesecons/mesecons/oldwires.lua b/mods/mesecons/mesecons/oldwires.lua new file mode 100644 index 0000000..b3b09e5 --- /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 = 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/mesecons/mesecons/presets.lua b/mods/mesecons/mesecons/presets.lua new file mode 100644 index 0000000..8c3ed67 --- /dev/null +++ b/mods/mesecons/mesecons/presets.lua @@ -0,0 +1,62 @@ +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/mesecons/mesecons/services.lua b/mods/mesecons/mesecons/services.lua new file mode 100644 index 0000000..1abbc0c --- /dev/null +++ b/mods/mesecons/mesecons/services.lua @@ -0,0 +1,95 @@ +-- 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 + +-- returns true if heat is too high +mesecon.do_overheat = function(pos) + local meta = minetest.get_meta(pos) + local heat = meta:get_int("heat") or 0 + + heat = heat + 1 + meta:set_int("heat", heat) + + if heat < mesecon.setting("overheat_max", 20) then + mesecon.queue:add_action(pos, "cooldown", {}, 1, nil, 0) + else + return true + end + + return false +end + + +mesecon.queue:add_function("cooldown", function (pos) + local meta = minetest.get_meta(pos) + local heat = meta:get_int("heat") + + if (heat > 0) then + meta:set_int("heat", heat - 1) + end +end) diff --git a/mods/mesecons/mesecons/settings.lua b/mods/mesecons/mesecons/settings.lua new file mode 100644 index 0000000..1ebbfde --- /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.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/mesecons/mesecons/textures/jeija_close_window.png b/mods/mesecons/mesecons/textures/jeija_close_window.png new file mode 100644 index 0000000..5c27c6c Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_close_window.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png new file mode 100644 index 0000000..64526cf Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_A.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png new file mode 100644 index 0000000..1f7b451 Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_B.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png new file mode 100644 index 0000000..399cc2c Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_C.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png new file mode 100644 index 0000000..506389c Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_LED_D.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_bottom.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_bottom.png new file mode 100644 index 0000000..3a9161e Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_bottom.png differ diff --git a/mods/mesecons/mesecons/textures/jeija_microcontroller_sides.png b/mods/mesecons/mesecons/textures/jeija_microcontroller_sides.png new file mode 100644 index 0000000..b367644 Binary files /dev/null and b/mods/mesecons/mesecons/textures/jeija_microcontroller_sides.png differ diff --git a/mods/mesecons/mesecons/textures/mesecons_wire_inv.png b/mods/mesecons/mesecons/textures/mesecons_wire_inv.png new file mode 100644 index 0000000..a3930cb Binary files /dev/null and b/mods/mesecons/mesecons/textures/mesecons_wire_inv.png differ diff --git a/mods/mesecons/mesecons/textures/mesecons_wire_off.png b/mods/mesecons/mesecons/textures/mesecons_wire_off.png new file mode 100644 index 0000000..58164fa Binary files /dev/null and b/mods/mesecons/mesecons/textures/mesecons_wire_off.png differ diff --git a/mods/mesecons/mesecons/textures/mesecons_wire_on.png b/mods/mesecons/mesecons/textures/mesecons_wire_on.png new file mode 100644 index 0000000..98a86c8 Binary files /dev/null and b/mods/mesecons/mesecons/textures/mesecons_wire_on.png differ diff --git a/mods/mesecons/mesecons/util.lua b/mods/mesecons/mesecons/util.lua new file mode 100644 index 0000000..39f5696 --- /dev/null +++ b/mods/mesecons/mesecons/util.lua @@ -0,0 +1,390 @@ +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/mesecons/mesecons_alias/depends.txt b/mods/mesecons/mesecons_alias/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_alias/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_alias/init.lua b/mods/mesecons/mesecons_alias/init.lua new file mode 100644 index 0000000..395c368 --- /dev/null +++ b/mods/mesecons/mesecons_alias/init.lua @@ -0,0 +1,38 @@ +-- This file registers aliases for the /give /giveme commands. + +minetest.register_alias("mesecons:removestone", "mesecons_random:removestone") +minetest.register_alias("mesecons:power_plant", "mesecons_powerplant:power_plant") +minetest.register_alias("mesecons:powerplant", "mesecons_powerplant:power_plant") +minetest.register_alias("mesecons:meselamp", "mesecons_lamp:lamp_off") +minetest.register_alias("mesecons:mesecon", "mesecons:wire_00000000_off") +minetest.register_alias("mesecons:object_detector", "mesecons_detector:object_detector_off") +minetest.register_alias("mesecons:wireless_inverter", "mesecons_wireless:wireless_inverter_on") +minetest.register_alias("mesecons:wireless_receiver", "mesecons_wireless:wireless_receiver_off") +minetest.register_alias("mesecons:wireless_transmitter", "mesecons_wireless:wireless_transmitter_off") +minetest.register_alias("mesecons:switch", "mesecons_switch:mesecon_switch_off") +minetest.register_alias("mesecons:button", "mesecons_button:button_off") +minetest.register_alias("mesecons:piston", "mesecons_pistons:piston_normal_off") +minetest.register_alias("mesecons:blinky_plant", "mesecons_blinkyplant:blinky_plant_off") +minetest.register_alias("mesecons:mesecon_torch", "mesecons_torch:mesecon_torch_on") +minetest.register_alias("mesecons:torch", "mesecons_torch:mesecon_torch_on") +minetest.register_alias("mesecons:hydro_turbine", "mesecons_hydroturbine:hydro_turbine_off") +minetest.register_alias("mesecons:pressure_plate_stone", "mesecons_pressureplates:pressure_plate_stone_off") +minetest.register_alias("mesecons:pressure_plate_wood", "mesecons_pressureplates:pressure_plate_wood_off") +minetest.register_alias("mesecons:mesecon_socket", "mesecons_temperest:mesecon_socket_off") +minetest.register_alias("mesecons:mesecon_inverter", "mesecons_temperest:mesecon_inverter_on") +minetest.register_alias("mesecons:movestone", "mesecons_movestones:movestone") +minetest.register_alias("mesecons:sticky_movestone", "mesecons_movestones:sticky_movestone") +minetest.register_alias("mesecons:noteblock", "mesecons_noteblock:noteblock") +minetest.register_alias("mesecons:microcontroller", "mesecons_microcontroller:microcontroller0000") +minetest.register_alias("mesecons:delayer", "mesecons_delayer:delayer_off_1") +minetest.register_alias("mesecons:solarpanel", "mesecons_solarpanel:solar_panel_off") + + +--Backwards compatibility +minetest.register_alias("mesecons:mesecon_off", "mesecons:wire_00000000_off") +minetest.register_alias("mesecons_pistons:piston_sticky", "mesecons_pistons:piston_sticky_on") +minetest.register_alias("mesecons_pistons:piston_normal", "mesecons_pistons:piston_normal_on") +minetest.register_alias("mesecons_pistons:piston_up_normal", "mesecons_pistons:piston_up_normal_on") +minetest.register_alias("mesecons_pistons:piston_down_normal", "mesecons_pistons:piston_down_normal_on") +minetest.register_alias("mesecons_pistons:piston_up_sticky", "mesecons_pistons:piston_up_sticky_on") +minetest.register_alias("mesecons_pistons:piston_down_sticky", "mesecons_pistons:piston_down_sticky_on") diff --git a/mods/mesecons/mesecons_blinkyplant/depends.txt b/mods/mesecons/mesecons_blinkyplant/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_blinkyplant/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html new file mode 100644 index 0000000..2a7db48 --- /dev/null +++ b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/description.html @@ -0,0 +1 @@ +The blinky plants toggles between on and off state every three seconds. Can be used to make clocks. Also works after having restarted the game. diff --git a/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png new file mode 100644 index 0000000..40ce5b5 Binary files /dev/null and b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/preview.png differ diff --git a/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png new file mode 100644 index 0000000..6f1e148 Binary files /dev/null and b/mods/mesecons/mesecons_blinkyplant/doc/blinkyplant/recipe.png differ diff --git a/mods/mesecons/mesecons_blinkyplant/init.lua b/mods/mesecons/mesecons_blinkyplant/init.lua new file mode 100644 index 0000000..8d2aa6e --- /dev/null +++ b/mods/mesecons/mesecons_blinkyplant/init.lua @@ -0,0 +1,51 @@ +-- 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/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png new file mode 100644 index 0000000..4f507da Binary files /dev/null and b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_off.png differ diff --git a/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png new file mode 100644 index 0000000..f77a134 Binary files /dev/null and b/mods/mesecons/mesecons_blinkyplant/textures/jeija_blinky_plant_on.png differ diff --git a/mods/mesecons/mesecons_button/depends.txt b/mods/mesecons/mesecons_button/depends.txt new file mode 100644 index 0000000..19c798c --- /dev/null +++ b/mods/mesecons/mesecons_button/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_receiver diff --git a/mods/mesecons/mesecons_button/doc/button/description.html b/mods/mesecons/mesecons_button/doc/button/description.html new file mode 100644 index 0000000..ae6bf07 --- /dev/null +++ b/mods/mesecons/mesecons_button/doc/button/description.html @@ -0,0 +1 @@ +This receptor can be attached to walls. It turns on for 1 second if it's punched. diff --git a/mods/mesecons/mesecons_button/doc/button/preview.png b/mods/mesecons/mesecons_button/doc/button/preview.png new file mode 100644 index 0000000..b69f8f4 Binary files /dev/null and b/mods/mesecons/mesecons_button/doc/button/preview.png differ diff --git a/mods/mesecons/mesecons_button/doc/button/recipe.png b/mods/mesecons/mesecons_button/doc/button/recipe.png new file mode 100644 index 0000000..c6232b4 Binary files /dev/null and b/mods/mesecons/mesecons_button/doc/button/recipe.png differ diff --git a/mods/mesecons/mesecons_button/init.lua b/mods/mesecons/mesecons_button/init.lua new file mode 100644 index 0000000..11c328c --- /dev/null +++ b/mods/mesecons/mesecons_button/init.lua @@ -0,0 +1,100 @@ +-- 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 not been dug + 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 +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.after(1, mesecon.button_turnoff, pos) + 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 + }} +}) + +minetest.register_craft({ + output = "mesecons_button:button_off 2", + recipe = { + {"group:mesecon_conductor_craftable","default:stone"}, + } +}) diff --git a/mods/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg b/mods/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg new file mode 100644 index 0000000..9d56bb8 Binary files /dev/null and b/mods/mesecons/mesecons_button/sounds/mesecons_button_pop.ogg differ diff --git a/mods/mesecons/mesecons_button/sounds/mesecons_button_push.ogg b/mods/mesecons/mesecons_button/sounds/mesecons_button_push.ogg new file mode 100644 index 0000000..53d45c1 Binary files /dev/null and b/mods/mesecons/mesecons_button/sounds/mesecons_button_push.ogg differ diff --git a/mods/mesecons/mesecons_button/textures/jeija_wall_button_off.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_off.png new file mode 100644 index 0000000..0e3ff25 Binary files /dev/null and b/mods/mesecons/mesecons_button/textures/jeija_wall_button_off.png differ diff --git a/mods/mesecons/mesecons_button/textures/jeija_wall_button_on.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_on.png new file mode 100644 index 0000000..1d97464 Binary files /dev/null and b/mods/mesecons/mesecons_button/textures/jeija_wall_button_on.png differ diff --git a/mods/mesecons/mesecons_button/textures/jeija_wall_button_sides.png b/mods/mesecons/mesecons_button/textures/jeija_wall_button_sides.png new file mode 100644 index 0000000..9b79b57 Binary files /dev/null and b/mods/mesecons/mesecons_button/textures/jeija_wall_button_sides.png differ diff --git a/mods/mesecons/mesecons_commandblock/depends.txt b/mods/mesecons/mesecons_commandblock/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_commandblock/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_commandblock/doc/commandblock/description.html b/mods/mesecons/mesecons_commandblock/doc/commandblock/description.html new file mode 100644 index 0000000..405b7e55 --- /dev/null +++ b/mods/mesecons/mesecons_commandblock/doc/commandblock/description.html @@ -0,0 +1 @@ +There is no crafting recipe as this should only be available for server admins. Quite similar to the Minecraft counterpart. Executes server commands. diff --git a/mods/mesecons/mesecons_commandblock/doc/commandblock/preview.png b/mods/mesecons/mesecons_commandblock/doc/commandblock/preview.png new file mode 100644 index 0000000..d89cc7b Binary files /dev/null and b/mods/mesecons/mesecons_commandblock/doc/commandblock/preview.png differ diff --git a/mods/mesecons/mesecons_commandblock/init.lua b/mods/mesecons/mesecons_commandblock/init.lua new file mode 100644 index 0000000..6cd0027 --- /dev/null +++ b/mods/mesecons/mesecons_commandblock/init.lua @@ -0,0 +1,208 @@ +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/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png new file mode 100644 index 0000000..c05b616 Binary files /dev/null and b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_off.png differ diff --git a/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png new file mode 100644 index 0000000..7fc35b6 Binary files /dev/null and b/mods/mesecons/mesecons_commandblock/textures/jeija_commandblock_on.png differ diff --git a/mods/mesecons/mesecons_delayer/depends.txt b/mods/mesecons/mesecons_delayer/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_delayer/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_delayer/doc/delayer/description.html b/mods/mesecons/mesecons_delayer/doc/delayer/description.html new file mode 100644 index 0000000..f3a5280 --- /dev/null +++ b/mods/mesecons/mesecons_delayer/doc/delayer/description.html @@ -0,0 +1 @@ +The delayer delays the signal from the input for a determined time. The time can be set by punching the delayer. Possible delays are: 0.1 seconds, 0.3 seconds, 0.5 seconds and 1 second. You may try to use it for creating songs with the noteblock. diff --git a/mods/mesecons/mesecons_delayer/doc/delayer/preview.png b/mods/mesecons/mesecons_delayer/doc/delayer/preview.png new file mode 100644 index 0000000..c57c728 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/doc/delayer/preview.png differ diff --git a/mods/mesecons/mesecons_delayer/doc/delayer/recipe.png b/mods/mesecons/mesecons_delayer/doc/delayer/recipe.png new file mode 100644 index 0000000..ea394aa Binary files /dev/null and b/mods/mesecons/mesecons_delayer/doc/delayer/recipe.png differ diff --git a/mods/mesecons/mesecons_delayer/init.lua b/mods/mesecons/mesecons_delayer/init.lua new file mode 100644 index 0000000..7c480c1 --- /dev/null +++ b/mods/mesecons/mesecons_delayer/init.lua @@ -0,0 +1,181 @@ +-- 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/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png new file mode 100644 index 0000000..2e49d31 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_bottom.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png new file mode 100644 index 0000000..0242deb Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_off.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png new file mode 100644 index 0000000..19ae0cb Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_ends_on.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png new file mode 100644 index 0000000..7372b37 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_1.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png new file mode 100644 index 0000000..e34f0ac Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_2.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png new file mode 100644 index 0000000..091adbc Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_3.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png new file mode 100644 index 0000000..7ecc9b6 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_off_4.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png new file mode 100644 index 0000000..61f52f2 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_1.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png new file mode 100644 index 0000000..7bd363f Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_2.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png new file mode 100644 index 0000000..b93f725 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_3.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png new file mode 100644 index 0000000..ca90a1e Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_on_4.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png new file mode 100644 index 0000000..79f3d59 Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_off.png differ diff --git a/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png new file mode 100644 index 0000000..1c8edaa Binary files /dev/null and b/mods/mesecons/mesecons_delayer/textures/mesecons_delayer_sides_on.png differ diff --git a/mods/mesecons/mesecons_detector/depends.txt b/mods/mesecons/mesecons_detector/depends.txt new file mode 100644 index 0000000..bc7b062 --- /dev/null +++ b/mods/mesecons/mesecons_detector/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_materials diff --git a/mods/mesecons/mesecons_detector/doc/nodedetector/description.html b/mods/mesecons/mesecons_detector/doc/nodedetector/description.html new file mode 100644 index 0000000..be34fde --- /dev/null +++ b/mods/mesecons/mesecons_detector/doc/nodedetector/description.html @@ -0,0 +1,6 @@ +The node detector is a receptor. It changes its state when either any node +or a specific node is detected. Right-click it to set a nodename to scan for. +It can also receive digiline signals. You can either send "GET" and it will +respond with the detected nodename or you can send any other string and it will +set this string as the node to scan for. +Nodenames must include the mod they reside in, so for instance default:dirt, not just dirt. diff --git a/mods/mesecons/mesecons_detector/doc/nodedetector/preview.png b/mods/mesecons/mesecons_detector/doc/nodedetector/preview.png new file mode 100644 index 0000000..1f78161 Binary files /dev/null and b/mods/mesecons/mesecons_detector/doc/nodedetector/preview.png differ diff --git a/mods/mesecons/mesecons_detector/doc/nodedetector/recipe.png b/mods/mesecons/mesecons_detector/doc/nodedetector/recipe.png new file mode 100644 index 0000000..958c7e6 Binary files /dev/null and b/mods/mesecons/mesecons_detector/doc/nodedetector/recipe.png differ diff --git a/mods/mesecons/mesecons_detector/doc/objectdetector/description.html b/mods/mesecons/mesecons_detector/doc/objectdetector/description.html new file mode 100644 index 0000000..c8315e8 --- /dev/null +++ b/mods/mesecons/mesecons_detector/doc/objectdetector/description.html @@ -0,0 +1,3 @@ +The object detector is a receptor. It changes its state when a player approaches. +Right-click it to set a name to scan for. +It can also receive digiline signals which are the name to scan for on the specified channel in the right-click menu. diff --git a/mods/mesecons/mesecons_detector/doc/objectdetector/preview.png b/mods/mesecons/mesecons_detector/doc/objectdetector/preview.png new file mode 100644 index 0000000..85c4dea Binary files /dev/null and b/mods/mesecons/mesecons_detector/doc/objectdetector/preview.png differ diff --git a/mods/mesecons/mesecons_detector/doc/objectdetector/recipe.png b/mods/mesecons/mesecons_detector/doc/objectdetector/recipe.png new file mode 100644 index 0000000..a1cee00 Binary files /dev/null and b/mods/mesecons/mesecons_detector/doc/objectdetector/recipe.png differ diff --git a/mods/mesecons/mesecons_detector/init.lua b/mods/mesecons/mesecons_detector/init.lua new file mode 100644 index 0000000..65e5c6e --- /dev/null +++ b/mods/mesecons/mesecons_detector/init.lua @@ -0,0 +1,266 @@ +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) + minetest.get_meta(pos):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, _, fields) + if not fields.scanname or not fields.digiline_channel 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 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 + -- return true if scanning for any player or if specific playername was detected + if scanname == "" or foundname == scanname 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) + minetest.get_meta(pos):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;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, _, fields) + if not fields.scanname or not fields.digiline_channel then return end + + local meta = minetest.get_meta(pos) + meta:set_string("scanname", fields.scanname) + 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 frontname = minetest.get_node( + vector.subtract(pos, minetest.facedir_to_dir(node.param2)) + ).name + local scanname = minetest.get_meta(pos):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) + if channel ~= meta:get_string("digiline_channel") then return end + + if msg == GET_COMMAND then + local nodename = minetest.get_node( + vector.subtract(pos, minetest.facedir_to_dir(node.param2)) + ).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, + after_place_node = after_place_node_detector, + 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, + after_place_node = after_place_node_detector, + 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/mesecons/mesecons_detector/textures/jeija_node_detector_off.png b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_off.png new file mode 100644 index 0000000..6d130ad Binary files /dev/null and b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_off.png differ diff --git a/mods/mesecons/mesecons_detector/textures/jeija_node_detector_on.png b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_on.png new file mode 100644 index 0000000..926a9d1 Binary files /dev/null and b/mods/mesecons/mesecons_detector/textures/jeija_node_detector_on.png differ diff --git a/mods/mesecons/mesecons_detector/textures/jeija_object_detector_off.png b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_off.png new file mode 100644 index 0000000..825d78f Binary files /dev/null and b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_off.png differ diff --git a/mods/mesecons/mesecons_detector/textures/jeija_object_detector_on.png b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_on.png new file mode 100644 index 0000000..96f8ba3 Binary files /dev/null and b/mods/mesecons/mesecons_detector/textures/jeija_object_detector_on.png differ diff --git a/mods/mesecons/mesecons_doors/depends.txt b/mods/mesecons/mesecons_doors/depends.txt new file mode 100644 index 0000000..ed2fcd8 --- /dev/null +++ b/mods/mesecons/mesecons_doors/depends.txt @@ -0,0 +1,2 @@ +mesecons +doors diff --git a/mods/mesecons/mesecons_doors/init.lua b/mods/mesecons/mesecons_doors/init.lua new file mode 100644 index 0000000..52d6c17 --- /dev/null +++ b/mods/mesecons/mesecons_doors/init.lua @@ -0,0 +1,129 @@ +-- Modified, from minetest_game/mods/doors/init.lua +local function on_rightclick(pos, dir, check_name, replace, replace_dir, params) + pos.y = pos.y + dir + if not minetest.get_node(pos).name == check_name then + return + end + local p2 = minetest.get_node(pos).param2 + p2 = params[p2 + 1] + + minetest.swap_node(pos, {name = replace_dir, param2 = p2}) + + pos.y = pos.y - dir + minetest.swap_node(pos, {name = replace, param2 = p2}) + + if (minetest.get_meta(pos):get_int("right") ~= 0) == (params[1] ~= 3) then + minetest.sound_play("doors_door_close", {pos = pos, gain = 0.3, max_hear_distance = 10}) + else + minetest.sound_play("doors_door_open", {pos = pos, gain = 0.3, max_hear_distance = 10}) + end +end + +local function meseconify_door(name) + if minetest.registered_items[name .. "_b_1"] then + -- old style double-node doors + local function toggle_state1 (pos, node) + on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0}) + end + + local function toggle_state2 (pos, node) + on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2}) + end + + minetest.override_item(name.."_b_1", { + mesecons = {effector = { + action_on = toggle_state1, + action_off = toggle_state1, + rules = mesecon.rules.pplate + }} + }) + + minetest.override_item(name.."_b_2", { + mesecons = {effector = { + action_on = toggle_state2, + action_off = toggle_state2, + rules = mesecon.rules.pplate + }} + }) + elseif minetest.registered_items[name .. "_a"] then + -- new style mesh node based doors + local override = { + mesecons = {effector = { + action_on = function(pos, node) + local door = doors.get(pos) + if door then + door:open() + end + end, + action_off = function(pos, node) + local door = doors.get(pos) + if door then + door:close() + end + end, + rules = mesecon.rules.pplate + }} + } + minetest.override_item(name .. "_a", override) + minetest.override_item(name .. "_b", override) + end +end + +meseconify_door("doors:door_wood") +meseconify_door("doors:door_steel") +meseconify_door("doors:door_glass") +meseconify_door("doors:door_obsidian_glass") + +-- Trapdoor +local function trapdoor_switch(pos, node) + local state = minetest.get_meta(pos):get_int("state") + + if state == 1 then + minetest.sound_play("doors_door_close", {pos = pos, gain = 0.3, max_hear_distance = 10}) + minetest.set_node(pos, {name="doors:trapdoor", param2 = node.param2}) + else + minetest.sound_play("doors_door_open", {pos = pos, gain = 0.3, max_hear_distance = 10}) + minetest.set_node(pos, {name="doors:trapdoor_open", param2 = node.param2}) + end + + minetest.get_meta(pos):set_int("state", state == 1 and 0 or 1) +end + +if doors and doors.get then + local override = { + mesecons = {effector = { + action_on = function(pos, node) + local door = doors.get(pos) + if door then + door:open() + end + end, + action_off = function(pos, node) + local door = doors.get(pos) + if door then + door:close() + end + end, + }}, + } + minetest.override_item("doors:trapdoor", override) + minetest.override_item("doors:trapdoor_open", override) + minetest.override_item("doors:trapdoor_steel", override) + minetest.override_item("doors:trapdoor_steel_open", override) +else + if minetest.registered_nodes["doors:trapdoor"] then + minetest.override_item("doors:trapdoor", { + mesecons = {effector = { + action_on = trapdoor_switch, + action_off = trapdoor_switch + }}, + }) + + minetest.override_item("doors:trapdoor_open", { + mesecons = {effector = { + action_on = trapdoor_switch, + action_off = trapdoor_switch + }}, + }) + end +end diff --git a/mods/mesecons/mesecons_extrawires/corner.lua b/mods/mesecons/mesecons_extrawires/corner.lua new file mode 100644 index 0000000..6033893 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/corner.lua @@ -0,0 +1,83 @@ +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/mesecons/mesecons_extrawires/crossover.lua b/mods/mesecons/mesecons_extrawires/crossover.lua new file mode 100644 index 0000000..8f3b8c2 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/crossover.lua @@ -0,0 +1,131 @@ +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/mesecons/mesecons_extrawires/depends.txt b/mods/mesecons/mesecons_extrawires/depends.txt new file mode 100644 index 0000000..aca967d --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/depends.txt @@ -0,0 +1,2 @@ +default +mesecons diff --git a/mods/mesecons/mesecons_extrawires/doc/corner/description.html b/mods/mesecons/mesecons_extrawires/doc/corner/description.html new file mode 100644 index 0000000..92de8b0 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/doc/corner/description.html @@ -0,0 +1 @@ +Insulated corners are conductors that only conduct between the inputs (also not up or down). When placing they always point to the left in direction of your vision. diff --git a/mods/mesecons/mesecons_extrawires/doc/corner/preview.png b/mods/mesecons/mesecons_extrawires/doc/corner/preview.png new file mode 100644 index 0000000..9713229 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/corner/preview.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/corner/recipe.png b/mods/mesecons/mesecons_extrawires/doc/corner/recipe.png new file mode 100644 index 0000000..ac85b01 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/corner/recipe.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/crossing/description.html b/mods/mesecons/mesecons_extrawires/doc/crossing/description.html new file mode 100644 index 0000000..aa4cf25 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/doc/crossing/description.html @@ -0,0 +1 @@ +Insulated crossing are conductors that conduct two signals between the opposing sides, the signals are insulated to each other. diff --git a/mods/mesecons/mesecons_extrawires/doc/crossing/preview.png b/mods/mesecons/mesecons_extrawires/doc/crossing/preview.png new file mode 100644 index 0000000..66aaa05 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/crossing/preview.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/crossing/recipe.png b/mods/mesecons/mesecons_extrawires/doc/crossing/recipe.png new file mode 100644 index 0000000..ac37401 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/crossing/recipe.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/mese/description.html b/mods/mesecons/mesecons_extrawires/doc/mese/description.html new file mode 100644 index 0000000..1a14864 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/doc/mese/description.html @@ -0,0 +1 @@ +The basic prerequesite for mesecons, can be crafted into wires and other stuff. Have a look at the Minetest Wiki for more information. Mese is a conductor. It conducts in all six directions: Up/Down/Left/Right/Forward/Backward diff --git a/mods/mesecons/mesecons_extrawires/doc/mese/preview.png b/mods/mesecons/mesecons_extrawires/doc/mese/preview.png new file mode 100644 index 0000000..3ce0ea4 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/mese/preview.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/mese/recipe.png b/mods/mesecons/mesecons_extrawires/doc/mese/recipe.png new file mode 100644 index 0000000..904cf0b Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/mese/recipe.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/tjunction/description.html b/mods/mesecons/mesecons_extrawires/doc/tjunction/description.html new file mode 100644 index 0000000..f655a5d --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/doc/tjunction/description.html @@ -0,0 +1 @@ +Insulated T-Junctions are conductors that only conduct between the inputs (also not up or down). diff --git a/mods/mesecons/mesecons_extrawires/doc/tjunction/preview.png b/mods/mesecons/mesecons_extrawires/doc/tjunction/preview.png new file mode 100644 index 0000000..4dec841 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/tjunction/preview.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/tjunction/recipe.png b/mods/mesecons/mesecons_extrawires/doc/tjunction/recipe.png new file mode 100644 index 0000000..8602941 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/tjunction/recipe.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/vertical/description.html b/mods/mesecons/mesecons_extrawires/doc/vertical/description.html new file mode 100644 index 0000000..df09b94 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/doc/vertical/description.html @@ -0,0 +1 @@ +Vertical Mesecons only conduct up and down. Plates appear at the ends, at that place they also conduct to the side. diff --git a/mods/mesecons/mesecons_extrawires/doc/vertical/preview.png b/mods/mesecons/mesecons_extrawires/doc/vertical/preview.png new file mode 100644 index 0000000..aad6ea8 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/vertical/preview.png differ diff --git a/mods/mesecons/mesecons_extrawires/doc/vertical/recipe.png b/mods/mesecons/mesecons_extrawires/doc/vertical/recipe.png new file mode 100644 index 0000000..83bc498 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/doc/vertical/recipe.png differ diff --git a/mods/mesecons/mesecons_extrawires/init.lua b/mods/mesecons/mesecons_extrawires/init.lua new file mode 100644 index 0000000..b22f2e5 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/init.lua @@ -0,0 +1,5 @@ +dofile(minetest.get_modpath("mesecons_extrawires").."/crossover.lua"); +dofile(minetest.get_modpath("mesecons_extrawires").."/tjunction.lua"); +dofile(minetest.get_modpath("mesecons_extrawires").."/corner.lua"); +dofile(minetest.get_modpath("mesecons_extrawires").."/vertical.lua"); +dofile(minetest.get_modpath("mesecons_extrawires").."/mesewire.lua"); diff --git a/mods/mesecons/mesecons_extrawires/mesewire.lua b/mods/mesecons/mesecons_extrawires/mesewire.lua new file mode 100644 index 0000000..3640de8 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/mesewire.lua @@ -0,0 +1,36 @@ +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/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d b/mods/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d new file mode 100644 index 0000000..e776535 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/models/mesecons_extrawires_crossover.b3d differ diff --git a/mods/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend b/mods/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend new file mode 100644 index 0000000..9ad3749 Binary files /dev/null and b/mods/mesecons/mesecons_extrawires/src/mesecons_extrawires_crossover.blend differ diff --git a/mods/mesecons/mesecons_extrawires/tjunction.lua b/mods/mesecons/mesecons_extrawires/tjunction.lua new file mode 100644 index 0000000..70f343b --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/tjunction.lua @@ -0,0 +1,84 @@ +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/mesecons/mesecons_extrawires/vertical.lua b/mods/mesecons/mesecons_extrawires/vertical.lua new file mode 100644 index 0000000..f3232d8 --- /dev/null +++ b/mods/mesecons/mesecons_extrawires/vertical.lua @@ -0,0 +1,181 @@ +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/mesecons/mesecons_fpga/depends.txt b/mods/mesecons/mesecons_fpga/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_fpga/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_fpga/doc/fpga/description.html b/mods/mesecons/mesecons_fpga/doc/fpga/description.html new file mode 100644 index 0000000..be6bd65 --- /dev/null +++ b/mods/mesecons/mesecons_fpga/doc/fpga/description.html @@ -0,0 +1,5 @@ +FPGAs can be used to chain multiple logic gates together in a compact manner. +They come with 4 I/O ports and 10 internal registers, +which can then be connected with eachother to form logic circuits.
+Supported gate types: AND, OR, NOT, XOR, NAND, XNOR, Buffer (=)
+I/O ports: A B C D; Registers: numbered 0 to 9 diff --git a/mods/mesecons/mesecons_fpga/doc/fpga/preview.png b/mods/mesecons/mesecons_fpga/doc/fpga/preview.png new file mode 100644 index 0000000..c156321 Binary files /dev/null and b/mods/mesecons/mesecons_fpga/doc/fpga/preview.png differ diff --git a/mods/mesecons/mesecons_fpga/doc/fpga/recipe.png b/mods/mesecons/mesecons_fpga/doc/fpga/recipe.png new file mode 100644 index 0000000..1140bfa Binary files /dev/null and b/mods/mesecons/mesecons_fpga/doc/fpga/recipe.png differ diff --git a/mods/mesecons/mesecons_fpga/doc/programmer/description.html b/mods/mesecons/mesecons_fpga/doc/programmer/description.html new file mode 100644 index 0000000..39e2374 --- /dev/null +++ b/mods/mesecons/mesecons_fpga/doc/programmer/description.html @@ -0,0 +1,3 @@ +The FPGA programmer can be used to copy gate configurations from one FPGA to another.
+Shift+Right-Click an FPGA to read its configuration and "remember" it. +Left-click (punch) FPGAs to write the saved configuration to them. diff --git a/mods/mesecons/mesecons_fpga/doc/programmer/preview.png b/mods/mesecons/mesecons_fpga/doc/programmer/preview.png new file mode 100644 index 0000000..7437d39 Binary files /dev/null and b/mods/mesecons/mesecons_fpga/doc/programmer/preview.png differ diff --git a/mods/mesecons/mesecons_fpga/doc/programmer/recipe.png b/mods/mesecons/mesecons_fpga/doc/programmer/recipe.png new file mode 100644 index 0000000..778ec5f Binary files /dev/null and b/mods/mesecons/mesecons_fpga/doc/programmer/recipe.png differ diff --git a/mods/mesecons/mesecons_fpga/init.lua b/mods/mesecons/mesecons_fpga/init.lua new file mode 100644 index 0000000..6c462e6 --- /dev/null +++ b/mods/mesecons/mesecons_fpga/init.lua @@ -0,0 +1,375 @@ +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/mesecons/mesecons_fpga/logic.lua b/mods/mesecons/mesecons_fpga/logic.lua new file mode 100644 index 0000000..3dca154 --- /dev/null +++ b/mods/mesecons/mesecons_fpga/logic.lua @@ -0,0 +1,210 @@ +local lg = {} + +-- (de)serialize +lg.serialize = function(t) + local function _op(t) + if t == nil then + return " " + elseif t.type == "io" then + return t.port + else -- t.type == "reg" + return tostring(t.n) + end + end + local function _action(s) + if s == nil then + return " " + end + local mapping = { + ["and"] = "&", + ["or"] = "|", + ["not"] = "~", + ["xor"] = "^", + ["nand"] = "?", --dunno + ["buf"] = "_", + ["xnor"] = "=", + } + return mapping[s] + end + + local s = "" + for i = 1, 14 do + local cur = t[i] + if next(cur) ~= nil then + s = s .. _op(cur.op1) .. _action(cur.action) .. _op(cur.op2) .. _op(cur.dst) + end + s = s .. "/" + end + return s +end + +lg.deserialize = function(s) + local function _op(c) + if c == "A" or c == "B" or c == "C" or c == "D" then + return {type = "io", port = c} + elseif c == " " then + return nil + else + return {type = "reg", n = tonumber(c)} + end + end + local function _action(c) + local mapping = { + ["&"] = "and", + ["|"] = "or", + ["~"] = "not", + ["^"] = "xor", + ["?"] = "nand", + ["_"] = "buf", + ["="] = "xnor", + [" "] = nil, + } + return mapping[c] + end + + local ret = {} + for part in s:gmatch("(.-)/") do + local parsed + if part == "" then + parsed = {} + else + parsed = { + action = _action( part:sub(2,2) ), + op1 = _op( part:sub(1,1) ), + op2 = _op( part:sub(3,3) ), + dst = _op( part:sub(4,4) ), + } + end + ret[#ret + 1] = parsed + end + -- More than 14 instructions (write to all 10 regs + 4 outputs) + -- will not pass the write-once requirement of the validator + assert(#ret == 14) + return ret +end + +-- validation +lg.validate_single = function(t, i) + local function is_reg_written_to(t, n, max) + for i = 1, max-1 do + if next(t[i]) ~= nil + and t[i].dst and t[i].dst.type == "reg" + and t[i].dst.n == n then + return true + end + end + return false + end + local function compare_op(t1, t2, allow_same_io) + if t1 == nil or t2 == nil then + return false + elseif t1.type ~= t2.type then + return false + end + if t1.type == "reg" and t1.n == t2.n then + return true + elseif t1.type == "io" and t1.port == t2.port then + return not allow_same_io + end + return false + end + local elem = t[i] + -- check for completeness + if elem.action == nil then + return {i = i, msg = "Gate type required"} + elseif elem.action == "not" or elem.action == "buf" then + if elem.op1 ~= nil or elem.op2 == nil or elem.dst == nil then + return {i = i, msg = "Second operand (only) and destination required"} + end + else + if elem.op1 == nil or elem.op2 == nil or elem.dst == nil then + return {i = i, msg = "Operands and destination required"} + end + end + -- check whether operands/destination are identical + if compare_op(elem.op1, elem.op2) then + return {i = i, msg = "Operands cannot be identical"} + end + if compare_op(elem.op1, elem.dst, true) or compare_op(elem.op2, elem.dst, true) then + return {i = i, msg = "Destination and operands must be different"} + end + -- check whether operands point to defined registers + if elem.op1 ~= nil and elem.op1.type == "reg" + and not is_reg_written_to(t, elem.op1.n, i) then + return {i = i, msg = "First operand is undefined register"} + end + if elem.op2.type == "reg" and not is_reg_written_to(t, elem.op2.n, i) then + return {i = i, msg = "Second operand is undefined register"} + end + -- check whether destination points to undefined register + if elem.dst.type == "reg" and is_reg_written_to(t, elem.dst.n, i) then + return {i = i, msg = "Destination is already used register"} + end + + return nil +end + +lg.validate = function(t) + for i = 1, 14 do + if next(t[i]) ~= nil then + local r = lg.validate_single(t, i) + if r ~= nil then + return r + end + end + end + return nil +end + +-- interpreter +lg.interpret = function(t, a, b, c, d) + local function _action(s, v1, v2) + if s == "and" then + return v1 and v2 + elseif s == "or" then + return v1 or v2 + elseif s == "not" then + return not v2 + elseif s == "xor" then + return v1 ~= v2 + elseif s == "nand" then + return not (v1 and v2) + elseif s == "buf" then + return v2 + else -- s == "xnor" + return v1 == v2 + end + end + local function _op(t, regs, io_in) + if t.type == "reg" then + return regs[t.n] + else -- t.type == "io" + return io_in[t.port] + end + end + + local io_in = {A=a, B=b, C=c, D=d} + local regs = {} + local io_out = {} + for i = 1, 14 do + local cur = t[i] + if next(cur) ~= nil then + local v1, v2 + if cur.op1 ~= nil then + v1 = _op(cur.op1, regs, io_in) + end + v2 = _op(cur.op2, regs, io_in) + + local result = _action(cur.action, v1, v2) + + if cur.dst.type == "reg" then + regs[cur.dst.n] = result + else -- cur.dst.type == "io" + io_out[cur.dst.port] = result + end + end + end + return io_out.A, io_out.B, io_out.C, io_out.D +end + +return lg diff --git a/mods/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png new file mode 100644 index 0000000..9c0ba8f Binary files /dev/null and b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_programmer.png differ diff --git a/mods/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png new file mode 100644 index 0000000..e2d8e15 Binary files /dev/null and b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_sides.png differ diff --git a/mods/mesecons/mesecons_fpga/textures/jeija_fpga_top.png b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_top.png new file mode 100644 index 0000000..eaf1a1c Binary files /dev/null and b/mods/mesecons/mesecons_fpga/textures/jeija_fpga_top.png differ diff --git a/mods/mesecons/mesecons_fpga/tool.lua b/mods/mesecons/mesecons_fpga/tool.lua new file mode 100644 index 0000000..26ab49e --- /dev/null +++ b/mods/mesecons/mesecons_fpga/tool.lua @@ -0,0 +1,62 @@ +return function(plg) + + +minetest.register_tool("mesecons_fpga:programmer", { + description = "FPGA Programmer", + inventory_image = "jeija_fpga_programmer.png", + stack_max = 1, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then + return itemstack + end + + local meta = minetest.get_meta(pos) + if meta:get_string("instr") == "//////////////" then + minetest.chat_send_player(placer:get_player_name(), "This FPGA is unprogrammed.") + return itemstack + end + itemstack:set_metadata(meta:get_string("instr")) + minetest.chat_send_player(placer:get_player_name(), "FPGA gate configuration was successfully copied!") + + return itemstack + end, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local pos = pointed_thing.under + if minetest.get_node(pos).name:find("mesecons_fpga:fpga") ~= 1 then + return itemstack + end + + local imeta = itemstack:get_metadata() + if imeta == "" then + minetest.chat_send_player(user:get_player_name(), "Use shift+right-click to copy a gate configuration first.") + return itemstack + end + + local meta = minetest.get_meta(pos) + meta:set_string("instr", imeta) + plg.update_formspec(pos, imeta) + minetest.chat_send_player(user:get_player_name(), "Gate configuration was successfully written to FPGA!") + + return itemstack + end +}) + +minetest.register_craft({ + output = "mesecons_fpga:programmer", + recipe = { + {'group:mesecon_conductor_craftable'}, + {'mesecons_materials:silicon'}, + } +}) + + +end diff --git a/mods/mesecons/mesecons_gates/depends.txt b/mods/mesecons/mesecons_gates/depends.txt new file mode 100644 index 0000000..f3e0392 --- /dev/null +++ b/mods/mesecons/mesecons_gates/depends.txt @@ -0,0 +1,6 @@ +mesecons +mesecons_microcontroller +mesecons_delayer + +mesecons_torch +mesecons_materials diff --git a/mods/mesecons/mesecons_gates/doc/and/description.html b/mods/mesecons/mesecons_gates/doc/and/description.html new file mode 100644 index 0000000..eafbeda --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/and/description.html @@ -0,0 +1 @@ +And gates power their output if both inputs (from left and right) are powered. diff --git a/mods/mesecons/mesecons_gates/doc/and/preview.png b/mods/mesecons/mesecons_gates/doc/and/preview.png new file mode 100644 index 0000000..b2b5301 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/and/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/and/recipe.png b/mods/mesecons/mesecons_gates/doc/and/recipe.png new file mode 100644 index 0000000..ae6bf63 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/and/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/diode/description.html b/mods/mesecons/mesecons_gates/doc/diode/description.html new file mode 100644 index 0000000..174fd64 --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/diode/description.html @@ -0,0 +1 @@ +Mesecon diodes, just like real ones, only transfer power (signals) in one direction only. diff --git a/mods/mesecons/mesecons_gates/doc/diode/preview.png b/mods/mesecons/mesecons_gates/doc/diode/preview.png new file mode 100644 index 0000000..ced541b Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/diode/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/diode/recipe.png b/mods/mesecons/mesecons_gates/doc/diode/recipe.png new file mode 100644 index 0000000..71086bf Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/diode/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/nand/description.html b/mods/mesecons/mesecons_gates/doc/nand/description.html new file mode 100644 index 0000000..a520fd2 --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/nand/description.html @@ -0,0 +1 @@ +Nand gates do not power their output if both inputs (from left and right) are powered, but power it in every other case. diff --git a/mods/mesecons/mesecons_gates/doc/nand/preview.png b/mods/mesecons/mesecons_gates/doc/nand/preview.png new file mode 100644 index 0000000..d8db780 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/nand/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/nand/recipe.png b/mods/mesecons/mesecons_gates/doc/nand/recipe.png new file mode 100644 index 0000000..e6118b3 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/nand/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/nor/description.html b/mods/mesecons/mesecons_gates/doc/nor/description.html new file mode 100644 index 0000000..cfcd4c0 --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/nor/description.html @@ -0,0 +1 @@ +Nor gates only power their output if none of their two inputs is powered. They are basically or gates with a not gate at their output. diff --git a/mods/mesecons/mesecons_gates/doc/nor/preview.png b/mods/mesecons/mesecons_gates/doc/nor/preview.png new file mode 100644 index 0000000..b6d2781 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/nor/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/nor/recipe.png b/mods/mesecons/mesecons_gates/doc/nor/recipe.png new file mode 100644 index 0000000..a2063c7 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/nor/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/not/description.html b/mods/mesecons/mesecons_gates/doc/not/description.html new file mode 100644 index 0000000..8bd6795 --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/not/description.html @@ -0,0 +1 @@ +Not gates invert signals, just like a mesecon torch does, but faster. The input is at the opposite side of the output. diff --git a/mods/mesecons/mesecons_gates/doc/not/preview.png b/mods/mesecons/mesecons_gates/doc/not/preview.png new file mode 100644 index 0000000..4a33cd1 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/not/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/not/recipe.png b/mods/mesecons/mesecons_gates/doc/not/recipe.png new file mode 100644 index 0000000..ee1c0d6 Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/not/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/or/description.html b/mods/mesecons/mesecons_gates/doc/or/description.html new file mode 100644 index 0000000..0a74abd --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/or/description.html @@ -0,0 +1 @@ +Or gates power their output if either of their inputs (or both) are powered. You could basically get the same behaviour with two diodes, but or gates save some space. diff --git a/mods/mesecons/mesecons_gates/doc/or/preview.png b/mods/mesecons/mesecons_gates/doc/or/preview.png new file mode 100644 index 0000000..b7a8cdc Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/or/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/or/recipe.png b/mods/mesecons/mesecons_gates/doc/or/recipe.png new file mode 100644 index 0000000..b94169d Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/or/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/doc/xor/description.html b/mods/mesecons/mesecons_gates/doc/xor/description.html new file mode 100644 index 0000000..f52f3fc --- /dev/null +++ b/mods/mesecons/mesecons_gates/doc/xor/description.html @@ -0,0 +1 @@ +XOR gates power their output if only one input is powered, they're off if either both or none of the inputs is powered. diff --git a/mods/mesecons/mesecons_gates/doc/xor/preview.png b/mods/mesecons/mesecons_gates/doc/xor/preview.png new file mode 100644 index 0000000..3d3941e Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/xor/preview.png differ diff --git a/mods/mesecons/mesecons_gates/doc/xor/recipe.png b/mods/mesecons/mesecons_gates/doc/xor/recipe.png new file mode 100644 index 0000000..1e129bf Binary files /dev/null and b/mods/mesecons/mesecons_gates/doc/xor/recipe.png differ diff --git a/mods/mesecons/mesecons_gates/init.lua b/mods/mesecons/mesecons_gates/init.lua new file mode 100644 index 0000000..57815ef --- /dev/null +++ b/mods/mesecons/mesecons_gates/init.lua @@ -0,0 +1,134 @@ +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) + local get_inputrules = inputnumber == 2 and gate_get_input_rules_twoinputs or + gate_get_input_rules_oneinput + local description = "Mesecons 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 + },{ + 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"}}) + +register_gate("not", 1, function (input) return not input end, + {{"mesecons:mesecon", "mesecons_torch:mesecon_torch_on", "mesecons:mesecon"}}) + +register_gate("and", 2, function (val1, val2) return val1 and val2 end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons_materials:silicon", "mesecons:mesecon"}, + {"mesecons:mesecon", "", ""}}) + +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", "", ""}}) + +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", "", ""}}) + +register_gate("nor", 2, function (val1, val2) return not (val1 or val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons:mesecon", "mesecons_torch:mesecon_torch_on"}, + {"mesecons:mesecon", "", ""}}) + +register_gate("or", 2, function (val1, val2) return (val1 or val2) end, + {{"mesecons:mesecon", "", ""}, + {"", "mesecons:mesecon", "mesecons:mesecon"}, + {"mesecons:mesecon", "", ""}}) diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_and.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_and.png new file mode 100644 index 0000000..0ddc043 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_and.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_diode.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_diode.png new file mode 100644 index 0000000..ffa403f Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_diode.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_nand.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_nand.png new file mode 100644 index 0000000..0e4294e Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_nand.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_nor.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_nor.png new file mode 100644 index 0000000..c4298e3 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_nor.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_not.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_not.png new file mode 100644 index 0000000..939fb76 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_not.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_off.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_off.png new file mode 100644 index 0000000..44017b0 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_off.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_on.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_on.png new file mode 100644 index 0000000..47028a8 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_on.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_or.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_or.png new file mode 100644 index 0000000..09f0661 Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_or.png differ diff --git a/mods/mesecons/mesecons_gates/textures/jeija_gate_xor.png b/mods/mesecons/mesecons_gates/textures/jeija_gate_xor.png new file mode 100644 index 0000000..afbd6ab Binary files /dev/null and b/mods/mesecons/mesecons_gates/textures/jeija_gate_xor.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/depends.txt b/mods/mesecons/mesecons_hydroturbine/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_hydroturbine/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html new file mode 100644 index 0000000..4b4e5a0 --- /dev/null +++ b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/description.html @@ -0,0 +1 @@ +Water turbines are receptors that turn on if flowing water is above them. diff --git a/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png new file mode 100644 index 0000000..14be16e Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/preview.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png new file mode 100644 index 0000000..8eb5365 Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/doc/waterturbine/recipe.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/init.lua b/mods/mesecons/mesecons_hydroturbine/init.lua new file mode 100644 index 0000000..6286293 --- /dev/null +++ b/mods/mesecons/mesecons_hydroturbine/init.lua @@ -0,0 +1,99 @@ +-- 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.obj", + tiles = { + "jeija_hydro_turbine_sides_off.png", + "jeija_hydro_turbine_top_bottom.png", + "jeija_hydro_turbine_turbine_top_bottom.png", + "jeija_hydro_turbine_turbine_misc.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.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", + "jeija_hydro_turbine_turbine_top_bottom.png", + "jeija_hydro_turbine_turbine_misc.png" + }, + 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/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine.obj b/mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine.obj new file mode 100644 index 0000000..84a1a44 --- /dev/null +++ b/mods/mesecons/mesecons_hydroturbine/models/jeija_hydro_turbine.obj @@ -0,0 +1,429 @@ +# Blender v2.73 (sub 0) OBJ File: 'mesecons-water-turbine.blend' +# www.blender.org +o Cylinder.002_Cylinder.003 +v 0.000000 0.500000 -0.150000 +v 0.000000 0.562500 -0.150000 +v 0.106066 0.500000 -0.106066 +v 0.106066 0.562500 -0.106066 +v 0.150000 0.500000 0.000000 +v 0.150000 0.562500 0.000000 +v 0.106066 0.500000 0.106066 +v 0.106066 0.562500 0.106066 +v -0.000000 0.500000 0.150000 +v -0.000000 0.562500 0.150000 +v -0.106066 0.500000 0.106066 +v -0.106066 0.562500 0.106066 +v -0.150000 0.500000 -0.000000 +v -0.150000 0.562500 -0.000000 +v -0.106066 0.500000 -0.106066 +v -0.106066 0.562500 -0.106066 +v 0.097545 0.625000 -0.490393 +v -0.097545 0.625000 -0.490393 +v -0.277785 0.625000 -0.415735 +v -0.415735 0.625000 -0.277785 +v -0.490393 0.625000 -0.097545 +v -0.490393 0.625000 0.097545 +v -0.415735 0.625000 0.277785 +v -0.277785 0.625000 0.415735 +v -0.097545 0.625000 0.490393 +v 0.097545 0.625000 0.490393 +v 0.277785 0.625000 0.415735 +v 0.415735 0.625000 0.277785 +v 0.490393 0.625000 0.097545 +v 0.490393 0.625000 -0.097545 +v 0.415735 0.625000 -0.277785 +v 0.277785 0.625000 -0.415735 +v 0.097545 0.656250 -0.490393 +v -0.097545 0.656250 -0.490393 +v -0.277785 0.656250 -0.415735 +v -0.415735 0.656250 -0.277785 +v -0.490393 0.656250 -0.097545 +v -0.490393 0.656250 0.097545 +v -0.415735 0.656250 0.277785 +v -0.277785 0.656250 0.415735 +v -0.097545 0.656250 0.490393 +v 0.097545 0.656250 0.490393 +v 0.277785 0.656250 0.415735 +v 0.415735 0.656250 0.277785 +v 0.490393 0.656250 0.097545 +v 0.490393 0.656250 -0.097545 +v 0.415735 0.656250 -0.277785 +v 0.277785 0.656250 -0.415735 +v 0.116233 0.634645 -0.436100 +v 0.116233 1.482640 -0.436100 +v 0.299524 0.634645 -0.186124 +v 0.299524 1.482640 -0.186124 +v 0.343405 0.634645 0.080186 +v 0.343405 1.482640 0.080186 +v 0.186124 0.634645 0.299524 +v 0.186124 1.482640 0.299524 +v -0.080186 0.634645 0.343405 +v -0.080186 1.482640 0.343405 +v -0.299524 0.634645 0.186124 +v -0.299524 1.482640 0.186124 +v -0.343405 0.634645 -0.080186 +v -0.343405 1.482640 -0.080186 +v -0.186124 0.634645 -0.299524 +v -0.186124 1.482640 -0.299524 +v 0.080186 0.634645 -0.343405 +v 0.080186 1.482640 -0.343405 +v 0.390559 1.482640 -0.226180 +v 0.390559 0.634645 -0.226180 +v 0.436100 1.482640 0.116233 +v 0.436100 0.634645 0.116233 +v 0.226180 1.482640 0.390559 +v 0.226180 0.634645 0.390559 +v -0.116233 1.482640 0.436100 +v -0.116233 0.634645 0.436100 +v -0.390559 1.482640 0.226180 +v -0.390559 0.634645 0.226180 +v -0.436100 1.482640 -0.116233 +v -0.436100 0.634645 -0.116233 +v -0.226180 1.482640 -0.390559 +v -0.226180 0.634645 -0.390559 +v 0.108975 0.634645 -0.430778 +v 0.292266 0.634645 -0.180802 +v 0.292266 1.482640 -0.180802 +v 0.108975 1.482640 -0.430778 +v 0.381664 0.634645 -0.227549 +v 0.334509 0.634645 0.078817 +v 0.334509 1.482640 0.078817 +v 0.381664 1.482640 -0.227549 +v 0.430778 0.634645 0.108975 +v 0.180802 0.634645 0.292266 +v 0.180802 1.482640 0.292266 +v 0.430778 1.482640 0.108975 +v 0.227549 0.634645 0.381664 +v -0.078817 0.634645 0.334509 +v -0.078817 1.482640 0.334509 +v 0.227549 1.482640 0.381664 +v -0.108975 0.634645 0.430778 +v -0.292266 0.634645 0.180802 +v -0.292266 1.482640 0.180802 +v -0.108975 1.482640 0.430778 +v -0.381664 0.634645 0.227549 +v -0.334509 0.634645 -0.078817 +v -0.334509 1.482640 -0.078817 +v -0.381664 1.482640 0.227549 +v -0.227549 0.634645 -0.381663 +v 0.078817 0.634645 -0.334509 +v 0.078817 1.482640 -0.334509 +v -0.227549 1.482640 -0.381663 +v -0.430779 0.634645 -0.108975 +v -0.180802 0.634645 -0.292266 +v -0.180802 1.482640 -0.292266 +v -0.430779 1.482640 -0.108975 +v 0.097545 1.500000 -0.490393 +v -0.097545 1.500000 -0.490393 +v -0.277785 1.500000 -0.415735 +v -0.415735 1.500000 -0.277785 +v -0.490393 1.500000 -0.097545 +v -0.490393 1.500000 0.097545 +v -0.415735 1.500000 0.277785 +v -0.277785 1.500000 0.415735 +v -0.097545 1.500000 0.490393 +v 0.097545 1.500000 0.490393 +v 0.277785 1.500000 0.415735 +v 0.415735 1.500000 0.277785 +v 0.490393 1.500000 0.097545 +v 0.490393 1.500000 -0.097545 +v 0.415735 1.500000 -0.277785 +v 0.277785 1.500000 -0.415735 +v 0.097545 1.468750 -0.490393 +v -0.097545 1.468750 -0.490393 +v -0.277785 1.468750 -0.415735 +v -0.415735 1.468750 -0.277785 +v -0.490393 1.468750 -0.097545 +v -0.490393 1.468750 0.097545 +v -0.415735 1.468750 0.277785 +v -0.277785 1.468750 0.415735 +v -0.097545 1.468750 0.490393 +v 0.097545 1.468750 0.490393 +v 0.277785 1.468750 0.415735 +v 0.415735 1.468750 0.277785 +v 0.490393 1.468750 0.097545 +v 0.490393 1.468750 -0.097545 +v 0.415735 1.468750 -0.277785 +v 0.277785 1.468750 -0.415735 +v 0.025624 0.559630 -0.061863 +v 0.025624 1.481372 -0.061863 +v 0.061863 0.559630 -0.025624 +v 0.061863 1.481372 -0.025624 +v 0.061863 0.559630 0.025624 +v 0.061863 1.481372 0.025624 +v 0.025624 0.559630 0.061863 +v 0.025624 1.481372 0.061863 +v -0.025624 0.559630 0.061863 +v -0.025624 1.481372 0.061863 +v -0.061863 0.559630 0.025624 +v -0.061863 1.481372 0.025624 +v -0.061863 0.559630 -0.025624 +v -0.061863 1.481372 -0.025624 +v -0.025624 0.559630 -0.061863 +v -0.025624 1.481372 -0.061863 +v 0.499775 -0.499550 -0.499775 +v 0.499775 -0.499550 0.499775 +v -0.499775 -0.499550 0.499775 +v -0.499775 -0.499550 -0.499775 +v 0.499775 0.500000 -0.499775 +v 0.499775 0.500000 0.499775 +v -0.499775 0.500000 0.499775 +v -0.499775 0.500000 -0.499775 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.400544 1.000000 +vt 0.599456 1.000000 +vt 0.783227 0.923880 +vt 0.923880 0.783227 +vt 1.000000 0.599456 +vt 1.000000 0.400544 +vt 0.923880 0.216773 +vt 0.783227 0.076120 +vt 0.599456 0.000000 +vt 0.400544 0.000000 +vt 0.216773 0.076121 +vt 0.076120 0.216773 +vt 0.000000 0.400544 +vt 0.000000 0.599456 +vt 0.076121 0.783227 +vt 0.216773 0.923880 +vt 0.500000 0.343750 +vt 0.531250 0.343750 +vt 0.531250 0.375000 +vt 0.500000 0.375000 +vt 0.531250 0.406250 +vt 0.500000 0.406250 +vt 0.500000 0.531250 +vt 0.531250 0.531250 +vt 0.531250 0.500000 +vt 0.500000 0.500000 +vt 0.531250 0.468750 +vt 0.500000 0.468750 +vt 0.531250 0.437500 +vt 0.500000 0.437500 +vt 0.593750 0.468750 +vt 0.625000 0.437500 +vt 0.656250 0.437500 +vt 0.687500 0.468750 +vt 0.687500 0.500000 +vt 0.656250 0.531250 +vt 0.625000 0.531250 +vt 0.593750 0.500000 +vt 0.500000 0.312500 +vt 0.531250 0.312500 +vt 0.500000 0.281250 +vt 0.531250 0.281250 +vt 0.156250 0.750000 +vt 0.156250 0.875000 +vt 0.125000 0.875000 +vt 0.125000 0.750000 +vt 0.156250 0.625000 +vt 0.125000 0.625000 +vt 0.156250 0.500000 +vt 0.125000 0.500000 +vt 0.156250 0.375000 +vt 0.125000 0.375000 +vt 0.156250 0.250000 +vt 0.125000 0.250000 +vt 0.250000 0.500000 +vt 0.250000 0.625000 +vt 0.218750 0.625000 +vt 0.218750 0.500000 +vt 0.156250 0.125000 +vt 0.125000 0.125000 +vt 0.156250 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.375000 +vt 0.218750 0.375000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 0.218750 1.000000 +vt 0.218750 0.875000 +vt 0.250000 0.250000 +vt 0.218750 0.250000 +vt 0.250000 0.750000 +vt 0.218750 0.750000 +vt 0.250000 0.125000 +vt 0.218750 0.125000 +vt 0.250000 -0.000000 +vt 0.218750 -0.000000 +vt 0.156250 1.000000 +vt 0.125000 1.000000 +vt 0.781250 0.593750 +vt 0.781250 0.968750 +vt 0.656250 0.968750 +vt 0.656250 0.593750 +vt 0.625000 0.593750 +vt 0.625000 0.968750 +vt 0.500000 0.968750 +vt 0.500000 0.593750 +vt 0.406250 -0.000000 +vt 0.437500 -0.000000 +vt 0.437500 0.125000 +vt 0.406250 0.125000 +vt 0.312500 0.875000 +vt 0.343750 0.875000 +vt 0.343750 1.000000 +vt 0.312500 1.000000 +vt 0.312500 0.750000 +vt 0.343750 0.750000 +vt 0.312500 0.625000 +vt 0.343750 0.625000 +vt 0.312500 0.500000 +vt 0.343750 0.500000 +vt 0.406250 0.750000 +vt 0.437500 0.750000 +vt 0.437500 0.875000 +vt 0.406250 0.875000 +vt 0.312500 0.375000 +vt 0.343750 0.375000 +vt 0.312500 0.250000 +vt 0.343750 0.250000 +vt 0.406250 0.625000 +vt 0.437500 0.625000 +vt 0.312500 0.125000 +vt 0.343750 0.125000 +vt 0.406250 0.500000 +vt 0.437500 0.500000 +vt 0.312500 -0.000000 +vt 0.343750 -0.000000 +vt 0.406250 0.375000 +vt 0.437500 0.375000 +vt 0.437500 1.000000 +vt 0.406250 1.000000 +vt 0.406250 0.250000 +vt 0.437500 0.250000 +vt 0.031250 0.937500 +vt 0.062500 0.937500 +vt 0.062500 0.968750 +vt 0.031250 0.968750 +vt 0.031250 0.718750 +vt 0.062500 0.718750 +vt 0.062500 0.750000 +vt 0.031250 0.750000 +vt 0.062500 0.781250 +vt 0.031250 0.781250 +vt 0.062500 0.812500 +vt 0.031250 0.812500 +vt 0.062500 0.843750 +vt 0.031250 0.843750 +vt 0.062500 0.875000 +vt 0.031250 0.875000 +vt 0.031250 0.906250 +vt 0.062500 0.906250 +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.000000 -0.923900 +vn 0.923900 0.000000 -0.382700 +vn 0.923900 0.000000 0.382700 +vn 0.382700 0.000000 0.923900 +vn -0.382700 0.000000 0.923900 +vn -0.923900 0.000000 0.382700 +vn -0.382700 0.000000 -0.923900 +vn -0.923900 0.000000 -0.382700 +vn 0.707100 0.000000 0.707100 +vn -0.707100 0.000000 0.707100 +vn 0.707100 0.000000 -0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.806400 0.000000 -0.591300 +vn 0.988400 0.000000 0.152100 +vn 0.591300 0.000000 0.806400 +vn -0.152100 0.000000 0.988400 +vn -0.806400 0.000000 0.591300 +vn -0.988400 0.000000 -0.152100 +vn 0.152100 0.000000 -0.988400 +vn -0.591300 0.000000 -0.806400 +g Cylinder.002_Cylinder.003_sides +s off +f 161/1/1 165/2/1 166/3/1 162/4/1 +f 162/1/2 166/2/2 167/3/2 163/4/2 +f 163/4/3 167/3/3 168/2/3 164/1/3 +f 165/2/4 161/1/4 164/4/4 168/3/4 +g Cylinder.002_Cylinder.003_top-bottom +f 161/2/5 162/1/5 163/4/5 164/3/5 +f 165/2/6 168/3/6 167/4/6 166/1/6 +g Cylinder.002_Cylinder.003_turbine-top-bottom +f 130/5/5 129/6/5 144/7/5 143/8/5 142/9/5 141/10/5 140/11/5 139/12/5 138/13/5 137/14/5 136/15/5 135/16/5 134/17/5 133/18/5 132/19/5 131/20/5 +f 18/5/5 17/6/5 32/7/5 31/8/5 30/9/5 29/10/5 28/11/5 27/12/5 26/13/5 25/14/5 24/15/5 23/16/5 22/17/5 21/18/5 20/19/5 19/20/5 +f 33/6/6 34/5/6 35/20/6 36/19/6 37/18/6 38/17/6 39/16/6 40/15/6 41/14/6 42/13/6 43/12/6 44/11/6 45/10/6 46/9/6 47/8/6 48/7/6 +f 113/6/6 114/5/6 115/20/6 116/19/6 117/18/6 118/17/6 119/16/6 120/15/6 121/14/6 122/13/6 123/12/6 124/11/6 125/10/6 126/9/6 127/8/6 128/7/6 +g Cylinder.002_Cylinder.003_turbine-blades-etc +f 1/21/7 2/22/7 4/23/7 3/24/7 +f 3/24/8 4/23/8 6/25/8 5/26/8 +f 5/27/9 6/28/9 8/29/9 7/30/9 +f 7/30/10 8/29/10 10/31/10 9/32/10 +f 9/32/11 10/31/11 12/33/11 11/34/11 +f 11/34/12 12/33/12 14/25/12 13/26/12 +f 4/35/6 2/36/6 16/37/6 14/38/6 12/39/6 10/40/6 8/41/6 6/42/6 +f 15/43/13 16/44/13 2/22/13 1/21/13 +f 13/45/14 14/46/14 16/44/14 15/43/14 +f 27/47/15 28/48/15 44/49/15 43/50/15 +f 26/51/10 27/47/10 43/50/10 42/52/10 +f 25/53/2 26/51/2 42/52/2 41/54/2 +f 24/55/11 25/53/11 41/54/11 40/56/11 +f 23/57/16 24/55/16 40/56/16 39/58/16 +f 17/59/4 18/60/4 34/61/4 33/62/4 +f 22/63/12 23/57/12 39/58/12 38/64/12 +f 21/65/3 22/63/3 38/64/3 37/66/3 +f 32/67/7 17/59/7 33/62/7 48/68/7 +f 20/69/14 21/70/14 37/71/14 36/72/14 +f 31/73/17 32/67/17 48/68/17 47/74/17 +f 19/75/18 20/69/18 36/72/18 35/76/18 +f 30/77/8 31/73/8 47/74/8 46/78/8 +f 18/60/13 19/75/13 35/76/13 34/61/13 +f 29/79/1 30/77/1 46/78/1 45/80/1 +f 28/48/9 29/81/9 45/82/9 44/49/9 +f 49/83/19 50/84/19 52/85/19 51/86/19 +f 68/86/20 67/83/20 54/84/20 53/85/20 +f 70/83/21 69/84/21 56/85/21 55/86/21 +f 72/84/22 71/85/22 58/86/22 57/83/22 +f 74/83/23 73/84/23 60/85/23 59/86/23 +f 76/83/24 75/84/24 62/85/24 61/86/24 +f 80/84/25 79/85/25 66/86/25 65/83/25 +f 78/83/26 77/84/26 64/85/26 63/86/26 +f 81/87/23 82/88/23 83/89/23 84/90/23 +f 85/88/24 86/89/24 87/90/24 88/87/24 +f 89/89/26 90/90/26 91/87/26 92/88/26 +f 93/90/25 94/87/25 95/88/25 96/89/25 +f 97/90/19 98/87/19 99/88/19 100/89/19 +f 101/87/20 102/88/20 103/89/20 104/90/20 +f 105/90/22 106/87/22 107/88/22 108/89/22 +f 109/89/21 110/90/21 111/87/21 112/88/21 +f 75/88/22 76/87/22 101/86/22 104/85/22 +f 71/88/20 72/87/20 93/86/20 96/85/20 +f 67/86/25 68/85/25 85/88/25 88/87/25 +f 79/86/24 80/85/24 105/88/24 108/87/24 +f 77/88/23 78/87/23 109/86/23 112/85/23 +f 73/88/21 74/87/21 97/86/21 100/85/21 +f 69/86/19 70/85/19 89/88/19 92/87/19 +f 50/86/26 49/85/26 81/88/26 84/87/26 +f 123/91/15 139/92/15 140/93/15 124/94/15 +f 122/95/10 138/96/10 139/97/10 123/98/10 +f 121/99/2 137/100/2 138/96/2 122/95/2 +f 120/101/11 136/102/11 137/100/11 121/99/11 +f 119/103/16 135/104/16 136/102/16 120/101/16 +f 113/105/4 129/106/4 130/107/4 114/108/4 +f 118/109/12 134/110/12 135/104/12 119/103/12 +f 117/111/3 133/112/3 134/110/3 118/109/3 +f 128/113/7 144/114/7 129/106/7 113/105/7 +f 116/115/14 132/116/14 133/112/14 117/111/14 +f 127/117/17 143/118/17 144/114/17 128/113/17 +f 115/119/18 131/120/18 132/116/18 116/115/18 +f 126/121/8 142/122/8 143/118/8 127/117/8 +f 114/108/13 130/107/13 131/123/13 115/124/13 +f 125/125/1 141/126/1 142/122/1 126/121/1 +f 124/94/9 140/93/9 141/126/9 125/125/9 +f 145/127/17 146/128/17 148/129/17 147/130/17 +f 147/131/1 148/132/1 150/133/1 149/134/1 +f 149/134/15 150/133/15 152/135/15 151/136/15 +f 151/136/2 152/135/2 154/137/2 153/138/2 +f 153/138/16 154/137/16 156/139/16 155/140/16 +f 155/140/3 156/139/3 158/141/3 157/142/3 +f 159/143/4 160/144/4 146/128/4 145/127/4 +f 157/142/18 158/141/18 160/144/18 159/143/18 diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png new file mode 100644 index 0000000..4cc9f20 Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_inv.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png new file mode 100644 index 0000000..89975e8 Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_off.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png new file mode 100644 index 0000000..759388a Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_sides_on.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png new file mode 100644 index 0000000..37d634f Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_top_bottom.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc.png new file mode 100644 index 0000000..45a720b Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_misc.png differ diff --git a/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom.png b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom.png new file mode 100644 index 0000000..fa76591 Binary files /dev/null and b/mods/mesecons/mesecons_hydroturbine/textures/jeija_hydro_turbine_turbine_top_bottom.png differ diff --git a/mods/mesecons/mesecons_insulated/depends.txt b/mods/mesecons/mesecons_insulated/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_insulated/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_insulated/doc/insulated/description.html b/mods/mesecons/mesecons_insulated/doc/insulated/description.html new file mode 100644 index 0000000..df2a6df --- /dev/null +++ b/mods/mesecons/mesecons_insulated/doc/insulated/description.html @@ -0,0 +1 @@ + Insulated mesecons are conductors that only conduct in one direction (and also not up or down). diff --git a/mods/mesecons/mesecons_insulated/doc/insulated/preview.png b/mods/mesecons/mesecons_insulated/doc/insulated/preview.png new file mode 100644 index 0000000..bf544e8 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/doc/insulated/preview.png differ diff --git a/mods/mesecons/mesecons_insulated/doc/insulated/recipe.png b/mods/mesecons/mesecons_insulated/doc/insulated/recipe.png new file mode 100644 index 0000000..f2a731a Binary files /dev/null and b/mods/mesecons/mesecons_insulated/doc/insulated/recipe.png differ diff --git a/mods/mesecons/mesecons_insulated/init.lua b/mods/mesecons/mesecons_insulated/init.lua new file mode 100644 index 0000000..15b916b --- /dev/null +++ b/mods/mesecons/mesecons_insulated/init.lua @@ -0,0 +1,80 @@ +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 = "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 = "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/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png new file mode 100644 index 0000000..85ca90b Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_off.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png new file mode 100644 index 0000000..772d9a6 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_curved_tb_on.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png new file mode 100644 index 0000000..89a8385 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_off.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png new file mode 100644 index 0000000..75cf435 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_ends_on.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png new file mode 100644 index 0000000..db33f14 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_off.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png new file mode 100644 index 0000000..f76e9a8 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_sides_on.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png new file mode 100644 index 0000000..a897b29 Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_off.png differ diff --git a/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png new file mode 100644 index 0000000..8fc312b Binary files /dev/null and b/mods/mesecons/mesecons_insulated/textures/jeija_insulated_wire_tjunction_tb_on.png differ diff --git a/mods/mesecons/mesecons_lamp/depends.txt b/mods/mesecons/mesecons_lamp/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_lamp/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_lamp/doc/lamp/description.html b/mods/mesecons/mesecons_lamp/doc/lamp/description.html new file mode 100644 index 0000000..5bfe6c5 --- /dev/null +++ b/mods/mesecons/mesecons_lamp/doc/lamp/description.html @@ -0,0 +1 @@ +Lamps are effectors that if powered emit light. diff --git a/mods/mesecons/mesecons_lamp/doc/lamp/preview.png b/mods/mesecons/mesecons_lamp/doc/lamp/preview.png new file mode 100644 index 0000000..a581cb3 Binary files /dev/null and b/mods/mesecons/mesecons_lamp/doc/lamp/preview.png differ diff --git a/mods/mesecons/mesecons_lamp/doc/lamp/recipe.png b/mods/mesecons/mesecons_lamp/doc/lamp/recipe.png new file mode 100644 index 0000000..77570bd Binary files /dev/null and b/mods/mesecons/mesecons_lamp/doc/lamp/recipe.png differ diff --git a/mods/mesecons/mesecons_lamp/init.lua b/mods/mesecons/mesecons_lamp/init.lua new file mode 100644 index 0000000..811e659 --- /dev/null +++ b/mods/mesecons/mesecons_lamp/init.lua @@ -0,0 +1,61 @@ +-- 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="Meselamp", + 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/mesecons/mesecons_lamp/textures/jeija_meselamp.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp.png new file mode 100644 index 0000000..5456ee9 Binary files /dev/null and b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp.png differ diff --git a/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png new file mode 100644 index 0000000..67bd7fd Binary files /dev/null and b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_off.png differ diff --git a/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png new file mode 100644 index 0000000..2316e00 Binary files /dev/null and b/mods/mesecons/mesecons_lamp/textures/jeija_meselamp_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/depends.txt b/mods/mesecons/mesecons_lightstone/depends.txt new file mode 100644 index 0000000..f9705e0 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/depends.txt @@ -0,0 +1,2 @@ +mesecons +dye diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html new file mode 100644 index 0000000..813e6ea --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/description.html @@ -0,0 +1 @@ +Effector, glows blue when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png new file mode 100644 index 0000000..579f719 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png new file mode 100644 index 0000000..ce8ebd7 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_blue/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html new file mode 100644 index 0000000..826ca0f --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/description.html @@ -0,0 +1 @@ +Effector, glows dark grey when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png new file mode 100644 index 0000000..56fe6ea Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png new file mode 100644 index 0000000..fed0db2 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_darkgrey/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_green/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/description.html new file mode 100644 index 0000000..cb5b515 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/description.html @@ -0,0 +1 @@ +Effector, glows green when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png new file mode 100644 index 0000000..9efc774 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png new file mode 100644 index 0000000..6690064 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_green/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html new file mode 100644 index 0000000..990b501 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/description.html @@ -0,0 +1 @@ +Effector, glows light grey when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png new file mode 100644 index 0000000..0084fa3 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png new file mode 100644 index 0000000..e790012 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_lightgrey/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_red/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/description.html new file mode 100644 index 0000000..699b1ee --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/description.html @@ -0,0 +1 @@ +Effector, glows red when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png new file mode 100644 index 0000000..5fd3eba Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png new file mode 100644 index 0000000..7791a99 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_red/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html new file mode 100644 index 0000000..2bed7f2 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/description.html @@ -0,0 +1 @@ +Effector, glows yellow when powered. diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png new file mode 100644 index 0000000..fb9f644 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/preview.png differ diff --git a/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png new file mode 100644 index 0000000..f17e9d4 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/doc/lightstone_yellow/recipe.png differ diff --git a/mods/mesecons/mesecons_lightstone/init.lua b/mods/mesecons/mesecons_lightstone/init.lua new file mode 100644 index 0000000..da7cc41 --- /dev/null +++ b/mods/mesecons/mesecons_lightstone/init.lua @@ -0,0 +1,60 @@ +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) + minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_off", { + tiles = {texture_off}, + groups = {cracky=2, mesecon_effector_off = 1, mesecon = 2}, + description=name.." Lightstone", + 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") +mesecon.lightstone_add("green", "dye:green", "jeija_lightstone_green_off.png", "jeija_lightstone_green_on.png") +mesecon.lightstone_add("blue", "dye:blue", "jeija_lightstone_blue_off.png", "jeija_lightstone_blue_on.png") +mesecon.lightstone_add("gray", "dye:grey", "jeija_lightstone_gray_off.png", "jeija_lightstone_gray_on.png") +mesecon.lightstone_add("darkgray", "dye:dark_grey", "jeija_lightstone_darkgray_off.png", "jeija_lightstone_darkgray_on.png") +mesecon.lightstone_add("yellow", "dye:yellow", "jeija_lightstone_yellow_off.png", "jeija_lightstone_yellow_on.png") diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png new file mode 100644 index 0000000..09acc22 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png new file mode 100644 index 0000000..93c8638 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_blue_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png new file mode 100644 index 0000000..7e5aae7 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png new file mode 100644 index 0000000..e6d4d00 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_darkgray_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png new file mode 100644 index 0000000..f168fc2 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png new file mode 100644 index 0000000..24c5470 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_gray_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png new file mode 100644 index 0000000..2f214fa Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png new file mode 100644 index 0000000..225bf4e Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_green_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png new file mode 100644 index 0000000..3c828b2 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png new file mode 100644 index 0000000..512b0fe Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_red_on.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png new file mode 100644 index 0000000..2e7fed0 Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_off.png differ diff --git a/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png new file mode 100644 index 0000000..8943aca Binary files /dev/null and b/mods/mesecons/mesecons_lightstone/textures/jeija_lightstone_yellow_on.png differ diff --git a/mods/mesecons/mesecons_luacontroller/depends.txt b/mods/mesecons/mesecons_luacontroller/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_luacontroller/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_luacontroller/doc/luacontroller/description.html b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/description.html new file mode 100644 index 0000000..ca14615 --- /dev/null +++ b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/description.html @@ -0,0 +1,5 @@ +The luacontroller is an advanced programmable component. +You can simply code it in the language mesecons uses itself: Lua! +All the code runs in a sandbox, so it's completely safe (but I won't guarantee that for absolute certainty!). + +Documentation is available here! diff --git a/mods/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png new file mode 100644 index 0000000..f16c9d0 Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/preview.png differ diff --git a/mods/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png new file mode 100644 index 0000000..529b66d Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/doc/luacontroller/recipe.png differ diff --git a/mods/mesecons/mesecons_luacontroller/init.lua b/mods/mesecons/mesecons_luacontroller/init.lua new file mode 100644 index 0000000..d874fdf --- /dev/null +++ b/mods/mesecons/mesecons_luacontroller/init.lua @@ -0,0 +1,686 @@ +-- ______ +-- | +-- | +-- | __ ___ _ __ _ _ +-- | | | | | |\ | | |_| | | | | |_ |_| +-- |___| |______ |__| | \| | | \ |__| |_ |_ |_ |\ +-- | +-- | +-- + +-- 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 = minetest.get_meta(pos):get_int("heat"), + 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(errmsg or "") + meta:set_string("formspec", "size[10,8]".. + "background[-0.2,-0.25;10.4,8.75;jeija_luac_background.png]".. + "textarea[0.2,0.6;10.2,5;code;;"..code.."]".. + "image_button[3.75,6;2.5,1;jeija_luac_runbutton.png;program;]".. + "image_button_exit[9.72,-0.25;0.425,0.4;jeija_close_window.png;exit;]".. + "label[0.1,5;"..errmsg.."]") + meta:set_int("heat", 0) + 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.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/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png new file mode 100644 index 0000000..40e316c Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_background.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png new file mode 100644 index 0000000..157507f Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luac_runbutton.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png new file mode 100644 index 0000000..a187e8e Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_A.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png new file mode 100644 index 0000000..738ba96 Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_B.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png new file mode 100644 index 0000000..abe0fe6 Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_C.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png new file mode 100644 index 0000000..cc10170 Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_LED_D.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png new file mode 100644 index 0000000..d1a17af Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_burnt_top.png differ diff --git a/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png new file mode 100644 index 0000000..3128230 Binary files /dev/null and b/mods/mesecons/mesecons_luacontroller/textures/jeija_luacontroller_top.png differ diff --git a/mods/mesecons/mesecons_materials/depends.txt b/mods/mesecons/mesecons_materials/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_materials/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_materials/doc/fiber/description.html b/mods/mesecons/mesecons_materials/doc/fiber/description.html new file mode 100644 index 0000000..23a414a --- /dev/null +++ b/mods/mesecons/mesecons_materials/doc/fiber/description.html @@ -0,0 +1 @@ +Craftitem: It can't be placed! Made by cooking glue in the furnace. Used for insulated mesecon crafting. diff --git a/mods/mesecons/mesecons_materials/doc/fiber/preview.png b/mods/mesecons/mesecons_materials/doc/fiber/preview.png new file mode 100644 index 0000000..cad9645 Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/fiber/preview.png differ diff --git a/mods/mesecons/mesecons_materials/doc/fiber/recipe.png b/mods/mesecons/mesecons_materials/doc/fiber/recipe.png new file mode 100644 index 0000000..7a53123 Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/fiber/recipe.png differ diff --git a/mods/mesecons/mesecons_materials/doc/glue/description.html b/mods/mesecons/mesecons_materials/doc/glue/description.html new file mode 100644 index 0000000..a18490c --- /dev/null +++ b/mods/mesecons/mesecons_materials/doc/glue/description.html @@ -0,0 +1 @@ +Craftitem: It can't be placed! Made by cooking saplings in furnace. Used for sticky pistons and sticky movestones. diff --git a/mods/mesecons/mesecons_materials/doc/glue/preview.png b/mods/mesecons/mesecons_materials/doc/glue/preview.png new file mode 100644 index 0000000..0158f9c Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/glue/preview.png differ diff --git a/mods/mesecons/mesecons_materials/doc/glue/recipe.png b/mods/mesecons/mesecons_materials/doc/glue/recipe.png new file mode 100644 index 0000000..b20ce66 Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/glue/recipe.png differ diff --git a/mods/mesecons/mesecons_materials/doc/silicon/description.html b/mods/mesecons/mesecons_materials/doc/silicon/description.html new file mode 100644 index 0000000..a2ae598 --- /dev/null +++ b/mods/mesecons/mesecons_materials/doc/silicon/description.html @@ -0,0 +1 @@ +Silicon is just a craftitem: It can't be placed. You'll need it in order to craft other items. diff --git a/mods/mesecons/mesecons_materials/doc/silicon/preview.png b/mods/mesecons/mesecons_materials/doc/silicon/preview.png new file mode 100644 index 0000000..cd52dbd Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/silicon/preview.png differ diff --git a/mods/mesecons/mesecons_materials/doc/silicon/recipe.png b/mods/mesecons/mesecons_materials/doc/silicon/recipe.png new file mode 100644 index 0000000..9e8b332 Binary files /dev/null and b/mods/mesecons/mesecons_materials/doc/silicon/recipe.png differ diff --git a/mods/mesecons/mesecons_materials/init.lua b/mods/mesecons/mesecons_materials/init.lua new file mode 100644 index 0000000..eb19c3e --- /dev/null +++ b/mods/mesecons/mesecons_materials/init.lua @@ -0,0 +1,41 @@ +-- Glue and fiber +minetest.register_craftitem("mesecons_materials:glue", { + image = "mesecons_glue.png", + on_place_on_ground = minetest.craftitem_place_item, + description="Glue", +}) + +minetest.register_craftitem("mesecons_materials:fiber", { + image = "mesecons_fiber.png", + on_place_on_ground = minetest.craftitem_place_item, + description="Fiber", +}) + +minetest.register_craft({ + output = "mesecons_materials:glue 2", + type = "cooking", + recipe = "group:sapling", + cooktime = 2 +}) + +minetest.register_craft({ + output = "mesecons_materials:fiber 6", + type = "cooking", + recipe = "mesecons_materials:glue", + cooktime = 4 +}) + +-- Silicon +minetest.register_craftitem("mesecons_materials:silicon", { + image = "mesecons_silicon.png", + on_place_on_ground = minetest.craftitem_place_item, + description="Silicon", +}) + +minetest.register_craft({ + output = "mesecons_materials:silicon 4", + recipe = { + {"group:sand", "group:sand"}, + {"group:sand", "default:steel_ingot"}, + } +}) diff --git a/mods/mesecons/mesecons_materials/textures/mesecons_fiber.png b/mods/mesecons/mesecons_materials/textures/mesecons_fiber.png new file mode 100644 index 0000000..e8c7b08 Binary files /dev/null and b/mods/mesecons/mesecons_materials/textures/mesecons_fiber.png differ diff --git a/mods/mesecons/mesecons_materials/textures/mesecons_glue.png b/mods/mesecons/mesecons_materials/textures/mesecons_glue.png new file mode 100644 index 0000000..2f351d1 Binary files /dev/null and b/mods/mesecons/mesecons_materials/textures/mesecons_glue.png differ diff --git a/mods/mesecons/mesecons_materials/textures/mesecons_silicon.png b/mods/mesecons/mesecons_materials/textures/mesecons_silicon.png new file mode 100644 index 0000000..a7b0d52 Binary files /dev/null and b/mods/mesecons/mesecons_materials/textures/mesecons_silicon.png differ diff --git a/mods/mesecons/mesecons_microcontroller/depends.txt b/mods/mesecons/mesecons_microcontroller/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_microcontroller/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_microcontroller/init.lua b/mods/mesecons/mesecons_microcontroller/init.lua new file mode 100644 index 0000000..b241713 --- /dev/null +++ b/mods/mesecons/mesecons_microcontroller/init.lua @@ -0,0 +1,694 @@ +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 + +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', ''}, + } +}) + +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/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png b/mods/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png new file mode 100644 index 0000000..438c934 Binary files /dev/null and b/mods/mesecons/mesecons_microcontroller/textures/jeija_microcontroller_top.png differ diff --git a/mods/mesecons/mesecons_movestones/depends.txt b/mods/mesecons/mesecons_movestones/depends.txt new file mode 100644 index 0000000..a596cf8 --- /dev/null +++ b/mods/mesecons/mesecons_movestones/depends.txt @@ -0,0 +1,3 @@ +mesecons +mesecons_materials +mesecons_mvps diff --git a/mods/mesecons/mesecons_movestones/doc/movestone/description.html b/mods/mesecons/mesecons_movestones/doc/movestone/description.html new file mode 100644 index 0000000..8555a9e --- /dev/null +++ b/mods/mesecons/mesecons_movestones/doc/movestone/description.html @@ -0,0 +1 @@ +Movestones are effectors that push the blocks in front of them. They move along on the right side of a mesecon wire track. diff --git a/mods/mesecons/mesecons_movestones/doc/movestone/preview.png b/mods/mesecons/mesecons_movestones/doc/movestone/preview.png new file mode 100644 index 0000000..bda64db Binary files /dev/null and b/mods/mesecons/mesecons_movestones/doc/movestone/preview.png differ diff --git a/mods/mesecons/mesecons_movestones/doc/movestone/recipe.png b/mods/mesecons/mesecons_movestones/doc/movestone/recipe.png new file mode 100644 index 0000000..f3d45df Binary files /dev/null and b/mods/mesecons/mesecons_movestones/doc/movestone/recipe.png differ diff --git a/mods/mesecons/mesecons_movestones/doc/movestone_sticky/description.html b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/description.html new file mode 100644 index 0000000..460c277 --- /dev/null +++ b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/description.html @@ -0,0 +1 @@ +Movestones are effectors that push the blocks in front of them. They move along on the right side of a mesecon wire track. Sticky ones also pull blocks. diff --git a/mods/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png new file mode 100644 index 0000000..85f9213 Binary files /dev/null and b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/preview.png differ diff --git a/mods/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png new file mode 100644 index 0000000..bbf0a94 Binary files /dev/null and b/mods/mesecons/mesecons_movestones/doc/movestone_sticky/recipe.png differ diff --git a/mods/mesecons/mesecons_movestones/init.lua b/mods/mesecons/mesecons_movestones/init.lua new file mode 100644 index 0000000..9e9dce6 --- /dev/null +++ b/mods/mesecons/mesecons_movestones/init.lua @@ -0,0 +1,156 @@ +-- 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 2", + 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/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png new file mode 100644 index 0000000..358c357 Binary files /dev/null and b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_arrows.png differ diff --git a/mods/mesecons/mesecons_movestones/textures/jeija_movestone_side.png b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_side.png new file mode 100644 index 0000000..de753ef Binary files /dev/null and b/mods/mesecons/mesecons_movestones/textures/jeija_movestone_side.png differ diff --git a/mods/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png b/mods/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png new file mode 100644 index 0000000..8953cf1 Binary files /dev/null and b/mods/mesecons/mesecons_movestones/textures/jeija_sticky_movestone.png differ diff --git a/mods/mesecons/mesecons_mvps/depends.txt b/mods/mesecons/mesecons_mvps/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_mvps/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_mvps/init.lua b/mods/mesecons/mesecons_mvps/init.lua new file mode 100644 index 0000000..2c6161b --- /dev/null +++ b/mods/mesecons/mesecons_mvps/init.lua @@ -0,0 +1,248 @@ +--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() + 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) + 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 + 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") diff --git a/mods/mesecons/mesecons_noteblock/depends.txt b/mods/mesecons/mesecons_noteblock/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_noteblock/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_noteblock/doc/noteblock/description.html b/mods/mesecons/mesecons_noteblock/doc/noteblock/description.html new file mode 100644 index 0000000..729bfe1 --- /dev/null +++ b/mods/mesecons/mesecons_noteblock/doc/noteblock/description.html @@ -0,0 +1,13 @@ +This effector makes a sound if powered and can be used for making music. Normally it makes piano sounds. The sound frequency can be changed by punching the block. There are some special sounds that depend on the block below: +
+ + + + + + + + + + +
Block BelowEffect
GlassHihat
StoneKick
ChestSnare
TreeCrash
GlassHihat
WoodLite Crash
Coal BlockExplosion Sound
Lava SourceFire Sound
Steel BlockRaises the pitch by one octave
diff --git a/mods/mesecons/mesecons_noteblock/doc/noteblock/preview.png b/mods/mesecons/mesecons_noteblock/doc/noteblock/preview.png new file mode 100644 index 0000000..c4991fb Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/doc/noteblock/preview.png differ diff --git a/mods/mesecons/mesecons_noteblock/doc/noteblock/recipe.png b/mods/mesecons/mesecons_noteblock/doc/noteblock/recipe.png new file mode 100644 index 0000000..d3c3675 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/doc/noteblock/recipe.png differ diff --git a/mods/mesecons/mesecons_noteblock/init.lua b/mods/mesecons/mesecons_noteblock/init.lua new file mode 100644 index 0000000..d5e365c --- /dev/null +++ b/mods/mesecons/mesecons_noteblock/init.lua @@ -0,0 +1,69 @@ +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/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg new file mode 100644 index 0000000..331fc1c Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg new file mode 100644 index 0000000..695b0f4 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_a2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg new file mode 100644 index 0000000..db96aed Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg new file mode 100644 index 0000000..27bd09d Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_asharp2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg new file mode 100644 index 0000000..810fe18 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg new file mode 100644 index 0000000..3de1250 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_b2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg new file mode 100644 index 0000000..5c60d31 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg new file mode 100644 index 0000000..724db7d Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_c2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg new file mode 100644 index 0000000..0308d11 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_crash.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg new file mode 100644 index 0000000..12c1ef3 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg new file mode 100644 index 0000000..fc7f6c8 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_csharp2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg new file mode 100644 index 0000000..929b7fb Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg new file mode 100644 index 0000000..dfd702b Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_d2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg new file mode 100644 index 0000000..eb6045d Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg new file mode 100644 index 0000000..5ac16dd Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_dsharp2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg new file mode 100644 index 0000000..94977e0 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg new file mode 100644 index 0000000..1dcc0c4 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_e2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg new file mode 100644 index 0000000..221d926 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg new file mode 100644 index 0000000..acf10db Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_f2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg new file mode 100644 index 0000000..7af83a8 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg new file mode 100644 index 0000000..a96f637 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_fsharp2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg new file mode 100644 index 0000000..480ca36 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg new file mode 100644 index 0000000..917b2b9 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_g2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg new file mode 100644 index 0000000..2e71fea Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg new file mode 100644 index 0000000..941c685 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_gsharp2.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg new file mode 100644 index 0000000..0afa7c0 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_hihat.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg new file mode 100644 index 0000000..10d585b Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_kick.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg new file mode 100644 index 0000000..79ab256 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_litecrash.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg new file mode 100644 index 0000000..83a7944 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/sounds/mesecons_noteblock_snare.ogg differ diff --git a/mods/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png b/mods/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png new file mode 100644 index 0000000..7158a49 Binary files /dev/null and b/mods/mesecons/mesecons_noteblock/textures/mesecons_noteblock.png differ diff --git a/mods/mesecons/mesecons_pistons/depends.txt b/mods/mesecons/mesecons_pistons/depends.txt new file mode 100644 index 0000000..01f085b --- /dev/null +++ b/mods/mesecons/mesecons_pistons/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_mvps diff --git a/mods/mesecons/mesecons_pistons/doc/piston/description.html b/mods/mesecons/mesecons_pistons/doc/piston/description.html new file mode 100644 index 0000000..d95dfb9 --- /dev/null +++ b/mods/mesecons/mesecons_pistons/doc/piston/description.html @@ -0,0 +1 @@ +Pistons are effectors, they push up to 20 blocks in front of them. The push direction can be set by placing them from different angles. diff --git a/mods/mesecons/mesecons_pistons/doc/piston/preview.png b/mods/mesecons/mesecons_pistons/doc/piston/preview.png new file mode 100644 index 0000000..9e9ede3 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/doc/piston/preview.png differ diff --git a/mods/mesecons/mesecons_pistons/doc/piston/recipe.png b/mods/mesecons/mesecons_pistons/doc/piston/recipe.png new file mode 100644 index 0000000..0a71159 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/doc/piston/recipe.png differ diff --git a/mods/mesecons/mesecons_pistons/doc/piston_sticky/description.html b/mods/mesecons/mesecons_pistons/doc/piston_sticky/description.html new file mode 100644 index 0000000..3974097 --- /dev/null +++ b/mods/mesecons/mesecons_pistons/doc/piston_sticky/description.html @@ -0,0 +1 @@ +Sticky pistons are effectors, they push up to 20 blocks in front of them. The push direction can be set by placing them from different angles. Sticky ones also pull 1 block. diff --git a/mods/mesecons/mesecons_pistons/doc/piston_sticky/preview.png b/mods/mesecons/mesecons_pistons/doc/piston_sticky/preview.png new file mode 100644 index 0000000..716d675 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/doc/piston_sticky/preview.png differ diff --git a/mods/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png b/mods/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png new file mode 100644 index 0000000..3520736 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/doc/piston_sticky/recipe.png differ diff --git a/mods/mesecons/mesecons_pistons/init.lua b/mods/mesecons/mesecons_pistons/init.lua new file mode 100644 index 0000000..a52c802 --- /dev/null +++ b/mods/mesecons/mesecons_pistons/init.lua @@ -0,0 +1,770 @@ +-- 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/mesecons/mesecons_pistons/sounds/piston_extend.ogg b/mods/mesecons/mesecons_pistons/sounds/piston_extend.ogg new file mode 100644 index 0000000..e234ad9 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/sounds/piston_extend.ogg differ diff --git a/mods/mesecons/mesecons_pistons/sounds/piston_retract.ogg b/mods/mesecons/mesecons_pistons/sounds/piston_retract.ogg new file mode 100644 index 0000000..feb9f04 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/sounds/piston_retract.ogg differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_back.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_back.png new file mode 100644 index 0000000..6a57dce Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_back.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png new file mode 100644 index 0000000..5a3af9b Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_bottom.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_left.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_left.png new file mode 100644 index 0000000..215dd73 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_left.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png new file mode 100644 index 0000000..0ade67e Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_on_front.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png new file mode 100644 index 0000000..fe87943 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_back.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png new file mode 100644 index 0000000..87c4e81 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_bottom.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png new file mode 100644 index 0000000..8ec9dc6 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png new file mode 100644 index 0000000..e38b4e6 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_front_sticky.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png new file mode 100644 index 0000000..bc5495b Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_left.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png new file mode 100644 index 0000000..32ee32f Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_right.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png new file mode 100644 index 0000000..72f04e9 Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_pusher_top.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_right.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_right.png new file mode 100644 index 0000000..176463c Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_right.png differ diff --git a/mods/mesecons/mesecons_pistons/textures/mesecons_piston_top.png b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_top.png new file mode 100644 index 0000000..5c8bace Binary files /dev/null and b/mods/mesecons/mesecons_pistons/textures/mesecons_piston_top.png differ diff --git a/mods/mesecons/mesecons_powerplant/depends.txt b/mods/mesecons/mesecons_powerplant/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_powerplant/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_powerplant/doc/powerplant/description.html b/mods/mesecons/mesecons_powerplant/doc/powerplant/description.html new file mode 100644 index 0000000..12abbbb --- /dev/null +++ b/mods/mesecons/mesecons_powerplant/doc/powerplant/description.html @@ -0,0 +1 @@ +A power plant is a receptor that is always turned on: It provides energy. diff --git a/mods/mesecons/mesecons_powerplant/doc/powerplant/preview.png b/mods/mesecons/mesecons_powerplant/doc/powerplant/preview.png new file mode 100644 index 0000000..473d15c Binary files /dev/null and b/mods/mesecons/mesecons_powerplant/doc/powerplant/preview.png differ diff --git a/mods/mesecons/mesecons_powerplant/doc/powerplant/recipe.png b/mods/mesecons/mesecons_powerplant/doc/powerplant/recipe.png new file mode 100644 index 0000000..04a4002 Binary files /dev/null and b/mods/mesecons/mesecons_powerplant/doc/powerplant/recipe.png differ diff --git a/mods/mesecons/mesecons_powerplant/init.lua b/mods/mesecons/mesecons_powerplant/init.lua new file mode 100644 index 0000000..a5e3327 --- /dev/null +++ b/mods/mesecons/mesecons_powerplant/init.lua @@ -0,0 +1,31 @@ +-- 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/mesecons/mesecons_powerplant/textures/jeija_power_plant.png b/mods/mesecons/mesecons_powerplant/textures/jeija_power_plant.png new file mode 100644 index 0000000..edc8891 Binary files /dev/null and b/mods/mesecons/mesecons_powerplant/textures/jeija_power_plant.png differ diff --git a/mods/mesecons/mesecons_pressureplates/depends.txt b/mods/mesecons/mesecons_pressureplates/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_pressureplates/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html new file mode 100644 index 0000000..3edc95b --- /dev/null +++ b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/description.html @@ -0,0 +1 @@ +This receptor turns on if there's an object above it. And object can be a player, an item, a mob... diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png new file mode 100644 index 0000000..235ffc4 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/preview.png differ diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png new file mode 100644 index 0000000..62acf45 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_stone/recipe.png differ diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html new file mode 100644 index 0000000..3edc95b --- /dev/null +++ b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/description.html @@ -0,0 +1 @@ +This receptor turns on if there's an object above it. And object can be a player, an item, a mob... diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png new file mode 100644 index 0000000..7063cb0 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/preview.png differ diff --git a/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png new file mode 100644 index 0000000..429d491 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/doc/pressureplate_wood/recipe.png differ diff --git a/mods/mesecons/mesecons_pressureplates/init.lua b/mods/mesecons/mesecons_pressureplates/init.lua new file mode 100644 index 0000000..cd4529b --- /dev/null +++ b/mods/mesecons/mesecons_pressureplates/init.lua @@ -0,0 +1,94 @@ +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/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png new file mode 100644 index 0000000..bfe5a1d Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_inv.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png new file mode 100644 index 0000000..46140da Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png new file mode 100644 index 0000000..2ad9acc Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_off_edges.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png new file mode 100644 index 0000000..dc64931 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png new file mode 100644 index 0000000..51add95 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_on_edges.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png new file mode 100644 index 0000000..c533567 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_stone_wield.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png new file mode 100644 index 0000000..36dacd0 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_inv.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png new file mode 100644 index 0000000..ca98757 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png new file mode 100644 index 0000000..665ae97 Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_off_edges.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png new file mode 100644 index 0000000..e1a7d8e Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png new file mode 100644 index 0000000..358f2ea Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_on_edges.png differ diff --git a/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png new file mode 100644 index 0000000..50b321d Binary files /dev/null and b/mods/mesecons/mesecons_pressureplates/textures/jeija_pressure_plate_wood_wield.png differ diff --git a/mods/mesecons/mesecons_random/depends.txt b/mods/mesecons/mesecons_random/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_random/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_random/doc/ghoststone/description.html b/mods/mesecons/mesecons_random/doc/ghoststone/description.html new file mode 100644 index 0000000..138a2b3 --- /dev/null +++ b/mods/mesecons/mesecons_random/doc/ghoststone/description.html @@ -0,0 +1 @@ +Ghoststones disappear when powered, just like Removestones. But in contrast to Removestones, they Reappear again when not powered anymore and they are also conductive. diff --git a/mods/mesecons/mesecons_random/doc/ghoststone/preview.png b/mods/mesecons/mesecons_random/doc/ghoststone/preview.png new file mode 100644 index 0000000..4ab33fb Binary files /dev/null and b/mods/mesecons/mesecons_random/doc/ghoststone/preview.png differ diff --git a/mods/mesecons/mesecons_random/doc/ghoststone/recipe.png b/mods/mesecons/mesecons_random/doc/ghoststone/recipe.png new file mode 100644 index 0000000..3bd385d Binary files /dev/null and b/mods/mesecons/mesecons_random/doc/ghoststone/recipe.png differ diff --git a/mods/mesecons/mesecons_random/doc/removestone/description.html b/mods/mesecons/mesecons_random/doc/removestone/description.html new file mode 100644 index 0000000..d540fe9 --- /dev/null +++ b/mods/mesecons/mesecons_random/doc/removestone/description.html @@ -0,0 +1 @@ +Removestones are propably the simplest effectors possible. They simply disappear when powered. diff --git a/mods/mesecons/mesecons_random/doc/removestone/preview.png b/mods/mesecons/mesecons_random/doc/removestone/preview.png new file mode 100644 index 0000000..15caf3f Binary files /dev/null and b/mods/mesecons/mesecons_random/doc/removestone/preview.png differ diff --git a/mods/mesecons/mesecons_random/doc/removestone/recipe.png b/mods/mesecons/mesecons_random/doc/removestone/recipe.png new file mode 100644 index 0000000..f271963 Binary files /dev/null and b/mods/mesecons/mesecons_random/doc/removestone/recipe.png differ diff --git a/mods/mesecons/mesecons_random/init.lua b/mods/mesecons/mesecons_random/init.lua new file mode 100644 index 0000000..4c1d299 --- /dev/null +++ b/mods/mesecons/mesecons_random/init.lua @@ -0,0 +1,85 @@ +-- 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", + 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/mesecons/mesecons_random/textures/jeija_ghoststone.png b/mods/mesecons/mesecons_random/textures/jeija_ghoststone.png new file mode 100644 index 0000000..1917b7c Binary files /dev/null and b/mods/mesecons/mesecons_random/textures/jeija_ghoststone.png differ diff --git a/mods/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png b/mods/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png new file mode 100644 index 0000000..c715d7f Binary files /dev/null and b/mods/mesecons/mesecons_random/textures/jeija_ghoststone_inv.png differ diff --git a/mods/mesecons/mesecons_random/textures/jeija_removestone.png b/mods/mesecons/mesecons_random/textures/jeija_removestone.png new file mode 100644 index 0000000..1917b7c Binary files /dev/null and b/mods/mesecons/mesecons_random/textures/jeija_removestone.png differ diff --git a/mods/mesecons/mesecons_random/textures/jeija_removestone_inv.png b/mods/mesecons/mesecons_random/textures/jeija_removestone_inv.png new file mode 100644 index 0000000..c715d7f Binary files /dev/null and b/mods/mesecons/mesecons_random/textures/jeija_removestone_inv.png differ diff --git a/mods/mesecons/mesecons_receiver/depends.txt b/mods/mesecons/mesecons_receiver/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_receiver/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_receiver/init.lua b/mods/mesecons/mesecons_receiver/init.lua new file mode 100644 index 0000000..a5cf7d5 --- /dev/null +++ b/mods/mesecons/mesecons_receiver/init.lua @@ -0,0 +1,259 @@ +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/mesecons/mesecons_receiver/textures/receiver_bottom_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_off.png new file mode 100644 index 0000000..b95903e Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_off.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_bottom_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_on.png new file mode 100644 index 0000000..d0b7006 Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_bottom_on.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_fb_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_fb_off.png new file mode 100644 index 0000000..aed3008 Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_fb_off.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_fb_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_fb_on.png new file mode 100644 index 0000000..0916736 Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_fb_on.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_lr_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_lr_off.png new file mode 100644 index 0000000..1fb2b3a Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_lr_off.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_lr_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_lr_on.png new file mode 100644 index 0000000..087c0b4 Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_lr_on.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_top_off.png b/mods/mesecons/mesecons_receiver/textures/receiver_top_off.png new file mode 100644 index 0000000..ae50106 Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_top_off.png differ diff --git a/mods/mesecons/mesecons_receiver/textures/receiver_top_on.png b/mods/mesecons/mesecons_receiver/textures/receiver_top_on.png new file mode 100644 index 0000000..5b48cac Binary files /dev/null and b/mods/mesecons/mesecons_receiver/textures/receiver_top_on.png differ diff --git a/mods/mesecons/mesecons_solarpanel/depends.txt b/mods/mesecons/mesecons_solarpanel/depends.txt new file mode 100644 index 0000000..bc7b062 --- /dev/null +++ b/mods/mesecons/mesecons_solarpanel/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_materials diff --git a/mods/mesecons/mesecons_solarpanel/doc/solarpanel/description.html b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/description.html new file mode 100644 index 0000000..f8e7450 --- /dev/null +++ b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/description.html @@ -0,0 +1 @@ +Solar Panel are light receptors: they turn on if there is enough light. diff --git a/mods/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png new file mode 100644 index 0000000..b773195 Binary files /dev/null and b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/preview.png differ diff --git a/mods/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png new file mode 100644 index 0000000..3a3d799 Binary files /dev/null and b/mods/mesecons/mesecons_solarpanel/doc/solarpanel/recipe.png differ diff --git a/mods/mesecons/mesecons_solarpanel/init.lua b/mods/mesecons/mesecons_solarpanel/init.lua new file mode 100644 index 0000000..bc5a408 --- /dev/null +++ b/mods/mesecons/mesecons_solarpanel/init.lua @@ -0,0 +1,95 @@ +-- 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/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png b/mods/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png new file mode 100644 index 0000000..a7b0f75 Binary files /dev/null and b/mods/mesecons/mesecons_solarpanel/textures/jeija_solar_panel.png differ diff --git a/mods/mesecons/mesecons_stickyblocks/depends.txt b/mods/mesecons/mesecons_stickyblocks/depends.txt new file mode 100644 index 0000000..01f085b --- /dev/null +++ b/mods/mesecons/mesecons_stickyblocks/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_mvps diff --git a/mods/mesecons/mesecons_stickyblocks/init.lua b/mods/mesecons/mesecons_stickyblocks/init.lua new file mode 100644 index 0000000..659a227 --- /dev/null +++ b/mods/mesecons/mesecons_stickyblocks/init.lua @@ -0,0 +1,16 @@ +-- 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/mesecons/mesecons_switch/depends.txt b/mods/mesecons/mesecons_switch/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_switch/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_switch/doc/switch/description.html b/mods/mesecons/mesecons_switch/doc/switch/description.html new file mode 100644 index 0000000..3ef4ace --- /dev/null +++ b/mods/mesecons/mesecons_switch/doc/switch/description.html @@ -0,0 +1 @@ +The switch is a receptor. It changes its state as when punched. diff --git a/mods/mesecons/mesecons_switch/doc/switch/preview.png b/mods/mesecons/mesecons_switch/doc/switch/preview.png new file mode 100644 index 0000000..0a0487d Binary files /dev/null and b/mods/mesecons/mesecons_switch/doc/switch/preview.png differ diff --git a/mods/mesecons/mesecons_switch/doc/switch/recipe.png b/mods/mesecons/mesecons_switch/doc/switch/recipe.png new file mode 100644 index 0000000..6db6464 Binary files /dev/null and b/mods/mesecons/mesecons_switch/doc/switch/recipe.png differ diff --git a/mods/mesecons/mesecons_switch/init.lua b/mods/mesecons/mesecons_switch/init.lua new file mode 100644 index 0000000..3d59c0a --- /dev/null +++ b/mods/mesecons/mesecons_switch/init.lua @@ -0,0 +1,35 @@ +-- 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/mesecons/mesecons_switch/sounds/mesecons_switch.ogg b/mods/mesecons/mesecons_switch/sounds/mesecons_switch.ogg new file mode 100644 index 0000000..53d45c1 Binary files /dev/null and b/mods/mesecons/mesecons_switch/sounds/mesecons_switch.ogg differ diff --git a/mods/mesecons/mesecons_switch/textures/mesecons_switch_off.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_off.png new file mode 100644 index 0000000..2a75ef3 Binary files /dev/null and b/mods/mesecons/mesecons_switch/textures/mesecons_switch_off.png differ diff --git a/mods/mesecons/mesecons_switch/textures/mesecons_switch_on.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_on.png new file mode 100644 index 0000000..9df3450 Binary files /dev/null and b/mods/mesecons/mesecons_switch/textures/mesecons_switch_on.png differ diff --git a/mods/mesecons/mesecons_switch/textures/mesecons_switch_side.png b/mods/mesecons/mesecons_switch/textures/mesecons_switch_side.png new file mode 100644 index 0000000..fb5db33 Binary files /dev/null and b/mods/mesecons/mesecons_switch/textures/mesecons_switch_side.png differ diff --git a/mods/mesecons/mesecons_torch/depends.txt b/mods/mesecons/mesecons_torch/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_torch/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_torch/doc/torch/description.html b/mods/mesecons/mesecons_torch/doc/torch/description.html new file mode 100644 index 0000000..da7f19c --- /dev/null +++ b/mods/mesecons/mesecons_torch/doc/torch/description.html @@ -0,0 +1 @@ +The torch is an inverter, it may take up to 1 second until the signal has passed through. The input is 2 blocks away in the direction of the stick, outputs are around the mesecon glow. diff --git a/mods/mesecons/mesecons_torch/doc/torch/preview.png b/mods/mesecons/mesecons_torch/doc/torch/preview.png new file mode 100644 index 0000000..fa32543 Binary files /dev/null and b/mods/mesecons/mesecons_torch/doc/torch/preview.png differ diff --git a/mods/mesecons/mesecons_torch/doc/torch/recipe.png b/mods/mesecons/mesecons_torch/doc/torch/recipe.png new file mode 100644 index 0000000..529d99f Binary files /dev/null and b/mods/mesecons/mesecons_torch/doc/torch/recipe.png differ diff --git a/mods/mesecons/mesecons_torch/init.lua b/mods/mesecons/mesecons_torch/init.lua new file mode 100644 index 0000000..8b1632b --- /dev/null +++ b/mods/mesecons/mesecons_torch/init.lua @@ -0,0 +1,118 @@ +--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/mesecons/mesecons_torch/textures/jeija_torches_off.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off.png new file mode 100644 index 0000000..537920c Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_off.png differ diff --git a/mods/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png new file mode 100644 index 0000000..3934e6e Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_ceiling.png differ diff --git a/mods/mesecons/mesecons_torch/textures/jeija_torches_off_side.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_side.png new file mode 100644 index 0000000..ecb2951 Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_off_side.png differ diff --git a/mods/mesecons/mesecons_torch/textures/jeija_torches_on.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on.png new file mode 100644 index 0000000..a93dcc2 Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_on.png differ diff --git a/mods/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png new file mode 100644 index 0000000..24fe201 Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_ceiling.png differ diff --git a/mods/mesecons/mesecons_torch/textures/jeija_torches_on_side.png b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_side.png new file mode 100644 index 0000000..fe7dfd2 Binary files /dev/null and b/mods/mesecons/mesecons_torch/textures/jeija_torches_on_side.png differ diff --git a/mods/mesecons/mesecons_walllever/depends.txt b/mods/mesecons/mesecons_walllever/depends.txt new file mode 100644 index 0000000..19c798c --- /dev/null +++ b/mods/mesecons/mesecons_walllever/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_receiver diff --git a/mods/mesecons/mesecons_walllever/doc/walllever/description.html b/mods/mesecons/mesecons_walllever/doc/walllever/description.html new file mode 100644 index 0000000..ea5a0ed --- /dev/null +++ b/mods/mesecons/mesecons_walllever/doc/walllever/description.html @@ -0,0 +1 @@ +A receptor just like a switch, but it can be attached to walls. diff --git a/mods/mesecons/mesecons_walllever/doc/walllever/preview.png b/mods/mesecons/mesecons_walllever/doc/walllever/preview.png new file mode 100644 index 0000000..e8d2015 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/doc/walllever/preview.png differ diff --git a/mods/mesecons/mesecons_walllever/doc/walllever/recipe.png b/mods/mesecons/mesecons_walllever/doc/walllever/recipe.png new file mode 100644 index 0000000..0ad7c92 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/doc/walllever/recipe.png differ diff --git a/mods/mesecons/mesecons_walllever/init.lua b/mods/mesecons/mesecons_walllever/init.lua new file mode 100644 index 0000000..e9454cd --- /dev/null +++ b/mods/mesecons/mesecons_walllever/init.lua @@ -0,0 +1,63 @@ +-- 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/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj new file mode 100644 index 0000000..334b54b --- /dev/null +++ b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_off.obj @@ -0,0 +1,216 @@ +# Blender v2.73 (sub 0) OBJ File: 'mesecons-wall-lever-off.blend' +# www.blender.org +o nodebox-5 +v 0.281250 0.156250 0.312500 +v -0.375000 0.375000 0.375000 +v -0.375000 -0.375000 0.375000 +v 0.343751 0.218750 0.375000 +v 0.343751 -0.218752 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 -0.375000 0.375000 +v 0.281250 -0.156250 0.312500 +v -0.062500 -0.055586 0.191789 +v -0.062500 -0.087939 0.312529 +v -0.062500 -0.413939 0.225178 +v -0.062500 -0.381586 0.104437 +v -0.343751 0.218750 0.375000 +v 0.062500 -0.055586 0.191789 +v 0.062500 -0.087939 0.312529 +v -0.343751 -0.218752 0.375000 +v 0.062500 -0.413939 0.225178 +v 0.062500 -0.381586 0.104437 +v 0.375000 -0.375000 0.500000 +v 0.375000 0.375000 0.500000 +v -0.375000 -0.375000 0.500000 +v -0.375000 0.375000 0.500000 +v -0.281250 0.156250 0.312500 +v -0.281250 -0.156250 0.312500 +v -0.250000 0.125000 0.312500 +v -0.250000 -0.125000 0.312500 +v 0.250000 0.125000 0.312500 +v 0.250000 -0.125000 0.312500 +v -0.250000 0.125000 0.250000 +v -0.250000 -0.125000 0.250000 +v 0.250000 0.125000 0.250000 +v 0.250000 -0.125000 0.250000 +v 0.125000 -0.062500 0.187500 +v 0.125000 0.062500 0.187500 +v -0.125000 -0.062500 0.187500 +v -0.125000 0.062500 0.187500 +v 0.062500 -0.031251 0.176992 +v 0.062500 0.031250 0.176992 +v -0.062498 -0.031251 0.176992 +v -0.062498 0.031250 0.176992 +v -0.187500 -0.093750 0.208750 +v 0.187500 0.093750 0.208750 +v 0.187500 -0.093750 0.208750 +v -0.187500 0.093750 0.208750 +v -0.375000 0.375000 0.375000 +v -0.375000 -0.375000 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 -0.375000 0.375000 +v 0.375000 -0.375000 0.500000 +v 0.375000 0.375000 0.500000 +v -0.375000 -0.375000 0.500000 +v -0.375000 0.375000 0.500000 +vt 0.312500 0.437500 +vt 0.312500 0.000000 +vt 0.437500 0.000000 +vt 0.437500 0.437500 +vt 0.687500 0.187500 +vt 0.812500 0.187500 +vt 0.812500 0.312500 +vt 0.687500 0.312500 +vt 0.187500 0.437500 +vt 0.062500 0.437500 +vt 0.062500 0.000000 +vt 0.187500 0.000000 +vt 0.875000 0.796875 +vt 0.375000 0.796875 +vt 0.343750 0.765625 +vt 0.906250 0.765625 +vt 0.203125 0.875000 +vt 0.203125 0.625000 +vt 0.234375 0.593750 +vt 0.234375 0.906250 +vt 0.875000 0.890625 +vt 0.906250 0.921875 +vt 0.343750 0.921875 +vt 0.375000 0.890625 +vt 0.109375 0.875000 +vt 0.078125 0.906250 +vt 0.078125 0.593750 +vt 0.109375 0.625000 +vt 0.562500 0.437500 +vt 0.562500 0.000000 +vt 0.218880 0.343823 +vt 0.218880 0.656178 +vt 0.156408 0.718649 +vt 0.156408 0.281350 +vt 0.968592 0.718649 +vt 0.968592 0.281350 +vt 0.999827 0.125174 +vt 0.999827 0.874827 +vt 0.781120 0.656178 +vt 0.843592 0.718649 +vt 0.843592 0.281350 +vt 0.781120 0.343823 +vt 0.843592 0.156350 +vt 0.156408 0.156350 +vt 0.125173 0.000174 +vt 0.874827 0.000174 +vt 0.031408 0.718649 +vt 0.000173 0.874827 +vt 0.000173 0.125174 +vt 0.031408 0.281350 +vt 0.843592 0.843649 +vt 0.874827 0.999827 +vt 0.125173 0.999827 +vt 0.156408 0.843649 +vt 0.250000 0.625000 +vt 0.750000 0.625000 +vt 0.750000 0.687500 +vt 0.250000 0.687500 +vt 0.250000 0.375000 +vt 0.250000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.625000 +vt 0.187500 0.625000 +vt 0.187500 0.375000 +vt 0.625000 0.562500 +vt 0.562500 0.531250 +vt 0.562500 0.468750 +vt 0.625000 0.437500 +vt 0.437500 0.468750 +vt 0.437500 0.531250 +vt 0.375000 0.437500 +vt 0.375000 0.562500 +vt 0.312500 0.406250 +vt 0.687500 0.406250 +vt 0.312500 0.593750 +vt 0.687500 0.593750 +vt 1.000000 0.000000 +vt 1.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 0.000000 +vt 0.000000 0.875000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt 0.125000 1.000000 +vn 0.000000 -0.258800 0.965900 +vn 0.000000 -0.965900 -0.258800 +vn 0.000000 0.258800 -0.965900 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -0.707100 -0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.141100 0.273900 -0.951300 +vn -0.054600 0.137500 -0.989000 +vn -0.054600 -0.137500 -0.989000 +vn -0.141100 -0.273900 -0.951300 +vn 0.054600 -0.137500 -0.989000 +vn 0.054600 0.137500 -0.989000 +vn 0.141100 -0.273900 -0.951300 +vn 0.141100 0.273900 -0.951300 +vn 0.269900 -0.421500 -0.865700 +vn -0.269900 -0.421500 -0.865700 +vn 0.269900 0.421500 -0.865700 +vn -0.269900 0.421500 -0.865700 +vn -0.395600 0.336800 -0.854500 +vn 0.395600 0.336800 -0.854500 +vn 0.395600 -0.336800 -0.854500 +vn -0.395600 -0.336800 -0.854500 +vn 0.000000 -0.000000 1.000000 +g nodebox-5_nodebox-5_lever-light +s off +f 17/1/1 15/2/1 10/3/1 11/4/1 +f 18/5/2 17/6/2 11/7/2 12/8/2 +f 18/9/3 12/10/3 9/11/3 14/12/3 +f 26/13/4 28/14/4 8/15/4 24/16/4 +f 25/17/4 26/18/4 24/19/4 23/20/4 +f 25/21/4 23/22/4 1/23/4 27/24/4 +f 27/25/4 1/26/4 8/27/4 28/28/4 +f 12/29/5 11/4/5 10/3/5 9/30/5 +f 18/9/6 14/12/6 15/2/6 17/1/6 +g nodebox-5_nodebox-5_front +f 8/31/7 1/32/7 4/33/7 5/34/7 +f 13/35/4 16/36/4 3/37/4 2/38/4 +f 1/32/8 23/39/8 13/40/8 4/33/8 +f 8/31/9 5/34/9 16/41/9 24/42/9 +f 24/42/10 16/41/10 13/40/10 23/39/10 +f 16/43/4 5/44/4 7/45/4 3/46/4 +f 4/47/4 6/48/4 7/49/4 5/50/4 +f 13/51/4 2/52/4 6/53/4 4/54/4 +g nodebox-5_nodebox-5_front-bump +f 31/55/11 29/56/11 25/57/11 27/58/11 +f 32/59/12 28/60/12 26/61/12 30/62/12 +f 30/62/5 26/63/5 25/64/5 29/56/5 +f 32/59/6 31/55/6 27/65/6 28/66/6 +s 1 +f 36/67/13 40/68/14 39/69/15 35/70/16 +f 37/71/17 39/69/15 40/68/14 38/72/18 +f 35/70/16 39/69/15 37/71/17 33/73/19 +f 33/73/19 37/71/17 38/72/18 34/74/20 +f 34/74/20 38/72/18 40/68/14 36/67/13 +f 33/73/19 43/75/21 41/76/22 35/70/16 +f 33/73/19 34/74/20 42/77/23 43/75/21 +f 35/70/16 41/76/22 44/78/24 36/67/13 +f 42/77/23 44/78/24 29/56/25 31/55/26 +f 43/75/21 32/59/27 30/62/28 41/76/22 +f 43/75/21 42/77/23 31/55/26 32/59/27 +f 41/76/22 30/62/28 29/56/25 44/78/24 +f 34/74/20 36/67/13 44/78/24 42/77/23 +g nodebox-5_nodebox-5_back-edges +s off +f 19/79/29 20/80/29 22/81/29 21/82/29 +f 7/82/6 6/81/6 20/83/6 19/84/6 +f 3/82/5 21/84/5 22/83/5 2/81/5 +f 48/85/12 49/80/12 51/81/12 46/86/12 +f 47/85/11 45/86/11 52/81/11 50/80/11 diff --git a/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj new file mode 100644 index 0000000..a806be8 --- /dev/null +++ b/mods/mesecons/mesecons_walllever/models/jeija_wall_lever_on.obj @@ -0,0 +1,216 @@ +# Blender v2.73 (sub 0) OBJ File: 'mesecons-wall-lever.blend' +# www.blender.org +o nodebox-5 +v 0.281250 0.156250 0.312500 +v -0.375000 0.375000 0.375000 +v -0.375000 -0.375000 0.375000 +v 0.343751 0.218750 0.375000 +v 0.343751 -0.218752 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 -0.375000 0.375000 +v 0.281250 -0.156250 0.312500 +v -0.062500 0.075354 0.315617 +v -0.062500 0.043002 0.194876 +v -0.062500 0.369002 0.107525 +v -0.062500 0.401354 0.228266 +v -0.343751 0.218750 0.375000 +v 0.062500 0.075354 0.315617 +v 0.062500 0.043002 0.194876 +v -0.343751 -0.218752 0.375000 +v 0.062500 0.369002 0.107525 +v 0.062500 0.401354 0.228266 +v 0.375000 -0.375000 0.500000 +v 0.375000 0.375000 0.500000 +v -0.375000 -0.375000 0.500000 +v -0.375000 0.375000 0.500000 +v -0.281250 0.156250 0.312500 +v -0.281250 -0.156250 0.312500 +v -0.250000 0.125000 0.312500 +v -0.250000 -0.125000 0.312500 +v 0.250000 0.125000 0.312500 +v 0.250000 -0.125000 0.312500 +v -0.250000 0.125000 0.250000 +v -0.250000 -0.125000 0.250000 +v 0.250000 0.125000 0.250000 +v 0.250000 -0.125000 0.250000 +v 0.125000 -0.062500 0.187500 +v 0.125000 0.062500 0.187500 +v -0.125000 -0.062500 0.187500 +v -0.125000 0.062500 0.187500 +v 0.062500 -0.031251 0.176992 +v 0.062500 0.031250 0.176992 +v -0.062498 -0.031251 0.176992 +v -0.062498 0.031250 0.176992 +v -0.187500 -0.093750 0.208750 +v 0.187500 0.093750 0.208750 +v 0.187500 -0.093750 0.208750 +v -0.187500 0.093750 0.208750 +v -0.375000 0.375000 0.375000 +v -0.375000 -0.375000 0.375000 +v 0.375000 0.375000 0.375000 +v 0.375000 -0.375000 0.375000 +v 0.375000 -0.375000 0.500000 +v 0.375000 0.375000 0.500000 +v -0.375000 -0.375000 0.500000 +v -0.375000 0.375000 0.500000 +vt 0.312500 0.437500 +vt 0.312500 0.000000 +vt 0.437500 0.000000 +vt 0.437500 0.437500 +vt 0.687500 0.187500 +vt 0.812500 0.187500 +vt 0.812500 0.312500 +vt 0.687500 0.312500 +vt 0.187500 0.437500 +vt 0.062500 0.437500 +vt 0.062500 0.000000 +vt 0.187500 0.000000 +vt 0.875000 0.796875 +vt 0.375000 0.796875 +vt 0.343750 0.765625 +vt 0.906250 0.765625 +vt 0.203125 0.875000 +vt 0.203125 0.625000 +vt 0.234375 0.593750 +vt 0.234375 0.906250 +vt 0.875000 0.890625 +vt 0.906250 0.921875 +vt 0.343750 0.921875 +vt 0.375000 0.890625 +vt 0.109375 0.875000 +vt 0.078125 0.906250 +vt 0.078125 0.593750 +vt 0.109375 0.625000 +vt 0.562500 0.437500 +vt 0.562500 0.000000 +vt 0.218880 0.343823 +vt 0.218880 0.656178 +vt 0.156408 0.718649 +vt 0.156408 0.281350 +vt 0.968592 0.718649 +vt 0.968592 0.281350 +vt 0.999827 0.125174 +vt 0.999827 0.874827 +vt 0.781120 0.656178 +vt 0.843592 0.718649 +vt 0.843592 0.281350 +vt 0.781120 0.343823 +vt 0.843592 0.156350 +vt 0.156408 0.156350 +vt 0.125173 0.000174 +vt 0.874827 0.000174 +vt 0.031408 0.718649 +vt 0.000173 0.874827 +vt 0.000173 0.125174 +vt 0.031408 0.281350 +vt 0.843592 0.843649 +vt 0.874827 0.999827 +vt 0.125173 0.999827 +vt 0.156408 0.843649 +vt 0.250000 0.625000 +vt 0.750000 0.625000 +vt 0.750000 0.687500 +vt 0.250000 0.687500 +vt 0.250000 0.375000 +vt 0.250000 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.375000 +vt 0.812500 0.375000 +vt 0.812500 0.625000 +vt 0.187500 0.625000 +vt 0.187500 0.375000 +vt 0.625000 0.562500 +vt 0.562500 0.531250 +vt 0.562500 0.468750 +vt 0.625000 0.437500 +vt 0.437500 0.468750 +vt 0.437500 0.531250 +vt 0.375000 0.437500 +vt 0.375000 0.562500 +vt 0.312500 0.406250 +vt 0.687500 0.406250 +vt 0.312500 0.593750 +vt 0.687500 0.593750 +vt 1.000000 0.000000 +vt 1.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 0.000000 +vt 0.000000 0.875000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +vt 0.125000 1.000000 +vn 0.000000 -0.258800 -0.965900 +vn 0.000000 0.965900 -0.258800 +vn 0.000000 0.258800 0.965900 +vn 0.000000 0.000000 -1.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 -0.707100 -0.707100 +vn -0.707100 0.000000 -0.707100 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.141100 0.273900 -0.951300 +vn -0.054600 0.137500 -0.989000 +vn -0.054600 -0.137500 -0.989000 +vn -0.141100 -0.273900 -0.951300 +vn 0.054600 -0.137500 -0.989000 +vn 0.054600 0.137500 -0.989000 +vn 0.141100 -0.273900 -0.951300 +vn 0.141100 0.273900 -0.951300 +vn 0.269900 -0.421500 -0.865700 +vn -0.269900 -0.421500 -0.865700 +vn 0.269900 0.421500 -0.865700 +vn -0.269900 0.421500 -0.865700 +vn -0.395600 0.336800 -0.854500 +vn 0.395600 0.336800 -0.854500 +vn 0.395600 -0.336800 -0.854500 +vn -0.395600 -0.336800 -0.854500 +vn 0.000000 -0.000000 1.000000 +g nodebox-5_nodebox-5_lever-light +s off +f 17/1/1 15/2/1 10/3/1 11/4/1 +f 18/5/2 17/6/2 11/7/2 12/8/2 +f 18/9/3 12/10/3 9/11/3 14/12/3 +f 26/13/4 28/14/4 8/15/4 24/16/4 +f 25/17/4 26/18/4 24/19/4 23/20/4 +f 25/21/4 23/22/4 1/23/4 27/24/4 +f 27/25/4 1/26/4 8/27/4 28/28/4 +f 12/29/5 11/4/5 10/3/5 9/30/5 +f 18/9/6 14/12/6 15/2/6 17/1/6 +g nodebox-5_nodebox-5_front +f 8/31/7 1/32/7 4/33/7 5/34/7 +f 13/35/4 16/36/4 3/37/4 2/38/4 +f 1/32/8 23/39/8 13/40/8 4/33/8 +f 8/31/9 5/34/9 16/41/9 24/42/9 +f 24/42/10 16/41/10 13/40/10 23/39/10 +f 16/43/4 5/44/4 7/45/4 3/46/4 +f 4/47/4 6/48/4 7/49/4 5/50/4 +f 13/51/4 2/52/4 6/53/4 4/54/4 +g nodebox-5_nodebox-5_front-bump +f 31/55/11 29/56/11 25/57/11 27/58/11 +f 32/59/12 28/60/12 26/61/12 30/62/12 +f 30/62/5 26/63/5 25/64/5 29/56/5 +f 32/59/6 31/55/6 27/65/6 28/66/6 +s 1 +f 36/67/13 40/68/14 39/69/15 35/70/16 +f 37/71/17 39/69/15 40/68/14 38/72/18 +f 35/70/16 39/69/15 37/71/17 33/73/19 +f 33/73/19 37/71/17 38/72/18 34/74/20 +f 34/74/20 38/72/18 40/68/14 36/67/13 +f 33/73/19 43/75/21 41/76/22 35/70/16 +f 33/73/19 34/74/20 42/77/23 43/75/21 +f 35/70/16 41/76/22 44/78/24 36/67/13 +f 42/77/23 44/78/24 29/56/25 31/55/26 +f 43/75/21 32/59/27 30/62/28 41/76/22 +f 43/75/21 42/77/23 31/55/26 32/59/27 +f 41/76/22 30/62/28 29/56/25 44/78/24 +f 34/74/20 36/67/13 44/78/24 42/77/23 +g nodebox-5_nodebox-5_back-edges +s off +f 19/79/29 20/80/29 22/81/29 21/82/29 +f 7/82/6 6/81/6 20/83/6 19/84/6 +f 3/82/5 21/84/5 22/83/5 2/81/5 +f 48/85/12 49/80/12 51/81/12 46/86/12 +f 47/85/11 45/86/11 52/81/11 50/80/11 diff --git a/mods/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg b/mods/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg new file mode 100644 index 0000000..53d45c1 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/sounds/mesecons_lever.ogg differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png new file mode 100644 index 0000000..936b454 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_back_edges.png differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png new file mode 100644 index 0000000..1bd747a Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front.png differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png new file mode 100644 index 0000000..5c2a88a Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_front_bump.png differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png new file mode 100644 index 0000000..474f8c1 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_inv.png differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png new file mode 100644 index 0000000..2b47c7d Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_off.png differ diff --git a/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png new file mode 100644 index 0000000..83b83a0 Binary files /dev/null and b/mods/mesecons/mesecons_walllever/textures/jeija_wall_lever_lever_light_on.png differ diff --git a/mods/mesecons/mesecons_wires/depends.txt b/mods/mesecons/mesecons_wires/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mods/mesecons/mesecons_wires/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mods/mesecons/mesecons_wires/doc/mesecon/description.html b/mods/mesecons/mesecons_wires/doc/mesecon/description.html new file mode 100644 index 0000000..f217be9 --- /dev/null +++ b/mods/mesecons/mesecons_wires/doc/mesecon/description.html @@ -0,0 +1 @@ +Mesecons are the wires, use them to connect effectors with receptors. diff --git a/mods/mesecons/mesecons_wires/doc/mesecon/preview.png b/mods/mesecons/mesecons_wires/doc/mesecon/preview.png new file mode 100644 index 0000000..f81e5cb Binary files /dev/null and b/mods/mesecons/mesecons_wires/doc/mesecon/preview.png differ diff --git a/mods/mesecons/mesecons_wires/doc/mesecon/recipe.png b/mods/mesecons/mesecons_wires/doc/mesecon/recipe.png new file mode 100644 index 0000000..72f9210 Binary files /dev/null and b/mods/mesecons/mesecons_wires/doc/mesecon/recipe.png differ diff --git a/mods/mesecons/mesecons_wires/init.lua b/mods/mesecons/mesecons_wires/init.lua new file mode 100644 index 0000000..ced7c99 --- /dev/null +++ b/mods/mesecons/mesecons_wires/init.lua @@ -0,0 +1,247 @@ +-- 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 + }, {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/mesecons/modpack.txt b/mods/mesecons/modpack.txt new file mode 100644 index 0000000..33d91f5 --- /dev/null +++ b/mods/mesecons/modpack.txt @@ -0,0 +1 @@ +The presence of this file indicates that the current folder is a modpack. \ No newline at end of file diff --git a/mods/moreores/.gitignore b/mods/moreores/.gitignore new file mode 100644 index 0000000..8b38e58 --- /dev/null +++ b/mods/moreores/.gitignore @@ -0,0 +1,3 @@ +## Generic ignorable patterns and files +*~ +debug.txt diff --git a/mods/moreores/CHANGELOG.md b/mods/moreores/CHANGELOG.md new file mode 100644 index 0000000..612b615 --- /dev/null +++ b/mods/moreores/CHANGELOG.md @@ -0,0 +1,23 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Brazilian translation. + +### Fixed + +- Handle tin which is now included in [Minetest Game](https://github.com/minetest/minetest_game). + If it is detected, then the tin nodes and items from More Ores won't be registered. + +## 1.0.0 - 2017-02-19 + +- Initial versioned release. + +[Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v1.0.0...HEAD diff --git a/mods/moreores/CONTRIBUTING.md b/mods/moreores/CONTRIBUTING.md new file mode 100644 index 0000000..e2a55fa --- /dev/null +++ b/mods/moreores/CONTRIBUTING.md @@ -0,0 +1,10 @@ +# Contributing to More Ores + +Thank you for your interest in More Ores! Before contributing, +be sure to know about these few guidelines: + +- Contributions have to be licensed under the zlib license (or compatible) + for code, and CC BY-SA 3.0 (or compatible) for assets. +- Make sure to update the changelog, keeping the + [changelog format](http://keepachangelog.com/en/1.0.0/) we use. +- Don't bump the version yourself. Maintainers will do this when necessary. diff --git a/mods/moreores/LICENSE.md b/mods/moreores/LICENSE.md new file mode 100644 index 0000000..a3511ad --- /dev/null +++ b/mods/moreores/LICENSE.md @@ -0,0 +1,13 @@ +# zlib license + +Copyright (c) 2011-2017 Hugo Locurcio and contributors + +**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/mods/moreores/README.md b/mods/moreores/README.md new file mode 100644 index 0000000..5b4877e --- /dev/null +++ b/mods/moreores/README.md @@ -0,0 +1,73 @@ +# More Ores + +More Ores for [Minetest](https://www.minetest.net/), a free and open source infinite +world block sandbox game. + +[**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=549) + +## Installation + +### Download the mod + +To install More Ores, clone this Git repository into your Minetest's `mods/` +directory: + +``` +git clone https://github.com/minetest-mods/moreores.git +``` + +You can also +[download a ZIP archive](https://github.com/minetest-mods/moreores/archive/master.zip) +of More Ores. If you do so, you will need to extract the archive, then rename +the resulting folder from `moreores-master` to `moreores` – this is +**absolutely** necessary to do, else, it won't work! + +### Enable the mod + +Once you have installed More Ores, you need to enable it in Minetest. +The procedure is as follows: + +#### Using the client's main menu + +This is the easiest way to enable More Ores when playing in singleplayer +(or on a server hosted from a client). + +1. Start Minetest and switch to the **Local Game** tab. +2. Select the world you want to enable More Ores in. +3. Click **Configure**, then enable `moreores` by double-clicking it + (or ticking the **Enabled** checkbox). +4. Save the changes, then start a game on the world you enabled More Ores on. +5. More Ores should now be running on your world. + +#### Using a text editor + +This is the recommended way to enable the mod on a server without using a GUI. + +1. Make sure Minetest is not currently running (else, it will overwrite + the changes when exiting). +2. Open the world's `world.mt` file using a text editor. +3. Add the following line at the end of the file: + +``` +load_mod_moreores = true +``` + +If the line is already present in the file, then replace `false` with `true` on that line. + +4. Save the file, then start a game on the world you enabled More Ores on. +5. More Ores should now be running on your world. + +## Version compatibility + +More Ores is currently primarily tested with Minetest 0.4.16. +It may or may not work with newer or older versions. Issues arising in older +versions than 0.4.16 will generally not be fixed. + +## License + +Copyright © 2011-2017 Hugo Locurcio and contributors + +- More Ores code is licensed under the zlib license, see + [`LICENSE.md`](LICENSE.md) for details. +- Unless otherwise specified, More Ores textures are licensed under + [CC BY-SA 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/). diff --git a/mods/moreores/_config.txt b/mods/moreores/_config.txt new file mode 100644 index 0000000..42e7b37 --- /dev/null +++ b/mods/moreores/_config.txt @@ -0,0 +1,27 @@ +------------------------------------------------------------------------------ +------------------------------ CONFIGURATION --------------------------------- +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ +-------- Change settings by changing the values after the "=". --------------- +------------------------------------------------------------------------------ + +-- Chunk sizes for ore generation (bigger = ore deposits are more scattered around) +moreores.tin_chunk_size = 7 +moreores.silver_chunk_size = 11 +moreores.mithril_chunk_size = 11 + +-- Amount of ore per chunk (higher = bigger ore deposits) +moreores.tin_ore_per_chunk = 3 +moreores.silver_ore_per_chunk = 4 +moreores.mithril_ore_per_chunk = 1 + +-- Minimal depths of ore generation (Y coordinate, 0 being sea level by default) +moreores.tin_min_depth = -31000 +moreores.silver_min_depth = -31000 +moreores.mithril_min_depth = -31000 + +-- Maximal depths of ore generation (Y coordinate, 0 being sea level by default) +moreores.tin_max_depth = 8 +moreores.silver_max_depth = -2 +moreores.mithril_max_depth = -512 diff --git a/mods/moreores/depends.txt b/mods/moreores/depends.txt new file mode 100644 index 0000000..0219052 --- /dev/null +++ b/mods/moreores/depends.txt @@ -0,0 +1,2 @@ +default +mg? diff --git a/mods/moreores/description.txt b/mods/moreores/description.txt new file mode 100644 index 0000000..6bd1c7c --- /dev/null +++ b/mods/moreores/description.txt @@ -0,0 +1 @@ +Adds new Ore types. diff --git a/mods/moreores/init.lua b/mods/moreores/init.lua new file mode 100644 index 0000000..0a85392 --- /dev/null +++ b/mods/moreores/init.lua @@ -0,0 +1,386 @@ +--[[ +===================================================================== +** More Ores ** +By Calinou, with the help of Nore. + +Copyright (c) 2011-2017 Hugo Locurcio and contributors. +Licensed under the zlib license. See LICENSE.md for more information. +===================================================================== +--]] + +moreores = {} + +local default_tin = false +if minetest.registered_items["default:tin_ingot"] then + default_tin = true +end + +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s) return s end +end + +local modpath = minetest.get_modpath("moreores") + +dofile(modpath .. "/_config.txt") + +-- `mg` support: +if minetest.get_modpath("mg") then + dofile(modpath .. "/mg.lua") +end + +-- Utility functions +-- ================= + +local default_stone_sounds = default.node_sound_stone_defaults() +local default_metal_sounds = default.node_sound_metal_defaults() + +local function hoe_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 pos = {x = pt.under.x, y = pt.under.y + 1, z = pt.under.z} + local above = minetest.get_node(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 + + -- Check if the node above the pointed thing is air: + if above.name ~= "air" then return end + + -- Check if pointing at dirt: + if minetest.get_item_group(under.name, "soil") ~= 1 then return end + + -- Turn the node into soil, wear out item and play sound: + minetest.set_node(pt.under, {name ="farming:soil"}) + minetest.sound_play("default_dig_crumbly", {pos = pt.under, gain = 0.5}) + itemstack:add_wear(65535 / (uses - 1)) + return itemstack +end + +local function get_recipe(c, name) + if name == "sword" then + return {{c}, {c}, {"group:stick"}} + end + if name == "shovel" then + return {{c}, {"group:stick"}, {"group:stick"}} + end + if name == "axe" then + return {{c, c}, {c, "group:stick"}, {"", "group:stick"}} + end + if name == "pick" then + return {{c, c, c}, {"", "group:stick", ""}, {"", "group:stick", ""}} + end + if name == "hoe" then + return {{c, c}, {"", "group:stick"}, {"", "group:stick"}} + end + if name == "block" then + return {{c, c, c}, {c, c, c}, {c, c, c}} + end + if name == "lockedchest" then + return {{"group:wood", "group:wood", "group:wood"}, {"group:wood", c, "group:wood"}, {"group:wood", "group:wood", "group:wood"}} + end +end + +local function add_ore(modname, description, mineral_name, oredef) + local img_base = modname .. "_" .. mineral_name + local toolimg_base = modname .. "_tool_"..mineral_name + local tool_base = modname .. ":" + local tool_post = "_" .. mineral_name + local item_base = tool_base .. mineral_name + local ingot = item_base .. "_ingot" + local lump_item = item_base .. "_lump" + local ingotcraft = ingot + + if oredef.makes.ore then + minetest.register_node(modname .. ":mineral_" .. mineral_name, { + description = S("%s Ore"):format(S(description)), + tiles = {"default_stone.png^" .. modname .. "_mineral_" .. mineral_name .. ".png"}, + groups = {cracky = 3}, + sounds = default_stone_sounds, + drop = lump_item + }) + end + + if oredef.makes.block then + local block_item = item_base .. "_block" + minetest.register_node(block_item, { + description = S("%s Block"):format(S(description)), + tiles = { img_base .. "_block.png" }, + groups = {snappy = 1, bendy = 2, cracky = 1, melty = 2, level= 2}, + sounds = default_metal_sounds, + }) + minetest.register_alias(mineral_name.."_block", block_item) + if oredef.makes.ingot then + minetest.register_craft( { + output = block_item, + recipe = get_recipe(ingot, "block") + }) + minetest.register_craft( { + output = ingot .. " 9", + recipe = { + { block_item } + } + }) + end + end + + if oredef.makes.lump then + minetest.register_craftitem(lump_item, { + description = S("%s Lump"):format(S(description)), + inventory_image = img_base .. "_lump.png", + }) + minetest.register_alias(mineral_name .. "_lump", lump_item) + if oredef.makes.ingot then + minetest.register_craft({ + type = "cooking", + output = ingot, + recipe = lump_item + }) + end + end + + if oredef.makes.ingot then + minetest.register_craftitem(ingot, { + description = S("%s Ingot"):format(S(description)), + inventory_image = img_base .. "_ingot.png", + }) + minetest.register_alias(mineral_name .. "_ingot", ingot) + end + + if oredef.makes.chest then + minetest.register_craft( { + output = "default:chest_locked", + recipe = { + {ingot}, + {"default:chest"} + } + }) + minetest.register_craft( { + output = "default:chest_locked", + recipe = get_recipe(ingot, "lockedchest") + }) + end + + oredef.oredef.ore_type = "scatter" + oredef.oredef.ore = modname .. ":mineral_" .. mineral_name + oredef.oredef.wherein = "default:stone" + + minetest.register_ore(oredef.oredef) + + for tool_name, tooldef in pairs(oredef.tools) do + local tdef = { + description = "", + inventory_image = toolimg_base .. tool_name .. ".png", + tool_capabilities = { + max_drop_level = 3, + groupcaps = tooldef + }, + sound = {breaks = "default_tool_breaks"}, + } + + if tool_name == "sword" then + tdef.tool_capabilities.full_punch_interval = oredef.full_punch_interval + tdef.tool_capabilities.damage_groups = oredef.damage_groups + tdef.description = S("%s Sword"):format(S(description)) + end + + if tool_name == "pick" then + tdef.tool_capabilities.full_punch_interval = oredef.full_punch_interval + tdef.tool_capabilities.damage_groups = oredef.damage_groups + tdef.description = S("%s Pickaxe"):format(S(description)) + end + + if tool_name == "axe" then + tdef.tool_capabilities.full_punch_interval = oredef.full_punch_interval + tdef.tool_capabilities.damage_groups = oredef.damage_groups + tdef.description = S("%s Axe"):format(S(description)) + end + + if tool_name == "shovel" then + tdef.full_punch_interval = oredef.full_punch_interval + tdef.tool_capabilities.damage_groups = oredef.damage_groups + tdef.description = S("%s Shovel"):format(S(description)) + tdef.wield_image = toolimg_base .. tool_name .. ".png^[transformR90" + end + + if tool_name == "hoe" then + tdef.description = S("%s Hoe"):format(S(description)) + local uses = tooldef.uses + tooldef.uses = nil + tdef.on_use = function(itemstack, user, pointed_thing) + return hoe_on_use(itemstack, user, pointed_thing, uses) + end + end + + local fulltool_name = tool_base .. tool_name .. tool_post + minetest.register_tool(fulltool_name, tdef) + minetest.register_alias(tool_name .. tool_post, fulltool_name) + if oredef.makes.ingot then + minetest.register_craft({ + output = fulltool_name, + recipe = get_recipe(ingot, tool_name) + }) + end + end +end + +-- Add everything: +local modname = "moreores" + +local oredefs = { + silver = { + description = "Silver", + makes = {ore = true, block = true, lump = true, ingot = true, chest = true}, + oredef = {clust_scarcity = moreores.silver_chunk_size * moreores.silver_chunk_size * moreores.silver_chunk_size, + clust_num_ores = moreores.silver_ore_per_chunk, + clust_size = moreores.silver_chunk_size, + y_min = moreores.silver_min_depth, + y_max = moreores.silver_max_depth + }, + tools = { + pick = { + cracky = {times = {[1] = 2.60, [2] = 1.00, [3] = 0.60}, uses = 100, maxlevel= 1} + }, + hoe = { + uses = 300 + }, + shovel = { + crumbly = {times = {[1] = 1.10, [2] = 0.40, [3] = 0.25}, uses = 100, maxlevel= 1} + }, + axe = { + choppy = {times = {[1] = 2.50, [2] = 0.80, [3] = 0.50}, uses = 100, maxlevel= 1}, + fleshy = {times = {[2] = 1.10, [3] = 0.60}, uses = 100, maxlevel= 1} + }, + sword = { + fleshy = {times = {[2] = 0.70, [3] = 0.30}, uses = 100, maxlevel= 1}, + snappy = {times = {[2] = 0.70, [3] = 0.30}, uses = 100, maxlevel= 1}, + choppy = {times = {[3] = 0.80}, uses = 100, maxlevel= 0} + }, + }, + full_punch_interval = 1.0, + damage_groups = {fleshy = 6}, + }, + mithril = { + description = "Mithril", + makes = {ore = true, block = true, lump = true, ingot = true, chest = false}, + oredef = {clust_scarcity = moreores.mithril_chunk_size * moreores.mithril_chunk_size * moreores.mithril_chunk_size, + clust_num_ores = moreores.mithril_ore_per_chunk, + clust_size = moreores.mithril_chunk_size, + y_min = moreores.mithril_min_depth, + y_max = moreores.mithril_max_depth + }, + tools = { + pick = { + cracky = {times = {[1] = 2.25, [2] = 0.55, [3] = 0.35}, uses = 200, maxlevel= 2} + }, + hoe = { + uses = 1000 + }, + shovel = { + crumbly = {times = {[1] = 0.70, [2] = 0.35, [3] = 0.20}, uses = 200, maxlevel= 2} + }, + axe = { + choppy = {times = {[1] = 1.75, [2] = 0.45, [3] = 0.45}, uses = 200, maxlevel= 2}, + fleshy = {times = {[2] = 0.95, [3] = 0.30}, uses = 200, maxlevel= 1} + }, + sword = { + fleshy = {times = {[2] = 0.65, [3] = 0.25}, uses = 200, maxlevel= 2}, + snappy = {times = {[2] = 0.70, [3] = 0.25}, uses = 200, maxlevel= 2}, + choppy = {times = {[3] = 0.65}, uses = 200, maxlevel= 0} + } + }, + full_punch_interval = 0.45, + damage_groups = {fleshy = 9}, + } +} + +if not default_tin then + oredefs.tin = { + description = "Tin", + makes = {ore = true, block = true, lump = true, ingot = true, chest = false}, + oredef = {clust_scarcity = moreores.tin_chunk_size * moreores.tin_chunk_size * moreores.tin_chunk_size, + clust_num_ores = moreores.tin_ore_per_chunk, + clust_size = moreores.tin_chunk_size, + y_min = moreores.tin_min_depth, + y_max = moreores.tin_max_depth + }, + tools = {}, + } +end + +for orename,def in pairs(oredefs) do + add_ore(modname, def.description, orename, def) +end + +-- Copper rail (special node): +minetest.register_craft({ + output = "moreores:copper_rail 24", + recipe = { + {"default:copper_ingot", "", "default:copper_ingot"}, + {"default:copper_ingot", "group:stick", "default:copper_ingot"}, + {"default:copper_ingot", "", "default:copper_ingot"} + } +}) + +if default_tin then + minetest.register_alias("moreores:mineral_tin", "default:stone_with_tin") + minetest.register_alias("moreores:tin_lump", "default:tin_lump") + minetest.register_alias("moreores:tin_ingot", "default:tin_ingot") + minetest.register_alias("moreores:tin_block", "default:tinblock") +else + -- Bronze has some special cases, because it is made from copper and tin: + minetest.register_craft( { + type = "shapeless", + output = "default:bronze_ingot 3", + recipe = { + "moreores:tin_ingot", + "default:copper_ingot", + "default:copper_ingot", + } + }) +end + +-- Unique node: +minetest.register_node("moreores:copper_rail", { + description = S("Copper Rail"), + drawtype = "raillike", + tiles = {"moreores_copper_rail.png", "moreores_copper_rail_curved.png", "moreores_copper_rail_t_junction.png", "moreores_copper_rail_crossing.png"}, + inventory_image = "moreores_copper_rail.png", + wield_image = "moreores_copper_rail.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, + }, + sounds = default_metal_sounds, + groups = {bendy = 2,snappy = 1,dig_immediate = 2,rail= 1, connect_to_raillike = 1}, + mesecons = { + effector = { + action_on = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "0.5") + end, + + action_off = function(pos, node) + minetest.get_meta(pos):set_string("cart_acceleration", "0") + end, + }, + }, +}) + + +if minetest.settings:get_bool("log_mods") then + minetest.log("action", S("[moreores] loaded.")) +end diff --git a/mods/moreores/locale/de.txt b/mods/moreores/locale/de.txt new file mode 100644 index 0000000..2eb6075 --- /dev/null +++ b/mods/moreores/locale/de.txt @@ -0,0 +1,22 @@ +# Translation by Xanthin + +[moreores] loaded. = [moreores] geladen. + +%s Ore = %serz +%s Lump = %sklumpen +%s Ingot = %sbarren +%s Block = %sblock +%s Pickaxe = %sspitzhacke +%s Shovel = %sschaufel +%s Axe = %saxt +%s Sword = %sschwert +%s Hoe = %shacke + +Copper = Kupfer +Tin = Zinn +Bronze = Bronze +Silver = Silber +Gold = Gold +Mithril = Mithril + +Copper Rail = Kupferschiene diff --git a/mods/moreores/locale/es.txt b/mods/moreores/locale/es.txt new file mode 100644 index 0000000..1344a5a --- /dev/null +++ b/mods/moreores/locale/es.txt @@ -0,0 +1,21 @@ +# Translation by kaeza + +[moreores] loaded. = [moreores] cargado. + +%s Ore = Mineral de %s +%s Lump = Pepita de %s +%s Ingot = Lingote de %s +%s Block = Bloque de %s +%s Pickaxe = Pico de %s +%s Shovel = Pala de %s +%s Axe = Hacha de %s +%s Sword = Espada de %s + +Copper = cobre +Tin = estaño +Bronze = bronce +Silver = plata +Gold = oro +Mithril = mitrilo + +Copper Rail = Riel de Cobre diff --git a/mods/moreores/locale/fr.txt b/mods/moreores/locale/fr.txt new file mode 100644 index 0000000..65687fa --- /dev/null +++ b/mods/moreores/locale/fr.txt @@ -0,0 +1,21 @@ +# Translation by Calinou + +[moreores] loaded. = [moreores] a été chargé. + +%s Ore = Minerai en %s +%s Lump = Roche en %s +%s Ingot = Lingot en %s +%s Block = Bloc en %s +%s Pickaxe = Pioche en %s +%s Shovel = Pelle en %s +%s Axe = Hache en %s +%s Sword = Épée en %s + +Copper = cuivre +Tin = étain +Bronze = bronze +Silver = argent +Gold = or +Mithril = mithril + +Copper Rail = Rail en cuivre diff --git a/mods/moreores/locale/it.txt b/mods/moreores/locale/it.txt new file mode 100644 index 0000000..dcd8c52 --- /dev/null +++ b/mods/moreores/locale/it.txt @@ -0,0 +1,21 @@ +# Translation by Pagliaccio + +[moreores] loaded. = [moreores] caricato. + +%s Ore = Minerale di %s +%s Lump = %s grezzo +%s Ingot = Lingotto di %s +%s Block = Blocco di %s +%s Pickaxe = Piccone di %s +%s Shovel = Badile di %s +%s Axe = Ascia di %s +%s Sword = Spada di %s + +Copper = Rame +Tin = Stagno +Bronze = Bronzo +Silver = Argento +Gold = Oro +Mithril = Mithril + +Copper Rail = Binario di rame \ No newline at end of file diff --git a/mods/moreores/locale/nl.txt b/mods/moreores/locale/nl.txt new file mode 100644 index 0000000..c90eb60 --- /dev/null +++ b/mods/moreores/locale/nl.txt @@ -0,0 +1,20 @@ +[moreores] loaded. = [moreores] geladen. + +%s Ore = %s Erts +%s Lump = %s Klomp +%s Ingot = %s Staaf +%s Block = %s Blok +%s Pickaxe = %s Pikhouweel +%s Shovel = %s Schep +%s Axe = %s Bijl +%s Sword = %s Zwaard +%s Hoe = %s Schoffel + +Copper = Koper +Tin = Tin +Bronze = Brons +Silver = Silver +Gold = Goud +Mithril = Mithril + +Copper Rail = Koperen Spoor diff --git a/mods/moreores/locale/pt_br.txt b/mods/moreores/locale/pt_br.txt new file mode 100644 index 0000000..ab84eeb --- /dev/null +++ b/mods/moreores/locale/pt_br.txt @@ -0,0 +1,21 @@ +# Translation by github.com/caiorrs + +[moreores] loaded. = [moreores] carregado. + +%s Ore = Minério de %s +%s Lump = Pepita de %s +%s Ingot = Lingote de %s +%s Block = Bloco de %s +%s Pickaxe = Picareta de %s +%s Shovel = Pá de %s +%s Axe = Machado de %s +%s Sword = Espada de %s + +Copper = Cobre +Tin = Estanho +Bronze = Bronze +Silver = Prata +Gold = Ouro +Mithril = Mitrilo + +Copper Rail = Trilho de Cobre diff --git a/mods/moreores/locale/tr.txt b/mods/moreores/locale/tr.txt new file mode 100644 index 0000000..4f20286 --- /dev/null +++ b/mods/moreores/locale/tr.txt @@ -0,0 +1,25 @@ +# Translation by Mahmutelmas06 +# mahmutelmas06@hotmail.com +# Türkçe Çeviri +# Turkish translation +# Language 2 letter iso code is "tr" + +[moreores] loaded. = [moreores] yüklendi. + +%s Ore = %s madeni +%s Lump = %s yığını +%s Ingot = %s külçesi +%s Block = %s blok +%s Pickaxe = %s kazma +%s Shovel = %s kürek +%s Axe = %s balta +%s Sword = %s kılıç + +Copper = Bakır +Tin = Kalay +Bronze = Bronz +Silver = Gümüş +Gold = Altın +Mithril = Mithril + +Copper Rail = Bakır ray diff --git a/mods/moreores/mg.lua b/mods/moreores/mg.lua new file mode 100644 index 0000000..6551ae5 --- /dev/null +++ b/mods/moreores/mg.lua @@ -0,0 +1,55 @@ +--[[ +More Ores: `mg` mod support + +Copyright (c) 2011-2017 Hugo Locurcio and contributors. +Licensed under the zlib license. See LICENSE.md for more information. +--]] + +if not minetest.registered_items["default:tin_ingot"] then + mg.register_ore({ + name = "moreores:mineral_tin", + wherein = "default:stone", + seeddiff = 8, + maxvdistance = 10.5, + maxheight = 8, + seglenghtn = 15, + seglenghtdev = 6, + segincln = 0, + segincldev = 0.6, + turnangle = 57, + forkturnangle = 57, + numperblock = 2 + }) +end + +mg.register_ore({ + name = "moreores:mineral_silver", + wherein = "default:stone", + seeddiff = 9, + maxvdistance = 10.5, + maxheight = -2, + seglenghtn = 15, + seglenghtdev = 6, + sizen = 60, + sizedev = 30, + segincln = 0, + segincldev = 0.6, + turnangle = 57, + forkturnangle = 57, + numperblock = 2 +}) + +mg.register_ore({ + name = "moreores:mineral_mithril", + wherein = "default:stone", + seeddiff = 10, + maxvdistance = 10.5, + maxheight = -512, + seglenghtn = 2, + seglenghtdev = 4, + sizen = 12, + sizedev = 5, + segincln = 0, + segincldev = 0.6, + turnangle = 57, +}) diff --git a/mods/moreores/mod.conf b/mods/moreores/mod.conf new file mode 100644 index 0000000..5a9f1e2 --- /dev/null +++ b/mods/moreores/mod.conf @@ -0,0 +1 @@ +name = moreores diff --git a/mods/moreores/textures/moreores_copper_rail.png b/mods/moreores/textures/moreores_copper_rail.png new file mode 100644 index 0000000..31f2999 Binary files /dev/null and b/mods/moreores/textures/moreores_copper_rail.png differ diff --git a/mods/moreores/textures/moreores_copper_rail_crossing.png b/mods/moreores/textures/moreores_copper_rail_crossing.png new file mode 100644 index 0000000..bc78b47 Binary files /dev/null and b/mods/moreores/textures/moreores_copper_rail_crossing.png differ diff --git a/mods/moreores/textures/moreores_copper_rail_curved.png b/mods/moreores/textures/moreores_copper_rail_curved.png new file mode 100644 index 0000000..e766793 Binary files /dev/null and b/mods/moreores/textures/moreores_copper_rail_curved.png differ diff --git a/mods/moreores/textures/moreores_copper_rail_t_junction.png b/mods/moreores/textures/moreores_copper_rail_t_junction.png new file mode 100644 index 0000000..dd23aa7 Binary files /dev/null and b/mods/moreores/textures/moreores_copper_rail_t_junction.png differ diff --git a/mods/moreores/textures/moreores_mineral_mithril.png b/mods/moreores/textures/moreores_mineral_mithril.png new file mode 100644 index 0000000..ed0fbf2 Binary files /dev/null and b/mods/moreores/textures/moreores_mineral_mithril.png differ diff --git a/mods/moreores/textures/moreores_mineral_silver.png b/mods/moreores/textures/moreores_mineral_silver.png new file mode 100644 index 0000000..93f9f43 Binary files /dev/null and b/mods/moreores/textures/moreores_mineral_silver.png differ diff --git a/mods/moreores/textures/moreores_mineral_tin.png b/mods/moreores/textures/moreores_mineral_tin.png new file mode 100644 index 0000000..232d4b5 Binary files /dev/null and b/mods/moreores/textures/moreores_mineral_tin.png differ diff --git a/mods/moreores/textures/moreores_mithril_block.png b/mods/moreores/textures/moreores_mithril_block.png new file mode 100644 index 0000000..dd7a246 Binary files /dev/null and b/mods/moreores/textures/moreores_mithril_block.png differ diff --git a/mods/moreores/textures/moreores_mithril_ingot.png b/mods/moreores/textures/moreores_mithril_ingot.png new file mode 100644 index 0000000..9065e6a Binary files /dev/null and b/mods/moreores/textures/moreores_mithril_ingot.png differ diff --git a/mods/moreores/textures/moreores_mithril_lump.png b/mods/moreores/textures/moreores_mithril_lump.png new file mode 100644 index 0000000..6c7f30c Binary files /dev/null and b/mods/moreores/textures/moreores_mithril_lump.png differ diff --git a/mods/moreores/textures/moreores_silver_block.png b/mods/moreores/textures/moreores_silver_block.png new file mode 100644 index 0000000..6806b5c Binary files /dev/null and b/mods/moreores/textures/moreores_silver_block.png differ diff --git a/mods/moreores/textures/moreores_silver_ingot.png b/mods/moreores/textures/moreores_silver_ingot.png new file mode 100644 index 0000000..86dd54e Binary files /dev/null and b/mods/moreores/textures/moreores_silver_ingot.png differ diff --git a/mods/moreores/textures/moreores_silver_lump.png b/mods/moreores/textures/moreores_silver_lump.png new file mode 100644 index 0000000..e815ef0 Binary files /dev/null and b/mods/moreores/textures/moreores_silver_lump.png differ diff --git a/mods/moreores/textures/moreores_tin_block.png b/mods/moreores/textures/moreores_tin_block.png new file mode 100644 index 0000000..2f874c4 Binary files /dev/null and b/mods/moreores/textures/moreores_tin_block.png differ diff --git a/mods/moreores/textures/moreores_tin_ingot.png b/mods/moreores/textures/moreores_tin_ingot.png new file mode 100644 index 0000000..eed5361 Binary files /dev/null and b/mods/moreores/textures/moreores_tin_ingot.png differ diff --git a/mods/moreores/textures/moreores_tin_lump.png b/mods/moreores/textures/moreores_tin_lump.png new file mode 100644 index 0000000..72bd339 Binary files /dev/null and b/mods/moreores/textures/moreores_tin_lump.png differ diff --git a/mods/moreores/textures/moreores_tool_mithrilaxe.png b/mods/moreores/textures/moreores_tool_mithrilaxe.png new file mode 100644 index 0000000..46f7776 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_mithrilaxe.png differ diff --git a/mods/moreores/textures/moreores_tool_mithrilhoe.png b/mods/moreores/textures/moreores_tool_mithrilhoe.png new file mode 100644 index 0000000..4a58e8f Binary files /dev/null and b/mods/moreores/textures/moreores_tool_mithrilhoe.png differ diff --git a/mods/moreores/textures/moreores_tool_mithrilpick.png b/mods/moreores/textures/moreores_tool_mithrilpick.png new file mode 100644 index 0000000..efe9443 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_mithrilpick.png differ diff --git a/mods/moreores/textures/moreores_tool_mithrilshovel.png b/mods/moreores/textures/moreores_tool_mithrilshovel.png new file mode 100644 index 0000000..128e9f7 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_mithrilshovel.png differ diff --git a/mods/moreores/textures/moreores_tool_mithrilsword.png b/mods/moreores/textures/moreores_tool_mithrilsword.png new file mode 100644 index 0000000..cd1d864 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_mithrilsword.png differ diff --git a/mods/moreores/textures/moreores_tool_silveraxe.png b/mods/moreores/textures/moreores_tool_silveraxe.png new file mode 100644 index 0000000..31d9acf Binary files /dev/null and b/mods/moreores/textures/moreores_tool_silveraxe.png differ diff --git a/mods/moreores/textures/moreores_tool_silverhoe.png b/mods/moreores/textures/moreores_tool_silverhoe.png new file mode 100644 index 0000000..f384113 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_silverhoe.png differ diff --git a/mods/moreores/textures/moreores_tool_silverpick.png b/mods/moreores/textures/moreores_tool_silverpick.png new file mode 100644 index 0000000..4194c6e Binary files /dev/null and b/mods/moreores/textures/moreores_tool_silverpick.png differ diff --git a/mods/moreores/textures/moreores_tool_silvershovel.png b/mods/moreores/textures/moreores_tool_silvershovel.png new file mode 100644 index 0000000..9f9cfbe Binary files /dev/null and b/mods/moreores/textures/moreores_tool_silvershovel.png differ diff --git a/mods/moreores/textures/moreores_tool_silversword.png b/mods/moreores/textures/moreores_tool_silversword.png new file mode 100644 index 0000000..1393df5 Binary files /dev/null and b/mods/moreores/textures/moreores_tool_silversword.png differ diff --git a/mods/names_per_ip/depends.txt b/mods/names_per_ip/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/names_per_ip/init.lua b/mods/names_per_ip/init.lua new file mode 100644 index 0000000..296cb52 --- /dev/null +++ b/mods/names_per_ip/init.lua @@ -0,0 +1,144 @@ +minetest.register_privilege("whois", { + description = "Allows player to see other player IPs"}) + +-- Created by Krock to stop mass-account-creators +-- License: WTFPL + +ipnames = {} +ipnames.data = {} +ipnames.tmp_data = {} +ipnames.changes = false +ipnames.save_interval = 120 +ipnames.save_time = 0 +ipnames.file = minetest.get_worldpath().."/ipnames.txt" + +ipnames.name_per_ip_limit = tonumber(minetest.setting_get("max_names_per_ip")) or 5 + +-- Get accounts self: +minetest.register_chatcommand("whois", { + description = "Gets all players who have the same IP as the specified player", + privs = {whois = true}, + func = function(name, param) + if not ipnames.data[param] then + minetest.chat_send_player(name, "The player \"" .. param .. "\" did not join yet.") + return + end + + local ip = ipnames.data[param] + local names = ""; + for k, v in pairs(ipnames.data) do + if v == ip then + if names ~= "" then + names = names .. ", " .. k + else + names = names .. " " .. k + end + end + end + minetest.chat_send_player(name, "Players for IP address " .. ip .. ": " .. names) + end, +}) + +-- Get accounts self: +minetest.register_chatcommand("alias", { + description = "Gets all players who have the same IP as the specified player", + privs = {shout = true}, + func = function(name, param) + if not ipnames.data[param] then + minetest.chat_send_player(name, "The player \"" .. param .. "\" did not join yet.") + return + end + + local ip = ipnames.data[param] + local names = ""; + for k, v in pairs(ipnames.data) do + if v == ip then + if names ~= "" then + names = names .. ", " .. k + else + names = names .. " " .. k + end + end + end + minetest.chat_send_player(name, "Aliases (same IP) of ".. param .. ": " .. names) + end, +}) + +-- Get IP if player tries to join, ban if there are too much names per IP: +minetest.register_on_prejoinplayer(function(name, ip) + -- Only stop new accounts: + ipnames.tmp_data[name] = ip + if not ipnames.data[name] then + local count = 1 + local names = "" + for k, v in pairs(ipnames.data) do + if v == ip then + count = count + 1 + names = names .. k .. ", " + end + end + + if count <= ipnames.name_per_ip_limit and count > 1 then + minetest.log("action", name .. " now has " .. count .. " accounts. Other accounts: " .. names) + end + + if count > ipnames.name_per_ip_limit then + ipnames.tmp_data[name] = nil + if tostring(ip) ~= "127.0.0.1" then + return ("\nYou exceeded the limit of accounts (" .. ipnames.name_per_ip_limit .. + ").\nYou already have the following accounts:\n" .. names) + end + end + end +end) + +-- Save IP if player joined: +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + ipnames.data[name] = ipnames.tmp_data[name] + ipnames.tmp_data[name] = nil + ipnames.changes = true +end) + +function ipnames.load_data() + local file = io.open(ipnames.file, "r") + if not file then + return + end + for line in file:lines() do + if line ~= "" then + local data = line:split("|") + if #data >= 2 then + ipnames.data[data[1]] = data[2] + end + end + end + io.close(file) +end + +function ipnames.save_data() + if not ipnames.changes then + return + end + ipnames.changes = false + local file = io.open(ipnames.file, "w") + for i, v in pairs(ipnames.data) do + if v ~= nil then + file:write(i .. "|" .. v .. "\n") + end + end + io.close(file) +end + +minetest.register_globalstep(function(t) + ipnames.save_time = ipnames.save_time + t + if ipnames.save_time < ipnames.save_interval then + return + end + ipnames.save_time = 0 + ipnames.save_data() +end) + +minetest.register_on_shutdown(function() ipnames.save_data() end) + +minetest.after(3, function() ipnames.load_data() end) diff --git a/mods/pipeworks/.gitignore b/mods/pipeworks/.gitignore new file mode 100644 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 100644 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/pipeworks/README b/mods/pipeworks/README new file mode 100644 index 0000000..7a34618 --- /dev/null +++ b/mods/pipeworks/README @@ -0,0 +1,22 @@ +This mod uses nodeboxes to supply a complete set of 3D pipes and tubes, +along devices that work with them. + +See https://github.com/VanessaE/pipeworks/wiki/ for detailed information about usage of this mod. + +Unlike the previous version of this mod, these pipes are rounded, and when +placed, they'll automatically join together as needed. Pipes can go vertically +or horizontally, and there are enough nodes defined to allow for all possible +connections. Valves and pumps can only be placed horizontally, and will +automatically rotate and join with neighboring pipes as objects are added, as +well as joining with each other under certain circumstances. + +Pipes come in two variants: one type bears one or more dark windows on each +pipe, suggesting they're empty, while the other type bears green-tinted +windows, as if full (the two colors should also be easy to select if you want +to change them in a paint program). These windows only appear on straight +lengths and on certain junctions. + +This mod is a work in progress. + +Please note that owing to the nature of this mod, I have opted to use 64px +textures. Anything less just looks terrible. diff --git a/mods/pipeworks/autocrafter.lua b/mods/pipeworks/autocrafter.lua new file mode 100644 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 100644 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 100644 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/pipeworks/autoplace_tubes.lua b/mods/pipeworks/autoplace_tubes.lua new file mode 100644 index 0000000..0d28e64 --- /dev/null +++ b/mods/pipeworks/autoplace_tubes.lua @@ -0,0 +1,122 @@ +-- autorouting for pneumatic tubes + +local function is_tube(nodename) + return pipeworks.table_contains(pipeworks.tubenodes, nodename) +end + +--a function for determining which side of the node we are on +local function nodeside(node, tubedir) + if node.param2 < 0 or node.param2 > 23 then + node.param2 = 0 + end + + local backdir = minetest.facedir_to_dir(node.param2) + local back = pipeworks.vector_dot(backdir, tubedir) + if back == 1 then + return "back" + elseif back == -1 then + return "front" + end + + local topdir = pipeworks.facedir_to_top_dir(node.param2) + local top = pipeworks.vector_dot(topdir, tubedir) + if top == 1 then + return "top" + elseif top == -1 then + return "bottom" + end + + local rightdir = pipeworks.facedir_to_right_dir(node.param2) + local right = pipeworks.vector_dot(rightdir, tubedir) + if right == 1 then + return "right" + else + return "left" + end +end + +local vts = {0, 3, 1, 4, 2, 5} +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 tube_autoroute(pos) + local active = {0, 0, 0, 0, 0, 0} + local nctr = minetest.get_node(pos) + if not is_tube(nctr.name) then return end + + local adjustments = { + {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} + } + -- xm = 1, xp = 2, ym = 3, yp = 4, zm = 5, zp = 6 + + local positions = {} + local nodes = {} + for i, adj in ipairs(adjustments) do + positions[i] = vector.add(pos, adj) + nodes[i] = minetest.get_node(positions[i]) + end + + for i, node in ipairs(nodes) do + local idef = minetest.registered_nodes[node.name] + -- handle the tubes themselves + if is_tube(node.name) then + active[i] = 1 + -- handle new style connectors + elseif idef and idef.tube and idef.tube.connect_sides then + local dir = adjustments[i] + if idef.tube.connect_sides[nodeside(node, vector.multiply(dir, -1))] then + active[i] = 1 + end + end + end + + -- all sides checked, now figure which tube to use. + + local nodedef = minetest.registered_nodes[nctr.name] + local basename = nodedef.basename + if nodedef.style == "old" then + local nsurround = "" + for i, n in ipairs(active) do + nsurround = nsurround..n + end + nctr.name = basename.."_"..nsurround + elseif nodedef.style == "6d" then + local s = 0 + for i, n in ipairs(active) do + if n == 1 then + s = s + 2^vts[i] + end + end + nctr.name = basename.."_"..tube_table[s] + nctr.param2 = tube_table_facedirs[s] + end + minetest.swap_node(pos, nctr) +end + +function pipeworks.scan_for_tube_objects(pos) + for side = 0, 6 do + tube_autoroute(vector.add(pos, pipeworks.directions.side_to_dir(side))) + end +end + +function pipeworks.after_place(pos) + pipeworks.scan_for_tube_objects(pos) +end + +function pipeworks.after_dig(pos) + pipeworks.scan_for_tube_objects(pos) +end + +if minetest.get_modpath("mesecons_mvps") then + mesecon.register_on_mvps_move(function(moved_nodes) + for _, n in ipairs(moved_nodes) do + pipeworks.scan_for_tube_objects(n.pos) + pipeworks.scan_for_tube_objects(n.oldpos) + end + end) +end + diff --git a/mods/pipeworks/changelog.txt b/mods/pipeworks/changelog.txt new file mode 100644 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/pipeworks/common.lua b/mods/pipeworks/common.lua new file mode 100644 index 0000000..0f8c34c --- /dev/null +++ b/mods/pipeworks/common.lua @@ -0,0 +1,290 @@ +---------------------- +-- Vector functions -- +---------------------- + +function pipeworks.vector_cross(a, b) + return { + x = a.y * b.z - a.z * b.y, + y = a.z * b.x - a.x * b.z, + z = a.x * b.y - a.y * b.x + } +end + +function pipeworks.vector_dot(a, b) + return a.x * b.x + a.y * b.y + a.z * b.z +end + +----------------------- +-- Facedir functions -- +----------------------- + +function pipeworks.facedir_to_top_dir(facedir) + return ({[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}}) + [math.floor(facedir / 4)] +end + +function pipeworks.facedir_to_right_dir(facedir) + return pipeworks.vector_cross( + pipeworks.facedir_to_top_dir(facedir), + minetest.facedir_to_dir(facedir) + ) +end + +local directions = {} +pipeworks.directions = directions +function directions.side_to_dir(side) + return ({[0] = vector.new(), + vector.new( 0, 1, 0), + vector.new( 0, -1, 0), + vector.new( 1, 0, 0), + vector.new(-1, 0, 0), + vector.new( 0, 0, 1), + vector.new( 0, 0, -1) + })[side] +end + +function directions.dir_to_side(dir) + local c = pipeworks.vector_dot(dir, vector.new(1, 2, 3)) + 4 + return ({6, 2, 4, 0, 3, 1, 5})[c] +end + +---------------------- +-- String functions -- +---------------------- + +--[[function pipeworks.string_split(str, sep) + local fields = {} + local index = 1 + local expr = "([^"..sep.."])+" + string.gsub(str, expr, function(substring) + fields[index] = substring + index = index + 1 + end) + return fields +end]] + +function pipeworks.string_startswith(str, substr) + return str:sub(1, substr:len()) == substr +end + +--------------------- +-- Table functions -- +--------------------- + +function pipeworks.table_contains(tbl, element) + for _, elt in pairs(tbl) do + if elt == element then + return true + end + end + return false +end + +function pipeworks.table_extend(tbl, tbl2) + local index = #tbl + 1 + for _, elt in ipairs(tbl2) do + tbl[index] = elt + index = index + 1 + end +end + +function pipeworks.table_recursive_replace(tbl, pattern, replace_with) + if type(tbl) == "table" then + local tbl2 = {} + for key, value in pairs(tbl) do + tbl2[key] = pipeworks.table_recursive_replace(value, pattern, replace_with) + end + return tbl2 + elseif type(tbl) == "string" then + return tbl:gsub(pattern, replace_with) + else + return tbl + end +end + +------------------------ +-- Formspec functions -- +------------------------ + +local fs_helpers = {} +pipeworks.fs_helpers = fs_helpers +function fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(pos) + for field, value in pairs(fields) do + if pipeworks.string_startswith(field, "fs_helpers_cycling:") then + local l = field:split(":") + local new_value = tonumber(l[2]) + local meta_name = l[3] + meta:set_int(meta_name, new_value) + end + end +end + +function fs_helpers.cycling_button(meta, base, meta_name, values) + local current_value = meta:get_int(meta_name) + local new_value = (current_value + 1) % (#values) + local val = values[current_value + 1] + local text + local texture_name = nil + local addopts = nil + --when we get a table, we know the caller wants an image_button + if type(val) == "table" then + text = val["text"] + texture_name = val["texture"] + addopts = val["addopts"] + else + text = val + end + local field = "fs_helpers_cycling:"..new_value..":"..meta_name + return base..";"..(texture_name and texture_name..";" or "")..field..";"..minetest.formspec_escape(text)..(addopts and ";"..addopts or "").."]" +end + +--------- +-- Env -- +--------- + +function pipeworks.load_position(pos) + if pos.x < -30912 or pos.y < -30912 or pos.z < -30912 or + pos.x > 30927 or pos.y > 30927 or pos.z > 30927 then return end + if minetest.get_node_or_nil(pos) then + return + end + local vm = minetest.get_voxel_manip() + vm:read_from_map(pos, pos) +end + +local function delay(...) + local args = {...} + return (function() return unpack(args) end) +end + +local function get_set_wrap(name, is_dynamic) + return (function(self) + return self["_" .. name] + end), (function(self, value) + if is_dynamic then + self["_" .. name] = type(value) == "table" + and table.copy(value) or value + end + end) +end + +function pipeworks.create_fake_player(def, is_dynamic) + local wielded_item = ItemStack("") + if def.inventory and def.wield_list then + wielded_item = def.inventory:get_stack(def.wield_list, def.wield_index or 1) + end + local p = { + get_player_name = delay(def.name), + is_player = delay(true), + is_fake_player = true, + + _formspec = def.formspec or default.gui_survival_form, + _hp = def.hp or 20, + _breath = 11, + _pos = def.position and table.copy(def.position) or vector.new(), + _properties = def.properties or { eye_height = def.eye_height or 1.47 }, + _inventory = def.inventory, + _wield_index = def.wield_index or 1, + _wielded_item = wielded_item, + + -- Model and view + _eye_offset1 = vector.new(), + _eye_offset3 = vector.new(), + set_eye_offset = function(self, first, third) + self._eye_offset1 = table.copy(first) + self._eye_offset3 = table.copy(third) + end, + get_eye_offset = function(self) + return self._eye_offset1, self._eye_offset3 + end, + get_look_dir = delay(def.look_dir or {x=0, y=0, z=1}), + get_look_pitch = delay(def.look_pitch or 0), + get_look_yaw = delay(def.look_yaw or 0), + get_look_horizontal = delay(def.look_yaw or 0), + get_look_vertical = delay(-(def.look_pitch or 0)), + set_animation = delay(), + + -- Controls + get_player_control = delay({ + jump=false, right=false, left=false, LMB=false, RMB=false, + sneak=def.sneak, aux1=false, down=false, up=false + }), + get_player_control_bits = delay(def.sneak and 64 or 0), + + -- Inventory and ItemStacks + get_inventory = delay(def.inventory), + set_wielded_item = function(self, item) + if self._inventory and def.wield_list then + return self._inventory:set_stack(def.wield_list, + self._wield_index, item) + end + _wielded_item = ItemStack(item) + end, + get_wielded_item = function(self, item) + if self._inventory and def.wield_list then + return self._inventory:get_stack(def.wield_list, + self._wield_index) + end + return ItemStack(self._wielded_item) + end, + get_wield_list = delay(def.wield_list), + + punch = delay(), + remove = delay(), + right_click = delay(), + set_attach = delay(), + set_detach = delay(), + set_bone_position = delay(), + hud_change = delay(), + } + local _trash + -- Getter & setter functions + p.get_inventory_formspec, p.set_inventory_formspec + = get_set_wrap("formspec", is_dynamic) + p.get_breath, p.set_breath = get_set_wrap("breath", is_dynamic) + p.get_hp, p.set_hp = get_set_wrap("hp", is_dynamic) + p.get_pos, p.set_pos = get_set_wrap("pos", is_dynamic) + _trash, p.move_to = get_set_wrap("pos", is_dynamic) + p.get_wield_index, p.set_wield_index = get_set_wrap("wield_index", true) + p.get_properties, p.set_properties = get_set_wrap("properties", false) + + -- Backwards compatibilty + p.getpos = p.get_pos + p.setpos = p.set_pos + p.moveto = p.move_to + + -- TODO "implement" all these + -- set_armor_groups + -- get_armor_groups + -- get_animation + -- get_bone_position + -- get_player_velocity + -- set_look_pitch + -- set_look_yaw + -- 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 + return p +end diff --git a/mods/pipeworks/compat-chests.lua b/mods/pipeworks/compat-chests.lua new file mode 100644 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 100644 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 100644 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/pipeworks/decorative_tubes.lua b/mods/pipeworks/decorative_tubes.lua new file mode 100644 index 0000000..39ba8f3 --- /dev/null +++ b/mods/pipeworks/decorative_tubes.lua @@ -0,0 +1,83 @@ +local straight = function(pos, node, velocity, stack) return {velocity} end + +minetest.register_node("pipeworks:steel_block_embedded_tube", { + description = "Airtight steelblock embedded tube", + tiles = { + "default_steel_block.png", "default_steel_block.png", + "default_steel_block.png", "default_steel_block.png", + "default_steel_block.png^pipeworks_tube_connection_metallic.png", + "default_steel_block.png^pipeworks_tube_connection_metallic.png", + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + tube = { + connect_sides = {front = 1, back = 1,}, + priority = 50, + can_go = straight, + can_insert = function(pos, node, stack, direction) + local dir = minetest.facedir_to_dir(node.param2) + return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction) + end, + }, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig, +}) + +minetest.register_craft( { + output = "pipeworks:steel_block_embedded_tube 1", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "default:steel_ingot", "pipeworks:tube_1", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + }, +}) + +local pane_box = { + type = "fixed", + fixed = { + { -9/64, -9/64, -8/16, 9/64, 9/64, 8/16 }, -- tube + { -8/16, -8/16, -1/16, 8/16, 8/16, 1/16 } -- pane + } +} +minetest.register_node("pipeworks:steel_pane_embedded_tube", { + drawtype = "nodebox", + description = "Airtight panel embedded tube ", + tiles = { + "pipeworks_pane_embedded_tube_sides.png^[transformR90", + "pipeworks_pane_embedded_tube_sides.png^[transformR90", + "pipeworks_pane_embedded_tube_sides.png", + "pipeworks_pane_embedded_tube_sides.png", + "pipeworks_pane_embedded_tube_ends.png", "pipeworks_pane_embedded_tube_ends.png", + }, + node_box = pane_box, + selection_box = pane_box, + collision_box = pane_box, + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1}, + legacy_facedir_simple = true, + sounds = default.node_sound_stone_defaults(), + tube = { + connect_sides = {front = 1, back = 1,}, + priority = 50, + can_go = straight, + can_insert = function(pos, node, stack, direction) + local dir = minetest.facedir_to_dir(node.param2) + return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction) + end, + }, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig, +}) + +minetest.register_craft( { + output = "pipeworks:steel_pane_embedded_tube 1", + recipe = { + { "", "default:steel_ingot", "" }, + { "", "pipeworks:tube_1", "" }, + { "", "default:steel_ingot", "" } + }, +}) diff --git a/mods/pipeworks/default_settings.lua b/mods/pipeworks/default_settings.lua new file mode 100644 index 0000000..a510c7e --- /dev/null +++ b/mods/pipeworks/default_settings.lua @@ -0,0 +1,72 @@ +-- Various settings + +local prefix = "pipeworks_" + +local settings = { + enable_pipes = true, + enable_lowpoly = true, + enable_autocrafter = true, + enable_deployer = true, + enable_dispenser = true, + enable_node_breaker = true, + enable_teleport_tube = false, + 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 100644 index 0000000..0cb7406 --- /dev/null +++ b/mods/pipeworks/depends.txt @@ -0,0 +1,4 @@ +default +mesecons +mesecons_mvps +digilines? diff --git a/mods/pipeworks/description.txt b/mods/pipeworks/description.txt new file mode 100644 index 0000000..5c14766 --- /dev/null +++ b/mods/pipeworks/description.txt @@ -0,0 +1 @@ +This mod uses mesh nodes and nodeboxes to supply a complete set of 3D pipes and tubes, along with devices that work with them. diff --git a/mods/pipeworks/devices.lua b/mods/pipeworks/devices.lua new file mode 100644 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 100644 index 0000000..a8659ad --- /dev/null +++ b/mods/pipeworks/filter-injector.lua @@ -0,0 +1,560 @@ +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 = pipeworks.create_fake_player({ + name = owner + }) + 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 100644 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 100644 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 100644 index 0000000..d3a13c5 --- /dev/null +++ b/mods/pipeworks/item_transport.lua @@ -0,0 +1,403 @@ +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:set_velocity(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:set_yaw((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:get_pos(), 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:get_pos() + if self.start_pos == nil then + self.start_pos = vector.round(pos) + self:set_pos(pos) + end + + local stack = ItemStack(self.itemstring) + + local velocity = self:get_velocity() + + 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:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:set_velocity(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) + if dropped_item then + dropped_item:set_velocity(vector.multiply(velocity, 5)) + self:remove() + end + return + else + velocity = vector.multiply(velocity, -1) + self:set_pos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1))) + self:set_velocity(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:set_pos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr))) + self:set_velocity(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:get_pos() + local rpos = vector.round(pos) + local dir = moved[minetest.hash_node_position(rpos)] + if dir then + entity:set_pos(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 100644 index 0000000..bb92a8f --- /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:get_pos() + + --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 100644 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 100644 index 0000000..c11c030 --- /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:get_pos()) + 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:set_pos(vector.add(self._pos, def.offset)) + def.entity:set_velocity(self._velocity) + def.entity:set_acceleration(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, + get_id = function(self) + return self._id + end, + get_pos = function(self) + return vector.new(self._pos) + end, + set_pos = function(self, pos) + self._pos = vector.new(pos) + --for _, entity in pairs(self._attached_entities) do + -- if entity.entity then + -- entity.entity:set_pos(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:set_pos(vector.add(self._pos, master_def.offset)) + end + end, + get_velocity = function(self) + return vector.new(self._velocity) + end, + set_velocity = function(self, velocity) + self._velocity = vector.new(velocity) + local master = self._attached_entities_master + if master then + self._attached_entities[master].entity:set_velocity(self._velocity) + end + end, + get_acceleration = function(self) + return vector.new(self._acceleration) + end, + set_acceleration = function(self, acceleration) + self._acceleration = vector.new(acceleration) + local master = self._attached_entities_master + if master then + self._attached_entities[master].entity:set_acceleration(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:get_pos()) <= 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:get_pos() + if master_entity_pos then + entity._pos = vector.subtract(master_entity_pos, master_def.offset) + entity._velocity = master_entity:get_velocity() + entity._acceleration = master_entity:get_acceleration() + 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/pipeworks/mod.conf b/mods/pipeworks/mod.conf new file mode 100644 index 0000000..d9d2984 --- /dev/null +++ b/mods/pipeworks/mod.conf @@ -0,0 +1 @@ +name = pipeworks diff --git a/mods/pipeworks/models.lua b/mods/pipeworks/models.lua new file mode 100644 index 0000000..d9928d2 --- /dev/null +++ b/mods/pipeworks/models.lua @@ -0,0 +1,49 @@ +----------------------------------- +-- The various pipe select boxes + +pipeworks.pipe_selectboxes = { + { -32/64, -8/64, -8/64, 8/64, 8/64, 8/64 }, + { -8/64 , -8/64, -8/64, 32/64, 8/64, 8/64 }, + { -8/64 , -32/64, -8/64, 8/64, 8/64, 8/64 }, + { -8/64 , -8/64, -8/64, 8/64, 32/64, 8/64 }, + { -8/64 , -8/64, -32/64, 8/64, 8/64, 8/64 }, + { -8/64 , -8/64, -8/64, 8/64, 8/64, 32/64 } +} + +-- Tube models + +pipeworks.tube_leftstub = { + { -32/64, -9/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -X face +} + +pipeworks.tube_rightstub = { + { -9/64, -9/64, -9/64, 32/64, 9/64, 9/64 }, -- tube segment against +X face +} + +pipeworks.tube_bottomstub = { + { -9/64, -32/64, -9/64, 9/64, 9/64, 9/64 }, -- tube segment against -Y face +} + +pipeworks.tube_topstub = { + { -9/64, -9/64, -9/64, 9/64, 32/64, 9/64 }, -- tube segment against +Y face +} + +pipeworks.tube_frontstub = { + { -9/64, -9/64, -32/64, 9/64, 9/64, 9/64 }, -- tube segment against -Z face +} + +pipeworks.tube_backstub = { + { -9/64, -9/64, -9/64, 9/64, 9/64, 32/64 }, -- tube segment against +Z face +} + +pipeworks.tube_boxes = {pipeworks.tube_leftstub, pipeworks.tube_rightstub, pipeworks.tube_bottomstub, pipeworks.tube_topstub, pipeworks.tube_frontstub, pipeworks.tube_backstub} + +pipeworks.tube_selectboxes = { + { -32/64, -10/64, -10/64, 10/64, 10/64, 10/64 }, + { -10/64 , -10/64, -10/64, 32/64, 10/64, 10/64 }, + { -10/64 , -32/64, -10/64, 10/64, 10/64, 10/64 }, + { -10/64 , -10/64, -10/64, 10/64, 32/64, 10/64 }, + { -10/64 , -10/64, -32/64, 10/64, 10/64, 10/64 }, + { -10/64 , -10/64, -10/64, 10/64, 10/64, 32/64 } +} + diff --git a/mods/pipeworks/models/pipeworks_entry_panel.obj b/mods/pipeworks/models/pipeworks_entry_panel.obj new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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/pipeworks/routing_tubes.lua b/mods/pipeworks/routing_tubes.lua new file mode 100644 index 0000000..ba9e0aa --- /dev/null +++ b/mods/pipeworks/routing_tubes.lua @@ -0,0 +1,173 @@ + +-- the default tube and default textures +pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment") +minetest.register_craft( { + output = "pipeworks:tube_1 6", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "", "", "" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, +}) + +local nodecolor = 0xffff3030 + +pipeworks.register_tube("pipeworks:broken_tube", { + description = "Broken Tube (you hacker you)", + plain = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } }, + noctr = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } }, + ends = { { name = "pipeworks_broken_tube_end.png", color = nodecolor } }, + short = { name = "pipeworks_broken_tube_short.png", color = nodecolor }, + node_def = { + drop = "pipeworks:tube_1", + groups = {not_in_creative_inventory = 1, tubedevice_receiver = 1}, + tube = { + insert_object = function(pos, node, stack, direction) + minetest.item_drop(stack, nil, pos) + return ItemStack("") + end, + can_insert = function(pos,node,stack,direction) + return true + end, + priority = 50, + }, + on_punch = function(pos, node, puncher, pointed_thing) + local itemstack = puncher:get_wielded_item() + local wieldname = itemstack:get_name() + local playername = puncher:get_player_name() + print("[Pipeworks] "..playername.." struck a broken tube at "..minetest.pos_to_string(pos)) + if wieldname == "anvil:hammer" + or wieldname == "cottages:hammer" + or wieldname == "glooptest:hammer_steel" + or wieldname == "glooptest:hammer_bronze" + or wieldname == "glooptest:hammer_diamond" + or wieldname == "glooptest:hammer_mese" + or wieldname == "glooptest:hammer_alatro" + or wieldname == "glooptest:hammer_arol" then + local meta = minetest.get_meta(pos) + local was_node = minetest.deserialize(meta:get_string("the_tube_was")) + if was_node and was_node ~= "" then + print(" with "..wieldname.." to repair it.") + minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 }) + pipeworks.scan_for_tube_objects(pos) + itemstack:add_wear(1000) + puncher:set_wielded_item(itemstack) + return itemstack + else + print(" but it can't be repaired.") + end + else + print(" with "..wieldname.." but that tool is too weak.") + end + end + } +}) + +-- the high priority tube is a low-cpu replacement for sorting tubes in situations +-- where players would use them for simple routing (turning off paths) +-- without doing actual sorting, like at outputs of tubedevices that might both accept and eject items +if pipeworks.enable_priority_tube then + local color = "#ff3030:128" + pipeworks.register_tube("pipeworks:priority_tube", { + description = "High Priority Tube Segment", + inventory_image = "pipeworks_tube_inv.png^[colorize:" .. color, + plain = { { name = "pipeworks_tube_plain.png", color = nodecolor } }, + noctr = { { name = "pipeworks_tube_noctr.png", color = nodecolor } }, + ends = { { name = "pipeworks_tube_end.png", color = nodecolor } }, + short = { name = "pipeworks_tube_short.png", color = nodecolor }, + node_def = { + tube = { priority = 150 } -- higher than tubedevices (100) + }, + }) + minetest.register_craft( { + output = "pipeworks:priority_tube_1 6", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:gold_ingot", "", "default:gold_ingot" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end + +if pipeworks.enable_accelerator_tube then + pipeworks.register_tube("pipeworks:accelerator_tube", { + description = "Accelerating Pneumatic Tube Segment", + inventory_image = "pipeworks_accelerator_tube_inv.png", + plain = { "pipeworks_accelerator_tube_plain.png" }, + noctr = { "pipeworks_accelerator_tube_noctr.png" }, + ends = { "pipeworks_accelerator_tube_end.png" }, + short = "pipeworks_accelerator_tube_short.png", + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + velocity.speed = velocity.speed+1 + return pipeworks.notvel(pipeworks.meseadjlist, velocity) + end} + }, + }) + minetest.register_craft( { + output = "pipeworks:accelerator_tube_1 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "default:mese_crystal_fragment", "default:steel_ingot", "default:mese_crystal_fragment" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end + +if pipeworks.enable_crossing_tube then + pipeworks.register_tube("pipeworks:crossing_tube", { + description = "Crossing Pneumatic Tube Segment", + inventory_image = "pipeworks_crossing_tube_inv.png", + plain = { "pipeworks_crossing_tube_plain.png" }, + noctr = { "pipeworks_crossing_tube_noctr.png" }, + ends = { "pipeworks_crossing_tube_end.png" }, + short = "pipeworks_crossing_tube_short.png", + node_def = { + tube = {can_go = function(pos, node, velocity, stack) return {velocity} end } + }, + }) + minetest.register_craft( { + output = "pipeworks:crossing_tube_1 5", + recipe = { + { "", "pipeworks:tube_1", "" }, + { "pipeworks:tube_1", "pipeworks:tube_1", "pipeworks:tube_1" }, + { "", "pipeworks:tube_1", "" } + }, + }) +end + +if pipeworks.enable_one_way_tube then + minetest.register_node("pipeworks:one_way_tube", { + description = "One way tube", + tiles = {"pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_top.png", "pipeworks_one_way_tube_output.png", + "pipeworks_one_way_tube_input.png", "pipeworks_one_way_tube_side.png", "pipeworks_one_way_tube_top.png"}, + paramtype2 = "facedir", + drawtype = "nodebox", + paramtype = "light", + node_box = {type = "fixed", + fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}}, + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1}, + sounds = default.node_sound_wood_defaults(), + tube = { + connect_sides = {left = 1, right = 1}, + can_go = function(pos, node, velocity, stack) + return {velocity} + end, + can_insert = function(pos, node, stack, direction) + local dir = pipeworks.facedir_to_right_dir(node.param2) + return vector.equals(dir, direction) + end, + priority = 75 -- Higher than normal tubes, but lower than receivers + }, + after_place_node = pipeworks.after_place, + after_dig_node = pipeworks.after_dig, + }) + minetest.register_craft({ + output = "pipeworks:one_way_tube 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "group:stick", "default:mese_crystal", "homedecor:plastic_sheeting" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) +end diff --git a/mods/pipeworks/screenshot.png b/mods/pipeworks/screenshot.png new file mode 100644 index 0000000..686d955 Binary files /dev/null and b/mods/pipeworks/screenshot.png differ diff --git a/mods/pipeworks/settingtypes.txt b/mods/pipeworks/settingtypes.txt new file mode 100644 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 100644 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/pipeworks/sorting_tubes.lua b/mods/pipeworks/sorting_tubes.lua new file mode 100644 index 0000000..e7e918d --- /dev/null +++ b/mods/pipeworks/sorting_tubes.lua @@ -0,0 +1,173 @@ +local fs_helpers = pipeworks.fs_helpers + +if pipeworks.enable_mese_tube then + local function update_formspec(pos) + local meta = minetest.get_meta(pos) + local old_formspec = meta:get_string("formspec") + if string.find(old_formspec, "button1") then -- Old version + local inv = meta:get_inventory() + for i = 1, 6 do + for _, stack in ipairs(inv:get_list("line"..i)) do + minetest.add_item(pos, stack) + end + end + end + local buttons_formspec = "" + for i = 0, 5 do + buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta, + "image_button[7,"..(i+0.2)..";1,0.6", "l"..(i+1).."s", + { + pipeworks.button_off, + pipeworks.button_on + } + ) + end + meta:set_string("formspec", + "size[8,11]".. + "list[context;line1;1,0;6,1;]".. + "list[context;line2;1,1;6,1;]".. + "list[context;line3;1,2;6,1;]".. + "list[context;line4;1,3;6,1;]".. + "list[context;line5;1,4;6,1;]".. + "list[context;line6;1,5;6,1;]".. + "image[0,0;1,1;pipeworks_white.png]".. + "image[0,1;1,1;pipeworks_black.png]".. + "image[0,2;1,1;pipeworks_green.png]".. + "image[0,3;1,1;pipeworks_yellow.png]".. + "image[0,4;1,1;pipeworks_blue.png]".. + "image[0,5;1,1;pipeworks_red.png]".. + buttons_formspec.. + "list[current_player;main;0,7;8,4;]" .. + "listring[current_player;main]" .. + "listring[current_player;main]" .. + "listring[context;line1]" .. + "listring[current_player;main]" .. + "listring[context;line2]" .. + "listring[current_player;main]" .. + "listring[context;line3]" .. + "listring[current_player;main]" .. + "listring[context;line4]" .. + "listring[current_player;main]" .. + "listring[context;line5]" .. + "listring[current_player;main]" .. + "listring[context;line6]" + ) + end + + pipeworks.register_tube("pipeworks:mese_tube", { + description = "Sorting Pneumatic Tube Segment", + inventory_image = "pipeworks_mese_tube_inv.png", + noctr = {"pipeworks_mese_tube_noctr_1.png", "pipeworks_mese_tube_noctr_2.png", "pipeworks_mese_tube_noctr_3.png", + "pipeworks_mese_tube_noctr_4.png", "pipeworks_mese_tube_noctr_5.png", "pipeworks_mese_tube_noctr_6.png"}, + plain = {"pipeworks_mese_tube_plain_1.png", "pipeworks_mese_tube_plain_2.png", "pipeworks_mese_tube_plain_3.png", + "pipeworks_mese_tube_plain_4.png", "pipeworks_mese_tube_plain_5.png", "pipeworks_mese_tube_plain_6.png"}, + ends = { "pipeworks_mese_tube_end.png" }, + short = "pipeworks_mese_tube_short.png", + no_facedir = true, -- Must use old tubes, since the textures are rotated with 6d ones + node_def = { + tube = {can_go = function(pos, node, velocity, stack) + local tbl, tbln = {}, 0 + local found, foundn = {}, 0 + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local name = stack:get_name() + for i, vect in ipairs(pipeworks.meseadjlist) do + local npos = vector.add(pos, vect) + local node = minetest.get_node(npos) + local reg_node = minetest.registered_nodes[node.name] + if meta:get_int("l"..i.."s") == 1 and reg_node then + local tube_def = reg_node.tube + if not tube_def or not tube_def.can_insert or + tube_def.can_insert(npos, node, stack, vect) then + local invname = "line"..i + local is_empty = true + for _, st in ipairs(inv:get_list(invname)) do + if not st:is_empty() then + is_empty = false + if st:get_name() == name then + foundn = foundn + 1 + found[foundn] = vect + end + end + end + if is_empty then + tbln = tbln + 1 + tbl[tbln] = vect + end + end + end + end + return (foundn > 0) and found or tbl + end}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + for i = 1, 6 do + meta:set_int("l"..tostring(i).."s", 1) + inv:set_size("line"..tostring(i), 6*1) + end + update_formspec(pos) + meta:set_string("infotext", "Sorting pneumatic tube") + end, + on_punch = update_formspec, + 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) + update_formspec(pos) + end, + can_dig = function(pos, player) + update_formspec(pos) -- so non-virtual items would be dropped for old tubes + return true + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + update_formspec(pos) -- For old tubes + local inv = minetest.get_meta(pos):get_inventory() + local stack_copy = ItemStack(stack) + stack_copy:set_count(1) + inv:set_stack(listname, index, stack_copy) + return 0 + end, + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if not pipeworks.may_configure(pos, player) then return 0 end + update_formspec(pos) -- For old tubes + local inv = minetest.get_meta(pos):get_inventory() + inv:set_stack(listname, index, ItemStack("")) + 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 + update_formspec(pos) -- For old tubes + local inv = minetest.get_meta(pos):get_inventory() + + if from_list:match("line%d") and to_list:match("line%d") then + return count + else + inv:set_stack(from_list, from_index, ItemStack("")) + return 0 + end + end, + }, + }) + + minetest.register_craft( { + output = "pipeworks:mese_tube_000000 2", + recipe = { + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }, + { "", "default:mese_crystal", "" }, + { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" } + }, + }) + + minetest.register_craft( { + type = "shapeless", + output = "pipeworks:mese_tube_000000", + recipe = { + "pipeworks:tube_1", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment", + "default:mese_crystal_fragment" + }, + }) +end diff --git a/mods/pipeworks/teleport_tube.lua b/mods/pipeworks/teleport_tube.lua new file mode 100644 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/pipeworks/textures/homedecor_oil_extract.png b/mods/pipeworks/textures/homedecor_oil_extract.png new file mode 100644 index 0000000..b945a9e Binary files /dev/null and b/mods/pipeworks/textures/homedecor_oil_extract.png differ diff --git a/mods/pipeworks/textures/homedecor_paraffin.png b/mods/pipeworks/textures/homedecor_paraffin.png new file mode 100644 index 0000000..77d2bbd Binary files /dev/null and b/mods/pipeworks/textures/homedecor_paraffin.png differ diff --git a/mods/pipeworks/textures/homedecor_plastic_sheeting.png b/mods/pipeworks/textures/homedecor_plastic_sheeting.png new file mode 100644 index 0000000..fba0ccd Binary files /dev/null and b/mods/pipeworks/textures/homedecor_plastic_sheeting.png differ diff --git a/mods/pipeworks/textures/pipeworks_accelerator_tube_end.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_end.png new file mode 100644 index 0000000..6839165 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_accelerator_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_accelerator_tube_inv.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_inv.png new file mode 100644 index 0000000..743956a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_accelerator_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_accelerator_tube_noctr.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_noctr.png new file mode 100644 index 0000000..fa0daa6 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_accelerator_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_accelerator_tube_plain.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_plain.png new file mode 100644 index 0000000..8256d05 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_accelerator_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_accelerator_tube_short.png b/mods/pipeworks/textures/pipeworks_accelerator_tube_short.png new file mode 100644 index 0000000..1444b43 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_accelerator_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_autocrafter.png b/mods/pipeworks/textures/pipeworks_autocrafter.png new file mode 100644 index 0000000..1643e82 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_autocrafter.png differ diff --git a/mods/pipeworks/textures/pipeworks_black.png b/mods/pipeworks/textures/pipeworks_black.png new file mode 100644 index 0000000..34afad8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_black.png differ diff --git a/mods/pipeworks/textures/pipeworks_blue.png b/mods/pipeworks/textures/pipeworks_blue.png new file mode 100644 index 0000000..64c8a6f Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_blue.png differ diff --git a/mods/pipeworks/textures/pipeworks_broken_tube_end.png b/mods/pipeworks/textures/pipeworks_broken_tube_end.png new file mode 100644 index 0000000..1829f8c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_broken_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_broken_tube_inv.png b/mods/pipeworks/textures/pipeworks_broken_tube_inv.png new file mode 100644 index 0000000..5b8d707 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_broken_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_broken_tube_noctr.png b/mods/pipeworks/textures/pipeworks_broken_tube_noctr.png new file mode 100644 index 0000000..a17da5f Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_broken_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_broken_tube_plain.png b/mods/pipeworks/textures/pipeworks_broken_tube_plain.png new file mode 100644 index 0000000..7957e59 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_broken_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_broken_tube_short.png b/mods/pipeworks/textures/pipeworks_broken_tube_short.png new file mode 100644 index 0000000..237fec5 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_broken_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_button_interm.png b/mods/pipeworks/textures/pipeworks_button_interm.png new file mode 100644 index 0000000..0d4c558 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_button_interm.png differ diff --git a/mods/pipeworks/textures/pipeworks_button_off.png b/mods/pipeworks/textures/pipeworks_button_off.png new file mode 100644 index 0000000..3836d19 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_button_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_button_on.png b/mods/pipeworks/textures/pipeworks_button_on.png new file mode 100644 index 0000000..a42eb05 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_button_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_end.png b/mods/pipeworks/textures/pipeworks_conductor_tube_end.png new file mode 100644 index 0000000..5942662 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_inv.png b/mods/pipeworks/textures/pipeworks_conductor_tube_inv.png new file mode 100644 index 0000000..6323937 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_noctr.png b/mods/pipeworks/textures/pipeworks_conductor_tube_noctr.png new file mode 100644 index 0000000..f5e0501 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_on_end.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_end.png new file mode 100644 index 0000000..46d0e30 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_on_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png new file mode 100644 index 0000000..27d2483 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_on_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_on_plain.png b/mods/pipeworks/textures/pipeworks_conductor_tube_on_plain.png new file mode 100644 index 0000000..c58eaf2 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_on_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_plain.png b/mods/pipeworks/textures/pipeworks_conductor_tube_plain.png new file mode 100644 index 0000000..e0891ed Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_conductor_tube_short.png b/mods/pipeworks/textures/pipeworks_conductor_tube_short.png new file mode 100644 index 0000000..7ec809a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_conductor_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_crossing_tube_end.png b/mods/pipeworks/textures/pipeworks_crossing_tube_end.png new file mode 100644 index 0000000..7b51ce3 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_crossing_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_crossing_tube_inv.png b/mods/pipeworks/textures/pipeworks_crossing_tube_inv.png new file mode 100644 index 0000000..2ee350b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_crossing_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_crossing_tube_noctr.png b/mods/pipeworks/textures/pipeworks_crossing_tube_noctr.png new file mode 100644 index 0000000..fdef1be Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_crossing_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_crossing_tube_plain.png b/mods/pipeworks/textures/pipeworks_crossing_tube_plain.png new file mode 100644 index 0000000..0ed695f Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_crossing_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_crossing_tube_short.png b/mods/pipeworks/textures/pipeworks_crossing_tube_short.png new file mode 100644 index 0000000..ef191de Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_crossing_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_back.png b/mods/pipeworks/textures/pipeworks_deployer_back.png new file mode 100644 index 0000000..4e08be3 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_back.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_bottom.png b/mods/pipeworks/textures/pipeworks_deployer_bottom.png new file mode 100644 index 0000000..fcb863c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_bottom.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_front_off.png b/mods/pipeworks/textures/pipeworks_deployer_front_off.png new file mode 100644 index 0000000..a314c8b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_front_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_front_on.png b/mods/pipeworks/textures/pipeworks_deployer_front_on.png new file mode 100644 index 0000000..a59a61e Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_front_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_side.png b/mods/pipeworks/textures/pipeworks_deployer_side.png new file mode 100644 index 0000000..2c7da56 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_side1.png b/mods/pipeworks/textures/pipeworks_deployer_side1.png new file mode 100644 index 0000000..2c7da56 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_side1.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_side2.png b/mods/pipeworks/textures/pipeworks_deployer_side2.png new file mode 100644 index 0000000..eb24061 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_side2.png differ diff --git a/mods/pipeworks/textures/pipeworks_deployer_top.png b/mods/pipeworks/textures/pipeworks_deployer_top.png new file mode 100644 index 0000000..f331212 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_deployer_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_detector_tube_end.png b/mods/pipeworks/textures/pipeworks_detector_tube_end.png new file mode 100644 index 0000000..e9d01ba Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_detector_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_detector_tube_inv.png b/mods/pipeworks/textures/pipeworks_detector_tube_inv.png new file mode 100644 index 0000000..0e3b7d8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_detector_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_detector_tube_noctr.png b/mods/pipeworks/textures/pipeworks_detector_tube_noctr.png new file mode 100644 index 0000000..6f07886 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_detector_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_detector_tube_plain.png b/mods/pipeworks/textures/pipeworks_detector_tube_plain.png new file mode 100644 index 0000000..6a9845c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_detector_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_detector_tube_short.png b/mods/pipeworks/textures/pipeworks_detector_tube_short.png new file mode 100644 index 0000000..6729c53 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_detector_tube_short.png differ 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..6108485 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_conductor_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png new file mode 100644 index 0000000..e9d01ba Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png new file mode 100644 index 0000000..0ed763a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png new file mode 100644 index 0000000..6f07886 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png new file mode 100644 index 0000000..86ded6f Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png new file mode 100644 index 0000000..6729c53 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_detector_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_input.png b/mods/pipeworks/textures/pipeworks_digiline_filter_input.png new file mode 100644 index 0000000..c1ffa53 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_filter_input.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_output.png b/mods/pipeworks/textures/pipeworks_digiline_filter_output.png new file mode 100644 index 0000000..4c57d0a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_filter_output.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_side.png b/mods/pipeworks/textures/pipeworks_digiline_filter_side.png new file mode 100644 index 0000000..6a77896 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_filter_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_digiline_filter_top.png b/mods/pipeworks/textures/pipeworks_digiline_filter_top.png new file mode 100644 index 0000000..04ffda0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_digiline_filter_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_back.png b/mods/pipeworks/textures/pipeworks_dispenser_back.png new file mode 100644 index 0000000..ce447bd Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_back.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_bottom.png b/mods/pipeworks/textures/pipeworks_dispenser_bottom.png new file mode 100644 index 0000000..16dc584 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_bottom.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_front_off.png b/mods/pipeworks/textures/pipeworks_dispenser_front_off.png new file mode 100644 index 0000000..b0c9e4a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_front_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_front_on.png b/mods/pipeworks/textures/pipeworks_dispenser_front_on.png new file mode 100644 index 0000000..c9fff11 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_front_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_side1.png b/mods/pipeworks/textures/pipeworks_dispenser_side1.png new file mode 100644 index 0000000..bd17852 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_side1.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_side2.png b/mods/pipeworks/textures/pipeworks_dispenser_side2.png new file mode 100644 index 0000000..005d9a5 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_side2.png differ diff --git a/mods/pipeworks/textures/pipeworks_dispenser_top.png b/mods/pipeworks/textures/pipeworks_dispenser_top.png new file mode 100644 index 0000000..7dd49ad Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_dispenser_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_entry_panel.png b/mods/pipeworks/textures/pipeworks_entry_panel.png new file mode 100644 index 0000000..040f408 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_entry_panel.png differ diff --git a/mods/pipeworks/textures/pipeworks_filter_input.png b/mods/pipeworks/textures/pipeworks_filter_input.png new file mode 100644 index 0000000..187c402 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_filter_input.png differ diff --git a/mods/pipeworks/textures/pipeworks_filter_output.png b/mods/pipeworks/textures/pipeworks_filter_output.png new file mode 100644 index 0000000..db7af08 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_filter_output.png differ diff --git a/mods/pipeworks/textures/pipeworks_filter_side.png b/mods/pipeworks/textures/pipeworks_filter_side.png new file mode 100644 index 0000000..be1577a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_filter_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_filter_top.png b/mods/pipeworks/textures/pipeworks_filter_top.png new file mode 100644 index 0000000..45b6b5a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_filter_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_flow_sensor_off.png b/mods/pipeworks/textures/pipeworks_flow_sensor_off.png new file mode 100644 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 100644 index 0000000..43ded0c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_flow_sensor_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_fountainhead.png b/mods/pipeworks/textures/pipeworks_fountainhead.png new file mode 100644 index 0000000..4affa69 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_fountainhead.png differ diff --git a/mods/pipeworks/textures/pipeworks_gear.png b/mods/pipeworks/textures/pipeworks_gear.png new file mode 100644 index 0000000..584f9a5 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_gear.png differ diff --git a/mods/pipeworks/textures/pipeworks_grating_sides.png b/mods/pipeworks/textures/pipeworks_grating_sides.png new file mode 100644 index 0000000..28ce593 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_grating_sides.png differ diff --git a/mods/pipeworks/textures/pipeworks_grating_top.png b/mods/pipeworks/textures/pipeworks_grating_top.png new file mode 100644 index 0000000..6e876fa Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_grating_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_green.png b/mods/pipeworks/textures/pipeworks_green.png new file mode 100644 index 0000000..3f42f9f Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_green.png differ diff --git a/mods/pipeworks/textures/pipeworks_lua_tube_port_burnt.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_burnt.png new file mode 100644 index 0000000..3384eff Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_lua_tube_port_burnt.png differ diff --git a/mods/pipeworks/textures/pipeworks_lua_tube_port_off.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_off.png new file mode 100644 index 0000000..03f7069 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_lua_tube_port_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_lua_tube_port_on.png b/mods/pipeworks/textures/pipeworks_lua_tube_port_on.png new file mode 100644 index 0000000..a7e3d09 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_lua_tube_port_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_filter_input.png b/mods/pipeworks/textures/pipeworks_mese_filter_input.png new file mode 100644 index 0000000..58095d0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_filter_input.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_filter_output.png b/mods/pipeworks/textures/pipeworks_mese_filter_output.png new file mode 100644 index 0000000..a39e5a8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_filter_output.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_filter_side.png b/mods/pipeworks/textures/pipeworks_mese_filter_side.png new file mode 100644 index 0000000..3438ce1 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_filter_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_filter_top.png b/mods/pipeworks/textures/pipeworks_mese_filter_top.png new file mode 100644 index 0000000..aa4f67c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_filter_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_sand_tube_end.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_end.png new file mode 100644 index 0000000..fa59f37 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_sand_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_sand_tube_inv.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_inv.png new file mode 100644 index 0000000..8b1b5e1 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_sand_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png new file mode 100644 index 0000000..f26f39d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_sand_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_sand_tube_plain.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_plain.png new file mode 100644 index 0000000..8a48599 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_sand_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_sand_tube_short.png b/mods/pipeworks/textures/pipeworks_mese_sand_tube_short.png new file mode 100644 index 0000000..78ca710 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_sand_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_end.png b/mods/pipeworks/textures/pipeworks_mese_tube_end.png new file mode 100644 index 0000000..b47281a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_inv.png b/mods/pipeworks/textures/pipeworks_mese_tube_inv.png new file mode 100644 index 0000000..4b15ef9 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_1.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_1.png new file mode 100644 index 0000000..c9661a7 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_1.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_2.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_2.png new file mode 100644 index 0000000..ffe53b7 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_2.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_3.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_3.png new file mode 100644 index 0000000..b65c0e2 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_3.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_4.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_4.png new file mode 100644 index 0000000..278c7e8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_4.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_5.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_5.png new file mode 100644 index 0000000..4b75ae2 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_5.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_noctr_6.png b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_6.png new file mode 100644 index 0000000..e2bd483 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_noctr_6.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_1.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_1.png new file mode 100644 index 0000000..47ce4ed Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_1.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_2.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_2.png new file mode 100644 index 0000000..12d7966 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_2.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_3.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_3.png new file mode 100644 index 0000000..4d3d415 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_3.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_4.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_4.png new file mode 100644 index 0000000..f4c3370 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_4.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_5.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_5.png new file mode 100644 index 0000000..fbe8de0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_5.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_plain_6.png b/mods/pipeworks/textures/pipeworks_mese_tube_plain_6.png new file mode 100644 index 0000000..76b49e3 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_plain_6.png differ diff --git a/mods/pipeworks/textures/pipeworks_mese_tube_short.png b/mods/pipeworks/textures/pipeworks_mese_tube_short.png new file mode 100644 index 0000000..fd12ccd Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_mese_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_back.png b/mods/pipeworks/textures/pipeworks_nodebreaker_back.png new file mode 100644 index 0000000..3006cb7 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_back.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png new file mode 100644 index 0000000..c7a48d4 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png new file mode 100644 index 0000000..e14ca32 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_bottom_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_front_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_front_off.png new file mode 100644 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 100644 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 100644 index 0000000..259172c Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_side1_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_on.png new file mode 100644 index 0000000..96480ef Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side1_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png new file mode 100644 index 0000000..e330ba0 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_side2_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_on.png new file mode 100644 index 0000000..4c8fc40 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_side2_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_top_off.png b/mods/pipeworks/textures/pipeworks_nodebreaker_top_off.png new file mode 100644 index 0000000..fb86b95 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_top_off.png differ diff --git a/mods/pipeworks/textures/pipeworks_nodebreaker_top_on.png b/mods/pipeworks/textures/pipeworks_nodebreaker_top_on.png new file mode 100644 index 0000000..97da74d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_nodebreaker_top_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_one_way_tube_input.png b/mods/pipeworks/textures/pipeworks_one_way_tube_input.png new file mode 100644 index 0000000..8490858 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_one_way_tube_input.png differ diff --git a/mods/pipeworks/textures/pipeworks_one_way_tube_output.png b/mods/pipeworks/textures/pipeworks_one_way_tube_output.png new file mode 100644 index 0000000..8490858 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_one_way_tube_output.png differ diff --git a/mods/pipeworks/textures/pipeworks_one_way_tube_side.png b/mods/pipeworks/textures/pipeworks_one_way_tube_side.png new file mode 100644 index 0000000..9881be2 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_one_way_tube_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_one_way_tube_top.png b/mods/pipeworks/textures/pipeworks_one_way_tube_top.png new file mode 100644 index 0000000..5ade427 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_one_way_tube_top.png differ diff --git a/mods/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png new file mode 100644 index 0000000..8c424a8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_ends.png differ diff --git a/mods/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png new file mode 100644 index 0000000..befe525 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pane_embedded_tube_sides.png differ diff --git a/mods/pipeworks/textures/pipeworks_pipe_3_empty.png b/mods/pipeworks/textures/pipeworks_pipe_3_empty.png new file mode 100644 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 100644 index 0000000..2bb9d4a Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pipe_3_loaded.png differ diff --git a/mods/pipeworks/textures/pipeworks_pipe_plain.png b/mods/pipeworks/textures/pipeworks_pipe_plain.png new file mode 100644 index 0000000..7cbc11b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pipe_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_plastic_sheeting.png b/mods/pipeworks/textures/pipeworks_plastic_sheeting.png new file mode 100644 index 0000000..3834df7 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_plastic_sheeting.png differ diff --git a/mods/pipeworks/textures/pipeworks_pressure_gauge.png b/mods/pipeworks/textures/pipeworks_pressure_gauge.png new file mode 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 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 100644 index 0000000..fb0539e Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_pump_on.png differ diff --git a/mods/pipeworks/textures/pipeworks_red.png b/mods/pipeworks/textures/pipeworks_red.png new file mode 100644 index 0000000..33812bd Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_red.png differ diff --git a/mods/pipeworks/textures/pipeworks_sand_tube_end.png b/mods/pipeworks/textures/pipeworks_sand_tube_end.png new file mode 100644 index 0000000..8cccaf4 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_sand_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_sand_tube_inv.png b/mods/pipeworks/textures/pipeworks_sand_tube_inv.png new file mode 100644 index 0000000..3afb05d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_sand_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_sand_tube_noctr.png b/mods/pipeworks/textures/pipeworks_sand_tube_noctr.png new file mode 100644 index 0000000..a9c6d2d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_sand_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_sand_tube_plain.png b/mods/pipeworks/textures/pipeworks_sand_tube_plain.png new file mode 100644 index 0000000..d665081 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_sand_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_sand_tube_short.png b/mods/pipeworks/textures/pipeworks_sand_tube_short.png new file mode 100644 index 0000000..8dcf2b4 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_sand_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_spigot.png b/mods/pipeworks/textures/pipeworks_spigot.png new file mode 100644 index 0000000..a79dbf8 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_spigot.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_back.png b/mods/pipeworks/textures/pipeworks_storage_tank_back.png new file mode 100644 index 0000000..3b6a16b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_back.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_fittings.png b/mods/pipeworks/textures/pipeworks_storage_tank_fittings.png new file mode 100644 index 0000000..f3b8b24 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_fittings.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_0.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_0.png new file mode 100644 index 0000000..72c6f6b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_0.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_1.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_1.png new file mode 100644 index 0000000..889893b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_1.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_10.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_10.png new file mode 100644 index 0000000..f48a738 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_10.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_2.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_2.png new file mode 100644 index 0000000..a36bc24 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_2.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_3.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_3.png new file mode 100644 index 0000000..4575e37 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_3.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_4.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_4.png new file mode 100644 index 0000000..47d9669 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_4.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_5.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_5.png new file mode 100644 index 0000000..17eaf69 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_5.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_6.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_6.png new file mode 100644 index 0000000..77619e3 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_6.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_7.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_7.png new file mode 100644 index 0000000..ffebf9b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_7.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_8.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_8.png new file mode 100644 index 0000000..4974a82 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_8.png differ diff --git a/mods/pipeworks/textures/pipeworks_storage_tank_front_9.png b/mods/pipeworks/textures/pipeworks_storage_tank_front_9.png new file mode 100644 index 0000000..87b6d79 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_storage_tank_front_9.png differ diff --git a/mods/pipeworks/textures/pipeworks_straight_pipe_empty.png b/mods/pipeworks/textures/pipeworks_straight_pipe_empty.png new file mode 100644 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 100644 index 0000000..96e8e04 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_straight_pipe_loaded.png differ diff --git a/mods/pipeworks/textures/pipeworks_teleport_tube_end.png b/mods/pipeworks/textures/pipeworks_teleport_tube_end.png new file mode 100644 index 0000000..7a27150 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_teleport_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_teleport_tube_inv.png b/mods/pipeworks/textures/pipeworks_teleport_tube_inv.png new file mode 100644 index 0000000..d12b896 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_teleport_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_teleport_tube_noctr.png b/mods/pipeworks/textures/pipeworks_teleport_tube_noctr.png new file mode 100644 index 0000000..ac7364d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_teleport_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_teleport_tube_plain.png b/mods/pipeworks/textures/pipeworks_teleport_tube_plain.png new file mode 100644 index 0000000..0a859f2 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_teleport_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_teleport_tube_short.png b/mods/pipeworks/textures/pipeworks_teleport_tube_short.png new file mode 100644 index 0000000..f82d082 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_teleport_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_testobject.png b/mods/pipeworks/textures/pipeworks_testobject.png new file mode 100644 index 0000000..d54c024 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_testobject.png differ diff --git a/mods/pipeworks/textures/pipeworks_trashcan_bottom.png b/mods/pipeworks/textures/pipeworks_trashcan_bottom.png new file mode 100644 index 0000000..91fd944 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_trashcan_bottom.png differ diff --git a/mods/pipeworks/textures/pipeworks_trashcan_side.png b/mods/pipeworks/textures/pipeworks_trashcan_side.png new file mode 100644 index 0000000..cf0a3bf Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_trashcan_side.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_connection_metallic.png b/mods/pipeworks/textures/pipeworks_tube_connection_metallic.png new file mode 100644 index 0000000..10becfe Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_connection_metallic.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_connection_stony.png b/mods/pipeworks/textures/pipeworks_tube_connection_stony.png new file mode 100644 index 0000000..6ed02a4 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_connection_stony.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_connection_wooden.png b/mods/pipeworks/textures/pipeworks_tube_connection_wooden.png new file mode 100644 index 0000000..ff199ca Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_connection_wooden.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_end.png b/mods/pipeworks/textures/pipeworks_tube_end.png new file mode 100644 index 0000000..e9d01ba Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_end.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_inv.png b/mods/pipeworks/textures/pipeworks_tube_inv.png new file mode 100644 index 0000000..51c728d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_inv.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_noctr.png b/mods/pipeworks/textures/pipeworks_tube_noctr.png new file mode 100644 index 0000000..6f07886 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_noctr.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_plain.png b/mods/pipeworks/textures/pipeworks_tube_plain.png new file mode 100644 index 0000000..9d6442b Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_plain.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_short.png b/mods/pipeworks/textures/pipeworks_tube_short.png new file mode 100644 index 0000000..6729c53 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_short.png differ diff --git a/mods/pipeworks/textures/pipeworks_tube_transparent.png b/mods/pipeworks/textures/pipeworks_tube_transparent.png new file mode 100644 index 0000000..aa4418d Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_tube_transparent.png differ diff --git a/mods/pipeworks/textures/pipeworks_valve.png b/mods/pipeworks/textures/pipeworks_valve.png new file mode 100644 index 0000000..60ef960 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_valve.png differ diff --git a/mods/pipeworks/textures/pipeworks_white.png b/mods/pipeworks/textures/pipeworks_white.png new file mode 100644 index 0000000..faf0ec1 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_white.png differ diff --git a/mods/pipeworks/textures/pipeworks_yellow.png b/mods/pipeworks/textures/pipeworks_yellow.png new file mode 100644 index 0000000..ce1af41 Binary files /dev/null and b/mods/pipeworks/textures/pipeworks_yellow.png differ diff --git a/mods/pipeworks/todo/pressure_logic.txt b/mods/pipeworks/todo/pressure_logic.txt new file mode 100644 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 100644 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/pipeworks/tube_registration.lua b/mods/pipeworks/tube_registration.lua new file mode 100644 index 0000000..48fa912 --- /dev/null +++ b/mods/pipeworks/tube_registration.lua @@ -0,0 +1,248 @@ +-- This file supplies the various kinds of pneumatic tubes + +local tubenodes = {} +pipeworks.tubenodes = tubenodes + +minetest.register_alias("pipeworks:tube", "pipeworks:tube_000000") + +-- now, a function to define the tubes + +local REGISTER_COMPATIBILITY = true + +local vti = {4, 3, 2, 1, 6, 5} + +local default_noctrs = { "pipeworks_tube_noctr.png" } +local default_plain = { "pipeworks_tube_plain.png" } +local default_ends = { "pipeworks_tube_end.png" } + +local texture_mt = { + __index = function(table, key) + local size, idx = #table, tonumber(key) + if size > 0 then -- avoid endless loops with empty tables + while idx > size do idx = idx - size end + return table[idx] + end + end +} + +local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, ends, short, inv, special, connects, style) + noctrs = noctrs or default_noctrs + setmetatable(noctrs, texture_mt) + plain = plain or default_plain + setmetatable(plain, texture_mt) + ends = ends or default_ends + setmetatable(ends, texture_mt) + short = short or "pipeworks_tube_short.png" + inv = inv or "pipeworks_tube_inv.png" + + local outboxes = {} + local outsel = {} + local outimgs = {} + + for i = 1, 6 do + outimgs[vti[i]] = plain[i] + end + + for _, v in ipairs(connects) do + pipeworks.table_extend(outboxes, pipeworks.tube_boxes[v]) + table.insert(outsel, pipeworks.tube_selectboxes[v]) + outimgs[vti[v]] = noctrs[v] + end + + if #connects == 1 then + local v = connects[1] + v = v-1 + 2*(v%2) -- Opposite side + outimgs[vti[v]] = ends[v] + end + + local tgroups = {snappy = 3, tube = 1, tubedevice = 1, not_in_creative_inventory = 1} + local tubedesc = string.format("%s %s... You hacker, you.", desc, dump(connects)) + local iimg = plain[1] + local wscale = {x = 1, y = 1, z = 1} + + if #connects == 0 then + tgroups = {snappy = 3, tube = 1, tubedevice = 1} + tubedesc = desc + iimg=inv + outimgs = { + short, short, + ends[3],ends[4], + short, short + } + outboxes = { -24/64, -9/64, -9/64, 24/64, 9/64, 9/64 } + outsel = { -24/64, -10/64, -10/64, 24/64, 10/64, 10/64 } + wscale = {x = 1, y = 1, z = 0.01} + end + + local rname = string.format("%s_%s", name, tname) + table.insert(tubenodes, rname) + + local nodedef = { + description = tubedesc, + drawtype = "nodebox", + tiles = outimgs, + sunlight_propagates = true, + inventory_image = iimg, + wield_image = iimg, + wield_scale = wscale, + paramtype = "light", + selection_box = { + type = "fixed", + fixed = outsel + }, + node_box = { + type = "fixed", + fixed = outboxes + }, + groups = tgroups, + sounds = default.node_sound_wood_defaults(), + walkable = true, + stack_max = 99, + basename = name, + style = style, + drop = string.format("%s_%s", name, dropname), + 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 + } + if style == "6d" then + nodedef.paramtype2 = "facedir" + end + + if special == nil then special = {} end + + for key, value in pairs(special) do + --if key == "after_dig_node" or key == "after_place_node" then + -- nodedef[key.."_"] = value + if key == "groups" then + for group, val in pairs(value) do + nodedef.groups[group] = val + end + elseif key == "tube" then + for key, val in pairs(value) do + nodedef.tube[key] = val + end + else + nodedef[key] = pipeworks.table_recursive_replace(value, "#id", tname) + end + end + + minetest.register_node(rname, nodedef) +end + +local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, special, old_registration) + if old_registration then + 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 connects = {} + if xm == 1 then + connects[#connects+1] = 1 + end + if xp == 1 then + connects[#connects+1] = 2 + end + if ym == 1 then + connects[#connects+1] = 3 + end + if yp == 1 then + connects[#connects+1] = 4 + end + if zm == 1 then + connects[#connects+1] = 5 + end + if zp == 1 then + connects[#connects+1] = 6 + end + local tname = xm..xp..ym..yp..zm..zp + register_one_tube(name, tname, "000000", desc, plain, noctrs, ends, short, inv, special, connects, "old") + end + end + end + end + end + end + else + -- 6d tubes: uses only 10 nodes instead of 64, but the textures must be rotated + 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 + register_one_tube(name, tostring(index), "1", desc, plain, noctrs, ends, short, inv, special, connects, "6d") + end + if REGISTER_COMPATIBILITY then + local cname = name.."_compatibility" + minetest.register_node(cname, { + drawtype = "airlike", + style = "6d", + basename = name, + inventory_image = inv, + wield_image = inv, + paramtype = "light", + sunlight_propagates = true, + description = "Pneumatic tube segment (legacy)", + after_place_node = pipeworks.after_place, + groups = {not_in_creative_inventory = 1, tube_to_update = 1, tube = 1}, + tube = {connect_sides = {front = 1, back = 1, left = 1, right = 1, top = 1, bottom = 1}}, + drop = name.."_1", + }) + table.insert(tubenodes, cname) + 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 tname = xm..xp..ym..yp..zm..zp + minetest.register_alias(name.."_"..tname, cname) + end + end + end + end + end + end + end + end +end + +pipeworks.register_tube = function(name, def, ...) + if type(def) == "table" then + register_all_tubes(name, def.description, + def.plain, def.noctr, def.ends, def.short, + def.inventory_image, def.node_def, def.no_facedir) + else + -- we assert to be the old function with the second parameter being the description + -- function(name, desc, plain, noctrs, ends, short, inv, special, old_registration) + assert(type(def) == "string", "invalid arguments to pipeworks.register_tube") + register_all_tubes(name, def, ...) + end +end + + +if REGISTER_COMPATIBILITY then + minetest.register_abm({ + nodenames = {"group:tube_to_update"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local minp = vector.subtract(pos, 1) + local maxp = vector.add(pos, 1) + if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then + pipeworks.scan_for_tube_objects(pos) + end + end + }) +end diff --git a/mods/pipeworks/vacuum_tubes.lua b/mods/pipeworks/vacuum_tubes.lua new file mode 100644 index 0000000..d616835 --- /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:get_pos() + 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 100644 index 0000000..4a80d3e --- /dev/null +++ b/mods/pipeworks/wielder.lua @@ -0,0 +1,470 @@ +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 + for i, stack in ipairs(inv:get_list(wield_inv_name)) do + if not stack:is_empty() then + wieldindex = i + 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 + 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 = pipeworks.create_fake_player({ + name = data.masquerade_as_owner and wielder_meta:get_string("owner") + or ":pipeworks:" .. minetest.pos_to_string(wielder_pos), + formspec = wielder_meta:get_string("formspec"), + look_dir = vector.multiply(dir, -1), + look_pitch = pitch, + look_yaw = yaw, + sneak = data.sneak, + position = vector.subtract(wielder_pos, assumed_eye_pos), + inventory = inv, + wield_index = wieldindex, + wield_list = wield_inv_name + }) + + 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:get_pos() + 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 def = minetest.registered_nodes[under_node.name] + if not def then + -- do not dig an unknown node + return + end + -- 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 + def.on_dig(pointed_thing.under, under_node, virtplayer) + local sound = def.sounds and def.sounds.dug + if sound then + minetest.sound_play(sound.name, + {pos=pointed_thing.under, gain=sound.gain}) + end + 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:get_pos()) 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/playeranim/LICENSE-original.txt b/mods/playeranim/LICENSE-original.txt new file mode 100644 index 0000000..d3879e9 --- /dev/null +++ b/mods/playeranim/LICENSE-original.txt @@ -0,0 +1,9 @@ +Copyright (C) 2013-2014, Diego Martínez All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mods/playeranim/LICENSE.md b/mods/playeranim/LICENSE.md new file mode 100644 index 0000000..539d1d7 --- /dev/null +++ b/mods/playeranim/LICENSE.md @@ -0,0 +1,23 @@ +Copyright (c) 2013-2014, Diego Martínez +Copyright (c) 2016, Rui +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mods/playeranim/LICENSE.txt b/mods/playeranim/LICENSE.txt new file mode 100644 index 0000000..5c93f45 --- /dev/null +++ b/mods/playeranim/LICENSE.txt @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/playeranim/README.md b/mods/playeranim/README.md new file mode 100644 index 0000000..395d687 --- /dev/null +++ b/mods/playeranim/README.md @@ -0,0 +1,23 @@ +# playeranim +Makes the head, and the right arm when you’re mining, face the way you’re facing, similar to Minecraft. Compatible with 3d_armor. Forked from the animplus mod, which was an ugly hack. + +The head only turns up and down relative to the body, except it turns slightly to the right/left when you strafe right/left. When you turn the body turns with the head. + +Works in multiplayer, I tested it on a local server. + +Configuration +------------- + +This mod supports 2 versions of the player model: +- The old version: v1 (before nov. 2016) +- The new version: v2 (after nov. 2016) +(see also init.lua) + +As there is no automatic way to determine which version is used, this must be manually configured in `init.lua`. + +Symptoms of having configured the incorrect player model: +- In rest, arms are raised up, and are either detached from the body, or are too close to the body +- Cape (if visible) points upward + + +Created by Rui914, this document was written by sloantothebone. diff --git a/mods/playeranim/depends.txt b/mods/playeranim/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/playeranim/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/playeranim/description.txt b/mods/playeranim/description.txt new file mode 100644 index 0000000..0c1198d --- /dev/null +++ b/mods/playeranim/description.txt @@ -0,0 +1 @@ +Adds animations to the players' head and right arm. \ No newline at end of file diff --git a/mods/playeranim/init.lua b/mods/playeranim/init.lua new file mode 100644 index 0000000..8fae9b5 --- /dev/null +++ b/mods/playeranim/init.lua @@ -0,0 +1,350 @@ +-- Version of player model. +-- default_character_v1: +-- minetest_game before 25 nov 2016 +-- 3d_armor before 27 nov 2016 (overrides model from minetest_game) +-- default_character_v2: +-- minetest_game after 25 nov 2016 +-- 3d_armor after 27 nov 2016 (overrides model from minetest_game) + +local valid_player_model_versions = { + default_character_v1 = true, + default_character_v2 = true, + default_character_v3 = true, +} + +local player_model_version = minetest.settings:get("player_model_version") +if not player_model_version or player_model_version == "" then + player_model_version = "default_character_v2" +elseif not valid_player_model_versions[player_model_version] then + error("Invalid value for player_model_version in minetest.conf: " .. player_model_version) +end + +-- Localize to avoid table lookups +local vector_new = vector.new +local math_pi = math.pi +local math_sin = math.sin +local table_remove = table.remove +local get_animation = default.player_get_animation + +-- Animation alias +local STAND = 1 +local WALK = 2 +local MINE = 3 +local WALK_MINE = 4 +local SIT = 5 +local LAY = 6 + +-- Bone alias +local BODY = "Body" +local HEAD = "Head" +local CAPE = "Cape" +local LARM = "Arm_Left" +local RARM = "Arm_Right" +local LLEG = "Leg_Left" +local RLEG = "Leg_Right" + +local bone_positions = { + default_character_v1 = { + [BODY] = vector_new(0, -3.5, 0), + [HEAD] = vector_new(0, 6.75, 0), + [CAPE] = vector_new(0, 6.75, 1.1), + [LARM] = vector_new(2, 6.75, 0), + [RARM] = vector_new(-2, 6.75, 0), + [LLEG] = vector_new(-1, 0, 0), + [RLEG] = vector_new(1, 0, 0) + }, + default_character_v2 = { + [BODY] = vector_new(0, -3.5, 0), + [HEAD] = vector_new(0, 6.75, 0), + [CAPE] = vector_new(0, 6.75, 1.2), + [LARM] = vector_new(3, 5.75, 0), + [RARM] = vector_new(-3, 5.75, 0), + [LLEG] = vector_new(1, 0, 0), + [RLEG] = vector_new(-1, 0, 0) + }, + default_character_v3 = { + [BODY] = vector_new(0, 6.75, 0), + [HEAD] = vector_new(0, 6.75, 0), + [CAPE] = vector_new(0, 6.75, 1.2), + [LARM] = vector_new(3, 5.75, 0), + [RARM] = vector_new(-3, 5.75, 0), + [LLEG] = vector_new(1, 0, 0), + [RLEG] = vector_new(-1, 0, 0) + } +} + +local bone_rotations = { + default_character_v1 = { + [BODY] = vector_new(0, 0, 0), + [HEAD] = vector_new(0, 0, 0), + [CAPE] = vector_new(180, 0, 0), + [LARM] = vector_new(180, 0, 9), + [RARM] = vector_new(180, 0, -9), + [LLEG] = vector_new(0, 0, 0), + [RLEG] = vector_new(0, 0, 0) + }, + default_character_v2 = { + [BODY] = vector_new(0, 0, 0), + [HEAD] = vector_new(0, 0, 0), + [CAPE] = vector_new(0, 0, 0), + [LARM] = vector_new(0, 0, 0), + [RARM] = vector_new(0, 0, 0), + [LLEG] = vector_new(0, 0, 0), + [RLEG] = vector_new(0, 0, 0) + }, + default_character_v3 = { + [BODY] = vector_new(0, 0, 0), + [HEAD] = vector_new(0, 0, 0), + [CAPE] = vector_new(0, 0, 0), + [LARM] = vector_new(0, 0, 0), + [RARM] = vector_new(0, 0, 0), + [LLEG] = vector_new(0, 0, 0), + [RLEG] = vector_new(0, 0, 0) + } +} + +local bone_rotation = bone_rotations[player_model_version] +local bone_position = bone_positions[player_model_version] +if not bone_rotation or not bone_position then + error("Internal error: invalid player_model_version: " .. player_model_version) +end + +local bone_rotation_cache = {} + +local function rotate(player, bone, x, y, z) + local default_rotation = bone_rotation[bone] + local rotation = { + x = (x or 0) + default_rotation.x, + y = (y or 0) + default_rotation.y, + z = (z or 0) + default_rotation.z + } + + local player_cache = bone_rotation_cache[player] + local rotation_cache = player_cache[bone] + + if not rotation_cache + or rotation.x ~= rotation_cache.x + or rotation.y ~= rotation_cache.y + or rotation.z ~= rotation_cache.z then + player_cache[bone] = rotation + player:set_bone_position(bone, bone_position[bone], rotation) + end +end + +local step = 0 + +local look_pitch = {} +local animation_speed = {} + +local animations = { + [STAND] = function(player) + rotate(player, BODY) + rotate(player, CAPE) + rotate(player, LARM) + rotate(player, RARM) + rotate(player, LLEG) + rotate(player, RLEG) + end, + + [WALK] = function(player) + local swing = math_sin(step * 4 * animation_speed[player]) + + rotate(player, CAPE, swing * -30 - 35) + rotate(player, LARM, swing * -40) + rotate(player, RARM, swing * 40) + rotate(player, LLEG, swing * 40) + rotate(player, RLEG, swing * -40) + end, + + [MINE] = function(player) + local pitch = look_pitch[player] + local speed = animation_speed[player] + + local swing = math_sin(step * 4 * speed) + local hand_swing = math_sin(step * 8 * speed) + + rotate(player, CAPE, swing * -5 - 10) + rotate(player, LARM) + rotate(player, RARM, hand_swing * 20 + 80 + pitch, hand_swing * 5 - 3, 10) + rotate(player, LLEG) + rotate(player, RLEG) + end, + + [WALK_MINE] = function(player) + local pitch = look_pitch[player] + local speed = animation_speed[player] + + local swing = math_sin(step * 4 * speed) + local hand_swing = math_sin(step * 8 * speed) + + rotate(player, CAPE, swing * -30 - 35) + rotate(player, LARM, swing * -40) + rotate(player, RARM, hand_swing * 20 + 80 + pitch, hand_swing * 5 - 3, 10) + rotate(player, LLEG, swing * 40) + rotate(player, RLEG, swing * -40) + end, + + [SIT] = function(player) + local body_position = vector_new(bone_position[BODY]) + body_position.y = body_position.y - 6 + + player:set_bone_position(BODY, body_position, {x = 0, y = 0, z = 0}) + + rotate(player, LARM) + rotate(player, RARM) + rotate(player, LLEG, 90) + rotate(player, RLEG, 90) + end, + + [LAY] = function(player) + rotate(player, HEAD) + rotate(player, CAPE) + rotate(player, LARM) + rotate(player, RARM) + rotate(player, LLEG) + rotate(player, RLEG) + + local body_position = {x = 0, y = -9, z = 0} + local body_rotation = {x = 270, y = 0, z = 0} + + player:set_bone_position(BODY, body_position, body_rotation) + end +} + +local function update_look_pitch(player) + local pitch = -player:get_look_vertical() * 180 / math_pi + + if look_pitch[player] ~= pitch then + look_pitch[player] = pitch + end +end + +local function set_animation_speed(player, sneak) + local speed = sneak and 0.75 or 2 + + if animation_speed[player] ~= speed then + animation_speed[player] = speed + end +end + +local previous_animation = {} + +local function set_animation(player, anim) + if (anim == WALK or anim == MINE or anim == WALK_MINE) + or (previous_animation[player] ~= anim) then + previous_animation[player] = anim + animations[anim](player) + end +end + +local previous_yaw = {} + +local function body_moving(player, sneak, no_rotate_body) + local yaw = player:get_look_horizontal() + + local player_previous_yaw = previous_yaw[player] + local index = #player_previous_yaw + 1 + player_previous_yaw[index] = yaw + + local next_yaw = yaw + if index > 7 then + next_yaw = player_previous_yaw[1] + table_remove(player_previous_yaw, 1) + end + + local x, y = 0, 0 + if not no_rotate_body then + x = sneak and 5 or 0 + y = (yaw - next_yaw) * 180 / math_pi + end + + rotate(player, BODY, x, y) + rotate(player, HEAD, look_pitch[player], -y) +end + +local players = {} +local player_list = {} +local player_count = 0 + +local function update_players() + players = {} + + local position = 0 + + for player, joined in pairs(player_list) do + if joined and player:is_player_connected() then + position = position + 1 + players[position] = player + end + end + + player_count = position +end + +minetest.register_on_joinplayer(function(player) + bone_rotation_cache[player] = {} + previous_yaw[player] = {} + + player_list[player] = true + update_players() +end) + +minetest.register_on_leaveplayer(function(player) + bone_rotation_cache[player] = nil + + look_pitch[player] = nil + animation_speed[player] = nil + + previous_yaw[player] = nil + previous_animation[player] = nil + + player_list[player] = nil + update_players() +end) + +minetest.register_globalstep(function(dtime) + if player_count == 0 then return end + + step = step + dtime + if step >= 3600 then + step = 1 + end + + for i = 1, player_count do + local player = players[i] + local animation = get_animation(player).animation + + if animation == "lay" then + set_animation(player, LAY) + + if #previous_yaw[player] ~= 0 then + previous_yaw[player] = {} + end + else + local controls = player:get_player_control() + local sneak = controls.sneak + + update_look_pitch(player) + + if animation == "walk" then + set_animation_speed(player, sneak) + set_animation(player, WALK) + body_moving(player, sneak) + elseif animation == "mine" then + set_animation_speed(player, sneak) + set_animation(player, MINE) + body_moving(player, sneak) + elseif animation == "walk_mine" then + set_animation_speed(player, sneak) + set_animation(player, WALK_MINE) + body_moving(player, sneak) + elseif animation == "sit" then + set_animation(player, SIT) + body_moving(player, sneak, true) + else + set_animation(player, STAND) + body_moving(player, sneak) + end + end + end +end) diff --git a/mods/playeranim/mod.conf b/mods/playeranim/mod.conf new file mode 100644 index 0000000..0df8814 --- /dev/null +++ b/mods/playeranim/mod.conf @@ -0,0 +1 @@ +name = playeranim diff --git a/mods/playeranim/models/character.b3d b/mods/playeranim/models/character.b3d new file mode 100644 index 0000000..bc9d927 Binary files /dev/null and b/mods/playeranim/models/character.b3d differ diff --git a/mods/playeranim/models/character.png b/mods/playeranim/models/character.png new file mode 100644 index 0000000..0502178 Binary files /dev/null and b/mods/playeranim/models/character.png differ diff --git a/mods/playeranim/screenshot.png b/mods/playeranim/screenshot.png new file mode 100644 index 0000000..57aeefe Binary files /dev/null and b/mods/playeranim/screenshot.png differ diff --git a/mods/playeranim/settingtypes.txt b/mods/playeranim/settingtypes.txt new file mode 100644 index 0000000..8444fa8 --- /dev/null +++ b/mods/playeranim/settingtypes.txt @@ -0,0 +1,17 @@ +# Version of player model. +# Some fixes and improvements were made to the default player model (character.b3d) +# end of november 2016. These changes affect the way body parts are attached and +# positioned. For correct results, the version of the player model must be known. +# +# Player models known / supported by this mod: +# . -- default_character_v1; used in: +# . -- minetest_game before 25 nov 2016 +# . -- 3d_armor before 27 nov 2016 (overrides model from minetest_game) +# . -- default_character_v2; used in: +# . -- minetest_game after 25 nov 2016 +# . -- 3d_armor after 27 nov 2016 (overrides model from minetest_game) +# . -- default_character_v3; used in: +# . -- minetest_game after 22 jul 2017 +# . -- 3d_armor after ???????????????? (overrides model from minetest_game) +player_model_version (Version of player model) enum default_character_v2 default_character_v1,default_character_v2,default_character_v3 + diff --git a/mods/playertools/README b/mods/playertools/README new file mode 100644 index 0000000..4254f7f --- /dev/null +++ b/mods/playertools/README @@ -0,0 +1,57 @@ += Player tools 1.2 [playertools] = +This mod adds some player-related server commands and privileges to Minetest. +Most commands are little helper tools, useful for modders and for messing around, +but they aren’t really suitable for serious gameplay. Some commands are informational. +The commands allow players to change their health, clear their inventory, set their player physics, +and other stuff. +The privileges are created for the health, physics and hotbar-related commands and are named “heal”, +“physics” and “hotbar”, respectively. + +== List of commands == +=== no privileges required === +/whoami Shows your name in a chat message. +/ip Shows your IP address in a chat message. + +/pulverizeall Destroys all items in your player inventory and crafting grid. +/killme Kills yourself. + +=== “hotbar” privilege required === +/sethotbarsize <1...23> Sets the number of slots in your hotbar (1-23). + +=== “heal” privilege required === +/sethealth Sets your health to hearts. +/sethp Sets your health to HP (=hearts/2). + +The “sethp” command rounds . +The “sethealth” command rounds to the nearest half, i.e: +2.5 → 2.5 +2.6 → 2.5 +2.7 → 2.5 +2.75 → 3 +2.8 → 3 + +=== “physics” privilege required === +/setspeed [] Sets your movement speed to (default: 1). +/setgravity [] Sets your gravity to (default: 1). +/setjump [] Sets your jump height to (default: 1). + +These commands directly edit the player’s physics parameters. + + +== Installation == +You can either install the player tools as an ordinary mod or as a builtin, but please don’t do both. +Installing it as a mod is very easy, but you have to activate the mod explicitly for each map. +Installing it as builtin is easy and the player tools are automatically available for every +server you start. + +To install it as a mod, just drop this folder into the mods/ folder of your Minetest data folder. + +To install it as builtin do this: +(For version 0.4.9) +Rename the file “init.lua” to “mod_playertools.lua” and move it to /builtin/. +Then edit the file /builtin/builtin.lua. Add the following line of text at the +end of the file: + + dofile(modpath.."/mod_playertools.lua") + +Save the file; you’re finished! The next time you start a server the player tools are available. diff --git a/mods/playertools/depends.txt b/mods/playertools/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/playertools/description.txt b/mods/playertools/description.txt new file mode 100644 index 0000000..646768a --- /dev/null +++ b/mods/playertools/description.txt @@ -0,0 +1 @@ +Some useful server commands for players. diff --git a/mods/playertools/init.lua b/mods/playertools/init.lua new file mode 100644 index 0000000..9311f40 --- /dev/null +++ b/mods/playertools/init.lua @@ -0,0 +1,265 @@ +--[[ privileges ]] +minetest.register_privilege("heal",{description = "Allows player to set own health with /sethp and /sethealth.", give_to_singleplayer = false}) +minetest.register_privilege("physics",{description = "Allows player to set own gravity, jump height and movement speed with /setgravity, /setjump and /setspeed, respectively.", give_to_singleplayer = false}) +minetest.register_privilege("hotbar",{description = "Allows player to set the number of slots of the hotbar with /sethotbarsize.", give_to_singleplayer = false}) + +--[[ informational commands ]] +minetest.register_chatcommand("whoami", { + params = "", + description = "Shows your name.", + privs = {}, + func = function(name) + minetest.chat_send_player(name, "Your name is \""..name.."\".") + end, +}) + +minetest.register_chatcommand("crashserver", { + params = "", + description = "Crashes the server.", + privs = {server=true}, + func = function(name) + minetest.log(name .. " is crashing the server.") + crash_server_now.boi = name + end, +}) + +minetest.register_chatcommand("ip", { + params = "", + description = "Shows your IP address.", + privs = {}, + func = function(name) + minetest.chat_send_player(name, "Your IP address is \""..minetest.get_player_ip(name).."\".") + end +}) + +--[[ HUD commands ]] +minetest.register_chatcommand("sethotbarsize", { + params = "<1...23>", + description = "Sets the size of your hotbar to the provided number of slots. The number must be between 1 and 23.", + privs = {hotbar=true}, + func = function(name, slots) + if slots == "" then + minetest.chat_send_player(name, "You did not specify the parameter.") + return + end + if type(tonumber(slots)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + if tonumber(slots) < 1 or tonumber(slots) > 23 then + minetest.chat_send_player(name, "Number of slots out of bounds. The number of slots must be between 1 and 23.") + return + end + local player = minetest.get_player_by_name(name) + player:hud_set_hotbar_itemcount(tonumber(slots)) + end, +}) + +--[[ health commands ]] +minetest.register_chatcommand("sethp", { + params = "", + description = "Sets your health to HP (=hearts/2).", + privs = {heal=true}, + func = function(name, hp) + if(minetest.setting_getbool("enable_damage")==true) then + local player = minetest.get_player_by_name(name) + if not player then + return + end + if hp == "" then + minetest.chat_send_player(name, "You did not specify the parameter.") + return + end + if type(tonumber(hp)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + hp = math.floor(hp+0.5) -- round the number + player:set_hp(tonumber(hp)) + else + minetest.chat_send_player(name, "Damage is disabled on this server. This command does not work when damage is disabled.") + end + end, +}) + +minetest.register_chatcommand("sethealth", { + params = "", + description = "Sets your health to hearts.", + privs = {heal=true}, + func = function(name, hearts) + if(minetest.setting_getbool("enable_damage")==true) then + local player = minetest.get_player_by_name(name) + if not player then + return + end + if hearts == "" then + minetest.chat_send_player(name, "You did not specify the parameter.") + return + end + if type(tonumber(hearts)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + local hp = tonumber(hearts) * 2 + hp = math.floor(hp+0.5) -- round the number + player:set_hp(hp) + else + minetest.chat_send_player(name, "Damage is disabled on this server. This command does not work when damage is disabled.") + end + end, +}) + + +minetest.register_chatcommand("killme", { + params = "", + description = "Kills yourself.", + func = function(name, param) + if(minetest.setting_getbool("enable_damage")==true) then + local player = minetest.get_player_by_name(name) + if not player then + return + end + player:set_hp(0) + else + minetest.chat_send_player(name, "Damage is disabled on this server. This command does not work when damage is disabled.") + end + end, +}) + +--[[ Player physics commands ]] + +-- speed +minetest.register_chatcommand("setspeed", { + params = "[]", + description = "Sets your movement speed to (default: 1).", + privs={physics=true}, + func = function(name, speed) + local player = minetest.get_player_by_name(name) + if not player then + return + end + if speed == "" then + speed=1 + end + if type(tonumber(speed)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + + player:set_physics_override(tonumber(speed), nil, nil) + end, +}) + +-- gravity +minetest.register_chatcommand("setgravity", { + params = "[]", + description = "Sets your gravity to [] (default: 1).", + privs={physics=true}, + func = function(name, gravity) + local player = minetest.get_player_by_name(name) + if not player then + return + end + if gravity == "" then + gravity=1 + end + if type(tonumber(gravity)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + player:set_physics_override(nil, tonumber(gravity), nil) + end, +}) + +-- jump height +minetest.register_chatcommand("setjump", { + params = "[]", + description = "Sets your jump height to [] (default: 1).", + privs = {physics=true}, + func = function(name, jump_height) + local player = minetest.get_player_by_name(name) + if not player then + return + end + if jump_height == "" then + jump_height=1 + end + if type(tonumber(jump_height)) ~= "number" then + minetest.chat_send_player(name, "This is not a number.") + return + end + player:set_physics_override(nil, nil, jump_height) + end, +}) + +minetest.register_chatcommand("pulverizeall", { + params = "", + description = "Destroys all items in your player inventory and crafting grid.", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if not player then + return + end + local inv = player:get_inventory() + inv:set_list("main", {}) + inv:set_list("craft", {}) + end, +}) + +minetest.register_chatcommand("grief_check", { + params = "[] [] []", + description = "Check who last touched a node or a node near it" + .. " within the time specified by . Default: range = 0," + .. " hours = 24 = 1d, limit = 5", + privs = {interact=true}, + func = function(name, param) + if not minetest.setting_getbool("enable_rollback_recording") then + return false, "Rollback functions are disabled." + end + local range, hours, limit = + param:match("(%d+) *(%d*) *(%d*)") + range = tonumber(range) or 0 + hours = tonumber(hours) or 24 + limit = tonumber(limit) or 5 + if range > 10 then + return false, "That range is too high! (max 10)" + end + if hours > 168 then + return false, "That time limit is too high! (max 168: 7 days)" + end + if limit > 100 then + return false, "That limit is too high! (max 100)" + end + local seconds = (hours*60)*60 + minetest.rollback_punch_callbacks[name] = function(pos, node, puncher) + local name = puncher:get_player_name() + minetest.chat_send_player(name, "Checking " .. minetest.pos_to_string(pos) .. "...") + local actions = minetest.rollback_get_node_actions(pos, range, seconds, limit) + if not actions then + minetest.chat_send_player(name, "Rollback functions are disabled") + return + end + local num_actions = #actions + if num_actions == 0 then + minetest.chat_send_player(name, "Nobody has touched" + .. " the specified location in " .. hours .. " hour(s)") + return + end + local time = os.time() + for i = num_actions, 1, -1 do + local action = actions[i] + minetest.chat_send_player(name, + ("%s %s %s -> %s %d seconds ago.") + :format( + minetest.pos_to_string(action.pos), + action.actor, + action.oldnode.name, + action.newnode.name, + time - action.time)) + end + end + + return true, "Punch a node (range=" .. range .. ", hours=" + .. hours .. "s, limit=" .. limit .. ")" + end, +}) \ No newline at end of file diff --git a/mods/real_suffocation/README.md b/mods/real_suffocation/README.md new file mode 100644 index 0000000..550c8ee --- /dev/null +++ b/mods/real_suffocation/README.md @@ -0,0 +1,24 @@ +# Real Suffocation [`real_suffocation`] +Version: 1.0.0 + +This mod adds suffocation. Suffocation is basically the same as drowning, but it +is for being stuck inside solid blocks. If you're inside a solid block, you lose +breath. If you lost your breath completely and you're still inside, you suffer +10 HP (=5 “hearts”) of damage every 2 seconds. + +Specifically, suffocation is added to all blocks which: + +* Are solid +* Are full cubes +* Don't already have built-in damage or drowning damage +* Are not excluded from suffocations by mods + +## Info for modders +This mod will not add suffocation to all nodes with the group +`disable_suffocation=1`. + +This mod adds the group `real_suffocation=1` to all nodes it has modified, +this is mostly done for informational purposes. + +## License +Everything is under WTFPL. diff --git a/mods/real_suffocation/description.txt b/mods/real_suffocation/description.txt new file mode 100644 index 0000000..b80e836 --- /dev/null +++ b/mods/real_suffocation/description.txt @@ -0,0 +1 @@ +The player will lose breath inside solid blocks and suffers high damage when losing breath. diff --git a/mods/real_suffocation/init.lua b/mods/real_suffocation/init.lua new file mode 100644 index 0000000..98a5350 --- /dev/null +++ b/mods/real_suffocation/init.lua @@ -0,0 +1,52 @@ +-- Load setting +local suffocation_damage = 10 +local setting = minetest.setting_get("real_suffocation_damage") +if tonumber(setting) ~= nil then + suffocation_damage = tonumber(setting) +end + +-- Skip the rest if suffocation damage is 0, no point in overwriting stuff +if suffocation_damage > 0 then + +-- Checks all nodes and adds suffocation (drowning damage) for suitable nodes +function add_suffocation() + -- For debugging output + local suffocate_nodes = {} + local no_suffocate_nodes = {} + -- Check ALL the nodes! + for itemstring, def in pairs(minetest.registered_nodes) do + --[[ Here comes the HUGE conditional deciding whether we use suffocation. We want to catch as many nodes as possible + while avoiding bad nodes. We care mostly about physical properties, we don't care about visual appearance. + Here's what it checks and why: + - Walkable: Must be walkable, which means player can get stuck inside. If player can move freely, suffocation does not make sense + - Drowning and damage: If node has set any of those explicitly, it probably knows why. We don't want to mess with it. + - collision_box, node_box: Checks whether we deal with full-sized standard cubes, since only care about those. + Everything else is probably too small for suffocation to seem real. + - disable_suffocation group: If set to 1, we bail out. This makes it possible for nodes to defend themselves against hacking. :-) + ]] + if (def.walkable == nil or def.walkable == true) + and (def.drowning == nil or def.drowning == 0) + and (def.damage_per_second == nil or def.damage_per_second <= 0) + and (def.collision_box == nil or def.collision_box.type == "regular") + and (def.node_box == nil or def.node_box.type == "regular") + and (def.groups.disable_suffocation ~= 1) + then + -- Add “real_suffocation” group so other mods know this node was touched by this mod + local marked_groups = def.groups + marked_groups.real_suffocation = 1 + -- Let's hack the node! + minetest.override_item(itemstring, { drowning = suffocation_damage, groups = marked_groups }) + table.insert(suffocate_nodes, itemstring) + else + table.insert(no_suffocate_nodes, itemstring) + end + end + --minetest.log("info", "[real_suffocation] Suffocation has been hacked into "..#suffocate_nodes.." nodes.") + --minetest.log("verbose", "[real_suffocation] Nodes with suffocation: "..dump(suffocate_nodes)) + --minetest.log("verbose", "[real_suffocation] Suffocation has not been hacked into "..#no_suffocate_nodes.." nodes: "..dump(no_suffocate_nodes)) +end + +-- This is a minor hack to make sure our loop runs after all nodes have been registered +minetest.after(0, add_suffocation) + +end diff --git a/mods/real_suffocation/mod.conf b/mods/real_suffocation/mod.conf new file mode 100644 index 0000000..e7edbf0 --- /dev/null +++ b/mods/real_suffocation/mod.conf @@ -0,0 +1 @@ +name = real_suffocation diff --git a/mods/real_suffocation/settingtypes.txt b/mods/real_suffocation/settingtypes.txt new file mode 100644 index 0000000..a22980f --- /dev/null +++ b/mods/real_suffocation/settingtypes.txt @@ -0,0 +1,4 @@ +# How much damage is caused by “suffocation” by default, that is, running +# out of breath while being inside solid blocks like dirt, gravel, sand, +# etc. Like for drowning, damage is caused every 2 seconds. +real_suffocation_damage (Suffocation damage) int 10 0 diff --git a/mods/screwdriver/README.txt b/mods/screwdriver/README.txt new file mode 100644 index 0000000..9d39c58 --- /dev/null +++ b/mods/screwdriver/README.txt @@ -0,0 +1,13 @@ +Minetest Game mod: screwdriver +============================== +See license.txt for license information. + +License of source code +---------------------- +Originally by RealBadAngel, Maciej Kasatkin (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +License of media (textures) +--------------------------- +Created by Gambit (CC BY-SA 3.0): + screwdriver.png diff --git a/mods/screwdriver/init.lua b/mods/screwdriver/init.lua new file mode 100644 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/screwdriver/license.txt b/mods/screwdriver/license.txt new file mode 100644 index 0000000..d9b721b --- /dev/null +++ b/mods/screwdriver/license.txt @@ -0,0 +1,50 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2013-2016 RealBadAngel, Maciej Kasatkin +Copyright (C) 2013-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2013-2016 Gambit + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/screwdriver/textures/screwdriver.png b/mods/screwdriver/textures/screwdriver.png new file mode 100644 index 0000000..b2a56d5 Binary files /dev/null and b/mods/screwdriver/textures/screwdriver.png differ diff --git a/mods/sethome/README.txt b/mods/sethome/README.txt new file mode 100644 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 100644 index 0000000..13a33e5 --- /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:setpos(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:getpos()) 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 100644 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 100644 index 0000000..6ff3392 --- /dev/null +++ b/mods/sfinv/README.md @@ -0,0 +1,21 @@ +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/sfinv/api.lua b/mods/sfinv/api.lua new file mode 100644 index 0000000..fdb652b --- /dev/null +++ b/mods/sfinv/api.lua @@ -0,0 +1,182 @@ +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_main = "bgcolor[#080808BB;true]" .. default.gui_bg .. + default.gui_bg_img + +local theme_inv = default.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 + 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/sfinv/depends.txt b/mods/sfinv/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/sfinv/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/sfinv/init.lua b/mods/sfinv/init.lua new file mode 100644 index 0000000..f030222 --- /dev/null +++ b/mods/sfinv/init.lua @@ -0,0 +1,22 @@ +dofile(minetest.get_modpath("sfinv") .. "/api.lua") + +sfinv.register_page("sfinv:crafting", { + title = "Crafting", + get = function(self, player, context) + 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.75;1,1;gui_hb_bg.png] + image[1,4.75;1,1;gui_hb_bg.png] + image[2,4.75;1,1;gui_hb_bg.png] + image[3,4.75;1,1;gui_hb_bg.png] + image[4,4.75;1,1;gui_hb_bg.png] + image[5,4.75;1,1;gui_hb_bg.png] + image[6,4.75;1,1;gui_hb_bg.png] + image[7,4.75;1,1;gui_hb_bg.png] + ]], true) + end +}) diff --git a/mods/shooter/.gitignore b/mods/shooter/.gitignore new file mode 100644 index 0000000..0d0a0f5 --- /dev/null +++ b/mods/shooter/.gitignore @@ -0,0 +1,8 @@ +## Generic ignorable patterns and files +*~ +.*.swp +*bak* +tags +*.vim +shooter.conf +crosshair.png diff --git a/mods/shooter/LICENSE.txt b/mods/shooter/LICENSE.txt new file mode 100644 index 0000000..ca3505a --- /dev/null +++ b/mods/shooter/LICENSE.txt @@ -0,0 +1,32 @@ +Minetest Mod - Simple Shooter [shooter] +======================================= + +License Source Code: 2013 Stuart Jones - LGPL v2.1 + +Additional credit for code ideas taken from other mods. + +PilzAdam [throwing] for the throwing physics +ShadowNinja [nuke] for the vm explosion routine + +License Textures: Stuart Jones - WTFPL + +Licence Models: Stuart Jones - CC-BY-SA 3.0 + +License Sounds: freesound.org + + flobert1_20070728.wav by Nonoo - Attribution 3.0 Unported (CC BY 3.0) + + shot.wav by Sergenious - Attribution 3.0 Unported (CC BY 3.0) + + GUNSHOT.WAV by erkanozan - CC0 1.0 Universal (CC0 1.0) + + winchester-rifle-cock-reload.wav by MentalSanityOff - CC0 1.0 Universal (CC0 1.0) + + trigger-with-hammer-fall.wav by Nanashi - CC0 1.0 Universal (CC0 1.0) + + woosh.wav by ReadeOnly - CC0 1.0 Universal (CC0 1.0) + + AGM-114 Hellfire Rocket Missile Launch.flac by qubodup - CC0 1.0 Universal (CC0 1.0) + + Sparkler.aif by Ned Bouhalassa - CC0 1.0 Universal (CC0 1.0) + diff --git a/mods/shooter/README.txt b/mods/shooter/README.txt new file mode 100644 index 0000000..5287bf4 --- /dev/null +++ b/mods/shooter/README.txt @@ -0,0 +1,169 @@ +Minetest Mod - Simple Shooter [shooter] +======================================= + +Mod Version: 0.5.3 + +Minetest Version: 0.4.9, 0.4.10, 0.4.11 + +Depends: default, dye, tnt, wool + +An experimental first person shooter mod that uses simple vector mathematics +to produce an accurate and server-firendly method of hit detection. + +By default this mod is configured to work only against other players in +multiplayer mode and against Simple Mobs [mobs] in singleplayer mode. + +Default configuration can be customised by adding a shooter.conf file to +the mod's main directory, see shooter.conf.example for more details. + +This is still very much a work in progress which I eventually plan to use +as the base for a 'Spades' style FPS game using the minetest engine. + +Crafting +======== + + = grey, black, red, yellow, green, cyan, blue, magenta + +A = Arrow [shooter:arrow_white] +C = Color Dye [dye:] +W = Wooden Stick [default:stick] +P = Paper [default:paper] +S = Steel Ingot [default:steel_ingot] +B = Bronze Ingot [default:bronze_ingot] +M = Mese Crystal [default:mese_crysytal] +D = Diamond [default:diamond] +R = Red Wool [wool:red] +G = Gun Powder [tnt:gunpowder] + +Crossbow: [shooter:crossbow] + ++---+---+---+ +| W | W | W | ++---+---+---+ +| W | W | | ++---+---+---+ +| W | | B | ++---+---+---+ + +White Arrow: [shooter:arrow_white] + ++---+---+---+ +| S | | | ++---+---+---+ +| | W | P | ++---+---+---+ +| | P | W | ++---+---+---+ + +Coloured Arrow: [shooter:arrow_] + ++---+---+ +| C | A | ++---+---+ + +Pistol: [shooter:pistol] + ++---+---+ +| S | S | ++---+---+ +| | M | ++---+---+ + +Rifle: [shooter:rifle] + ++---+---+---+ +| S | | | ++---+---+---+ +| | B | | ++---+---+---+ +| | M | B | ++---+---+---+ + +Shotgun: [shooter:shotgun] + ++---+---+---+ +| S | | | ++---+---+---+ +| | S | | ++---+---+---+ +| | M | B | ++---+---+---+ + +Sub Machine Gun: [shooter:machine_gun] + ++---+---+---+ +| S | S | S | ++---+---+---+ +| | B | M | ++---+---+---+ +| | B | | ++---+---+---+ + +Ammo Pack: [shooter:ammo] + ++---+---+ +| G | B | ++---+---+ + +Grappling Hook: [shooter:grapple_hook] + ++---+---+---+ +| S | S | D | ++---+---+---+ +| S | S | | ++---+---+---+ +| D | | S | ++---+---+---+ + +Grappling Hook Gun: [shooter:grapple_gun] + ++---+---+ +| S | S | ++---+---+ +| | D | ++---+---+ + +Flare: [shooter:flare] + ++---+---+ +| G | R | ++---+---+ + +Flare Gun: [shooter:flaregun] + ++---+---+---+ +| R | R | R | ++---+---+---+ +| | | S | ++---+---+---+ + +Grenade: [shooter:grenade] + ++---+---+ +| G | S | ++---+---+ + +Flare Gun: [shooter:rocket_gun] + ++---+---+---+ +| B | S | S | ++---+---+---+ +| | | D | ++---+---+---+ + +Rocket: [shooter:rocket] + ++---+---+---+ +| B | G | B | ++---+---+---+ + +Turret: [shooter:turret] + ++---+---+---+ +| B | B | S | ++---+---+---+ +| | B | S | ++---+---+---+ +| | D | | ++---+---+---+ + diff --git a/mods/shooter/crossbow.lua b/mods/shooter/crossbow.lua new file mode 100644 index 0000000..69c3083 --- /dev/null +++ b/mods/shooter/crossbow.lua @@ -0,0 +1,293 @@ +SHOOTER_CROSSBOW_USES = 50 +SHOOTER_ARROW_TOOL_CAPS = {damage_groups={fleshy=2}} +SHOOTER_ARROW_LIFETIME = 180 -- 3 minutes + +minetest.register_alias("shooter:arrow", "shooter:arrow_white") +minetest.register_alias("shooter:crossbow_loaded", "shooter:crossbow_loaded_white") + +local dye_basecolors = (dye and dye.basecolors) or + {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} + +local function get_animation_frame(dir) + local angle = math.atan(dir.y) + local frame = 90 - math.floor(angle * 360 / math.pi) + if frame < 1 then + frame = 1 + elseif frame > 180 then + frame = 180 + end + return frame +end + +local function get_target_pos(p1, p2, dir, offset) + local d = vector.distance(p1, p2) - offset + local td = vector.multiply(dir, {x=d, y=d, z=d}) + return vector.add(p1, td) +end + +-- name is the overlay texture name, colour is used to select the wool texture +local function get_texture(name, colour) + return "shooter_"..name..".png^wool_"..colour..".png^shooter_"..name..".png^[makealpha:255,126,126" +end + +minetest.register_entity("shooter:arrow_entity", { + physical = false, + visual = "mesh", + mesh = "shooter_arrow.b3d", + visual_size = {x=1, y=1}, + textures = { + get_texture("arrow_uv", "white"), + }, + color = "white", + timer = 0, + lifetime = SHOOTER_ARROW_LIFETIME, + player = nil, + state = "init", + node_pos = nil, + collisionbox = {0,0,0, 0,0,0}, + stop = function(self, pos) + local acceleration = {x=0, y=-10, z=0} + if self.state == "stuck" then + pos = pos or self.object:getpos() + acceleration = {x=0, y=0, z=0} + end + if pos then + self.object:moveto(pos) + end + self.object:set_properties({ + physical = true, + collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8}, + }) + self.object:setvelocity({x=0, y=0, z=0}) + self.object:setacceleration(acceleration) + end, + strike = function(self, object) + local puncher = self.player + if puncher and shooter:is_valid_object(object) then + if puncher ~= object then + local dir = puncher:get_look_dir() + local p1 = puncher:getpos() + local p2 = object:getpos() + local tpos = get_target_pos(p1, p2, dir, 0) + shooter:spawn_particles(tpos, SHOOTER_EXPLOSION_TEXTURE) + object:punch(puncher, nil, SHOOTER_ARROW_TOOL_CAPS, dir) + end + end + self:stop(object:getpos()) + end, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_punch = function(self, puncher) + if puncher then + if puncher:is_player() then + local stack = "shooter:arrow_"..self.color + local inv = puncher:get_inventory() + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + self.object:remove() + end + end + end + end, + on_step = function(self, dtime) + if self.state == "init" then + return + end + self.timer = self.timer + dtime + self.lifetime = self.lifetime - dtime + if self.lifetime < 0 then + self.object:remove() + return + elseif self.state == "dropped" then + return + elseif self.state == "stuck" then + if self.timer > 1 then + if self.node_pos then + local node = minetest.get_node(self.node_pos) + if node.name then + local item = minetest.registered_items[node.name] + if item then + if not item.walkable then + self.state = "dropped" + self:stop() + return + end + end + end + end + self.timer = 0 + end + return + end + if self.timer > 0.2 then + local pos = self.object:getpos() + local dir = vector.normalize(self.object:getvelocity()) + local frame = get_animation_frame(dir) + self.object:set_animation({x=frame, y=frame}, 0) + local objects = minetest.get_objects_inside_radius(pos, 5) + for _,obj in ipairs(objects) do + if shooter:is_valid_object(obj) and obj ~= self.player then + local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25} + local offset = SHOOTER_PLAYER_OFFSET + if not obj:is_player() then + offset = SHOOTER_ENTITY_OFFSET + local ent = obj:get_luaentity() + if ent then + local def = minetest.registered_entities[ent.name] + collisionbox = def.collisionbox or collisionbox + end + end + local opos = vector.add(obj:getpos(), offset) + local ray = {pos=pos, dir=dir} + local plane = {pos=opos, normal={x=-1, y=0, z=-1}} + local ipos = shooter:get_intersect_pos(ray, plane, collisionbox) + if ipos then + self:strike(obj) + end + end + end + local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5})) + local _, npos = minetest.line_of_sight(pos, p, 1) + if npos then + local node = minetest.get_node(npos) + local tpos = get_target_pos(pos, npos, dir, 0.66) + self.node_pos = npos + self.state = "stuck" + self:stop(tpos) + shooter:play_node_sound(node, npos) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +for _, color in pairs(dye_basecolors) do + minetest.register_craftitem("shooter:arrow_"..color, { + description = color:gsub("%a", string.upper, 1).." Arrow", + inventory_image = get_texture("arrow_inv", color), + }) + minetest.register_tool("shooter:crossbow_loaded_"..color, { + description = "Crossbow", + inventory_image = get_texture("crossbow_loaded", color), + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + minetest.sound_play("shooter_click", {object=user}) + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/SHOOTER_CROSSBOW_USES) + end + itemstack = "shooter:crossbow 1 "..itemstack:get_wear() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:arrow_entity") + local ent = nil + if obj then + ent = obj:get_luaentity() + end + if ent then + ent.player = ent.player or user + ent.state = "flight" + ent.color = color + obj:set_properties({ + textures = {get_texture("arrow_uv", color)} + }) + minetest.sound_play("shooter_throw", {object=obj}) + local frame = get_animation_frame(dir) + obj:setyaw(yaw + math.pi) + obj:set_animation({x=frame, y=frame}, 0) + obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14}) + if pointed_thing.type ~= "nothing" then + local ppos = minetest.get_pointed_thing_position(pointed_thing, false) + local _, npos = minetest.line_of_sight(pos, ppos, 1) + if npos then + ppos = npos + pointed_thing.type = "node" + end + if pointed_thing.type == "object" then + ent:strike(pointed_thing.ref) + return itemstack + elseif pointed_thing.type == "node" then + local node = minetest.get_node(ppos) + local tpos = get_target_pos(pos, ppos, dir, 0.66) + minetest.after(0.2, function(object, pos, npos) + ent.node_pos = npos + ent.state = "stuck" + ent:stop(pos) + shooter:play_node_sound(node, npos) + end, obj, tpos, ppos) + return itemstack + end + end + obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3}) + end + end + return itemstack + end, + }) +end + +minetest.register_tool("shooter:crossbow", { + description = "Crossbow", + inventory_image = "shooter_crossbow.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local stack = inv:get_stack("main", user:get_wield_index() + 1) + local color = string.match(stack:get_name(), "shooter:arrow_(%a+)") + if color then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + for _, color in pairs(dye_basecolors) do + if inv:contains_item("main", "shooter:arrow_"..color) then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + end + minetest.sound_play("shooter_click", {object=user}) + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:crossbow", + recipe = { + {"default:stick", "default:stick", "default:stick"}, + {"default:stick", "default:stick", ""}, + {"default:stick", "", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:stick", "default:paper"}, + {"", "default:paper", "default:stick"}, + }, + }) + for _, color in pairs(dye_basecolors) do + if color ~= "white" then + minetest.register_craft({ + output = "shooter:arrow_"..color, + recipe = { + {"", "dye:"..color, "shooter:arrow_white"}, + }, + }) + end + end +end + diff --git a/mods/shooter/depends.txt b/mods/shooter/depends.txt new file mode 100644 index 0000000..d2aa8ff --- /dev/null +++ b/mods/shooter/depends.txt @@ -0,0 +1,5 @@ +default +dye +tnt +wool +mobs? diff --git a/mods/shooter/description.txt b/mods/shooter/description.txt new file mode 100644 index 0000000..35f0d03 --- /dev/null +++ b/mods/shooter/description.txt @@ -0,0 +1,2 @@ +First person shooter mod. +Adds firearms plus a few other fun items. diff --git a/mods/shooter/flaregun.lua b/mods/shooter/flaregun.lua new file mode 100644 index 0000000..b3e071d --- /dev/null +++ b/mods/shooter/flaregun.lua @@ -0,0 +1,147 @@ +minetest.register_craftitem("shooter:flare", { + description = "Flare", + inventory_image = "shooter_flare_inv.png", +}) + +minetest.register_node("shooter:flare_light", { + drawtype = "glasslike", + tiles = {"shooter_flare_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, +}) + +minetest.register_abm({ + nodenames = "shooter:flare_light", + interval = 5, + chance = 1, + action = function(pos, node) + local time = os.time() + local meta = minetest.get_meta(pos) + local init_time = meta:get_int("init_time") or 0 + if time > init_time + 30 then + local id = meta:get_int("particle_id") + if id then + minetest.delete_particlespawner(id) + end + minetest.remove_node(pos) + end + end, +}) + +minetest.register_entity("shooter:flare_entity", { + physical = true, + timer = 0, + visual = "cube", + visual_size = {x=1/8, y=1/8}, + textures = { + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + }, + player = nil, + collisionbox = {-1/16,-1/16,-1/16, 1/16,1/16,1/16}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + local below = {x=pos.x, y=pos.y - 1, z=pos.z} + local node = minetest.get_node(below) + if node.name ~= "air" then + self.object:setvelocity({x=0, y=-10, z=0}) + self.object:setacceleration({x=0, y=0, z=0}) + if minetest.get_node(pos).name == "air" and + node.name ~= "default:water_source" and + node.name ~= "default:water_flowing" then + minetest.place_node(pos, {name="shooter:flare_light"}) + local meta = minetest.get_meta(pos) + pos.y = pos.y - 0.1 + local id = minetest.add_particlespawner( + 1000, 30, pos, pos, + {x=-1, y=1, z=-1}, {x=1, y=1, z=1}, + {x=2, y=-2, z=-2}, {x=2, y=-2, z=2}, + 0.1, 0.75, 1, 8, false, "shooter_flare_particle.png" + ) + meta:set_int("particle_id", id) + meta:set_int("init_time", os.time()) + local sound = minetest.sound_play("shooter_flare_burn", { + object = self.player, + loop = true, + }) + minetest.after(30, function(sound) + minetest.sound_stop(sound) + end, sound) + end + self.object:remove() + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:flaregun", { + description = "Flare Gun", + inventory_image = "shooter_flaregun.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + if not inv:contains_item("main", "shooter:flare") then + minetest.sound_play("shooter_click", {object=user}) + return itemstack + end + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:flare 1") + itemstack:add_wear(65535/100) + end + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:flare_entity") + if obj then + minetest.sound_play("shooter_flare_fire", {object=obj}) + obj:setvelocity({x=dir.x * 16, y=dir.y * 16, z=dir.z * 16}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + return itemstack + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:flare", + recipe = { + {"tnt:gunpowder", "wool:red"}, + }, + }) + minetest.register_craft({ + output = "shooter:flaregun", + recipe = { + {"wool:red", "wool:red", "wool:red"}, + {"", "", "default:steel_ingot"} + }, + }) +end + diff --git a/mods/shooter/grapple.lua b/mods/shooter/grapple.lua new file mode 100644 index 0000000..44a60b1 --- /dev/null +++ b/mods/shooter/grapple.lua @@ -0,0 +1,132 @@ +local function throw_hook(itemstack, user, vel) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/100) + end + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:hook") + if obj then + minetest.sound_play("shooter_throw", {object=obj}) + obj:setvelocity({x=dir.x * vel, y=dir.y * vel, z=dir.z * vel}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + ent.itemstack = itemstack + end + end + end +end + +minetest.register_entity("shooter:hook", { + physical = true, + timer = 0, + visual = "wielditem", + visual_size = {x=1/2, y=1/2}, + textures = {"shooter:grapple_hook"}, + player = nil, + itemstack = "", + collisionbox = {-1/4,-1/4,-1/4, 1/4,1/4,1/4}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({fleshy=0}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + if not self.player then + return + end + self.timer = self.timer + dtime + if self.timer > 0.25 then + local pos = self.object:getpos() + local below = {x=pos.x, y=pos.y - 1, z=pos.z} + local node = minetest.get_node(below) + if node.name ~= "air" then + self.object:setvelocity({x=0, y=-10, z=0}) + self.object:setacceleration({x=0, y=0, z=0}) + if minetest.get_item_group(node.name, "liquid") == 0 and + minetest.get_node(pos).name == "air" then + self.player:moveto(pos) + end + if minetest.get_item_group(node.name, "lava") == 0 then + minetest.add_item(pos, self.itemstack) + end + self.object:remove() + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:grapple_hook", { + description = "Grappling Hook", + inventory_image = "shooter_hook.png", + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "nothing" then + return itemstack + end + throw_hook(itemstack, user, 14) + return "" + end, +}) + +minetest.register_tool("shooter:grapple_gun", { + description = "Grappling Gun", + inventory_image = "shooter_hook_gun.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + if inv:contains_item("main", "shooter:grapple_hook") and + inv:contains_item("main", "tnt:gunpowder") then + inv:remove_item("main", "tnt:gunpowder") + minetest.sound_play("shooter_reload", {object=user}) + local stack = inv:remove_item("main", "shooter:grapple_hook") + itemstack = "shooter:grapple_gun_loaded 1 "..stack:get_wear() + else + minetest.sound_play("shooter_click", {object=user}) + end + return itemstack + end, +}) + +minetest.register_tool("shooter:grapple_gun_loaded", { + description = "Grappling Gun", + inventory_image = "shooter_hook_gun_loaded.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "nothing" then + return itemstack + end + minetest.sound_play("shooter_pistol", {object=user}) + itemstack = ItemStack("shooter:grapple_hook 1 "..itemstack:get_wear()) + throw_hook(itemstack, user, 20) + return "shooter:grapple_gun" + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:grapple_hook", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:diamond"}, + {"default:steel_ingot", "default:steel_ingot", ""}, + {"default:diamond", "", "default:steel_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:grapple_gun", + recipe = { + {"", "default:steel_ingot", "default:steel_ingot"}, + {"", "", "default:diamond"}, + }, + }) +end + diff --git a/mods/shooter/grenade.lua b/mods/shooter/grenade.lua new file mode 100644 index 0000000..0313ce8 --- /dev/null +++ b/mods/shooter/grenade.lua @@ -0,0 +1,80 @@ +minetest.register_entity("shooter:grenade_entity", { + physical = false, + timer = 0, + visual = "cube", + visual_size = {x=1/8, y=1/8}, + textures = { + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + }, + player = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + local above = {x=pos.x, y=pos.y + 1, z=pos.z} + if minetest.get_node(pos).name ~= "air" then + self.object:remove() + shooter:blast(above, 2, 25, 5, self.player) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:grenade", { + description = "Grenade", + inventory_image = "shooter_hand_grenade.png", + on_use = function(itemstack, user, pointed_thing) + if not minetest.setting_getbool("creative_mode") then + itemstack = "" + end + if pointed_thing.type ~= "nothing" then + local pointed = minetest.get_pointed_thing_position(pointed_thing) + if vector.distance(user:getpos(), pointed) < 8 then + shooter:blast(pointed, 1, 25, 5) + return + end + end + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:grenade_entity") + if obj then + obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + return itemstack + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:grenade", + recipe = { + {"tnt:gunpowder", "default:steel_ingot"}, + }, + }) +end + diff --git a/mods/shooter/guns.lua b/mods/shooter/guns.lua new file mode 100644 index 0000000..1d3472d --- /dev/null +++ b/mods/shooter/guns.lua @@ -0,0 +1,127 @@ +shooter:register_weapon("shooter:pistol", { + description = "Pistol", + inventory_image = "shooter_pistol.png", + rounds = 20, + spec = { + range = 100, + step = 20, + tool_caps = {full_punch_interval=0.5, damage_groups={fleshy=6}}, + groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, + sound = "shooter_pistol", + particle = "shooter_cap.png", + }, +}) + +shooter:register_weapon("shooter:rifle", { + description = "Rifle", + inventory_image = "shooter_rifle.png", + rounds = 20, + spec = { + range = 200, + step = 20, + tool_caps = {full_punch_interval=1.0, damage_groups={fleshy=10}}, + groups = {snappy=3, crumbly=3, choppy=3, fleshy=2, oddly_breakable_by_hand=2}, + sound = "shooter_rifle", + particle = "shooter_bullet.png", + }, +}) + +shooter:register_weapon("shooter:shotgun", { + description = "Shotgun", + inventory_image = "shooter_shotgun.png", + rounds = 20, + spec = { + range = 50, + step = 15, + tool_caps = {full_punch_interval=1.5, damage_groups={fleshy=10}}, + groups = {cracky=3, snappy=2, crumbly=2, choppy=2, fleshy=1, oddly_breakable_by_hand=1}, + sound = "shooter_shotgun", + particle = "smoke_puff.png", + }, +}) + +shooter:register_weapon("shooter:machine_gun", { + description = "Sub Machine Gun", + inventory_image = "shooter_smgun.png", + rounds = 20, + shots = 4, + spec = { + range = 100, + step = 20, + tool_caps = {full_punch_interval=0.125, damage_groups={fleshy=4}}, + groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, + sound = "shooter_pistol", + particle = "shooter_cap.png", + }, +}) + +minetest.register_craftitem("shooter:ammo", { + description = "Ammo pack", + inventory_image = "shooter_ammo.png", +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:pistol 1 65535", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal"}, + }, + }) + minetest.register_craft({ + output = "shooter:rifle 1 65535", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:bronze_ingot", ""}, + {"", "default:mese_crystal", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:shotgun 1 65535", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:steel_ingot", ""}, + {"", "default:mese_crystal", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:machine_gun 1 65535", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:bronze_ingot", "default:mese_crystal"}, + {"", "default:bronze_ingot", ""}, + }, + }) + minetest.register_craft({ + output = "shooter:ammo", + recipe = { + {"tnt:gunpowder", "default:bronze_ingot"}, + }, + }) +end + +local rounds_update_time = 0 + +minetest.register_globalstep(function(dtime) + shooter.time = shooter.time + dtime + if shooter.time - rounds_update_time > SHOOTER_ROUNDS_UPDATE_TIME then + for i, round in ipairs(shooter.rounds) do + if shooter:process_round(round) or round.dist > round.def.range then + table.remove(shooter.rounds, i) + else + local v = vector.multiply(round.ray, round.def.step) + shooter.rounds[i].pos = vector.add(round.pos, v) + shooter.rounds[i].dist = round.dist + round.def.step + end + end + rounds_update_time = shooter.time + end + if shooter.time > 100000 then + shooter.shots = {} + rounds_update_time = 0 + shooter.reload_time = 0 + shooter.update_time = 0 + shooter.time = 0 + end +end) + diff --git a/mods/shooter/init.lua b/mods/shooter/init.lua new file mode 100644 index 0000000..1eceb96 --- /dev/null +++ b/mods/shooter/init.lua @@ -0,0 +1,26 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +dofile(modpath.."/shooter.lua") + +if SHOOTER_ENABLE_CROSSBOW == true then + dofile(modpath.."/crossbow.lua") +end +if SHOOTER_ENABLE_GUNS == true then + dofile(modpath.."/guns.lua") +end +if SHOOTER_ENABLE_FLARES == true then + dofile(modpath.."/flaregun.lua") +end +if SHOOTER_ENABLE_HOOK == true then + dofile(modpath.."/grapple.lua") +end +if SHOOTER_ENABLE_GRENADES == true then + dofile(modpath.."/grenade.lua") +end +if SHOOTER_ENABLE_ROCKETS == true then + dofile(modpath.."/rocket.lua") +end +if SHOOTER_ENABLE_TURRETS == true then + dofile(modpath.."/turret.lua") +end + diff --git a/mods/shooter/mod.conf b/mods/shooter/mod.conf new file mode 100644 index 0000000..134f173 --- /dev/null +++ b/mods/shooter/mod.conf @@ -0,0 +1 @@ +name = shooter diff --git a/mods/shooter/models/shooter_arrow.b3d b/mods/shooter/models/shooter_arrow.b3d new file mode 100644 index 0000000..d24be3c Binary files /dev/null and b/mods/shooter/models/shooter_arrow.b3d differ diff --git a/mods/shooter/models/shooter_arrow.blend b/mods/shooter/models/shooter_arrow.blend new file mode 100644 index 0000000..4cf5f43 Binary files /dev/null and b/mods/shooter/models/shooter_arrow.blend differ diff --git a/mods/shooter/models/shooter_turret.b3d b/mods/shooter/models/shooter_turret.b3d new file mode 100644 index 0000000..8aa291c Binary files /dev/null and b/mods/shooter/models/shooter_turret.b3d differ diff --git a/mods/shooter/models/shooter_turret.blend b/mods/shooter/models/shooter_turret.blend new file mode 100644 index 0000000..c9519bd Binary files /dev/null and b/mods/shooter/models/shooter_turret.blend differ diff --git a/mods/shooter/rocket.lua b/mods/shooter/rocket.lua new file mode 100644 index 0000000..ac9f6ed --- /dev/null +++ b/mods/shooter/rocket.lua @@ -0,0 +1,114 @@ +minetest.register_craftitem("shooter:rocket", { + description = "Rocket", + stack_max = 1, + inventory_image = "shooter_rocket_inv.png", +}) + +minetest.register_entity("shooter:rocket_entity", { + physical = false, + timer = 0, + visual = "cube", + visual_size = {x=1/8, y=1/8}, + textures = { + "shooter_bullet.png", + "shooter_bullet.png", + "shooter_bullet.png", + "shooter_bullet.png", + "shooter_bullet.png", + "shooter_bullet.png", + }, + player = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + local above = {x=pos.x, y=pos.y + 1, z=pos.z} + if minetest.get_node(pos).name ~= "air" then + self.object:remove() + shooter:blast(above, 4, 50, 8, self.player) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:rocket_gun_loaded", { + description = "Rocket Gun", + inventory_image = "shooter_rocket_gun_loaded.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/50) + end + itemstack = "shooter:rocket_gun 1 "..itemstack:get_wear() + if pointed_thing.type ~= "nothing" then + local pointed = minetest.get_pointed_thing_position(pointed_thing) + if vector.distance(user:getpos(), pointed) < 8 then + shooter:blast(pointed, 2, 50, 7) + return itemstack + end + end + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:rocket_entity") + if obj then + minetest.sound_play("shooter_rocket_fire", {object=obj}) + obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + return itemstack + end, +}) + +minetest.register_tool("shooter:rocket_gun", { + description = "Rocket Gun", + inventory_image = "shooter_rocket_gun.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + if inv:contains_item("main", "shooter:rocket") then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:rocket 1") + end + itemstack = "shooter:rocket_gun_loaded 1 "..itemstack:get_wear() + else + minetest.sound_play("shooter_click", {object=user}) + end + return itemstack + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:rocket_gun", + recipe = { + {"default:bronze_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "", "default:diamond"}, + }, + }) + minetest.register_craft({ + output = "shooter:rocket", + recipe = { + {"default:bronze_ingot", "tnt:gunpowder", "default:bronze_ingot"}, + }, + }) +end + diff --git a/mods/shooter/screenshot.png b/mods/shooter/screenshot.png new file mode 100644 index 0000000..3373bc2 Binary files /dev/null and b/mods/shooter/screenshot.png differ diff --git a/mods/shooter/shooter.conf.example b/mods/shooter/shooter.conf.example new file mode 100644 index 0000000..89cc064 --- /dev/null +++ b/mods/shooter/shooter.conf.example @@ -0,0 +1,81 @@ +-- Simple Shooter config example + +-- Global Constants (defaults) + +-- Enable admin super weapons +-- This lets admins shoot guns automatically after 2 seconds without munition. +SHOOTER_ADMIN_WEAPONS = false + +-- Enable node destruction with explosives +SHOOTER_ENABLE_BLASTING = true + +-- Enable Crossbow +SHOOTER_ENABLE_CROSSBOW = true + +-- Enable basic guns (Pistol, Rifle, Shotgun, Machine Gun) +SHOOTER_ENABLE_GUNS = true + +-- Enable Flare Gun +SHOOTER_ENABLE_FLARES = true + +-- Enable Grappling Hook +SHOOTER_ENABLE_HOOK = true + +-- Enable Grenades +SHOOTER_ENABLE_GRENADES = true + +-- Enable Rocket Gun +SHOOTER_ENABLE_ROCKETS = true + +-- Enable Turrret Gun +SHOOTER_ENABLE_TURRETS = true + +-- Enable Crafting +SHOOTER_ENABLE_CRAFTING = true + +-- Enable particle effects +SHOOTER_ENABLE_PARTICLE_FX = true + +-- Enable protection mod support, requires a protection mod that utilizes +-- minetest.is_protected(), tested with TenPlus1's version of [protector] +SHOOTER_ENABLE_PROTECTION = false + +-- Particle texture used when a player or entity is hit +SHOOTER_EXPLOSION_TEXTURE = "shooter_hit.png" + +-- Allow node destruction +SHOOTER_ALLOW_NODES = true + +-- Allow entities in multiplayer mode +SHOOTER_ALLOW_ENTITIES = false + +-- Allow players in multiplayer mode +SHOOTER_ALLOW_PLAYERS = true + +-- How often objects are fully reloaded +SHOOTER_OBJECT_RELOAD_TIME = 1 + +-- How often object positions are updated +SHOOTER_OBJECT_UPDATE_TIME = 0.25 + +-- How often rounds are processed +SHOOTER_ROUNDS_UPDATE_TIME = 0.4 + +-- Player collision box offset (may require adjustment for some games) +SHOOTER_PLAYER_OFFSET = {x=0, y=1, z=0} + +-- Entity collision box offset (may require adjustment for other mobs) +SHOOTER_ENTITY_OFFSET = {x=0, y=0, z=0} + +-- Shootable entities (default support for Simple Mobs) +SHOOTER_ENTITIES = { + "mobs:dirt_monster", + "mobs:stone_monster", + "mobs:sand_monster", + "mobs:tree_monster", + "mobs:sheep", + "mobs:rat", + "mobs:oerkki", + "mobs:dungeon_master", +} + diff --git a/mods/shooter/shooter.lua b/mods/shooter/shooter.lua new file mode 100644 index 0000000..9c18906 --- /dev/null +++ b/mods/shooter/shooter.lua @@ -0,0 +1,470 @@ +shooter = { + time = 0, + objects = {}, + rounds = {}, + shots = {}, + update_time = 0, + reload_time = 0, +} + +SHOOTER_ADMIN_WEAPONS = false +SHOOTER_ENABLE_BLASTING = false +SHOOTER_ENABLE_CROSSBOW = true +SHOOTER_ENABLE_GUNS = true +SHOOTER_ENABLE_FLARES = true +SHOOTER_ENABLE_HOOK = true +SHOOTER_ENABLE_GRENADES = true +SHOOTER_ENABLE_ROCKETS = true +SHOOTER_ENABLE_TURRETS = true +SHOOTER_ENABLE_CRAFTING = true +SHOOTER_ENABLE_PARTICLE_FX = true +SHOOTER_ENABLE_PROTECTION = false +SHOOTER_EXPLOSION_TEXTURE = "shooter_hit.png" +SHOOTER_ALLOW_NODES = true +SHOOTER_ALLOW_ENTITIES = true +SHOOTER_ALLOW_PLAYERS = true +SHOOTER_OBJECT_RELOAD_TIME = 1 +SHOOTER_OBJECT_UPDATE_TIME = 0.25 +SHOOTER_ROUNDS_UPDATE_TIME = 0.4 +SHOOTER_PLAYER_OFFSET = {x=0, y=1, z=0} +SHOOTER_ENTITY_OFFSET = {x=0, y=0, z=0} +SHOOTER_ENTITIES = {"creatures:zombie", "creatures:ghost", "creatures:milzombie", "creatures:sheep", "creatures:chicken"} +for k, v in pairs(minetest.registered_entities) do + if string.find(k, "^mobs") then + table.insert(SHOOTER_ENTITIES, k) + end +end + +local singleplayer = minetest.is_singleplayer() +if singleplayer then + SHOOTER_ENABLE_BLASTING = true + SHOOTER_ALLOW_ENTITIES = true + SHOOTER_ALLOW_PLAYERS = false +end + +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local worldpath = minetest.get_worldpath() +local input = io.open(modpath.."/shooter.conf", "r") +if input then + dofile(modpath.."/shooter.conf") + input:close() + input = nil +end +input = io.open(worldpath.."/shooter.conf", "r") +if input then + dofile(worldpath.."/shooter.conf") + input:close() + input = nil +end + +local allowed_entities = {} +for _,v in ipairs(SHOOTER_ENTITIES) do + allowed_entities[v] = 1 +end + +local function get_dot_product(v1, v2) + return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z +end + +local function get_particle_pos(p, v, d) + return vector.add(p, vector.multiply(v, {x=d, y=d, z=d})) +end + +function shooter:spawn_particles(pos, texture) + if SHOOTER_ENABLE_PARTICLE_FX == true then + if type(texture) ~= "string" then + texture = SHOOTER_EXPLOSION_TEXTURE + end + local spread = {x=0.1, y=0.1, z=0.1} + minetest.add_particlespawner(15, 0.3, + vector.subtract(pos, spread), vector.add(pos, spread), + {x=-1, y=1, z=-1}, {x=1, y=2, z=1}, + {x=-2, y=-2, z=-2}, {x=2, y=-2, z=2}, + 0.1, 0.75, 1, 2, false, texture + ) + end +end + +function shooter:play_node_sound(node, pos) + local item = minetest.registered_items[node.name] + if item then + if item.sounds then + local spec = item.sounds.dug + if spec then + spec.pos = pos + minetest.sound_play(spec.name, spec) + end + end + end +end + +function shooter:punch_node(pos, def) + local node = minetest.get_node(pos) + if not node then + return + end + local item = minetest.registered_items[node.name] + if not item then + return + end + if SHOOTER_ENABLE_PROTECTION then + if minetest.is_protected(pos, def.name) then + return + end + end + if item.groups then + for k, v in pairs(def.groups) do + local level = item.groups[k] or 0 + if level >= v then + minetest.remove_node(pos) + shooter:play_node_sound(node, pos) + if item.tiles then + if item.tiles[1] then + shooter:spawn_particles(pos, item.tiles[1]) + end + end + break + end + end + end +end + +function shooter:is_valid_object(object) + if object then + if object:is_player() == true then + return SHOOTER_ALLOW_PLAYERS + end + if SHOOTER_ALLOW_ENTITIES == true then + local luaentity = object:get_luaentity() + if luaentity then + if luaentity.name then + if allowed_entities[luaentity.name] then + return true + end + end + end + end + end +end + +function shooter:get_intersect_pos(ray, plane, collisionbox) + local v = vector.subtract(ray.pos, plane.pos) + local r1 = get_dot_product(v, plane.normal) + local r2 = get_dot_product(ray.dir, plane.normal) + if r2 ~= 0 then + local t = -(r1 / r2) + local td = vector.multiply(ray.dir, {x=t, y=t, z=t}) + local pt = vector.add(ray.pos, td) + local pd = vector.subtract(pt, plane.pos) + if math.abs(pd.x) < collisionbox[4] and + math.abs(pd.y) < collisionbox[5] and + math.abs(pd.z) < collisionbox[6] then + return pt + end + end +end + +function shooter:process_round(round) + local target = {object=nil, distance=10000} + local p1 = round.pos + local v1 = round.ray + for _,ref in ipairs(shooter.objects) do + local p2 = vector.add(ref.pos, ref.offset) + if p1 and p2 and ref.name ~= round.name then + local d = vector.distance(p1, p2) + if d < round.def.step and d < target.distance then + local ray = {pos=p1, dir=v1} + local plane = {pos=p2, normal={x=-1, y=0, z=-1}} + local pos = shooter:get_intersect_pos(ray, plane, ref.collisionbox) + if pos then + target.object = ref.object + target.pos = pos + target.distance = d + end + end + end + end + if target.object and target.pos then + local success, pos = minetest.line_of_sight(p1, target.pos, 1) + if success then + local user = minetest.get_player_by_name(round.name) + if user then + target.object:punch(user, nil, round.def.tool_caps, v1) + shooter:spawn_particles(target.pos, SHOOTER_EXPLOSION_TEXTURE) + end + return 1 + elseif pos and SHOOTER_ALLOW_NODES == true then + shooter:punch_node(pos, round.def) + return 1 + end + elseif SHOOTER_ALLOW_NODES == true then + local d = round.def.step + local p2 = vector.add(p1, vector.multiply(v1, {x=d, y=d, z=d})) + local success, pos = minetest.line_of_sight(p1, p2, 1) + if pos then + shooter:punch_node(pos, round.def) + return 1 + end + end +end + +shooter.registered_weapons = shooter.registered_weapons or {} +function shooter:register_weapon(name, def) + shooter.registered_weapons[name] = def + local shots = def.shots or 1 + local wear = math.ceil(65534 / def.rounds) + local max_wear = (def.rounds - 1) * wear + minetest.register_tool(name, { + description = def.description, + inventory_image = def.inventory_image, + on_use = function(itemstack, user, pointed_thing) + if itemstack:get_wear() < max_wear then + def.spec.name = user:get_player_name() + if shots > 1 then + local step = def.spec.tool_caps.full_punch_interval + for i = 0, step * shots, step do + minetest.after(i, function() + shooter:fire_weapon(user, pointed_thing, def.spec) + end) + end + else + shooter:fire_weapon(user, pointed_thing, def.spec) + end + itemstack:add_wear(wear) + else + local inv = user:get_inventory() + if inv then + local stack = "shooter:ammo 1" + if inv:contains_item("main", stack) then + minetest.sound_play("shooter_reload", {object=user}) + inv:remove_item("main", stack) + itemstack:replace(name.." 1 1") + else + minetest.sound_play("shooter_click", {object=user}) + end + end + end + return itemstack + end, + }) +end + +function shooter:fire_weapon(user, pointed_thing, def) + if shooter.shots[def.name] then + if shooter.time < shooter.shots[def.name] then + return + end + end + shooter.shots[def.name] = shooter.time + def.tool_caps.full_punch_interval + minetest.sound_play(def.sound, {object=user, max_hear_distance = 100,}) + minetest.sound_play("distant", { + object = user, + max_hear_distance = 300, + gain = 6, +}) + local v1 = user:get_look_dir() + local p1 = user:getpos() + if not v1 or not p1 then + return + end + minetest.add_particle({x=p1.x, y=p1.y + 1.6, z=p1.z}, + vector.multiply(v1, {x=30, y=30, z=30}), + {x=0, y=0, z=0}, 0.5, 0.25, + false, def.particle + ) + if pointed_thing.type == "node" and SHOOTER_ALLOW_NODES == true then + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + shooter:punch_node(pos, def) + elseif pointed_thing.type == "object" then + local object = pointed_thing.ref + if shooter:is_valid_object(object) == true then + object:punch(user, nil, def.tool_caps, v1) + local p2 = object:getpos() + local pp = get_particle_pos(p1, v1, vector.distance(p1, p2)) + pp.y = pp.y + 1.75 + shooter:spawn_particles(pp, SHOOTER_EXPLOSION_TEXTURE) + end + else + shooter:update_objects() + table.insert(shooter.rounds, { + name = def.name, + pos = vector.add(p1, {x=0, y=1.75, z=0}), + ray = v1, + dist = 0, + def = def, + }) + end +end + +function shooter:load_objects() + local objects = {} + if SHOOTER_ALLOW_PLAYERS == true then + local players = minetest.get_connected_players() + for _,player in ipairs(players) do + local pos = player:getpos() + local name = player:get_player_name() + local hp = player:get_hp() or 0 + if pos and name and hp > 0 then + table.insert(objects, { + name = name, + object = player, + pos = pos, + collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25}, + offset = SHOOTER_PLAYER_OFFSET, + }) + end + end + end + if SHOOTER_ALLOW_ENTITIES == true then + for _,ref in pairs(minetest.luaentities) do + if ref.object and ref.name then + if allowed_entities[ref.name] then + local pos = ref.object:getpos() + local hp = ref.object:get_hp() or 0 + if pos and hp > 0 then + local def = minetest.registered_entities[ref.name] + table.insert(objects, { + name = ref.name, + object = ref.object, + pos = pos, + collisionbox = def.collisionbox or {0,0,0, 0,0,0}, + offset = SHOOTER_ENTITY_OFFSET, + }) + end + end + end + end + end + shooter.reload_time = shooter.time + shooter.update_time = shooter.time + shooter.objects = {} + for _,v in ipairs(objects) do + table.insert(shooter.objects, v) + end +end + +function shooter:update_objects() + if shooter.time - shooter.reload_time > SHOOTER_OBJECT_RELOAD_TIME then + shooter:load_objects() + elseif shooter.time - shooter.update_time > SHOOTER_OBJECT_UPDATE_TIME then + for i, ref in ipairs(shooter.objects) do + if ref.object then + local pos = ref.object:getpos() + if pos then + shooter.objects[i].pos = pos + end + else + table.remove(shooter.objects, i) + end + end + shooter.update_time = shooter.time + end +end + +function shooter:blast(pos, radius, fleshy, distance, user) + if not user then + return + end + local name = user:get_player_name() + local pos = vector.round(pos) + local p1 = vector.subtract(pos, radius) + local p2 = vector.add(pos, radius) + minetest.sound_play("tnt_explode", {pos=pos, gain=1}) + if SHOOTER_ALLOW_NODES and SHOOTER_ENABLE_BLASTING then + if SHOOTER_ENABLE_PROTECTION then + if not minetest.is_protected(pos, name) then + minetest.set_node(pos, {name="tnt:boom"}) + end + else + minetest.set_node(pos, {name="tnt:boom"}) + end + end + if SHOOTER_ENABLE_PARTICLE_FX == true then + minetest.add_particlespawner(50, 0.1, + p1, p2, {x=-0, y=-0, z=-0}, {x=0, y=0, z=0}, + {x=-0.5, y=5, z=-0.5}, {x=0.5, y=5, z=0.5}, + 0.1, 1, 8, 15, false, "tnt_smoke.png" + ) + end + local objects = minetest.get_objects_inside_radius(pos, distance) + for _,obj in ipairs(objects) do + if (obj:is_player() and SHOOTER_ALLOW_PLAYERS == true) or + (obj:get_luaentity() and SHOOTER_ALLOW_ENTITIES == true and + obj:get_luaentity().name ~= "__builtin:item") then + local obj_pos = obj:getpos() + local dist = vector.distance(obj_pos, pos) + local damage = (fleshy * 0.5 ^ dist) * 2 + if dist ~= 0 then + obj_pos.y = obj_pos.y + 1.7 + blast_pos = {x=pos.x, y=pos.y + 4, z=pos.z} + if minetest.line_of_sight(obj_pos, blast_pos, 1) then + obj:punch(user, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy=damage}, + }) + end + end + end + end + if SHOOTER_ALLOW_NODES and SHOOTER_ENABLE_BLASTING then + local pr = PseudoRandom(os.time()) + local vm = VoxelManip() + local min, max = vm:read_from_map(p1, p2) + local area = VoxelArea:new({MinEdge=min, MaxEdge=max}) + local data = vm:get_data() + local c_air = minetest.get_content_id("air") + for z = -radius, radius do + for y = -radius, radius do + local vp = {x=pos.x - radius, y=pos.y + y, z=pos.z + z} + local vi = area:index(vp.x, vp.y, vp.z) + for x = -radius, radius do + if (x * x) + (y * y) + (z * z) <= + (radius * radius) + pr:next(-radius, radius) then + if SHOOTER_ENABLE_PROTECTION then + if not minetest.is_protected(vp, name) then + data[vi] = c_air + end + else + data[vi] = c_air + end + end + vi = vi + 1 + end + end + end + vm:set_data(data) + vm:update_liquids() + vm:write_to_map() + vm:update_map() + end +end + +if not singleplayer and SHOOTER_ADMIN_WEAPONS then + local timer = 0 + local shooting = false + minetest.register_globalstep(function(dtime) + if not shooting then + timer = timer+dtime + if timer < 2 then + return + end + timer = 0 + end + shooting = false + for _,player in pairs(minetest.get_connected_players()) do + if player:get_player_control().LMB then + local name = player:get_player_name() + if minetest.check_player_privs(name, {server=true}) then + local spec = shooter.registered_weapons[player:get_wielded_item():get_name()] + if spec then + spec = spec.spec + shooter.shots[name] = false + spec.name = name + shooter:fire_weapon(player, {}, spec) + shooting = true + end + end + end + end + end) +end diff --git a/mods/shooter/sounds/distant.ogg b/mods/shooter/sounds/distant.ogg new file mode 100644 index 0000000..1abc7ca Binary files /dev/null and b/mods/shooter/sounds/distant.ogg differ diff --git a/mods/shooter/sounds/shooter_click.ogg b/mods/shooter/sounds/shooter_click.ogg new file mode 100644 index 0000000..a5d1243 Binary files /dev/null and b/mods/shooter/sounds/shooter_click.ogg differ diff --git a/mods/shooter/sounds/shooter_flare_burn.ogg b/mods/shooter/sounds/shooter_flare_burn.ogg new file mode 100644 index 0000000..68d6e10 Binary files /dev/null and b/mods/shooter/sounds/shooter_flare_burn.ogg differ diff --git a/mods/shooter/sounds/shooter_flare_fire.ogg b/mods/shooter/sounds/shooter_flare_fire.ogg new file mode 100644 index 0000000..e0c625b Binary files /dev/null and b/mods/shooter/sounds/shooter_flare_fire.ogg differ diff --git a/mods/shooter/sounds/shooter_pistol.ogg b/mods/shooter/sounds/shooter_pistol.ogg new file mode 100644 index 0000000..0d3f464 Binary files /dev/null and b/mods/shooter/sounds/shooter_pistol.ogg differ diff --git a/mods/shooter/sounds/shooter_reload.ogg b/mods/shooter/sounds/shooter_reload.ogg new file mode 100644 index 0000000..47f7245 Binary files /dev/null and b/mods/shooter/sounds/shooter_reload.ogg differ diff --git a/mods/shooter/sounds/shooter_rifle.ogg b/mods/shooter/sounds/shooter_rifle.ogg new file mode 100644 index 0000000..1ea68bf Binary files /dev/null and b/mods/shooter/sounds/shooter_rifle.ogg differ diff --git a/mods/shooter/sounds/shooter_rocket_fire.ogg b/mods/shooter/sounds/shooter_rocket_fire.ogg new file mode 100644 index 0000000..57252f3 Binary files /dev/null and b/mods/shooter/sounds/shooter_rocket_fire.ogg differ diff --git a/mods/shooter/sounds/shooter_shotgun.ogg b/mods/shooter/sounds/shooter_shotgun.ogg new file mode 100644 index 0000000..22aa8d4 Binary files /dev/null and b/mods/shooter/sounds/shooter_shotgun.ogg differ diff --git a/mods/shooter/sounds/shooter_throw.ogg b/mods/shooter/sounds/shooter_throw.ogg new file mode 100644 index 0000000..9ce9176 Binary files /dev/null and b/mods/shooter/sounds/shooter_throw.ogg differ diff --git a/mods/shooter/textures/shooter_ammo.png b/mods/shooter/textures/shooter_ammo.png new file mode 100644 index 0000000..daa348e Binary files /dev/null and b/mods/shooter/textures/shooter_ammo.png differ diff --git a/mods/shooter/textures/shooter_arrow_inv.png b/mods/shooter/textures/shooter_arrow_inv.png new file mode 100644 index 0000000..65da440 Binary files /dev/null and b/mods/shooter/textures/shooter_arrow_inv.png differ diff --git a/mods/shooter/textures/shooter_arrow_uv.png b/mods/shooter/textures/shooter_arrow_uv.png new file mode 100644 index 0000000..0225e43 Binary files /dev/null and b/mods/shooter/textures/shooter_arrow_uv.png differ diff --git a/mods/shooter/textures/shooter_bullet.png b/mods/shooter/textures/shooter_bullet.png new file mode 100644 index 0000000..c8b8e30 Binary files /dev/null and b/mods/shooter/textures/shooter_bullet.png differ diff --git a/mods/shooter/textures/shooter_cap.png b/mods/shooter/textures/shooter_cap.png new file mode 100644 index 0000000..692c1d5 Binary files /dev/null and b/mods/shooter/textures/shooter_cap.png differ diff --git a/mods/shooter/textures/shooter_crossbow.png b/mods/shooter/textures/shooter_crossbow.png new file mode 100644 index 0000000..f832c26 Binary files /dev/null and b/mods/shooter/textures/shooter_crossbow.png differ diff --git a/mods/shooter/textures/shooter_crossbow_loaded.png b/mods/shooter/textures/shooter_crossbow_loaded.png new file mode 100644 index 0000000..77dc04a Binary files /dev/null and b/mods/shooter/textures/shooter_crossbow_loaded.png differ diff --git a/mods/shooter/textures/shooter_flare.png b/mods/shooter/textures/shooter_flare.png new file mode 100644 index 0000000..98fd967 Binary files /dev/null and b/mods/shooter/textures/shooter_flare.png differ diff --git a/mods/shooter/textures/shooter_flare_inv.png b/mods/shooter/textures/shooter_flare_inv.png new file mode 100644 index 0000000..532a7df Binary files /dev/null and b/mods/shooter/textures/shooter_flare_inv.png differ diff --git a/mods/shooter/textures/shooter_flare_light.png b/mods/shooter/textures/shooter_flare_light.png new file mode 100644 index 0000000..afed6ba Binary files /dev/null and b/mods/shooter/textures/shooter_flare_light.png differ diff --git a/mods/shooter/textures/shooter_flare_particle.png b/mods/shooter/textures/shooter_flare_particle.png new file mode 100644 index 0000000..8e38165 Binary files /dev/null and b/mods/shooter/textures/shooter_flare_particle.png differ diff --git a/mods/shooter/textures/shooter_flaregun.png b/mods/shooter/textures/shooter_flaregun.png new file mode 100644 index 0000000..e654ab3 Binary files /dev/null and b/mods/shooter/textures/shooter_flaregun.png differ diff --git a/mods/shooter/textures/shooter_grenade.png b/mods/shooter/textures/shooter_grenade.png new file mode 100644 index 0000000..fd13447 Binary files /dev/null and b/mods/shooter/textures/shooter_grenade.png differ diff --git a/mods/shooter/textures/shooter_hand_grenade.png b/mods/shooter/textures/shooter_hand_grenade.png new file mode 100644 index 0000000..f0ade73 Binary files /dev/null and b/mods/shooter/textures/shooter_hand_grenade.png differ diff --git a/mods/shooter/textures/shooter_hit.png b/mods/shooter/textures/shooter_hit.png new file mode 100644 index 0000000..46d95b2 Binary files /dev/null and b/mods/shooter/textures/shooter_hit.png differ diff --git a/mods/shooter/textures/shooter_hook.png b/mods/shooter/textures/shooter_hook.png new file mode 100644 index 0000000..15311e5 Binary files /dev/null and b/mods/shooter/textures/shooter_hook.png differ diff --git a/mods/shooter/textures/shooter_hook_gun.png b/mods/shooter/textures/shooter_hook_gun.png new file mode 100644 index 0000000..3687ac4 Binary files /dev/null and b/mods/shooter/textures/shooter_hook_gun.png differ diff --git a/mods/shooter/textures/shooter_hook_gun_loaded.png b/mods/shooter/textures/shooter_hook_gun_loaded.png new file mode 100644 index 0000000..28cdb3b Binary files /dev/null and b/mods/shooter/textures/shooter_hook_gun_loaded.png differ diff --git a/mods/shooter/textures/shooter_pistol.png b/mods/shooter/textures/shooter_pistol.png new file mode 100644 index 0000000..56c821f Binary files /dev/null and b/mods/shooter/textures/shooter_pistol.png differ diff --git a/mods/shooter/textures/shooter_rifle.png b/mods/shooter/textures/shooter_rifle.png new file mode 100644 index 0000000..451ed5f Binary files /dev/null and b/mods/shooter/textures/shooter_rifle.png differ diff --git a/mods/shooter/textures/shooter_rocket_gun.png b/mods/shooter/textures/shooter_rocket_gun.png new file mode 100644 index 0000000..84738d4 Binary files /dev/null and b/mods/shooter/textures/shooter_rocket_gun.png differ diff --git a/mods/shooter/textures/shooter_rocket_gun_loaded.png b/mods/shooter/textures/shooter_rocket_gun_loaded.png new file mode 100644 index 0000000..3b2dc4d Binary files /dev/null and b/mods/shooter/textures/shooter_rocket_gun_loaded.png differ diff --git a/mods/shooter/textures/shooter_rocket_inv.png b/mods/shooter/textures/shooter_rocket_inv.png new file mode 100644 index 0000000..a96fa46 Binary files /dev/null and b/mods/shooter/textures/shooter_rocket_inv.png differ diff --git a/mods/shooter/textures/shooter_shotgun.png b/mods/shooter/textures/shooter_shotgun.png new file mode 100644 index 0000000..903223b Binary files /dev/null and b/mods/shooter/textures/shooter_shotgun.png differ diff --git a/mods/shooter/textures/shooter_smgun.png b/mods/shooter/textures/shooter_smgun.png new file mode 100644 index 0000000..98886e9 Binary files /dev/null and b/mods/shooter/textures/shooter_smgun.png differ diff --git a/mods/shooter/textures/shooter_turret_base.png b/mods/shooter/textures/shooter_turret_base.png new file mode 100644 index 0000000..fd13447 Binary files /dev/null and b/mods/shooter/textures/shooter_turret_base.png differ diff --git a/mods/shooter/textures/shooter_turret_gun.png b/mods/shooter/textures/shooter_turret_gun.png new file mode 100644 index 0000000..97e3e9f Binary files /dev/null and b/mods/shooter/textures/shooter_turret_gun.png differ diff --git a/mods/shooter/textures/shooter_turret_uv.png b/mods/shooter/textures/shooter_turret_uv.png new file mode 100644 index 0000000..c6bcde2 Binary files /dev/null and b/mods/shooter/textures/shooter_turret_uv.png differ diff --git a/mods/shooter/turret.lua b/mods/shooter/turret.lua new file mode 100644 index 0000000..67472d9 --- /dev/null +++ b/mods/shooter/turret.lua @@ -0,0 +1,266 @@ +local function get_turret_entity(pos) + local entity = nil + local objects = minetest.get_objects_inside_radius(pos, 1) + for _, obj in ipairs(objects) do + local ent = obj:get_luaentity() + if ent then + if ent.name == "shooter:turret_entity" then + -- Remove duplicates + if entity then + obj:remove() + else + entity = ent + end + end + end + end + return entity +end + +minetest.register_entity("shooter:tnt_entity", { + physical = false, + timer = 0, + visual = "cube", + visual_size = {x=1/4, y=1/4}, + textures = { + "tnt_top.png", + "tnt_bottom.png", + "tnt_side.png", + "tnt_side.png", + "tnt_side.png", + "tnt_side.png", + }, + player = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + if minetest.get_node(pos).name ~= "air" then + self.object:remove() + shooter:blast(pos, 4, 80, 10, self.player) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_entity("shooter:turret_entity", { + physical = true, + visual = "mesh", + mesh = "shooter_turret.b3d", + visual_size = {x=1, y=1}, + collisionbox = {-0.3, 0.5,-0.3, 0.3,1,0.3}, + textures = { + "shooter_turret_uv.png", + }, + timer = 0, + player = nil, + pitch = 40, + yaw = 0, + firing = false, + on_activate = function(self, staticdata) + self.pos = self.object:getpos() + self.yaw = self.object:getyaw() + if minetest.get_node(self.pos).name ~= "shooter:turret" then + self.object:remove() + return + end + self.object:set_animation({x=self.pitch, y=self.pitch}, 0) + self.object:set_armor_groups({fleshy=0}) + -- Remove duplicates + get_turret_entity(self.pos) + end, + on_rightclick = function(self, clicker) + if self.player then + self.player:set_detach() + self.player = nil + else + clicker:set_attach(self.object, "", {x=0,y=5,z=-8}, {x=0,y=0,z=0}) + self.player = clicker + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer < 0.1 then + return + end + if self.player then + local pitch = self.pitch + local yaw = self.object:getyaw() + local ctrl = self.player:get_player_control() + local step = 2 + if ctrl then + if ctrl.sneak then + step = 1 + if ctrl.jump then + if self.firing == false then + self:fire() + self.firing = true + end + else + self.firing = false + end + end + if ctrl.down then + pitch = pitch + 1 * step + elseif ctrl.up then + pitch = pitch - 1 * step + end + if ctrl.left then + yaw = yaw + 0.025 * step + elseif ctrl.right then + yaw = yaw - 0.025 * step + end + if pitch < 0 then + pitch = 0 + elseif pitch > 90 then + pitch = 90 + end + if self.pitch ~= pitch then + self.object:set_animation({x=pitch, y=pitch}, 0) + self.pitch = pitch + end + if self.yaw ~= yaw then + self.object:setyaw(yaw) + self.yaw = yaw + end + end + end + self.timer = 0 + end, + fire = function(self) + local meta = minetest.get_meta(self.pos) + local inv = meta:get_inventory() + if not inv then + return + end + if not inv:contains_item("main", "tnt:tnt") then + minetest.sound_play("shooter_click", {object=self.object}) + return + end + minetest.sound_play("shooter_shotgun", {object=self.object}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "tnt:tnt") + end + local pitch = math.rad(self.pitch - 40) + local len = math.cos(pitch) + local dir = vector.normalize({ + x = len * math.sin(-self.yaw), + y = math.sin(pitch), + z = len * math.cos(self.yaw), + }) + local pos = {x=self.pos.x, y=self.pos.y + 0.87, z=self.pos.z} + pos = vector.add(pos, {x=dir.x * 1.5, y=dir.y * 1.5, z=dir.z * 1.5}) + local obj = minetest.add_entity(pos, "shooter:tnt_entity") + if obj then + local ent = obj:get_luaentity() + if ent then + minetest.sound_play("shooter_rocket_fire", {object=obj}) + ent.player = self.player + obj:setyaw(self.yaw) + obj:setvelocity({x=dir.x * 20, y=dir.y * 20, z=dir.z * 20}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + end + end + if SHOOTER_ENABLE_PARTICLE_FX == true then + minetest.add_particlespawner(10, 0.1, + {x=pos.x - 1, y=pos.y - 1, z=pos.z - 1}, + {x=pos.x + 1, y=pos.y + 1, z=pos.z + 1}, + {x=0, y=0, z=0}, {x=0, y=0, z=0}, + {x=-0.5, y=-0.5, z=-0.5}, {x=0.5, y=0.5, z=0.5}, + 0.1, 1, 8, 15, false, "tnt_smoke.png" + ) + end + end +}) + +minetest.register_node("shooter:turret", { + description = "Turret Gun", + tiles = {"shooter_turret_base.png"}, + inventory_image = "shooter_turret_gun.png", + wield_image = "shooter_turret_gun.png", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3}, + node_box = { + type = "fixed", + fixed = { + {-1/8, 1/8, -1/8, 1/8, 1/2, 1/8}, + {-5/16, 0, -5/16, 5/16, 1/8, 5/16}, + {-3/8, -1/2, -3/8, -1/4, 0, -1/4}, + {1/4, -1/2, 1/4, 3/8, 0, 3/8}, + {1/4, -1/2, -3/8, 3/8, 0, -1/4}, + {-3/8, -1/2, 1/4, -1/4, 0, 3/8}, + }, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "size[8,9]".. + "list[current_name;main;2,0;4,4;]".. + "list[current_player;main;0,5;8,4;]" + ) + meta:set_string("infotext", "Turret Gun") + local inv = meta:get_inventory() + inv:set_size("main", 16) + end, + after_place_node = function(pos, placer) + local node = minetest.get_node({x=pos.x, y=pos.y + 1, z=pos.z}) + if node.name == "air" then + if not get_turret_entity(pos) then + minetest.add_entity(pos, "shooter:turret_entity") + end + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos); + local inv = meta:get_inventory() + return inv:is_empty("main") + end, + after_destruct = function(pos, oldnode) + local ent = get_turret_entity(pos) + if ent then + ent.object:remove() + end + end, + mesecons = { + effector = { + action_on = function(pos, node) + local ent = get_turret_entity(pos) + if ent then + if ent.firing == false then + ent:fire() + ent.firing = true + end + end + end, + action_off = function(pos, node) + local ent = get_turret_entity(pos) + if ent then + ent.firing = false + end + end, + }, + }, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:turret", + recipe = { + {"default:bronze_ingot", "default:bronze_ingot", "default:steel_ingot"}, + {"", "default:bronze_ingot", "default:steel_ingot"}, + {"", "default:diamond", ""}, + }, + }) +end + diff --git a/mods/signs/README.txt b/mods/signs/README.txt new file mode 100644 index 0000000..66e3b2b --- /dev/null +++ b/mods/signs/README.txt @@ -0,0 +1,43 @@ +=== SIGNS-MOD for MINETEST-C55=== +by xyz +modified by PilzAdam + +Introduction: +This mod adds signs to Minetest, wich you can read without pointing at +the sign. The text is integrated into the 3D world. + +How to install: +Unzip the archive an place it in minetest-base-directory/mods/minetest/ +if you have a windows client or a linux run-in-place client. If you have +a linux system-wide instalation place it in ~/.minetest/mods/minetest/. +If you want to install this mod only in one world create the folder +worldmods/ in your worlddirectory. +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods + +How to use the mod: +Craft a sign like the default signs and place them. Rightclick it and enter +your text. You can use " | " to create a newline. Hitting enter or +clicking proceed will save the text and add it to the sign. +If the text of a sign disapears just rightclick it and hit enter again. + +License: +Sourcecode: WTFPL (see below) +Font: 04b-03 (http://04.jp.org/) + +See also: +http://minetest.net/ + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/mods/signs/changelog.txt b/mods/signs/changelog.txt new file mode 100644 index 0000000..271575d --- /dev/null +++ b/mods/signs/changelog.txt @@ -0,0 +1,10 @@ +This mod is modified by PilzAdam + +Changes: +- Remove shadows under signs +- New input system: - There is just one text line that automatically will be splitted up to the lines on the sign + - You can force a newline with " | " +- It overrides the default signs +- Make it stackable + +License of code: WTFPL diff --git a/mods/signs/characters b/mods/signs/characters new file mode 100644 index 0000000..83d6505 --- /dev/null +++ b/mods/signs/characters @@ -0,0 +1,279 @@ +A +_a_ +7 +B +_b_ +5 +C +_c_ +6 +D +_d_ +6 +E +_e_ +5 +F +_f_ +5 +G +_g_ +6 +H +_h_ +6 +I +_i_ +1 +J +_j_ +4 +K +_k_ +5 +L +_l_ +4 +M +_m_ +7 +N +_n_ +6 +O +_o_ +6 +P +_p_ +5 +Q +_q_ +7 +R +_r_ +5 +S +_s_ +5 +T +_t_ +5 +U +_u_ +6 +V +_v_ +7 +W +_w_ +9 +X +_x_ +5 +Y +_y_ +7 +Z +_z_ +5 +a +_a +5 +b +_b +5 +c +_c +4 +d +_d +5 +e +_e +4 +f +_f +4 +g +_g +5 +h +_h +5 +i +_i +1 +j +_j +1 +k +_k +4 +l +_l +1 +m +_m +7 +n +_n +5 +o +_o +5 +p +_p +5 +q +_q +5 +r +_r +3 +s +_s +4 +t +_t +3 +u +_u +4 +v +_v +5 +w +_w +7 +x +_x +5 +y +_y +4 +z +_z +4 + +_sp +2 +0 +_0 +4 +1 +_1 +2 +2 +_2 +4 +3 +_3 +4 +4 +_4 +4 +5 +_5 +4 +6 +_6 +4 +7 +_7 +4 +8 +_8 +4 +9 +_9 +4 +( +_bl +2 +) +_br +2 +{ +_cl +3 +} +_cr +3 +[ +_sl +2 +] +_sr +2 +' +_ap +1 +! +_ex +1 +? +_qu +4 +@ +_at +5 +# +_hs +5 +$ +_dl +4 +% +_pr +5 +^ +_ca +3 +& +_am +5 +* +_as +3 +_ +_un +3 ++ +_ps +3 +- +_mn +3 += +_eq +3 +; +_sm +1 +, +_cm +2 +" +_qo +3 +/ +_dv +5 +~ +_tl +4 +< +_lt +3 +> +_gt +3 +\ +_re +5 +| +_vb +1 +. +_dt +1 diff --git a/mods/signs/depends.txt b/mods/signs/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/signs/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/signs/init.lua b/mods/signs/init.lua new file mode 100644 index 0000000..b3b0cdf --- /dev/null +++ b/mods/signs/init.lua @@ -0,0 +1,306 @@ +-- Font: 04.jp.org + +-- load characters map +local chars_file = io.open(minetest.get_modpath("signs").."/characters", "r") +local charmap = {} +local max_chars = 16 +if not chars_file then + print("[signs] E: character map file not found") +else + while true do + local char = chars_file:read("*l") + if char == nil then + break + end + local img = chars_file:read("*l") + chars_file:read("*l") + charmap[char] = img + end +end + +local signs = { + {delta = {x = 0, y = 0, z = 0.399}, yaw = 0}, + {delta = {x = 0.399, y = 0, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = -0.399}, yaw = math.pi}, + {delta = {x = -0.399, y = 0, z = 0}, yaw = math.pi / 2}, +} + +local signs_yard = { + {delta = {x = 0, y = 0, z = -0.05}, yaw = 0}, + {delta = {x = -0.05, y = 0, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = 0.05}, yaw = math.pi}, + {delta = {x = 0.05, y = 0, z = 0}, yaw = math.pi / 2}, +} + +local sign_groups = {choppy=2, dig_immediate=2} + +local construct_sign = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + meta:set_string("infotext", "") +end + +local destruct_sign = function(pos) + local objects = minetest.env:get_objects_inside_radius(pos, 0.5) + for _, v in ipairs(objects) do + if v:get_entity_name() == "signs:text" then + v:remove() + end + end +end + +local update_sign = function(pos, fields) + local meta = minetest.env:get_meta(pos) + meta:set_string("infotext", "") + if fields then + meta:set_string("text", fields.text) + end + local text = meta:get_string("text") + local objects = minetest.env:get_objects_inside_radius(pos, 0.5) + for _, v in ipairs(objects) do + if v:get_entity_name() == "signs:text" then + v:set_properties({textures={generate_texture(create_lines(text))}}) + return + end + end + + -- if there is no entity + local sign_info + if minetest.env:get_node(pos).name == "signs:sign_yard" then + sign_info = signs_yard[minetest.env:get_node(pos).param2 + 1] + elseif minetest.env:get_node(pos).name == "default:sign_wall_wood" then + sign_info = signs[minetest.env:get_node(pos).param2 + 1] + end + if sign_info == nil then + return + end + local text = minetest.env:add_entity({x = pos.x + sign_info.delta.x, + y = pos.y + sign_info.delta.y, + z = pos.z + sign_info.delta.z}, "signs:text") + text:setyaw(sign_info.yaw) +end + +minetest.register_node(":default:sign_wall_wood", { + description = "Sign", + inventory_image = "signs_inv.png", + wield_image = "signs_inv.png", + node_placement_prediction = "", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + selection_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"}, + groups = sign_groups, + + on_place = function(itemstack, placer, pointed_thing) + local above = pointed_thing.above + local under = pointed_thing.under + local dir = {x = under.x - above.x, + y = under.y - above.y, + z = under.z - above.z} + + local wdir = minetest.dir_to_wallmounted(dir) + + local placer_pos = placer:getpos() + if placer_pos then + dir = { + x = above.x - placer_pos.x, + y = above.y - placer_pos.y, + z = above.z - placer_pos.z + } + end + + local fdir = minetest.dir_to_facedir(dir) + + local sign_info + + if minetest.env:get_node(above).name == "air" then + + if wdir == 0 then + --how would you add sign to ceiling? + minetest.env:add_item(above, "default:sign_wall_wood") + itemstack:take_item() + return itemstack + elseif wdir == 1 then + minetest.env:add_node(above, {name = "signs:sign_yard", param2 = fdir}) + sign_info = signs_yard[fdir + 1] + else + minetest.env:add_node(above, {name = "default:sign_wall_wood", param2 = fdir}) + sign_info = signs[fdir + 1] + end + + local text = minetest.env:add_entity({x = above.x + sign_info.delta.x, + y = above.y + sign_info.delta.y, + z = above.z + sign_info.delta.z}, "signs:text") + text:setyaw(sign_info.yaw) + + itemstack:take_item() + return itemstack + end + end, + on_construct = function(pos) + construct_sign(pos) + end, + on_destruct = function(pos) + destruct_sign(pos) + end, + on_receive_fields = function(pos, formname, fields, sender) + update_sign(pos, fields) + end, + on_punch = function(pos, node, puncher) + update_sign(pos) + end, +}) + +minetest.register_node("signs:sign_yard", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = { + {-0.45, -0.15, -0.049, 0.45, 0.45, 0.049}, + {-0.05, -0.5, -0.049, 0.05, -0.15, 0.049} + }}, + selection_box = {type = "fixed", fixed = {-0.45, -0.15, -0.049, 0.45, 0.45, 0.049}}, + tiles = {"signs_top.png", "signs_bottom.png", "signs_side.png", "signs_side.png", "signs_back.png", "signs_front.png"}, + groups = {choppy=2, dig_immediate=2}, + drop = "default:sign_wall_wood", + + on_construct = function(pos) + construct_sign(pos) + end, + on_destruct = function(pos) + destruct_sign(pos) + end, + on_receive_fields = function(pos, formname, fields, sender) + update_sign(pos, fields) + end, + on_punch = function(pos, node, puncher) + update_sign(pos) + end, +}) + +minetest.register_entity("signs:text", { + collisionbox = { 0, 0, 0, 0, 0, 0 }, + visual = "upright_sprite", + textures = {}, + + on_activate = function(self) + local meta = minetest.env:get_meta(self.object:getpos()) + local text = meta:get_string("text") + self.object:set_properties({textures={generate_texture(create_lines(text))}}) + end +}) + +-- CONSTANTS +local SIGN_WITH = 110 +local SIGN_PADDING = 8 + +local LINE_LENGTH = 16 +local NUMBER_OF_LINES = 4 + +local LINE_HEIGHT = 14 +local CHAR_WIDTH = 5 + +string_to_array = function(str) + local tab = {} + for i=1,string.len(str) do + table.insert(tab, string.sub(str, i,i)) + end + return tab +end + +string_to_word_array = function(str) + local tab = {} + local current = 1 + tab[1] = "" + for _,char in ipairs(string_to_array(str)) do + if char ~= " " then + tab[current] = tab[current]..char + else + current = current+1 + tab[current] = "" + end + end + return tab +end + +create_lines = function(text) + local line = "" + local line_num = 1 + local tab = {} + for _,word in ipairs(string_to_word_array(text)) do + if string.len(line)+string.len(word) < LINE_LENGTH and word ~= "|" then + if line ~= "" then + line = line.." "..word + else + line = word + end + else + table.insert(tab, line) + if word ~= "|" then + line = word + else + line = "" + end + line_num = line_num+1 + if line_num > NUMBER_OF_LINES then + return tab + end + end + end + table.insert(tab, line) + return tab +end + +generate_texture = function(lines) + local texture = "[combine:"..SIGN_WITH.."x"..SIGN_WITH + local ypos = 12 + for i = 1, #lines do + texture = texture..generate_line(lines[i], ypos) + ypos = ypos + LINE_HEIGHT + end + return texture +end + +generate_line = function(s, ypos) + local i = 1 + local parsed = {} + local width = 0 + local chars = 0 + while chars < max_chars and i <= #s do + local file = nil + if charmap[s:sub(i, i)] ~= nil then + file = charmap[s:sub(i, i)] + i = i + 1 + elseif i < #s and charmap[s:sub(i, i + 1)] ~= nil then + file = charmap[s:sub(i, i + 1)] + i = i + 2 + else + print("[signs] W: unknown symbol in '"..s.."' at "..i.." (probably "..s:sub(i, i)..")") + i = i + 1 + end + if file ~= nil then + width = width + CHAR_WIDTH + table.insert(parsed, file) + chars = chars + 1 + end + end + width = width - 1 + + local texture = "" + local xpos = math.floor((SIGN_WITH - 2 * SIGN_PADDING - width) / 2 + SIGN_PADDING) + for i = 1, #parsed do + texture = texture..":"..xpos..","..ypos.."="..parsed[i]..".png" + xpos = xpos + CHAR_WIDTH + 1 + end + return texture +end +modpath=minetest.get_modpath("signs") + +dofile(modpath.."/steelsign.lua") +if minetest.setting_get("log_mods") then + minetest.log("action", "signs loaded") +end diff --git a/mods/signs/shooter/.gitignore b/mods/signs/shooter/.gitignore new file mode 100644 index 0000000..cba1856 --- /dev/null +++ b/mods/signs/shooter/.gitignore @@ -0,0 +1,8 @@ +## Generic ignorable patterns and files +*~ +.*.swp +*bak* +tags +*.vim +shooter.conf + diff --git a/mods/signs/shooter/bow.lua b/mods/signs/shooter/bow.lua new file mode 100644 index 0000000..3669f4d --- /dev/null +++ b/mods/signs/shooter/bow.lua @@ -0,0 +1,289 @@ +SHOOTER_CROSSBOW_USES = 50 +SHOOTER_ARROW_TOOL_CAPS = {damage_groups={fleshy=2}} +SHOOTER_ARROW_LIFETIME = 180 -- 3 minutes + +minetest.register_alias("shooter:arrow", "shooter:arrow_white") +minetest.register_alias("shooter:bow_loaded", "shooter:bow_loaded_white") + +local dye_basecolors = (dye and dye.basecolors) or + {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} + +local function get_animation_frame(dir) + local angle = math.atan(dir.y) + local frame = 90 - math.floor(angle * 360 / math.pi) + if frame < 1 then + frame = 1 + elseif frame > 180 then + frame = 180 + end + return frame +end + +local function get_target_pos(p1, p2, dir, offset) + local d = vector.distance(p1, p2) - offset + local td = vector.multiply(dir, {x=d, y=d, z=d}) + return vector.add(p1, td) +end + +local function punch_object(puncher, object) + if puncher and shooter:is_valid_object(object) then + if puncher ~= object then + local dir = puncher:get_look_dir() + local p1 = puncher:getpos() + local p2 = object:getpos() + local tpos = get_target_pos(p1, p2, dir, 0) + shooter:spawn_particles(tpos, SHOOTER_EXPLOSION_TEXTURE) + object:punch(puncher, nil, SHOOTER_ARROW_TOOL_CAPS, dir) + end + end +end + +local function stop_arrow(object, pos, stuck) + local acceleration = {x=0, y=-10, z=0} + if stuck == true then + pos = pos or object:getpos() + acceleration = {x=0, y=0, z=0} + object:moveto(pos) + end + object:set_properties({ + physical = true, + collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8}, + }) + object:setvelocity({x=0, y=0, z=0}) + object:setacceleration(acceleration) +end + +-- name is the overlay texture name, colour is used to select the wool texture +local function get_texture(name, colour) + return "shooter_"..name..".png^wool_"..colour..".png^shooter_"..name..".png^[makealpha:255,126,126" +end + +minetest.register_entity("shooter:arrow_entity", { + physical = false, + visual = "mesh", + mesh = "shooter_arrow.b3d", + visual_size = {x=1, y=1}, + textures = { + get_texture("arrow_uv", "white"), + }, + color = "white", + timer = 0, + lifetime = SHOOTER_ARROW_LIFETIME, + player = nil, + state = "init", + node_pos = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_punch = function(self, puncher) + if puncher then + if puncher:is_player() then + local stack = "shooter:arrow_"..self.color + local inv = puncher:get_inventory() + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + self.object:remove() + end + end + end + end, + on_step = function(self, dtime) + if self.state == "init" then + return + end + self.timer = self.timer + dtime + self.lifetime = self.lifetime - dtime + if self.lifetime < 0 then + self.object:remove() + return + elseif self.state == "dropped" then + return + elseif self.state == "stuck" then + if self.timer > 1 then + if self.node_pos then + local node = minetest.get_node(self.node_pos) + if node.name then + local item = minetest.registered_items[node.name] + if item then + if not item.walkable then + self.state = "dropped" + stop_arrow(self.object) + return + end + end + end + end + self.timer = 0 + end + return + end + if self.timer > 0.2 then + local pos = self.object:getpos() + local dir = vector.normalize(self.object:getvelocity()) + local frame = get_animation_frame(dir) + self.object:set_animation({x=frame, y=frame}, 0) + local objects = minetest.get_objects_inside_radius(pos, 5) + for _,obj in ipairs(objects) do + if shooter:is_valid_object(obj) then + local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25} + local offset = SHOOTER_PLAYER_OFFSET + if not obj:is_player() then + offset = SHOOTER_ENTITY_OFFSET + local ent = obj:get_luaentity() + if ent then + local def = minetest.registered_entities[ent.name] + collisionbox = def.collisionbox or collisionbox + end + end + local opos = vector.add(obj:getpos(), offset) + local ray = {pos=pos, dir=dir} + local plane = {pos=opos, normal={x=-1, y=0, z=-1}} + local ipos = shooter:get_intersect_pos(ray, plane, collisionbox) + if ipos then + punch_object(self.player, obj) + end + end + end + local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5})) + local _, npos = minetest.line_of_sight(pos, p, 1) + if npos then + local node = minetest.get_node(npos) + local tpos = get_target_pos(pos, npos, dir, 0.66) + self.node_pos = npos + self.state = "stuck" + stop_arrow(self.object, tpos, true) + shooter:play_node_sound(node, npos) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +for _, color in pairs(dye_basecolors) do + minetest.register_craftitem("shooter:arrow_"..color, { + description = color:gsub("%a", string.upper, 1).." Arrow", + inventory_image = get_texture("arrow_inv", color), + }) + minetest.register_tool("shooter:bow_loaded_"..color, { + description = "Bow", + inventory_image = get_texture("bow_loaded", color), + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + minetest.sound_play("shooter_click", {object=user}) + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/SHOOTER_CROSSBOW_USES) + end + itemstack = "shooter:bow 1 "..itemstack:get_wear() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:arrow_entity") + local ent = nil + if obj then + ent = obj:get_luaentity() + end + if ent then + ent.color = color + obj:set_properties({ + textures = {get_texture("arrow_uv", color)} + }) + minetest.sound_play("shooter_throw", {object=obj}) + local frame = get_animation_frame(dir) + obj:setyaw(yaw + math.pi) + obj:set_animation({x=frame, y=frame}, 0) + obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14}) + if pointed_thing.type ~= "nothing" then + local ppos = minetest.get_pointed_thing_position(pointed_thing, false) + local _, npos = minetest.line_of_sight(pos, ppos, 1) + if npos then + ppos = npos + pointed_thing.type = "node" + end + if pointed_thing.type == "object" then + punch_object(user, pointed_thing.ref) + elseif pointed_thing.type == "node" then + local node = minetest.get_node(ppos) + local tpos = get_target_pos(pos, ppos, dir, 0.66) + minetest.after(0.2, function(object, pos, npos) + ent.node_pos = npos + ent.state = "stuck" + stop_arrow(object, pos, true) + shooter:play_node_sound(node, npos) + end, obj, tpos, ppos) + return itemstack + end + end + obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3}) + ent.player = ent.player or user + ent.state = "flight" + end + end + return itemstack + end, + }) +end + +minetest.register_tool("shooter:bow", { + description = "Bow", + inventory_image = "shooter_bow.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local stack = inv:get_stack("main", user:get_wield_index() + 1) + local color = string.match(stack:get_name(), "shooter:arrow_(%a+)") + if color then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:bow_loaded_"..color.." 1 "..itemstack:get_wear() + end + for _, color in pairs(dye_basecolors) do + if inv:contains_item("main", "shooter:arrow_"..color) then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:bow_loaded_"..color.." 1 "..itemstack:get_wear() + end + end + minetest.sound_play("shooter_click", {object=user}) + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:bow", + recipe = { + {"", "default:stick", "farming:cotton"}, + {"default:stick", "", "farming:cotton"}, + {"", "default:stick", "farming:cotton"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:stick", "default:paper"}, + {"", "default:paper", "default:stick"}, + }, + }) + for _, color in pairs(dye_basecolors) do + if color ~= "white" then + minetest.register_craft({ + type = "shapeless", + output = "shooter:arrow_"..color, + recipe = {"dye:"..color, "shooter:arrow_white"}, + }) + end + end +end + diff --git a/mods/signs/shooter/crossbow.lua b/mods/signs/shooter/crossbow.lua new file mode 100644 index 0000000..dd57e61 --- /dev/null +++ b/mods/signs/shooter/crossbow.lua @@ -0,0 +1,324 @@ +SHOOTER_CROSSBOW_USES = 50 +SHOOTER_ARROW_TOOL_CAPS = {damage_groups={fleshy=2}} +SHOOTER_ARROW_LIFETIME = 180 -- 3 minutes + +minetest.register_alias("shooter:arrow", "shooter:arrow_white") +minetest.register_alias("shooter:crossbow_loaded", "shooter:crossbow_loaded_white") + +local dye_basecolors = (dye and dye.basecolors) or + {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} + +local function get_animation_frame(dir) + local angle = math.atan(dir.y) + local frame = 90 - math.floor(angle * 360 / math.pi) + if frame < 1 then + frame = 1 + elseif frame > 180 then + frame = 180 + end + return frame +end + +local function get_target_pos(p1, p2, dir, offset) + local d = vector.distance(p1, p2) - offset + local td = vector.multiply(dir, {x=d, y=d, z=d}) + return vector.add(p1, td) +end + +local function punch_object(puncher, object) + if puncher and shooter:is_valid_object(object) then + if puncher ~= object then + local dir = puncher:get_look_dir() + local p1 = puncher:getpos() + local p2 = object:getpos() + local tpos = get_target_pos(p1, p2, dir, 0) + shooter:spawn_particles(tpos, SHOOTER_EXPLOSION_TEXTURE) + object:punch(puncher, nil, SHOOTER_ARROW_TOOL_CAPS, dir) + end + end +end + +local function stop_arrow(object, pos, stuck) + local acceleration = {x=0, y=-10, z=0} + if stuck == true then + pos = pos or object:getpos() + acceleration = {x=0, y=0, z=0} + object:moveto(pos) + end + object:set_properties({ + physical = true, + collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8}, + }) + object:setvelocity({x=0, y=0, z=0}) + object:setacceleration(acceleration) +end + +-- name is the overlay texture name, colour is used to select the wool texture +local function get_texture(name, colour) + return "shooter_"..name..".png^wool_"..colour..".png^shooter_"..name..".png^[makealpha:255,126,126" +end + +minetest.register_entity("shooter:arrow_entity", { + physical = false, + visual = "mesh", + mesh = "shooter_arrow.b3d", + visual_size = {x=1, y=1}, + textures = { + get_texture("arrow_uv", "white"), + }, + color = "white", + timer = 0, + lifetime = SHOOTER_ARROW_LIFETIME, + player = nil, + state = "init", + node_pos = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_punch = function(self, puncher) + if puncher then + if puncher:is_player() then + local stack = "shooter:arrow_"..self.color + local inv = puncher:get_inventory() + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + self.object:remove() + end + end + end + end, + on_step = function(self, dtime) + if self.state == "init" then + return + end + self.timer = self.timer + dtime + self.lifetime = self.lifetime - dtime + if self.lifetime < 0 then + self.object:remove() + return + elseif self.state == "dropped" then + return + elseif self.state == "stuck" then + if self.timer > 1 then + if self.node_pos then + local node = minetest.get_node(self.node_pos) + if node.name then + local item = minetest.registered_items[node.name] + if item then + if not item.walkable then + self.state = "dropped" + stop_arrow(self.object) + return + end + end + end + end + self.timer = 0 + end + return + end + if self.timer > 0.2 then + local pos = self.object:getpos() + local dir = vector.normalize(self.object:getvelocity()) + local frame = get_animation_frame(dir) + self.object:set_animation({x=frame, y=frame}, 0) + local objects = minetest.get_objects_inside_radius(pos, 5) + for _,obj in ipairs(objects) do + if shooter:is_valid_object(obj) then + local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25} + local offset = SHOOTER_PLAYER_OFFSET + if not obj:is_player() then + offset = SHOOTER_ENTITY_OFFSET + local ent = obj:get_luaentity() + if ent then + local def = minetest.registered_entities[ent.name] + collisionbox = def.collisionbox or collisionbox + end + end + local opos = vector.add(obj:getpos(), offset) + local ray = {pos=pos, dir=dir} + local plane = {pos=opos, normal={x=-1, y=0, z=-1}} + local ipos = shooter:get_intersect_pos(ray, plane, collisionbox) + if ipos then + punch_object(self.player, obj) + end + end + end + local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5})) + local _, npos = minetest.line_of_sight(pos, p, 1) + if npos then + local node = minetest.get_node(npos) + local tpos = get_target_pos(pos, npos, dir, 0.66) + self.node_pos = npos + self.state = "stuck" + stop_arrow(self.object, tpos, true) + shooter:play_node_sound(node, npos) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +for _, color in pairs(dye_basecolors) do + minetest.register_craftitem("shooter:arrow_"..color, { + description = color:gsub("%a", string.upper, 1).." Arrow", + inventory_image = get_texture("arrow_inv", color), + }) + minetest.register_tool("shooter:crossbow_loaded_"..color, { + description = "Crossbow", + inventory_image = get_texture("crossbow_loaded", color), + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + minetest.sound_play("shooter_click", {object=user}) + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/SHOOTER_CROSSBOW_USES) + end + itemstack = "shooter:crossbow 1 "..itemstack:get_wear() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:arrow_entity") + local ent = nil + if obj then + ent = obj:get_luaentity() + end + if ent then + ent.color = color + obj:set_properties({ + textures = {get_texture("arrow_uv", color)} + }) + minetest.sound_play("shooter_throw", {object=obj}) + local frame = get_animation_frame(dir) + obj:setyaw(yaw + math.pi) + obj:set_animation({x=frame, y=frame}, 0) + obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14}) + if pointed_thing.type ~= "nothing" then + local ppos = minetest.get_pointed_thing_position(pointed_thing, false) + local _, npos = minetest.line_of_sight(pos, ppos, 1) + if npos then + ppos = npos + pointed_thing.type = "node" + end + if pointed_thing.type == "object" then + punch_object(user, pointed_thing.ref) + elseif pointed_thing.type == "node" then + local node = minetest.get_node(ppos) + local tpos = get_target_pos(pos, ppos, dir, 0.66) + minetest.after(0.2, function(object, pos, npos) + ent.node_pos = npos + ent.state = "stuck" + stop_arrow(object, pos, true) + shooter:play_node_sound(node, npos) + end, obj, tpos, ppos) + return itemstack + end + end + obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3}) + ent.player = ent.player or user + ent.state = "flight" + end + end + return itemstack + end, + }) + minetest.register_craft({ + output = "shooter:crossbow_loaded_"..color, + type = "shapeless", + recipe = {"shooter:crossbow", "shooter:arrow_" .. color}, + }) +end + +minetest.register_tool("shooter:crossbow", { + description = "Crossbow", + inventory_image = "shooter_crossbow.png", + --[[on_use = function(itemstack, user, pointed_thing) + --minetest.after(2, function() + local inv = user:get_inventory() + local stack = inv:get_stack("main", user:get_wield_index() + 1) + local color = string.match(stack:get_name(), "shooter:arrow_(%a+)") + if color then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + for _, color in pairs(dye_basecolors) do + if inv:contains_item("main", "shooter:arrow_"..color) then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + --end) + minetest.sound_play("shooter_click", {object=user}) +end + end,--]] +}) + + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:crossbow", + recipe = { + {"default:stick", "default:stick", "default:stick"}, + {"default:stick", "group:wool", ""}, + {"default:stick", "", "default:stick"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white 16", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:stick", "default:paper"}, + {"", "default:paper", "default:stick"}, + }, + }) + if minetest.get_modpath("creatures") ~= nil then + minetest.register_craft({ + output = "shooter:arrow_white 16", + recipe = { + {"default:flint", "", ""}, + {"", "default:stick", "creatures:feather"}, + {"", "creatures:feather", "default:stick"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white 16", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:stick", "creatures:feather"}, + {"", "creatures:feather", "default:stick"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white 16", + recipe = { + {"default:flint", "", ""}, + {"", "default:stick", "creatures:feather"}, + {"", "default:paper", "default:paper"}, + }, + }) + end + for _, color in pairs(dye_basecolors) do + if color ~= "white" then + minetest.register_craft({ + output = "shooter:arrow_"..color, + recipe = { + {"", "dye:"..color, "shooter:arrow_white"}, + }, + }) + end + end +end + diff --git a/mods/signs/shooter/crossbow_orig.lua b/mods/signs/shooter/crossbow_orig.lua new file mode 100644 index 0000000..b01480c --- /dev/null +++ b/mods/signs/shooter/crossbow_orig.lua @@ -0,0 +1,290 @@ +SHOOTER_CROSSBOW_USES = 50 +SHOOTER_ARROW_TOOL_CAPS = {damage_groups={fleshy=2}} +SHOOTER_ARROW_LIFETIME = 180 -- 3 minutes + +minetest.register_alias("shooter:arrow", "shooter:arrow_white") +minetest.register_alias("shooter:crossbow_loaded", "shooter:crossbow_loaded_white") + +local dye_basecolors = (dye and dye.basecolors) or + {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"} + +local function get_animation_frame(dir) + local angle = math.atan(dir.y) + local frame = 90 - math.floor(angle * 360 / math.pi) + if frame < 1 then + frame = 1 + elseif frame > 180 then + frame = 180 + end + return frame +end + +local function get_target_pos(p1, p2, dir, offset) + local d = vector.distance(p1, p2) - offset + local td = vector.multiply(dir, {x=d, y=d, z=d}) + return vector.add(p1, td) +end + +local function punch_object(puncher, object) + if puncher and shooter:is_valid_object(object) then + if puncher ~= object then + local dir = puncher:get_look_dir() + local p1 = puncher:getpos() + local p2 = object:getpos() + local tpos = get_target_pos(p1, p2, dir, 0) + shooter:spawn_particles(tpos, SHOOTER_EXPLOSION_TEXTURE) + object:punch(puncher, nil, SHOOTER_ARROW_TOOL_CAPS, dir) + end + end +end + +local function stop_arrow(object, pos, stuck) + local acceleration = {x=0, y=-10, z=0} + if stuck == true then + pos = pos or object:getpos() + acceleration = {x=0, y=0, z=0} + object:moveto(pos) + end + object:set_properties({ + physical = true, + collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8}, + }) + object:setvelocity({x=0, y=0, z=0}) + object:setacceleration(acceleration) +end + +-- name is the overlay texture name, colour is used to select the wool texture +local function get_texture(name, colour) + return "shooter_"..name..".png^wool_"..colour..".png^shooter_"..name..".png^[makealpha:255,126,126" +end + +minetest.register_entity("shooter:arrow_entity", { + physical = false, + visual = "mesh", + mesh = "shooter_arrow.b3d", + visual_size = {x=1, y=1}, + textures = { + get_texture("arrow_uv", "white"), + }, + color = "white", + timer = 0, + lifetime = SHOOTER_ARROW_LIFETIME, + player = nil, + state = "init", + node_pos = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({immortal=1}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_punch = function(self, puncher) + if puncher then + if puncher:is_player() then + local stack = "shooter:arrow_"..self.color + local inv = puncher:get_inventory() + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + self.object:remove() + end + end + end + end, + on_step = function(self, dtime) + if self.state == "init" then + return + end + self.timer = self.timer + dtime + self.lifetime = self.lifetime - dtime + if self.lifetime < 0 then + self.object:remove() + return + elseif self.state == "dropped" then + return + elseif self.state == "stuck" then + if self.timer > 1 then + if self.node_pos then + local node = minetest.get_node(self.node_pos) + if node.name then + local item = minetest.registered_items[node.name] + if item then + if not item.walkable then + self.state = "dropped" + stop_arrow(self.object) + return + end + end + end + end + self.timer = 0 + end + return + end + if self.timer > 0.2 then + local pos = self.object:getpos() + local dir = vector.normalize(self.object:getvelocity()) + local frame = get_animation_frame(dir) + self.object:set_animation({x=frame, y=frame}, 0) + local objects = minetest.get_objects_inside_radius(pos, 5) + for _,obj in ipairs(objects) do + if shooter:is_valid_object(obj) then + local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25} + local offset = SHOOTER_PLAYER_OFFSET + if not obj:is_player() then + offset = SHOOTER_ENTITY_OFFSET + local ent = obj:get_luaentity() + if ent then + local def = minetest.registered_entities[ent.name] + collisionbox = def.collisionbox or collisionbox + end + end + local opos = vector.add(obj:getpos(), offset) + local ray = {pos=pos, dir=dir} + local plane = {pos=opos, normal={x=-1, y=0, z=-1}} + local ipos = shooter:get_intersect_pos(ray, plane, collisionbox) + if ipos then + punch_object(self.player, obj) + end + end + end + local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5})) + local _, npos = minetest.line_of_sight(pos, p, 1) + if npos then + local node = minetest.get_node(npos) + local tpos = get_target_pos(pos, npos, dir, 0.66) + self.node_pos = npos + self.state = "stuck" + stop_arrow(self.object, tpos, true) + shooter:play_node_sound(node, npos) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +for _, color in pairs(dye_basecolors) do + minetest.register_craftitem("shooter:arrow_"..color, { + description = color:gsub("%a", string.upper, 1).." Arrow", + inventory_image = get_texture("arrow_inv", color), + }) + minetest.register_tool("shooter:crossbow_loaded_"..color, { + description = "Crossbow", + inventory_image = get_texture("crossbow_loaded", color), + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + minetest.sound_play("shooter_click", {object=user}) + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/SHOOTER_CROSSBOW_USES) + end + itemstack = "shooter:crossbow 1 "..itemstack:get_wear() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:arrow_entity") + local ent = nil + if obj then + ent = obj:get_luaentity() + end + if ent then + ent.color = color + obj:set_properties({ + textures = {get_texture("arrow_uv", color)} + }) + minetest.sound_play("shooter_throw", {object=obj}) + local frame = get_animation_frame(dir) + obj:setyaw(yaw + math.pi) + obj:set_animation({x=frame, y=frame}, 0) + obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14}) + if pointed_thing.type ~= "nothing" then + local ppos = minetest.get_pointed_thing_position(pointed_thing, false) + local _, npos = minetest.line_of_sight(pos, ppos, 1) + if npos then + ppos = npos + pointed_thing.type = "node" + end + if pointed_thing.type == "object" then + punch_object(user, pointed_thing.ref) + elseif pointed_thing.type == "node" then + local node = minetest.get_node(ppos) + local tpos = get_target_pos(pos, ppos, dir, 0.66) + minetest.after(0.2, function(object, pos, npos) + ent.node_pos = npos + ent.state = "stuck" + stop_arrow(object, pos, true) + shooter:play_node_sound(node, npos) + end, obj, tpos, ppos) + return itemstack + end + end + obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3}) + ent.player = ent.player or user + ent.state = "flight" + end + end + return itemstack + end, + }) +end + +minetest.register_tool("shooter:crossbow", { + description = "Crossbow", + inventory_image = "shooter_crossbow.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + local stack = inv:get_stack("main", user:get_wield_index() + 1) + local color = string.match(stack:get_name(), "shooter:arrow_(%a+)") + if color then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + for _, color in pairs(dye_basecolors) do + if inv:contains_item("main", "shooter:arrow_"..color) then + minetest.sound_play("shooter_reload", {object=user}) + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:arrow_"..color.." 1") + end + return "shooter:crossbow_loaded_"..color.." 1 "..itemstack:get_wear() + end + end + minetest.sound_play("shooter_click", {object=user}) + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:crossbow", + recipe = { + {"default:stick", "default:stick", "default:stick"}, + {"default:stick", "default:stick", ""}, + {"default:stick", "", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:arrow_white", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:stick", "default:paper"}, + {"", "default:paper", "default:stick"}, + }, + }) + for _, color in pairs(dye_basecolors) do + if color ~= "white" then + minetest.register_craft({ + output = "shooter:arrow_"..color, + recipe = { + {"", "dye:"..color, "shooter:arrow_white"}, + }, + }) + end + end +end + diff --git a/mods/signs/shooter/crosshair.png b/mods/signs/shooter/crosshair.png new file mode 100644 index 0000000..30844f7 Binary files /dev/null and b/mods/signs/shooter/crosshair.png differ diff --git a/mods/signs/shooter/depends.txt b/mods/signs/shooter/depends.txt new file mode 100644 index 0000000..2de5ab8 --- /dev/null +++ b/mods/signs/shooter/depends.txt @@ -0,0 +1,5 @@ +default +dye +tnt +wool + diff --git a/mods/signs/shooter/flaregun.lua b/mods/signs/shooter/flaregun.lua new file mode 100644 index 0000000..6904d3e --- /dev/null +++ b/mods/signs/shooter/flaregun.lua @@ -0,0 +1,147 @@ +minetest.register_craftitem("shooter:flare", { + description = "Flare", + inventory_image = "shooter_flare_inv.png", +}) + +minetest.register_node("shooter:flare_light", { + drawtype = "glasslike", + tiles = {"shooter_flare_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, +}) + +minetest.register_abm({ + nodenames = "shooter:flare_light", + interval = 5, + chance = 1, + action = function(pos, node) + local time = os.time() + local meta = minetest.get_meta(pos) + local init_time = meta:get_int("init_time") or 0 + if time > init_time + 30 then + local id = meta:get_int("particle_id") + if id then + minetest.delete_particlespawner(id) + end + minetest.remove_node(pos) + end + end, +}) + +minetest.register_entity("shooter:flare_entity", { + physical = true, + timer = 0, + visual = "cube", + visual_size = {x=1/8, y=1/8}, + textures = { + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + "shooter_flare.png", + }, + player = nil, + collisionbox = {-1/16,-1/16,-1/16, 1/16,1/16,1/16}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + local below = {x=pos.x, y=pos.y - 1, z=pos.z} + local node = minetest.get_node(below) + if node.name ~= "air" then + self.object:setvelocity({x=0, y=-10, z=0}) + self.object:setacceleration({x=0, y=0, z=0}) + if minetest.get_node(pos).name == "air" and + node.name ~= "default:water_source" and + node.name ~= "default:water_flowing" then + minetest.place_node(pos, {name="shooter:flare_light"}) + local meta = minetest.get_meta(pos) + meta:set_int("particle_id", id) + meta:set_int("init_time", os.time()) + pos.y = pos.y - 0.1 + local id = minetest.add_particlespawner( + 1000, 30, pos, pos, + {x=-1, y=1, z=-1}, {x=1, y=1, z=1}, + {x=2, y=-2, z=-2}, {x=2, y=-2, z=2}, + 0.1, 0.75, 1, 8, false, "shooter_flare_particle.png" + ) + local sound = minetest.sound_play("shooter_flare_burn", { + object = self.player, + loop = true, + }) + minetest.after(30, function(sound) + minetest.sound_stop(sound) + end, sound) + end + self.object:remove() + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:flaregun", { + description = "Flare Gun", + inventory_image = "shooter_flaregun.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + if not inv:contains_item("main", "shooter:flare") then + minetest.sound_play("shooter_click", {object=user}) + return itemstack + end + if not minetest.setting_getbool("creative_mode") then + inv:remove_item("main", "shooter:flare 1") + itemstack:add_wear(65535/100) + end + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:flare_entity") + if obj then + minetest.sound_play("shooter_flare_fire", {object=obj}) + obj:setvelocity({x=dir.x * 16, y=dir.y * 16, z=dir.z * 16}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + return itemstack + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:flare", + recipe = { + {"tnt:gunpowder", "wool:red"}, + }, + }) + minetest.register_craft({ + output = "shooter:flaregun", + recipe = { + {"wool:red", "wool:red", "wool:red"}, + {"", "", "default:steel_ingot"} + }, + }) +end + diff --git a/mods/signs/shooter/grapple.lua b/mods/signs/shooter/grapple.lua new file mode 100644 index 0000000..7c04210 --- /dev/null +++ b/mods/signs/shooter/grapple.lua @@ -0,0 +1,131 @@ +local function throw_hook(itemstack, user, vel) + local inv = user:get_inventory() + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir and yaw then + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/100) + end + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:hook") + if obj then + minetest.sound_play("shooter_throw", {object=obj}) + obj:setvelocity({x=dir.x * vel, y=dir.y * vel, z=dir.z * vel}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + ent.itemstack = itemstack + end + end + end +end + +minetest.register_entity("shooter:hook", { + physical = true, + timer = 0, + visual = "wielditem", + visual_size = {x=1/2, y=1/2}, + textures = {"shooter:grapple_hook"}, + player = nil, + itemstack = "", + collisionbox = {-1/4,-1/4,-1/4, 1/4,1/4,1/4}, + on_activate = function(self, staticdata) + self.object:set_armor_groups({fleshy=0}) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + if not self.player then + return + end + self.timer = self.timer + dtime + if self.timer > 0.25 then + local pos = self.object:getpos() + local below = {x=pos.x, y=pos.y - 1, z=pos.z} + local node = minetest.get_node(below) + if node.name ~= "air" then + self.object:setvelocity({x=0, y=-10, z=0}) + self.object:setacceleration({x=0, y=0, z=0}) + if minetest.get_item_group(node.name, "liquid") == 0 and + minetest.get_node(pos).name == "air" then + self.player:moveto(pos) + end + if minetest.get_item_group(node.name, "lava") == 0 then + minetest.add_item(pos, self.itemstack) + end + self.object:remove() + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:grapple_hook", { + description = "Grappling Hook", + inventory_image = "shooter_hook.png", + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "nothing" then + return itemstack + end + throw_hook(itemstack, user, 14) + return "" + end, +}) +--[[ +minetest.register_tool("shooter:grapple_gun", { + description = "Grappling Gun", + inventory_image = "shooter_hook_gun.png", + on_use = function(itemstack, user, pointed_thing) + local inv = user:get_inventory() + if inv:contains_item("main", "shooter:grapple_hook") and + inv:contains_item("main", "tnt:gunpowder") then + inv:remove_item("main", "tnt:gunpowder") + minetest.sound_play("shooter_reload", {object=user}) + local stack = inv:remove_item("main", "shooter:grapple_hook") + itemstack = "shooter:grapple_gun_loaded 1 "..stack:get_wear() + else + minetest.sound_play("shooter_click", {object=user}) + end + return itemstack + end, +}) + +minetest.register_tool("shooter:grapple_gun_loaded", { + description = "Grappling Gun", + inventory_image = "shooter_hook_gun_loaded.png", + groups = {not_in_creative_inventory=1}, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "nothing" then + return itemstack + end + minetest.sound_play("shooter_pistol", {object=user}) + itemstack = ItemStack("shooter:grapple_hook 1 "..itemstack:get_wear()) + throw_hook(itemstack, user, 20) + return "shooter:grapple_gun" + end, +}) +--]] +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:grapple_hook", + 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 = "shooter:grapple_gun", + recipe = { + {"", "default:steel_ingot", "default:steel_ingot"}, + {"", "", "default:diamond"}, + }, + })--]] +end diff --git a/mods/signs/shooter/grenade.lua b/mods/signs/shooter/grenade.lua new file mode 100644 index 0000000..5dac7f8 --- /dev/null +++ b/mods/signs/shooter/grenade.lua @@ -0,0 +1,80 @@ +minetest.register_entity("shooter:grenade_entity", { + physical = false, + timer = 0, + visual = "cube", + visual_size = {x=1/8, y=1/8}, + textures = { + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + "shooter_grenade.png", + }, + player = nil, + collisionbox = {0,0,0, 0,0,0}, + on_activate = function(self, staticdata) + if staticdata == "expired" then + self.object:remove() + end + end, + on_step = function(self, dtime) + self.timer = self.timer + dtime + if self.timer > 0.2 then + local pos = self.object:getpos() + local below = {x=pos.x, y=pos.y - 1, z=pos.z} + if minetest.get_node(below).name ~= "air" then + self.object:remove() + shooter:blast(pos, 1, 25, 5, self.player) + end + self.timer = 0 + end + end, + get_staticdata = function(self) + return "expired" + end, +}) + +minetest.register_tool("shooter:grenade", { + description = "Grenade", + inventory_image = "shooter_hand_grenade.png", + on_use = function(itemstack, user, pointed_thing) + if not minetest.setting_getbool("creative_mode") then + itemstack = "" + end + if pointed_thing.type ~= "nothing" then + local pointed = minetest.get_pointed_thing_position(pointed_thing) + if vector.distance(user:getpos(), pointed) < 8 then + shooter:blast(pointed, 1, 25, 5) + return + end + end + local pos = user:getpos() + local dir = user:get_look_dir() + local yaw = user:get_look_yaw() + if pos and dir then + pos.y = pos.y + 1.5 + local obj = minetest.add_entity(pos, "shooter:grenade_entity") + if obj then + obj:setvelocity({x=dir.x * 15, y=dir.y * 15, z=dir.z * 15}) + obj:setacceleration({x=dir.x * -3, y=-10, z=dir.z * -3}) + obj:setyaw(yaw + math.pi) + local ent = obj:get_luaentity() + if ent then + ent.player = ent.player or user + end + end + end + return itemstack + end, +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:grenade", + recipe = { + {"tnt:gunpowder", "default:steel_ingot"}, + }, + }) +end + diff --git a/mods/signs/shooter/guns.lua b/mods/signs/shooter/guns.lua new file mode 100644 index 0000000..d31a724 --- /dev/null +++ b/mods/signs/shooter/guns.lua @@ -0,0 +1,127 @@ +shooter:register_weapon("shooter:pistol", { + description = "Pistol", + inventory_image = "shooter_pistol.png", + rounds = 200, + spec = { + range = 100, + step = 20, + tool_caps = {full_punch_interval=0.5, damage_groups={fleshy=2}}, + groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, + sound = "shooter_pistol", + particle = "shooter_cap.png", + }, +}) + +shooter:register_weapon("shooter:rifle", { + description = "Rifle", + inventory_image = "shooter_rifle.png", + rounds = 100, + spec = { + range = 200, + step = 30, + tool_caps = {full_punch_interval=1.0, damage_groups={fleshy=3}}, + groups = {snappy=3, crumbly=3, choppy=3, fleshy=2, oddly_breakable_by_hand=2}, + sound = "shooter_rifle", + particle = "shooter_bullet.png", + }, +}) + +shooter:register_weapon("shooter:shotgun", { + description = "Shotgun", + inventory_image = "shooter_shotgun.png", + rounds = 50, + spec = { + range = 50, + step = 15, + tool_caps = {full_punch_interval=1.5, damage_groups={fleshy=4}}, + groups = {cracky=3, snappy=2, crumbly=2, choppy=2, fleshy=1, oddly_breakable_by_hand=1}, + sound = "shooter_shotgun", + particle = "smoke_puff.png", + }, +}) + +shooter:register_weapon("shooter:machine_gun", { + description = "Sub Machine Gun", + inventory_image = "shooter_smgun.png", + rounds = 50, + shots = 4, + spec = { + range = 100, + step = 20, + tool_caps = {full_punch_interval=0.125, damage_groups={fleshy=2}}, + groups = {snappy=3, fleshy=3, oddly_breakable_by_hand=3}, + sound = "shooter_pistol", + particle = "shooter_cap.png", + }, +}) + +minetest.register_craftitem("shooter:ammo", { + description = "Ammo pack", + inventory_image = "shooter_ammo.png", +}) + +if SHOOTER_ENABLE_CRAFTING == true then + minetest.register_craft({ + output = "shooter:pistol 1 65535", + recipe = { + {"default:steel_ingot", "default:steel_ingot"}, + {"", "default:mese_crystal"}, + }, + }) + minetest.register_craft({ + output = "shooter:rifle 1 65535", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:bronze_ingot", ""}, + {"", "default:mese_crystal", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:shotgun 1 65535", + recipe = { + {"default:steel_ingot", "", ""}, + {"", "default:steel_ingot", ""}, + {"", "default:mese_crystal", "default:bronze_ingot"}, + }, + }) + minetest.register_craft({ + output = "shooter:machine_gun 1 65535", + recipe = { + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, + {"", "default:bronze_ingot", "default:mese_crystal"}, + {"", "default:bronze_ingot", ""}, + }, + }) + minetest.register_craft({ + output = "shooter:ammo", + recipe = { + {"tnt:gunpowder", "default:bronze_ingot"}, + }, + }) +end + +local rounds_update_time = 0 + +minetest.register_globalstep(function(dtime) + shooter.time = shooter.time + dtime + if shooter.time - rounds_update_time > SHOOTER_ROUNDS_UPDATE_TIME then + for i, round in ipairs(shooter.rounds) do + if shooter:process_round(round) or round.dist > round.def.range then + table.remove(shooter.rounds, i) + else + local v = vector.multiply(round.ray, round.def.step) + shooter.rounds[i].pos = vector.add(round.pos, v) + shooter.rounds[i].dist = round.dist + round.def.step + end + end + rounds_update_time = shooter.time + end + if shooter.time > 100000 then + shooter.shots = {} + rounds_update_time = 0 + shooter.reload_time = 0 + shooter.update_time = 0 + shooter.time = 0 + end +end) + diff --git a/mods/signs/shooter/init.lua b/mods/signs/shooter/init.lua new file mode 100644 index 0000000..c11caf8 --- /dev/null +++ b/mods/signs/shooter/init.lua @@ -0,0 +1,32 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +dofile(modpath.."/shooter.lua") + +if SHOOTER_ENABLE_CROSSBOW == true then + dofile(modpath.."/crossbow.lua") +end +if SHOOTER_ENABLE_BOW == true then + dofile(modpath.."/bow.lua") +end +if SHOOTER_ENABLE_GUNS == true then + dofile(modpath.."/guns.lua") +end +if SHOOTER_ENABLE_FLARES == true then + dofile(modpath.."/flaregun.lua") +end +if SHOOTER_ENABLE_HOOK == true then + dofile(modpath.."/grapple.lua") +end +if SHOOTER_ENABLE_GRENADES == true then + dofile(modpath.."/grenade.lua") +end +if SHOOTER_ENABLE_SMOKE == true then + dofile(modpath.."/smoke.lua") +end +if SHOOTER_ENABLE_ROCKETS == true then + dofile(modpath.."/rocket.lua") +end +if SHOOTER_ENABLE_TURRETS == true then + dofile(modpath.."/turret.lua") +end + diff --git a/mods/signs/steelsign.lua b/mods/signs/steelsign.lua new file mode 100644 index 0000000..86c8d97 --- /dev/null +++ b/mods/signs/steelsign.lua @@ -0,0 +1,216 @@ +-- Font: 04.jp.org + +-- load characters map +local chars_file = io.open(minetest.get_modpath("signs").."/characters", "r") +local charmap = {} +local max_chars = 16 +if not chars_file then + print("[signs] E: character map file not found") +else + while true do + local char = chars_file:read("*l") + if char == nil then + break + end + local img = chars_file:read("*l") + chars_file:read("*l") + charmap[char] = img + end +end + +local signs = { + {delta = {x = 0, y = 0, z = 0.399}, yaw = 0}, + {delta = {x = 0.399, y = 0, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = -0.399}, yaw = math.pi}, + {delta = {x = -0.399, y = 0, z = 0}, yaw = math.pi / 2}, +} + +local signs_yard = { + {delta = {x = 0, y = 0, z = -0.05}, yaw = 0}, + {delta = {x = -0.05, y = 0, z = 0}, yaw = math.pi / -2}, + {delta = {x = 0, y = 0, z = 0.05}, yaw = math.pi}, + {delta = {x = 0.05, y = 0, z = 0}, yaw = math.pi / 2}, +} + +local sign_groups = {choppy=2, dig_immediate=2} + +local construct_sign = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_string("formspec", "field[text;;${text}]") + meta:set_string("infotext", "") +end + +local destruct_sign = function(pos) + local objects = minetest.env:get_objects_inside_radius(pos, 0.5) + for _, v in ipairs(objects) do + if v:get_entity_name() == "signs:text" then + v:remove() + end + end +end + +local update_sign = function(pos, fields) + local meta = minetest.env:get_meta(pos) + if fields then + meta:set_string("text", fields.text) + end + local text = meta:get_string("text") + local objects = minetest.env:get_objects_inside_radius(pos, 0.5) + for _, v in ipairs(objects) do + if v:get_entity_name() == "signs:text" then + v:set_properties({textures={generate_texture(create_lines(text))}}) + return + end + end + + -- if there is no entity + local sign_info + if minetest.env:get_node(pos).name == "signs:sign_yard_steel" then + sign_info = signs_yard[minetest.env:get_node(pos).param2 + 1] + elseif minetest.env:get_node(pos).name == "default:sign_wall_steel" then + sign_info = signs[minetest.env:get_node(pos).param2 + 1] + end + if sign_info == nil then + return + end + local text = minetest.env:add_entity({x = pos.x + sign_info.delta.x, + y = pos.y + sign_info.delta.y, + z = pos.z + sign_info.delta.z}, "signs:text") + text:setyaw(sign_info.yaw) +end + +minetest.register_node(":default:sign_wall_steel", { + description = "Locked Sign", + inventory_image = "signs_locked_inv.png", + wield_image = "signs_locked_inv.png", + node_placement_prediction = "", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + selection_box = {type = "fixed", fixed = {-0.45, -0.15, 0.4, 0.45, 0.45, 0.498}}, + tiles = {"signs_locked_top.png", "signs_locked_bottom.png", "signs_locked_side.png", "signs_locked_side.png", "signs_locked_back.png", "signs_locked_front.png"}, + groups = sign_groups, + + on_place = function(itemstack, placer, pointed_thing) + local above = pointed_thing.above + local under = pointed_thing.under + local dir = {x = under.x - above.x, + y = under.y - above.y, + z = under.z - above.z} + + local wdir = minetest.dir_to_wallmounted(dir) + + local placer_pos = placer:getpos() + if placer_pos then + dir = { + x = above.x - placer_pos.x, + y = above.y - placer_pos.y, + z = above.z - placer_pos.z + } + end + + local fdir = minetest.dir_to_facedir(dir) + + local sign_info + + if minetest.env:get_node(above).name == "air" then + + if wdir == 0 then + --how would you add sign to ceiling? + minetest.env:add_item(above, "default:sign_wall_steel") + itemstack:take_item() + return itemstack + elseif wdir == 1 then + minetest.env:add_node(above, {name = "signs:sign_yard_steel", param2 = fdir}) + sign_info = signs_yard[fdir + 1] + else + minetest.env:add_node(above, {name = "default:sign_wall_steel", param2 = fdir}) + sign_info = signs[fdir + 1] + end + + local text = minetest.env:add_entity({x = above.x + sign_info.delta.x, + y = above.y + sign_info.delta.y, + z = above.z + sign_info.delta.z}, "signs:text") + text:setyaw(sign_info.yaw) + + local meta = minetest.get_meta(above) + local owner = placer:get_player_name() + meta:set_string("owner", owner) + meta:set_string("infotext", ("Locked sign (Owned by "..owner..")")) + + itemstack:take_item() + return itemstack + end + end, + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + return player:get_player_name() == owner or owner == "" + end, + on_construct = function(pos) + construct_sign(pos) + end, + on_destruct = function(pos) + destruct_sign(pos) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + if sender:get_player_name() == owner or owner == "" then + update_sign(pos, fields) + end + end, + on_punch = function(pos, node, puncher) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + if puncher:get_player_name() == owner or owner == "" then + update_sign(pos, fields) + end + end, +}) + +minetest.register_node("signs:sign_yard_steel", { + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "facedir", + drawtype = "nodebox", + node_box = {type = "fixed", fixed = { + {-0.45, -0.15, -0.049, 0.45, 0.45, 0.049}, + {-0.05, -0.5, -0.049, 0.05, -0.15, 0.049} + }}, + selection_box = {type = "fixed", fixed = {-0.45, -0.15, -0.049, 0.45, 0.45, 0.049}}, + tiles = {"signs_locked_top.png", "signs_locked_bottom.png", "signs_locked_side.png", "signs_locked_side.png", "signs_locked_back.png", "signs_locked_front.png"}, + groups = {choppy=2, dig_immediate=2}, + drop = "default:sign_wall_steel", + can_dig = function(pos,player) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + return player:get_player_name() == owner or owner == "" + end, + on_construct = function(pos) + construct_sign(pos) + end, + on_destruct = function(pos) + destruct_sign(pos) + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + if sender:get_player_name() == owner or owner == "" then + update_sign(pos, fields) + end + end, + on_punch = function(pos, node, puncher) + local meta = minetest.get_meta(pos); + local owner = meta:get_string("owner") + if puncher:get_player_name() == owner or owner == "" then + update_sign(pos, fields) + end + end, +}) + +if minetest.setting_get("log_mods") then + minetest.log("action", "locked signs loaded") +end diff --git a/mods/signs/textures/_0.png b/mods/signs/textures/_0.png new file mode 100644 index 0000000..b030879 Binary files /dev/null and b/mods/signs/textures/_0.png differ diff --git a/mods/signs/textures/_1.png b/mods/signs/textures/_1.png new file mode 100644 index 0000000..ae28369 Binary files /dev/null and b/mods/signs/textures/_1.png differ diff --git a/mods/signs/textures/_2.png b/mods/signs/textures/_2.png new file mode 100644 index 0000000..7375c68 Binary files /dev/null and b/mods/signs/textures/_2.png differ diff --git a/mods/signs/textures/_3.png b/mods/signs/textures/_3.png new file mode 100644 index 0000000..d724811 Binary files /dev/null and b/mods/signs/textures/_3.png differ diff --git a/mods/signs/textures/_4.png b/mods/signs/textures/_4.png new file mode 100644 index 0000000..0fff433 Binary files /dev/null and b/mods/signs/textures/_4.png differ diff --git a/mods/signs/textures/_5.png b/mods/signs/textures/_5.png new file mode 100644 index 0000000..43010df Binary files /dev/null and b/mods/signs/textures/_5.png differ diff --git a/mods/signs/textures/_6.png b/mods/signs/textures/_6.png new file mode 100644 index 0000000..1eba38c Binary files /dev/null and b/mods/signs/textures/_6.png differ diff --git a/mods/signs/textures/_7.png b/mods/signs/textures/_7.png new file mode 100644 index 0000000..dbcd2d1 Binary files /dev/null and b/mods/signs/textures/_7.png differ diff --git a/mods/signs/textures/_8.png b/mods/signs/textures/_8.png new file mode 100644 index 0000000..edf6ef5 Binary files /dev/null and b/mods/signs/textures/_8.png differ diff --git a/mods/signs/textures/_9.png b/mods/signs/textures/_9.png new file mode 100644 index 0000000..c276c11 Binary files /dev/null and b/mods/signs/textures/_9.png differ diff --git a/mods/signs/textures/_a.png b/mods/signs/textures/_a.png new file mode 100644 index 0000000..8f3f59c Binary files /dev/null and b/mods/signs/textures/_a.png differ diff --git a/mods/signs/textures/_a_.png b/mods/signs/textures/_a_.png new file mode 100644 index 0000000..4da193c Binary files /dev/null and b/mods/signs/textures/_a_.png differ diff --git a/mods/signs/textures/_am.png b/mods/signs/textures/_am.png new file mode 100644 index 0000000..75d0287 Binary files /dev/null and b/mods/signs/textures/_am.png differ diff --git a/mods/signs/textures/_ap.png b/mods/signs/textures/_ap.png new file mode 100644 index 0000000..5dd3325 Binary files /dev/null and b/mods/signs/textures/_ap.png differ diff --git a/mods/signs/textures/_as.png b/mods/signs/textures/_as.png new file mode 100644 index 0000000..3c7a25a Binary files /dev/null and b/mods/signs/textures/_as.png differ diff --git a/mods/signs/textures/_at.png b/mods/signs/textures/_at.png new file mode 100644 index 0000000..4f9841c Binary files /dev/null and b/mods/signs/textures/_at.png differ diff --git a/mods/signs/textures/_b.png b/mods/signs/textures/_b.png new file mode 100644 index 0000000..baf4eaa Binary files /dev/null and b/mods/signs/textures/_b.png differ diff --git a/mods/signs/textures/_b_.png b/mods/signs/textures/_b_.png new file mode 100644 index 0000000..b00a378 Binary files /dev/null and b/mods/signs/textures/_b_.png differ diff --git a/mods/signs/textures/_bl.png b/mods/signs/textures/_bl.png new file mode 100644 index 0000000..546ca4e Binary files /dev/null and b/mods/signs/textures/_bl.png differ diff --git a/mods/signs/textures/_br.png b/mods/signs/textures/_br.png new file mode 100644 index 0000000..5700fa6 Binary files /dev/null and b/mods/signs/textures/_br.png differ diff --git a/mods/signs/textures/_c.png b/mods/signs/textures/_c.png new file mode 100644 index 0000000..eedd639 Binary files /dev/null and b/mods/signs/textures/_c.png differ diff --git a/mods/signs/textures/_c_.png b/mods/signs/textures/_c_.png new file mode 100644 index 0000000..cab6518 Binary files /dev/null and b/mods/signs/textures/_c_.png differ diff --git a/mods/signs/textures/_ca.png b/mods/signs/textures/_ca.png new file mode 100644 index 0000000..d359c88 Binary files /dev/null and b/mods/signs/textures/_ca.png differ diff --git a/mods/signs/textures/_cl.png b/mods/signs/textures/_cl.png new file mode 100644 index 0000000..55396b9 Binary files /dev/null and b/mods/signs/textures/_cl.png differ diff --git a/mods/signs/textures/_cm.png b/mods/signs/textures/_cm.png new file mode 100644 index 0000000..28beedf Binary files /dev/null and b/mods/signs/textures/_cm.png differ diff --git a/mods/signs/textures/_cr.png b/mods/signs/textures/_cr.png new file mode 100644 index 0000000..ac466a9 Binary files /dev/null and b/mods/signs/textures/_cr.png differ diff --git a/mods/signs/textures/_d.png b/mods/signs/textures/_d.png new file mode 100644 index 0000000..a5f0699 Binary files /dev/null and b/mods/signs/textures/_d.png differ diff --git a/mods/signs/textures/_d_.png b/mods/signs/textures/_d_.png new file mode 100644 index 0000000..9a0e3ed Binary files /dev/null and b/mods/signs/textures/_d_.png differ diff --git a/mods/signs/textures/_dl.png b/mods/signs/textures/_dl.png new file mode 100644 index 0000000..72184ad Binary files /dev/null and b/mods/signs/textures/_dl.png differ diff --git a/mods/signs/textures/_dt.png b/mods/signs/textures/_dt.png new file mode 100644 index 0000000..61c1e4a Binary files /dev/null and b/mods/signs/textures/_dt.png differ diff --git a/mods/signs/textures/_dv.png b/mods/signs/textures/_dv.png new file mode 100644 index 0000000..996d7cd Binary files /dev/null and b/mods/signs/textures/_dv.png differ diff --git a/mods/signs/textures/_e.png b/mods/signs/textures/_e.png new file mode 100644 index 0000000..29e32e6 Binary files /dev/null and b/mods/signs/textures/_e.png differ diff --git a/mods/signs/textures/_e_.png b/mods/signs/textures/_e_.png new file mode 100644 index 0000000..c7f19c1 Binary files /dev/null and b/mods/signs/textures/_e_.png differ diff --git a/mods/signs/textures/_eq.png b/mods/signs/textures/_eq.png new file mode 100644 index 0000000..daf8424 Binary files /dev/null and b/mods/signs/textures/_eq.png differ diff --git a/mods/signs/textures/_ex.png b/mods/signs/textures/_ex.png new file mode 100644 index 0000000..b5da8e9 Binary files /dev/null and b/mods/signs/textures/_ex.png differ diff --git a/mods/signs/textures/_f.png b/mods/signs/textures/_f.png new file mode 100644 index 0000000..6835912 Binary files /dev/null and b/mods/signs/textures/_f.png differ diff --git a/mods/signs/textures/_f_.png b/mods/signs/textures/_f_.png new file mode 100644 index 0000000..3698ed2 Binary files /dev/null and b/mods/signs/textures/_f_.png differ diff --git a/mods/signs/textures/_g.png b/mods/signs/textures/_g.png new file mode 100644 index 0000000..5a85cde Binary files /dev/null and b/mods/signs/textures/_g.png differ diff --git a/mods/signs/textures/_g_.png b/mods/signs/textures/_g_.png new file mode 100644 index 0000000..cc7bbc5 Binary files /dev/null and b/mods/signs/textures/_g_.png differ diff --git a/mods/signs/textures/_gt.png b/mods/signs/textures/_gt.png new file mode 100644 index 0000000..f30855a Binary files /dev/null and b/mods/signs/textures/_gt.png differ diff --git a/mods/signs/textures/_h.png b/mods/signs/textures/_h.png new file mode 100644 index 0000000..1a66a9e Binary files /dev/null and b/mods/signs/textures/_h.png differ diff --git a/mods/signs/textures/_h_.png b/mods/signs/textures/_h_.png new file mode 100644 index 0000000..87beafc Binary files /dev/null and b/mods/signs/textures/_h_.png differ diff --git a/mods/signs/textures/_ha.png b/mods/signs/textures/_ha.png new file mode 100644 index 0000000..4618ced Binary files /dev/null and b/mods/signs/textures/_ha.png differ diff --git a/mods/signs/textures/_hs.png b/mods/signs/textures/_hs.png new file mode 100644 index 0000000..6f12bec Binary files /dev/null and b/mods/signs/textures/_hs.png differ diff --git a/mods/signs/textures/_i.png b/mods/signs/textures/_i.png new file mode 100644 index 0000000..f001142 Binary files /dev/null and b/mods/signs/textures/_i.png differ diff --git a/mods/signs/textures/_i_.png b/mods/signs/textures/_i_.png new file mode 100644 index 0000000..fc658b8 Binary files /dev/null and b/mods/signs/textures/_i_.png differ diff --git a/mods/signs/textures/_j.png b/mods/signs/textures/_j.png new file mode 100644 index 0000000..87d2f26 Binary files /dev/null and b/mods/signs/textures/_j.png differ diff --git a/mods/signs/textures/_j_.png b/mods/signs/textures/_j_.png new file mode 100644 index 0000000..c0d9ac2 Binary files /dev/null and b/mods/signs/textures/_j_.png differ diff --git a/mods/signs/textures/_k.png b/mods/signs/textures/_k.png new file mode 100644 index 0000000..34f9336 Binary files /dev/null and b/mods/signs/textures/_k.png differ diff --git a/mods/signs/textures/_k_.png b/mods/signs/textures/_k_.png new file mode 100644 index 0000000..86b623d Binary files /dev/null and b/mods/signs/textures/_k_.png differ diff --git a/mods/signs/textures/_l.png b/mods/signs/textures/_l.png new file mode 100644 index 0000000..defe7ec Binary files /dev/null and b/mods/signs/textures/_l.png differ diff --git a/mods/signs/textures/_l_.png b/mods/signs/textures/_l_.png new file mode 100644 index 0000000..3fe1de2 Binary files /dev/null and b/mods/signs/textures/_l_.png differ diff --git a/mods/signs/textures/_lt.png b/mods/signs/textures/_lt.png new file mode 100644 index 0000000..ec7219d Binary files /dev/null and b/mods/signs/textures/_lt.png differ diff --git a/mods/signs/textures/_m.png b/mods/signs/textures/_m.png new file mode 100644 index 0000000..e0fe039 Binary files /dev/null and b/mods/signs/textures/_m.png differ diff --git a/mods/signs/textures/_m_.png b/mods/signs/textures/_m_.png new file mode 100644 index 0000000..9164da6 Binary files /dev/null and b/mods/signs/textures/_m_.png differ diff --git a/mods/signs/textures/_mn.png b/mods/signs/textures/_mn.png new file mode 100644 index 0000000..935a2fe Binary files /dev/null and b/mods/signs/textures/_mn.png differ diff --git a/mods/signs/textures/_n.png b/mods/signs/textures/_n.png new file mode 100644 index 0000000..ac10fd9 Binary files /dev/null and b/mods/signs/textures/_n.png differ diff --git a/mods/signs/textures/_n_.png b/mods/signs/textures/_n_.png new file mode 100644 index 0000000..d4355c1 Binary files /dev/null and b/mods/signs/textures/_n_.png differ diff --git a/mods/signs/textures/_o.png b/mods/signs/textures/_o.png new file mode 100644 index 0000000..080e99d Binary files /dev/null and b/mods/signs/textures/_o.png differ diff --git a/mods/signs/textures/_o_.png b/mods/signs/textures/_o_.png new file mode 100644 index 0000000..2d19051 Binary files /dev/null and b/mods/signs/textures/_o_.png differ diff --git a/mods/signs/textures/_p.png b/mods/signs/textures/_p.png new file mode 100644 index 0000000..3050959 Binary files /dev/null and b/mods/signs/textures/_p.png differ diff --git a/mods/signs/textures/_p_.png b/mods/signs/textures/_p_.png new file mode 100644 index 0000000..0cca011 Binary files /dev/null and b/mods/signs/textures/_p_.png differ diff --git a/mods/signs/textures/_pr.png b/mods/signs/textures/_pr.png new file mode 100644 index 0000000..b835141 Binary files /dev/null and b/mods/signs/textures/_pr.png differ diff --git a/mods/signs/textures/_ps.png b/mods/signs/textures/_ps.png new file mode 100644 index 0000000..1f4b5c1 Binary files /dev/null and b/mods/signs/textures/_ps.png differ diff --git a/mods/signs/textures/_q.png b/mods/signs/textures/_q.png new file mode 100644 index 0000000..945b6cf Binary files /dev/null and b/mods/signs/textures/_q.png differ diff --git a/mods/signs/textures/_q_.png b/mods/signs/textures/_q_.png new file mode 100644 index 0000000..f3bf455 Binary files /dev/null and b/mods/signs/textures/_q_.png differ diff --git a/mods/signs/textures/_qo.png b/mods/signs/textures/_qo.png new file mode 100644 index 0000000..5d261e3 Binary files /dev/null and b/mods/signs/textures/_qo.png differ diff --git a/mods/signs/textures/_qu.png b/mods/signs/textures/_qu.png new file mode 100644 index 0000000..5eb597a Binary files /dev/null and b/mods/signs/textures/_qu.png differ diff --git a/mods/signs/textures/_r.png b/mods/signs/textures/_r.png new file mode 100644 index 0000000..39e9fce Binary files /dev/null and b/mods/signs/textures/_r.png differ diff --git a/mods/signs/textures/_r_.png b/mods/signs/textures/_r_.png new file mode 100644 index 0000000..6c71c1e Binary files /dev/null and b/mods/signs/textures/_r_.png differ diff --git a/mods/signs/textures/_re.png b/mods/signs/textures/_re.png new file mode 100644 index 0000000..1614837 Binary files /dev/null and b/mods/signs/textures/_re.png differ diff --git a/mods/signs/textures/_s.png b/mods/signs/textures/_s.png new file mode 100644 index 0000000..a0ada1a Binary files /dev/null and b/mods/signs/textures/_s.png differ diff --git a/mods/signs/textures/_s_.png b/mods/signs/textures/_s_.png new file mode 100644 index 0000000..9b018bb Binary files /dev/null and b/mods/signs/textures/_s_.png differ diff --git a/mods/signs/textures/_sl.png b/mods/signs/textures/_sl.png new file mode 100644 index 0000000..08c9547 Binary files /dev/null and b/mods/signs/textures/_sl.png differ diff --git a/mods/signs/textures/_sm.png b/mods/signs/textures/_sm.png new file mode 100644 index 0000000..385c64f Binary files /dev/null and b/mods/signs/textures/_sm.png differ diff --git a/mods/signs/textures/_sp.png b/mods/signs/textures/_sp.png new file mode 100644 index 0000000..4f38a35 Binary files /dev/null and b/mods/signs/textures/_sp.png differ diff --git a/mods/signs/textures/_sr.png b/mods/signs/textures/_sr.png new file mode 100644 index 0000000..bc9c0a2 Binary files /dev/null and b/mods/signs/textures/_sr.png differ diff --git a/mods/signs/textures/_t.png b/mods/signs/textures/_t.png new file mode 100644 index 0000000..c55731a Binary files /dev/null and b/mods/signs/textures/_t.png differ diff --git a/mods/signs/textures/_t_.png b/mods/signs/textures/_t_.png new file mode 100644 index 0000000..773e666 Binary files /dev/null and b/mods/signs/textures/_t_.png differ diff --git a/mods/signs/textures/_tl.png b/mods/signs/textures/_tl.png new file mode 100644 index 0000000..059fe68 Binary files /dev/null and b/mods/signs/textures/_tl.png differ diff --git a/mods/signs/textures/_u.png b/mods/signs/textures/_u.png new file mode 100644 index 0000000..98bf8e6 Binary files /dev/null and b/mods/signs/textures/_u.png differ diff --git a/mods/signs/textures/_u_.png b/mods/signs/textures/_u_.png new file mode 100644 index 0000000..35ce915 Binary files /dev/null and b/mods/signs/textures/_u_.png differ diff --git a/mods/signs/textures/_un.png b/mods/signs/textures/_un.png new file mode 100644 index 0000000..01f547a Binary files /dev/null and b/mods/signs/textures/_un.png differ diff --git a/mods/signs/textures/_v.png b/mods/signs/textures/_v.png new file mode 100644 index 0000000..b692d11 Binary files /dev/null and b/mods/signs/textures/_v.png differ diff --git a/mods/signs/textures/_v_.png b/mods/signs/textures/_v_.png new file mode 100644 index 0000000..8049771 Binary files /dev/null and b/mods/signs/textures/_v_.png differ diff --git a/mods/signs/textures/_vb.png b/mods/signs/textures/_vb.png new file mode 100644 index 0000000..7fed7dc Binary files /dev/null and b/mods/signs/textures/_vb.png differ diff --git a/mods/signs/textures/_w.png b/mods/signs/textures/_w.png new file mode 100644 index 0000000..6a58b07 Binary files /dev/null and b/mods/signs/textures/_w.png differ diff --git a/mods/signs/textures/_w_.png b/mods/signs/textures/_w_.png new file mode 100644 index 0000000..64904de Binary files /dev/null and b/mods/signs/textures/_w_.png differ diff --git a/mods/signs/textures/_x.png b/mods/signs/textures/_x.png new file mode 100644 index 0000000..b769e13 Binary files /dev/null and b/mods/signs/textures/_x.png differ diff --git a/mods/signs/textures/_x_.png b/mods/signs/textures/_x_.png new file mode 100644 index 0000000..2f6d067 Binary files /dev/null and b/mods/signs/textures/_x_.png differ diff --git a/mods/signs/textures/_y.png b/mods/signs/textures/_y.png new file mode 100644 index 0000000..777b55e Binary files /dev/null and b/mods/signs/textures/_y.png differ diff --git a/mods/signs/textures/_y_.png b/mods/signs/textures/_y_.png new file mode 100644 index 0000000..0c40de9 Binary files /dev/null and b/mods/signs/textures/_y_.png differ diff --git a/mods/signs/textures/_z.png b/mods/signs/textures/_z.png new file mode 100644 index 0000000..ae010fe Binary files /dev/null and b/mods/signs/textures/_z.png differ diff --git a/mods/signs/textures/_z_.png b/mods/signs/textures/_z_.png new file mode 100644 index 0000000..1c3e053 Binary files /dev/null and b/mods/signs/textures/_z_.png differ diff --git a/mods/signs/textures/signs_back.png b/mods/signs/textures/signs_back.png new file mode 100644 index 0000000..d3fa19a Binary files /dev/null and b/mods/signs/textures/signs_back.png differ diff --git a/mods/signs/textures/signs_bottom.png b/mods/signs/textures/signs_bottom.png new file mode 100644 index 0000000..604a0fc Binary files /dev/null and b/mods/signs/textures/signs_bottom.png differ diff --git a/mods/signs/textures/signs_front.png b/mods/signs/textures/signs_front.png new file mode 100644 index 0000000..e426bec Binary files /dev/null and b/mods/signs/textures/signs_front.png differ diff --git a/mods/signs/textures/signs_inv.png b/mods/signs/textures/signs_inv.png new file mode 100644 index 0000000..6035e79 Binary files /dev/null and b/mods/signs/textures/signs_inv.png differ diff --git a/mods/signs/textures/signs_locked_back.png b/mods/signs/textures/signs_locked_back.png new file mode 100644 index 0000000..e393f0f Binary files /dev/null and b/mods/signs/textures/signs_locked_back.png differ diff --git a/mods/signs/textures/signs_locked_bottom.png b/mods/signs/textures/signs_locked_bottom.png new file mode 100644 index 0000000..0667227 Binary files /dev/null and b/mods/signs/textures/signs_locked_bottom.png differ diff --git a/mods/signs/textures/signs_locked_front.png b/mods/signs/textures/signs_locked_front.png new file mode 100644 index 0000000..cbc758f Binary files /dev/null and b/mods/signs/textures/signs_locked_front.png differ diff --git a/mods/signs/textures/signs_locked_inv.png b/mods/signs/textures/signs_locked_inv.png new file mode 100644 index 0000000..46973f7 Binary files /dev/null and b/mods/signs/textures/signs_locked_inv.png differ diff --git a/mods/signs/textures/signs_locked_side.png b/mods/signs/textures/signs_locked_side.png new file mode 100644 index 0000000..10da94a Binary files /dev/null and b/mods/signs/textures/signs_locked_side.png differ diff --git a/mods/signs/textures/signs_locked_top.png b/mods/signs/textures/signs_locked_top.png new file mode 100644 index 0000000..67685cf Binary files /dev/null and b/mods/signs/textures/signs_locked_top.png differ diff --git a/mods/signs/textures/signs_side.png b/mods/signs/textures/signs_side.png new file mode 100644 index 0000000..8bd809d Binary files /dev/null and b/mods/signs/textures/signs_side.png differ diff --git a/mods/signs/textures/signs_sign.png b/mods/signs/textures/signs_sign.png new file mode 100644 index 0000000..bd1fc7a Binary files /dev/null and b/mods/signs/textures/signs_sign.png differ diff --git a/mods/signs/textures/signs_top.png b/mods/signs/textures/signs_top.png new file mode 100644 index 0000000..144656e Binary files /dev/null and b/mods/signs/textures/signs_top.png differ diff --git a/mods/silentsneak/LICENSE b/mods/silentsneak/LICENSE new file mode 100644 index 0000000..f25aaee --- /dev/null +++ b/mods/silentsneak/LICENSE @@ -0,0 +1,506 @@ +License of source code +---------------------- +Copyright (C) 2018 James Stevenson + + 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/silentsneak/init.lua b/mods/silentsneak/init.lua new file mode 100644 index 0000000..f9b0913 --- /dev/null +++ b/mods/silentsneak/init.lua @@ -0,0 +1,27 @@ +sneak = {} + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + sneak[name] = false +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + sneak[name] = nil +end) + +minetest.register_globalstep(function(dtime) + for _, player in ipairs(minetest.get_connected_players()) do + local control = player:get_player_control() + local name = player:get_player_name() + if control.sneak ~= sneak[name] then + local c = control.sneak + if c then + player:set_properties{makes_footstep_sound = false} + else + player:set_properties{makes_footstep_sound = true} + end + sneak[name] = c + end + end +end) diff --git a/mods/stairs/README.txt b/mods/stairs/README.txt new file mode 100644 index 0000000..d32cd71 --- /dev/null +++ b/mods/stairs/README.txt @@ -0,0 +1,16 @@ +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/stairs/depends.txt b/mods/stairs/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/stairs/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua new file mode 100644 index 0000000..6e98d74 --- /dev/null +++ b/mods/stairs/init.lua @@ -0,0 +1,610 @@ +-- 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: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 + 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) + local stair_images = {} + for i, image in ipairs(images) do + if type(image) == "string" then + stair_images[i] = { + name = image, + backface_culling = true, + } + elseif image.backface_culling == nil then -- override using any other value + stair_images[i] = table.copy(image) + stair_images[i].backface_culling = true + end + end + local new_groups = table.copy(groups) + new_groups.stair = 1 + minetest.register_node(":stairs:stair_" .. subname, { + description = description, + drawtype = "mesh", + mesh = "stairs_stair.obj", + tiles = stair_images, + paramtype = "light", + paramtype2 = "facedir", + is_ground_content = false, + groups = new_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 + -- Recipe matches appearence in inventory + 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) + local new_groups = table.copy(groups) + new_groups.slab = 1 + minetest.register_node(":stairs:slab_" .. subname, { + description = description, + drawtype = "nodebox", + tiles = 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}, + }, + }) + + -- 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( + "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( + "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} + }) +) diff --git a/mods/stairs/license.txt b/mods/stairs/license.txt new file mode 100644 index 0000000..8f16bbd --- /dev/null +++ b/mods/stairs/license.txt @@ -0,0 +1,51 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2011-2016 Kahrl +Copyright (C) 2011-2016 celeron55, Perttu Ahola +Copyright (C) 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/stairs/models/stairs_stair.obj b/mods/stairs/models/stairs_stair.obj new file mode 100644 index 0000000..198edf6 --- /dev/null +++ b/mods/stairs/models/stairs_stair.obj @@ -0,0 +1,115 @@ +# 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/streets/LICENSE b/mods/streets/LICENSE new file mode 100644 index 0000000..f658805 --- /dev/null +++ b/mods/streets/LICENSE @@ -0,0 +1,393 @@ +LICENSE FOR CODE: +================= + + +MIT License + +Copyright (c) 2016 webdesigner97 +Copyright (c) 2016 cheapie +Copyright (c) 2016 Thomas-S +Copyright (c) 2016 Hybrid Dog (for `streets_matrix_screen` submod) + +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. + + + + +LICENSE FOR MEDIA: +================== + + +Attribution-ShareAlike 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR + DAMAGES RESULTING FROM ITS USE. + +License + +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 + + a. "Adaptation" means a work based upon the Work, or upon the Work and + other pre-existing works, such as a translation, adaptation, + derivative work, arrangement of music or other alterations of a + literary or artistic work, or phonogram or performance and includes + cinematographic adaptations or any other form in which the Work may be + recast, transformed, or adapted including in any form recognizably + derived from the original, except that a work that constitutes a + Collection will not be considered an Adaptation for the purpose of + this License. For the avoidance of doubt, where the Work is a musical + work, performance or phonogram, the synchronization of the Work in + timed-relation with a moving image ("synching") will be considered an + Adaptation for the purpose of this License. + b. "Collection" means a collection of literary or artistic works, such as + encyclopedias and anthologies, or performances, phonograms or + broadcasts, or other works or subject matter other than works listed + in Section 1(f) below, which, by reason of the selection and + arrangement of their contents, constitute intellectual creations, in + which the Work is included in its entirety in unmodified form along + with one or more other contributions, each constituting separate and + independent works in themselves, which together are assembled into a + collective whole. A work that constitutes a Collection will not be + considered an Adaptation (as defined below) for the purposes of this + License. + c. "Creative Commons Compatible License" means a license that is listed + at https://creativecommons.org/compatiblelicenses that has been + approved by Creative Commons as being essentially equivalent to this + License, including, at a minimum, because that license: (i) contains + terms that have the same purpose, meaning and effect as the License + Elements of this License; and, (ii) explicitly permits the relicensing + of adaptations of works made available under that license under this + License or a Creative Commons jurisdiction license with the same + License Elements as this License. + d. "Distribute" means to make available to the public the original and + copies of the Work or Adaptation, as appropriate, through sale or + other transfer of ownership. + e. "License Elements" means the following high-level license attributes + as selected by Licensor and indicated in the title of this License: + Attribution, ShareAlike. + f. "Licensor" means the individual, individuals, entity or entities that + offer(s) the Work under the terms of this License. + g. "Original Author" means, in the case of a literary or artistic work, + the individual, individuals, entity or entities who created the Work + or if no individual or entity can be identified, the publisher; and in + addition (i) in the case of a performance the actors, singers, + musicians, dancers, and other persons who act, sing, deliver, declaim, + play in, interpret or otherwise perform literary or artistic works or + expressions of folklore; (ii) in the case of a phonogram the producer + being the person or legal entity who first fixes the sounds of a + performance or other sounds; and, (iii) in the case of broadcasts, the + organization that transmits the broadcast. + h. "Work" means the literary and/or artistic work offered under the terms + of this License including without limitation any production in the + literary, scientific and artistic domain, whatever may be the mode or + form of its expression including digital form, such as a book, + pamphlet and other writing; a lecture, address, sermon or other work + of the same nature; a dramatic or dramatico-musical work; a + choreographic work or entertainment in dumb show; a musical + composition with or without words; a cinematographic work to which are + assimilated works expressed by a process analogous to cinematography; + a work of drawing, painting, architecture, sculpture, engraving or + lithography; a photographic work to which are assimilated works + expressed by a process analogous to photography; a work of applied + art; an illustration, map, plan, sketch or three-dimensional work + relative to geography, topography, architecture or science; a + performance; a broadcast; a phonogram; a compilation of data to the + extent it is protected as a copyrightable work; or a work performed by + a variety or circus performer to the extent it is not otherwise + considered a literary or artistic work. + i. "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. + j. "Publicly Perform" means to perform public recitations of the Work and + to communicate to the public those public recitations, by any means or + process, including by wire or wireless means or public digital + performances; to make available to the public Works in such a way that + members of the public may access these Works from a place and at a + place individually chosen by them; to perform the Work to the public + by any means or process and the communication to the public of the + performances of the Work, including by public digital performance; to + broadcast and rebroadcast the Work by any means including signs, + sounds or images. + k. "Reproduce" means to make copies of the Work by any means including + without limitation by sound or visual recordings and the right of + fixation and reproducing fixations of the Work, including storage of a + protected performance or phonogram in digital form or other electronic + medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, +limit, or restrict any uses free from copyright or rights arising from +limitations or exceptions that are provided for in connection with the +copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, +Licensor hereby grants You a worldwide, royalty-free, non-exclusive, +perpetual (for the duration of the applicable copyright) license to +exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more + Collections, and to Reproduce the Work as incorporated in the + Collections; + b. to create and Reproduce Adaptations provided that any such Adaptation, + including any translation in any medium, takes reasonable steps to + clearly label, demarcate or otherwise identify that changes were made + to the original Work. For example, a translation could be marked "The + original work was translated from English to Spanish," or a + modification could indicate "The original work has been modified."; + c. to Distribute and Publicly Perform the Work including as incorporated + in Collections; and, + d. to Distribute and Publicly Perform Adaptations. + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme cannot be waived, the Licensor + reserves the exclusive right to collect such royalties for any + exercise by You of the rights granted under this License; + ii. Waivable Compulsory License Schemes. In those jurisdictions in + which the right to collect royalties through any statutory or + compulsory licensing scheme can be waived, the Licensor waives the + exclusive right to collect such royalties for any exercise by You + of the rights granted under this License; and, + iii. Voluntary License Schemes. The Licensor waives the right to + collect royalties, whether individually or, in the event that the + Licensor is a member of a collecting society that administers + voluntary licensing schemes, via that society, from any exercise + by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now +known or hereafter devised. The above rights include the right to make +such modifications as are technically necessary to exercise the rights in +other media and formats. Subject to Section 8(f), all rights not expressly +granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made +subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms + of this License. You must include a copy of, or the Uniform Resource + Identifier (URI) for, this License with every copy of the Work You + Distribute or Publicly Perform. You may not offer or impose any terms + on the Work that restrict the terms of this License or the ability of + the recipient of the Work to exercise the rights granted to that + recipient under the terms of the License. You may not sublicense the + Work. You must keep intact all notices that refer to this License and + to the disclaimer of warranties with every copy of the Work You + Distribute or Publicly Perform. When You Distribute or Publicly + Perform the Work, You may not impose any effective technological + measures on the Work that restrict the ability of a recipient of the + Work from You to exercise the rights granted to that recipient under + the terms of the License. This Section 4(a) applies to the Work as + incorporated in a Collection, but this does not require the Collection + apart from the Work itself to be made subject to the terms of this + License. If You create a Collection, upon notice from any Licensor You + must, to the extent practicable, remove from the Collection any credit + as required by Section 4(c), as requested. If You create an + Adaptation, upon notice from any Licensor You must, to the extent + practicable, remove from the Adaptation any credit as required by + Section 4(c), as requested. + b. You may Distribute or Publicly Perform an Adaptation only under the + terms of: (i) this License; (ii) a later version of this License with + the same License Elements as this License; (iii) a Creative Commons + jurisdiction license (either this or a later license version) that + contains the same License Elements as this License (e.g., + Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible + License. If you license the Adaptation under one of the licenses + mentioned in (iv), you must comply with the terms of that license. If + you license the Adaptation under the terms of any of the licenses + mentioned in (i), (ii) or (iii) (the "Applicable License"), you must + comply with the terms of the Applicable License generally and the + following provisions: (I) You must include a copy of, or the URI for, + the Applicable License with every copy of each Adaptation You + Distribute or Publicly Perform; (II) You may not offer or impose any + terms on the Adaptation that restrict the terms of the Applicable + License or the ability of the recipient of the Adaptation to exercise + the rights granted to that recipient under the terms of the Applicable + License; (III) You must keep intact all notices that refer to the + Applicable License and to the disclaimer of warranties with every copy + of the Work as included in the Adaptation You Distribute or Publicly + Perform; (IV) when You Distribute or Publicly Perform the Adaptation, + You may not impose any effective technological measures on the + Adaptation that restrict the ability of a recipient of the Adaptation + from You to exercise the rights granted to that recipient under the + terms of the Applicable License. This Section 4(b) applies to the + Adaptation as incorporated in a Collection, but this does not require + the Collection apart from the Adaptation itself to be made subject to + the terms of the Applicable License. + c. If You Distribute, or Publicly Perform the Work or any Adaptations or + Collections, You must, unless a request has been made pursuant to + Section 4(a), keep intact all copyright notices for the Work and + provide, reasonable to the medium or means You are utilizing: (i) the + name of the Original Author (or pseudonym, if applicable) if supplied, + and/or if the Original Author and/or Licensor designate another party + or parties (e.g., a sponsor institute, publishing entity, journal) for + attribution ("Attribution Parties") in Licensor's copyright notice, + terms of service or by other reasonable means, the name of such party + or parties; (ii) the title of the Work if supplied; (iii) to the + extent reasonably practicable, the URI, if any, that Licensor + specifies to be associated with the Work, unless such URI does not + refer to the copyright notice or licensing information for the Work; + and (iv) , consistent with Ssection 3(b), in the case of an + Adaptation, a credit identifying the use of the Work in the Adaptation + (e.g., "French translation of the Work by Original Author," or + "Screenplay based on original Work by Original Author"). The credit + required by this Section 4(c) may be implemented in any reasonable + manner; provided, however, that in the case of a Adaptation or + Collection, at a minimum such credit will appear, if a credit for all + contributing authors of the Adaptation or Collection appears, then as + part of these credits and in a manner at least as prominent as the + credits for the other contributing authors. For the avoidance of + doubt, You may only use the credit required by this Section for the + purpose of attribution in the manner set out above and, by exercising + Your rights under this License, You may not implicitly or explicitly + assert or imply any connection with, sponsorship or endorsement by the + Original Author, Licensor and/or Attribution Parties, as appropriate, + of You or Your use of the Work, without the separate, express prior + written permission of the Original Author, Licensor and/or Attribution + Parties. + d. Except as otherwise agreed in writing by the Licensor or as may be + otherwise permitted by applicable law, if You Reproduce, Distribute or + Publicly Perform the Work either by itself or as part of any + Adaptations or Collections, You must not distort, mutilate, modify or + take other derogatory action in relation to the Work which would be + prejudicial to the Original Author's honor or reputation. Licensor + agrees that in those jurisdictions (e.g. Japan), in which any exercise + of the right granted in Section 3(b) of this License (the right to + make Adaptations) would be deemed to be a distortion, mutilation, + modification or other derogatory action prejudicial to the Original + Author's honor and reputation, the Licensor will waive or not assert, + as appropriate, this Section, to the fullest extent permitted by the + applicable national law, to enable You to reasonably exercise Your + right under Section 3(b) of this License (right to make Adaptations) + but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR +OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY +KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, +INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, +FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF +LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, +WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION +OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE +LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR +ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES +ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS +BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate + automatically upon any breach by You of the terms of this License. + Individuals or entities who have received Adaptations or Collections + from You under this License, however, will not have their licenses + terminated provided such individuals or entities remain in full + compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will + survive any termination of this License. + b. 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 + + a. Each time You Distribute or Publicly Perform the Work or a Collection, + the Licensor offers to the recipient a license to the Work on the same + terms and conditions as the license granted to You under this License. + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor + offers to the recipient a license to the original Work on the same + terms and conditions as the license granted to You under this License. + c. 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. + d. 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. + e. 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. + f. The rights granted under, and the subject matter referenced, in this + License were drafted utilizing the terminology of the Berne Convention + for the Protection of Literary and Artistic Works (as amended on + September 28, 1979), the Rome Convention of 1961, the WIPO Copyright + Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 + and the Universal Copyright Convention (as revised on July 24, 1971). + These rights and subject matter take effect in the relevant + jurisdiction in which the License terms are sought to be enforced + according to the corresponding provisions of the implementation of + those treaty provisions in the applicable national law. If the + standard suite of rights granted under applicable copyright law + includes additional rights not granted under this License, such + additional rights are deemed to be included in the License; this + License is not intended to restrict the license of any rights under + applicable law. + + +Creative Commons Notice + + Creative Commons is not a party to this License, and makes no warranty + whatsoever in connection with the Work. Creative Commons will not be + liable to You or any party on any legal theory for any damages + whatsoever, including without limitation any general, special, + incidental or consequential damages arising in connection to this + license. Notwithstanding the foregoing two (2) sentences, if Creative + Commons has expressly identified itself as the Licensor hereunder, it + shall have all rights and obligations of Licensor. + + Except for the limited purpose of indicating to the public that the + Work is licensed under the CCPL, Creative Commons does not authorize + the use by either party of the trademark "Creative Commons" or any + related trademark or logo of Creative Commons without the prior + written consent of Creative Commons. Any permitted use will be in + compliance with Creative Commons' then-current trademark usage + guidelines, as may be published on its website or otherwise made + available upon request from time to time. For the avoidance of doubt, + this trademark restriction does not form part of the License. + + Creative Commons may be contacted at https://creativecommons.org/. diff --git a/mods/streets/README.md b/mods/streets/README.md new file mode 100644 index 0000000..7e8cd82 --- /dev/null +++ b/mods/streets/README.md @@ -0,0 +1,27 @@ +#Streets mod 2.0 +_Released on 21st of February 2017_ + +_Streets 2.0 is **not** fully backwards-compatible to streets 1.x!_ + +##Contributors + +* webdesigner97 +* cheapie +* Thomas-S +* HybridDog (for `streets_matrix_screen` submod) + +##Recommended Mods +* [ltc4000e](https://github.com/cheapie/ltc4000e) by cheapie +* [arrowboards](https://github.com/cheapie/arrowboards) by cheapie + +##License +If not mentioned otherwise: + +###Code +MIT License + +###Media +CC-BY-SA 3.0 + +### License File +See the file `LICENSE` for more details. diff --git a/mods/streets/api.lua b/mods/streets/api.lua new file mode 100644 index 0000000..cfef48e --- /dev/null +++ b/mods/streets/api.lua @@ -0,0 +1,49 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: streetsmod + Optional: false + Category: Init +]] + +function streets.copytable(orig) + local orig_type = type(orig) + local copy + if orig_type == 'table' then + copy = {} + for orig_key, orig_value in next, orig, nil do + copy[streets.copytable(orig_key)] = streets.copytable(orig_value) + end + setmetatable(copy, streets.copytable(getmetatable(orig))) + else + copy = orig + end + return copy +end + +function streets.load_submod(dirname) + dofile(streets.conf.modpath .. "/" .. dirname .. "/init.lua") + -- The function below had to be replaced by the line above + -- to make the streets mod work with minetest commit 2ff054d + + -- Check whether submod's init file exists + --[[local f = io.open(streets.conf.modpath .. "/" .. dirname .. "/init.lua") + if f ~= nil then + -- Load it + f.close() + dofile(streets.conf.modpath .. "/" .. dirname .. "/init.lua") + else + minetest.log("error", "[Streets] '" .. dirname .. "' does not exist") + end]] +end + +function streets.register_road_surface(data) + streets.surfaces.surfacetypes["streets:" .. data.name] = data +end + +function streets.register_road_sign(data) + streets.signs.signtypes["streets:" .. data.name] = data +end + +function streets.register_road_marking(data) + streets.labels.labeltypes[data.name] = data +end diff --git a/mods/streets/api_register_all.lua b/mods/streets/api_register_all.lua new file mode 100644 index 0000000..847d655 --- /dev/null +++ b/mods/streets/api_register_all.lua @@ -0,0 +1,312 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: streetsapi + Optional: false + Category: Init +]] + +local register_surface_nodes = function(friendlyname, name, tiles, groups, sounds, craft) + minetest.register_node(":streets:" .. name, { + description = friendlyname, + tiles = tiles, + groups = groups, + sounds = sounds + }) + minetest.register_craft(craft) + if minetest.get_modpath("moreblocks") then + stairsplus:register_all("streets", name, "streets:" .. name, { + description = friendlyname, + tiles = tiles, + groups = groups, + sounds = sounds + }) + end +end + +local register_sign_node = function(friendlyname, name, tiles, thickness) + tiles[5] = tiles[5] .. "^[mask:" .. tiles[6] .. "^[colorize:#fff^[mask:" .. tiles[5] + minetest.register_node(":streets:" .. name, { + description = friendlyname, + tiles = tiles, + groups = { cracky = 3, not_in_creative_inventory = (name == "sign_blank" and 0 or 1), sign = 1 }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + inventory_image = tiles[6], + after_place_node = function(pos) + local behind_pos = { x = pos.x, y = pos.y, z = pos.z } + local node = minetest.get_node(pos) + local param2 = node.param2 + if param2 == 0 then + behind_pos.z = behind_pos.z + 1 + elseif param2 == 1 then + behind_pos.x = behind_pos.x + 1 + elseif param2 == 2 then + behind_pos.z = behind_pos.z - 1 + elseif param2 == 3 then + behind_pos.x = behind_pos.x - 1 + end + local behind_node = minetest.get_node(behind_pos) + local behind_nodes = {} + behind_nodes["streets:roadwork_traffic_barrier"] = true + behind_nodes["streets:concrete_wall"] = true + behind_nodes["technic:concrete_post"] = true + local under_pos = { x = pos.x, y = pos.y - 1, z = pos.z } + local under_node = minetest.get_node(under_pos) + local under_nodes = {} + under_nodes["streets:roadwork_traffic_barrier"] = true + under_nodes["streets:concrete_wall"] = true + under_nodes["technic:concrete_post"] = true + local upper_pos = { x = pos.x, y = pos.y + 1, z = pos.z } + local upper_node = minetest.get_node(upper_pos) + if (minetest.registered_nodes[behind_node.name].groups.bigpole + and minetest.registered_nodes[behind_node.name].streets_pole_connection[param2][behind_node.param2 + 1] ~= 1) + or behind_nodes[behind_node.name] == true then + node.name = node.name .. "_polemount" + minetest.set_node(pos, node) + elseif (minetest.registered_nodes[under_node.name].groups.bigpole + and minetest.registered_nodes[under_node.name].streets_pole_connection["t"][under_node.param2 + 1] == 1) + or under_nodes[under_node.name] then + node.name = node.name .. "_center" + minetest.set_node(pos, node) + elseif minetest.registered_nodes[upper_node.name].groups.bigpole then + if minetest.registered_nodes[upper_node.name].streets_pole_connection["b"][upper_node.param2 + 1] == 1 then + node.name = node.name .. "_center" + minetest.set_node(pos, node) + end + end + end, + node_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, 0.5, 1 / 2, 1 / 2, 0.5 - thickness } + }, + selection_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, 0.5, 1 / 2, 1 / 2, math.min(0.5 - thickness, 0.45) } + } + }) + minetest.register_node(":streets:" .. name .. "_polemount", { + tiles = tiles, + groups = { cracky = 3, not_in_creative_inventory = 1 }, + drop = "streets:" .. name, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, 0.85 - thickness, 1 / 2, 1 / 2, 0.85 } + }, + selection_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, math.min(0.875 - thickness, 0.80), 1 / 2, 1 / 2, 0.85 } + } + }) + + minetest.register_node(":streets:" .. name .. "_center", { + tiles = tiles, + groups = { cracky = 3, not_in_creative_inventory = 1 }, + drop = "streets:" .. name, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + node_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, -(thickness / 2), 1 / 2, 1 / 2, (thickness / 2) } + }, + selection_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, -math.min((thickness / 2), 0.05), 1 / 2, 1 / 2, math.min((thickness / 2), 0.05) } + } + }) +end + +local register_marking_nodes = function(surface_friendlyname, surface_name, surface_tiles, surface_groups, surface_sounds, register_stairs, friendlyname, name, tex, r) + local rotation_friendly = "" + if r == "r90" then + rotation_friendly = " (R90)" + tex = tex .. "^[transformR90" + elseif r == "r180" then + rotation_friendly = " (R180)" + tex = tex .. "^[transformR180" + elseif r == "r270" then + rotation_friendly = " (R270)" + tex = tex .. "^[transformR270" + end + + if r ~= "" then + r = "_" .. r + end + + for color = 1, 2 do + local colorname + if color == 1 then + colorname = "White" + elseif color == 2 then + colorname = "Yellow" + tex = "" .. tex .. "^[colorize:#ecb100" + end + + minetest.register_tool(":streets:tool_" .. name:gsub("{color}", colorname:lower()) .. r, { + description = "Marking Tool: " .. friendlyname .. rotation_friendly .. " " .. colorname, + groups = { not_in_creative_inventory = 1 }, + inventory_image = tex, + wield_image = tex, + on_place = function(itemstack, placer, pointed_thing) + local player_name = placer:get_player_name() + local pos = {} + if pointed_thing["type"] == "node" then + pos = pointed_thing.under + pos.y = pos.y + 1 + else + return itemstack + end + if minetest.is_protected(pos, player_name) and not minetest.check_player_privs(player_name, { protection_bypass = true }) then + minetest.record_protection_violation(pos, name) + return + end + if minetest.get_node(pos).name == "air" then + minetest.set_node(pos, { + name = "streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r, + param2 = minetest.dir_to_facedir(placer:get_look_dir()) + }) + else + return itemstack + end + local node = minetest.get_node(pos) + local lower_pos = { x = pos.x, y = pos.y - 1, z = pos.z } + local lower_node = minetest.get_node(lower_pos) + if minetest.registered_nodes[lower_node.name].groups.asphalt and streets.surfaces.surfacetypes[lower_node.name] then + local lower_node_basename = streets.surfaces.surfacetypes[lower_node.name].name + lower_node.name = "streets:mark_" .. (node.name:sub(14)) .. "_on_" .. lower_node_basename + lower_node.param2 = node.param2 + minetest.set_node(lower_pos, lower_node) + minetest.remove_node(pos) + elseif minetest.registered_nodes[lower_node.name].groups.asphalt + and minetest.registered_nodes[lower_node.name:gsub("asphalt", ("mark_" .. node.name:sub(14)) .. "_on_asphalt")] then + lower_node.name = lower_node.name:gsub("asphalt", ("mark_" .. node.name:sub(14)) .. "_on_asphalt") + minetest.set_node(lower_pos, lower_node) + minetest.remove_node(pos) + end + itemstack:add_wear(65535 / 75) + return itemstack + end, + }) + + minetest.register_node(":streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r, { + description = "Marking Overlay: " .. friendlyname .. rotation_friendly .. " " .. colorname, + tiles = { tex, "streets_transparent.png" }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { snappy = 3, attached_node = 1, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1 }, + sunlight_propagates = true, + walkable = false, + inventory_image = tex, + wield_image = tex, + node_box = { + type = "fixed", + fixed = { -0.5, -0.5, -0.5, 0.5, -0.499, 0.5 } + }, + selection_box = { + type = "fixed", + fixed = { -1 / 2, -1 / 2, -1 / 2, 1 / 2, -1 / 2 + 1 / 16, 1 / 2 } + }, + drop = "", + }) + + local tiles = {} + tiles[1] = surface_tiles[1] + tiles[2] = surface_tiles[2] or surface_tiles[1] --If less than 6 textures are used, this'll "expand" them to 6 + tiles[3] = surface_tiles[3] or surface_tiles[1] + tiles[4] = surface_tiles[4] or surface_tiles[1] + tiles[5] = surface_tiles[5] or surface_tiles[1] + tiles[6] = surface_tiles[6] or surface_tiles[1] + tiles[1] = tiles[1] .. "^(" .. tex .. ")" + tiles[5] = tiles[5] .. "^(" .. tex .. ")^[transformR180" + tiles[6] = tiles[6] .. "^(" .. tex .. ")" + local groups = streets.copytable(surface_groups) + groups.not_in_creative_inventory = 1 + minetest.register_node(":streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, { + description = surface_friendlyname .. " with Marking: " .. friendlyname .. rotation_friendly .. " " .. colorname, + groups = groups, + sounds = surface_sounds, + tiles = tiles, + paramtype2 = "facedir", + drop = "", + after_destruct = function(pos, oldnode) + local newnode = oldnode + newnode.name = oldnode.name:gsub("mark_(.-)_on_", "") + minetest.set_node(pos, newnode) + end, + }) + minetest.register_craft({ + output = "streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + type = "shapeless", + recipe = { "streets:" .. surface_name, "streets:mark_" .. name:gsub("{color}", colorname:lower()) } + }) + if register_stairs and (minetest.get_modpath("moreblocks") or minetest.get_modpath("stairsplus")) then + local stairs_def = { + description = surface_friendlyname .. " with Marking: " .. friendlyname .. rotation_friendly .. " " .. colorname, + tiles = tiles, + groups = surface_groups, + sounds = surface_sounds, + drop = { + max_items = 1, -- Maximum number of items to drop. + items = { + -- Choose max_items randomly from this list. + { + items = { "" }, -- Choose one item randomly from this list. + rarity = 1, -- Probability of getting is 1 / rarity. + }, + }, + }, + after_destruct = function(pos, oldnode) + local newnode = oldnode + newnode.name = oldnode.name:gsub("mark_(.-)_on_", "") + minetest.set_node(pos, newnode) + end, + } + + stairsplus:register_stair("streets", + "mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + "streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + stairs_def) + stairsplus:register_slab("streets", + "mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + "streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + stairs_def) + stairsplus:register_slope("streets", + "mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + "streets:mark_" .. name:gsub("{color}", colorname:lower()) .. r .. "_on_" .. surface_name, + stairs_def) + end + end +end + +if streets.surfaces.surfacetypes then + for _, v in pairs(streets.surfaces.surfacetypes) do + register_surface_nodes(v.friendlyname, v.name, v.tiles, v.groups, v.sounds, v.craft) + if streets.labels.labeltypes then + for _, w in pairs(streets.labels.labeltypes) do + register_marking_nodes(v.friendlyname, v.name, v.tiles, v.groups, v.sounds, v.register_stairs, w.friendlyname, w.name, w.tex, "") + if w.rotation then + if w.rotation.r90 then + register_marking_nodes(v.friendlyname, v.name, v.tiles, v.groups, v.sounds, v.register_stairs, w.friendlyname, w.name, w.tex, "r90") + end + if w.rotation.r180 then + register_marking_nodes(v.friendlyname, v.name, v.tiles, v.groups, v.sounds, v.register_stairs, w.friendlyname, w.name, w.tex, "r180") + end + if w.rotation.r270 then + register_marking_nodes(v.friendlyname, v.name, v.tiles, v.groups, v.sounds, v.register_stairs, w.friendlyname, w.name, w.tex, "r270") + end + end + end + end + end +end + +if streets.signs.signtypes then + for _, v in pairs(streets.signs.signtypes) do + register_sign_node(v.friendlyname, v.name, v.tiles, v.thickness) + end +end diff --git a/mods/streets/depends.txt b/mods/streets/depends.txt new file mode 100644 index 0000000..bbe8c9a --- /dev/null +++ b/mods/streets/depends.txt @@ -0,0 +1,8 @@ +default +stairs +dye? +xpanes? +stairsplus? +moreblocks? +digilines? +concrete? diff --git a/mods/streets/global.lua b/mods/streets/global.lua new file mode 100644 index 0000000..83567ff --- /dev/null +++ b/mods/streets/global.lua @@ -0,0 +1,22 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: streetsmod + Optional: false + Category: Init +]] + +streets.nodeboxes = {} + +streets.nodeboxes.stair = { + { -0.5, -0.5, -0.5, 0.5, 0, 0.5 }, + { -0.5, 0, 0, 0.5, 0.5, 0.5 } +} +streets.nodeboxes.slab = { + { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } +} + +if minetest.get_modpath("concrete") then + streets.concrete_texture = "technic_concrete_block.png" +else + streets.concrete_texture = "streets_concrete.png" +end diff --git a/mods/streets/init.lua b/mods/streets/init.lua new file mode 100644 index 0000000..bdb2105 --- /dev/null +++ b/mods/streets/init.lua @@ -0,0 +1,53 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: streetsmod + Optional: false + Category: Init +]] + +print("[Mod][StreetsMod] Loading...") +-- Register a global streets namespace to operate in +streets = {} + +-- Config stuff goes here +streets.conf = { + version = "2.0", + licenseCode = "MIT License", + licenseMedia = "CC-BY-SA 3.0", + modpath = minetest.get_modpath("streets") +} + +-- The API collects some data here +streets.surfaces = { surfacetypes = {} } +streets.labels = { labeltypes = {} } +streets.signs = { signtypes = {} } + +-- Load the API file +dofile(streets.conf.modpath .. "/api.lua") + +-- Load global definitions +dofile(streets.conf.modpath .. "/global.lua") + +-- Load mod files +streets.load_submod("streets_roadsurface") +streets.load_submod("streets_roadmarkings") +streets.load_submod("streets_asphaltworkshop") +streets.load_submod("streets_installations") +streets.load_submod("streets_accessories") +streets.load_submod("streets_concrete") +streets.load_submod("streets_poles") +streets.load_submod("streets_signs") +streets.load_submod("streets_signworkshop") +streets.load_submod("streets_steelsupport") +streets.load_submod("streets_roadwork") +streets.load_submod("streets_bollards") +streets.load_submod("streets_light") + +if minetest.get_modpath("digilines") then + streets.load_submod("streets_trafficlight") + streets.load_submod("streets_laneuse") + streets.load_submod("streets_matrix_screen") +end + +-- Let the API register everything and finish the setup +dofile(streets.conf.modpath .. "/api_register_all.lua") diff --git a/mods/streets/models/asphalt_workshop.nbe b/mods/streets/models/asphalt_workshop.nbe new file mode 100644 index 0000000..47c09d2 Binary files /dev/null and b/mods/streets/models/asphalt_workshop.nbe differ diff --git a/mods/streets/models/manhole.nbe b/mods/streets/models/manhole.nbe new file mode 100644 index 0000000..577f6b7 Binary files /dev/null and b/mods/streets/models/manhole.nbe differ diff --git a/mods/streets/models/signs.nbe b/mods/streets/models/signs.nbe new file mode 100644 index 0000000..fd425ec Binary files /dev/null and b/mods/streets/models/signs.nbe differ diff --git a/mods/streets/models/stormdrain.nbe b/mods/streets/models/stormdrain.nbe new file mode 100644 index 0000000..91097b8 Binary files /dev/null and b/mods/streets/models/stormdrain.nbe differ diff --git a/mods/streets/sounds/streets_rrxing_bell.ogg b/mods/streets/sounds/streets_rrxing_bell.ogg new file mode 100644 index 0000000..d59d1b9 Binary files /dev/null and b/mods/streets/sounds/streets_rrxing_bell.ogg differ diff --git a/mods/streets/sounds/streets_rrxing_gate.ogg b/mods/streets/sounds/streets_rrxing_gate.ogg new file mode 100644 index 0000000..4106df2 Binary files /dev/null and b/mods/streets/sounds/streets_rrxing_gate.ogg differ diff --git a/mods/streets/streets_accessories/init.lua b/mods/streets/streets_accessories/init.lua new file mode 100644 index 0000000..2ff46eb --- /dev/null +++ b/mods/streets/streets_accessories/init.lua @@ -0,0 +1,199 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: accessories + Optional: true +]] + +minetest.register_node(":streets:delineator", { + description = "Delineator", + tiles = { "streets_delineator_top.png", "streets_delineator_top.png", "streets_delineator_left.png", "streets_delineator_right.png", "streets_delineator_back.png", "streets_delineator_front.png" }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { snappy = 2 }, + light_source = 2, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.125, -0.5, -0.0625, 0.125, 0.4375, 0.0625 }, -- Body + { 0, 0.4375, -0.0625, 0.125, 0.5, 0.0625 }, -- Top + } + }, + selection_box = { + type = "fixed", + fixed = { + { -0.125, -0.5, -0.0625, 0.125, 0.5, 0.0625 }, -- Body + } + } +}) + +minetest.register_craft({ + output = "streets:delineator 10", + recipe = { + { "dye:orange", "default:steel_ingot", "dye:orange" }, + { "dye:white", "default:steel_ingot", "dye:black" } + } +}) + +minetest.register_node("streets:fence_chainlink", { + description = "Chainlink Fence", + paramtype = "light", + drawtype = "nodebox", + tiles = { "streets_fence_chainlink.png" }, + sunlight_propagates = true, + groups = { snappy = 1, wall = 1 }, + node_box = { + type = "connected", + fixed = { { -1 / 32, -0.5, -1 / 32, 1 / 32, 0.5, 1 / 32 } }, + connect_front = { { 0, -0.5, -0.5, 0, 0.5, 0 } }, -- z- + connect_back = { { 0, -0.5, 0, 0, 0.5, 0.5 } }, -- z+ + connect_left = { { -0.5, -0.5, 0, 0, 0.5, 0 } }, -- x- + connect_right = { { 0, -0.5, 0, 0.5, 0.5, 0 } }, -- x+ + }, + selection_box = { + type = "connected", + fixed = { { -1 / 16, -0.5, -1 / 16, 1 / 16, 0.5, 1 / 16 } }, + connect_front = { { 0, -0.5, -0.5, 0, 0.5, 0 } }, -- z- + connect_back = { { 0, -0.5, 0, 0, 0.5, 0.5 } }, -- z+ + connect_left = { { -0.5, -0.5, 0, 0, 0.5, 0 } }, -- x- + connect_right = { { 0, -0.5, 0, 0.5, 0.5, 0 } }, -- x+ + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" }, + sound = default.node_sound_stone_defaults() +}) + +function toggleDoor(pos, node, player, action) + local name = player: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 newnode = node + if action == "close" then + newnode.name = node.name:gsub("open", "closed") + elseif action == "open" then + newnode.name = node.name:gsub("closed", "open") + end + minetest.swap_node(pos, newnode) + local upper_pos = streets.copytable(pos) + upper_pos.y = upper_pos.y + 1 + local upper_node = minetest.get_node(upper_pos) + if (upper_node.name == "streets:fence_chainlink_door_closed" and action == "open") + or (upper_node.name == "streets:fence_chainlink_door_open" and action == "close") then + toggleDoor(upper_pos, upper_node, player, action) + end + local under_pos = streets.copytable(pos) + under_pos.y = under_pos.y - 1 + local under_node = minetest.get_node(under_pos) + if (under_node.name == "streets:fence_chainlink_door_closed" and action == "open") + or (under_node.name == "streets:fence_chainlink_door_open" and action == "close") then + toggleDoor(under_pos, under_node, player, action) + end +end + +minetest.register_node("streets:fence_chainlink_door_open", { + description = "Chainlink Fence Door (Locked)", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_fence_chainlink_door.png" }, + sunlight_propagates = true, + groups = { snappy = 1, wall = 1, not_in_creative_inventory = 1 }, + node_box = { + type = "fixed", + fixed = { + { -16 / 32, -0.5, -1 / 32, -14 / 32, 0.5, 1 / 32 }, { 16 / 32, -0.5, -1 / 32, 14 / 32, 0.5, 1 / 32 }, + { -15 / 32, -0.5, 0, -15 / 32, 0.5, 0.5 }, { 15 / 32, -0.5, 0, 15 / 32, 0.5, 0.5 } + }, + }, + sound = default.node_sound_stone_defaults(), + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + toggleDoor(pos, node, player, "close") + end, + drop = "streets:fence_chainlink_door_closed", +}) + +minetest.register_node("streets:fence_chainlink_door_closed", { + description = "Chainlink Fence Door (Locked)", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_fence_chainlink_door.png" }, + sunlight_propagates = true, + groups = { snappy = 1, wall = 1 }, + node_box = { + type = "fixed", + fixed = { + { -16 / 32, -0.5, -1 / 32, -14 / 32, 0.5, 1 / 32 }, { 16 / 32, -0.5, -1 / 32, 14 / 32, 0.5, 1 / 32 }, + { -15 / 32, -0.5, 0, 15 / 32, 0.5, 0 } + }, + }, + sound = default.node_sound_stone_defaults(), + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + toggleDoor(pos, node, player, "open") + end, +}) + + + +minetest.register_craft({ + output = "streets:fence_chainlink 33", + recipe = { + { "", "dye:dark_green", "" }, + { "default:steel_ingot", "default:stick", "default:steel_ingot" }, + { "default:steel_ingot", "default:stick", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:fence_chainlink_door_closed", + recipe = { + { "streets:fence_chainlink", "streets:fence_chainlink", "" }, + { "streets:fence_chainlink", "streets:fence_chainlink", "" }, + { "streets:fence_chainlink", "streets:fence_chainlink", "" } + } +}) + +minetest.register_node("streets:guardrail", { + description = "Guardrail", + paramtype = "light", + drawtype = "nodebox", + tiles = { "streets_guardrail.png" }, + sunlight_propagates = true, + groups = { cracky = 1, wall = 1 }, + node_box = { + type = "connected", + fixed = { { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }, }, + connect_front = { + { 0, -0.1875, -0.5, 0, 0.4375, 0 }, + { -0.0625, 0.1875, -0.5, 0.0625, 0.3125, 0 }, + { -0.0625, -0.0625, -0.5, 0.0625, 0.0625, 0 }, + }, -- z- + connect_back = { + { 0, -0.1875, 0.5, 0, 0.4375, 0 }, + { -0.0625, 0.1875, 0.5, 0.0625, 0.3125, 0 }, + { -0.0625, -0.0625, 0.5, 0.0625, 0.0625, 0 }, + }, -- z+ + connect_left = { + { -0.5, -0.1875, 0, 0, 0.4375, 0 }, + { -0.5, 0.1875, -0.0625, 0, 0.3125, 0.0625 }, + { -0.5, -0.0625, -0.0625, 0, 0.0625, 0.0625 }, + }, -- x- + connect_right = { + { 0.5, -0.1875, 0, 0, 0.4375, 0 }, + { 0.5, 0.1875, -0.0625, 0, 0.3125, 0.0625 }, + { 0.5, -0.0625, -0.0625, 0, 0.0625, 0.0625 }, + }, -- x+ + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" }, + sound = default.node_sound_stone_defaults() +}) + +minetest.register_craft({ + output = "streets:guardrail 12", + recipe = { + { "streets:bigpole", "default:steel_ingot", "streets:bigpole" }, + { "streets:bigpole", "default:steel_ingot", "streets:bigpole" } + } +}) \ No newline at end of file diff --git a/mods/streets/streets_asphaltworkshop/init.lua b/mods/streets/streets_asphaltworkshop/init.lua new file mode 100644 index 0000000..305065c --- /dev/null +++ b/mods/streets/streets_asphaltworkshop/init.lua @@ -0,0 +1,315 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: asphaltworkshop + Optional: true +]] + +streets.workshop = {} + +function streets.workshop.start(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:asphalt_workshop" then + return + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local template = inv:get_stack("template", 1):get_name() + local steel = inv:get_stack("steel", 1):get_name() + local yellow_needed = inv:get_stack("yellow_needed", 1):get_count() + local white_needed = inv:get_stack("white_needed", 1):get_count() + local yellow_ok = inv:get_stack("yellow_dye", 1):get_count() >= yellow_needed + local white_ok = inv:get_stack("white_dye", 1):get_count() >= white_needed + + if not (yellow_ok and white_ok and steel and steel == "default:steel_ingot" and template and template ~= "") then + return + end + + if not inv:room_for_item("output", { name = template, count = 1 }) then + return + end + + meta:set_string("working_on", template) + meta:set_int("progress", 0) + inv:remove_item("yellow_dye", { name = "dye:yellow", count = yellow_needed }) + inv:remove_item("white_dye", { name = "dye:white", count = white_needed }) + inv:remove_item("steel", { name = "default:steel_ingot", count = 1 }) + streets.workshop.step(pos) +end + +function streets.workshop.step(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:asphalt_workshop" then + return + end + local meta = minetest.get_meta(pos) + if meta:get_string("working_on") == "" then + return + end + local inv = meta:get_inventory() + local progress = meta:get_int("progress") + progress = progress + 1 + if progress < 10 then + minetest.after(0.2, streets.workshop.step, pos) + else + meta:set_int("progress", 0) + progress = 0 + inv:add_item("output", meta:get_string("working_on")) + meta:set_string("working_on", "") + streets.workshop.start(pos) + end + meta:set_int("progress", progress) + streets.workshop.update_formspec(pos) +end + +function streets.workshop.update_formspec(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:asphalt_workshop" then + return + end + local meta = minetest.get_meta(pos) + local fs = "size[9,9;]" + fs = fs .. "tabheader[0,0;tabs;" + for k, v in pairs(streets.labels.sections) do + fs = fs .. minetest.formspec_escape(v.friendlyname) .. "," + end + fs = fs:sub(1, -2) --Strip trailing comma + fs = fs .. ";" .. meta:get_int("section") .. ";false;true]" + fs = fs .. "label[0,-0.25;Select Color]" + fs = fs .. "image_button[0,0.25;1,1;dye_white.png;color_white;]" + fs = fs .. "image_button[1,0.25;1,1;dye_yellow.png;color_yellow;]" + fs = fs .. "label[0,1.25;Dye Input]" + fs = fs .. "list[context;white_dye;0,1.75;1,1]" + fs = fs .. "list[context;yellow_dye;1,1.75;1,1]" + fs = fs .. "label[0,2.75;Dye Required]" + fs = fs .. "list[context;white_needed;0,3.25;1,1]" + fs = fs .. "list[context;yellow_needed;1,3.25;1,1]" + fs = fs .. "label[2,-0.25;Rotation]" + fs = fs .. "button[2,0.25;1,1;r0;R0]" + fs = fs .. "button[2,1.25;1,1;r90;R90]" + fs = fs .. "button[2,2.25;1,1;r180;R180]" + fs = fs .. "button[2,3.25;1,1;r270;R270]" + fs = fs .. "list[context;list;3,0;4,4]" + fs = fs .. "label[7,0.5;Steel ingot]" + fs = fs .. "label[8,0.5;Template]" + fs = fs .. "list[context;steel;7,1;1,1]" + fs = fs .. "list[context;template;8,1;1,1]" + fs = fs .. "image[7.5,2;1,1;gui_furnace_arrow_bg.png^[lowpart:" .. meta:get_int("progress") * 10 .. ":gui_furnace_arrow_fg.png^[transformR180]" + fs = fs .. "list[context;output;7.5,3;1,1]" + fs = fs .. "list[current_player;main;0.5,5;8,4]" + if minetest.setting_getbool("creative_mode") then + fs = fs .. "label[2,4;CREATIVE MODE: Taking templates is enabled]" + end + meta:set_string("formspec", fs) +end + +local function update_inventory(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:asphalt_workshop" then + return + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + inv:set_size("white_dye", 1) + inv:set_size("yellow_dye", 1) + inv:set_size("white_needed", 0) + inv:set_size("yellow_needed", 0) + inv:set_size("list", 0) + inv:set_size("white_needed", 1) + inv:set_size("yellow_needed", 1) + inv:set_size("list", 16) -- 4x4 + inv:set_size("steel", 1) + inv:set_size("template", 1) + inv:set_size("output", 1) + + local color = meta:get_string("color") + local section = meta:get_int("section") + local rotation = meta:get_string("rotation") + local sectionname = streets.labels.sections[section].name + for k, v in pairs(streets.labels.labeltypes) do + if v.section == sectionname then + if v.rotation then + if v.rotation.r90 and rotation == "r90" then + inv:add_item("list", "streets:tool_" .. v.name:gsub("{color}", color:lower()) .. "_r90") + elseif v.rotation.r180 and rotation == "r180" then + inv:add_item("list", "streets:tool_" .. v.name:gsub("{color}", color:lower()) .. "_r180") + elseif v.rotation.r270 and rotation == "r270" then + inv:add_item("list", "streets:tool_" .. v.name:gsub("{color}", color:lower()) .. "_r270") + end + end + if rotation == "r0" then + inv:add_item("list", "streets:tool_" .. v.name:gsub("{color}", color:lower())) + end + end + end + local templatestack = inv:get_stack("template", 1) + local markingcolor = "" + if templatestack and templatestack:to_string() ~= "" then + local selectedmarking = templatestack:to_table().name:sub(14) + if selectedmarking:find("white") then + markingcolor = "white" + elseif selectedmarking:find("yellow") then + markingcolor = "yellow" + end + selectedmarking = selectedmarking:gsub("white", "{color}") + selectedmarking = selectedmarking:gsub("yellow", "{color}") + selectedmarking = selectedmarking:gsub("_r90", "") + selectedmarking = selectedmarking:gsub("_r180", "") + selectedmarking = selectedmarking:gsub("_r270", "") + local dyesneeded = streets.labels.labeltypes[selectedmarking].dye_needed + if markingcolor == "white" then + inv:add_item("white_needed", { name = "dye:white", count = dyesneeded }) + end + if markingcolor == "yellow" then + inv:add_item("yellow_needed", { name = "dye:yellow", count = dyesneeded }) + end + end + streets.workshop.update_formspec(pos) + streets.workshop.start(pos) +end + +local function on_receive_fields(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.tabs then + meta:set_int("section", fields.tabs) + elseif fields.color_white then + meta:set_string("color", "white") + elseif fields.color_yellow then + meta:set_string("color", "yellow") + elseif fields.r0 then + meta:set_string("rotation", "r0") + elseif fields.r90 then + meta:set_string("rotation", "r90") + elseif fields.r180 then + meta:set_string("rotation", "r180") + elseif fields.r270 then + meta:set_string("rotation", "r270") + end + update_inventory(pos) +end + +local function on_construct(pos) + local meta = minetest.get_meta(pos) + meta:set_int("section", 1) + meta:set_string("color", "white") + meta:set_string("rotation", "r0") + meta:set_int("progress", 0) + meta:set_string("working_on", "") + update_inventory(pos) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if listname == "output" or listname == "steel" or listname == "white_dye" or listname == "yellow_dye" or (listname == "list" and minetest.setting_getbool("creative_mode")) then + return stack:get_count() + else + return 0 + end +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + if from_list == "list" and to_list == "template" then + return 1 + elseif from_list == "template" and to_list == "list" then + local inv = minetest.get_meta(pos):get_inventory() + return 1 + else + return 0 + end +end + +local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + update_inventory(pos) +end + +local function on_metadata_inventory_put(pos, listname, index, stack, player) + update_inventory(pos) +end + +local function on_metadata_inventory_take(pos, listname, index, stack, player) + update_inventory(pos) +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if listname == "yellow_dye" or listname == "white_dye" or (listname == "list" and minetest.setting_getbool("creative_mode")) then + return stack:get_count() + elseif listname == "steel" and (stack:get_name() == "default:steel_ingot") then + return stack:get_count() + else + return 0 + end +end + +local function can_dig(pos, player) + local inv = minetest.get_meta(pos):get_inventory() + if inv:is_empty("yellow_dye") and inv:is_empty("white_dye") and inv:is_empty("steel") and inv:is_empty("output") then + return true + else + return false + end +end + +minetest.register_node(":streets:asphalt_workshop", { + description = "Asphalt Workshop", + tiles = { + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + "default_steel_block.png^(streets_asphalt.png^[opacity:200)", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.4375, 0.375, -0.1875, 0.4375, 0.4375, -0.125 }, -- rail + { -0.125, 0.3125, -0.25, -0.0625, 0.375, -0.0625 }, -- sprayer + { -0.5, -0.5, -0.5, -0.4375, 0.5, 0.5 }, -- sideL + { 0.4375, -0.5, -0.5, 0.5, 0.5, 0.5 }, -- sideR + { -0.4375, 0.3125, -0.5, -0.375, 0.375, 0.5 }, -- railLB + { -0.4375, 0.4375, -0.5, -0.375, 0.5, 0.5 }, -- railLT + { -0.4375, 0.375, -0.5, -0.375, 0.4375, -0.4375 }, -- railLF + { -0.4375, -0.5, 0.4375, 0.4375, 0.5, 0.5 }, -- sideR + { 0.375, 0.3125, -0.5, 0.4375, 0.375, 0.5 }, -- railRB + { 0.375, 0.4375, -0.5, 0.4375, 0.5, 0.5 }, -- railRT + { 0.375, 0.375, -0.5, 0.4375, 0.4375, -0.4375 }, -- railRF + { -0.4375, 0.375, 0.375, -0.375, 0.4375, 0.4375 }, -- railLB + { 0.375, 0.3125, 0.375, 0.4375, 0.375, 0.4375 }, -- railRB + { -0.5, -0.5, -0.5, -0.375, 0.3125, 0.4375 }, -- sideL2 + { 0.375, -0.5, -0.5, 0.4375, 0.3125, 0.4375 }, -- sideR2 + { -0.4375, -0.5, -0.4375, 0.4375, -0.1875, 0.4375 }, -- body + } + }, + selection_box = { + type = "regular" + }, + on_receive_fields = on_receive_fields, + on_construct = on_construct, + allow_metadata_inventory_take = allow_metadata_inventory_take, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_put = allow_metadata_inventory_put, + on_metadata_inventory_move = on_metadata_inventory_move, + on_metadata_inventory_put = on_metadata_inventory_put, + on_metadata_inventory_take = on_metadata_inventory_take, + can_dig = can_dig, +}) + +minetest.register_lbm({ + name = "streets:update_asphalt_workshop", + nodenames = { "streets:asphalt_workshop" }, + action = function(pos, node) + update_inventory(pos) + end, +}) + +minetest.register_craft({ + output = "streets:asphalt_workshop", + recipe = { + { "streets:asphalt", "streets:asphalt", "streets:asphalt" }, + { "streets:asphalt", "default:mese_crystal_fragment", "streets:asphalt" }, + { "streets:asphalt", "streets:asphalt", "streets:asphalt" }, + } +}) \ No newline at end of file diff --git a/mods/streets/streets_bollards/init.lua b/mods/streets/streets_bollards/init.lua new file mode 100644 index 0000000..9a8c80d --- /dev/null +++ b/mods/streets/streets_bollards/init.lua @@ -0,0 +1,171 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: bollards + Optional: true +]] + +local function toggle_bollard(pos, node, clicker, itemstack, pointed_thing, to_role) + if minetest.registered_nodes[minetest.get_node(pos).name].bollard then + local n = minetest.get_node(pos) + local ndef = minetest.registered_nodes[n.name] + if clicker and ndef.bollard.protection then + local name = clicker: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 + end + if to_role then + local to = minetest.registered_nodes[ndef.bollard.counterpart] + if to.bollard.role ~= to_role then + return + end + end + minetest.set_node(pos, { name = ndef.bollard.counterpart, param2 = n.param2 }) + end +end + +minetest.register_node("streets:bollard_driver", { + description = "Driver for Bollards", + tiles = { "streets_bollard_driver_top.png", "default_steel_block.png" }, + groups = { cracky = 1 }, + -- on_rightclick = toggle_bollard, -- Automatic bollards mustn't be toggled manually! + mesecons = { + effector = { + 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}, + {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} + }, + action_off = function(pos, node) + toggle_bollard(vector.add(pos, vector.new(0, 1, 0)), node, nil, nil, { type = "node", under = vector.add(pos, vector.new(0, -1, 0)), above = vector.add(pos, vector.new(0, 1, 0)) }, "up") + end, + action_on = function(pos, node) + toggle_bollard(vector.add(pos, vector.new(0, 1, 0)), node, nil, nil, { type = "node", under = vector.add(pos, vector.new(0, -1, 0)), above = vector.add(pos, vector.new(0, 1, 0)) }, "down") + end + } + } +}) + +minetest.register_craft({ + output = "streets:bollard_driver", + recipe = { + { "default:steel_ingot", "streets:bollard_steel_automatic_up", "default:steel_ingot" }, + { "default:steel_ingot", "default:mese_crystal_fragment", "default:steel_ingot" }, + } +}) + +minetest.register_node("streets:bollard_steel_automatic_up", { + description = "Steel Bollard", + tiles = { "streets_bollard_driver_top.png", "streets_bollard_driver_top.png", "streets_bollard_automatic_side.png" }, + groups = { cracky = 1 }, + paramtype = "light", + drawtype = "nodebox", + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.3125, -0.5, -0.3125, 0.3125, 0.5, 0.3125 } + } + }, + bollard = { + role = "up", + counterpart = "streets:bollard_steel_automatic_down" + } +}) + +minetest.register_node("streets:bollard_steel_automatic_down", { + tiles = { "streets_bollard_driver_top.png", "streets_bollard_driver_top.png", "streets_bollard_automatic_side.png" }, + groups = { cracky = 1, not_in_creative_inventory = 1 }, + drop = "streets:bollard_steel_automatic_up", + paramtype = "light", + drawtype = "nodebox", + walkable = false, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.3125, -0.5, -0.3125, 0.3125, -0.4375, 0.3125 } + } + }, + bollard = { + role = "down", + counterpart = "streets:bollard_steel_automatic_up" + } +}) + +minetest.register_craft({ + output = "streets:bollard_steel_automatic_up", + recipe = { + { "dye:red", "dye:white", "dye:red" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + } +}) + +minetest.register_node("streets:bollard_steel_manual_up", { + description = "Manual Bollard", + tiles = { "streets_bollard_manual_top.png", "streets_bollard_manual_top.png", "streets_bollard_manual_side.png" }, + groups = { cracky = 1 }, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + sunlight_propagates = true, + on_rightclick = toggle_bollard, + node_box = { + type = "fixed", + fixed = { + { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 } + } + }, + bollard = { + role = "up", + counterpart = "streets:bollard_steel_manual_down", + protection = true + } +}) + +minetest.register_node("streets:bollard_steel_manual_down", { + tiles = { + "streets_bollard_manual_side_down.png", "streets_bollard_manual_side_down.png^[transformR180", "streets_bollard_manual_side_down.png^[transformR270", "streets_bollard_manual_side_down.png^[transformR90", "streets_bollard_manual_top.png", + }, + groups = { cracky = 1, not_in_creative_inventory = 1 }, + drop = "streets:bollard_steel_manual_up", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + walkable = false, + sunlight_propagates = true, + on_rightclick = toggle_bollard, + node_box = { + type = "fixed", + fixed = { + { -0.125, -0.5, 0.125, 0.125, -0.25, 1.00 } + } + }, + bollard = { + role = "down", + counterpart = "streets:bollard_steel_manual_up", + protection = true + } +}) + +minetest.register_craft({ + output = "streets:bollard_steel_manual_up", + recipe = { + { "dye:red", "dye:white", "dye:red" }, + { "", "default:steel_ingot", "" }, + { "", "default:steel_ingot", "" }, + } +}) diff --git a/mods/streets/streets_concrete/init.lua b/mods/streets/streets_concrete/init.lua new file mode 100644 index 0000000..bb36271 --- /dev/null +++ b/mods/streets/streets_concrete/init.lua @@ -0,0 +1,57 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: Concrete + Optional: true +]] + +if minetest.get_modpath("concrete") then + minetest.register_alias("streets:concrete", "technic:concrete") +else + minetest.register_alias("technic:concrete", "streets:concrete") + + minetest.register_node("streets:concrete", { + description = "Concrete", + tiles = { streets.concrete_texture }, + groups = { cracky = 2, stone = 3 }, + sounds = default.node_sound_stone_defaults() + }) + + + if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairsplus") then + stairsplus:register_all("streets", "concrete", "streets:concrete", { + description = "Concrete", + tiles = { streets.concrete_texture }, + groups = { cracky = 2, stone = 3 }, + sounds = default.node_sound_stone_defaults() + }) + end +end + +minetest.register_node("streets:concrete_wall", { + description = "Concrete Wall", + paramtype = "light", + drawtype = "nodebox", + tiles = { streets.concrete_texture }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, wall = 1 }, + node_box = { + type = "connected", + fixed = { { -0.35, -0.5, -0.35, 0.35, -0.4, 0.35 }, { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 } }, + connect_front = { { -0.35, -0.5, -0.5, 0.35, -0.4, 0.35 }, { -0.15, -0.5, -0.5, 0.15, 0.5, 0.15 } }, -- z- + connect_back = { { -0.35, -0.5, -0.35, 0.35, -0.4, 0.5 }, { -0.15, -0.5, -0.15, 0.15, 0.5, 0.5 } }, -- z+ + connect_left = { { -0.5, -0.5, -0.35, 0.35, -0.4, 0.35 }, { -0.5, -0.5, -0.15, 0.15, 0.5, 0.15 } }, -- x- + connect_right = { { -0.35, -0.5, -0.35, 0.5, -0.4, 0.35 }, { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 } }, -- x+ + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" }, + sound = default.node_sound_stone_defaults() +}) + + +minetest.register_craft({ + output = "streets:concrete_wall 5", + recipe = { + { "", "streets:concrete", "" }, + { "", "streets:concrete", "" }, + { "streets:concrete", "streets:concrete", "streets:concrete" }, + } +}) diff --git a/mods/streets/streets_installations/init.lua b/mods/streets/streets_installations/init.lua new file mode 100644 index 0000000..c1e5079 --- /dev/null +++ b/mods/streets/streets_installations/init.lua @@ -0,0 +1,115 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: installations + Optional: true +]] + +for surface_name, surface_data in pairs(streets.surfaces.surfacetypes) do + minetest.register_node(":streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_manhole", { + description = "Manhole", + tiles = { surface_data["tiles"][1] .. "^streets_manhole.png", surface_data.tiles[1] }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 3 }, + on_rightclick = function(pos, node, name) + local name = name: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 + node.name = node.name .. "_open" + minetest.set_node(pos, node) + end, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, -0.375 }, -- F + { -0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }, -- B + { -0.5, -0.5, -0.4375, -0.375, 0.5, 0.4375 }, -- L + { 0.375, -0.5, -0.4375, 0.5, 0.5, 0.4375 }, -- R + { -0.25, 0.4375, -0.25, 0.25, 0.5, 0.25 }, -- CenterPlate + { -0.5, 0.4375, -0.0625, 0.5, 0.5, 0.0625 }, -- CenterLR + { -0.0625, 0.4375, -0.5, 0.0625, 0.5, 0.5 }, -- CenterFR + } + }, + }) + + minetest.register_node(":streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_manhole_open", { + tiles = { surface_data["tiles"][1] .. "^streets_manhole.png", surface_data.tiles[1] }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + climbable = true, + drop = "streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_manhole", + groups = { cracky = 3, not_in_creative_inventory = 1 }, + on_rightclick = function(pos, node, name) + local name = name: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 + node.name = string.sub(node.name, 1, -6) + minetest.set_node(pos, node) + end, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, -0.375 }, -- F + { -0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }, -- B + { -0.5, -0.5, -0.4375, -0.375, 0.5, 0.4375 }, -- L + { 0.375, -0.5, -0.4375, 0.5, 0.5, 0.4375 }, -- R + } + }, + }) + + + + minetest.register_craft({ + output = "streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_manhole 4", + recipe = { + { surface_name, surface_name, surface_name }, + { surface_name, "default:steel_ingot", surface_name }, + { surface_name, surface_name, surface_name }, + } + }) + + minetest.register_node(":streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_stormdrain", { + description = "Stormdrain", + tiles = { surface_data["tiles"][1] .. "^streets_stormdrain.png", surface_data.tiles[1] }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 3 }, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, -0.4375 }, -- F + { -0.5, -0.5, 0.4375, 0.5, 0.5, 0.5 }, -- B + { -0.5, -0.5, -0.4375, -0.375, 0.5, 0.4375 }, -- L + { 0.375, -0.5, -0.4375, 0.5, 0.5, 0.4375 }, -- R + { -0.4375, 0.4375, 0, 0.4375, 0.5, 0.4375 }, -- T1 + { -0.3125, 0.4375, -0.4375, -0.25, 0.5, 0 }, -- S1 + { 0.25, 0.4375, -0.4375, 0.3125, 0.5, 0 }, -- S2 + { -0.1875, 0.4375, -0.4375, -0.125, 0.5, 0 }, -- S3 + { 0.125, 0.4375, -0.4375, 0.1875, 0.5, 0 }, -- S4 + { -0.0625, 0.4375, -0.3125, 0.0625, 0.5, 0 }, -- S5 + { -0.125, 0.4375, -0.375, 0.125, 0.5, -0.3125 }, -- S6 + } + }, + selection_box = { + type = "regular" + } + }) + + minetest.register_craft({ + output = "streets:" .. surface_name:sub(2, -1):split(":")[2] .. "_stormdrain 3", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { surface_name, surface_name, surface_name }, + } + }) +end diff --git a/mods/streets/streets_laneuse/init.lua b/mods/streets/streets_laneuse/init.lua new file mode 100644 index 0000000..e1c8ee1 --- /dev/null +++ b/mods/streets/streets_laneuse/init.lua @@ -0,0 +1,147 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: laneuse + Optional: true +]] + +local nodebox = { + { -7 / 16, -7 / 16, -1 / 8, 7 / 16, 7 / 16, 1 / 8 }, --Face + { -7 / 16, 0, -1 / 4, -3 / 8, 7 / 16, -1 / 8 }, --Visor Left + { 3 / 8, 0, -1 / 4, 7 / 16, 7 / 16, -1 / 8 }, --Visor Right + { -7 / 16, 3 / 8, -5 / 16, 7 / 16, 7 / 16, -1 / 8 }, --Visor Top + { -1 / 4, -1 / 4, 0.85, 1 / 4, 1 / 4, 1 / 8 }, --Mounting Bracket +} + +minetest.register_node("streets:lane_use_off", { + description = "Lane Use Signal", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_laneuse_off.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + groups = { cracky = 3 }, + node_box = { + type = "fixed", + fixed = nodebox + }, + selection_box = { + type = "fixed", + fixed = nodebox + }, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if setchan ~= channel then + return + end + msg = msg:lower() + if (msg == "off") then + node.name = "streets:lane_use_off" + elseif (msg == "green") then + node.name = "streets:lane_use_green" + elseif (msg == "red") then + node.name = "streets:lane_use_red" + elseif (msg == "yellow") then + node.name = "streets:lane_use_yellow" + end + minetest.set_node(pos, node) + minetest.get_meta(pos):set_string("channel", setchan) + end + } + } +}) + +for _, v in pairs({ "green", "yellow", "red" }) do + minetest.register_node("streets:lane_use_" .. v, { + drop = "streets:lane_use_off", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_laneuse_" .. v .. ".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + groups = { cracky = 3, not_in_creative_inventory = 1 }, + light_source = 11, + node_box = { + type = "fixed", + fixed = nodebox + }, + selection_box = { + type = "fixed", + fixed = nodebox + }, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if setchan ~= channel then + return + end + msg = msg:lower() + if (msg == "off") then + node.name = "streets:lane_use_off" + elseif (msg == "green") then + node.name = "streets:lane_use_green" + elseif (msg == "red") then + node.name = "streets:lane_use_red" + elseif (msg == "yellow") then + node.name = "streets:lane_use_yellow" + end + minetest.set_node(pos, node) + minetest.get_meta(pos):set_string("channel", setchan) + end + } + } + }) +end + +minetest.register_craft({ + output = "streets:lane_use_off", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "dye:red", "dye:yellow", "dye:green" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + } +}) diff --git a/mods/streets/streets_light/init.lua b/mods/streets/streets_light/init.lua new file mode 100644 index 0000000..1546edd --- /dev/null +++ b/mods/streets/streets_light/init.lua @@ -0,0 +1,385 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: light + Optional: true +]] + +local 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}, + {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} +} + +local function update_formspec(pos) + local node = minetest.get_node(pos) + if not minetest.registered_nodes[node.name].groups.streets_light then + return + end + local meta = minetest.get_meta(pos) + local mode = meta:get_string("mode") + + local fs = "size[9,6;]" + fs = fs .. "label[0,0;Street Light Setup]" + fs = fs .. "box[0,0.4;8.6,0.05;#FFFFFF]" + fs = fs .. "box[2.6,0.6;0.05,5.4;#FFFFFF]" + fs = fs .. "label[0,0.6;Select Mode:]" + fs = fs .. "button[0,1.25;2.5,1;time;Time]" + fs = fs .. "button[0,2.25;2.5,1;digiline;Digiline]" + fs = fs .. "button[0,3.25;2.5,1;mesecons;Mesecons]" + fs = fs .. "button[0,4.25;2.5,1;manual;Manual]" + + if mode == "time" then + fs = fs .. "label[3,0.6;Selected Mode: Time]" + fs = fs .. "field[3.5,2;2,1;time_on;Turn-On-Time;${time_on}]" + fs = fs .. "button[5,1.7;1,1;submit_time;OK]" + fs = fs .. "field[3.5,4;2,1;time_off;Turn-Off-Time;${time_off}]" + fs = fs .. "button[5,3.7;1,1;submit_time;OK]" + elseif mode == "digiline" then + fs = fs .. "label[3,0.6;Selected Mode: Digiline]" + fs = fs .. "label[3,2;Send digiline message 'ON' to turn the lantern on.]" + fs = fs .. "label[3,2.3;Send digiline message 'OFF' to turn the lantern off.]" + fs = fs .. "field[3.5,4;2,1;channel;Digiline Channel;${channel}]" + fs = fs .. "button[5,3.7;1,1;submit_channel;OK]" + elseif mode == "mesecons" then + fs = fs .. "label[3,0.6;Selected Mode: Mesecons]" + fs = fs .. "label[3,2;The lantern is on when receiving mesecons signal.]" + fs = fs .. "label[3,2.3;The lantern is off when not receiving mesecons signal.]" + elseif mode == "manual" then + fs = fs .. "label[3,0.6;Selected Mode: Manual]" + fs = fs .. "label[3,2;Punch the lantern to change the state (on/off).]" + end + meta:set_string("formspec", fs) +end + +local on_receive_fields = function(pos, formname, fields, sender) + local name = sender:get_player_name() + if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then + minetest.chat_send_player(name, core.colorize("#FF5300", "You don't have access to this lantern. Stop trying to configure it!")) + minetest.record_protection_violation(pos, name) + return + end + + local meta = minetest.get_meta(pos) + + if fields.time then + meta:set_string("mode", "time") + elseif fields.digiline then + meta:set_string("mode", "digiline") + elseif fields.mesecons then + meta:set_string("mode", "mesecons") + elseif fields.manual then + meta:set_string("mode", "manual") + end + + if fields.submit_channel then + meta:set_string("channel", fields.channel) + elseif fields.submit_time then + meta:set_int("time_on", tonumber(fields.time_on)) + meta:set_int("time_off", tonumber(fields.time_off)) + end + + update_formspec(pos) +end + +local on_digiline_receive = function(pos, node, channel, msg) + local meta = minetest.get_meta(pos) + local mode = meta:get_string("mode") + local state = node.name:find("off") and "off" or "on" + local newnode = node + if type(msg) == "string" then + msg = msg:lower() + if mode == "digiline" and channel == meta:get_string("channel") then + if state == "on" then + if msg == "off" then + newnode.name = newnode.name:gsub("_on", "_off") + minetest.swap_node(pos, newnode) + end + else + if msg == "on" then + newnode.name = newnode.name:gsub("_off", "_on") + minetest.swap_node(pos, newnode) + end + end + end + end +end + +local on_punch = function(pos, node, player, pointed_thing) + local player_name = player:get_player_name() + if minetest.is_protected(pos, player_name) and not minetest.check_player_privs(player_name, {protection_bypass=true}) then + minetest.chat_send_player(player_name, core.colorize("#FF5300", "You don't have access to this lantern. Stop trying to turn it on/off!")) + minetest.record_protection_violation(pos, player_name) + return + end + local meta = minetest.get_meta(pos) + local mode = meta:get_string("mode") + local state = node.name:find("off") and "off" or "on" + local newnode = node + if mode == "manual" then + if state == "on" then + newnode.name = newnode.name:gsub("_on", "_off") + minetest.swap_node(pos, newnode) + else + newnode.name = newnode.name:gsub("_off", "_on") + minetest.swap_node(pos, newnode) + end + end +end + +local on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("mode", "time") + meta:set_string("channel", "streetlight") + meta:set_int("time_on", "18500") + meta:set_string("time_off","5500") + update_formspec(pos) +end + +local def_digiline = + { + receptor = {}, + effector = { + action = on_digiline_receive, + rules = rules + }, + wire = { + rules = rules + } + } + +local def_mesecons = + { + effector = { + action_on = function (pos, node) + local meta = minetest.get_meta(pos) + local state = node.name:find("off") and "off" or "on" + if meta:get_string("mode") == "mesecons" and state == "off" then + local newnode = node + newnode.name = newnode.name:gsub("_off", "_on") + minetest.swap_node(pos, newnode) + end + end, + + action_off = function (pos, node) + local meta = minetest.get_meta(pos) + local state = node.name:find("off") and "off" or "on" + if meta:get_string("mode") == "mesecons" and state == "on" then + local newnode = node + newnode.name = newnode.name:gsub("_on", "_off") + minetest.swap_node(pos, newnode) + end + end, + + rules = rules + }, + wire = { + rules = rules + } + } + + + + + +minetest.register_abm({ + nodenames = {"group:streets_light"}, + interval = 10, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + local mode = meta:get_string("mode") + local state = node.name:find("off") and "off" or "on" + local newnode = node + if mode == "time" then + local time = minetest.get_timeofday() * 24000 + if state == "on" then + if time < meta:get_int("time_on") and time > meta:get_int("time_off") then + newnode.name = newnode.name:gsub("_on", "_off") + minetest.swap_node(pos, newnode) + end + else + if time > meta:get_int("time_on") or time < meta:get_int("time_off") then + newnode.name = newnode.name:gsub("_off", "_on") + minetest.swap_node(pos, newnode) + end + end + end + end, +}) + + + + + + +minetest.register_node(":streets:light_vertical_off", { + description = "Streets Light Vertical", + tiles = {"streets_pole.png", "streets_pole.png", "streets_light_vertical_off.png", "streets_light_vertical_off.png", "streets_light_vertical_off.png", "streets_light_vertical_off.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1}, + light_source = 0, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}, + } + }, + on_construct = on_construct, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + +minetest.register_node(":streets:light_vertical_on", { + tiles = {"streets_pole.png", "streets_pole.png", "streets_light_vertical_on.png", "streets_light_vertical_on.png", "streets_light_vertical_on.png", "streets_light_vertical_on.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1, not_in_creative_inventory = 1}, + light_source = 14, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}, + } + }, + drop = "streets:light_vertical_off", + on_construct = on_constract, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + + +minetest.register_node(":streets:light_horizontal_off", { + description = "Streets Light Horizontal", + tiles = {"streets_pole.png", "streets_light_horizontal_off_bottom.png", "streets_light_horizontal_off_side.png", "streets_light_horizontal_off_side.png", "streets_light_horizontal_off_side.png", "streets_light_horizontal_off_side.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1}, + light_source = 0, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-3/16, -3/16, -0.5, 3/16, 3/16, 0.5}, + } + }, + on_construct = on_construct, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + +minetest.register_node(":streets:light_horizontal_on", { + tiles = {"streets_pole.png", "streets_light_horizontal_on_bottom.png", "streets_light_horizontal_on_side.png", "streets_light_horizontal_on_side.png", "streets_light_horizontal_on_side.png", "streets_light_horizontal_on_side.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1, not_in_creative_inventory = 1}, + light_source = 14, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-3/16, -3/16, -0.5, 3/16, 3/16, 0.5}, + } + }, + drop = "streets:light_horizontal_off", + on_construct = on_constract, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + + +minetest.register_node(":streets:light_hanging_off", { + description = "Streets Light Hanging", + tiles = {"streets_pole.png", "streets_light_horizontal_off_bottom.png", "streets_light_hanging_off_side.png", "streets_light_hanging_off_side.png", "streets_light_hanging_off_side.png", "streets_light_hanging_off_side.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1}, + light_source = 0, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-3/16, 2/16, -0.5, 3/16, 0.5, 0.5}, + } + }, + on_construct = on_construct, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + +minetest.register_node(":streets:light_hanging_on", { + tiles = {"streets_pole.png", "streets_light_horizontal_on_bottom.png", "streets_light_hanging_on_side.png", "streets_light_hanging_on_side.png", "streets_light_hanging_on_side.png", "streets_light_hanging_on_side.png"}, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, streets_light = 1, not_in_creative_inventory = 1}, + light_source = 14, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = { + {-3/16, 2/16, -0.5, 3/16, 0.5, 0.5}, + } + }, + drop = "streets:light_hanging_off", + on_construct = on_constract, + on_punch = on_punch, + on_receive_fields = on_receive_fields, + digiline = def_digiline, + mesecons = def_mesecons +}) + +minetest.register_craft({ + output = "streets:light_vertical_off 3", + recipe = { + {"", "default:steel_ingot", ""}, + {"", "default:meselamp", ""}, + {"", "default:steel_ingot", ""} + } +}) + +minetest.register_craft({ + output = "streets:light_horizontal_off 3", + recipe = { + {"", "", ""}, + {"default:steel_ingot", "default:meselamp", "default:steel_ingot"}, + {"", "", ""} + } +}) + +minetest.register_craft({ + output = "streets:light_hanging_off 3", + recipe = { + {"default:steel_ingot", "default:meselamp", "default:steel_ingot"}, + {"", "", ""}, + {"", "", ""} + } +}) diff --git a/mods/streets/streets_matrix_screen/init.lua b/mods/streets/streets_matrix_screen/init.lua new file mode 100644 index 0000000..1c60008 --- /dev/null +++ b/mods/streets/streets_matrix_screen/init.lua @@ -0,0 +1,223 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: matrix_screen + Optional: true +]] + +-- This submod was made by HybridDog and modified by Thomas S. + +local matrix_px = 16 + +-- gets the object at pos +local function get_screen(pos) + local object + local objects = minetest.get_objects_inside_radius(pos, 0.5) or {} + for _, obj in pairs(objects) do + local ent = obj:get_luaentity() + if ent then + if ent.name == "streets:matrix_screen_lights" then + -- Remove duplicates + if object then + obj:remove() + else + object = obj + end + end + end + end + return object +end + +-- used to get the texture for the object +local function generate_textures(data) + local texture, n = { "streets_matrix_screen_front.png^[combine:" .. matrix_px .. "x" .. matrix_px }, 2 + for y = 1, matrix_px do + local xs = data[y] + for x = 1, matrix_px do + if xs[x] then + texture[n] = ":" .. x - 1 .. "," .. y - 1 .. "=streets_matrix_px.png" + n = n + 1 + end + end + end + texture[n] = "^streets_matrix_screen_lines.png" + texture = table.concat(texture, "") + return { texture, texture, texture, texture, texture, texture } +end + +-- updates texture of screen +local function update_screen(pos, data) + local obj = get_screen(pos) or minetest.add_entity(pos, "streets:matrix_screen_lights") + obj:set_properties({ textures = generate_textures(data) }) +end + +-- returns an empty toggleds table +local function new_toggleds() + local t = {} + for y = 1, matrix_px do + t[y] = {} + end + return t +end + +-- gets the toggleds of the node from meta +local function get_data(meta) + local data = minetest.deserialize(minetest.decompress(meta:get_string("toggleds"))) + if type(data) ~= "table" then + data = new_toggleds() + end + return data +end + +-- update toggleds via a table sent by digiline +local function apply_changes(toggleds, t) + if type(t) ~= "table" then + return false, "matrix screen: got unsupported thing: " .. dump(t) + end + for y = 1, matrix_px do + toggleds[y] = {} + end + for y = 1, 16 do + local xs = t[y] + if type(xs) == "table" then + for x = 1, 16 do + local enabled = xs[x] + if enabled and enabled ~= 0 then + toggleds[y][x] = true + elseif enabled == false or enabled == 0 then + toggleds[y][x] = nil + end + end + end + end + return true +end + +-- sets the toggleds of the node to meta +local function set_data(meta, toggleds) + meta:set_string("toggleds", minetest.compress(minetest.serialize(toggleds))) +end + +minetest.register_node("streets:matrix_screen_base", { + description = "digiline controllable matrix screen", + tiles = { "streets_matrix_screen_front.png" }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 3, oddly_breakable_by_hand = 2 }, + sounds = default.node_sound_stone_defaults(), + light_source = 14, + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.49, 0.5, 0.5, 0.5 }, + }, + }, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + end + end, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + meta:set_string("channel", "matrix_screen") + minetest.add_entity(pos, "streets:matrix_screen_lights") + end, + on_destruct = function(pos) + local obj = get_screen(pos) + if obj then + obj:remove() + end + end, + digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, t) + local meta = minetest.get_meta(pos) + local toggleds = get_data(meta) + if channel == meta:get_string("channel") .. "_reset" then + for y = 1, matrix_px do + toggleds[y] = {} + end + set_data(meta, toggleds) + update_screen(pos, toggleds) + end + if channel ~= meta:get_string("channel") then + return + end + apply_changes(toggleds, t) + set_data(meta, toggleds) + update_screen(pos, toggleds) + end, + rules = { + { x = 1, y = 0, z = 0 }, + { x = 1, y = 1, z = 0 }, + { x = 1, y = -1, z = 0 }, + { x = -1, y = 0, z = 0 }, + { x = -1, y = 1, z = 0 }, + { x = -1, y = -1, z = 0 }, + { x = 0, y = 1, z = 0 }, + { x = 0, y = 1, z = 1 }, + { x = 0, y = 1, z = -1 }, + { x = 0, y = -1, z = 0 }, + { x = 0, y = -1, z = 1 }, + { x = 0, y = -1, z = -1 }, + { x = 0, y = 0, z = 1 }, + { x = 0, y = 0, z = -1 }, + } + }, + }, +}) + +-- ensure the screen existence +minetest.register_abm({ + interval = 5, + chance = 1, + nodenames = { "streets:matrix_screen_base" }, + action = function(pos, node) + if not get_screen(pos) then + local toggleds = get_data(minetest.get_meta(pos)) + update_screen(pos, toggleds) + minetest.log("info", "[streets] matrix screen object was missing") + end + end, +}) + +-- the screen +minetest.register_entity("streets:matrix_screen_lights", { + collisionbox = { 0, 0, 0, 0, 0, 0 }, + physical = false, + visual = "cube", + visual_size = { x = 0.99, y = 0.99 }, + on_activate = function(self, staticdata) + local pos = self.object:getpos() + if not vector.equals(pos, vector.round(pos)) then + self.object:remove() + return + end + local node = minetest.get_node(pos) + if node.name ~= "streets:matrix_screen_base" + and node.name ~= "ignore" then + self.object:remove() + return + end + minetest.after(0, function(pos) + update_screen(pos, get_data(minetest.get_meta(pos))) + end, pos) + end, +}) + +minetest.register_craft({ + output = "streets:matrix_screen_base", + recipe = { + { "dye:yellow", "default:steel_ingot", "dye:yellow" }, + { "default:steel_ingot", "digilines:lcd", "default:steel_ingot" }, + { "dye:yellow", "default:steel_ingot", "dye:yellow" }, + } +}) diff --git a/mods/streets/streets_poles/init.lua b/mods/streets/streets_poles/init.lua new file mode 100644 index 0000000..d09ae92 --- /dev/null +++ b/mods/streets/streets_poles/init.lua @@ -0,0 +1,435 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: poles + Optional: true +]] + +minetest.register_node(":streets:bigpole", { + description = "Pole Straight", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + { x = 0, y = -2, z = 0 } + } + } + }, + streets_pole_connection = { + [0] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + [1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, + [2] = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + [3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 }, + ["t"] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole 3", + recipe = { + { "default:steel_ingot" }, + { "default:steel_ingot" } + } +}) + + +minetest.register_node(":streets:bigpole_short", { + description = "Pole Short", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.15, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + [1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, + [2] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + [3] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0 }, + ["t"] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_short 2", + recipe = { + { "streets:bigpole" } + } +}) + + +minetest.register_node(":streets:bigpole_edge", { + description = "Pole Edge", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.15, 0.15 }, + { -0.15, -0.15, -0.15, 0.15, 0.15, -0.5 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, + [1] = { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1 }, + [2] = { 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 }, + [3] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0 }, + ["t"] = { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_edge 3", + recipe = { + { "streets:bigpole", "streets:bigpole" }, + { "streets:bigpole", "" } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_edge 3", + recipe = { + { "streets:bigpole", "streets:bigpole" }, + { "", "streets:bigpole" } + } +}) + + +minetest.register_node(":streets:bigpole_tjunction", { + description = "Pole T-Junction", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.15, 0.15 }, + { -0.15, -0.15, -0.5, 0.15, 0.15, 0.5 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, + [1] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1 }, + [2] = { 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, + [3] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1 }, + ["t"] = { 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_tjunction", + recipe = { + { "streets:bigpole_edge", "streets:bigpole_short" }, + } +}) + + +minetest.register_node(":streets:bigpole_corner", { + description = "Pole Corner", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.15, 0.15 }, + { -0.15, -0.15, -0.15, 0.15, 0.15, -0.5 }, + { -0.15, -0.15, -0.15, 0.5, 0.15, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 }, + [1] = { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1 }, + [2] = { 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, + [3] = { 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 }, + ["t"] = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_corner", + recipe = { + { "streets:bigpole_edge" }, + { "streets:bigpole_short" } + } +}) +--[[ + +minetest.register_node(":streets:bigpole_four_side_junction", { + description = "Pole 4-Side-Junction", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, + { -0.15, -0.15, -0.15, 0.15, 0.15, -0.5 }, + { -0.15, -0.15, -0.15, 0.5, 0.15, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 }, + [1] = { 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1 }, + [2] = { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, + [3] = { 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0 }, + ["t"] = { 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_four_side_junction", + recipe = { + { "streets:bigpole_short" }, + { "streets:bigpole_corner" } + } +})--]] + + +minetest.register_node(":streets:bigpole_cross", { + description = "Pole Cross", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, + { -0.15, -0.15, -0.5, 0.15, 0.15, 0.5 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, + [1] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1 }, + [2] = { 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, + [3] = { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1 }, + ["t"] = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_cross", + recipe = { + { "", "streets:bigpole_short", "" }, + { "streets:bigpole_short", "", "streets:bigpole_short" }, + { "", "streets:bigpole_short", "" }, + } +}) + +--[[ +minetest.register_node(":streets:bigpole_five_side_junction", { + description = "Pole 5-Side-Junction", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, + { -0.15, -0.15, -0.5, 0.15, 0.15, 0.5 }, + { -0.15, -0.15, -0.15, 0.5, 0.15, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0 }, + [1] = { 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 }, + [2] = { 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 }, + [3] = { 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1 }, + ["t"] = { 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_five_side_junction", + recipe = { + { "streets:bigpole_cross", "streets:bigpole_short" } + } +})--]] + +--[[ +minetest.register_node(":streets:bigpole_all_sides", { + description = "Pole All Sides", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_pole.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, bigpole = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, + { -0.15, -0.15, -0.5, 0.15, 0.15, 0.5 }, + { -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 } + } + }, + on_place = minetest.rotate_node, + digiline = { + wire = { + 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 }, + } + } + }, + streets_pole_connection = { + [0] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + [1] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + [2] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + [3] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + ["t"] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, + ["b"] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } + } +}) + +minetest.register_craft({ + output = "streets:bigpole_all_sides", + recipe = { + { "streets:bigpole_short", "streets:bigpole_cross", "streets:bigpole_short" } + } +})--]] diff --git a/mods/streets/streets_roadmarkings/init.lua b/mods/streets/streets_roadmarkings/init.lua new file mode 100644 index 0000000..79ac35c --- /dev/null +++ b/mods/streets/streets_roadmarkings/init.lua @@ -0,0 +1,422 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: roadmarkings + Optional: true + Category: Roads +]] + +--These register the sections in the workshop that these will be placed into +streets.labels.sections = { + { name = "centerlines", friendlyname = "Center Lines" }, + --{ name = "centerlinecorners", friendlyname = "Center Line Corners/Junctions" }, + { name = "sidelines", friendlyname = "Side Lines" }, + { name = "arrows", friendlyname = "Arrows" }, + { name = "symbols", friendlyname = "Symbols" }, + { name = "other", friendlyname = "Other" } +} + + +-- CENTER LINES + +-- Normal Lines + +streets.register_road_marking({ + name = "dashed_{color}_center_line", + friendlyname = "Dashed Center Line", + tex = "streets_dashed_center_line.png", + section = "centerlines", + dye_needed = 1, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line", + friendlyname = "Solid Center Line", + tex = "streets_solid_center_line.png", + section = "centerlines", + dye_needed = 2, + rotation = { r90 = 1 }, +}) + + +-- Wide Lines + +streets.register_road_marking({ + name = "dashed_{color}_center_line_wide", + friendlyname = "Dashed Center Line Wide", + tex = "streets_dashed_center_line_wide.png", + section = "centerlines", + dye_needed = 2, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line_wide", + friendlyname = "Solid Center Line Wide", + tex = "streets_solid_center_line_wide.png", + section = "centerlines", + dye_needed = 4, + rotation = { r90 = 1 }, +}) + + +-- Double Lines + +streets.register_road_marking({ + name = "double_dashed_{color}_center_line", + friendlyname = "Double Dashed Center Line", + tex = "streets_double_dashed_center_line.png", + section = "centerlines", + dye_needed = 2, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "double_solid_{color}_center_line", + friendlyname = "Double Solid Center Line", + tex = "streets_double_solid_center_line.png", + section = "centerlines", + dye_needed = 4, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "mixed_{color}_center_line", + friendlyname = "Solid/Dashed Center Line", + tex = "streets_mixed_center_line.png", + section = "centerlines", + dye_needed = 3, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_line_offset", + friendlyname = "Solid Line Offset", + tex = "streets_solid_line_offset.png", + section = "centerlines", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + + +--CENTER LINE CORNERS + +--Normal Lines +--[[ +streets.register_road_marking({ + name = "solid_{color}_center_line_corner", + friendlyname = "Solid Center Line Corner", + tex = "streets_solid_center_line_corner.png", + section = "centerlinecorners", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line_tjunction", + friendlyname = "Solid Center Line T-Junction", + tex = "streets_solid_center_line_tjunction.png", + section = "centerlinecorners", + dye_needed = 3, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line_crossing", + friendlyname = "Solid Center Line Crossing", + tex = "streets_solid_center_line_crossing.png", + section = "centerlinecorners", + dye_needed = 4, +}) + + +--Wide Lines + +streets.register_road_marking({ + name = "solid_{color}_center_line_wide_corner", + friendlyname = "Solid Center Line Wide Corner", + tex = "streets_solid_center_line_wide_corner.png", + section = "centerlinecorners", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line_wide_tjunction", + friendlyname = "Solid Center Line Wide T-Junction", + tex = "streets_solid_center_line_wide_tjunction.png", + section = "centerlinecorners", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_center_line_wide_crossing", + friendlyname = "Solid Center Line Wide Crossing", + tex = "streets_solid_center_line_wide_crossing.png", + section = "centerlinecorners", + dye_needed = 8, +}) + + +--Double Lines + +streets.register_road_marking({ + name = "double_solid_{color}_center_line_corner", + friendlyname = "Double Solid Center Line Corner", + tex = "streets_double_solid_center_line_corner.png", + section = "centerlinecorners", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "double_solid_{color}_center_line_tjunction", + friendlyname = "Double Solid Center Line T-Junction", + tex = "streets_double_solid_center_line_tjunction.png", + section = "centerlinecorners", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "double_solid_{color}_center_line_crossing", + friendlyname = "Double Solid Center Line Crossing", + tex = "streets_double_solid_center_line_crossing.png", + section = "centerlinecorners", + dye_needed = 8, +}) +--]] +--SIDE LINES + +--Normal Lines + +streets.register_road_marking({ + name = "solid_{color}_side_line", + friendlyname = "Solid Side Line", + tex = "streets_solid_side_line.png", + section = "sidelines", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_side_line_corner", + friendlyname = "Solid Side Line Corner", + tex = "streets_solid_side_line_corner.png", + section = "sidelines", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "dashed_{color}_side_line", + friendlyname = "Dashed Side Line", + tex = "streets_dashed_side_line.png", + section = "sidelines", + dye_needed = 1, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + + +--Wide Lines + +streets.register_road_marking({ + name = "solid_{color}_side_line_wide", + friendlyname = "Solid Side Line Wide", + tex = "streets_solid_side_line_wide.png", + section = "sidelines", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_side_line_wide_corner", + friendlyname = "Solid Side Line Wide Corner", + tex = "streets_solid_side_line_wide_corner.png", + section = "sidelines", + dye_needed = 8, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "dashed_{color}_side_line_wide", + friendlyname = "Dashed Side Line Wide", + tex = "streets_dashed_side_line_wide.png", + section = "sidelines", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + + +--Special + +streets.register_road_marking({ + name = "solid_{color}_side_line_combinated_corner", + friendlyname = "Solid Side Line Combinated Corner", + tex = "streets_solid_side_line_combinated_corner.png", + section = "sidelines", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_side_line_combinated_corner_flipped", + friendlyname = "Solid Side Line Combinated Corner (Flipped)", + tex = "streets_solid_side_line_combinated_corner.png^[transformFX", + section = "sidelines", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + + + +--ARROWS + +streets.register_road_marking({ + name = "{color}_arrow_straight", + friendlyname = "Arrow Straight", + tex = "streets_arrow_straight.png", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_left", + friendlyname = "Arrow Left", + tex = "streets_arrow_right.png^[transformFX", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_right", + friendlyname = "Arrow Right", + tex = "streets_arrow_right.png", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_left_straight", + friendlyname = "Arrow Left And Straight", + tex = "streets_arrow_right_straight.png^[transformFX", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_right_straight", + friendlyname = "Arrow Right And Straight", + tex = "streets_arrow_right_straight.png", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_left_right_straight", + friendlyname = "Arrow Left, Right And Straight", + tex = "streets_arrow_right_straight.png^[transformFX^streets_arrow_right_straight.png", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_arrow_left_right", + friendlyname = "Arrow Left And Right", + tex = "streets_arrow_left_right.png", + section = "arrows", + dye_needed = 2, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + + +--SYMBOLS + +streets.register_road_marking({ + name = "{color}_parking", + friendlyname = "Parking", + tex = "streets_parking.png", + section = "symbols", + dye_needed = 3, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_cross", + friendlyname = "Cross", + tex = "streets_cross.png", + section = "symbols", + dye_needed = 4, +}) + +--OTHER + +streets.register_road_marking({ + name = "solid_{color}_stripe", + friendlyname = "Solid Stripe", + tex = "streets_solid_stripe.png", + section = "other", + dye_needed = 4, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "solid_{color}_diagonal_line", + friendlyname = "Solid Diagonal Line", + tex = "streets_solid_diagonal_line.png", + section = "other", + dye_needed = 2, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "double_solid_{color}_diagonal_line", + friendlyname = "Double Solid White Diagonal Line", + tex = "streets_double_solid_diagonal_line.png", + section = "other", + dye_needed = 4, + rotation = { r90 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_halt_line_center_corner", + friendlyname = "Halt Line Center Corner", + tex = "streets_halt_line_center_corner.png", + section = "other", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_halt_line_center_corner_wide", + friendlyname = "Halt Line Center Corner Wide", + tex = "streets_halt_line_center_corner_wide.png", + section = "other", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_halt_line_center_corner_flipped", + friendlyname = "Halt Line Center Corner (Flipped)", + tex = "streets_halt_line_center_corner.png^[transformFX", + section = "other", + dye_needed = 4, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) + +streets.register_road_marking({ + name = "{color}_halt_line_center_corner_wide_flipped", + friendlyname = "Halt Line Center Corner Wide (Flipped)", + tex = "streets_halt_line_center_corner_wide.png^[transformFX", + section = "other", + dye_needed = 6, + rotation = { r90 = 1, r180 = 1, r270 = 1 }, +}) diff --git a/mods/streets/streets_roadsurface/init.lua b/mods/streets/streets_roadsurface/init.lua new file mode 100644 index 0000000..ac4b812 --- /dev/null +++ b/mods/streets/streets_roadsurface/init.lua @@ -0,0 +1,85 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: roadsurface + Optional: true + Category: Roads +]] + +streets.register_road_surface({ + name = "asphalt", + friendlyname = "Asphalt", + tiles = { "streets_asphalt.png" }, + groups = { cracky = 3, asphalt = 1 }, + sounds = default.node_sound_stone_defaults(), + register_stairs = true, + craft = { + output = "streets:asphalt 1", + type = "cooking", + recipe = "default:gravel", + cooktime = 2 + } +}) +--[[ +streets.register_road_surface({ + name = "asphalt_red", + friendlyname = "Red Asphalt", + tiles = { "streets_asphalt_red.png" }, + groups = { cracky = 3, asphalt = 1 }, + sounds = default.node_sound_stone_defaults(), + register_stairs = true, + craft = { + output = "streets:asphalt_red 1", + type = "shapeless", + recipe = { "streets:asphalt", "dye:red" } + } +})--]] + +--[[streets.register_road_surface({ + name = "asphalt_yellow", + friendlyname = "Yellow Asphalt", + tiles = {"streets_asphalt_yellow.png"}, + groups = {cracky = 3,asphalt = 1}, + sounds = default.node_sound_stone_defaults(), + craft = { + output = "streets:asphalt_yellow 1", + type = "shapeless", + recipe = {"streets:asphalt", "dye:yellow"} + } +}) +]] +--[[ +streets.register_road_surface({ + name = "asphalt_blue", + friendlyname = "Blue Asphalt", + tiles = { "streets_asphalt_blue.png" }, + groups = { cracky = 3, asphalt = 1 }, + sounds = default.node_sound_stone_defaults(), + register_stairs = false, + craft = { + output = "streets:asphalt_blue 1", + type = "shapeless", + recipe = { "streets:asphalt", "dye:blue" } + } +}) +--]] +minetest.register_node("streets:sidewalk", { + description = "Sidewalk", + tiles = { "streets_sidewalk.png" }, + groups = { cracky = 3, stone = 1 }, + sounds = default.node_sound_stone_defaults() +}) + +if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairsplus") then + stairsplus:register_all("streets", "sidewalk", "streets:sidewalk", { + description = "Concrete", + tiles = { "streets_sidewalk.png" }, + groups = { cracky = 3, asphalt = 1 }, + sounds = default.node_sound_stone_defaults() + }) +end + +minetest.register_craft({ + output = "streets:sidewalk 1", + type = "shapeless", + recipe = { "streets:asphalt", "dye:white" } +}) diff --git a/mods/streets/streets_roadwork/init.lua b/mods/streets/streets_roadwork/init.lua new file mode 100644 index 0000000..7d90aa4 --- /dev/null +++ b/mods/streets/streets_roadwork/init.lua @@ -0,0 +1,441 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: roadwork + Optional: true +]] + + +-- Traffic Barrier + +minetest.register_node("streets:roadwork_traffic_barrier", { + description = "Traffic Barrier", + paramtype = "light", + drawtype = "nodebox", + tiles = { streets.concrete_texture, streets.concrete_texture, streets.concrete_texture .. "^streets_roadwork_traffic_barrier.png" }, + sunlight_propagates = true, + groups = { cracky = 1, level = 2, wall = 1 }, + node_box = { + type = "connected", + fixed = { { -0.35, -0.5, -0.35, 0.35, -0.4, 0.35 }, { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 } }, + connect_front = { { -0.35, -0.5, -0.5, 0.35, -0.4, 0.35 }, { -0.15, -0.5, -0.5, 0.15, 0.5, 0.15 } }, -- z- + connect_back = { { -0.35, -0.5, -0.35, 0.35, -0.4, 0.5 }, { -0.15, -0.5, -0.15, 0.15, 0.5, 0.5 } }, -- z+ + connect_left = { { -0.5, -0.5, -0.35, 0.35, -0.4, 0.35 }, { -0.5, -0.5, -0.15, 0.15, 0.5, 0.15 } }, -- x- + connect_right = { { -0.35, -0.5, -0.35, 0.5, -0.4, 0.35 }, { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 } }, -- x+ + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:concrete" }, + sound = default.node_sound_stone_defaults() +}) + +minetest.register_craft({ + output = "streets:roadwork_traffic_barrier 3", + recipe = { + { "dye:red", "dye:white", "dye:red" }, + { "streets:concrete_wall", "streets:concrete_wall", "streets:concrete_wall" }, + } +}) + + +-- Barrier Tape + +minetest.register_node("streets:roadwork_barrier_tape", { + description = "Barrier Tape", + paramtype = "light", + drawtype = "nodebox", + tiles = { "streets_roadwork_barrier_tape.png" }, + sunlight_propagates = true, + groups = { choppy = 1, dig_immediate = 3, level = 1, wall = 1 }, + node_box = { + type = "connected", + fixed = { -1 / 16, -0.5, -1 / 16, 1 / 16, 0.5, 1 / 16 }, + connect_front = { 0, 4 / 16, -0.5, 0, 6 / 16, 0 }, -- z- + connect_back = { 0, 4 / 16, 0, 0, 6 / 16, 0.5 }, -- z+ + connect_left = { -0.5, 4 / 16, 0, 0, 6 / 16, 0 }, -- x- + connect_right = { 0, 4 / 16, 0, 0.5, 6 / 16, 0 }, -- x+ + }, + selection_box = { + type = "fixed", + fixed = { -2 / 16, -0.5, -2 / 16, 2 / 16, 0.5, 2 / 16 }, + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:sign", "group:concrete" }, +}) + +minetest.register_craft({ + output = "streets:roadwork_barrier_tape 24", + recipe = { + { "dye:red", "dye:white", "dye:red" }, + { "farming:cotton", "default:stick", "farming:cotton" }, + { "", "default:stick", "" } + } +}) + + +-- Traffic Fence + + +minetest.register_node("streets:roadwork_traffic_fence", { + description = "Traffic Fence", + paramtype = "light", + drawtype = "nodebox", + tiles = { "streets_roadwork_traffic_fence_top.png", "streets_roadwork_traffic_fence_top.png", "streets_roadwork_traffic_fence.png" }, + inventory_image = "streets_roadwork_traffic_fence.png", + wield_image = "streets_roadwork_traffic_fence.png", + sunlight_propagates = true, + groups = { cracky = 1, wall = 1 }, + node_box = { + type = "connected", + fixed = { -1 / 16, -0.5, -1 / 16, 1 / 16, 0.5, 1 / 16 }, + connect_front = { + { -1 / 16, -0.5, -0.5, 1 / 16, -0.25, 1 / 16 }, + { -1 / 16, 0.25, -0.5, 1 / 16, 0.5, 1 / 16 }, + { -1 / 16, -0.25, -0.5, 1 / 16, 0.25, -7 / 16 }, + { -1 / 16, -0.25, -5 / 16, 1 / 16, 0.25, -3 / 16 } + }, -- z- + connect_back = { + { -1 / 16, -0.5, -1 / 16, 1 / 16, -0.25, 0.5 }, + { -1 / 16, 0.25, -1 / 16, 1 / 16, 0.5, 0.5 }, + { -1 / 16, -0.25, 7 / 16, 1 / 16, 0.25, 0.5 }, + { -1 / 16, -0.25, 3 / 16, 1 / 16, 0.25, 5 / 16 } + }, -- z+ + connect_left = { + { -0.5, -0.5, -1 / 16, 1 / 16, -0.25, 1 / 16 }, + { -0.5, 0.25, -1 / 16, 1 / 16, 0.5, 1 / 16 }, + { -0.5, -0.25, -1 / 16, -7 / 16, 0.25, 1 / 16 }, + { -5 / 16, -0.25, -1 / 16, -3 / 16, 0.25, 1 / 16 } + }, -- x- + connect_right = { + { -1 / 16, -0.5, -1 / 16, 0.5, -0.25, 1 / 16 }, + { -1 / 16, 0.25, -1 / 16, 0.5, 0.5, 1 / 16 }, + { 7 / 16, -0.25, -1 / 16, 0.5, 0.25, 1 / 16 }, + { 3 / 16, -0.25, -1 / 16, 5 / 16, 0.25, 1 / 16 }, + } -- x+ + }, + connects_to = { "group:wall", "group:stone", "group:wood", "group:tree", "group:sign", "group:concrete" }, +}) + +minetest.register_craft({ + output = "streets:roadwork_traffic_fence 3", + recipe = { + { "dye:red", "dye:white", "dye:red" }, + { "xpanes:bar", "xpanes:bar", "xpanes:bar" }, + } +}) + + +-- Pylon + + +minetest.register_node("streets:roadwork_pylon", { + description = "Pylon", + paramtype = "light", + drawtype = "nodebox", + tiles = { "streets_roadwork_pylon_top.png", "streets_roadwork_pylon_top.png", "streets_roadwork_pylon.png" }, + sunlight_propagates = true, + groups = { cracky = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.375, -0.5, -0.125, 0.375, -0.4375, 0.125 }, + { -0.125, -0.5, -0.375, 0.125, -0.4375, 0.375 }, + { -0.3125, -0.5, 0, 0.3125, 0.1875, 0 }, + { 0, -0.5, -0.3125, 0, 0.1875, 0.3125 }, + } + } +}) + +minetest.register_craft({ + output = "streets:roadwork_pylon 3", + recipe = { + { "dye:orange", "", "dye:orange" }, + { "dye:white", "default:stick", "dye:white" }, + { "dye:orange", "default:steel_ingot", "dye:orange" }, + } +}) + +-- Blinking Light + +minetest.register_node("streets:roadwork_blinking_light_off", { + description = "Blinking Light", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_roadwork_blinking_light_top.png", "streets_roadwork_blinking_light_top.png", "streets_roadwork_blinking_light_off.png" }, + sunlight_propagates = true, + groups = { cracky = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.125, 0.1875, -0.3125, 0.125 }, -- Base + { -0.1875, -0.3125, 0, 0.1875, 0.0625, 0 }, -- Light + } + }, + on_timer = function(pos, elapsed) + minetest.set_node(pos, { name = "streets:roadwork_blinking_light_on", param2 = minetest.get_node(pos).param2 }) + end, + on_construct = function(pos) + timer = minetest.get_node_timer(pos) + timer:start(1) + end, +}) + +minetest.register_node("streets:roadwork_blinking_light_on", { + description = "Blinking Light", + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + tiles = { "streets_roadwork_blinking_light_top.png", "streets_roadwork_blinking_light_top.png", "streets_roadwork_blinking_light_on.png" }, + sunlight_propagates = true, + groups = { cracky = 1, not_in_creative_inventory = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.125, 0.1875, -0.3125, 0.125 }, -- Base + { -0.1875, -0.3125, 0, 0.1875, 0.0625, 0 }, -- Light + } + }, + light_source = 12, + on_timer = function(pos, elapsed) + minetest.set_node(pos, { name = "streets:roadwork_blinking_light_off", param2 = minetest.get_node(pos).param2 }) + end, + on_construct = function(pos) + timer = minetest.get_node_timer(pos) + timer:start(1) + end, + drop = "streets:roadwork_blinking_light_off", +}) + +minetest.register_craft({ + output = "streets:roadwork_blinking_light_off 2", + recipe = { + { "dye:red", "default:torch", "dye:red" }, + { "dye:yellow", "default:steel_ingot", "dye:yellow" }, + } +}) + +minetest.register_abm({ + nodenames = { + "streets:roadwork_blinking_light_on", "streets:roadwork_blinking_light_off", + "streets:roadwork_delineator_light_on_top", "streets:roadwork_delineator_light_off_top" + }, + interval = 10, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + timer = minetest.get_node_timer(pos) + if not timer:is_started() then + timer:start(1) + end + end, +}) + +minetest.register_node("streets:roadwork_delineator_top", { + tile_images = { + "streets_roadwork_delineator_top.png", + "streets_tl_bg.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_roadwork_delineator_top_front_back.png^[transformFX", + "streets_roadwork_delineator_top_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + light_source = 5, + node_box = { + type = "fixed", + fixed = { + { -1 / 4, -1 / 2, 0, 1 / 4, 0, 0 } + } + }, + selection_box = { + type = "fixed", + fixed = { 0, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_node("streets:roadwork_delineator_bottom", { + description = "Roadwork Delineator", + inventory_image = "streets_roadwork_delineator.png", + wield_image = "streets_roadwork_delineator.png", + tile_images = { + "streets_roadwork_delineator_top.png", + "streets_tl_bg.png", + "streets_roadwork_delineator_bottom_side.png", + "streets_roadwork_delineator_bottom_side.png", + "streets_roadwork_delineator_bottom_front_back.png^[transformFX", + "streets_roadwork_delineator_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1 }, + light_source = 5, + node_box = { + type = "fixed", + fixed = { + { -1 / 4, -7 / 32, 0, 1 / 4, 1 / 2, 0 }, + { -1 / 16, -5 / 16, -1 / 16, 1 / 16, -7 / 32, 1 / 16 }, + { -1 / 8, -3 / 8, -1 / 8, 1 / 8, -5 / 16, 1 / 8 }, + { -1 / 4, -1 / 2, -1 / 2, 1 / 4, -3 / 8, 1 / 2 } + } + }, + selection_box = { + type = "fixed", + fixed = { + { -1 / 4, -7 / 32, 0, 1 / 4, 1, 0 }, + { -1 / 16, -5 / 16, -1 / 16, 1 / 16, -7 / 32, 1 / 16 }, + { -1 / 8, -3 / 8, -1 / 8, 1 / 8, -5 / 16, 1 / 8 }, + { -1 / 4, -1 / 2, -1 / 2, 1 / 4, -3 / 8, 1 / 2 } + } + }, + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + node.name = "streets:roadwork_delineator_bottom" + minetest.env:add_node(pos, node) + pos.y = pos.y + 1 + node.name = "streets:roadwork_delineator_top" + minetest.env:add_node(pos, node) + end, + after_dig_node = function(pos) + pos.y = pos.y + 1 + minetest.env:remove_node(pos) + end, +}) + +minetest.register_alias("streets:roadwork_delineator", "streets:roadwork_delineator_bottom") + +minetest.register_craft({ + output = "streets:roadwork_delineator 5", + recipe = { + { "dye:red", "default:steel_ingot", "dye:red" }, + { "dye:white", "default:steel_ingot", "dye:white" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + } +}) + + + +minetest.register_node("streets:roadwork_delineator_light_off_top", { + tile_images = { + "streets_roadwork_delineator_top.png", + "streets_tl_bg.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_roadwork_delineator_light_off_top_front_back.png^[transformFX", + "streets_roadwork_delineator_light_off_top_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + light_source = 5, + on_timer = function(pos, elapsed) + minetest.set_node(pos, { name = "streets:roadwork_delineator_light_on_top", param2 = minetest.get_node(pos).param2 }) + end, + on_construct = function(pos) + timer = minetest.get_node_timer(pos) + timer:start(1) + end, + node_box = { + type = "fixed", + fixed = { + { -1 / 4, -1 / 2, 0, 1 / 4, 3 / 8, 0 } + } + }, + selection_box = { + type = "fixed", + fixed = { 0, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_node("streets:roadwork_delineator_light_on_top", { + tile_images = { + "streets_roadwork_delineator_top.png", + "streets_tl_bg.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_roadwork_delineator_light_on_top_front_back.png^[transformFX", + "streets_roadwork_delineator_light_on_top_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + light_source = 12, + on_timer = function(pos, elapsed) + minetest.set_node(pos, { name = "streets:roadwork_delineator_light_off_top", param2 = minetest.get_node(pos).param2 }) + end, + on_construct = function(pos) + timer = minetest.get_node_timer(pos) + timer:start(1) + end, + drop = "streets:roadwork_delineator_light_off_top", + node_box = { + type = "fixed", + fixed = { + { -1 / 4, -1 / 2, 0, 1 / 4, 3 / 8, 0 } + } + }, + selection_box = { + type = "fixed", + fixed = { 0, 0, 0, 0, 0, 0 } + } +}) + +minetest.register_node("streets:roadwork_delineator_light_bottom", { + description = "Roadwork Delineator with Blinking Light", + inventory_image = "streets_roadwork_delineator_light.png", + wield_image = "streets_roadwork_delineator_light.png", + tile_images = { + "streets_roadwork_delineator_top.png", + "streets_tl_bg.png", + "streets_roadwork_delineator_bottom_side.png", + "streets_roadwork_delineator_bottom_side.png", + "streets_roadwork_delineator_bottom_front_back.png^[transformFX", + "streets_roadwork_delineator_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1 }, + light_source = 5, + node_box = { + type = "fixed", + fixed = { + { -1 / 4, -7 / 32, 0, 1 / 4, 1 / 2, 0 }, + { -1 / 16, -5 / 16, -1 / 16, 1 / 16, -7 / 32, 1 / 16 }, + { -1 / 8, -3 / 8, -1 / 8, 1 / 8, -5 / 16, 1 / 8 }, + { -1 / 4, -1 / 2, -1 / 2, 1 / 4, -3 / 8, 1 / 2 } + } + }, + selection_box = { + type = "fixed", + fixed = { + { -1 / 4, -7 / 32, 0, 1 / 4, 11 / 8, 0 }, + { -1 / 16, -5 / 16, -1 / 16, 1 / 16, -7 / 32, 1 / 16 }, + { -1 / 8, -3 / 8, -1 / 8, 1 / 8, -5 / 16, 1 / 8 }, + { -1 / 4, -1 / 2, -1 / 2, 1 / 4, -3 / 8, 1 / 2 } + } + }, + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + node.name = "streets:roadwork_delineator_light_bottom" + minetest.env:add_node(pos, node) + pos.y = pos.y + 1 + node.name = "streets:roadwork_delineator_light_off_top" + minetest.env:add_node(pos, node) + end, + after_dig_node = function(pos) + pos.y = pos.y + 1 + minetest.env:remove_node(pos) + end, +}) + +minetest.register_alias("streets:roadwork_delineator_light", "streets:roadwork_delineator_light_bottom") + +minetest.register_craft({ + output = "streets:roadwork_delineator_light", + recipe = { + { "streets:roadwork_blinking_light_off" }, + { "streets:roadwork_delineator" } + } +}) diff --git a/mods/streets/streets_signs/init.lua b/mods/streets/streets_signs/init.lua new file mode 100644 index 0000000..2e65e3d --- /dev/null +++ b/mods/streets/streets_signs/init.lua @@ -0,0 +1,221 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: signs + Optional: true +]] + +--These register the sections in the workshop that these will be placed into +streets.signs.sections = { + --{ name = "warn", friendlyname = "MT Warning" }, + --{ name = "reg", friendlyname = "MT Regulatory" }, + --{ name = "info", friendlyname = "MT Information" }, + { name = "usreg", friendlyname = "US Regulatory" }, + { name = "uswarn", friendlyname = "US Warning" }, + --{ name = "usinfo", friendlyname = "US Information" }, + { name = "usom", friendlyname = "US Object Markers" }, + { name = "usttc", friendlyname = "US TTC" }, + --{ name = "euprio", friendlyname = "EU Priority" }, + --{ name = "euwarn", friendlyname = "EU Warning" }, + --{ name = "euprohib", friendlyname = "EU Prohibitory" }, + --{ name = "eumandat", friendlyname = "EU Mandatory" }, + --{ name = "euinfo", friendlyname = "EU Info" }, + --{ name = "euother", friendlyname = "EU Other" } +} + +streets.register_road_sign({ + name = "sign_blank", + friendlyname = "Blank Sign", + tiles = { + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png" + }, + thickness = 0.05 +}) + +minetest.register_craft({ + type = "shapeless", + output = "streets:sign_blank", + recipe = { "streets:asphalt", "default:sign_wall_wood" }, +}) + +streets.register_road_sign({ + name = "sign_curve_chevron_right", + friendlyname = "Curve Chevron Sign (Right)", + tiles = { + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_curve_sign.png" + }, + thickness = 0.05, + section = "uswarn", + dye_needed = { yellow = 3, black = 3 } +}) + +streets.register_road_sign({ + name = "sign_curve_chevron_left", + friendlyname = "Curve Chevron Sign (Left)", + tiles = { + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_sign_back.png", + "streets_curve_sign.png^[transformFX" + }, + thickness = 0.05, + section = "uswarn", + dye_needed = { yellow = 3, black = 3 } +}) +--[[ +streets.register_road_sign({ + name = "sign_warning", + friendlyname = "Warning Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_warning.png" + }, + thickness = 0.05, + section = "warn", + dye_needed = { black = 2 } +}) + +streets.register_road_sign({ + name = "sign_water", + friendlyname = "Water Warning Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_water.png" + }, + thickness = 0.05, + section = "warn", + dye_needed = { green = 1, blue = 3, black = 1 } +}) + +streets.register_road_sign({ + name = "sign_lava", + friendlyname = "Lava Warning Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_lava.png" + }, + thickness = 0.05, + section = "warn", + dye_needed = { green = 1, red = 3 } +}) + +streets.register_road_sign({ + name = "sign_construction", + friendlyname = "Construction Warning Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_construction.png" + }, + thickness = 0.05, + section = "warn", + dye_needed = { green = 1, blue = 1, brown = 1 } +}) + +streets.register_road_sign({ + name = "sign_grass", + friendlyname = "No Walking on Grass Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_grass.png" + }, + thickness = 0.05, + section = "reg", + dye_needed = { green = 3, red = 2 } +}) + +streets.register_road_sign({ + name = "sign_mine", + friendlyname = "Mine Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_mine.png" + }, + thickness = 0.05, + section = "info", + dye_needed = { blue = 2, yellow = 1 } +}) + +streets.register_road_sign({ + name = "sign_shop", + friendlyname = "Shop Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_shop.png" + }, + thickness = 0.05, + section = "info", + dye_needed = { blue = 1, red = 1, yellow = 1, blue = 1 } +}) + +streets.register_road_sign({ + name = "sign_work_shop", + friendlyname = "Workshop Sign", + tiles = { + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png^[colorize:#D20000FF", + "streets_sign_back.png", + "streets_square_sign_empty.png^streets_sign_workshop.png" + }, + thickness = 0.05, + section = "info", + dye_needed = { red = 1, yellow = 2, blue = 1 } +}) +--]] +--US Signs +dofile(streets.conf.modpath .. "/streets_signs/us/usreg.lua") +dofile(streets.conf.modpath .. "/streets_signs/us/uswarn.lua") +dofile(streets.conf.modpath .. "/streets_signs/us/usinfo.lua") +dofile(streets.conf.modpath .. "/streets_signs/us/usom.lua") +dofile(streets.conf.modpath .. "/streets_signs/us/usttc.lua") + +--EU Signs +--[[ +dofile(streets.conf.modpath .. "/streets_signs/eu/euwarn.lua") +dofile(streets.conf.modpath .. "/streets_signs/eu/euother.lua") +dofile(streets.conf.modpath .. "/streets_signs/eu/euprio.lua") +dofile(streets.conf.modpath .. "/streets_signs/eu/eumandat.lua") +dofile(streets.conf.modpath .. "/streets_signs/eu/euprohib.lua") +dofile(streets.conf.modpath .. "/streets_signs/eu/euinfo.lua") +--]] + diff --git a/mods/streets/streets_signs/us/usinfo.lua b/mods/streets/streets_signs/us/usinfo.lua new file mode 100644 index 0000000..0f3cfad --- /dev/null +++ b/mods/streets/streets_signs/us/usinfo.lua @@ -0,0 +1,23 @@ +local usinfo = { + { "arrow_exitgore", "Exit Gore Arrow", { green = 4, white = 2 } }, + --{ "pushtocross_left", "Push to Cross (Left)", { white = 3, black = 3 } }, + --{ "pushtocross_right", "Push to Cross (Right)", { white = 3, black = 3 } }, +} + +for k, v in pairs(usinfo) do + streets.register_road_sign({ + name = "sign_us_" .. v[1], + friendlyname = v[2] .. " Sign", + tiles = { + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_sign_back.png", + "streets_sign_us_" .. v[1] .. ".png" + }, + thickness = 0.01, + section = "uswarn", + dye_needed = v[3] + }) +end \ No newline at end of file diff --git a/mods/streets/streets_signs/us/usom.lua b/mods/streets/streets_signs/us/usom.lua new file mode 100644 index 0000000..b0bd0b2 --- /dev/null +++ b/mods/streets/streets_signs/us/usom.lua @@ -0,0 +1,27 @@ +local usom = { + { "om1", "Object Marker Type 1", { yellow = 5 } }, + { "om2", "Object Marker Type 2", { yellow = 2 } }, + { "om3l", "Object Marker Type 3 (Left)", { yellow = 3, black = 3 } }, + { "om3c", "Object Marker Type 3 (Center)", { yellow = 3, black = 3 } }, + { "om3r", "Object Marker Type 3 (Right)", { yellow = 3, black = 3 } }, + { "om4", "Object Marker Type 4", { red = 5 } }, +} + +for k, v in pairs(usom) do + streets.register_road_sign({ + name = "sign_us_" .. v[1], + friendlyname = v[2] .. " Sign", + tiles = { + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_sign_back.png", + "streets_sign_us_" .. v[1] .. ".png" + }, + thickness = 0.01, + section = "usom", + dye_needed = v[3] + }) +end + diff --git a/mods/streets/streets_signs/us/usreg.lua b/mods/streets/streets_signs/us/usreg.lua new file mode 100644 index 0000000..5663f76 --- /dev/null +++ b/mods/streets/streets_signs/us/usreg.lua @@ -0,0 +1,54 @@ +local usreg = { + { "bikelane", "Bike Lane", { white = 2, black = 4 } }, + { "donotenter", "Do Not Enter", { red = 4, white = 3 } }, + { "donotstopontracks", "Do Not Stop on Tracks", { white = 3, black = 2 } }, + { "emergencyhybridbeacon", "Emergency Vehicle Hybrid Beacon", { white = 3, black = 3 } }, + { "emergencysignal", "Emergency Signal", { white = 3, black = 2 } }, + { "endschoolspeedlimit", "End School Speed Limit", { white = 3, black = 3 } }, + { "keepright", "Keep Right Sign", { white = 3, black = 3 } }, + { "leftongreenarrowonly", "Left on Green Arrow Only", { white = 3, black = 3 } }, + { "leftturnonly", "Left Turn Only", { white = 3, black = 3 } }, + { "leftturnsignal", "Left Turn Signal", { white = 3, black = 3 } }, + { "leftturnyieldongreen", "Left Turn Yield on Green", { white = 3, black = 3, green = 1 } }, + { "nobicycles", "No Bicycles", { white = 3, black = 2, red = 2 } }, + { "noleftturn", "No Left Turn", { white = 3, black = 2, red = 2 } }, + { "noparkingboth", "No Parking (Left/Right)", { white = 3, red = 3 } }, + { "noparkingleft", "No Parking (Left)", { white = 3, red = 3 } }, + { "noparkingright", "No Parking (Right)", { white = 3, red = 3 } }, + { "noped", "No Pedestrians", { white = 3, black = 2, red = 2 } }, + { "norightturn", "No Right Turn", { white = 3, black = 2, red = 2 } }, + { "notrucks", "No Trucks", { white = 3, black = 2, red = 2 } }, + { "noturnonred", "No Turn on Red", { white = 3, black = 2, red = 1 } }, + { "nouturn", "No U-Turn", { white = 3, black = 2, red = 2 } }, + { "onewayleft", "One Way (Left)", { white = 3, black = 3 } }, + { "onewayright", "One Way (Right)", { white = 3, black = 3 } }, + { "pedhybridbeacon", "Pedestrian Hybrid Beacon", { white = 3, black = 3, red = 1 } }, + { "rightturnonly", "Right Turn Only", { white = 3, black = 3 } }, + { "roundaboutchevron", "Roundabout Chevron", { white = 4, black = 4 } }, + { "schoolspeedlimit20", "School Speed Limit 20", { green = 1, yellow = 1, white = 3, black = 3 } }, + { "speedlimit50", "Speed Limit 50", { white = 3, black = 3 } }, + { "stopforped", "Stop Here for Pedestrians", { white = 3, black = 3, red = 1 } }, + { "stophereonred", "Stop Here on Red", { white = 3, black = 3 } }, + { "straightonly", "Straight Only", { white = 3, black = 3 } }, + { "yield", "Yield", { red = 4, white = 3 } }, + { "yieldtoped", "Yield Here to Pedestrians", { white = 3, black = 2, red = 1 } }, + { "stop", "Stop", { red = 4, white = 1 } }, +} + +for k, v in pairs(usreg) do + streets.register_road_sign({ + name = "sign_us_" .. v[1], + friendlyname = v[2] .. " Sign", + tiles = { + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_sign_back.png", + "streets_sign_us_" .. v[1] .. ".png" + }, + thickness = 0.01, + section = "usreg", + dye_needed = v[3] + }) +end \ No newline at end of file diff --git a/mods/streets/streets_signs/us/usttc.lua b/mods/streets/streets_signs/us/usttc.lua new file mode 100644 index 0000000..0a2bc99 --- /dev/null +++ b/mods/streets/streets_signs/us/usttc.lua @@ -0,0 +1,26 @@ +local usttc = { + { "exitclosed", "Exit Closed", { orange = 3, black = 3 } }, + { "roadclosed", "Road Closed", { white = 3, black = 2 } }, + { "roadclosedahead", "Road Closed Ahead", { orange = 3, black = 3 } }, + { "roadclosedtothrutraffic", "Road Closed to Thru Traffic", { white = 3, black = 3 } }, + { "roadworkahead", "Road Work Ahead", { orange = 3, black = 3 } }, + { "utilityworkahead", "Utility Work Ahead", { orange = 3, black = 3 } }, +} + +for k, v in pairs(usttc) do + streets.register_road_sign({ + name = "sign_us_" .. v[1], + friendlyname = v[2] .. " Sign", + tiles = { + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_sign_back.png", + "streets_sign_us_" .. v[1] .. ".png" + }, + thickness = 0.01, + section = "usttc", + dye_needed = v[3] + }) +end \ No newline at end of file diff --git a/mods/streets/streets_signs/us/uswarn.lua b/mods/streets/streets_signs/us/uswarn.lua new file mode 100644 index 0000000..4cae27c --- /dev/null +++ b/mods/streets/streets_signs/us/uswarn.lua @@ -0,0 +1,56 @@ +local uswarn = { + { "4wayintersection", "4-Way Intersection", { yellow = 3, black = 3 } }, + { "arrow_left", "Left Arrow", { yellow = 3, black = 3 } }, + { "arrow_right", "Right Arrow", { yellow = 3, black = 3 } }, + { "arrow_leftright", "Left/Right Arrow", { yellow = 3, black = 3 } }, + { "bepreparedtostop", "Be Prepared to Stop", { yellow = 3, black = 2 } }, + { "crossbuck", "Railroad Crossing Crossbuck", { white = 3, black = 1 } }, + { "deadend", "Dead End", { yellow = 3, black = 3 } }, + { "divhwyend", "Divided Highway End", { yellow = 3, black = 3 } }, + { "divhwystart", "Divided Highway Start", { yellow = 3, black = 3 } }, + { "firetruckwarning", "Fire Truck Warning", { yellow = 3, black = 2 } }, + { "fork", "Fork", { yellow = 3, black = 2 } }, + { "leftcurve", "Left Curve", { yellow = 3, black = 3 } }, + { "rightcurve", "Right Curve", { yellow = 3, black = 3 } }, + { "leftreversecurve", "Left Reverse Curve", { yellow = 3, black = 3 } }, + { "rightreversecurve", "Right Reverse Curve", { yellow = 3, black = 3 } }, + { "leftreverseturn", "Left Reverse Turn", { yellow = 3, black = 3 } }, + { "rightreverseturn", "Right Reverse Turn", { yellow = 3, black = 3 } }, + { "leftturn", "Left Turn", { yellow = 3, black = 3 } }, + { "rightturn", "Right Turn", { yellow = 3, black = 3 } }, + { "merge_newlane", "Merge into New Lane", { yellow = 3, black = 4 } }, + { "merge_samelane", "Merge", { yellow = 3, black = 3 } }, + { "nooutlet", "No Outlet", { yellow = 3, black = 3 } }, + { "nopassing", "No Passing Zone", { yellow = 3, black = 3 } }, + { "pedwarning", "Pedestrian Warning", { yellow = 3, black = 3 } }, + { "rightturn270", "270-Degree Right Turn", { yellow = 3, black = 3 } }, + { "leftturn270", "270-Degree Left Turn", { yellow = 3, black = 3 } }, + { "roadnarrows", "Road Narrows", { yellow = 3, black = 3 } }, + { "rrxing", "Railroad Crossing Advance Warning", { yellow = 3, black = 3 } }, + { "schoolcrossing", "School Crossing", { yellow = 1, green = 3, black = 3 } }, + { "stopahead", "Stop Ahead", { yellow = 3, black = 1, red = 1 } }, + { "tintersection", "T-Intersection", { yellow = 3, black = 3 } }, + { "tintersection_stem", "T-Intersection (Stem)", { yellow = 3, black = 3 } }, + { "trafficlightahead", "Traffic Light Ahead", { yellow = 3, black = 1, red = 1, green = 1 } }, + { "twowaytraffic", "Two-Way Traffic", { yellow = 3, black = 3 } }, + { "wrongway", "Wrong Way", { red = 5, white = 2 } }, + { "yieldahead", "Yield Ahead", { yellow = 3, black = 1, red = 1, white = 1 } }, +} + +for k, v in pairs(uswarn) do + streets.register_road_sign({ + name = "sign_us_" .. v[1], + friendlyname = v[2] .. " Sign", + tiles = { + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_transparent.png", + "streets_sign_back.png", + "streets_sign_us_" .. v[1] .. ".png" + }, + thickness = 0.01, + section = "uswarn", + dye_needed = v[3] + }) +end \ No newline at end of file diff --git a/mods/streets/streets_signworkshop/init.lua b/mods/streets/streets_signworkshop/init.lua new file mode 100644 index 0000000..f614ceb --- /dev/null +++ b/mods/streets/streets_signworkshop/init.lua @@ -0,0 +1,308 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: signworkshop + Optional: true +]] + +streets.signworkshop = {} + +function streets.signworkshop.start(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:sign_workshop" then + return + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local template = inv:get_stack("template", 1):get_name() + if not (template and template ~= "") then + return + end + local surface = inv:get_stack("surface", 1):get_name() + if not (surface and surface ~= "") then + return + end + local dyes_needed = streets.signs.signtypes[template].dye_needed + if not (dyes_needed) then + return + end + local dye_level_ok = true + for k, v in pairs(dyes_needed) do + dye_level_ok = dye_level_ok and inv:contains_item("dye", { name = "dye:" .. k, count = v }) + end + if not dye_level_ok then + return + end + if not inv:room_for_item("output", { name = template, count = 1 }) then + return + end + meta:set_string("working_on", template) + meta:set_int("progress", 0) + inv:remove_item("surface", { name = inv:get_stack("surface", 1):get_name(), count = 1 }) + for k, v in pairs(dyes_needed) do + inv:remove_item("dye", { name = "dye:" .. k, count = v }) + end + streets.signworkshop.step(pos) +end + +function streets.signworkshop.step(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:sign_workshop" then + return + end + local meta = minetest.get_meta(pos) + if meta:get_string("working_on") == "" then + return + end + local inv = meta:get_inventory() + local progress = meta:get_int("progress") + progress = progress + 1 + if progress < 10 then + minetest.after(0.2, streets.signworkshop.step, pos) + else + meta:set_int("progress", 0) + progress = 0 + inv:add_item("output", meta:get_string("working_on")) + meta:set_string("working_on", "") + streets.signworkshop.start(pos) + end + meta:set_int("progress", progress) + streets.signworkshop.update_formspec(pos) +end + +function streets.signworkshop.update_formspec(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:sign_workshop" then + return + end + local meta = minetest.get_meta(pos) + local page = meta:get_int("page") + local maxpage = meta:get_int("maxpage") + if page < 1 then + page = maxpage + elseif page > maxpage then + page = 1 + end + meta:set_int("page", page) + local fs = "size[9,9;]" + fs = fs .. "tabheader[0,0;tabs;" + fs = fs .. minetest.formspec_escape("Dye Storage") .. "," + fs = fs .. minetest.formspec_escape("Select Section") .. "," + fs = fs .. minetest.formspec_escape("Craft Signs") .. ";" + fs = fs .. meta:get_int("tab") .. ";false;true]" + if meta:get_int("tab") == 1 then + fs = fs .. "list[context;dye;0,0;8,6]" + fs = fs .. "listring[context;dye]" + fs = fs .. "listring[current_player;main]" + elseif meta:get_int("tab") == 2 then + local x_pos = 0.5 + local y_pos = 0 + for k, v in pairs(streets.signs.sections) do + fs = fs .. "button[" .. x_pos .. "," .. y_pos .. ";2.5,1;" + fs = fs .. minetest.formspec_escape(v.name) .. ";" + fs = fs .. minetest.formspec_escape(v.friendlyname) .. "]" + y_pos = y_pos + 0.8 + if y_pos > 4 then + y_pos = 0 + x_pos = x_pos + 2.5 + end + end + elseif meta:get_int("tab") == 3 then + fs = fs .. "label[0,0;Dyes Needed]" + fs = fs .. "list[context;dye_needed;0,0.5;2,3]" + fs = fs .. "list[context;list;2.25,0;4,4;" .. tostring((page - 1) * 16) .. "]" --Each page is a 4x4 grid (16 items) + fs = fs .. "label[6.5,0.5;Blank Sign]" + fs = fs .. "label[7.5,0.5;Template]" + fs = fs .. "list[context;surface;6.5,1;1,1]" + fs = fs .. "list[context;template;7.5,1;1,1]" + fs = fs .. "image[7,2;1,1;gui_furnace_arrow_bg.png^[lowpart:" .. meta:get_int("progress") * 10 .. ":gui_furnace_arrow_fg.png^[transformR180]" + fs = fs .. "list[context;output;7,3;1,1]" + fs = fs .. "button[2.25,4;1,1;prevpage;<-]" + fs = fs .. "button[5.25,4;1,1;nextpage;->]" + fs = fs .. "label[3.75,4;" .. string.format("Page %s of %s", page, maxpage) .. "]" + if minetest.setting_getbool("creative_mode") then + fs = fs .. "label[0,3.5;CREATIVE MODE\nTaking templates\nis enabled]" + end + end + fs = fs .. "list[current_player;main;0.5,5;8,4]" + meta:set_string("formspec", fs) +end + +local function update_inventory(pos) + local node = minetest.get_node(pos) + if node.name ~= "streets:sign_workshop" then + return + end + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local section = meta:get_string("section") + local itemcount = 0 + for k, v in pairs(streets.signs.signtypes) do + if v.section == section then + itemcount = itemcount + 1 + end + end + inv:set_size("dye_needed", 0) + inv:set_size("list", 0) + inv:set_size("dye_needed", 6) + inv:set_size("list", math.ceil(itemcount / 16) * 16) + inv:set_size("dye", 32) -- 8x4 + inv:set_size("surface", 1) + inv:set_size("template", 1) + inv:set_size("output", 1) + for k, v in pairs(streets.signs.signtypes) do + if v.section == section then + inv:add_item("list", "streets:" .. v.name) + end + end + meta:set_int("maxpage", math.ceil(itemcount / 16)) + local templatestack = inv:get_stack("template", 1) + if templatestack and templatestack:to_string() ~= "" then + local selectedmarking = templatestack:to_table().name + local dyesneeded = streets.signs.signtypes[selectedmarking].dye_needed + for k, v in pairs(dyesneeded) do + inv:add_item("dye_needed", { name = "dye:" .. k, count = v }) + end + end + streets.signworkshop.update_formspec(pos) + if meta:get_string("working_on") == "" then + streets.signworkshop.start(pos) + end +end + +local function on_receive_fields(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.tabs then + meta:set_int("tab", fields.tabs) + meta:set_int("page", 1) + elseif fields.prevpage then + meta:set_int("page", meta:get_int("page") - 1) + elseif fields.nextpage then + meta:set_int("page", meta:get_int("page") + 1) + else + for k, v in pairs(streets.signs.sections) do + if fields[v.name] then + meta:set_string("section", v.name) + meta:set_int("tab", 3) + end + end + end + update_inventory(pos) +end + +local function on_construct(pos) + local meta = minetest.get_meta(pos) + meta:set_string("section", streets.signs.sections[1].name) + meta:set_int("tab", 1) + meta:set_int("progress", 0) + meta:set_int("page", 1) + meta:set_int("maxpage", 1) + meta:set_string("working_on", "") + update_inventory(pos) +end + +local function allow_metadata_inventory_take(pos, listname, index, stack, player) + if listname == "output" or listname == "surface" or listname == "dye" or (listname == "list" and minetest.setting_getbool("creative_mode")) then + return stack:get_count() + else + return 0 + end +end + +local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + if from_list == "list" and to_list == "template" then + return 1 + elseif from_list == "template" and to_list == "list" then + local inv = minetest.get_meta(pos):get_inventory() + return 1 + elseif from_list == "dye" and to_list == "dye" then + return count + else + return 0 + end +end + +local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player) + update_inventory(pos) +end + +local function on_metadata_inventory_put(pos, listname, index, stack, player) + update_inventory(pos) +end + +local function on_metadata_inventory_take(pos, listname, index, stack, player) + update_inventory(pos) +end + +local function allow_metadata_inventory_put(pos, listname, index, stack, player) + if listname == "dye" and stack:get_name():sub(1, 4) == "dye:" then + return stack:get_count() + elseif (listname == "surface" and stack:get_name() == "streets:sign_blank") or (listname == "list" and minetest.setting_getbool("creative_mode")) then + return stack:get_count() + else + return 0 + end +end + +local function can_dig(pos, player) + local inv = minetest.get_meta(pos):get_inventory() + if inv:is_empty("dye") and inv:is_empty("surface") and inv:is_empty("output") then + return true + else + return false + end +end + +minetest.register_node(":streets:sign_workshop", { + description = "Sign Workshop", + tiles = { + "default_wood.png", "default_wood.png", + "default_wood.png^default_sign_steel.png", "default_wood.png^default_sign_steel.png", + "default_wood.png^default_sign_steel.png", "default_wood.png", + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1 }, + node_box = { + type = "fixed", + fixed = { + { -0.4375, 0.375, -0.1875, 0.4375, 0.4375, -0.125 }, -- rail + { -0.125, 0.3125, -0.25, -0.0625, 0.375, -0.0625 }, -- sprayer + { -0.5, -0.5, -0.5, -0.4375, 0.5, 0.5 }, -- sideL + { 0.4375, -0.5, -0.5, 0.5, 0.5, 0.5 }, -- sideR + { -0.4375, 0.3125, -0.5, -0.375, 0.375, 0.5 }, -- railLB + { -0.4375, 0.4375, -0.5, -0.375, 0.5, 0.5 }, -- railLT + { -0.4375, 0.375, -0.5, -0.375, 0.4375, -0.4375 }, -- railLF + { -0.4375, -0.5, 0.4375, 0.4375, 0.5, 0.5 }, -- sideR + { 0.375, 0.3125, -0.5, 0.4375, 0.375, 0.5 }, -- railRB + { 0.375, 0.4375, -0.5, 0.4375, 0.5, 0.5 }, -- railRT + { 0.375, 0.375, -0.5, 0.4375, 0.4375, -0.4375 }, -- railRF + { -0.4375, 0.375, 0.375, -0.375, 0.4375, 0.4375 }, -- railLB + { 0.375, 0.3125, 0.375, 0.4375, 0.375, 0.4375 }, -- railRB + { -0.5, -0.5, -0.5, -0.375, 0.3125, 0.4375 }, -- sideL2 + { 0.375, -0.5, -0.5, 0.4375, 0.3125, 0.4375 }, -- sideR2 + { -0.4375, -0.5, -0.4375, 0.4375, -0.1875, 0.4375 }, -- body + } + }, + selection_box = { + type = "regular" + }, + on_receive_fields = on_receive_fields, + on_construct = on_construct, + allow_metadata_inventory_take = allow_metadata_inventory_take, + allow_metadata_inventory_move = allow_metadata_inventory_move, + allow_metadata_inventory_put = allow_metadata_inventory_put, + on_metadata_inventory_move = on_metadata_inventory_move, + on_metadata_inventory_put = on_metadata_inventory_put, + on_metadata_inventory_take = on_metadata_inventory_take, + can_dig = can_dig, +}) + +minetest.register_craft({ + output = "streets:sign_workshop", + recipe = { + { "streets:sign_blank", "streets:sign_blank", "streets:sign_blank" }, + { "streets:sign_blank", "default:mese_crystal_fragment", "streets:sign_blank" }, + { "streets:sign_blank", "streets:sign_blank", "streets:sign_blank" }, + } +}) \ No newline at end of file diff --git a/mods/streets/streets_steelsupport/init.lua b/mods/streets/streets_steelsupport/init.lua new file mode 100644 index 0000000..1fa069d --- /dev/null +++ b/mods/streets/streets_steelsupport/init.lua @@ -0,0 +1,30 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: steelsupport + Optional: true +]] + +minetest.register_node(":streets:steel_support", { + description = "Steel support", + tiles = { "streets_support.png" }, + groups = { cracky = 1 }, + drawtype = "glasslike_framed", + climbable = true, + sunlight_propagates = true, + paramtype = "light", + collision_box = { + type = "fixed", + fixed = { + { -0.15, -0.5, -0.15, 0.15, 0.5, 0.15 }, + }, + }, +}) + +minetest.register_craft({ + output = "streets:steel_support 5", + recipe = { + { "default:steel_ingot", "", "default:steel_ingot" }, + { "", "default:steel_ingot", "" }, + { "default:steel_ingot", "", "default:steel_ingot" } + } +}) diff --git a/mods/streets/streets_trafficlight/init.lua b/mods/streets/streets_trafficlight/init.lua new file mode 100644 index 0000000..d807573 --- /dev/null +++ b/mods/streets/streets_trafficlight/init.lua @@ -0,0 +1,1934 @@ +--[[ + ## StreetsMod 2.0 ## + Submod: trafficlight + Optional: true +]] + +streets.tlBox = { + { -0.1875, -0.5, 0.5, 0.1875, 0.5, 0.75 }, --Box + + { -0.125, -0.125, 0.85, 0.125, 0.125, 0.75 }, -- Pole Mounting Bracket + + { -0.125, 0.3125, 0.3125, -0.0625, 0.375, 0.5 }, --Top Visor, Left + { -0.0625, 0.375, 0.3125, 0.0625, 0.4375, 0.5 }, --Top Visor, Center + { 0.0625, 0.3125, 0.3125, 0.125, 0.38, 0.5 }, --Top Visor, Right + + { -0.125, 0, 0.3125, -0.0625, 0.0625, 0.5 }, --Middle Visor, Left + { -0.0625, 0.0625, 0.3125, 0.0625, 0.125, 0.5 }, --Middle Visor, Center + { 0.0625, 0, 0.3125, 0.125, 0.0625, 0.5 }, --Middle Visor, Right + + { -0.125, -0.3125, 0.3125, -0.0625, -0.25, 0.5 }, --Bottom Visor, Left + { -0.0625, -0.25, 0.3125, 0.0625, -0.1875, 0.5 }, --Bottom Visor, Center + { 0.0625, -0.3125, 0.3125, 0.125, -0.25, 0.5 }, --Bottom Visor, Right +} + +streets.tleBox = { + { -0.1875, -0.1875, 0.5, 0.1875, 0.5, 0.75 }, --Box + + { -0.125, 0.3125, 0.3125, -0.0625, 0.375, 0.5 }, --Top Visor, Left + { -0.0625, 0.375, 0.3125, 0.0625, 0.4375, 0.5 }, --Top Visor, Center + { 0.0625, 0.3125, 0.3125, 0.125, 0.38, 0.5 }, --Top Visor, Right + + { -0.125, 0, 0.3125, -0.0625, 0.0625, 0.5 }, --Middle Visor, Left + { -0.0625, 0.0625, 0.3125, 0.0625, 0.125, 0.5 }, --Middle Visor, Center + { 0.0625, 0, 0.3125, 0.125, 0.0625, 0.5 }, --Middle Visor, Right +} + +streets.plBox = { + { -0.1875, -0.5, 0.5, 0.1875, 0.5, 0.75 }, --Box + + { -0.125, -0.125, 0.85, 0.125, 0.125, 0.75 }, -- Pole Mounting Bracket + + { -0.1875, 0.0625, 0.3125, -0.1375, 0.4375, 0.5 }, --Top Visor, Left + { -0.1375, 0.3875, 0.3125, 0.1375, 0.4375, 0.5 }, --Top Visor, Center + { 0.1875, 0.0625, 0.3125, 0.1375, 0.4375, 0.5 }, --Top Visor, Right + + { -0.1875, -0.0625, 0.3125, -0.1375, -0.4375, 0.5 }, --Bottom Visor, Left + { -0.1375, -0.0625, 0.3125, 0.1375, -0.1125, 0.5 }, --Bottom Visor, Center + { 0.1875, -0.0625, 0.3125, 0.1375, -0.4375, 0.5 }, --Bottom Visor, Right +} + +streets.bBox = { + { -0.1875, -0.1875, 0.5, 0.1875, 0.1875, 0.75 }, --Box + + { -0.125, -0.125, 0.85, 0.125, 0.125, 0.75 }, -- Pole Mounting Bracket + + { -0.125, 0, 0.3125, -0.0625, 0.0625, 0.5 }, --Visor, Left + { -0.0625, 0.0625, 0.3125, 0.0625, 0.125, 0.5 }, --Visor, Center + { 0.0625, 0, 0.3125, 0.125, 0.0625, 0.5 }, --Visor, Right +} + +streets.hbBox = { + { -0.375, -0.25, 0.5, 0.375, 0.25, 0.75 }, --Box + + { -0.125, -0.125, 0.85, 0.125, 0.125, 0.75 }, -- Pole Mounting Bracket + + { -0.3, 0.0625, 0.3125, -0.2375, 0.125, 0.5 }, --Top Left Visor, Left + { -0.2375, 0.125, 0.3125, -0.1125, 0.1875, 0.5 }, --Top Left Visor, Center + { -0.1125, 0.0625, 0.3125, -0.05, 0.125, 0.5 }, --Top Left Visor, Right + + { 0.1125, 0.0625, 0.3125, 0.05, 0.125, 0.5 }, --Top Right Visor, Left + { 0.2375, 0.125, 0.3125, 0.1125, 0.1875, 0.5 }, --Top Right Visor, Center + { 0.3, 0.0625, 0.3125, 0.2375, 0.125, 0.5 }, --Top Right Visor, Right + + { -0.125, -0.125, 0.3125, -0.0625, -0.0625, 0.5 }, --Bottom Visor, Left + { -0.0625, -0.0625, 0.3125, 0.0625, 0, 0.5 }, --Bottom Visor, Center + { 0.0625, -0.125, 0.3125, 0.125, -0.0625, 0.5 }, --Bottom Visor, Right +} + +streets.tlDigilineRules = { + { 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 } +} + +streets.tlSwitch = function(pos, to) + if not pos or not to then + return + end + minetest.swap_node(pos, { name = to, param2 = minetest.get_node(pos).param2 }) +end + +streets.on_digiline_receive = function(pos, node, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if setchan ~= channel then + return + end + -- Tl states + local name = minetest.get_node(pos).name + if type(msg) ~= "string" then + return + end + msg = string.upper(msg) + if msg == "OFF" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_off") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_off") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_off") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_off") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_off") + elseif name:find("beacon_hybrid") then + streets.tlSwitch(pos, "streets:beacon_hybrid_off") + elseif name:find("beacon") then + streets.tlSwitch(pos, "streets:beacon_off") + else + streets.tlSwitch(pos, "streets:trafficlight_top_off") + end + elseif msg == "GREEN" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_walk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_green") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_green") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_green") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_green") + elseif name:find("beacon_hybrid") then + --Not Supported + elseif name:find("beacon") then + --Not Supported + else + streets.tlSwitch(pos, "streets:trafficlight_top_green") + end + elseif msg == "RED" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_dontwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_off") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_off") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_red") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_red") + elseif name:find("beacon_hybrid") then + streets.tlSwitch(pos, "streets:beacon_hybrid_red") + elseif name:find("beacon") then + --Not Supported + else + streets.tlSwitch(pos, "streets:trafficlight_top_red") + end + elseif msg == "FLASHGREEN" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_flashingwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_flashgreen") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_flashgreen") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_flashgreen") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_flashgreen") + elseif name:find("beacon_hybrid") then + --Not Supported + elseif name:find("beacon") then + --Not Supported + else + streets.tlSwitch(pos, "streets:trafficlight_top_flashgreen") + end + elseif msg == "REDYELLOW" then + if name:find("pedlight") then + --Not Supported + elseif name:find("extender_left") then + --Not Supported + elseif name:find("extender_right") then + --Not Supported + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_redyellow") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_redyellow") + elseif name:find("beacon_hybrid") then + --Not Supported + elseif name:find("beacon") then + --Not Supported + else + streets.tlSwitch(pos, "streets:trafficlight_top_redyellow") + end + elseif msg == "FLASHYELLOW" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_flashingdontwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_off") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_off") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_warn") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_warn") + elseif name:find("beacon_hybrid") then + streets.tlSwitch(pos, "streets:beacon_hybrid_flashyellow") + elseif name:find("beacon") then + streets.tlSwitch(pos, "streets:beacon_flashyellow") + else + streets.tlSwitch(pos, "streets:trafficlight_top_warn") + end + elseif msg == "YELLOW" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_flashingdontwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_yellow") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_yellow") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_yellow") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_yellow") + elseif name:find("beacon_hybrid") then + streets.tlSwitch(pos, "streets:beacon_hybrid_yellow") + elseif name:find("beacon") then + --Not Supported + else + streets.tlSwitch(pos, "streets:trafficlight_top_yellow") + end + elseif msg == "FLASHRED" then + if name:find("pedlight") then + streets.tlSwitch(pos, "streets:pedlight_top_flashingdontwalk") + elseif name:find("extender_left") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_left_off") + elseif name:find("extender_right") then + streets.tlSwitch(pos, "streets:trafficlight_top_extender_right_off") + elseif name:find("left") then + streets.tlSwitch(pos, "streets:trafficlight_top_left_flashred") + elseif name:find("right") then + streets.tlSwitch(pos, "streets:trafficlight_top_right_flashred") + elseif name:find("beacon_hybrid") then + streets.tlSwitch(pos, "streets:beacon_hybrid_flashred") + elseif name:find("beacon") then + streets.tlSwitch(pos, "streets:beacon_flashred") + else + streets.tlSwitch(pos, "streets:trafficlight_top_flashred") + end + end +end + +minetest.register_node(":streets:digiline_distributor", { + description = "Digiline distributor", + tiles = { "streets_lampcontroller_top.png", "streets_lampcontroller_bottom.png", "streets_lampcontroller_sides.png" }, + groups = { cracky = 1 }, + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -0.05, 0.5, -0.05, 0.05, 1.6, 0.05 } + } + }, + digiline = { + wire = { + 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 = 2, z = 0 } + } + } + } +}) + +minetest.register_node(":streets:beacon_hybrid_off", { + description = "Hybrid Beacon", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = "streets_hybrid_beacon_inv.png", + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.hbBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_hb_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_hybrid_yellow", { + drop = "streets:beacon_hybrid_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.hbBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_hb_yellow.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_hybrid_red", { + drop = "streets:beacon_hybrid_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.hbBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_hb_red.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_hybrid_flashyellow", { + drop = "streets:beacon_hybrid_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.hbBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_hb_flashyellow.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_hybrid_flashred", { + drop = "streets:beacon_hybrid_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.hbBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_hb_flashred.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_off", { + description = "Beacon", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = "streets_beacon_inv.png", + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.bBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_flashred", { + drop = "streets:beacon_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.bBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_b_flashred.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:beacon_flashyellow", { + drop = "streets:beacon_off", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.bBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tl_warn.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_left_off", { + description = "Traffic Light Left-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = "streets_trafficlight_inv_extender_left.png", + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_left_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_left_yellow", { + drop = "streets:trafficlight_top_extender_left_off", + description = "Traffic Light Left-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tle_left_yellow.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_left_green", { + drop = "streets:trafficlight_top_extender_left_off", + description = "Traffic Light Left-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tle_left_green.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_left_flashgreen", { + drop = "streets:trafficlight_top_extender_left_off", + description = "Traffic Light Left-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tle_left_flashgreen.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_right_off", { + description = "Traffic Light Right-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = "streets_trafficlight_inv_extender_right.png", + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_right_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_right_yellow", { + drop = "streets:trafficlight_top_extender_right_off", + description = "Traffic Light Right-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tle_right_yellow.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_right_green", { + drop = "streets:trafficlight_top_extender_right_off", + description = "Traffic Light Right-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tle_right_green.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:trafficlight_top_extender_right_flashgreen", { + drop = "streets:trafficlight_top_extender_right_off", + description = "Traffic Light Right-Turn Module", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2, not_in_creative_inventory = 1 }, + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tleBox + }, + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tle_right_flashgreen.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:pedlight_top_off", { + description = "Pedestrian Light", + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = "streets_pedlight_inv.png", + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_pl_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, +}) + +minetest.register_node(":streets:pedlight_top_dontwalk", { + drop = "streets:pedlight_top_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_pl_dontwalk.png" }, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, +}) + +minetest.register_node(":streets:pedlight_top_walk", { + drop = "streets:pedlight_top_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_pl_walk.png" }, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, +}) + +minetest.register_node(":streets:pedlight_top_flashingdontwalk", { + drop = "streets:pedlight_top_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_pl_flashingdontwalk.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, +}) + +minetest.register_node(":streets:pedlight_top_flashingwalk", { + drop = "streets:pedlight_top_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_pl_flashingwalk.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + node_box = { + type = "fixed", + fixed = streets.plBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, +}) + + +for _, i in pairs({ "", "_left", "_right" }) do + minetest.register_node(":streets:trafficlight_top" .. i .. "_off", { + description = (i == "" and "Traffic Light") or (i == "_left" and "Traffic Light (Left Turn)") or (i == "_right" and "Traffic Light (Right Turn)"), + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = { cracky = 1, level = 2 }, + inventory_image = ((i == "") and "streets_trafficlight_inv_straight.png") or ((i == "_left") and "streets_trafficlight_inv_left.png") or ((i == "_right") and "streets_trafficlight_inv_right.png"), + light_source = 11, + sunlight_propagates = true, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl" .. i .. "_off.png" }, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + on_receive_fields = function(pos, formname, fields, sender) + 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 + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_red", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl" .. i .. "_red.png" }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_yellow", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl" .. i .. "_yellow.png" }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_redyellow", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl" .. i .. "_redyellow.png" }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_green", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl" .. i .. "_green.png" }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_warn", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tl" .. i .. "_warn.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_flashred", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tl" .. i .. "_flashred.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) + + minetest.register_node(":streets:trafficlight_top" .. i .. "_flashgreen", { + drop = "streets:trafficlight_top" .. i .. "_off", + groups = { cracky = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_bg.png", { + name = "streets_tl" .. i .. "_flashgreen.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 }, + } + }, + node_box = { + type = "fixed", + fixed = streets.tlBox + }, + light_source = 6, + digiline = { + receptor = {}, + wire = { rules = streets.tlDigilineRules }, + effector = { + action = function(pos, node, channel, msg) + streets.on_digiline_receive(pos, node, channel, msg) + end + } + }, + }) +end + +minetest.register_craft({ + output = "streets:trafficlight_top_off", + recipe = { + { "default:steel_ingot", "dye:red", "default:steel_ingot" }, + { "default:steel_ingot", "dye:yellow", "default:steel_ingot" }, + { "default:steel_ingot", "dye:green", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:trafficlight_top_left_off", + recipe = { + { "dye:red", "default:steel_ingot", "default:steel_ingot" }, + { "dye:yellow", "default:steel_ingot", "default:steel_ingot" }, + { "dye:green", "default:steel_ingot", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:trafficlight_top_right_off", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "dye:red" }, + { "default:steel_ingot", "default:steel_ingot", "dye:yellow" }, + { "default:steel_ingot", "default:steel_ingot", "dye:green" } + } +}) + +minetest.register_craft({ + output = "streets:pedlight_top_off", + recipe = { + { "default:steel_ingot", "dye:orange", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "default:steel_ingot", "dye:white", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:trafficlight_top_extender_left_off", + recipe = { + { "dye:yellow", "default:steel_ingot", "default:steel_ingot" }, + { "dye:green", "default:steel_ingot", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:trafficlight_top_extender_right_off", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "dye:yellow" }, + { "default:steel_ingot", "default:steel_ingot", "dye:green" } + } +}) + +minetest.register_craft({ + output = "streets:beacon_off", + recipe = { + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }, + { "default:steel_ingot", "dye:red", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:beacon_hybrid_off", + recipe = { + { "dye:red", "default:steel_ingot", "dye:red" }, + { "default:steel_ingot", "dye:yellow", "default:steel_ingot" }, + { "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" } + } +}) + +minetest.register_craft({ + output = "streets:digiline_distributor", + recipe = { + { "", "digilines:wire_std_00000000", "" }, + { "digilines:wire_std_00000000", "mesecons_luacontroller:luacontroller0000", "digilines:wire_std_00000000" }, + { "", "digilines:wire_std_00000000", "" } + } +}) + +streets.portable_tl_on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.normal then + meta:set_string("mode", "Normal") + elseif fields.yyflash then + meta:set_string("mode", "Y-Y Flash") + elseif fields.yrflash then + meta:set_string("mode", "Y-R Flash") + elseif fields.rrflash then + meta:set_string("mode", "R-R Flash") + elseif fields.save then + if tonumber(fields.yellow) then + meta:set_int("yellow", fields.yellow) + end + if tonumber(fields.allred) then + meta:set_int("allred", fields.allred) + end + if tonumber(fields.maingreen) then + meta:set_int("maingreen", fields.maingreen) + end + if tonumber(fields.sidegreen) then + meta:set_int("sidegreen", fields.sidegreen) + end + end +end + +streets.portable_tl_tick = function(pos, meta) + local yellow = meta:get_int("yellow") + local allred = meta:get_int("allred") + local sidegreen = meta:get_int("sidegreen") + local maingreen = meta:get_int("maingreen") + local tick = meta:get_int("tick") + local mode = meta:get_string("mode") + local phase = meta:get_string("phase") + local time = "" + if mode == "Normal" then + local phaselen = 0 + if phase == "All Red A" or phase == "All Red B" then + phaselen = allred + elseif phase == "Yellow A" or phase == "Yellow B" then + phaselen = yellow + elseif phase == "Side Green" then + phaselen = sidegreen + elseif phase == "Main Green" then + phaselen = maingreen + end + tick = tick + 1 + if tick >= phaselen then + tick = 0 + if phase == "All Red A" then + phase = "Side Green" + elseif phase == "Side Green" then + phase = "Yellow B" + elseif phase == "Yellow B" then + phase = "All Red B" + elseif phase == "All Red B" then + phase = "Main Green" + elseif phase == "Main Green" then + phase = "Yellow A" + elseif phase == "Yellow A" then + phase = "All Red A" + end + if phase == "All Red A" or phase == "All Red B" then + phaselen = allred + elseif phase == "Yellow A" or phase == "Yellow B" then + phaselen = yellow + elseif phase == "Side Green" then + phaselen = sidegreen + elseif phase == "Main Green" then + phaselen = maingreen + end + end + time = string.format("%s of %s Seconds Remaining", phaselen - tick, phaselen) + end + meta:set_int("tick", tick) + local need_swap = phase ~= meta:get_string(phase) + local swap_to = "streets:trafficlight_portable_rrflash" + meta:set_string("phase", phase) + + if mode == "R-R Flash" then + need_swap = true + swap_to = "streets:trafficlight_portable_rrflash" + elseif mode == "Y-Y Flash" then + need_swap = true + swap_to = "streets:trafficlight_portable_yyflash" + elseif mode == "Y-R Flash" then + need_swap = true + swap_to = "streets:trafficlight_portable_yrflash" + end + + if need_swap then + if mode == "Normal" then + if phase == "All Red A" or phase == "All Red B" then + swap_to = "streets:trafficlight_portable_allred" + elseif phase == "Yellow A" then + swap_to = "streets:trafficlight_portable_yellowa" + elseif phase == "Yellow B" then + swap_to = "streets:trafficlight_portable_yellowb" + elseif phase == "Main Green" then + swap_to = "streets:trafficlight_portable_maingreen" + elseif phase == "Side Green" then + swap_to = "streets:trafficlight_portable_sidegreen" + end + end + local node = minetest.get_node(pos) + minetest.swap_node(pos, { name = swap_to, param2 = node.param2 }) + end + + local formspec = "size[8,4]" .. + "label[0,0;Mode: " .. mode .. "]" .. + "label[0,0.5;" .. (mode == "Normal" and "Phase: " .. phase or "") .. "]" .. + "label[0,1;" .. time .. "]" .. + "label[0,2;Select Mode:]" .. + "button[0,2.5;2,1;normal;Normal]" .. + "button[2,2.5;2,1;rrflash;R-R Flash]" .. + "button[0,3.5;2,1;yyflash;Y-Y Flash]" .. + "button[2,3.5;2,1;yrflash;Y-R Flash]" .. + "label[5.5,0;Time Adjustments:]" + if mode == "Normal" then + formspec = formspec .. "label[5.5,1;Cannot edit times\nwhile running.\nSelect a flash mode first.]" + else + formspec = formspec .. "field[4.5,1;2,1;yellow;Yellow;${yellow}]" .. + "field[6.5,1;2,1;allred;All Red;${allred}]" .. + "field[4.5,2;2,1;maingreen;Main Green;${maingreen}]" .. + "field[6.5,2;2,1;sidegreen;Side Green;${sidegreen}]" .. + "button[5.25,3;2,1;save;Save]" + end + meta:set_string("formspec", formspec) +end + +minetest.register_node(":streets:trafficlight_portable_off", { + description = "Portable Traffic Light", + inventory_image = "streets_trafficlight_inv_portable.png", + groups = { cracky = 1, portable_tl = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_off.png", "streets_tl_off.png", "streets_tl_off.png", "streets_tl_off.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("yellow", 3) + meta:set_int("allred", 2) + meta:set_int("sidegreen", 5) + meta:set_int("maingreen", 10) + meta:set_int("tick", 0) + meta:set_string("mode", "R-R Flash") + meta:set_string("phase", "All Red A") + end, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_allred", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_red.png", "streets_tl_red.png", "streets_tl_red.png", "streets_tl_red.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_yellowa", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_red.png", "streets_tl_red.png", "streets_tl_yellow.png", "streets_tl_yellow.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_yellowb", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_yellow.png", "streets_tl_yellow.png", "streets_tl_red.png", "streets_tl_red.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_maingreen", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_red.png", "streets_tl_red.png", "streets_tl_green.png", "streets_tl_green.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_sidegreen", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", "streets_tl_green.png", "streets_tl_green.png", "streets_tl_red.png", "streets_tl_red.png" }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +streets.portable_tl_tile_flashred = { + name = "streets_tl_flashred.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 } +} + +streets.portable_tl_tile_flashyellow = { + name = "streets_tl_warn.png", + animation = { type = "vertical_frames", aspect_w = 64, aspect_h = 64, length = 1.2 } +} + +minetest.register_node(":streets:trafficlight_portable_rrflash", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", streets.portable_tl_tile_flashred, streets.portable_tl_tile_flashred, streets.portable_tl_tile_flashred, streets.portable_tl_tile_flashred }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_yyflash", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", streets.portable_tl_tile_flashyellow, streets.portable_tl_tile_flashyellow, streets.portable_tl_tile_flashyellow, streets.portable_tl_tile_flashyellow }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_node(":streets:trafficlight_portable_yrflash", { + drop = "streets:trafficlight_portable_off", + groups = { cracky = 1, portable_tl = 1, not_in_creative_inventory = 1 }, + paramtype = "light", + paramtype2 = "facedir", + sunlight_propagates = true, + drawtype = "nodebox", + on_receive_fields = streets.portable_tl_on_receive_fields, + tiles = { "streets_tl_bg.png", "streets_tl_bg.png", streets.portable_tl_tile_flashred, streets.portable_tl_tile_flashred, streets.portable_tl_tile_flashyellow, streets.portable_tl_tile_flashyellow }, + node_box = { + type = "fixed", + fixed = { + { -0.1875, -0.5, -0.1875, 0.1875, 0.5, 0.1875 }, --Box + + --Needs visors at some point. Converting to a mesh would be best. + } + }, + light_source = 6, +}) + +minetest.register_abm({ + nodenames = "group:portable_tl", + interval = 1, + chance = 1, + action = function(pos) + streets.portable_tl_tick(pos, minetest.get_meta(pos)) + end, +}) + +minetest.register_craft({ + output = "streets:trafficlight_portable_off", + type = "shapeless", + recipe = { "streets:trafficlight_top_off", "mesecons_luacontroller:luacontroller0000" } +}) + +minetest.register_node("streets:pedbutton_left", { + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_pedbutton_us_back.png", + "streets_pedbutton_us_left.png" + }, + paramtype = "light", + paramtype2 = "facedir", + legacy_wallmounted = true, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, 0.65, 0.5, 0.5, 0.85 } + }, + node_box = { + type = "fixed", + fixed = { + { -0.1, -0.1, 0.7, 0.1, 0.1, 0.85 }, + { -0.5, -0.5, 0.7, 0.5, 0.5, 0.7 }, + { -0.06, -0.41, 0.7, 0.05, -0.32, 0.65 } + } + }, + { + receptor = {} + }, + groups = { cracky = 1 }, + description = "Pedestrian Crossing Button Assembly - Left", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;msg;Message;${msg}]button_exit[2.25,3;3,1;submit;Save]") + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.channel and fields.msg and fields.channel ~= "" and fields.msg ~= "" then + meta:set_string("channel", fields.channel) + meta:set_string("msg", fields.msg) + meta:set_string("formspec", "") + minetest.swap_node(pos, { name = "streets:pedbutton_left_off", param2 = minetest.get_node(pos).param2 }) + else + minetest.chat_send_player(sender:get_player_name(), "Channel and message must both be set!") + end + end, +}) + +minetest.register_node("streets:pedbutton_left_off", { + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_pedbutton_us_back.png", + "streets_pedbutton_us_left.png" + }, + paramtype = "light", + paramtype2 = "facedir", + legacy_wallmounted = true, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, 0.65, 0.5, 0.5, 0.85 } + }, + node_box = { + type = "fixed", + fixed = { + { -0.1, -0.1, 0.7, 0.1, 0.1, 0.85 }, + { -0.5, -0.5, 0.7, 0.5, 0.5, 0.7 }, + { -0.06, -0.41, 0.7, 0.05, -0.32, 0.65 } + } + }, + digiline = + { + receptor = {} + }, + groups = { cracky = 1, not_in_creative_inventory = 1 }, + drop = "streets:pedbutton_left", + on_rightclick = function(pos) + local meta = minetest.get_meta(pos) + digiline:receptor_send(pos, digiline.rules.default, meta:get_string("channel"), meta:get_string("msg")) + end, + on_punch = function(pos) + local meta = minetest.get_meta(pos) + digiline:receptor_send(pos, digiline.rules.default, meta:get_string("channel"), meta:get_string("msg")) + end, +}) + +minetest.register_node("streets:pedbutton_right", { + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_pedbutton_us_back.png", + "streets_pedbutton_us_right.png" + }, + paramtype = "light", + paramtype2 = "facedir", + legacy_wallmounted = true, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, 0.65, 0.5, 0.5, 0.85 } + }, + node_box = { + type = "fixed", + fixed = { + { -0.1, -0.1, 0.7, 0.1, 0.1, 0.85 }, + { -0.5, -0.5, 0.7, 0.5, 0.5, 0.7 }, + { -0.06, -0.41, 0.7, 0.05, -0.32, 0.65 } + } + }, + { + receptor = {} + }, + groups = { cracky = 1 }, + description = "Pedestrian Crossing Button Assembly - Right", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "size[8,4;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;6,2;msg;Message;${msg}]button_exit[2.25,3;3,1;submit;Save]") + end, + on_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if fields.channel and fields.msg and fields.channel ~= "" and fields.msg ~= "" then + meta:set_string("channel", fields.channel) + meta:set_string("msg", fields.msg) + meta:set_string("formspec", "") + minetest.swap_node(pos, { name = "streets:pedbutton_right_off", param2 = minetest.get_node(pos).param2 }) + else + minetest.chat_send_player(sender:get_player_name(), "Channel and message must both be set!") + end + end, +}) + +minetest.register_node("streets:pedbutton_right_off", { + drawtype = "nodebox", + tiles = { + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_tl_bg.png", + "streets_pedbutton_us_back.png", + "streets_pedbutton_us_right.png" + }, + paramtype = "light", + paramtype2 = "facedir", + legacy_wallmounted = true, + walkable = false, + sunlight_propagates = true, + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, 0.65, 0.5, 0.5, 0.85 } + }, + node_box = { + type = "fixed", + fixed = { + { -0.1, -0.1, 0.7, 0.1, 0.1, 0.85 }, + { -0.5, -0.5, 0.7, 0.5, 0.5, 0.7 }, + { -0.06, -0.41, 0.7, 0.05, -0.32, 0.65 } + } + }, + digiline = + { + receptor = {} + }, + groups = { cracky = 1, not_in_creative_inventory = 1 }, + drop = "streets:pedbutton_right", + on_rightclick = function(pos) + local meta = minetest.get_meta(pos) + digiline:receptor_send(pos, digiline.rules.default, meta:get_string("channel"), meta:get_string("msg")) + end, + on_punch = function(pos) + local meta = minetest.get_meta(pos) + digiline:receptor_send(pos, digiline.rules.default, meta:get_string("channel"), meta:get_string("msg")) + end, +}) + +minetest.register_craft({ + output = "streets:pedbutton_left", + type = "shapeless", + recipe = { "streets:sign_us_pushtocross_left", "digilines:wire_std_00000000" } +}) + +minetest.register_craft({ + output = "streets:pedbutton_right", + type = "shapeless", + recipe = { "streets:sign_us_pushtocross_right", "digilines:wire_std_00000000" } +}) diff --git a/mods/streets/textures/streets_arrow_left_right.png b/mods/streets/textures/streets_arrow_left_right.png new file mode 100644 index 0000000..ef90f80 Binary files /dev/null and b/mods/streets/textures/streets_arrow_left_right.png differ diff --git a/mods/streets/textures/streets_arrow_right.png b/mods/streets/textures/streets_arrow_right.png new file mode 100644 index 0000000..a79089a Binary files /dev/null and b/mods/streets/textures/streets_arrow_right.png differ diff --git a/mods/streets/textures/streets_arrow_right_straight.png b/mods/streets/textures/streets_arrow_right_straight.png new file mode 100644 index 0000000..e77a0e5 Binary files /dev/null and b/mods/streets/textures/streets_arrow_right_straight.png differ diff --git a/mods/streets/textures/streets_arrow_straight.png b/mods/streets/textures/streets_arrow_straight.png new file mode 100644 index 0000000..ce2a82a Binary files /dev/null and b/mods/streets/textures/streets_arrow_straight.png differ diff --git a/mods/streets/textures/streets_asphalt.png b/mods/streets/textures/streets_asphalt.png new file mode 100644 index 0000000..fdc8b2b Binary files /dev/null and b/mods/streets/textures/streets_asphalt.png differ diff --git a/mods/streets/textures/streets_asphalt_blue.png b/mods/streets/textures/streets_asphalt_blue.png new file mode 100644 index 0000000..3b36aaa Binary files /dev/null and b/mods/streets/textures/streets_asphalt_blue.png differ diff --git a/mods/streets/textures/streets_asphalt_red.png b/mods/streets/textures/streets_asphalt_red.png new file mode 100644 index 0000000..1c166de Binary files /dev/null and b/mods/streets/textures/streets_asphalt_red.png differ diff --git a/mods/streets/textures/streets_asphalt_yellow.png b/mods/streets/textures/streets_asphalt_yellow.png new file mode 100644 index 0000000..6aa60bd Binary files /dev/null and b/mods/streets/textures/streets_asphalt_yellow.png differ diff --git a/mods/streets/textures/streets_b_flashred.png b/mods/streets/textures/streets_b_flashred.png new file mode 100644 index 0000000..8f20032 Binary files /dev/null and b/mods/streets/textures/streets_b_flashred.png differ diff --git a/mods/streets/textures/streets_beacon_inv.png b/mods/streets/textures/streets_beacon_inv.png new file mode 100644 index 0000000..9557ab1 Binary files /dev/null and b/mods/streets/textures/streets_beacon_inv.png differ diff --git a/mods/streets/textures/streets_bollard_automatic_side.png b/mods/streets/textures/streets_bollard_automatic_side.png new file mode 100644 index 0000000..1be4f9f Binary files /dev/null and b/mods/streets/textures/streets_bollard_automatic_side.png differ diff --git a/mods/streets/textures/streets_bollard_driver_top.png b/mods/streets/textures/streets_bollard_driver_top.png new file mode 100644 index 0000000..7007779 Binary files /dev/null and b/mods/streets/textures/streets_bollard_driver_top.png differ diff --git a/mods/streets/textures/streets_bollard_manual_side.png b/mods/streets/textures/streets_bollard_manual_side.png new file mode 100644 index 0000000..c2341f9 Binary files /dev/null and b/mods/streets/textures/streets_bollard_manual_side.png differ diff --git a/mods/streets/textures/streets_bollard_manual_side_down.png b/mods/streets/textures/streets_bollard_manual_side_down.png new file mode 100644 index 0000000..3fc9429 Binary files /dev/null and b/mods/streets/textures/streets_bollard_manual_side_down.png differ diff --git a/mods/streets/textures/streets_bollard_manual_top.png b/mods/streets/textures/streets_bollard_manual_top.png new file mode 100644 index 0000000..588b2c6 Binary files /dev/null and b/mods/streets/textures/streets_bollard_manual_top.png differ diff --git a/mods/streets/textures/streets_concrete.png b/mods/streets/textures/streets_concrete.png new file mode 100644 index 0000000..f4caa99 Binary files /dev/null and b/mods/streets/textures/streets_concrete.png differ diff --git a/mods/streets/textures/streets_cross.png b/mods/streets/textures/streets_cross.png new file mode 100644 index 0000000..f0aa441 Binary files /dev/null and b/mods/streets/textures/streets_cross.png differ diff --git a/mods/streets/textures/streets_curve_sign.png b/mods/streets/textures/streets_curve_sign.png new file mode 100644 index 0000000..0108012 Binary files /dev/null and b/mods/streets/textures/streets_curve_sign.png differ diff --git a/mods/streets/textures/streets_dashed_center_line.png b/mods/streets/textures/streets_dashed_center_line.png new file mode 100644 index 0000000..6d0403e Binary files /dev/null and b/mods/streets/textures/streets_dashed_center_line.png differ diff --git a/mods/streets/textures/streets_dashed_center_line_wide.png b/mods/streets/textures/streets_dashed_center_line_wide.png new file mode 100644 index 0000000..5f2a15f Binary files /dev/null and b/mods/streets/textures/streets_dashed_center_line_wide.png differ diff --git a/mods/streets/textures/streets_dashed_side_line.png b/mods/streets/textures/streets_dashed_side_line.png new file mode 100644 index 0000000..2b88c8a Binary files /dev/null and b/mods/streets/textures/streets_dashed_side_line.png differ diff --git a/mods/streets/textures/streets_dashed_side_line_wide.png b/mods/streets/textures/streets_dashed_side_line_wide.png new file mode 100644 index 0000000..54ee56c Binary files /dev/null and b/mods/streets/textures/streets_dashed_side_line_wide.png differ diff --git a/mods/streets/textures/streets_delineator_back.png b/mods/streets/textures/streets_delineator_back.png new file mode 100644 index 0000000..4148cd5 Binary files /dev/null and b/mods/streets/textures/streets_delineator_back.png differ diff --git a/mods/streets/textures/streets_delineator_front.png b/mods/streets/textures/streets_delineator_front.png new file mode 100644 index 0000000..7a464f3 Binary files /dev/null and b/mods/streets/textures/streets_delineator_front.png differ diff --git a/mods/streets/textures/streets_delineator_left.png b/mods/streets/textures/streets_delineator_left.png new file mode 100644 index 0000000..1d7e0e1 Binary files /dev/null and b/mods/streets/textures/streets_delineator_left.png differ diff --git a/mods/streets/textures/streets_delineator_right.png b/mods/streets/textures/streets_delineator_right.png new file mode 100644 index 0000000..01d40c6 Binary files /dev/null and b/mods/streets/textures/streets_delineator_right.png differ diff --git a/mods/streets/textures/streets_delineator_top.png b/mods/streets/textures/streets_delineator_top.png new file mode 100644 index 0000000..8fdad66 Binary files /dev/null and b/mods/streets/textures/streets_delineator_top.png differ diff --git a/mods/streets/textures/streets_double_dashed_center_line.png b/mods/streets/textures/streets_double_dashed_center_line.png new file mode 100644 index 0000000..e792636 Binary files /dev/null and b/mods/streets/textures/streets_double_dashed_center_line.png differ diff --git a/mods/streets/textures/streets_double_solid_center_line.png b/mods/streets/textures/streets_double_solid_center_line.png new file mode 100644 index 0000000..1bc7edb Binary files /dev/null and b/mods/streets/textures/streets_double_solid_center_line.png differ diff --git a/mods/streets/textures/streets_double_solid_center_line_corner.png b/mods/streets/textures/streets_double_solid_center_line_corner.png new file mode 100644 index 0000000..c214264 Binary files /dev/null and b/mods/streets/textures/streets_double_solid_center_line_corner.png differ diff --git a/mods/streets/textures/streets_double_solid_center_line_crossing.png b/mods/streets/textures/streets_double_solid_center_line_crossing.png new file mode 100644 index 0000000..8b37b34 Binary files /dev/null and b/mods/streets/textures/streets_double_solid_center_line_crossing.png differ diff --git a/mods/streets/textures/streets_double_solid_center_line_tjunction.png b/mods/streets/textures/streets_double_solid_center_line_tjunction.png new file mode 100644 index 0000000..2821e35 Binary files /dev/null and b/mods/streets/textures/streets_double_solid_center_line_tjunction.png differ diff --git a/mods/streets/textures/streets_double_solid_diagonal_line.png b/mods/streets/textures/streets_double_solid_diagonal_line.png new file mode 100644 index 0000000..d37cc33 Binary files /dev/null and b/mods/streets/textures/streets_double_solid_diagonal_line.png differ diff --git a/mods/streets/textures/streets_fence_chainlink.png b/mods/streets/textures/streets_fence_chainlink.png new file mode 100644 index 0000000..e1414e0 Binary files /dev/null and b/mods/streets/textures/streets_fence_chainlink.png differ diff --git a/mods/streets/textures/streets_fence_chainlink_door.png b/mods/streets/textures/streets_fence_chainlink_door.png new file mode 100644 index 0000000..51abfe1 Binary files /dev/null and b/mods/streets/textures/streets_fence_chainlink_door.png differ diff --git a/mods/streets/textures/streets_guardrail.png b/mods/streets/textures/streets_guardrail.png new file mode 100644 index 0000000..e6053b5 Binary files /dev/null and b/mods/streets/textures/streets_guardrail.png differ diff --git a/mods/streets/textures/streets_halt_line_center_corner.png b/mods/streets/textures/streets_halt_line_center_corner.png new file mode 100644 index 0000000..3a85906 Binary files /dev/null and b/mods/streets/textures/streets_halt_line_center_corner.png differ diff --git a/mods/streets/textures/streets_halt_line_center_corner_wide.png b/mods/streets/textures/streets_halt_line_center_corner_wide.png new file mode 100644 index 0000000..7e22147 Binary files /dev/null and b/mods/streets/textures/streets_halt_line_center_corner_wide.png differ diff --git a/mods/streets/textures/streets_hb_flashred.png b/mods/streets/textures/streets_hb_flashred.png new file mode 100644 index 0000000..7b0afa2 Binary files /dev/null and b/mods/streets/textures/streets_hb_flashred.png differ diff --git a/mods/streets/textures/streets_hb_flashyellow.png b/mods/streets/textures/streets_hb_flashyellow.png new file mode 100644 index 0000000..3e97632 Binary files /dev/null and b/mods/streets/textures/streets_hb_flashyellow.png differ diff --git a/mods/streets/textures/streets_hb_off.png b/mods/streets/textures/streets_hb_off.png new file mode 100644 index 0000000..999e1a4 Binary files /dev/null and b/mods/streets/textures/streets_hb_off.png differ diff --git a/mods/streets/textures/streets_hb_red.png b/mods/streets/textures/streets_hb_red.png new file mode 100644 index 0000000..4dc175e Binary files /dev/null and b/mods/streets/textures/streets_hb_red.png differ diff --git a/mods/streets/textures/streets_hb_yellow.png b/mods/streets/textures/streets_hb_yellow.png new file mode 100644 index 0000000..27f97dd Binary files /dev/null and b/mods/streets/textures/streets_hb_yellow.png differ diff --git a/mods/streets/textures/streets_hybrid_beacon_inv.png b/mods/streets/textures/streets_hybrid_beacon_inv.png new file mode 100644 index 0000000..f368555 Binary files /dev/null and b/mods/streets/textures/streets_hybrid_beacon_inv.png differ diff --git a/mods/streets/textures/streets_lampcontroller_bottom.png b/mods/streets/textures/streets_lampcontroller_bottom.png new file mode 100644 index 0000000..cdd5b40 Binary files /dev/null and b/mods/streets/textures/streets_lampcontroller_bottom.png differ diff --git a/mods/streets/textures/streets_lampcontroller_sides.png b/mods/streets/textures/streets_lampcontroller_sides.png new file mode 100644 index 0000000..39e9960 Binary files /dev/null and b/mods/streets/textures/streets_lampcontroller_sides.png differ diff --git a/mods/streets/textures/streets_lampcontroller_top.png b/mods/streets/textures/streets_lampcontroller_top.png new file mode 100644 index 0000000..00d2e4c Binary files /dev/null and b/mods/streets/textures/streets_lampcontroller_top.png differ diff --git a/mods/streets/textures/streets_laneuse_green.png b/mods/streets/textures/streets_laneuse_green.png new file mode 100644 index 0000000..ffe4e01 Binary files /dev/null and b/mods/streets/textures/streets_laneuse_green.png differ diff --git a/mods/streets/textures/streets_laneuse_off.png b/mods/streets/textures/streets_laneuse_off.png new file mode 100644 index 0000000..e2c5d16 Binary files /dev/null and b/mods/streets/textures/streets_laneuse_off.png differ diff --git a/mods/streets/textures/streets_laneuse_red.png b/mods/streets/textures/streets_laneuse_red.png new file mode 100644 index 0000000..913572a Binary files /dev/null and b/mods/streets/textures/streets_laneuse_red.png differ diff --git a/mods/streets/textures/streets_laneuse_yellow.png b/mods/streets/textures/streets_laneuse_yellow.png new file mode 100644 index 0000000..0838d91 Binary files /dev/null and b/mods/streets/textures/streets_laneuse_yellow.png differ diff --git a/mods/streets/textures/streets_light_hanging_off_side.png b/mods/streets/textures/streets_light_hanging_off_side.png new file mode 100644 index 0000000..da88280 Binary files /dev/null and b/mods/streets/textures/streets_light_hanging_off_side.png differ diff --git a/mods/streets/textures/streets_light_hanging_on_side.png b/mods/streets/textures/streets_light_hanging_on_side.png new file mode 100644 index 0000000..caac96f Binary files /dev/null and b/mods/streets/textures/streets_light_hanging_on_side.png differ diff --git a/mods/streets/textures/streets_light_horizontal_off_bottom.png b/mods/streets/textures/streets_light_horizontal_off_bottom.png new file mode 100644 index 0000000..4b31373 Binary files /dev/null and b/mods/streets/textures/streets_light_horizontal_off_bottom.png differ diff --git a/mods/streets/textures/streets_light_horizontal_off_side.png b/mods/streets/textures/streets_light_horizontal_off_side.png new file mode 100644 index 0000000..67ddc51 Binary files /dev/null and b/mods/streets/textures/streets_light_horizontal_off_side.png differ diff --git a/mods/streets/textures/streets_light_horizontal_on_bottom.png b/mods/streets/textures/streets_light_horizontal_on_bottom.png new file mode 100644 index 0000000..baeefa1 Binary files /dev/null and b/mods/streets/textures/streets_light_horizontal_on_bottom.png differ diff --git a/mods/streets/textures/streets_light_horizontal_on_side.png b/mods/streets/textures/streets_light_horizontal_on_side.png new file mode 100644 index 0000000..94a8046 Binary files /dev/null and b/mods/streets/textures/streets_light_horizontal_on_side.png differ diff --git a/mods/streets/textures/streets_light_vertical_off.png b/mods/streets/textures/streets_light_vertical_off.png new file mode 100644 index 0000000..8b592fa Binary files /dev/null and b/mods/streets/textures/streets_light_vertical_off.png differ diff --git a/mods/streets/textures/streets_light_vertical_on.png b/mods/streets/textures/streets_light_vertical_on.png new file mode 100644 index 0000000..78e81c4 Binary files /dev/null and b/mods/streets/textures/streets_light_vertical_on.png differ diff --git a/mods/streets/textures/streets_manhole.png b/mods/streets/textures/streets_manhole.png new file mode 100644 index 0000000..5390021 Binary files /dev/null and b/mods/streets/textures/streets_manhole.png differ diff --git a/mods/streets/textures/streets_matrix_px.png b/mods/streets/textures/streets_matrix_px.png new file mode 100644 index 0000000..f57cd08 Binary files /dev/null and b/mods/streets/textures/streets_matrix_px.png differ diff --git a/mods/streets/textures/streets_matrix_screen_front.png b/mods/streets/textures/streets_matrix_screen_front.png new file mode 100644 index 0000000..529a7be Binary files /dev/null and b/mods/streets/textures/streets_matrix_screen_front.png differ diff --git a/mods/streets/textures/streets_matrix_screen_lines.png b/mods/streets/textures/streets_matrix_screen_lines.png new file mode 100644 index 0000000..796e0e2 Binary files /dev/null and b/mods/streets/textures/streets_matrix_screen_lines.png differ diff --git a/mods/streets/textures/streets_mixed_center_line.png b/mods/streets/textures/streets_mixed_center_line.png new file mode 100644 index 0000000..b6c1a6e Binary files /dev/null and b/mods/streets/textures/streets_mixed_center_line.png differ diff --git a/mods/streets/textures/streets_parking.png b/mods/streets/textures/streets_parking.png new file mode 100644 index 0000000..d231203 Binary files /dev/null and b/mods/streets/textures/streets_parking.png differ diff --git a/mods/streets/textures/streets_pedbutton_us_back.png b/mods/streets/textures/streets_pedbutton_us_back.png new file mode 100644 index 0000000..f41ebce Binary files /dev/null and b/mods/streets/textures/streets_pedbutton_us_back.png differ diff --git a/mods/streets/textures/streets_pedbutton_us_left.png b/mods/streets/textures/streets_pedbutton_us_left.png new file mode 100644 index 0000000..d590278 Binary files /dev/null and b/mods/streets/textures/streets_pedbutton_us_left.png differ diff --git a/mods/streets/textures/streets_pedbutton_us_right.png b/mods/streets/textures/streets_pedbutton_us_right.png new file mode 100644 index 0000000..d84596a Binary files /dev/null and b/mods/streets/textures/streets_pedbutton_us_right.png differ diff --git a/mods/streets/textures/streets_pedlight_inv.png b/mods/streets/textures/streets_pedlight_inv.png new file mode 100644 index 0000000..c4520f1 Binary files /dev/null and b/mods/streets/textures/streets_pedlight_inv.png differ diff --git a/mods/streets/textures/streets_pl_dontwalk.png b/mods/streets/textures/streets_pl_dontwalk.png new file mode 100644 index 0000000..3abc776 Binary files /dev/null and b/mods/streets/textures/streets_pl_dontwalk.png differ diff --git a/mods/streets/textures/streets_pl_flashingdontwalk.png b/mods/streets/textures/streets_pl_flashingdontwalk.png new file mode 100644 index 0000000..4fbed1e Binary files /dev/null and b/mods/streets/textures/streets_pl_flashingdontwalk.png differ diff --git a/mods/streets/textures/streets_pl_flashingwalk.png b/mods/streets/textures/streets_pl_flashingwalk.png new file mode 100644 index 0000000..9d0ceea Binary files /dev/null and b/mods/streets/textures/streets_pl_flashingwalk.png differ diff --git a/mods/streets/textures/streets_pl_off.png b/mods/streets/textures/streets_pl_off.png new file mode 100644 index 0000000..1b41b40 Binary files /dev/null and b/mods/streets/textures/streets_pl_off.png differ diff --git a/mods/streets/textures/streets_pl_walk.png b/mods/streets/textures/streets_pl_walk.png new file mode 100644 index 0000000..392f024 Binary files /dev/null and b/mods/streets/textures/streets_pl_walk.png differ diff --git a/mods/streets/textures/streets_pole.png b/mods/streets/textures/streets_pole.png new file mode 100644 index 0000000..af4a378 Binary files /dev/null and b/mods/streets/textures/streets_pole.png differ diff --git a/mods/streets/textures/streets_roadwork_barrier_tape.png b/mods/streets/textures/streets_roadwork_barrier_tape.png new file mode 100644 index 0000000..77060fb Binary files /dev/null and b/mods/streets/textures/streets_roadwork_barrier_tape.png differ diff --git a/mods/streets/textures/streets_roadwork_blinking_light_off.png b/mods/streets/textures/streets_roadwork_blinking_light_off.png new file mode 100644 index 0000000..4279745 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_blinking_light_off.png differ diff --git a/mods/streets/textures/streets_roadwork_blinking_light_on.png b/mods/streets/textures/streets_roadwork_blinking_light_on.png new file mode 100644 index 0000000..ee2f69a Binary files /dev/null and b/mods/streets/textures/streets_roadwork_blinking_light_on.png differ diff --git a/mods/streets/textures/streets_roadwork_blinking_light_top.png b/mods/streets/textures/streets_roadwork_blinking_light_top.png new file mode 100644 index 0000000..1975c3e Binary files /dev/null and b/mods/streets/textures/streets_roadwork_blinking_light_top.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator.png b/mods/streets/textures/streets_roadwork_delineator.png new file mode 100644 index 0000000..fa75ee6 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_bottom_front_back.png b/mods/streets/textures/streets_roadwork_delineator_bottom_front_back.png new file mode 100644 index 0000000..7018ccb Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_bottom_front_back.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_bottom_side.png b/mods/streets/textures/streets_roadwork_delineator_bottom_side.png new file mode 100644 index 0000000..908edeb Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_bottom_side.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_light.png b/mods/streets/textures/streets_roadwork_delineator_light.png new file mode 100644 index 0000000..ecf845e Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_light.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_light_off_top_front_back.png b/mods/streets/textures/streets_roadwork_delineator_light_off_top_front_back.png new file mode 100644 index 0000000..67f479e Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_light_off_top_front_back.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_light_on_top_front_back.png b/mods/streets/textures/streets_roadwork_delineator_light_on_top_front_back.png new file mode 100644 index 0000000..04af727 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_light_on_top_front_back.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_top.png b/mods/streets/textures/streets_roadwork_delineator_top.png new file mode 100644 index 0000000..6bba076 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_top.png differ diff --git a/mods/streets/textures/streets_roadwork_delineator_top_front_back.png b/mods/streets/textures/streets_roadwork_delineator_top_front_back.png new file mode 100644 index 0000000..9f38573 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_delineator_top_front_back.png differ diff --git a/mods/streets/textures/streets_roadwork_pylon.png b/mods/streets/textures/streets_roadwork_pylon.png new file mode 100644 index 0000000..40d7282 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_pylon.png differ diff --git a/mods/streets/textures/streets_roadwork_pylon_top.png b/mods/streets/textures/streets_roadwork_pylon_top.png new file mode 100644 index 0000000..03165ce Binary files /dev/null and b/mods/streets/textures/streets_roadwork_pylon_top.png differ diff --git a/mods/streets/textures/streets_roadwork_traffic_barrier.png b/mods/streets/textures/streets_roadwork_traffic_barrier.png new file mode 100644 index 0000000..1e4364f Binary files /dev/null and b/mods/streets/textures/streets_roadwork_traffic_barrier.png differ diff --git a/mods/streets/textures/streets_roadwork_traffic_fence.png b/mods/streets/textures/streets_roadwork_traffic_fence.png new file mode 100644 index 0000000..5107958 Binary files /dev/null and b/mods/streets/textures/streets_roadwork_traffic_fence.png differ diff --git a/mods/streets/textures/streets_roadwork_traffic_fence_top.png b/mods/streets/textures/streets_roadwork_traffic_fence_top.png new file mode 100644 index 0000000..1c1b96c Binary files /dev/null and b/mods/streets/textures/streets_roadwork_traffic_fence_top.png differ diff --git a/mods/streets/textures/streets_sidewalk.png b/mods/streets/textures/streets_sidewalk.png new file mode 100644 index 0000000..3c2f0cb Binary files /dev/null and b/mods/streets/textures/streets_sidewalk.png differ diff --git a/mods/streets/textures/streets_sign_back.png b/mods/streets/textures/streets_sign_back.png new file mode 100644 index 0000000..7f1e2f2 Binary files /dev/null and b/mods/streets/textures/streets_sign_back.png differ diff --git a/mods/streets/textures/streets_sign_us_4wayintersection.png b/mods/streets/textures/streets_sign_us_4wayintersection.png new file mode 100644 index 0000000..5f1a266 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_4wayintersection.png differ diff --git a/mods/streets/textures/streets_sign_us_arrow_exitgore.png b/mods/streets/textures/streets_sign_us_arrow_exitgore.png new file mode 100644 index 0000000..c06c214 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_arrow_exitgore.png differ diff --git a/mods/streets/textures/streets_sign_us_arrow_left.png b/mods/streets/textures/streets_sign_us_arrow_left.png new file mode 100644 index 0000000..9b64c42 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_arrow_left.png differ diff --git a/mods/streets/textures/streets_sign_us_arrow_leftright.png b/mods/streets/textures/streets_sign_us_arrow_leftright.png new file mode 100644 index 0000000..f83f67d Binary files /dev/null and b/mods/streets/textures/streets_sign_us_arrow_leftright.png differ diff --git a/mods/streets/textures/streets_sign_us_arrow_right.png b/mods/streets/textures/streets_sign_us_arrow_right.png new file mode 100644 index 0000000..28e8d12 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_arrow_right.png differ diff --git a/mods/streets/textures/streets_sign_us_bepreparedtostop.png b/mods/streets/textures/streets_sign_us_bepreparedtostop.png new file mode 100644 index 0000000..7926108 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_bepreparedtostop.png differ diff --git a/mods/streets/textures/streets_sign_us_bikelane.png b/mods/streets/textures/streets_sign_us_bikelane.png new file mode 100644 index 0000000..ffb9899 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_bikelane.png differ diff --git a/mods/streets/textures/streets_sign_us_crossbuck.png b/mods/streets/textures/streets_sign_us_crossbuck.png new file mode 100644 index 0000000..ed2bc2a Binary files /dev/null and b/mods/streets/textures/streets_sign_us_crossbuck.png differ diff --git a/mods/streets/textures/streets_sign_us_deadend.png b/mods/streets/textures/streets_sign_us_deadend.png new file mode 100644 index 0000000..66afa56 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_deadend.png differ diff --git a/mods/streets/textures/streets_sign_us_divhwyend.png b/mods/streets/textures/streets_sign_us_divhwyend.png new file mode 100644 index 0000000..748e8f6 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_divhwyend.png differ diff --git a/mods/streets/textures/streets_sign_us_divhwystart.png b/mods/streets/textures/streets_sign_us_divhwystart.png new file mode 100644 index 0000000..4a59d78 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_divhwystart.png differ diff --git a/mods/streets/textures/streets_sign_us_donotenter.png b/mods/streets/textures/streets_sign_us_donotenter.png new file mode 100644 index 0000000..6e91d43 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_donotenter.png differ diff --git a/mods/streets/textures/streets_sign_us_donotstopontracks.png b/mods/streets/textures/streets_sign_us_donotstopontracks.png new file mode 100644 index 0000000..34fe48f Binary files /dev/null and b/mods/streets/textures/streets_sign_us_donotstopontracks.png differ diff --git a/mods/streets/textures/streets_sign_us_emergencyhybridbeacon.png b/mods/streets/textures/streets_sign_us_emergencyhybridbeacon.png new file mode 100644 index 0000000..ef5d9e8 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_emergencyhybridbeacon.png differ diff --git a/mods/streets/textures/streets_sign_us_emergencysignal.png b/mods/streets/textures/streets_sign_us_emergencysignal.png new file mode 100644 index 0000000..796e8aa Binary files /dev/null and b/mods/streets/textures/streets_sign_us_emergencysignal.png differ diff --git a/mods/streets/textures/streets_sign_us_endschoolspeedlimit.png b/mods/streets/textures/streets_sign_us_endschoolspeedlimit.png new file mode 100644 index 0000000..b7ea522 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_endschoolspeedlimit.png differ diff --git a/mods/streets/textures/streets_sign_us_exitclosed.png b/mods/streets/textures/streets_sign_us_exitclosed.png new file mode 100644 index 0000000..70f993e Binary files /dev/null and b/mods/streets/textures/streets_sign_us_exitclosed.png differ diff --git a/mods/streets/textures/streets_sign_us_firetruckwarning.png b/mods/streets/textures/streets_sign_us_firetruckwarning.png new file mode 100644 index 0000000..f3cbe88 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_firetruckwarning.png differ diff --git a/mods/streets/textures/streets_sign_us_fork.png b/mods/streets/textures/streets_sign_us_fork.png new file mode 100644 index 0000000..3934863 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_fork.png differ diff --git a/mods/streets/textures/streets_sign_us_keepright.png b/mods/streets/textures/streets_sign_us_keepright.png new file mode 100644 index 0000000..1660a4e Binary files /dev/null and b/mods/streets/textures/streets_sign_us_keepright.png differ diff --git a/mods/streets/textures/streets_sign_us_leftcurve.png b/mods/streets/textures/streets_sign_us_leftcurve.png new file mode 100644 index 0000000..b183625 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftcurve.png differ diff --git a/mods/streets/textures/streets_sign_us_leftongreenarrowonly.png b/mods/streets/textures/streets_sign_us_leftongreenarrowonly.png new file mode 100644 index 0000000..5912934 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftongreenarrowonly.png differ diff --git a/mods/streets/textures/streets_sign_us_leftreversecurve.png b/mods/streets/textures/streets_sign_us_leftreversecurve.png new file mode 100644 index 0000000..ffd0b92 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftreversecurve.png differ diff --git a/mods/streets/textures/streets_sign_us_leftreverseturn.png b/mods/streets/textures/streets_sign_us_leftreverseturn.png new file mode 100644 index 0000000..77137f6 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftreverseturn.png differ diff --git a/mods/streets/textures/streets_sign_us_leftturn.png b/mods/streets/textures/streets_sign_us_leftturn.png new file mode 100644 index 0000000..3b808ca Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftturn.png differ diff --git a/mods/streets/textures/streets_sign_us_leftturn270.png b/mods/streets/textures/streets_sign_us_leftturn270.png new file mode 100644 index 0000000..e85d5af Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftturn270.png differ diff --git a/mods/streets/textures/streets_sign_us_leftturnonly.png b/mods/streets/textures/streets_sign_us_leftturnonly.png new file mode 100644 index 0000000..2ef021b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftturnonly.png differ diff --git a/mods/streets/textures/streets_sign_us_leftturnsignal.png b/mods/streets/textures/streets_sign_us_leftturnsignal.png new file mode 100644 index 0000000..cf97a12 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftturnsignal.png differ diff --git a/mods/streets/textures/streets_sign_us_leftturnyieldongreen.png b/mods/streets/textures/streets_sign_us_leftturnyieldongreen.png new file mode 100644 index 0000000..f93dbdd Binary files /dev/null and b/mods/streets/textures/streets_sign_us_leftturnyieldongreen.png differ diff --git a/mods/streets/textures/streets_sign_us_merge_newlane.png b/mods/streets/textures/streets_sign_us_merge_newlane.png new file mode 100644 index 0000000..9a515d6 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_merge_newlane.png differ diff --git a/mods/streets/textures/streets_sign_us_merge_samelane.png b/mods/streets/textures/streets_sign_us_merge_samelane.png new file mode 100644 index 0000000..cd959e1 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_merge_samelane.png differ diff --git a/mods/streets/textures/streets_sign_us_nobicycles.png b/mods/streets/textures/streets_sign_us_nobicycles.png new file mode 100644 index 0000000..381b742 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_nobicycles.png differ diff --git a/mods/streets/textures/streets_sign_us_noleftturn.png b/mods/streets/textures/streets_sign_us_noleftturn.png new file mode 100644 index 0000000..fe6243e Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noleftturn.png differ diff --git a/mods/streets/textures/streets_sign_us_nooutlet.png b/mods/streets/textures/streets_sign_us_nooutlet.png new file mode 100644 index 0000000..da53ddb Binary files /dev/null and b/mods/streets/textures/streets_sign_us_nooutlet.png differ diff --git a/mods/streets/textures/streets_sign_us_noparkingboth.png b/mods/streets/textures/streets_sign_us_noparkingboth.png new file mode 100644 index 0000000..f1e2446 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noparkingboth.png differ diff --git a/mods/streets/textures/streets_sign_us_noparkingleft.png b/mods/streets/textures/streets_sign_us_noparkingleft.png new file mode 100644 index 0000000..68e3108 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noparkingleft.png differ diff --git a/mods/streets/textures/streets_sign_us_noparkingright.png b/mods/streets/textures/streets_sign_us_noparkingright.png new file mode 100644 index 0000000..cabfe19 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noparkingright.png differ diff --git a/mods/streets/textures/streets_sign_us_nopassing.png b/mods/streets/textures/streets_sign_us_nopassing.png new file mode 100644 index 0000000..aae9369 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_nopassing.png differ diff --git a/mods/streets/textures/streets_sign_us_noped.png b/mods/streets/textures/streets_sign_us_noped.png new file mode 100644 index 0000000..01af099 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noped.png differ diff --git a/mods/streets/textures/streets_sign_us_norightturn.png b/mods/streets/textures/streets_sign_us_norightturn.png new file mode 100644 index 0000000..fa6c815 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_norightturn.png differ diff --git a/mods/streets/textures/streets_sign_us_notrucks.png b/mods/streets/textures/streets_sign_us_notrucks.png new file mode 100644 index 0000000..730407b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_notrucks.png differ diff --git a/mods/streets/textures/streets_sign_us_noturnonred.png b/mods/streets/textures/streets_sign_us_noturnonred.png new file mode 100644 index 0000000..8e812a8 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_noturnonred.png differ diff --git a/mods/streets/textures/streets_sign_us_nouturn.png b/mods/streets/textures/streets_sign_us_nouturn.png new file mode 100644 index 0000000..3edd7d4 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_nouturn.png differ diff --git a/mods/streets/textures/streets_sign_us_om1.png b/mods/streets/textures/streets_sign_us_om1.png new file mode 100644 index 0000000..8a80916 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om1.png differ diff --git a/mods/streets/textures/streets_sign_us_om2.png b/mods/streets/textures/streets_sign_us_om2.png new file mode 100644 index 0000000..0692c1f Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om2.png differ diff --git a/mods/streets/textures/streets_sign_us_om3c.png b/mods/streets/textures/streets_sign_us_om3c.png new file mode 100644 index 0000000..6a674a9 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om3c.png differ diff --git a/mods/streets/textures/streets_sign_us_om3l.png b/mods/streets/textures/streets_sign_us_om3l.png new file mode 100644 index 0000000..fc474f4 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om3l.png differ diff --git a/mods/streets/textures/streets_sign_us_om3r.png b/mods/streets/textures/streets_sign_us_om3r.png new file mode 100644 index 0000000..4749b2a Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om3r.png differ diff --git a/mods/streets/textures/streets_sign_us_om4.png b/mods/streets/textures/streets_sign_us_om4.png new file mode 100644 index 0000000..f2f1a29 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_om4.png differ diff --git a/mods/streets/textures/streets_sign_us_onewayleft.png b/mods/streets/textures/streets_sign_us_onewayleft.png new file mode 100644 index 0000000..0cc0393 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_onewayleft.png differ diff --git a/mods/streets/textures/streets_sign_us_onewayright.png b/mods/streets/textures/streets_sign_us_onewayright.png new file mode 100644 index 0000000..53dc98d Binary files /dev/null and b/mods/streets/textures/streets_sign_us_onewayright.png differ diff --git a/mods/streets/textures/streets_sign_us_pedhybridbeacon.png b/mods/streets/textures/streets_sign_us_pedhybridbeacon.png new file mode 100644 index 0000000..75abb88 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_pedhybridbeacon.png differ diff --git a/mods/streets/textures/streets_sign_us_pedwarning.png b/mods/streets/textures/streets_sign_us_pedwarning.png new file mode 100644 index 0000000..53fd53f Binary files /dev/null and b/mods/streets/textures/streets_sign_us_pedwarning.png differ diff --git a/mods/streets/textures/streets_sign_us_rightcurve.png b/mods/streets/textures/streets_sign_us_rightcurve.png new file mode 100644 index 0000000..1ad6209 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightcurve.png differ diff --git a/mods/streets/textures/streets_sign_us_rightreversecurve.png b/mods/streets/textures/streets_sign_us_rightreversecurve.png new file mode 100644 index 0000000..38995a5 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightreversecurve.png differ diff --git a/mods/streets/textures/streets_sign_us_rightreverseturn.png b/mods/streets/textures/streets_sign_us_rightreverseturn.png new file mode 100644 index 0000000..69ba025 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightreverseturn.png differ diff --git a/mods/streets/textures/streets_sign_us_rightturn.png b/mods/streets/textures/streets_sign_us_rightturn.png new file mode 100644 index 0000000..2c6fe3a Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightturn.png differ diff --git a/mods/streets/textures/streets_sign_us_rightturn270.png b/mods/streets/textures/streets_sign_us_rightturn270.png new file mode 100644 index 0000000..0faed26 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightturn270.png differ diff --git a/mods/streets/textures/streets_sign_us_rightturnonly.png b/mods/streets/textures/streets_sign_us_rightturnonly.png new file mode 100644 index 0000000..bf7fccf Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rightturnonly.png differ diff --git a/mods/streets/textures/streets_sign_us_roadclosed.png b/mods/streets/textures/streets_sign_us_roadclosed.png new file mode 100644 index 0000000..84346d8 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roadclosed.png differ diff --git a/mods/streets/textures/streets_sign_us_roadclosedahead.png b/mods/streets/textures/streets_sign_us_roadclosedahead.png new file mode 100644 index 0000000..345219d Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roadclosedahead.png differ diff --git a/mods/streets/textures/streets_sign_us_roadclosedtothrutraffic.png b/mods/streets/textures/streets_sign_us_roadclosedtothrutraffic.png new file mode 100644 index 0000000..19dfc3c Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roadclosedtothrutraffic.png differ diff --git a/mods/streets/textures/streets_sign_us_roadnarrows.png b/mods/streets/textures/streets_sign_us_roadnarrows.png new file mode 100644 index 0000000..053c3cd Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roadnarrows.png differ diff --git a/mods/streets/textures/streets_sign_us_roadworkahead.png b/mods/streets/textures/streets_sign_us_roadworkahead.png new file mode 100644 index 0000000..dbce7e6 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roadworkahead.png differ diff --git a/mods/streets/textures/streets_sign_us_roundaboutchevron.png b/mods/streets/textures/streets_sign_us_roundaboutchevron.png new file mode 100644 index 0000000..426d998 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_roundaboutchevron.png differ diff --git a/mods/streets/textures/streets_sign_us_rrxing.png b/mods/streets/textures/streets_sign_us_rrxing.png new file mode 100644 index 0000000..6456599 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_rrxing.png differ diff --git a/mods/streets/textures/streets_sign_us_schoolcrossing.png b/mods/streets/textures/streets_sign_us_schoolcrossing.png new file mode 100644 index 0000000..6a3c68d Binary files /dev/null and b/mods/streets/textures/streets_sign_us_schoolcrossing.png differ diff --git a/mods/streets/textures/streets_sign_us_schoolspeedlimit20.png b/mods/streets/textures/streets_sign_us_schoolspeedlimit20.png new file mode 100644 index 0000000..8ba5b55 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_schoolspeedlimit20.png differ diff --git a/mods/streets/textures/streets_sign_us_speedlimit50.png b/mods/streets/textures/streets_sign_us_speedlimit50.png new file mode 100644 index 0000000..ea7f25b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_speedlimit50.png differ diff --git a/mods/streets/textures/streets_sign_us_stop.png b/mods/streets/textures/streets_sign_us_stop.png new file mode 100644 index 0000000..830aa22 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_stop.png differ diff --git a/mods/streets/textures/streets_sign_us_stopahead.png b/mods/streets/textures/streets_sign_us_stopahead.png new file mode 100644 index 0000000..ee44a14 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_stopahead.png differ diff --git a/mods/streets/textures/streets_sign_us_stopforped.png b/mods/streets/textures/streets_sign_us_stopforped.png new file mode 100644 index 0000000..77ad2be Binary files /dev/null and b/mods/streets/textures/streets_sign_us_stopforped.png differ diff --git a/mods/streets/textures/streets_sign_us_stophereonred.png b/mods/streets/textures/streets_sign_us_stophereonred.png new file mode 100644 index 0000000..93c79b9 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_stophereonred.png differ diff --git a/mods/streets/textures/streets_sign_us_straightonly.png b/mods/streets/textures/streets_sign_us_straightonly.png new file mode 100644 index 0000000..106619b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_straightonly.png differ diff --git a/mods/streets/textures/streets_sign_us_tintersection.png b/mods/streets/textures/streets_sign_us_tintersection.png new file mode 100644 index 0000000..10f170c Binary files /dev/null and b/mods/streets/textures/streets_sign_us_tintersection.png differ diff --git a/mods/streets/textures/streets_sign_us_tintersection_stem.png b/mods/streets/textures/streets_sign_us_tintersection_stem.png new file mode 100644 index 0000000..eaac9a3 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_tintersection_stem.png differ diff --git a/mods/streets/textures/streets_sign_us_trafficlightahead.png b/mods/streets/textures/streets_sign_us_trafficlightahead.png new file mode 100644 index 0000000..e3f1ed0 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_trafficlightahead.png differ diff --git a/mods/streets/textures/streets_sign_us_twowaytraffic.png b/mods/streets/textures/streets_sign_us_twowaytraffic.png new file mode 100644 index 0000000..19bc86b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_twowaytraffic.png differ diff --git a/mods/streets/textures/streets_sign_us_utilityworkahead.png b/mods/streets/textures/streets_sign_us_utilityworkahead.png new file mode 100644 index 0000000..cb60102 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_utilityworkahead.png differ diff --git a/mods/streets/textures/streets_sign_us_wrongway.png b/mods/streets/textures/streets_sign_us_wrongway.png new file mode 100644 index 0000000..4d73b64 Binary files /dev/null and b/mods/streets/textures/streets_sign_us_wrongway.png differ diff --git a/mods/streets/textures/streets_sign_us_yield.png b/mods/streets/textures/streets_sign_us_yield.png new file mode 100644 index 0000000..99d217a Binary files /dev/null and b/mods/streets/textures/streets_sign_us_yield.png differ diff --git a/mods/streets/textures/streets_sign_us_yieldahead.png b/mods/streets/textures/streets_sign_us_yieldahead.png new file mode 100644 index 0000000..3b42a2f Binary files /dev/null and b/mods/streets/textures/streets_sign_us_yieldahead.png differ diff --git a/mods/streets/textures/streets_sign_us_yieldtoped.png b/mods/streets/textures/streets_sign_us_yieldtoped.png new file mode 100644 index 0000000..37a807b Binary files /dev/null and b/mods/streets/textures/streets_sign_us_yieldtoped.png differ diff --git a/mods/streets/textures/streets_solid_center_line.png b/mods/streets/textures/streets_solid_center_line.png new file mode 100644 index 0000000..f23bafb Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line.png differ diff --git a/mods/streets/textures/streets_solid_center_line_corner.png b/mods/streets/textures/streets_solid_center_line_corner.png new file mode 100644 index 0000000..5a50708 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_corner.png differ diff --git a/mods/streets/textures/streets_solid_center_line_crossing.png b/mods/streets/textures/streets_solid_center_line_crossing.png new file mode 100644 index 0000000..3f3c181 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_crossing.png differ diff --git a/mods/streets/textures/streets_solid_center_line_tjunction.png b/mods/streets/textures/streets_solid_center_line_tjunction.png new file mode 100644 index 0000000..e1f1d8f Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_tjunction.png differ diff --git a/mods/streets/textures/streets_solid_center_line_wide.png b/mods/streets/textures/streets_solid_center_line_wide.png new file mode 100644 index 0000000..aa63433 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_wide.png differ diff --git a/mods/streets/textures/streets_solid_center_line_wide_corner.png b/mods/streets/textures/streets_solid_center_line_wide_corner.png new file mode 100644 index 0000000..c9723a1 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_wide_corner.png differ diff --git a/mods/streets/textures/streets_solid_center_line_wide_crossing.png b/mods/streets/textures/streets_solid_center_line_wide_crossing.png new file mode 100644 index 0000000..2074e75 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_wide_crossing.png differ diff --git a/mods/streets/textures/streets_solid_center_line_wide_tjunction.png b/mods/streets/textures/streets_solid_center_line_wide_tjunction.png new file mode 100644 index 0000000..23d76c9 Binary files /dev/null and b/mods/streets/textures/streets_solid_center_line_wide_tjunction.png differ diff --git a/mods/streets/textures/streets_solid_diagonal_line.png b/mods/streets/textures/streets_solid_diagonal_line.png new file mode 100644 index 0000000..39feb1e Binary files /dev/null and b/mods/streets/textures/streets_solid_diagonal_line.png differ diff --git a/mods/streets/textures/streets_solid_line_offset.png b/mods/streets/textures/streets_solid_line_offset.png new file mode 100644 index 0000000..9e8136d Binary files /dev/null and b/mods/streets/textures/streets_solid_line_offset.png differ diff --git a/mods/streets/textures/streets_solid_side_line.png b/mods/streets/textures/streets_solid_side_line.png new file mode 100644 index 0000000..6eaae67 Binary files /dev/null and b/mods/streets/textures/streets_solid_side_line.png differ diff --git a/mods/streets/textures/streets_solid_side_line_combinated_corner.png b/mods/streets/textures/streets_solid_side_line_combinated_corner.png new file mode 100644 index 0000000..d2b9b00 Binary files /dev/null and b/mods/streets/textures/streets_solid_side_line_combinated_corner.png differ diff --git a/mods/streets/textures/streets_solid_side_line_corner.png b/mods/streets/textures/streets_solid_side_line_corner.png new file mode 100644 index 0000000..0c1093f Binary files /dev/null and b/mods/streets/textures/streets_solid_side_line_corner.png differ diff --git a/mods/streets/textures/streets_solid_side_line_wide.png b/mods/streets/textures/streets_solid_side_line_wide.png new file mode 100644 index 0000000..7a28fc7 Binary files /dev/null and b/mods/streets/textures/streets_solid_side_line_wide.png differ diff --git a/mods/streets/textures/streets_solid_side_line_wide_corner.png b/mods/streets/textures/streets_solid_side_line_wide_corner.png new file mode 100644 index 0000000..003dc1f Binary files /dev/null and b/mods/streets/textures/streets_solid_side_line_wide_corner.png differ diff --git a/mods/streets/textures/streets_solid_stripe.png b/mods/streets/textures/streets_solid_stripe.png new file mode 100644 index 0000000..e1c0550 Binary files /dev/null and b/mods/streets/textures/streets_solid_stripe.png differ diff --git a/mods/streets/textures/streets_square_sign_empty.png b/mods/streets/textures/streets_square_sign_empty.png new file mode 100644 index 0000000..197bd09 Binary files /dev/null and b/mods/streets/textures/streets_square_sign_empty.png differ diff --git a/mods/streets/textures/streets_stormdrain.png b/mods/streets/textures/streets_stormdrain.png new file mode 100644 index 0000000..5464840 Binary files /dev/null and b/mods/streets/textures/streets_stormdrain.png differ diff --git a/mods/streets/textures/streets_support.png b/mods/streets/textures/streets_support.png new file mode 100644 index 0000000..7d15ff2 Binary files /dev/null and b/mods/streets/textures/streets_support.png differ diff --git a/mods/streets/textures/streets_tl_bg.png b/mods/streets/textures/streets_tl_bg.png new file mode 100644 index 0000000..e4213db Binary files /dev/null and b/mods/streets/textures/streets_tl_bg.png differ diff --git a/mods/streets/textures/streets_tl_flashgreen.png b/mods/streets/textures/streets_tl_flashgreen.png new file mode 100644 index 0000000..65e882b Binary files /dev/null and b/mods/streets/textures/streets_tl_flashgreen.png differ diff --git a/mods/streets/textures/streets_tl_flashred.png b/mods/streets/textures/streets_tl_flashred.png new file mode 100644 index 0000000..82c118c Binary files /dev/null and b/mods/streets/textures/streets_tl_flashred.png differ diff --git a/mods/streets/textures/streets_tl_green.png b/mods/streets/textures/streets_tl_green.png new file mode 100644 index 0000000..7d7ba80 Binary files /dev/null and b/mods/streets/textures/streets_tl_green.png differ diff --git a/mods/streets/textures/streets_tl_left_flashgreen.png b/mods/streets/textures/streets_tl_left_flashgreen.png new file mode 100644 index 0000000..425858b Binary files /dev/null and b/mods/streets/textures/streets_tl_left_flashgreen.png differ diff --git a/mods/streets/textures/streets_tl_left_flashred.png b/mods/streets/textures/streets_tl_left_flashred.png new file mode 100644 index 0000000..f0378a4 Binary files /dev/null and b/mods/streets/textures/streets_tl_left_flashred.png differ diff --git a/mods/streets/textures/streets_tl_left_green.png b/mods/streets/textures/streets_tl_left_green.png new file mode 100644 index 0000000..b6cb996 Binary files /dev/null and b/mods/streets/textures/streets_tl_left_green.png differ diff --git a/mods/streets/textures/streets_tl_left_off.png b/mods/streets/textures/streets_tl_left_off.png new file mode 100644 index 0000000..e43c0e4 Binary files /dev/null and b/mods/streets/textures/streets_tl_left_off.png differ diff --git a/mods/streets/textures/streets_tl_left_red.png b/mods/streets/textures/streets_tl_left_red.png new file mode 100644 index 0000000..cc4e18a Binary files /dev/null and b/mods/streets/textures/streets_tl_left_red.png differ diff --git a/mods/streets/textures/streets_tl_left_redyellow.png b/mods/streets/textures/streets_tl_left_redyellow.png new file mode 100644 index 0000000..7b8b1e2 Binary files /dev/null and b/mods/streets/textures/streets_tl_left_redyellow.png differ diff --git a/mods/streets/textures/streets_tl_left_warn.png b/mods/streets/textures/streets_tl_left_warn.png new file mode 100644 index 0000000..ac3268a Binary files /dev/null and b/mods/streets/textures/streets_tl_left_warn.png differ diff --git a/mods/streets/textures/streets_tl_left_yellow.png b/mods/streets/textures/streets_tl_left_yellow.png new file mode 100644 index 0000000..ca704df Binary files /dev/null and b/mods/streets/textures/streets_tl_left_yellow.png differ diff --git a/mods/streets/textures/streets_tl_off.png b/mods/streets/textures/streets_tl_off.png new file mode 100644 index 0000000..fb7dfaa Binary files /dev/null and b/mods/streets/textures/streets_tl_off.png differ diff --git a/mods/streets/textures/streets_tl_red.png b/mods/streets/textures/streets_tl_red.png new file mode 100644 index 0000000..4560199 Binary files /dev/null and b/mods/streets/textures/streets_tl_red.png differ diff --git a/mods/streets/textures/streets_tl_redyellow.png b/mods/streets/textures/streets_tl_redyellow.png new file mode 100644 index 0000000..12dbe0d Binary files /dev/null and b/mods/streets/textures/streets_tl_redyellow.png differ diff --git a/mods/streets/textures/streets_tl_right_flashgreen.png b/mods/streets/textures/streets_tl_right_flashgreen.png new file mode 100644 index 0000000..cf62cb4 Binary files /dev/null and b/mods/streets/textures/streets_tl_right_flashgreen.png differ diff --git a/mods/streets/textures/streets_tl_right_flashred.png b/mods/streets/textures/streets_tl_right_flashred.png new file mode 100644 index 0000000..3f5e1d9 Binary files /dev/null and b/mods/streets/textures/streets_tl_right_flashred.png differ diff --git a/mods/streets/textures/streets_tl_right_green.png b/mods/streets/textures/streets_tl_right_green.png new file mode 100644 index 0000000..bde7d6e Binary files /dev/null and b/mods/streets/textures/streets_tl_right_green.png differ diff --git a/mods/streets/textures/streets_tl_right_off.png b/mods/streets/textures/streets_tl_right_off.png new file mode 100644 index 0000000..68d02bf Binary files /dev/null and b/mods/streets/textures/streets_tl_right_off.png differ diff --git a/mods/streets/textures/streets_tl_right_red.png b/mods/streets/textures/streets_tl_right_red.png new file mode 100644 index 0000000..6e4b737 Binary files /dev/null and b/mods/streets/textures/streets_tl_right_red.png differ diff --git a/mods/streets/textures/streets_tl_right_redyellow.png b/mods/streets/textures/streets_tl_right_redyellow.png new file mode 100644 index 0000000..bcec848 Binary files /dev/null and b/mods/streets/textures/streets_tl_right_redyellow.png differ diff --git a/mods/streets/textures/streets_tl_right_warn.png b/mods/streets/textures/streets_tl_right_warn.png new file mode 100644 index 0000000..2fa3e6c Binary files /dev/null and b/mods/streets/textures/streets_tl_right_warn.png differ diff --git a/mods/streets/textures/streets_tl_right_yellow.png b/mods/streets/textures/streets_tl_right_yellow.png new file mode 100644 index 0000000..ab37ca0 Binary files /dev/null and b/mods/streets/textures/streets_tl_right_yellow.png differ diff --git a/mods/streets/textures/streets_tl_warn.png b/mods/streets/textures/streets_tl_warn.png new file mode 100644 index 0000000..349fa84 Binary files /dev/null and b/mods/streets/textures/streets_tl_warn.png differ diff --git a/mods/streets/textures/streets_tl_yellow.png b/mods/streets/textures/streets_tl_yellow.png new file mode 100644 index 0000000..42b4803 Binary files /dev/null and b/mods/streets/textures/streets_tl_yellow.png differ diff --git a/mods/streets/textures/streets_tle_left_flashgreen.png b/mods/streets/textures/streets_tle_left_flashgreen.png new file mode 100644 index 0000000..d5d2407 Binary files /dev/null and b/mods/streets/textures/streets_tle_left_flashgreen.png differ diff --git a/mods/streets/textures/streets_tle_left_green.png b/mods/streets/textures/streets_tle_left_green.png new file mode 100644 index 0000000..9747c0a Binary files /dev/null and b/mods/streets/textures/streets_tle_left_green.png differ diff --git a/mods/streets/textures/streets_tle_left_yellow.png b/mods/streets/textures/streets_tle_left_yellow.png new file mode 100644 index 0000000..2868038 Binary files /dev/null and b/mods/streets/textures/streets_tle_left_yellow.png differ diff --git a/mods/streets/textures/streets_tle_right_flashgreen.png b/mods/streets/textures/streets_tle_right_flashgreen.png new file mode 100644 index 0000000..a46e60f Binary files /dev/null and b/mods/streets/textures/streets_tle_right_flashgreen.png differ diff --git a/mods/streets/textures/streets_tle_right_green.png b/mods/streets/textures/streets_tle_right_green.png new file mode 100644 index 0000000..509325f Binary files /dev/null and b/mods/streets/textures/streets_tle_right_green.png differ diff --git a/mods/streets/textures/streets_tle_right_yellow.png b/mods/streets/textures/streets_tle_right_yellow.png new file mode 100644 index 0000000..da16275 Binary files /dev/null and b/mods/streets/textures/streets_tle_right_yellow.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv.png b/mods/streets/textures/streets_trafficlight_inv.png new file mode 100644 index 0000000..fb76b72 Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_extender_left.png b/mods/streets/textures/streets_trafficlight_inv_extender_left.png new file mode 100644 index 0000000..d28a437 Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_extender_left.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_extender_right.png b/mods/streets/textures/streets_trafficlight_inv_extender_right.png new file mode 100644 index 0000000..bf4cdb6 Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_extender_right.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_left.png b/mods/streets/textures/streets_trafficlight_inv_left.png new file mode 100644 index 0000000..04530aa Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_left.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_portable.png b/mods/streets/textures/streets_trafficlight_inv_portable.png new file mode 100644 index 0000000..eb9cbbd Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_portable.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_right.png b/mods/streets/textures/streets_trafficlight_inv_right.png new file mode 100644 index 0000000..5a73942 Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_right.png differ diff --git a/mods/streets/textures/streets_trafficlight_inv_straight.png b/mods/streets/textures/streets_trafficlight_inv_straight.png new file mode 100644 index 0000000..ac3e7aa Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_inv_straight.png differ diff --git a/mods/streets/textures/streets_trafficlight_template.png b/mods/streets/textures/streets_trafficlight_template.png new file mode 100644 index 0000000..f987c9b Binary files /dev/null and b/mods/streets/textures/streets_trafficlight_template.png differ diff --git a/mods/streets/textures/streets_transparent.png b/mods/streets/textures/streets_transparent.png new file mode 100644 index 0000000..37c28e7 Binary files /dev/null and b/mods/streets/textures/streets_transparent.png differ diff --git a/mods/streets/todo.txt b/mods/streets/todo.txt new file mode 100644 index 0000000..441a701 --- /dev/null +++ b/mods/streets/todo.txt @@ -0,0 +1,71 @@ += StreetsMod relaunch: ToDo = + +== Legend == +✓ | Done +... | In Progress +- | Not Done +* | Comment + +== 1. General = +✓ create a new folder structure that is: easy to understand, easy to extend, easily configurable (important later on...) +✓ find suitable licenses for media/code: CC-BY-SA 3.0 seems to be fine for media, not sure which license I should choose for the code though... +✓ create new 16px textures; many people asked for it... +? use kaeza's intllib +- use Rubendwardy's achievements + +== 2. API == +✓ create a simple API that makes registration of road surfaces and markings easier by automatically registering all needed combinations of surfaces and markings +✓ enable the developer to register a whole set of surfaces and their markings or vide-versa using two functions: streets.register_surface() and streets.register_marking() + +== 3. Nodes == +✓ adapt all existing nodes to the new API and finally find a good naming convention for the nodes, e.g. ":streets:surface_surfacecolor_marking_markingcolor_x" + +=== 3.1 Road surfaces === +✓ standard asphalt (black) +✓ colored asphalt (red, yellow, blue) to mark special areas, like bike paths etc. + +=== 3.2 Road markings === +✓ The following nodes are available in white and yellow +✓ Arrows: left, right, straight on, straight on + left, straight on + right, straight on + left + right, left + right +✓ Middle lines: solid, dashed, double solid, double dashed, double mixed +✓ Side lines: solid slim, solid thick, dashed slim, dashed thick, outer edge thick, outer edge thin, inner edge thick, inner edge thin +✓ Others: Parking, Forbidden area, crosswalk + +=== 3.3 Roadworks === +✓ Overriding markings: all from 3.2 but only in yellow +✓ drawtypes: raillike (for middle lines) or nodebox (Minetest lacks a drawtype that combines raillike and facedir) +- Roadwork related accessories: Fences, pylons, lights, Vertical bars, etc. + +=== 3.4 Concrete === +✓ nothing new here: concrete blocks and walls as known from 1.5 and below +✓ use walls API for concrete walls + +=== 3.5 Passive road accessories === +✓ find a style that is not too country specific but still easy for everyone to understand + * Possibly include the old signs, but maybe with some country specific? I'd love to have at least some of the most common USA ones in there. (cheapie) + * Let's forget to be un-country-specific. Let's include US and EU ones, that should satisfy many players. We can make the sign workshop use tabs to organise them into categories and a dropdown to select the set to be used. (wd97) +✓ Warning signs: "!", lava, water, construction area, curves, railroad crossings, crosswalks, "Baken" +✓ Traffic: "STOP", "Railroad", "Give way", "right of way", "Priority", "One way", "roundabout (a square of course)", "dead end", "Parking" +- Writable using signs_lib (hopefully?): city entrance/exit, street name, guideposts +* Especially in this category, the list of signs is subject to change. If something is not possible due to graphical or technical limitations, it won't get implemented. +* Spontaneous ideas of mine are possible and very likely... +✓ Traffic barriers +✓ delineators + +=== 3.6 Active road accessories +✓ Traffic guidance system for highways, controllable via digilines + * = streets/laneuse +✓ Trafficlight (off, red, yellow, green) +✓? (ambiguous) Trafficlight (off, red, yellow) +✓ Compact and portable trafficlight (e.g. for roadworks) +✓ Blinking light (off, yellow) +✓ bollards + +=== 3.7 Railroad crossings === +✓ Controllable barriers (manual (punch) or mesecons) +✓ Blinking lights (off, red) with single or double lamps + +=== 3.8 Bridges === +- Drawbridges. Definetely cool, but not easy to implement because of lack of facedir for many nodes and brdiges thicker than 1m... This one needs a seperate plan + * Might be best in a separate mod (cheapie) + * Would be the best solution... (wd97) diff --git a/mods/technic-master/.gitattributes b/mods/technic-master/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/mods/technic-master/.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-master/.gitignore b/mods/technic-master/.gitignore new file mode 100644 index 0000000..227a256 --- /dev/null +++ b/mods/technic-master/.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/technic-master/.mailmap b/mods/technic-master/.mailmap new file mode 100644 index 0000000..cf45bc3 --- /dev/null +++ b/mods/technic-master/.mailmap @@ -0,0 +1,4 @@ +RealBadAngel +Vanessa Ezekowitz +Vanessa Ezekowitz +kaeza Diego Martínez diff --git a/mods/technic-master/README.md b/mods/technic-master/README.md new file mode 100644 index 0000000..406deab --- /dev/null +++ b/mods/technic-master/README.md @@ -0,0 +1,23 @@ +Technic +======= + +Credits for contributing to the project (in alphabetical order): + * kpoppel + * Nekogloop + * Nore/Ekdohibs + * ShadowNinja + * VanessaE + * And many others... + +FAQ +--- + +1. My technic circuit doesn't work. No power is distrubuted. + * A: Make sure you have a switching station connected. + +License +------- + +Unless otherwise stated, all components of this modpack are licensed under the +LGPL, V2 or later. See also the individual mod folders for their +secondary/alternate licenses, if any. diff --git a/mods/technic-master/concrete/depends.txt b/mods/technic-master/concrete/depends.txt new file mode 100644 index 0000000..c48fe0d --- /dev/null +++ b/mods/technic-master/concrete/depends.txt @@ -0,0 +1,3 @@ +default +intllib? + diff --git a/mods/technic-master/concrete/init.lua b/mods/technic-master/concrete/init.lua new file mode 100644 index 0000000..ca04733 --- /dev/null +++ b/mods/technic-master/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/technic-master/concrete/locale/de.txt b/mods/technic-master/concrete/locale/de.txt new file mode 100644 index 0000000..83fdc19 --- /dev/null +++ b/mods/technic-master/concrete/locale/de.txt @@ -0,0 +1,10 @@ +# German Translation for technic_concrete +# Deutsche Übersetzung von technic_concrete +# by Xanthin + +Rebar = Bewehrungsstab +Concrete Block = Betonblock +Blast-resistant Concrete Block = Explosionsbestaendiger Betonblock +Concrete Post Platform = Betonpfostenplattform +Concrete Post = Betonpfosten + diff --git a/mods/technic-master/concrete/locale/es.txt b/mods/technic-master/concrete/locale/es.txt new file mode 100644 index 0000000..b7ea30a --- /dev/null +++ b/mods/technic-master/concrete/locale/es.txt @@ -0,0 +1,8 @@ +# technic_concrete traducido por Carlos Barraza + +Rebar = Barra de refuerzo +Concrete Block = Bloque de concreto +Blast-resistant Concrete Block = Bloque de concreto resistente a explosiones +Concrete Post Platform = Plataforma de concreto +Concrete Post = Postes de concreto + diff --git a/mods/technic-master/concrete/locale/template.txt b/mods/technic-master/concrete/locale/template.txt new file mode 100644 index 0000000..451adaf --- /dev/null +++ b/mods/technic-master/concrete/locale/template.txt @@ -0,0 +1,8 @@ +# technic_concrete translation template + +Rebar = +Concrete Block = +Blast-resistant Concrete Block = +Concrete Post Platform = +Concrete Post = + diff --git a/mods/technic-master/concrete/locale/tr.txt b/mods/technic-master/concrete/locale/tr.txt new file mode 100644 index 0000000..179d29b --- /dev/null +++ b/mods/technic-master/concrete/locale/tr.txt @@ -0,0 +1,7 @@ +# turkish translation by mahmutelmas06 + +Rebar = Beton demiri +Concrete Block = Beton blok +Blast-resistant Concrete Block = Patlamaya dayanıklı beton blok +Concrete Post Platform = Beton direk platformu +Concrete Post = Beton direk diff --git a/mods/technic-master/concrete/textures/technic_blast_resistant_concrete_block.png b/mods/technic-master/concrete/textures/technic_blast_resistant_concrete_block.png new file mode 100644 index 0000000..22c8963 Binary files /dev/null and b/mods/technic-master/concrete/textures/technic_blast_resistant_concrete_block.png differ diff --git a/mods/technic-master/concrete/textures/technic_concrete_block.png b/mods/technic-master/concrete/textures/technic_concrete_block.png new file mode 100644 index 0000000..2bc026e Binary files /dev/null and b/mods/technic-master/concrete/textures/technic_concrete_block.png differ diff --git a/mods/technic-master/concrete/textures/technic_rebar.png b/mods/technic-master/concrete/textures/technic_rebar.png new file mode 100644 index 0000000..16d1fc5 Binary files /dev/null and b/mods/technic-master/concrete/textures/technic_rebar.png differ diff --git a/mods/technic-master/concrete/textures/x32/technic_concrete_block.png b/mods/technic-master/concrete/textures/x32/technic_concrete_block.png new file mode 100644 index 0000000..91364f3 Binary files /dev/null and b/mods/technic-master/concrete/textures/x32/technic_concrete_block.png differ diff --git a/mods/technic-master/concrete/textures/x32/technic_rebar.png b/mods/technic-master/concrete/textures/x32/technic_rebar.png new file mode 100644 index 0000000..16d1fc5 Binary files /dev/null and b/mods/technic-master/concrete/textures/x32/technic_rebar.png differ diff --git a/mods/technic-master/extranodes/depends.txt b/mods/technic-master/extranodes/depends.txt new file mode 100644 index 0000000..15b9ef5 --- /dev/null +++ b/mods/technic-master/extranodes/depends.txt @@ -0,0 +1,6 @@ +default +technic_worldgen +concrete +unifieddyes? +intllib? +moreblocks? diff --git a/mods/technic-master/extranodes/init.lua b/mods/technic-master/extranodes/init.lua new file mode 100644 index 0000000..eb54067 --- /dev/null +++ b/mods/technic-master/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/technic-master/extranodes/locale/de.txt b/mods/technic-master/extranodes/locale/de.txt new file mode 100644 index 0000000..f3c017e --- /dev/null +++ b/mods/technic-master/extranodes/locale/de.txt @@ -0,0 +1,9 @@ +# German Translation for technic_extranodes +# Deutsche Übersetzung von technic_extranodes +# by Xanthin + +Marble = Marmor +Marble Bricks = Marmorziegel +Granite = Granit +Concrete = Beton + diff --git a/mods/technic-master/extranodes/locale/es.txt b/mods/technic-master/extranodes/locale/es.txt new file mode 100644 index 0000000..8b28218 --- /dev/null +++ b/mods/technic-master/extranodes/locale/es.txt @@ -0,0 +1,7 @@ +# technic_extranodes traducido por Carlos Barraza + +Marble = Mármol +Marble Bricks = Ladrillos de mármol +Granite = Granito +Concrete = Concreto + diff --git a/mods/technic-master/extranodes/locale/template.txt b/mods/technic-master/extranodes/locale/template.txt new file mode 100644 index 0000000..2ffe498 --- /dev/null +++ b/mods/technic-master/extranodes/locale/template.txt @@ -0,0 +1,7 @@ +# technic_extranodes translation template + +Marble = +Marble Bricks = +Granite = +Concrete = + diff --git a/mods/technic-master/extranodes/locale/tr.txt b/mods/technic-master/extranodes/locale/tr.txt new file mode 100644 index 0000000..90d8154 --- /dev/null +++ b/mods/technic-master/extranodes/locale/tr.txt @@ -0,0 +1,6 @@ +# turkish translation by mahmutelmas06 + +Marble = Mermer +Marble Bricks = Mermer tuğla +Granite = Granit +Concrete = Beton diff --git a/mods/technic-master/extranodes/models/technic_insulator_clip.obj b/mods/technic-master/extranodes/models/technic_insulator_clip.obj new file mode 100644 index 0000000..1da5e88 --- /dev/null +++ b/mods/technic-master/extranodes/models/technic_insulator_clip.obj @@ -0,0 +1,173 @@ +# Blender v2.72 (sub 0) OBJ File: '' +# www.blender.org +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.249997 0.500000 0.249997 +v -0.249997 0.500000 -0.249997 +v 0.249997 0.500000 -0.249997 +v 0.249997 0.500000 0.249997 +v -0.187500 0.500000 0.187500 +v -0.187500 0.500000 -0.187500 +v 0.187500 0.500000 -0.187500 +v 0.187500 0.500000 0.187500 +v -0.187500 0.750000 0.187500 +v -0.187500 0.750000 -0.187500 +v 0.187500 0.750000 -0.187500 +v 0.187500 0.750000 0.187500 +v -0.250000 0.750000 0.250000 +v -0.250000 0.750000 -0.250000 +v 0.250000 0.750000 -0.250000 +v 0.250000 0.750000 0.250000 +v -0.250000 1.250000 0.250000 +v -0.250000 1.250000 -0.250000 +v 0.250000 1.250000 -0.250000 +v 0.250000 1.250000 0.250000 +v -0.500000 0.312500 0.500000 +v -0.500000 0.312500 -0.500000 +v 0.500000 0.312500 -0.500000 +v 0.500000 0.312500 0.500000 +v 0.187500 0.625000 0.187500 +v 0.187500 0.625000 -0.187500 +v -0.187500 0.625000 -0.187500 +v -0.187500 0.625000 0.187500 +v 0.187500 0.562500 0.187500 +v 0.187500 0.687500 -0.187500 +v -0.187500 0.687500 -0.187500 +v -0.187500 0.562500 0.187500 +v 0.187500 0.687500 0.187500 +v 0.187500 0.562500 -0.187500 +v -0.187500 0.562500 -0.187500 +v -0.187500 0.687500 0.187500 +v 0.168668 0.531250 0.168668 +v 0.168668 0.718750 -0.168668 +v -0.168668 0.718750 -0.168668 +v -0.168668 0.531250 0.168668 +v 0.168668 0.656250 0.168668 +v 0.168668 0.593750 -0.168668 +v -0.168668 0.593750 -0.168668 +v -0.168668 0.656250 0.168668 +v 0.168668 0.593750 0.168668 +v 0.168668 0.656250 -0.168668 +v -0.168668 0.656250 -0.168668 +v -0.168668 0.593750 0.168668 +v 0.168668 0.718750 0.168668 +v 0.168668 0.531250 -0.168668 +v -0.168668 0.531250 -0.168668 +v -0.168668 0.718750 0.168668 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 0.749997 0.749997 +vt 0.749997 0.250003 +vt 0.250003 0.250003 +vt 0.250003 0.749997 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.687500 +vt 0.687500 0.312500 +vt 0.687500 0.687500 +vt 0.331332 1.218750 +vt 0.668668 1.218750 +vt 0.687500 1.250000 +vt 0.312500 1.250000 +vt 0.750000 1.250000 +vt 0.750000 1.750000 +vt 0.250000 1.750000 +vt 0.250000 1.250000 +vt 0.331332 1.093750 +vt 0.668668 1.093750 +vt 0.687500 1.125000 +vt 0.312500 1.125000 +vt 0.331332 1.093750 +vt 0.668668 1.093750 +vt 0.331332 1.156250 +vt 0.668668 1.156250 +vt 0.687500 1.187500 +vt 0.312500 1.187500 +vt 0.331332 1.156250 +vt 0.668668 1.156250 +vt 0.331332 1.031250 +vt 0.668668 1.031250 +vt 0.687500 1.062500 +vt 0.312500 1.062500 +vt 0.312500 1.000000 +vt 0.687500 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn -0.600000 0.800000 -0.000000 +vn 0.000000 0.800000 -0.600000 +vn 0.600000 0.800000 0.000000 +vn -0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.856500 -0.516200 0.000000 +vn 0.000000 -0.516200 -0.856500 +vn -0.000000 -0.516200 0.856500 +vn -0.856500 -0.516200 -0.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 0.800000 0.600000 +vn 0.856500 0.516200 0.000000 +vn 0.000000 0.516200 -0.856500 +vn -0.000000 0.516200 0.856500 +vn -0.856500 0.516200 -0.000000 +g Cube_Cube_Material +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 25/2/2 5/5/2 6/6/2 26/1/2 +f 26/1/3 6/6/3 7/7/3 27/4/3 +f 27/4/4 7/7/4 8/8/4 28/3/4 +f 25/9/5 1/4/5 4/1/5 28/10/5 +f 8/8/6 7/7/6 11/11/6 12/12/6 +f 7/7/6 6/6/6 10/13/6 11/11/6 +f 5/5/6 8/8/6 12/12/6 9/14/6 +f 6/6/6 5/5/6 9/14/6 10/13/6 +f 53/15/7 42/16/7 15/17/7 16/18/7 +f 42/15/8 43/16/8 14/17/8 15/18/8 +f 56/15/9 53/16/9 16/17/9 13/18/9 +f 43/15/10 56/16/10 13/17/10 14/18/10 +f 14/4/1 18/4/1 19/4/1 15/4/1 +f 17/19/11 21/20/11 22/21/11 18/22/11 +f 18/19/12 22/20/12 23/21/12 19/22/12 +f 19/19/13 23/20/13 24/21/13 20/22/13 +f 21/21/5 17/22/5 20/19/5 24/20/5 +f 21/5/6 24/8/6 23/7/6 22/6/6 +f 15/4/1 19/4/1 20/4/1 16/4/1 +f 16/4/1 20/4/1 17/4/1 13/4/1 +f 13/4/1 17/4/1 18/4/1 14/4/1 +f 1/1/11 25/10/11 26/9/11 2/4/11 +f 2/1/12 26/10/12 27/9/12 3/4/12 +f 3/1/13 27/10/13 28/9/13 4/4/13 +f 5/5/14 25/2/14 28/3/14 8/8/14 +f 49/23/7 46/24/7 30/25/7 29/26/7 +f 46/27/8 47/28/8 31/25/8 30/26/8 +f 52/23/9 49/24/9 29/25/9 32/26/9 +f 47/23/10 52/24/10 32/25/10 31/26/10 +f 45/29/7 50/30/7 34/31/7 37/32/7 +f 50/33/8 51/34/8 35/31/8 34/32/8 +f 48/33/9 45/34/9 37/31/9 40/32/9 +f 51/29/10 48/30/10 40/31/10 35/32/10 +f 41/35/7 54/36/7 38/37/7 33/38/7 +f 54/35/8 55/36/8 39/37/8 38/38/8 +f 44/35/9 41/36/9 33/37/9 36/38/9 +f 55/35/10 44/36/10 36/37/10 39/38/10 +f 37/32/15 34/31/15 42/16/15 53/15/15 +f 34/32/16 35/31/16 43/16/16 42/15/16 +f 40/32/17 37/31/17 53/16/17 56/15/17 +f 35/32/18 40/31/18 56/16/18 43/15/18 +f 33/38/15 38/37/15 46/24/15 49/23/15 +f 38/38/16 39/37/16 47/28/16 46/27/16 +f 36/38/17 33/37/17 49/24/17 52/23/17 +f 39/38/18 36/37/18 52/24/18 47/23/18 +f 29/26/15 30/25/15 50/30/15 45/29/15 +f 30/26/16 31/25/16 51/34/16 50/33/16 +f 32/26/17 29/25/17 45/34/17 48/33/17 +f 31/26/18 32/25/18 48/30/18 51/29/18 +f 12/39/15 11/40/15 54/36/15 41/35/15 +f 11/39/16 10/40/16 55/36/16 54/35/16 +f 9/39/17 12/40/17 41/36/17 44/35/17 +f 10/39/18 9/40/18 44/36/18 55/35/18 diff --git a/mods/technic-master/extranodes/textures/technic_insulator_clip.png b/mods/technic-master/extranodes/textures/technic_insulator_clip.png new file mode 100644 index 0000000..44cdc6a Binary files /dev/null and b/mods/technic-master/extranodes/textures/technic_insulator_clip.png differ diff --git a/mods/technic-master/manual.md b/mods/technic-master/manual.md new file mode 100644 index 0000000..4ad01fc --- /dev/null +++ b/mods/technic-master/manual.md @@ -0,0 +1,1487 @@ +Minetest technic modpack user manual +==================================== + +The technic modpack extends the Minetest game with many new elements, +mainly constructable machines and tools. It is a large modpack, and +tends to dominate gameplay when it is used. This manual describes how +to use the technic modpack, mainly from a player's perspective. + +The technic modpack depends on some other modpacks: + +* the basic Minetest game +* mesecons, which supports the construction of logic systems based on + signalling elements +* pipeworks, which supports the automation of item transport +* moreores, which provides some additional ore types + +This manual doesn't explain how to use these other modpacks, which ought +to (but actually don't) have their own manuals. + +Recipes for constructable items in technic are generally not guessable, +and are also not specifically documented here. You should use a +craft guide mod to look up the recipes in-game. For the best possible +guidance, use the unified\_inventory mod, with which technic registers +its specialised recipe types. + +substances +---------- + +### ore ### + +The technic mod makes extensive use of not just the default ores but also +some that are added by mods. You will need to mine for all the ore types +in the course of the game. Each ore type is found at a specific range of +elevations, and while the ranges mostly overlap, some have non-overlapping +ranges, so you will ultimately need to mine at more than one elevation +to find all the ores. Also, because one of the best elevations to mine +at is very deep, you will be unable to mine there early in the game. + +Elevation is measured in meters, relative to a reference plane that +is not quite sea level. (The standard sea level is at an elevation +of about +1.4.) Positive elevations are above the reference plane and +negative elevations below. Because elevations are always described this +way round, greater numbers when higher, we avoid the word "depth". + +The ores that matter in technic are coal, iron, copper, tin, zinc, +chromium, uranium, silver, gold, mithril, mese, and diamond. + +Coal is part of the basic Minetest game. It is found from elevation ++64 downwards, so is available right on the surface at the start of +the game, but it is far less abundant above elevation 0 than below. +It is initially used as a fuel, driving important machines in the early +part of the game. It becomes less important as a fuel once most of your +machines are electrically powered, but burning fuel remains a way to +generate electrical power. Coal is also used, usually in dust form, as +an ingredient in alloying recipes, wherever elemental carbon is required. + +Iron is part of the basic Minetest game. It is found from elevation ++2 downwards, and its abundance increases in stages as one descends, +reaching its maximum from elevation -64 downwards. It is a common metal, +used frequently as a structural component. In technic, unlike the basic +game, iron is used in multiple forms, mainly alloys based on iron and +including carbon (coal). + +Copper is part of the basic Minetest game (having migrated there from +moreores). It is found from elevation -16 downwards, but is more abundant +from elevation -64 downwards. It is a common metal, used either on its +own for its electrical conductivity, or as the base component of alloys. +Although common, it is very heavily used, and most of the time it will +be the material that most limits your activity. + +Tin is supplied by the moreores mod. It is found from elevation +8 +downwards, with no elevation-dependent variations in abundance beyond +that point. It is a common metal. Its main use in pure form is as a +component of electrical batteries. Apart from that its main purpose is +as the secondary ingredient in bronze (the base being copper), but bronze +is itself little used. Its abundance is well in excess of its usage, +so you will usually have a surplus of it. + +Zinc is supplied by technic. It is found from elevation +2 downwards, +with no elevation-dependent variations in abundance beyond that point. +It is a common metal. Its main use is as the secondary ingredient +in brass (the base being copper), but brass is itself little used. +Its abundance is well in excess of its usage, so you will usually have +a surplus of it. + +Chromium is supplied by technic. It is found from elevation -100 +downwards, with no elevation-dependent variations in abundance beyond +that point. It is a moderately common metal. Its main use is as the +secondary ingredient in stainless steel (the base being iron). + +Uranium is supplied by technic. It is found only from elevation -80 down +to -300; using it therefore requires one to mine above elevation -300 even +though deeper mining is otherwise more productive. It is a moderately +common metal, useful only for reasons related to radioactivity: it forms +the fuel for nuclear reactors, and is also one of the best radiation +shielding materials available. It is not difficult to find enough uranium +ore to satisfy these uses. Beware that the ore is slightly radioactive: +it will slightly harm you if you stand as close as possible to it. +It is safe when more than a meter away or when mined. + +Silver is supplied by the moreores mod. It is found from elevation -2 +downwards, with no elevation-dependent variations in abundance beyond +that point. It is a semi-precious metal. It is little used, being most +notably used in electrical items due to its conductivity, being the best +conductor of all the pure elements. + +Gold is part of the basic Minetest game (having migrated there from +moreores). It is found from elevation -64 downwards, but is more +abundant from elevation -256 downwards. It is a precious metal. It is +little used, being most notably used in electrical items due to its +combination of good conductivity (third best of all the pure elements) +and corrosion resistance. + +Mithril is supplied by the moreores mod. It is found from elevation +-512 downwards, the deepest ceiling of any minable substance, with +no elevation-dependent variations in abundance beyond that point. +It is a rare precious metal, and unlike all the other metals described +here it is entirely fictional, being derived from J. R. R. Tolkien's +Middle-Earth setting. It is little used. + +Mese is part of the basic Minetest game. It is found from elevation +-64 downwards. The ore is more abundant from elevation -256 downwards, +and from elevation -1024 downwards there are also occasional blocks of +solid mese (each yielding as much mese as nine blocks of ore). It is a +precious gemstone, and unlike diamond it is entirely fictional. It is +used in many recipes, though mainly not in large quantities, wherever +some magical quality needs to be imparted. + +Diamond is part of the basic Minetest game (having migrated there from +technic). It is found from elevation -128 downwards, but is more abundant +from elevation -256 downwards. It is a precious gemstone. It is used +moderately, mainly for reasons connected to its extreme hardness. + +### rock ### + +In addition to the ores, there are multiple kinds of rock that need to be +mined in their own right, rather than for minerals. The rock types that +matter in technic are standard stone, desert stone, marble, and granite. + +Standard stone is part of the basic Minetest game. It is extremely +common. As in the basic game, when dug it yields cobblestone, which can +be cooked to turn it back into standard stone. Cobblestone is used in +recipes only for some relatively primitive machines. Standard stone is +used in a couple of machine recipes. These rock types gain additional +significance with technic because the grinder can be used to turn them +into dirt and sand. This, especially when combined with an automated +cobblestone generator, can be an easier way to acquire sand than +collecting it where it occurs naturally. + +Desert stone is part of the basic Minetest game. It is found specifically +in desert biomes, and only from elevation +2 upwards. Although it is +easily accessible, therefore, its quantity is ultimately quite limited. +It is used in a few recipes. + +Marble is supplied by technic. It is found in dense clusters from +elevation -50 downwards. It has mainly decorative use, but also appears +in one machine recipe. + +Granite is supplied by technic. It is found in dense clusters from +elevation -150 downwards. It is much harder to dig than standard stone, +so impedes mining when it is encountered. It has mainly decorative use, +but also appears in a couple of machine recipes. + +### rubber ### + +Rubber is a biologically-derived material that has industrial uses due +to its electrical resistivity and its impermeability. In technic, it +is used in a few recipes, and it must be acquired by tapping rubber trees. + +If you have the moretrees mod installed, the rubber trees you need +are those defined by that mod. If not, technic supplies a copy of the +moretrees rubber tree. + +Extracting rubber requires a specific tool, a tree tap. Using the tree +tap (by left-clicking) on a rubber tree trunk block extracts a lump of +raw latex from the trunk. Each trunk block can be repeatedly tapped for +latex, at intervals of several minutes; its appearance changes to show +whether it is currently ripe for tapping. Each tree has several trunk +blocks, so several latex lumps can be extracted from a tree in one visit. + +Raw latex isn't used directly. It must be vulcanized to produce finished +rubber. This can be performed by alloying the latex with coal dust. + +### metal ### + +Many of the substances important in technic are metals, and there is +a common pattern in how metals are handled. Generally, each metal can +exist in five forms: ore, lump, dust, ingot, and block. With a couple of +tricky exceptions in mods outside technic, metals are only *used* in dust, +ingot, and block forms. Metals can be readily converted between these +three forms, but can't be converted from them back to ore or lump forms. + +As in the basic Minetest game, a "lump" of metal is acquired directly by +digging ore, and will then be processed into some other form for use. +A lump is thus more akin to ore than to refined metal. (In real life, +metal ore rarely yields lumps ("nuggets") of pure metal directly. +More often the desired metal is chemically bound into the rock as an +oxide or some other compound, and the ore must be chemically processed +to yield pure metal.) + +Not all metals occur directly as ore. Generally, elemental metals (those +consisting of a single chemical element) occur as ore, and alloys (those +consisting of a mixture of multiple elements) do not. In fact, if the +fictional mithril is taken to be elemental, this pattern is currently +followed perfectly. (It is not clear in the Middle-Earth setting whether +mithril is elemental or an alloy.) This might change in the future: +in real life some alloys do occur as ore, and some elemental metals +rarely occur naturally outside such alloys. Metals that do not occur +as ore also lack the "lump" form. + +The basic Minetest game offers a single way to refine metals: cook a lump +in a furnace to produce an ingot. With technic this refinement method +still exists, but is rarely used outside the early part of the game, +because technic offers a more efficient method once some machines have +been built. The grinder, available only in electrically-powered forms, +can grind a metal lump into two piles of metal dust. Each dust pile +can then be cooked into an ingot, yielding two ingots from one lump. +This doubling of material value means that you should only cook a lump +directly when you have no choice, mainly early in the game when you +haven't yet built a grinder. + +An ingot can also be ground back to (one pile of) dust. Thus it is always +possible to convert metal between ingot and dust forms, at the expense +of some energy consumption. Nine ingots of a metal can be crafted into +a block, which can be used for building. The block can also be crafted +back to nine ingots. Thus it is possible to freely convert metal between +ingot and block forms, which is convenient to store the metal compactly. +Every metal has dust, ingot, and block forms. + +Alloying recipes in which a metal is the base ingredient, to produce a +metal alloy, always come in two forms, using the metal either as dust +or as an ingot. If the secondary ingredient is also a metal, it must +be supplied in the same form as the base ingredient. The output alloy +is also returned in the same form. For example, brass can be produced +by alloying two copper ingots with one zinc ingot to make three brass +ingots, or by alloying two piles of copper dust with one pile of zinc +dust to make three piles of brass dust. The two ways of alloying produce +equivalent results. + +### iron and its alloys ### + +Iron forms several important alloys. In real-life history, iron was the +second metal to be used as the base component of deliberately-constructed +alloys (the first was copper), and it was the first metal whose working +required processes of any metallurgical sophistication. The game +mechanics around iron broadly imitate the historical progression of +processes around it, rather than the less-varied modern processes. + +The two-component alloying system of iron with carbon is of huge +importance, both in the game and in real life. The basic Minetest game +doesn't distinguish between these pure iron and these alloys at all, +but technic introduces a distinction based on the carbon content, and +renames some items of the basic game accordingly. + +The iron/carbon spectrum is represented in the game by three metal +substances: wrought iron, carbon steel, and cast iron. Wrought iron +has low carbon content (less than 0.25%), resists shattering, and +is easily welded, but is relatively soft and susceptible to rusting. +In real-life history it was used for rails, gates, chains, wire, pipes, +fasteners, and other purposes. Cast iron has high carbon content +(2.1% to 4%), is especially hard, and resists corrosion, but is +relatively brittle, and difficult to work. Historically it was used +to build large structures such as bridges, and for cannons, cookware, +and engine cylinders. Carbon steel has medium carbon content (0.25% +to 2.1%), and intermediate properties: moderately hard and also tough, +somewhat resistant to corrosion. In real life it is now used for most +of the purposes previously satisfied by wrought iron and many of those +of cast iron, but has historically been especially important for its +use in swords, armor, skyscrapers, large bridges, and machines. + +In real-life history, the first form of iron to be refined was +wrought iron, which is nearly pure iron, having low carbon content. +It was produced from ore by a low-temperature furnace process (the +"bloomery") in which the ore/iron remains solid and impurities (slag) +are progressively removed by hammering ("working", hence "wrought"). +This began in the middle East, around 1800 BCE. + +Historically, the next forms of iron to be refined were those of high +carbon content. This was the result of the development of a more +sophisticated kind of furnace, the blast furnace, capable of reaching +higher temperatures. The real advantage of the blast furnace is that it +melts the metal, allowing it to be cast straight into a shape supplied by +a mould, rather than having to be gradually beaten into the desired shape. +A side effect of the blast furnace is that carbon from the furnace's fuel +is unavoidably incorporated into the metal. Normally iron is processed +twice through the blast furnace: once producing "pig iron", which has +very high carbon content and lots of impurities but lower melting point, +casting it into rough ingots, then remelting the pig iron and casting it +into the final moulds. The result is called "cast iron". Pig iron was +first produced in China around 1200 BCE, and cast iron later in the 5th +century BCE. Incidentally, the Chinese did not have the bloomery process, +so this was their first iron refining process, and, unlike the rest of +the world, their first wrought iron was made from pig iron rather than +directly from ore. + +Carbon steel, with intermediate carbon content, was developed much later, +in Europe in the 17th century CE. It required a more sophisticated +process, because the blast furnace made it extremely difficult to achieve +a controlled carbon content. Tweaks of the blast furnace would sometimes +produce an intermediate carbon content by luck, but the first processes to +reliably produce steel were based on removing almost all the carbon from +pig iron and then explicitly mixing a controlled amount of carbon back in. + +In the game, the bloomery process is represented by ordinary cooking +or grinding of an iron lump. The lump represents unprocessed ore, +and is identified only as "iron", not specifically as wrought iron. +This standard refining process produces dust or an ingot which is +specifically identified as wrought iron. Thus the standard refining +process produces the (nearly) pure metal. + +Cast iron is trickier. You might expect from the real-life notes above +that cooking an iron lump (representing ore) would produce pig iron that +can then be cooked again to produce cast iron. This is kind of the case, +but not exactly, because as already noted cooking an iron lump produces +wrought iron. The game doesn't distinguish between low-temperature +and high-temperature cooking processes: the same furnace is used not +just to cast all kinds of metal but also to cook food. So there is no +distinction between cooking processes to produce distinct wrought iron +and pig iron. But repeated cooking *is* available as a game mechanic, +and is indeed used to produce cast iron: re-cooking a wrought iron ingot +produces a cast iron ingot. So pig iron isn't represented in the game as +a distinct item; instead wrought iron stands in for pig iron in addition +to its realistic uses as wrought iron. + +Carbon steel is produced by a more regular in-game process: alloying +wrought iron with coal dust (which is essentially carbon). This bears +a fair resemblance to the historical development of carbon steel. +This alloying recipe is relatively time-consuming for the amount of +material processed, when compared against other alloying recipes, and +carbon steel is heavily used, so it is wise to alloy it in advance, +when you're not waiting for it. + +There are additional recipes that permit all three of these types of iron +to be converted into each other. Alloying carbon steel again with coal +dust produces cast iron, with its higher carbon content. Cooking carbon +steel or cast iron produces wrought iron, in an abbreviated form of the +bloomery process. + +There's one more iron alloy in the game: stainless steel. It is managed +in a completely regular manner, created by alloying carbon steel with +chromium. + +### uranium enrichment ### + +When uranium is to be used to fuel a nuclear reactor, it is not +sufficient to merely isolate and refine uranium metal. It is necessary +to control its isotopic composition, because the different isotopes +behave differently in nuclear processes. + +The main isotopes of interest are U-235 and U-238. U-235 is good at +sustaining a nuclear chain reaction, because when a U-235 nucleus is +bombarded with a neutron it will usually fission (split) into fragments. +It is therefore described as "fissile". U-238, on the other hand, +is not fissile: if bombarded with a neutron it will usually capture it, +becoming U-239, which is very unstable and quickly decays into semi-stable +(and fissile) plutonium-239. + +Inconveniently, the fissile U-235 makes up only about 0.7% of natural +uranium, almost all of the other 99.3% being U-238. Natural uranium +therefore doesn't make a great nuclear fuel. (In real life there are +a small number of reactor types that can use it, but technic doesn't +have such a reactor.) Better nuclear fuel needs to contain a higher +proportion of U-235. + +Achieving a higher U-235 content isn't as simple as separating the U-235 +from the U-238 and just using the required amount of U-235. Because +U-235 and U-238 are both uranium, and therefore chemically identical, +they cannot be chemically separated, in the way that different elements +are separated from each other when refining metal. They do differ +in atomic mass, so they can be separated by centrifuging, but because +their atomic masses are very close, centrifuging doesn't separate them +very well. They cannot be separated completely, but it is possible to +produce uranium that has the isotopes mixed in different proportions. +Uranium with a significantly larger fissile U-235 fraction than natural +uranium is called "enriched", and that with a significantly lower fissile +fraction is called "depleted". + +A single pass through a centrifuge produces two output streams, one with +a fractionally higher fissile proportion than the input, and one with a +fractionally lower fissile proportion. To alter the fissile proportion +by a significant amount, these output streams must be centrifuged again, +repeatedly. The usual arrangement is a "cascade", a linear arrangement +of many centrifuges. Each centrifuge takes as input uranium with some +specific fissile proportion, and passes its two output streams to the +two adjacent centrifuges. Natural uranium is input somewhere in the +middle of the cascade, and the two ends of the cascade produce properly +enriched and depleted uranium. + +Fuel for technic's nuclear reactor consists of enriched uranium of which +3.5% is fissile. (This is a typical value for a real-life light water +reactor, a common type for power generation.) To enrich uranium in the +game, it must first be in dust form: the centrifuge will not operate +on ingots. (In real life uranium enrichment is done with the uranium +in the form of a gas.) It is best to grind uranium lumps directly to +dust, rather than cook them to ingots first, because this yields twice +as much metal dust. When uranium is in refined form (dust, ingot, or +block), the name of the inventory item indicates its fissile proportion. +Uranium of any available fissile proportion can be put through all the +usual processes for metal. + +A single centrifuge operation takes two uranium dust piles, and produces +as output one dust pile with a fissile proportion 0.1% higher and one with +a fissile proportion 0.1% lower. Uranium can be enriched up to the 3.5% +required for nuclear fuel, and depleted down to 0.0%. Thus a cascade +covering the full range of fissile fractions requires 34 cascade stages. +(In real life, enriching to 3.5% uses thousands of cascade stages. +Also, centrifuging is less effective when the input isotope ratio +is more skewed, so the steps in fissile proportion are smaller for +relatively depleted uranium. Zero fissile content is only asymptotically +approachable, and natural uranium relatively cheap, so uranium is normally +only depleted to around 0.3%. On the other hand, much higher enrichment +than 3.5% isn't much more difficult than enriching that far.) + +Although centrifuges can be used manually, it is not feasible to perform +uranium enrichment by hand. It is a practical necessity to set up +an automated cascade, using pneumatic tubes to transfer uranium dust +piles between centrifuges. Because both outputs from a centrifuge are +ejected into the same tube, sorting tubes are needed to send the outputs +in different directions along the cascade. It is possible to send items +into the centrifuges through the same tubes that take the outputs, so the +simplest version of the cascade structure has a line of 34 centrifuges +linked by a line of 34 sorting tube segments. + +Assuming that the cascade depletes uranium all the way to 0.0%, +producing one unit of 3.5%-fissile uranium requires the input of five +units of 0.7%-fissile (natural) uranium, takes 490 centrifuge operations, +and produces four units of 0.0%-fissile (fully depleted) uranium as a +byproduct. It is possible to reduce the number of required centrifuge +operations by using more natural uranium input and outputting only +partially depleted uranium, but (unlike in real life) this isn't usually +an economical approach. The 490 operations are not spread equally over +the cascade stages: the busiest stage is the one taking 0.7%-fissile +uranium, which performs 28 of the 490 operations. The least busy is the +one taking 3.4%-fissile uranium, which performs 1 of the 490 operations. + +A centrifuge cascade will consume quite a lot of energy. It is +worth putting a battery upgrade in each centrifuge. (Only one can be +accommodated, because a control logic unit upgrade is also required for +tube operation.) An MV centrifuge, the only type presently available, +draws 7 kEU/s in this state, and takes 5 s for each uranium centrifuging +operation. It thus takes 35 kEU per operation, and the cascade requires +17.15 MEU to produce each unit of enriched uranium. It takes five units +of enriched uranium to make each fuel rod, and six rods to fuel a reactor, +so the enrichment cascade requires 514.5 MEU to process a full set of +reactor fuel. This is about 0.85% of the 6.048 GEU that the reactor +will generate from that fuel. + +If there is enough power available, and enough natural uranium input, +to keep the cascade running continuously, and exactly one centrifuge +at each stage, then the overall speed of the cascade is determined by +the busiest stage, the 0.7% stage. It can perform its 28 operations +towards the enrichment of a single uranium unit in 140 s, so that is +the overall cycle time of the cascade. It thus takes 70 min to enrich +a full set of reactor fuel. While the cascade is running at this full +speed, its average power consumption is 122.5 kEU/s. The instantaneous +power consumption varies from second to second over the 140 s cycle, +and the maximum possible instantaneous power consumption (with all 34 +centrifuges active simultaneously) is 238 kEU/s. It is recommended to +have some battery boxes to smooth out these variations. + +If the power supplied to the centrifuge cascade averages less than +122.5 kEU/s, then the cascade can't run continuously. (Also, if the +power supply is intermittent, such as solar, then continuous operation +requires more battery boxes to smooth out the supply variations, even if +the average power is high enough.) Because it's automated and doesn't +require continuous player attention, having the cascade run at less +than full speed shouldn't be a major problem. The enrichment work will +consume the same energy overall regardless of how quickly it's performed, +and the speed will vary in direct proportion to the average power supply +(minus any supply lost because battery boxes filled completely). + +If there is insufficient power to run both the centrifuge cascade at +full speed and whatever other machines require power, all machines on +the same power network as the centrifuge will be forced to run at the +same fractional speed. This can be inconvenient, especially if use +of the other machines is less automated than the centrifuge cascade. +It can be avoided by putting the centrifuge cascade on a separate power +network from other machines, and limiting the proportion of the generated +power that goes to it. + +If there is sufficient power and it is desired to enrich uranium faster +than a single cascade can, the process can be speeded up more economically +than by building an entire second cascade. Because the stages of the +cascade do different proportions of the work, it is possible to add a +second and subsequent centrifuges to only the busiest stages, and have +the less busy stages still keep up with only a single centrifuge each. + +Another possible approach to uranium enrichment is to have no fixed +assignment of fissile proportions to centrifuges, dynamically putting +whatever uranium is available into whichever centrifuges are available. +Theoretically all of the centrifuges can be kept almost totally busy all +the time, making more efficient use of capital resources, and the number +of centrifuges used can be as little (down to one) or as large as desired. +The difficult part is that it is not sufficient to put each uranium dust +pile individually into whatever centrifuge is available: they must be +input in matched pairs. Any odd dust pile in a centrifuge will not be +processed and will prevent that centrifuge from accepting any other input. + +### concrete ### + +Concrete is a synthetic building material. The technic modpack implements +it in the game. + +Two forms of concrete are available as building blocks: ordinary +"concrete" and more advanced "blast-resistant concrete". Despite its +name, the latter has no special resistance to explosions or to any other +means of destruction. + +Concrete can also be used to make fences. They act just like wooden +fences, but aren't flammable. Confusingly, the item that corresponds +to a wooden "fence" is called "concrete post". Posts placed adjacently +will implicitly create fence between them. Fencing also appears between +a post and adjacent concrete block. + +industrial processes +-------------------- + +### alloying ### + +In technic, alloying is a way of combining items to create other items, +distinct from standard crafting. Alloying always uses inputs of exactly +two distinct types, and produces a single output. Like cooking, which +takes a single input, it is performed using a powered machine, known +generically as an "alloy furnace". An alloy furnace always has two +input slots, and it doesn't matter which way round the two ingredients +are placed in the slots. Many alloying recipes require one or both +slots to contain a stack of more than one of the ingredient item: the +quantity required of each ingredient is part of the recipe. + +As with the furnaces used for cooking, there are multiple kinds of alloy +furnace, powered in different ways. The most-used alloy furnaces are +electrically powered. There is also an alloy furnace that is powered +by directly burning fuel, just like the basic cooking furnace. Building +almost any electrical machine, including the electrically-powered alloy +furnaces, requires a machine casing component, one ingredient of which +is brass, an alloy. It is therefore necessary to use the fuel-fired +alloy furnace in the early part of the game, on the way to building +electrical machinery. + +Alloying recipes are mainly concerned with metals. These recipes +combine a base metal with some other element, most often another metal, +to produce a new metal. This is discussed in the section on metal. +There are also a few alloying recipes in which the base ingredient is +non-metallic, such as the recipe for the silicon wafer. + +### grinding, extracting, and compressing ### + +Grinding, extracting, and compressing are three distinct, but very +similar, ways of converting one item into another. They are all quite +similar to the cooking found in the basic Minetest game. Each uses +an input consisting of a single item type, and produces a single +output. They are all performed using powered machines, respectively +known generically as a "grinder", "extractor", and "compressor". +Some compressing recipes require the input to be a stack of more than +one of the input item: the quantity required is part of the recipe. +Grinding and extracting recipes never require such a stacked input. + +There are multiple kinds of grinder, extractor, and compressor. Unlike +cooking furnaces and alloy furnaces, there are none that directly burn +fuel; they are all electrically powered. + +Grinding recipes always produce some kind of dust, loosely speaking, +as output. The most important grinding recipes are concerned with metals: +every metal lump or ingot can be ground into metal dust. Coal can also +be ground into dust, and burning the dust as fuel produces much more +energy than burning the original coal lump. There are a few other +grinding recipes that make block types from the basic Minetest game +more interconvertible: standard stone can be ground to standard sand, +desert stone to desert sand, cobblestone to gravel, and gravel to dirt. + +Extracting is a miscellaneous category, used for a small group +of processes that just don't fit nicely anywhere else. (Its name is +notably vaguer than those of the other kinds of processing.) It is used +for recipes that produce dye, mainly from flowers. (However, for those +recipes using flowers, the basic Minetest game provides parallel crafting +recipes that are easier to use and produce more dye, and those recipes +are not suppressed by technic.) Its main use is to generate rubber from +raw latex, which it does three times as efficiently as merely cooking +the latex. Extracting was also formerly used for uranium enrichment for +use as nuclear fuel, but this use has been superseded by a new enrichment +system using the centrifuge. + +Compressing recipes are mainly used to produce a few relatively advanced +artificial item types, such as the copper and carbon plates used in +advanced machine recipes. There are also a couple of compressing recipes +making natural block types more interconvertible. + +### centrifuging ### + +Centrifuging is another way of using a machine to convert items. +Centrifuging takes an input of a single item type, and produces outputs +of two distinct types. The input may be required to be a stack of +more than one of the input item: the quantity required is part of +the recipe. Centrifuging is only performed by a single machine type, +the MV (electrically-powered) centrifuge. + +Currently, centrifuging recipes don't appear in the unified\_inventory +craft guide, because unified\_inventory can't yet handle recipes with +multiple outputs. + +Generally, centrifuging separates the input item into constituent +substances, but it can only work when the input is reasonably fluid, +and in marginal cases it is quite destructive to item structure. +(In real life, centrifuges require their input to be mainly fluid, that +is either liquid or gas. Few items in the game are described as liquid +or gas, so the concept of the centrifuge is stretched a bit to apply to +finely-divided solids.) + +The main use of centrifuging is in uranium enrichment, where it +separates the isotopes of uranium dust that otherwise appears uniform. +Enrichment is a necessary process before uranium can be used as nuclear +fuel, and the radioactivity of uranium blocks is also affected by its +isotopic composition. + +A secondary use of centrifuging is to separate the components of +metal alloys. This can only be done using the dust form of the alloy. +It recovers both components of binary metal/metal alloys. It can't +recover the carbon from steel or cast iron. + +chests +------ + +The technic mod replaces the basic Minetest game's single type of +chest with a range of chests that have different sizes and features. +The chest types are identified by the materials from which they are made; +the better chests are made from more exotic materials. The chest types +form a linear sequence, each being (with one exception noted below) +strictly more powerful than the preceding one. The sequence begins with +the wooden chest from the basic game, and each later chest type is built +by upgrading a chest of the preceding type. The chest types are: + +1. wooden chest: 8×4 (32) slots +2. iron chest: 9×5 (45) slots +3. copper chest: 12×5 (60) slots +4. silver chest: 12×6 (72) slots +5. gold chest: 15×6 (90) slots +6. mithril chest: 15×6 (90) slots + +The iron and later chests have the ability to sort their contents, +when commanded by a button in their interaction forms. Item types are +sorted in the same order used in the unified\_inventory craft guide. +The copper and later chests also have an auto-sorting facility that can +be enabled from the interaction form. An auto-sorting chest automatically +sorts its contents whenever a player closes the chest. The contents will +then usually be in a sorted state when the chest is opened, but may not +be if pneumatic tubes have operated on the chest while it was closed, +or if two players have the chest open simultaneously. + +The silver and gold chests, but not the mithril chest, have a built-in +sign-like capability. They can be given a textual label, which will +be visible when hovering over the chest. The gold chest, but again not +the mithril chest, can be further labelled with a colored patch that is +visible from a moderate distance. + +The mithril chest is currently an exception to the upgrading system. +It has only as many inventory slots as the preceding (gold) type, and has +fewer of the features. It has no feature that other chests don't have: +it is strictly weaker than the gold chest. It is planned that in the +future it will acquire some unique features, but for now the only reason +to use it is aesthetic. + +The size of the largest chests is dictated by the maximum size +of interaction form that the game engine can successfully display. +If in the future the engine becomes capable of handling larger forms, +by scaling them to fit the screen, the sequence of chest sizes will +likely be revised. + +As with the chest of the basic Minetest game, each chest type comes +in both locked and unlocked flavors. All of the chests work with the +pneumatic tubes of the pipeworks mod. + +radioactivity +------------- + +The technic mod adds radioactivity to the game, as a hazard that can +harm player characters. Certain substances in the game are radioactive, +and when placed as blocks in the game world will damage nearby players. +Conversely, some substances attenuate radiation, and so can be used +for shielding. The radioactivity system is based on reality, but is +not an attempt at serious simulation: like the rest of the game, it has +many simplifications and deliberate deviations from reality in the name +of game balance. + +In real life radiological hazards can be roughly divided into three +categories based on the time scale over which they act: prompt radiation +damage (such as radiation burns) that takes effect immediately; radiation +poisoning that becomes visible in hours and lasts weeks; and cumulative +effects such as increased cancer risk that operate over decades. +The game's version of radioactivity causes only prompt damage, not +any delayed effects. Damage comes in the abstracted form of removing +the player's hit points, and is immediately visible to the player. +As with all other kinds of damage in the game, the player can restore +the hit points by eating food items. High-nutrition foods, such as the +pie baskets supplied by the bushes\_classic mod, are a useful tool in +dealing with radiological hazards. + +Only a small range of items in the game are radioactive. From the technic +mod, the only radioactive items are uranium ore, refined uranium blocks, +nuclear reactor cores (when operating), and the materials released when +a nuclear reactor melts down. Other mods can plug into the technic +system to make their own block types radioactive. Radioactive items +are harmless when held in inventories. They only cause radiation damage +when placed as blocks in the game world. + +The rate at which damage is caused by a radioactive block depends on the +distance between the source and the player. Distance matters because the +damaging radiation is emitted equally in all directions by the source, +so with distance it spreads out, so less of it will strike a target +of any specific size. The amount of radiation absorbed by a target +thus varies in proportion to the inverse square of the distance from +the source. The game imitates this aspect of real-life radioactivity, +but with some simplifications. While in real life the inverse square law +is only really valid for sources and targets that are small relative to +the distance between them, in the game it is applied even when the source +and target are large and close together. Specifically, the distance is +measured from the center of the radioactive block to the abdomen of the +player character. For extremely close encounters, such as where the +player swims in a radioactive liquid, there is an enforced lower limit +on the effective distance. + +Different types of radioactive block emit different amounts of radiation. +The least radioactive of the radioactive block types is uranium ore, +which causes 0.25 HP/s damage to a player 1 m away. A block of refined +but unenriched uranium, as an example, is nine times as radioactive, +and so will cause 2.25 HP/s damage to a player 1 m away. By the inverse +square law, the damage caused by that uranium block reduces by a factor +of four at twice the distance, that is to 0.5625 HP/s at a distance of 2 +m, or by a factor of nine at three times the distance, that is to 0.25 +HP/s at a distance of 3 m. Other radioactive block types are far more +radioactive than these: the most radioactive of all, the result of a +nuclear reactor melting down, is 1024 times as radioactive as uranium ore. + +Uranium blocks are radioactive to varying degrees depending on their +isotopic composition. An isotope being fissile, and thus good as +reactor fuel, is essentially uncorrelated with it being radioactive. +The fissile U-235 is about six times as radioactive than the non-fissile +U-238 that makes up the bulk of natural uranium, so one might expect that +enriching from 0.7% fissile to 3.5% fissile (or depleting to 0.0%) would +only change the radioactivity of uranium by a few percent. But actually +the radioactivity of enriched uranium is dominated by the non-fissile +U-234, which makes up only about 50 parts per million of natural uranium +but is about 19000 times more radioactive than U-238. The radioactivity +of natural uranium comes just about half from U-238 and half from U-234, +and the uranium gets enriched in U-234 along with the U-235. This makes +3.5%-fissile uranium about three times as radioactive as natural uranium, +and 0.0%-fissile uranium about half as radioactive as natural uranium. + +Radiation is attenuated by the shielding effect of material along the +path between the radioactive block and the player. In general, only +blocks of homogeneous material contribute to the shielding effect: for +example, a block of solid metal has a shielding effect, but a machine +does not, even though the machine's ingredients include a metal case. +The shielding effect of each block type is based on the real-life +resistance of the material to ionising radiation, but for game balance +the effectiveness of shielding is scaled down from real life, more so +for stronger shield materials than for weaker ones. Also, whereas in +real life materials have different shielding effects against different +types of radiation, the game only has one type of damaging radiation, +and so only one set of shielding values. + +Almost any solid or liquid homogeneous material has some shielding value. +At the low end of the scale, 5 meters of wooden planks nearly halves +radiation, though in that case the planks probably contribute more +to safety by forcing the player to stay 5 m further away from the +source than by actual attenuation. Dirt halves radiation in 2.4 m, +and stone in 1.7 m. When a shield must be deliberately constructed, +the preferred materials are metals, the denser the better. Iron and +steel halve radiation in 1.1 m, copper in 1.0 m, and silver in 0.95 m. +Lead would halve in 0.69 m (its in-game shielding value is 80). Gold halves radiation +in 0.53 m (factor of 3.7 per meter), but is a bit scarce to use for +this purpose. Uranium halves radiation in 0.31 m (factor of 9.4 per +meter), but is itself radioactive. The very best shielding in the game +is nyancat material (nyancats and their rainbow blocks), which halves +radiation in 0.22 m (factor of 24 per meter), but is extremely scarce. See [technic/technic/radiation.lua](https://github.com/minetest-technic/technic/blob/master/technic/radiation.lua) for the in-game shielding values, which are different from real-life values. + +If the theoretical radiation damage from a particular source is +sufficiently small, due to distance and shielding, then no damage at all +will actually occur. This means that for any particular radiation source +and shielding arrangement there is a safe distance to which a player can +approach without harm. The safe distance is where the radiation damage +would theoretically be 0.25 HP/s. This damage threshold is applied +separately for each radiation source, so to be safe in a multi-source +situation it is only necessary to be safe from each source individually. + +The best way to use uranium as shielding is in a two-layer structure, +of uranium and some non-radioactive material. The uranium layer should +be nearer to the primary radiation source and the non-radioactive layer +nearer to the player. The uranium provides a great deal of shielding +against the primary source, and the other material shields against +the uranium layer. Due to the damage threshold mechanism, a meter of +dirt is sufficient to shield fully against a layer of fully-depleted +(0.0%-fissile) uranium. Obviously this is only worthwhile when the +primary radiation source is more radioactive than a uranium block. + +When constructing permanent radiation shielding, it is necessary to +pay attention to the geometry of the structure, and particularly to any +holes that have to be made in the shielding, for example to accommodate +power cables. Any hole that is aligned with the radiation source makes a +"shine path" through which a player may be irradiated when also aligned. +Shine paths can be avoided by using bent paths for cables, passing +through unaligned holes in multiple shield layers. If the desired +shielding effect depends on multiple layers, a hole in one layer still +produces a partial shine path, along which the shielding is reduced, +so the positioning of holes in each layer must still be considered. +Tricky shine paths can also be addressed by just keeping players out of +the dangerous area. + +electrical power +---------------- + +Most machines in technic are electrically powered. To operate them it is +necessary to construct an electrical power network. The network links +together power generators and power-consuming machines, connecting them +using power cables. + +There are three tiers of electrical networking: low voltage (LV), +medium voltage (MV), and high voltage (HV). Each network must operate +at a single voltage, and most electrical items are specific to a single +voltage. Generally, the machines of higher tiers are more powerful, +but consume more energy and are more expensive to build, than machines +of lower tiers. It is normal to build networks of all three tiers, +in ascending order as one progresses through the game, but it is not +strictly necessary to do this. Building HV equipment requires some parts +that can only be manufactured using electrical machines, either LV or MV, +so it is not possible to build an HV network first, but it is possible +to skip either LV or MV on the way to HV. + +Each voltage has its own cable type, with distinctive insulation. Cable +segments connect to each other and to compatible machines automatically. +Incompatible electrical items don't connect. All non-cable electrical +items must be connected via cable: they don't connect directly to each +other. Most electrical items can connect to cables in any direction, +but there are a couple of important exceptions noted below. + +To be useful, an electrical network must connect at least one power +generator to at least one power-consuming machine. In addition to these +items, the network must have a "switching station" in order to operate: +no energy will flow without one. Unlike most electrical items, the +switching station is not voltage-specific: the same item will manage +a network of any tier. However, also unlike most electrical items, +it is picky about the direction in which it is connected to the cable: +the cable must be directly below the switching station. + +Hovering over a network's switching station will show the aggregate energy +supply and demand, which is useful for troubleshooting. Electrical energy +is measured in "EU", and power (energy flow) in EU per second (EU/s). +Energy is shifted around a network instantaneously once per second. + +In a simple network with only generators and consumers, if total +demand exceeds total supply then no energy will flow, the machines +will do nothing, and the generators' output will be lost. To handle +this situation, it is recommended to add a battery box to the network. +A battery box will store generated energy, and when enough has been +stored to run the consumers for one second it will deliver it to the +consumers, letting them run part-time. It also stores spare energy +when supply exceeds demand, to let consumers run full-time when their +demand occasionally peaks above the supply. More battery boxes can +be added to cope with larger periods of mismatched supply and demand, +such as those resulting from using solar generators (which only produce +energy in the daytime). + +When there are electrical networks of multiple tiers, it can be appealing +to generate energy on one tier and transfer it to another. The most +direct way to do this is with the "supply converter", which can be +directly wired into two networks. It is another tier-independent item, +and also particular about the direction of cable connections: it must +have the cable of one network directly above, and the cable of another +network directly below. The supply converter demands 10000 EU/s from +the network above, and when this network gives it power it supplies 9000 +EU/s to the network below. Thus it is only 90% efficient, unlike most of +the electrical system which is 100% efficient in moving energy around. +To transfer more than 10000 EU/s between networks, connect multiple +supply converters in parallel. + +powered machines +---------------- + +### powered machine tiers ### + +Each powered machine takes its power in some specific form, being +either fuel-fired (burning fuel directly) or electrically powered at +some specific voltage. There is a general progression through the +game from using fuel-fired machines to electrical machines, and to +higher electrical voltages. The most important kinds of machine come +in multiple variants that are powered in different ways, so the earlier +ones can be superseded. However, some machines are only available for +a specific power tier, so the tier can't be entirely superseded. + +### powered machine upgrades ### + +Some machines have inventory slots that are used to upgrade them in +some way. Generally, machines of MV and HV tiers have two upgrade slots, +and machines of lower tiers (fuel-fired and LV) do not. Any item can +be placed in an upgrade slot, but only specific items will have any +upgrading effect. It is possible to have multiple upgrades of the same +type, but this can't be achieved by stacking more than one upgrade item +in one slot: it is necessary to put the same kind of item in more than one +upgrade slot. The ability to upgrade machines is therefore very limited. +Two kinds of upgrade are currently possible: an energy upgrade and a +tube upgrade. + +An energy upgrade consists of a battery item, the same kind of battery +that serves as a mobile energy store. The effect of an energy upgrade +is to improve in some way the machine's use of electrical energy, most +often by making it use less energy. The upgrade effect has no relation +to energy stored in the battery: the battery's charge level is irrelevant +and will not be affected. + +A tube upgrade consists of a control logic unit item. The effect of a +tube upgrade is to make the machine able, or more able, to eject items +it has finished with into pneumatic tubes. The machines that can take +this kind of upgrade are in any case capable of accepting inputs from +pneumatic tubes. These upgrades are essential in using powered machines +as components in larger automated systems. + +### tubes with powered machines ### + +Generally, powered machines of MV and HV tiers can work with pneumatic +tubes, and those of lower tiers cannot. (As an exception, the fuel-fired +furnace from the basic Minetest game can accept inputs through tubes, +but can't output into tubes.) + +If a machine can accept inputs through tubes at all, then this +is a capability of the basic machine, not requiring any upgrade. +Most item-processing machines take only one kind of input, and in that +case they will accept that input from any direction. This doesn't match +how tubes visually connect to the machines: generally tubes will visually +connect to any face except the front, but an item passing through a tube +in front of the machine will actually be accepted into the machine. + +A minority of machines take more than one kind of input, and in that +case the input slot into which an arriving item goes is determined by the +direction from which it arrives. In this case the machine may be picky +about the direction of arriving items, associating each input type with +a single face of the machine and not accepting inputs at all through the +remaining faces. Again, the visual connection of tubes doesn't match: +generally tubes will still visually connect to any face except the front, +thus connecting to faces that neither accept inputs nor emit outputs. + +Machines do not accept items from tubes into non-input inventory slots: +the output slots or upgrade slots. Output slots are normally filled +only by the processing operation of the machine, and upgrade slots must +be filled manually. + +Powered machines generally do not eject outputs into tubes without +an upgrade. One tube upgrade will make them eject outputs at a slow +rate; a second tube upgrade will increase the rate. Whether the slower +rate is adequate depends on how it compares to the rate at which the +machine produces outputs, and on how the machine is being used as part +of a larger construct. The machine always ejects its outputs through a +particular face, usually a side. Due to a bug, the side through which +outputs are ejected is not consistent: when the machine is rotated one +way, the direction of ejection is rotated the other way. This will +probably be fixed some day, but because a straightforward fix would +break half the machines already in use, the fix may be tied to some +larger change such as free selection of the direction of ejection. + +### battery boxes ### + +The primary purpose of battery boxes is to temporarily store electrical +energy to let an electrical network cope with mismatched supply and +demand. They have a secondary purpose of charging and discharging +powered tools. They are thus a mixture of electrical infrastructure, +powered machine, and generator. Battery boxes connect to cables only +from the bottom. + +MV and HV battery boxes have upgrade slots. Energy upgrades increase +the capacity of a battery box, each by 10% of the un-upgraded capacity. +This increase is far in excess of the capacity of the battery that forms +the upgrade. + +For charging and discharging of power tools, rather than having input and +output slots, each battery box has a charging slot and a discharging slot. +A fully charged/discharged item stays in its slot. The rates at which a +battery box can charge and discharge increase with voltage, so it can +be worth building a battery box of higher tier before one has other +infrastructure of that tier, just to get access to faster charging. + +MV and HV battery boxes work with pneumatic tubes. An item can be input +to the charging slot through the sides or back of the battery box, or +to the discharging slot through the top. With a tube upgrade, fully +charged/discharged tools (as appropriate for their slot) will be ejected +through a side. + +### processing machines ### + +The furnace, alloy furnace, grinder, extractor, compressor, and centrifuge +have much in common. Each implements some industrial process that +transforms items into other items, and they manner in which they present +these processes as powered machines is essentially identical. + +Most of the processing machines operate on inputs of only a single type +at a time, and correspondingly have only a single input slot. The alloy +furnace is an exception: it operates on inputs of two distinct types at +once, and correspondingly has two input slots. It doesn't matter which +way round the alloy furnace's inputs are placed in the two slots. + +The processing machines are mostly available in variants for multiple +tiers. The furnace and alloy furnace are each available in fuel-fired, +LV, and MV forms. The grinder, extractor, and compressor are each +available in LV and MV forms. The centrifuge is the only single-tier +processing machine, being only available in MV form. The higher-tier +machines process items faster than the lower-tier ones, but also have +higher power consumption, usually taking more energy overall to perform +the same amount of processing. The MV machines have upgrade slots, +and energy upgrades reduce their energy consumption. + +The MV machines can work with pneumatic tubes. They accept inputs via +tubes from any direction. For most of the machines, having only a single +input slot, this is perfectly simple behavior. The alloy furnace is more +complex: it will put an arriving item in either input slot, preferring to +stack it with existing items of the same type. It doesn't matter which +slot each of the alloy furnace's inputs is in, so it doesn't matter that +there's no direct control ovar that, but there is a risk that supplying +a lot of one item type through tubes will result in both slots containing +the same type of item, leaving no room for the second input. + +The MV machines can be given a tube upgrade to make them automatically +eject output items into pneumatic tubes. The items are always ejected +through a side, though which side it is depends on the machine's +orientation, due to a bug. Output items are always ejected singly. +For some machines, such as the grinder, the ejection rate with a +single tube upgrade doesn't keep up with the rate at which items can +be processed. A second tube upgrade increases the ejection rate. + +The LV and fuel-fired machines do not work with pneumatic tubes, except +that the fuel-fired furnace (actually part of the basic Minetest game) +can accept inputs from tubes. Items arriving through the bottom of +the furnace go into the fuel slot, and items arriving from all other +directions go into the input slot. + +### music player ### + +The music player is an LV powered machine that plays audio recordings. +It offers a selection of up to nine tracks. The technic modpack doesn't +include specific music tracks for this purpose; they have to be installed +separately. + +The music player gives the impression that the music is being played in +the Minetest world. The music only plays as long as the music player +is in place and is receiving electrical power, and the choice of music +is controlled by interaction with the machine. The sound also appears +to emanate specifically from the music player: the ability to hear it +depends on the player's distance from the music player. However, the +game engine doesn't currently support any other positional cues for +sound, such as attenuation, panning, or HRTF. The impression of the +sound being located in the Minetest world is also compromised by the +subjective nature of track choice: the specific music that is played to +a player depends on what media the player has installed. + +### CNC machine ### + +The CNC machine is an LV powered machine that cuts building blocks into a +variety of sub-block shapes that are not covered by the crafting recipes +of the stairs mod and its variants. Most of the target shapes are not +rectilinear, involving diagonal or curved surfaces. + +Only certain kinds of building material can be processed in the CNC +machine. + +### tool workshop ### + +The tool workshop is an MV powered machine that repairs mechanically-worn +tools, such as pickaxes and the other ordinary digging tools. It has +a single slot for a tool to be repaired, and gradually repairs the +tool while it is powered. For any single tool, equal amounts of tool +wear, resulting from equal amounts of tool use, take equal amounts of +repair effort. Also, all repairable tools currently take equal effort +to repair equal percentages of wear. The amount of tool use enabled by +equal amounts of repair therefore depends on the tool type. + +The mechanical wear that the tool workshop repairs is always indicated in +inventory displays by a colored bar overlaid on the tool image. The bar +can be seen to fill and change color as the tool workshop operates, +eventually disappearing when the repair is complete. However, not every +item that shows such a wear bar is using it to show mechanical wear. +A wear bar can also be used to indicate charging of a power tool with +stored electrical energy, or filling of a container, or potentially for +all sorts of other uses. The tool workshop won't affect items that use +wear bars to indicate anything other than mechanical wear. + +The tool workshop has upgrade slots. Energy upgrades reduce its power +consumption. + +It can work with pneumatic tubes. Tools to be repaired are accepted +via tubes from any direction. With a tube upgrade, the tool workshop +will also eject fully-repaired tools via one side, the choice of side +depending on the machine's orientation, as for processing machines. It is +safe to put into the tool workshop a tool that is already fully repaired: +assuming the presence of a tube upgrade, the tool will be quickly ejected. +Furthermore, any item of unrepairable type will also be ejected as if +fully repaired. (Due to a historical limitation of the basic Minetest +game, it is impossible for the tool workshop to distinguish between a +fully-repaired tool and any item type that never displays a wear bar.) + +### quarry ### + +The quarry is an HV powered machine that automatically digs out a +large area. The region that it digs out is a cuboid with a square +horizontal cross section, located immediately behind the quarry machine. +The quarry's action is slow and energy-intensive, but requires little +player effort. + +The size of the quarry's horizontal cross section is configurable through +the machine's interaction form. A setting referred to as "radius" +is an integer number of meters which can vary from 2 to 8 inclusive. +The horizontal cross section is a square with side length of twice the +radius plus one meter, thus varying from 5 to 17 inclusive. Vertically, +the quarry always digs from 3 m above the machine to 100 m below it, +inclusive, a total vertical height of 104 m. + +Whatever the quarry digs up is ejected through the top of the machine, +as if from a pneumatic tube. Normally a tube should be placed there +to convey the material into a sorting system, processing machines, or +at least chests. A chest may be placed directly above the machine to +capture the output without sorting, but is liable to overflow. + +If the quarry encounters something that cannot be dug, such as a liquid, +a locked chest, or a protected area, it will skip past that and attempt +to continue digging. However, anything remaining in the quarry area +after the machine has attempted to dig there will prevent the machine +from digging anything directly below it, all the way to the bottom +of the quarry. An undiggable block therefore casts a shadow of undug +blocks below it. If liquid is encountered, it is quite likely to flow +across the entire cross section of the quarry, preventing all digging. +The depth at which the quarry is currently attempting to dig is reported +in its interaction form, and can be manually reset to the top of the +quarry, which is useful to do if an undiggable obstruction has been +manually removed. + +The quarry consumes 10 kEU per block dug, which is quite a lot of energy. +With most of what is dug being mere stone, it is usually not economically +favorable to power a quarry from anything other than solar power. +In particular, one cannot expect to power a quarry by burning the coal +that it digs up. + +Given sufficient power, the quarry digs at a rate of one block per second. +This is rather tedious to wait for. Unfortunately, leaving the quarry +unattended normally means that the Minetest server won't keep the machine +running: it needs a player nearby. This can be resolved by using a world +anchor. The digging is still quite slow, and independently of whether a +world anchor is used the digging can be speeded up by placing multiple +quarry machines with overlapping digging areas. Four can be placed to +dig identical areas, one on each side of the square cross section. + +### forcefield emitter ### + +The forcefield emitter is an HV powered machine that generates a +forcefield remeniscent of those seen in many science-fiction stories. + +The emitter can be configured to generate a forcefield of either +spherical or cubical shape, in either case centered on the emitter. +The size of the forcefield is configured using a radius parameter that +is an integer number of meters which can vary from 5 to 20 inclusive. +For a spherical forcefield this is simply the radius of the forcefield; +for a cubical forcefield it is the distance from the emitter to the +center of each square face. + +The power drawn by the emitter is proportional to the surface area of +the forcefield being generated. A spherical forcefield is therefore the +cheapest way to enclose a specified volume of space with a forcefield, +if the shape of the space doesn't matter. A cubical forcefield is less +efficient at enclosing volume, but is cheaper than the larger spherical +forcefield that would be required if it is necessary to enclose a +cubical space. + +The emitter is normally controlled merely through its interaction form, +which has an enable/disable toggle. However, it can also (via the form) +be placed in a mesecon-controlled mode. If mesecon control is enabled, +the emitter must be receiving a mesecon signal in addition to being +manually enabled, in order for it to generate the forcefield. + +The forcefield itself behaves largely as if solid, despite being +immaterial: it cannot be traversed, and prevents access to blocks behind +it. It is transparent, but not totally invisible. It cannot be dug. +Some effects can pass through it, however, such as the beam of a mining +laser, and explosions. In fact, explosions as currently implemented by +the tnt mod actually temporarily destroy the forcefield itself; the tnt +mod assumes too much about the regularity of node types. + +The forcefield occupies space that would otherwise have been air, but does +not replace or otherwise interfere with materials that are solid, liquid, +or otherwise not just air. If such an object blocking the forcefield is +removed, the forcefield will quickly extend into the now-available space, +but it does not do so instantly: there is a brief moment when the space +is air and can be traversed. + +It is possible to have a doorway in a forcefield, by placing in advance, +in space that the forcefield would otherwise occupy, some non-air blocks +that can be walked through. For example, a door suffices, and can be +opened and closed while the forcefield is in place. + +power generators +---------------- + +### fuel-fired generators ### + +The fiel-fired generators are electrical power generators that generate +power by the combustion of fuel. Versions of them are available for +all three voltages (LV, MV, and HV). These are all capable of burning +any type of combustible fuel, such as coal. They are relatively easy +to build, and so tend to be the first kind of generator used to power +electrical machines. In this role they form an intermediate step between +the directly fuel-fired machines and a more mature electrical network +powered by means other than fuel combustion. They are also, by virtue of +simplicity and controllability, a useful fallback or peak load generator +for electrical networks that normally use more sophisticated generators. + +The MV and HV fuel-fired generators can accept fuel via pneumatic tube, +from any direction. + +Keeping a fuel-fired generator fully fuelled is usually wasteful, because +it will burn fuel as long as it has any, even if there is no demand for +the electrical power that it generates. This is unlike the directly +fuel-fired machines, which only burn fuel when they have work to do. +To satisfy intermittent demand without waste, a fuel-fired generator must +only be given fuel when there is either demand for the energy or at least +sufficient battery capacity on the network to soak up the excess energy. + +The higher-tier fuel-fired generators get much more energy out of a +fuel item than the lower-tier ones. The difference is much more than +is needed to overcome the inefficiency of supply converters, so it is +worth operating fuel-fired generators at a higher tier than the machines +being powered. + +### solar generators ### + +The solar generators are electrical power generators that generate power +from sunlight. Versions of them are available for all three voltages +(LV, MV, and HV). There are four types in total, two LV and one each +of MV and HV, forming a sequence of four tiers. The higher-tier ones +are each built mainly from three solar generators of the next tier down, +and their outputs scale in rough accordance, tripling at each tier. + +To operate, an arrayed solar generator must be at elevation +1 or above +and have a transparent block (typically air) immediately above it. +It will generate power only when the block above is well lit during +daylight hours. It will generate more power at higher elevation, +reaching maximum output at elevation +36 or higher when sunlit. The small +solar generator has similar rules with slightly different thresholds. +These rules are an attempt to ensure that the generator will only operate +from sunlight, but it is actually possible to fool them to some extent +with light sources such as meselamps. + +### hydro generator ### + +The hydro generator is an LV power generator that generates a respectable +amount of power from the natural motion of water. To operate, the +generator must be horizontally adjacent to flowing water. The power +produced is dependent on how much flow there is across any or all four +sides, the most flow of course coming from water that's flowing straight +down. + +### geothermal generator ### + +The geothermal generator is an LV power generator that generates a small +amount of power from the temperature difference between lava and water. +To operate, the generator must be horizontally adjacent to both lava +and water. It doesn't matter whether the liquids consist of source +blocks or flowing blocks. + +Beware that if lava and water blocks are adjacent to each other then the +lava will be solidified into stone or obsidian. If the lava adjacent to +the generator is thus destroyed, the generator will stop producing power. +Currently, in the default Minetest game, lava is destroyed even if +it is only diagonally adjacent to water. Under these circumstances, +the only way to operate the geothermal generator is with it adjacent +to one lava block and one water block, which are on opposite sides of +the generator. If diagonal adjacency doesn't destroy lava, such as with +the gloopblocks mod, then it is possible to have more than one lava or +water block adjacent to the geothermal generator. This increases the +generator's output, with the maximum output achieved with two adjacent +blocks of each liquid. + +### wind generator ### + +The wind generator is an MV power generator that generates a moderate +amount of energy from wind. To operate, the generator must be placed +atop a column of at least 20 wind mill frame blocks, and must be at +an elevation of +30 or higher. It generates more at higher elevation, +reaching maximum output at elevation +50 or higher. Its surroundings +don't otherwise matter; it doesn't actually need to be in open air. + +### nuclear generator ### + +The nuclear generator (nuclear reactor) is an HV power generator that +generates a large amount of energy from the controlled fission of +uranium-235. It must be fuelled, with uranium fuel rods, but consumes +the fuel quite slowly in relation to the rate at which it is likely to +be mined. The operation of a nuclear reactor poses radiological hazards +to which some thought must be given. Economically, the use of nuclear +power requires a high capital investment, and a secure infrastructure, +but rewards the investment well. + +Nuclear fuel is made from uranium. Natural uranium doesn't have a +sufficiently high proportion of U-235, so it must first be enriched +via centrifuge. Producing one unit of 3.5%-fissile uranium requires +the input of five units of 0.7%-fissile (natural) uranium, and produces +four units of 0.0%-fissile (fully depleted) uranium as a byproduct. +It takes five ingots of 3.5%-fissile uranium to make each fuel rod, and +six rods to fuel a reactor. It thus takes the input of the equivalent +of 150 ingots of natural uranium, which can be obtained from the mining +of 75 blocks of uranium ore, to make a full set of reactor fuel. + +The nuclear reactor is a large multi-block structure. Only one block in +the structure, the reactor core, is of a type that is truly specific to +the reactor; the rest of the structure consists of blocks that have mainly +non-nuclear uses. The reactor core is where all the generator-specific +action happens: it is where the fuel rods are inserted, and where the +power cable must connect to draw off the generated power. + +The reactor structure consists of concentric layers, each a cubical +shell, around the core. Immediately around the core is a layer of water, +representing the reactor coolant; water blocks may be either source blocks +or flowing blocks. Around that is a layer of stainless steel blocks, +representing the reactor pressure vessel, and around that a layer of +blast-resistant concrete blocks, representing a containment structure. +It is customary, though no longer mandatory, to surround this with a +layer of ordinary concrete blocks. The mandatory reactor structure +makes a 7×7×7 cube, and the full customary structure a +9×9×9 cube. + +The layers surrounding the core don't have to be absolutely complete. +Indeed, if they were complete, it would be impossible to cable the core to +a power network. The cable makes it necessary to have at least one block +missing from each surrounding layer. The water layer is only permitted +to have one water block missing of the 26 possible. The steel layer may +have up to two blocks missing of the 98 possible, and the blast-resistant +concrete layer may have up to two blocks missing of the 218 possible. +Thus it is possible to have not only a cable duct, but also a separate +inspection hole through the solid layers. The separate inspection hole +is of limited use: the cable duct can serve double duty. + +Once running, the reactor core is significantly radioactive. The layers +of reactor structure provide quite a lot of shielding, but not enough +to make the reactor safe to be around, in two respects. Firstly, the +shortest possible path from the core to a player outside the reactor +is sufficiently short, and has sufficiently little shielding material, +that it will damage the player. This only affects a player who is +extremely close to the reactor, and close to a face rather than a vertex. +The customary additional layer of ordinary concrete around the reactor +adds sufficient distance and shielding to negate this risk, but it can +also be addressed by just keeping extra distance (a little over two +meters of air). + +The second radiological hazard of a running reactor arises from shine +paths; that is, specific paths from the core that lack sufficient +shielding. The necessary cable duct, if straight, forms a perfect +shine path, because the cable itself has no radiation shielding effect. +Any secondary inspection hole also makes a shine path, along which the +only shielding material is the water of the reactor coolant. The shine +path aspect of the cable duct can be ameliorated by adding a kink in the +cable, but this still yields paths with reduced shielding. Ultimately, +shine paths must be managed either with specific shielding outside the +mandatory structure, or with additional no-go areas. + +The radioactivity of an operating reactor core makes starting up a reactor +hazardous, and can come as a surprise because the non-operating core +isn't radioactive at all. The radioactive damage is survivable, but it is +normally preferable to avoid it by some care around the startup sequence. +To start up, the reactor must have a full set of fuel inserted, have all +the mandatory structure around it, and be cabled to a switching station. +Only the fuel insertion requires direct access to the core, so irradiation +of the player can be avoided by making one of the other two criteria be +the last one satisfied. Completing the cabling to a switching station +is the easiest to do from a safe distance. + +Once running, the reactor will generate 100 kEU/s for a week (168 hours, +604800 seconds), a total of 6.048 GEU from one set of fuel. After the +week is up, it will stop generating and no longer be radioactive. It can +then be refuelled to run for another week. It is not really intended +to be possible to pause a running reactor, but actually disconnecting +it from a switching station will have the effect of pausing the week. +This will probably change in the future. A paused reactor is still +radioactive, just not generating electrical power. + +A running reactor can't be safely dismantled, and not only because +dismantling the reactor implies removing the shielding that makes +it safe to be close to the core. The mandatory parts of the reactor +structure are not just mandatory in order to start the reactor; they're +mandatory in order to keep it intact. If the structure around the core +gets damaged, and remains damaged, the core will eventually melt down. +How long there is before meltdown depends on the extent of the damage; +if only one mandatory block is missing, meltdown will follow in 100 +seconds. While the structure of a running reactor is in a damaged state, +heading towards meltdown, a siren built into the reactor core will sound. +If the structure is rectified, the siren will signal all-clear. If the +siren stops sounding without signalling all-clear, then it was stopped +by meltdown. + +If meltdown is imminent because of damaged reactor structure, digging the +reactor core is not a way to avert it. Digging the core of a running +reactor causes instant meltdown. The only way to dismantle a reactor +without causing meltdown is to start by waiting for it to finish the +week-long burning of its current set of fuel. Once a reactor is no longer +operating, it can be dismantled by ordinary means, with no special risks. + +Meltdown, if it occurs, destroys the reactor and poses a major +environmental hazard. The reactor core melts, becoming a hot, highly +radioactive liquid known as "corium". A single meltdown yields a single +corium source block, where the core used to be. Corium flows, and the +flowing corium is very destructive to whatever it comes into contact with. +Flowing corium also randomly solidifies into a radioactive solid called +"Chernobylite". The random solidification and random destruction of +solid blocks means that the flow of corium is constantly changing. +This combined with the severe radioactivity makes corium much more +challenging to deal with than lava. If a meltdown is left to its own +devices, it gets worse over time, as the corium works its way through +the reactor structure and starts to flow over a variety of paths. +It is best to tackle a meltdown quickly; the priority is to extinguish +the corium source block, normally by dropping gravel into it. Only the +most motivated should attempt to pick up the corium in a bucket. + +administrative world anchor +--------------------------- + +A world anchor is an object in the Minetest world that causes the server +to keep surrounding parts of the world running even when no players +are nearby. It is mainly used to allow machines to run unattended: +normally machines are suspended when not near a player. The technic +mod supplies a form of world anchor, as a placable block, but it is not +straightforwardly available to players. There is no recipe for it, so it +is only available if explicitly spawned into existence by someone with +administrative privileges. In a single-player world, the single player +normally has administrative privileges, and can obtain a world anchor +by entering the chat command "/give singleplayer technic:admin\_anchor". + +The world anchor tries to force a cubical area, centered upon the anchor, +to stay loaded. The distance from the anchor to the most distant map +nodes that it will keep loaded is referred to as the "radius", and can be +set in the world anchor's interaction form. The radius can be set as low +as 0, meaning that the anchor only tries to keep itself loaded, or as high +as 255, meaning that it will operate on a 511×511×511 cube. +Larger radii are forbidden, to avoid typos causing the server excessive +work; to keep a larger area loaded, use multiple anchors. Also use +multiple anchors if the area to be kept loaded is not well approximated +by a cube. + +The world is always kept loaded in units of 16×16×16 cubes, +confusingly known as "map blocks". The anchor's configured radius takes +no account of map block boundaries, but the anchor's effect is actually to +keep loaded each map block that contains any part of the configured cube. +The anchor's interaction form includes a status note showing how many map +blocks this is, and how many of those it is successfully keeping loaded. +When the anchor is disabled, as it is upon placement, it will always +show that it is keeping no map blocks loaded; this does not indicate +any kind of failure. + +The world anchor can optionally be locked. When it is locked, only +the anchor's owner, the player who placed it, can reconfigure it or +remove it. Only the owner can lock it. Locking an anchor is useful +if the use of anchors is being tightly controlled by administrators: +an administrator can set up a locked anchor and be sure that it will +not be set by ordinary players to an unapproved configuration. + +The server limits the ability of world anchors to keep parts of the world +loaded, to avoid overloading the server. The total number of map blocks +that can be kept loaded in this way is set by the server configuration +item "max\_forceloaded\_blocks" (in minetest.conf), which defaults to +only 16. For comparison, each player normally keeps 125 map blocks loaded +(a radius of 32). If an enabled world anchor shows that it is failing to +keep all the map blocks loaded that it would like to, this can be fixed +by increasing max\_forceloaded\_blocks by the amount of the shortfall. + +The tight limit on force-loading is the reason why the world anchor is +not directly available to players. With the limit so low both by default +and in common practice, the only feasible way to determine where world +anchors should be used is for administrators to decide it directly. + +subjects missing from this manual +--------------------------------- + +This manual needs to be extended with sections on: + +* powered tools + * tool charging + * battery and energy crystals + * chainsaw + * flashlight + * mining lasers + * mining drills + * prospector + * sonic screwdriver +* liquid cans +* wrench +* frames +* templates diff --git a/mods/technic-master/modpack.txt b/mods/technic-master/modpack.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/mods/technic-master/modpack.txt @@ -0,0 +1 @@ + diff --git a/mods/technic-master/technic/README.md b/mods/technic-master/technic/README.md new file mode 100644 index 0000000..e5adf31 --- /dev/null +++ b/mods/technic-master/technic/README.md @@ -0,0 +1,35 @@ +Technic +======= + +License +------- + +Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel) + +Technic chests code is licensed under the GNU LGPLv2+. + +Texture licenses: + +BlockMen modified by Zefram (CC BY-SA 3.0): + * technic_chernobylite_block.png + * technic_corium_flowing_animated.png + * technic_corium_source_animated.png + +celeron55 (Perttu Ahola) modified by Zefram (CC BY-SA 3.0): + * technic_bucket_corium.png + +sdzen (Elise Staudter) (CC BY-SA 3.0): + * most of the older 16x16 textures + +RealBadAngel: (WTFPL) + * Everything else. + +CC BY-SA 3.0: + +Sound licenses: + +veikk0 (Veikko Mäkelä) (CC BY-SA 4.0): + * technic_hv_nuclear_reactor_siren_danger_loop.ogg + * Derived from "Nuclear alarm.wav" by Freesound.org user rene___ from . Originally licensed under CC0 1.0 + +CC BY-SA 4.0: \ No newline at end of file diff --git a/mods/technic-master/technic/config.lua b/mods/technic-master/technic/config.lua new file mode 100644 index 0000000..bb748ec --- /dev/null +++ b/mods/technic-master/technic/config.lua @@ -0,0 +1,22 @@ +technic.config = technic.config or Settings(minetest.get_worldpath().."/technic.conf") + +local conf_table = technic.config:to_table() + +local defaults = { + enable_mining_drill = "true", + enable_mining_laser = "true", + enable_flashlight = "false", + enable_wind_mill = "false", + enable_frames = "false", + enable_corium_griefing = "true", + enable_radiation_protection = "true", + enable_entity_radiation_damage = "true", + enable_longterm_radiation_damage = "true", + enable_nuclear_reactor_digiline_selfdestruct = "false", +} + +for k, v in pairs(defaults) do + if conf_table[k] == nil then + technic.config:set(k, v) + end +end diff --git a/mods/technic-master/technic/crafts.lua b/mods/technic-master/technic/crafts.lua new file mode 100644 index 0000000..5d3ae04 --- /dev/null +++ b/mods/technic-master/technic/crafts.lua @@ -0,0 +1,198 @@ +-- check if we have the necessary dependencies to allow actually using these materials in the crafts +local mesecons_materials = minetest.get_modpath("mesecons_materials") + +-- Remove some recipes +-- Bronze +minetest.clear_craft({ + type = "shapeless", + output = "default:bronze_ingot" +}) + +-- Accelerator tube +if pipeworks.enable_accelerator_tube then + minetest.clear_craft({ + output = "pipeworks:accelerator_tube_1", + }) + + minetest.register_craft({ + output = 'pipeworks:accelerator_tube_1', + recipe = { + {'technic:copper_coil', 'pipeworks:tube_1', 'technic:copper_coil'}, + } + }) +end + +-- Teleport tube +if pipeworks.enable_teleport_tube then + minetest.clear_craft({ + output = "pipeworks:teleport_tube_1", + }) + + minetest.register_craft({ + output = 'pipeworks:teleport_tube_1', + recipe = { + {'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'}, + {'pipeworks:tube_1', 'technic:control_logic_unit', 'pipeworks:tube_1'}, + {'default:mese_crystal', 'technic:copper_coil', 'default:mese_crystal'}, + } + }) +end + +-- tubes crafting recipes + +minetest.register_craft({ + output = 'technic:diamond_drill_head', + recipe = { + {'technic:stainless_steel_ingot', 'default:diamond', 'technic:stainless_steel_ingot'}, + {'default:diamond', '', 'default:diamond'}, + {'technic:stainless_steel_ingot', 'default:diamond', 'technic:stainless_steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:green_energy_crystal', + recipe = { + {'default:gold_ingot', 'technic:battery', 'dye:green'}, + {'technic:battery', 'technic:red_energy_crystal', 'technic:battery'}, + {'dye:green', 'technic:battery', 'default:gold_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:blue_energy_crystal', + recipe = { + {'moreores:mithril_ingot', 'technic:battery', 'dye:blue'}, + {'technic:battery', 'technic:green_energy_crystal', 'technic:battery'}, + {'dye:blue', 'technic:battery', 'moreores:mithril_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:red_energy_crystal', + recipe = { + {'moreores:silver_ingot', 'technic:battery', 'dye:red'}, + {'technic:battery', 'default:diamondblock', 'technic:battery'}, + {'dye:red', 'technic:battery', 'moreores:silver_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:fine_copper_wire 2', + recipe = { + {'', 'default:copper_ingot', ''}, + {'', 'default:copper_ingot', ''}, + {'', 'default:copper_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:fine_gold_wire 2', + recipe = { + {'', 'default:gold_ingot', ''}, + {'', 'default:gold_ingot', ''}, + {'', 'default:gold_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:fine_silver_wire 2', + recipe = { + {'', 'moreores:silver_ingot', ''}, + {'', 'moreores:silver_ingot', ''}, + {'', 'moreores:silver_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:copper_coil 1', + recipe = { + {'technic:fine_copper_wire', 'technic:wrought_iron_ingot', 'technic:fine_copper_wire'}, + {'technic:wrought_iron_ingot', '', 'technic:wrought_iron_ingot'}, + {'technic:fine_copper_wire', 'technic:wrought_iron_ingot', 'technic:fine_copper_wire'}, + } +}) + +minetest.register_craft({ + output = 'technic:motor', + recipe = { + {'technic:carbon_steel_ingot', 'technic:copper_coil', 'technic:carbon_steel_ingot'}, + {'technic:carbon_steel_ingot', 'technic:copper_coil', 'technic:carbon_steel_ingot'}, + {'technic:carbon_steel_ingot', 'default:copper_ingot', 'technic:carbon_steel_ingot'}, + } +}) + +local isolation = mesecons_materials and "mesecons_materials:fiber" or "technic:rubber" + +minetest.register_craft({ + output = 'technic:lv_transformer', + recipe = { + {isolation, 'technic:wrought_iron_ingot', isolation}, + {'technic:copper_coil', 'technic:wrought_iron_ingot', 'technic:copper_coil'}, + {'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot', 'technic:wrought_iron_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:mv_transformer', + recipe = { + {isolation, 'technic:carbon_steel_ingot', isolation}, + {'technic:copper_coil', 'technic:carbon_steel_ingot', 'technic:copper_coil'}, + {'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot', 'technic:carbon_steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:hv_transformer', + recipe = { + {isolation, 'technic:stainless_steel_ingot', isolation}, + {'technic:copper_coil', 'technic:stainless_steel_ingot', 'technic:copper_coil'}, + {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:control_logic_unit', + recipe = { + {'', 'technic:fine_gold_wire', ''}, + {'default:copper_ingot', 'technic:silicon_wafer', 'default:copper_ingot'}, + {'', 'technic:chromium_ingot', ''}, + } +}) + +minetest.register_craft({ + output = 'technic:mixed_metal_ingot 9', + recipe = { + {'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot', 'technic:stainless_steel_ingot'}, + {'default:bronze_ingot', 'default:bronze_ingot', 'default:bronze_ingot'}, + {'default:tin_ingot', 'default:tin_ingot', 'default:tin_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:carbon_cloth', + recipe = { + {'technic:graphite', 'technic:graphite', 'technic:graphite'} + } +}) + +minetest.register_craft({ + output = "technic:machine_casing", + recipe = { + { "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" }, + { "technic:cast_iron_ingot", "technic:brass_ingot", "technic:cast_iron_ingot" }, + { "technic:cast_iron_ingot", "technic:cast_iron_ingot", "technic:cast_iron_ingot" }, + }, +}) + + +minetest.register_craft({ + output = "default:dirt 2", + type = "shapeless", + replacements = {{"bucket:bucket_water","bucket:bucket_empty"}}, + recipe = { + "technic:stone_dust", + "group:leaves", + "bucket:bucket_water", + "group:sand", + }, +}) diff --git a/mods/technic-master/technic/depends.txt b/mods/technic-master/technic/depends.txt new file mode 100644 index 0000000..5bf9f9f --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/doc/api.md b/mods/technic-master/technic/doc/api.md new file mode 100644 index 0000000..178ab0a --- /dev/null +++ b/mods/technic-master/technic/doc/api.md @@ -0,0 +1,133 @@ +This file is fairly incomplete. Help is welcome. + +Tiers +----- +The tier is a string, currently `"LV"`, `"MV"` and `"HV"` are supported. + +Network +------- +The network is the cable with the connected machine nodes. Currently the +switching station handles the network activity. + +Helper functions +---------------- +* `technic.EU_string(num)` + * Converts num to a human-readable string (see pretty_num) + and adds the `EU` unit + * Use this function when showing players energy values +* `technic.pretty_num(num)` + * Converts the number `num` to a human-readable string with SI prefixes +* `technic.swap_node(pos, nodename)` + * Same as `mintest.swap_node` but it only changes the nodename. + * It uses `minetest.get_node` before swapping to ensure the new nodename + is not the same as the current one. +* `technic.get_or_load_node(pos)` + * If the mapblock is loaded, it returns the node at pos, + else it loads the chunk and returns `nil`. +* `technic.set_RE_wear(itemstack, item_load, max_charge)` + * If the `wear_represents` field in the item's nodedef is + `"technic_RE_charge"`, this function does nothing. +* `technic.refill_RE_charge(itemstack)` + * This function fully recharges an RE chargeable item. + * If `technic.power_tools[itemstack:get_name()]` is `nil` (or `false`), this + function does nothing, else that value is the maximum charge. + * The itemstack metadata is changed to contain the charge. +* `technic.is_tier_cable(nodename, tier)` + * Tells whether the node `nodename` is the cable of the tier `tier`. +* `technic.get_cable_tier(nodename)` + * Returns the tier of the cable `nodename` or `nil`. +* `technic.trace_node_ray(pos, dir, range)` + * Returns an iteration function (usable in the for loop) to iterate over the + node positions along the specified ray. + * The returned positions will not include the starting position `pos`. +* `technic.trace_node_ray_fat(pos, dir, range)` + * Like `technic.trace_node_ray` but includes extra positions near the ray. + * The node ray functions are used for mining lasers. +* `technic.config:get(name)` + * Some configuration function +* `technic.tube_inject_item(pos, start_pos, velocity, item)` + * Same as `pipeworks.tube_inject_item` + +Registration functions +---------------------- +* `technic.register_power_tool(itemname, max_charge)` + * Same as `technic.power_tools[itemname] = max_charge` + * This function makes the craftitem `itemname` chargeable. +* `technic.register_machine(tier, nodename, machine_type)` + * Same as `technic.machines[tier][nodename] = machine_type` + * Currently this is requisite to make technic recognize your node. + * See also `Machine types` +* `technic.register_tier(tier)` + * Same as `technic.machines[tier] = {}` + * See also `tiers` + +### Specific machines +* `technic.register_solar_array(data)` + * data is a table + +Used itemdef fields +------------------- +* groups: + * `technic_ = 1` ltier is a tier in small letters; this group makes + the node connect to the cable(s) of the right tier. + * `technic_machine = 1` Currently used for +* `connect_sides` + * In addition to the default use (see lua_api.txt), this tells where the + machine can be connected. +# +# +* `technic_run(pos, node)` + * This function is currently used to update the node. + Modders have to manually change the information about supply etc. in the + node metadata. + +Machine types +------------- +There are currently following types: +* `technic.receiver = "RE"` e.g. grinder +* `technic.producer = "PR"` e.g. solar panel +* `technic.producer_receiver = "PR_RE"` supply converter +* `technic.battery = "BA"` e.g. LV batbox + +Switching Station +----------------- +The switching station is the center of all power distribution on an electric +network. + +The station collects power from sources (PR), distributes it to sinks (RE), +and uses the excess/shortfall to charge and discharge batteries (BA). + +For now, all supply and demand values are expressed in kW. + +It works like this: + All PR,BA,RE nodes are indexed and tagged with the switching station. +The tagging is a workaround to allow more stations to be built without allowing +a cheat with duplicating power. + All the RE nodes are queried for their current EU demand. Those which are off +would require no or a small standby EU demand, while those which are on would +require more. +If the total demand is less than the available power they are all updated with +the demand number. +If any surplus exists from the PR nodes the batteries will be charged evenly +with this. +If the total demand requires draw on the batteries they will be discharged +evenly. + +If the total demand is more than the available power all RE nodes will be shut +down. We have a brown-out situation. + +Hence for now all the power distribution logic resides in this single node. + +### Node meta usage +Nodes connected to the network will have one or more of these parameters as meta +data: + * `_EU_supply` : Exists for PR and BA node types. + This is the EU value supplied by the node. Output + * `_EU_demand` : Exists for RE and BA node types. + This is the EU value the node requires to run. Output + * `_EU_input` : Exists for RE and BA node types. + This is the actual EU value the network can give the node. Input + +The reason the LV|MV|HV type is prepended to meta data is because some machine +could require several supplies to work. +This way the supplies are separated per network. diff --git a/mods/technic-master/technic/helpers.lua b/mods/technic-master/technic/helpers.lua new file mode 100644 index 0000000..5963b68 --- /dev/null +++ b/mods/technic-master/technic/helpers.lua @@ -0,0 +1,224 @@ +local constant_digit_count = technic.config:get("constant_digit_count") + +-- converts a number to a readable string with SI prefix, e.g. 10000 → "10 k", +-- 15 → "15 ", 0.1501 → "150.1 m" +-- a non-breaking space (U+a0) instead of a usual one is put after number +-- The precision is 4 digits +local prefixes = {[-8] = "y", [-7] = "z", [-6] = "a", [-5] = "f", [-4] = "p", + [-3] = "n", [-2] = "µ", [-1] = "m", [0] = "", [1] = "k", [2] = "M", + [3] = "G", [4] = "T", [5] = "P", [6] = "E", [7] = "Z", [8] = "Y"} +function technic.pretty_num(num) + -- the small number added is due to floating point inaccuracy + local b = math.floor(math.log10(math.abs(num)) +0.000001) + local pref_i + if b ~= 0 then + -- b is decremented by 1 to avoid a single digit with many decimals, + -- e.g. instead of 1.021 MEU, 1021 kEU is shown + pref_i = math.floor((b - 1) / 3) + else + -- as special case, avoid showing e.g. 1100 mEU instead of 1.1 EU + pref_i = 0 + end + if not prefixes[pref_i] then + -- This happens for 0, nan, inf, very big values, etc. + if num == 0 then + -- handle 0 explicilty to avoid showing "-0" + if not constant_digit_count then + return "0 " + end + -- gives 0.000 + return string.format("%.3f ", 0) + end + return string.format("%.4g ", num) + end + + num = num * 10 ^ (-3 * pref_i) + if constant_digit_count then + local comma_digits_cnt = 3 - (b - 3 * pref_i) + return string.format("%." .. comma_digits_cnt .. "f %s", + num, prefixes[pref_i]) + end + return string.format("%.4g %s", num, prefixes[pref_i]) +end + +-- some unittests +assert(technic.pretty_num(-0) == "0 ") +assert(technic.pretty_num(0) == "0 ") +assert(technic.pretty_num(1234) == "1234 ") +assert(technic.pretty_num(123456789) == "123.5 M") + + +-- used to display power values +function technic.EU_string(num) + return technic.pretty_num(num) .. "EU" +end + + +--- Same as minetest.swap_node, but only changes name +-- and doesn't re-set if already set. +function technic.swap_node(pos, name) + local node = minetest.get_node(pos) + if node.name ~= name then + node.name = name + minetest.swap_node(pos, node) + end +end + + +--- Fully charge RE chargeable item. +-- Must be defined early to reference in item definitions. +function technic.refill_RE_charge(stack) + local max_charge = technic.power_tools[stack:get_name()] + if not max_charge then return stack end + technic.set_RE_wear(stack, max_charge, max_charge) + local meta = minetest.deserialize(stack:get_metadata()) or {} + meta.charge = max_charge + stack:set_metadata(minetest.serialize(meta)) + return stack +end + + +-- If the node is loaded, returns it. If it isn't loaded, load it and return nil. +function technic.get_or_load_node(pos) + local node = minetest.get_node_or_nil(pos) + if node then return node end + local vm = VoxelManip() + local MinEdge, MaxEdge = vm:read_from_map(pos, pos) + return nil +end + + +technic.tube_inject_item = pipeworks.tube_inject_item or function(pos, start_pos, velocity, item) + local tubed = pipeworks.tube_item(vector.new(pos), item) + tubed:get_luaentity().start_pos = vector.new(start_pos) + tubed:setvelocity(velocity) + tubed:setacceleration(vector.new(0, 0, 0)) +end + + +--- Iterates over the node positions along the specified ray. +-- The returned positions will not include the starting position. +function technic.trace_node_ray(pos, dir, range) + local x_step = dir.x > 0 and 1 or -1 + local y_step = dir.y > 0 and 1 or -1 + local z_step = dir.z > 0 and 1 or -1 + + local i = 1 + return function(p) + -- Approximation of where we should be if we weren't rounding + -- to nodes. This moves forward a bit faster then we do. + -- A correction is done below. + local real_x = pos.x + (dir.x * i) + local real_y = pos.y + (dir.y * i) + local real_z = pos.z + (dir.z * i) + + -- How far off we've gotten from where we should be. + local dx = math.abs(real_x - p.x) + local dy = math.abs(real_y - p.y) + local dz = math.abs(real_z - p.z) + + -- If the real position moves ahead too fast, stop it so we + -- can catch up. If it gets too far ahead it will smooth + -- out our movement too much and we won't turn fast enough. + if dx + dy + dz < 2 then + i = i + 1 + end + + -- Step in whichever direction we're most off course in. + if dx > dy then + if dx > dz then + p.x = p.x + x_step + else + p.z = p.z + z_step + end + elseif dy > dz then + p.y = p.y + y_step + else + p.z = p.z + z_step + end + if vector.distance(pos, p) > range then + return nil + end + return p + end, vector.round(pos) +end + + +--- Like trace_node_ray, but includes extra positions close to the ray. +function technic.trace_node_ray_fat(pos, dir, range) + local x_step = dir.x > 0 and 1 or -1 + local y_step = dir.y > 0 and 1 or -1 + local z_step = dir.z > 0 and 1 or -1 + + local next_poses = {} + + local i = 1 + return function(p) + local ni, np = next(next_poses) + if np then + next_poses[ni] = nil + return np + end + + -- Approximation of where we should be if we weren't rounding + -- to nodes. This moves forward a bit faster then we do. + -- A correction is done below. + local real_x = pos.x + (dir.x * i) + local real_y = pos.y + (dir.y * i) + local real_z = pos.z + (dir.z * i) + + -- How far off we've gotten from where we should be. + local dx = math.abs(real_x - p.x) + local dy = math.abs(real_y - p.y) + local dz = math.abs(real_z - p.z) + + -- If the real position moves ahead too fast, stop it so we + -- can catch up. If it gets too far ahead it will smooth + -- out our movement too much and we won't turn fast enough. + if dx + dy + dz < 2 then + i = i + 1 + end + + -- Step in whichever direction we're most off course in. + local sx, sy, sz -- Whether we've already stepped along each axis + if dx > dy then + if dx > dz then + sx = true + p.x = p.x + x_step + else + sz = true + p.z = p.z + z_step + end + elseif dy > dz then + sy = true + p.y = p.y + y_step + else + sz = true + p.z = p.z + z_step + end + + if vector.distance(pos, p) > range then + return nil + end + + -- Add other positions that we're significantly off on. + -- We can just use fixed integer keys here because the + -- table will be completely cleared before we reach this + -- code block again. + local dlen = math.sqrt(dx*dx + dy*dy + dz*dz) + -- Normalized axis deltas + local dxn, dyn, dzn = dx / dlen, dy / dlen, dz / dlen + if not sx and dxn > 0.5 then + next_poses[1] = vector.new(p.x + x_step, p.y, p.z) + end + if not sy and dyn > 0.5 then + next_poses[2] = vector.new(p.x, p.y + y_step, p.z) + end + if not sz and dzn > 0.5 then + next_poses[3] = vector.new(p.x, p.y, p.z + z_step) + end + + return p + end, vector.round(pos) +end + diff --git a/mods/technic-master/technic/init.lua b/mods/technic-master/technic/init.lua new file mode 100644 index 0000000..0d97319 --- /dev/null +++ b/mods/technic-master/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-master/technic/items.lua b/mods/technic-master/technic/items.lua new file mode 100644 index 0000000..a0edb96 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/legacy.lua b/mods/technic-master/technic/legacy.lua new file mode 100644 index 0000000..6a080e1 --- /dev/null +++ b/mods/technic-master/technic/legacy.lua @@ -0,0 +1,41 @@ + +-- Aliases to convert from legacy node/item names + +technic.legacy_nodenames = { + ["technic:alloy_furnace"] = "technic:lv_alloy_furnace", + ["technic:alloy_furnace_active"] = "technic:lv_alloy_furnace_active", + ["technic:battery_box"] = "technic:lv_battery_box0", + ["technic:battery_box1"] = "technic:lv_battery_box1", + ["technic:battery_box2"] = "technic:lv_battery_box2", + ["technic:battery_box3"] = "technic:lv_battery_box3", + ["technic:battery_box4"] = "technic:lv_battery_box4", + ["technic:battery_box5"] = "technic:lv_battery_box5", + ["technic:battery_box6"] = "technic:lv_battery_box6", + ["technic:battery_box7"] = "technic:lv_battery_box7", + ["technic:battery_box8"] = "technic:lv_battery_box8", + ["technic:electric_furnace"] = "technic:lv_electric_furnace", + ["technic:electric_furnace_active"] = "technic:lv_electric_furnace_active", + ["technic:grinder"] = "technic:lv_grinder", + ["technic:grinder_active"] = "technic:lv_grinder_active", + ["technic:extractor"] = "technic:lv_extractor", + ["technic:extractor_active"] = "technic:lv_extractor_active", + ["technic:compressor"] = "technic:lv_compressor", + ["technic:compressor_active"] = "technic:lv_compressor_active", + ["technic:hv_battery_box"] = "technic:hv_battery_box0", + ["technic:mv_battery_box"] = "technic:mv_battery_box0", + ["technic:generator"] = "technic:lv_generator", + ["technic:generator_active"] = "technic:lv_generator_active", + ["technic:iron_dust"] = "technic:wrought_iron_dust", + ["technic:enriched_uranium"] = "technic:uranium35_ingot", +} + +for old, new in pairs(technic.legacy_nodenames) do + minetest.register_alias(old, new) +end + +for i = 0, 64 do + minetest.register_alias("technic:hv_cable"..i, "technic:hv_cable") + minetest.register_alias("technic:mv_cable"..i, "technic:mv_cable") + minetest.register_alias("technic:lv_cable"..i, "technic:lv_cable") +end + diff --git a/mods/technic-master/technic/locale/de.txt b/mods/technic-master/technic/locale/de.txt new file mode 100644 index 0000000..855ec5a --- /dev/null +++ b/mods/technic-master/technic/locale/de.txt @@ -0,0 +1,204 @@ +# German Translation for Technic Mod +# Deutsche Uebersetzung des Technic Mods +# by Xanthin + +## Misc +[Technic] Loaded in %f seconds = [Technic] ist in %f Sekunden geladen + +## Items +Silicon Wafer = Siliziumscheibe +Doped Silicon Wafer = Dotierte Siliziumscheibe +Enriched Uranium = Angereichertes Uran +Uranium Fuel = Uranbrennstoff +Diamond Drill Head = Diamantbohrkopf +Blue Energy Crystal = Blauer Energiekristall +Green Energy Crystal = Gruener Energiekristall +Red Energy Crystal = Roter Energiekristall +Fine Copper Wire = Feinkupferdraht +Copper Coil = Kupferspule +Electric Motor = Elektromotor +Low Voltage Transformer = Niederspannungstransformator +Medium Voltage Transformer = Mittelspannungstransformator +High Voltage Transformer = Hochspannungstransformator +Control Logic Unit = Steuer- und Regelungseinheit +Mixed Metal Ingot = Mischmetallbarren +Composite Plate = Verbundplatte +Copper Plate = Kupferplatte +Carbon Plate = Kohlefaserplatte +Graphite = Graphit +Carbon Cloth = Kohlefasergewebe +Raw Latex = Rohlatex +Rubber Fiber = Gummifaser +%.1f%%-Fissile Uranium Ingot = +%.1f%%-Fissile Uranium Block = + +## Machine misc +Machine cannot be removed because it is not empty = Die Maschine kann nicht entfernt werden, weil sie noch nicht leer ist. +Inventory move disallowed due to protection = Das Inventar ist geschuetzt, Zugriff verweigert. +# $1: Machine name (Includes tier) +@1 Active (@2 EU) = @1 ist eingeschaltet (@2 EU) +%s Active = %s ist eingeschaltet +%s Disabled = %s ist ausgeschaltet +%s Enabled = +%s Idle = %s ist bereit +%s Improperly Placed = %s ist falsch plaziert +%s Unpowered = %s hat keine Stromversorgung +%s Out Of Fuel = %s hat keinen Brennstoff +%s Has Bad Cabling = %s ist falsch verkabelt +%s Has No Network = %s hat kein Netzwerk +%s Finished = %s ist fertig +Enable/Disable = Einschalten/Ausschalten +Range = Reichweite +Upgrade Slots = Verbesserungsfaecher +In: = Rein: +Out: = Raus: +Slot %d = Fach %d +Itemwise = Einzelstuecke +Stackwise = Ganzer Stapel +Owner: = +Unlocked = +Locked = +Radius: = +Enabled = +Disabled = + +## Machine names +# $1: Tier +%s Alloy Furnace = %s Legierungsofen +%s Battery Box = %s Batteriebox +%s Cable = %s Kabel +%s CNC Machine = %s CNC-Maschine +%s Compressor = %s Kompressor +%s Extractor = %s Extraktor +%s Forcefield Emitter = %s Kraftfeld-Emitter +%s Furnace = %s Ofen +%s Grinder = %s Schleifmaschine +%s Music Player = %s Musikspieler +%s Quarry = %s Steinbruch +%s Tool Workshop = %s Werkzeugwerkstatt +Arrayed Solar %s Generator = %s Solaranlage +Fuel-Fired %s Generator = %s Kohle-Generator +Geothermal %s Generator = %s Geothermie-Generator +Hydro %s Generator = %s Wassermuehle +Nuclear %s Generator Core = %s Reaktorkern +Small Solar %s Generator = %s Solarmodul +Wind %s Generator = %s Windmuehle +Self-Contained Injector = Selbstversorger-Injektor +Constructor Mk%d = Konstruktor Modell %d +Frame = Rahmen +Frame Motor = Rahmenmotor +Template = Schablone +Template (replacing) = Schablone (ersetzend) +Template motor = Schablonenmotor +Template tool = Schablonenwerkzeug +Battery Box = Batteriebox +Supply Converter = Stromumwandler +Switching Station = Schaltanlage +Fuel-Fired Alloy Furnace = Kohle-Legierungsofen +Fuel-Fired Furnace = Kohle-Ofen +Wind Mill Frame = Windmuehlengeruest +Forcefield = Kraftfeld +Nuclear Reactor Rod Compartment = Brennstabfaecher +Administrative World Anchor = + +## Machine-specific +# $1: Pruduced EU +Charge = Aufladen +Discharge = Entladen +Power level = Energiestufe +# $1: Tier $2: current_charge $3: max_charge +@1 Battery Box: @2/@3 = @1 Batteriebox: @2/@3 +# $1: Machine name $2: Supply $3: Demand +@1. Supply: @2 Demand: @3 = @1. Versorgung: @2 Bedarf: @3 +Production at %d%% = Produktion bei %d%% +Choose Milling Program: = Waehle ein Fraesprogramm: +Slim Elements half / normal height: = Schmale Elemente von halber / normaler Hoehe: +Current track %s = Aktueller Titel %s +Stopped = +Keeping %d/%d map blocks loaded = +Digging not started = +Digging finished = +Digging %d m above machine = +Digging %d m below machine = + +## CNC +Cylinder = Zylinder +Element Cross = Halbes Kreuzelement +Element Cross Double = Kreuzelement +Element Edge = Halbes Eckelement +Element Edge Double = Eckelement +Element End = Halbes Endelement +Element End Double = Endelement +Element Straight = Halbes aufrechtes Element +Element Straight Double = Aufrechtes Element +Element T = Halbes T-Element +Element T Double = T-Element +Horizontal Cylinder = Liegender Zylinder +One Curved Edge Block = Block mit einer abgerundeten Kante +Pyramid = Pyramide +Slope = Schraege +Slope Edge = Schraege mit Ecke +Slope Inner Edge = Schraege mit Innenecke +Slope Lying = Liegende Schraege +Slope Upside Down = Umgedrehte Schraege +Slope Upside Down Edge = Umgedrehte Schraege mit Ecke +Slope Upside Down Inner Edge = Umgedrehte Schraege mit Innenecke +Sphere = Kugel +Spike = Spitze +Stick = Stange +Two Curved Edge Block = Block mit zwei abgerundeten Kanten +Brick = Ziegel: +Cobble = Pflasterstein: +Dirt = Erde: +Leaves = Laub: +Sandstone = Sandstein: +Stone = Stein: +Tree = Baumstamm: +Wooden = Holz: + +## Grinder Recipes +# $1: Name +%s Dust = %sstaub +Akalin = Akalin +Alatro = Alatro +Arol = Arol +Brass = Messing +Bronze = Bronze +Carbon Steel = Kohlenstoffstahl +Cast Iron = Gusseisen +Chromium = Chrom +Coal = Kohle +Copper = Kupfer +Gold = Gold +Mithril = Mithril +Silver = Silber +Stainless Steel = Edelstahl +Talinite = Talinite +Tin = Zinn +Wrought Iron = Schmiedeeisen +Zinc = Zink +%.1f%%-Fissile Uranium = + +## Tools +RE Battery = Akkubatterie +Water Can = Wasserkanister +Lava Can = Lavakanister +Chainsaw = Kettensaege +Flashlight = Taschenlampe +3 nodes deep. = 3 Bloecke tief. +3 nodes tall. = 3 Bloecke hoch. +3 nodes wide. = 3 Bloecke breit. +3x3 nodes. = 3x3 Bloecke. +Use while sneaking to change Mining Drill Mk%d modes. = Halte die Shift-Taste beim Benutzen gedrueckt, um die Funktion des Bergbaubohrers Modell %d zu aendern. +Mining Drill Mk%d Mode %d = Bergbaubohrer Modell %d Funktion %d +Mining Drill Mk%d = Bergbaubohrer Modell %d +Mining Laser Mk%d = Bergbaulaser Modell %d +Single node. = Einzelblock +Sonic Screwdriver = Schallschraubendreher +Tree Tap = Baumzapfhahn + +## Craft descriptions +Alloy cooking = +Grinding = +Compressing = +Extracting = diff --git a/mods/technic-master/technic/locale/es.txt b/mods/technic-master/technic/locale/es.txt new file mode 100644 index 0000000..7945d65 --- /dev/null +++ b/mods/technic-master/technic/locale/es.txt @@ -0,0 +1,197 @@ +# Spanish Translation for Technic Mod +# Traduccion al Español del Mod Technic +# Autor: Diego Martínez + +## Misc +[Technic] Loaded in %f seconds = [Technic] Cargado en %f segundos + +## Items +Silicon Wafer = Oblea de Silicio +Doped Silicon Wafer = Oblea de Silicio Dopada +Enriched Uranium = Uranio Enriquecido +Uranium Fuel = Combustible de Uranio +Diamond Drill Head = Mecha de Taladro de Diamante +Blue Energy Crystal = Cristal de Energia Azul +Green Energy Crystal = Cristal de Energia Verde +Red Energy Crystal = Cristal de Energia Rojo +Fine Copper Wire = Cable Fino de Cobre +Copper Coil = Resorte de Cobre +Electric Motor = Motor Electrico +Low Voltage Transformer = Transformador de Bajo Voltaje +Medium Voltage Transformer = Transformador de Voltaje Medio +High Voltage Transformer = Transformador de Alto Voltaje +Control Logic Unit = Unidad Logica de Control +Mixed Metal Ingot = Lingote de Metal Mezclado +Composite Plate = Placa de Compuestos +Copper Plate = Placa de Cobre +Carbon Plate = Placa de Carbon +Graphite = Grafito +Carbon Cloth = Tela de Carbon +Raw Latex = Latex Crudo +Rubber Fiber = Fibra de Hule +%.1f%%-Fissile Uranium Ingot = +%.1f%%-Fissile Uranium Block = + +## Machine misc +Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia +Inventory move disallowed due to protection = +# $1: Machine name (Includes tier) +@1 Active (@2 EU) = @1 Activo (@2 EU) +%s Active = %s Activo +%s Enabled = +%s Idle = %s Quieto +%s Unpowered = %s Sin Energia +%s Out Of Fuel = %s Sin Combustible +%s Has Bad Cabling = %s Tiene Mal Cableado +%s Has No Network = %s No Tiene Una Red +%s Finished = %s Terminado +%s Disabled = %s Deshabilitado +%s Improperly Placed = %s No Colocado Apropiadamente +Range = Alcance +Enable/Disable = Habilitar/Deshabilitar +Itemwise = +Stackwise = +Owner: = +Unlocked = +Locked = +Radius: = +Enabled = +Disabled = + +## Machine names +# $1: Tier +%s Alloy Furnace = Horno de Aleacion %s +%s Battery Box = Caja de Bateria %s +%s Cable = Cable %s +%s CNC Machine = Maquina CNC %s +%s Compressor = Compresor %s +%s Extractor = Extractor %s +%s Forcefield Emitter = Emisor de Campo de Fuerza %s +%s Furnace = Horno %s +%s Grinder = Amoladora %s +%s Music Player = Reproductor de Musica %s +%s Quarry = Cantera %s +%s Tool Workshop = Taller de Herramientas %s +Arrayed Solar %s Generator = Panel Solar %s +Fuel-Fired %s Generator = Generador a Carbon %s +Geothermal %s Generator = Generador Geotermico %s +Hydro %s Generator = Molino de Agua %s +Nuclear %s Generator Core = Nucleo de Reactor Nuclear %s +Small Solar %s Generator = Panel Solar %s +Wind %s Generator = Molino de Viento %s +Self-Contained Injector = +Constructor Mk%d = +Frame = +Frame Motor = +Template = +Template (replacing) = +Template Motor = +Template Tool = +Supply Converter = Convertidor de Alimentacion +Switching Station = Estacion de Conmutacion +Battery Box = Caja de Baterias +Fuel-Fired Alloy Furnace = Horno de Aleacion a Carbon +Fuel-Fired Furnace = Horno a Carbon +Forcefield = Campo de Fuerza +Nuclear Reactor Rod Compartment = Compartimiento para Vara de Reactor Nuclear +Wind Mill Frame = Armazon de Molino de Viento +Administrative World Anchor = + +## Machine-specific +# $1: Pruduced EU +Charge = Cargar +Discharge = Descargar +Power level = Nivel de Poder +# $1: Tier $2: current_charge $3: max_charge +@1 Battery Box: @2/@3 = Caja de Bateria @1: @2/@3 +# $1: Machine name $2: Supply $3: Demand +@1. Supply: @2 Demand: @3 = @1. Alimentacion: @2 Demanda: @3 +# $1: Production percent +Production at %d%% = Produccion en %d%% +Stopped = +Keeping %d/%d map blocks loaded = +Digging not started = +Digging finished = +Digging %d m above machine = +Digging %d m below machine = + +## CNC Machine +Element Edge = Elemento Borde +Tree = Arbol +Element Cross Double = Elemento Cruz Doble +Spike = Pica +Element Edge Double = Elemento Borde Doble +Two Curved Edge Block = Dos Bloques de Borde Curvados +Pyramid = Piramide +Slope Upside Down Inner Edge = Borde Interno de Rampa Al Reves +Slope Upside Down Edge = Borde de Rampa Al Reves +Element Straight Double = Elemento Doble Recto +Sphere = Esfera +Element End Double = Doble Fin de Elemento +Element Straight = Recta de Elemento +Horizontal Cylinder = Cilindro Horizontal +Slope Inner Edge = Borde Interno de Rampa +One Curved Edge Block = Un Bloque de Borde Curvado +Element Cross = Cruce de Elementos +Stick = Varita +Element End = Fin de Elemento +Slope Lying = Rampa en Reposo +Slope Upside Down = Rampa Al Reves +Slope Edge = Borde de Rampa +Slope = Rampa +Element T = Elemento T +Cylinder = Cilindro +Cobble = Adoquines +Stone = Piedra +Brick = Ladrillo +Dirt = Tierra +Sandstone = Arenisca +Wooden = Madera +Leaves = Hojas + +## Grinder Recipes +# $1: Name +%s Dust = Polvo de %s +Akalin = Akalina +Alatro = Alatro +Arol = Arol +Brass = Laton +Bronze = Bronce +Carbon Steel = Acero al Carbono +Cast Iron = Hierro Fundido +Chromium = Cromo +Coal = Carbon +Copper = Cobre +Gold = Oro +Mithril = Mitrilo +Silver = Plata +Stainless Steel = Acero Inoxidable +Talinite = Talinita +Tin = Estanio +Wrought Iron = Hierro Forjado +Zinc = Zinc +%.1f%%-Fissile Uranium = + +## Tools +RE Battery = +Water Can = Bidon de Agua +Lava Can = Bidon de Lava +Chainsaw = Motosierra +Flashlight = Linterna +3 nodes deep. = 3 nodos de profundo. +3 nodes tall. = 3 nodos de alto. +3 nodes wide. = 3 nodos de ancho. +3x3 nodes. = 3x3 nodos. +Use while sneaking to change Mining Drill Mk%d modes. = Manten pulsado Mayus y Usar para cambiar el modo del Taladro de Mineria Mk%d. +Mining Drill Mk%d Mode %d = Taladro de Mineria Mk%d Modo %d +Mining Drill Mk%d = Taladro de Mineria Mk%d +Mining Laser Mk%d = Laser de Mineria Mk%d +Single node. = Nodo simple. +Sonic Screwdriver = Destonillador Sonico +Tree Tap = Grifo de Arbol + +## Craft descriptions +Alloy cooking = +Grinding = +Compressing = +Extracting = diff --git a/mods/technic-master/technic/locale/it.txt b/mods/technic-master/technic/locale/it.txt new file mode 100644 index 0000000..a092a53 --- /dev/null +++ b/mods/technic-master/technic/locale/it.txt @@ -0,0 +1,201 @@ + +## Misc +[Technic] Loaded in %f seconds = [Technic] caricato in %f secondi + +## Items +Silicon Wafer = Wafer di silicone +Doped Silicon Wafer = Wafer di silicone dopato +Enriched Uranium = Uranio arricchito +Uranium Fuel = Uranio Combustibile +Diamond Drill Head = Trivella diamantata +Blue Energy Crystal = Cristallo energetico blu +Green Energy Crystal = Cristallo energetico verde +Red Energy Crystal = Cristallo energetico rosso +Fine Copper Wire = Filo di rame fine +Copper Coil = Bobina di rame +Electric Motor = Motore elettrico +Low Voltage Transformer = Trasformatore in bassa tensione +Medium Voltage Transformer = Trasformatore in media tensione +High Voltage Transformer = Trasformatore in alta tensione +Control Logic Unit = Unità di controllo logica +Mixed Metal Ingot = Lingotto in lega ibrida +Composite Plate = Lastra composita +Copper Plate = Lastra di rame +Carbon Plate = Lastra in carbonio +Graphite = Lastra in graffite +Carbon Cloth = Fibra di carbonio +Raw Latex = Latex grezzo +Rubber Fiber = Fibra di gomma +%.1f%%-Fissile Uranium Ingot = %.1f%%-Lingotto di uranio fissile +%.1f%%-Fissile Uranium Block = %.1f%%-Blocco di uranio fissile + +## Machine misc +Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota +Inventory move disallowed due to protection = Impossibile muovere l'inventario a causa della protezione +# $1: Machine name (Includes tier) +@1 Active (@2 EU) = @1 Attivo (@2 EU) +%s Active = %s Attivo +%s Disabled = %s Disabilitato +%s Enabled = %s Abilitato +%s Idle = %s Inattivo +%s Improperly Placed = %s Piazzato impropiamente +%s Unpowered = %s Non alimentato +%s Out Of Fuel = %s senza carburante +%s Has Bad Cabling = %s ha un cablaggio scorretto +%s Has No Network = %s non è collegata +%s Finished = %s Finito +Enable/Disable = Abilita/Disabilita +Range = Raggio +Upgrade Slots = Alloggi di aggiornamento +In: = Ingresso: +Out: = Uscita: +Slot %d = Alloggio %d +Itemwise = Singolo elemento +Stackwise = pila completa +Owner: = Proprietario: +Unlocked = Non chiuso a chiave +Locked = Chiuso a chiave +Radius: = Raggio: +Enabled = Abilitato +Disabled = Disabilitato + +## Machine names +# $1: Tier +%s Alloy Furnace = %s Fornace per leghe +%s Battery Box = %s Box batterie +%s Cable = Cavo %s +%s CNC Machine = Tornio CNC %s +%s Compressor = Compressore %s +%s Extractor = Estrattore %s +%s Forcefield Emitter = Emettitore di campo di forza %s +%s Furnace = %s Fornace +%s Grinder = %s Tritatutto +%s Music Player = Music Player %s +%s Quarry = Cava %s +%s Tool Workshop = Officina per attrezzi %s +Arrayed Solar %s Generator = %s Pannello Solare +Fuel-Fired %s Generator = %s Generatore a carbone +Geothermal %s Generator = %s Generatore Geotermico +Hydro %s Generator = Turbina Elettrica %s +Nuclear %s Generator Core = Reattore nucleare %s +Small Solar %s Generator = %s Pannello solare +Wind %s Generator = %s Generatore eolico +Self-Contained Injector = Ignettore +Constructor Mk%d = Costruttore Mk%d +Frame = Cornice +Frame Motor = Cornice del motore +Template = Sagoma +Template (replacing) = Sagoma (di rimpiazzo) +Template Motor = Motore per sagome +Template Tool = Strumento per sagome +Battery Box = Box batterie +Supply Converter = Trasformatore +Switching Station = Stazione di controllo +Fuel-Fired Alloy Furnace = Fornace per leghe a carbone +Fuel-Fired Furnace = Fornace a carbone +Wind Mill Frame = Pala eolica +Forcefield = Campo di forza +Nuclear Reactor Rod Compartment = Compartimento combustibile nucleare +Administrative World Anchor = Ancora-mondo amministrativa + +## Machine-specific +# $1: Pruduced EU +Charge = Carica +Discharge = Scarica +Power level = Livello di potenza +# $1: Tier $2: current_charge $3: max_charge +@1 Battery Box: @2/@3 = @1 Box Batterie: @2/@3 +# $1: Machine name $2: Supply $3: Demand +@1. Supply: @2 Demand: @3 = @1. Prodotto: @2 Consumato: @3 +Production at %d%% = Produzione a %d%% +Choose Milling Program: = Scegliere un programma di Fresatura +Slim Elements half / normal height: = Metà elementi sottili / altezza normale: +Current track %s = Traccia corrente %s +Stopped = Fermato +Keeping %d/%d map blocks loaded = Mantenimento di %d/%d blocchi mappa caricati +Digging not started = Scavo non iniziato +Digging finished = Scavo finito +Digging %d m above machine = Scavo di %d m sopra la macchina +Digging %d m below machine = Scavo di %d m sotto la macchina + +## CNC +Cylinder = Cilindro +Element Cross = Elemento a croce +Element Cross Double = Elemento a croce doppio +Element Edge = Elemento bordo +Element Edge Double = Elemento bordo doppio +Element End = Elemento finale +Element End Double = Elemento finale doppio +Element Straight = Elemento dritto +Element Straight Double = Elemento dritto doppio +Element T = Elemento a T +Element T Double = Elemento a T doppio +Horizontal Cylinder = Cilindro orizzontale +One Curved Edge Block = Blocco con bordo curvo +Pyramid = Piramide +Slope = Inclinato +Slope Edge = Bordo inclinato +Slope Inner Edge = Bordo interno inclinato +Slope Lying = Pendenza bugiarda +Slope Upside Down = Pendenza capovolta +Slope Upside Down Edge = Bordo inclinato capovolto +Slope Upside Down Inner Edge = Bordo interno inclinato capovolto +Sphere = Sfera +Spike = Spuntone +Stick = Bastone +Two Curved Edge Block = Blocco con bordo a doppia curva +Brick = Mattone +Cobble = Ciottolato +Dirt = Terra +Leaves = Foglie +Sandstone = Arenaria +Stone = Pietra +Tree = Albero +Wooden = Legno + +## Grinder Recipes +# $1: Name +%s Dust = Polvere di %s +Akalin = Alcalino +Alatro = Alatro +Arol = Arol +Brass = Ottone +Bronze = Bronzo +Carbon Steel = Acciaio al Carbonio +Cast Iron = Ghisa +Chromium = Cromo +Coal = Carbone +Copper = Rame +Gold = Oro +Mithril = Mithril +Silver = Argento +Stainless Steel = Acciaio Inossidabile +Talinite = Talinite +Tin = Stagno +Wrought Iron = Ferro Battuto +Zinc = Zinco +%.1f%%-Fissile Uranium = %.1f%%-Uranio fissile + +## Tools +RE Battery = Batteria RE +Water Can = Serbatoio d'acqua +Lava Can = Serbatoio di lava +Chainsaw = Motosega +Flashlight = Torcia +3 nodes deep. = 3 nodi in profondità. +3 nodes tall. = 3 nodi in altezza. +3 nodes wide. = 3 nodi in larghezza. +3x3 nodes. = 3x3 nodi. +Use while sneaking to change Mining Drill Mk%d modes. = Premi shift (freccia grossa) e usa per cambiare modalità nella trivella da miniera Mk%d. +Mining Drill Mk%d Mode %d = Trivella mk%d in modalità %d +Mining Drill Mk%d = Trivella da miniera mk%d +Mining Laser Mk%d = Laser da miniera mk%d +Single node. = Nodo singolo. +Sonic Screwdriver = Cacciavite sonico +Tree Tap = Batti albero + +## Craft descriptions +Alloy cooking = Cottura lege +Grinding = Macinazione +Compressing = Compressione +Extracting = Estrazione diff --git a/mods/technic-master/technic/locale/template.txt b/mods/technic-master/technic/locale/template.txt new file mode 100644 index 0000000..0464241 --- /dev/null +++ b/mods/technic-master/technic/locale/template.txt @@ -0,0 +1,211 @@ +# template.txt +# Template for translations of Technic + + +## Misc +[Technic] Loaded in %f seconds = + +## Items +Silicon Wafer = +Doped Silicon Wafer = +Enriched Uranium = +Uranium Fuel = +Diamond Drill Head = +Blue Energy Crystal = +Green Energy Crystal = +Red Energy Crystal = +Fine Copper Wire = +Copper Coil = +Electric Motor = +Low Voltage Transformer = +Medium Voltage Transformer = +High Voltage Transformer = +Control Logic Unit = +Mixed Metal Ingot = +Composite Plate = +Copper Plate = +Carbon Plate = +Graphite = +Carbon Cloth = +Raw Latex = +Rubber Fiber = +%.1f%%-Fissile Uranium Ingot = +%.1f%%-Fissile Uranium Block = + +## Machine misc +Machine cannot be removed because it is not empty = +Inventory move disallowed due to protection = +# $1: Machine name (Includes tier) +@1 Active (@2 EU) = +%s Active = +%s Disabled = +%s Enabled = +%s Idle = +%s Improperly Placed = +%s is empty = +%s Unpowered = +%s Out Of Fuel = +%s Has Bad Cabling = +%s (Slave) = +%s Has No Network = +%s Finished = +Enable/Disable = +Range = +Upgrade Slots = +In: = +Out: = +Slot %d = +Itemwise = +Stackwise = +Ignoring Mesecon Signal = +Controlled by Mesecon Signal = +Owner: = +Unlocked = +Locked = +Radius: = +Enabled = +Disabled = + +## Machine names +# $1: Tier +%s Alloy Furnace = +%s Battery Box = +%s Cable = +%s CNC Machine = +%s Centrifuge = +%s Compressor = +%s Extractor = +%s Forcefield Emitter = +%s Furnace = +%s Grinder = +%s Music Player = +%s Quarry = +%s Tool Workshop = +Arrayed Solar %s Generator = +Fuel-Fired %s Generator = +Geothermal %s Generator = +Hydro %s Generator = +Nuclear %s Generator Core = +Small Solar %s Generator = +Wind %s Generator = +Self-Contained Injector = +Constructor Mk%d = +Frame = +Frame Motor = +Template = +Template (replacing) = +Template Motor = +Template Tool = +Battery Box = +Supply Converter = +Switching Station = +Fuel-Fired Alloy Furnace = +Fuel-Fired Furnace = +Wind Mill Frame = +Forcefield = +Nuclear Reactor Rod Compartment = +Administrative World Anchor = + +## Machine-specific +# $1: Pruduced EU +Charge = +Discharge = +Power level = +# $1: Tier $2: current_charge $3: max_charge +@1 Battery Box: @2/@3 = +# $1: Machine name $2: Supply $3: Demand +@1. Supply: @2 Demand: @3 = +Production at %d%% = +Choose Milling Program: = +Slim Elements half / normal height: = +Current track %s = +Stopped = +Keeping %d/%d map blocks loaded = +Digging not started = +Digging finished = +Digging %d m above machine = +Digging %d m below machine = +@1 (@2 @3 -> @4 @5) = + +## CNC +Cylinder = +Element Cross = +Element Cross Double = +Element Edge = +Element Edge Double = +Element End = +Element End Double = +Element Straight = +Element Straight Double = +Element T = +Element T Double = +Horizontal Cylinder = +One Curved Edge Block = +Pyramid = +Slope = +Slope Edge = +Slope Inner Edge = +Slope Lying = +Slope Upside Down = +Slope Upside Down Edge = +Slope Upside Down Inner Edge = +Sphere = +Spike = +Stick = +Two Curved Edge Block = +Brick = +Cobble = +Dirt = +Leaves = +Sandstone = +Stone = +Tree = +Wooden = + +## Grinder Recipes +# $1: Name +%s Dust = +Akalin = +Alatro = +Arol = +Brass = +Bronze = +Carbon Steel = +Cast Iron = +Chromium = +Coal = +Copper = +Gold = +Mithril = +Silver = +Stainless Steel = +Talinite = +Tin = +Wrought Iron = +Zinc = +%.1f%%-Fissile Uranium = + +## Tools +RE Battery = +Water Can = +Lava Can = +Chainsaw = +Flashlight = +3 nodes deep. = +3 nodes tall. = +3 nodes wide. = +3x3 nodes. = +Use while sneaking to change Mining Drill Mk%d modes. = +Mining Drill Mk%d Mode %d = +Mining Drill Mk%d = +Mining Laser Mk%d = +Single node. = +Sonic Screwdriver = +Tree Tap = + +## Craft descriptions +Alloy cooking = +Grinding = +Compressing = +Extracting = +Separating = diff --git a/mods/technic-master/technic/machines/HV/battery_box.lua b/mods/technic-master/technic/machines/HV/battery_box.lua new file mode 100644 index 0000000..89c65da --- /dev/null +++ b/mods/technic-master/technic/machines/HV/battery_box.lua @@ -0,0 +1,22 @@ +-- HV battery box + +minetest.register_craft({ + output = 'technic:hv_battery_box0', + recipe = { + {'technic:mv_battery_box0', 'technic:mv_battery_box0', 'technic:mv_battery_box0'}, + {'technic:mv_battery_box0', 'technic:hv_transformer', 'technic:mv_battery_box0'}, + {'', 'technic:hv_cable', ''}, + } +}) + +technic.register_battery_box({ + tier = "HV", + max_charge = 1000000, + charge_rate = 100000, + discharge_rate = 400000, + charge_step = 10000, + discharge_step = 40000, + upgrade = 1, + tube = 1, +}) + diff --git a/mods/technic-master/technic/machines/HV/cables.lua b/mods/technic-master/technic/machines/HV/cables.lua new file mode 100644 index 0000000..0b86a23 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/HV/forcefield.lua b/mods/technic-master/technic/machines/HV/forcefield.lua new file mode 100644 index 0000000..157dc33 --- /dev/null +++ b/mods/technic-master/technic/machines/HV/forcefield.lua @@ -0,0 +1,378 @@ +--- Forcefield generator. +-- @author ShadowNinja +-- +-- Forcefields are powerful barriers but they consume huge amounts of power. +-- The forcefield Generator is an HV machine. + +-- How expensive is the generator? +-- Leaves room for upgrades lowering the power drain? +local digilines_path = minetest.get_modpath("digilines") + +local forcefield_power_drain = 10 + +local S = technic.getter + +local cable_entry = "^technic_cable_connection_overlay.png" + +minetest.register_craft({ + output = "technic:forcefield_emitter_off", + recipe = { + {"default:mese", "technic:motor", "default:mese" }, + {"technic:deployer_off", "technic:machine_casing", "technic:deployer_off"}, + {"default:mese", "technic:hv_cable", "default:mese" }, + } +}) + + +local replaceable_cids = {} + +minetest.after(0, function() + for name, ndef in pairs(minetest.registered_nodes) do + if ndef.buildable_to == true and name ~= "ignore" then + replaceable_cids[minetest.get_content_id(name)] = true + end + end +end) + + +-- Idea: Let forcefields have different colors by upgrade slot. +-- Idea: Let forcefields add up by detecting if one hits another. +-- ___ __ +-- / \/ \ +-- | | +-- \___/\___/ + +local function update_forcefield(pos, meta, active, first) + local shape = meta:get_int("shape") + local range = meta:get_int("range") + local vm = VoxelManip() + local MinEdge, MaxEdge = vm:read_from_map(vector.subtract(pos, range), + vector.add(pos, range)) + local area = VoxelArea:new({MinEdge = MinEdge, MaxEdge = MaxEdge}) + local data = vm:get_data() + + local c_air = minetest.get_content_id("air") + local c_field = minetest.get_content_id("technic:forcefield") + + for z = -range, range do + for y = -range, range do + local vi = area:index(pos.x + (-range), pos.y + y, pos.z + z) + for x = -range, range do + local relevant + if shape == 0 then + local squared = x * x + y * y + z * z + relevant = + squared <= range * range + range and + squared >= (range - 1) * (range - 1) + (range - 1) + else + relevant = + x == -range or x == range or + y == -range or y == range or + z == -range or z == range + end + if relevant then + local cid = data[vi] + if active and replaceable_cids[cid] then + data[vi] = c_field + elseif not active and cid == c_field then + data[vi] = c_air + end + end + vi = vi + 1 + end + end + end + + vm:set_data(data) + vm:update_liquids() + vm:write_to_map() + -- update_map is very slow, but if we don't call it we'll + -- get phantom blocks on the client. + if not active or first then + vm:update_map() + end +end + +local function set_forcefield_formspec(meta) + local formspec + if digilines_path then + formspec = "size[5,3.25]".. + "field[0.3,3;5,1;channel;Digiline Channel;"..meta:get_string("channel").."]" + else + formspec = "size[5,2.25]" + end + formspec = formspec.. + "field[0.3,0.5;2,1;range;"..S("Range")..";"..meta:get_int("range").."]" + -- 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("shape") == 0 then + formspec = formspec.."button[3,0.2;2,1;shape1;"..S("Sphere").."]" + else + formspec = formspec.."button[3,0.2;2,1;shape0;"..S("Cube").."]" + end + 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("%s Forcefield Emitter"):format("HV")).."]" + else + formspec = formspec.."button[0,1.75;5,1;disable;"..S("%s Enabled"):format(S("%s Forcefield Emitter"):format("HV")).."]" + end + meta:set_string("formspec", formspec) +end + +local forcefield_receive_fields = function(pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + local range = nil + if fields.range then + range = tonumber(fields.range) or 0 + -- Smallest field is 5. Anything less is asking for trouble. + -- Largest is 20. It is a matter of pratical node handling. + -- At the maximim range updating the forcefield takes about 0.2s + range = math.max(range, 5) + range = math.min(range, 20) + if range == meta:get_int("range") then range = nil end + end + if fields.shape0 or fields.shape1 or range then + update_forcefield(pos, meta, false) + end + if range then meta:set_int("range", range) end + if fields.channel then meta:set_string("channel", fields.channel) end + if fields.shape0 then meta:set_int("shape", 0) end + if fields.shape1 then meta:set_int("shape", 1) 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_forcefield_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 + local msgt = type(msg) + if msgt == "string" then + local smsg = msg:lower() + msg = {} + if smsg == "get" then + msg.command = "get" + elseif smsg == "off" then + msg.command = "off" + elseif smsg == "on" then + msg.command = "on" + elseif smsg == "toggle" then + msg.command = "toggle" + elseif smsg:sub(1, 5) == "range" then + msg.command = "range" + msg.value = tonumber(smsg:sub(7)) + elseif smsg:sub(1, 5) == "shape" then + msg.command = "shape" + msg.value = smsg:sub(7):lower() + msg.value = tonumber(msg.value) or msg.value + end + elseif msgt ~= "table" then + return + end + if msg.command == "get" then + digilines.receptor_send(pos, digilines.rules.default, channel, { + enabled = meta:get_int("enabled"), + range = meta:get_int("range"), + shape = meta:get_int("shape") + }) + return + elseif msg.command == "off" then + meta:set_int("enabled", 0) + elseif msg.command == "on" then + meta:set_int("enabled", 1) + elseif msg.command == "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.command == "range" then + if type(msg.value) ~= "number" then + return + end + msg.value = math.max(msg.value, 5) + msg.value = math.min(msg.value, 20) + update_forcefield(pos, meta, false) + meta:set_int("range", msg.value) + elseif msg.command == "shape" then + local valuet = type(msg.value) + if valuet == "string" then + if msg.value == "sphere" then + msg.value = 0 + elseif msg.value == "cube" then + msg.value = 1 + end + elseif valuet ~= "number" then + return + end + if not msg.value then + return + end + update_forcefield(pos, meta, false) + meta:set_int("shape", msg.value) + else + return + end + set_forcefield_formspec(meta) + end + }, +} + +local function run(pos, node) + local meta = minetest.get_meta(pos) + local eu_input = meta:get_int("HV_EU_input") + local enabled = meta:get_int("enabled") ~= 0 and + (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0) + local machine_name = S("%s Forcefield Emitter"):format("HV") + + local range = meta:get_int("range") + local power_requirement + if meta:get_int("shape") == 0 then + power_requirement = math.floor(4 * math.pi * range * range) + else + power_requirement = 24 * range * range + end + power_requirement = power_requirement * forcefield_power_drain + + if not enabled then + if node.name == "technic:forcefield_emitter_on" then + update_forcefield(pos, meta, false) + technic.swap_node(pos, "technic:forcefield_emitter_off") + meta:set_string("infotext", S("%s Disabled"):format(machine_name)) + end + meta:set_int("HV_EU_demand", 0) + return + end + meta:set_int("HV_EU_demand", power_requirement) + if eu_input < power_requirement then + meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) + if node.name == "technic:forcefield_emitter_on" then + update_forcefield(pos, meta, false) + technic.swap_node(pos, "technic:forcefield_emitter_off") + end + elseif eu_input >= power_requirement then + local first = false + if node.name == "technic:forcefield_emitter_off" then + first = true + technic.swap_node(pos, "technic:forcefield_emitter_on") + meta:set_string("infotext", S("%s Active"):format(machine_name)) + end + update_forcefield(pos, meta, true, first) + end +end + +minetest.register_node("technic:forcefield_emitter_off", { + description = S("%s Forcefield Emitter"):format("HV"), + tiles = { + "technic_forcefield_emitter_off.png", + "technic_machine_bottom.png"..cable_entry, + "technic_forcefield_emitter_off.png", + "technic_forcefield_emitter_off.png", + "technic_forcefield_emitter_off.png", + "technic_forcefield_emitter_off.png" + }, + groups = {cracky = 1, technic_machine = 1, technic_hv = 1}, + on_receive_fields = forcefield_receive_fields, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("HV_EU_input", 0) + meta:set_int("HV_EU_demand", 0) + meta:set_int("range", 10) + meta:set_int("enabled", 0) + meta:set_int("mesecon_mode", 0) + meta:set_int("mesecon_effect", 0) + if digilines_path then + meta:set_string("channel", "forcefield"..minetest.pos_to_string(pos)) + end + meta:set_string("infotext", S("%s Forcefield Emitter"):format("HV")) + set_forcefield_formspec(meta) + end, + mesecons = mesecons, + digiline = digiline_def, + technic_run = run, +}) + +minetest.register_node("technic:forcefield_emitter_on", { + description = S("%s Forcefield Emitter"):format("HV"), + tiles = { + "technic_forcefield_emitter_on.png", + "technic_machine_bottom.png"..cable_entry, + "technic_forcefield_emitter_on.png", + "technic_forcefield_emitter_on.png", + "technic_forcefield_emitter_on.png", + "technic_forcefield_emitter_on.png" + }, + groups = {cracky = 1, technic_machine = 1, technic_hv = 1, + not_in_creative_inventory=1}, + drop = "technic:forcefield_emitter_off", + on_receive_fields = forcefield_receive_fields, + on_destruct = function(pos) + local meta = minetest.get_meta(pos) + update_forcefield(pos, meta, false) + end, + mesecons = mesecons, + digiline = digiline_def, + technic_run = run, + technic_on_disable = function (pos, node) + local meta = minetest.get_meta(pos) + update_forcefield(pos, meta, false) + technic.swap_node(pos, "technic:forcefield_emitter_off") + end, + on_blast = function(pos, intensity) + minetest.dig_node(pos) + return {"technic:forcefield_emitter_off"} + end, +}) + +minetest.register_node("technic:forcefield", { + description = S("%s Forcefield"):format("HV"), + sunlight_propagates = true, + drawtype = "glasslike", + groups = {not_in_creative_inventory=1}, + paramtype = "light", + light_source = default.LIGHT_MAX, + diggable = false, + drop = '', + tiles = {{ + name = "technic_forcefield_animated.png", + animation = { + type = "vertical_frames", + aspect_w = 16, + aspect_h = 16, + length = 1.0, + }, + }}, + on_blast = function(pos, intensity) + end, +}) + + +if minetest.get_modpath("mesecons_mvps") then + mesecon.register_mvps_stopper("technic:forcefield") +end + +technic.register_machine("HV", "technic:forcefield_emitter_on", technic.receiver) +technic.register_machine("HV", "technic:forcefield_emitter_off", technic.receiver) + diff --git a/mods/technic-master/technic/machines/HV/generator.lua b/mods/technic-master/technic/machines/HV/generator.lua new file mode 100644 index 0000000..3fb494b --- /dev/null +++ b/mods/technic-master/technic/machines/HV/generator.lua @@ -0,0 +1,13 @@ +minetest.register_alias("hv_generator", "technic:hv_generator") + +minetest.register_craft({ + output = 'technic:hv_generator', + recipe = { + {'technic:carbon_plate', 'technic:mv_generator', 'technic:composite_plate'}, + {'pipeworks:tube_1', 'technic:hv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:hv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_generator({tier="HV", tube=1, supply=1200}) + diff --git a/mods/technic-master/technic/machines/HV/init.lua b/mods/technic-master/technic/machines/HV/init.lua new file mode 100644 index 0000000..391590b --- /dev/null +++ b/mods/technic-master/technic/machines/HV/init.lua @@ -0,0 +1,18 @@ + +technic.register_tier("HV", "High Voltage") + +local path = technic.modpath.."/machines/HV" + +-- Wiring stuff +dofile(path.."/cables.lua") +dofile(path.."/battery_box.lua") + +-- Generators +dofile(path.."/solar_array.lua") +dofile(path.."/nuclear_reactor.lua") +dofile(path.."/generator.lua") + +-- Machines +--dofile(path.."/quarry.lua") +--dofile(path.."/forcefield.lua") + diff --git a/mods/technic-master/technic/machines/HV/nuclear_reactor.lua b/mods/technic-master/technic/machines/HV/nuclear_reactor.lua new file mode 100644 index 0000000..231b6b3 --- /dev/null +++ b/mods/technic-master/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-master/technic/machines/HV/quarry.lua b/mods/technic-master/technic/machines/HV/quarry.lua new file mode 100644 index 0000000..86ca395 --- /dev/null +++ b/mods/technic-master/technic/machines/HV/quarry.lua @@ -0,0 +1,269 @@ + +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} + -- doors mod among other thing does NOT like a nil digger... + local fakedigger = { + get_player_name = function() + return "!technic_quarry_fake_digger" + end, + is_player = function() return false end, + get_wielded_item = function() + return ItemStack("air") + end, + } + if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, fakedigger)) 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/technic-master/technic/machines/HV/solar_array.lua b/mods/technic-master/technic/machines/HV/solar_array.lua new file mode 100644 index 0000000..c7de7c8 --- /dev/null +++ b/mods/technic-master/technic/machines/HV/solar_array.lua @@ -0,0 +1,14 @@ +-- The high voltage solar array is an assembly of medium voltage arrays. +-- Solar arrays are not able to store large amounts of energy. + +minetest.register_craft({ + output = 'technic:solar_array_hv 1', + recipe = { + {'technic:solar_array_mv', 'technic:solar_array_mv', 'technic:solar_array_mv'}, + {'technic:carbon_plate', 'technic:hv_transformer', 'technic:composite_plate'}, + {'', 'technic:hv_cable', ''}, + } +}) + +technic.register_solar_array({tier="HV", power=100}) + diff --git a/mods/technic-master/technic/machines/LV/alloy_furnace.lua b/mods/technic-master/technic/machines/LV/alloy_furnace.lua new file mode 100644 index 0000000..5e4f7c4 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/alloy_furnace.lua @@ -0,0 +1,14 @@ +-- LV Alloy furnace + +-- FIXME: kpoppel: I'd like to introduce an induction heating element here... +minetest.register_craft({ + output = 'technic:lv_alloy_furnace', + recipe = { + {'default:brick', 'default:brick', 'default:brick'}, + {'default:brick', 'technic:machine_casing', 'default:brick'}, + {'default:brick', 'technic:lv_cable', 'default:brick'}, + } +}) + +technic.register_alloy_furnace({tier = "LV", speed = 1, demand = {300}}) + diff --git a/mods/technic-master/technic/machines/LV/battery_box.lua b/mods/technic-master/technic/machines/LV/battery_box.lua new file mode 100644 index 0000000..bf7f846 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/battery_box.lua @@ -0,0 +1,20 @@ +-- LV Battery box + +minetest.register_craft({ + output = 'technic:lv_battery_box0', + recipe = { + {'group:wood', 'group:wood', 'group:wood'}, + {'technic:battery', 'technic:machine_casing', 'technic:battery'}, + {'technic:battery', 'technic:lv_cable', 'technic:battery'}, + } +}) + +technic.register_battery_box({ + tier = "LV", + max_charge = 40000, + charge_rate = 1000, + discharge_rate = 4000, + charge_step = 500, + discharge_step = 800, +}) + diff --git a/mods/technic-master/technic/machines/LV/cables.lua b/mods/technic-master/technic/machines/LV/cables.lua new file mode 100644 index 0000000..d4ed880 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/LV/cnc.lua b/mods/technic-master/technic/machines/LV/cnc.lua new file mode 100644 index 0000000..fdfec99 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/cnc.lua @@ -0,0 +1,230 @@ +-- Technic CNC v1.0 by kpoppel +-- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck + +-- Idea: +-- Somehow have a tabbed/paged panel if the number of shapes should expand +-- beyond what is available in the panel today. +-- I could imagine some form of API allowing modders to come with their own node +-- box definitions and easily stuff it in the this machine for production. + +local S = technic.getter + + +minetest.register_craft({ + output = 'technic:cnc', + recipe = { + {'default:glass', 'technic:diamond_drill_head', 'default:glass'}, + {'technic:control_logic_unit', 'technic:machine_casing', 'technic:motor'}, + {'technic:carbon_steel_ingot', 'technic:lv_cable', 'technic:carbon_steel_ingot'}, + }, +}) + + +local shape = {} +local onesize_products = { + slope = 2, + slope_edge = 1, + slope_inner_edge = 1, + pyramid = 2, + spike = 1, + cylinder = 2, + oblate_spheroid = 1, + sphere = 1, + stick = 8, + slope_upsdown = 2, + slope_edge_upsdown = 1, + slope_inner_edge_upsdown = 1, + cylinder_horizontal = 2, + slope_lying = 2, + onecurvededge = 1, + twocurvededge = 1, +} +local twosize_products = { + element_straight = 4, + element_end = 2, + element_cross = 1, + element_t = 1, + element_edge = 2, +} + +local cnc_formspec = + "size[9,11;]".. + "label[1,0;"..S("Choose Milling Program:").."]".. + "image_button[1,0.5;1,1;technic_cnc_slope.png;slope; ]".. + "image_button[2,0.5;1,1;technic_cnc_slope_edge.png;slope_edge; ]".. + "image_button[3,0.5;1,1;technic_cnc_slope_inner_edge.png;slope_inner_edge; ]".. + "image_button[4,0.5;1,1;technic_cnc_pyramid.png;pyramid; ]".. + "image_button[5,0.5;1,1;technic_cnc_spike.png;spike; ]".. + "image_button[6,0.5;1,1;technic_cnc_cylinder.png;cylinder; ]".. + "image_button[7,0.5;1,1;technic_cnc_oblate_spheroid.png;oblate_spheroid; ]".. + "image_button[8,0.5;1,1;technic_cnc_stick.png;stick; ]".. + + "image_button[1,1.5;1,1;technic_cnc_slope_upsdwn.png;slope_upsdown; ]".. + "image_button[2,1.5;1,1;technic_cnc_slope_edge_upsdwn.png;slope_edge_upsdown; ]".. + "image_button[3,1.5;1,1;technic_cnc_slope_inner_edge_upsdwn.png;slope_inner_edge_upsdown; ]".. + "image_button[4,1.5;1,1;technic_cnc_cylinder_horizontal.png;cylinder_horizontal; ]".. + "image_button[5,1.5;1,1;technic_cnc_sphere.png;sphere; ]".. + + "image_button[1,2.5;1,1;technic_cnc_slope_lying.png;slope_lying; ]".. + "image_button[2,2.5;1,1;technic_cnc_onecurvededge.png;onecurvededge; ]".. + "image_button[3,2.5;1,1;technic_cnc_twocurvededge.png;twocurvededge; ]".. + + "label[1,3.5;"..S("Slim Elements half / normal height:").."]".. + + "image_button[1,4;1,0.5;technic_cnc_full.png;full; ]".. + "image_button[1,4.5;1,0.5;technic_cnc_half.png;half; ]".. + "image_button[2,4;1,1;technic_cnc_element_straight.png;element_straight; ]".. + "image_button[3,4;1,1;technic_cnc_element_end.png;element_end; ]".. + "image_button[4,4;1,1;technic_cnc_element_cross.png;element_cross; ]".. + "image_button[5,4;1,1;technic_cnc_element_t.png;element_t; ]".. + "image_button[6,4;1,1;technic_cnc_element_edge.png;element_edge; ]".. + + "label[0, 5.5;"..S("In:").."]".. + "list[current_name;src;0.5,5.5;1,1;]".. + "label[4, 5.5;"..S("Out:").."]".. + "list[current_name;dst;5,5.5;4,1;]".. + + "list[current_player;main;0,7;8,4;]".. + "listring[current_name;dst]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]" + +local size = 1; + +-- The form handler is declared here because we need it in both the inactive and active modes +-- in order to be able to change programs wile it is running. +local function form_handler(pos, formname, fields, sender) + -- REGISTER MILLING PROGRAMS AND OUTPUTS: + ------------------------------------------ + -- Program for half/full size + if fields["full"] then + size = 1 + return + end + + if fields["half"] then + size = 2 + return + end + + -- Resolve the node name and the number of items to make + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local inputstack = inv:get_stack("src", 1) + local inputname = inputstack:get_name() + local multiplier = 0 + for k, _ in pairs(fields) do + -- Set a multipier for the half/full size capable blocks + if twosize_products[k] ~= nil then + multiplier = size * twosize_products[k] + else + multiplier = onesize_products[k] + end + + if onesize_products[k] ~= nil or twosize_products[k] ~= nil then + meta:set_float( "cnc_multiplier", multiplier) + meta:set_string("cnc_user", sender:get_player_name()) + end + + if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then + meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k) + --print(inputname .. "_technic_cnc_" .. k) + break + end + + if twosize_products[k] ~= nil and size==1 then + meta:set_string("cnc_product", inputname .. "_technic_cnc_" .. k .. "_double") + --print(inputname .. "_technic_cnc_" .. k .. "_double") + break + end + end + return +end + +-- Action code performing the transformation +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local eu_input = meta:get_int("LV_EU_input") + local machine_name = S("%s CNC Machine"):format("LV") + local machine_node = "technic:cnc" + local demand = 450 + + local result = meta:get_string("cnc_product") + if inv:is_empty("src") or + (not minetest.registered_nodes[result]) or + (not inv:room_for_item("dst", result)) then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_string("cnc_product", "") + meta:set_int("LV_EU_demand", 0) + return + end + + if eu_input < demand then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) + elseif eu_input >= demand then + technic.swap_node(pos, machine_node.."_active") + meta:set_string("infotext", S("%s Active"):format(machine_name)) + meta:set_int("src_time", meta:get_int("src_time") + 1) + if meta:get_int("src_time") >= 3 then -- 3 ticks per output + meta:set_int("src_time", 0) + srcstack = inv:get_stack("src", 1) + srcstack:take_item() + inv:set_stack("src", 1, srcstack) + inv:add_item("dst", result.." "..meta:get_int("cnc_multiplier")) + end + end + meta:set_int("LV_EU_demand", demand) +end + +-- The actual block inactive state +minetest.register_node("technic:cnc", { + description = S("%s CNC Machine"):format("LV"), + tiles = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png", + "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"}, + groups = {cracky=2, technic_machine=1, technic_lv=1}, + connect_sides = {"bottom", "back", "left", "right"}, + paramtype2 = "facedir", + legacy_facedir_simple = true, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s CNC Machine"):format("LV")) + meta:set_float("technic_power_machine", 1) + meta:set_string("formspec", cnc_formspec) + local inv = meta:get_inventory() + inv:set_size("src", 1) + 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, + on_receive_fields = form_handler, + technic_run = run, +}) + +-- Active state block +minetest.register_node("technic:cnc_active", { + description = S("%s CNC Machine"):format("LV"), + tiles = {"technic_cnc_top_active.png", "technic_cnc_bottom.png", "technic_cnc_side.png", + "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front_active.png"}, + groups = {cracky=2, technic_machine=1, technic_lv=1, not_in_creative_inventory=1}, + connect_sides = {"bottom", "back", "left", "right"}, + paramtype2 = "facedir", + drop = "technic:cnc", + legacy_facedir_simple = true, + 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, + on_receive_fields = form_handler, + technic_run = run, + technic_disabled_machine_name = "technic:cnc", +}) + +technic.register_machine("LV", "technic:cnc", technic.receiver) +technic.register_machine("LV", "technic:cnc_active", technic.receiver) + diff --git a/mods/technic-master/technic/machines/LV/cnc_api.lua b/mods/technic-master/technic/machines/LV/cnc_api.lua new file mode 100644 index 0000000..f5aae5c --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/LV/cnc_nodes.lua b/mods/technic-master/technic/machines/LV/cnc_nodes.lua new file mode 100644 index 0000000..05be9af --- /dev/null +++ b/mods/technic-master/technic/machines/LV/cnc_nodes.lua @@ -0,0 +1,91 @@ +-- REGISTER MATERIALS AND PROPERTIES FOR NONCUBIC ELEMENTS: +----------------------------------------------------------- + +local S = technic.getter + +-- DIRT +------- +technic.cnc.register_all("default:dirt", + {snappy=2,choppy=2,oddly_breakable_by_hand=3,not_in_creative_inventory=1}, + {"default_grass.png", "default_dirt.png", "default_grass.png"}, + S("Dirt")) +-- WOOD +------- +technic.cnc.register_all("default:wood", + {snappy=2, choppy=2, oddly_breakable_by_hand=2, not_in_creative_inventory=1}, + {"default_wood.png"}, + S("Wooden")) +-- STONE +-------- +technic.cnc.register_all("default:stone", + {cracky=3, not_in_creative_inventory=1}, + {"default_stone.png"}, + S("Stone")) +-- COBBLE +--------- +technic.cnc.register_all("default:cobble", + {cracky=3, not_in_creative_inventory=1}, + {"default_cobble.png"}, + S("Cobble")) +-- BRICK +-------- +technic.cnc.register_all("default:brick", + {cracky=3, not_in_creative_inventory=1}, + {"default_brick.png"}, + S("Brick")) + +-- SANDSTONE +------------ +technic.cnc.register_all("default:sandstone", + {crumbly=2, cracky=3, not_in_creative_inventory=1}, + {"default_sandstone.png"}, + S("Sandstone")) + +-- LEAVES +--------- +technic.cnc.register_all("default:leaves", + {snappy=2, choppy=2, oddly_breakable_by_hand=3, not_in_creative_inventory=1}, + {"default_leaves.png"}, + S("Leaves")) +-- TREE +------- +technic.cnc.register_all("default:tree", + {snappy=1, choppy=2, oddly_breakable_by_hand=2, flammable=3, wood=1, not_in_creative_inventory=1}, + {"default_tree.png"}, + S("Tree")) + +-- WROUGHT IRON +--------------- +technic.cnc.register_all("default:steelblock", + {cracky=1, level=2, not_in_creative_inventory=1}, + {"technic_wrought_iron_block.png"}, + S("Wrought Iron")) + +-- Bronze +-------- +technic.cnc.register_all("default:bronzeblock", + {cracky=1, level=2, not_in_creative_inventory=1}, + {"default_bronze_block.png"}, + S("Bronze")) + +-- Stainless Steel +-------- +technic.cnc.register_all("technic:stainless_steel_block", + {cracky=1, level=2, not_in_creative_inventory=1}, + {"technic_stainless_steel_block.png"}, + S("Stainless Steel")) + +-- Marble +------------ +technic.cnc.register_all("technic:marble", + {cracky=3, not_in_creative_inventory=1}, + {"technic_marble.png"}, + S("Marble")) + +-- Granite +------------ +technic.cnc.register_all("technic:granite", + {cracky=1, not_in_creative_inventory=1}, + {"technic_granite.png"}, + S("Granite")) + diff --git a/mods/technic-master/technic/machines/LV/compressor.lua b/mods/technic-master/technic/machines/LV/compressor.lua new file mode 100644 index 0000000..67b9f79 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/compressor.lua @@ -0,0 +1,13 @@ + +minetest.register_alias("compressor", "technic:lv_compressor") + +minetest.register_craft({ + output = 'technic:lv_compressor', + recipe = { + {'default:stone', 'technic:motor', 'default:stone'}, + {'mesecons:piston', 'technic:machine_casing', 'mesecons:piston'}, + {'technic:fine_silver_wire', 'technic:lv_cable', 'technic:fine_silver_wire'}, + } +}) + +technic.register_compressor({tier = "LV", demand = {300}, speed = 1}) diff --git a/mods/technic-master/technic/machines/LV/electric_furnace.lua b/mods/technic-master/technic/machines/LV/electric_furnace.lua new file mode 100644 index 0000000..768f04a --- /dev/null +++ b/mods/technic-master/technic/machines/LV/electric_furnace.lua @@ -0,0 +1,16 @@ +-- LV Electric Furnace +-- This is a faster version of the stone furnace which runs on EUs + +-- FIXME: kpoppel I'd like to introduce an induction heating element here also +minetest.register_craft({ + output = 'technic:electric_furnace', + recipe = { + {'default:cobble', 'default:cobble', 'default:cobble'}, + {'default:cobble', 'technic:machine_casing', 'default:cobble'}, + {'default:cobble', 'technic:lv_cable', 'default:cobble'}, + } +}) + +technic.register_electric_furnace({tier="LV", demand={300}, speed = 2}) + + diff --git a/mods/technic-master/technic/machines/LV/extractor.lua b/mods/technic-master/technic/machines/LV/extractor.lua new file mode 100644 index 0000000..55d0140 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/extractor.lua @@ -0,0 +1,13 @@ + +minetest.register_alias("extractor", "technic:lv_extractor") + +minetest.register_craft({ + output = 'technic:lv_extractor', + recipe = { + {'technic:treetap', 'technic:motor', 'technic:treetap'}, + {'technic:treetap', 'technic:machine_casing', 'technic:treetap'}, + {'', 'technic:lv_cable', ''}, + } +}) + +technic.register_extractor({tier = "LV", demand = {300}, speed = 1}) diff --git a/mods/technic-master/technic/machines/LV/generator.lua b/mods/technic-master/technic/machines/LV/generator.lua new file mode 100644 index 0000000..dc9815f --- /dev/null +++ b/mods/technic-master/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-master/technic/machines/LV/geothermal.lua b/mods/technic-master/technic/machines/LV/geothermal.lua new file mode 100644 index 0000000..27f4abc --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/LV/grinder.lua b/mods/technic-master/technic/machines/LV/grinder.lua new file mode 100644 index 0000000..9e45bf4 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/grinder.lua @@ -0,0 +1,13 @@ + +minetest.register_alias("grinder", "technic:lv_grinder") +minetest.register_craft({ + output = 'technic:lv_grinder', + recipe = { + {'default:desert_stone', 'default:diamond', 'default:desert_stone'}, + {'default:desert_stone', 'technic:machine_casing', 'default:desert_stone'}, + {'technic:granite', 'technic:lv_cable', 'technic:granite'}, + } +}) + +technic.register_grinder({tier="LV", demand={200}, speed=1}) + diff --git a/mods/technic-master/technic/machines/LV/init.lua b/mods/technic-master/technic/machines/LV/init.lua new file mode 100644 index 0000000..6996439 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/init.lua @@ -0,0 +1,29 @@ + +technic.register_tier("LV", "Low Voltage") + +local path = technic.modpath.."/machines/LV" + +-- Wiring stuff +dofile(path.."/cables.lua") +dofile(path.."/battery_box.lua") + +-- Generators +dofile(path.."/solar_panel.lua") +dofile(path.."/solar_array.lua") +--dofile(path.."/geothermal.lua") +--dofile(path.."/water_mill.lua") +dofile(path.."/generator.lua") + +-- Machines +dofile(path.."/alloy_furnace.lua") +dofile(path.."/electric_furnace.lua") +dofile(path.."/grinder.lua") +dofile(path.."/extractor.lua") +dofile(path.."/compressor.lua") + +dofile(path.."/music_player.lua") + +dofile(path.."/cnc.lua") +dofile(path.."/cnc_api.lua") +dofile(path.."/cnc_nodes.lua") + diff --git a/mods/technic-master/technic/machines/LV/music_player.lua b/mods/technic-master/technic/machines/LV/music_player.lua new file mode 100644 index 0000000..262fe5f --- /dev/null +++ b/mods/technic-master/technic/machines/LV/music_player.lua @@ -0,0 +1,132 @@ +-- LV Music player. +-- The player can play music. But it is high ampage! + +local S = technic.getter + +minetest.register_alias("music_player", "technic:music_player") +minetest.register_craft({ + output = 'technic:music_player', + recipe = { + {'technic:chromium_ingot', 'default:diamond', 'technic:chromium_ingot'}, + {'default:diamond', 'technic:machine_casing', 'default:diamond'}, + {'default:mossycobble', 'technic:lv_cable', 'default:mossycobble'}, + } +}) + +local music_handles = {} + +local function play_track(pos, track) + return minetest.sound_play("technic_track"..tostring(track), + {pos = pos, gain = 1.0, loop = true, max_hear_distance = 72,}) +end + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local eu_input = meta:get_int("LV_EU_input") + local machine_name = S("%s Music Player"):format("LV") + local machine_node = "technic:music_player" + local demand = 150 + + local current_track = meta:get_int("current_track") + local pos_hash = minetest.hash_node_position(pos) + local music_handle = music_handles[pos_hash] + + -- Setup meta data if it does not exist. + if not eu_input then + meta:set_int("LV_EU_demand", demand) + meta:set_int("LV_EU_input", 0) + return + end + + if meta:get_int("active") == 0 then + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_int("LV_EU_demand", 0) + return + end + + if eu_input < demand then + meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) + if music_handle then + minetest.sound_stop(music_handle) + music_handle = nil + end + elseif eu_input >= demand then + meta:set_string("infotext", S("%s Active"):format(machine_name)) + if not music_handle then + music_handle = play_track(pos, current_track) + end + end + music_handles[pos_hash] = music_handle + meta:set_int("LV_EU_demand", demand) +end + +local function stop_player(pos, node) + local pos_hash = minetest.hash_node_position(pos) + local music_handle = music_handles[pos_hash] + if music_handle then + minetest.sound_stop(music_handle) + music_handles[pos_hash] = nil + end +end + +local function set_display(meta) + meta:set_string("formspec", + "size[4,4.5]".. + "item_image[0,0;1,1;technic:music_player]".. + "label[1,0;"..S("%s Music Player"):format("LV").."]".. + "button[0,1;1,1;track1;1]".. + "button[1,1;1,1;track2;2]".. + "button[2,1;1,1;track3;3]".. + "button[0,2;1,1;track4;4]".. + "button[1,2;1,1;track5;5]".. + "button[2,2;1,1;track6;6]".. + "button[0,3;1,1;track7;7]".. + "button[1,3;1,1;track8;8]".. + "button[2,3;1,1;track9;9]".. + "button[3,1;1,1;stop;Stop]".. + "label[0,4;"..minetest.formspec_escape( + meta:get_int("active") == 0 and + S("Stopped") or + S("Current track %s"):format(meta:get_int("current_track"))).."]") +end + +minetest.register_node("technic:music_player", { + description = S("%s Music Player"):format("LV"), + tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png", + "technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_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(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("%s Music Player"):format("LV")) + set_display(meta) + end, + on_receive_fields = function(pos, formanme, fields, sender) + local new_track = nil + if fields.stop then new_track = 0 end + if fields.track1 then new_track = 1 end + if fields.track2 then new_track = 2 end + if fields.track3 then new_track = 3 end + if fields.track4 then new_track = 4 end + if fields.track5 then new_track = 5 end + if fields.track6 then new_track = 6 end + if fields.track7 then new_track = 7 end + if fields.track8 then new_track = 8 end + if fields.track9 then new_track = 9 end + if new_track then + stop_player(pos) + local meta = minetest.get_meta(pos) + meta:set_int("active", new_track == 0 and 0 or 1) + meta:set_int("current_track", new_track) + set_display(meta) + end + end, + on_destruct = stop_player, + technic_run = run, + technic_on_disable = stop_player, +}) + +technic.register_machine("LV", "technic:music_player", technic.receiver) + diff --git a/mods/technic-master/technic/machines/LV/solar_array.lua b/mods/technic-master/technic/machines/LV/solar_array.lua new file mode 100644 index 0000000..8c1b8f4 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/solar_array.lua @@ -0,0 +1,18 @@ +-- The solar array is an assembly of panels into a powerful array +-- The assembly can deliver more energy than the individual panel because +-- of the transformer unit which converts the panel output variations into +-- a stable supply. +-- Solar arrays are not able to store large amounts of energy. +-- The LV arrays are used to make medium voltage arrays. + +minetest.register_craft({ + output = 'technic:solar_array_lv 1', + recipe = { + {'technic:solar_panel', 'technic:solar_panel', 'technic:solar_panel'}, + {'technic:carbon_steel_ingot', 'technic:lv_transformer', 'technic:carbon_steel_ingot'}, + {'', 'technic:lv_cable', ''}, + } +}) + +technic.register_solar_array({tier="LV", power=10}) + diff --git a/mods/technic-master/technic/machines/LV/solar_panel.lua b/mods/technic-master/technic/machines/LV/solar_panel.lua new file mode 100644 index 0000000..c072b13 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/solar_panel.lua @@ -0,0 +1,72 @@ +-- 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)", machine_name, + technic.EU_string(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/technic-master/technic/machines/LV/water_mill.lua b/mods/technic-master/technic/machines/LV/water_mill.lua new file mode 100644 index 0000000..5d871f0 --- /dev/null +++ b/mods/technic-master/technic/machines/LV/water_mill.lua @@ -0,0 +1,111 @@ +-- A water mill produces LV EUs by exploiting flowing water across it +-- It is a LV EU supplyer and fairly low yield (max 120EUs) +-- It is a little under half as good as the thermal generator. + +local S = technic.getter + +local cable_entry = "^technic_cable_connection_overlay.png" + +minetest.register_alias("water_mill", "technic:water_mill") + +minetest.register_craft({ + output = 'technic:water_mill', + recipe = { + {'technic:marble', 'default:diamond', 'technic:marble'}, + {'group:wood', 'technic:machine_casing', 'group:wood'}, + {'technic:marble', 'technic:lv_cable', 'technic:marble'}, + } +}) + +local function check_node_around_mill(pos) + local node = minetest.get_node(pos) + if node.name == "default:water_flowing" + or node.name == "default:river_water_flowing" then + return node.param2 -- returns approx. water flow, if any + end + return false +end + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local water_flow = 0 + local lava_nodes = 0 + local production_level = 0 + local eu_supply = 0 + local max_output = 35 * 45 -- four param2's at 15 makes 60, cap it lower for "overload protection" + -- (plus we want the gen to report 100% if three sides have full flow) + + 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, z=pos.z+1}, + {x=pos.x, y=pos.y, z=pos.z-1}, + } + + for _, p in pairs(positions) do + local check = check_node_around_mill(p) + if check then + water_flow = water_flow + check + end + end + + eu_supply = math.min(35 * water_flow, max_output) + production_level = math.floor(100 * eu_supply / max_output) + + meta:set_int("LV_EU_supply", eu_supply) + + meta:set_string("infotext", + S("Hydro %s Generator"):format("LV").." ("..production_level.."%)") + + if production_level > 0 and + minetest.get_node(pos).name == "technic:water_mill" then + technic.swap_node (pos, "technic:water_mill_active") + meta:set_int("LV_EU_supply", 0) + return + end + if production_level == 0 then + technic.swap_node(pos, "technic:water_mill") + end +end + +minetest.register_node("technic:water_mill", { + description = S("Hydro %s Generator"):format("LV"), + tiles = { + "technic_water_mill_top.png", + "technic_machine_bottom.png"..cable_entry, + "technic_water_mill_side.png", + "technic_water_mill_side.png", + "technic_water_mill_side.png", + "technic_water_mill_side.png" + }, + paramtype2 = "facedir", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + technic_machine=1, technic_lv=1}, + 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("Hydro %s Generator"):format("LV")) + meta:set_int("LV_EU_supply", 0) + end, + technic_run = run, +}) + +minetest.register_node("technic:water_mill_active", { + description = S("Hydro %s Generator"):format("LV"), + tiles = {"technic_water_mill_top_active.png", "technic_machine_bottom.png", + "technic_water_mill_side.png", "technic_water_mill_side.png", + "technic_water_mill_side.png", "technic_water_mill_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:water_mill", + technic_run = run, + technic_disabled_machine_name = "technic:water_mill", +}) + +technic.register_machine("LV", "technic:water_mill", technic.producer) +technic.register_machine("LV", "technic:water_mill_active", technic.producer) + diff --git a/mods/technic-master/technic/machines/MV/alloy_furnace.lua b/mods/technic-master/technic/machines/MV/alloy_furnace.lua new file mode 100644 index 0000000..eaddee0 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/alloy_furnace.lua @@ -0,0 +1,14 @@ +-- MV alloy furnace + +minetest.register_craft({ + output = 'technic:mv_alloy_furnace', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_alloy_furnace', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + + +technic.register_alloy_furnace({tier = "MV", speed = 1.5, upgrade = 1, tube = 1, demand = {3000, 2000, 1000}}) + diff --git a/mods/technic-master/technic/machines/MV/battery_box.lua b/mods/technic-master/technic/machines/MV/battery_box.lua new file mode 100644 index 0000000..d84ec15 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/battery_box.lua @@ -0,0 +1,22 @@ +-- MV Battery box + +minetest.register_craft({ + output = 'technic:mv_battery_box0', + recipe = { + {'technic:lv_battery_box0', 'technic:lv_battery_box0', 'technic:lv_battery_box0'}, + {'technic:lv_battery_box0', 'technic:mv_transformer', 'technic:lv_battery_box0'}, + {'', 'technic:mv_cable', ''}, + } +}) + +technic.register_battery_box({ + tier = "MV", + max_charge = 200000, + charge_rate = 20000, + discharge_rate = 80000, + charge_step = 2000, + discharge_step = 8000, + upgrade = 1, + tube = 1, +}) + diff --git a/mods/technic-master/technic/machines/MV/cables.lua b/mods/technic-master/technic/machines/MV/cables.lua new file mode 100644 index 0000000..0c1f457 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/MV/centrifuge.lua b/mods/technic-master/technic/machines/MV/centrifuge.lua new file mode 100644 index 0000000..a0aad64 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/centrifuge.lua @@ -0,0 +1,16 @@ +minetest.register_craft({ + output = "technic:mv_centrifuge", + recipe = { + {"technic:motor", "technic:copper_plate", "technic:diamond_drill_head"}, + {"technic:copper_plate", "technic:machine_casing", "technic:copper_plate" }, + {"pipeworks:one_way_tube", "technic:mv_cable", "pipeworks:mese_filter" }, + } +}) + +technic.register_centrifuge({ + tier = "MV", + demand = { 8000, 7000, 6000 }, + speed = 2, + upgrade = 1, + tube = 1, +}) diff --git a/mods/technic-master/technic/machines/MV/compressor.lua b/mods/technic-master/technic/machines/MV/compressor.lua new file mode 100644 index 0000000..d97739e --- /dev/null +++ b/mods/technic-master/technic/machines/MV/compressor.lua @@ -0,0 +1,12 @@ +-- MV compressor + +minetest.register_craft({ + output = 'technic:mv_compressor', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_compressor', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_compressor({tier = "MV", demand = {800, 600, 400}, speed = 2, upgrade = 1, tube = 1}) diff --git a/mods/technic-master/technic/machines/MV/electric_furnace.lua b/mods/technic-master/technic/machines/MV/electric_furnace.lua new file mode 100644 index 0000000..b1d2dee --- /dev/null +++ b/mods/technic-master/technic/machines/MV/electric_furnace.lua @@ -0,0 +1,18 @@ +-- MV Electric Furnace +-- This is a faster version of the stone furnace which runs on EUs +-- In addition to this it can be upgraded with microcontrollers and batteries +-- This new version uses the batteries to lower the power consumption of the machine +-- Also in addition this furnace can be attached to the pipe system from the pipeworks mod. + +-- FIXME: kpoppel I'd like to introduce an induction heating element here also +minetest.register_craft({ + output = 'technic:mv_electric_furnace', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_electric_furnace', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_electric_furnace({tier="MV", upgrade=1, tube=1, demand={2000, 1000, 500}, speed=4}) + diff --git a/mods/technic-master/technic/machines/MV/extractor.lua b/mods/technic-master/technic/machines/MV/extractor.lua new file mode 100644 index 0000000..9066bca --- /dev/null +++ b/mods/technic-master/technic/machines/MV/extractor.lua @@ -0,0 +1,12 @@ +-- MV extractor + +minetest.register_craft({ + output = 'technic:mv_extractor', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_extractor', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_extractor({tier = "MV", demand = {800, 600, 400}, speed = 2, upgrade = 1, tube = 1}) diff --git a/mods/technic-master/technic/machines/MV/generator.lua b/mods/technic-master/technic/machines/MV/generator.lua new file mode 100644 index 0000000..db9d59f --- /dev/null +++ b/mods/technic-master/technic/machines/MV/generator.lua @@ -0,0 +1,13 @@ +minetest.register_alias("generator_mv", "technic:generator_mv") + +minetest.register_craft({ + output = 'technic:mv_generator', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_generator', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_generator({tier="MV", tube=1, supply=600}) + diff --git a/mods/technic-master/technic/machines/MV/grinder.lua b/mods/technic-master/technic/machines/MV/grinder.lua new file mode 100644 index 0000000..19ab372 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/grinder.lua @@ -0,0 +1,13 @@ +-- MV grinder + +minetest.register_craft({ + output = 'technic:mv_grinder', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_grinder', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_grinder({tier="MV", demand={600, 450, 300}, speed=2, upgrade=1, tube=1}) + diff --git a/mods/technic-master/technic/machines/MV/init.lua b/mods/technic-master/technic/machines/MV/init.lua new file mode 100644 index 0000000..72a98b6 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/init.lua @@ -0,0 +1,32 @@ + +technic.register_tier("MV", "Medium Voltage") + +local path = technic.modpath.."/machines/MV" + +-- Wiring stuff +dofile(path.."/cables.lua") +dofile(path.."/battery_box.lua") + +-- Generators +if technic.config:get_bool("enable_wind_mill") then + dofile(path.."/wind_mill.lua") +end +dofile(path.."/generator.lua") +dofile(path.."/solar_array.lua") + +-- Machines +dofile(path.."/alloy_furnace.lua") +dofile(path.."/electric_furnace.lua") +dofile(path.."/grinder.lua") +dofile(path.."/extractor.lua") +dofile(path.."/compressor.lua") +dofile(path.."/centrifuge.lua") + +dofile(path.."/tool_workshop.lua") + +-- The power radiator supplies appliances with inductive coupled power: +-- Lighting and associated textures is taken directly from VanessaE's homedecor and made electric. +-- This is currently useless, slow, and mostly copied +--dofile(path.."/power_radiator.lua") +--dofile(path.."/lighting.lua") + diff --git a/mods/technic-master/technic/machines/MV/lighting.lua b/mods/technic-master/technic/machines/MV/lighting.lua new file mode 100644 index 0000000..76fcb20 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/MV/power_radiator.lua b/mods/technic-master/technic/machines/MV/power_radiator.lua new file mode 100644 index 0000000..623af34 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/power_radiator.lua @@ -0,0 +1,222 @@ +-- The power radiator fuctions like an inductive charger +-- only better in the game setting. +-- The purpose is to allow small appliances to receive power +-- without the overhead of the wiring needed for larger machines. +-- +-- The power radiator will consume power corresponding to the +-- sum(power rating of the attached appliances)/0.06 +-- Using inductive power transfer is very inefficient so this is +-- set to the factor 0.06. +-- +-- Punching the radiator will toggle the power state of all attached appliances. + +local power_radius = 12 + + +minetest.register_craft({ + output = 'technic:power_radiator 1', + recipe = { + {'technic:stainless_steel_ingot', 'technic:mv_transformer', 'technic:stainless_steel_ingot'}, + {'technic:copper_coil', 'technic:machine_casing', 'technic:copper_coil'}, + {'technic:rubber', 'technic:mv_cable', 'technic:rubber'}, + } +}) + +------------------------------------------------------------------ +-- API for inductive powered nodes: +-- Use the functions below to set the corresponding callbacks +-- Also two nodes are needed: The inactive and the active one. The active must be called _active . +------------------------------------------------------------------ +-- Register a new appliance using this function + +technic.inductive_nodes = {} +technic.register_inductive_machine = function(name) + table.insert(technic.inductive_nodes, name) + table.insert(technic.inductive_nodes, name.."_active") +end + +-- Appliances: +-- has_supply: pos of supply node if the appliance has a power radiator near with sufficient power for the demand else "" +-- EU_demand: The power demand of the device. +-- EU_charge: Actual use. set to EU_demand if active==1 +-- active: set to 1 if the device is on +technic.inductive_on_construct = function(pos, eu_demand, infotext) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", infotext) + meta:set_int("technic_inductive_power_machine", 1) + meta:set_int("EU_demand", eu_demand) -- The power demand of this appliance + meta:set_int("EU_charge", 0) -- The actual power draw of this appliance + meta:set_string("has_supply", "") -- Register whether we are powered or not. For use with several radiators. + meta:set_int("active", 0) -- If the appliance can be turned on and off by using it use this. +end + +technic.inductive_on_punch_off = function(pos, eu_charge, swapnode) + local meta = minetest.get_meta(pos) + if meta:get_string("has_supply") ~= "" then + technic.swap_node(pos, swapnode) + meta:set_int("active", 1) + meta:set_int("EU_charge",eu_charge) + --print("-----------") + --print("Turn on:") + --print("EU_charge: "..meta:get_int("EU_charge")) + --print("has_supply: "..meta:get_string("has_supply")) + --print("<----------->") + end +end + +technic.inductive_on_punch_on = function(pos, eu_charge, swapnode) + local meta = minetest.get_meta(pos) + technic.swap_node(pos, swapnode) + meta:set_int("active", 0) + meta:set_int("EU_charge",eu_charge) + --print("-----------") + --print("Turn off:") + --print("EU_charge: "..meta:get_int("EU_charge")) + --print("has_supply: "..meta:get_string("has_supply")) + --print("<---------->") +end + +local shutdown_inductive_appliances = function(pos) + -- The supply radius + local rad = power_radius + -- If the radiator is removed. turn off all appliances in region + -- If another radiator is near it will turn on the appliances again + local positions = minetest.find_nodes_in_area( + {x=pos.x-rad, y=pos.y-rad, z=pos.z-rad}, + {x=pos.x+rad, y=pos.y+rad, z=pos.z+rad}, + technic.inductive_nodes) + for _, pos1 in pairs(positions) do + local meta1 = minetest.get_meta(pos1) + -- If the appliance is belonging to this node + if meta1:get_string("has_supply") == pos.x..pos.y..pos.z then + local nodename = minetest.get_node(pos1).name + -- Swap the node and make sure it is off and unpowered + if string.sub(nodename, -7) == "_active" then + technic.swap_node(pos1, string.sub(nodename, 1, -8)) + meta1:set_int("active", 0) + meta1:set_int("EU_charge", 0) + end + meta1:set_string("has_supply", "") + end + end +end + +local toggle_on_off_inductive_appliances = function(pos, node, puncher) + if pos == nil then return end + -- The supply radius + local rad = power_radius + local positions = minetest.find_nodes_in_area( + {x=pos.x-rad, y=pos.y-rad, z=pos.z-rad}, + {x=pos.x+rad, y=pos.y+rad, z=pos.z+rad}, + technic.inductive_nodes) + for _, pos1 in pairs(positions) do + local meta1 = minetest.get_meta(pos1) + if meta1:get_string("has_supply") == pos.x..pos.y..pos.z then + minetest.punch_node(pos1) + end + end +end + +minetest.register_node("technic:power_radiator", { + description = "MV Power Radiator", + tiles = {"technic_lv_cable.png", "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}, + sounds = default.node_sound_wood_defaults(), + drawtype = "nodebox", + paramtype = "light", + is_ground_content = true, + node_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_int("MV_EU_demand",1) -- Demand on the primary side when idle + meta:set_int("connected_EU_demand",0) -- Potential demand of connected appliances + meta:set_string("infotext", "MV Power Radiator") + end, + on_dig = function(pos, node, digger) + shutdown_inductive_appliances(pos) + return minetest.node_dig(pos, node, digger) + end, + on_punch = function(pos, node, puncher) + toggle_on_off_inductive_appliances(pos, node, puncher) + end +}) + +minetest.register_abm({ + label = "Machines: run power radiator", + nodenames = {"technic:power_radiator"}, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + local eu_input = meta:get_int("MV_EU_input") + local eu_demand = meta:get_int("MV_EU_demand") + + -- Power off automatically if no longer connected to a switching station + technic.switching_station_timeout_count(pos, "MV") + + if eu_input == 0 then + -- No power + meta:set_string("infotext", "MV Power Radiator is unpowered"); + -- meta:set_int("active", 1) -- used for setting textures someday maybe + shutdown_inductive_appliances(pos) + meta:set_int("connected_EU_demand", 0) + meta:set_int("MV_EU_demand",1) + elseif eu_input == eu_demand then + -- Powered and ready + + -- The maximum EU sourcing a single radiator can provide. + local max_charge = 30000 -- == the max EU demand of the radiator + local connected_EU_demand = meta:get_int("connected_EU_demand") + + -- Efficiency factor + local eff_factor = 0.06 + -- The supply radius + local rad = power_radius + + local meta1 = nil + local pos1 = {} + local used_charge = 0 + + -- Index all nodes within supply range + local positions = minetest.find_nodes_in_area( + {x=pos.x-rad, y=pos.y-rad, z=pos.z-rad}, + {x=pos.x+rad, y=pos.y+rad, z=pos.z+rad}, + technic.inductive_nodes) + for _, pos1 in pairs(positions) do + local meta1 = minetest.get_meta(pos1) + -- If not supplied see if this node can handle it. + if meta1:get_string("has_supply") == "" then + -- if demand surpasses the capacity of this node, don't bother adding it. + local app_eu_demand = math.floor(meta1:get_int("EU_demand") / eff_factor) + if connected_EU_demand + app_eu_demand <= max_charge then + -- We can power the appliance. Register, and spend power if it is on. + connected_EU_demand = connected_EU_demand + app_eu_demand + + meta1:set_string("has_supply", pos.x..pos.y..pos.z) + --Always 0: used_charge = math.floor(used_charge + meta1:get_int("EU_charge") / eff_factor) + end + elseif meta1:get_string("has_supply") == pos.x..pos.y..pos.z then + -- The appliance has power from this node. Spend power if it is on. + used_charge = used_charge + math.floor(meta1:get_int("EU_charge") / eff_factor) + end + meta:set_string("infotext", "MV Power Radiator is powered (" + ..math.floor(used_charge / max_charge * 100) + .."% of maximum power)"); + if used_charge == 0 then + meta:set_int("MV_EU_demand", 1) -- Still idle + else + meta:set_int("MV_EU_demand", used_charge) + end + end + -- Save state + meta:set_int("connected_EU_demand", connected_EU_demand) + end + end, +}) + +technic.register_machine("MV", "technic:power_radiator", technic.receiver) + diff --git a/mods/technic-master/technic/machines/MV/solar_array.lua b/mods/technic-master/technic/machines/MV/solar_array.lua new file mode 100644 index 0000000..4077a5c --- /dev/null +++ b/mods/technic-master/technic/machines/MV/solar_array.lua @@ -0,0 +1,14 @@ + +minetest.register_craft({ + output = 'technic:solar_array_mv 1', + recipe = { + {'technic:solar_array_lv', 'technic:solar_array_lv', 'technic:solar_array_lv'}, + {'technic:carbon_steel_ingot', 'technic:mv_transformer', 'technic:carbon_steel_ingot'}, + {'', 'technic:mv_cable', ''}, + } +}) + +technic.register_solar_array({tier="MV", power=30}) + +-- compatibility alias for upgrading from old versions of technic +minetest.register_alias("technic:solar_panel_mv", "technic:solar_array_mv") diff --git a/mods/technic-master/technic/machines/MV/tool_workshop.lua b/mods/technic-master/technic/machines/MV/tool_workshop.lua new file mode 100644 index 0000000..a220ac0 --- /dev/null +++ b/mods/technic-master/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 = + "size[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/technic-master/technic/machines/MV/wind_mill.lua b/mods/technic-master/technic/machines/MV/wind_mill.lua new file mode 100644 index 0000000..9df12b9 --- /dev/null +++ b/mods/technic-master/technic/machines/MV/wind_mill.lua @@ -0,0 +1,96 @@ + +local S = technic.getter + +minetest.register_craft({ + output = 'technic:wind_mill_frame 5', + recipe = { + {'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'}, + {'', 'technic:carbon_steel_ingot', ''}, + {'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'}, + } +}) + +minetest.register_craft({ + output = 'technic:wind_mill', + recipe = { + {'', 'technic:motor', ''}, + {'technic:carbon_steel_ingot', 'technic:carbon_steel_block', 'technic:carbon_steel_ingot'}, + {'', 'technic:mv_cable', ''}, + } +}) + +minetest.register_node("technic:wind_mill_frame", { + description = S("Wind Mill Frame"), + drawtype = "glasslike_framed", + tiles = {"technic_carbon_steel_block.png", "default_glass.png"}, + sunlight_propagates = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + paramtype = "light", +}) + +local function check_wind_mill(pos) + if pos.y < 30 then + return false + end + pos = {x=pos.x, y=pos.y, z=pos.z} + for i = 1, 20 do + pos.y = pos.y - 1 + local node = minetest.get_node_or_nil(pos) + if not node then + -- we reached CONTENT_IGNORE, we can assume, that nothing changed + -- as the user will have to load the block to change it + return + end + if node.name ~= "technic:wind_mill_frame" then + return false + end + end + return true +end + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local machine_name = S("Wind %s Generator"):format("MV") + + local check = check_wind_mill(pos) + if check == false then + meta:set_int("MV_EU_supply", 0) + meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name)) + elseif check == true then + local power = math.min(pos.y * 100, 5000) + meta:set_int("MV_EU_supply", power) + meta:set_string("infotext", S("@1 (@2)", machine_name, + technic.EU_string(power))) + end + -- check == nil: assume nothing has changed +end + +minetest.register_node("technic:wind_mill", { + description = S("Wind %s Generator"):format("MV"), + tiles = {"technic_carbon_steel_block.png"}, + paramtype2 = "facedir", + groups = {cracky=1, technic_machine=1, technic_mv=1}, + connect_sides = {"top", "bottom", "back", "left", "right"}, + sounds = default.node_sound_stone_defaults(), + drawtype = "nodebox", + paramtype = "light", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, -- Main box + {-0.1, -0.1, -0.5, 0.1, 0.1, -0.6}, -- Shaft + {-0.1, -1, -0.6, 0.1, 1, -0.7}, -- Vertical blades + {-1, -0.1, -0.6, 1, 0.1, -0.7}, -- Horizontal blades + } + }, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Wind %s Generator"):format("MV")) + meta:set_int("MV_EU_supply", 0) + end, + technic_run = run, +}) + +technic.register_machine("MV", "technic:wind_mill", technic.producer) + diff --git a/mods/technic-master/technic/machines/init.lua b/mods/technic-master/technic/machines/init.lua new file mode 100644 index 0000000..f2e31c9 --- /dev/null +++ b/mods/technic-master/technic/machines/init.lua @@ -0,0 +1,15 @@ +local path = technic.modpath.."/machines" + +dofile(path.."/register/init.lua") + +-- Tiers +dofile(path.."/LV/init.lua") +dofile(path.."/MV/init.lua") +dofile(path.."/HV/init.lua") + +dofile(path.."/switching_station.lua") +dofile(path.."/power_monitor.lua") +dofile(path.."/supply_converter.lua") + +dofile(path.."/other/init.lua") + diff --git a/mods/technic-master/technic/machines/other/anchor.lua b/mods/technic-master/technic/machines/other/anchor.lua new file mode 100644 index 0000000..1c15bd2 --- /dev/null +++ b/mods/technic-master/technic/machines/other/anchor.lua @@ -0,0 +1,109 @@ +local S = technic.getter + +local desc = S("Administrative World Anchor") + +local function compute_forceload_positions(pos, meta) + local radius = meta:get_int("radius") + local minpos = vector.subtract(pos, vector.new(radius, radius, radius)) + local maxpos = vector.add(pos, vector.new(radius, radius, radius)) + local minbpos = {} + local maxbpos = {} + for _, coord in ipairs({"x","y","z"}) do + minbpos[coord] = math.floor(minpos[coord] / 16) * 16 + maxbpos[coord] = math.floor(maxpos[coord] / 16) * 16 + end + local flposes = {} + for x = minbpos.x, maxbpos.x, 16 do + for y = minbpos.y, maxbpos.y, 16 do + for z = minbpos.z, maxbpos.z, 16 do + table.insert(flposes, vector.new(x, y, z)) + end + end + end + return flposes +end + +local function currently_forceloaded_positions(meta) + local ser = meta:get_string("forceloaded") + return ser == "" and {} or minetest.deserialize(ser) +end + +local function forceload_off(meta) + local flposes = currently_forceloaded_positions(meta) + meta:set_string("forceloaded", "") + for _, p in ipairs(flposes) do + minetest.forceload_free_block(p) + end +end + +local function forceload_on(pos, meta) + local want_flposes = compute_forceload_positions(pos, meta) + local have_flposes = {} + for _, p in ipairs(want_flposes) do + if minetest.forceload_block(p) then + table.insert(have_flposes, p) + end + end + meta:set_string("forceloaded", #have_flposes == 0 and "" or minetest.serialize(have_flposes)) +end + +local function set_display(pos, meta) + meta:set_string("infotext", S(meta:get_int("enabled") ~= 0 and "%s Enabled" or "%s Disabled"):format(desc)) + meta:set_string("formspec", + "size[5,3.5]".. + "item_image[0,0;1,1;technic:admin_anchor]".. + "label[1,0;"..minetest.formspec_escape(desc).."]".. + "label[0,1;"..minetest.formspec_escape(S("Owner:").." "..meta:get_string("owner")).."]".. + (meta:get_int("locked") == 0 and + "button[3,1;2,1;lock;"..minetest.formspec_escape(S("Unlocked")).."]" or + "button[3,1;2,1;unlock;"..minetest.formspec_escape(S("Locked")).."]").. + "field[0.25,2.3;1,1;radius;"..minetest.formspec_escape(S("Radius:"))..";"..meta:get_int("radius").."]".. + (meta:get_int("enabled") == 0 and + "button[3,2;2,1;enable;"..minetest.formspec_escape(S("Disabled")).."]" or + "button[3,2;2,1;disable;"..minetest.formspec_escape(S("Enabled")).."]").. + "label[0,3;"..minetest.formspec_escape(S("Keeping %d/%d map blocks loaded"):format(#currently_forceloaded_positions(meta), #compute_forceload_positions(pos, meta))).."]") +end + +minetest.register_node("technic:admin_anchor", { + description = desc, + drawtype = "normal", + tiles = {"technic_admin_anchor.png"}, + is_ground_content = true, + groups = {cracky=3, not_in_creative_inventory=1}, + sounds = default.node_sound_stone_defaults(), + after_place_node = function (pos, placer) + local meta = minetest.get_meta(pos) + if placer and placer:is_player() then + meta:set_string("owner", placer:get_player_name()) + end + set_display(pos, meta) + end, + can_dig = function (pos, player) + local meta = minetest.get_meta(pos) + return meta:get_int("locked") == 0 or (player and player:is_player() and player:get_player_name() == meta:get_string("owner")) + end, + on_destruct = function (pos) + local meta = minetest.get_meta(pos) + forceload_off(meta) + end, + on_receive_fields = function (pos, formname, fields, sender) + local meta = minetest.get_meta(pos) + if (meta:get_int("locked") ~= 0 or fields.lock) and + not (sender and sender:is_player() and + sender:get_player_name() == meta:get_string("owner")) then + return + end + if fields.unlock then meta:set_int("locked", 0) end + if fields.lock then meta:set_int("locked", 1) end + if fields.disable or fields.enable or fields.radius then + forceload_off(meta) + if fields.disable then meta:set_int("enabled", 0) end + if fields.enable then meta:set_int("enabled", 1) end + if fields.radius and string.find(fields.radius, "^[0-9]+$") and tonumber(fields.radius) < 256 then meta:set_int("radius", fields.radius) end + if meta:get_int("enabled") ~= 0 then + forceload_on(pos, meta) + end + end + set_display(pos, meta) + end, +}) diff --git a/mods/technic-master/technic/machines/other/coal_alloy_furnace.lua b/mods/technic-master/technic/machines/other/coal_alloy_furnace.lua new file mode 100644 index 0000000..30db8ed --- /dev/null +++ b/mods/technic-master/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-master/technic/machines/other/coal_furnace.lua b/mods/technic-master/technic/machines/other/coal_furnace.lua new file mode 100644 index 0000000..53a0f8b --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/other/constructor.lua b/mods/technic-master/technic/machines/other/constructor.lua new file mode 100644 index 0000000..0a62a7c --- /dev/null +++ b/mods/technic-master/technic/machines/other/constructor.lua @@ -0,0 +1,192 @@ + +local S = technic.getter + +local function deploy_node(inv, slot_name, pos, node, machine_node) + if node.param2 > 3 then return end + if node.name ~= "air" then + if node.name == "ignore" or + node.name == "default:lava_source" or + node.name == "default:lava_flowing" or + node.name == "default:water_source" or + node.name == "default:water_flowing" then + return + end + local drops = minetest.get_node_drops(node.name, "") + local remove_to = false + for i, item in ipairs(drops) do + if not inv:room_for_item(slot_name, item) then + remove_to = i - 1 + break + end + inv:add_item(slot_name, item) + end + if remove_to then + for i = 1, remove_to do + inv:remove_item(slot_name, drops[i]) + end + else + minetest.remove_node(pos) + end + return + end + if not inv:is_empty(slot_name) then + local stack = inv:get_list(slot_name)[1] + local def = stack:get_definition() + if def.type == "node" then + minetest.set_node(pos, { + name = stack:get_name(), + param2 = machine_node.param2 + }) + stack:take_item() + inv:set_stack(slot_name, 1, stack) + elseif def.type == "craft" then + if def.on_place then + -- Use pcall to avoid nil placer errors. + -- TODO: Do without pcall. + local ok, stk = pcall(def.on_place, stack, nil, { + -- Fake pointed_thing + type = "node", + above = pos, + under = {x=pos.x, y=pos.y-1, z=pos.z}, + }) + if ok then + inv:set_stack(slot_name, 1, stk or stack) + return + end + end + minetest.item_place_object(stack, nil, { + -- Fake pointed_thing + type = "node", + above = pos, + under = pos, + }) + inv:set_stack(slot_name, 1, nil) + end + end +end + +minetest.register_craft({ + type = "shapeless", + output = 'technic:constructor_mk1_off 1', + recipe = {'technic:nodebreaker_off', 'technic:deployer_off'}, + +}) +minetest.register_craft({ + type = "shapeless", + output = 'technic:constructor_mk2_off 1', + recipe = {'technic:constructor_mk1_off', 'technic:constructor_mk1_off'}, + +}) + +minetest.register_craft({ + type = "shapeless", + output = 'technic:constructor_mk3_off 1', + recipe = {'technic:constructor_mk2_off', 'technic:constructor_mk2_off'}, + +}) + +local function make_on(mark, length) + return function(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local dir = vector.new() + if node.param2 == 3 then dir.x = 1 end + if node.param2 == 2 then dir.z = 1 end + if node.param2 == 1 then dir.x = -1 end + if node.param2 == 0 then dir.z = -1 end + + local place_pos = vector.new(pos) + + if node.name == "technic:constructor_mk"..mark.."_off" then + technic.swap_node(pos, "technic:constructor_mk"..mark.."_on") + minetest.check_for_falling(pos) + for i = 1, length do + place_pos = vector.add(place_pos, dir) + local place_node = minetest.get_node(place_pos) + deploy_node(inv, "slot"..i, place_pos, place_node, node) + end + end + end +end + +local function make_off(mark) + return function(pos, node) + if node.name == "technic:constructor_mk"..mark.."_on" then + technic.swap_node(pos,"technic:constructor_mk"..mark.."_off") + minetest.check_for_falling(pos) + end + end +end + + +local function make_constructor(mark, length) + minetest.register_node("technic:constructor_mk"..mark.."_off", { + description = S("Constructor Mk%d"):format(mark), + tiles = {"technic_constructor_mk"..mark.."_top_off.png", + "technic_constructor_mk"..mark.."_bottom_off.png", + "technic_constructor_mk"..mark.."_side2_off.png", + "technic_constructor_mk"..mark.."_side1_off.png", + "technic_constructor_back.png", + "technic_constructor_front_off.png"}, + paramtype2 = "facedir", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, mesecon = 2}, + mesecons = {effector = {action_on = make_on(mark, length)}}, + sounds = default.node_sound_stone_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local formspec = "size[8,9;]".. + "label[0,0;"..S("Constructor Mk%d"):format(mark).."]".. + "list[current_player;main;0,5;8,4;]" + for i = 1, length do + formspec = formspec + .."label[5,"..(i - 1)..";"..S("Slot %d"):format(i).."]" + .."list[current_name;slot"..i + ..";6,"..(i - 1)..";1,1;]" + end + meta:set_string("formspec", formspec) + meta:set_string("infotext", S("Constructor Mk%d"):format(mark)) + local inv = meta:get_inventory() + for i = 1, length do + inv:set_size("slot"..i, 1) + end + end, + can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + for i = 1, length do + if not inv:is_empty("slot"..i) then + return false + end + end + return true + 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, + on_rotate = screwdriver.rotate_simple + }) + + minetest.register_node("technic:constructor_mk"..mark.."_on", { + tiles = {"technic_constructor_mk"..mark.."_top_on.png", + "technic_constructor_mk"..mark.."_bottom_on.png", + "technic_constructor_mk"..mark.."_side2_on.png", + "technic_constructor_mk"..mark.."_side1_on.png", + "technic_constructor_back.png", + "technic_constructor_front_on.png"}, + paramtype2 = "facedir", + drop = "technic:constructor_mk"..mark.."_off", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + mesecon=2, not_in_creative_inventory=1}, + mesecons= {effector = {action_off = make_off(mark)}}, + sounds = default.node_sound_stone_defaults(), + allow_metadata_inventory_put = technic.machine_inventory_put, + allow_metadata_inventory_take = technic.machine_inventory_take, + allow_metadata_inventory_move = technic.machine_inventory_move, + on_rotate = false + }) +end + +make_constructor(1, 1) +make_constructor(2, 2) +make_constructor(3, 4) + diff --git a/mods/technic-master/technic/machines/other/frames.lua b/mods/technic-master/technic/machines/other/frames.lua new file mode 100644 index 0000000..5459289 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/other/init.lua b/mods/technic-master/technic/machines/other/init.lua new file mode 100644 index 0000000..f4a82f0 --- /dev/null +++ b/mods/technic-master/technic/machines/other/init.lua @@ -0,0 +1,15 @@ +local path = technic.modpath.."/machines/other" + +-- mesecons and tubes related +dofile(path.."/injector.lua") +dofile(path.."/constructor.lua") + +if technic.config:get_bool("enable_frames") and minetest.get_modpath("mesecons_mvps") ~= nil then + dofile(path.."/frames.lua") +end + +-- Coal-powered machines +dofile(path.."/coal_alloy_furnace.lua") +dofile(path.."/coal_furnace.lua") + +dofile(path.."/anchor.lua") diff --git a/mods/technic-master/technic/machines/other/injector.lua b/mods/technic-master/technic/machines/other/injector.lua new file mode 100644 index 0000000..4fe78b2 --- /dev/null +++ b/mods/technic-master/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", + "size[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/technic-master/technic/machines/power_monitor.lua b/mods/technic-master/technic/machines/power_monitor.lua new file mode 100644 index 0000000..7e8b850 --- /dev/null +++ b/mods/technic-master/technic/machines/power_monitor.lua @@ -0,0 +1,69 @@ +-- POWER MONITOR +-- The power monitor can be used to monitor how much power is available on a network, +-- similarly to the old "slave" switching stations. + +local S = technic.getter + +local cable_entry = "^technic_cable_connection_overlay.png" + +minetest.register_craft({ + output = "technic:power_monitor", + recipe = { + {"", "", ""}, + {"", "technic:machine_casing", "default:copper_ingot"}, + {"technic:lv_cable", "technic:lv_cable", "technic:lv_cable"} + } +}) + +minetest.register_node("technic:power_monitor",{ + description = S("Power Monitor"), + tiles = { + "technic_power_monitor_sides.png", + "technic_power_monitor_sides.png"..cable_entry, + "technic_power_monitor_sides.png", + "technic_power_monitor_sides.png", + "technic_power_monitor_sides.png"..cable_entry, + "technic_power_monitor_front.png" + }, + paramtype2 = "facedir", + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_all_tiers=1, technic_machine=1}, + connect_sides = {"bottom", "back"}, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", S("Power Monitor")) + end, +}) + +minetest.register_abm({ + nodenames = {"technic:power_monitor"}, + label = "Machines: run power monitor", + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.get_meta(pos) + local network_hash = technic.cables[minetest.hash_node_position(pos)] + local network = network_hash and minetest.get_position_from_hash(network_hash) + local sw_pos = network and {x=network.x,y=network.y+1,z=network.z} + local timeout = 0 + for tier in pairs(technic.machines) do + timeout = math.max(meta:get_int(tier.."_EU_timeout"),timeout) + end + if timeout > 0 and sw_pos and minetest.get_node(sw_pos).name == "technic:switching_station" then + local sw_meta = minetest.get_meta(sw_pos) + local supply = sw_meta:get_int("supply") + local demand = sw_meta:get_int("demand") + meta:set_string("infotext", + S("Power Monitor. Supply: @1 Demand: @2", + technic.EU_string(supply), technic.EU_string(demand))) + else + meta:set_string("infotext",S("Power Monitor Has No Network")) + end + end, +}) + +for tier in pairs(technic.machines) do + -- RE in order to use the "timeout" functions, although it consumes 0 power + technic.register_machine(tier, "technic:power_monitor", "RE") +end + diff --git a/mods/technic-master/technic/machines/register/alloy_furnace.lua b/mods/technic-master/technic/machines/register/alloy_furnace.lua new file mode 100644 index 0000000..879e528 --- /dev/null +++ b/mods/technic-master/technic/machines/register/alloy_furnace.lua @@ -0,0 +1,10 @@ + +local S = technic.getter + +function technic.register_alloy_furnace(data) + data.typename = "alloy" + data.machine_name = "alloy_furnace" + data.machine_desc = S("%s Alloy Furnace") + technic.register_base_machine(data) +end + diff --git a/mods/technic-master/technic/machines/register/alloy_recipes.lua b/mods/technic-master/technic/machines/register/alloy_recipes.lua new file mode 100644 index 0000000..3aeacd5 --- /dev/null +++ b/mods/technic-master/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", "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/technic-master/technic/machines/register/battery_box.lua b/mods/technic-master/technic/machines/register/battery_box.lua new file mode 100644 index 0000000..d10b705 --- /dev/null +++ b/mods/technic-master/technic/machines/register/battery_box.lua @@ -0,0 +1,485 @@ + +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", "default: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.EU_string(current_charge), + technic.EU_string(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/technic-master/technic/machines/register/cables.lua b/mods/technic-master/technic/machines/register/cables.lua new file mode 100644 index 0000000..1e8cee9 --- /dev/null +++ b/mods/technic-master/technic/machines/register/cables.lua @@ -0,0 +1,286 @@ + +local S = technic.getter + +local cable_tier = {} + +function technic.is_tier_cable(name, tier) + return cable_tier[name] == tier +end + +function technic.get_cable_tier(name) + return cable_tier[name] +end + +local function check_connections(pos) + -- Build a table of all machines + local machines = {} + for tier,list in pairs(technic.machines) do + for k,v in pairs(list) do + machines[k] = v + end + end + local connections = {} + 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 _,connected_pos in pairs(positions) do + local name = minetest.get_node(connected_pos).name + if machines[name] or technic.get_cable_tier(name) then + table.insert(connections,connected_pos) + end + end + return connections +end + +local function clear_networks(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local placed = node.name ~= "air" + local positions = check_connections(pos) + if #positions < 1 then return end + local dead_end = #positions == 1 + for _,connected_pos in pairs(positions) do + local net = technic.cables[minetest.hash_node_position(connected_pos)] + if net and technic.networks[net] then + if dead_end and placed then + -- Dead end placed, add it to the network + -- Get the network + local network_id = technic.cables[minetest.hash_node_position(positions[1])] + if not network_id then + -- We're evidently not on a network, nothing to add ourselves to + return + end + local sw_pos = minetest.get_position_from_hash(network_id) + sw_pos.y = sw_pos.y + 1 + local network = technic.networks[network_id] + local tier = network.tier + + -- Actually add it to the (cached) network + -- This is similar to check_node_subp + technic.cables[minetest.hash_node_position(pos)] = network_id + pos.visited = 1 + if technic.is_tier_cable(name, tier) then + table.insert(network.all_nodes,pos) + elseif technic.machines[tier][node.name] then + meta:set_string(tier.."_network",minetest.pos_to_string(sw_pos)) + if technic.machines[tier][node.name] == technic.producer then + table.insert(network.PR_nodes,pos) + elseif technic.machines[tier][node.name] == technic.receiver then + table.insert(network.RE_nodes,pos) + elseif technic.machines[tier][node.name] == technic.producer_receiver then + table.insert(network.PR_nodes,pos) + table.insert(network.RE_nodes,pos) + elseif technic.machines[tier][node.name] == "SPECIAL" and + (pos.x ~= sw_pos.x or pos.y ~= sw_pos.y or pos.z ~= sw_pos.z) and + from_below then + table.insert(network.SP_nodes,pos) + elseif technic.machines[tier][node.name] == technic.battery then + table.insert(network.BA_nodes,pos) + end + end + elseif dead_end and not placed then + -- Dead end removed, remove it from the network + -- Get the network + local network_id = technic.cables[minetest.hash_node_position(positions[1])] + if not network_id then + -- We're evidently not on a network, nothing to add ourselves to + return + end + local network = technic.networks[network_id] + + -- Search for and remove machine + technic.cables[minetest.hash_node_position(pos)] = nil + for tblname,table in pairs(network) do + if tblname ~= "tier" then + for machinenum,machine in pairs(table) do + if machine.x == pos.x + and machine.y == pos.y + and machine.z == pos.z then + table[machinenum] = nil + end + end + end + end + else + -- Not a dead end, so the whole network needs to be recalculated + for _,v in pairs(technic.networks[net].all_nodes) do + local pos1 = minetest.hash_node_position(v) + technic.cables[pos1] = nil + end + technic.networks[net] = nil + end + end + end +end + +function technic.register_cable(tier, size) + local ltier = string.lower(tier) + cable_tier["technic:"..ltier.."_cable"] = tier + + local groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, + ["technic_"..ltier.."_cable"] = 1} + + local node_box = { + type = "connected", + fixed = {-size, -size, -size, size, size, size}, + connect_top = {-size, -size, -size, size, 0.5, size}, -- y+ + connect_bottom = {-size, -0.5, -size, size, size, size}, -- y- + connect_front = {-size, -size, -0.5, size, size, size}, -- z- + connect_back = {-size, -size, size, size, size, 0.5 }, -- z+ + connect_left = {-0.5, -size, -size, size, size, size}, -- x- + connect_right = {-size, -size, -size, 0.5, size, size}, -- x+ + } + + minetest.register_node("technic:"..ltier.."_cable", { + description = S("%s Cable"):format(tier), + tiles = {"technic_"..ltier.."_cable.png"}, + inventory_image = "technic_"..ltier.."_cable_wield.png", + wield_image = "technic_"..ltier.."_cable_wield.png", + groups = groups, + sounds = default.node_sound_wood_defaults(), + drop = "technic:"..ltier.."_cable", + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + node_box = node_box, + connects_to = {"group:technic_"..ltier.."_cable", + "group:technic_"..ltier, "group:technic_all_tiers"}, + on_construct = clear_networks, + on_destruct = clear_networks, + }) + + local xyz = { + ["-x"] = 1, + ["-y"] = 2, + ["-z"] = 3, + ["x"] = 4, + ["y"] = 5, + ["z"] = 6, + } + local notconnects = { + [1] = "left", + [2] = "bottom", + [3] = "front", + [4] = "right", + [5] = "top", + [6] = "back", + } + local function s(p) + if p:find("-") then + return p:sub(2) + else + return "-"..p + end + end + for p, i in pairs(xyz) do + local def = { + description = S("%s Cable Plate"):format(tier), + tiles = {"technic_"..ltier.."_cable.png"}, + groups = table.copy(groups), + sounds = default.node_sound_wood_defaults(), + drop = "technic:"..ltier.."_cable_plate_1", + paramtype = "light", + sunlight_propagates = true, + drawtype = "nodebox", + node_box = table.copy(node_box), + connects_to = {"group:technic_"..ltier.."_cable", + "group:technic_"..ltier, "group:technic_all_tiers"}, + on_construct = clear_networks, + on_destruct = clear_networks, + } + def.node_box.fixed = { + {-size, -size, -size, size, size, size}, + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5} + } + def.node_box.fixed[1][xyz[p]] = 7/16 * (i-3.5)/math.abs(i-3.5) + def.node_box.fixed[2][xyz[s(p)]] = 3/8 * (i-3.5)/math.abs(i-3.5) + def.node_box["connect_"..notconnects[i]] = nil + if i == 1 then + def.on_place = function(itemstack, placer, pointed_thing) + local pointed_thing_diff = vector.subtract(pointed_thing.above, pointed_thing.under) + local num + local changed + for k, v in pairs(pointed_thing_diff) do + if v ~= 0 then + changed = k + num = xyz[s(tostring(v):sub(-2, -2)..k)] + break + end + end + local crtl = placer:get_player_control() + if (crtl.aux1 or crtl.sneak) and not (crtl.aux1 and crtl.sneak) then + local fine_pointed = minetest.pointed_thing_to_face_pos(placer, pointed_thing) + fine_pointed = vector.subtract(fine_pointed, pointed_thing.above) + fine_pointed[changed] = nil + local ps = {} + for p, _ in pairs(fine_pointed) do + ps[#ps+1] = p + end + local bigger = (math.abs(fine_pointed[ps[1]]) > math.abs(fine_pointed[ps[2]]) and ps[1]) or ps[2] + if math.abs(fine_pointed[bigger]) < 0.3 then + num = num + 3 + num = (num <= 6 and num) or num - 6 + else + num = xyz[((fine_pointed[bigger] < 0 and "-") or "") .. bigger] + end + end + minetest.set_node(pointed_thing.above, {name = "technic:"..ltier.."_cable_plate_"..num}) + if not (creative and creative.is_enabled_for(placer)) then + itemstack:take_item() + end + return itemstack + end + else + def.groups.not_in_creative_inventory = 1 + end + def.on_rotate = function(pos, node, user, mode, new_param2) + local dir = 0 + if mode == screwdriver.ROTATE_FACE then -- left-click + dir = 1 + elseif mode == screwdriver.ROTATE_AXIS then -- right-click + dir = -1 + end + local num = tonumber(node.name:sub(-1)) + num = num + dir + num = (num >= 1 and num) or num + 6 + num = (num <= 6 and num) or num - 6 + minetest.swap_node(pos, {name = "technic:"..ltier.."_cable_plate_"..num}) + end + minetest.register_node("technic:"..ltier.."_cable_plate_"..i, def) + cable_tier["technic:"..ltier.."_cable_plate_"..i] = tier + end + + local c = "technic:"..ltier.."_cable" + minetest.register_craft({ + output = "technic:"..ltier.."_cable_plate_1 5", + recipe = { + {"", "", c}, + {c , c , c}, + {"", "", c}, + } + }) + + minetest.register_craft({ + output = c, + recipe = { + {"technic:"..ltier.."_cable_plate_1"}, + } + }) +end + + +local function clear_nets_if_machine(pos, node) + for tier, machine_list in pairs(technic.machines) do + if machine_list[node.name] ~= nil then + return clear_networks(pos) + end + end +end + +minetest.register_on_placenode(clear_nets_if_machine) +minetest.register_on_dignode(clear_nets_if_machine) + diff --git a/mods/technic-master/technic/machines/register/centrifuge.lua b/mods/technic-master/technic/machines/register/centrifuge.lua new file mode 100644 index 0000000..dd05977 --- /dev/null +++ b/mods/technic-master/technic/machines/register/centrifuge.lua @@ -0,0 +1,8 @@ +local S = technic.getter + +function technic.register_centrifuge(data) + data.typename = "separating" + data.machine_name = "centrifuge" + data.machine_desc = S("%s Centrifuge") + technic.register_base_machine(data) +end diff --git a/mods/technic-master/technic/machines/register/centrifuge_recipes.lua b/mods/technic-master/technic/machines/register/centrifuge_recipes.lua new file mode 100644 index 0000000..4684ba0 --- /dev/null +++ b/mods/technic-master/technic/machines/register/centrifuge_recipes.lua @@ -0,0 +1,40 @@ +local S = technic.getter + +technic.register_recipe_type("separating", { + description = S("Separating"), + output_size = 2, +}) + +function technic.register_separating_recipe(data) + data.time = data.time or 10 + technic.register_recipe("separating", data) +end + +local recipes = { + { "technic:bronze_dust 4", "technic:copper_dust 3", "technic:tin_dust" }, + { "technic:stainless_steel_dust 4", "technic:wrought_iron_dust 3", "technic:chromium_dust" }, + { "technic:brass_dust 3", "technic:copper_dust 2", "technic:zinc_dust" }, + { "technic:chernobylite_dust", "default:sand", "technic:uranium3_dust" }, + { "default:dirt 4", "default:sand", "default:gravel", "default:clay_lump 2" }, +} + +local function uranium_dust(p) + return "technic:uranium"..(p == 7 and "" or p).."_dust" +end +for p = 1, 34 do + table.insert(recipes, { uranium_dust(p).." 2", uranium_dust(p-1), uranium_dust(p+1) }) +end + +if minetest.get_modpath("bushes_classic") then + for _, berry in ipairs({ "blackberry", "blueberry", "gooseberry", "raspberry", "strawberry" }) do + table.insert(recipes, { "bushes:"..berry.."_bush", "default:stick 20", "bushes:"..berry.." 4" }) + end +end + +if minetest.get_modpath("farming") then + table.insert(recipes, { "farming:wheat 4", "farming:seed_wheat 3", "default:dry_shrub 1" }) +end + +for _, data in pairs(recipes) do + technic.register_separating_recipe({ input = { data[1] }, output = { data[2], data[3], data[4] } }) +end diff --git a/mods/technic-master/technic/machines/register/common.lua b/mods/technic-master/technic/machines/register/common.lua new file mode 100644 index 0000000..dfa2948 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/register/compressor.lua b/mods/technic-master/technic/machines/register/compressor.lua new file mode 100644 index 0000000..49830d7 --- /dev/null +++ b/mods/technic-master/technic/machines/register/compressor.lua @@ -0,0 +1,9 @@ + +local S = technic.getter + +function technic.register_compressor(data) + data.typename = "compressing" + data.machine_name = "compressor" + data.machine_desc = S("%s Compressor") + technic.register_base_machine(data) +end diff --git a/mods/technic-master/technic/machines/register/compressor_recipes.lua b/mods/technic-master/technic/machines/register/compressor_recipes.lua new file mode 100644 index 0000000..a625f1a --- /dev/null +++ b/mods/technic-master/technic/machines/register/compressor_recipes.lua @@ -0,0 +1,34 @@ + +local S = technic.getter + +technic.register_recipe_type("compressing", { description = S("Compressing") }) + +function technic.register_compressor_recipe(data) + data.time = data.time or 4 + technic.register_recipe("compressing", data) +end + +local recipes = { + {"default:snowblock", "default:ice"}, + {"default:sand 2", "default:sandstone"}, + {"default:desert_sand", "default:desert_stone"}, + {"technic:mixed_metal_ingot", "technic:composite_plate"}, + {"default:copper_ingot 5", "technic:copper_plate"}, + {"technic:coal_dust 4", "technic:graphite"}, + {"technic:carbon_cloth", "technic:carbon_plate"}, + {"technic:uranium35_ingot 5", "technic:uranium_fuel"}, +} + +-- defuse the default sandstone recipe, since we have the compressor to take over in a more realistic manner +minetest.clear_craft({ + output = "default:sandstone", + recipe = { + {'group:sand', 'group:sand'}, + {'group:sand', 'group:sand'} + }, +}) + +for _, data in pairs(recipes) do + technic.register_compressor_recipe({input = {data[1]}, output = data[2]}) +end + diff --git a/mods/technic-master/technic/machines/register/electric_furnace.lua b/mods/technic-master/technic/machines/register/electric_furnace.lua new file mode 100644 index 0000000..44de16c --- /dev/null +++ b/mods/technic-master/technic/machines/register/electric_furnace.lua @@ -0,0 +1,9 @@ + +local S = technic.getter + +function technic.register_electric_furnace(data) + data.typename = "cooking" + data.machine_name = "electric_furnace" + data.machine_desc = S("%s Furnace") + technic.register_base_machine(data) +end diff --git a/mods/technic-master/technic/machines/register/extractor.lua b/mods/technic-master/technic/machines/register/extractor.lua new file mode 100644 index 0000000..eeef9ff --- /dev/null +++ b/mods/technic-master/technic/machines/register/extractor.lua @@ -0,0 +1,9 @@ + +local S = technic.getter + +function technic.register_extractor(data) + data.typename = "extracting" + data.machine_name = "extractor" + data.machine_desc = S("%s Extractor") + technic.register_base_machine(data) +end diff --git a/mods/technic-master/technic/machines/register/extractor_recipes.lua b/mods/technic-master/technic/machines/register/extractor_recipes.lua new file mode 100644 index 0000000..1de0ba0 --- /dev/null +++ b/mods/technic-master/technic/machines/register/extractor_recipes.lua @@ -0,0 +1,59 @@ + +local S = technic.getter + +technic.register_recipe_type("extracting", { description = S("Extracting") }) + +function technic.register_extractor_recipe(data) + data.time = data.time or 4 + technic.register_recipe("extracting", data) +end + +if minetest.get_modpath("dye") then + -- check if we are using dye or unifieddyes + local unifieddyes = minetest.get_modpath("unifieddyes") + + -- register recipes with the same crafting ratios as `dye` provides + local dye_recipes = { + {"technic:coal_dust", "dye:black 2"}, + {"default:grass_1", "dye:green 1"}, + {"default:dry_shrub", "dye:brown 1"}, + {"default:junglegrass", "dye:green 2"}, + {"default:cactus", "dye:green 4"}, + {"flowers:geranium", "dye:blue 4"}, + {"flowers:dandelion_white", "dye:white 4"}, + {"flowers:dandelion_yellow", "dye:yellow 4"}, + {"flowers:tulip", "dye:orange 4"}, + {"flowers:rose", "dye:red 4"}, + {"flowers:viola", "dye:violet 4"}, + {"bushes:blackberry", unifieddyes and "unifieddyes:magenta_s50 4" or "dye:violet 4"}, + {"bushes:blueberry", unifieddyes and "unifieddyes:magenta_s50 4" or "dye:magenta 4"}, + } + + for _, data in ipairs(dye_recipes) do + technic.register_extractor_recipe({input = {data[1]}, output = data[2]}) + end + + -- overwrite the existing crafting recipes + local dyes = {"white", "red", "yellow", "blue", "violet", "orange"} + for _, color in ipairs(dyes) do + minetest.register_craft({ + type = "shapeless", + output = "dye:"..color.." 1", + recipe = {"group:flower,color_"..color}, + }) + + end + minetest.register_craft({ + type = "shapeless", + output = "dye:black 1", + recipe = {"group:coal"}, + }) + + if unifieddyes then + minetest.register_craft({ + type = "shapeless", + output = "dye:green 1", + recipe = {"default:cactus"}, + }) + end +end diff --git a/mods/technic-master/technic/machines/register/generator.lua b/mods/technic-master/technic/machines/register/generator.lua new file mode 100644 index 0000000..87ef6e7 --- /dev/null +++ b/mods/technic-master/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 = + "size[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/technic-master/technic/machines/register/grinder.lua b/mods/technic-master/technic/machines/register/grinder.lua new file mode 100644 index 0000000..19ea094 --- /dev/null +++ b/mods/technic-master/technic/machines/register/grinder.lua @@ -0,0 +1,9 @@ + +local S = technic.getter + +function technic.register_grinder(data) + data.typename = "grinding" + data.machine_name = "grinder" + data.machine_desc = S("%s Grinder") + technic.register_base_machine(data) +end diff --git a/mods/technic-master/technic/machines/register/grinder_recipes.lua b/mods/technic-master/technic/machines/register/grinder_recipes.lua new file mode 100644 index 0000000..1f4047c --- /dev/null +++ b/mods/technic-master/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"}, + {"default:tin_lump", "technic:tin_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"}) +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", "default: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/technic-master/technic/machines/register/grindings.lua b/mods/technic-master/technic/machines/register/grindings.lua new file mode 100644 index 0000000..9231166 --- /dev/null +++ b/mods/technic-master/technic/machines/register/grindings.lua @@ -0,0 +1,62 @@ +local S = technic.getter +local moretrees = minetest.get_modpath("moretrees") +local mesecons_materials = minetest.get_modpath("mesecons_materials") +local dye = minetest.get_modpath("dye") + +-- sawdust, the finest wood/tree grinding +local sawdust = "technic:sawdust" +minetest.register_craftitem(sawdust, { + description = S("Sawdust"), + inventory_image = "technic_sawdust.png", +}) +minetest.register_craft({ type = "fuel", recipe = sawdust, burntime = 6 }) +technic.register_compressor_recipe({ input = {sawdust .. " 4"}, output = "default:wood" }) + +-- tree/wood grindings +local function register_tree_grinding(name, tree, wood, extract, grinding_color) + local lname = string.lower(name) + lname = string.gsub(lname, ' ', '_') + local grindings_name = "technic:"..lname.."_grindings" + local inventory_image = "technic_"..lname.."_grindings.png" + if grinding_color then + inventory_image = inventory_image .. "^[colorize:" .. grinding_color + end + minetest.register_craftitem(grindings_name, { + description = S("%s Grinding"):format(S(name)), + inventory_image = inventory_image, + }) + minetest.register_craft({ + type = "fuel", + recipe = grindings_name, + burntime = 8, + }) + technic.register_grinder_recipe({ input = { tree }, output = grindings_name .. " 4" }) + technic.register_grinder_recipe({ input = { grindings_name }, output = sawdust .. " 4" }) + if wood then + technic.register_grinder_recipe({ input = { wood }, output = grindings_name }) + end + if extract then + technic.register_extractor_recipe({ input = { grindings_name .. " 4" }, output = extract}) + technic.register_separating_recipe({ + input = { grindings_name .. " 4" }, + output = { sawdust .. " 4", extract } + }) + end +end + +local rubber_tree_planks = moretrees and "moretrees:rubber_tree_planks" +local default_extract = dye and "dye:brown 2" + +local grinding_recipes = { + {"Common Tree", "group:tree", "group:wood", default_extract }, + {"Rubber Tree", "moretrees:rubber_tree_trunk", rubber_tree_planks, "technic:raw_latex"} +} + +for _, data in pairs(grinding_recipes) do + register_tree_grinding(unpack(data)) +end + +if moretrees and dye then + -- https://en.wikipedia.org/wiki/Catechu ancient brown dye from the wood of acacia trees + register_tree_grinding("Acacia", "moretrees:acacia_trunk", "moretrees:acacia_planks", "dye:brown 8") +end diff --git a/mods/technic-master/technic/machines/register/init.lua b/mods/technic-master/technic/machines/register/init.lua new file mode 100644 index 0000000..1667d75 --- /dev/null +++ b/mods/technic-master/technic/machines/register/init.lua @@ -0,0 +1,33 @@ +local path = technic.modpath.."/machines/register" + +dofile(path.."/common.lua") + +-- Wiring stuff +dofile(path.."/cables.lua") +dofile(path.."/battery_box.lua") + +-- Generators +dofile(path.."/solar_array.lua") +dofile(path.."/generator.lua") + +-- API for machines +dofile(path.."/recipes.lua") +dofile(path.."/machine_base.lua") + +-- Recipes +dofile(path.."/alloy_recipes.lua") +dofile(path.."/grinder_recipes.lua") +dofile(path.."/extractor_recipes.lua") +dofile(path.."/compressor_recipes.lua") +dofile(path.."/centrifuge_recipes.lua") + +-- Multi-Machine Recipes +dofile(path.."/grindings.lua") + +-- Machines +dofile(path.."/alloy_furnace.lua") +dofile(path.."/electric_furnace.lua") +dofile(path.."/grinder.lua") +dofile(path.."/extractor.lua") +dofile(path.."/compressor.lua") +dofile(path.."/centrifuge.lua") diff --git a/mods/technic-master/technic/machines/register/machine_base.lua b/mods/technic-master/technic/machines/register/machine_base.lua new file mode 100644 index 0000000..14cf998 --- /dev/null +++ b/mods/technic-master/technic/machines/register/machine_base.lua @@ -0,0 +1,265 @@ + +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}, +} + +local connect_default = {"bottom", "back", "left", "right"} + +local function round(v) + return math.floor(v + 0.5) +end + +function technic.register_base_machine(data) + local typename = data.typename + local input_size = technic.recipes[typename].input_size + local machine_name = data.machine_name + local machine_desc = data.machine_desc + local tier = data.tier + local ltier = string.lower(tier) + + local groups = {cracky = 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 formspec = + "size[8,9;]".. + "list[current_name;src;"..(4-input_size)..",1;"..input_size..",1;]".. + "list[current_name;dst;5,1;2,2;]".. + "list[current_player;main;0,5;8,4;]".. + "label[0,0;"..machine_desc:format(tier).."]".. + "listring[current_name;dst]".. + "listring[current_player;main]".. + "listring[current_name;src]".. + "listring[current_player;main]" + if data.upgrade then + formspec = formspec.. + "list[current_name;upgrade1;1,3;1,1;]".. + "list[current_name;upgrade2;2,3;1,1;]".. + "label[1,4;"..S("Upgrade Slots").."]".. + "listring[current_name;upgrade1]".. + "listring[current_player;main]".. + "listring[current_name;upgrade2]".. + "listring[current_player;main]" + end + + local run = function(pos, node) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local eu_input = meta:get_int(tier.."_EU_input") + + local machine_desc_tier = machine_desc:format(tier) + local machine_node = "technic:"..ltier.."_"..machine_name + local machine_demand = data.demand + + -- Setup meta data if it does not exist. + if not eu_input then + meta:set_int(tier.."_EU_demand", machine_demand[1]) + meta:set_int(tier.."_EU_input", 0) + return + end + + local EU_upgrade, tube_upgrade = 0, 0 + if data.upgrade then + EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) + end + if data.tube then + technic.handle_machine_pipeworks(pos, tube_upgrade) + end + + local powered = eu_input >= machine_demand[EU_upgrade+1] + if powered then + meta:set_int("src_time", meta:get_int("src_time") + round(data.speed*10)) + end + while true do + local result = technic.get_recipe(typename, inv:get_list("src")) + if not result then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Idle"):format(machine_desc_tier)) + meta:set_int(tier.."_EU_demand", 0) + meta:set_int("src_time", 0) + return + end + meta:set_int(tier.."_EU_demand", machine_demand[EU_upgrade+1]) + technic.swap_node(pos, machine_node.."_active") + meta:set_string("infotext", S("%s Active"):format(machine_desc_tier)) + if meta:get_int("src_time") < round(result.time*10) then + if not powered then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Unpowered"):format(machine_desc_tier)) + end + return + end + local output = result.output + if type(output) ~= "table" then output = { output } end + local output_stacks = {} + for _, o in ipairs(output) do + table.insert(output_stacks, ItemStack(o)) + end + local room_for_output = true + inv:set_size("dst_tmp", inv:get_size("dst")) + inv:set_list("dst_tmp", inv:get_list("dst")) + for _, o in ipairs(output_stacks) do + if not inv:room_for_item("dst_tmp", o) then + room_for_output = false + break + end + inv:add_item("dst_tmp", o) + end + if not room_for_output then + technic.swap_node(pos, machine_node) + meta:set_string("infotext", S("%s Idle"):format(machine_desc_tier)) + meta:set_int(tier.."_EU_demand", 0) + meta:set_int("src_time", round(result.time*10)) + return + end + meta:set_int("src_time", meta:get_int("src_time") - round(result.time*10)) + inv:set_list("src", result.new_input) + inv:set_list("dst", inv:get_list("dst_tmp")) + end + end + + local tentry = tube_entry + if ltier == "lv" then + tentry = "" + end + minetest.register_node("technic:"..ltier.."_"..machine_name, { + description = machine_desc:format(tier), + tiles = { + "technic_"..ltier.."_"..machine_name.."_top.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_front.png" + }, + paramtype2 = "facedir", + groups = groups, + tube = data.tube and tube or nil, + connect_sides = data.connect_sides or connect_default, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + on_construct = function(pos) + local node = minetest.get_node(pos) + local meta = minetest.get_meta(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 + + meta:set_string("infotext", machine_desc:format(tier)) + meta:set_int("tube_time", 0) + meta:set_string("formspec", formspec..form_buttons) + local inv = meta:get_inventory() + inv:set_size("src", input_size) + inv:set_size("dst", 4) + 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, + 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 node = minetest.get_node(pos) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(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 + meta:set_string("formspec", formspec..form_buttons) + end, + }) + + minetest.register_node("technic:"..ltier.."_"..machine_name.."_active",{ + description = machine_desc:format(tier), + tiles = { + "technic_"..ltier.."_"..machine_name.."_top.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_bottom.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_side.png"..tentry, + "technic_"..ltier.."_"..machine_name.."_front_active.png" + }, + paramtype2 = "facedir", + drop = "technic:"..ltier.."_"..machine_name, + groups = active_groups, + connect_sides = data.connect_sides or connect_default, + legacy_facedir_simple = true, + sounds = default.node_sound_wood_defaults(), + tube = data.tube and tube or nil, + 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, + technic_disabled_machine_name = "technic:"..ltier.."_"..machine_name, + on_receive_fields = function(pos, formname, fields, sender) + local node = minetest.get_node(pos) + if not pipeworks.may_configure(pos, sender) then return end + fs_helpers.on_receive_fields(pos, fields) + local meta = minetest.get_meta(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 + meta:set_string("formspec", formspec..form_buttons) + end, + }) + + technic.register_machine(tier, "technic:"..ltier.."_"..machine_name, technic.receiver) + technic.register_machine(tier, "technic:"..ltier.."_"..machine_name.."_active", technic.receiver) + +end -- End registration + diff --git a/mods/technic-master/technic/machines/register/recipes.lua b/mods/technic-master/technic/machines/register/recipes.lua new file mode 100644 index 0000000..f9e2458 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/machines/register/solar_array.lua b/mods/technic-master/technic/machines/register/solar_array.lua new file mode 100644 index 0000000..03f11d9 --- /dev/null +++ b/mods/technic-master/technic/machines/register/solar_array.lua @@ -0,0 +1,67 @@ + +local S = technic.getter + +function technic.register_solar_array(data) + local tier = data.tier + local ltier = string.lower(tier) + + local run = function(pos, node) + -- The action here is to make the solar array produce 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 = {} + local machine_name = S("Arrayed Solar %s Generator"):format(tier) + pos1.y = pos.y + 1 + pos1.x = pos.x + pos1.z = pos.z + + technic.get_or_load_node(pos1) + local light = minetest.get_node_light(pos1, nil) + local time_of_day = minetest.get_timeofday() + local meta = minetest.get_meta(pos) + light = light or 0 + + -- turn on array only during day time and if sufficient light + -- I know this is counter intuitive when cheating by using other light sources. + if light >= 12 and time_of_day >= 0.24 and time_of_day <= 0.76 and pos.y > 0 then + local charge_to_give = math.floor((light + pos.y) * data.power) + charge_to_give = math.max(charge_to_give, 0) + charge_to_give = math.min(charge_to_give, data.power * 50) + meta:set_string("infotext", S("@1 Active (@2)", machine_name, + technic.EU_string(charge_to_give))) + meta:set_int(tier.."_EU_supply", charge_to_give) + else + meta:set_string("infotext", S("%s Idle"):format(machine_name)) + meta:set_int(tier.."_EU_supply", 0) + end + end + + minetest.register_node("technic:solar_array_"..ltier, { + tiles = {"technic_"..ltier.."_solar_array_top.png", "technic_"..ltier.."_solar_array_bottom.png", + "technic_"..ltier.."_solar_array_side.png", "technic_"..ltier.."_solar_array_side.png", + "technic_"..ltier.."_solar_array_side.png", "technic_"..ltier.."_solar_array_side.png"}, + groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2, technic_machine=1, ["technic_"..ltier]=1}, + connect_sides = {"bottom"}, + sounds = default.node_sound_wood_defaults(), + description = S("Arrayed Solar %s Generator"):format(tier), + active = false, + drawtype = "nodebox", + paramtype = "light", + 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) + local name = minetest.get_node(pos).name + meta:set_int(tier.."_EU_supply", 0) + end, + technic_run = run, + }) + + technic.register_machine(tier, "technic:solar_array_"..ltier, technic.producer) +end + diff --git a/mods/technic-master/technic/machines/supply_converter.lua b/mods/technic-master/technic/machines/supply_converter.lua new file mode 100644 index 0000000..9202c4a --- /dev/null +++ b/mods/technic-master/technic/machines/supply_converter.lua @@ -0,0 +1,213 @@ +-- 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.EU_string(input), from, + technic.EU_string(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-master/technic/machines/switching_station.lua b/mods/technic-master/technic/machines/switching_station.lua new file mode 100644 index 0000000..d645847 --- /dev/null +++ b/mods/technic-master/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.EU_string(PR_eu_supply), + technic.EU_string(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/technic-master/technic/models/technic_cylinder.obj b/mods/technic-master/technic/models/technic_cylinder.obj new file mode 100644 index 0000000..2622347 --- /dev/null +++ b/mods/technic-master/technic/models/technic_cylinder.obj @@ -0,0 +1,238 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_cylinder_onetexture.blend' +# www.blender.org +o Cylinder_Cylinder.001 +v 0.000000 -0.500000 -0.500000 +v 0.000000 0.500000 -0.500000 +v 0.097545 -0.500000 -0.490393 +v 0.097545 0.500000 -0.490393 +v 0.191342 -0.500000 -0.461940 +v 0.191342 0.500000 -0.461940 +v 0.277785 -0.500000 -0.415735 +v 0.277785 0.500000 -0.415735 +v 0.353553 -0.500000 -0.353554 +v 0.353553 0.500000 -0.353554 +v 0.415735 -0.500000 -0.277785 +v 0.415735 0.500000 -0.277785 +v 0.461940 -0.500000 -0.191342 +v 0.461940 0.500000 -0.191342 +v 0.490393 -0.500000 -0.097545 +v 0.490393 0.500000 -0.097545 +v 0.500000 -0.500000 -0.000000 +v 0.500000 0.500000 -0.000000 +v 0.490393 -0.500000 0.097545 +v 0.490393 0.500000 0.097545 +v 0.461940 -0.500000 0.191341 +v 0.461940 0.500000 0.191341 +v 0.415735 -0.500000 0.277785 +v 0.415735 0.500000 0.277785 +v 0.353553 -0.500000 0.353553 +v 0.353553 0.500000 0.353553 +v 0.277785 -0.500000 0.415735 +v 0.277785 0.500000 0.415735 +v 0.191342 -0.500000 0.461940 +v 0.191342 0.500000 0.461940 +v 0.097545 -0.500000 0.490392 +v 0.097545 0.500000 0.490392 +v -0.000000 -0.500000 0.500000 +v -0.000000 0.500000 0.500000 +v -0.097545 -0.500000 0.490392 +v -0.097545 0.500000 0.490392 +v -0.191342 -0.500000 0.461939 +v -0.191342 0.500000 0.461939 +v -0.277785 -0.500000 0.415734 +v -0.277785 0.500000 0.415734 +v -0.353554 -0.500000 0.353553 +v -0.353554 0.500000 0.353553 +v -0.415735 -0.500000 0.277785 +v -0.415735 0.500000 0.277785 +v -0.461940 -0.500000 0.191341 +v -0.461940 0.500000 0.191341 +v -0.490393 -0.500000 0.097545 +v -0.490393 0.500000 0.097545 +v -0.500000 -0.500000 -0.000001 +v -0.500000 0.500000 -0.000001 +v -0.490393 -0.500000 -0.097546 +v -0.490393 0.500000 -0.097546 +v -0.461940 -0.500000 -0.191342 +v -0.461940 0.500000 -0.191342 +v -0.415734 -0.500000 -0.277786 +v -0.415734 0.500000 -0.277786 +v -0.353553 -0.500000 -0.353554 +v -0.353553 0.500000 -0.353554 +v -0.277785 -0.500000 -0.415735 +v -0.277785 0.500000 -0.415735 +v -0.191341 -0.500000 -0.461940 +v -0.191341 0.500000 -0.461940 +v -0.097544 -0.500000 -0.490393 +v -0.097544 0.500000 -0.490393 +vt 0.499996 0.999997 +vt 0.499995 0.000005 +vt 0.562495 0.000004 +vt 0.562496 0.999997 +vt 0.624995 0.000003 +vt 0.624997 0.999997 +vt 0.687496 0.000002 +vt 0.687497 0.999998 +vt 0.749997 0.000001 +vt 0.749997 0.999998 +vt 0.812497 0.000001 +vt 0.812497 0.999998 +vt 0.874997 -0.000000 +vt 0.874997 0.999998 +vt 0.937498 -0.000000 +vt 0.937498 0.999998 +vt 0.999998 -0.000000 +vt 0.999998 0.999998 +vt 0.000005 0.999997 +vt 0.000001 0.000024 +vt 0.062500 0.000023 +vt 0.062505 0.999996 +vt 0.124999 0.000021 +vt 0.125004 0.999996 +vt 0.187498 0.000020 +vt 0.187503 0.999995 +vt 0.249997 0.000018 +vt 0.250003 0.999994 +vt 0.312497 0.000017 +vt 0.312502 0.999994 +vt 0.374997 0.000015 +vt 0.375002 0.999993 +vt 0.437496 0.000014 +vt 0.437501 0.999993 +vt 0.402487 0.009601 +vt 0.597576 0.009614 +vt 0.691371 0.038072 +vt 0.777811 0.084282 +vt 0.853576 0.146469 +vt 0.915753 0.222242 +vt 0.961953 0.308689 +vt 0.990399 0.402487 +vt 1.000000 0.500033 +vt 0.990386 0.597577 +vt 0.961928 0.691370 +vt 0.915717 0.777811 +vt 0.853531 0.853575 +vt 0.777758 0.915753 +vt 0.691312 0.961952 +vt 0.597514 0.990398 +vt 0.402424 0.990386 +vt 0.308630 0.961928 +vt 0.222188 0.915717 +vt 0.146424 0.853531 +vt 0.084248 0.777759 +vt 0.038049 0.691313 +vt 0.009602 0.597515 +vt 0.000000 0.499970 +vt 0.009614 0.402425 +vt 0.038073 0.308630 +vt 0.084283 0.222189 +vt 0.146470 0.146424 +vt 0.222243 0.084248 +vt 0.308689 0.038048 +vt 0.499927 0.999999 +vt 0.084226 0.777725 +vt 0.000000 0.499927 +vt 0.222277 0.084224 +vt 0.500074 0.000000 +vt 0.915777 0.222279 +vt 1.000000 0.500077 +vt 0.777724 0.915775 +vn 0.000000 -0.685700 -0.727900 +vn 0.000000 0.685700 -0.727900 +vn 0.142000 0.685700 -0.713900 +vn 0.142000 -0.685700 -0.713900 +vn 0.278500 0.685700 -0.672500 +vn 0.278500 -0.685700 -0.672500 +vn 0.404400 0.685700 -0.605200 +vn 0.404400 -0.685700 -0.605200 +vn 0.514700 0.685700 -0.514700 +vn 0.514700 -0.685700 -0.514700 +vn 0.605200 0.685700 -0.404400 +vn 0.605200 -0.685700 -0.404400 +vn 0.672500 0.685700 -0.278500 +vn 0.672500 -0.685700 -0.278500 +vn 0.713900 0.685700 -0.142000 +vn 0.713900 -0.685700 -0.142000 +vn 0.727900 0.685700 0.000000 +vn 0.727900 -0.685700 0.000000 +vn 0.713900 0.685700 0.142000 +vn 0.713900 -0.685700 0.142000 +vn 0.672500 0.685700 0.278500 +vn 0.672500 -0.685700 0.278500 +vn 0.605200 0.685700 0.404400 +vn 0.605200 -0.685700 0.404400 +vn 0.514700 0.685700 0.514700 +vn 0.514700 -0.685700 0.514700 +vn 0.404400 0.685700 0.605200 +vn 0.404400 -0.685700 0.605200 +vn 0.278500 0.685700 0.672500 +vn 0.278500 -0.685700 0.672500 +vn 0.142000 0.685700 0.713900 +vn 0.142000 -0.685700 0.713900 +vn 0.000000 0.685700 0.727900 +vn 0.000000 -0.685700 0.727900 +vn -0.142000 0.685700 0.713900 +vn -0.142000 -0.685700 0.713900 +vn -0.278500 0.685700 0.672500 +vn -0.278500 -0.685700 0.672500 +vn -0.404400 0.685700 0.605200 +vn -0.404400 -0.685700 0.605200 +vn -0.514700 0.685700 0.514700 +vn -0.514700 -0.685700 0.514700 +vn -0.605200 0.685700 0.404400 +vn -0.605200 -0.685700 0.404400 +vn -0.672500 0.685700 0.278500 +vn -0.672500 -0.685700 0.278500 +vn -0.713900 0.685700 0.142000 +vn -0.713900 -0.685700 0.142000 +vn -0.727900 0.685700 0.000000 +vn -0.727900 -0.685700 0.000000 +vn -0.713900 0.685700 -0.142000 +vn -0.713900 -0.685700 -0.142000 +vn -0.672500 0.685700 -0.278500 +vn -0.672500 -0.685700 -0.278500 +vn -0.605200 0.685700 -0.404400 +vn -0.605200 -0.685700 -0.404400 +vn -0.514700 0.685700 -0.514700 +vn -0.514700 -0.685700 -0.514700 +vn -0.404400 0.685700 -0.605200 +vn -0.404400 -0.685700 -0.605200 +vn -0.278500 0.685700 -0.672500 +vn -0.278500 -0.685700 -0.672500 +vn -0.142000 0.685700 -0.713900 +vn -0.142000 -0.685700 -0.713900 +s 1 +f 1/1/1 2/2/2 4/3/3 3/4/4 +f 3/4/4 4/3/3 6/5/5 5/6/6 +f 5/6/6 6/5/5 8/7/7 7/8/8 +f 7/8/8 8/7/7 10/9/9 9/10/10 +f 9/10/10 10/9/9 12/11/11 11/12/12 +f 11/12/12 12/11/11 14/13/13 13/14/14 +f 13/14/14 14/13/13 16/15/15 15/16/16 +f 15/16/16 16/15/15 18/17/17 17/18/18 +f 17/19/18 18/20/17 20/21/19 19/22/20 +f 19/22/20 20/21/19 22/23/21 21/24/22 +f 21/24/22 22/23/21 24/25/23 23/26/24 +f 23/26/24 24/25/23 26/27/25 25/28/26 +f 25/28/26 26/27/25 28/29/27 27/30/28 +f 27/30/28 28/29/27 30/31/29 29/32/30 +f 29/32/30 30/31/29 32/33/31 31/34/32 +f 31/34/32 32/33/31 34/2/33 33/1/34 +f 33/1/34 34/2/33 36/3/35 35/4/36 +f 35/4/36 36/3/35 38/5/37 37/6/38 +f 37/6/38 38/5/37 40/7/39 39/8/40 +f 39/8/40 40/7/39 42/9/41 41/10/42 +f 41/10/42 42/9/41 44/11/43 43/12/44 +f 43/12/44 44/11/43 46/13/45 45/14/46 +f 45/14/46 46/13/45 48/15/47 47/16/48 +f 47/16/48 48/15/47 50/17/49 49/18/50 +f 49/19/50 50/20/49 52/21/51 51/22/52 +f 51/22/52 52/21/51 54/23/53 53/24/54 +f 53/24/54 54/23/53 56/25/55 55/26/56 +f 55/26/56 56/25/55 58/27/57 57/28/58 +f 57/28/58 58/27/57 60/29/59 59/30/60 +f 59/30/60 60/29/59 62/31/61 61/32/62 +f 4/35/3 2/2/2 64/36/63 62/37/61 60/38/59 58/39/57 56/40/55 54/41/53 52/42/51 50/43/49 48/44/47 46/45/45 44/46/43 42/47/41 40/48/39 38/49/37 36/50/35 34/1/33 32/51/31 30/52/29 28/53/27 26/54/25 24/55/23 22/56/21 20/57/19 18/58/17 16/59/15 14/60/13 12/61/11 10/62/9 8/63/7 6/64/5 +f 63/34/64 64/33/63 2/2/2 1/1/1 +f 61/32/62 62/31/61 64/33/63 63/34/64 +f 1/65/1 3/51/4 5/52/6 7/53/8 9/54/10 11/66/12 13/56/14 15/57/16 17/67/18 19/59/20 21/60/22 23/61/24 25/62/26 27/68/28 29/64/30 31/35/32 33/69/34 35/36/36 37/37/38 39/38/40 41/39/42 43/70/44 45/41/46 47/42/48 49/71/50 51/44/52 53/45/54 55/46/56 57/47/58 59/72/60 61/49/62 63/50/64 diff --git a/mods/technic-master/technic/models/technic_cylinder_horizontal.obj b/mods/technic-master/technic/models/technic_cylinder_horizontal.obj new file mode 100644 index 0000000..d00b1d6 --- /dev/null +++ b/mods/technic-master/technic/models/technic_cylinder_horizontal.obj @@ -0,0 +1,238 @@ +# Blender v2.73 (sub 0) OBJ File: 'technic-cylinder-horizontal.blend' +# www.blender.org +o Cylinder_Cylinder.001 +v 0.500000 0.000000 -0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.097545 -0.490393 +v -0.500000 0.097545 -0.490393 +v 0.500000 0.191342 -0.461940 +v -0.500000 0.191342 -0.461940 +v 0.500000 0.277785 -0.415735 +v -0.500000 0.277785 -0.415735 +v 0.500000 0.353553 -0.353553 +v -0.500000 0.353553 -0.353554 +v 0.500000 0.415735 -0.277785 +v -0.500000 0.415735 -0.277785 +v 0.500000 0.461940 -0.191342 +v -0.500000 0.461940 -0.191342 +v 0.500000 0.490393 -0.097545 +v -0.500000 0.490393 -0.097545 +v 0.500000 0.500000 -0.000000 +v -0.500000 0.500000 -0.000000 +v 0.500000 0.490393 0.097545 +v -0.500000 0.490393 0.097545 +v 0.500000 0.461940 0.191342 +v -0.500000 0.461940 0.191341 +v 0.500000 0.415735 0.277785 +v -0.500000 0.415735 0.277785 +v 0.500000 0.353553 0.353553 +v -0.500000 0.353553 0.353553 +v 0.500000 0.277785 0.415735 +v -0.500000 0.277785 0.415735 +v 0.500000 0.191342 0.461940 +v -0.500000 0.191342 0.461940 +v 0.500000 0.097545 0.490393 +v -0.500000 0.097545 0.490392 +v 0.500000 -0.000000 0.500000 +v -0.500000 -0.000000 0.500000 +v 0.500000 -0.097546 0.490392 +v -0.500000 -0.097545 0.490392 +v 0.500000 -0.191342 0.461940 +v -0.500000 -0.191342 0.461939 +v 0.500000 -0.277785 0.415734 +v -0.500000 -0.277785 0.415734 +v 0.500000 -0.353554 0.353553 +v -0.500000 -0.353554 0.353553 +v 0.500000 -0.415735 0.277785 +v -0.500000 -0.415735 0.277785 +v 0.500000 -0.461940 0.191341 +v -0.500000 -0.461940 0.191341 +v 0.500000 -0.490393 0.097545 +v -0.500000 -0.490393 0.097544 +v 0.500000 -0.500000 -0.000001 +v -0.500000 -0.500000 -0.000001 +v 0.500000 -0.490393 -0.097546 +v -0.500000 -0.490393 -0.097546 +v 0.500000 -0.461940 -0.191342 +v -0.500000 -0.461940 -0.191343 +v 0.500000 -0.415734 -0.277786 +v -0.500000 -0.415734 -0.277786 +v 0.500000 -0.353553 -0.353554 +v -0.500000 -0.353553 -0.353554 +v 0.500000 -0.277785 -0.415735 +v -0.500000 -0.277784 -0.415735 +v 0.500000 -0.191341 -0.461940 +v -0.500000 -0.191341 -0.461940 +v 0.500000 -0.097544 -0.490393 +v -0.500000 -0.097544 -0.490393 +vt 0.000003 0.499996 +vt 0.999995 0.499995 +vt 0.999996 0.562495 +vt 0.000002 0.562496 +vt 0.999997 0.624995 +vt 0.000003 0.624996 +vt 0.999998 0.687496 +vt 0.000002 0.687496 +vt 0.999999 0.749997 +vt 0.000002 0.749996 +vt 0.999999 0.812497 +vt 0.000002 0.812497 +vt 1.000000 0.874997 +vt 0.000001 0.874997 +vt 1.000000 0.937498 +vt 0.000001 0.937497 +vt 1.000000 0.999998 +vt 0.000001 0.999998 +vt 0.000003 0.000005 +vt 0.999976 0.000001 +vt 0.999977 0.062500 +vt 0.000003 0.062505 +vt 0.999978 0.124999 +vt 0.000004 0.125004 +vt 0.999980 0.187498 +vt 0.000005 0.187503 +vt 0.999982 0.249997 +vt 0.000005 0.250003 +vt 0.999983 0.312497 +vt 0.000006 0.312502 +vt 0.999985 0.374997 +vt 0.000007 0.375001 +vt 0.999986 0.437496 +vt 0.000007 0.437501 +vt 0.009601 0.597512 +vt 0.009614 0.402424 +vt 0.038072 0.308628 +vt 0.084283 0.222189 +vt 0.146469 0.146424 +vt 0.222242 0.084247 +vt 0.308689 0.038047 +vt 0.402487 0.009601 +vt 0.500033 -0.000000 +vt 0.597577 0.009613 +vt 0.691371 0.038072 +vt 0.777811 0.084283 +vt 0.853575 0.146469 +vt 0.915753 0.222242 +vt 0.961952 0.308688 +vt 0.990398 0.402486 +vt 0.990386 0.597576 +vt 0.961928 0.691370 +vt 0.915717 0.777812 +vt 0.853531 0.853576 +vt 0.777759 0.915752 +vt 0.691313 0.961951 +vt 0.597515 0.990398 +vt 0.499970 1.000000 +vt 0.402425 0.990386 +vt 0.308630 0.961927 +vt 0.222189 0.915717 +vt 0.146424 0.853530 +vt 0.084248 0.777757 +vt 0.038048 0.691311 +vt 0.999999 0.500073 +vt 0.777724 0.915774 +vt 0.499927 0.999999 +vt 0.084224 0.777723 +vt 0.000000 0.499925 +vt 0.222279 0.084223 +vt 0.500078 -0.000000 +vt 0.915775 0.222276 +vn 0.685700 0.000000 -0.727900 +vn -0.685700 0.000000 -0.727900 +vn -0.685700 0.142000 -0.713900 +vn 0.685700 0.142000 -0.713900 +vn -0.685700 0.278500 -0.672500 +vn 0.685700 0.278500 -0.672500 +vn -0.685700 0.404400 -0.605200 +vn 0.685700 0.404400 -0.605200 +vn -0.685700 0.514700 -0.514700 +vn 0.685700 0.514700 -0.514700 +vn -0.685700 0.605200 -0.404400 +vn 0.685700 0.605200 -0.404400 +vn -0.685700 0.672500 -0.278500 +vn 0.685700 0.672500 -0.278500 +vn -0.685700 0.713900 -0.142000 +vn 0.685700 0.713900 -0.142000 +vn -0.685700 0.727900 0.000000 +vn 0.685700 0.727900 0.000000 +vn -0.685700 0.713900 0.142000 +vn 0.685700 0.713900 0.142000 +vn -0.685700 0.672500 0.278500 +vn 0.685700 0.672500 0.278500 +vn -0.685700 0.605200 0.404400 +vn 0.685700 0.605200 0.404400 +vn -0.685700 0.514700 0.514700 +vn 0.685700 0.514700 0.514700 +vn -0.685700 0.404400 0.605200 +vn 0.685700 0.404400 0.605200 +vn -0.685700 0.278500 0.672500 +vn 0.685700 0.278500 0.672500 +vn -0.685700 0.142000 0.713900 +vn 0.685700 0.142000 0.713900 +vn -0.685700 0.000000 0.727900 +vn 0.685700 0.000000 0.727900 +vn -0.685700 -0.142000 0.713900 +vn 0.685700 -0.142000 0.713900 +vn -0.685700 -0.278500 0.672500 +vn 0.685700 -0.278500 0.672500 +vn -0.685700 -0.404400 0.605200 +vn 0.685700 -0.404400 0.605200 +vn -0.685700 -0.514700 0.514700 +vn 0.685700 -0.514700 0.514700 +vn -0.685700 -0.605200 0.404400 +vn 0.685700 -0.605200 0.404400 +vn -0.685700 -0.672500 0.278500 +vn 0.685700 -0.672500 0.278500 +vn -0.685700 -0.713900 0.142000 +vn 0.685700 -0.713900 0.142000 +vn -0.685700 -0.727900 0.000000 +vn 0.685700 -0.727900 0.000000 +vn -0.685700 -0.713900 -0.142000 +vn 0.685700 -0.713900 -0.142000 +vn -0.685700 -0.672500 -0.278500 +vn 0.685700 -0.672500 -0.278500 +vn -0.685700 -0.605200 -0.404400 +vn 0.685700 -0.605200 -0.404400 +vn -0.685700 -0.514700 -0.514700 +vn 0.685700 -0.514700 -0.514700 +vn -0.685700 -0.404400 -0.605200 +vn 0.685700 -0.404400 -0.605200 +vn -0.685700 -0.278500 -0.672500 +vn 0.685700 -0.278500 -0.672500 +vn -0.685700 -0.142000 -0.713900 +vn 0.685700 -0.142000 -0.713900 +s 1 +f 1/1/1 2/2/2 4/3/3 3/4/4 +f 3/4/4 4/3/3 6/5/5 5/6/6 +f 5/6/6 6/5/5 8/7/7 7/8/8 +f 7/8/8 8/7/7 10/9/9 9/10/10 +f 9/10/10 10/9/9 12/11/11 11/12/12 +f 11/12/12 12/11/11 14/13/13 13/14/14 +f 13/14/14 14/13/13 16/15/15 15/16/16 +f 15/16/16 16/15/15 18/17/17 17/18/18 +f 17/19/18 18/20/17 20/21/19 19/22/20 +f 19/22/20 20/21/19 22/23/21 21/24/22 +f 21/24/22 22/23/21 24/25/23 23/26/24 +f 23/26/24 24/25/23 26/27/25 25/28/26 +f 25/28/26 26/27/25 28/29/27 27/30/28 +f 27/30/28 28/29/27 30/31/29 29/32/30 +f 29/32/30 30/31/29 32/33/31 31/34/32 +f 31/34/32 32/33/31 34/2/33 33/1/34 +f 33/1/34 34/2/33 36/3/35 35/4/36 +f 35/4/36 36/3/35 38/5/37 37/6/38 +f 37/6/38 38/5/37 40/7/39 39/8/40 +f 39/8/40 40/7/39 42/9/41 41/10/42 +f 41/10/42 42/9/41 44/11/43 43/12/44 +f 43/12/44 44/11/43 46/13/45 45/14/46 +f 45/14/46 46/13/45 48/15/47 47/16/48 +f 47/16/48 48/15/47 50/17/49 49/18/50 +f 49/19/50 50/20/49 52/21/51 51/22/52 +f 51/22/52 52/21/51 54/23/53 53/24/54 +f 53/24/54 54/23/53 56/25/55 55/26/56 +f 55/26/56 56/25/55 58/27/57 57/28/58 +f 57/28/58 58/27/57 60/29/59 59/30/60 +f 59/30/60 60/29/59 62/31/61 61/32/62 +f 4/35/3 2/1/2 64/36/63 62/37/61 60/38/59 58/39/57 56/40/55 54/41/53 52/42/51 50/43/49 48/44/47 46/45/45 44/46/43 42/47/41 40/48/39 38/49/37 36/50/35 34/2/33 32/51/31 30/52/29 28/53/27 26/54/25 24/55/23 22/56/21 20/57/19 18/58/17 16/59/15 14/60/13 12/61/11 10/62/9 8/63/7 6/64/5 +f 63/34/64 64/33/63 2/2/2 1/1/1 +f 61/32/62 62/31/61 64/33/63 63/34/64 +f 1/65/1 3/51/4 5/52/6 7/53/8 9/54/10 11/66/12 13/56/14 15/57/16 17/67/18 19/59/20 21/60/22 23/61/24 25/62/26 27/68/28 29/64/30 31/35/32 33/69/34 35/36/36 37/37/38 39/38/40 41/39/42 43/70/44 45/41/46 47/42/48 49/71/50 51/44/52 53/45/54 55/46/56 57/47/58 59/72/60 61/49/62 63/50/64 diff --git a/mods/technic-master/technic/models/technic_innercorner.obj b/mods/technic-master/technic/models/technic_innercorner.obj new file mode 100644 index 0000000..c962aeb --- /dev/null +++ b/mods/technic-master/technic/models/technic_innercorner.obj @@ -0,0 +1,33 @@ +# Blender v2.73 (sub 0) OBJ File: 'technic-icorner.blend' +# www.blender.org +o Cube_Cube.000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn -0.000000 -0.000000 1.000000 +vn -0.000000 -0.000000 -1.000000 +vn 0.707100 0.707100 -0.000000 +vn 1.000000 0.000000 -0.000000 +vn 0.000000 -1.000000 -0.000000 +vn -1.000000 -0.000000 -0.000000 +vn 0.000000 0.707100 -0.707100 +s off +f 6/1/1 1/2/1 7/3/1 8/4/1 +f 2/1/2 5/3/2 3/4/2 +f 2/1/3 1/2/3 5/4/3 +f 6/2/4 8/3/4 9/4/4 +f 9/1/5 8/2/5 7/3/5 3/4/5 +f 3/3/6 7/4/6 1/1/6 2/2/6 +f 1/1/7 6/2/7 9/3/7 +l 1 4 +l 3 4 diff --git a/mods/technic-master/technic/models/technic_innercorner_upsdown.obj b/mods/technic-master/technic/models/technic_innercorner_upsdown.obj new file mode 100644 index 0000000..68eb560 --- /dev/null +++ b/mods/technic-master/technic/models/technic_innercorner_upsdown.obj @@ -0,0 +1,33 @@ +# Blender v2.73 (sub 0) OBJ File: 'technic-icorner-upsdown.blend' +# www.blender.org +o Cube_Cube.000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 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 +vn 1.000000 -0.000000 0.000000 +vn -0.000000 -0.707100 -0.707100 +vn -0.000000 0.000000 -1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.707100 -0.707100 -0.000000 +s off +f 6/1/1 1/2/1 7/3/1 8/4/1 +f 2/1/2 5/3/2 3/4/2 +f 2/1/3 1/2/3 5/4/3 +f 6/2/4 8/3/4 9/4/4 +f 9/1/5 8/2/5 7/3/5 3/4/5 +f 3/3/6 7/4/6 1/1/6 2/2/6 +f 1/1/7 6/2/7 9/3/7 +l 1 4 +l 3 4 diff --git a/mods/technic-master/technic/models/technic_oblate_spheroid.obj b/mods/technic-master/technic/models/technic_oblate_spheroid.obj new file mode 100644 index 0000000..e949f5b --- /dev/null +++ b/mods/technic-master/technic/models/technic_oblate_spheroid.obj @@ -0,0 +1,300 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_blob_onetexture.blend' +# www.blender.org +o Cube +v 0.213679 -0.450000 -0.213679 +v -0.213679 -0.450000 0.213680 +v 0.213680 -0.450000 0.213680 +v -0.213679 -0.450000 -0.213679 +v 0.213679 0.450000 -0.213679 +v -0.213679 0.450000 -0.213679 +v 0.213679 0.450000 0.213680 +v 0.500000 -0.000003 0.500000 +v 0.277785 -0.415735 0.277785 +v -0.277785 -0.415735 0.277785 +v 0.353553 -0.353554 0.353553 +v -0.353553 -0.353554 0.353553 +v -0.500000 -0.000002 0.500000 +v 0.415735 -0.277786 0.415735 +v -0.277785 0.415735 0.277785 +v 0.277785 0.415735 0.277785 +v -0.415735 -0.277785 0.415735 +v 0.353554 0.353553 0.353554 +v -0.500000 -0.000002 -0.499983 +v 0.461940 -0.191342 0.461940 +v -0.461940 -0.191342 0.461940 +v -0.353553 0.353553 0.353554 +v 0.490393 -0.097546 0.490393 +v 0.500000 -0.000002 -0.500000 +v 0.490393 0.097545 -0.490392 +v 0.490393 0.097545 0.490393 +v -0.490393 -0.097546 0.490393 +v 0.490393 -0.097545 -0.490393 +v 0.461940 0.191341 0.461940 +v -0.461940 0.191341 0.461940 +v 0.461940 0.191342 -0.461940 +v -0.490393 0.097545 0.490393 +v 0.415735 0.277785 0.415735 +v -0.490393 0.097545 -0.490392 +v -0.415735 0.277785 0.415735 +v 0.461940 -0.191341 -0.461940 +v 0.415735 0.277785 -0.415735 +v -0.461940 0.191341 -0.461940 +v -0.415735 0.277785 -0.415735 +v 0.415735 -0.277785 -0.415735 +v -0.490393 -0.097546 -0.490392 +v 0.353553 0.353553 -0.353553 +v -0.213679 0.450000 0.213680 +v -0.353553 0.353553 -0.353553 +v 0.277785 0.415735 -0.277785 +v -0.461940 -0.191342 -0.461939 +v 0.353554 -0.353553 -0.353554 +v -0.277785 0.415735 -0.277785 +v -0.415735 -0.277785 -0.415734 +v 0.277786 -0.415735 -0.277785 +v -0.353553 -0.353554 -0.353553 +v -0.277785 -0.415735 -0.277784 +vt 0.038487 0.679029 +vt 0.010047 0.589789 +vt 0.990397 0.589790 +vt 0.915772 0.767073 +vt 0.084671 0.767071 +vt 0.961957 0.679029 +vt 0.852473 0.146294 +vt 0.914576 0.232749 +vt 0.084146 0.232744 +vt 0.712776 0.000003 +vt 0.221926 0.061588 +vt 0.285951 0.000000 +vt 0.285945 0.999818 +vt 0.221920 0.938229 +vt 0.712771 0.999818 +vt 0.009578 0.589789 +vt 0.989138 0.589792 +vt 0.960721 0.679031 +vt 0.286638 0.000000 +vt 0.777884 0.061589 +vt 0.222561 0.061589 +vt 0.777608 0.938229 +vt 0.222164 0.938229 +vt 0.146413 0.853527 +vt 0.286255 0.999818 +vt 0.713517 0.999818 +vt 0.776800 0.061592 +vt 0.146251 0.146290 +vt 0.000000 0.499907 +vt 0.989139 0.410032 +vt 0.998734 0.499910 +vt 0.853618 0.146291 +vt 0.915772 0.232746 +vt 0.146826 0.146290 +vt 0.961957 0.320789 +vt 0.084672 0.232745 +vt 0.990397 0.410029 +vt 0.038487 0.320789 +vt 0.776796 0.938230 +vt 0.777790 0.938229 +vt 0.146467 0.853526 +vt 0.853556 0.853527 +vt 0.146825 0.853526 +vt 1.000000 0.499907 +vt 0.010047 0.410028 +vt 0.146246 0.853527 +vt 0.222559 0.938228 +vt 0.777882 0.938230 +vt 0.915737 0.767073 +vt 0.084287 0.767072 +vt 0.038083 0.679029 +vt 0.961941 0.679029 +vt 0.037995 0.679029 +vt 0.960723 0.320792 +vt 0.037998 0.320787 +vt 0.009580 0.410028 +vt 0.990167 0.589790 +vt 0.999772 0.499909 +vt 0.961721 0.679029 +vt 0.084246 0.767072 +vt 0.915526 0.767072 +vt 0.853359 0.853527 +vt 0.914573 0.767074 +vt 0.084142 0.767072 +vt 0.852470 0.853528 +vt 0.777609 0.061590 +vt 0.853360 0.146293 +vt 0.222166 0.061589 +vt 0.146414 0.146291 +vt 0.915527 0.232748 +vt 0.084247 0.232746 +vt 0.961721 0.320791 +vt 0.038052 0.320789 +vt 0.990167 0.410031 +vt 0.713686 0.999818 +vt 0.749950 0.250050 +vt 0.749950 0.749950 +vt 0.250050 0.749950 +vt 0.250050 0.250050 +vt 0.713807 0.000000 +vt 0.286258 0.000000 +vt 0.713519 0.000001 +vt 0.250050 0.250050 +vt 0.749950 0.250050 +vt 0.749950 0.749950 +vt 0.286636 0.999817 +vt 0.777791 0.061589 +vt 0.146467 0.146291 +vt 0.084287 0.232745 +vt 0.915737 0.232746 +vt 0.961941 0.320789 +vt 0.000444 0.499907 +vt 0.713687 0.000000 +vt 0.713805 0.999818 +vn -0.620400 0.479600 0.620400 +vn -0.683900 0.254100 0.683900 +vn 0.683900 0.254100 0.683900 +vn 0.531000 0.660300 0.531000 +vn -0.531000 0.660300 0.531000 +vn 0.620400 0.479600 0.620400 +vn -0.429700 -0.794100 0.429700 +vn -0.531000 -0.660300 0.531000 +vn -0.531000 -0.660300 -0.531000 +vn -0.185700 -0.964900 0.185700 +vn -0.325800 -0.887500 -0.325800 +vn -0.185700 -0.964900 -0.185700 +vn -0.185700 0.964900 -0.185700 +vn -0.325800 0.887500 -0.325800 +vn -0.185700 0.964900 0.185700 +vn -0.683900 0.254000 -0.683900 +vn 0.325800 -0.887500 0.325800 +vn -0.325800 -0.887500 0.325800 +vn 0.325800 0.887500 -0.325800 +vn 0.429700 0.794100 -0.429700 +vn 0.185700 0.964900 -0.185700 +vn -0.429700 -0.794100 -0.429700 +vn -0.707100 0.000000 -0.707100 +vn -0.683900 -0.254100 0.683900 +vn -0.707100 0.000000 0.707100 +vn 0.429700 -0.794100 0.429700 +vn 0.531000 -0.660300 0.531000 +vn 0.620400 -0.479600 0.620400 +vn 0.683900 -0.254100 0.683900 +vn -0.620400 -0.479600 0.620400 +vn -0.325800 0.887500 0.325800 +vn 0.185700 0.964900 0.185700 +vn 0.325800 0.887500 0.325800 +vn 0.429700 0.794100 0.429700 +vn -0.429700 0.794100 0.429700 +vn 0.707100 0.000000 0.707100 +vn -0.429700 0.794100 -0.429700 +vn 0.531000 0.660300 -0.531000 +vn 0.683900 0.254100 -0.683900 +vn 0.707100 0.000000 -0.707100 +vn 0.620400 0.479600 -0.620400 +vn -0.620400 0.479600 -0.620400 +vn -0.620400 -0.479600 -0.620400 +vn -0.683900 -0.254000 -0.683900 +vn 0.683900 -0.254100 -0.683900 +vn -0.531000 0.660300 -0.531000 +vn 0.325800 -0.887500 -0.325800 +vn 0.429700 -0.794100 -0.429700 +vn 0.531000 -0.660300 -0.531000 +vn 0.620400 -0.479600 -0.620400 +vn 0.185700 -0.964900 -0.185700 +vn 0.185700 -0.964900 0.185700 +s 1 +f 30/1/1 32/2/2 26/3/3 +f 33/4/4 35/5/5 29/6/6 +f 12/7/7 17/8/8 49/9/9 +f 2/10/10 52/11/11 4/12/12 +f 6/13/13 48/14/14 43/15/15 +f 34/16/16 32/17/2 30/18/1 +f 2/19/10 9/20/17 10/21/18 +f 48/22/14 45/23/19 42/24/20 +f 5/25/21 45/23/19 6/26/13 +f 10/27/18 12/7/7 51/28/22 +f 19/29/23 27/30/24 13/31/25 +f 9/20/17 11/32/26 10/21/18 +f 11/32/26 14/33/27 12/34/7 +f 14/33/27 20/35/28 17/36/8 +f 20/35/28 23/37/29 21/38/30 +f 43/15/15 48/14/14 15/39/31 +f 7/25/32 16/23/33 45/40/19 +f 18/41/34 42/42/20 45/40/19 +f 29/6/6 30/1/1 26/3/3 +f 22/43/35 33/4/4 18/42/34 +f 26/3/3 32/2/2 8/44/36 +f 8/44/36 27/45/24 23/37/29 +f 11/32/26 12/34/7 10/21/18 +f 14/33/27 17/36/8 12/34/7 +f 20/35/28 21/38/30 17/36/8 +f 23/37/29 27/45/24 21/38/30 +f 10/27/18 52/11/11 2/10/10 +f 15/39/31 48/14/14 44/46/37 +f 22/43/35 35/5/5 33/4/4 +f 15/47/31 22/43/35 16/48/33 +f 37/49/38 42/42/20 18/41/34 +f 33/50/4 29/51/6 37/49/38 +f 8/29/36 25/3/39 26/16/3 +f 24/44/40 25/3/39 8/29/36 +f 29/51/6 26/16/3 31/52/41 +f 26/16/3 25/3/39 31/52/41 +f 29/51/6 31/52/41 37/49/38 +f 38/53/42 34/16/16 30/18/1 +f 19/29/23 32/17/2 34/16/16 +f 13/31/25 32/17/2 19/29/23 +f 17/8/8 21/54/30 46/55/43 +f 21/54/30 27/30/24 41/56/44 +f 8/29/36 28/37/45 24/44/40 +f 34/57/16 25/16/39 19/58/23 +f 38/59/42 31/51/41 34/57/16 +f 31/51/41 25/16/39 34/57/16 +f 37/60/38 38/59/42 39/61/46 +f 37/60/38 31/51/41 38/59/42 +f 44/62/37 42/24/20 37/60/38 +f 38/53/42 30/18/1 35/63/5 +f 39/64/46 35/63/5 22/65/35 +f 52/66/11 51/67/22 50/68/47 +f 51/67/22 47/69/48 50/68/47 +f 51/67/22 49/70/9 47/69/48 +f 49/70/9 40/71/49 47/69/48 +f 49/70/9 46/72/43 40/71/49 +f 46/72/43 36/73/50 40/71/49 +f 19/58/23 28/56/45 41/74/44 +f 46/72/43 41/74/44 36/73/50 +f 41/74/44 28/56/45 36/73/50 +f 22/43/35 18/42/34 16/48/33 +f 5/75/21 7/25/32 45/40/19 +f 2/76/10 4/77/12 1/78/51 3/79/52 +f 44/62/37 48/22/14 42/24/20 +f 35/5/5 30/1/1 29/6/6 +f 3/80/52 9/20/17 2/19/10 +f 45/23/19 48/22/14 6/26/13 +f 1/81/51 52/66/11 50/68/47 +f 39/61/46 44/62/37 37/60/38 +f 52/66/11 1/81/51 4/82/12 +f 24/29/40 28/56/45 19/58/23 +f 7/78/32 5/83/21 6/84/13 43/85/15 +f 24/29/40 19/58/23 25/16/39 +f 15/47/31 16/48/33 43/86/15 +f 22/65/35 44/46/37 39/64/46 +f 39/64/46 38/53/42 35/63/5 +f 41/56/44 27/30/24 19/29/23 +f 46/55/43 21/54/30 41/56/44 +f 49/9/9 17/8/8 46/55/43 +f 51/28/22 12/7/7 49/9/9 +f 52/11/11 10/27/18 51/28/22 +f 9/68/17 50/87/47 11/88/26 +f 50/87/47 47/32/48 11/88/26 +f 11/88/26 47/32/48 14/89/27 +f 47/32/48 40/90/49 14/89/27 +f 14/89/27 40/90/49 20/73/28 +f 40/90/49 36/91/50 20/73/28 +f 23/56/29 28/37/45 8/29/36 +f 20/73/28 36/91/50 23/56/29 +f 36/91/50 28/37/45 23/56/29 +f 13/92/25 8/44/36 32/2/2 +f 50/87/47 9/68/17 1/93/51 +f 13/92/25 27/45/24 8/44/36 +f 16/23/33 18/41/34 45/40/19 +f 22/65/35 15/39/31 44/46/37 +f 9/68/17 3/81/52 1/93/51 +f 33/50/4 37/49/38 18/41/34 +f 43/86/15 16/48/33 7/94/32 diff --git a/mods/technic-master/technic/models/technic_one_curved_edge.obj b/mods/technic-master/technic/models/technic_one_curved_edge.obj new file mode 100644 index 0000000..bb82040 --- /dev/null +++ b/mods/technic-master/technic/models/technic_one_curved_edge.obj @@ -0,0 +1,132 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_quarter_round_onetexture.blend' +# www.blender.org +o Cylinder +v -0.500000 0.490393 -0.097545 +v 0.500000 0.490393 -0.097545 +v -0.500000 0.461940 -0.191342 +v 0.500000 0.461940 -0.191342 +v -0.500000 0.415735 -0.277785 +v 0.500000 0.415735 -0.277785 +v -0.500000 0.353553 -0.353553 +v 0.500000 0.353553 -0.353553 +v -0.500000 0.277785 -0.415735 +v 0.500000 0.277785 -0.415735 +v -0.500000 0.191342 -0.461940 +v 0.500000 0.191342 -0.461940 +v -0.500000 0.097545 -0.490393 +v 0.500000 0.097545 -0.490393 +v 0.500000 -0.000000 -0.500000 +v 0.500000 0.490393 -0.097545 +v -0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.000000 -0.500000 +v -0.500000 0.500000 -0.000000 +v 0.500000 0.500000 0.000000 +v -0.500000 0.490393 -0.097545 +v -0.500000 0.461940 -0.191342 +v -0.500000 0.415735 -0.277785 +v -0.500000 0.353553 -0.353553 +v -0.500000 0.277785 -0.415735 +v -0.500000 0.191342 -0.461940 +v -0.500000 0.097545 -0.490393 +v -0.500000 0.000000 0.000000 +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.000000 -0.500000 +v -0.500000 0.500000 -0.000000 +v 0.500000 0.461940 -0.191342 +v 0.500000 0.415735 -0.277785 +v 0.500000 0.353553 -0.353553 +v 0.500000 0.277785 -0.415735 +v 0.500000 0.191342 -0.461940 +v 0.500000 0.097545 -0.490393 +v 0.500000 -0.000000 -0.500000 +v 0.500000 -0.000000 -0.000000 +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.000000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +vt 1.000000 0.000000 +vt 1.000000 0.500000 +vt 0.500001 0.500000 +vt 0.500001 1.000000 +vt 0.000003 1.000000 +vt 0.000003 0.000000 +vt 0.597546 0.990393 +vt 0.691342 0.961940 +vt 1.000000 1.000000 +vt 0.990393 0.597545 +vt 0.961940 0.691341 +vt 0.777786 0.915735 +vt 0.853554 0.853553 +vt 0.915735 0.777785 +vt 0.146446 0.853552 +vt 0.084265 0.777783 +vt 0.038060 0.691340 +vt 0.308658 0.961938 +vt 0.222214 0.915733 +vt 0.000000 0.499999 +vt 0.402454 0.990391 +vt 0.009607 0.597544 +vt 1.000000 0.375000 +vt 0.000000 0.375000 +vt 0.000000 0.250000 +vt 1.000000 0.250000 +vt 0.000000 0.125000 +vt 1.000000 0.125000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 0.000000 0.750000 +vt 1.000000 0.750000 +vt 0.000000 0.625000 +vt 1.000000 0.625000 +vn 1.000000 -0.000000 0.000000 +vn -0.000000 0.000000 1.000000 +vn -0.000000 -1.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 0.923900 -0.382700 +vn -0.000000 0.831500 -0.555600 +vn -0.000000 0.707100 -0.707100 +vn -0.000000 0.555600 -0.831500 +vn -0.000000 0.382700 -0.923900 +vn -0.000000 0.195100 -0.980800 +vn 0.000000 1.000000 -0.000000 +vn 0.000000 0.998800 -0.049100 +vn -0.000000 0.049100 -0.998800 +vn -0.000000 0.000000 -1.000000 +s off +f 46/1/1 44/2/1 45/3/1 49/4/1 48/5/1 47/6/1 +f 16/7/1 49/4/1 45/3/1 38/8/1 +f 55/5/2 53/6/2 54/1/2 56/9/2 +f 43/10/1 42/11/1 45/3/1 44/2/1 +f 39/12/1 38/8/1 45/3/1 40/13/1 +f 41/14/1 40/13/1 45/3/1 42/11/1 +f 50/9/3 51/5/3 52/6/3 17/1/3 +f 28/15/4 29/16/4 30/17/4 32/3/4 +f 26/18/4 27/19/4 28/15/4 32/3/4 +f 35/9/4 37/4/4 32/3/4 36/20/4 34/6/4 33/1/4 +f 37/4/4 25/21/4 26/18/4 32/3/4 +f 30/17/4 31/22/4 36/20/4 32/3/4 +s 1 +f 1/23/5 2/24/5 4/25/6 3/26/6 +f 3/26/6 4/25/6 6/27/7 5/28/7 +f 5/28/7 6/27/7 8/6/8 7/1/8 +f 7/9/8 8/5/8 10/29/9 9/30/9 +f 9/30/9 10/29/9 12/31/10 11/32/10 +f 11/32/10 12/31/10 14/33/11 13/34/11 +f 21/5/12 24/20/13 23/2/13 20/9/12 +f 13/34/11 14/33/11 15/20/14 22/2/14 +f 23/2/13 24/20/13 2/24/5 1/23/5 +f 18/1/15 22/2/14 15/20/14 19/6/15 diff --git a/mods/technic-master/technic/models/technic_outercorner.obj b/mods/technic-master/technic/models/technic_outercorner.obj new file mode 100644 index 0000000..60ccae6 --- /dev/null +++ b/mods/technic-master/technic/models/technic_outercorner.obj @@ -0,0 +1,23 @@ +# Blender v2.73 (sub 0) OBJ File: 'technic-ocorner.blend' +# www.blender.org +o Cube_Cube.002 +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn -1.000000 -0.000000 0.000000 +vn -0.000000 0.707100 -0.707100 +vn 0.707100 0.707100 -0.000000 +s off +f 3/1/1 2/2/1 4/3/1 5/4/1 +f 1/2/2 3/3/2 5/4/2 +f 1/1/3 2/3/3 3/4/3 +f 1/1/4 4/3/4 2/4/4 +f 1/2/5 5/3/5 4/4/5 diff --git a/mods/technic-master/technic/models/technic_outercorner_upsdown.obj b/mods/technic-master/technic/models/technic_outercorner_upsdown.obj new file mode 100644 index 0000000..c89de8a --- /dev/null +++ b/mods/technic-master/technic/models/technic_outercorner_upsdown.obj @@ -0,0 +1,23 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_ocorner_onetexture.blend' +# www.blender.org +o Cube_Cube.002 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.000000 1.000000 -0.000000 +vn -1.000000 0.000000 -0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.707100 -0.707100 0.000000 +vn -0.000000 -0.707100 -0.707100 +s off +f 3/1/1 2/2/1 4/3/1 5/4/1 +f 1/2/2 3/3/2 5/4/2 +f 1/1/3 2/3/3 3/4/3 +f 1/1/4 4/3/4 2/4/4 +f 1/2/5 5/3/5 4/4/5 diff --git a/mods/technic-master/technic/models/technic_pyramid.obj b/mods/technic-master/technic/models/technic_pyramid.obj new file mode 100644 index 0000000..a618dcf --- /dev/null +++ b/mods/technic-master/technic/models/technic_pyramid.obj @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_pyramid_short_onetexture.blend' +# www.blender.org +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.000000 0.000000 -0.000000 +vt 1.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.500000 0.500000 +vn 0.000000 -1.000000 0.000000 +vn -0.707100 0.707100 -0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.707100 0.707100 0.000000 +vn -0.000000 0.707100 0.707100 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 3/4/2 5/5/2 4/3/2 +f 5/5/3 1/3/3 4/4/3 +f 1/4/4 5/5/4 2/3/4 +f 2/4/5 5/5/5 3/3/5 diff --git a/mods/technic-master/technic/models/technic_pyramid_spike.obj b/mods/technic-master/technic/models/technic_pyramid_spike.obj new file mode 100644 index 0000000..b305af2 --- /dev/null +++ b/mods/technic-master/technic/models/technic_pyramid_spike.obj @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_pyramid_onetexture.blend' +# www.blender.org +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.000000 0.500000 -0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.500000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn -0.894400 0.447200 -0.000000 +vn 0.000000 0.447200 -0.894400 +vn 0.894400 0.447200 0.000000 +vn -0.000000 0.447200 0.894400 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 3/4/2 5/5/2 4/3/2 +f 5/5/3 1/3/3 4/4/3 +f 1/4/4 5/5/4 2/3/4 +f 2/4/5 5/5/5 3/3/5 diff --git a/mods/technic-master/technic/models/technic_reactor.obj b/mods/technic-master/technic/models/technic_reactor.obj new file mode 100644 index 0000000..c71374c --- /dev/null +++ b/mods/technic-master/technic/models/technic_reactor.obj @@ -0,0 +1,362 @@ +# Blender v2.78 (sub 0) OBJ File: 'technic-reactor.blend' +# www.blender.org +o Cube.002 +v 0.249998 -0.500500 -0.249998 +v 0.249998 -0.500500 0.249998 +v -0.249999 -0.500500 -0.249998 +v -0.249999 -0.500500 0.249998 +v 0.283224 0.283132 0.423876 +v 0.283224 -0.283316 0.423876 +v -0.283224 0.283132 0.423875 +v -0.283224 -0.283316 0.423875 +v 0.195088 -0.195188 0.470985 +v 0.195088 0.194988 0.470985 +v -0.195088 -0.195188 0.470985 +v -0.195088 0.194988 0.470985 +v 0.099454 -0.099560 0.499495 +v 0.099454 0.099349 0.499495 +v -0.099455 -0.099560 0.499495 +v -0.099455 0.099349 0.499495 +v -0.360476 -0.360431 -0.360476 +v -0.195088 -0.195024 -0.470985 +v -0.195088 0.195153 -0.470985 +v 0.195089 -0.195024 -0.470985 +v 0.195089 0.195153 -0.470985 +v 0.283225 -0.283168 -0.423875 +v 0.283225 0.283281 -0.423875 +v -0.283224 -0.283168 -0.423875 +v -0.283224 0.283281 -0.423875 +v 0.099455 -0.099386 -0.499495 +v 0.099455 0.099525 -0.499495 +v -0.099455 -0.099386 -0.499495 +v -0.099455 0.099525 -0.499495 +v -0.360492 0.360411 0.360457 +v -0.099717 0.499491 0.099455 +v 0.099194 0.499491 0.099456 +v -0.195335 0.470933 0.195089 +v 0.195097 0.470933 0.195089 +v 0.194842 0.471069 0.194640 +v -0.283446 0.423808 0.283224 +v 0.283003 0.424005 0.282855 +v 0.360288 0.360647 0.360170 +v -0.099717 0.499526 -0.099455 +v 0.099194 0.499526 -0.099455 +v -0.194886 0.471001 -0.195088 +v 0.194842 0.471001 -0.195088 +v -0.195335 0.470865 -0.195343 +v -0.283076 0.423907 -0.283224 +v 0.283003 0.423907 -0.283224 +v -0.360358 0.360522 -0.360476 +v 0.360429 0.360474 -0.360515 +v 0.360664 -0.360306 -0.360247 +v -0.423875 -0.283187 0.283224 +v -0.423875 0.283165 0.283224 +v -0.423727 -0.283464 -0.283405 +v -0.423875 0.283165 -0.283224 +v 0.283446 -0.423844 -0.283224 +v -0.283244 -0.423843 -0.283224 +v -0.470985 0.195015 -0.195088 +v -0.470985 -0.195016 -0.195088 +v -0.360287 -0.360683 0.360323 +v 0.283446 -0.423745 0.283465 +v -0.283002 -0.423942 0.283224 +v 0.360664 -0.360306 0.360247 +v 0.423875 0.283152 0.283225 +v 0.423727 0.283428 -0.283405 +v 0.424023 -0.283021 0.282947 +v -0.470985 -0.195017 0.195088 +v 0.470985 0.195317 0.195089 +v 0.424023 -0.283021 -0.282948 +v 0.470985 -0.194860 -0.195088 +v 0.470883 0.195317 -0.195279 +v 0.471087 -0.194860 0.194752 +v -0.471087 0.194824 0.194751 +v -0.499495 0.099176 0.099455 +v -0.499495 -0.099735 0.099455 +v -0.499495 0.099175 -0.099455 +v -0.499495 -0.099735 -0.099455 +v 0.499495 -0.099212 0.099456 +v 0.499495 0.099699 0.099456 +v 0.499495 -0.099212 -0.099455 +v 0.499495 0.099699 -0.099455 +v 0.254894 -0.439053 0.254894 +v 0.254894 -0.438992 -0.254894 +v -0.254894 -0.439019 -0.254894 +v -0.254664 -0.439081 0.254894 +vt 0.2500 0.0000 +vt 0.2451 0.0610 +vt 0.7549 0.0609 +vt 0.7500 0.0000 +vt 0.2500 0.0000 +vt 0.2451 0.0609 +vt 0.7547 0.0609 +vt 0.7500 0.0000 +vt 0.2500 0.0000 +vt 0.2451 0.0609 +vt 0.7549 0.0610 +vt 0.7500 0.0000 +vt 0.2498 0.0000 +vt 0.2449 0.0610 +vt 0.7547 0.0610 +vt 0.7498 0.0000 +vt 0.2168 0.2167 +vt 0.1393 0.1397 +vt 0.1397 0.8606 +vt 0.2168 0.7831 +vt 0.4004 0.4006 +vt 0.3047 0.3050 +vt 0.3047 0.6952 +vt 0.4004 0.5995 +vt 0.7830 0.2168 +vt 0.8605 0.1397 +vt 0.1393 0.1396 +vt 0.2166 0.2168 +vt 0.3049 0.3048 +vt 0.3049 0.6950 +vt 0.6949 0.3050 +vt 0.5993 0.4006 +vt 0.5993 0.5995 +vt 0.6949 0.6952 +vt 0.7830 0.7833 +vt 0.2166 0.7833 +vt 0.7832 0.7831 +vt 0.6951 0.6950 +vt 0.8602 0.8605 +vt 0.1395 0.8605 +vt 0.4005 0.5993 +vt 0.5995 0.5993 +vt 0.6951 0.3048 +vt 0.7832 0.2167 +vt 0.5995 0.4004 +vt 0.8605 0.1396 +vt 0.7834 0.2165 +vt 0.7832 0.7832 +vt 0.8605 0.8605 +vt 0.4005 0.4004 +vt 0.8605 0.8604 +vt 0.1396 0.1395 +vt 0.2170 0.2168 +vt 0.2170 0.7829 +vt 0.1397 0.8602 +vt 0.2168 0.2168 +vt 0.1397 0.1393 +vt 0.1396 0.8604 +vt 0.2168 0.7832 +vt 0.6951 0.6950 +vt 0.3053 0.6948 +vt 0.6953 0.3047 +vt 0.7831 0.2168 +vt 0.7834 0.7832 +vt 0.6953 0.6951 +vt 0.8604 0.1395 +vt 0.3052 0.3049 +vt 0.6949 0.3049 +vt 0.8602 0.1397 +vt 0.7829 0.2170 +vt 0.7832 0.7832 +vt 0.8602 0.8606 +vt 0.3052 0.6946 +vt 0.3049 0.6951 +vt 0.2171 0.2170 +vt 0.1398 0.1397 +vt 0.1395 0.8605 +vt 0.2166 0.7834 +vt 0.4005 0.4008 +vt 0.3049 0.3051 +vt 0.3047 0.6953 +vt 0.4005 0.5997 +vt 0.6951 0.6953 +vt 0.4006 0.4003 +vt 0.4006 0.5992 +vt 0.5995 0.5992 +vt 0.5995 0.4003 +vt 0.6948 0.3051 +vt 0.5995 0.4008 +vt 0.5995 0.5997 +vt 0.5997 0.4005 +vt 0.5997 0.5995 +vt 0.6951 0.3050 +vt 0.3049 0.3050 +vt 0.4008 0.4005 +vt 0.4008 0.5995 +vt 0.8603 0.1393 +vt 0.2169 0.2168 +vt 0.1397 0.1395 +vt 0.1395 0.8605 +vt 0.2166 0.7832 +vt 0.8605 0.8605 +vt 0.1393 0.1398 +vt 0.2166 0.2168 +vt 0.7832 0.2168 +vt 0.8605 0.1395 +vt 0.1393 0.8602 +vt 0.2166 0.7835 +vt 0.7830 0.7832 +vt 0.8603 0.8603 +vt 0.2451 0.2451 +vt 0.7549 0.2451 +vt 0.7547 0.7549 +vt 0.2451 0.7549 +vt 0.2500 0.7500 +vt 0.7500 0.7500 +vt 0.7500 0.2500 +vt 0.2500 0.2500 +vn 0.9968 -0.0794 -0.0000 +vn 0.0000 -0.0794 0.9968 +vn -0.9970 -0.0776 0.0002 +vn 0.0000 -0.0794 -0.9968 +vn 0.6360 0.0002 0.7717 +vn -0.2857 0.0000 -0.9583 +vn 0.0002 -0.6353 -0.7722 +vn 0.4714 -0.0000 0.8819 +vn 0.2857 0.0000 -0.9583 +vn 0.0000 -0.2857 -0.9583 +vn 0.0000 0.4714 -0.8819 +vn -0.0000 0.4714 0.8819 +vn 0.6346 -0.0000 -0.7728 +vn -0.6347 0.0001 -0.7728 +vn -0.0000 0.2857 0.9583 +vn -0.0000 -0.4714 0.8819 +vn -0.2857 -0.0000 0.9583 +vn -0.7727 0.0001 -0.6347 +vn -0.0000 -0.2857 0.9583 +vn -0.4714 0.0000 -0.8819 +vn 0.2857 -0.0000 0.9583 +vn -0.4714 -0.0000 0.8819 +vn 0.4714 0.0000 -0.8819 +vn 0.0001 0.6347 0.7728 +vn 0.0000 -0.4714 -0.8819 +vn 0.0000 0.2857 -0.9583 +vn 0.6339 0.7734 -0.0001 +vn -0.7722 -0.0002 0.6353 +vn -0.8820 0.4713 0.0000 +vn -0.4717 0.8817 -0.0002 +vn 0.0000 0.7730 -0.6344 +vn 0.0000 0.8820 -0.4713 +vn 0.7721 0.0002 0.6355 +vn 0.4711 0.8821 -0.0002 +vn 0.0000 0.0000 -1.0000 +vn 0.7732 -0.0000 -0.6342 +vn -0.0000 -0.0000 1.0000 +vn 0.9583 0.0001 -0.2859 +vn -0.7730 0.6345 -0.0000 +vn 0.8815 0.4723 -0.0001 +vn -1.0000 -0.0000 0.0000 +vn 0.9583 0.0000 0.2857 +vn 0.0000 0.6344 -0.7730 +vn -0.2867 0.9580 -0.0001 +vn -0.9580 -0.2867 0.0000 +vn 0.0000 0.9583 -0.2858 +vn 0.7733 -0.6340 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.8818 -0.0000 -0.4716 +vn 0.9585 -0.2852 -0.0002 +vn 0.2853 0.9584 -0.0001 +vn 0.9582 0.2862 -0.0002 +vn -0.0000 0.8819 0.4715 +vn 0.0002 -0.6359 0.7718 +vn -0.7728 -0.6346 0.0000 +vn -0.9586 0.2849 -0.0001 +vn -0.6353 -0.0002 0.7722 +vn -0.0000 0.9582 0.2861 +vn -0.9583 0.0000 -0.2857 +vn 0.8821 -0.0001 0.4711 +vn -0.6348 0.7727 -0.0001 +vn -0.8821 0.0001 0.4711 +vn 0.8818 0.0000 -0.4716 +vn -0.9583 -0.0000 0.2857 +vn -0.8820 -0.4713 -0.0000 +vn 0.0000 1.0000 0.0002 +vn 0.8824 -0.4705 -0.0001 +vn 0.7729 0.6346 0.0000 +vn 0.0001 0.7732 0.6342 +vn 0.0002 -0.7722 -0.6354 +vn 0.6351 -0.7724 0.0001 +vn -0.6340 -0.7733 0.0000 +vn 0.0000 -0.8817 -0.4719 +vn -0.4716 -0.8818 0.0001 +vn 0.0003 -0.7720 0.6356 +vn 0.4706 -0.8823 0.0000 +vn 0.0001 -0.8817 0.4718 +vn 0.0000 -1.0000 0.0000 +g Cube.002_Cube.002_allsides +s off +f 1/1/1 80/2/1 79/3/1 2/4/1 +f 2/5/2 79/6/2 82/7/2 4/8/2 +f 4/9/3 82/10/3 81/11/3 3/12/3 +f 3/13/4 81/14/4 80/15/4 1/16/4 +f 6/17/5 60/18/5 38/19/5 5/20/5 +f 28/21/6 18/22/6 19/23/6 29/24/6 +f 22/25/7 48/26/7 17/27/7 24/28/7 +f 9/29/8 6/17/8 5/20/8 10/30/8 +f 20/31/9 26/32/9 27/33/9 21/34/9 +f 26/32/10 20/31/10 18/22/10 28/21/10 +f 23/35/11 21/34/11 19/23/11 25/36/11 +f 10/30/12 5/20/12 7/37/12 12/38/12 +f 48/26/13 22/25/13 23/35/13 47/39/13 +f 24/28/14 17/27/14 46/40/14 25/36/14 +f 14/41/15 10/30/15 12/38/15 16/42/15 +f 6/17/16 9/29/16 11/43/16 8/44/16 +f 11/43/17 15/45/17 16/42/17 12/38/17 +f 17/46/18 51/47/18 52/48/18 46/49/18 +f 9/29/19 13/50/19 15/45/19 11/43/19 +f 18/22/20 24/28/20 25/36/20 19/23/20 +f 13/50/21 9/29/21 10/30/21 14/41/21 +f 8/44/22 11/43/22 12/38/22 7/37/22 +f 22/25/23 20/31/23 21/34/23 23/35/23 +f 5/20/24 38/19/24 30/51/24 7/37/24 +f 20/31/25 22/25/25 24/28/25 18/22/25 +f 21/34/26 27/33/26 29/24/26 19/23/26 +f 47/52/27 45/53/27 37/54/27 38/55/27 +f 49/56/28 57/57/28 30/58/28 50/59/28 +f 52/48/29 55/60/29 70/61/29 50/59/29 +f 43/62/30 44/63/30 36/64/30 33/65/30 +f 45/53/31 47/52/31 46/66/31 44/63/31 +f 42/67/32 45/53/32 44/63/32 43/62/32 41/68/32 +f 60/69/33 63/70/33 61/71/33 38/72/33 +f 45/53/34 42/67/34 35/73/34 34/74/34 37/54/34 +f 28/21/35 29/24/35 27/33/35 26/32/35 +f 66/75/36 48/76/36 47/77/36 62/78/36 +f 13/50/37 14/41/37 16/42/37 15/45/37 +f 77/79/38 67/80/38 68/81/38 78/82/38 +f 46/49/39 52/48/39 50/59/39 30/58/39 +f 68/81/40 62/78/40 61/71/40 65/83/40 +f 72/84/41 71/85/41 73/86/41 74/87/41 +f 69/88/42 75/89/42 76/90/42 65/83/42 +f 47/39/43 23/35/43 25/36/43 46/40/43 +f 39/91/44 41/68/44 43/62/44 33/65/44 31/92/44 +f 74/87/45 56/93/45 64/94/45 72/84/45 +f 40/95/46 42/67/46 41/68/46 39/91/46 +f 48/76/47 66/75/47 63/70/47 60/69/47 +f 77/79/48 78/82/48 76/90/48 75/89/48 +f 51/47/49 56/93/49 55/60/49 52/48/49 +f 67/80/50 77/79/50 75/89/50 69/88/50 +f 42/67/51 40/95/51 32/96/51 35/73/51 +f 78/82/52 68/81/52 65/83/52 76/90/52 +f 37/54/53 34/74/53 33/65/53 36/64/53 +f 60/18/54 6/17/54 8/44/54 57/97/54 +f 51/47/55 17/46/55 57/57/55 49/56/55 +f 55/60/56 73/86/56 71/85/56 70/61/56 +f 57/97/57 8/44/57 7/37/57 30/51/57 +f 34/74/58 35/73/58 32/96/58 31/92/58 33/65/58 +f 56/93/59 74/87/59 73/86/59 55/60/59 +f 63/70/60 69/88/60 65/83/60 61/71/60 +f 44/98/61 46/99/61 30/100/61 36/101/61 +f 64/94/62 49/56/62 50/59/62 70/61/62 +f 67/80/63 66/75/63 62/78/63 68/81/63 +f 72/84/64 64/94/64 70/61/64 71/85/64 +f 56/93/65 51/47/65 49/56/65 64/94/65 +f 40/95/66 39/91/66 31/92/66 32/96/66 +f 66/75/67 67/80/67 69/88/67 63/70/67 +f 62/78/68 47/77/68 38/72/68 61/71/68 +f 30/102/69 38/55/69 37/54/69 36/64/69 +g Cube.002_Cube.002_bottom +f 48/103/70 53/104/70 54/105/70 17/106/70 +f 53/104/71 48/103/71 60/107/71 58/108/71 +f 17/106/72 54/105/72 59/109/72 57/110/72 +f 53/104/73 80/111/73 81/112/73 54/105/73 +f 54/105/74 81/112/74 82/113/74 59/109/74 +f 58/108/75 60/107/75 57/110/75 59/109/75 +f 79/114/76 80/111/76 53/104/76 58/108/76 +f 82/113/77 79/114/77 58/108/77 59/109/77 +f 2/115/78 4/116/78 3/117/78 1/118/78 diff --git a/mods/technic-master/technic/models/technic_slope.obj b/mods/technic-master/technic/models/technic_slope.obj new file mode 100644 index 0000000..f6f4860 --- /dev/null +++ b/mods/technic-master/technic/models/technic_slope.obj @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_slope_onetexture.blend' +# www.blender.org +o Cube_Cube.002 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 -1.000000 -0.000000 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.707100 -0.707100 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/3/2 3/4/2 5/1/2 6/2/2 +f 2/1/3 5/3/3 3/4/3 +f 1/2/4 4/3/4 6/4/4 +f 2/1/5 1/2/5 6/3/5 5/4/5 diff --git a/mods/technic-master/technic/models/technic_slope_horizontal.obj b/mods/technic-master/technic/models/technic_slope_horizontal.obj new file mode 100644 index 0000000..4866a92 --- /dev/null +++ b/mods/technic-master/technic/models/technic_slope_horizontal.obj @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'technic-slope-horizontal.blend' +# www.blender.org +o Cube_Cube.002 +v -0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.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.707100 0.000000 -0.707100 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/1/2 3/2/2 5/3/2 6/4/2 +f 2/3/3 5/1/3 3/2/3 +f 1/4/4 4/1/4 6/2/4 +f 2/3/5 1/4/5 6/1/5 5/2/5 diff --git a/mods/technic-master/technic/models/technic_slope_upsdown.obj b/mods/technic-master/technic/models/technic_slope_upsdown.obj new file mode 100644 index 0000000..6880595 --- /dev/null +++ b/mods/technic-master/technic/models/technic_slope_upsdown.obj @@ -0,0 +1,24 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_slope_onetexture.blend' +# www.blender.org +o Cube_Cube.002 +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 -0.000000 +vn 1.000000 -0.000000 0.000000 +vn -1.000000 0.000000 -0.000000 +vn -0.000000 -0.707100 -0.707100 +s off +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 4/3/2 3/4/2 5/1/2 6/2/2 +f 2/1/3 5/3/3 3/4/3 +f 1/2/4 4/3/4 6/4/4 +f 2/1/5 1/2/5 6/3/5 5/4/5 diff --git a/mods/technic-master/technic/models/technic_sphere.obj b/mods/technic-master/technic/models/technic_sphere.obj new file mode 100644 index 0000000..772b570 --- /dev/null +++ b/mods/technic-master/technic/models/technic_sphere.obj @@ -0,0 +1,1927 @@ +# Blender v2.73 (sub 0) OBJ File: 'globe.blend' +# www.blender.org +o Sphere +v -0.097545 0.490393 0.000000 +v -0.191342 0.461940 0.000000 +v -0.277785 0.415735 0.000000 +v -0.353553 0.353553 0.000000 +v -0.415735 0.277785 0.000000 +v -0.461940 0.191342 0.000000 +v -0.490393 0.097545 0.000000 +v -0.500000 0.000000 0.000000 +v -0.490393 -0.097545 0.000000 +v -0.461940 -0.191342 0.000000 +v -0.415735 -0.277785 0.000000 +v -0.353553 -0.353553 0.000000 +v -0.277785 -0.415735 0.000000 +v -0.191342 -0.461940 0.000000 +v -0.097545 -0.490393 0.000000 +v -0.095671 0.490393 -0.019030 +v -0.187665 0.461940 -0.037329 +v -0.272448 0.415735 -0.054193 +v -0.346760 0.353553 -0.068975 +v -0.407747 0.277785 -0.081106 +v -0.453064 0.191342 -0.090120 +v -0.480970 0.097545 -0.095671 +v -0.490393 0.000000 -0.097545 +v -0.480970 -0.097545 -0.095671 +v -0.453064 -0.191342 -0.090120 +v -0.407747 -0.277785 -0.081106 +v -0.346760 -0.353553 -0.068975 +v -0.272448 -0.415735 -0.054193 +v -0.187665 -0.461940 -0.037329 +v -0.095671 -0.490393 -0.019030 +v -0.090120 0.490393 -0.037329 +v -0.176777 0.461940 -0.073223 +v -0.256640 0.415735 -0.106304 +v -0.326641 0.353553 -0.135299 +v -0.384089 0.277785 -0.159095 +v -0.426777 0.191342 -0.176777 +v -0.453064 0.097545 -0.187665 +v -0.461940 0.000000 -0.191342 +v -0.453064 -0.097545 -0.187665 +v -0.426777 -0.191342 -0.176777 +v -0.384089 -0.277785 -0.159095 +v -0.326641 -0.353553 -0.135299 +v -0.256640 -0.415735 -0.106304 +v -0.176777 -0.461940 -0.073223 +v -0.090120 -0.490393 -0.037329 +v -0.081106 0.490393 -0.054193 +v -0.159095 0.461940 -0.106304 +v -0.230970 0.415735 -0.154329 +v -0.293969 0.353553 -0.196424 +v -0.345671 0.277785 -0.230970 +v -0.384089 0.191342 -0.256640 +v -0.407746 0.097545 -0.272448 +v -0.415735 0.000000 -0.277785 +v -0.407746 -0.097545 -0.272448 +v -0.384089 -0.191342 -0.256640 +v -0.345671 -0.277785 -0.230970 +v -0.293969 -0.353553 -0.196424 +v -0.230970 -0.415735 -0.154329 +v -0.159095 -0.461940 -0.106304 +v -0.081106 -0.490393 -0.054193 +v -0.068975 0.490393 -0.068975 +v -0.135299 0.461940 -0.135299 +v -0.196424 0.415735 -0.196424 +v -0.250000 0.353553 -0.250000 +v -0.293969 0.277785 -0.293969 +v -0.326641 0.191342 -0.326641 +v -0.346760 0.097545 -0.346760 +v -0.353553 0.000000 -0.353554 +v -0.346760 -0.097545 -0.346760 +v -0.326641 -0.191342 -0.326641 +v -0.293969 -0.277785 -0.293969 +v -0.250000 -0.353553 -0.250000 +v -0.196424 -0.415735 -0.196424 +v -0.135299 -0.461940 -0.135299 +v -0.068975 -0.490393 -0.068975 +v -0.054193 0.490393 -0.081106 +v -0.106304 0.461940 -0.159095 +v -0.154329 0.415735 -0.230970 +v -0.196424 0.353553 -0.293969 +v -0.230970 0.277785 -0.345671 +v -0.256640 0.191342 -0.384089 +v -0.272447 0.097545 -0.407747 +v -0.277785 0.000000 -0.415735 +v -0.272447 -0.097545 -0.407747 +v -0.256640 -0.191342 -0.384089 +v -0.230970 -0.277785 -0.345671 +v -0.196424 -0.353553 -0.293969 +v -0.154329 -0.415735 -0.230970 +v -0.106304 -0.461940 -0.159095 +v -0.054193 -0.490393 -0.081106 +v -0.037329 0.490393 -0.090120 +v -0.073223 0.461940 -0.176777 +v -0.106304 0.415735 -0.256640 +v -0.135299 0.353553 -0.326641 +v -0.159095 0.277785 -0.384089 +v -0.176777 0.191342 -0.426777 +v -0.187665 0.097545 -0.453064 +v -0.191342 0.000000 -0.461940 +v -0.187665 -0.097545 -0.453064 +v -0.176777 -0.191342 -0.426777 +v -0.159095 -0.277785 -0.384089 +v -0.135299 -0.353553 -0.326641 +v -0.106304 -0.415735 -0.256640 +v -0.073223 -0.461940 -0.176777 +v -0.037329 -0.490393 -0.090120 +v -0.019030 0.490393 -0.095671 +v -0.037329 0.461940 -0.187665 +v -0.054193 0.415735 -0.272448 +v -0.068975 0.353553 -0.346760 +v -0.081106 0.277785 -0.407747 +v -0.090120 0.191342 -0.453064 +v -0.095671 0.097545 -0.480970 +v -0.097545 0.000000 -0.490393 +v -0.095671 -0.097545 -0.480970 +v -0.090120 -0.191342 -0.453064 +v -0.081106 -0.277785 -0.407747 +v -0.068975 -0.353553 -0.346760 +v -0.054193 -0.415735 -0.272448 +v -0.037329 -0.461940 -0.187665 +v -0.019030 -0.490393 -0.095671 +v 0.000000 0.490393 -0.097545 +v 0.000000 0.461940 -0.191342 +v 0.000000 0.415735 -0.277785 +v 0.000000 0.353553 -0.353553 +v 0.000000 0.277785 -0.415735 +v 0.000000 0.191342 -0.461940 +v 0.000000 0.097545 -0.490393 +v 0.000000 0.000000 -0.500000 +v 0.000000 -0.097545 -0.490393 +v 0.000000 -0.191342 -0.461940 +v 0.000000 -0.277785 -0.415735 +v 0.000000 -0.353553 -0.353553 +v 0.000000 -0.415735 -0.277785 +v 0.000000 -0.461940 -0.191342 +v 0.000000 -0.490393 -0.097545 +v 0.019030 0.490393 -0.095671 +v 0.037329 0.461940 -0.187665 +v 0.054193 0.415735 -0.272448 +v 0.068975 0.353553 -0.346760 +v 0.081106 0.277785 -0.407747 +v 0.090120 0.191342 -0.453064 +v 0.095671 0.097545 -0.480970 +v 0.097545 0.000000 -0.490393 +v 0.095671 -0.097545 -0.480970 +v 0.090120 -0.191342 -0.453064 +v 0.081106 -0.277785 -0.407747 +v 0.068975 -0.353553 -0.346760 +v 0.054193 -0.415735 -0.272448 +v 0.037329 -0.461940 -0.187665 +v 0.019030 -0.490393 -0.095671 +v 0.037329 0.490393 -0.090120 +v 0.073224 0.461940 -0.176777 +v 0.106304 0.415735 -0.256640 +v 0.135299 0.353553 -0.326641 +v 0.159095 0.277785 -0.384089 +v 0.176777 0.191342 -0.426777 +v 0.187665 0.097545 -0.453064 +v 0.191342 0.000000 -0.461940 +v 0.187665 -0.097545 -0.453064 +v 0.176777 -0.191342 -0.426777 +v 0.159095 -0.277785 -0.384089 +v 0.135299 -0.353553 -0.326641 +v 0.106304 -0.415735 -0.256640 +v 0.073223 -0.461940 -0.176777 +v 0.037329 -0.490393 -0.090120 +v 0.054193 0.490393 -0.081106 +v 0.106304 0.461940 -0.159095 +v 0.154329 0.415735 -0.230970 +v 0.196424 0.353553 -0.293969 +v 0.230970 0.277785 -0.345671 +v 0.256640 0.191342 -0.384089 +v 0.272448 0.097545 -0.407747 +v 0.277785 0.000000 -0.415735 +v 0.272448 -0.097545 -0.407747 +v 0.256640 -0.191342 -0.384089 +v 0.230970 -0.277785 -0.345671 +v 0.196424 -0.353553 -0.293969 +v 0.154329 -0.415735 -0.230970 +v 0.106304 -0.461940 -0.159095 +v 0.054193 -0.490393 -0.081106 +v 0.068975 0.490393 -0.068975 +v 0.135299 0.461940 -0.135299 +v 0.196424 0.415735 -0.196424 +v 0.250000 0.353553 -0.250000 +v 0.293969 0.277785 -0.293969 +v 0.326641 0.191342 -0.326641 +v 0.346760 0.097545 -0.346760 +v 0.353554 0.000000 -0.353553 +v 0.346760 -0.097545 -0.346760 +v 0.326641 -0.191342 -0.326641 +v 0.293969 -0.277785 -0.293969 +v 0.250000 -0.353553 -0.250000 +v 0.196424 -0.415735 -0.196424 +v 0.135299 -0.461940 -0.135299 +v 0.068975 -0.490393 -0.068975 +v 0.081106 0.490393 -0.054193 +v 0.159095 0.461940 -0.106304 +v 0.230970 0.415735 -0.154329 +v 0.293969 0.353553 -0.196424 +v 0.345671 0.277785 -0.230970 +v 0.384089 0.191342 -0.256640 +v 0.407747 0.097545 -0.272447 +v 0.415735 0.000000 -0.277785 +v 0.407747 -0.097545 -0.272447 +v 0.384089 -0.191342 -0.256640 +v 0.345671 -0.277785 -0.230970 +v 0.293969 -0.353553 -0.196424 +v 0.230970 -0.415735 -0.154329 +v 0.159095 -0.461940 -0.106304 +v 0.081106 -0.490393 -0.054193 +v 0.090120 0.490393 -0.037329 +v 0.176777 0.461940 -0.073223 +v 0.256640 0.415735 -0.106304 +v 0.326641 0.353553 -0.135299 +v 0.384089 0.277785 -0.159095 +v 0.426777 0.191342 -0.176777 +v 0.453064 0.097545 -0.187665 +v 0.461940 0.000000 -0.191342 +v 0.453064 -0.097545 -0.187665 +v 0.426777 -0.191342 -0.176777 +v 0.384089 -0.277785 -0.159095 +v 0.326641 -0.353553 -0.135299 +v 0.256640 -0.415735 -0.106304 +v 0.176777 -0.461940 -0.073223 +v 0.090120 -0.490393 -0.037329 +v 0.095671 0.490393 -0.019030 +v 0.187665 0.461940 -0.037329 +v 0.272448 0.415735 -0.054193 +v 0.346760 0.353553 -0.068975 +v 0.407747 0.277785 -0.081106 +v 0.453064 0.191342 -0.090120 +v 0.480970 0.097545 -0.095671 +v 0.490393 0.000000 -0.097545 +v 0.480970 -0.097545 -0.095671 +v 0.453064 -0.191342 -0.090120 +v 0.407747 -0.277785 -0.081106 +v 0.346760 -0.353553 -0.068975 +v 0.272448 -0.415735 -0.054193 +v 0.187665 -0.461940 -0.037329 +v 0.095671 -0.490393 -0.019030 +v 0.097545 0.490393 0.000000 +v 0.191342 0.461940 -0.000000 +v 0.277785 0.415735 -0.000000 +v 0.353554 0.353553 0.000000 +v 0.415735 0.277785 0.000000 +v 0.461940 0.191342 -0.000000 +v 0.490393 0.097545 0.000000 +v 0.500000 0.000000 0.000000 +v 0.490393 -0.097545 0.000000 +v 0.461940 -0.191342 -0.000000 +v 0.415735 -0.277785 0.000000 +v 0.353554 -0.353553 0.000000 +v 0.277785 -0.415735 0.000000 +v 0.191342 -0.461940 -0.000000 +v 0.097545 -0.490393 -0.000000 +v 0.095671 0.490393 0.019030 +v 0.187665 0.461940 0.037329 +v 0.272448 0.415735 0.054193 +v 0.346760 0.353553 0.068975 +v 0.407747 0.277785 0.081106 +v 0.453064 0.191342 0.090120 +v 0.480970 0.097545 0.095671 +v 0.490393 0.000000 0.097545 +v 0.480970 -0.097545 0.095671 +v 0.453064 -0.191342 0.090120 +v 0.407747 -0.277785 0.081106 +v 0.346760 -0.353553 0.068975 +v 0.272448 -0.415735 0.054193 +v 0.187665 -0.461940 0.037329 +v 0.095671 -0.490393 0.019030 +v 0.090120 0.490393 0.037329 +v 0.176777 0.461940 0.073223 +v 0.256640 0.415735 0.106304 +v 0.326641 0.353553 0.135299 +v 0.384089 0.277785 0.159095 +v 0.426777 0.191342 0.176777 +v 0.453064 0.097545 0.187665 +v 0.461940 0.000000 0.191342 +v 0.453064 -0.097545 0.187665 +v 0.426777 -0.191342 0.176777 +v 0.384089 -0.277785 0.159095 +v 0.326641 -0.353553 0.135299 +v 0.256640 -0.415735 0.106304 +v 0.176777 -0.461940 0.073223 +v 0.090120 -0.490393 0.037329 +v 0.081106 0.490393 0.054193 +v 0.159095 0.461940 0.106304 +v 0.230970 0.415735 0.154329 +v 0.293969 0.353553 0.196424 +v 0.345671 0.277785 0.230970 +v 0.384089 0.191342 0.256640 +v 0.407747 0.097545 0.272448 +v 0.415735 0.000000 0.277785 +v 0.407747 -0.097545 0.272448 +v 0.384089 -0.191342 0.256640 +v 0.345671 -0.277785 0.230970 +v 0.293969 -0.353553 0.196424 +v 0.230970 -0.415735 0.154329 +v 0.159095 -0.461940 0.106304 +v 0.081106 -0.490393 0.054193 +v 0.068975 0.490393 0.068975 +v 0.135299 0.461940 0.135299 +v 0.196424 0.415735 0.196424 +v 0.250000 0.353553 0.250000 +v 0.293969 0.277785 0.293969 +v 0.326641 0.191342 0.326641 +v 0.346760 0.097545 0.346760 +v 0.353553 0.000000 0.353553 +v 0.346760 -0.097545 0.346760 +v 0.326641 -0.191342 0.326641 +v 0.293969 -0.277785 0.293969 +v 0.250000 -0.353553 0.250000 +v 0.196424 -0.415735 0.196424 +v 0.135299 -0.461940 0.135299 +v 0.068975 -0.490393 0.068975 +v 0.054193 0.490393 0.081106 +v 0.106304 0.461940 0.159095 +v 0.154329 0.415735 0.230970 +v 0.196424 0.353553 0.293969 +v 0.230970 0.277785 0.345671 +v 0.256640 0.191342 0.384089 +v 0.272448 0.097545 0.407746 +v 0.277785 0.000000 0.415735 +v 0.272448 -0.097545 0.407746 +v 0.256640 -0.191342 0.384089 +v 0.230970 -0.277785 0.345671 +v 0.196424 -0.353553 0.293969 +v 0.154329 -0.415735 0.230970 +v 0.106304 -0.461940 0.159095 +v 0.054193 -0.490393 0.081106 +v 0.037329 0.490393 0.090120 +v 0.073223 0.461940 0.176777 +v 0.106304 0.415735 0.256640 +v 0.135299 0.353553 0.326641 +v 0.159095 0.277785 0.384089 +v 0.176777 0.191342 0.426777 +v 0.187665 0.097545 0.453064 +v 0.191342 0.000000 0.461940 +v 0.187665 -0.097545 0.453064 +v 0.176777 -0.191342 0.426777 +v 0.159095 -0.277785 0.384089 +v 0.135299 -0.353553 0.326641 +v 0.106304 -0.415735 0.256640 +v 0.073223 -0.461940 0.176777 +v 0.037329 -0.490393 0.090120 +v 0.019030 0.490393 0.095671 +v 0.037329 0.461940 0.187665 +v 0.054193 0.415735 0.272448 +v 0.068975 0.353553 0.346760 +v 0.081106 0.277785 0.407746 +v 0.090120 0.191342 0.453064 +v 0.095671 0.097545 0.480970 +v 0.097545 0.000000 0.490393 +v 0.095671 -0.097545 0.480970 +v 0.090120 -0.191342 0.453064 +v 0.081106 -0.277785 0.407746 +v 0.068975 -0.353553 0.346760 +v 0.054193 -0.415735 0.272447 +v 0.037329 -0.461940 0.187665 +v 0.019030 -0.490393 0.095671 +v 0.000000 0.490393 0.097545 +v 0.000000 0.461940 0.191342 +v 0.000000 0.415735 0.277785 +v 0.000000 0.353553 0.353553 +v 0.000000 0.277785 0.415735 +v 0.000000 0.191342 0.461940 +v 0.000000 0.097545 0.490392 +v 0.000000 0.000000 0.500000 +v 0.000000 -0.097545 0.490392 +v 0.000000 -0.191342 0.461940 +v 0.000000 -0.277785 0.415735 +v 0.000000 -0.353553 0.353553 +v 0.000000 -0.415735 0.277785 +v 0.000000 -0.461940 0.191342 +v 0.000000 -0.490393 0.097545 +v -0.019030 0.490393 0.095671 +v -0.037329 0.461940 0.187665 +v -0.054193 0.415735 0.272448 +v -0.068975 0.353553 0.346760 +v -0.081106 0.277785 0.407746 +v -0.090120 0.191342 0.453064 +v -0.095671 0.097545 0.480970 +v -0.097545 0.000000 0.490393 +v -0.095671 -0.097545 0.480970 +v -0.090120 -0.191342 0.453064 +v -0.081106 -0.277785 0.407746 +v -0.068975 -0.353553 0.346760 +v -0.054193 -0.415735 0.272447 +v -0.037329 -0.461940 0.187665 +v -0.019030 -0.490393 0.095671 +v -0.037329 0.490393 0.090120 +v -0.073223 0.461940 0.176777 +v -0.106304 0.415735 0.256640 +v -0.135299 0.353553 0.326641 +v -0.159095 0.277785 0.384089 +v -0.176777 0.191342 0.426777 +v -0.187665 0.097545 0.453063 +v -0.191342 0.000000 0.461940 +v -0.187665 -0.097545 0.453063 +v -0.176777 -0.191342 0.426777 +v -0.159095 -0.277785 0.384089 +v -0.135299 -0.353553 0.326641 +v -0.106304 -0.415735 0.256640 +v -0.073223 -0.461940 0.176777 +v -0.037329 -0.490393 0.090120 +v -0.054193 0.490393 0.081106 +v -0.106304 0.461940 0.159095 +v -0.154329 0.415735 0.230970 +v -0.196424 0.353553 0.293969 +v -0.230970 0.277785 0.345671 +v -0.256640 0.191342 0.384089 +v -0.272447 0.097545 0.407746 +v -0.277785 0.000000 0.415735 +v -0.272447 -0.097545 0.407746 +v -0.256640 -0.191342 0.384089 +v -0.230970 -0.277785 0.345671 +v -0.196424 -0.353553 0.293969 +v -0.154329 -0.415735 0.230970 +v -0.106304 -0.461940 0.159095 +v -0.054193 -0.490393 0.081106 +v -0.068975 0.490393 0.068975 +v -0.135299 0.461940 0.135299 +v -0.196424 0.415735 0.196424 +v -0.250000 0.353553 0.250000 +v -0.293969 0.277785 0.293969 +v -0.326641 0.191342 0.326641 +v -0.346760 0.097545 0.346760 +v -0.353553 0.000000 0.353553 +v -0.346760 -0.097545 0.346760 +v -0.326641 -0.191342 0.326641 +v -0.293969 -0.277785 0.293969 +v -0.250000 -0.353553 0.250000 +v -0.196424 -0.415735 0.196424 +v -0.135299 -0.461940 0.135299 +v -0.068975 -0.490393 0.068975 +v -0.081106 0.490393 0.054193 +v -0.159095 0.461940 0.106304 +v -0.230970 0.415735 0.154329 +v -0.293969 0.353553 0.196424 +v -0.345671 0.277785 0.230970 +v -0.384089 0.191342 0.256640 +v -0.407746 0.097545 0.272447 +v -0.415735 0.000000 0.277785 +v -0.407746 -0.097545 0.272447 +v -0.384089 -0.191342 0.256640 +v -0.345671 -0.277785 0.230970 +v -0.293969 -0.353553 0.196424 +v -0.230970 -0.415735 0.154329 +v -0.159095 -0.461940 0.106304 +v -0.081106 -0.490393 0.054193 +v -0.090120 0.490393 0.037329 +v -0.176776 0.461940 0.073223 +v -0.256640 0.415735 0.106304 +v -0.326641 0.353553 0.135299 +v -0.384089 0.277785 0.159095 +v -0.426776 0.191342 0.176777 +v -0.453063 0.097545 0.187665 +v -0.461939 0.000000 0.191342 +v -0.453063 -0.097545 0.187665 +v -0.426776 -0.191342 0.176777 +v -0.384089 -0.277785 0.159095 +v -0.326641 -0.353553 0.135299 +v -0.256640 -0.415735 0.106304 +v -0.176776 -0.461940 0.073223 +v -0.090120 -0.490393 0.037329 +v -0.095671 0.490393 0.019030 +v -0.187665 0.461940 0.037329 +v -0.272447 0.415735 0.054193 +v -0.346760 0.353553 0.068975 +v -0.407746 0.277785 0.081106 +v -0.453063 0.191342 0.090120 +v -0.480969 0.097545 0.095671 +v -0.490392 0.000000 0.097545 +v -0.480969 -0.097545 0.095671 +v -0.453063 -0.191342 0.090120 +v -0.407746 -0.277785 0.081106 +v -0.346760 -0.353553 0.068975 +v -0.272447 -0.415735 0.054193 +v -0.187665 -0.461940 0.037329 +v -0.095671 -0.490393 0.019030 +v -0.013167 -0.495196 0.000000 +v -0.005039 0.495196 0.012165 +v -0.013167 0.495196 0.000000 +v -0.012914 0.495196 -0.002569 +v -0.012914 -0.495196 -0.002569 +v -0.012165 0.495196 -0.005039 +v -0.012165 -0.495196 -0.005039 +v -0.010948 0.495196 -0.007315 +v -0.010948 -0.495196 -0.007315 +v -0.009311 0.495196 -0.009311 +v -0.009311 -0.495196 -0.009311 +v -0.007315 0.495196 -0.010948 +v -0.007315 -0.495196 -0.010948 +v -0.005039 0.495196 -0.012165 +v -0.005039 -0.495196 -0.012165 +v -0.002569 0.495196 -0.012914 +v -0.002569 -0.495196 -0.012914 +v 0.000000 0.495196 -0.013167 +v 0.000000 -0.495196 -0.013167 +v 0.002569 0.495196 -0.012914 +v 0.002569 -0.495196 -0.012914 +v 0.005039 0.495196 -0.012165 +v 0.005039 -0.495196 -0.012165 +v 0.007316 0.495196 -0.010948 +v 0.007316 -0.495196 -0.010948 +v 0.009311 0.495196 -0.009311 +v 0.009311 -0.495196 -0.009311 +v 0.010948 0.495196 -0.007315 +v 0.010948 -0.495196 -0.007315 +v 0.012165 0.495196 -0.005039 +v 0.012165 -0.495196 -0.005039 +v 0.012915 0.495196 -0.002569 +v 0.012915 -0.495196 -0.002569 +v 0.013168 0.495196 0.000000 +v 0.013168 -0.495196 0.000000 +v 0.012915 0.495196 0.002569 +v 0.012915 -0.495196 0.002569 +v 0.012165 0.495196 0.005039 +v 0.012165 -0.495196 0.005039 +v 0.010948 0.495196 0.007315 +v 0.010948 -0.495196 0.007315 +v 0.009311 0.495196 0.009311 +v 0.009311 -0.495196 0.009311 +v 0.007316 0.495196 0.010948 +v 0.007316 -0.495196 0.010948 +v 0.005039 0.495196 0.012165 +v 0.005039 -0.495196 0.012165 +v 0.002569 0.495196 0.012914 +v 0.002569 -0.495196 0.012914 +v 0.000000 0.495196 0.013167 +v 0.000000 -0.495196 0.013167 +v -0.002569 0.495196 0.012914 +v -0.002569 -0.495196 0.012914 +v -0.005039 -0.495196 0.012165 +v -0.007315 0.495196 0.010948 +v -0.007315 -0.495196 0.010948 +v -0.009311 0.495196 0.009311 +v -0.009311 -0.495196 0.009311 +v -0.010948 0.495196 0.007315 +v -0.010948 -0.495196 0.007315 +v -0.012165 0.495196 0.005039 +v -0.012165 -0.495196 0.005039 +v -0.012914 0.495196 0.002569 +v -0.012914 -0.495196 0.002569 +vt 0.437500 0.750000 +vt 0.437500 0.812500 +vt 0.375000 0.812500 +vt 0.375000 0.750000 +vt 0.437500 0.062500 +vt 0.437500 0.125000 +vt 0.375000 0.125000 +vt 0.375000 0.062500 +vt 0.437500 0.875000 +vt 0.437500 0.937500 +vt 0.375000 0.937500 +vt 0.375000 0.875000 +vt 0.437500 0.187500 +vt 0.437500 0.250000 +vt 0.375000 0.250000 +vt 0.375000 0.187500 +vt 0.437500 0.312500 +vt 0.437500 0.375000 +vt 0.375000 0.375000 +vt 0.375000 0.312500 +vt 0.437500 0.437500 +vt 0.437500 0.500000 +vt 0.375000 0.500000 +vt 0.375000 0.437500 +vt 0.437500 0.562500 +vt 0.437500 0.625000 +vt 0.375000 0.625000 +vt 0.375000 0.562500 +vt 0.437500 0.687500 +vt 0.375000 0.687500 +vt 0.312500 0.437500 +vt 0.312500 0.375000 +vt 0.312500 0.562500 +vt 0.312500 0.500000 +vt 0.312500 0.687500 +vt 0.312500 0.625000 +vt 0.312500 0.812500 +vt 0.312500 0.750000 +vt 0.312500 0.125000 +vt 0.312500 0.062500 +vt 0.312500 0.937500 +vt 0.312500 0.875000 +vt 0.312500 0.250000 +vt 0.312500 0.187500 +vt 0.312500 0.312500 +vt 0.250000 0.437500 +vt 0.250000 0.375000 +vt 0.250000 0.562500 +vt 0.250000 0.500000 +vt 0.250000 0.687500 +vt 0.250000 0.625000 +vt 0.250000 0.812500 +vt 0.250000 0.750000 +vt 0.250000 0.125000 +vt 0.250000 0.062500 +vt 0.250000 0.937500 +vt 0.250000 0.875000 +vt 0.250000 0.250000 +vt 0.250000 0.187500 +vt 0.250000 0.312500 +vt 0.187500 0.437500 +vt 0.187500 0.375000 +vt 0.187500 0.562500 +vt 0.187500 0.500000 +vt 0.187500 0.687500 +vt 0.187500 0.625000 +vt 0.187500 0.812500 +vt 0.187500 0.750000 +vt 0.187500 0.125000 +vt 0.187500 0.062500 +vt 0.187500 0.937500 +vt 0.187500 0.875000 +vt 0.187500 0.250000 +vt 0.187500 0.187500 +vt 0.187500 0.312500 +vt 0.125000 0.437500 +vt 0.125000 0.375000 +vt 0.125000 0.562500 +vt 0.125000 0.500000 +vt 0.125000 0.687500 +vt 0.125000 0.625000 +vt 0.125000 0.812500 +vt 0.125000 0.750000 +vt 0.125000 0.125000 +vt 0.125000 0.062500 +vt 0.125000 0.937500 +vt 0.125000 0.875000 +vt 0.125000 0.250000 +vt 0.125000 0.187500 +vt 0.125000 0.312500 +vt 0.062500 0.437500 +vt 0.062500 0.375000 +vt 0.062500 0.562500 +vt 0.062500 0.500000 +vt 0.062500 0.687500 +vt 0.062500 0.625000 +vt 0.062500 0.812500 +vt 0.062500 0.750000 +vt 0.062500 0.125000 +vt 0.062500 0.062500 +vt 0.062500 0.937500 +vt 0.062500 0.875000 +vt 0.062500 0.250000 +vt 0.062500 0.187500 +vt 0.062500 0.312500 +vt 0.000000 0.437500 +vt 0.000000 0.375000 +vt 0.000000 0.562500 +vt 0.000000 0.500000 +vt 0.000000 0.687500 +vt 0.000000 0.625000 +vt 0.000000 0.812500 +vt 0.000000 0.750000 +vt 0.000000 0.125000 +vt 0.000000 0.062500 +vt 0.000000 0.937500 +vt 0.000000 0.875000 +vt 0.000000 0.250000 +vt 0.000000 0.187500 +vt 0.000000 0.312500 +vt 1.000000 0.375000 +vt 1.000000 0.437500 +vt 0.937500 0.437500 +vt 0.937500 0.375000 +vt 1.000000 0.500000 +vt 1.000000 0.562500 +vt 0.937500 0.562500 +vt 0.937500 0.500000 +vt 1.000000 0.625000 +vt 1.000000 0.687500 +vt 0.937500 0.687500 +vt 0.937500 0.625000 +vt 1.000000 0.750000 +vt 1.000000 0.812500 +vt 0.937500 0.812500 +vt 0.937500 0.750000 +vt 1.000000 0.062500 +vt 1.000000 0.125000 +vt 0.937500 0.125000 +vt 0.937500 0.062500 +vt 1.000000 0.875000 +vt 1.000000 0.937500 +vt 0.937500 0.937500 +vt 0.937500 0.875000 +vt 1.000000 0.187500 +vt 1.000000 0.250000 +vt 0.937500 0.250000 +vt 0.937500 0.187500 +vt 1.000000 0.312500 +vt 0.937500 0.312500 +vt 0.875000 0.437500 +vt 0.875000 0.375000 +vt 0.875000 0.562500 +vt 0.875000 0.500000 +vt 0.875000 0.687500 +vt 0.875000 0.625000 +vt 0.875000 0.812500 +vt 0.875000 0.750000 +vt 0.875000 0.125000 +vt 0.875000 0.062500 +vt 0.875000 0.937500 +vt 0.875000 0.875000 +vt 0.875000 0.250000 +vt 0.875000 0.187500 +vt 0.875000 0.312500 +vt 0.812500 0.437500 +vt 0.812500 0.375000 +vt 0.812500 0.562500 +vt 0.812500 0.500000 +vt 0.812500 0.687500 +vt 0.812500 0.625000 +vt 0.812500 0.812500 +vt 0.812500 0.750000 +vt 0.812500 0.125000 +vt 0.812500 0.062500 +vt 0.812500 0.937500 +vt 0.812500 0.875000 +vt 0.812500 0.250000 +vt 0.812500 0.187500 +vt 0.812500 0.312500 +vt 0.750000 0.437500 +vt 0.750000 0.375000 +vt 0.750000 0.562500 +vt 0.750000 0.500000 +vt 0.750000 0.687500 +vt 0.750000 0.625000 +vt 0.750000 0.812500 +vt 0.750000 0.750000 +vt 0.750000 0.125000 +vt 0.750000 0.062500 +vt 0.750000 0.937500 +vt 0.750000 0.875000 +vt 0.750000 0.250000 +vt 0.750000 0.187500 +vt 0.750000 0.312500 +vt 0.687500 0.437500 +vt 0.687500 0.375000 +vt 0.687500 0.562500 +vt 0.687500 0.500000 +vt 0.687500 0.687500 +vt 0.687500 0.625000 +vt 0.687500 0.812500 +vt 0.687500 0.750000 +vt 0.687500 0.125000 +vt 0.687500 0.062500 +vt 0.687500 0.937500 +vt 0.687500 0.875000 +vt 0.687500 0.250000 +vt 0.687500 0.187500 +vt 0.687500 0.312500 +vt 0.625000 0.437500 +vt 0.625000 0.375000 +vt 0.625000 0.562500 +vt 0.625000 0.500000 +vt 0.625000 0.687500 +vt 0.625000 0.625000 +vt 0.625000 0.812500 +vt 0.625000 0.750000 +vt 0.625000 0.125000 +vt 0.625000 0.062500 +vt 0.625000 0.937500 +vt 0.625000 0.875000 +vt 0.625000 0.250000 +vt 0.625000 0.187500 +vt 0.625000 0.312500 +vt 0.562500 0.437500 +vt 0.562500 0.375000 +vt 0.562500 0.562500 +vt 0.562500 0.500000 +vt 0.562500 0.687500 +vt 0.562500 0.625000 +vt 0.562500 0.812500 +vt 0.562500 0.750000 +vt 0.562500 0.125000 +vt 0.562500 0.062500 +vt 0.562500 0.937500 +vt 0.562500 0.875000 +vt 0.562500 0.250000 +vt 0.562500 0.187500 +vt 0.562500 0.312500 +vt 0.500000 0.437500 +vt 0.500000 0.375000 +vt 0.500000 0.562500 +vt 0.500000 0.500000 +vt 0.500000 0.687500 +vt 0.500000 0.625000 +vt 0.500000 0.812500 +vt 0.500000 0.750000 +vt 0.500000 0.125000 +vt 0.500000 0.062500 +vt 0.500000 0.937500 +vt 0.500000 0.875000 +vt 0.500000 0.250000 +vt 0.500000 0.187500 +vt 0.500000 0.312500 +vt 0.437500 0.000000 +vt 0.375000 0.000000 +vt 0.312500 0.000000 +vt 0.250000 0.000000 +vt 0.187500 0.000000 +vt 0.125000 0.000000 +vt 0.062500 0.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 0.937500 0.000000 +vt 0.875000 0.000000 +vt 0.812500 0.000000 +vt 0.750000 0.000000 +vt 0.687500 0.000000 +vt 0.625000 0.000000 +vt 0.562500 0.000000 +vt 0.500000 0.000000 +vt 0.500000 1.000000 +vt 0.437500 1.000000 +vt 0.562500 1.000000 +vt 0.625000 1.000000 +vt 0.687500 1.000000 +vt 0.750000 1.000000 +vt 0.812500 1.000000 +vt 0.875000 1.000000 +vt 0.937500 1.000000 +vt 1.000000 1.000000 +vt 0.062500 1.000000 +vt -0.000000 1.000000 +vt 0.125000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.312500 1.000000 +vt 0.375000 1.000000 +vt 0.031303 0.999906 +vt 0.037377 0.999307 +vt 0.043218 0.997535 +vt 0.048601 0.994658 +vt 0.053319 0.990786 +vt 0.057192 0.986068 +vt 0.060069 0.980685 +vt 0.061841 0.974844 +vt 0.062439 0.968769 +vt 0.061841 0.962695 +vt 0.060069 0.956854 +vt 0.057192 0.951471 +vt 0.053319 0.946753 +vt 0.048601 0.942881 +vt 0.043218 0.940004 +vt 0.037377 0.938232 +vt 0.031303 0.937633 +vt 0.025229 0.938232 +vt 0.019388 0.940004 +vt 0.014005 0.942881 +vt 0.009286 0.946753 +vt 0.005414 0.951471 +vt 0.002537 0.956854 +vt 0.000765 0.962695 +vt 0.000167 0.968770 +vt 0.000765 0.974844 +vt 0.002537 0.980685 +vt 0.005414 0.986068 +vt 0.009286 0.990786 +vt 0.014005 0.994658 +vt 0.019388 0.997535 +vt 0.025229 0.999307 +vn -0.710100 0.704000 0.000000 +vn -0.559800 0.828600 0.000000 +vn -0.549000 0.828600 -0.109200 +vn -0.696500 0.704000 -0.138500 +vn -0.182000 -0.983300 0.000000 +vn -0.387900 -0.921700 0.000000 +vn -0.380400 -0.921700 -0.075700 +vn -0.178400 -0.983300 -0.035500 +vn -0.387900 0.921700 0.000000 +vn -0.182000 0.983300 0.000000 +vn -0.178400 0.983300 -0.035500 +vn -0.380400 0.921700 -0.075700 +vn -0.559800 -0.828600 0.000000 +vn -0.710100 -0.704000 0.000000 +vn -0.696500 -0.704000 -0.138500 +vn -0.549000 -0.828600 -0.109200 +vn -0.833300 -0.552800 0.000000 +vn -0.924700 -0.380500 0.000000 +vn -0.907000 -0.380500 -0.180400 +vn -0.817300 -0.552800 -0.162600 +vn -0.981000 -0.193900 0.000000 +vn -1.000000 0.000000 0.000000 +vn -0.980800 0.000000 -0.195100 +vn -0.962200 -0.193900 -0.191400 +vn -0.981000 0.193900 0.000000 +vn -0.924700 0.380500 0.000000 +vn -0.907000 0.380500 -0.180400 +vn -0.962200 0.193900 -0.191400 +vn -0.833300 0.552800 0.000000 +vn -0.817300 0.552800 -0.162600 +vn -0.906300 -0.193900 -0.375400 +vn -0.854400 -0.380500 -0.353900 +vn -0.906300 0.193900 -0.375400 +vn -0.923900 0.000000 -0.382700 +vn -0.769900 0.552800 -0.318900 +vn -0.854400 0.380500 -0.353900 +vn -0.517100 0.828600 -0.214200 +vn -0.656100 0.704000 -0.271700 +vn -0.358300 -0.921700 -0.148400 +vn -0.168100 -0.983300 -0.069600 +vn -0.168100 0.983300 -0.069600 +vn -0.358300 0.921700 -0.148400 +vn -0.656100 -0.704000 -0.271700 +vn -0.517100 -0.828600 -0.214200 +vn -0.769900 -0.552800 -0.318900 +vn -0.815700 -0.193900 -0.545000 +vn -0.768900 -0.380500 -0.513700 +vn -0.815700 0.193900 -0.545000 +vn -0.831400 0.000000 -0.555600 +vn -0.692900 0.552800 -0.463000 +vn -0.768900 0.380500 -0.513700 +vn -0.465400 0.828600 -0.311000 +vn -0.590400 0.704000 -0.394500 +vn -0.322500 -0.921700 -0.215500 +vn -0.151300 -0.983300 -0.101100 +vn -0.151300 0.983300 -0.101100 +vn -0.322500 0.921700 -0.215500 +vn -0.590400 -0.704000 -0.394500 +vn -0.465400 -0.828600 -0.311000 +vn -0.692900 -0.552800 -0.463000 +vn -0.693700 -0.193900 -0.693700 +vn -0.653900 -0.380500 -0.653900 +vn -0.693700 0.193900 -0.693700 +vn -0.707100 0.000000 -0.707100 +vn -0.589300 0.552800 -0.589300 +vn -0.653900 0.380500 -0.653900 +vn -0.395800 0.828600 -0.395800 +vn -0.502100 0.704000 -0.502100 +vn -0.274300 -0.921700 -0.274300 +vn -0.128600 -0.983300 -0.128600 +vn -0.128600 0.983300 -0.128600 +vn -0.274300 0.921700 -0.274300 +vn -0.502100 -0.704000 -0.502100 +vn -0.395800 -0.828600 -0.395800 +vn -0.589300 -0.552800 -0.589300 +vn -0.545000 -0.193900 -0.815700 +vn -0.513700 -0.380500 -0.768900 +vn -0.545000 0.193900 -0.815700 +vn -0.555600 0.000000 -0.831400 +vn -0.463000 0.552800 -0.692900 +vn -0.513700 0.380500 -0.768900 +vn -0.311000 0.828600 -0.465400 +vn -0.394500 0.704000 -0.590400 +vn -0.215500 -0.921700 -0.322500 +vn -0.101100 -0.983300 -0.151300 +vn -0.101100 0.983300 -0.151300 +vn -0.215500 0.921700 -0.322500 +vn -0.394500 -0.704000 -0.590400 +vn -0.311000 -0.828600 -0.465400 +vn -0.463000 -0.552800 -0.692900 +vn -0.375400 -0.193900 -0.906300 +vn -0.353900 -0.380500 -0.854400 +vn -0.375400 0.193900 -0.906300 +vn -0.382700 0.000000 -0.923900 +vn -0.318900 0.552800 -0.769900 +vn -0.353900 0.380500 -0.854400 +vn -0.214200 0.828600 -0.517100 +vn -0.271700 0.704000 -0.656100 +vn -0.148400 -0.921700 -0.358300 +vn -0.069600 -0.983300 -0.168100 +vn -0.069600 0.983300 -0.168100 +vn -0.148400 0.921700 -0.358300 +vn -0.271700 -0.704000 -0.656100 +vn -0.214200 -0.828600 -0.517100 +vn -0.318900 -0.552800 -0.769900 +vn -0.191400 -0.193900 -0.962200 +vn -0.180400 -0.380500 -0.907000 +vn -0.191400 0.193900 -0.962200 +vn -0.195100 0.000000 -0.980800 +vn -0.162600 0.552800 -0.817300 +vn -0.180400 0.380500 -0.907000 +vn -0.109200 0.828600 -0.549000 +vn -0.138500 0.704000 -0.696500 +vn -0.075700 -0.921700 -0.380400 +vn -0.035500 -0.983300 -0.178400 +vn -0.035500 0.983300 -0.178400 +vn -0.075700 0.921700 -0.380400 +vn -0.138500 -0.704000 -0.696500 +vn -0.109200 -0.828600 -0.549000 +vn -0.162600 -0.552800 -0.817300 +vn 0.000000 -0.193900 -0.981000 +vn 0.000000 -0.380500 -0.924700 +vn 0.000000 0.193900 -0.981000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 0.552800 -0.833300 +vn 0.000000 0.380500 -0.924700 +vn 0.000000 0.828600 -0.559800 +vn 0.000000 0.704000 -0.710100 +vn 0.000000 -0.921700 -0.387900 +vn 0.000000 -0.983300 -0.182000 +vn 0.000000 0.983300 -0.182000 +vn 0.000000 0.921700 -0.387900 +vn 0.000000 -0.704000 -0.710100 +vn 0.000000 -0.828600 -0.559800 +vn 0.000000 -0.552800 -0.833300 +vn 0.191400 -0.193900 -0.962200 +vn 0.180400 -0.380500 -0.907000 +vn 0.191400 0.193900 -0.962200 +vn 0.195100 0.000000 -0.980800 +vn 0.162600 0.552800 -0.817300 +vn 0.180400 0.380500 -0.907000 +vn 0.109200 0.828600 -0.549000 +vn 0.138500 0.704000 -0.696500 +vn 0.075700 -0.921700 -0.380400 +vn 0.035500 -0.983300 -0.178400 +vn 0.035500 0.983300 -0.178400 +vn 0.075700 0.921700 -0.380400 +vn 0.138500 -0.704000 -0.696500 +vn 0.109200 -0.828600 -0.549000 +vn 0.162600 -0.552800 -0.817300 +vn 0.375400 -0.193900 -0.906300 +vn 0.353900 -0.380500 -0.854400 +vn 0.375400 0.193900 -0.906300 +vn 0.382700 0.000000 -0.923900 +vn 0.318900 0.552800 -0.769900 +vn 0.353900 0.380500 -0.854400 +vn 0.214200 0.828600 -0.517100 +vn 0.271700 0.704000 -0.656100 +vn 0.148400 -0.921700 -0.358300 +vn 0.069600 -0.983300 -0.168100 +vn 0.069600 0.983300 -0.168100 +vn 0.148400 0.921700 -0.358300 +vn 0.271700 -0.704000 -0.656100 +vn 0.214200 -0.828600 -0.517100 +vn 0.318900 -0.552800 -0.769900 +vn 0.545000 -0.193900 -0.815700 +vn 0.513700 -0.380500 -0.768900 +vn 0.545000 0.193900 -0.815700 +vn 0.555600 0.000000 -0.831400 +vn 0.463000 0.552800 -0.692900 +vn 0.513700 0.380500 -0.768900 +vn 0.311000 0.828600 -0.465400 +vn 0.394500 0.704000 -0.590400 +vn 0.215500 -0.921700 -0.322500 +vn 0.101100 -0.983300 -0.151300 +vn 0.101100 0.983300 -0.151300 +vn 0.215500 0.921700 -0.322500 +vn 0.394500 -0.704000 -0.590400 +vn 0.311000 -0.828600 -0.465400 +vn 0.463000 -0.552800 -0.692900 +vn 0.693700 -0.193900 -0.693700 +vn 0.653900 -0.380500 -0.653900 +vn 0.693700 0.193900 -0.693700 +vn 0.707100 0.000000 -0.707100 +vn 0.589300 0.552800 -0.589300 +vn 0.653900 0.380500 -0.653900 +vn 0.395800 0.828600 -0.395800 +vn 0.502100 0.704000 -0.502100 +vn 0.274300 -0.921700 -0.274300 +vn 0.128600 -0.983300 -0.128600 +vn 0.128600 0.983300 -0.128600 +vn 0.274300 0.921700 -0.274300 +vn 0.502100 -0.704000 -0.502100 +vn 0.395800 -0.828600 -0.395800 +vn 0.589300 -0.552800 -0.589300 +vn 0.815700 -0.193900 -0.545000 +vn 0.768900 -0.380500 -0.513700 +vn 0.815700 0.193900 -0.545000 +vn 0.831400 0.000000 -0.555600 +vn 0.692900 0.552800 -0.463000 +vn 0.768900 0.380500 -0.513700 +vn 0.465400 0.828600 -0.311000 +vn 0.590400 0.704000 -0.394500 +vn 0.322500 -0.921700 -0.215500 +vn 0.151300 -0.983300 -0.101100 +vn 0.151300 0.983300 -0.101100 +vn 0.322500 0.921700 -0.215500 +vn 0.590400 -0.704000 -0.394500 +vn 0.465400 -0.828600 -0.311000 +vn 0.692900 -0.552800 -0.463000 +vn 0.906300 -0.193900 -0.375400 +vn 0.854400 -0.380500 -0.353900 +vn 0.906300 0.193900 -0.375400 +vn 0.923900 0.000000 -0.382700 +vn 0.769900 0.552800 -0.318900 +vn 0.854400 0.380500 -0.353900 +vn 0.517100 0.828600 -0.214200 +vn 0.656100 0.704000 -0.271700 +vn 0.358300 -0.921700 -0.148400 +vn 0.168100 -0.983300 -0.069600 +vn 0.168100 0.983300 -0.069600 +vn 0.358300 0.921700 -0.148400 +vn 0.656100 -0.704000 -0.271700 +vn 0.517100 -0.828600 -0.214200 +vn 0.769900 -0.552800 -0.318900 +vn 0.962200 -0.193900 -0.191400 +vn 0.907000 -0.380500 -0.180400 +vn 0.962200 0.193900 -0.191400 +vn 0.980800 0.000000 -0.195100 +vn 0.817300 0.552800 -0.162600 +vn 0.907000 0.380500 -0.180400 +vn 0.549000 0.828600 -0.109200 +vn 0.696500 0.704000 -0.138500 +vn 0.380400 -0.921700 -0.075700 +vn 0.178400 -0.983300 -0.035500 +vn 0.178400 0.983300 -0.035500 +vn 0.380400 0.921700 -0.075700 +vn 0.696500 -0.704000 -0.138500 +vn 0.549000 -0.828600 -0.109200 +vn 0.817300 -0.552800 -0.162600 +vn 0.981000 -0.193900 0.000000 +vn 0.924700 -0.380500 0.000000 +vn 0.981000 0.193900 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.833300 0.552800 0.000000 +vn 0.924700 0.380500 0.000000 +vn 0.559800 0.828600 0.000000 +vn 0.710100 0.704000 0.000000 +vn 0.387900 -0.921700 0.000000 +vn 0.182000 -0.983300 0.000000 +vn 0.182000 0.983300 0.000000 +vn 0.387900 0.921700 0.000000 +vn 0.710100 -0.704000 0.000000 +vn 0.559800 -0.828600 0.000000 +vn 0.833300 -0.552800 0.000000 +vn 0.962200 -0.193900 0.191400 +vn 0.907000 -0.380500 0.180400 +vn 0.962200 0.193900 0.191400 +vn 0.980800 0.000000 0.195100 +vn 0.817300 0.552800 0.162600 +vn 0.907000 0.380500 0.180400 +vn 0.549000 0.828600 0.109200 +vn 0.696500 0.704000 0.138500 +vn 0.380400 -0.921700 0.075700 +vn 0.178400 -0.983300 0.035500 +vn 0.178400 0.983300 0.035500 +vn 0.380400 0.921700 0.075700 +vn 0.696500 -0.704000 0.138500 +vn 0.549000 -0.828600 0.109200 +vn 0.817300 -0.552800 0.162600 +vn 0.906300 -0.193900 0.375400 +vn 0.854400 -0.380500 0.353900 +vn 0.906300 0.193900 0.375400 +vn 0.923900 0.000000 0.382700 +vn 0.769900 0.552800 0.318900 +vn 0.854400 0.380500 0.353900 +vn 0.517100 0.828600 0.214200 +vn 0.656100 0.704000 0.271700 +vn 0.358300 -0.921700 0.148400 +vn 0.168100 -0.983300 0.069600 +vn 0.168100 0.983300 0.069600 +vn 0.358300 0.921700 0.148400 +vn 0.656100 -0.704000 0.271700 +vn 0.517100 -0.828600 0.214200 +vn 0.769900 -0.552800 0.318900 +vn 0.815700 -0.193900 0.545000 +vn 0.768900 -0.380500 0.513700 +vn 0.815700 0.193900 0.545000 +vn 0.831400 0.000000 0.555600 +vn 0.692900 0.552800 0.463000 +vn 0.768900 0.380500 0.513700 +vn 0.465400 0.828600 0.311000 +vn 0.590400 0.704000 0.394500 +vn 0.322500 -0.921700 0.215500 +vn 0.151300 -0.983300 0.101100 +vn 0.151300 0.983300 0.101100 +vn 0.322500 0.921700 0.215500 +vn 0.590400 -0.704000 0.394500 +vn 0.465400 -0.828600 0.311000 +vn 0.692900 -0.552800 0.463000 +vn 0.693700 -0.193900 0.693700 +vn 0.653900 -0.380500 0.653900 +vn 0.693700 0.193900 0.693700 +vn 0.707100 0.000000 0.707100 +vn 0.589300 0.552800 0.589300 +vn 0.653900 0.380500 0.653900 +vn 0.395800 0.828600 0.395800 +vn 0.502100 0.704000 0.502100 +vn 0.274300 -0.921700 0.274300 +vn 0.128600 -0.983300 0.128600 +vn 0.128600 0.983300 0.128600 +vn 0.274300 0.921700 0.274300 +vn 0.502100 -0.704000 0.502100 +vn 0.395800 -0.828600 0.395800 +vn 0.589300 -0.552800 0.589300 +vn 0.545000 -0.193900 0.815700 +vn 0.513700 -0.380500 0.768900 +vn 0.545000 0.193900 0.815700 +vn 0.555600 0.000000 0.831400 +vn 0.463000 0.552800 0.692900 +vn 0.513700 0.380500 0.768900 +vn 0.311000 0.828600 0.465400 +vn 0.394500 0.704000 0.590400 +vn 0.215500 -0.921700 0.322500 +vn 0.101100 -0.983300 0.151300 +vn 0.101100 0.983300 0.151300 +vn 0.215500 0.921700 0.322500 +vn 0.394500 -0.704000 0.590400 +vn 0.311000 -0.828600 0.465400 +vn 0.463000 -0.552800 0.692900 +vn 0.375400 -0.193900 0.906300 +vn 0.353900 -0.380500 0.854400 +vn 0.375400 0.193900 0.906300 +vn 0.382700 0.000000 0.923900 +vn 0.318900 0.552800 0.769900 +vn 0.353900 0.380500 0.854400 +vn 0.214200 0.828600 0.517100 +vn 0.271700 0.704000 0.656100 +vn 0.148400 -0.921700 0.358300 +vn 0.069600 -0.983300 0.168100 +vn 0.069600 0.983300 0.168100 +vn 0.148400 0.921700 0.358300 +vn 0.271700 -0.704000 0.656100 +vn 0.214200 -0.828600 0.517100 +vn 0.318900 -0.552800 0.769900 +vn 0.191400 -0.193900 0.962200 +vn 0.180400 -0.380500 0.907000 +vn 0.191400 0.193900 0.962200 +vn 0.195100 0.000000 0.980800 +vn 0.162600 0.552800 0.817300 +vn 0.180400 0.380500 0.907000 +vn 0.109200 0.828600 0.549000 +vn 0.138500 0.704000 0.696500 +vn 0.075700 -0.921700 0.380400 +vn 0.035500 -0.983300 0.178400 +vn 0.035500 0.983300 0.178400 +vn 0.075700 0.921700 0.380400 +vn 0.138500 -0.704000 0.696500 +vn 0.109200 -0.828600 0.549000 +vn 0.162600 -0.552800 0.817300 +vn 0.000000 -0.193900 0.981000 +vn 0.000000 -0.380500 0.924700 +vn 0.000000 0.193900 0.981000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.552800 0.833300 +vn 0.000000 0.380500 0.924700 +vn 0.000000 0.828600 0.559800 +vn 0.000000 0.704000 0.710100 +vn 0.000000 -0.921700 0.387900 +vn 0.000000 -0.983300 0.182000 +vn 0.000000 0.983300 0.182000 +vn 0.000000 0.921700 0.387900 +vn 0.000000 -0.704000 0.710100 +vn 0.000000 -0.828600 0.559800 +vn 0.000000 -0.552800 0.833300 +vn -0.191400 -0.193900 0.962200 +vn -0.180400 -0.380500 0.907000 +vn -0.191400 0.193900 0.962200 +vn -0.195100 0.000000 0.980800 +vn -0.162600 0.552800 0.817300 +vn -0.180400 0.380500 0.907000 +vn -0.109200 0.828600 0.549000 +vn -0.138500 0.704000 0.696500 +vn -0.075700 -0.921700 0.380400 +vn -0.035500 -0.983300 0.178400 +vn -0.035500 0.983300 0.178400 +vn -0.075700 0.921700 0.380400 +vn -0.138500 -0.704000 0.696500 +vn -0.109200 -0.828600 0.549000 +vn -0.162600 -0.552800 0.817300 +vn -0.375400 -0.193900 0.906300 +vn -0.353900 -0.380500 0.854400 +vn -0.375400 0.193900 0.906300 +vn -0.382700 0.000000 0.923900 +vn -0.318900 0.552800 0.769900 +vn -0.353900 0.380500 0.854400 +vn -0.214200 0.828600 0.517100 +vn -0.271700 0.704000 0.656100 +vn -0.148400 -0.921700 0.358300 +vn -0.069600 -0.983300 0.168100 +vn -0.069600 0.983300 0.168100 +vn -0.148400 0.921700 0.358300 +vn -0.271700 -0.704000 0.656100 +vn -0.214200 -0.828600 0.517100 +vn -0.318900 -0.552800 0.769900 +vn -0.545000 -0.193900 0.815700 +vn -0.513700 -0.380500 0.768900 +vn -0.545000 0.193900 0.815700 +vn -0.555600 0.000000 0.831400 +vn -0.463000 0.552800 0.692900 +vn -0.513700 0.380500 0.768900 +vn -0.311000 0.828600 0.465400 +vn -0.394500 0.704000 0.590400 +vn -0.215500 -0.921700 0.322500 +vn -0.101100 -0.983300 0.151300 +vn -0.101100 0.983300 0.151300 +vn -0.215500 0.921700 0.322500 +vn -0.394500 -0.704000 0.590400 +vn -0.311000 -0.828600 0.465400 +vn -0.463000 -0.552800 0.692900 +vn -0.693700 -0.193900 0.693700 +vn -0.653900 -0.380500 0.653900 +vn -0.693700 0.193900 0.693700 +vn -0.707100 0.000000 0.707100 +vn -0.589300 0.552800 0.589300 +vn -0.653900 0.380500 0.653900 +vn -0.395800 0.828600 0.395800 +vn -0.502100 0.704000 0.502100 +vn -0.274300 -0.921700 0.274300 +vn -0.128600 -0.983300 0.128600 +vn -0.128600 0.983300 0.128600 +vn -0.274300 0.921700 0.274300 +vn -0.502100 -0.704000 0.502100 +vn -0.395800 -0.828600 0.395800 +vn -0.589300 -0.552800 0.589300 +vn -0.815700 -0.193900 0.545000 +vn -0.768900 -0.380500 0.513700 +vn -0.815700 0.193900 0.545000 +vn -0.831400 0.000000 0.555600 +vn -0.692900 0.552800 0.463000 +vn -0.768900 0.380500 0.513700 +vn -0.465400 0.828600 0.311000 +vn -0.590400 0.704000 0.394500 +vn -0.322500 -0.921700 0.215500 +vn -0.151300 -0.983300 0.101100 +vn -0.151300 0.983300 0.101100 +vn -0.322500 0.921700 0.215500 +vn -0.590400 -0.704000 0.394500 +vn -0.465400 -0.828600 0.311000 +vn -0.692900 -0.552800 0.463000 +vn -0.906300 -0.193900 0.375400 +vn -0.854400 -0.380500 0.353900 +vn -0.906300 0.193900 0.375400 +vn -0.923900 0.000000 0.382700 +vn -0.769900 0.552800 0.318900 +vn -0.854400 0.380500 0.353900 +vn -0.517100 0.828600 0.214200 +vn -0.656100 0.704000 0.271700 +vn -0.358300 -0.921700 0.148400 +vn -0.168100 -0.983300 0.069600 +vn -0.168100 0.983300 0.069600 +vn -0.358300 0.921700 0.148400 +vn -0.656100 -0.704000 0.271700 +vn -0.517100 -0.828600 0.214200 +vn -0.769900 -0.552800 0.318900 +vn -0.962200 -0.193900 0.191400 +vn -0.907000 -0.380500 0.180400 +vn -0.962200 0.193900 0.191400 +vn -0.980800 0.000000 0.195100 +vn -0.817300 0.552800 0.162600 +vn -0.907000 0.380500 0.180400 +vn -0.549000 0.828600 0.109200 +vn -0.696500 0.704000 0.138500 +vn -0.380400 -0.921700 0.075700 +vn -0.178400 -0.983300 0.035500 +vn -0.178400 0.983300 0.035500 +vn -0.380400 0.921700 0.075700 +vn -0.696500 -0.704000 0.138500 +vn -0.549000 -0.828600 0.109200 +vn -0.817300 -0.552800 0.162600 +vn -0.030200 -0.999500 0.000000 +vn -0.029600 -0.999500 -0.005900 +vn -0.027900 -0.999500 -0.011500 +vn -0.025100 -0.999500 -0.016800 +vn -0.021300 -0.999500 -0.021300 +vn -0.016800 -0.999500 -0.025100 +vn -0.011500 -0.999500 -0.027900 +vn -0.005900 -0.999500 -0.029600 +vn 0.000000 -0.999500 -0.030200 +vn 0.005900 -0.999500 -0.029600 +vn 0.011500 -0.999500 -0.027900 +vn 0.016800 -0.999500 -0.025100 +vn 0.021300 -0.999500 -0.021300 +vn 0.025100 -0.999500 -0.016800 +vn 0.027900 -0.999500 -0.011500 +vn 0.029600 -0.999500 -0.005900 +vn 0.030200 -0.999500 0.000000 +vn 0.029600 -0.999500 0.005900 +vn 0.027900 -0.999500 0.011500 +vn 0.025100 -0.999500 0.016800 +vn 0.021300 -0.999500 0.021300 +vn 0.016800 -0.999500 0.025100 +vn 0.011500 -0.999500 0.027900 +vn 0.005900 -0.999500 0.029600 +vn 0.000000 -0.999500 0.030200 +vn -0.005900 -0.999500 0.029600 +vn -0.011500 -0.999500 0.027900 +vn -0.016800 -0.999500 0.025100 +vn -0.021300 -0.999500 0.021300 +vn -0.025100 -0.999500 0.016800 +vn -0.027900 -0.999500 0.011500 +vn -0.029600 -0.999500 0.005900 +vn -0.029600 0.999500 0.005900 +vn -0.030200 0.999500 0.000000 +vn -0.027900 0.999500 0.011500 +vn -0.025100 0.999500 0.016800 +vn -0.021300 0.999500 0.021300 +vn -0.016800 0.999500 0.025100 +vn -0.011500 0.999500 0.027900 +vn -0.005900 0.999500 0.029600 +vn 0.000000 0.999500 0.030200 +vn 0.005900 0.999500 0.029600 +vn 0.011500 0.999500 0.027900 +vn 0.016800 0.999500 0.025100 +vn 0.021300 0.999500 0.021300 +vn 0.025100 0.999500 0.016800 +vn 0.027900 0.999500 0.011500 +vn 0.029600 0.999500 0.005900 +vn 0.030200 0.999500 0.000000 +vn 0.029600 0.999500 -0.005900 +vn 0.027900 0.999500 -0.011500 +vn 0.025100 0.999500 -0.016800 +vn 0.021300 0.999500 -0.021300 +vn 0.016800 0.999500 -0.025100 +vn 0.011500 0.999500 -0.027900 +vn 0.005900 0.999500 -0.029600 +vn 0.000000 0.999500 -0.030200 +vn -0.005900 0.999500 -0.029600 +vn -0.011500 0.999500 -0.027900 +vn -0.016800 0.999500 -0.025100 +vn -0.021300 0.999500 -0.021300 +vn -0.025100 0.999500 -0.016800 +vn -0.027900 0.999500 -0.011500 +vn -0.029600 0.999500 -0.005900 +s 1 +f 4/1/1 3/2/2 18/3/3 19/4/4 +f 15/5/5 14/6/6 29/7/7 30/8/8 +f 2/9/9 1/10/10 16/11/11 17/12/12 +f 13/13/13 12/14/14 27/15/15 28/16/16 +f 11/17/17 10/18/18 25/19/19 26/20/20 +f 9/21/21 8/22/22 23/23/23 24/24/24 +f 7/25/25 6/26/26 21/27/27 22/28/28 +f 5/29/29 4/1/1 19/4/4 20/30/30 +f 3/2/2 2/9/9 17/12/12 18/3/3 +f 14/6/6 13/13/13 28/16/16 29/7/7 +f 12/14/14 11/17/17 26/20/20 27/15/15 +f 10/18/18 9/21/21 24/24/24 25/19/19 +f 8/22/22 7/25/25 22/28/28 23/23/23 +f 6/26/26 5/29/29 20/30/30 21/27/27 +f 25/19/19 24/24/24 39/31/31 40/32/32 +f 23/23/23 22/28/28 37/33/33 38/34/34 +f 21/27/27 20/30/30 35/35/35 36/36/36 +f 19/4/4 18/3/3 33/37/37 34/38/38 +f 30/8/8 29/7/7 44/39/39 45/40/40 +f 17/12/12 16/11/11 31/41/41 32/42/42 +f 28/16/16 27/15/15 42/43/43 43/44/44 +f 26/20/20 25/19/19 40/32/32 41/45/45 +f 24/24/24 23/23/23 38/34/34 39/31/31 +f 22/28/28 21/27/27 36/36/36 37/33/33 +f 20/30/30 19/4/4 34/38/38 35/35/35 +f 18/3/3 17/12/12 32/42/42 33/37/37 +f 29/7/7 28/16/16 43/44/44 44/39/39 +f 27/15/15 26/20/20 41/45/45 42/43/43 +f 40/32/32 39/31/31 54/46/46 55/47/47 +f 38/34/34 37/33/33 52/48/48 53/49/49 +f 36/36/36 35/35/35 50/50/50 51/51/51 +f 34/38/38 33/37/37 48/52/52 49/53/53 +f 45/40/40 44/39/39 59/54/54 60/55/55 +f 32/42/42 31/41/41 46/56/56 47/57/57 +f 43/44/44 42/43/43 57/58/58 58/59/59 +f 41/45/45 40/32/32 55/47/47 56/60/60 +f 39/31/31 38/34/34 53/49/49 54/46/46 +f 37/33/33 36/36/36 51/51/51 52/48/48 +f 35/35/35 34/38/38 49/53/53 50/50/50 +f 33/37/37 32/42/42 47/57/57 48/52/52 +f 44/39/39 43/44/44 58/59/59 59/54/54 +f 42/43/43 41/45/45 56/60/60 57/58/58 +f 55/47/47 54/46/46 69/61/61 70/62/62 +f 53/49/49 52/48/48 67/63/63 68/64/64 +f 51/51/51 50/50/50 65/65/65 66/66/66 +f 49/53/53 48/52/52 63/67/67 64/68/68 +f 60/55/55 59/54/54 74/69/69 75/70/70 +f 47/57/57 46/56/56 61/71/71 62/72/72 +f 58/59/59 57/58/58 72/73/73 73/74/74 +f 56/60/60 55/47/47 70/62/62 71/75/75 +f 54/46/46 53/49/49 68/64/64 69/61/61 +f 52/48/48 51/51/51 66/66/66 67/63/63 +f 50/50/50 49/53/53 64/68/68 65/65/65 +f 48/52/52 47/57/57 62/72/72 63/67/67 +f 59/54/54 58/59/59 73/74/74 74/69/69 +f 57/58/58 56/60/60 71/75/75 72/73/73 +f 70/62/62 69/61/61 84/76/76 85/77/77 +f 68/64/64 67/63/63 82/78/78 83/79/79 +f 66/66/66 65/65/65 80/80/80 81/81/81 +f 64/68/68 63/67/67 78/82/82 79/83/83 +f 75/70/70 74/69/69 89/84/84 90/85/85 +f 62/72/72 61/71/71 76/86/86 77/87/87 +f 73/74/74 72/73/73 87/88/88 88/89/89 +f 71/75/75 70/62/62 85/77/77 86/90/90 +f 69/61/61 68/64/64 83/79/79 84/76/76 +f 67/63/63 66/66/66 81/81/81 82/78/78 +f 65/65/65 64/68/68 79/83/83 80/80/80 +f 63/67/67 62/72/72 77/87/87 78/82/82 +f 74/69/69 73/74/74 88/89/89 89/84/84 +f 72/73/73 71/75/75 86/90/90 87/88/88 +f 85/77/77 84/76/76 99/91/91 100/92/92 +f 83/79/79 82/78/78 97/93/93 98/94/94 +f 81/81/81 80/80/80 95/95/95 96/96/96 +f 79/83/83 78/82/82 93/97/97 94/98/98 +f 90/85/85 89/84/84 104/99/99 105/100/100 +f 77/87/87 76/86/86 91/101/101 92/102/102 +f 88/89/89 87/88/88 102/103/103 103/104/104 +f 86/90/90 85/77/77 100/92/92 101/105/105 +f 84/76/76 83/79/79 98/94/94 99/91/91 +f 82/78/78 81/81/81 96/96/96 97/93/93 +f 80/80/80 79/83/83 94/98/98 95/95/95 +f 78/82/82 77/87/87 92/102/102 93/97/97 +f 89/84/84 88/89/89 103/104/104 104/99/99 +f 87/88/88 86/90/90 101/105/105 102/103/103 +f 100/92/92 99/91/91 114/106/106 115/107/107 +f 98/94/94 97/93/93 112/108/108 113/109/109 +f 96/96/96 95/95/95 110/110/110 111/111/111 +f 94/98/98 93/97/97 108/112/112 109/113/113 +f 105/100/100 104/99/99 119/114/114 120/115/115 +f 92/102/102 91/101/101 106/116/116 107/117/117 +f 103/104/104 102/103/103 117/118/118 118/119/119 +f 101/105/105 100/92/92 115/107/107 116/120/120 +f 99/91/91 98/94/94 113/109/109 114/106/106 +f 97/93/93 96/96/96 111/111/111 112/108/108 +f 95/95/95 94/98/98 109/113/113 110/110/110 +f 93/97/97 92/102/102 107/117/117 108/112/112 +f 104/99/99 103/104/104 118/119/119 119/114/114 +f 102/103/103 101/105/105 116/120/120 117/118/118 +f 115/121/107 114/122/106 129/123/121 130/124/122 +f 113/125/109 112/126/108 127/127/123 128/128/124 +f 111/129/111 110/130/110 125/131/125 126/132/126 +f 109/133/113 108/134/112 123/135/127 124/136/128 +f 120/137/115 119/138/114 134/139/129 135/140/130 +f 107/141/117 106/142/116 121/143/131 122/144/132 +f 118/145/119 117/146/118 132/147/133 133/148/134 +f 116/149/120 115/121/107 130/124/122 131/150/135 +f 114/122/106 113/125/109 128/128/124 129/123/121 +f 112/126/108 111/129/111 126/132/126 127/127/123 +f 110/130/110 109/133/113 124/136/128 125/131/125 +f 108/134/112 107/141/117 122/144/132 123/135/127 +f 119/138/114 118/145/119 133/148/134 134/139/129 +f 117/146/118 116/149/120 131/150/135 132/147/133 +f 130/124/122 129/123/121 144/151/136 145/152/137 +f 128/128/124 127/127/123 142/153/138 143/154/139 +f 126/132/126 125/131/125 140/155/140 141/156/141 +f 124/136/128 123/135/127 138/157/142 139/158/143 +f 135/140/130 134/139/129 149/159/144 150/160/145 +f 122/144/132 121/143/131 136/161/146 137/162/147 +f 133/148/134 132/147/133 147/163/148 148/164/149 +f 131/150/135 130/124/122 145/152/137 146/165/150 +f 129/123/121 128/128/124 143/154/139 144/151/136 +f 127/127/123 126/132/126 141/156/141 142/153/138 +f 125/131/125 124/136/128 139/158/143 140/155/140 +f 123/135/127 122/144/132 137/162/147 138/157/142 +f 134/139/129 133/148/134 148/164/149 149/159/144 +f 132/147/133 131/150/135 146/165/150 147/163/148 +f 145/152/137 144/151/136 159/166/151 160/167/152 +f 143/154/139 142/153/138 157/168/153 158/169/154 +f 141/156/141 140/155/140 155/170/155 156/171/156 +f 139/158/143 138/157/142 153/172/157 154/173/158 +f 150/160/145 149/159/144 164/174/159 165/175/160 +f 137/162/147 136/161/146 151/176/161 152/177/162 +f 148/164/149 147/163/148 162/178/163 163/179/164 +f 146/165/150 145/152/137 160/167/152 161/180/165 +f 144/151/136 143/154/139 158/169/154 159/166/151 +f 142/153/138 141/156/141 156/171/156 157/168/153 +f 140/155/140 139/158/143 154/173/158 155/170/155 +f 138/157/142 137/162/147 152/177/162 153/172/157 +f 149/159/144 148/164/149 163/179/164 164/174/159 +f 147/163/148 146/165/150 161/180/165 162/178/163 +f 160/167/152 159/166/151 174/181/166 175/182/167 +f 158/169/154 157/168/153 172/183/168 173/184/169 +f 156/171/156 155/170/155 170/185/170 171/186/171 +f 154/173/158 153/172/157 168/187/172 169/188/173 +f 165/175/160 164/174/159 179/189/174 180/190/175 +f 152/177/162 151/176/161 166/191/176 167/192/177 +f 163/179/164 162/178/163 177/193/178 178/194/179 +f 161/180/165 160/167/152 175/182/167 176/195/180 +f 159/166/151 158/169/154 173/184/169 174/181/166 +f 157/168/153 156/171/156 171/186/171 172/183/168 +f 155/170/155 154/173/158 169/188/173 170/185/170 +f 153/172/157 152/177/162 167/192/177 168/187/172 +f 164/174/159 163/179/164 178/194/179 179/189/174 +f 162/178/163 161/180/165 176/195/180 177/193/178 +f 175/182/167 174/181/166 189/196/181 190/197/182 +f 173/184/169 172/183/168 187/198/183 188/199/184 +f 171/186/171 170/185/170 185/200/185 186/201/186 +f 169/188/173 168/187/172 183/202/187 184/203/188 +f 180/190/175 179/189/174 194/204/189 195/205/190 +f 167/192/177 166/191/176 181/206/191 182/207/192 +f 178/194/179 177/193/178 192/208/193 193/209/194 +f 176/195/180 175/182/167 190/197/182 191/210/195 +f 174/181/166 173/184/169 188/199/184 189/196/181 +f 172/183/168 171/186/171 186/201/186 187/198/183 +f 170/185/170 169/188/173 184/203/188 185/200/185 +f 168/187/172 167/192/177 182/207/192 183/202/187 +f 179/189/174 178/194/179 193/209/194 194/204/189 +f 177/193/178 176/195/180 191/210/195 192/208/193 +f 190/197/182 189/196/181 204/211/196 205/212/197 +f 188/199/184 187/198/183 202/213/198 203/214/199 +f 186/201/186 185/200/185 200/215/200 201/216/201 +f 184/203/188 183/202/187 198/217/202 199/218/203 +f 195/205/190 194/204/189 209/219/204 210/220/205 +f 182/207/192 181/206/191 196/221/206 197/222/207 +f 193/209/194 192/208/193 207/223/208 208/224/209 +f 191/210/195 190/197/182 205/212/197 206/225/210 +f 189/196/181 188/199/184 203/214/199 204/211/196 +f 187/198/183 186/201/186 201/216/201 202/213/198 +f 185/200/185 184/203/188 199/218/203 200/215/200 +f 183/202/187 182/207/192 197/222/207 198/217/202 +f 194/204/189 193/209/194 208/224/209 209/219/204 +f 192/208/193 191/210/195 206/225/210 207/223/208 +f 205/212/197 204/211/196 219/226/211 220/227/212 +f 203/214/199 202/213/198 217/228/213 218/229/214 +f 201/216/201 200/215/200 215/230/215 216/231/216 +f 199/218/203 198/217/202 213/232/217 214/233/218 +f 210/220/205 209/219/204 224/234/219 225/235/220 +f 197/222/207 196/221/206 211/236/221 212/237/222 +f 208/224/209 207/223/208 222/238/223 223/239/224 +f 206/225/210 205/212/197 220/227/212 221/240/225 +f 204/211/196 203/214/199 218/229/214 219/226/211 +f 202/213/198 201/216/201 216/231/216 217/228/213 +f 200/215/200 199/218/203 214/233/218 215/230/215 +f 198/217/202 197/222/207 212/237/222 213/232/217 +f 209/219/204 208/224/209 223/239/224 224/234/219 +f 207/223/208 206/225/210 221/240/225 222/238/223 +f 220/227/212 219/226/211 234/241/226 235/242/227 +f 218/229/214 217/228/213 232/243/228 233/244/229 +f 216/231/216 215/230/215 230/245/230 231/246/231 +f 214/233/218 213/232/217 228/247/232 229/248/233 +f 225/235/220 224/234/219 239/249/234 240/250/235 +f 212/237/222 211/236/221 226/251/236 227/252/237 +f 223/239/224 222/238/223 237/253/238 238/254/239 +f 221/240/225 220/227/212 235/242/227 236/255/240 +f 219/226/211 218/229/214 233/244/229 234/241/226 +f 217/228/213 216/231/216 231/246/231 232/243/228 +f 215/230/215 214/233/218 229/248/233 230/245/230 +f 213/232/217 212/237/222 227/252/237 228/247/232 +f 224/234/219 223/239/224 238/254/239 239/249/234 +f 222/238/223 221/240/225 236/255/240 237/253/238 +f 235/242/227 234/241/226 249/21/241 250/18/242 +f 233/244/229 232/243/228 247/25/243 248/22/244 +f 231/246/231 230/245/230 245/29/245 246/26/246 +f 229/248/233 228/247/232 243/2/247 244/1/248 +f 240/250/235 239/249/234 254/6/249 255/5/250 +f 227/252/237 226/251/236 241/10/251 242/9/252 +f 238/254/239 237/253/238 252/14/253 253/13/254 +f 236/255/240 235/242/227 250/18/242 251/17/255 +f 234/241/226 233/244/229 248/22/244 249/21/241 +f 232/243/228 231/246/231 246/26/246 247/25/243 +f 230/245/230 229/248/233 244/1/248 245/29/245 +f 228/247/232 227/252/237 242/9/252 243/2/247 +f 239/249/234 238/254/239 253/13/254 254/6/249 +f 237/253/238 236/255/240 251/17/255 252/14/253 +f 250/18/242 249/21/241 264/24/256 265/19/257 +f 248/22/244 247/25/243 262/28/258 263/23/259 +f 246/26/246 245/29/245 260/30/260 261/27/261 +f 244/1/248 243/2/247 258/3/262 259/4/263 +f 255/5/250 254/6/249 269/7/264 270/8/265 +f 242/9/252 241/10/251 256/11/266 257/12/267 +f 253/13/254 252/14/253 267/15/268 268/16/269 +f 251/17/255 250/18/242 265/19/257 266/20/270 +f 249/21/241 248/22/244 263/23/259 264/24/256 +f 247/25/243 246/26/246 261/27/261 262/28/258 +f 245/29/245 244/1/248 259/4/263 260/30/260 +f 243/2/247 242/9/252 257/12/267 258/3/262 +f 254/6/249 253/13/254 268/16/269 269/7/264 +f 252/14/253 251/17/255 266/20/270 267/15/268 +f 265/19/257 264/24/256 279/31/271 280/32/272 +f 263/23/259 262/28/258 277/33/273 278/34/274 +f 261/27/261 260/30/260 275/35/275 276/36/276 +f 259/4/263 258/3/262 273/37/277 274/38/278 +f 270/8/265 269/7/264 284/39/279 285/40/280 +f 257/12/267 256/11/266 271/41/281 272/42/282 +f 268/16/269 267/15/268 282/43/283 283/44/284 +f 266/20/270 265/19/257 280/32/272 281/45/285 +f 264/24/256 263/23/259 278/34/274 279/31/271 +f 262/28/258 261/27/261 276/36/276 277/33/273 +f 260/30/260 259/4/263 274/38/278 275/35/275 +f 258/3/262 257/12/267 272/42/282 273/37/277 +f 269/7/264 268/16/269 283/44/284 284/39/279 +f 267/15/268 266/20/270 281/45/285 282/43/283 +f 280/32/272 279/31/271 294/46/286 295/47/287 +f 278/34/274 277/33/273 292/48/288 293/49/289 +f 276/36/276 275/35/275 290/50/290 291/51/291 +f 274/38/278 273/37/277 288/52/292 289/53/293 +f 285/40/280 284/39/279 299/54/294 300/55/295 +f 272/42/282 271/41/281 286/56/296 287/57/297 +f 283/44/284 282/43/283 297/58/298 298/59/299 +f 281/45/285 280/32/272 295/47/287 296/60/300 +f 279/31/271 278/34/274 293/49/289 294/46/286 +f 277/33/273 276/36/276 291/51/291 292/48/288 +f 275/35/275 274/38/278 289/53/293 290/50/290 +f 273/37/277 272/42/282 287/57/297 288/52/292 +f 284/39/279 283/44/284 298/59/299 299/54/294 +f 282/43/283 281/45/285 296/60/300 297/58/298 +f 295/47/287 294/46/286 309/61/301 310/62/302 +f 293/49/289 292/48/288 307/63/303 308/64/304 +f 291/51/291 290/50/290 305/65/305 306/66/306 +f 289/53/293 288/52/292 303/67/307 304/68/308 +f 300/55/295 299/54/294 314/69/309 315/70/310 +f 287/57/297 286/56/296 301/71/311 302/72/312 +f 298/59/299 297/58/298 312/73/313 313/74/314 +f 296/60/300 295/47/287 310/62/302 311/75/315 +f 294/46/286 293/49/289 308/64/304 309/61/301 +f 292/48/288 291/51/291 306/66/306 307/63/303 +f 290/50/290 289/53/293 304/68/308 305/65/305 +f 288/52/292 287/57/297 302/72/312 303/67/307 +f 299/54/294 298/59/299 313/74/314 314/69/309 +f 297/58/298 296/60/300 311/75/315 312/73/313 +f 310/62/302 309/61/301 324/76/316 325/77/317 +f 308/64/304 307/63/303 322/78/318 323/79/319 +f 306/66/306 305/65/305 320/80/320 321/81/321 +f 304/68/308 303/67/307 318/82/322 319/83/323 +f 315/70/310 314/69/309 329/84/324 330/85/325 +f 302/72/312 301/71/311 316/86/326 317/87/327 +f 313/74/314 312/73/313 327/88/328 328/89/329 +f 311/75/315 310/62/302 325/77/317 326/90/330 +f 309/61/301 308/64/304 323/79/319 324/76/316 +f 307/63/303 306/66/306 321/81/321 322/78/318 +f 305/65/305 304/68/308 319/83/323 320/80/320 +f 303/67/307 302/72/312 317/87/327 318/82/322 +f 314/69/309 313/74/314 328/89/329 329/84/324 +f 312/73/313 311/75/315 326/90/330 327/88/328 +f 325/77/317 324/76/316 339/91/331 340/92/332 +f 323/79/319 322/78/318 337/93/333 338/94/334 +f 321/81/321 320/80/320 335/95/335 336/96/336 +f 319/83/323 318/82/322 333/97/337 334/98/338 +f 330/85/325 329/84/324 344/99/339 345/100/340 +f 317/87/327 316/86/326 331/101/341 332/102/342 +f 328/89/329 327/88/328 342/103/343 343/104/344 +f 326/90/330 325/77/317 340/92/332 341/105/345 +f 324/76/316 323/79/319 338/94/334 339/91/331 +f 322/78/318 321/81/321 336/96/336 337/93/333 +f 320/80/320 319/83/323 334/98/338 335/95/335 +f 318/82/322 317/87/327 332/102/342 333/97/337 +f 329/84/324 328/89/329 343/104/344 344/99/339 +f 327/88/328 326/90/330 341/105/345 342/103/343 +f 340/92/332 339/91/331 354/106/346 355/107/347 +f 338/94/334 337/93/333 352/108/348 353/109/349 +f 336/96/336 335/95/335 350/110/350 351/111/351 +f 334/98/338 333/97/337 348/112/352 349/113/353 +f 345/100/340 344/99/339 359/114/354 360/115/355 +f 332/102/342 331/101/341 346/116/356 347/117/357 +f 343/104/344 342/103/343 357/118/358 358/119/359 +f 341/105/345 340/92/332 355/107/347 356/120/360 +f 339/91/331 338/94/334 353/109/349 354/106/346 +f 337/93/333 336/96/336 351/111/351 352/108/348 +f 335/95/335 334/98/338 349/113/353 350/110/350 +f 333/97/337 332/102/342 347/117/357 348/112/352 +f 344/99/339 343/104/344 358/119/359 359/114/354 +f 342/103/343 341/105/345 356/120/360 357/118/358 +f 355/121/347 354/122/346 369/123/361 370/124/362 +f 353/125/349 352/126/348 367/127/363 368/128/364 +f 351/129/351 350/130/350 365/131/365 366/132/366 +f 349/133/353 348/134/352 363/135/367 364/136/368 +f 360/137/355 359/138/354 374/139/369 375/140/370 +f 347/141/357 346/142/356 361/143/371 362/144/372 +f 358/145/359 357/146/358 372/147/373 373/148/374 +f 356/149/360 355/121/347 370/124/362 371/150/375 +f 354/122/346 353/125/349 368/128/364 369/123/361 +f 352/126/348 351/129/351 366/132/366 367/127/363 +f 350/130/350 349/133/353 364/136/368 365/131/365 +f 348/134/352 347/141/357 362/144/372 363/135/367 +f 359/138/354 358/145/359 373/148/374 374/139/369 +f 357/146/358 356/149/360 371/150/375 372/147/373 +f 370/124/362 369/123/361 384/151/376 385/152/377 +f 368/128/364 367/127/363 382/153/378 383/154/379 +f 366/132/366 365/131/365 380/155/380 381/156/381 +f 364/136/368 363/135/367 378/157/382 379/158/383 +f 375/140/370 374/139/369 389/159/384 390/160/385 +f 362/144/372 361/143/371 376/161/386 377/162/387 +f 373/148/374 372/147/373 387/163/388 388/164/389 +f 371/150/375 370/124/362 385/152/377 386/165/390 +f 369/123/361 368/128/364 383/154/379 384/151/376 +f 367/127/363 366/132/366 381/156/381 382/153/378 +f 365/131/365 364/136/368 379/158/383 380/155/380 +f 363/135/367 362/144/372 377/162/387 378/157/382 +f 374/139/369 373/148/374 388/164/389 389/159/384 +f 372/147/373 371/150/375 386/165/390 387/163/388 +f 385/152/377 384/151/376 399/166/391 400/167/392 +f 383/154/379 382/153/378 397/168/393 398/169/394 +f 381/156/381 380/155/380 395/170/395 396/171/396 +f 379/158/383 378/157/382 393/172/397 394/173/398 +f 390/160/385 389/159/384 404/174/399 405/175/400 +f 377/162/387 376/161/386 391/176/401 392/177/402 +f 388/164/389 387/163/388 402/178/403 403/179/404 +f 386/165/390 385/152/377 400/167/392 401/180/405 +f 384/151/376 383/154/379 398/169/394 399/166/391 +f 382/153/378 381/156/381 396/171/396 397/168/393 +f 380/155/380 379/158/383 394/173/398 395/170/395 +f 378/157/382 377/162/387 392/177/402 393/172/397 +f 389/159/384 388/164/389 403/179/404 404/174/399 +f 387/163/388 386/165/390 401/180/405 402/178/403 +f 400/167/392 399/166/391 414/181/406 415/182/407 +f 398/169/394 397/168/393 412/183/408 413/184/409 +f 396/171/396 395/170/395 410/185/410 411/186/411 +f 394/173/398 393/172/397 408/187/412 409/188/413 +f 405/175/400 404/174/399 419/189/414 420/190/415 +f 392/177/402 391/176/401 406/191/416 407/192/417 +f 403/179/404 402/178/403 417/193/418 418/194/419 +f 401/180/405 400/167/392 415/182/407 416/195/420 +f 399/166/391 398/169/394 413/184/409 414/181/406 +f 397/168/393 396/171/396 411/186/411 412/183/408 +f 395/170/395 394/173/398 409/188/413 410/185/410 +f 393/172/397 392/177/402 407/192/417 408/187/412 +f 404/174/399 403/179/404 418/194/419 419/189/414 +f 402/178/403 401/180/405 416/195/420 417/193/418 +f 415/182/407 414/181/406 429/196/421 430/197/422 +f 413/184/409 412/183/408 427/198/423 428/199/424 +f 411/186/411 410/185/410 425/200/425 426/201/426 +f 409/188/413 408/187/412 423/202/427 424/203/428 +f 420/190/415 419/189/414 434/204/429 435/205/430 +f 407/192/417 406/191/416 421/206/431 422/207/432 +f 418/194/419 417/193/418 432/208/433 433/209/434 +f 416/195/420 415/182/407 430/197/422 431/210/435 +f 414/181/406 413/184/409 428/199/424 429/196/421 +f 412/183/408 411/186/411 426/201/426 427/198/423 +f 410/185/410 409/188/413 424/203/428 425/200/425 +f 408/187/412 407/192/417 422/207/432 423/202/427 +f 419/189/414 418/194/419 433/209/434 434/204/429 +f 417/193/418 416/195/420 431/210/435 432/208/433 +f 430/197/422 429/196/421 444/211/436 445/212/437 +f 428/199/424 427/198/423 442/213/438 443/214/439 +f 426/201/426 425/200/425 440/215/440 441/216/441 +f 424/203/428 423/202/427 438/217/442 439/218/443 +f 435/205/430 434/204/429 449/219/444 450/220/445 +f 422/207/432 421/206/431 436/221/446 437/222/447 +f 433/209/434 432/208/433 447/223/448 448/224/449 +f 431/210/435 430/197/422 445/212/437 446/225/450 +f 429/196/421 428/199/424 443/214/439 444/211/436 +f 427/198/423 426/201/426 441/216/441 442/213/438 +f 425/200/425 424/203/428 439/218/443 440/215/440 +f 423/202/427 422/207/432 437/222/447 438/217/442 +f 434/204/429 433/209/434 448/224/449 449/219/444 +f 432/208/433 431/210/435 446/225/450 447/223/448 +f 445/212/437 444/211/436 459/226/451 460/227/452 +f 443/214/439 442/213/438 457/228/453 458/229/454 +f 441/216/441 440/215/440 455/230/455 456/231/456 +f 439/218/443 438/217/442 453/232/457 454/233/458 +f 450/220/445 449/219/444 464/234/459 465/235/460 +f 437/222/447 436/221/446 451/236/461 452/237/462 +f 448/224/449 447/223/448 462/238/463 463/239/464 +f 446/225/450 445/212/437 460/227/452 461/240/465 +f 444/211/436 443/214/439 458/229/454 459/226/451 +f 442/213/438 441/216/441 456/231/456 457/228/453 +f 440/215/440 439/218/443 454/233/458 455/230/455 +f 438/217/442 437/222/447 452/237/462 453/232/457 +f 449/219/444 448/224/449 463/239/464 464/234/459 +f 447/223/448 446/225/450 461/240/465 462/238/463 +f 460/227/452 459/226/451 474/241/466 475/242/467 +f 458/229/454 457/228/453 472/243/468 473/244/469 +f 456/231/456 455/230/455 470/245/470 471/246/471 +f 454/233/458 453/232/457 468/247/472 469/248/473 +f 465/235/460 464/234/459 479/249/474 480/250/475 +f 452/237/462 451/236/461 466/251/476 467/252/477 +f 463/239/464 462/238/463 477/253/478 478/254/479 +f 461/240/465 460/227/452 475/242/467 476/255/480 +f 459/226/451 458/229/454 473/244/469 474/241/466 +f 457/228/453 456/231/456 471/246/471 472/243/468 +f 455/230/455 454/233/458 469/248/473 470/245/470 +f 453/232/457 452/237/462 467/252/477 468/247/472 +f 464/234/459 463/239/464 478/254/479 479/249/474 +f 462/238/463 461/240/465 476/255/480 477/253/478 +f 481/256/481 15/5/5 30/8/8 485/257/482 +f 485/257/482 30/8/8 45/40/40 487/258/483 +f 487/258/483 45/40/40 60/55/55 489/259/484 +f 489/259/484 60/55/55 75/70/70 491/260/485 +f 491/260/485 75/70/70 90/85/85 493/261/486 +f 493/261/486 90/85/85 105/100/100 495/262/487 +f 495/262/487 105/100/100 120/115/115 497/263/488 +f 497/264/488 120/137/115 135/140/130 499/265/489 +f 499/265/489 135/140/130 150/160/145 501/266/490 +f 501/266/490 150/160/145 165/175/160 503/267/491 +f 503/267/491 165/175/160 180/190/175 505/268/492 +f 505/268/492 180/190/175 195/205/190 507/269/493 +f 507/269/493 195/205/190 210/220/205 509/270/494 +f 509/270/494 210/220/205 225/235/220 511/271/495 +f 511/271/495 225/235/220 240/250/235 513/272/496 +f 513/272/496 240/250/235 255/5/250 515/256/497 +f 515/256/497 255/5/250 270/8/265 517/257/498 +f 517/257/498 270/8/265 285/40/280 519/258/499 +f 519/258/499 285/40/280 300/55/295 521/259/500 +f 521/259/500 300/55/295 315/70/310 523/260/501 +f 523/260/501 315/70/310 330/85/325 525/261/502 +f 525/261/502 330/85/325 345/100/340 527/262/503 +f 527/262/503 345/100/340 360/115/355 529/263/504 +f 529/264/504 360/137/355 375/140/370 531/265/505 +f 531/265/505 375/140/370 390/160/385 533/266/506 +f 533/266/506 390/160/385 405/175/400 534/267/507 +f 534/267/507 405/175/400 420/190/415 536/268/508 +f 536/268/508 420/190/415 435/205/430 538/269/509 +f 538/269/509 435/205/430 450/220/445 540/270/510 +f 540/270/510 450/220/445 465/235/460 542/271/511 +f 542/271/511 465/235/460 480/250/475 544/272/512 +f 475/242/467 474/241/466 9/21/21 10/18/18 +f 473/244/469 472/243/468 7/25/25 8/22/22 +f 471/246/471 470/245/470 5/29/29 6/26/26 +f 469/248/473 468/247/472 3/2/2 4/1/1 +f 480/250/475 479/249/474 14/6/6 15/5/5 +f 467/252/477 466/251/476 1/10/10 2/9/9 +f 478/254/479 477/253/478 12/14/14 13/13/13 +f 476/255/480 475/242/467 10/18/18 11/17/17 +f 474/241/466 473/244/469 8/22/22 9/21/21 +f 472/243/468 471/246/471 6/26/26 7/25/25 +f 470/245/470 469/248/473 4/1/1 5/29/29 +f 544/272/512 480/250/475 15/5/5 481/256/481 +f 468/247/472 467/252/477 2/9/9 3/2/2 +f 479/249/474 478/254/479 13/13/13 14/6/6 +f 477/253/478 476/255/480 11/17/17 12/14/14 +f 466/251/476 543/273/513 483/274/514 1/10/10 +f 451/236/461 541/275/515 543/273/513 466/251/476 +f 436/221/446 539/276/516 541/275/515 451/236/461 +f 421/206/431 537/277/517 539/276/516 436/221/446 +f 406/191/416 535/278/518 537/277/517 421/206/431 +f 391/176/401 482/279/519 535/278/518 406/191/416 +f 376/161/386 532/280/520 482/279/519 391/176/401 +f 361/143/371 530/281/521 532/280/520 376/161/386 +f 346/142/356 528/282/522 530/281/521 361/143/371 +f 331/101/341 526/283/523 528/284/522 346/116/356 +f 316/86/326 524/285/524 526/283/523 331/101/341 +f 301/71/311 522/286/525 524/285/524 316/86/326 +f 286/56/296 520/287/526 522/286/525 301/71/311 +f 271/41/281 518/288/527 520/287/526 286/56/296 +f 256/11/266 516/289/528 518/288/527 271/41/281 +f 241/10/251 514/274/529 516/289/528 256/11/266 +f 226/251/236 512/273/530 514/274/529 241/10/251 +f 211/236/221 510/275/531 512/273/530 226/251/236 +f 196/221/206 508/276/532 510/275/531 211/236/221 +f 181/206/191 506/277/533 508/276/532 196/221/206 +f 166/191/176 504/278/534 506/277/533 181/206/191 +f 151/176/161 502/279/535 504/278/534 166/191/176 +f 136/161/146 500/280/536 502/279/535 151/176/161 +f 121/143/131 498/281/537 500/280/536 136/161/146 +f 106/142/116 496/282/538 498/281/537 121/143/131 +f 91/101/101 494/283/539 496/284/538 106/116/116 +f 76/86/86 492/285/540 494/283/539 91/101/101 +f 61/71/71 490/286/541 492/285/540 76/86/86 +f 46/56/56 488/287/542 490/286/541 61/71/71 +f 31/41/41 486/288/543 488/287/542 46/56/56 +f 16/11/11 484/289/544 486/288/543 31/41/41 +f 1/10/10 483/274/514 484/289/544 16/11/11 +f 543/290/513 541/291/515 539/292/516 537/293/517 535/294/518 482/295/519 532/296/520 530/297/521 528/298/522 526/299/523 524/300/524 522/301/525 520/302/526 518/303/527 516/304/528 514/305/529 512/306/530 510/307/531 508/308/532 506/309/533 504/310/534 502/311/535 500/312/536 498/313/537 496/314/538 494/315/539 492/316/540 490/317/541 488/318/542 486/319/543 484/320/544 483/321/514 +f 544/290/512 481/291/481 485/292/482 487/293/483 489/294/484 491/295/485 493/296/486 495/297/487 497/298/488 499/299/489 501/300/490 503/301/491 505/302/492 507/303/493 509/304/494 511/305/495 513/306/496 515/307/497 517/308/498 519/309/499 521/310/500 523/311/501 525/312/502 527/313/503 529/314/504 531/315/505 533/316/506 534/317/507 536/318/508 538/319/509 540/320/510 542/321/511 diff --git a/mods/technic-master/technic/models/technic_two_curved_edge.obj b/mods/technic-master/technic/models/technic_two_curved_edge.obj new file mode 100644 index 0000000..a468ddf --- /dev/null +++ b/mods/technic-master/technic/models/technic_two_curved_edge.obj @@ -0,0 +1,207 @@ +# Blender v2.73 (sub 0) OBJ File: 'slope_test_quarter_round_corner_onetexture.blend' +# www.blender.org +o corner1_Cylinder +v 0.415732 0.277783 0.499997 +v 0.461936 0.191340 0.499997 +v 0.415735 0.277783 -0.415732 +v 0.461940 0.191340 -0.461937 +v 0.490389 0.097544 0.499997 +v 0.353551 0.353551 0.499997 +v 0.353555 0.353551 -0.353551 +v 0.499996 -0.000000 0.499997 +v 0.277783 0.415732 0.499997 +v 0.490393 0.097544 -0.490389 +v 0.277787 0.415732 -0.277784 +v 0.191340 0.461936 0.499997 +v 0.191344 0.461937 -0.191341 +v 0.097544 0.490389 0.499997 +v 0.097547 0.490391 -0.097545 +v -0.000000 0.499996 0.499997 +v -0.499997 0.499997 0.499997 +v -0.499997 0.499997 -0.000030 +v -0.499997 0.415735 -0.277785 +v -0.499997 0.461940 -0.191342 +v -0.499997 0.490393 -0.097545 +v -0.500000 -0.500000 -0.500000 +v -0.499997 -0.499997 0.499997 +v 0.000000 0.499998 0.000000 +v -0.499998 0.000014 -0.499999 +v -0.499997 0.353553 -0.353554 +v -0.499998 0.097545 -0.490393 +v -0.499997 0.277785 -0.415735 +v -0.499998 0.191342 -0.461940 +v 0.499997 -0.000000 -0.499996 +v 0.500000 -0.500000 -0.500000 +v 0.499997 -0.499997 0.499997 +v -0.499997 -0.499997 0.499997 +v -0.499997 0.499997 0.499997 +v -0.499997 0.499997 -0.000030 +v -0.499997 0.415735 -0.277785 +v -0.499997 0.461940 -0.191342 +v -0.499997 0.490393 -0.097545 +v -0.500000 -0.500000 -0.500000 +v -0.499998 0.000014 -0.499999 +v -0.499997 0.353553 -0.353554 +v -0.499998 0.097545 -0.490393 +v -0.499997 0.277785 -0.415735 +v -0.499998 0.191342 -0.461940 +v -0.499998 -0.033351 0.033348 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v 0.499997 -0.499997 0.499997 +v 0.415732 0.277783 0.499997 +v 0.461936 0.191340 0.499997 +v 0.490389 0.097544 0.499997 +v 0.353551 0.353551 0.499997 +v 0.499996 -0.000000 0.499997 +v 0.277783 0.415732 0.499997 +v 0.191340 0.461936 0.499997 +v -0.499997 -0.499997 0.499997 +v 0.097544 0.490389 0.499997 +v -0.000000 0.499996 0.499997 +v -0.499997 0.499997 0.499997 +v -0.033351 -0.033351 0.499997 +v 0.499997 -0.499997 0.499997 +vt 1.000000 0.500100 +vt 0.990395 0.597625 +vt 0.466756 0.466756 +vt 1.000000 0.000200 +vt 0.000201 0.000201 +vt 0.597626 0.990394 +vt 0.500101 1.000000 +vt 0.691404 0.961947 +vt 0.777830 0.915751 +vt 0.853583 0.853583 +vt 0.915752 0.777829 +vt 0.000201 1.000000 +vt 0.961948 0.691403 +vt -0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt -0.000000 1.000000 +vt 0.533443 0.466757 +vt 0.000202 0.500115 +vt 0.402575 0.990397 +vt 0.308797 0.961949 +vt 0.222371 0.915753 +vt 0.146617 0.853584 +vt 0.084449 0.777831 +vt 0.038253 0.691405 +vt 0.009806 0.597626 +vt 0.999996 0.125448 +vt 0.222353 0.125462 +vt 0.146597 0.000612 +vt 0.999995 0.000594 +vt 0.000178 0.874582 +vt 0.915751 0.874577 +vt 0.853580 0.999436 +vt 0.000178 0.999439 +vt 0.999808 0.625427 +vt 0.009599 0.625446 +vt -0.000005 0.500594 +vt 0.999807 0.500594 +vt 0.597441 0.374574 +vt 0.499912 0.499435 +vt 0.000000 0.499434 +vt 0.000000 0.374576 +vt 0.999999 0.375154 +vt 1.000000 0.499969 +vt 0.500093 0.500015 +vt 0.402562 0.375164 +vt 0.999812 0.999983 +vt 0.146415 1.000000 +vt 0.084244 0.875149 +vt 0.999811 0.875131 +vt 0.990396 0.624861 +vt 0.961947 0.749719 +vt 0.000178 0.749724 +vt 0.000178 0.624866 +vt 0.777649 0.124857 +vt 0.691221 0.249715 +vt 0.000001 0.249719 +vt 0.000001 0.124861 +vt 0.308782 0.250314 +vt 0.999998 0.250301 +vt 0.853403 -0.000000 +vt 0.038047 0.750298 +vt 0.999809 0.750280 +vt 0.000177 0.500008 +vt 0.000000 0.500000 +vt 0.500000 1.000000 +vt 0.500000 0.500000 +vn 0.000000 -0.000000 1.000000 +vn -0.000000 -1.000000 0.000000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.831500 -0.555600 +vn 0.325800 0.887500 -0.325800 +vn 0.429700 0.794100 -0.429700 +vn 0.000000 0.707100 -0.707100 +vn 0.831500 0.555600 0.000000 +vn 0.531000 0.660300 -0.531000 +vn 0.707100 0.707100 0.000000 +vn 0.000000 0.195100 -0.980800 +vn 0.683900 0.254100 -0.683900 +vn 0.705500 0.067100 -0.705500 +vn 0.000000 0.049100 -0.998800 +vn 0.123100 0.984700 -0.123100 +vn 0.036800 0.998600 -0.036800 +vn 0.049100 0.998800 0.000000 +vn 0.195100 0.980800 0.000000 +vn 0.000000 0.980800 -0.195100 +vn 0.000000 0.998800 -0.049100 +vn 0.000000 0.555600 -0.831500 +vn 0.620400 0.479600 -0.620400 +vn 0.923900 0.382700 0.000000 +vn 0.980800 0.195100 0.000000 +vn 0.223300 0.948800 -0.223200 +vn 0.382700 0.923900 0.000000 +vn 0.555600 0.831500 0.000000 +vn 0.000000 0.923900 -0.382700 +vn 0.000000 0.382700 -0.923900 +vn 0.998800 0.049100 0.000000 +vn 0.707100 0.000000 -0.707100 +vn 0.000000 0.000000 -1.000000 +vn -0.000000 1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +s off +f 53/1/1 51/2/1 60/3/1 +f 61/4/1 53/1/1 60/3/1 56/5/1 +f 57/6/1 58/7/1 60/3/1 +f 55/8/1 57/6/1 60/3/1 +f 54/9/1 55/8/1 60/3/1 +f 52/10/1 54/9/1 60/3/1 +f 49/11/1 52/10/1 60/3/1 +f 59/12/1 56/5/1 60/3/1 58/7/1 +f 50/13/1 49/11/1 60/3/1 +f 48/14/2 23/15/2 46/16/2 47/17/2 +f 39/5/3 33/4/3 45/18/3 40/19/3 +f 35/7/3 38/20/3 45/18/3 +f 38/20/3 37/21/3 45/18/3 +f 37/21/3 36/22/3 45/18/3 +f 36/22/3 41/23/3 45/18/3 +f 41/23/3 43/24/3 45/18/3 +f 43/24/3 44/25/3 45/18/3 +f 44/25/3 42/26/3 45/18/3 +f 42/26/3 40/19/3 45/18/3 +f 34/16/3 35/7/3 45/18/3 33/4/3 +f 51/2/1 50/13/1 60/3/1 +s 1 +f 19/27/4 11/28/5 7/29/6 26/30/7 +f 1/31/8 3/32/9 7/33/6 6/34/10 +f 27/35/11 10/36/12 30/37/13 25/38/14 +f 15/39/15 24/40/16 16/41/17 14/42/18 +f 21/43/19 18/44/20 24/45/16 15/46/15 +f 26/47/7 7/48/6 3/49/9 28/50/21 +f 10/51/12 4/52/22 2/53/23 5/54/24 +f 11/55/5 13/56/25 12/57/26 9/58/27 +f 21/43/19 15/46/15 13/59/25 20/60/28 +f 20/60/28 13/59/25 11/28/5 19/27/4 +f 9/58/27 6/14/10 7/61/6 11/55/5 +f 4/52/22 3/32/9 1/31/8 2/53/23 +f 3/49/9 4/62/22 29/63/29 28/50/21 +f 10/51/12 5/54/24 8/64/30 30/44/13 +f 29/63/29 4/62/22 10/36/12 27/35/11 +f 25/44/14 30/65/13 31/14/31 22/15/32 +f 16/66/17 24/67/16 18/44/20 17/16/33 +f 8/65/30 32/14/34 31/15/31 30/44/13 +f 12/57/26 13/56/25 15/39/15 14/42/18 diff --git a/mods/technic-master/technic/radiation.lua b/mods/technic-master/technic/radiation.lua new file mode 100644 index 0000000..a4c49c6 --- /dev/null +++ b/mods/technic-master/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, + ["default:tinblock"] = 37, + ["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:stone_with_tin"] = 19, + ["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:mithril_block"] = 26, + ["moreores:silver_block"] = 53, + ["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/technic-master/technic/register.lua b/mods/technic-master/technic/register.lua new file mode 100644 index 0000000..8f75b81 --- /dev/null +++ b/mods/technic-master/technic/register.lua @@ -0,0 +1,58 @@ +-- This file includes the functions and data structures for registering machines and tools for LV, MV, HV types. +-- We use the technic namespace for these functions and data to avoid eventual conflict. + +technic.receiver = "RE" +technic.producer = "PR" +technic.producer_receiver = "PR_RE" +technic.battery = "BA" + +technic.machines = {} +technic.power_tools = {} +technic.networks = {} + + +function technic.register_tier(tier, description) + technic.machines[tier] = {} +end + +function technic.register_machine(tier, nodename, machine_type) + if not technic.machines[tier] then + return + end + technic.machines[tier][nodename] = machine_type +end + +function technic.register_power_tool(craftitem, max_charge) + technic.power_tools[craftitem] = max_charge +end + + +-- Utility functions. Not sure exactly what they do.. water.lua uses the two first. +function technic.get_RE_item_load(load1, max_load) + if load1 == 0 then load1 = 65535 end + local temp = 65536 - load1 + temp = temp / 65535 * max_load + return math.floor(temp + 0.5) +end + +function technic.set_RE_item_load(load1, max_load) + if load1 == 0 then return 65535 end + local temp = load1 / max_load * 65535 + temp = 65536 - temp + return math.floor(temp) +end + +-- Wear down a tool depending on the remaining charge. +function technic.set_RE_wear(itemstack, item_load, max_load) + if (minetest.registered_items[itemstack:get_name()].wear_represents or "mechanical_wear") ~= "technic_RE_charge" then return itemstack end + local temp + if item_load == 0 then + temp = 0 + else + temp = 65536 - math.floor(item_load / max_load * 65535) + if temp > 65535 then temp = 65535 end + if temp < 1 then temp = 1 end + end + itemstack:set_wear(temp) + return itemstack +end diff --git a/mods/technic-master/technic/sounds/chainsaw.ogg b/mods/technic-master/technic/sounds/chainsaw.ogg new file mode 100644 index 0000000..5fe7552 Binary files /dev/null and b/mods/technic-master/technic/sounds/chainsaw.ogg differ diff --git a/mods/technic-master/technic/sounds/item_drop_pickup.1.ogg b/mods/technic-master/technic/sounds/item_drop_pickup.1.ogg new file mode 100644 index 0000000..2ae432d Binary files /dev/null and b/mods/technic-master/technic/sounds/item_drop_pickup.1.ogg differ diff --git a/mods/technic-master/technic/sounds/item_drop_pickup.2.ogg b/mods/technic-master/technic/sounds/item_drop_pickup.2.ogg new file mode 100644 index 0000000..f58bf08 Binary files /dev/null and b/mods/technic-master/technic/sounds/item_drop_pickup.2.ogg differ diff --git a/mods/technic-master/technic/sounds/item_drop_pickup.3.ogg b/mods/technic-master/technic/sounds/item_drop_pickup.3.ogg new file mode 100644 index 0000000..cf57c94 Binary files /dev/null and b/mods/technic-master/technic/sounds/item_drop_pickup.3.ogg differ diff --git a/mods/technic-master/technic/sounds/item_drop_pickup.4.ogg b/mods/technic-master/technic/sounds/item_drop_pickup.4.ogg new file mode 100644 index 0000000..bfe99d9 Binary files /dev/null and b/mods/technic-master/technic/sounds/item_drop_pickup.4.ogg differ diff --git a/mods/technic-master/technic/sounds/mining_drill.ogg b/mods/technic-master/technic/sounds/mining_drill.ogg new file mode 100644 index 0000000..1493544 Binary files /dev/null and b/mods/technic-master/technic/sounds/mining_drill.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg b/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg new file mode 100644 index 0000000..3332deb Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_clear.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg b/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg new file mode 100644 index 0000000..1f21a16 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_hv_nuclear_reactor_siren_danger_loop.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk1.0.ogg b/mods/technic-master/technic/sounds/technic_laser_mk1.0.ogg new file mode 100644 index 0000000..19be080 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk1.0.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk1.1.ogg b/mods/technic-master/technic/sounds/technic_laser_mk1.1.ogg new file mode 100644 index 0000000..7792be1 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk1.1.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk2.0.ogg b/mods/technic-master/technic/sounds/technic_laser_mk2.0.ogg new file mode 100644 index 0000000..2cf1548 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk2.0.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk2.1.ogg b/mods/technic-master/technic/sounds/technic_laser_mk2.1.ogg new file mode 100644 index 0000000..b3f9afb Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk2.1.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk2.2.ogg b/mods/technic-master/technic/sounds/technic_laser_mk2.2.ogg new file mode 100644 index 0000000..a4ee091 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk2.2.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk3.1.ogg b/mods/technic-master/technic/sounds/technic_laser_mk3.1.ogg new file mode 100644 index 0000000..f948913 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk3.1.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_laser_mk3.2.ogg b/mods/technic-master/technic/sounds/technic_laser_mk3.2.ogg new file mode 100644 index 0000000..636c306 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_laser_mk3.2.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_prospector_hit.ogg b/mods/technic-master/technic/sounds/technic_prospector_hit.ogg new file mode 100644 index 0000000..3a8ad2d Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_prospector_hit.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_prospector_miss.ogg b/mods/technic-master/technic/sounds/technic_prospector_miss.ogg new file mode 100644 index 0000000..0f050d0 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_prospector_miss.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_sonic_screwdriver.ogg b/mods/technic-master/technic/sounds/technic_sonic_screwdriver.ogg new file mode 100644 index 0000000..471bb72 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_sonic_screwdriver.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track1.ogg b/mods/technic-master/technic/sounds/technic_track1.ogg new file mode 100644 index 0000000..8b9f47f Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track1.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track2.ogg b/mods/technic-master/technic/sounds/technic_track2.ogg new file mode 100644 index 0000000..e5c52e3 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track2.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track3.ogg b/mods/technic-master/technic/sounds/technic_track3.ogg new file mode 100644 index 0000000..0d2eee2 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track3.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track4.ogg b/mods/technic-master/technic/sounds/technic_track4.ogg new file mode 100644 index 0000000..757837b Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track4.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track5.ogg b/mods/technic-master/technic/sounds/technic_track5.ogg new file mode 100644 index 0000000..478ea91 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track5.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track6.ogg b/mods/technic-master/technic/sounds/technic_track6.ogg new file mode 100644 index 0000000..fceec63 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track6.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track7.ogg b/mods/technic-master/technic/sounds/technic_track7.ogg new file mode 100644 index 0000000..b8bee33 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track7.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track8.ogg b/mods/technic-master/technic/sounds/technic_track8.ogg new file mode 100644 index 0000000..2ebbdd6 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track8.ogg differ diff --git a/mods/technic-master/technic/sounds/technic_track9.ogg b/mods/technic-master/technic/sounds/technic_track9.ogg new file mode 100644 index 0000000..245b1a1 Binary files /dev/null and b/mods/technic-master/technic/sounds/technic_track9.ogg differ diff --git a/mods/technic-master/technic/sounds/vacuumcleaner.ogg b/mods/technic-master/technic/sounds/vacuumcleaner.ogg new file mode 100644 index 0000000..39d72de Binary files /dev/null and b/mods/technic-master/technic/sounds/vacuumcleaner.ogg differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_128.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_128.png new file mode 100644 index 0000000..2848f89 Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_128.png differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_16.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_16.png new file mode 100644 index 0000000..4661177 Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_16.png differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_256.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_256.png new file mode 100644 index 0000000..5187fab Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_256.png differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_32.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_32.png new file mode 100644 index 0000000..3d380da Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_32.png differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_512.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_512.png new file mode 100644 index 0000000..ba2bd89 Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_512.png differ diff --git a/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_64.png b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_64.png new file mode 100644 index 0000000..2fa8f18 Binary files /dev/null and b/mods/technic-master/technic/textures/hires/technic_hv_nuclear_reactor_core_64.png differ diff --git a/mods/technic-master/technic/textures/power_meter.png b/mods/technic-master/technic/textures/power_meter.png new file mode 100644 index 0000000..9f96cac Binary files /dev/null and b/mods/technic-master/technic/textures/power_meter.png differ diff --git a/mods/technic-master/technic/textures/technic_acacia_grindings.png b/mods/technic-master/technic/textures/technic_acacia_grindings.png new file mode 100644 index 0000000..bcfefc9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_acacia_grindings.png differ diff --git a/mods/technic-master/technic/textures/technic_admin_anchor.png b/mods/technic-master/technic/textures/technic_admin_anchor.png new file mode 100644 index 0000000..7ce9b4c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_admin_anchor.png differ diff --git a/mods/technic-master/technic/textures/technic_akalin_dust.png b/mods/technic-master/technic/textures/technic_akalin_dust.png new file mode 100644 index 0000000..052b0ac Binary files /dev/null and b/mods/technic-master/technic/textures/technic_akalin_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_alatro_dust.png b/mods/technic-master/technic/textures/technic_alatro_dust.png new file mode 100644 index 0000000..172af25 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_alatro_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_arol_dust.png b/mods/technic-master/technic/textures/technic_arol_dust.png new file mode 100644 index 0000000..1a575ed Binary files /dev/null and b/mods/technic-master/technic/textures/technic_arol_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_battery.png b/mods/technic-master/technic/textures/technic_battery.png new file mode 100644 index 0000000..ee83b74 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_battery.png differ diff --git a/mods/technic-master/technic/textures/technic_battery_meter_fg.png b/mods/technic-master/technic/textures/technic_battery_meter_fg.png new file mode 100644 index 0000000..2f19bc7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_battery_meter_fg.png differ diff --git a/mods/technic-master/technic/textures/technic_battery_reload.png b/mods/technic-master/technic/textures/technic_battery_reload.png new file mode 100644 index 0000000..4ce48d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_battery_reload.png differ diff --git a/mods/technic-master/technic/textures/technic_bronze_dust.png b/mods/technic-master/technic/textures/technic_bronze_dust.png new file mode 100644 index 0000000..a613205 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_bronze_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_bucket_corium.png b/mods/technic-master/technic/textures/technic_bucket_corium.png new file mode 100644 index 0000000..82da7ca Binary files /dev/null and b/mods/technic-master/technic/textures/technic_bucket_corium.png differ diff --git a/mods/technic-master/technic/textures/technic_cable_connection_overlay.png b/mods/technic-master/technic/textures/technic_cable_connection_overlay.png new file mode 100644 index 0000000..e013c53 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cable_connection_overlay.png differ diff --git a/mods/technic-master/technic/textures/technic_carbon_cloth.png b/mods/technic-master/technic/textures/technic_carbon_cloth.png new file mode 100644 index 0000000..65a6dab Binary files /dev/null and b/mods/technic-master/technic/textures/technic_carbon_cloth.png differ diff --git a/mods/technic-master/technic/textures/technic_carbon_plate.png b/mods/technic-master/technic/textures/technic_carbon_plate.png new file mode 100644 index 0000000..5da83b8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_carbon_plate.png differ diff --git a/mods/technic-master/technic/textures/technic_carbon_steel_dust.png b/mods/technic-master/technic/textures/technic_carbon_steel_dust.png new file mode 100644 index 0000000..0fa8a17 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_carbon_steel_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_cast_iron_dust.png b/mods/technic-master/technic/textures/technic_cast_iron_dust.png new file mode 100644 index 0000000..b5690ac Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cast_iron_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_chainsaw.png b/mods/technic-master/technic/textures/technic_chainsaw.png new file mode 100644 index 0000000..1a69893 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_chainsaw.png differ diff --git a/mods/technic-master/technic/textures/technic_chernobylite_block.png b/mods/technic-master/technic/textures/technic_chernobylite_block.png new file mode 100644 index 0000000..a837c66 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_chernobylite_block.png differ diff --git a/mods/technic-master/technic/textures/technic_chernobylite_dust.png b/mods/technic-master/technic/textures/technic_chernobylite_dust.png new file mode 100644 index 0000000..6f36bf6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_chernobylite_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_chromium_dust.png b/mods/technic-master/technic/textures/technic_chromium_dust.png new file mode 100644 index 0000000..0e48069 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_chromium_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_bottom.png b/mods/technic-master/technic/textures/technic_cnc_bottom.png new file mode 100644 index 0000000..e600cb1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_cylinder.png b/mods/technic-master/technic/textures/technic_cnc_cylinder.png new file mode 100644 index 0000000..48921bd Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_cylinder.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_cylinder_horizontal.png b/mods/technic-master/technic/textures/technic_cnc_cylinder_horizontal.png new file mode 100644 index 0000000..82eb24c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_cylinder_horizontal.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_element_cross.png b/mods/technic-master/technic/textures/technic_cnc_element_cross.png new file mode 100644 index 0000000..cc66571 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_element_cross.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_element_edge.png b/mods/technic-master/technic/textures/technic_cnc_element_edge.png new file mode 100644 index 0000000..1245ea7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_element_edge.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_element_end.png b/mods/technic-master/technic/textures/technic_cnc_element_end.png new file mode 100644 index 0000000..562eb2b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_element_end.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_element_straight.png b/mods/technic-master/technic/textures/technic_cnc_element_straight.png new file mode 100644 index 0000000..d42966e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_element_straight.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_element_t.png b/mods/technic-master/technic/textures/technic_cnc_element_t.png new file mode 100644 index 0000000..a462764 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_element_t.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_front.png b/mods/technic-master/technic/textures/technic_cnc_front.png new file mode 100644 index 0000000..6cc0490 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_front.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_front_active.png b/mods/technic-master/technic/textures/technic_cnc_front_active.png new file mode 100644 index 0000000..f7a3c7f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_full.png b/mods/technic-master/technic/textures/technic_cnc_full.png new file mode 100644 index 0000000..60f8a81 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_full.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_half.png b/mods/technic-master/technic/textures/technic_cnc_half.png new file mode 100644 index 0000000..2c4d3a8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_half.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_milling_background.png b/mods/technic-master/technic/textures/technic_cnc_milling_background.png new file mode 100644 index 0000000..6a9c2f4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_milling_background.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_oblate_spheroid.png b/mods/technic-master/technic/textures/technic_cnc_oblate_spheroid.png new file mode 100644 index 0000000..b196e7d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_oblate_spheroid.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_onecurvededge.png b/mods/technic-master/technic/textures/technic_cnc_onecurvededge.png new file mode 100644 index 0000000..8325846 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_onecurvededge.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_pyramid.png b/mods/technic-master/technic/textures/technic_cnc_pyramid.png new file mode 100644 index 0000000..d8cc713 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_pyramid.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_side.png b/mods/technic-master/technic/textures/technic_cnc_side.png new file mode 100644 index 0000000..1ecbbac Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_side.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope.png b/mods/technic-master/technic/textures/technic_cnc_slope.png new file mode 100644 index 0000000..493d560 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_edge.png b/mods/technic-master/technic/textures/technic_cnc_slope_edge.png new file mode 100644 index 0000000..1b601c4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_edge.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_edge_upsdwn.png b/mods/technic-master/technic/textures/technic_cnc_slope_edge_upsdwn.png new file mode 100644 index 0000000..350c22d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_edge_upsdwn.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge.png b/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge.png new file mode 100644 index 0000000..3f5ab9e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png b/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png new file mode 100644 index 0000000..a1fee78 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_inner_edge_upsdwn.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_lying.png b/mods/technic-master/technic/textures/technic_cnc_slope_lying.png new file mode 100644 index 0000000..099ed59 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_lying.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_slope_upsdwn.png b/mods/technic-master/technic/textures/technic_cnc_slope_upsdwn.png new file mode 100644 index 0000000..2a34b8b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_slope_upsdwn.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_sphere.png b/mods/technic-master/technic/textures/technic_cnc_sphere.png new file mode 100644 index 0000000..791b32b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_sphere.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_spike.png b/mods/technic-master/technic/textures/technic_cnc_spike.png new file mode 100644 index 0000000..b445b40 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_spike.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_stick.png b/mods/technic-master/technic/textures/technic_cnc_stick.png new file mode 100644 index 0000000..acaf1cb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_stick.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_top.png b/mods/technic-master/technic/textures/technic_cnc_top.png new file mode 100644 index 0000000..5123334 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_top.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_top_active.png b/mods/technic-master/technic/textures/technic_cnc_top_active.png new file mode 100644 index 0000000..2bc9d81 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_top_active.png differ diff --git a/mods/technic-master/technic/textures/technic_cnc_twocurvededge.png b/mods/technic-master/technic/textures/technic_cnc_twocurvededge.png new file mode 100644 index 0000000..b50a257 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_cnc_twocurvededge.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_alloy_furnace_bottom.png b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_bottom.png new file mode 100644 index 0000000..077dec5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front.png b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front.png new file mode 100644 index 0000000..d9d93dd Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front_active.png new file mode 100644 index 0000000..ffc4e0a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_alloy_furnace_side.png b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_side.png new file mode 100644 index 0000000..d5c7066 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_alloy_furnace_top.png b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_top.png new file mode 100644 index 0000000..6424fc0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technic_coal_dust.png b/mods/technic-master/technic/textures/technic_coal_dust.png new file mode 100644 index 0000000..a1486c6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_coal_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_common_tree_grindings.png b/mods/technic-master/technic/textures/technic_common_tree_grindings.png new file mode 100644 index 0000000..e17bb69 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_common_tree_grindings.png differ diff --git a/mods/technic-master/technic/textures/technic_composite_plate.png b/mods/technic-master/technic/textures/technic_composite_plate.png new file mode 100644 index 0000000..79b7b8d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_composite_plate.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_back.png b/mods/technic-master/technic/textures/technic_constructor_back.png new file mode 100644 index 0000000..f002363 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_back.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_front_off.png b/mods/technic-master/technic/textures/technic_constructor_front_off.png new file mode 100644 index 0000000..f3f7856 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_front_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_front_on.png b/mods/technic-master/technic/textures/technic_constructor_front_on.png new file mode 100644 index 0000000..d733765 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_front_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_off.png b/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_off.png new file mode 100644 index 0000000..0c52557 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_on.png b/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_on.png new file mode 100644 index 0000000..0c46c57 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_side1_off.png b/mods/technic-master/technic/textures/technic_constructor_mk1_side1_off.png new file mode 100644 index 0000000..e64ddbe Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_side1_on.png b/mods/technic-master/technic/textures/technic_constructor_mk1_side1_on.png new file mode 100644 index 0000000..eda98d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_side2_off.png b/mods/technic-master/technic/textures/technic_constructor_mk1_side2_off.png new file mode 100644 index 0000000..b33fcfb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_side2_on.png b/mods/technic-master/technic/textures/technic_constructor_mk1_side2_on.png new file mode 100644 index 0000000..17e4786 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_top_off.png b/mods/technic-master/technic/textures/technic_constructor_mk1_top_off.png new file mode 100644 index 0000000..9f3846c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_top_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk1_top_on.png b/mods/technic-master/technic/textures/technic_constructor_mk1_top_on.png new file mode 100644 index 0000000..5c8d6fb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk1_top_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_off.png b/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_off.png new file mode 100644 index 0000000..e926dda Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_on.png b/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_on.png new file mode 100644 index 0000000..52d739b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_side1_off.png b/mods/technic-master/technic/textures/technic_constructor_mk2_side1_off.png new file mode 100644 index 0000000..2fd42a2 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_side1_on.png b/mods/technic-master/technic/textures/technic_constructor_mk2_side1_on.png new file mode 100644 index 0000000..4c75c83 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_side2_off.png b/mods/technic-master/technic/textures/technic_constructor_mk2_side2_off.png new file mode 100644 index 0000000..f6407e7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_side2_on.png b/mods/technic-master/technic/textures/technic_constructor_mk2_side2_on.png new file mode 100644 index 0000000..e40db48 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_top_off.png b/mods/technic-master/technic/textures/technic_constructor_mk2_top_off.png new file mode 100644 index 0000000..e5227d1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_top_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk2_top_on.png b/mods/technic-master/technic/textures/technic_constructor_mk2_top_on.png new file mode 100644 index 0000000..9762bd6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk2_top_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_off.png b/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_off.png new file mode 100644 index 0000000..606d97e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_on.png b/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_on.png new file mode 100644 index 0000000..878e4ff Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_side1_off.png b/mods/technic-master/technic/textures/technic_constructor_mk3_side1_off.png new file mode 100644 index 0000000..84dd7eb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_side1_on.png b/mods/technic-master/technic/textures/technic_constructor_mk3_side1_on.png new file mode 100644 index 0000000..2741d2d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_side2_off.png b/mods/technic-master/technic/textures/technic_constructor_mk3_side2_off.png new file mode 100644 index 0000000..75a5031 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_side2_on.png b/mods/technic-master/technic/textures/technic_constructor_mk3_side2_on.png new file mode 100644 index 0000000..0a150ed Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_top_off.png b/mods/technic-master/technic/textures/technic_constructor_mk3_top_off.png new file mode 100644 index 0000000..c716752 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_top_off.png differ diff --git a/mods/technic-master/technic/textures/technic_constructor_mk3_top_on.png b/mods/technic-master/technic/textures/technic_constructor_mk3_top_on.png new file mode 100644 index 0000000..acbe85b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_constructor_mk3_top_on.png differ diff --git a/mods/technic-master/technic/textures/technic_control_logic_unit.png b/mods/technic-master/technic/textures/technic_control_logic_unit.png new file mode 100644 index 0000000..c7b4b16 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_control_logic_unit.png differ diff --git a/mods/technic-master/technic/textures/technic_copper_coil.png b/mods/technic-master/technic/textures/technic_copper_coil.png new file mode 100644 index 0000000..db6db1a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_copper_coil.png differ diff --git a/mods/technic-master/technic/textures/technic_copper_dust.png b/mods/technic-master/technic/textures/technic_copper_dust.png new file mode 100644 index 0000000..cad33ea Binary files /dev/null and b/mods/technic-master/technic/textures/technic_copper_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_copper_plate.png b/mods/technic-master/technic/textures/technic_copper_plate.png new file mode 100644 index 0000000..99a49c8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_copper_plate.png differ diff --git a/mods/technic-master/technic/textures/technic_corium_flowing_animated.png b/mods/technic-master/technic/textures/technic_corium_flowing_animated.png new file mode 100644 index 0000000..1d29f16 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_corium_flowing_animated.png differ diff --git a/mods/technic-master/technic/textures/technic_corium_source_animated.png b/mods/technic-master/technic/textures/technic_corium_source_animated.png new file mode 100644 index 0000000..6c3ee56 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_corium_source_animated.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_back.png b/mods/technic-master/technic/textures/technic_deployer_back.png new file mode 100644 index 0000000..12e5a31 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_back.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_bottom.png b/mods/technic-master/technic/textures/technic_deployer_bottom.png new file mode 100644 index 0000000..febbe18 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_front_off.png b/mods/technic-master/technic/textures/technic_deployer_front_off.png new file mode 100644 index 0000000..9593112 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_front_off.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_front_on.png b/mods/technic-master/technic/textures/technic_deployer_front_on.png new file mode 100644 index 0000000..f78de4c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_front_on.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_side.png b/mods/technic-master/technic/textures/technic_deployer_side.png new file mode 100644 index 0000000..73af8f8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_side.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_side1.png b/mods/technic-master/technic/textures/technic_deployer_side1.png new file mode 100644 index 0000000..8ef28d3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_side1.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_side2.png b/mods/technic-master/technic/textures/technic_deployer_side2.png new file mode 100644 index 0000000..ccb2cb9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_side2.png differ diff --git a/mods/technic-master/technic/textures/technic_deployer_top.png b/mods/technic-master/technic/textures/technic_deployer_top.png new file mode 100644 index 0000000..262c9f6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_deployer_top.png differ diff --git a/mods/technic-master/technic/textures/technic_diamond_block_blue.png b/mods/technic-master/technic/textures/technic_diamond_block_blue.png new file mode 100644 index 0000000..9f59fba Binary files /dev/null and b/mods/technic-master/technic/textures/technic_diamond_block_blue.png differ diff --git a/mods/technic-master/technic/textures/technic_diamond_block_green.png b/mods/technic-master/technic/textures/technic_diamond_block_green.png new file mode 100644 index 0000000..585c4b8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_diamond_block_green.png differ diff --git a/mods/technic-master/technic/textures/technic_diamond_block_red.png b/mods/technic-master/technic/textures/technic_diamond_block_red.png new file mode 100644 index 0000000..ed30957 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_diamond_block_red.png differ diff --git a/mods/technic-master/technic/textures/technic_diamond_drill_head.png b/mods/technic-master/technic/textures/technic_diamond_drill_head.png new file mode 100644 index 0000000..e3d31e8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_diamond_drill_head.png differ diff --git a/mods/technic-master/technic/textures/technic_doped_silicon_wafer.png b/mods/technic-master/technic/textures/technic_doped_silicon_wafer.png new file mode 100644 index 0000000..6365137 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_doped_silicon_wafer.png differ diff --git a/mods/technic-master/technic/textures/technic_fine_copper_wire.png b/mods/technic-master/technic/textures/technic_fine_copper_wire.png new file mode 100644 index 0000000..3e663bb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_fine_copper_wire.png differ diff --git a/mods/technic-master/technic/textures/technic_fine_gold_wire.png b/mods/technic-master/technic/textures/technic_fine_gold_wire.png new file mode 100644 index 0000000..54a7a52 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_fine_gold_wire.png differ diff --git a/mods/technic-master/technic/textures/technic_fine_silver_wire.png b/mods/technic-master/technic/textures/technic_fine_silver_wire.png new file mode 100644 index 0000000..f40a52b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_fine_silver_wire.png differ diff --git a/mods/technic-master/technic/textures/technic_flashlight.png b/mods/technic-master/technic/textures/technic_flashlight.png new file mode 100644 index 0000000..8e7b75a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_flashlight.png differ diff --git a/mods/technic-master/technic/textures/technic_forcefield_animated.png b/mods/technic-master/technic/textures/technic_forcefield_animated.png new file mode 100644 index 0000000..7763840 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_forcefield_animated.png differ diff --git a/mods/technic-master/technic/textures/technic_forcefield_emitter_off.png b/mods/technic-master/technic/textures/technic_forcefield_emitter_off.png new file mode 100644 index 0000000..4c4582f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_forcefield_emitter_off.png differ diff --git a/mods/technic-master/technic/textures/technic_forcefield_emitter_on.png b/mods/technic-master/technic/textures/technic_forcefield_emitter_on.png new file mode 100644 index 0000000..1f32af6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_forcefield_emitter_on.png differ diff --git a/mods/technic-master/technic/textures/technic_frame.png b/mods/technic-master/technic/textures/technic_frame.png new file mode 100644 index 0000000..4998120 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_frame.png differ diff --git a/mods/technic-master/technic/textures/technic_geothermal_side.png b/mods/technic-master/technic/textures/technic_geothermal_side.png new file mode 100644 index 0000000..90fb430 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_geothermal_side.png differ diff --git a/mods/technic-master/technic/textures/technic_geothermal_top.png b/mods/technic-master/technic/textures/technic_geothermal_top.png new file mode 100644 index 0000000..601ff15 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_geothermal_top.png differ diff --git a/mods/technic-master/technic/textures/technic_geothermal_top_active.png b/mods/technic-master/technic/textures/technic_geothermal_top_active.png new file mode 100644 index 0000000..f02bec6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_geothermal_top_active.png differ diff --git a/mods/technic-master/technic/textures/technic_gold_dust.png b/mods/technic-master/technic/textures/technic_gold_dust.png new file mode 100644 index 0000000..48c24ae Binary files /dev/null and b/mods/technic-master/technic/textures/technic_gold_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_graphite.png b/mods/technic-master/technic/textures/technic_graphite.png new file mode 100644 index 0000000..00cd0ee Binary files /dev/null and b/mods/technic-master/technic/textures/technic_graphite.png differ diff --git a/mods/technic-master/technic/textures/technic_grinder_front.png b/mods/technic-master/technic/textures/technic_grinder_front.png new file mode 100644 index 0000000..a28dbc1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technic_grinder_side.png b/mods/technic-master/technic/textures/technic_grinder_side.png new file mode 100644 index 0000000..af562f2 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technic_grinder_top.png b/mods/technic-master/technic/textures/technic_grinder_top.png new file mode 100644 index 0000000..b074e13 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides.png new file mode 100644 index 0000000..9121999 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png new file mode 100644 index 0000000..c8006eb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_sides_ceiling.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_tb.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_tb.png new file mode 100644 index 0000000..b2e355a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_white_tb.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png new file mode 100644 index 0000000..b79be07 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png new file mode 100644 index 0000000..a9d397a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_sides_ceiling.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png new file mode 100644 index 0000000..daf03ab Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_cube_yellow_tb.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_sides.png new file mode 100644 index 0000000..44c2b36 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png new file mode 100644 index 0000000..937999e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_white_wall_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png new file mode 100644 index 0000000..769b054 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png new file mode 100644 index 0000000..57820f1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thick_yellow_wall_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_sides.png new file mode 100644 index 0000000..0a337a5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png new file mode 100644 index 0000000..0fd3b1e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_white_wall_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png new file mode 100644 index 0000000..55bb6c0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png new file mode 100644 index 0000000..4b28a27 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_thin_yellow_wall_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_white_tb.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_white_tb.png new file mode 100644 index 0000000..fdc8a4d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_white_tb.png differ diff --git a/mods/technic-master/technic/textures/technic_homedecor_glowlight_yellow_tb.png b/mods/technic-master/technic/textures/technic_homedecor_glowlight_yellow_tb.png new file mode 100644 index 0000000..ffd9c58 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_homedecor_glowlight_yellow_tb.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_battery_box_bottom.png b/mods/technic-master/technic/textures/technic_hv_battery_box_bottom.png new file mode 100644 index 0000000..940dcdb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_battery_box_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_battery_box_front.png b/mods/technic-master/technic/textures/technic_hv_battery_box_front.png new file mode 100644 index 0000000..6f23439 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_battery_box_front.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_battery_box_side.png b/mods/technic-master/technic/textures/technic_hv_battery_box_side.png new file mode 100644 index 0000000..3e99d8c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_battery_box_side.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_battery_box_top.png b/mods/technic-master/technic/textures/technic_hv_battery_box_top.png new file mode 100644 index 0000000..aa6fdb6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_battery_box_top.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_cable.png b/mods/technic-master/technic/textures/technic_hv_cable.png new file mode 100644 index 0000000..7cb368d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_cable.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_cable_wield.png b/mods/technic-master/technic/textures/technic_hv_cable_wield.png new file mode 100644 index 0000000..7b9ca58 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_cable_wield.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_down_converter_bottom.png b/mods/technic-master/technic/textures/technic_hv_down_converter_bottom.png new file mode 100644 index 0000000..996b2d4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_down_converter_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_down_converter_side.png b/mods/technic-master/technic/textures/technic_hv_down_converter_side.png new file mode 100644 index 0000000..ab904f1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_down_converter_side.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_down_converter_top.png b/mods/technic-master/technic/textures/technic_hv_down_converter_top.png new file mode 100644 index 0000000..996b2d4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_down_converter_top.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_generator_front.png b/mods/technic-master/technic/textures/technic_hv_generator_front.png new file mode 100644 index 0000000..6a14686 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_generator_front.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_generator_front_active.png b/mods/technic-master/technic/textures/technic_hv_generator_front_active.png new file mode 100644 index 0000000..d92c699 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_generator_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_generator_side.png b/mods/technic-master/technic/textures/technic_hv_generator_side.png new file mode 100644 index 0000000..3073e0f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_generator_side.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_generator_top.png b/mods/technic-master/technic/textures/technic_hv_generator_top.png new file mode 100644 index 0000000..646168c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_generator_top.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_bottom.png b/mods/technic-master/technic/textures/technic_hv_grinder_bottom.png new file mode 100644 index 0000000..fa2c135 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_front.png b/mods/technic-master/technic/textures/technic_hv_grinder_front.png new file mode 100644 index 0000000..a5bca0a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_front_active.png b/mods/technic-master/technic/textures/technic_hv_grinder_front_active.png new file mode 100644 index 0000000..4077630 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_side.png b/mods/technic-master/technic/textures/technic_hv_grinder_side.png new file mode 100644 index 0000000..c3063c4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_side_tube.png b/mods/technic-master/technic/textures/technic_hv_grinder_side_tube.png new file mode 100644 index 0000000..43bcca5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_grinder_top.png b/mods/technic-master/technic/textures/technic_hv_grinder_top.png new file mode 100644 index 0000000..e0df36b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_nuclear_reactor_core.png b/mods/technic-master/technic/textures/technic_hv_nuclear_reactor_core.png new file mode 100644 index 0000000..4661177 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_nuclear_reactor_core.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_solar_array_bottom.png b/mods/technic-master/technic/textures/technic_hv_solar_array_bottom.png new file mode 100644 index 0000000..596e79a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_solar_array_side.png b/mods/technic-master/technic/textures/technic_hv_solar_array_side.png new file mode 100644 index 0000000..a3aa8c7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_solar_array_top.png b/mods/technic-master/technic/textures/technic_hv_solar_array_top.png new file mode 100644 index 0000000..b7f0b43 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technic_hv_transformer.png b/mods/technic-master/technic/textures/technic_hv_transformer.png new file mode 100644 index 0000000..e1d4c98 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_hv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technic_injector_bottom.png b/mods/technic-master/technic/textures/technic_injector_bottom.png new file mode 100644 index 0000000..39916bd Binary files /dev/null and b/mods/technic-master/technic/textures/technic_injector_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_injector_side.png b/mods/technic-master/technic/textures/technic_injector_side.png new file mode 100644 index 0000000..a5419a1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_injector_side.png differ diff --git a/mods/technic-master/technic/textures/technic_injector_top.png b/mods/technic-master/technic/textures/technic_injector_top.png new file mode 100644 index 0000000..440649c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_injector_top.png differ diff --git a/mods/technic-master/technic/textures/technic_kalite_dust.png b/mods/technic-master/technic/textures/technic_kalite_dust.png new file mode 100644 index 0000000..3a9e10f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_kalite_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_laser_beam_mk1.png b/mods/technic-master/technic/textures/technic_laser_beam_mk1.png new file mode 100644 index 0000000..4cf9b3e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_laser_beam_mk1.png differ diff --git a/mods/technic-master/technic/textures/technic_laser_beam_mk2.png b/mods/technic-master/technic/textures/technic_laser_beam_mk2.png new file mode 100644 index 0000000..9e27a8c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_laser_beam_mk2.png differ diff --git a/mods/technic-master/technic/textures/technic_laser_beam_mk3.png b/mods/technic-master/technic/textures/technic_laser_beam_mk3.png new file mode 100644 index 0000000..5a17e83 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_laser_beam_mk3.png differ diff --git a/mods/technic-master/technic/textures/technic_lava_can.png b/mods/technic-master/technic/textures/technic_lava_can.png new file mode 100644 index 0000000..abe1a8c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lava_can.png differ diff --git a/mods/technic-master/technic/textures/technic_light.png b/mods/technic-master/technic/textures/technic_light.png new file mode 100644 index 0000000..334cb07 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_light.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_alloy_furnace_bottom.png b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_bottom.png new file mode 100644 index 0000000..2c0aaee Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front.png b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front.png new file mode 100644 index 0000000..2d65cda Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front_active.png new file mode 100644 index 0000000..1ced989 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_alloy_furnace_side.png b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_side.png new file mode 100644 index 0000000..778ad88 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_alloy_furnace_top.png b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_top.png new file mode 100644 index 0000000..706793b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_battery_box_bottom.png b/mods/technic-master/technic/textures/technic_lv_battery_box_bottom.png new file mode 100644 index 0000000..0894d5f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_battery_box_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_battery_box_side.png b/mods/technic-master/technic/textures/technic_lv_battery_box_side.png new file mode 100644 index 0000000..4d435ac Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_battery_box_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_battery_box_top.png b/mods/technic-master/technic/textures/technic_lv_battery_box_top.png new file mode 100644 index 0000000..6050ad0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_battery_box_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_cable.png b/mods/technic-master/technic/textures/technic_lv_cable.png new file mode 100644 index 0000000..0071bc9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_cable.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_cable_wield.png b/mods/technic-master/technic/textures/technic_lv_cable_wield.png new file mode 100644 index 0000000..bc7704d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_cable_wield.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_back.png b/mods/technic-master/technic/textures/technic_lv_compressor_back.png new file mode 100644 index 0000000..11286e3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_back.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_bottom.png b/mods/technic-master/technic/textures/technic_lv_compressor_bottom.png new file mode 100644 index 0000000..886f27e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_front.png b/mods/technic-master/technic/textures/technic_lv_compressor_front.png new file mode 100644 index 0000000..007d6de Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_front_active.png b/mods/technic-master/technic/textures/technic_lv_compressor_front_active.png new file mode 100644 index 0000000..b3d27c0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_side.png b/mods/technic-master/technic/textures/technic_lv_compressor_side.png new file mode 100644 index 0000000..87acda6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_compressor_top.png b/mods/technic-master/technic/textures/technic_lv_compressor_top.png new file mode 100644 index 0000000..786b859 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_compressor_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_electric_furnace_bottom.png b/mods/technic-master/technic/textures/technic_lv_electric_furnace_bottom.png new file mode 100644 index 0000000..15fa6de Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_electric_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_electric_furnace_front.png b/mods/technic-master/technic/textures/technic_lv_electric_furnace_front.png new file mode 100644 index 0000000..755aadf Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_electric_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_electric_furnace_front_active.png b/mods/technic-master/technic/textures/technic_lv_electric_furnace_front_active.png new file mode 100644 index 0000000..de7f1f9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_electric_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_electric_furnace_side.png b/mods/technic-master/technic/textures/technic_lv_electric_furnace_side.png new file mode 100644 index 0000000..80cf742 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_electric_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_electric_furnace_top.png b/mods/technic-master/technic/textures/technic_lv_electric_furnace_top.png new file mode 100644 index 0000000..fbadd9a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_electric_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_extractor_bottom.png b/mods/technic-master/technic/textures/technic_lv_extractor_bottom.png new file mode 100644 index 0000000..aecd719 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_extractor_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_extractor_front.png b/mods/technic-master/technic/textures/technic_lv_extractor_front.png new file mode 100644 index 0000000..1bd7e9a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_extractor_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_extractor_front_active.png b/mods/technic-master/technic/textures/technic_lv_extractor_front_active.png new file mode 100644 index 0000000..7f8b30a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_extractor_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_extractor_side.png b/mods/technic-master/technic/textures/technic_lv_extractor_side.png new file mode 100644 index 0000000..99d9486 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_extractor_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_extractor_top.png b/mods/technic-master/technic/textures/technic_lv_extractor_top.png new file mode 100644 index 0000000..e7d9ff9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_extractor_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_generator_front.png b/mods/technic-master/technic/textures/technic_lv_generator_front.png new file mode 100644 index 0000000..2d64844 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_generator_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_generator_front_active.png b/mods/technic-master/technic/textures/technic_lv_generator_front_active.png new file mode 100644 index 0000000..4e57ca0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_generator_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_generator_side.png b/mods/technic-master/technic/textures/technic_lv_generator_side.png new file mode 100644 index 0000000..5cbcbef Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_generator_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_generator_top.png b/mods/technic-master/technic/textures/technic_lv_generator_top.png new file mode 100644 index 0000000..e2f3db3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_generator_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_grinder_bottom.png b/mods/technic-master/technic/textures/technic_lv_grinder_bottom.png new file mode 100644 index 0000000..aecd719 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_grinder_front.png b/mods/technic-master/technic/textures/technic_lv_grinder_front.png new file mode 100644 index 0000000..1bd7e9a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_grinder_front_active.png b/mods/technic-master/technic/textures/technic_lv_grinder_front_active.png new file mode 100644 index 0000000..7f8b30a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_grinder_side.png b/mods/technic-master/technic/textures/technic_lv_grinder_side.png new file mode 100644 index 0000000..99d9486 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_grinder_top.png b/mods/technic-master/technic/textures/technic_lv_grinder_top.png new file mode 100644 index 0000000..e7d9ff9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_solar_array_bottom.png b/mods/technic-master/technic/textures/technic_lv_solar_array_bottom.png new file mode 100644 index 0000000..9e888e3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_solar_array_side.png b/mods/technic-master/technic/textures/technic_lv_solar_array_side.png new file mode 100644 index 0000000..b22447e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_solar_array_top.png b/mods/technic-master/technic/textures/technic_lv_solar_array_top.png new file mode 100644 index 0000000..cabd315 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technic_lv_transformer.png b/mods/technic-master/technic/textures/technic_lv_transformer.png new file mode 100644 index 0000000..613b196 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_lv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technic_machine_bottom.png b/mods/technic-master/technic/textures/technic_machine_bottom.png new file mode 100644 index 0000000..48a47b0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_machine_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_machine_casing.png b/mods/technic-master/technic/textures/technic_machine_casing.png new file mode 100644 index 0000000..d596733 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_machine_casing.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_drill.png b/mods/technic-master/technic/textures/technic_mining_drill.png new file mode 100644 index 0000000..171888d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_drill.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_drill_mk2.png b/mods/technic-master/technic/textures/technic_mining_drill_mk2.png new file mode 100644 index 0000000..30be719 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_drill_mk2.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_drill_mk3.png b/mods/technic-master/technic/textures/technic_mining_drill_mk3.png new file mode 100644 index 0000000..30de896 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_drill_mk3.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_laser_mk1.png b/mods/technic-master/technic/textures/technic_mining_laser_mk1.png new file mode 100644 index 0000000..29faeb4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_laser_mk1.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_laser_mk2.png b/mods/technic-master/technic/textures/technic_mining_laser_mk2.png new file mode 100644 index 0000000..2d67c0f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_laser_mk2.png differ diff --git a/mods/technic-master/technic/textures/technic_mining_laser_mk3.png b/mods/technic-master/technic/textures/technic_mining_laser_mk3.png new file mode 100644 index 0000000..db9ee26 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mining_laser_mk3.png differ diff --git a/mods/technic-master/technic/textures/technic_mithril_dust.png b/mods/technic-master/technic/textures/technic_mithril_dust.png new file mode 100644 index 0000000..adfbe6c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mithril_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_mixed_metal_ingot.png b/mods/technic-master/technic/textures/technic_mixed_metal_ingot.png new file mode 100644 index 0000000..8f6847b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mixed_metal_ingot.png differ diff --git a/mods/technic-master/technic/textures/technic_motor.png b/mods/technic-master/technic/textures/technic_motor.png new file mode 100644 index 0000000..77d4b91 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_motor.png differ diff --git a/mods/technic-master/technic/textures/technic_music_player_bottom.png b/mods/technic-master/technic/textures/technic_music_player_bottom.png new file mode 100644 index 0000000..bd8fd55 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_music_player_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_music_player_side.png b/mods/technic-master/technic/textures/technic_music_player_side.png new file mode 100644 index 0000000..6c34fea Binary files /dev/null and b/mods/technic-master/technic/textures/technic_music_player_side.png differ diff --git a/mods/technic-master/technic/textures/technic_music_player_top.png b/mods/technic-master/technic/textures/technic_music_player_top.png new file mode 100644 index 0000000..0d34563 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_music_player_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_bottom.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_bottom.png new file mode 100644 index 0000000..2c0aaee Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front.png new file mode 100644 index 0000000..a5dac82 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front_active.png new file mode 100644 index 0000000..f6e69a9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side.png new file mode 100644 index 0000000..0430479 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side_tube.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side_tube.png new file mode 100644 index 0000000..1800eed Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_alloy_furnace_top.png b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_top.png new file mode 100644 index 0000000..f44e3c0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_battery_box_bottom.png b/mods/technic-master/technic/textures/technic_mv_battery_box_bottom.png new file mode 100644 index 0000000..0894d5f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_battery_box_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_battery_box_front.png b/mods/technic-master/technic/textures/technic_mv_battery_box_front.png new file mode 100644 index 0000000..63ed41c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_battery_box_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_battery_box_side.png b/mods/technic-master/technic/textures/technic_mv_battery_box_side.png new file mode 100644 index 0000000..2528ff8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_battery_box_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_battery_box_top.png b/mods/technic-master/technic/textures/technic_mv_battery_box_top.png new file mode 100644 index 0000000..6050ad0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_battery_box_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_cable.png b/mods/technic-master/technic/textures/technic_mv_cable.png new file mode 100644 index 0000000..2819d2b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_cable.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_cable_wield.png b/mods/technic-master/technic/textures/technic_mv_cable_wield.png new file mode 100644 index 0000000..2d41e27 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_cable_wield.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_centrifuge_bottom.png b/mods/technic-master/technic/textures/technic_mv_centrifuge_bottom.png new file mode 100644 index 0000000..6dcd40f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_centrifuge_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_centrifuge_front.png b/mods/technic-master/technic/textures/technic_mv_centrifuge_front.png new file mode 100644 index 0000000..e278a33 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_centrifuge_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_centrifuge_front_active.png b/mods/technic-master/technic/textures/technic_mv_centrifuge_front_active.png new file mode 100644 index 0000000..4cef912 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_centrifuge_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_centrifuge_side.png b/mods/technic-master/technic/textures/technic_mv_centrifuge_side.png new file mode 100644 index 0000000..eeef44a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_centrifuge_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_centrifuge_top.png b/mods/technic-master/technic/textures/technic_mv_centrifuge_top.png new file mode 100644 index 0000000..813bbf8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_centrifuge_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_back.png b/mods/technic-master/technic/textures/technic_mv_compressor_back.png new file mode 100644 index 0000000..11286e3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_back.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_bottom.png b/mods/technic-master/technic/textures/technic_mv_compressor_bottom.png new file mode 100644 index 0000000..886f27e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_front.png b/mods/technic-master/technic/textures/technic_mv_compressor_front.png new file mode 100644 index 0000000..007d6de Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_front_active.png b/mods/technic-master/technic/textures/technic_mv_compressor_front_active.png new file mode 100644 index 0000000..b3d27c0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_side.png b/mods/technic-master/technic/textures/technic_mv_compressor_side.png new file mode 100644 index 0000000..87acda6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_compressor_top.png b/mods/technic-master/technic/textures/technic_mv_compressor_top.png new file mode 100644 index 0000000..786b859 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_compressor_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_down_converter_bottom.png b/mods/technic-master/technic/textures/technic_mv_down_converter_bottom.png new file mode 100644 index 0000000..a610660 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_down_converter_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_down_converter_side.png b/mods/technic-master/technic/textures/technic_mv_down_converter_side.png new file mode 100644 index 0000000..6492d5c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_down_converter_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_down_converter_top.png b/mods/technic-master/technic/textures/technic_mv_down_converter_top.png new file mode 100644 index 0000000..a610660 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_down_converter_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_bottom.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_bottom.png new file mode 100644 index 0000000..e2e445e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_front.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_front.png new file mode 100644 index 0000000..81c33cf Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_front_active.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_front_active.png new file mode 100644 index 0000000..2523f0e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_side.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_side.png new file mode 100644 index 0000000..cd22a73 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_side_tube.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_side_tube.png new file mode 100644 index 0000000..bfeba18 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_electric_furnace_top.png b/mods/technic-master/technic/textures/technic_mv_electric_furnace_top.png new file mode 100644 index 0000000..635b6b7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_electric_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_extractor_bottom.png b/mods/technic-master/technic/textures/technic_mv_extractor_bottom.png new file mode 100644 index 0000000..70f34ee Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_extractor_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_extractor_front.png b/mods/technic-master/technic/textures/technic_mv_extractor_front.png new file mode 100644 index 0000000..18648c2 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_extractor_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_extractor_front_active.png b/mods/technic-master/technic/textures/technic_mv_extractor_front_active.png new file mode 100644 index 0000000..ee86ade Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_extractor_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_extractor_side.png b/mods/technic-master/technic/textures/technic_mv_extractor_side.png new file mode 100644 index 0000000..cbe3673 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_extractor_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_extractor_top.png b/mods/technic-master/technic/textures/technic_mv_extractor_top.png new file mode 100644 index 0000000..2259d64 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_extractor_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_generator_front.png b/mods/technic-master/technic/textures/technic_mv_generator_front.png new file mode 100644 index 0000000..570e0c5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_generator_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_generator_front_active.png b/mods/technic-master/technic/textures/technic_mv_generator_front_active.png new file mode 100644 index 0000000..3006a17 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_generator_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_generator_side.png b/mods/technic-master/technic/textures/technic_mv_generator_side.png new file mode 100644 index 0000000..21c0d41 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_generator_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_generator_top.png b/mods/technic-master/technic/textures/technic_mv_generator_top.png new file mode 100644 index 0000000..7afa5a1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_generator_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_bottom.png b/mods/technic-master/technic/textures/technic_mv_grinder_bottom.png new file mode 100644 index 0000000..70f34ee Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_front.png b/mods/technic-master/technic/textures/technic_mv_grinder_front.png new file mode 100644 index 0000000..18648c2 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_front_active.png b/mods/technic-master/technic/textures/technic_mv_grinder_front_active.png new file mode 100644 index 0000000..ee86ade Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_side.png b/mods/technic-master/technic/textures/technic_mv_grinder_side.png new file mode 100644 index 0000000..cbe3673 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_side_tube.png b/mods/technic-master/technic/textures/technic_mv_grinder_side_tube.png new file mode 100644 index 0000000..196b7c1 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_grinder_top.png b/mods/technic-master/technic/textures/technic_mv_grinder_top.png new file mode 100644 index 0000000..2259d64 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_solar_array_bottom.png b/mods/technic-master/technic/textures/technic_mv_solar_array_bottom.png new file mode 100644 index 0000000..596e79a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_solar_array_side.png b/mods/technic-master/technic/textures/technic_mv_solar_array_side.png new file mode 100644 index 0000000..917b9ed Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_solar_array_top.png b/mods/technic-master/technic/textures/technic_mv_solar_array_top.png new file mode 100644 index 0000000..cdb7cf7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technic_mv_transformer.png b/mods/technic-master/technic/textures/technic_mv_transformer.png new file mode 100644 index 0000000..7c4688e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_mv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_back.png b/mods/technic-master/technic/textures/technic_nodebreaker_back.png new file mode 100644 index 0000000..0af7422 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_back.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_bottom.png b/mods/technic-master/technic/textures/technic_nodebreaker_bottom.png new file mode 100644 index 0000000..ff1a2c6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_bottom_off.png b/mods/technic-master/technic/textures/technic_nodebreaker_bottom_off.png new file mode 100644 index 0000000..0f456eb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_bottom_on.png b/mods/technic-master/technic/textures/technic_nodebreaker_bottom_on.png new file mode 100644 index 0000000..6c4811a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_front_off.png b/mods/technic-master/technic/textures/technic_nodebreaker_front_off.png new file mode 100644 index 0000000..488fd0a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_front_off.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_front_on.png b/mods/technic-master/technic/textures/technic_nodebreaker_front_on.png new file mode 100644 index 0000000..4904e8b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_front_on.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side.png b/mods/technic-master/technic/textures/technic_nodebreaker_side.png new file mode 100644 index 0000000..aefd7c8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side1.png b/mods/technic-master/technic/textures/technic_nodebreaker_side1.png new file mode 100644 index 0000000..8cb8634 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side1.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side1_off.png b/mods/technic-master/technic/textures/technic_nodebreaker_side1_off.png new file mode 100644 index 0000000..857face Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side1_on.png b/mods/technic-master/technic/textures/technic_nodebreaker_side1_on.png new file mode 100644 index 0000000..c756f09 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side2.png b/mods/technic-master/technic/textures/technic_nodebreaker_side2.png new file mode 100644 index 0000000..c2855d0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side2.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side2_off.png b/mods/technic-master/technic/textures/technic_nodebreaker_side2_off.png new file mode 100644 index 0000000..4c62f98 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_side2_on.png b/mods/technic-master/technic/textures/technic_nodebreaker_side2_on.png new file mode 100644 index 0000000..b9e4823 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_top.png b/mods/technic-master/technic/textures/technic_nodebreaker_top.png new file mode 100644 index 0000000..941d333 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_top.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_top_off.png b/mods/technic-master/technic/textures/technic_nodebreaker_top_off.png new file mode 100644 index 0000000..9139afe Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_top_off.png differ diff --git a/mods/technic-master/technic/textures/technic_nodebreaker_top_on.png b/mods/technic-master/technic/textures/technic_nodebreaker_top_on.png new file mode 100644 index 0000000..4b0a661 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_nodebreaker_top_on.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter.png b/mods/technic-master/technic/textures/technic_power_meter.png new file mode 100644 index 0000000..f1e5120 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter0.png b/mods/technic-master/technic/textures/technic_power_meter0.png new file mode 100644 index 0000000..1b1e662 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter0.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter1.png b/mods/technic-master/technic/textures/technic_power_meter1.png new file mode 100644 index 0000000..eb6be3b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter1.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter2.png b/mods/technic-master/technic/textures/technic_power_meter2.png new file mode 100644 index 0000000..e3a3772 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter2.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter3.png b/mods/technic-master/technic/textures/technic_power_meter3.png new file mode 100644 index 0000000..6333035 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter3.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter4.png b/mods/technic-master/technic/textures/technic_power_meter4.png new file mode 100644 index 0000000..6346dbd Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter4.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter5.png b/mods/technic-master/technic/textures/technic_power_meter5.png new file mode 100644 index 0000000..80f79c6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter5.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter6.png b/mods/technic-master/technic/textures/technic_power_meter6.png new file mode 100644 index 0000000..fe91bf5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter6.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter7.png b/mods/technic-master/technic/textures/technic_power_meter7.png new file mode 100644 index 0000000..e02dd6d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter7.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter8.png b/mods/technic-master/technic/textures/technic_power_meter8.png new file mode 100644 index 0000000..a12064c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter8.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter_bg.png b/mods/technic-master/technic/textures/technic_power_meter_bg.png new file mode 100644 index 0000000..9667cda Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter_bg.png differ diff --git a/mods/technic-master/technic/textures/technic_power_meter_fg.png b/mods/technic-master/technic/textures/technic_power_meter_fg.png new file mode 100644 index 0000000..7f2dde8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_meter_fg.png differ diff --git a/mods/technic-master/technic/textures/technic_power_monitor_front.png b/mods/technic-master/technic/textures/technic_power_monitor_front.png new file mode 100644 index 0000000..b0db568 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_monitor_front.png differ diff --git a/mods/technic-master/technic/textures/technic_power_monitor_sides.png b/mods/technic-master/technic/textures/technic_power_monitor_sides.png new file mode 100644 index 0000000..a6df4f3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_power_monitor_sides.png differ diff --git a/mods/technic-master/technic/textures/technic_prospector.png b/mods/technic-master/technic/textures/technic_prospector.png new file mode 100644 index 0000000..2f9ee6c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_prospector.png differ diff --git a/mods/technic-master/technic/textures/technic_raw_latex.png b/mods/technic-master/technic/textures/technic_raw_latex.png new file mode 100644 index 0000000..49bb11b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_raw_latex.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber.png b/mods/technic-master/technic/textures/technic_rubber.png new file mode 100644 index 0000000..9ed4a9d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber_leaves.png b/mods/technic-master/technic/textures/technic_rubber_leaves.png new file mode 100644 index 0000000..ae013e0 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber_leaves.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber_sapling.png b/mods/technic-master/technic/textures/technic_rubber_sapling.png new file mode 100644 index 0000000..e5c9f5d Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber_sapling.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber_tree_empty.png b/mods/technic-master/technic/textures/technic_rubber_tree_empty.png new file mode 100644 index 0000000..1792951 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber_tree_empty.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber_tree_full.png b/mods/technic-master/technic/textures/technic_rubber_tree_full.png new file mode 100644 index 0000000..08067ef Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber_tree_full.png differ diff --git a/mods/technic-master/technic/textures/technic_rubber_tree_grindings.png b/mods/technic-master/technic/textures/technic_rubber_tree_grindings.png new file mode 100644 index 0000000..9f2f5d6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_rubber_tree_grindings.png differ diff --git a/mods/technic-master/technic/textures/technic_sawdust.png b/mods/technic-master/technic/textures/technic_sawdust.png new file mode 100644 index 0000000..976e7f9 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_sawdust.png differ diff --git a/mods/technic-master/technic/textures/technic_screwdriver.png b/mods/technic-master/technic/textures/technic_screwdriver.png new file mode 100644 index 0000000..bd2da22 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_screwdriver.png differ diff --git a/mods/technic-master/technic/textures/technic_silicon_wafer.png b/mods/technic-master/technic/textures/technic_silicon_wafer.png new file mode 100644 index 0000000..78aef20 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_silicon_wafer.png differ diff --git a/mods/technic-master/technic/textures/technic_silver_dust.png b/mods/technic-master/technic/textures/technic_silver_dust.png new file mode 100644 index 0000000..19a5754 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_silver_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_solar_panel_bottom.png b/mods/technic-master/technic/textures/technic_solar_panel_bottom.png new file mode 100644 index 0000000..9e888e3 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_solar_panel_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_solar_panel_side.png b/mods/technic-master/technic/textures/technic_solar_panel_side.png new file mode 100644 index 0000000..b22447e Binary files /dev/null and b/mods/technic-master/technic/textures/technic_solar_panel_side.png differ diff --git a/mods/technic-master/technic/textures/technic_solar_panel_top.png b/mods/technic-master/technic/textures/technic_solar_panel_top.png new file mode 100644 index 0000000..492764b Binary files /dev/null and b/mods/technic-master/technic/textures/technic_solar_panel_top.png differ diff --git a/mods/technic-master/technic/textures/technic_sonic_screwdriver.png b/mods/technic-master/technic/textures/technic_sonic_screwdriver.png new file mode 100644 index 0000000..9b26b81 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_sonic_screwdriver.png differ diff --git a/mods/technic-master/technic/textures/technic_stainless_steel_dust.png b/mods/technic-master/technic/textures/technic_stainless_steel_dust.png new file mode 100644 index 0000000..6398be8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_stainless_steel_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_stainless_steel_ingot.png b/mods/technic-master/technic/textures/technic_stainless_steel_ingot.png new file mode 100644 index 0000000..7ec5e00 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_stainless_steel_ingot.png differ diff --git a/mods/technic-master/technic/textures/technic_stone_dust.png b/mods/technic-master/technic/textures/technic_stone_dust.png new file mode 100644 index 0000000..ce9d9e4 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_stone_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_supply_converter_side.png b/mods/technic-master/technic/textures/technic_supply_converter_side.png new file mode 100644 index 0000000..6492d5c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_supply_converter_side.png differ diff --git a/mods/technic-master/technic/textures/technic_supply_converter_tb.png b/mods/technic-master/technic/textures/technic_supply_converter_tb.png new file mode 100644 index 0000000..053b3d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_supply_converter_tb.png differ diff --git a/mods/technic-master/technic/textures/technic_talinite_dust.png b/mods/technic-master/technic/textures/technic_talinite_dust.png new file mode 100644 index 0000000..f228206 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_talinite_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_tin_dust.png b/mods/technic-master/technic/textures/technic_tin_dust.png new file mode 100644 index 0000000..98e6f3f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tin_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode1.png b/mods/technic-master/technic/textures/technic_tool_mode1.png new file mode 100644 index 0000000..571dbe5 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode1.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode2.png b/mods/technic-master/technic/textures/technic_tool_mode2.png new file mode 100644 index 0000000..891aa82 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode2.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode3.png b/mods/technic-master/technic/textures/technic_tool_mode3.png new file mode 100644 index 0000000..cd099a7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode3.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode4.png b/mods/technic-master/technic/textures/technic_tool_mode4.png new file mode 100644 index 0000000..62f50d7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode4.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode5.png b/mods/technic-master/technic/textures/technic_tool_mode5.png new file mode 100644 index 0000000..c918314 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode5.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode6.png b/mods/technic-master/technic/textures/technic_tool_mode6.png new file mode 100644 index 0000000..9268f47 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode6.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode7.png b/mods/technic-master/technic/textures/technic_tool_mode7.png new file mode 100644 index 0000000..5ba572a Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode7.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode8.png b/mods/technic-master/technic/textures/technic_tool_mode8.png new file mode 100644 index 0000000..b2655b6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode8.png differ diff --git a/mods/technic-master/technic/textures/technic_tool_mode9.png b/mods/technic-master/technic/textures/technic_tool_mode9.png new file mode 100644 index 0000000..2077afb Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tool_mode9.png differ diff --git a/mods/technic-master/technic/textures/technic_tree_tap.png b/mods/technic-master/technic/textures/technic_tree_tap.png new file mode 100644 index 0000000..542f30f Binary files /dev/null and b/mods/technic-master/technic/textures/technic_tree_tap.png differ diff --git a/mods/technic-master/technic/textures/technic_uranium_dust.png b/mods/technic-master/technic/textures/technic_uranium_dust.png new file mode 100644 index 0000000..9c211dc Binary files /dev/null and b/mods/technic-master/technic/textures/technic_uranium_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_uranium_fuel.png b/mods/technic-master/technic/textures/technic_uranium_fuel.png new file mode 100644 index 0000000..0a32c62 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_uranium_fuel.png differ diff --git a/mods/technic-master/technic/textures/technic_vacuum.png b/mods/technic-master/technic/textures/technic_vacuum.png new file mode 100644 index 0000000..1ef5815 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_vacuum.png differ diff --git a/mods/technic-master/technic/textures/technic_water_can.png b/mods/technic-master/technic/textures/technic_water_can.png new file mode 100644 index 0000000..eec75db Binary files /dev/null and b/mods/technic-master/technic/textures/technic_water_can.png differ diff --git a/mods/technic-master/technic/textures/technic_water_mill_side.png b/mods/technic-master/technic/textures/technic_water_mill_side.png new file mode 100644 index 0000000..f4bdb16 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_water_mill_side.png differ diff --git a/mods/technic-master/technic/textures/technic_water_mill_top.png b/mods/technic-master/technic/textures/technic_water_mill_top.png new file mode 100644 index 0000000..601ff15 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_water_mill_top.png differ diff --git a/mods/technic-master/technic/textures/technic_water_mill_top_active.png b/mods/technic-master/technic/textures/technic_water_mill_top_active.png new file mode 100644 index 0000000..f02bec6 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_water_mill_top_active.png differ diff --git a/mods/technic-master/technic/textures/technic_workshop_bottom.png b/mods/technic-master/technic/textures/technic_workshop_bottom.png new file mode 100644 index 0000000..bd8fd55 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_workshop_bottom.png differ diff --git a/mods/technic-master/technic/textures/technic_workshop_side.png b/mods/technic-master/technic/textures/technic_workshop_side.png new file mode 100644 index 0000000..9e3e7a7 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_workshop_side.png differ diff --git a/mods/technic-master/technic/textures/technic_workshop_top.png b/mods/technic-master/technic/textures/technic_workshop_top.png new file mode 100644 index 0000000..feae141 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_workshop_top.png differ diff --git a/mods/technic-master/technic/textures/technic_wrought_iron_dust.png b/mods/technic-master/technic/textures/technic_wrought_iron_dust.png new file mode 100644 index 0000000..ad23c62 Binary files /dev/null and b/mods/technic-master/technic/textures/technic_wrought_iron_dust.png differ diff --git a/mods/technic-master/technic/textures/technic_zinc_dust.png b/mods/technic-master/technic/textures/technic_zinc_dust.png new file mode 100644 index 0000000..bbd826c Binary files /dev/null and b/mods/technic-master/technic/textures/technic_zinc_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_akalin_dust.png b/mods/technic-master/technic/textures/technicx32/technic_akalin_dust.png new file mode 100644 index 0000000..90f3bac Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_akalin_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_alatro_dust.png b/mods/technic-master/technic/textures/technicx32/technic_alatro_dust.png new file mode 100644 index 0000000..1199614 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_alatro_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front.png b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front.png new file mode 100644 index 0000000..9123fb6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front_active.png new file mode 100644 index 0000000..4dda2e6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_side.png b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_side.png new file mode 100644 index 0000000..b5bd428 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_top.png b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_top.png new file mode 100644 index 0000000..67ef4b7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_arol_dust.png b/mods/technic-master/technic/textures/technicx32/technic_arol_dust.png new file mode 100644 index 0000000..f5a392f Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_arol_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_battery.png b/mods/technic-master/technic/textures/technicx32/technic_battery.png new file mode 100644 index 0000000..ee83b74 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_battery.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_battery_box_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_battery_box_bottom.png new file mode 100644 index 0000000..03c7ccc Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_battery_box_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_battery_box_side0.png b/mods/technic-master/technic/textures/technicx32/technic_battery_box_side0.png new file mode 100644 index 0000000..2662ac0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_battery_box_side0.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_battery_box_top.png b/mods/technic-master/technic/textures/technicx32/technic_battery_box_top.png new file mode 100644 index 0000000..4953a32 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_battery_box_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_battery_reload.png b/mods/technic-master/technic/textures/technicx32/technic_battery_reload.png new file mode 100644 index 0000000..164b4ac Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_battery_reload.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_brass_dust.png b/mods/technic-master/technic/textures/technicx32/technic_brass_dust.png new file mode 100644 index 0000000..f86167a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_brass_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_bronze_dust.png b/mods/technic-master/technic/textures/technicx32/technic_bronze_dust.png new file mode 100644 index 0000000..0a2401e Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_bronze_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_carbon_steel_dust.png b/mods/technic-master/technic/textures/technicx32/technic_carbon_steel_dust.png new file mode 100644 index 0000000..0bf350f Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_carbon_steel_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_cast_iron_dust.png b/mods/technic-master/technic/textures/technicx32/technic_cast_iron_dust.png new file mode 100644 index 0000000..f355094 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_cast_iron_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_chainsaw.png b/mods/technic-master/technic/textures/technicx32/technic_chainsaw.png new file mode 100644 index 0000000..b7ceee6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_chainsaw.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_chernobylite_dust.png b/mods/technic-master/technic/textures/technicx32/technic_chernobylite_dust.png new file mode 100644 index 0000000..b922db4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_chernobylite_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_chromium_dust.png b/mods/technic-master/technic/textures/technicx32/technic_chromium_dust.png new file mode 100644 index 0000000..a33358b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_chromium_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png new file mode 100644 index 0000000..7a5eed7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front.png b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front.png new file mode 100644 index 0000000..b00bef3 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png new file mode 100644 index 0000000..b41f619 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_side.png b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_side.png new file mode 100644 index 0000000..3db8daa Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_top.png b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_top.png new file mode 100644 index 0000000..c648fe8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_coal_dust.png b/mods/technic-master/technic/textures/technicx32/technic_coal_dust.png new file mode 100644 index 0000000..0fe7db7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_coal_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_back.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_back.png new file mode 100644 index 0000000..6baf788 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_back.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_front_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_front_off.png new file mode 100644 index 0000000..f878e55 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_front_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_front_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_front_on.png new file mode 100644 index 0000000..89189d6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_front_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png new file mode 100644 index 0000000..205dcc4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png new file mode 100644 index 0000000..9896c52 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_off.png new file mode 100644 index 0000000..e8a01ff Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_on.png new file mode 100644 index 0000000..c897942 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_off.png new file mode 100644 index 0000000..8da65f6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_on.png new file mode 100644 index 0000000..da8ed34 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_off.png new file mode 100644 index 0000000..7d8c7e0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_on.png new file mode 100644 index 0000000..439caf5 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk1_top_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png new file mode 100644 index 0000000..83c5b07 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png new file mode 100644 index 0000000..9ad76f4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_off.png new file mode 100644 index 0000000..584dfe3 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_on.png new file mode 100644 index 0000000..fe02042 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_off.png new file mode 100644 index 0000000..fd9ad74 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_on.png new file mode 100644 index 0000000..f51411a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_off.png new file mode 100644 index 0000000..e3e3292 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_on.png new file mode 100644 index 0000000..83043d4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk2_top_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png new file mode 100644 index 0000000..5f46154 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png new file mode 100644 index 0000000..f76f29b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_off.png new file mode 100644 index 0000000..0ea1fc0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_on.png new file mode 100644 index 0000000..ba86332 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_off.png new file mode 100644 index 0000000..8e8dce4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_on.png new file mode 100644 index 0000000..12dff69 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_off.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_off.png new file mode 100644 index 0000000..705f255 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_on.png b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_on.png new file mode 100644 index 0000000..cef077e Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_constructor_mk3_top_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_control_logic_unit.png b/mods/technic-master/technic/textures/technicx32/technic_control_logic_unit.png new file mode 100644 index 0000000..6ed00eb Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_control_logic_unit.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_copper_coil.png b/mods/technic-master/technic/textures/technicx32/technic_copper_coil.png new file mode 100644 index 0000000..db6db1a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_copper_coil.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_copper_dust.png b/mods/technic-master/technic/textures/technicx32/technic_copper_dust.png new file mode 100644 index 0000000..68678ed Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_copper_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_back.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_back.png new file mode 100644 index 0000000..0bc8df9 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_back.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_bottom.png new file mode 100644 index 0000000..ff1a2c6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_front_off.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_front_off.png new file mode 100644 index 0000000..d0f6f55 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_front_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_front_on.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_front_on.png new file mode 100644 index 0000000..368ce32 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_front_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_side.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_side.png new file mode 100644 index 0000000..aefd7c8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_side1.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_side1.png new file mode 100644 index 0000000..8cb8634 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_side1.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_side2.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_side2.png new file mode 100644 index 0000000..c2855d0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_side2.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_deployer_top.png b/mods/technic-master/technic/textures/technicx32/technic_deployer_top.png new file mode 100644 index 0000000..941d333 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_deployer_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_diamond_block_blue.png b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_blue.png new file mode 100644 index 0000000..d89bd6e Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_blue.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_diamond_block_green.png b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_green.png new file mode 100644 index 0000000..996b254 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_green.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_diamond_block_red.png b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_red.png new file mode 100644 index 0000000..52fd893 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_diamond_block_red.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_diamond_drill_head.png b/mods/technic-master/technic/textures/technicx32/technic_diamond_drill_head.png new file mode 100644 index 0000000..e3d31e8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_diamond_drill_head.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_doped_silicon_wafer.png b/mods/technic-master/technic/textures/technicx32/technic_doped_silicon_wafer.png new file mode 100644 index 0000000..6ff06a6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_doped_silicon_wafer.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_bottom.png new file mode 100644 index 0000000..d16ac47 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front.png b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front.png new file mode 100644 index 0000000..dfee663 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front_active.png new file mode 100644 index 0000000..038eec4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_side.png b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_side.png new file mode 100644 index 0000000..cf345e7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_top.png b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_top.png new file mode 100644 index 0000000..d3309ec Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_electric_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_fine_copper_wire.png b/mods/technic-master/technic/textures/technicx32/technic_fine_copper_wire.png new file mode 100644 index 0000000..36e2ed6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_fine_copper_wire.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_fine_gold_wire.png b/mods/technic-master/technic/textures/technicx32/technic_fine_gold_wire.png new file mode 100644 index 0000000..be2a38a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_fine_gold_wire.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_fine_silver_wire.png b/mods/technic-master/technic/textures/technicx32/technic_fine_silver_wire.png new file mode 100644 index 0000000..d43cb6a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_fine_silver_wire.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_flashlight.png b/mods/technic-master/technic/textures/technicx32/technic_flashlight.png new file mode 100644 index 0000000..01afdbb Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_flashlight.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_generator_front.png b/mods/technic-master/technic/textures/technicx32/technic_generator_front.png new file mode 100644 index 0000000..2d64844 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_generator_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_generator_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_generator_front_active.png new file mode 100644 index 0000000..4e57ca0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_generator_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_generator_side.png b/mods/technic-master/technic/textures/technicx32/technic_generator_side.png new file mode 100644 index 0000000..5cbcbef Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_generator_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_generator_top.png b/mods/technic-master/technic/textures/technicx32/technic_generator_top.png new file mode 100644 index 0000000..e2f3db3 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_generator_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_geothermal_side.png b/mods/technic-master/technic/textures/technicx32/technic_geothermal_side.png new file mode 100644 index 0000000..90fb430 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_geothermal_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_geothermal_top.png b/mods/technic-master/technic/textures/technicx32/technic_geothermal_top.png new file mode 100644 index 0000000..601ff15 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_geothermal_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_geothermal_top_active.png b/mods/technic-master/technic/textures/technicx32/technic_geothermal_top_active.png new file mode 100644 index 0000000..f02bec6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_geothermal_top_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_gold_dust.png b/mods/technic-master/technic/textures/technicx32/technic_gold_dust.png new file mode 100644 index 0000000..e545bb6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_gold_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_grinder_front.png b/mods/technic-master/technic/textures/technicx32/technic_grinder_front.png new file mode 100644 index 0000000..a28dbc1 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_grinder_side.png b/mods/technic-master/technic/textures/technicx32/technic_grinder_side.png new file mode 100644 index 0000000..af562f2 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_grinder_top.png b/mods/technic-master/technic/textures/technicx32/technic_grinder_top.png new file mode 100644 index 0000000..b074e13 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_bottom.png new file mode 100644 index 0000000..d854193 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front.png new file mode 100644 index 0000000..f20cb22 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front_active.png new file mode 100644 index 0000000..d1fa468 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side.png new file mode 100644 index 0000000..35cf031 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side_tube.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side_tube.png new file mode 100644 index 0000000..5b5b450 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_top.png b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_top.png new file mode 100644 index 0000000..7869ea8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_nuclear_reactor_core.png b/mods/technic-master/technic/textures/technicx32/technic_hv_nuclear_reactor_core.png new file mode 100644 index 0000000..3d380da Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_nuclear_reactor_core.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_bottom.png new file mode 100644 index 0000000..94c8222 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_side.png b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_side.png new file mode 100644 index 0000000..d39d3d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_top.png b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_top.png new file mode 100644 index 0000000..3e1b9e0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_hv_transformer.png b/mods/technic-master/technic/textures/technicx32/technic_hv_transformer.png new file mode 100644 index 0000000..7794644 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_hv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_injector_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_injector_bottom.png new file mode 100644 index 0000000..39916bd Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_injector_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_injector_side.png b/mods/technic-master/technic/textures/technicx32/technic_injector_side.png new file mode 100644 index 0000000..a5419a1 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_injector_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_injector_top.png b/mods/technic-master/technic/textures/technicx32/technic_injector_top.png new file mode 100644 index 0000000..440649c Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_injector_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_kalite_dust.png b/mods/technic-master/technic/textures/technicx32/technic_kalite_dust.png new file mode 100644 index 0000000..595edb5 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_kalite_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_laser_beam.png b/mods/technic-master/technic/textures/technicx32/technic_laser_beam.png new file mode 100644 index 0000000..4814a9b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_laser_beam.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lava_can.png b/mods/technic-master/technic/textures/technicx32/technic_lava_can.png new file mode 100644 index 0000000..80d15a6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lava_can.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_light.png b/mods/technic-master/technic/textures/technicx32/technic_light.png new file mode 100644 index 0000000..334cb07 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_light.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_bottom.png new file mode 100644 index 0000000..816b969 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front.png b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front.png new file mode 100644 index 0000000..7451ca9 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front_active.png new file mode 100644 index 0000000..8e17e4d Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_side.png b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_side.png new file mode 100644 index 0000000..908287b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_top.png b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_top.png new file mode 100644 index 0000000..8520baf Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_bottom.png new file mode 100644 index 0000000..94c8222 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_side.png b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_side.png new file mode 100644 index 0000000..d39d3d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_top.png b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_top.png new file mode 100644 index 0000000..3d8c7ab Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_lv_transformer.png b/mods/technic-master/technic/textures/technicx32/technic_lv_transformer.png new file mode 100644 index 0000000..99ac927 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_lv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_machine_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_machine_bottom.png new file mode 100644 index 0000000..943dae1 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_machine_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mining_drill.png b/mods/technic-master/technic/textures/technicx32/technic_mining_drill.png new file mode 100644 index 0000000..171888d Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mining_drill.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mining_laser_mk1.png b/mods/technic-master/technic/textures/technicx32/technic_mining_laser_mk1.png new file mode 100644 index 0000000..acde392 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mining_laser_mk1.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mithril_dust.png b/mods/technic-master/technic/textures/technicx32/technic_mithril_dust.png new file mode 100644 index 0000000..988e449 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mithril_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_motor.png b/mods/technic-master/technic/textures/technicx32/technic_motor.png new file mode 100644 index 0000000..77d4b91 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_motor.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_music_player_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_music_player_bottom.png new file mode 100644 index 0000000..bd8fd55 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_music_player_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_music_player_side.png b/mods/technic-master/technic/textures/technicx32/technic_music_player_side.png new file mode 100644 index 0000000..6c34fea Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_music_player_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_music_player_top.png b/mods/technic-master/technic/textures/technicx32/technic_music_player_top.png new file mode 100644 index 0000000..0d34563 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_music_player_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_bottom.png new file mode 100644 index 0000000..3723bb1 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front.png new file mode 100644 index 0000000..a5dac82 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front_active.png new file mode 100644 index 0000000..f6e69a9 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side.png new file mode 100644 index 0000000..0430479 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side_tube.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side_tube.png new file mode 100644 index 0000000..69f89e7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_top.png b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_top.png new file mode 100644 index 0000000..f44e3c0 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_alloy_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_bottom.png new file mode 100644 index 0000000..2a9b292 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_side0.png b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_side0.png new file mode 100644 index 0000000..39d8986 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_side0.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_top.png b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_top.png new file mode 100644 index 0000000..f7f1ea9 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_battery_box_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_cable_wield.png b/mods/technic-master/technic/textures/technicx32/technic_mv_cable_wield.png new file mode 100644 index 0000000..aca9fd4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_cable_wield.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_bottom.png new file mode 100644 index 0000000..d16ac47 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front.png new file mode 100644 index 0000000..4dfac63 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front_active.png new file mode 100644 index 0000000..e206cd2 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side.png new file mode 100644 index 0000000..4aa27b7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side_tube.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side_tube.png new file mode 100644 index 0000000..bfeba18 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_top.png b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_top.png new file mode 100644 index 0000000..635b6b7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_electric_furnace_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_bottom.png new file mode 100644 index 0000000..f46cd72 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front.png new file mode 100644 index 0000000..6445dfe Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front_active.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front_active.png new file mode 100644 index 0000000..428e1dc Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_front_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side.png new file mode 100644 index 0000000..c014f08 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side_tube.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side_tube.png new file mode 100644 index 0000000..69050e4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_side_tube.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_top.png b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_top.png new file mode 100644 index 0000000..e0320ef Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_grinder_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_bottom.png new file mode 100644 index 0000000..94c8222 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_side.png b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_side.png new file mode 100644 index 0000000..d39d3d8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_top.png b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_top.png new file mode 100644 index 0000000..e4999d5 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_solar_array_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_mv_transformer.png b/mods/technic-master/technic/textures/technicx32/technic_mv_transformer.png new file mode 100644 index 0000000..7c4688e Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_mv_transformer.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_back.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_back.png new file mode 100644 index 0000000..43ba821 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_back.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom.png new file mode 100644 index 0000000..99ff685 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_off.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_off.png new file mode 100644 index 0000000..47cd4e8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_on.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_on.png new file mode 100644 index 0000000..994f787 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_bottom_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_off.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_off.png new file mode 100644 index 0000000..5ece916 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_on.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_on.png new file mode 100644 index 0000000..a53de2a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_front_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side.png new file mode 100644 index 0000000..c2b401b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1.png new file mode 100644 index 0000000..07e74aa Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_off.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_off.png new file mode 100644 index 0000000..b63f3bb Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_on.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_on.png new file mode 100644 index 0000000..b455f06 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side1_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2.png new file mode 100644 index 0000000..7f4a0bf Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_off.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_off.png new file mode 100644 index 0000000..7b60902 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_on.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_on.png new file mode 100644 index 0000000..12985f6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_side2_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top.png new file mode 100644 index 0000000..0994c6d Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_off.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_off.png new file mode 100644 index 0000000..f08fc1b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_off.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_on.png b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_on.png new file mode 100644 index 0000000..ec28210 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_nodebreaker_top_on.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter.png new file mode 100644 index 0000000..f1e5120 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter1.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter1.png new file mode 100644 index 0000000..0542c7b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter1.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter2.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter2.png new file mode 100644 index 0000000..bf5703c Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter2.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter3.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter3.png new file mode 100644 index 0000000..4204815 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter3.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter4.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter4.png new file mode 100644 index 0000000..82a0148 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter4.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter5.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter5.png new file mode 100644 index 0000000..af783ca Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter5.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter6.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter6.png new file mode 100644 index 0000000..44feff4 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter6.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter7.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter7.png new file mode 100644 index 0000000..554baa2 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter7.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter8.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter8.png new file mode 100644 index 0000000..8c4f4a8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter8.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter_bg.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter_bg.png new file mode 100644 index 0000000..9667cda Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter_bg.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_power_meter_fg.png b/mods/technic-master/technic/textures/technicx32/technic_power_meter_fg.png new file mode 100644 index 0000000..7f2dde8 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_power_meter_fg.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_raw_latex.png b/mods/technic-master/technic/textures/technicx32/technic_raw_latex.png new file mode 100644 index 0000000..7fbbe64 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_raw_latex.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_rubber.png b/mods/technic-master/technic/textures/technicx32/technic_rubber.png new file mode 100644 index 0000000..9ed4a9d Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_rubber.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_rubber_sapling.png b/mods/technic-master/technic/textures/technicx32/technic_rubber_sapling.png new file mode 100644 index 0000000..e5c9f5d Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_rubber_sapling.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_empty.png b/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_empty.png new file mode 100644 index 0000000..1792951 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_empty.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_full.png b/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_full.png new file mode 100644 index 0000000..08067ef Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_rubber_tree_full.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_screwdriver.png b/mods/technic-master/technic/textures/technicx32/technic_screwdriver.png new file mode 100644 index 0000000..bd2da22 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_screwdriver.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_silicon_wafer.png b/mods/technic-master/technic/textures/technicx32/technic_silicon_wafer.png new file mode 100644 index 0000000..78aef20 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_silicon_wafer.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_silver_dust.png b/mods/technic-master/technic/textures/technicx32/technic_silver_dust.png new file mode 100644 index 0000000..9092c90 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_silver_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_solar_panel_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_bottom.png new file mode 100644 index 0000000..b0ad82f Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_solar_panel_side.png b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_side.png new file mode 100644 index 0000000..b22447e Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_solar_panel_top.png b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_top.png new file mode 100644 index 0000000..492764b Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_solar_panel_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_sonic_screwdriver.png b/mods/technic-master/technic/textures/technicx32/technic_sonic_screwdriver.png new file mode 100644 index 0000000..fb61d96 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_sonic_screwdriver.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_stainless_steel_dust.png b/mods/technic-master/technic/textures/technicx32/technic_stainless_steel_dust.png new file mode 100644 index 0000000..450e2bb Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_stainless_steel_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_stone_dust.png b/mods/technic-master/technic/textures/technicx32/technic_stone_dust.png new file mode 100644 index 0000000..3c49fe6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_stone_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_talinite_dust.png b/mods/technic-master/technic/textures/technicx32/technic_talinite_dust.png new file mode 100644 index 0000000..39f9330 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_talinite_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_tin_dust.png b/mods/technic-master/technic/textures/technicx32/technic_tin_dust.png new file mode 100644 index 0000000..4e94e00 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_tin_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_tree_tap.png b/mods/technic-master/technic/textures/technicx32/technic_tree_tap.png new file mode 100644 index 0000000..542f30f Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_tree_tap.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_uranium_dust.png b/mods/technic-master/technic/textures/technicx32/technic_uranium_dust.png new file mode 100644 index 0000000..d8095c3 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_uranium_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_water_can.png b/mods/technic-master/technic/textures/technicx32/technic_water_can.png new file mode 100644 index 0000000..18e0225 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_water_can.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_water_mill_side.png b/mods/technic-master/technic/textures/technicx32/technic_water_mill_side.png new file mode 100644 index 0000000..f4bdb16 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_water_mill_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_water_mill_top.png b/mods/technic-master/technic/textures/technicx32/technic_water_mill_top.png new file mode 100644 index 0000000..601ff15 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_water_mill_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_water_mill_top_active.png b/mods/technic-master/technic/textures/technicx32/technic_water_mill_top_active.png new file mode 100644 index 0000000..f02bec6 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_water_mill_top_active.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_workshop_bottom.png b/mods/technic-master/technic/textures/technicx32/technic_workshop_bottom.png new file mode 100644 index 0000000..bd8fd55 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_workshop_bottom.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_workshop_side.png b/mods/technic-master/technic/textures/technicx32/technic_workshop_side.png new file mode 100644 index 0000000..9e3e7a7 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_workshop_side.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_workshop_top.png b/mods/technic-master/technic/textures/technicx32/technic_workshop_top.png new file mode 100644 index 0000000..feae141 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_workshop_top.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_wrought_iron_dust.png b/mods/technic-master/technic/textures/technicx32/technic_wrought_iron_dust.png new file mode 100644 index 0000000..d890e73 Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_wrought_iron_dust.png differ diff --git a/mods/technic-master/technic/textures/technicx32/technic_zinc_dust.png b/mods/technic-master/technic/textures/technicx32/technic_zinc_dust.png new file mode 100644 index 0000000..0d2f75a Binary files /dev/null and b/mods/technic-master/technic/textures/technicx32/technic_zinc_dust.png differ diff --git a/mods/technic-master/technic/tools/cans.lua b/mods/technic-master/technic/tools/cans.lua new file mode 100644 index 0000000..f12ec93 --- /dev/null +++ b/mods/technic-master/technic/tools/cans.lua @@ -0,0 +1,114 @@ +local S = technic.getter + +local function set_can_wear(itemstack, level, max_level) + local temp + if level == 0 then + temp = 0 + else + temp = 65536 - math.floor(level / max_level * 65535) + if temp > 65535 then temp = 65535 end + if temp < 1 then temp = 1 end + end + itemstack:set_wear(temp) +end + +local function get_can_level(itemstack) + if itemstack:get_metadata() == "" then + return 0 + else + return tonumber(itemstack:get_metadata()) + end +end + +function technic.register_can(d) + local data = {} + for k, v in pairs(d) do data[k] = v end + minetest.register_tool(data.can_name, { + description = data.can_description, + inventory_image = data.can_inventory_image, + stack_max = 1, + wear_represents = "content_level", + liquids_pointable = true, + on_use = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then return end + local node = minetest.get_node(pointed_thing.under) + if node.name ~= data.liquid_source_name then return end + local charge = get_can_level(itemstack) + if charge == data.can_capacity then return end + if minetest.is_protected(pointed_thing.under, user:get_player_name()) then + minetest.log("action", user:get_player_name().." tried to take "..node.name.." at protected position "..minetest.pos_to_string(pointed_thing.under).." with a "..data.can_name) + return + end + minetest.remove_node(pointed_thing.under) + charge = charge + 1 + itemstack:set_metadata(tostring(charge)) + set_can_wear(itemstack, charge, data.can_capacity) + return itemstack + end, + on_place = function(itemstack, user, pointed_thing) + if pointed_thing.type ~= "node" then return end + local pos = pointed_thing.under + local def = minetest.registered_nodes[minetest.get_node(pos).name] or {} + if def.on_rightclick and user and not user:get_player_control().sneak then + return def.on_rightclick(pos, minetest.get_node(pos), user, itemstack, pointed_thing) + end + if not def.buildable_to then + pos = pointed_thing.above + def = minetest.registered_nodes[minetest.get_node(pos).name] or {} + if not def.buildable_to then return end + end + local charge = get_can_level(itemstack) + if charge == 0 then return end + if minetest.is_protected(pos, user:get_player_name()) then + minetest.log("action", user:get_player_name().." tried to place "..data.liquid_source_name.." at protected position "..minetest.pos_to_string(pos).." with a "..data.can_name) + return + end + minetest.set_node(pos, {name=data.liquid_source_name}) + charge = charge - 1 + itemstack:set_metadata(tostring(charge)) + set_can_wear(itemstack, charge, data.can_capacity) + return itemstack + end, + on_refill = function(stack) + stack:set_metadata(tostring(data.can_capacity)) + set_can_wear(stack, data.can_capacity, data.can_capacity) + return stack + end, + }) +end + +technic.register_can({ + can_name = "technic:water_can", + can_description = S("Water Can"), + can_inventory_image = "technic_water_can.png", + can_capacity = 16, + liquid_source_name = "default:water_source", + liquid_flowing_name = "default:water_flowing", +}) + +minetest.register_craft({ + output = 'technic:water_can 1', + recipe = { + {'technic:zinc_ingot', 'technic:rubber','technic:zinc_ingot'}, + {'technic:carbon_steel_ingot', '', 'technic:carbon_steel_ingot'}, + {'technic:zinc_ingot', 'technic:carbon_steel_ingot', 'technic:zinc_ingot'}, + } +}) + +technic.register_can({ + can_name = "technic:lava_can", + can_description = S("Lava Can"), + can_inventory_image = "technic_lava_can.png", + can_capacity = 8, + liquid_source_name = "default:lava_source", + liquid_flowing_name = "default:lava_flowing", +}) + +minetest.register_craft({ + output = 'technic:lava_can 1', + recipe = { + {'technic:zinc_ingot', 'technic:stainless_steel_ingot','technic:zinc_ingot'}, + {'technic:stainless_steel_ingot', '', 'technic:stainless_steel_ingot'}, + {'technic:zinc_ingot', 'technic:stainless_steel_ingot', 'technic:zinc_ingot'}, + } +}) diff --git a/mods/technic-master/technic/tools/chainsaw.lua b/mods/technic-master/technic/tools/chainsaw.lua new file mode 100644 index 0000000..3653d2d --- /dev/null +++ b/mods/technic-master/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-master/technic/tools/flashlight.lua b/mods/technic-master/technic/tools/flashlight.lua new file mode 100644 index 0000000..252dc8c --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/tools/init.lua b/mods/technic-master/technic/tools/init.lua new file mode 100644 index 0000000..281fa71 --- /dev/null +++ b/mods/technic-master/technic/tools/init.lua @@ -0,0 +1,23 @@ +local path = technic.modpath.."/tools" + +if technic.config:get_bool("enable_mining_drill") then + dofile(path.."/mining_drill.lua") +end +if technic.config:get_bool("enable_mining_laser") then + dofile(path.."/mining_lasers.lua") +end +if technic.config:get_bool("enable_flashlight") then + dofile(path.."/flashlight.lua") +end +dofile(path.."/cans.lua") +dofile(path.."/chainsaw.lua") +dofile(path.."/tree_tap.lua") +dofile(path.."/sonic_screwdriver.lua") +--dofile(path.."/prospector.lua") +dofile(path.."/vacuum.lua") + +if minetest.get_modpath("screwdriver") then + -- compatibility alias + minetest.register_alias("technic:screwdriver", "screwdriver:screwdriver") +end + diff --git a/mods/technic-master/technic/tools/mining_drill.lua b/mods/technic-master/technic/tools/mining_drill.lua new file mode 100644 index 0000000..1cf7491 --- /dev/null +++ b/mods/technic-master/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 = { + {'default:tin_ingot', 'technic:diamond_drill_head', 'default: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/technic-master/technic/tools/mining_lasers.lua b/mods/technic-master/technic/tools/mining_lasers.lua new file mode 100644 index 0000000..6015e5a --- /dev/null +++ b/mods/technic-master/technic/tools/mining_lasers.lua @@ -0,0 +1,127 @@ +local mining_lasers_list = { +-- {, , , }, + {"1", 7, 50000, 1000}, + {"2", 14, 200000, 2000}, + {"3", 21, 650000, 3000}, +} +local allow_entire_discharging = true + +local S = technic.getter + +minetest.register_craft({ + output = "technic:laser_mk1", + recipe = { + {"default:diamond", "technic:brass_ingot", "default:obsidian_glass"}, + {"", "technic:brass_ingot", "technic:red_energy_crystal"}, + {"", "", "default:copper_ingot"}, + } +}) +minetest.register_craft({ + output = "technic:laser_mk2", + recipe = { + {"default:diamond", "technic:carbon_steel_ingot", "technic:laser_mk1"}, + {"", "technic:carbon_steel_ingot", "technic:green_energy_crystal"}, + {"", "", "default:copper_ingot"}, + } +}) +minetest.register_craft({ + output = "technic:laser_mk3", + recipe = { + {"default:diamond", "technic:carbon_steel_ingot", "technic:laser_mk2"}, + {"", "technic:carbon_steel_ingot", "technic:blue_energy_crystal"}, + {"", "", "default:copper_ingot"}, + } +}) + +local function laser_node(pos, node, player) + local def = minetest.registered_nodes[node.name] + if def.liquidtype ~= "none" and def.buildable_to then + minetest.remove_node(pos) + minetest.add_particle({ + pos = pos, + velocity = {x = 0, y = 1.5 + math.random(), z = 0}, + acceleration = {x = 0, y = -1, z = 0}, + size = 6 + math.random() * 2, + texture = "smoke_puff.png^[transform" .. math.random(0, 7), + }) + return + end + minetest.node_dig(pos, node, player) +end + +local keep_node = {air = true} +local function can_keep_node(name) + if keep_node[name] ~= nil then + return keep_node[name] + end + keep_node[name] = minetest.get_item_group(name, "hot") ~= 0 + return keep_node[name] +end + +local function laser_shoot(player, range, particle_texture, sound) + local player_pos = player:getpos() + local player_name = player:get_player_name() + local dir = player:get_look_dir() + + local start_pos = vector.new(player_pos) + -- Adjust to head height + start_pos.y = start_pos.y + (player:get_properties().eye_height or 1.625) + minetest.add_particle({ + pos = start_pos, + velocity = dir, + acceleration = vector.multiply(dir, 50), + expirationtime = (math.sqrt(1 + 100 * (range + 0.4)) - 1) / 50, + size = 1, + texture = particle_texture .. "^[transform" .. math.random(0, 7), + }) + minetest.sound_play(sound, {pos = player_pos, max_hear_distance = range}) + for pos in technic.trace_node_ray_fat(start_pos, dir, range) do + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + break + end + local node = minetest.get_node(pos) + if node.name == "ignore" + or not minetest.registered_nodes[node.name] then + break + end + if not can_keep_node(node.name) then + laser_node(pos, node, player) + end + end +end + +for _, m in pairs(mining_lasers_list) do + technic.register_power_tool("technic:laser_mk"..m[1], m[3]) + minetest.register_tool("technic:laser_mk"..m[1], { + description = S("Mining Laser Mk%d"):format(m[1]), + inventory_image = "technic_mining_laser_mk"..m[1]..".png", + range = 0, + stack_max = 1, + wear_represents = "technic_RE_charge", + on_refill = technic.refill_RE_charge, + on_use = function(itemstack, user) + local meta = minetest.deserialize(itemstack:get_metadata()) + if not meta or not meta.charge or meta.charge == 0 then + return + end + + local range = m[2] + if meta.charge < m[4] then + if not allow_entire_discharging then + return + end + -- If charge is too low, give the laser a shorter range + range = range * meta.charge / m[4] + end + laser_shoot(user, range, "technic_laser_beam_mk" .. m[1] .. ".png", + "technic_laser_mk" .. m[1]) + if not technic.creative_mode then + meta.charge = math.max(meta.charge - m[4], 0) + technic.set_RE_wear(itemstack, meta.charge, m[3]) + itemstack:set_metadata(minetest.serialize(meta)) + end + return itemstack + end, + }) +end diff --git a/mods/technic-master/technic/tools/prospector.lua b/mods/technic-master/technic/tools/prospector.lua new file mode 100644 index 0000000..b28f1d8 --- /dev/null +++ b/mods/technic-master/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-master/technic/tools/sonic_screwdriver.lua b/mods/technic-master/technic/tools/sonic_screwdriver.lua new file mode 100644 index 0000000..300d363 --- /dev/null +++ b/mods/technic-master/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/technic-master/technic/tools/tree_tap.lua b/mods/technic-master/technic/tools/tree_tap.lua new file mode 100644 index 0000000..ae68b56 --- /dev/null +++ b/mods/technic-master/technic/tools/tree_tap.lua @@ -0,0 +1,76 @@ + +local S = technic.getter +local mesecons_materials = minetest.get_modpath("mesecons_materials") + +minetest.register_tool("technic:treetap", { + description = S("Tree Tap"), + inventory_image = "technic_tree_tap.png", + on_use = function(itemstack, user, pointed_thing) + 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 node_name = node.name + if node_name ~= "moretrees:rubber_tree_trunk" then + return + end + node.name = "moretrees:rubber_tree_trunk_empty" + minetest.swap_node(pos, node) + minetest.handle_node_drops(pointed_thing.above, {"technic:raw_latex"}, user) + if not technic.creative_mode then + local item_wear = tonumber(itemstack:get_wear()) + item_wear = item_wear + 819 + if item_wear > 65535 then + itemstack:clear() + return itemstack + end + itemstack:set_wear(item_wear) + end + return itemstack + end, +}) + +minetest.register_craft({ + output = "technic:treetap", + recipe = { + {"pipeworks:tube_1", "group:wood", "default:stick"}, + {"", "default:stick", "default:stick"} + }, +}) + +minetest.register_craftitem("technic:raw_latex", { + description = S("Raw Latex"), + inventory_image = "technic_raw_latex.png", +}) + +if mesecons_materials then + minetest.register_craft({ + type = "cooking", + recipe = "technic:raw_latex", + output = "mesecons_materials:glue", + }) +end + +minetest.register_craftitem("technic:rubber", { + description = S("Rubber Fiber"), + inventory_image = "technic_rubber.png", +}) + +minetest.register_abm({ + label = "Tools: tree tap", + nodenames = {"moretrees:rubber_tree_trunk_empty"}, + interval = 60, + chance = 15, + action = function(pos, node) + if minetest.find_node_near(pos, (moretrees and moretrees.leafdecay_radius) or 5, {"moretrees:rubber_tree_leaves"}) then + node.name = "moretrees:rubber_tree_trunk" + minetest.swap_node(pos, node) + end + end +}) + diff --git a/mods/technic-master/technic/tools/vacuum.lua b/mods/technic-master/technic/tools/vacuum.lua new file mode 100644 index 0000000..037f3bb --- /dev/null +++ b/mods/technic-master/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/technic-master/technic_worldgen/config.lua b/mods/technic-master/technic_worldgen/config.lua new file mode 100644 index 0000000..4ac748c --- /dev/null +++ b/mods/technic-master/technic_worldgen/config.lua @@ -0,0 +1,15 @@ +technic.config = technic.config or Settings(minetest.get_worldpath().."/technic.conf") + +local conf_table = technic.config:to_table() + +local defaults = { + enable_granite_generation = "true", + enable_marble_generation = "true", + enable_rubber_tree_generation = "true", +} + +for k, v in pairs(defaults) do + if conf_table[k] == nil then + technic.config:set(k, v) + end +end diff --git a/mods/technic-master/technic_worldgen/crafts.lua b/mods/technic-master/technic_worldgen/crafts.lua new file mode 100644 index 0000000..fba9df9 --- /dev/null +++ b/mods/technic-master/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-master/technic_worldgen/depends.txt b/mods/technic-master/technic_worldgen/depends.txt new file mode 100644 index 0000000..ac858d0 --- /dev/null +++ b/mods/technic-master/technic_worldgen/depends.txt @@ -0,0 +1,3 @@ +default +intllib? +mg? diff --git a/mods/technic-master/technic_worldgen/init.lua b/mods/technic-master/technic_worldgen/init.lua new file mode 100644 index 0000000..2f36920 --- /dev/null +++ b/mods/technic-master/technic_worldgen/init.lua @@ -0,0 +1,26 @@ +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.."/config.lua") +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 + +-- mg suppport +if minetest.get_modpath("mg") then + dofile(modpath.."/mg.lua") +end + diff --git a/mods/technic-master/technic_worldgen/locale/de.txt b/mods/technic-master/technic_worldgen/locale/de.txt new file mode 100644 index 0000000..401c94c --- /dev/null +++ b/mods/technic-master/technic_worldgen/locale/de.txt @@ -0,0 +1,39 @@ +# German Translation for technic_worldgen +# Deutsche Übersetzung von technic_worldgen +# by Xanthin + +## crafts.lua +Uranium Lump = Uranklumpen +Uranium Ingot = Uranbarren +Chromium Lump = Chromklumpen +Chromium Ingot = Chrombarren +Zinc Lump = Zinkklumpen +Zinc Ingot = Zinkbarren +Brass Ingot = Messingbarren +Wrought Iron Ingot = Schmiedeeisenbarren +Cast Iron Ingot = Gusseisenbarren +Carbon Steel Ingot = Kohlenstoffstahlbarren +Stainless Steel Ingot = Edelstahlbarren +Iron = Eisen + +## nodes.lua +Uranium Ore = Uranerz +Chromium Ore = Chromerz +Zinc Ore = Zinkerz +Granite = Granit +Marble = Marmor +Marble Bricks = Marmorziegel +Uranium Block = Uranblock +Chromium Block = Chromblock +Zinc Block = Zinkblock +Wrought Iron Block = Schmiedeeisenblock +Cast Iron Block = Gusseisenblock +Carbon Steel Block = Kohlenstoffstahlblock +Stainless Steel Block = Edelstahlblock +Brass Block = Messingblock +Wrought Iron = Schmiedeeisen + +## rubber.lua +Rubber Tree Sapling = Gummibaumsetzling +Rubber Tree = Gummibaum + diff --git a/mods/technic-master/technic_worldgen/locale/es.txt b/mods/technic-master/technic_worldgen/locale/es.txt new file mode 100644 index 0000000..a3920c2 --- /dev/null +++ b/mods/technic-master/technic_worldgen/locale/es.txt @@ -0,0 +1,36 @@ +# technic_worldgen traducido por Carlos Barraza + +###crafts.lua +Uranium Lump = Pepita de Uranio +Uranium Ingot = Lingote de Uranio +Chromium Lump = Pepita de Cromo +Chromium Ingot = Lingote de Cromo +Zinc Lump = Pepita de Zinc +Zinc Ingot = Lingote de Zinc +Brass Ingot = Lingote de Latón +Wrought Iron Ingot = Lingote de Hierro Forjado +Cast Iron Ingot = Lingote de Hierro Fundido +Carbon Steel Ingot = Lingote de Acero al Carbon +Stainless Steel Ingot = Lingote de Acero inoxidable +Iron = Lingote + +###nodes.lua +Uranium Ore = Mineral de Uranio +Chromium Ore = Mineral de Cromo +Zinc Ore = Mineral de Zinc +Granite = Granito +Marble = Mármol +Marble Bricks = Ladrillos de Mármol +Uranium Block = Bloque de Uranio +Chromium Block = Bloque de Cromo +Zinc Block = Bloque de Zinc +Wrought Iron Block = Bloque de Hierro Forjado +Cast Iron Block = Bloque de Hierro Fundido +Carbon Steel Block = Bloque de Acero al Carbon +Stainless Steel Block = Bloque de Acero Inoxidable +Brass Block = Bloque de Latón +Wrought Iron = Hierro Forjado + +###rubber.lua +Rubber Tree Sapling = Retoño de Árbol de Goma +Rubber Tree = Árbol de Goma diff --git a/mods/technic-master/technic_worldgen/locale/template.txt b/mods/technic-master/technic_worldgen/locale/template.txt new file mode 100644 index 0000000..594e0ce --- /dev/null +++ b/mods/technic-master/technic_worldgen/locale/template.txt @@ -0,0 +1,37 @@ +# template.txt +# technic_worldgen translation template + +###crafts.lua +Uranium Lump = +Uranium Ingot = +Chromium Lump = +Chromium Ingot = +Zinc Lump = +Zinc Ingot = +Brass Ingot = +Wrought Iron Ingot = +Cast Iron Ingot = +Carbon Steel Ingot = +Stainless Steel Ingot = +Iron = + +###nodes.lua +Uranium Ore = +Chromium Ore = +Zinc Ore = +Granite = +Marble = +Marble Bricks = +Uranium Block = +Chromium Block = +Zinc Block = +Wrought Iron Block = +Cast Iron Block = +Carbon Steel Block = +Stainless Steel Block = +Brass Block = +Wrought Iron = + +###rubber.lua +Rubber Tree Sapling = +Rubber Tree = diff --git a/mods/technic-master/technic_worldgen/locale/tr.txt b/mods/technic-master/technic_worldgen/locale/tr.txt new file mode 100644 index 0000000..a04597f --- /dev/null +++ b/mods/technic-master/technic_worldgen/locale/tr.txt @@ -0,0 +1,38 @@ +# Turkish translation +# mahmutelmas06@hotmail.com +# Türkçe çeviri + +###crafts.lua +Uranium Lump = Uranyum yığını +Uranium Ingot = Uranyum külçesi +Chromium Lump = Krom yığını +Chromium Ingot = Krom külçesi +Zinc Lump = Çinko yığını +Zinc Ingot = Çünko külçesi +Brass Ingot = Pirinç yığını +Wrought Iron Ingot = İşlenmiş demir yığını +Cast Iron Ingot = Döküm demir yığını +Carbon Steel Ingot = Karbon çelik külçe +Stainless Steel Ingot =Paslanmaz çelik külçe +Iron = Demir + +###nodes.lua +Uranium Ore = Uranyum madeni +Chromium Ore = Krom madeni +Zinc Ore = Çinko madeni +Granite = Granit +Marble = Mermer +Marble Bricks = Mermer tuğla +Uranium Block = Uranyum blok +Chromium Block = Karbon blok +Zinc Block = Çinko blok +Wrought Iron Block = İşlenmiş demir blok +Cast Iron Block = Döküm demir blok +Carbon Steel Block = Karbon çelik blok +Stainless Steel Block = Paslanmaz çelik blok +Brass Block = Pirinç blok +Wrought Iron = İşlenmiş demir + +###rubber.lua +Rubber Tree Sapling = Kauçuk ağacı fidanı +Rubber Tree = Kauçuk ağacı diff --git a/mods/technic-master/technic_worldgen/mg.lua b/mods/technic-master/technic_worldgen/mg.lua new file mode 100644 index 0000000..74807d7 --- /dev/null +++ b/mods/technic-master/technic_worldgen/mg.lua @@ -0,0 +1,90 @@ +mg.register_ore({ + name = "technic:mineral_uranium", + wherein = "default:stone", + seeddiff = 11, + maxvdistance = 10.5, + maxheight = -80, + minheight = -300, + sizen = 20, + sizedev = 10, + seglenghtn = 3, + seglenghtdev = 1, + segincln = 0.4, + segincldev = 0.6, + turnangle = 57, + numperblock = 1, + fork_chance = 0 +}) + +mg.register_ore({ + name = "technic:mineral_chromium", + wherein = "default:stone", + seeddiff = 12, + maxvdistance = 10.5, + maxheight = -100, + sizen = 50, + sizedev = 20, + seglenghtn = 8, + seglenghtdev = 3, + segincln = 0, + segincldev = 0.6, + turnangle = 57, + forkturnangle = 57, + numperblock = 2 +}) + +mg.register_ore({ + name = "technic:mineral_zinc", + wherein = "default:stone", + seeddiff = 13, + maxvdistance = 10.5, + maxheight = 2, + seglenghtn = 15, + seglenghtdev = 6, + segincln = 0, + segincldev = 0.6, + turnangle = 57, + forkturnangle = 57, + numperblock = 2 +}) + +mg.register_ore({ + name = "technic:mineral_lead", + wherein = "default:stone", + seeddiff = 14, + maxvdistance = 10.5, + maxheight = 16, + seglenghtn = 15, + seglenghtdev = 6, + segincln = 0, + segincldev = 0.6, + turnangle = 57, + forkturnangle = 57, + numperblock = 3 +}) + +if technic.config:get_bool("enable_granite_generation") then + mg.register_ore_sheet({ + name = "technic:granite", + wherein = "default:stone", + height_min = -31000, + height_max = -150, + tmin = 3, + tmax = 6, + threshhold = 0.4, + noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=24, octaves=3, persist=0.70} + }) +end + +if technic.config:get_bool("enable_marble_generation") then + mg.register_ore_sheet({ + name = "technic:marble", + wherein = "default:stone", + height_min = -31000, + height_max = -50, + tmin = 3, + tmax = 6, + threshhold = 0.4, + noise_params = {offset=0, scale=15, spread={x=130, y=130, z=130}, seed=23, octaves=3, persist=0.70} + }) +end diff --git a/mods/technic-master/technic_worldgen/nodes.lua b/mods/technic-master/technic_worldgen/nodes.lua new file mode 100644 index 0000000..f3a88e4 --- /dev/null +++ b/mods/technic-master/technic_worldgen/nodes.lua @@ -0,0 +1,196 @@ + +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: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: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=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-master/technic_worldgen/oregen.lua b/mods/technic-master/technic_worldgen/oregen.lua new file mode 100644 index 0000000..4fd41fd --- /dev/null +++ b/mods/technic-master/technic_worldgen/oregen.lua @@ -0,0 +1,227 @@ +local uranium_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.7 +} +local uranium_threshold = 0.55 + +local chromium_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 421, + octaves = 3, + persist = 0.7 +} +local chromium_threshold = 0.55 + +local zinc_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 422, + octaves = 3, + persist = 0.7 +} +local zinc_threshold = 0.5 + +local lead_params = { + offset = 0, + scale = 1, + spread = {x = 100, y = 100, z = 100}, + seed = 423, + octaves = 3, + persist = 0.7 +} +local lead_threshold = 0.3 + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_uranium", + wherein = "default:stone", + clust_scarcity = 8*8*8, + clust_num_ores = 4, + clust_size = 3, + y_min = -300, + y_max = -80, + noise_params = uranium_params, + noise_threshold = uranium_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_chromium", + wherein = "default:stone", + clust_scarcity = 8*8*8, + clust_num_ores = 2, + clust_size = 3, + y_min = -200, + y_max = -100, + noise_params = chromium_params, + noise_threshold = chromium_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_chromium", + wherein = "default:stone", + clust_scarcity = 6*6*6, + clust_num_ores = 2, + clust_size = 3, + y_min = -31000, + y_max = -200, + flags = "absheight", + noise_params = chromium_params, + noise_threshold = chromium_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_zinc", + wherein = "default:stone", + clust_scarcity = 8*8*8, + clust_num_ores = 5, + clust_size = 7, + y_min = -32, + y_max = 2, + noise_params = zinc_params, + noise_threshold = zinc_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_zinc", + wherein = "default:stone", + clust_scarcity = 6*6*6, + clust_num_ores = 4, + clust_size = 3, + y_min = -31000, + y_max = -32, + flags = "absheight", + noise_params = zinc_params, + noise_threshold = zinc_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_lead", + wherein = "default:stone", + clust_scarcity = 9*9*9, + clust_num_ores = 5, + clust_size = 3, + y_min = -16, + y_max = 16, + noise_params = lead_params, + noise_threshold = lead_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_lead", + wherein = "default:stone", + clust_scarcity = 8*8*8, + clust_num_ores = 5, + clust_size = 3, + y_min = -128, + y_max = -16, + noise_params = lead_params, + noise_threshold = lead_threshold, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "technic:mineral_lead", + wherein = "default:stone", + clust_scarcity = 6*6*6, + clust_num_ores = 5, + clust_size = 3, + y_min = -31000, + y_max = -128, + flags = "absheight", + noise_params = lead_params, + noise_threshold = lead_threshold, +}) + +-- Sulfur +local sulfur_buf = {} +local sulfur_noise + +minetest.register_on_generated(function(minp, maxp) + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local a = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) + 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 i in a:iter( + math.max(minp.x, x - grid_size), + math.max(minp.y, y - grid_size), + math.max(minp.z, z - grid_size), + math.min(maxp.x, x + grid_size), + math.min(maxp.y, y + grid_size), + math.min(maxp.z, z + grid_size) + ) do + if data[i] == c_stone and pr:next(1, 10) <= 7 then + data[i] = c_sulfur + end + end + end + end + end + end + + vm:set_data(data) + vm:write_to_map(data) +end) + + +if technic.config:get_bool("enable_marble_generation") then + minetest.register_ore({ + ore_type = "sheet", + ore = "technic:marble", + wherein = "default:stone", + clust_scarcity = 1, + clust_num_ores = 1, + clust_size = 3, + y_min = -31000, + y_max = -50, + noise_threshold = 0.4, + noise_params = { + offset = 0, scale = 15, spread = {x = 150, y = 150, z = 150}, + seed = 23, octaves = 3, persist = 0.70 + } + }) +end + +if technic.config:get_bool("enable_granite_generation") then + minetest.register_ore({ + ore_type = "sheet", + ore = "technic:granite", + wherein = "default:stone", + clust_scarcity = 1, + clust_num_ores = 1, + clust_size = 4, + y_min = -31000, + y_max = -150, + noise_threshold = 0.4, + noise_params = { + offset = 0, scale = 15, spread = {x = 130, y = 130, z = 130}, + seed = 24, octaves = 3, persist = 0.70 + } + }) +end diff --git a/mods/technic-master/technic_worldgen/rubber.lua b/mods/technic-master/technic_worldgen/rubber.lua new file mode 100644 index 0000000..11da9ca --- /dev/null +++ b/mods/technic-master/technic_worldgen/rubber.lua @@ -0,0 +1,100 @@ +-- 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 +}) + +if technic.config:get_bool("enable_rubber_tree_generation") then + minetest.register_on_generated(function(minp, maxp, blockseed) + if math.random(1, 100) > 5 then + return + end + local tmp = { + x = (maxp.x - minp.x) / 2 + minp.x, + y = (maxp.y - minp.y) / 2 + minp.y, + z = (maxp.z - minp.z) / 2 + minp.z} + local pos = minetest.find_node_near(tmp, maxp.x - minp.x, + {"default:dirt_with_grass"}) + if pos ~= nil then + minetest.spawn_tree({x=pos.x, y=pos.y+1, z=pos.z}, technic.rubber_tree_model) + end + end) +end diff --git a/mods/technic-master/technic_worldgen/textures/technic_brass_block.png b/mods/technic-master/technic_worldgen/textures/technic_brass_block.png new file mode 100644 index 0000000..bc6fe78 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_brass_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_brass_dust.png b/mods/technic-master/technic_worldgen/textures/technic_brass_dust.png new file mode 100644 index 0000000..63d9ba4 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_brass_dust.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_brass_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_brass_ingot.png new file mode 100644 index 0000000..06056e7 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_brass_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_block.png b/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_block.png new file mode 100644 index 0000000..f3cfdc1 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_ingot.png new file mode 100644 index 0000000..c30ec80 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_carbon_steel_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_cast_iron_block.png b/mods/technic-master/technic_worldgen/textures/technic_cast_iron_block.png new file mode 100644 index 0000000..2df61e5 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_cast_iron_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_cast_iron_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_cast_iron_ingot.png new file mode 100644 index 0000000..5c182ce Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_cast_iron_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_chromium_block.png b/mods/technic-master/technic_worldgen/textures/technic_chromium_block.png new file mode 100644 index 0000000..ad173ca Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_chromium_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_chromium_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_chromium_ingot.png new file mode 100644 index 0000000..248b0c3 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_chromium_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_chromium_lump.png b/mods/technic-master/technic_worldgen/textures/technic_chromium_lump.png new file mode 100644 index 0000000..0fe03a1 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_chromium_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_granite.png b/mods/technic-master/technic_worldgen/textures/technic_granite.png new file mode 100644 index 0000000..abb1385 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_granite.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_lead_block.png b/mods/technic-master/technic_worldgen/textures/technic_lead_block.png new file mode 100644 index 0000000..11da56a Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_lead_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_lead_dust.png b/mods/technic-master/technic_worldgen/textures/technic_lead_dust.png new file mode 100644 index 0000000..af6ee29 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_lead_dust.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_lead_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_lead_ingot.png new file mode 100644 index 0000000..fae0cbf Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_lead_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_lead_lump.png b/mods/technic-master/technic_worldgen/textures/technic_lead_lump.png new file mode 100644 index 0000000..64584cb Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_lead_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_marble.png b/mods/technic-master/technic_worldgen/textures/technic_marble.png new file mode 100644 index 0000000..846a170 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_marble.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_marble_bricks.png b/mods/technic-master/technic_worldgen/textures/technic_marble_bricks.png new file mode 100644 index 0000000..2ea1e42 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_marble_bricks.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_mineral_chromium.png b/mods/technic-master/technic_worldgen/textures/technic_mineral_chromium.png new file mode 100644 index 0000000..c66f1c5 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_mineral_chromium.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_mineral_lead.png b/mods/technic-master/technic_worldgen/textures/technic_mineral_lead.png new file mode 100644 index 0000000..0309cd3 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_mineral_lead.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_mineral_sulfur.png b/mods/technic-master/technic_worldgen/textures/technic_mineral_sulfur.png new file mode 100644 index 0000000..26cb19d Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_mineral_sulfur.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_mineral_uranium.png b/mods/technic-master/technic_worldgen/textures/technic_mineral_uranium.png new file mode 100644 index 0000000..aad9c07 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_mineral_uranium.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_mineral_zinc.png b/mods/technic-master/technic_worldgen/textures/technic_mineral_zinc.png new file mode 100644 index 0000000..598efeb Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_mineral_zinc.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber.png b/mods/technic-master/technic_worldgen/textures/technic_rubber.png new file mode 100644 index 0000000..9ed4a9d Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber_leaves.png b/mods/technic-master/technic_worldgen/textures/technic_rubber_leaves.png new file mode 100644 index 0000000..ae013e0 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber_leaves.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber_sapling.png b/mods/technic-master/technic_worldgen/textures/technic_rubber_sapling.png new file mode 100644 index 0000000..e5c9f5d Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber_sapling.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_empty.png b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_empty.png new file mode 100644 index 0000000..1792951 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_empty.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_full.png b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_full.png new file mode 100644 index 0000000..08067ef Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_full.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_grindings.png b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_grindings.png new file mode 100644 index 0000000..9f2f5d6 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_rubber_tree_grindings.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_stainless_steel_block.png b/mods/technic-master/technic_worldgen/textures/technic_stainless_steel_block.png new file mode 100644 index 0000000..e451768 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_stainless_steel_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_sulfur_dust.png b/mods/technic-master/technic_worldgen/textures/technic_sulfur_dust.png new file mode 100644 index 0000000..04ffee0 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_sulfur_dust.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_sulfur_lump.png b/mods/technic-master/technic_worldgen/textures/technic_sulfur_lump.png new file mode 100644 index 0000000..017c8e1 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_sulfur_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_uranium_block.png b/mods/technic-master/technic_worldgen/textures/technic_uranium_block.png new file mode 100644 index 0000000..99dd51c Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_uranium_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_uranium_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_uranium_ingot.png new file mode 100644 index 0000000..38978f8 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_uranium_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_uranium_lump.png b/mods/technic-master/technic_worldgen/textures/technic_uranium_lump.png new file mode 100644 index 0000000..2f5a66c Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_uranium_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_block.png b/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_block.png new file mode 100644 index 0000000..cf6c961 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_ingot.png new file mode 100644 index 0000000..af00ea0 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_wrought_iron_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_zinc_block.png b/mods/technic-master/technic_worldgen/textures/technic_zinc_block.png new file mode 100644 index 0000000..5ae7947 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_zinc_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_zinc_ingot.png b/mods/technic-master/technic_worldgen/textures/technic_zinc_ingot.png new file mode 100644 index 0000000..a36a11c Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_zinc_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/technic_zinc_lump.png b/mods/technic-master/technic_worldgen/textures/technic_zinc_lump.png new file mode 100644 index 0000000..1a620ab Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/technic_zinc_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_brass_ingot.png b/mods/technic-master/technic_worldgen/textures/x32/technic_brass_ingot.png new file mode 100644 index 0000000..2d8b153 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_brass_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_ingot.png b/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_ingot.png new file mode 100644 index 0000000..91d5b20 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_lump.png b/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_lump.png new file mode 100644 index 0000000..1588f92 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_chromium_lump.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_concrete_block.png b/mods/technic-master/technic_worldgen/textures/x32/technic_concrete_block.png new file mode 100644 index 0000000..91364f3 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_concrete_block.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_granite.png b/mods/technic-master/technic_worldgen/textures/x32/technic_granite.png new file mode 100644 index 0000000..abb1385 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_granite.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_marble.png b/mods/technic-master/technic_worldgen/textures/x32/technic_marble.png new file mode 100644 index 0000000..846a170 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_marble.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_marble_bricks.png b/mods/technic-master/technic_worldgen/textures/x32/technic_marble_bricks.png new file mode 100644 index 0000000..2ea1e42 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_marble_bricks.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_chromium.png b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_chromium.png new file mode 100644 index 0000000..c66f1c5 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_chromium.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_uranium.png b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_uranium.png new file mode 100644 index 0000000..aad9c07 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_uranium.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_zinc.png b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_zinc.png new file mode 100644 index 0000000..598efeb Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_mineral_zinc.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_rebar.png b/mods/technic-master/technic_worldgen/textures/x32/technic_rebar.png new file mode 100644 index 0000000..16d1fc5 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_rebar.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_stainless_steel_ingot.png b/mods/technic-master/technic_worldgen/textures/x32/technic_stainless_steel_ingot.png new file mode 100644 index 0000000..46fa296 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_stainless_steel_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_uranium.png b/mods/technic-master/technic_worldgen/textures/x32/technic_uranium.png new file mode 100644 index 0000000..54225f8 Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_uranium.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_ingot.png b/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_ingot.png new file mode 100644 index 0000000..096ff9c Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_ingot.png differ diff --git a/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_lump.png b/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_lump.png new file mode 100644 index 0000000..d28a6dc Binary files /dev/null and b/mods/technic-master/technic_worldgen/textures/x32/technic_zinc_lump.png differ diff --git a/mods/technic-master/wrench/depends.txt b/mods/technic-master/wrench/depends.txt new file mode 100644 index 0000000..a681af3 --- /dev/null +++ b/mods/technic-master/wrench/depends.txt @@ -0,0 +1,6 @@ +default +technic? +technic_chests? +technic_worldgen? +intllib? + diff --git a/mods/technic-master/wrench/init.lua b/mods/technic-master/wrench/init.lua new file mode 100644 index 0000000..adb80c9 --- /dev/null +++ b/mods/technic-master/wrench/init.lua @@ -0,0 +1,167 @@ +--[[ +Wrench mod + +Adds a wrench that allows the player to pickup nodes that contain an inventory +with items or metadata that needs perserving. +The wrench has the same tool capability as the normal hand. +To pickup a node simply right click on it. If the node contains a formspec, +you will need to shift+right click instead. +Because it enables arbitrary nesting of chests, and so allows the player +to carry an unlimited amount of material at once, this wrench is not +available to survival-mode players. +--]] + +local LATEST_SERIALIZATION_VERSION = 1 + +wrench = {} + +local modpath = minetest.get_modpath(minetest.get_current_modname()) +dofile(modpath.."/support.lua") +dofile(modpath.."/technic.lua") + +-- Boilerplate to support localized strings if intllib mod is installed. +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +local function get_meta_type(name, metaname) + local def = wrench.registered_nodes[name] + return def and def.metas and def.metas[metaname] or nil +end + +local function get_pickup_name(name) + return "wrench:picked_up_"..(name:gsub(":", "_")) +end + +local function restore(pos, placer, itemstack) + local name = itemstack:get_name() + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local data = itemstack:get_meta():get_string("data") + data = (data ~= "" and data) or itemstack:get_metadata() + data = minetest.deserialize(data) + if not data then + minetest.remove_node(pos) + minetest.log("error", placer:get_player_name().." wanted to place ".. + name.." at "..minetest.pos_to_string(pos).. + ", but it had no data.") + minetest.log("verbose", "itemstack: "..itemstack:to_string()) + return true + end + minetest.set_node(pos, {name = data.name, param2 = node.param2}) + for name, value in pairs(data.metas) do + local meta_type = get_meta_type(data.name, name) + if meta_type == wrench.META_TYPE_INT then + meta:set_int(name, value) + elseif meta_type == wrench.META_TYPE_FLOAT then + meta:set_float(name, value) + elseif meta_type == wrench.META_TYPE_STRING then + meta:set_string(name, value) + end + end + local lists = data.lists + for listname, list in pairs(lists) do + inv:set_list(listname, list) + end + itemstack:take_item() + return itemstack +end + +for name, info in pairs(wrench.registered_nodes) do + local olddef = minetest.registered_nodes[name] + if olddef then + local newdef = {} + for key, value in pairs(olddef) do + newdef[key] = value + end + newdef.stack_max = 1 + newdef.description = S("%s with items"):format(newdef.description) + newdef.groups = {} + newdef.groups.not_in_creative_inventory = 1 + newdef.on_construct = nil + newdef.on_destruct = nil + newdef.after_place_node = restore + minetest.register_node(":"..get_pickup_name(name), newdef) + end +end + +minetest.register_tool("wrench:wrench", { + description = S("Wrench"), + inventory_image = "technic_wrench.png", + 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]=7.00,[2]=4.00,[3]=1.40}, + uses=0, maxlevel=3} + }, + damage_groups = {fleshy=1}, + }, + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if not placer or not pos then + return + end + local player_name = placer:get_player_name() + if minetest.is_protected(pos, player_name) then + minetest.record_protection_violation(pos, player_name) + return + end + local name = minetest.get_node(pos).name + local def = wrench.registered_nodes[name] + if not def then + return + end + + local stack = ItemStack(get_pickup_name(name)) + local player_inv = placer:get_inventory() + if not player_inv:room_for_item("main", stack) then + return + end + local meta = minetest.get_meta(pos) + if def.owned and not minetest.check_player_privs(placer, "protection_bypass") then + local owner = meta:get_string("owner") + if owner and owner ~= player_name then + minetest.log("action", player_name.. + " tried to pick up an owned node belonging to ".. + owner.." at ".. + minetest.pos_to_string(pos)) + return + end + end + + local metadata = {} + metadata.name = name + metadata.version = LATEST_SERIALIZATION_VERSION + + local inv = meta:get_inventory() + local lists = {} + for _, listname in pairs(def.lists or {}) do + local list = inv:get_list(listname) + for i, stack in pairs(list) do + list[i] = stack:to_string() + end + lists[listname] = list + end + metadata.lists = lists + + local item_meta = stack:get_meta() + metadata.metas = {} + for name, meta_type in pairs(def.metas or {}) do + if meta_type == wrench.META_TYPE_INT then + metadata.metas[name] = meta:get_int(name) + elseif meta_type == wrench.META_TYPE_FLOAT then + metadata.metas[name] = meta:get_float(name) + elseif meta_type == wrench.META_TYPE_STRING then + metadata.metas[name] = meta:get_string(name) + end + end + + item_meta:set_string("data", minetest.serialize(metadata)) + minetest.remove_node(pos) + itemstack:add_wear(65535 / 20) + player_inv:add_item("main", stack) + return itemstack + end, +}) diff --git a/mods/technic-master/wrench/locale/de.txt b/mods/technic-master/wrench/locale/de.txt new file mode 100644 index 0000000..b285cd3 --- /dev/null +++ b/mods/technic-master/wrench/locale/de.txt @@ -0,0 +1,7 @@ +# German Translation for technic_wrench +# Deutsche Übersetzung von technic_wrench +# by Xanthin + +Wrench = Schraubenschluessel +%s with items = %s mit Gegenstaenden + diff --git a/mods/technic-master/wrench/locale/es.txt b/mods/technic-master/wrench/locale/es.txt new file mode 100644 index 0000000..1d79a96 --- /dev/null +++ b/mods/technic-master/wrench/locale/es.txt @@ -0,0 +1,5 @@ +# technic_wrench traducido por Carlos Barraza + +Wrench = Llave Inglesa +%s with items = %s con elementos + diff --git a/mods/technic-master/wrench/locale/template.txt b/mods/technic-master/wrench/locale/template.txt new file mode 100644 index 0000000..eff2da2 --- /dev/null +++ b/mods/technic-master/wrench/locale/template.txt @@ -0,0 +1,5 @@ +# technic_wrench translation template + +Wrench = +%s with items = + diff --git a/mods/technic-master/wrench/locale/tr.txt b/mods/technic-master/wrench/locale/tr.txt new file mode 100644 index 0000000..2050bce --- /dev/null +++ b/mods/technic-master/wrench/locale/tr.txt @@ -0,0 +1,5 @@ +# Turkish translation by mahmutelmas06 +# mahmutelmas06@hotmail.com + +Wrench = İngiliz anahtarı +%s with items = Araçlarla birlikte %s diff --git a/mods/technic-master/wrench/support.lua b/mods/technic-master/wrench/support.lua new file mode 100644 index 0000000..1d21811 --- /dev/null +++ b/mods/technic-master/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-master/wrench/technic.lua b/mods/technic-master/wrench/technic.lua new file mode 100644 index 0000000..c404180 --- /dev/null +++ b/mods/technic-master/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/technic-master/wrench/textures/technic_wrench.png b/mods/technic-master/wrench/textures/technic_wrench.png new file mode 100644 index 0000000..471b47e Binary files /dev/null and b/mods/technic-master/wrench/textures/technic_wrench.png differ diff --git a/mods/thirsty/HUD.txt b/mods/thirsty/HUD.txt new file mode 100644 index 0000000..5aa9426 --- /dev/null +++ b/mods/thirsty/HUD.txt @@ -0,0 +1,17 @@ +Configuration for Better HUD +---------------------------- + +The Better HUD mod positions the stat displays according to +a 'hud.conf' file in its mod directory. If you wish to shift +the positions of the stat displays around, you need to create or +edit the 'hud.conf' file. + +There should be two files in this mod directory, 'hud.conf.with_hunger' +and 'hud.conf.no_hunger'. These can be used as the basis for your +'hud.conf', depending on whether you are also using the Hunger mod +(which adds a hunger display), or not. + +The positions of the displays in those files correspond to the +default settings in Better HUD. In most cases, it's enough to +copy one of these files as 'hud.conf' in the Better HUD mod +directory 'mods/hud'. diff --git a/mods/thirsty/LICENSE b/mods/thirsty/LICENSE new file mode 100644 index 0000000..5f2dd7f --- /dev/null +++ b/mods/thirsty/LICENSE @@ -0,0 +1,505 @@ + 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. + + {description} + Copyright (C) {year} {fullname} + + 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. + + {signature of Ty Coon}, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + diff --git a/mods/thirsty/README.md b/mods/thirsty/README.md new file mode 100644 index 0000000..cbb28e4 --- /dev/null +++ b/mods/thirsty/README.md @@ -0,0 +1,97 @@ +Thirsty [thirsty] +================= + +A Minetest mod that adds a "thirst" mechanic. + +Version: 0.10.2 + +License: + Code: LGPL 2.1 (see included LICENSE file) + Textures: CC-BY-SA (see http://creativecommons.org/licenses/by-sa/4.0/) + +Report bugs or request help on the forum topic. + +Description +----------- + +This is a mod for MineTest. It adds a thirst mechanic to the +game, similar to many hunger mods (but independent of them). +Players will slowly get thirstier over time, and will need to +drink or suffer damage. + +The point of this mod is not to make the game more realistic, +or harder. The point is to have another mechanic that rewards +preparation and infrastructure. Players will now have an incentive +to build their base next to water (or add some water to their base), +and/or take some water with them when mining or travelling. + +Terminology: "Thirst" vs. "hydration" +------------------------------------- + +"Thirst" is the absence of "hydration" (a term suggested by +everamzah on the Minetest forums, thanks!). The overall mechanic +is still called "thirst", but the visible bar is that of +"hydration", meaning a full bar represents full hydration, not full +thirst. Players lose hydration (or "hydro points") over time, and +gain hydration when drinking. + +Current behavior +---------------- + +**Tier 0**: stand in water (running or standing) to slowly drink. +You may not move during drinking (or you could cross an ocean without +getting thirsty). + +**Tier 1**: use a container (e.g. from `vessels`) on water to instantly +fill your hydration. Craftable wooden bowl included. + +**Tier 2**: craftable canteens: steel canteen holds two full hydration +bars, bronze canteen three bars worth of water. + +**Tier 3**: placeable drinking fountain / wash basin node: instantly +fills your hydration when used. + +**Tier 4+**: placeable fountain node(s) to fill the hydration of all +players within range. Placing more nodes increases the range. + +**Tier 5**: craftable trinkets/gadgets/amulets that constantly keep your +hydration filled when in your inventory, solving your thirst problem +once and for all. + +API +--- +Some functions of interest: + +* thirsty.drink(player, amount, [max]) : instantly drink a bit (up to a max value, default 20) +* thirsty.get_hydro(player) : returns the current hydration of a player +* thirsty.set_thirst_factor(player, factor) : how fast does the given player get thirsty (default is 1.0) +* thirsty.get_thirst_factor(player) : returns the current thirst factor of a player + +"player" refers to a player object, i.e. with a get_player_name() method. + +Future plans +------------ +Better configurability and an API. + +Dependencies +------------ +* default (optional but needed for included components) +* bucket (optional but needed for some included components) +* hud (optional): https://forum.minetest.net/viewtopic.php?f=11&t=6342 (see HUD.txt for configuration) +* hudbars (optional): https://forum.minetest.net/viewtopic.php?f=11&t=11153 +* vessels (optional): https://forum.minetest.net/viewtopic.php?id=2574 + +Installation +------------ + +Unzip the archive, rename the folder to to `thirsty` and +place it in minetest/mods/ + +( Linux: If you have a linux system-wide installation place + it in ~/.minetest/mods/. ) + +( If you only want this to be used in a single world, place + the folder in worldmods/ in your worlddirectory. ) + +For further information or help see: +http://wiki.minetest.com/wiki/Installing_Mods diff --git a/mods/thirsty/components.lua b/mods/thirsty/components.lua new file mode 100644 index 0000000..cede637 --- /dev/null +++ b/mods/thirsty/components.lua @@ -0,0 +1,82 @@ +--[[ + +Default components for Thirsty. + +These are nodes and items that "implement" the functionality +from functions.lua + +See init.lua for license. + +]] + + +--[[ + +Drinking containers (Tier 1) + +Defines a simple wooden bowl which can be used on water to fill +your hydration. + +Optionally also augments the nodes from vessels to enable drinking +on use. + +]] + +if minetest.get_modpath("vessels") and thirsty.config.register_vessels then + -- add "drinking" to vessels + thirsty.augment_item_for_drinking('vessels:drinking_glass', 22) + thirsty.augment_item_for_drinking('vessels:glass_bottle', 24) + thirsty.augment_item_for_drinking('vessels:steel_bottle', 26) +end + +--[[ + +Hydro containers (Tier 2) + +Defines canteens (currently two types, with different capacities), +tools which store hydro. They use wear to show their content +level in their durability bar; they do not disappear when used up. + +Wear corresponds to hydro level as follows: +- a wear of 0 shows no durability bar -> empty (initial state) +- a wear of 1 shows a full durability bar -> full +- a wear of 65535 shows an empty durability bar -> empty + +]] + +if minetest.get_modpath("default") and thirsty.config.register_canteens then + + minetest.register_tool('thirsty:steel_canteen', { + description = 'Steel canteen', + inventory_image = "thirsty_steel_canteen_16.png", + liquids_pointable = true, + stack_max = 1, + on_use = thirsty.on_use(nil), + }) + + minetest.register_tool('thirsty:bronze_canteen', { + description = 'Bronze canteen', + inventory_image = "thirsty_bronze_canteen_16.png", + liquids_pointable = true, + stack_max = 1, + on_use = thirsty.on_use(nil), + }) + + minetest.register_craft({ + output = "thirsty:steel_canteen", + recipe = { + { "group:wood", ""}, + { "default:steel_ingot", "default:steel_ingot"}, + { "default:steel_ingot", "default:steel_ingot"} + } + }) + minetest.register_craft({ + output = "thirsty:bronze_canteen", + recipe = { + { "group:wood", ""}, + { "default:bronze_ingot", "default:bronze_ingot"}, + { "default:bronze_ingot", "default:bronze_ingot"} + } + }) + +end diff --git a/mods/thirsty/configuration.lua b/mods/thirsty/configuration.lua new file mode 100644 index 0000000..e769416 --- /dev/null +++ b/mods/thirsty/configuration.lua @@ -0,0 +1,64 @@ +--[[ + +Configuration from default, moddir and worlddir, in that order. + +See init.lua for license. + +]] + +-- change these for other mods +local M = thirsty +local modname = 'thirsty' +local fileroot = modname + +-- make sure config exists; keep constant reference to it +local C = M.config or {} +M.config = C + +local function try_config_file(filename) + --print("Config from "..filename) + local file, err = io.open(filename, 'r') + if file then + file:close() -- was just for checking existance + local confcode, err = loadfile(filename) + if confcode then + confcode() + if C ~= M.config then + -- M.config was overriden, merge + for key, value in pairs(M.config) do + if type(value) == 'table' and type(C[key]) == 'table' and not value.CLEAR then + for k, v in pairs(value) do + C[key][k] = value[k] + end + else + -- copy (not a table, or asked to clear) + C[key] = value + end + end + else + -- no override? Empty, or file knows what it is doing. + end + else + minetest.log("error", "Could not load " .. filename .. ": " .. err) + end + end +end + +-- read starting configuration from .default.conf +try_config_file(minetest.get_modpath(modname) .. "/" .. fileroot .. ".default.conf") + +-- next, install-specific copy in modpath +try_config_file(minetest.get_modpath(modname) .. "/" .. fileroot .. ".conf") + +-- last, world-specific copy in worldpath +try_config_file(minetest.get_worldpath() .. "/" .. fileroot .. ".conf") + +-- remove any special keys from tables +for key, value in pairs(C) do + if type(value) == 'table' then + value.CLEAR = nil + end +end + +-- write back +M.config = C diff --git a/mods/thirsty/depends.txt b/mods/thirsty/depends.txt new file mode 100644 index 0000000..e809f30 --- /dev/null +++ b/mods/thirsty/depends.txt @@ -0,0 +1,5 @@ +default? +bucket? +hud? +hudbars? +vessels? diff --git a/mods/thirsty/description.txt b/mods/thirsty/description.txt new file mode 100644 index 0000000..97a7be3 --- /dev/null +++ b/mods/thirsty/description.txt @@ -0,0 +1,2 @@ +A mod that adds a "thirst" mechanic, similar to hunger. + diff --git a/mods/thirsty/functions.lua b/mods/thirsty/functions.lua new file mode 100644 index 0000000..11765c1 --- /dev/null +++ b/mods/thirsty/functions.lua @@ -0,0 +1,406 @@ +--[[ + +Core functions for Thirsty. + +See init.lua for license. + +]] + +local PPA = thirsty.persistent_player_attributes + +PPA.register({ + name = 'thirsty_hydro', + min = 0, + max = 50, + default = 20, +}) + +function thirsty.on_joinplayer(player) + local name = player:get_player_name() + -- default entry for new players + if not thirsty.players[name] then + local pos = player:getpos() + thirsty.players[name] = { + last_pos = math.floor(pos.x) .. ':' .. math.floor(pos.z), + time_in_pos = 0.0, + pending_dmg = 0.0, + thirst_factor = 1.0, + } + end + thirsty.hud_init(player) +end + +function thirsty.on_dieplayer(player) + local name = player:get_player_name() + local pl = thirsty.players[name] + -- reset after death + PPA.set_value(player, 'thirsty_hydro', 20) + pl.pending_dmg = 0.0 + pl.thirst_factor = 1.0 +end + +--[[ + +Getters, setters and such + +]] + +function thirsty.drink(player, value, max) + -- if max is not specified, assume 20 + if not max then + max = 20 + end + local hydro = PPA.get_value(player, 'thirsty_hydro') + -- test whether we're not *above* max; + -- this function should not remove any overhydration + if hydro < max then + hydro = math.min(hydro + value, max) + --print("Drinking by "..value.." to "..hydro) + PPA.set_value(player, 'thirsty_hydro', hydro) + minetest.sound_play({name = "drink", gain = 1}, {pos=player:getpos(), max_hear_distance = 16, object=user}) + return true + end + return false +end + +function thirsty.get_hydro(player) + return PPA.get_value(player, 'thirsty_hydro') +end + +function thirsty.set_thirst_factor(player, factor) + local name = player:get_player_name() + local pl = thirsty.players[name] + pl.thirst_factor = factor +end + +function thirsty.get_thirst_factor(player) + local name = player:get_player_name() + local pl = thirsty.players[name] + return pl.thirst_factor +end + +--[[ + +Main Loop (Tier 0) + +]] + +function thirsty.main_loop(dtime) + -- get thirsty + thirsty.time_next_tick = thirsty.time_next_tick - dtime + while thirsty.time_next_tick < 0.0 do + -- time for thirst + thirsty.time_next_tick = thirsty.time_next_tick + thirsty.config.tick_time + for _,player in ipairs(minetest.get_connected_players()) do + + if player:get_hp() <= 0 then + -- dead players don't get thirsty, or full for that matter :-P + break + end + + local name = player:get_player_name() + local pos = player:getpos() + local pl = thirsty.players[name] + local hydro = PPA.get_value(player, 'thirsty_hydro') + + -- how long have we been standing "here"? + -- (the node coordinates in X and Z should be enough) + local pos_hash = math.floor(pos.x) .. ':' .. math.floor(pos.z) + if pl.last_pos == pos_hash then + pl.time_in_pos = pl.time_in_pos + thirsty.config.tick_time + else + -- you moved! + pl.last_pos = pos_hash + pl.time_in_pos = 0.0 + end + local pl_standing = pl.time_in_pos > thirsty.config.stand_still_for_drink + local pl_afk = pl.time_in_pos > thirsty.config.stand_still_for_afk + --print("Standing: " .. (pl_standing and 'true' or 'false' ) .. ", AFK: " .. (pl_afk and 'true' or 'false')) + + pos.y = pos.y + 0.1 + local node = minetest.get_node(pos) + local drink_per_second = thirsty.config.regen_from_node[node.name] or 0 + + -- fountaining (uses pos, slight changes ok) + for k, fountain in pairs(thirsty.fountains) do + local dx = fountain.pos.x - pos.x + local dy = fountain.pos.y - pos.y + local dz = fountain.pos.z - pos.z + local dist2 = dx * dx + dy * dy + dz * dz + local fdist = fountain.level * thirsty.config.fountain_distance_per_level -- max 100 nodes radius + --print (string.format("Distance from %s (%d): %f out of %f", k, fountain.level, math.sqrt(dist2), fdist )) + if dist2 < fdist * fdist then + -- in range, drink as if standing (still) in water + drink_per_second = math.max(thirsty.config.regen_from_fountain or 0, drink_per_second) + pl_standing = true + break -- no need to check the other fountains + end + end + + -- amulets + -- TODO: I *guess* we need to optimize this, but I haven't + -- measured it yet. No premature optimizations! + local pl_inv = player:get_inventory() + local extractor_max = 0.0 + local injector_max = 0.0 + local container_not_full = nil + local container_not_empty = nil + local inv_main = player:get_inventory():get_list('main') + for i, itemstack in ipairs(inv_main) do + local name = itemstack:get_name() + local injector_this = thirsty.config.injection_for_item[name] + if injector_this and injector_this > injector_max then + injector_max = injector_this + end + local extractor_this = thirsty.config.extraction_for_item[name] + if extractor_this and extractor_this > extractor_max then + extractor_max = extractor_this + end + if thirsty.config.container_capacity[name] then + local wear = itemstack:get_wear() + -- can be both! + if wear == 0 or wear > 1 then + container_not_full = { i, itemstack } + end + if wear > 0 and wear < 65534 then + container_not_empty = { i, itemstack } + end + end + end + if extractor_max > 0.0 and container_not_full then + local i = container_not_full[1] + local itemstack = container_not_full[2] + local capacity = thirsty.config.container_capacity[itemstack:get_name()] + local wear = itemstack:get_wear() + if wear == 0 then wear = 65535.0 end + local drink = extractor_max * thirsty.config.tick_time + local drinkwear = drink / capacity * 65535.0 + wear = wear - drinkwear + if wear < 1 then wear = 1 end + itemstack:set_wear(wear) + player:get_inventory():set_stack("main", i, itemstack) + end + if injector_max > 0.0 and container_not_empty then + local i = container_not_empty[1] + local itemstack = container_not_empty[2] + local capacity = thirsty.config.container_capacity[itemstack:get_name()] + local wear = itemstack:get_wear() + if wear == 0 then wear = 65535.0 end + local drink = injector_max * thirsty.config.tick_time + local drink_missing = 20 - hydro + drink = math.max(math.min(drink, drink_missing), 0) + local drinkwear = drink / capacity * 65535.0 + wear = wear + drinkwear + if wear > 65534 then wear = 65534 end + itemstack:set_wear(wear) + thirsty.drink(player, drink, 20) + hydro = PPA.get_value(player, 'thirsty_hydro') + player:get_inventory():set_stack("main", i, itemstack) + end + + + if drink_per_second > 0 and pl_standing then + -- Drinking from the ground won't give you more than max + thirsty.drink(player, drink_per_second * thirsty.config.tick_time, 20) + --print("Raising hydration by "..(drink_per_second*thirsty.config.tick_time).." to "..PPA.get_value(player, 'thirsty_hydro')) + else + if not pl_afk then + -- only get thirsty if not AFK + local amount = thirsty.config.thirst_per_second * thirsty.config.tick_time * pl.thirst_factor + PPA.set_value(player, 'thirsty_hydro', hydro - amount) + hydro = PPA.get_value(player, 'thirsty_hydro') + --print("Lowering hydration by "..amount.." to "..hydro) + end + end + + + -- should we only update the hud on an actual change? + thirsty.hud_update(player, hydro) + + -- damage, if enabled + if minetest.setting_getbool("enable_damage") then + -- maybe not the best way to do this, but it does mean + -- we can do anything with one tick loop + if hydro <= 0.0 and not pl_afk then + pl.pending_dmg = pl.pending_dmg + thirsty.config.damage_per_second * thirsty.config.tick_time + --print("Pending damage at " .. pl.pending_dmg) + if pl.pending_dmg > 1.0 then + local dmg = math.floor(pl.pending_dmg) + pl.pending_dmg = pl.pending_dmg - dmg + player:set_hp( player:get_hp() - dmg ) + end + else + -- forget any pending damage when not thirsty + pl.pending_dmg = 0.0 + end + end + end -- for players + + -- check fountains for expiration + for k, fountain in pairs(thirsty.fountains) do + fountain.time_until_check = fountain.time_until_check - thirsty.config.tick_time + if fountain.time_until_check <= 0 then + -- remove fountain, the abm will set it again + --print("Removing fountain at " .. k) + thirsty.fountains[k] = nil + end + end + + end +end + +--[[ + +General handler + +Most tools, nodes and craftitems use the same code, so here it is: + +]] + +function thirsty.drink_handler(player, itemstack, node) + local pl = thirsty.players[player:get_player_name()] + local hydro = PPA.get_value(player, 'thirsty_hydro') + local old_hydro = hydro + + -- selectors, always true, to make the following code easier + local item_name = itemstack and itemstack:get_name() or ':' + local node_name = node and node.name or ':' + + if thirsty.config.node_drinkable[node_name] then + -- we found something to drink! + local cont_level = thirsty.config.drink_from_container[item_name] or 0 + local node_level = thirsty.config.drink_from_node[node_name] or 0 + -- drink until level + local level = math.max(cont_level, node_level) + --print("Drinking to level " .. level) + thirsty.drink(player, level, level) + + -- fill container, if applicable + if thirsty.config.container_capacity[item_name] then + --print("Filling a " .. item_name .. " to " .. thirsty.config.container_capacity[item_name]) + itemstack:set_wear(1) -- "looks full" + end + + elseif thirsty.config.container_capacity[item_name] then + -- drinking from a container + if itemstack:get_wear() ~= 0 then + local capacity = thirsty.config.container_capacity[item_name] + local hydro_missing = 20 - hydro; + if hydro_missing > 0 then + local wear_missing = hydro_missing / capacity * 65535.0; + local wear = itemstack:get_wear() + local new_wear = math.ceil(math.max(wear + wear_missing, 1)) + if (new_wear > 65534) then + wear_missing = 65534 - wear + new_wear = 65534 + end + itemstack:set_wear(new_wear) + if wear_missing > 0 then -- rounding glitches? + thirsty.drink(player, wear_missing * capacity / 65535.0, 20) + hydro = PPA.get_value(player, 'thirsty_hydro') + end + end + end + end + + -- update HUD if value changed + if hydro ~= old_hydro then + thirsty.hud_update(player, hydro) + end +end + +--[[ + +Adapters for drink_handler to on_use and on_rightclick slots. +These close over the next handler to call in a chain, if desired. + +]] + +function thirsty.on_use( old_on_use ) + return function(itemstack, player, pointed_thing) + local node = nil + if pointed_thing and pointed_thing.type == 'node' then + node = minetest.get_node(pointed_thing.under) + end + + thirsty.drink_handler(player, itemstack, node) + + -- call original on_use, if provided + if old_on_use ~= nil then + return old_on_use(itemstack, player, pointed_thing) + else + return itemstack + end + end +end + +function thirsty.on_rightclick( old_on_rightclick ) + return function(pos, node, player, itemstack, pointed_thing) + + thirsty.drink_handler(player, itemstack, node) + + -- call original on_rightclick, if provided + if old_on_rightclick ~= nil then + return old_on_rightclick(pos, node, player, itemstack, pointed_thing) + else + return itemstack + end + end +end + +--[[ + +Adapter to add "drink_handler" to any item (node, tool, craftitem). + +]] + +function thirsty.augment_item_for_drinking( itemname, level ) + local new_definition = {} + -- we need to be able to point at the water + new_definition.liquids_pointable = true + -- call closure generator with original on_use handler + new_definition.on_use = thirsty.on_use( + minetest.registered_items[itemname].on_use + ) + -- overwrite the node definition with almost the original + minetest.override_item(itemname, new_definition) + + -- add configuration settings + thirsty.config.drink_from_container[itemname] = level +end + +function thirsty.fountain_abm(pos, node) + local fountain_count = 0 + local water_count = 0 + local total_count = 0 + for y = 0, thirsty.config.fountain_height do + for x = -y, y do + for z = -y, y do + local n = minetest.get_node({ + x = pos.x + x, + y = pos.y - y + 1, -- start one *above* the fountain + z = pos.z + z + }) + if n then + --print(string.format("%s at %d:%d:%d", n.name, pos.x+x, pos.y-y+1, pos.z+z)) + total_count = total_count + 1 + local type = thirsty.config.fountain_type[n.name] or '' + if type == 'f' then + fountain_count = fountain_count + 1 + elseif type == 'w' then + water_count = water_count + 1 + end + end + end + end + end + local level = math.min(thirsty.config.fountain_max_level, math.min(fountain_count, water_count)) + --print(string.format("Fountain (%d): %d + %d / %d", level, fountain_count, water_count, total_count)) + thirsty.fountains[string.format("%d:%d:%d", pos.x, pos.y, pos.z)] = { + pos = { x=pos.x, y=pos.y, z=pos.z }, + level = level, + -- time until check is 20 seconds, or twice the average + -- time until the abm ticks again. Should be enough. + time_until_check = 20, + } +end diff --git a/mods/thirsty/hud.conf.no_hunger b/mods/thirsty/hud.conf.no_hunger new file mode 100644 index 0000000..df4b15d --- /dev/null +++ b/mods/thirsty/hud.conf.no_hunger @@ -0,0 +1,40 @@ +--[[ + +Better HUD config file, without Hunger mod. + +This file mirrors the default settings of the Better HUD mod, +except that it moves the "breath" bar upwards to make room +for the "thirst" bar. + +Use this config file as a starting point if you *don't* have the +Hunger mod enabled. + +For more information, see hud.conf.example in the mods/hud +directory. + +]] + +HUD_SB_SIZE = { x = 24, y = 24 } + +--[[ Layout: + + ARMOR | (AIR) + HEALTH | THIRST + +]] + +HUD_HEALTH_POS = { x = 0.5, y = 1 } +HUD_HEALTH_OFFSET = { x = -262, y = -87 } + +-- not used +HUD_HUNGER_POS = { x = 0.5, y = 1 } +HUD_HUNGER_OFFSET = { x = 15, y = -133 } + +HUD_AIR_POS = { x = 0.5, y = 1 } +HUD_AIR_OFFSET = { x = 15, y = -110 } + +HUD_ARMOR_POS = { x = 0.5, y = 1 } +HUD_ARMOR_OFFSET = { x = -262, y = -110 } + +HUD_THIRST_POS = { x = 0.5, y = 1 } +HUD_THIRST_OFFSET = { x = 15, y = -87 } diff --git a/mods/thirsty/hud.conf.with_hunger b/mods/thirsty/hud.conf.with_hunger new file mode 100644 index 0000000..6565c8d --- /dev/null +++ b/mods/thirsty/hud.conf.with_hunger @@ -0,0 +1,43 @@ +--[[ + +Better HUD config file, with Hunger mod. + +This file mirrors the default settings of the Better HUD mod, +except that it moves the "breath" bar upwards to make room +for the "thirst" bar. + +Use this config file as a starting point if you *do* have the +Hunger mod enabled. + +For more information, see hud.conf.example in the mods/hud +directory. + +]] + +HUD_SB_SIZE = { x = 24, y = 24 } + +--[[ Layout: + + (AIR) + ARMOR | THIRST + HEALTH | HUNGER + +]] + +HUD_HEALTH_POS = { x = 0.5, y = 1 } +HUD_HEALTH_OFFSET = { x = -262, y = -87 } + +-- At the time of writing, the Hunger mod contains code to swap +-- the positions of "hunger" and "air", so these positions are +-- "un-swapped"... +HUD_HUNGER_POS = { x = 0.5, y = 1 } +HUD_HUNGER_OFFSET = { x = 15, y = -133 } + +HUD_AIR_POS = { x = 0.5, y = 1 } +HUD_AIR_OFFSET = { x = 15, y = -87 } + +HUD_ARMOR_POS = { x = 0.5, y = 1 } +HUD_ARMOR_OFFSET = { x = -262, y = -110 } + +HUD_THIRST_POS = { x = 0.5, y = 1 } +HUD_THIRST_OFFSET = { x = 15, y = -110 } diff --git a/mods/thirsty/hud.lua b/mods/thirsty/hud.lua new file mode 100644 index 0000000..c7c2f2a --- /dev/null +++ b/mods/thirsty/hud.lua @@ -0,0 +1,87 @@ +--[[ + +HUD definitions for Thirsty + +Optionally from one of the supported mods + +Any hud needs to define the following functions: + +- thirsty.hud_init(player) + Initialize the HUD for a new player. + +- thirsty.hud_update(player, value) + Display the new value "value" for the given player. "value" is + a floating point number, not necessarily bounded. You can use the + "thirsty.hud_clamp(value)" function to get an integer between 0 + and 20. + +]] + +local PPA = thirsty.persistent_player_attributes + +function thirsty.hud_clamp(value) + if value < 0 then + return 0 + elseif value > 20 then + return 20 + else + return math.ceil(value) + end +end + +if minetest.get_modpath("hudbars") then + hb.register_hudbar('thirst', 0xffffff, "Hydration", { + bar = 'thirsty_hudbars_bar.png', + icon = 'thirsty_cup_100_16.png' + }, 20, 20, false) + function thirsty.hud_init(player) + hb.init_hudbar(player, 'thirst', + thirsty.hud_clamp(PPA.get_value(player, 'thirsty_hydro')), + 20, false) + end + function thirsty.hud_update(player, value) + hb.change_hudbar(player, 'thirst', thirsty.hud_clamp(value), 20) + end +elseif minetest.get_modpath("hud") then + -- default positions follow [hud] defaults + local position = HUD_THIRST_POS or { x=0.5, y=1 } + local offset = HUD_THIRST_OFFSET or { x=15, y=-133} -- above AIR + hud.register('thirst', { + hud_elem_type = "statbar", + position = position, + text = "thirsty_cup_100_24.png", + background = "thirsty_cup_0_24.png", + number = 20, + max = 20, + size = HUD_SB_SIZE, -- by default { x=24, y=24 }, + offset = offset, + }) + function thirsty.hud_init(player) + -- automatic by [hud] + end + function thirsty.hud_update(player, value) + hud.change_item(player, 'thirst', { + number = thirsty.hud_clamp(value) + }) + end +else + -- 'builtin' hud + function thirsty.hud_init(player) + -- above breath bar, for now + local name = player:get_player_name() + thirsty.players[name].hud_id = player:hud_add({ + hud_elem_type = "statbar", + position = { x=0.5, y=1 }, + text = "thirsty_cup_100_24.png", + number = thirsty.hud_clamp(PPA.get_value(player, 'thirsty_hydro')), + direction = 0, + size = { x=24, y=24 }, + offset = { x=25, y=-(48+24+16+32)}, + }) + end + function thirsty.hud_update(player, value) + local name = player:get_player_name() + local hud_id = thirsty.players[name].hud_id + player:hud_change(hud_id, 'number', thirsty.hud_clamp(value)) + end +end diff --git a/mods/thirsty/init.lua b/mods/thirsty/init.lua new file mode 100644 index 0000000..d52e6b1 --- /dev/null +++ b/mods/thirsty/init.lua @@ -0,0 +1,91 @@ +--[[ + +Thirsty mod [thirsty] +========================== + +A mod that adds a "thirst" mechanic, similar to hunger. + +Copyright (C) 2015 Ben Deutsch + +License +------- + +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 + +Terminology: "Thirst" vs. "hydration" +------------------------------------- + +"Thirst" is the absence of "hydration" (a term suggested by +everamzah on the Minetest forums, thanks!). The overall mechanic +is still called "thirst", but the visible bar is that of +"hydration", filled with "hydro points". + +]] + +-- the main module variable +thirsty = { + + -- Configuration variables + config = { + -- configuration in thirsty.default.conf + }, + + -- the players' values + players = { + --[[ + name = { + last_pos = '-10:3', + time_in_pos = 0.0, + pending_dmg = 0.0, + thirst_factor = 1.0, + } + ]] + }, + + -- water fountains + fountains = { + --[[ + x:y:z = { + pos = { x=x, y=y, z=z }, + level = 4, + time_until_check = 20, + -- something about times + } + ]] + }, + + -- general settings + time_next_tick = 0.0, +} +local M = thirsty + +dofile(minetest.get_modpath('thirsty')..'/configuration.lua') +local C = M.config + +dofile(minetest.get_modpath('thirsty')..'/persistent_player_attributes.lua') +local PPA = M.persistent_player_attributes + +thirsty.time_next_tick = thirsty.config.tick_time + +dofile(minetest.get_modpath('thirsty')..'/hud.lua') +dofile(minetest.get_modpath('thirsty')..'/functions.lua') + +minetest.register_on_joinplayer(thirsty.on_joinplayer) +minetest.register_on_dieplayer(thirsty.on_dieplayer) +minetest.register_globalstep(thirsty.main_loop) + +dofile(minetest.get_modpath('thirsty')..'/components.lua') + diff --git a/mods/thirsty/persistent_player_attributes.lua b/mods/thirsty/persistent_player_attributes.lua new file mode 100644 index 0000000..78c69e7 --- /dev/null +++ b/mods/thirsty/persistent_player_attributes.lua @@ -0,0 +1,111 @@ +--[[ + +Persistent player attributes + +]] + +-- change this to inject into other module +local M = thirsty + +M.persistent_player_attributes = {} +local PPA = M.persistent_player_attributes + +--[[ +Helper functions that take care of the conversions *and* the +clamping for us +]] + +local function _count_for_val(value, def) + local count = math.floor((value - def.min) / (def.max - def.min) * 65535) + if count < 0 then count = 0 end + if count > 65535 then count = 65535 end + return count +end +local function _val_for_count(count, def) + local value = count / 65535 * (def.max - def.min) + def.min + if value < def.min then value = def.min end + if value > def.max then value = def.max end + return value +end +-- end helper functions + +-- the stash of registered attributes + +PPA.defs = {--[[ + name = { + name = "mymod_attr1", + min = 0, + max = 10, + default = 5, + }, +]]} + +PPA.read_cache = {--[[ + player_name = { + attr1 = value1, + attr2 = value2, + }, +]]} + +--[[ +How to register a new attribute, with named parameters: + PPA.register({ name = "mymod_attr1", min = 0, ... }) +]] + +PPA.register = function(def) + PPA.defs[def.name] = { + name = def.name, + min = def.min or 0.0, + max = def.max or 1.0, + default = def.default or def.min or 0.0, + } +end + +-- The on_joinplayer handler + +PPA.on_joinplayer = function(player) + local inv = player:get_inventory() + local player_name = player:get_player_name() + PPA.read_cache[player_name] = {} + for name, def in pairs(PPA.defs) do + inv:set_size(name, 1) + if inv:is_empty(name) then + -- set default value + inv:set_stack(name, 1, ItemStack({ name = ":", count = _count_for_val(def.default, def) })) + -- cache default value + PPA.read_cache[player_name][name] = def.default + end + end +end + +minetest.register_on_joinplayer(PPA.on_joinplayer) + + +--[[ get an attribute, procedural style: + local attr1 = PPA.get_value(player, "mymod_attr1") +]] + +PPA.get_value = function(player, name) + local player_name = player:get_player_name() + if PPA.read_cache[player_name][name] == nil then + local def = PPA.defs[name] + local inv = player:get_inventory() + local count = inv:get_stack(name, 1):get_count() + PPA.read_cache[player_name][name] = _val_for_count(count, def) + end + return PPA.read_cache[player_name][name] +end + +--[[ set an attribute, procedural style: + PPA.set_value(player, "mymod_attr1", attr1) +]] + +PPA.set_value = function(player, name, value) + local def = PPA.defs[name] + local inv = player:get_inventory() + local player_name = player:get_player_name() + if value > def.max then value = def.max end + if value < def.min then value = def.min end + PPA.read_cache[player_name][name] = value + inv:set_stack(name, 1, ItemStack({ name = ":", count = _count_for_val(value, def) })) +end diff --git a/mods/thirsty/sounds/drink.ogg b/mods/thirsty/sounds/drink.ogg new file mode 100644 index 0000000..1bbb842 Binary files /dev/null and b/mods/thirsty/sounds/drink.ogg differ diff --git a/mods/thirsty/textures/src/bowl.svg b/mods/thirsty/textures/src/bowl.svg new file mode 100644 index 0000000..1085aa3 --- /dev/null +++ b/mods/thirsty/textures/src/bowl.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/bronze_canteen.svg b/mods/thirsty/textures/src/bronze_canteen.svg new file mode 100644 index 0000000..3a33e99 --- /dev/null +++ b/mods/thirsty/textures/src/bronze_canteen.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/cup_0.svg b/mods/thirsty/textures/src/cup_0.svg new file mode 100644 index 0000000..037ec10 --- /dev/null +++ b/mods/thirsty/textures/src/cup_0.svg @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/cup_100.svg b/mods/thirsty/textures/src/cup_100.svg new file mode 100644 index 0000000..7a081b2 --- /dev/null +++ b/mods/thirsty/textures/src/cup_100.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/cup_50.svg b/mods/thirsty/textures/src/cup_50.svg new file mode 100644 index 0000000..fc380fe --- /dev/null +++ b/mods/thirsty/textures/src/cup_50.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/drinkfount_bottom.svg b/mods/thirsty/textures/src/drinkfount_bottom.svg new file mode 100644 index 0000000..189a693 --- /dev/null +++ b/mods/thirsty/textures/src/drinkfount_bottom.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/mods/thirsty/textures/src/drinkfount_side.svg b/mods/thirsty/textures/src/drinkfount_side.svg new file mode 100644 index 0000000..d0b3f4c --- /dev/null +++ b/mods/thirsty/textures/src/drinkfount_side.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/drinkfount_top.svg b/mods/thirsty/textures/src/drinkfount_top.svg new file mode 100644 index 0000000..a9b1993 --- /dev/null +++ b/mods/thirsty/textures/src/drinkfount_top.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/extractor.svg b/mods/thirsty/textures/src/extractor.svg new file mode 100644 index 0000000..f4c1112 --- /dev/null +++ b/mods/thirsty/textures/src/extractor.svg @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/injector.svg b/mods/thirsty/textures/src/injector.svg new file mode 100644 index 0000000..0969a78 --- /dev/null +++ b/mods/thirsty/textures/src/injector.svg @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/steel_canteen.svg b/mods/thirsty/textures/src/steel_canteen.svg new file mode 100644 index 0000000..89f2f01 --- /dev/null +++ b/mods/thirsty/textures/src/steel_canteen.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/waterextender_side.svg b/mods/thirsty/textures/src/waterextender_side.svg new file mode 100644 index 0000000..fdf6326 --- /dev/null +++ b/mods/thirsty/textures/src/waterextender_side.svg @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/mods/thirsty/textures/src/waterextender_top.svg b/mods/thirsty/textures/src/waterextender_top.svg new file mode 100644 index 0000000..5f80814 --- /dev/null +++ b/mods/thirsty/textures/src/waterextender_top.svg @@ -0,0 +1,309 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/waterfountain_side.svg b/mods/thirsty/textures/src/waterfountain_side.svg new file mode 100644 index 0000000..410234e --- /dev/null +++ b/mods/thirsty/textures/src/waterfountain_side.svg @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/src/waterfountain_top.svg b/mods/thirsty/textures/src/waterfountain_top.svg new file mode 100644 index 0000000..4db3923 --- /dev/null +++ b/mods/thirsty/textures/src/waterfountain_top.svg @@ -0,0 +1,1051 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mods/thirsty/textures/thirsty_bowl_16.png b/mods/thirsty/textures/thirsty_bowl_16.png new file mode 100644 index 0000000..c7b8df6 Binary files /dev/null and b/mods/thirsty/textures/thirsty_bowl_16.png differ diff --git a/mods/thirsty/textures/thirsty_bowl_32.png b/mods/thirsty/textures/thirsty_bowl_32.png new file mode 100644 index 0000000..147fa86 Binary files /dev/null and b/mods/thirsty/textures/thirsty_bowl_32.png differ diff --git a/mods/thirsty/textures/thirsty_bowl_64.png b/mods/thirsty/textures/thirsty_bowl_64.png new file mode 100644 index 0000000..c8de654 Binary files /dev/null and b/mods/thirsty/textures/thirsty_bowl_64.png differ diff --git a/mods/thirsty/textures/thirsty_bronze_canteen_16.png b/mods/thirsty/textures/thirsty_bronze_canteen_16.png new file mode 100644 index 0000000..6c1555c Binary files /dev/null and b/mods/thirsty/textures/thirsty_bronze_canteen_16.png differ diff --git a/mods/thirsty/textures/thirsty_bronze_canteen_32.png b/mods/thirsty/textures/thirsty_bronze_canteen_32.png new file mode 100644 index 0000000..1ec8c9f Binary files /dev/null and b/mods/thirsty/textures/thirsty_bronze_canteen_32.png differ diff --git a/mods/thirsty/textures/thirsty_cup_0_16.png b/mods/thirsty/textures/thirsty_cup_0_16.png new file mode 100644 index 0000000..9c080ba Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_0_16.png differ diff --git a/mods/thirsty/textures/thirsty_cup_0_24.png b/mods/thirsty/textures/thirsty_cup_0_24.png new file mode 100644 index 0000000..aea96a3 Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_0_24.png differ diff --git a/mods/thirsty/textures/thirsty_cup_0_32.png b/mods/thirsty/textures/thirsty_cup_0_32.png new file mode 100644 index 0000000..105a2ef Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_0_32.png differ diff --git a/mods/thirsty/textures/thirsty_cup_100.png b/mods/thirsty/textures/thirsty_cup_100.png new file mode 100644 index 0000000..a2b9e1c Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_100.png differ diff --git a/mods/thirsty/textures/thirsty_cup_100_16.png b/mods/thirsty/textures/thirsty_cup_100_16.png new file mode 100644 index 0000000..a2b9e1c Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_100_16.png differ diff --git a/mods/thirsty/textures/thirsty_cup_100_24.png b/mods/thirsty/textures/thirsty_cup_100_24.png new file mode 100644 index 0000000..ee283b8 Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_100_24.png differ diff --git a/mods/thirsty/textures/thirsty_cup_100_32.png b/mods/thirsty/textures/thirsty_cup_100_32.png new file mode 100644 index 0000000..effe6fd Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_100_32.png differ diff --git a/mods/thirsty/textures/thirsty_cup_50_16.png b/mods/thirsty/textures/thirsty_cup_50_16.png new file mode 100644 index 0000000..64f7581 Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_50_16.png differ diff --git a/mods/thirsty/textures/thirsty_cup_50_24.png b/mods/thirsty/textures/thirsty_cup_50_24.png new file mode 100644 index 0000000..c5c7c69 Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_50_24.png differ diff --git a/mods/thirsty/textures/thirsty_cup_50_32.png b/mods/thirsty/textures/thirsty_cup_50_32.png new file mode 100644 index 0000000..ac33d2c Binary files /dev/null and b/mods/thirsty/textures/thirsty_cup_50_32.png differ diff --git a/mods/thirsty/textures/thirsty_drinkfount_bottom.png b/mods/thirsty/textures/thirsty_drinkfount_bottom.png new file mode 100644 index 0000000..1dcaf56 Binary files /dev/null and b/mods/thirsty/textures/thirsty_drinkfount_bottom.png differ diff --git a/mods/thirsty/textures/thirsty_drinkfount_side.png b/mods/thirsty/textures/thirsty_drinkfount_side.png new file mode 100644 index 0000000..5b568e3 Binary files /dev/null and b/mods/thirsty/textures/thirsty_drinkfount_side.png differ diff --git a/mods/thirsty/textures/thirsty_drinkfount_top.png b/mods/thirsty/textures/thirsty_drinkfount_top.png new file mode 100644 index 0000000..2440cbd Binary files /dev/null and b/mods/thirsty/textures/thirsty_drinkfount_top.png differ diff --git a/mods/thirsty/textures/thirsty_extractor.png b/mods/thirsty/textures/thirsty_extractor.png new file mode 100644 index 0000000..1c32fee Binary files /dev/null and b/mods/thirsty/textures/thirsty_extractor.png differ diff --git a/mods/thirsty/textures/thirsty_hudbars_bar.png b/mods/thirsty/textures/thirsty_hudbars_bar.png new file mode 100644 index 0000000..7e57b4a Binary files /dev/null and b/mods/thirsty/textures/thirsty_hudbars_bar.png differ diff --git a/mods/thirsty/textures/thirsty_injector.png b/mods/thirsty/textures/thirsty_injector.png new file mode 100644 index 0000000..d75621e Binary files /dev/null and b/mods/thirsty/textures/thirsty_injector.png differ diff --git a/mods/thirsty/textures/thirsty_steel_canteen_16.png b/mods/thirsty/textures/thirsty_steel_canteen_16.png new file mode 100644 index 0000000..abcc2a7 Binary files /dev/null and b/mods/thirsty/textures/thirsty_steel_canteen_16.png differ diff --git a/mods/thirsty/textures/thirsty_steel_canteen_32.png b/mods/thirsty/textures/thirsty_steel_canteen_32.png new file mode 100644 index 0000000..024daf0 Binary files /dev/null and b/mods/thirsty/textures/thirsty_steel_canteen_32.png differ diff --git a/mods/thirsty/textures/thirsty_waterextender_side.png b/mods/thirsty/textures/thirsty_waterextender_side.png new file mode 100644 index 0000000..ee8ef5a Binary files /dev/null and b/mods/thirsty/textures/thirsty_waterextender_side.png differ diff --git a/mods/thirsty/textures/thirsty_waterextender_top.png b/mods/thirsty/textures/thirsty_waterextender_top.png new file mode 100644 index 0000000..a68aa44 Binary files /dev/null and b/mods/thirsty/textures/thirsty_waterextender_top.png differ diff --git a/mods/thirsty/textures/thirsty_waterfountain_side.png b/mods/thirsty/textures/thirsty_waterfountain_side.png new file mode 100644 index 0000000..310966a Binary files /dev/null and b/mods/thirsty/textures/thirsty_waterfountain_side.png differ diff --git a/mods/thirsty/textures/thirsty_waterfountain_top.png b/mods/thirsty/textures/thirsty_waterfountain_top.png new file mode 100644 index 0000000..b4f4529 Binary files /dev/null and b/mods/thirsty/textures/thirsty_waterfountain_top.png differ diff --git a/mods/thirsty/thirsty.default.conf b/mods/thirsty/thirsty.default.conf new file mode 100644 index 0000000..6ee2149 --- /dev/null +++ b/mods/thirsty/thirsty.default.conf @@ -0,0 +1,193 @@ +--[[ + +Thirsty configuration +----------------------------- + +To modify the configuration without fear of it being overwritten +by an update of this mod, copy this file to + + thirsty.conf + +in the mod directory or the directory of a specific world, and +modify away. The mod will read configuration first from the +default file, then from the mod directory copy, and finally from +the world directory copy. + +The settings from these locations will be merged together in an +intelligent fashion. Normal entries in the config table will get +overwritten. Table entries (those with {} at the left of the =) +will get merged together, unless the special table entry 'CLEAR' +is given, with a true value. This merging does not go deeper than +one level, but this should be sufficient. + +]] + +thirsty.config = { + + --[[ The period, in seconds, in which this mod updates values. + Changing this will not directly affect other values, but + may change computation load or accuracy. + ]] + tick_time = 1, + + ------------------------------------------- + -- Tier 0: basics, and standing in water -- + ------------------------------------------- + + -- Thirst per second (full hydration is 20 hydro points) + thirst_per_second = 1.0 / 60.0, + + -- Damage per second if completely thirsty / out of hydration + damage_per_second = 1.0 / 10.0, + + --[[ How long in seconds you have to remain still to drink + from standing in water + ]] + stand_still_for_drink = 1.0, + + --[[ How long in seconds of not moving before a player is deemed + AFK (away from keyboard), such players no longer get thirsty + or damaged + ]] + stand_still_for_afk = 120.0, -- 2 Minutes + + --[[ regen_from_node is a table defining, for each node type, the + amount of hydro per second a player drinks by standing in it. + Assign 0 to stop a player from drinking from this node type. + ]] + regen_from_node = { + ['default:water_source'] = 0.5, + ['default:water_flowing'] = 0.5, + ['default:river_water_source'] = 0.5, + ['default:river_water_flowing'] = 0.5, + }, + + --------------------------------- + -- Tier 1: drinking with bowls -- + --------------------------------- + + --[[ node_drinkable: which nodes can we drink from, given a + container (a cup, a bowl etc.) + ]] + node_drinkable = { + ['default:water_source'] = true, + ['default:water_flowing'] = true, + ['default:river_water_source'] = true, + ['default:river_water_flowing'] = true, + ['thirsty:drinking_fountain'] = true, + }, + + --[[ drink_from_container: the hydration you drink to when + using each container. Remember that "full hydration" is + 20 points; these should be more to reward using them. + ]] + drink_from_container = { + ['thirsty:wooden_bowl'] = 25, + ['thirsty:steel_canteen'] = 25, + ['thirsty:bronze_canteen'] = 25, + }, + + ---------------------- + -- Tier 2: canteens -- + ---------------------- + + --[[ container_capacity: how much hydration each container + (canteens) can hold. Remember that "full hydration" is + 20 points + ]] + container_capacity = { + ['thirsty:steel_canteen'] = 40, + ['thirsty:bronze_canteen'] = 60, + }, + + -------------------------------- + -- Tier 3: drinking fountains -- + -------------------------------- + + --[[ drink_from_node: if you use one of these node + (i.e. fountains), even without cups or bowls, how full + will you get? + ]] + drink_from_node = { + ['thirsty:drinking_fountain'] = 30, + }, + + ------------------------------------- + -- Tier 4: free-standing fountains -- + ------------------------------------- + + --[[ fountain_type: when scanning the surroundings of fountains, + which nodes are "fountains" and which are "water"? You need + at least one "fountain" and one "water" per fountain level. + ]] + fountain_type = { + ['thirsty:water_fountain'] = 'f', + ['thirsty:water_extender'] = 'f', + ['default:water_source'] = 'w', + ['default:water_flowing'] = 'w', + ['default:river_water_source'] = 'w', + ['default:river_water_flowing'] = 'w', + }, + + --[[ Regeneration from being within a fountain's radius; see also + regen_from_node (it's as if you're standing in water) + ]] + regen_from_fountain = 0.5, + + -- How far should the fountain scanning pyramid go? + fountain_height = 4, + + -- The max level of a fountain + fountain_max_level = 20, + + --[[ How many nodes away can you still benefit from a fountain, + per fountain level + ]] + fountain_distance_per_level = 5, + + --------------------- + -- Tier 5: amulets -- + --------------------- + + --[[ How much hydration does a given item *extract* + (pull out of the air) + ]] + extraction_for_item = { + ['thirsty:extractor']= 0.6, + }, + + --[[ How much hydration does a given item *inject* + (fill you up with) + ]] + injection_for_item = { + ['thirsty:injector'] = 0.5, + }, + + --------------------------------------- + -- Toggle node and craft definitions -- + --------------------------------------- + + --[[ These flags enable or disable the predefined components + included in this mod. They do *not* enable or disable + the functionality. + ]] + + -- Should we augment the vessels from the "vessels" mod? + register_vessels = true, + + -- Add the wooden bowl and crafting recipe? + register_bowl = true, + + -- Add the canteens and crafting recipes? + register_canteens = true, + + -- Add the drinking fountain and crafting recipes? + register_drinking_fountain = true, + + -- Add the fountain and extenders and crafting recipes? + register_fountains = true, + + -- Add the amulets (extractor / injector) and crafting recipes? + register_amulets = true, + +} diff --git a/mods/tnt/README.txt b/mods/tnt/README.txt new file mode 100644 index 0000000..4e74841 --- /dev/null +++ b/mods/tnt/README.txt @@ -0,0 +1,44 @@ +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/tnt/depends.txt b/mods/tnt/depends.txt new file mode 100644 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 100644 index 0000000..d12e814 --- /dev/null +++ b/mods/tnt/init.lua @@ -0,0 +1,663 @@ +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, 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: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", + 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 + minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) + 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"} +}) + +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(), + 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, +}) diff --git a/mods/tnt/license.txt b/mods/tnt/license.txt new file mode 100644 index 0000000..210f2bd --- /dev/null +++ b/mods/tnt/license.txt @@ -0,0 +1,65 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2014-2016 PilzAdam +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2016 sofar (sofar@foo-projects.org) +Copyright (C) 2014-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2014-2016 BlockMen +Copyright (C) 2014-2016 ShadowNinja +Copyright (C) 2015-2016 Wuzzy +Copyright (C) 2016 sofar (sofar@foo-projects.org) + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/tnt/sounds/tnt_explode.ogg b/mods/tnt/sounds/tnt_explode.ogg new file mode 100644 index 0000000..a414ea0 Binary files /dev/null and b/mods/tnt/sounds/tnt_explode.ogg differ diff --git a/mods/tnt/sounds/tnt_gunpowder_burning.ogg b/mods/tnt/sounds/tnt_gunpowder_burning.ogg new file mode 100644 index 0000000..5c5bfaf Binary files /dev/null and b/mods/tnt/sounds/tnt_gunpowder_burning.ogg differ diff --git a/mods/tnt/sounds/tnt_ignite.ogg b/mods/tnt/sounds/tnt_ignite.ogg new file mode 100644 index 0000000..199f206 Binary files /dev/null and b/mods/tnt/sounds/tnt_ignite.ogg differ diff --git a/mods/tnt/textures/tnt_blast.png b/mods/tnt/textures/tnt_blast.png new file mode 100644 index 0000000..bbb1096 Binary files /dev/null and b/mods/tnt/textures/tnt_blast.png differ diff --git a/mods/tnt/textures/tnt_boom.png b/mods/tnt/textures/tnt_boom.png new file mode 100644 index 0000000..c848bfc Binary files /dev/null and b/mods/tnt/textures/tnt_boom.png differ diff --git a/mods/tnt/textures/tnt_bottom.png b/mods/tnt/textures/tnt_bottom.png new file mode 100644 index 0000000..95f66cb Binary files /dev/null and b/mods/tnt/textures/tnt_bottom.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png new file mode 100644 index 0000000..a901f7b Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_crossing_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png new file mode 100644 index 0000000..bc01806 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_curved_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png new file mode 100644 index 0000000..c860ace Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_straight_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png new file mode 100644 index 0000000..a556072 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_burning_t_junction_animated.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_crossing.png b/mods/tnt/textures/tnt_gunpowder_crossing.png new file mode 100644 index 0000000..916c84e Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_crossing.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_curved.png b/mods/tnt/textures/tnt_gunpowder_curved.png new file mode 100644 index 0000000..cb8b4ea Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_curved.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_inventory.png b/mods/tnt/textures/tnt_gunpowder_inventory.png new file mode 100644 index 0000000..105a2d2 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_inventory.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_straight.png b/mods/tnt/textures/tnt_gunpowder_straight.png new file mode 100644 index 0000000..8ab0e3c Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_straight.png differ diff --git a/mods/tnt/textures/tnt_gunpowder_t_junction.png b/mods/tnt/textures/tnt_gunpowder_t_junction.png new file mode 100644 index 0000000..ac997a7 Binary files /dev/null and b/mods/tnt/textures/tnt_gunpowder_t_junction.png differ diff --git a/mods/tnt/textures/tnt_side.png b/mods/tnt/textures/tnt_side.png new file mode 100644 index 0000000..d303473 Binary files /dev/null and b/mods/tnt/textures/tnt_side.png differ diff --git a/mods/tnt/textures/tnt_smoke.png b/mods/tnt/textures/tnt_smoke.png new file mode 100644 index 0000000..488b50f Binary files /dev/null and b/mods/tnt/textures/tnt_smoke.png differ diff --git a/mods/tnt/textures/tnt_top.png b/mods/tnt/textures/tnt_top.png new file mode 100644 index 0000000..31b807c Binary files /dev/null and b/mods/tnt/textures/tnt_top.png differ diff --git a/mods/tnt/textures/tnt_top_burning.png b/mods/tnt/textures/tnt_top_burning.png new file mode 100644 index 0000000..fc0d490 Binary files /dev/null and b/mods/tnt/textures/tnt_top_burning.png differ diff --git a/mods/tnt/textures/tnt_top_burning_animated.png b/mods/tnt/textures/tnt_top_burning_animated.png new file mode 100644 index 0000000..18a270f Binary files /dev/null and b/mods/tnt/textures/tnt_top_burning_animated.png differ diff --git a/mods/toolsonly/depends.txt b/mods/toolsonly/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/toolsonly/init.lua b/mods/toolsonly/init.lua new file mode 100644 index 0000000..8074ba3 --- /dev/null +++ b/mods/toolsonly/init.lua @@ -0,0 +1,40 @@ +local toolsonly = false +local shortrange = true +local lowstack = false +local maxstack = 20 +local smallinv = true +local invsize = 16 + +local function add_toolsonly() + for itemstring, def in pairs(minetest.registered_nodes) do + if def.groups.oddly_breakable_by_hand then def.groups.oddly_breakable_by_hand = nil end + if not def.groups.level and not def.groups.dig_immediate then def.groups.level = 2 end + minetest.override_item(itemstring, {groups = def.groups }) + end +end + +local function add_shortrange() + minetest.override_item("", {range = 3,}) +end + +local function add_lowstack() + for itemstring, def in pairs(minetest.registered_items) do + minetest.override_item(itemstring, {stack_max = maxstack}) + end +end + +if toolsonly then + minetest.after(0, add_toolsonly) +end +if shortrange then + minetest.after(0, add_shortrange) +end +if lowstack then + minetest.after(0, add_lowstack) +end +if smallinv then + minetest.register_on_joinplayer(function(player) + local player_inv = player:get_inventory() + player_inv:set_size("main", invsize) + end) +end \ No newline at end of file diff --git a/mods/unified_inventory/.gitignore b/mods/unified_inventory/.gitignore new file mode 100644 index 0000000..5236e1e --- /dev/null +++ b/mods/unified_inventory/.gitignore @@ -0,0 +1,2 @@ +*~ + diff --git a/mods/unified_inventory/README.md b/mods/unified_inventory/README.md new file mode 100644 index 0000000..1de7256 --- /dev/null +++ b/mods/unified_inventory/README.md @@ -0,0 +1,61 @@ +Unified inventory +================= + +Unified Inventory replaces the default survival and creative inventory. +It adds a nicer interface and a number of features, such as a crafting guide. + +License +======= + +Copyright (C) 2012-2014 Maciej Kasatkin (RealBadAngel) + +Unified inventory code is licensed under the GNU LGPLv2+. + +Licenses for textures: + +VanessaE: (CC-BY-4.0) + * `ui_group.png` + +Tango Project: (Public Domain, CC-BY-4.0) + * [`ui_reset_icon.png`](https://commons.wikimedia.org/wiki/File:Edit-clear.svg) + * [`ui_doubleleft_icon.png`](http://commons.wikimedia.org/wiki/File:Media-seek-backward.svg) + * [`ui_doubleright_icon.png`](http://commons.wikimedia.org/wiki/File:Media-seek-forward.svg) + * [`ui_left_icon.png` / `ui_right_icon.png`](http://commons.wikimedia.org/wiki/File:Media-playback-start.svg) + * [`ui_skip_backward_icon.png`](http://commons.wikimedia.org/wiki/File:Media-skip-backward.svg) + * [`ui_skip_forward_icon.png`](http://commons.wikimedia.org/wiki/File:Media-skip-forward.svg) + +From http://www.clker.com (Public Domain, CC-BY-4.0): + * [`bags_small.png`](http://www.clker.com/clipart-moneybag-empty.html) + * [`bags_medium.png`](http://www.clker.com/clipart-backpack-1.html) + * [`bags_large.png` / `ui_bags_icon.png`](http://www.clker.com/clipart-backpack-green-brown.html) + * `ui_trash_icon.png`: and + * [`ui_search_icon.png`](http://www.clker.com/clipart-24887.html) + * [`ui_off_icon.png` / `ui_on_icon.png`](http://www.clker.com/clipart-on-off-switches.html) + * [`ui_waypoints_icon.png`](http://www.clker.com/clipart-map-pin-red.html) + * [`ui_circular_arrows_icon.png`](http://www.clker.com/clipart-circular-arrow-pattern.html) + * [`ui_pencil_icon.pnc`](http://www.clker.com/clipart-2256.html) + * [`ui_waypoint_set_icon.png`](http://www.clker.com/clipart-larger-flag.html) + +Everaldo Coelho (YellowIcon) (LGPL v2.1+): + * [`ui_craftguide_icon.png` / `ui_craft_icon.png`](http://commons.wikimedia.org/wiki/File:Advancedsettings.png) + +Gregory H. Revera: (CC-BY-SA 3.0) + * [`ui_moon_icon.png`](http://commons.wikimedia.org/wiki/File:FullMoon2010.jpg) + +Thomas Bresson: (CC-BY 3.0) + * [`ui_sun_icon.png`](http://commons.wikimedia.org/wiki/File:2012-10-13_15-29-35-sun.jpg) + +Fibonacci: (Public domain, CC-BY 4.0) + * [`ui_xyz_off_icon.png`](http://commons.wikimedia.org/wiki/File:No_sign.svg) + +Gregory Maxwell: (Public domain, CC-BY 4.0) + * [`ui_ok_icon.png`](http://commons.wikimedia.org/wiki/File:Yes_check.svg) + +Adrien Facélina: (LGPL v2.1+) + * [`inventory_plus_worldedit_gui.png`](http://commons.wikimedia.org/wiki/File:Erioll_world_2.svg) + +Other files from Wikimedia Commons: + * [`ui_gohome_icon.png` / `ui_home_icon.png` / `ui_sethome_icon.png`](http://commons.wikimedia.org/wiki/File:Home_256x256.png) (GPL v2+) + +RealBadAngel: (CC-BY-4.0) + * Everything else. \ No newline at end of file diff --git a/mods/unified_inventory/api.lua b/mods/unified_inventory/api.lua new file mode 100644 index 0000000..f6afec5 --- /dev/null +++ b/mods/unified_inventory/api.lua @@ -0,0 +1,308 @@ +local S = unified_inventory.gettext +local F = minetest.formspec_escape + +-- Create detached creative inventory after loading all mods +minetest.after(0.01, function() + local rev_aliases = {} + for source, target in pairs(minetest.registered_aliases) do + if not rev_aliases[target] then rev_aliases[target] = {} end + table.insert(rev_aliases[target], source) + end + unified_inventory.items_list = {} + for name, def in pairs(minetest.registered_items) do + if (not def.groups.not_in_creative_inventory or + def.groups.not_in_creative_inventory == 0) and + def.description and def.description ~= "" then + table.insert(unified_inventory.items_list, name) + local all_names = rev_aliases[name] or {} + table.insert(all_names, name) + for _, name in ipairs(all_names) do + local recipes = minetest.get_all_craft_recipes(name) + if recipes then + for _, recipe in ipairs(recipes) do + + local unknowns + + for _,chk in pairs(recipe.items) do + local groupchk = string.find(chk, "group:") + if (not groupchk and not minetest.registered_items[chk]) + or (groupchk and not unified_inventory.get_group_item(string.gsub(chk, "group:", "")).item) + or minetest.get_item_group(chk, "not_in_craft_guide") ~= 0 then + unknowns = true + end + end + + if not unknowns then + unified_inventory.register_craft(recipe) + end + end + end + end + end + end + table.sort(unified_inventory.items_list) + unified_inventory.items_list_size = #unified_inventory.items_list + print("Unified Inventory. inventory size: "..unified_inventory.items_list_size) + for _, name in ipairs(unified_inventory.items_list) do + local def = minetest.registered_items[name] + -- Simple drops + if type(def.drop) == "string" then + local dstack = ItemStack(def.drop) + if not dstack:is_empty() and dstack:get_name() ~= name then + unified_inventory.register_craft({ + type = "digging", + items = {name}, + output = def.drop, + width = 0, + }) + + end + -- Complex drops. Yes, it's really complex! + elseif type(def.drop) == "table" then + --[[ Extract single items from the table and save them into dedicated tables + to register them later, in order to avoid duplicates. These tables counts + the total number of guaranteed drops and drops by chance (“maybes”) for each item. + For “maybes”, the final count is the theoretical maximum number of items, not + neccessarily the actual drop count. ]] + local drop_guaranteed = {} + local drop_maybe = {} + -- This is for catching an obscure corner case: If the top items table has + -- only items with rarity = 1, but max_items is set, then only the first + -- max_items will be part of the drop, any later entries are logically + -- impossible, so this variable is for keeping track of this + local max_items_left = def.drop.max_items + -- For checking whether we still encountered only guaranteed only so far; + -- for the first “maybe” item it will become false which will cause ALL + -- later items to be considered “maybes”. + -- A common idiom is: + -- { max_items 1, { items = { + -- { items={"example:1"}, rarity = 5 }, + -- { items={"example:2"}, rarity = 1 }, }}} + -- example:2 must be considered a “maybe” because max_items is set and it + -- appears after a “maybe” + local max_start = true + -- Let's iterate through the items madness! + -- Handle invalid drop entries gracefully. + local drop_items = def.drop.items or { } + for i=1,#drop_items do + if max_items_left ~= nil and max_items_left <= 0 then break end + local itit = drop_items[i] + for j=1,#itit.items do + local dstack = ItemStack(itit.items[j]) + if not dstack:is_empty() and dstack:get_name() ~= name then + local dname = dstack:get_name() + local dcount = dstack:get_count() + -- Guaranteed drops AND we are not yet in “maybe mode” + if #itit.items == 1 and itit.rarity == 1 and max_start then + if drop_guaranteed[dname] == nil then + drop_guaranteed[dname] = 0 + end + drop_guaranteed[dname] = drop_guaranteed[dname] + dcount + + if max_items_left ~= nil then + max_items_left = max_items_left - 1 + if max_items_left <= 0 then break end + end + -- Drop was a “maybe” + else + if max_items_left ~= nil then max_start = false end + if drop_maybe[dname] == nil then + drop_maybe[dname] = 0 + end + drop_maybe[dname] = drop_maybe[dname] + dcount + end + end + end + end + for itemstring, count in pairs(drop_guaranteed) do + unified_inventory.register_craft({ + type = "digging", + items = {name}, + output = itemstring .. " " .. count, + width = 0, + }) + end + for itemstring, count in pairs(drop_maybe) do + unified_inventory.register_craft({ + type = "digging_chance", + items = {name}, + output = itemstring .. " " .. count, + width = 0, + }) + end + end + end + for _, recipes in pairs(unified_inventory.crafts_for.recipe) do + for _, recipe in ipairs(recipes) do + local ingredient_items = {} + for _, spec in pairs(recipe.items) do + local matches_spec = unified_inventory.canonical_item_spec_matcher(spec) + for _, name in ipairs(unified_inventory.items_list) do + if matches_spec(name) then + ingredient_items[name] = true + end + end + end + for name, _ in pairs(ingredient_items) do + if unified_inventory.crafts_for.usage[name] == nil then + unified_inventory.crafts_for.usage[name] = {} + end + table.insert(unified_inventory.crafts_for.usage[name], recipe) + end + end + end +end) + + +-- load_home +local function load_home() + local input = io.open(unified_inventory.home_filename, "r") + if not input then + unified_inventory.home_pos = {} + return + end + while true do + local x = input:read("*n") + if not x then break end + local y = input:read("*n") + local z = input:read("*n") + local name = input:read("*l") + unified_inventory.home_pos[name:sub(2)] = {x = x, y = y, z = z} + end + io.close(input) +end +load_home() + +function unified_inventory.set_home(player, pos) + local player_name = player:get_player_name() + unified_inventory.home_pos[player_name] = vector.round(pos) + -- save the home data from the table to the file + local output = io.open(unified_inventory.home_filename, "w") + for k, v in pairs(unified_inventory.home_pos) do + output:write(v.x.." "..v.y.." "..v.z.." "..k.."\n") + end + io.close(output) +end + +function unified_inventory.go_home(player) + local pos = unified_inventory.home_pos[player:get_player_name()] + if pos then + player:setpos(pos) + end +end + +-- register_craft +function unified_inventory.register_craft(options) + if not options.output then + return + end + local itemstack = ItemStack(options.output) + if itemstack:is_empty() then + return + end + if options.type == "normal" and options.width == 0 then + options = { type = "shapeless", items = options.items, output = options.output, width = 0 } + end + if not unified_inventory.crafts_for.recipe[itemstack:get_name()] then + unified_inventory.crafts_for.recipe[itemstack:get_name()] = {} + end + table.insert(unified_inventory.crafts_for.recipe[itemstack:get_name()],options) +end + + +local craft_type_defaults = { + width = 3, + height = 3, + uses_crafting_grid = false, +} + + +function unified_inventory.craft_type_defaults(name, options) + if not options.description then + options.description = name + end + setmetatable(options, {__index = craft_type_defaults}) + return options +end + + +function unified_inventory.register_craft_type(name, options) + unified_inventory.registered_craft_types[name] = + unified_inventory.craft_type_defaults(name, options) +end + + +unified_inventory.register_craft_type("normal", { + description = F(S("Crafting")), + icon = "ui_craftgrid_icon.png", + width = 3, + height = 3, + get_shaped_craft_width = function (craft) return craft.width end, + dynamic_display_size = function (craft) + local w = craft.width + local h = math.ceil(table.maxn(craft.items) / craft.width) + local g = w < h and h or w + return { width = g, height = g } + end, + uses_crafting_grid = true, +}) + + +unified_inventory.register_craft_type("shapeless", { + description = F(S("Mixing")), + icon = "ui_craftgrid_icon.png", + width = 3, + height = 3, + dynamic_display_size = function (craft) + local maxn = table.maxn(craft.items) + local g = 1 + while g*g < maxn do g = g + 1 end + return { width = g, height = g } + end, + uses_crafting_grid = true, +}) + + +unified_inventory.register_craft_type("cooking", { + description = F(S("Cooking")), + icon = "default_furnace_front.png", + width = 1, + height = 1, +}) + + +unified_inventory.register_craft_type("digging", { + description = F(S("Digging")), + icon = "default_tool_steelpick.png", + width = 1, + height = 1, +}) + +unified_inventory.register_craft_type("digging_chance", { + description = "Digging (by chance)", + icon = "default_tool_steelpick.png^[transformFY.png", + width = 1, + height = 1, +}) + +function unified_inventory.register_page(name, def) + unified_inventory.pages[name] = def +end + + +function unified_inventory.register_button(name, def) + if not def.action then + def.action = function(player) + unified_inventory.set_inventory_formspec(player, name) + end + end + def.name = name + table.insert(unified_inventory.buttons, def) +end + + +function unified_inventory.is_creative(playername) + return minetest.check_player_privs(playername, {creative=true}) + or minetest.settings:get_bool("creative_mode") +end + diff --git a/mods/unified_inventory/bags.lua b/mods/unified_inventory/bags.lua new file mode 100644 index 0000000..6f07314 --- /dev/null +++ b/mods/unified_inventory/bags.lua @@ -0,0 +1,271 @@ +-- Bags for Minetest + +-- Copyright (c) 2012 cornernote, Brett O'Donnell +-- License: GPLv3 + +local S = unified_inventory.gettext +local F = minetest.formspec_escape + +unified_inventory.register_page("bags", { + get_formspec = function(player) + local player_name = player:get_player_name() + local formspec = "background[0.06,0.99;7.92,7.52;ui_bags_main_form.png]" + formspec = formspec.."label[0,0;"..F(S("Bags")).."]" + formspec = formspec.."button[0,2;2,0.5;bag1;"..F(S("Bag @1", 1)).."]" + formspec = formspec.."button[2,2;2,0.5;bag2;"..F(S("Bag @1", 2)).."]" + formspec = formspec.."button[4,2;2,0.5;bag3;"..F(S("Bag @1", 3)).."]" + formspec = formspec.."button[6,2;2,0.5;bag4;"..F(S("Bag @1", 4)).."]" + formspec = formspec.."listcolors[#00000000;#00000000]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag1;0.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag2;2.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag3;4.5,1;1,1;]" + formspec = formspec.."list[detached:"..F(player_name).."_bags;bag4;6.5,1;1,1;]" + return {formspec=formspec} + end, +}) + +unified_inventory.register_button("bags", { + type = "image", + image = "ui_bags_icon.png", + tooltip = S("Bags"), + hide_lite=true +}) + +local function get_player_bag_stack(player, i) + return minetest.get_inventory({ + type = "detached", + name = player:get_player_name() .. "_bags" + }):get_stack("bag" .. i, 1) +end + +for i = 1, 4 do + local bi = i + unified_inventory.register_page("bag"..bi, { + get_formspec = function(player) + local stack = get_player_bag_stack(player, bi) + local image = stack:get_definition().inventory_image + local formspec = ("image[7,0;1,1;"..image.."]" + .."label[0,0;"..F(S("Bag @1", bi)).."]" + .."listcolors[#00000000;#00000000]" + .."list[current_player;bag"..bi.."contents;0,1;8,3;]" + .."listring[current_name;bag"..bi.."contents]" + .."listring[current_player;main]") + local slots = stack:get_definition().groups.bagslots + if slots == 8 then + formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_sm_form.png]" + elseif slots == 16 then + formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_med_form.png]" + elseif slots == 24 then + formspec = formspec.."background[0.06,0.99;7.92,7.52;ui_bags_lg_form.png]" + end + local player_name = player:get_player_name() -- For if statement. + if unified_inventory.trash_enabled or unified_inventory.is_creative(player_name) or minetest.get_player_privs(player_name).give then + formspec = (formspec.."background[6.06,0;0.92,0.92;ui_bags_trash.png]" + .."list[detached:trash;main;6,0.1;1,1;]") + end + local inv = player:get_inventory() + for i = 1, 4 do + local def = get_player_bag_stack(player, i):get_definition() + local button + if def.groups.bagslots then + local list_name = "bag"..i.."contents" + local size = inv:get_size(list_name) + local used = 0 + for si = 1, size do + local stk = inv:get_stack(list_name, si) + if not stk:is_empty() then + used = used + 1 + end + end + local img = def.inventory_image + local label = F(S("Bag @1", i)).."\n"..used.."/"..size + button = "image_button["..(i+1)..",0;1,1;"..img..";bag"..i..";"..label.."]" + else + button = "" + end + formspec = formspec..button + end + return {formspec=formspec} + end, + }) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "" then + return + end + for i = 1, 4 do + if fields["bag"..i] then + local stack = get_player_bag_stack(player, i) + if not stack:get_definition().groups.bagslots then + return + end + unified_inventory.set_inventory_formspec(player, "bag"..i) + return + end + end +end) + +local function save_bags_metadata(player, bags_inv) + local is_empty = true + local bags = {} + for i = 1, 4 do + local bag = "bag"..i + if not bags_inv:is_empty(bag) then + -- Stack limit is 1, otherwise use stack:to_string() + bags[i] = bags_inv:get_stack(bag, 1):get_name() + is_empty = false + end + end + if is_empty then + player:set_attribute("unified_inventory:bags", nil) + else + player:set_attribute("unified_inventory:bags", + minetest.serialize(bags)) + end +end + +local function load_bags_metadata(player, bags_inv) + local player_inv = player:get_inventory() + local bags_meta = player:get_attribute("unified_inventory:bags") + local bags = bags_meta and minetest.deserialize(bags_meta) or {} + local dirty_meta = false + if not bags_meta then + -- Backwards compatiblity + for i = 1, 4 do + local bag = "bag"..i + if not player_inv:is_empty(bag) then + -- Stack limit is 1, otherwise use stack:to_string() + bags[i] = player_inv:get_stack(bag, 1):get_name() + dirty_meta = true + end + end + end + -- Fill detached slots + for i = 1, 4 do + local bag = "bag"..i + bags_inv:set_size(bag, 1) + bags_inv:set_stack(bag, 1, bags[i] or "") + end + + if dirty_meta then + -- Requires detached inventory to be set up + save_bags_metadata(player, bags_inv) + end + + -- Clean up deprecated garbage after saving + for i = 1, 4 do + local bag = "bag"..i + player_inv:set_size(bag, 0) + end +end + +minetest.register_on_joinplayer(function(player) + local player_inv = player:get_inventory() + local player_name = player:get_player_name() + local bags_inv = minetest.create_detached_inventory(player_name.."_bags",{ + on_put = function(inv, listname, index, stack, player) + player:get_inventory():set_size(listname.."contents", + stack:get_definition().groups.bagslots) + save_bags_metadata(player, inv) + end, + allow_put = function(inv, listname, index, stack, player) + local new_slots = stack:get_definition().groups.bagslots + if not new_slots then + return 0 + end + local player_inv = player:get_inventory() + local old_slots = player_inv:get_size(listname.."contents") + + if new_slots >= old_slots then + return 1 + end + + -- using a smaller bag, make sure it fits + local old_list = player_inv:get_list(listname.."contents") + local new_list = {} + local slots_used = 0 + local use_new_list = false + + for i, v in ipairs(old_list) do + if v and not v:is_empty() then + slots_used = slots_used + 1 + use_new_list = i > new_slots + new_list[slots_used] = v + end + end + if new_slots >= slots_used then + if use_new_list then + player_inv:set_list(listname.."contents", new_list) + end + return 1 + end + -- New bag is smaller: Disallow inserting + return 0 + end, + allow_take = function(inv, listname, index, stack, player) + if player:get_inventory():is_empty(listname.."contents") then + return stack:get_count() + end + return 0 + end, + on_take = function(inv, listname, index, stack, player) + player:get_inventory():set_size(listname.."contents", 0) + save_bags_metadata(player, inv) + end, + allow_move = function() + return 0 + end, + }, player_name) + + load_bags_metadata(player, bags_inv) +end) + +-- register bag tools +minetest.register_tool("unified_inventory:bag_small", { + description = S("Small Bag"), + inventory_image = "bags_small.png", + groups = {bagslots=8}, +}) + +minetest.register_tool("unified_inventory:bag_medium", { + description = S("Medium Bag"), + inventory_image = "bags_medium.png", + groups = {bagslots=16}, +}) + +minetest.register_tool("unified_inventory:bag_large", { + description = S("Large Bag"), + inventory_image = "bags_large.png", + groups = {bagslots=24}, +}) + +-- register bag crafts +if minetest.get_modpath("farming") ~= nil then + minetest.register_craft({ + output = "unified_inventory:bag_small", + recipe = { + {"", "farming:cotton", ""}, + {"group:wool", "group:wool", "group:wool"}, + {"group:wool", "group:wool", "group:wool"}, + }, + }) + + minetest.register_craft({ + output = "unified_inventory:bag_medium", + recipe = { + {"", "", ""}, + {"farming:cotton", "unified_inventory:bag_small", "farming:cotton"}, + {"farming:cotton", "unified_inventory:bag_small", "farming:cotton"}, + }, + }) + + minetest.register_craft({ + output = "unified_inventory:bag_large", + recipe = { + {"", "", ""}, + {"farming:cotton", "unified_inventory:bag_medium", "farming:cotton"}, + {"farming:cotton", "unified_inventory:bag_medium", "farming:cotton"}, + }, + }) +end diff --git a/mods/unified_inventory/callbacks.lua b/mods/unified_inventory/callbacks.lua new file mode 100644 index 0000000..e6ea3e7 --- /dev/null +++ b/mods/unified_inventory/callbacks.lua @@ -0,0 +1,215 @@ +local function default_refill(stack) + stack:set_count(stack:get_stack_max()) + local itemdef = minetest.registered_items[stack:get_name()] + if itemdef + and (itemdef.wear_represents or "mechanical_wear") == "mechanical_wear" + and stack:get_wear() ~= 0 then + stack:set_wear(0) + end + return stack +end + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + unified_inventory.players[player_name] = {} + unified_inventory.current_index[player_name] = 1 + unified_inventory.filtered_items_list[player_name] = + unified_inventory.items_list + unified_inventory.activefilter[player_name] = "" + unified_inventory.active_search_direction[player_name] = "nochange" + unified_inventory.apply_filter(player, "", "nochange") + unified_inventory.current_searchbox[player_name] = "" + unified_inventory.alternate[player_name] = 1 + unified_inventory.current_item[player_name] = nil + unified_inventory.current_craft_direction[player_name] = "recipe" + unified_inventory.set_inventory_formspec(player, + unified_inventory.default) + + -- Refill slot + local refill = minetest.create_detached_inventory(player_name.."refill", { + allow_put = function(inv, listname, index, stack, player) + local player_name = player:get_player_name() + if unified_inventory.is_creative(player_name) then + return stack:get_count() + else + return 0 + end + end, + on_put = function(inv, listname, index, stack, player) + local player_name = player:get_player_name() + local handle_refill = (minetest.registered_items[stack:get_name()] or {}).on_refill or default_refill + stack = handle_refill(stack) + inv:set_stack(listname, index, stack) + minetest.sound_play("electricity", + {to_player=player_name, gain = 1.0}) + end, + }, player_name) + refill:set_size("main", 1) +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + local player_name = player:get_player_name() + + local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) + + if formname ~= "" then + return + end + + -- always take new search text, even if not searching on it yet + if fields.searchbox + and fields.searchbox ~= unified_inventory.current_searchbox[player_name] then + unified_inventory.current_searchbox[player_name] = fields.searchbox + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + end + + for i, def in pairs(unified_inventory.buttons) do + if fields[def.name] then + def.action(player) + minetest.sound_play("click", + {to_player=player_name, gain = 0.1}) + return + end + end + + -- Inventory page controls + local start = math.floor( + unified_inventory.current_index[player_name] / ui_peruser.items_per_page + 1) + local start_i = start + local pagemax = math.floor( + (#unified_inventory.filtered_items_list[player_name] - 1) + / (ui_peruser.items_per_page) + 1) + + if fields.start_list then + start_i = 1 + end + if fields.rewind1 then + start_i = start_i - 1 + end + if fields.forward1 then + start_i = start_i + 1 + end + if fields.rewind3 then + start_i = start_i - 3 + end + if fields.forward3 then + start_i = start_i + 3 + end + if fields.end_list then + start_i = pagemax + end + if start_i < 1 then + start_i = 1 + end + if start_i > pagemax then + start_i = pagemax + end + if start_i ~= start then + minetest.sound_play("paperflip1", + {to_player=player_name, gain = 1.0}) + unified_inventory.current_index[player_name] = (start_i - 1) * ui_peruser.items_per_page + 1 + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + end + + local clicked_item + for name, value in pairs(fields) do + if string.sub(name, 1, 12) == "item_button_" then + local new_dir, mangled_item = string.match(name, "^item_button_([a-z]+)_(.*)$") + clicked_item = unified_inventory.demangle_for_formspec(mangled_item) + if string.sub(clicked_item, 1, 6) == "group:" then + minetest.sound_play("click", {to_player=player_name, gain = 0.1}) + unified_inventory.apply_filter(player, clicked_item, new_dir) + unified_inventory.current_searchbox[player_name] = clicked_item + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + return + end + if new_dir == "recipe" + or new_dir == "usage" then + unified_inventory.current_craft_direction[player_name] = new_dir + end + break + end + end + if clicked_item then + minetest.sound_play("click", + {to_player=player_name, gain = 0.1}) + local page = unified_inventory.current_page[player_name] + local player_creative = unified_inventory.is_creative(player_name) + if not player_creative then + page = "craftguide" + end + if page == "craftguide" then + unified_inventory.current_item[player_name] = clicked_item + unified_inventory.alternate[player_name] = 1 + unified_inventory.set_inventory_formspec(player, "craftguide") + elseif player_creative then + local inv = player:get_inventory() + local stack = ItemStack(clicked_item) + stack:set_count(stack:get_stack_max()) + if inv:room_for_item("main", stack) then + inv:add_item("main", stack) + end + end + end + + if fields.searchbutton + or fields.key_enter_field == "searchbox" then + unified_inventory.apply_filter(player, unified_inventory.current_searchbox[player_name], "nochange") + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + minetest.sound_play("paperflip2", + {to_player=player_name, gain = 1.0}) + elseif fields.searchresetbutton then + unified_inventory.apply_filter(player, "", "nochange") + unified_inventory.current_searchbox[player_name] = "" + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) + minetest.sound_play("click", + {to_player=player_name, gain = 0.1}) + end + + -- alternate buttons + if not (fields.alternate or fields.alternate_prev) then + return + end + minetest.sound_play("click", + {to_player=player_name, gain = 0.1}) + local item_name = unified_inventory.current_item[player_name] + if not item_name then + return + end + local crafts = unified_inventory.crafts_for[unified_inventory.current_craft_direction[player_name]][item_name] + if not crafts then + return + end + local alternates = #crafts + if alternates <= 1 then + return + end + local alternate + if fields.alternate then + alternate = unified_inventory.alternate[player_name] + 1 + if alternate > alternates then + alternate = 1 + end + elseif fields.alternate_prev then + alternate = unified_inventory.alternate[player_name] - 1 + if alternate < 1 then + alternate = alternates + end + end + unified_inventory.alternate[player_name] = alternate + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) +end) + +if minetest.delete_detached_inventory then + minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + minetest.delete_detached_inventory(player_name.."_bags") + minetest.delete_detached_inventory(player_name.."craftrecipe") + minetest.delete_detached_inventory(player_name.."refill") + end) +end diff --git a/mods/unified_inventory/depends.txt b/mods/unified_inventory/depends.txt new file mode 100644 index 0000000..20eb8b0 --- /dev/null +++ b/mods/unified_inventory/depends.txt @@ -0,0 +1,6 @@ +default +creative? +sfinv? +intllib? +datastorage? +farming? diff --git a/mods/unified_inventory/description.txt b/mods/unified_inventory/description.txt new file mode 100644 index 0000000..b541fdf --- /dev/null +++ b/mods/unified_inventory/description.txt @@ -0,0 +1 @@ +Unified Inventory replaces the default survival and creative inventory. It adds a nicer interface and a number of features, such as a crafting guide. diff --git a/mods/unified_inventory/group.lua b/mods/unified_inventory/group.lua new file mode 100644 index 0000000..23e2587 --- /dev/null +++ b/mods/unified_inventory/group.lua @@ -0,0 +1,137 @@ +local S = unified_inventory.gettext + +function unified_inventory.canonical_item_spec_matcher(spec) + local specname = ItemStack(spec):get_name() + if specname:sub(1, 6) == "group:" then + local group_names = specname:sub(7):split(",") + return function (itemname) + local itemdef = minetest.registered_items[itemname] + for _, group_name in ipairs(group_names) do + if (itemdef.groups[group_name] or 0) == 0 then + return false + end + end + return true + end + else + return function (itemname) return itemname == specname end + end +end + +function unified_inventory.item_matches_spec(item, spec) + local itemname = ItemStack(item):get_name() + return unified_inventory.canonical_item_spec_matcher(spec)(itemname) +end + +function unified_inventory.extract_groupnames(groupname) + local specname = ItemStack(groupname):get_name() + if specname:sub(1, 6) == "group:" then + local group_names = specname:sub(7):split(",") + if #group_names == 1 then + return group_names[1], 1 + end + local s = "" + for g=1,#group_names do + if g > 1 then + -- List connector + s = s .. S(" and ") + end + s = s .. group_names[g] + end + return s, #group_names + else + return nil, 0 + end +end + +unified_inventory.registered_group_items = { + mesecon_conductor_craftable = "mesecons:wire_00000000_off", + stone = "default:cobble", + wood = "default:wood", + book = "default:book", + sand = "default:sand", + leaves = "default:leaves", + tree = "default:tree", + vessel = "vessels:glass_bottle", + wool = "wool:white", +} + +function unified_inventory.register_group_item(groupname, itemname) + unified_inventory.registered_group_items[groupname] = itemname +end + + +-- This is used when displaying craft recipes, where an ingredient is +-- specified by group rather than as a specific item. A single-item group +-- is represented by that item, with the single-item status signalled +-- in the "sole" field. If the group contains no items at all, the item +-- field will be nil. +-- +-- Within a multiple-item group, we prefer to use an item that has the +-- same specific name as the group, and if there are more than one of +-- those items we prefer the one registered for the group by a mod. +-- Among equally-preferred items, we just pick the one with the +-- lexicographically earliest name. +-- +-- The parameter to this function isn't just a single group name. +-- It may be a comma-separated list of group names. This is really a +-- "group:..." ingredient specification, minus the "group:" prefix. + +local function compute_group_item(group_name_list) + local group_names = group_name_list:split(",") + local candidate_items = {} + for itemname, itemdef in pairs(minetest.registered_items) do + if (itemdef.groups.not_in_creative_inventory or 0) == 0 then + local all = true + for _, group_name in ipairs(group_names) do + if (itemdef.groups[group_name] or 0) == 0 then + all = false + end + end + if all then table.insert(candidate_items, itemname) end + end + end + local num_candidates = #candidate_items + if num_candidates == 0 then + return {sole = true} + elseif num_candidates == 1 then + return {item = candidate_items[1], sole = true} + end + local is_group = {} + local registered_rep = {} + for _, group_name in ipairs(group_names) do + is_group[group_name] = true + local rep = unified_inventory.registered_group_items[group_name] + if rep then registered_rep[rep] = true end + end + local bestitem = "" + local bestpref = 0 + for _, item in ipairs(candidate_items) do + local pref + if registered_rep[item] then + pref = 4 + elseif string.sub(item, 1, 8) == "default:" and is_group[string.sub(item, 9)] then + pref = 3 + elseif is_group[item:gsub("^[^:]*:", "")] then + pref = 2 + else + pref = 1 + end + if pref > bestpref or (pref == bestpref and item < bestitem) then + bestitem = item + bestpref = pref + end + end + return {item = bestitem, sole = false} +end + + +local group_item_cache = {} + +function unified_inventory.get_group_item(group_name) + if not group_item_cache[group_name] then + group_item_cache[group_name] = compute_group_item(group_name) + end + return group_item_cache[group_name] +end + diff --git a/mods/unified_inventory/image_credits.txt b/mods/unified_inventory/image_credits.txt new file mode 100644 index 0000000..12fbc65 --- /dev/null +++ b/mods/unified_inventory/image_credits.txt @@ -0,0 +1,69 @@ +bags_small.png: + http://www.clker.com/clipart-moneybag-empty.html + +bags_medium.png: + http://www.clker.com/clipart-backpack-1.html + +bags_large.png / ui_bags_icon.png: + http://www.clker.com/clipart-backpack-green-brown.html + +ui_craftguide_icon.png / ui_craft_icon.png + http://commons.wikimedia.org/wiki/File:Advancedsettings.png + +ui_doubleleft_icon.png + http://commons.wikimedia.org/wiki/File:Media-seek-backward.svg + +ui_doubleright_icon.png + http://commons.wikimedia.org/wiki/File:Media-seek-forward.svg + +ui_left_icon.png / ui_right_icon.png + http://commons.wikimedia.org/wiki/File:Media-playback-start.svg + +ui_skip_backward_icon.png + http://commons.wikimedia.org/wiki/File:Media-skip-backward.svg + +ui_skip_forward_icon.png + http://commons.wikimedia.org/wiki/File:Media-skip-forward.svg + +ui_reset_icon.png + https://commons.wikimedia.org/wiki/File:Edit-clear.svg + +ui_gohome_icon.png / ui_home_icon.png / ui_sethome_icon.png + http://commons.wikimedia.org/wiki/File:Home_256x256.png + +ui_moon_icon.png + http://commons.wikimedia.org/wiki/File:FullMoon2010.jpg + +ui_sun_icon.png + http://commons.wikimedia.org/wiki/File:2012-10-13_15-29-35-sun.jpg + +ui_trash_icon.png + http://www.clker.com/clipart-29090.html + http://www.clker.com/clipart-trash.html + +ui_search_icon.png + http://www.clker.com/clipart-24887.html + +ui_off_icon.png / ui_on_icon.png + http://www.clker.com/clipart-on-off-switches.html + +ui_waypoints_icon.png + http://www.clker.com/clipart-map-pin-red.html + +ui_circular_arrows_icon.png + http://www.clker.com/clipart-circular-arrow-pattern.html + +ui_pencil_icon.pnc + http://www.clker.com/clipart-2256.html + +ui_waypoint_set_icon.png + http://www.clker.com/clipart-larger-flag.html + +ui_xyz_off_icon.png + http://commons.wikimedia.org/wiki/File:No_sign.svg + +ui_ok_icon.png + http://commons.wikimedia.org/wiki/File:Yes_check.svg + +inventory_plus_worldedit_gui.png + http://commons.wikimedia.org/wiki/File:Erioll_world_2.svg diff --git a/mods/unified_inventory/init.lua b/mods/unified_inventory/init.lua new file mode 100644 index 0000000..2e9ba45 --- /dev/null +++ b/mods/unified_inventory/init.lua @@ -0,0 +1,84 @@ +-- Unified Inventory for Minetest >= 0.4.16 + +local modpath = minetest.get_modpath(minetest.get_current_modname()) +local worldpath = minetest.get_worldpath() + +-- Intllib +local S, NS = dofile(modpath .. "/intllib.lua") + +-- Data tables definitions +unified_inventory = { + activefilter = {}, + active_search_direction = {}, + alternate = {}, + current_page = {}, + current_searchbox = {}, + current_index = {}, + current_item = {}, + current_craft_direction = {}, + registered_craft_types = {}, + crafts_for = {usage = {}, recipe = {} }, + players = {}, + items_list_size = 0, + items_list = {}, + filtered_items_list_size = {}, + filtered_items_list = {}, + pages = {}, + buttons = {}, + + -- Homepos stuff + home_pos = {}, + home_filename = worldpath.."/unified_inventory_home.home", + + -- Default inventory page + default = "craft", + + -- intllib + gettext = S, + + -- "Lite" mode + lite_mode = minetest.settings:get_bool("unified_inventory_lite"), + + -- Trash enabled + trash_enabled = (minetest.settings:get_bool("unified_inventory_trash") ~= false), + + pagecols = 8, + pagerows = 10, + page_y = 0, + formspec_y = 1, + main_button_x = 0, + main_button_y = 9, + craft_result_x = 0.3, + craft_result_y = 0.5, + form_header_y = 0 +} + +-- Disable default creative inventory +local creative = rawget(_G, "creative") or rawget(_G, "creative_inventory") +if creative then + function creative.set_creative_formspec(player, start_i, pagenum) + return + end +end + +-- Disable sfinv inventory +local sfinv = rawget(_G, "sfinv") +if sfinv then + sfinv.enabled = false +end + +dofile(modpath.."/group.lua") +dofile(modpath.."/api.lua") +dofile(modpath.."/internal.lua") +dofile(modpath.."/callbacks.lua") +dofile(modpath.."/register.lua") + +if minetest.settings:get_bool("unified_inventory_bags") == true then + dofile(modpath.."/bags.lua") +end + +dofile(modpath.."/item_names.lua") + +if minetest.get_modpath("datastorage") then + dofile(modpath.."/waypoints.lua") +end diff --git a/mods/unified_inventory/internal.lua b/mods/unified_inventory/internal.lua new file mode 100644 index 0000000..06967d2 --- /dev/null +++ b/mods/unified_inventory/internal.lua @@ -0,0 +1,369 @@ +local S = unified_inventory.gettext +local F = minetest.formspec_escape + +-- This pair of encoding functions is used where variable text must go in +-- button names, where the text might contain formspec metacharacters. +-- We can escape button names for the formspec, to avoid screwing up +-- form structure overall, but they then don't get de-escaped, and so +-- the input we get back from the button contains the formspec escaping. +-- This is a game engine bug, and in the anticipation that it might be +-- fixed some day we don't want to rely on it. So for safety we apply +-- an encoding that avoids all formspec metacharacters. +function unified_inventory.mangle_for_formspec(str) + return string.gsub(str, "([^A-Za-z0-9])", function (c) return string.format("_%d_", string.byte(c)) end) +end +function unified_inventory.demangle_for_formspec(str) + return string.gsub(str, "_([0-9]+)_", function (v) return string.char(v) end) +end + +function unified_inventory.get_per_player_formspec(player_name) + local lite = unified_inventory.lite_mode and not minetest.check_player_privs(player_name, {ui_full=true}) + + local ui = {} + ui.pagecols = unified_inventory.pagecols + ui.pagerows = unified_inventory.pagerows + ui.page_y = unified_inventory.page_y + ui.formspec_y = unified_inventory.formspec_y + ui.main_button_x = unified_inventory.main_button_x + ui.main_button_y = unified_inventory.main_button_y + ui.craft_result_x = unified_inventory.craft_result_x + ui.craft_result_y = unified_inventory.craft_result_y + ui.form_header_y = unified_inventory.form_header_y + + if lite then + ui.pagecols = 4 + ui.pagerows = 6 + ui.page_y = 0.25 + ui.formspec_y = 0.47 + ui.main_button_x = 8.2 + ui.main_button_y = 6.5 + ui.craft_result_x = 2.8 + ui.craft_result_y = 3.4 + ui.form_header_y = -0.1 + end + + ui.items_per_page = ui.pagecols * ui.pagerows + return ui, lite +end + +function unified_inventory.get_formspec(player, page) + + if not player then + return "" + end + + local player_name = player:get_player_name() + local ui_peruser,draw_lite_mode = unified_inventory.get_per_player_formspec(player_name) + + unified_inventory.current_page[player_name] = page + local pagedef = unified_inventory.pages[page] + + local formspec = { + "size[14,10]", + "background[-0.19,-0.25;14.4,10.75;ui_form_bg.png]" -- Background + } + local n = 3 + + if draw_lite_mode then + formspec[1] = "size[11,7.7]" + formspec[2] = "background[-0.19,-0.2;11.4,8.4;ui_form_bg.png]" + end + + if unified_inventory.is_creative(player_name) + and page == "craft" then + formspec[n] = "background[0,"..(ui_peruser.formspec_y + 2)..";1,1;ui_single_slot.png]" + n = n+1 + end + + -- Current page + if not unified_inventory.pages[page] then + return "" -- Invalid page name + end + + local perplayer_formspec = unified_inventory.get_per_player_formspec(player_name) + local fsdata = pagedef.get_formspec(player, perplayer_formspec) + + formspec[n] = fsdata.formspec + n = n+1 + + local button_row = 0 + local button_col = 0 + + -- Main buttons + + local filtered_inv_buttons = {} + + for i, def in pairs(unified_inventory.buttons) do + if not (draw_lite_mode and def.hide_lite) then + table.insert(filtered_inv_buttons, def) + end + end + + for i, def in pairs(filtered_inv_buttons) do + + if draw_lite_mode and i > 4 then + button_row = 1 + button_col = 1 + end + + if def.type == "image" then + if (def.condition == nil or def.condition(player) == true) then + formspec[n] = "image_button[" + formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) + formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" + formspec[n+3] = F(def.image)..";" + formspec[n+4] = F(def.name)..";]" + formspec[n+5] = "tooltip["..F(def.name) + formspec[n+6] = ";"..(def.tooltip or "").."]" + n = n+7 + else + formspec[n] = "image[" + formspec[n+1] = ( ui_peruser.main_button_x + 0.65 * (i - 1) - button_col * 0.65 * 4) + formspec[n+2] = ","..(ui_peruser.main_button_y + button_row * 0.7)..";0.8,0.8;" + formspec[n+3] = F(def.image).."^[colorize:#808080:alpha]" + n = n+4 + + end + end + end + + if fsdata.draw_inventory ~= false then + -- Player inventory + formspec[n] = "listcolors[#00000000;#00000000]" + formspec[n+1] = "list[current_player;main;0,"..(ui_peruser.formspec_y + 3.5)..";8,4;]" + n = n+2 + end + + if fsdata.draw_item_list == false then + return table.concat(formspec, "") + end + + -- Controls to flip items pages + local start_x = 9.2 + + if not draw_lite_mode then + formspec[n] = + "image_button[" .. (start_x + 0.6 * 0) + .. ",9;.8,.8;ui_skip_backward_icon.png;start_list;]" + .. "tooltip[start_list;" .. F(S("First page")) .. "]" + + .. "image_button[" .. (start_x + 0.6 * 1) + .. ",9;.8,.8;ui_doubleleft_icon.png;rewind3;]" + .. "tooltip[rewind3;" .. F(S("Back three pages")) .. "]" + .. "image_button[" .. (start_x + 0.6 * 2) + .. ",9;.8,.8;ui_left_icon.png;rewind1;]" + .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" + + .. "image_button[" .. (start_x + 0.6 * 3) + .. ",9;.8,.8;ui_right_icon.png;forward1;]" + .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" + .. "image_button[" .. (start_x + 0.6 * 4) + .. ",9;.8,.8;ui_doubleright_icon.png;forward3;]" + .. "tooltip[forward3;" .. F(S("Forward three pages")) .. "]" + + .. "image_button[" .. (start_x + 0.6 * 5) + .. ",9;.8,.8;ui_skip_forward_icon.png;end_list;]" + .. "tooltip[end_list;" .. F(S("Last page")) .. "]" + else + formspec[n] = + "image_button[" .. (8.2 + 0.65 * 0) + .. ",5.8;.8,.8;ui_skip_backward_icon.png;start_list;]" + .. "tooltip[start_list;" .. F(S("First page")) .. "]" + .. "image_button[" .. (8.2 + 0.65 * 1) + .. ",5.8;.8,.8;ui_left_icon.png;rewind1;]" + .. "tooltip[rewind1;" .. F(S("Back one page")) .. "]" + .. "image_button[" .. (8.2 + 0.65 * 2) + .. ",5.8;.8,.8;ui_right_icon.png;forward1;]" + .. "tooltip[forward1;" .. F(S("Forward one page")) .. "]" + .. "image_button[" .. (8.2 + 0.65 * 3) + .. ",5.8;.8,.8;ui_skip_forward_icon.png;end_list;]" + .. "tooltip[end_list;" .. F(S("Last page")) .. "]" + end + n = n+1 + + -- Search box + formspec[n] = "field_close_on_enter[searchbox;false]" + n = n+1 + + if not draw_lite_mode then + formspec[n] = "field[9.5,8.325;3,1;searchbox;;" + .. F(unified_inventory.current_searchbox[player_name]) .. "]" + formspec[n+1] = "image_button[12.2,8.1;.8,.8;ui_search_icon.png;searchbutton;]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + formspec[n+2] = "image_button[12.9,8.1;.8,.8;ui_reset_icon.png;searchresetbutton;]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" + else + formspec[n] = "field[8.5,5.225;2.2,1;searchbox;;" + .. F(unified_inventory.current_searchbox[player_name]) .. "]" + formspec[n+1] = "image_button[10.3,5;.8,.8;ui_search_icon.png;searchbutton;]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + formspec[n+2] = "image_button[11,5;.8,.8;ui_reset_icon.png;searchresetbutton;]" + .. "tooltip[searchbutton;" ..F(S("Search")) .. "]" + .. "tooltip[searchresetbutton;" ..F(S("Reset search and display everything")) .. "]" + end + n = n+3 + + local no_matches = S("No matching items") + if draw_lite_mode then + no_matches = S("No matches.") + end + + -- Items list + if #unified_inventory.filtered_items_list[player_name] == 0 then + formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";" .. F(no_matches) .. "]" + else + local dir = unified_inventory.active_search_direction[player_name] + local list_index = unified_inventory.current_index[player_name] + local page = math.floor(list_index / (ui_peruser.items_per_page) + 1) + local pagemax = math.floor( + (#unified_inventory.filtered_items_list[player_name] - 1) + / (ui_peruser.items_per_page) + 1) + local item = {} + for y = 0, ui_peruser.pagerows - 1 do + for x = 0, ui_peruser.pagecols - 1 do + local name = unified_inventory.filtered_items_list[player_name][list_index] + if minetest.registered_items[name] then + -- Clicked on current item: Flip crafting direction + if name == unified_inventory.current_item[player_name] then + local cdir = unified_inventory.current_craft_direction[player_name] + if cdir == "recipe" then + dir = "usage" + elseif cdir == "usage" then + dir = "recipe" + end + else + -- Default: use active search direction by default + dir = unified_inventory.active_search_direction[player_name] + end + formspec[n] = "item_image_button[" + ..(8.2 + x * 0.7).."," + ..(ui_peruser.formspec_y + ui_peruser.page_y + y * 0.7)..";.81,.81;" + ..name..";item_button_"..dir.."_" + ..unified_inventory.mangle_for_formspec(name)..";]" + n = n+1 + list_index = list_index + 1 + end + end + end + formspec[n] = "label[8.2,"..ui_peruser.form_header_y..";"..F(S("Page")) .. ": " + .. S("%s of %s"):format(page,pagemax).."]" + end + n= n+1 + + if unified_inventory.activefilter[player_name] ~= "" then + formspec[n] = "label[8.2,"..(ui_peruser.form_header_y + 0.4)..";" .. F(S("Filter")) .. ":]" + formspec[n+1] = "label[9.1,"..(ui_peruser.form_header_y + 0.4)..";"..F(unified_inventory.activefilter[player_name]).."]" + end + return table.concat(formspec, "") +end + +function unified_inventory.set_inventory_formspec(player, page) + if player then + player:set_inventory_formspec(unified_inventory.get_formspec(player, page)) + end +end + +--apply filter to the inventory list (create filtered copy of full one) +function unified_inventory.apply_filter(player, filter, search_dir) + if not player then + return false + end + local player_name = player:get_player_name() + local lfilter = string.lower(filter) + local ffilter + if lfilter:sub(1, 6) == "group:" then + local groups = lfilter:sub(7):split(",") + ffilter = function(name, def) + for _, group in ipairs(groups) do + if not def.groups[group] + or def.groups[group] <= 0 then + return false + end + end + return true + end + else + ffilter = function(name, def) + local lname = string.lower(name) + local ldesc = string.lower(def.description) + return string.find(lname, lfilter, 1, true) or string.find(ldesc, lfilter, 1, true) + end + end + local is_creative = unified_inventory.is_creative(player_name) + unified_inventory.filtered_items_list[player_name]={} + for name, def in pairs(minetest.registered_items) do + if (not def.groups.not_in_creative_inventory + or def.groups.not_in_creative_inventory == 0) + and def.description + and def.description ~= "" + and ffilter(name, def) + and (is_creative or unified_inventory.crafts_for.recipe[def.name]) then + table.insert(unified_inventory.filtered_items_list[player_name], name) + end + end + table.sort(unified_inventory.filtered_items_list[player_name]) + unified_inventory.filtered_items_list_size[player_name] = #unified_inventory.filtered_items_list[player_name] + unified_inventory.current_index[player_name] = 1 + unified_inventory.activefilter[player_name] = filter + unified_inventory.active_search_direction[player_name] = search_dir + unified_inventory.set_inventory_formspec(player, + unified_inventory.current_page[player_name]) +end + +function unified_inventory.items_in_group(groups) + local items = {} + for name, item in pairs(minetest.registered_items) do + for _, group in pairs(groups:split(',')) do + if item.groups[group] then + table.insert(items, name) + end + end + end + return items +end + +function unified_inventory.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 diff --git a/mods/unified_inventory/intllib.lua b/mods/unified_inventory/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/mods/unified_inventory/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/mods/unified_inventory/item_names.lua b/mods/unified_inventory/item_names.lua new file mode 100644 index 0000000..d374b14 --- /dev/null +++ b/mods/unified_inventory/item_names.lua @@ -0,0 +1,76 @@ +-- Based on 4itemnames mod by 4aiman + +local item_names = {} -- [player_name] = { hud, dtime, itemname } +local dlimit = 3 -- HUD element will be hidden after this many seconds +local air_hud_mod = minetest.get_modpath("4air") +local hud_mod = minetest.get_modpath("hud") +local hudbars_mod = minetest.get_modpath("hudbars") + +local function set_hud(player) + local player_name = player:get_player_name() + local off = {x=0, y=-70} + if air_hud_mod or hud_mod then + off.y = off.y - 20 + elseif hudbars_mod then + off.y = off.y + 13 + end + item_names[player_name] = { + hud = player:hud_add({ + hud_elem_type = "text", + position = {x=0.5, y=1}, + offset = off, + alignment = {x=0, y=0}, + number = 0xFFFFFF, + text = "", + }), + dtime = dlimit, + index = 1, + itemname = "" + } +end + +minetest.register_on_joinplayer(function(player) + minetest.after(0, set_hud, player) +end) + +minetest.register_on_leaveplayer(function(player) + item_names[player:get_player_name()] = nil +end) + +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.get_connected_players()) do + local data = item_names[player:get_player_name()] + if not data or not data.hud then + data = {} -- Update on next step + set_hud(player) + end + + local index = player:get_wield_index() + local stack = player:get_wielded_item() + local itemname = stack:get_name() + + if data.hud and data.dtime < dlimit then + data.dtime = data.dtime + dtime + if data.dtime > dlimit then + player:hud_change(data.hud, 'text', "") + end + end + + if data.hud and (itemname ~= data.itemname or index ~= data.index) then + data.itemname = itemname + data.index = index + data.dtime = 0 + + local desc = stack.get_meta + and stack:get_meta():get_string("description") + + if not desc or desc == "" then + -- Try to use default description when none is set in the meta + local def = minetest.registered_items[itemname] + desc = def and def.description or "" + end + player:hud_change(data.hud, 'text', desc) + end + end +end) + diff --git a/mods/unified_inventory/locale/de.po b/mods/unified_inventory/locale/de.po new file mode 100644 index 0000000..1231f1a --- /dev/null +++ b/mods/unified_inventory/locale/de.po @@ -0,0 +1,366 @@ +# German translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Xanthin +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 13:41+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Fertigung" + +#: api.lua +msgid "Mixing" +msgstr "Mischen" + +#: api.lua +msgid "Cooking" +msgstr "Kochen" + +#: api.lua +msgid "Digging" +msgstr "Graben" + +#: bags.lua +msgid "Bags" +msgstr "Taschen" + +#: bags.lua +msgid "Bag @1" +msgstr "Tasche @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Kleine Tasche" + +#: bags.lua +msgid "Medium Bag" +msgstr "Mittelgroße Tasche" + +#: bags.lua +msgid "Large Bag" +msgstr "Große Tasche" + +#: group.lua +msgid " and " +msgstr " und " + +#: internal.lua +msgid "First page" +msgstr "Erste Seite" + +#: internal.lua +msgid "Back three pages" +msgstr "3 Seiten zurückblättern" + +#: internal.lua +msgid "Back one page" +msgstr "1 Seite zurückblättern" + +#: internal.lua +msgid "Forward one page" +msgstr "1 Seite vorblättern" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 Seiten vorblättern" + +#: internal.lua +msgid "Last page" +msgstr "Letzte Seite" + +#: internal.lua +msgid "Search" +msgstr "Suchen" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Suche zurücksetzen und alles anzeigen" + +#: internal.lua +msgid "No matching items" +msgstr "Keine passenden Gegenstände" + +#: internal.lua +msgid "No matches." +msgstr "Keine Treffer" + +#: internal.lua +msgid "Page" +msgstr "Seite" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s von %s" + +#: internal.lua +msgid "Filter" +msgstr "Filter" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Kann das Kreativinventar nutzen" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Fertigungsraster" + +#: register.lua +msgid "Crafting Guide" +msgstr "Fertigungsführer" + +#: register.lua +msgid "Set home position" +msgstr "Heimatposition setzen" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Heimatposition nach: %s gesetzt" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Du hast das \"home\"-Privileg nicht!" + +#: register.lua +msgid "Go home" +msgstr "Nach Hause gehen" + +#: register.lua +msgid "Set time to day" +msgstr "Zur Tageszeit wechseln" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Tageszeit auf 6 Uhr gesetzt" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Du hast das \"settime\"-Privileg nicht!" + +#: register.lua +msgid "Set time to night" +msgstr "Zur Nachtzeit wechseln" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Tageszeit auf 21 Uhr gesetzt" + +#: register.lua +msgid "Clear inventory" +msgstr "Inventar leeren" + +#: register.lua +#, fuzzy +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Diese Funktion ist außerhalb des Kreativmodus deaktiviert, um ein " +"versehentliches Löschen des ganzen Inventars zu verhindern.\n" +"Nutze stattdessen das Müllfeld." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventar geleert!" + +#: register.lua +msgid "Trash:" +msgstr "Müll:" + +#: register.lua +msgid "Refill:" +msgstr "Nachfüllen:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Irgendein Gegenstand, der zur Gruppe %s gehört" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Irgendein Gegenstand, der zu den Gruppen %s gehört" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Rezept %d von %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Verwendung %d von %d" + +#: register.lua +msgid "No recipes" +msgstr "Keine Rezepte" + +#: register.lua +msgid "No usages" +msgstr "Keine Verwendungen" + +#: register.lua +msgid "Result" +msgstr "Ergebnis" + +#: register.lua +msgid "Ingredient" +msgstr "Zutat" + +#: register.lua +msgid "Show next recipe" +msgstr "Nächstes Rezept zeigen" + +#: register.lua +msgid "Show next usage" +msgstr "Nächste Verwendung zeigen" + +#: register.lua +msgid "Show previous recipe" +msgstr "Vorheriges Rezept zeigen" + +#: register.lua +msgid "Show previous usage" +msgstr "Vorherige Verwendung zeigen" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Gib mir:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Dieses Rezept ist zu\n" +"groß, um angezeigt\n" +"zu werden." + +#: register.lua +msgid "To craft grid:" +msgstr "Ins Fertigungsraster:" + +#: register.lua +msgid "All" +msgstr "Alles" + +#: waypoints.lua +msgid "White" +msgstr "Weiß" + +#: waypoints.lua +msgid "Yellow" +msgstr "Gelb" + +#: waypoints.lua +msgid "Red" +msgstr "Rot" + +#: waypoints.lua +msgid "Green" +msgstr "Grün" + +#: waypoints.lua +msgid "Blue" +msgstr "Blau" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Wegpunkte" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Wegpunkt Nr. %d auswählen" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Wegpunkt Nr. %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Setze Wegpunkt zur derzeitigen Position" + +#: waypoints.lua +msgid "invisible" +msgstr "unsichtbar" + +#: waypoints.lua +msgid "visible" +msgstr "sichtbar" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Wegpunkt @1 machen" + +#: waypoints.lua +msgid "Disable" +msgstr "ausschalten" + +#: waypoints.lua +msgid "Enable" +msgstr "einschalten" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "Anzeige der Wegpunktkoordinaten @1" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Farbe der Darstellung der Wegpunkte ändern" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Name des Wegpunkts ändern" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Wegpunkt aktiv" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Wegpunkt inaktiv" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Bearbeitung abschließen" + +#: waypoints.lua +msgid "World position" +msgstr "Weltposition" + +#: waypoints.lua +msgid "Name" +msgstr "Name" + +#: waypoints.lua +msgid "HUD text color" +msgstr "HUD-Textfarbe" diff --git a/mods/unified_inventory/locale/es.po b/mods/unified_inventory/locale/es.po new file mode 100644 index 0000000..a49a76d --- /dev/null +++ b/mods/unified_inventory/locale/es.po @@ -0,0 +1,366 @@ +# Spanish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Diego Martínez +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:15+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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 register.lua +msgid "Crafting" +msgstr "Elaboración" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +#, fuzzy +msgid "Cooking" +msgstr "hornear" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "Bolsas" + +#: bags.lua +msgid "Bag @1" +msgstr "Bolsa @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Bolsa Pequeña" + +#: bags.lua +msgid "Medium Bag" +msgstr "Bolsa Mediana" + +#: bags.lua +msgid "Large Bag" +msgstr "Bolsa Grande" + +#: group.lua +msgid " and " +msgstr "" + +#: internal.lua +msgid "First page" +msgstr "" + +#: internal.lua +msgid "Back three pages" +msgstr "" + +#: internal.lua +msgid "Back one page" +msgstr "" + +#: internal.lua +msgid "Forward one page" +msgstr "" + +#: internal.lua +msgid "Forward three pages" +msgstr "" + +#: internal.lua +msgid "Last page" +msgstr "" + +#: internal.lua +msgid "Search" +msgstr "" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "" + +#: internal.lua +msgid "No matches." +msgstr "" + +#: internal.lua +msgid "Page" +msgstr "Página" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtro" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Puede usar el inventario creativo" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guía de Elaboración" + +#: register.lua +#, fuzzy +msgid "Set home position" +msgstr "Posición en el mundo" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Posición de hogar cambiada a: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "¡No tienes el privilegio \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Hora del día cambiada a 6AM" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "¡No tienes el privilegio \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Hora del día cambiada a 9PM" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +#, fuzzy +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Éste botón ha sido deshabilitado para prevenir la destrucción accidental del " +"inventario.\n" +"Usa la ranura para basura en su lugar." + +#: register.lua +msgid "Inventory cleared!" +msgstr "¡Inventario limpio!" + +#: register.lua +msgid "Trash:" +msgstr "Basura:" + +#: register.lua +msgid "Refill:" +msgstr "Rellenar:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Receta %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "Resultado" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +#, fuzzy +msgid "To craft grid:" +msgstr "Copiar al cuadro de elaboración" + +#: register.lua +msgid "All" +msgstr "Todos" + +#: waypoints.lua +msgid "White" +msgstr "Blanco" + +#: waypoints.lua +msgid "Yellow" +msgstr "Amarillo" + +#: waypoints.lua +msgid "Red" +msgstr "Rojo" + +#: waypoints.lua +msgid "Green" +msgstr "Verde" + +#: waypoints.lua +msgid "Blue" +msgstr "Azul" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Puntos de paso" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Puntos de paso %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Punto de paso activo" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Punto de paso inactivo" + +#: waypoints.lua +msgid "Finish editing" +msgstr "" + +#: waypoints.lua +msgid "World position" +msgstr "Posición en el mundo" + +#: waypoints.lua +msgid "Name" +msgstr "Nombre" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Color del HUD" diff --git a/mods/unified_inventory/locale/fr.po b/mods/unified_inventory/locale/fr.po new file mode 100644 index 0000000..f6af706 --- /dev/null +++ b/mods/unified_inventory/locale/fr.po @@ -0,0 +1,364 @@ +# French translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# kilbith +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:15+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Création" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "Cuisson" + +#: api.lua +msgid "Digging" +msgstr "Creuser" + +#: bags.lua +msgid "Bags" +msgstr "Sacs" + +#: bags.lua +msgid "Bag @1" +msgstr "Sac @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Petit sac" + +#: bags.lua +msgid "Medium Bag" +msgstr "Sac moyen" + +#: bags.lua +msgid "Large Bag" +msgstr "Grand sac" + +#: group.lua +msgid " and " +msgstr " et " + +#: internal.lua +msgid "First page" +msgstr "1ère page" + +#: internal.lua +msgid "Back three pages" +msgstr "3 pages en arrière" + +#: internal.lua +msgid "Back one page" +msgstr "Page précédente" + +#: internal.lua +msgid "Forward one page" +msgstr "Page suivante" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 pages en avant" + +#: internal.lua +msgid "Last page" +msgstr "Dernière page" + +#: internal.lua +msgid "Search" +msgstr "Rechercher" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Aucun élément correspondant" + +#: internal.lua +msgid "No matches." +msgstr "Aucun match" + +#: internal.lua +msgid "Page" +msgstr "Page" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtre" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Vous pouvez utiliser l'inventaire créatif" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grille de création" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guide de création" + +#: register.lua +#, fuzzy +msgid "Set home position" +msgstr "Position dans le monde" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Position de votre base fixée à: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Vous n'avez pas le privilège \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Heure fixée à 6h" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Vous n'avez pas le privilège \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Heure fixée à 21h" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Ce bouton a été désactivé en dehors du mode créatif pour éviter des saccages " +"dans l'inventaire.\n" +"Utilisez plutôt la case poubelle." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventaire vidé !" + +#: register.lua +msgid "Trash:" +msgstr "Poubelle :" + +#: register.lua +msgid "Refill:" +msgstr "Remplir :" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Recette %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "Résultat" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "Sur de création:" + +#: register.lua +msgid "All" +msgstr "Tout" + +#: waypoints.lua +msgid "White" +msgstr "Blanc" + +#: waypoints.lua +msgid "Yellow" +msgstr "Jaune" + +#: waypoints.lua +msgid "Red" +msgstr "Rouge" + +#: waypoints.lua +msgid "Green" +msgstr "Vert" + +#: waypoints.lua +msgid "Blue" +msgstr "Bleu" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Point de passage" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Choisir un point de passage #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Point de passage %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Marquer un point de passage à la position actuelle" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Rendre @1 le point de passage" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +#, fuzzy +msgid "@1 display of waypoint coordinates" +msgstr "@1 montrer les coordonnées des points de passages" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Changer la couleur du point de passage" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Editer le nom du point de passage" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Point de passage actif" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Point de passage inactif" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Terminer l'édition" + +#: waypoints.lua +msgid "World position" +msgstr "Position dans le monde" + +#: waypoints.lua +msgid "Name" +msgstr "Nom" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Couleur de texte du HUD" diff --git a/mods/unified_inventory/locale/ms.po b/mods/unified_inventory/locale/ms.po new file mode 100644 index 0000000..518fcb3 --- /dev/null +++ b/mods/unified_inventory/locale/ms.po @@ -0,0 +1,369 @@ +# Malay translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# muhdnurhidayat , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+0200\n" +"PO-Revision-Date: 2018-07-17 20:14+0800\n" +"Language-Team: muhdnurhidayat \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.0.9\n" +"Last-Translator: muhdnurhidayat \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ms\n" +"X-Poedit-Flags-xgettext: --add-comments\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Pertukangan" + +#: api.lua +msgid "Mixing" +msgstr "Pencampuran" + +#: api.lua +msgid "Cooking" +msgstr "Pemasakan" + +#: api.lua +msgid "Digging" +msgstr "Penggalian" + +#: bags.lua +msgid "Bags" +msgstr "Beg" + +#: bags.lua +msgid "Bag @1" +msgstr "Beg @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Beg Kecil" + +#: bags.lua +msgid "Medium Bag" +msgstr "Beg Sederhana" + +#: bags.lua +msgid "Large Bag" +msgstr "Beg Besar" + +#: group.lua +msgid " and " +msgstr " dan " + +#: internal.lua +msgid "First page" +msgstr "Halaman pertama" + +#: internal.lua +msgid "Back three pages" +msgstr "Tiga halaman sebelumnya" + +#: internal.lua +msgid "Back one page" +msgstr "Halaman sebelumnya" + +#: internal.lua +msgid "Forward one page" +msgstr "Halaman seterusnya" + +#: internal.lua +msgid "Forward three pages" +msgstr "Tiga halaman seterusnya" + +#: internal.lua +msgid "Last page" +msgstr "Halaman terakhir" + +#: internal.lua +msgid "Search" +msgstr "Cari" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Set semula carian dan tunjukkan semua benda" + +#: internal.lua +msgid "No matching items" +msgstr "Tiada item sepadan" + +#: internal.lua +msgid "No matches." +msgstr "Tiada padanan." + +#: internal.lua +msgid "Page" +msgstr "Halaman" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s drpd %s" + +#: internal.lua +msgid "Filter" +msgstr "Tapis" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Boleh guna inventori kreatif" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" +"Memaksa Unified Inventory untuk dipaparkan dalam mod Full jika mod Lite " +"ditetapkan secara global" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grid Pertukangan" + +#: register.lua +msgid "Crafting Guide" +msgstr "Panduan Pertukangan" + +#: register.lua +msgid "Set home position" +msgstr "Tetapkan kedudukan rumah" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Kedudukan rumah ditetapkan ke: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Anda tidak ada keistimewaan \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Balik rumah" + +#: register.lua +msgid "Set time to day" +msgstr "Tetapkan masa jadi siang" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Masa ditetapkan ke 6 pagi" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Anda tidak ada keistimewaan settime!" + +#: register.lua +msgid "Set time to night" +msgstr "Tetapkan masa jadi malam" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Masa ditetapkan ke 9 malam" + +#: register.lua +msgid "Clear inventory" +msgstr "Kosongkan inventori" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Butang ini dilumpuhkan di luar mod kreatif untuk mengelakkan pengosongan " +"inventori secara tidak sengaja.\n" +"Sebaliknya, gunakan slot tong sampah." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventori dikosongkan!" + +#: register.lua +msgid "Trash:" +msgstr "Buang:" + +#: register.lua +msgid "Refill:" +msgstr "Isi balik:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Sebarang item dari kumpulan %s" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Sebarang item dari kumpulan %s" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Resipi %d drpd %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Kegunaan %d drpd %d" + +#: register.lua +msgid "No recipes" +msgstr "Tiada resipi" + +#: register.lua +msgid "No usages" +msgstr "Tiada kegunaan" + +#: register.lua +msgid "Result" +msgstr "Hasil" + +#: register.lua +msgid "Ingredient" +msgstr "Bahan" + +#: register.lua +msgid "Show next recipe" +msgstr "Tunjuk resipi seterusnya" + +#: register.lua +msgid "Show next usage" +msgstr "Tunjuk kegunaan seterusnya" + +#: register.lua +msgid "Show previous recipe" +msgstr "Tunjuk resipi sebelumnya" + +#: register.lua +msgid "Show previous usage" +msgstr "Tunjuk kegunaan sebelumnya" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "%s (%s)" + +#: register.lua +msgid "Give me:" +msgstr "Beri saya:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Resipi ini terlalu\n" +"besar untuk paparan." + +#: register.lua +msgid "To craft grid:" +msgstr "Ke grid pertukangan:" + +#: register.lua +msgid "All" +msgstr "" +"SE\n" +"MUA" + +#: waypoints.lua +msgid "White" +msgstr "Putih" + +#: waypoints.lua +msgid "Yellow" +msgstr "Kuning" + +#: waypoints.lua +msgid "Red" +msgstr "Merah" + +#: waypoints.lua +msgid "Green" +msgstr "Hijau" + +#: waypoints.lua +msgid "Blue" +msgstr "Biru" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Titik Arah" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Pilih Titik Arah #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Titik Arah %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Tetapkan titik arah ke lokasi semasa" + +#: waypoints.lua +msgid "invisible" +msgstr "Sembunyikan" + +#: waypoints.lua +msgid "visible" +msgstr "Paparkan" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "@1 titik arah" + +#: waypoints.lua +msgid "Disable" +msgstr "Sembunyikan" + +#: waypoints.lua +msgid "Enable" +msgstr "Paparkan" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 koordinat untuk titik arah" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Tukar warna paparan titik arah" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Edit nama titik arah" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Titik arah aktif" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Titik arah tidak aktif" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Selesai edit" + +#: waypoints.lua +msgid "World position" +msgstr "Kedudukan dunia" + +#: waypoints.lua +msgid "Name" +msgstr "Nama" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Warna tulisan HUD" diff --git a/mods/unified_inventory/locale/pl.po b/mods/unified_inventory/locale/pl.po new file mode 100644 index 0000000..5a3f412 --- /dev/null +++ b/mods/unified_inventory/locale/pl.po @@ -0,0 +1,359 @@ +# Polish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# RealBadAngel +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:30+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +msgid "Crafting" +msgstr "" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "Plecaki" + +#: bags.lua +msgid "Bag @1" +msgstr "Plecak @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Maly plecak" + +#: bags.lua +msgid "Medium Bag" +msgstr "Sredni plecak" + +#: bags.lua +msgid "Large Bag" +msgstr "Duzy plecak" + +#: group.lua +msgid " and " +msgstr " i " + +#: internal.lua +msgid "First page" +msgstr "Pierwsza strona" + +#: internal.lua +msgid "Back three pages" +msgstr "3 strony w tyl" + +#: internal.lua +msgid "Back one page" +msgstr "1 strona w tyl" + +#: internal.lua +msgid "Forward one page" +msgstr "1 strona do przodu" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 strony do przodu" + +#: internal.lua +msgid "Last page" +msgstr "Ostatnia strona" + +#: internal.lua +msgid "Search" +msgstr "Szukaj" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Brak pasujacych przedmiotow" + +#: internal.lua +msgid "No matches." +msgstr "Brak wyników" + +#: internal.lua +msgid "Page" +msgstr "Strona" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s z %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtr" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "" + +#: register.lua +msgid "Set home position" +msgstr "Ustaw pozycję wyjściową" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Pozycja domowa ustawiona na: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Nie masz uprawnien do zmiany czasu \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Idź do domu" + +#: register.lua +msgid "Set time to day" +msgstr "Ustaw czas na dzień" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Czas ustawiony na 6:00" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Nie masz uprawnien do zmiany czasu \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "Ustaw czas na noc" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Czas ustawiony na 21:00" + +#: register.lua +msgid "Clear inventory" +msgstr "Wyczyść zapasy" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" + +#: register.lua +msgid "Inventory cleared!" +msgstr "Zapasy zostały wyczyszczone!" + +#: register.lua +msgid "Trash:" +msgstr "Smietnik:" + +#: register.lua +msgid "Refill:" +msgstr "Uzupelnianie:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Recepta %d z %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Użycie %d z %d" + +#: register.lua +msgid "No recipes" +msgstr "Brak recepty" + +#: register.lua +msgid "No usages" +msgstr "Bez użycia" + +#: register.lua +msgid "Result" +msgstr "Wynik" + +#: register.lua +msgid "Ingredient" +msgstr "Składnik" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Daj mi:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "" + +#: register.lua +msgid "All" +msgstr "Wszystko" + +#: waypoints.lua +msgid "White" +msgstr "Bialy" + +#: waypoints.lua +msgid "Yellow" +msgstr "Zolty" + +#: waypoints.lua +msgid "Red" +msgstr "Czerwony" + +#: waypoints.lua +msgid "Green" +msgstr "Zielony" + +#: waypoints.lua +msgid "Blue" +msgstr "Niebieski" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Punkty orientacyjne" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Wybierz punkt #%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Punkty orientacyjne %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Ustaw punkt orientacyjny na biezacej pozycji" + +#: waypoints.lua +msgid "invisible" +msgstr "niewidzialny" + +#: waypoints.lua +msgid "visible" +msgstr "widomy" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Robić punkt @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 koordynatow punktu" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Zmien kolor punktu" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Edytuj nazwe punktu" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Punkt wlaczony" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Punkt wylaczony" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Zakoncz edycje" + +#: waypoints.lua +msgid "World position" +msgstr "Pozycja" + +#: waypoints.lua +msgid "Name" +msgstr "Nazwa" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Kolor tekstu HUD" diff --git a/mods/unified_inventory/locale/pt.po b/mods/unified_inventory/locale/pt.po new file mode 100644 index 0000000..ff9cc3a --- /dev/null +++ b/mods/unified_inventory/locale/pt.po @@ -0,0 +1,366 @@ +# Portuguese translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Lunovox +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 16:48+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Artesanato" + +#: api.lua +msgid "Mixing" +msgstr "Muistura" + +#: api.lua +msgid "Cooking" +msgstr "Cozimento" + +#: api.lua +msgid "Digging" +msgstr "Escavação" + +#: bags.lua +msgid "Bags" +msgstr "Bolsas" + +#: bags.lua +msgid "Bag @1" +msgstr "Bolsa @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Bolsa Pequena" + +#: bags.lua +msgid "Medium Bag" +msgstr "Bolsa Média" + +#: bags.lua +msgid "Large Bag" +msgstr "Bolsa Grande" + +#: group.lua +msgid " and " +msgstr " e " + +#: internal.lua +msgid "First page" +msgstr "Primeira Página" + +#: internal.lua +msgid "Back three pages" +msgstr "Voltar 3 Páginas" + +#: internal.lua +msgid "Back one page" +msgstr "Voltar 1 Página" + +#: internal.lua +msgid "Forward one page" +msgstr "Avançar 1 Página" + +#: internal.lua +msgid "Forward three pages" +msgstr "Avançar 3 Páginas" + +#: internal.lua +msgid "Last page" +msgstr "Ultima Página" + +#: internal.lua +msgid "Search" +msgstr "Pesquisar" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Redefinir pesquisa e exibir tudo" + +#: internal.lua +msgid "No matching items" +msgstr "Nenhum item correspondente" + +#: internal.lua +msgid "No matches." +msgstr "Sem correspondências" + +#: internal.lua +msgid "Page" +msgstr "Página" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s de %s" + +#: internal.lua +msgid "Filter" +msgstr "Filtro" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Pode usar o inventário do criativo" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" +"Força o Unified Inventory a ser exibido no modo Full se o modo Lite estiver " +"configurado globalmente" + +#: register.lua +msgid "Crafting Grid" +msgstr "Grade de Artesanato" + +#: register.lua +msgid "Crafting Guide" +msgstr "Guia de Artesanato" + +#: register.lua +msgid "Set home position" +msgstr "Definir posição de casa" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Posição inicial definida para: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "Você não tem o privilégio de \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Transportar para Casa" + +#: register.lua +msgid "Set time to day" +msgstr "Definir turno para dia" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Hora do dia definida para 06h" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "Você não tem o privilégio de \"settime\"!" + +#: register.lua +msgid "Set time to night" +msgstr "Definir turno para noite" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Hora do dia ajustada para 21h" + +#: register.lua +msgid "Clear inventory" +msgstr "Limpar Inventário" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Este botão foi desativado fora do modo de criativo para evitar o descarte " +"acidental de inventário. \n" +"Use o slot de lixo em vez disso." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Inventário Apagado!" + +#: register.lua +msgid "Trash:" +msgstr "Lixo:" + +#: register.lua +msgid "Refill:" +msgstr "Recarga:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Qualquer item pertencente ao grupo '%s'." + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Qualquer item pertencente aos grupos '%s'." + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Receita %d de %d" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Utilização %d de %d" + +#: register.lua +msgid "No recipes" +msgstr "Sem Receita" + +#: register.lua +msgid "No usages" +msgstr "Sem Utilização" + +#: register.lua +msgid "Result" +msgstr "Resultado" + +#: register.lua +msgid "Ingredient" +msgstr "Ingrediente" + +#: register.lua +msgid "Show next recipe" +msgstr "Exibir Próxima Receita" + +#: register.lua +msgid "Show next usage" +msgstr "Mostrar Próxima Utilização" + +#: register.lua +msgid "Show previous recipe" +msgstr "Exibir Receita Anterior" + +#: register.lua +msgid "Show previous usage" +msgstr "Exibir Utilização Anterior" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Gerado:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Esta receita é grande \n" +"demais para ser apresentada." + +#: register.lua +msgid "To craft grid:" +msgstr "Para Grade de Artesanato" + +#: register.lua +msgid "All" +msgstr "MAX" + +#: waypoints.lua +msgid "White" +msgstr "Branco" + +#: waypoints.lua +msgid "Yellow" +msgstr "Amarelo" + +#: waypoints.lua +msgid "Red" +msgstr "Vermelho" + +#: waypoints.lua +msgid "Green" +msgstr "Verde" + +#: waypoints.lua +msgid "Blue" +msgstr "Azul" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Apontador de Direção" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Seleção de Apontador de Direção #%02d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Apontador de Direção %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Configurar localização atual do Apontador de Direção" + +#: waypoints.lua +msgid "invisible" +msgstr "invisível" + +#: waypoints.lua +msgid "visible" +msgstr "visível" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Fazer Apontador de Direção @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 exibição de coordenadas de Fazer Apontador de Direção" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Mudar cor exibida do Apontador de Direção" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Editar Nome de Apontador de Direção" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Apontador de Direção Ativo" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Apontador de Direção Inativo" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Edição Finalizada" + +#: waypoints.lua +msgid "World position" +msgstr "Posição Mundial" + +#: waypoints.lua +msgid "Name" +msgstr "Nome" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Cor de HUD" diff --git a/mods/unified_inventory/locale/ru.po b/mods/unified_inventory/locale/ru.po new file mode 100644 index 0000000..7cf6144 --- /dev/null +++ b/mods/unified_inventory/locale/ru.po @@ -0,0 +1,366 @@ +# Russian translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# eternal_sorrow +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \n" +"Language-Team: \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: api.lua register.lua +#, fuzzy +msgid "Crafting" +msgstr "Крафт" + +#: api.lua +msgid "Mixing" +msgstr "Мешать" + +#: api.lua +msgid "Cooking" +msgstr "Варить" + +#: api.lua +msgid "Digging" +msgstr "Копать" + +#: bags.lua +msgid "Bags" +msgstr "Сумки" + +#: bags.lua +msgid "Bag @1" +msgstr "Сумка @1" + +#: bags.lua +msgid "Small Bag" +msgstr "Малая сумка" + +#: bags.lua +msgid "Medium Bag" +msgstr "Средняя сумка" + +#: bags.lua +msgid "Large Bag" +msgstr "Большая сумка" + +#: group.lua +msgid " and " +msgstr " и " + +#: internal.lua +msgid "First page" +msgstr "Первая страница" + +#: internal.lua +msgid "Back three pages" +msgstr "3 страницы назад" + +#: internal.lua +msgid "Back one page" +msgstr "1 страницу назад" + +#: internal.lua +msgid "Forward one page" +msgstr "1 страницу вперёд" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 страницы вперёд" + +#: internal.lua +msgid "Last page" +msgstr "Последняя страница" + +#: internal.lua +msgid "Search" +msgstr "Поиск" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "Сброс поиска, показать всё" + +#: internal.lua +msgid "No matching items" +msgstr "Нет подходящих элементов" + +#: internal.lua +msgid "No matches." +msgstr "Ничего не найдено" + +#: internal.lua +msgid "Page" +msgstr "Страница" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s из %s" + +#: internal.lua +msgid "Filter" +msgstr "Фильтр" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Можно использовать инвентарь творческого режима" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Решетка крафта" + +#: register.lua +msgid "Crafting Guide" +msgstr "Книга рецептов" + +#: register.lua +msgid "Set home position" +msgstr "Установить позицию дома" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Дом теперь расположен по коодинатам: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "У вас нет привилегии \"home\"!" + +#: register.lua +msgid "Go home" +msgstr "Отправиться домой" + +#: register.lua +msgid "Set time to day" +msgstr "День" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Установлено время 6 утра" + +#: register.lua +#, fuzzy +msgid "You don't have the settime privilege!" +msgstr "Вам не разрешено устанавливать время! (нет привилегии \"settime\")" + +#: register.lua +msgid "Set time to night" +msgstr "Ночь" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Установлено время 9 вечера" + +#: register.lua +msgid "Clear inventory" +msgstr "Очистить инвентарь" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" +"Эта кнопка отключена вне творческого режима, чтобы предотвратить случайное " +"уничтожение предметов.\n" +"Используйте слот корзины вместо нее." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Инвентарь очищен!" + +#: register.lua +msgid "Trash:" +msgstr "Мусор:" + +#: register.lua +msgid "Refill:" +msgstr "Наполнить:" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "Любой элемент из группы: %s" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "Любой элемент из группы: %s" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "Рецепт %s из %s" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Вариант %d of %d" + +#: register.lua +msgid "No recipes" +msgstr "Рецептов нет" + +#: register.lua +msgid "No usages" +msgstr "Не используется" + +#: register.lua +msgid "Result" +msgstr "Результат" + +#: register.lua +msgid "Ingredient" +msgstr "Состав" + +#: register.lua +msgid "Show next recipe" +msgstr "Следующий рецепт" + +#: register.lua +msgid "Show next usage" +msgstr "Следующее использование" + +#: register.lua +msgid "Show previous recipe" +msgstr "Прошлый рецепт" + +#: register.lua +msgid "Show previous usage" +msgstr "Прошлая страница" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Дай мне:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" +"Этот рецепт не\n" +"помещается в решетку." + +#: register.lua +msgid "To craft grid:" +msgstr "На решeтку крафта:" + +#: register.lua +msgid "All" +msgstr "Все" + +#: waypoints.lua +msgid "White" +msgstr "Белый" + +#: waypoints.lua +msgid "Yellow" +msgstr "Желтый" + +#: waypoints.lua +msgid "Red" +msgstr "Красный" + +#: waypoints.lua +msgid "Green" +msgstr "Зелёный" + +#: waypoints.lua +msgid "Blue" +msgstr "Синий" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Путевые точки" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "Выбрать путевую точку №%d" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "Путевая точка %d" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Установить путевую точку по текущей позиции" + +#: waypoints.lua +msgid "invisible" +msgstr "невидимой" + +#: waypoints.lua +msgid "visible" +msgstr "видимой" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Сделать путевую точку @1" + +#: waypoints.lua +msgid "Disable" +msgstr "Выключить" + +#: waypoints.lua +msgid "Enable" +msgstr "Включить" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "@1 показ координат путевых точек" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Поменять цвет путевой точки" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Переименовать путевую точку" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Путевая точка включена" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Путевая точка выключена" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Закончить редакцию" + +#: waypoints.lua +msgid "World position" +msgstr "Позиция мира" + +#: waypoints.lua +msgid "Name" +msgstr "Имя" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Цвет текста HUDа" diff --git a/mods/unified_inventory/locale/template.pot b/mods/unified_inventory/locale/template.pot new file mode 100644 index 0000000..105fd64 --- /dev/null +++ b/mods/unified_inventory/locale/template.pot @@ -0,0 +1,358 @@ +# LANGUAGE translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 03:34+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 register.lua +msgid "Crafting" +msgstr "" + +#: api.lua +msgid "Mixing" +msgstr "" + +#: api.lua +msgid "Cooking" +msgstr "" + +#: api.lua +msgid "Digging" +msgstr "" + +#: bags.lua +msgid "Bags" +msgstr "" + +#: bags.lua +msgid "Bag @1" +msgstr "" + +#: bags.lua +msgid "Small Bag" +msgstr "" + +#: bags.lua +msgid "Medium Bag" +msgstr "" + +#: bags.lua +msgid "Large Bag" +msgstr "" + +#: group.lua +msgid " and " +msgstr "" + +#: internal.lua +msgid "First page" +msgstr "" + +#: internal.lua +msgid "Back three pages" +msgstr "" + +#: internal.lua +msgid "Back one page" +msgstr "" + +#: internal.lua +msgid "Forward one page" +msgstr "" + +#: internal.lua +msgid "Forward three pages" +msgstr "" + +#: internal.lua +msgid "Last page" +msgstr "" + +#: internal.lua +msgid "Search" +msgstr "" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "" + +#: internal.lua +msgid "No matches." +msgstr "" + +#: internal.lua +msgid "Page" +msgstr "" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "" + +#: internal.lua +msgid "Filter" +msgstr "" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "" + +#: register.lua +msgid "Crafting Guide" +msgstr "" + +#: register.lua +msgid "Set home position" +msgstr "" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "" + +#: register.lua +msgid "Go home" +msgstr "" + +#: register.lua +msgid "Set time to day" +msgstr "" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "" + +#: register.lua +msgid "Set time to night" +msgstr "" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "" + +#: register.lua +msgid "Inventory cleared!" +msgstr "" + +#: register.lua +msgid "Trash:" +msgstr "" + +#: register.lua +msgid "Refill:" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "" + +#: register.lua +msgid "No recipes" +msgstr "" + +#: register.lua +msgid "No usages" +msgstr "" + +#: register.lua +msgid "Result" +msgstr "" + +#: register.lua +msgid "Ingredient" +msgstr "" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +msgid "To craft grid:" +msgstr "" + +#: register.lua +msgid "All" +msgstr "" + +#: waypoints.lua +msgid "White" +msgstr "" + +#: waypoints.lua +msgid "Yellow" +msgstr "" + +#: waypoints.lua +msgid "Red" +msgstr "" + +#: waypoints.lua +msgid "Green" +msgstr "" + +#: waypoints.lua +msgid "Blue" +msgstr "" + +#: waypoints.lua +msgid "Waypoints" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "" + +#: waypoints.lua +msgid "invisible" +msgstr "" + +#: waypoints.lua +msgid "visible" +msgstr "" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "" + +#: waypoints.lua +msgid "Finish editing" +msgstr "" + +#: waypoints.lua +msgid "World position" +msgstr "" + +#: waypoints.lua +msgid "Name" +msgstr "" + +#: waypoints.lua +msgid "HUD text color" +msgstr "" diff --git a/mods/unified_inventory/locale/tr.po b/mods/unified_inventory/locale/tr.po new file mode 100644 index 0000000..2b6211f --- /dev/null +++ b/mods/unified_inventory/locale/tr.po @@ -0,0 +1,360 @@ +# Turkish translation for the unified_inventory mod. +# Copyright (C) 2018 Maciej Kasatkin (RealBadAngel) +# This file is distributed under the same license as the unified_inventory package. +# Mahmutelmas06@hotmail.com +# CodeXP , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: unified_inventory\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-04-02 13:41+0200\n" +"PO-Revision-Date: \n" +"Last-Translator: CodeXP \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" + +#: api.lua register.lua +msgid "Crafting" +msgstr "Üretim" + +#: api.lua +msgid "Mixing" +msgstr "Karıştırma" + +#: api.lua +msgid "Cooking" +msgstr "Pişirme" + +#: api.lua +msgid "Digging" +msgstr "Kazma" + +#: bags.lua +msgid "Bags" +msgstr "Çantalarım" + +#: bags.lua +msgid "Bag @1" +msgstr "@1. Çanta" + +#: bags.lua +msgid "Small Bag" +msgstr "Küçük Çanta" + +#: bags.lua +msgid "Medium Bag" +msgstr "Çanta" + +#: bags.lua +msgid "Large Bag" +msgstr "Büyük Çanta" + +#: group.lua +msgid " and " +msgstr " ve " + +#: internal.lua +msgid "First page" +msgstr "İlk Sayfa" + +#: internal.lua +msgid "Back three pages" +msgstr "3 Sayfa Gerile" + +#: internal.lua +msgid "Back one page" +msgstr "Geri" + +#: internal.lua +msgid "Forward one page" +msgstr "İleri" + +#: internal.lua +msgid "Forward three pages" +msgstr "3 Sayfa İlerile" + +#: internal.lua +msgid "Last page" +msgstr "Son Sayfa" + +#: internal.lua +msgid "Search" +msgstr "Ara" + +#: internal.lua +msgid "Reset search and display everything" +msgstr "" + +#: internal.lua +msgid "No matching items" +msgstr "Eşleşme yok" + +#: internal.lua +msgid "No matches." +msgstr "Eşleşme yok" + +#: internal.lua +msgid "Page" +msgstr "Sayfa" + +#: internal.lua +#, lua-format +msgid "%s of %s" +msgstr "%s dan %s" + +#: internal.lua +msgid "Filter" +msgstr "Süzgeç" + +#: register.lua +msgid "Can use the creative inventory" +msgstr "Yaratıcı envanteri kullanabilir" + +#: register.lua +msgid "" +"Forces Unified Inventory to be displayed in Full mode if Lite mode is " +"configured globally" +msgstr "" + +#: register.lua +msgid "Crafting Grid" +msgstr "Üretim tablosu" + +#: register.lua +msgid "Crafting Guide" +msgstr "Kılavuz" + +#: register.lua +msgid "Set home position" +msgstr "Set ev pozisyon" + +#: register.lua +#, lua-format +msgid "Home position set to: %s" +msgstr "Yeni eviniz: %s" + +#: register.lua +msgid "You don't have the \"home\" privilege!" +msgstr "\"home\" yetkiniz yok!" + +#: register.lua +msgid "Go home" +msgstr "Eve git" + +#: register.lua +msgid "Set time to day" +msgstr "Güne zaman ayarla" + +#: register.lua +msgid "Time of day set to 6am" +msgstr "Saat 06:00 olarak ayarlandı" + +#: register.lua +msgid "You don't have the settime privilege!" +msgstr "\"settime\" yetkiniz yok!" + +#: register.lua +msgid "Set time to night" +msgstr "Geceye zaman ayarla" + +#: register.lua +msgid "Time of day set to 9pm" +msgstr "Saat 19:00 olarak ayarlandı" + +#: register.lua +msgid "Clear inventory" +msgstr "" + +#: register.lua +msgid "" +"This button has been disabled outside of creative mode to prevent accidental " +"inventory trashing.\n" +"Use the trash slot instead." +msgstr "Yaratıcı modu dışında iken bu tuş kullanılamaz." + +#: register.lua +msgid "Inventory cleared!" +msgstr "Envanter temizlendi!" + +#: register.lua +msgid "Trash:" +msgstr "Çöp" + +#: register.lua +msgid "Refill:" +msgstr "Doldur" + +#: register.lua +#, lua-format +msgid "Any item belonging to the %s group" +msgstr "" + +#: register.lua +#, lua-format +msgid "Any item belonging to the groups %s" +msgstr "" + +#: register.lua +#, lua-format +msgid "Recipe %d of %d" +msgstr "%d dan %d tarifi" + +#: register.lua +#, lua-format +msgid "Usage %d of %d" +msgstr "Kullanım %d/%d" + +#: register.lua +msgid "No recipes" +msgstr "Tarifi yok" + +#: register.lua +msgid "No usages" +msgstr "Kullanım yok" + +#: register.lua +msgid "Result" +msgstr "Çıktı" + +#: register.lua +msgid "Ingredient" +msgstr "Bileşen" + +#: register.lua +msgid "Show next recipe" +msgstr "" + +#: register.lua +msgid "Show next usage" +msgstr "" + +#: register.lua +msgid "Show previous recipe" +msgstr "" + +#: register.lua +msgid "Show previous usage" +msgstr "" + +#: register.lua +#, lua-format +msgid "%s (%s)" +msgstr "" + +#: register.lua +msgid "Give me:" +msgstr "Ver bana:" + +#: register.lua +msgid "" +"This recipe is too\n" +"large to be displayed." +msgstr "" + +#: register.lua +#, fuzzy +msgid "To craft grid:" +msgstr "Üretim tablosuna kopyala" + +#: register.lua +msgid "All" +msgstr "Tümü" + +#: waypoints.lua +msgid "White" +msgstr "Beyaz" + +#: waypoints.lua +msgid "Yellow" +msgstr "Sarı" + +#: waypoints.lua +msgid "Red" +msgstr "Kırmızı" + +#: waypoints.lua +msgid "Green" +msgstr "Yeşil" + +#: waypoints.lua +msgid "Blue" +msgstr "Mavi" + +#: waypoints.lua +msgid "Waypoints" +msgstr "Konum Noktaları" + +#: waypoints.lua +#, lua-format +msgid "Select Waypoint #%d" +msgstr "#%d konum noktası seç" + +#: waypoints.lua +#, lua-format +msgid "Waypoint %d" +msgstr "%d Konum Noktaları" + +#: waypoints.lua +msgid "Set waypoint to current location" +msgstr "Bulunduğun noktayı işaretle" + +#: waypoints.lua +msgid "invisible" +msgstr "görünmez" + +#: waypoints.lua +msgid "visible" +msgstr "görünür" + +#: waypoints.lua +msgid "Make waypoint @1" +msgstr "Yol noktası @1" + +#: waypoints.lua +msgid "Disable" +msgstr "" + +#: waypoints.lua +msgid "Enable" +msgstr "" + +#: waypoints.lua +msgid "@1 display of waypoint coordinates" +msgstr "Yol noktası koordinatlarının görüntülenmesini @1" + +#: waypoints.lua +msgid "Change color of waypoint display" +msgstr "Konum Gösterge Rengi" + +#: waypoints.lua +msgid "Edit waypoint name" +msgstr "Konum Noktasını Düzenle" + +#: waypoints.lua +msgid "Waypoint active" +msgstr "Konum Etkin" + +#: waypoints.lua +msgid "Waypoint inactive" +msgstr "Konum Devredışı" + +#: waypoints.lua +msgid "Finish editing" +msgstr "Düzenleme bitti" + +#: waypoints.lua +msgid "World position" +msgstr "Dünya konumu" + +#: waypoints.lua +msgid "Name" +msgstr "İsim" + +#: waypoints.lua +msgid "HUD text color" +msgstr "Metin rengi" diff --git a/mods/unified_inventory/mod.conf b/mods/unified_inventory/mod.conf new file mode 100644 index 0000000..26a8af6 --- /dev/null +++ b/mods/unified_inventory/mod.conf @@ -0,0 +1 @@ +name = unified_inventory diff --git a/mods/unified_inventory/register.lua b/mods/unified_inventory/register.lua new file mode 100644 index 0000000..dd2b3cc --- /dev/null +++ b/mods/unified_inventory/register.lua @@ -0,0 +1,575 @@ +local S = unified_inventory.gettext +local F = minetest.formspec_escape + +minetest.register_privilege("creative", { + description = S("Can use the creative inventory"), + give_to_singleplayer = false, +}) + +minetest.register_privilege("ui_full", { + description = S("Forces Unified Inventory to be displayed in Full mode if Lite mode is configured globally"), + give_to_singleplayer = false, +}) + + +local trash = minetest.create_detached_inventory("trash", { + --allow_put = function(inv, listname, index, stack, player) + -- if unified_inventory.is_creative(player:get_player_name()) then + -- return stack:get_count() + -- else + -- return 0 + -- end + --end, + on_put = function(inv, listname, index, stack, player) + inv:set_stack(listname, index, nil) + local player_name = player:get_player_name() + minetest.sound_play("trash", {to_player=player_name, gain = 1.0}) + end, +}) +trash:set_size("main", 1) + +unified_inventory.register_button("craft", { + type = "image", + image = "ui_craft_icon.png", + tooltip = S("Crafting Grid") +}) + +unified_inventory.register_button("craftguide", { + type = "image", + image = "ui_craftguide_icon.png", + tooltip = S("Crafting Guide") +}) + +unified_inventory.register_button("home_gui_set", { + type = "image", + image = "ui_sethome_icon.png", + tooltip = S("Set home position"), + hide_lite=true, + action = function(player) + local player_name = player:get_player_name() + if minetest.check_player_privs(player_name, {home=true}) then + unified_inventory.set_home(player, player:getpos()) + local home = unified_inventory.home_pos[player_name] + if home ~= nil then + minetest.sound_play("dingdong", + {to_player=player_name, gain = 1.0}) + minetest.chat_send_player(player_name, + S("Home position set to: %s"):format(minetest.pos_to_string(home))) + end + else + minetest.chat_send_player(player_name, + S("You don't have the \"home\" privilege!")) + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + end + end, + condition = function(player) + return minetest.check_player_privs(player:get_player_name(), {home=true}) + end, +}) + +unified_inventory.register_button("home_gui_go", { + type = "image", + image = "ui_gohome_icon.png", + tooltip = S("Go home"), + hide_lite=true, + action = function(player) + local player_name = player:get_player_name() + if minetest.check_player_privs(player_name, {home=true}) then + minetest.sound_play("teleport", + {to_player=player:get_player_name(), gain = 1.0}) + unified_inventory.go_home(player) + else + minetest.chat_send_player(player_name, + S("You don't have the \"home\" privilege!")) + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + end + end, + condition = function(player) + return minetest.check_player_privs(player:get_player_name(), {home=true}) + end, +}) + +unified_inventory.register_button("misc_set_day", { + type = "image", + image = "ui_sun_icon.png", + tooltip = S("Set time to day"), + hide_lite=true, + action = function(player) + local player_name = player:get_player_name() + if minetest.check_player_privs(player_name, {settime=true}) then + minetest.sound_play("birds", + {to_player=player_name, gain = 1.0}) + minetest.set_timeofday((6000 % 24000) / 24000) + minetest.chat_send_player(player_name, + S("Time of day set to 6am")) + else + minetest.chat_send_player(player_name, + S("You don't have the settime privilege!")) + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + end + end, + condition = function(player) + return minetest.check_player_privs(player:get_player_name(), {settime=true}) + end, +}) + +unified_inventory.register_button("misc_set_night", { + type = "image", + image = "ui_moon_icon.png", + tooltip = S("Set time to night"), + hide_lite=true, + action = function(player) + local player_name = player:get_player_name() + if minetest.check_player_privs(player_name, {settime=true}) then + minetest.sound_play("owl", + {to_player=player_name, gain = 1.0}) + minetest.set_timeofday((21000 % 24000) / 24000) + minetest.chat_send_player(player_name, + S("Time of day set to 9pm")) + else + minetest.chat_send_player(player_name, + S("You don't have the settime privilege!")) + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + end + end, + condition = function(player) + return minetest.check_player_privs(player:get_player_name(), {settime=true}) + end, +}) + +unified_inventory.register_button("clear_inv", { + type = "image", + image = "ui_trash_icon.png", + tooltip = S("Clear inventory"), + action = function(player) + local player_name = player:get_player_name() + if not unified_inventory.is_creative(player_name) then + minetest.chat_send_player(player_name, + S("This button has been disabled outside" + .." of creative mode to prevent" + .." accidental inventory trashing." + .."\nUse the trash slot instead.")) + unified_inventory.set_inventory_formspec(player, unified_inventory.current_page[player_name]) + return + end + player:get_inventory():set_list("main", {}) + minetest.chat_send_player(player_name, S('Inventory cleared!')) + minetest.sound_play("trash_all", + {to_player=player_name, gain = 1.0}) + end, + condition = function(player) + return unified_inventory.is_creative(player:get_player_name()) + end, +}) + +unified_inventory.register_page("craft", { + get_formspec = function(player, perplayer_formspec) + + local formspecy = perplayer_formspec.formspec_y + local formheadery = perplayer_formspec.form_header_y + + local player_name = player:get_player_name() + local formspec = "background[2,"..formspecy..";6,3;ui_crafting_form.png]" + formspec = formspec.."background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]" + formspec = formspec.."label[0,"..formheadery..";" ..F(S("Crafting")).."]" + formspec = formspec.."listcolors[#00000000;#00000000]" + formspec = formspec.."list[current_player;craftpreview;6,"..formspecy..";1,1;]" + formspec = formspec.."list[current_player;craft;2,"..formspecy..";3,3;]" + if unified_inventory.trash_enabled or unified_inventory.is_creative(player_name) or minetest.get_player_privs(player_name).give then + formspec = formspec.."label[7,"..(formspecy + 1.5)..";" .. F(S("Trash:")) .. "]" + formspec = formspec.."background[7,"..(formspecy + 2)..";1,1;ui_single_slot.png]" + formspec = formspec.."list[detached:trash;main;7,"..(formspecy + 2)..";1,1;]" + end + formspec = formspec.."listring[current_name;craft]" + formspec = formspec.."listring[current_player;main]" + if unified_inventory.is_creative(player_name) then + formspec = formspec.."label[0,"..(formspecy + 1.5)..";" .. F(S("Refill:")) .. "]" + formspec = formspec.."list[detached:"..F(player_name).."refill;main;0,"..(formspecy +2)..";1,1;]" + end + return {formspec=formspec} + end, +}) + +-- stack_image_button(): generate a form button displaying a stack of items +-- +-- The specified item may be a group. In that case, the group will be +-- represented by some item in the group, along with a flag indicating +-- that it's a group. If the group contains only one item, it will be +-- treated as if that item had been specified directly. + +local function stack_image_button(x, y, w, h, buttonname_prefix, item) + local name = item:get_name() + local count = item:get_count() + local show_is_group = false + local displayitem = name.." "..count + local selectitem = name + if name:sub(1, 6) == "group:" then + local group_name = name:sub(7) + local group_item = unified_inventory.get_group_item(group_name) + show_is_group = not group_item.sole + displayitem = group_item.item or "unknown" + selectitem = group_item.sole and displayitem or name + end + local label = show_is_group and "G" or "" + local buttonname = F(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem)) + local button = string.format("item_image_button[%f,%f;%f,%f;%s;%s;%s]", + x, y, w, h, + F(displayitem), buttonname, label) + if show_is_group then + local groupstring, andcount = unified_inventory.extract_groupnames(name) + local grouptip + if andcount == 1 then + grouptip = string.format(S("Any item belonging to the %s group"), groupstring) + elseif andcount > 1 then + grouptip = string.format(S("Any item belonging to the groups %s"), groupstring) + end + grouptip = F(grouptip) + if andcount >= 1 then + button = button .. string.format("tooltip[%s;%s]", buttonname, grouptip) + end + end + return button +end + +local recipe_text = { + recipe = S("Recipe %d of %d"), + usage = S("Usage %d of %d"), +} +local no_recipe_text = { + recipe = S("No recipes"), + usage = S("No usages"), +} +local role_text = { + recipe = S("Result"), + usage = S("Ingredient"), +} +local next_alt_text = { + recipe = S("Show next recipe"), + usage = S("Show next usage"), +} +local prev_alt_text = { + recipe = S("Show previous recipe"), + usage = S("Show previous usage"), +} +local other_dir = { + recipe = "usage", + usage = "recipe", +} + +unified_inventory.register_page("craftguide", { + get_formspec = function(player, perplayer_formspec) + + local formspecy = perplayer_formspec.formspec_y + local formheadery = perplayer_formspec.form_header_y + local craftresultx = perplayer_formspec.craft_result_x + local craftresulty = perplayer_formspec.craft_result_y + + local player_name = player:get_player_name() + local player_privs = minetest.get_player_privs(player_name) + local formspec = "" + formspec = formspec.."background[0,"..(formspecy + 3.5)..";8,4;ui_main_inventory.png]" + formspec = formspec.."label[0,"..formheadery..";" .. F(S("Crafting Guide")) .. "]" + formspec = formspec.."listcolors[#00000000;#00000000]" + local item_name = unified_inventory.current_item[player_name] + if not item_name then return {formspec=formspec} end + local item_name_shown + if minetest.registered_items[item_name] and minetest.registered_items[item_name].description then + item_name_shown = string.format(S("%s (%s)"), minetest.registered_items[item_name].description, item_name) + else + item_name_shown = item_name + end + + local dir = unified_inventory.current_craft_direction[player_name] + local rdir + if dir == "recipe" then rdir = "usage" end + if dir == "usage" then rdir = "recipe" end + local crafts = unified_inventory.crafts_for[dir][item_name] + local alternate = unified_inventory.alternate[player_name] + local alternates, craft + if crafts ~= nil and #crafts > 0 then + alternates = #crafts + craft = crafts[alternate] + end + local has_creative = player_privs.give or player_privs.creative or + minetest.settings:get_bool("creative_mode") + + formspec = formspec.."background[0.5,"..(formspecy + 0.2)..";8,3;ui_craftguide_form.png]" + formspec = formspec.."textarea["..craftresultx..","..craftresulty + ..";10,1;;"..F(role_text[dir])..": "..item_name_shown..";]" + formspec = formspec..stack_image_button(0, formspecy, 1.1, 1.1, "item_button_" + .. rdir .. "_", ItemStack(item_name)) + + if not craft then + formspec = formspec.."label[5.5,"..(formspecy + 2.35)..";" + ..F(no_recipe_text[dir]).."]" + local no_pos = dir == "recipe" and 4.5 or 6.5 + local item_pos = dir == "recipe" and 6.5 or 4.5 + formspec = formspec.."image["..no_pos..","..formspecy..";1.1,1.1;ui_no.png]" + formspec = formspec..stack_image_button(item_pos, formspecy, 1.1, 1.1, "item_button_" + ..other_dir[dir].."_", ItemStack(item_name)) + if has_creative then + formspec = formspec.."label[0,"..(formspecy + 2.10)..";" .. F(S("Give me:")) .. "]" + .."button[0, "..(formspecy + 2.7)..";0.6,0.5;craftguide_giveme_1;1]" + .."button[0.6,"..(formspecy + 2.7)..";0.7,0.5;craftguide_giveme_10;10]" + .."button[1.3,"..(formspecy + 2.7)..";0.8,0.5;craftguide_giveme_99;99]" + end + return {formspec = formspec} + end + + local craft_type = unified_inventory.registered_craft_types[craft.type] or + unified_inventory.craft_type_defaults(craft.type, {}) + if craft_type.icon then + formspec = formspec..string.format(" image[%f,%f;%f,%f;%s]",5.7,(formspecy + 0.05),0.5,0.5,craft_type.icon) + end + formspec = formspec.."label[5.5,"..(formspecy + 1)..";" .. F(craft_type.description).."]" + formspec = formspec..stack_image_button(6.5, formspecy, 1.1, 1.1, "item_button_usage_", ItemStack(craft.output)) + local display_size = craft_type.dynamic_display_size and craft_type.dynamic_display_size(craft) or { width = craft_type.width, height = craft_type.height } + local craft_width = craft_type.get_shaped_craft_width and craft_type.get_shaped_craft_width(craft) or display_size.width + + -- This keeps recipes aligned to the right, + -- so that they're close to the arrow. + local xoffset = 5.5 + -- Offset factor for crafting grids with side length > 4 + local of = (3/math.max(3, math.max(display_size.width, display_size.height))) + local od = 0 + -- Minimum grid size at which size optimazation measures kick in + local mini_craft_size = 6 + if display_size.width >= mini_craft_size then + od = math.max(1, display_size.width - 2) + xoffset = xoffset - 0.1 + end + -- Size modifier factor + local sf = math.min(1, of * (1.05 + 0.05*od)) + -- Button size + local bsize_h = 1.1 * sf + local bsize_w = bsize_h + if display_size.width >= mini_craft_size then + bsize_w = 1.175 * sf + end + if (bsize_h > 0.35 and display_size.width) then + for y = 1, display_size.height do + for x = 1, display_size.width do + local item + if craft and x <= craft_width then + item = craft.items[(y-1) * craft_width + x] + end + -- Flipped x, used to build formspec buttons from right to left + local fx = display_size.width - (x-1) + -- x offset, y offset + local xof = (fx-1) * of + of + local yof = (y-1) * of + 1 + if item then + formspec = formspec..stack_image_button( + xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h, + "item_button_recipe_", + ItemStack(item)) + else + -- Fake buttons just to make grid + formspec = formspec.."image_button[" + ..tostring(xoffset - xof)..","..tostring(formspecy - 1 + yof) + ..";"..bsize_w..","..bsize_h..";ui_blank_image.png;;]" + end + end + end + else + -- Error + formspec = formspec.."label[" + ..tostring(2)..","..tostring(formspecy) + ..";"..F(S("This recipe is too\nlarge to be displayed.")).."]" + end + + if craft_type.uses_crafting_grid and display_size.width <= 3 then + formspec = formspec.."label[0,"..(formspecy + 0.9)..";" .. F(S("To craft grid:")) .. "]" + .."button[0, "..(formspecy + 1.5)..";0.6,0.5;craftguide_craft_1;1]" + .."button[0.6,"..(formspecy + 1.5)..";0.7,0.5;craftguide_craft_10;10]" + .."button[1.3,"..(formspecy + 1.5)..";0.8,0.5;craftguide_craft_max;" .. F(S("All")) .. "]" + end + if has_creative then + formspec = formspec.."label[0,"..(formspecy + 2.1)..";" .. F(S("Give me:")) .. "]" + .."button[0, "..(formspecy + 2.7)..";0.6,0.5;craftguide_giveme_1;1]" + .."button[0.6,"..(formspecy + 2.7)..";0.7,0.5;craftguide_giveme_10;10]" + .."button[1.3,"..(formspecy + 2.7)..";0.8,0.5;craftguide_giveme_99;99]" + end + + if alternates and alternates > 1 then + formspec = formspec.."label[5.5,"..(formspecy + 1.6)..";" + ..string.format(F(recipe_text[dir]), alternate, alternates).."]" + .."image_button[5.5,"..(formspecy + 2)..";1,1;ui_left_icon.png;alternate_prev;]" + .."image_button[6.5,"..(formspecy + 2)..";1,1;ui_right_icon.png;alternate;]" + .."tooltip[alternate_prev;"..F(prev_alt_text[dir]).."]" + .."tooltip[alternate;"..F(next_alt_text[dir]).."]" + end + return {formspec = formspec} + end, +}) + +local function craftguide_giveme(player, formname, fields) + local amount + for k, v in pairs(fields) do + amount = k:match("craftguide_giveme_(.*)") + if amount then break end + end + if not amount then return end + + amount = tonumber(amount) + if amount == 0 then return end + + local player_name = player:get_player_name() + + local output = unified_inventory.current_item[player_name] + if (not output) or (output == "") then return end + + local player_inv = player:get_inventory() + + player_inv:add_item("main", {name = output, count = amount}) +end + +-- tells if an item can be moved and returns an index if so +local function item_fits(player_inv, craft_item, needed_item) + local need_group = string.sub(needed_item, 1, 6) == "group:" + if need_group then + need_group = string.sub(needed_item, 7) + end + if craft_item + and not craft_item:is_empty() then + local ciname = craft_item:get_name() + + -- abort if the item there isn't usable + if ciname ~= needed_item + and not need_group then + return + end + + -- abort if no item fits onto it + if craft_item:get_count() >= craft_item:get_definition().stack_max then + return + end + + -- use the item there if it's in the right group and a group item is needed + if need_group then + if minetest.get_item_group(ciname, need_group) == 0 then + return + end + needed_item = ciname + need_group = false + end + end + + if need_group then + -- search an item of the specific group + for i,item in pairs(player_inv:get_list("main")) do + if not item:is_empty() + and minetest.get_item_group(item:get_name(), need_group) > 0 then + return i + end + end + + -- no index found + return + end + + -- search an item with a the name needed_item + for i,item in pairs(player_inv:get_list("main")) do + if not item:is_empty() + and item:get_name() == needed_item then + return i + end + end + + -- no index found +end + +-- modifies the player inventory and returns the changed craft_item if possible +local function move_item(player_inv, craft_item, needed_item) + local stackid = item_fits(player_inv, craft_item, needed_item) + if not stackid then + return + end + local wanted_stack = player_inv:get_stack("main", stackid) + local taken_item = wanted_stack:take_item() + player_inv:set_stack("main", stackid, wanted_stack) + + if not craft_item + or craft_item:is_empty() then + return taken_item + end + + craft_item:add_item(taken_item) + return craft_item +end + +local function craftguide_craft(player, formname, fields) + local amount + for k, v in pairs(fields) do + amount = k:match("craftguide_craft_(.*)") + if amount then break end + end + if not amount then return end + local player_name = player:get_player_name() + + local output = unified_inventory.current_item[player_name] + if (not output) or (output == "") then return end + + local player_inv = player:get_inventory() + + local crafts = unified_inventory.crafts_for[unified_inventory.current_craft_direction[player_name]][output] + if (not crafts) or (#crafts == 0) then return end + + local alternate = unified_inventory.alternate[player_name] + + local craft = crafts[alternate] + if craft.width > 3 then return end + + local needed = craft.items + + local craft_list = player_inv:get_list("craft") + + local width = craft.width + if width == 0 then + -- Shapeless recipe + width = 3 + end + + amount = tonumber(amount) or 99 + --[[ + if amount == "max" then + amount = 99 -- Arbitrary; need better way to do this. + else + amount = tonumber(amount) + end--]] + + for iter = 1, amount do + local index = 1 + for y = 1, 3 do + for x = 1, width do + local needed_item = needed[index] + if needed_item then + local craft_index = ((y - 1) * 3) + x + local craft_item = craft_list[craft_index] + local newitem = move_item(player_inv, craft_item, needed_item) + if newitem then + craft_list[craft_index] = newitem + end + end + index = index + 1 + end + end + end + + player_inv:set_list("craft", craft_list) + + unified_inventory.set_inventory_formspec(player, "craft") +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + for k, v in pairs(fields) do + if k:match("craftguide_craft_") then + craftguide_craft(player, formname, fields) + return + end + if k:match("craftguide_giveme_") then + craftguide_giveme(player, formname, fields) + return + end + end +end) diff --git a/mods/unified_inventory/screenshot.png b/mods/unified_inventory/screenshot.png new file mode 100644 index 0000000..972cbb4 Binary files /dev/null and b/mods/unified_inventory/screenshot.png differ diff --git a/mods/unified_inventory/settingtypes.txt b/mods/unified_inventory/settingtypes.txt new file mode 100644 index 0000000..910989f --- /dev/null +++ b/mods/unified_inventory/settingtypes.txt @@ -0,0 +1,11 @@ +#Enabling lite mode enables a smaller and simpler version of the Unified +#Inventory, optimized for small displays. +unified_inventory_lite (Lite mode) bool false + +#If enabled, bags will be made available which can be used to extend +#inventory storage size. +unified_inventory_bags (Enable bags) bool true + +#If enabled, the trash slot can be used by those without both creative +#and the give privilege. +unified_inventory_trash (Enable trash) bool true diff --git a/mods/unified_inventory/sounds/birds.ogg b/mods/unified_inventory/sounds/birds.ogg new file mode 100644 index 0000000..4a93395 Binary files /dev/null and b/mods/unified_inventory/sounds/birds.ogg differ diff --git a/mods/unified_inventory/sounds/click.ogg b/mods/unified_inventory/sounds/click.ogg new file mode 100644 index 0000000..3db63a0 Binary files /dev/null and b/mods/unified_inventory/sounds/click.ogg differ diff --git a/mods/unified_inventory/sounds/dingdong.ogg b/mods/unified_inventory/sounds/dingdong.ogg new file mode 100644 index 0000000..2c9d7ef Binary files /dev/null and b/mods/unified_inventory/sounds/dingdong.ogg differ diff --git a/mods/unified_inventory/sounds/electricity.ogg b/mods/unified_inventory/sounds/electricity.ogg new file mode 100644 index 0000000..4cd7c84 Binary files /dev/null and b/mods/unified_inventory/sounds/electricity.ogg differ diff --git a/mods/unified_inventory/sounds/owl.ogg b/mods/unified_inventory/sounds/owl.ogg new file mode 100644 index 0000000..f30d0b3 Binary files /dev/null and b/mods/unified_inventory/sounds/owl.ogg differ diff --git a/mods/unified_inventory/sounds/paperflip1.ogg b/mods/unified_inventory/sounds/paperflip1.ogg new file mode 100644 index 0000000..eaed13f Binary files /dev/null and b/mods/unified_inventory/sounds/paperflip1.ogg differ diff --git a/mods/unified_inventory/sounds/paperflip2.ogg b/mods/unified_inventory/sounds/paperflip2.ogg new file mode 100644 index 0000000..321bc48 Binary files /dev/null and b/mods/unified_inventory/sounds/paperflip2.ogg differ diff --git a/mods/unified_inventory/sounds/teleport.ogg b/mods/unified_inventory/sounds/teleport.ogg new file mode 100644 index 0000000..ca32f74 Binary files /dev/null and b/mods/unified_inventory/sounds/teleport.ogg differ diff --git a/mods/unified_inventory/sounds/trash.ogg b/mods/unified_inventory/sounds/trash.ogg new file mode 100644 index 0000000..51e4f24 Binary files /dev/null and b/mods/unified_inventory/sounds/trash.ogg differ diff --git a/mods/unified_inventory/sounds/trash_all.ogg b/mods/unified_inventory/sounds/trash_all.ogg new file mode 100644 index 0000000..85c3f66 Binary files /dev/null and b/mods/unified_inventory/sounds/trash_all.ogg differ diff --git a/mods/unified_inventory/textures/bags_large.png b/mods/unified_inventory/textures/bags_large.png new file mode 100644 index 0000000..6d56299 Binary files /dev/null and b/mods/unified_inventory/textures/bags_large.png differ diff --git a/mods/unified_inventory/textures/bags_medium.png b/mods/unified_inventory/textures/bags_medium.png new file mode 100644 index 0000000..59ba11d Binary files /dev/null and b/mods/unified_inventory/textures/bags_medium.png differ diff --git a/mods/unified_inventory/textures/bags_small.png b/mods/unified_inventory/textures/bags_small.png new file mode 100644 index 0000000..d48ffcb Binary files /dev/null and b/mods/unified_inventory/textures/bags_small.png differ diff --git a/mods/unified_inventory/textures/ui_1_icon.png b/mods/unified_inventory/textures/ui_1_icon.png new file mode 100644 index 0000000..f4e85a0 Binary files /dev/null and b/mods/unified_inventory/textures/ui_1_icon.png differ diff --git a/mods/unified_inventory/textures/ui_2_icon.png b/mods/unified_inventory/textures/ui_2_icon.png new file mode 100644 index 0000000..96175a6 Binary files /dev/null and b/mods/unified_inventory/textures/ui_2_icon.png differ diff --git a/mods/unified_inventory/textures/ui_3_icon.png b/mods/unified_inventory/textures/ui_3_icon.png new file mode 100644 index 0000000..1db2916 Binary files /dev/null and b/mods/unified_inventory/textures/ui_3_icon.png differ diff --git a/mods/unified_inventory/textures/ui_4_icon.png b/mods/unified_inventory/textures/ui_4_icon.png new file mode 100644 index 0000000..f344af4 Binary files /dev/null and b/mods/unified_inventory/textures/ui_4_icon.png differ diff --git a/mods/unified_inventory/textures/ui_5_icon.png b/mods/unified_inventory/textures/ui_5_icon.png new file mode 100644 index 0000000..e5dc4b0 Binary files /dev/null and b/mods/unified_inventory/textures/ui_5_icon.png differ diff --git a/mods/unified_inventory/textures/ui_bags_icon.png b/mods/unified_inventory/textures/ui_bags_icon.png new file mode 100644 index 0000000..6d56299 Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_icon.png differ diff --git a/mods/unified_inventory/textures/ui_bags_lg_form.png b/mods/unified_inventory/textures/ui_bags_lg_form.png new file mode 100644 index 0000000..713cacc Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_lg_form.png differ diff --git a/mods/unified_inventory/textures/ui_bags_main_form.png b/mods/unified_inventory/textures/ui_bags_main_form.png new file mode 100644 index 0000000..37450f3 Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_main_form.png differ diff --git a/mods/unified_inventory/textures/ui_bags_med_form.png b/mods/unified_inventory/textures/ui_bags_med_form.png new file mode 100644 index 0000000..33e922e Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_med_form.png differ diff --git a/mods/unified_inventory/textures/ui_bags_sm_form.png b/mods/unified_inventory/textures/ui_bags_sm_form.png new file mode 100644 index 0000000..b3b66bb Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_sm_form.png differ diff --git a/mods/unified_inventory/textures/ui_bags_trash.png b/mods/unified_inventory/textures/ui_bags_trash.png new file mode 100644 index 0000000..6338999 Binary files /dev/null and b/mods/unified_inventory/textures/ui_bags_trash.png differ diff --git a/mods/unified_inventory/textures/ui_blank_image.png b/mods/unified_inventory/textures/ui_blank_image.png new file mode 100644 index 0000000..a8735b8 Binary files /dev/null and b/mods/unified_inventory/textures/ui_blank_image.png differ diff --git a/mods/unified_inventory/textures/ui_blue_icon_background.png b/mods/unified_inventory/textures/ui_blue_icon_background.png new file mode 100644 index 0000000..9434217 Binary files /dev/null and b/mods/unified_inventory/textures/ui_blue_icon_background.png differ diff --git a/mods/unified_inventory/textures/ui_circular_arrows_icon.png b/mods/unified_inventory/textures/ui_circular_arrows_icon.png new file mode 100644 index 0000000..d687bbf Binary files /dev/null and b/mods/unified_inventory/textures/ui_circular_arrows_icon.png differ diff --git a/mods/unified_inventory/textures/ui_craft_icon.png b/mods/unified_inventory/textures/ui_craft_icon.png new file mode 100644 index 0000000..fbe4cc7 Binary files /dev/null and b/mods/unified_inventory/textures/ui_craft_icon.png differ diff --git a/mods/unified_inventory/textures/ui_craftgrid_icon.png b/mods/unified_inventory/textures/ui_craftgrid_icon.png new file mode 100644 index 0000000..6731327 Binary files /dev/null and b/mods/unified_inventory/textures/ui_craftgrid_icon.png differ diff --git a/mods/unified_inventory/textures/ui_craftguide_form.png b/mods/unified_inventory/textures/ui_craftguide_form.png new file mode 100644 index 0000000..3cd8643 Binary files /dev/null and b/mods/unified_inventory/textures/ui_craftguide_form.png differ diff --git a/mods/unified_inventory/textures/ui_craftguide_icon.png b/mods/unified_inventory/textures/ui_craftguide_icon.png new file mode 100644 index 0000000..5866b7b Binary files /dev/null and b/mods/unified_inventory/textures/ui_craftguide_icon.png differ diff --git a/mods/unified_inventory/textures/ui_crafting_form.png b/mods/unified_inventory/textures/ui_crafting_form.png new file mode 100644 index 0000000..8c980ac Binary files /dev/null and b/mods/unified_inventory/textures/ui_crafting_form.png differ diff --git a/mods/unified_inventory/textures/ui_doubleleft_icon.png b/mods/unified_inventory/textures/ui_doubleleft_icon.png new file mode 100644 index 0000000..587bb25 Binary files /dev/null and b/mods/unified_inventory/textures/ui_doubleleft_icon.png differ diff --git a/mods/unified_inventory/textures/ui_doubleright_icon.png b/mods/unified_inventory/textures/ui_doubleright_icon.png new file mode 100644 index 0000000..f552acc Binary files /dev/null and b/mods/unified_inventory/textures/ui_doubleright_icon.png differ diff --git a/mods/unified_inventory/textures/ui_form_bg.png b/mods/unified_inventory/textures/ui_form_bg.png new file mode 100644 index 0000000..74a6a3b Binary files /dev/null and b/mods/unified_inventory/textures/ui_form_bg.png differ diff --git a/mods/unified_inventory/textures/ui_gohome_icon.png b/mods/unified_inventory/textures/ui_gohome_icon.png new file mode 100644 index 0000000..b3397ef Binary files /dev/null and b/mods/unified_inventory/textures/ui_gohome_icon.png differ diff --git a/mods/unified_inventory/textures/ui_green_icon_background.png b/mods/unified_inventory/textures/ui_green_icon_background.png new file mode 100644 index 0000000..b06c29c Binary files /dev/null and b/mods/unified_inventory/textures/ui_green_icon_background.png differ diff --git a/mods/unified_inventory/textures/ui_group.png b/mods/unified_inventory/textures/ui_group.png new file mode 100644 index 0000000..2e4714a Binary files /dev/null and b/mods/unified_inventory/textures/ui_group.png differ diff --git a/mods/unified_inventory/textures/ui_home_icon.png b/mods/unified_inventory/textures/ui_home_icon.png new file mode 100644 index 0000000..e44419d Binary files /dev/null and b/mods/unified_inventory/textures/ui_home_icon.png differ diff --git a/mods/unified_inventory/textures/ui_left_icon.png b/mods/unified_inventory/textures/ui_left_icon.png new file mode 100644 index 0000000..68cffb8 Binary files /dev/null and b/mods/unified_inventory/textures/ui_left_icon.png differ diff --git a/mods/unified_inventory/textures/ui_main_inventory.png b/mods/unified_inventory/textures/ui_main_inventory.png new file mode 100644 index 0000000..3d380de Binary files /dev/null and b/mods/unified_inventory/textures/ui_main_inventory.png differ diff --git a/mods/unified_inventory/textures/ui_misc_form.png b/mods/unified_inventory/textures/ui_misc_form.png new file mode 100644 index 0000000..e74a605 Binary files /dev/null and b/mods/unified_inventory/textures/ui_misc_form.png differ diff --git a/mods/unified_inventory/textures/ui_moon_icon.png b/mods/unified_inventory/textures/ui_moon_icon.png new file mode 100644 index 0000000..b2d7b44 Binary files /dev/null and b/mods/unified_inventory/textures/ui_moon_icon.png differ diff --git a/mods/unified_inventory/textures/ui_no.png b/mods/unified_inventory/textures/ui_no.png new file mode 100644 index 0000000..aa98ed6 Binary files /dev/null and b/mods/unified_inventory/textures/ui_no.png differ diff --git a/mods/unified_inventory/textures/ui_off_icon.png b/mods/unified_inventory/textures/ui_off_icon.png new file mode 100644 index 0000000..319fc6e Binary files /dev/null and b/mods/unified_inventory/textures/ui_off_icon.png differ diff --git a/mods/unified_inventory/textures/ui_ok_icon.png b/mods/unified_inventory/textures/ui_ok_icon.png new file mode 100644 index 0000000..dcbda1d Binary files /dev/null and b/mods/unified_inventory/textures/ui_ok_icon.png differ diff --git a/mods/unified_inventory/textures/ui_on_icon.png b/mods/unified_inventory/textures/ui_on_icon.png new file mode 100644 index 0000000..a9884cf Binary files /dev/null and b/mods/unified_inventory/textures/ui_on_icon.png differ diff --git a/mods/unified_inventory/textures/ui_pencil_icon.png b/mods/unified_inventory/textures/ui_pencil_icon.png new file mode 100644 index 0000000..a73b740 Binary files /dev/null and b/mods/unified_inventory/textures/ui_pencil_icon.png differ diff --git a/mods/unified_inventory/textures/ui_red_icon_background.png b/mods/unified_inventory/textures/ui_red_icon_background.png new file mode 100644 index 0000000..67f5dcc Binary files /dev/null and b/mods/unified_inventory/textures/ui_red_icon_background.png differ diff --git a/mods/unified_inventory/textures/ui_reset_icon.png b/mods/unified_inventory/textures/ui_reset_icon.png new file mode 100644 index 0000000..ec9ef62 Binary files /dev/null and b/mods/unified_inventory/textures/ui_reset_icon.png differ diff --git a/mods/unified_inventory/textures/ui_right_icon.png b/mods/unified_inventory/textures/ui_right_icon.png new file mode 100644 index 0000000..1f11868 Binary files /dev/null and b/mods/unified_inventory/textures/ui_right_icon.png differ diff --git a/mods/unified_inventory/textures/ui_search_icon.png b/mods/unified_inventory/textures/ui_search_icon.png new file mode 100644 index 0000000..b529e43 Binary files /dev/null and b/mods/unified_inventory/textures/ui_search_icon.png differ diff --git a/mods/unified_inventory/textures/ui_sethome_icon.png b/mods/unified_inventory/textures/ui_sethome_icon.png new file mode 100644 index 0000000..5c56d64 Binary files /dev/null and b/mods/unified_inventory/textures/ui_sethome_icon.png differ diff --git a/mods/unified_inventory/textures/ui_single_slot.png b/mods/unified_inventory/textures/ui_single_slot.png new file mode 100644 index 0000000..ef2a246 Binary files /dev/null and b/mods/unified_inventory/textures/ui_single_slot.png differ diff --git a/mods/unified_inventory/textures/ui_skip_backward_icon.png b/mods/unified_inventory/textures/ui_skip_backward_icon.png new file mode 100644 index 0000000..fde4fea Binary files /dev/null and b/mods/unified_inventory/textures/ui_skip_backward_icon.png differ diff --git a/mods/unified_inventory/textures/ui_skip_forward_icon.png b/mods/unified_inventory/textures/ui_skip_forward_icon.png new file mode 100644 index 0000000..182e7ed Binary files /dev/null and b/mods/unified_inventory/textures/ui_skip_forward_icon.png differ diff --git a/mods/unified_inventory/textures/ui_sun_icon.png b/mods/unified_inventory/textures/ui_sun_icon.png new file mode 100644 index 0000000..262b1f3 Binary files /dev/null and b/mods/unified_inventory/textures/ui_sun_icon.png differ diff --git a/mods/unified_inventory/textures/ui_trash_icon.png b/mods/unified_inventory/textures/ui_trash_icon.png new file mode 100644 index 0000000..081bac7 Binary files /dev/null and b/mods/unified_inventory/textures/ui_trash_icon.png differ diff --git a/mods/unified_inventory/textures/ui_waypoint_set_icon.png b/mods/unified_inventory/textures/ui_waypoint_set_icon.png new file mode 100644 index 0000000..6eb9d19 Binary files /dev/null and b/mods/unified_inventory/textures/ui_waypoint_set_icon.png differ diff --git a/mods/unified_inventory/textures/ui_waypoints_icon.png b/mods/unified_inventory/textures/ui_waypoints_icon.png new file mode 100644 index 0000000..530c1d7 Binary files /dev/null and b/mods/unified_inventory/textures/ui_waypoints_icon.png differ diff --git a/mods/unified_inventory/textures/ui_xyz_icon.png b/mods/unified_inventory/textures/ui_xyz_icon.png new file mode 100644 index 0000000..9b48acb Binary files /dev/null and b/mods/unified_inventory/textures/ui_xyz_icon.png differ diff --git a/mods/unified_inventory/textures/ui_xyz_off_icon.png b/mods/unified_inventory/textures/ui_xyz_off_icon.png new file mode 100644 index 0000000..3c1836e Binary files /dev/null and b/mods/unified_inventory/textures/ui_xyz_off_icon.png differ diff --git a/mods/unified_inventory/textures/ui_xyz_on_icon.png b/mods/unified_inventory/textures/ui_xyz_on_icon.png new file mode 100644 index 0000000..9b48acb Binary files /dev/null and b/mods/unified_inventory/textures/ui_xyz_on_icon.png differ diff --git a/mods/unified_inventory/waypoints.lua b/mods/unified_inventory/waypoints.lua new file mode 100644 index 0000000..3f9ee58 --- /dev/null +++ b/mods/unified_inventory/waypoints.lua @@ -0,0 +1,247 @@ +local S = unified_inventory.gettext +local F = minetest.formspec_escape + +local hud_colors = { + {"#FFFFFF", 0xFFFFFF, S("White")}, + {"#DBBB00", 0xf1d32c, S("Yellow")}, + {"#DD0000", 0xDD0000, S("Red")}, + {"#2cf136", 0x2cf136, S("Green")}, + {"#2c4df1", 0x2c4df1, S("Blue")}, +} + +local hud_colors_max = #hud_colors + +-- Stores temporary player data (persists until player leaves) +local waypoints_temp = {} + +unified_inventory.register_page("waypoints", { + get_formspec = function(player) + local player_name = player:get_player_name() + + -- build a "fake" temp entry if the server took too long + -- during sign-on and returned an empty entry + if not waypoints_temp[player_name] then waypoints_temp[player_name] = {hud = 1} end + + local waypoints = datastorage.get(player_name, "waypoints") + local formspec = "background[0,4.5;8,4;ui_main_inventory.png]" .. + "image[0,0;1,1;ui_waypoints_icon.png]" .. + "label[1,0;" .. F(S("Waypoints")) .. "]" + + -- Tabs buttons: + for i = 1, 5, 1 do + formspec = formspec .. + "image_button[0.0," .. 0.2 + i * 0.7 .. ";.8,.8;" .. + (i == waypoints.selected and "ui_blue_icon_background.png^" or "") .. + "ui_" .. i .. "_icon.png;" .. + "select_waypoint" .. i .. ";]" .. + "tooltip[select_waypoint" .. i .. ";" + .. (S("Select Waypoint #%d"):format(i)).."]" + end + + local i = waypoints.selected or 1 + local waypoint = waypoints[i] or {} + local temp = waypoints_temp[player_name][i] or {} + local default_name = string.format(S("Waypoint %d"), i) + + -- Main buttons: + formspec = formspec .. + "image_button[4.5,3.7;.8,.8;".. + "ui_waypoint_set_icon.png;".. + "set_waypoint"..i..";]".. + "tooltip[set_waypoint" .. i .. ";" + .. F(S("Set waypoint to current location")).."]" + + formspec = formspec .. + "image_button[5.2,3.7;.8,.8;".. + (waypoint.active and "ui_on_icon.png" or "ui_off_icon.png")..";".. + "toggle_waypoint"..i..";]".. + "tooltip[toggle_waypoint" .. i .. ";" + .. F(S("Make waypoint @1", + waypoint.active and S("invisible") or S("visible"))).."]" + + formspec = formspec .. + "image_button[5.9,3.7;.8,.8;".. + (waypoint.display_pos and "ui_green_icon_background.png" or "ui_red_icon_background.png").."^ui_xyz_icon.png;".. + "toggle_display_pos" .. i .. ";]".. + "tooltip[toggle_display_pos" .. i .. ";" + .. F(S("@1 display of waypoint coordinates", + waypoint.display_pos and S("Disable") or S("Enable"))) .."]" + + formspec = formspec .. + "image_button[6.6,3.7;.8,.8;".. + "ui_circular_arrows_icon.png;".. + "toggle_color"..i..";]".. + "tooltip[toggle_color" .. i .. ";" + .. F(S("Change color of waypoint display")).."]" + + formspec = formspec .. + "image_button[7.3,3.7;.8,.8;".. + "ui_pencil_icon.png;".. + "rename_waypoint"..i..";]".. + "tooltip[rename_waypoint" .. i .. ";" + .. F(S("Edit waypoint name")).."]" + + -- Waypoint's info: + if waypoint.active then + formspec = formspec .. "label[1,0.8;"..F(S("Waypoint active")).."]" + else + formspec = formspec .. "label[1,0.8;"..F(S("Waypoint inactive")).."]" + end + + if temp.edit then + formspec = formspec .. + "field[1.3,3.2;6,.8;rename_box" .. i .. ";;" + ..(waypoint.name or default_name).."]" .. + "image_button[7.3,2.9;.8,.8;".. + "ui_ok_icon.png;".. + "confirm_rename"..i.. ";]".. + "tooltip[confirm_rename" .. i .. ";" + .. F(S("Finish editing")).."]" + end + + formspec = formspec .. "label[1,1.3;"..F(S("World position"))..": " .. + minetest.pos_to_string(waypoint.world_pos or vector.new()) .. "]" .. + "label[1,1.8;"..F(S("Name"))..": ".. (waypoint.name or default_name) .. "]" .. + "label[1,2.3;"..F(S("HUD text color"))..": " .. + hud_colors[waypoint.color or 1][3] .. "]" + + return {formspec=formspec} + end, +}) + +unified_inventory.register_button("waypoints", { + type = "image", + image = "ui_waypoints_icon.png", + tooltip = S("Waypoints"), + hide_lite=true +}) + +local function update_hud(player, waypoints, temp, i) + local waypoint = waypoints[i] + if not waypoint then return end + temp[i] = temp[i] or {} + temp = temp[i] + local pos = waypoint.world_pos or vector.new() + local name + if waypoint.display_pos then + name = minetest.pos_to_string(pos) + if waypoint.name then + name = name..", "..waypoint.name + end + else + name = waypoint.name or "Waypoint "..i + end + if temp.hud then + player:hud_remove(temp.hud) + end + if waypoint.active then + temp.hud = player:hud_add({ + hud_elem_type = "waypoint", + number = hud_colors[waypoint.color or 1][2] , + name = name, + text = "m", + world_pos = pos + }) + else + temp.hud = nil + end +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= "" then return end + + local player_name = player:get_player_name() + local update_formspec = false + local need_update_hud = false + local hit = false + + local waypoints = datastorage.get(player_name, "waypoints") + local temp = waypoints_temp[player_name] + for i = 1, 5, 1 do + if fields["select_waypoint"..i] then + hit = true + waypoints.selected = i + update_formspec = true + end + + if fields["toggle_waypoint"..i] then + hit = true + waypoints[i] = waypoints[i] or {} + waypoints[i].active = not (waypoints[i].active) + need_update_hud = true + update_formspec = true + end + + if fields["set_waypoint"..i] then + hit = true + local pos = player:getpos() + pos.x = math.floor(pos.x) + pos.y = math.floor(pos.y) + pos.z = math.floor(pos.z) + waypoints[i] = waypoints[i] or {} + waypoints[i].world_pos = pos + need_update_hud = true + update_formspec = true + end + + if fields["rename_waypoint"..i] then + hit = true + temp[i] = temp[i] or {} + temp[i].edit = true + update_formspec = true + end + + if fields["toggle_display_pos"..i] then + hit = true + waypoints[i] = waypoints[i] or {} + waypoints[i].display_pos = not waypoints[i].display_pos + need_update_hud = true + update_formspec = true + end + + if fields["toggle_color"..i] then + hit = true + waypoints[i] = waypoints[i] or {} + local color = waypoints[i].color or 1 + color = color + 1 + if color > hud_colors_max then + color = 1 + end + waypoints[i].color = color + need_update_hud = true + update_formspec = true + end + + if fields["confirm_rename"..i] then + hit = true + waypoints[i] = waypoints[i] or {} + temp[i].edit = false + waypoints[i].name = fields["rename_box"..i] + need_update_hud = true + update_formspec = true + end + if need_update_hud then + update_hud(player, waypoints, temp, i) + end + if update_formspec then + unified_inventory.set_inventory_formspec(player, "waypoints") + end + if hit then return end + end +end) + + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + local waypoints = datastorage.get(player_name, "waypoints") + local temp = {} + waypoints_temp[player_name] = temp + for i = 1, 5 do + update_hud(player, waypoints, temp, i) + end +end) + +minetest.register_on_leaveplayer(function(player) + waypoints_temp[player:get_player_name()] = nil +end) + diff --git a/mods/utils/arraymanipulator.lua b/mods/utils/arraymanipulator.lua new file mode 100644 index 0000000..81b86f8 --- /dev/null +++ b/mods/utils/arraymanipulator.lua @@ -0,0 +1,87 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The ArrayManipulator is similiar to the MapManipulator, except that it +-- does not use the VoxelManip object, but has an internal array which contains +-- all set values. It is mostly compatible with MapManipulator, which means you +-- can pass it to functions which expect a MapManipulator. +ArrayManipulator = {} + + +--- Creates a new instance of ArrayManipulator. +-- +-- @param node_data The array that contains the values for the nodes part. This +-- is assumed to be a 3d array with x, z, and y values +-- as dimensions. +-- @param param2_data The array that contains the values for the param2 part. +-- This is assumed to be a 3d array with x, z, and y values +-- as dimensions. +-- @return A new instance. +function ArrayManipulator:new(node_data, param2_data) + local instance = { + node_data = node_data, + param2_data = param2_data + } + + setmetatable(instance, self) + self.__index = self + + return instance +end + +--- Does nothing, only for compatibility with MapManipulator. +function ArrayManipulator:get_data() + -- Nothing. +end + +--- Gets the node and param2 at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @return Two values, the node at the given location and the param2 value. +function ArrayManipulator:get_node(x, z, y) + return self.node_data[x][z][y], self.param2_data[x][z][y] +end + +--- Does nothing, only for compatibility with MapManipulator. +function ArrayManipulator:set_data() + -- Nothing. +end + +--- Sets the node at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @param node The node to set. +-- @param param2 Optional. The param2 data to set for this node. +function ArrayManipulator:set_node(x, z, y, node, param2) + self.node_data[x][z][y] = node + self.param2_data[x][z][y] = param2 +end + diff --git a/mods/utils/arrayutil.lua b/mods/utils/arrayutil.lua new file mode 100644 index 0000000..774ba10 --- /dev/null +++ b/mods/utils/arrayutil.lua @@ -0,0 +1,386 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various utility functions for working with arrays. An array is sub-form of +-- a array, the array is simply indexed with numbers like this: +-- +-- local array = { 1 = "a", 2 = "b", 3 = "c" } +-- local array = { "a", "b", "c" } +arrayutil = {} + + +--- Gets if the given array contains the given item. +-- +-- @param array The array to search in. +-- @param item The item to search for, can either be an item or another array. +-- @param equals Optional. The function to determine if items equal each other, +-- defaults to tableutil.equals. +-- @param offset_step Optional. If the given item is an array, this determines +-- how much of the array is skipped before it is tried to +-- match. +-- @return true if the array contains the given item. +function arrayutil.contains(array, item, equals, offset_step) + return arrayutil.index(array, item, equals, offset_step) >= 0 +end + +--- Creates a 2D array with the given bounds and sets it to the given default +-- value. +-- +-- @param start_x The start of the first dimension, inclusive. +-- @param start_y The start of the second dimension, inclusive. +-- @param end_x The end of the first dimension, inclusive. +-- @param end_y The end of the second dimension, inclusive. +-- @param default_value The default value that will be set, it will be cloned +-- for every entry. +-- @return The created 2D array. +function arrayutil.create2d(start_x, start_y, end_x, end_y, default_value) + local array = {} + + for x = start_x, end_x, 1 do + array[x] = {} + + for y = start_y, end_y, 1 do + array[x][y] = tableutil.clone(default_value) + end + end + + return array +end + +--- Creates a 3D array with the given bounds and sets it to the given default +-- value. +-- +-- @param start_x The start of the first dimension, inclusive. +-- @param start_y The start of the second dimension, inclusive. +-- @param start_z The start of the third dimension, inclusive. +-- @param end_x The end of the first dimension, inclusive. +-- @param end_y The end of the second dimension, inclusive. +-- @param end_z The end of the third dimension, inclusive. +-- @param default_value The default value that will be set, it will be cloned +-- for every entry. +-- @return The created 3D array. +function arrayutil.create3d(start_x, start_y, start_z, end_x, end_y, end_z, default_value) + local array = {} + + for x = start_x, end_x, 1 do + array[x] = {} + + for y = start_y, end_y, 1 do + array[x][y] = {} + + for z = start_z, end_z, 1 do + array[x][y][z] = tableutil.clone(default_value) + end + end + end + + return array +end + +--- Gets the index of the item in the given array. +-- +-- @param array The array to search in. +-- @param item The item to search for, can either be an item or another array. +-- @param equals Optional. The function to determine if items equal each other, +-- defaults to tableutil.equals. +-- @param offset_step Optional. If the given item is an array, this determines +-- how much of the array is skipped before it is tried to +-- match. +-- @return The index of the given item or array, -1 if it was not found. +function arrayutil.index(array, item, equals, offset_step) + equals = equals or tableutil.equals + offset_step = offset_step or 1 + + if #array == 0 then + return -1 + end + + local item_is_array = type(item) == "table" + + if item_is_array then + if #array < #item then + return -1 + end + end + + if item_is_array then + for offset = 1, #array - 1, offset_step do + local match = true + + for index = 1, #item, 1 do + local array_index = index + offset - 1 + + if array_index > #array then + array_index = array_index - #array + end + + if not equals(array[array_index], item[index]) then + match = false + -- Ugly way to break a loop, I know. + index = #item + 1 + end + end + + if match then + return offset + end + end + else + for index = 1, #array, 1 do + if equals(array[index], item) then + return index + end + end + end + + return -1 +end + +--- Finds the next matching column. +-- +-- @param array The 2D array to search. +-- @param start_index Optional. The index at which to start. Defaults to 1, or +-- if the direction is reversed, the number of columns in +-- the array. +-- @param matcher Optional. The function that is used to determine if the column +-- matches or not. Is expected to take one argument, the item, +-- and return a boolean. The column matches if any of its items +-- matches this condition. Defaults to not nil and not empty +-- string. +-- @param reverse Optional. If the array should be serched backwards. Defaults +-- to false. +-- @return The index of the matching column. -1 if none was found. +function arrayutil.next_matching_column(array, start_index, matcher, reverse) + matcher = matcher or function(item) + return item ~= nil and item ~= "" + end + + local current_column = 0 + + if reverse and start_index == nil then + for row_index = 1, #array, 1 do + local row = array[row_index] + + current_column = math.max(current_column, #row) + end + else + current_column = start_index or 1 + end + + local had_column = true + + while had_column do + had_column = false + + for row_index = 1, #array, 1 do + local row = array[row_index] + + if current_column >= 1 and current_column <= #row then + had_column = true + + if matcher(row[current_column]) then + return current_column + end + end + end + + if reverse then + current_column = current_column - 1 + else + current_column = current_column + 1 + end + end + + return -1 +end + +--- Finds the next matching row. +-- +-- @param array The 2D array to search. +-- @param start_index Optional. The index at which to start. Defaults to 1, or +-- if the direction is reversed, the number of rows in +-- the array. +-- @param matcher Optional. The function that is used to determine if the row +-- matches or not. Is expected to take one argument, the item, +-- and return a boolean. The row matches if any of its items +-- matches this condition. Defaults to not nil and not empty +-- string. +-- @param reverse Optional. If the array should be serched backwards. Defaults +-- to false. +-- @return The index of the matching row. -1 if none was found. +function arrayutil.next_matching_row(array, start_index, matcher, reverse) + matcher = matcher or function(item) + return item ~= nil and item ~= "" + end + + local to = #array + local step = 1 + + if reverse then + start_index = start_index or #array + to = 1 + step = -1 + else + start_index = start_index or 1 + end + + for row_index = start_index, to, step do + local row = array[row_index] + + for column_index = 1, #row, 1 do + if matcher(row[column_index]) then + return row_index + end + end + end + + return -1 +end + +--- Finds the previous matching column. +-- +-- @param array The 2D array to search. +-- @param start_index Optional. The index at which to start. Defaults to +-- the number columns in the array. +-- @param matcher Optional. The function that is used to determine if the column +-- matches or not. Is expected to take one argument, the item, +-- and return a boolean. The column matches if any of its items +-- matches this condition. Defaults to not nil and not empty +-- string. +-- @return The index of the matching column. -1 if none was found. +function arrayutil.previous_matching_column(array, start_index, matcher) + return arrayutil.next_matching_column(array, start_index, matcher, true) +end + +--- Finds the previous matching row. +-- +-- @param array The 2D array to search. +-- @param start_index Optional. The index at which to start. Defaults to +-- the number rows in the array. +-- @param matcher Optional. The function that is used to determine if the row +-- matches or not. Is expected to take one argument, the item, +-- and return a boolean. The row matches if any of its items +-- matches this condition. Defaults to not nil and not empty +-- string. +-- @return The index of the matching row. -1 if none was found. +function arrayutil.previous_matching_row(array, start_index, matcher) + return arrayutil.next_matching_row(array, start_index, matcher, true) +end + +--- Removes empty rows and columns at the beginning and the end of the given +-- array. +-- +-- @param array The array. +-- @param is_empty Optional. The function used for determining if the item is +-- empty. By default nil and an empty string is considered +-- empty. Expected is a function that takes one item and returns +-- a boolean. +function arrayutil.reduce2d(array, is_empty) + local first_row = arrayutil.next_matching_row(array, nil, is_empty) + local last_row = arrayutil.previous_matching_row(array, nil, is_empty) + + local first_column = arrayutil.next_matching_column(array, nil, is_empty) + local last_column = arrayutil.previous_matching_column(array, nil, is_empty) + + if last_row == -1 then + last_row = first_row + end + + if last_column == -1 then + last_column = first_column + end + + local reduced = {} + + if first_row ~= -1 and first_column ~= -1 then + for row_index = first_row, last_row, 1 do + local row = array[row_index] + local reduced_row = {} + + for column_index = first_column, last_column, 1 do + reduced_row[column_index - first_column + 1] = row[column_index] + end + + reduced[row_index - first_row + 1] = reduced_row + end + end + + return reduced +end + +--- Reindexes the given 2D array, swapping the two dimensions. +-- +-- @param data The array to reindex. +-- @param new_x The new startpoint for the first dimension. +-- @param new_y The new startpoint for the second dimension. +-- @return The reindexed array. +function arrayutil.swapped_reindex2d(data, new_x, new_y) + local reindexed_data = {} + + for old_x = 1, constants.block_size, 1 do + local index_x = new_x + old_x - 1 + reindexed_data[index_x] = {} + + for old_y = 1, constants.block_size, 1 do + local index_y = new_y + old_y - 1 + + reindexed_data[index_x][index_y] = data[old_y][old_x] + end + end + + return reindexed_data +end + +--- Reindexes the given 3d array, swapping the two dimensions. +-- +-- @param data The array to reindex. +-- @param new_x The new startpoint for the first dimension. +-- @param new_y The new startpoint for the second dimension. +-- @param new_z The new startpoint for the third dimension. +-- @return The reindexed array. +function arrayutil.swapped_reindex3d(data, new_x, new_y, new_z) + local reindexed_data = {} + + for old_x = 1, constants.block_size, 1 do + local index_x = new_x + old_x - 1 + reindexed_data[index_x] = {} + + for old_z = 1, constants.block_size, 1 do + local index_z = new_z + old_z - 1 + reindexed_data[index_x][index_z] = {} + + for old_y = 1, constants.block_size, 1 do + local index_y = new_y + old_y - 1 + + reindexed_data[index_x][index_z][index_y] = data[old_z][old_y][old_x] + end + end + end + + return reindexed_data +end + diff --git a/mods/utils/blockedcache.lua b/mods/utils/blockedcache.lua new file mode 100644 index 0000000..14fd9d8 --- /dev/null +++ b/mods/utils/blockedcache.lua @@ -0,0 +1,162 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A simple cache for caching values based on x and z coordinates. +-- +-- Also manages the amount of cached entries and can automatically compact +-- the cache to remove the oldest values. +BlockedCache = {} + + +--- Creates a new instance of BlockedCache. +-- +-- @param max_entries Optional. The maximum entries for the cache which will be +-- preserved if the cache is compacted, defaults to 12. +-- @param auto_compact Optional. If the cache performs automatic compaction if +-- the maximum numbers of entries is reached, defaults +-- to true. +-- @return A new instance of BlockedCache. +function BlockedCache:new(max_entries, auto_compact) + if auto_compact == nil then + auto_compact = true + end + + local instance = { + auto_compact = auto_compact, + cache = {}, + index = {}, + index_end = 0, + index_start = 0, + max_entries = max_entries or 12 + } + + setmetatable(instance, self) + self.__index = self + + return instance +end + + +--- Clears the complete cache. +function BlockedCache:clear() + self.cache = {} + self.index = {} + self.index_end = 0 + self.index_start = 0 +end + +--- Compacts the cache, meaning it removes the oldest entries up to the maximum +-- number of entries. +-- +-- @param max_entries Optional. The maximum number of cache entries to preserve. +function BlockedCache:compact(max_entries) + if max_entries == nil then + max_entries = self.max_entries + end + + local new_index = 0 + local start_index = self.index_end - max_entries + start_index = math.max(start_index, self.index_start) + + for old_index = self.index_start, self.index_end - 1, 1 do + local entry = self.index[old_index] + self.index[old_index] = nil + + if old_index >= start_index then + self.index[new_index] = entry + new_index = new_index + 1 + else + self.cache[entry.x][entry.z] = nil + end + + self.index_end = new_index + end +end + +--- Gets the value associated with the given x and z coordinates. +-- +-- @param x The x coordinate. +-- @param z The z coordinate. +-- @return The value associated with the given x and z coordinates. Returns nil +-- if there is no entry. +function BlockedCache:get(x, z) + if self:is_cached(x, z) then + return self.cache[x][z] + end + + return nil +end + +--- Gets if there is a cache entry associated with the given x and z +-- coordinates. +-- +-- @param x The x coordinate. +-- @param z The z coordinate. +-- @return true if there is an entry for the given coordinates. +function BlockedCache:is_cached(x, z) + return self.cache[x] ~= nil and self.cache[x][z] ~= nil +end + +--- Puts the value for the given x and z coordinates +-- +-- @param x The x coordinate. +-- @param z The z coordinate. +-- @param value The value to put. +function BlockedCache:put(x, z, value) + if self.cache[x] == nil then + self.cache[x] = {} + end + + self.cache[x][z] = value + self.index[self.index_end] = { x = x, z = z } + self.index_end = self.index_end + 1 + + if self.auto_compact and (self.index_end - self.index_start) > self.max_entries then + self:compact() + end +end + +--- Gets a string representation of this cache. +-- +-- @return The string representation. +function BlockedCache:to_string() + local value = "" + + for idx = self.index_start, self.index_end - 1, 1 do + value = value .. tostring(idx) .. ": " + + local entry = self.index[idx] + value = value .. tostring(entry.x) .. ", " .. tostring(entry.z) + + value = value .. ": " .. tostring(self.cache[entry.x][entry.z]) + + value = value .. "\n" + end + + return value +end + diff --git a/mods/utils/blockutil.lua b/mods/utils/blockutil.lua new file mode 100644 index 0000000..06ad1e2 --- /dev/null +++ b/mods/utils/blockutil.lua @@ -0,0 +1,138 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions related to blocks/chunks. +blockutil = { + --- The size of one block in nodes. + BLOCK_SIZE = 16, + + --- The size of a mapchunk in blocks. + MAPCHUNK_IN_BLOCKS_SIZE = 5, + + --- The size of one mapchunk in nodes. + MAPCHUNK_SIZE = 80, + + --- The size of one node. + NODE_SIZE = 1 +} + + +--- Gets the begin coordinates of the block the given coordinates are in. +-- +-- @param x The x coordinate. Can also be a table with the x, y and z values. +-- @param y The y coordinate. +-- @param z The z coordinate. +-- @return The coordinates (x, y, z) of the blocks begin. +function blockutil.get_begin(x, y, z) + if type(x) == "table" then + local pos = x + + x = pos.x + y = pos.y + z = pos.z + end + + if y == nil and z == nil then + local begin = x + + if begin >= 48 then + local difference = math.fmod(begin + 32, 80) + begin = begin - difference + elseif begin >= -32 then + return -32 + else + local difference = math.fmod(math.abs(begin + 32), 80) + + if difference > 0 then + difference = 80 - difference + end + + begin = begin - difference + end + + return begin + end + + return blockutil.get_begin(x), blockutil.get_begin(y), blockutil.get_begin(z) +end + +--- Gets the begin coordinates of the block the given coordinates are in +-- as position (a table with three entries, x, y, and z). +-- +-- @param x The x coordinate. Can also be a table with the x, y and z values. +-- @param y The y coordinate. +-- @param z The z coordinate. +-- @return The coordinates (x, y, z) of the blocks begin as pos. +function blockutil.get_begin_pos(x, y, z) + local begin_x, begin_y, begin_z = blockutil.get_begin(x, y, z) + + return { + x = begin_x, + y = begin_y, + z = begin_z + } +end + +--- Gets the end coordinates of the block the given coordinates are in. +-- +-- @param x The x coordinate. Can also be a table with the x, y and z values. +-- @param y The y coordinate. +-- @param z The z coordinate. +-- @return The coordinates (x, y, z) of the blocks end. +function blockutil.get_end(x, y, z) + if type(x) == "table" then + local pos = x + + x = pos.x + y = pos.y + z = pos.z + end + + if y == nil and z == nil then + return blockutil.get_begin(x + constants.block_size) - 1 + end + + return blockutil.get_end(x), blockutil.get_end(y), blockutil.get_end(z) +end + +--- Gets the end coordinates of the block the given coordinates are in +-- as position (a table with three entries, x, y, z). +-- +-- @param x The x coordinate. Can also be a table with the x, y and z values. +-- @param y The y coordinate. +-- @param z The z coordinate. +-- @return The coordinates (x, y, z) of the blocks end as pos. +function blockutil.get_end_pos(x, y, z) + local end_x, end_y, end_z = blockutil.get_end(x, y, z) + + return { + x = end_x, + y = end_y, + z = end_z + } +end + diff --git a/mods/utils/color.lua b/mods/utils/color.lua new file mode 100644 index 0000000..48590ab --- /dev/null +++ b/mods/utils/color.lua @@ -0,0 +1,62 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A simple container for a color and its hex string representation. +-- +-- Even though it is not enforced, this container is assumed to be imutable. +Color = { + --- The red component, a number between 0 and 255. + red = 0, + --- The green component, a number between 0 and 255. + green = 0, + --- The blue component, a number between 0 and 255. + blue = 0, + --- The hex representation, like FFFFFF for white. + hex = "000000" +} + + +--- Creates a new instance of Color. +-- +-- @param red The red component, a number between 0 and 255. +-- @param green The green component, a number between 0 and 255. +-- @param blue The blue component, a number between 0 and 255. +function Color:new(red, green, blue) + local instance = { + red = mathutil.clamp(red, 0, 255), + green = mathutil.clamp(green, 0, 255), + blue = mathutil.clamp(blue, 0, 255) + } + + instance.hex = string.format("%02X%02X%02X", instance.red, instance.green, instance.blue) + + setmetatable(instance, self) + self.__index = self + + return instance +end + diff --git a/mods/utils/constants.lua b/mods/utils/constants.lua new file mode 100644 index 0000000..c50bf18 --- /dev/null +++ b/mods/utils/constants.lua @@ -0,0 +1,57 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various constants. +constants = { + --- The size of one map block. Sometimes also called a chunk. By default + -- this constant has the value of 80. + block_size = 80, + + --- The default gravity value. + GRAVITY = 9.81, + + --- The maximum coordinate of any axis. + max_coordinate = 31000, + + --- The maximum position possible. + max_position = { + x = 31000, + y = 31000, + z = 31000 + }, + + --- The minimum coordinate of any axis. + min_coordinate = -31000, + + --- The minimum position possible. + min_position = { + x = -31000, + y = -31000, + z = -31000 + } +} + diff --git a/mods/utils/directmapmanipulator.lua b/mods/utils/directmapmanipulator.lua new file mode 100644 index 0000000..f6d1ec3 --- /dev/null +++ b/mods/utils/directmapmanipulator.lua @@ -0,0 +1,102 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The DirectMapManipulator is similiar to the MapManipulator, except that it +-- does not use the VoxelManip object, but the Minetest get_node/set_node +-- functions. It is mostly compatible with MapManipulator, which means you can +-- pass it to functions which expect a MapManipulator. +DirectMapManipulator = { + instance = nil +} + + +function DirectMapManipulator.get_instance() + if DirectMapManipulator.instance == nil then + DirectMapManipulator.instance = DirectMapManipulator:new() + end + + return DirectMapManipulator.instance +end + +--- Creates a new instance of DirectMapManipulator. +-- +-- @return A new instance. +function DirectMapManipulator:new() + local instance = {} + + setmetatable(instance, self) + self.__index = self + + return instance +end + +--- Does nothing, only for compatibility with MapManipulator. +function DirectMapManipulator:get_data() + -- Nothing. +end + +--- Gets the node and param2 at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @return Two values, the node at the given location and the param2 value. +function DirectMapManipulator:get_node(x, z, y) + local node = minetest.get_node({ + x = x, + y = y, + z = z + }) + + local id = minetest.get_content_id(node.name) + + return id, node.param2 +end + +--- Does nothing, only for compatibility with MapManipulator. +function DirectMapManipulator:set_data() + -- Nothing. +end + +--- Sets the node at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @param node The node to set. +-- @param param2 Optional. The param2 data to set for this node. +function DirectMapManipulator:set_node(x, z, y, node, param2) + minetest.set_node({ + x = x, + y = y, + z = z + }, { + name = minetest.get_name_from_content_id(node), + param2 = param2 + }) +end + diff --git a/mods/utils/entityutil.lua b/mods/utils/entityutil.lua new file mode 100644 index 0000000..e02a8d9 --- /dev/null +++ b/mods/utils/entityutil.lua @@ -0,0 +1,72 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Provides various utility methods for manipulating entities. +entityutil = { + --- The name of builtin items. + BUILTIN_ITEM_NAME = "__builtin:item" +} + + +--- Checks the given entity if it is a builtin item. +-- +-- @param entity The entity to test. +-- @return true if the given entity is a builtin item. +function entityutil.is_builtin_item(entity) + local lua_entity = entity:get_luaentity(); + + return entity.name == entityutil.BUILTIN_ITEM_NAME + or (lua_entity ~= nil + and lua_entity.name == entityutil.BUILTIN_ITEM_NAME) +end + +--- Moves the given entity towards the given point by setting its velocity into +-- the correct direction. +-- +-- @param entity The entity to move, a LuaEntitySAO. +-- @param position The position to move the entity towards. +-- @param acceleration_x Optional. The acceleration to use in the x direction, +-- defaults to 1. +-- @param acceleration_y Optional. The acceleration to use in the y direction, +-- defaults to acceleration_x. +-- @param acceleration_z Optional. The acceleration to use in the x direction, +-- defaults to acceleration_x. +function entityutil.move_to(entity, position, acceleration_x, acceleration_y, acceleration_z) + acceleration_x = acceleration_x or 1 + acceleration_y = acceleration_y or acceleration_x + acceleration_z = acceleration_z or acceleration_x + + local direction = vector.direction(entity:getpos(), position) + local velocity = entity:getvelocity() + + velocity.x = velocity.x + (acceleration_x * direction.x) + velocity.y = velocity.y + (acceleration_y * direction.y) + velocity.z = velocity.z + (acceleration_z * direction.z) + + entity:setvelocity(velocity) +end + diff --git a/mods/utils/facedirutil.lua b/mods/utils/facedirutil.lua new file mode 100644 index 0000000..1358881 --- /dev/null +++ b/mods/utils/facedirutil.lua @@ -0,0 +1,173 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions and constants for working with the facedir value. +facedirutil = { + --- Attached to the node in the negative x direction. + NEGATIVE_X = 3, + + --- Attached to the node in the negative z direction. + NEGATIVE_Z = 2, + + --- The vector for the negative x direction. + NEGATIVE_X_VECTOR = { + x = -1, + y = 0, + z = 0 + }, + + --- The vector for the negative z direction. + NEGATIVE_Z_VECTOR = { + x = 0, + y = 0, + z = -1 + }, + + --- Attached to the node in the positive x direction. + POSITIVE_X = 1, + + --- Attached to the node in the positive z direction. + POSITIVE_Z = 0, + + --- The vector for the positive x direction. + POSITIVE_X_VECTOR = { + x = 1, + y = 0, + z = 0 + }, + + --- The vector for the positive z direction. + POSITIVE_Z_VECTOR = { + x = 0, + y = 0, + z = 1 + } +} + + +--- Creates a handler for the after_node_place callback which turns the placed +-- node upside down if the placer was looking at underside of another node or +-- if the placer looks upwards. +-- +-- @param pseudo_mirroring Optional. If pseudo mirroring should be performed, +-- defaults to false. +-- @param needed_pitch Optional. The needed pitch to turn the node upside down, +-- defaults to 0.45. +-- @return The handler for the after_node_place callback. +function facedirutil.create_after_node_placed_upsidedown_handler(pseudo_mirroring, needed_pitch) + if pseudo_mirroring == nil then + pseudo_mirroring = false + end + needed_pitch = needed_pitch or 0.45 + + return function(pos, placer, itemstack, pointed_thing) + -- Check if the placer did look at the underside of a node + -- or looked quite steep up. + if (pos.y == pointed_thing.under.y - 1 + and pos.x == pointed_thing.under.x + and pos.z == pointed_thing.under.z) + or placer:get_look_pitch() > needed_pitch then + + local placed_node = minetest.get_node(pos) + placed_node.param2 = facedirutil.upsidedown(placed_node.param2, pseudo_mirroring) + + minetest.set_node(pos, placed_node) + end + end +end + +--- Gets the vector for the given ID. +-- +-- @param id The ID for which to get the vector. +-- @return The vector for the given ID. +function facedirutil.get_vector(id) + if id == facedirutil.NEGATIVE_X then + return facedirutil.NEGATIVE_X_VECTOR + elseif id == facedirutil.NEGATIVE_Z then + return facedirutil.NEGATIVE_Z_VECTOR + elseif id == facedirutil.POSITIVE_X then + return facedirutil.POSITIVE_X_VECTOR + elseif id == facedirutil.POSITIVE_Z then + return facedirutil.POSITIVE_Z_VECTOR + end + + return facedirutil.NEGATIVE_X_VECTOR +end + +--- Gets the corresponding wallmounted value for the given facedir value. +-- +-- @param facedir_id The facedir value/ID. +-- @return The wallmounted value/ID. +function facedirutil.to_wallmounted(facedir_id) + if facedir_id == facedirutil.NEGATIVE_X then + return wallmountedutil.NEGATIVE_X + elseif facedir_id == facedirutil.NEGATIVE_Z then + return wallmountedutil.NEGATIVE_Z + elseif facedir_id == facedirutil.POSITIVE_X then + return wallmountedutil.POSITIVE_X + elseif facedir_id == facedirutil.POSITIVE_Z then + return wallmountedutil.POSITIVE_Z + end + + return wallmountedutil.NEGATIVE_Y +end + +--- Gets the facedir for the given rotation as upside down. +-- +-- @param facedir The facedir value. +-- @param pseudo_mirroring Optional. Performs rotations to imitate mirroring +-- of the node, defaults to false. +-- @return The facedir value upside down. +function facedirutil.upsidedown(facedir, pseudo_mirroring) + if pseudo_mirroring == nil then + pseudo_mirroring = false + end + + local upsidedown_facedir = facedir + + if pseudo_mirroring then + if upsidedown_facedir == facedirutil.POSITIVE_X + or upsidedown_facedir == facedirutil.NEGATIVE_X then + + upsidedown_facedir = rotationutil.increment(upsidedown_facedir) + elseif upsidedown_facedir == facedirutil.POSITIVE_Z + or upsidedown_facedir == facedirutil.NEGATIVE_Z then + + upsidedown_facedir = rotationutil.decrement(upsidedown_facedir) + end + else + if upsidedown_facedir == facedirutil.POSITIVE_X + or upsidedown_facedir == facedirutil.NEGATIVE_X then + + upsidedown_facedir = rotationutil.increment(upsidedown_facedir) + upsidedown_facedir = rotationutil.increment(upsidedown_facedir) + end + end + + return upsidedown_facedir + rotationutil.NEG_Y +end + diff --git a/mods/utils/fisheryates.lua b/mods/utils/fisheryates.lua new file mode 100644 index 0000000..422b3fa --- /dev/null +++ b/mods/utils/fisheryates.lua @@ -0,0 +1,69 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- An implementation of the Fisher-Yates algorithm, which allows to access +-- an array in a random or pseudo-random order. +fisheryates = {} + + +--- Runs the Fisher-Yates algorithm on the given data. +-- +-- The given action method is invoked on each item, which means that the action +-- method gets items in random order. +-- +-- @param data The array on which to operate. +-- @param min The minimum index of the array (inclusive). +-- @param max The maximum index of the array (inclusive). +-- @param random The method that returns random numbers, assumed to accept two +-- parameters, a minimum and maximum value. Can also be a table +-- with an instance method like the one descriped above. +-- @param action The action to perform on each item. Assumed to accept two +-- parameters, the item and the current index. +function fisheryates.run(data, min, max, random, action) + local random_is_object = type(random) == "userdata" + + for index = min, max, 1 do + local swap_index = nil + + if random_is_object then + swap_index = random:next(0, 32767) + else + swap_index = random(0, 32767) + end + + swap_index = transform.linear(swap_index, 0, 32767, index, max) + swap_index = mathutil.round(swap_index) + + local swap_value = data[swap_index] + + data[swap_index] = data[index] + data[index] = swap_value + + action(data[index], index) + end +end + diff --git a/mods/utils/init.lua b/mods/utils/init.lua new file mode 100644 index 0000000..b7e82b9 --- /dev/null +++ b/mods/utils/init.lua @@ -0,0 +1,69 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +-- Get the base path. +local base_path = minetest.get_modpath(minetest.get_current_modname()) + +-- Instance utils +dofile(base_path .. "/arraymanipulator.lua") +dofile(base_path .. "/blockedcache.lua") +dofile(base_path .. "/color.lua") +dofile(base_path .. "/directmapmanipulator.lua") +dofile(base_path .. "/list.lua") +dofile(base_path .. "/mapmanipulator.lua") +dofile(base_path .. "/noisemanager.lua") + +-- Static utils +dofile(base_path .. "/arrayutil.lua") +dofile(base_path .. "/blockutil.lua") +dofile(base_path .. "/constants.lua") +dofile(base_path .. "/entityutil.lua") +dofile(base_path .. "/facedirutil.lua") +dofile(base_path .. "/fisheryates.lua") +dofile(base_path .. "/interpolate.lua") +dofile(base_path .. "/inventoryutil.lua") +dofile(base_path .. "/itemutil.lua") +dofile(base_path .. "/log.lua") +dofile(base_path .. "/mathutil.lua") +dofile(base_path .. "/minetestex.lua") +dofile(base_path .. "/numberutil.lua") +dofile(base_path .. "/nodeutil.lua") +dofile(base_path .. "/objectrefutil.lua") +dofile(base_path .. "/pathutil.lua") +dofile(base_path .. "/posutil.lua") +dofile(base_path .. "/random.lua") +dofile(base_path .. "/rotationutil.lua") +dofile(base_path .. "/scheduler.lua") +dofile(base_path .. "/settings.lua") +dofile(base_path .. "/stopwatch.lua") +dofile(base_path .. "/stringutil.lua") +dofile(base_path .. "/tableutil.lua") +dofile(base_path .. "/tango.lua") +dofile(base_path .. "/textureutil.lua") +dofile(base_path .. "/transform.lua") +dofile(base_path .. "/wallmountedutil.lua") + diff --git a/mods/utils/interpolate.lua b/mods/utils/interpolate.lua new file mode 100644 index 0000000..76d1420 --- /dev/null +++ b/mods/utils/interpolate.lua @@ -0,0 +1,59 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various mathematical functions for interpolating values. +interpolate = {} + + +--- Performs a cosine interpolation with the given offset between the given +-- min and max values. +-- +-- @param offset The offset to get, should be between 0 and 1. +-- @param min Optional. The minimum value of the range, defaults to 0. +-- @param max Optional. The maximum value of the range, defaults to 1. +-- @return The interpolated value at the given offset. +function interpolate.cosine(offset, min, max) + local value = (1 - math.cos(offset * math.pi)) / 2 + + if min ~= nil and max ~= nil then + return min * (1 - value) + max * value + else + return value + end +end + +--- Performs a linear interpolation with the given offset between the given +-- min and max values. +-- +-- @param offset The offset to get, should be between 0 and 1. +-- @param min Optional. The minimum value of the range, defaults to 0. +-- @param max Optional. The maximum value of the range, defaults to 1. +-- @return The interpolated value at the given offset. +function interpolate.linear(offset, min, max) + return min * (1 - offset) + max * offset +end + diff --git a/mods/utils/inventoryutil.lua b/mods/utils/inventoryutil.lua new file mode 100644 index 0000000..000f91a --- /dev/null +++ b/mods/utils/inventoryutil.lua @@ -0,0 +1,128 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A util for working with inventories. +inventoryutil = {} + + +--- Gets the difference between the given inventory and the hash. The difference +-- is returned in the same format as the hash, with the count being +-- the amount of difference. +-- +-- @param inventory The InvRef object. +-- @param name The inventory name. +-- @param hash The hash to compare against. +-- @return The difference between the inventory and the hash. +function inventoryutil.difference_hash(inventory, name, hash) + local difference = {} + + for index = 1, inventory:get_size(name), 1 do + local stack = inventory:get_stack(name, index) + local item_hash = hash[index] + + local item_difference = { + id = 0, + count = 0 + } + + if item_hash.id >= 0 then + item_difference.id = item_hash.id + + if not stack:is_empty() then + if item_hash.id == minetest.get_content_id(stack:get_name()) then + item_difference.count = stack:get_count() - item_hash.count + else + item_difference.count = -item_hash.count + end + else + item_difference.count = -item_hash.count + end + end + + difference[index] = item_difference + end + + return difference +end + +--- Test if the given inventory equals the given hash. +-- +-- @param inventory The InvRef object. +-- @param name The name of the inventory. +-- @param hash The hash. +-- @return true If the inventory equals the hash. +function inventoryutil.equals_hash(inventory, name, hash) + if hash == nil then + return false + end + + for index = 1, inventory:get_size(name), 1 do + local stack = inventory:get_stack(name, index) + local item_hash = hash[index] + + if not stack:is_empty() then + if item_hash.id ~= minetest.get_content_id(stack:get_name()) or item_hash.count ~= stack:get_count() then + return false + end + else + if item_hash.id >= 0 or item_hash.count ~= 0 then + return false + end + end + end + + return true +end + +--- Creates a hash for the given inventory. +-- The hash is a 2D table containing the ID and the stack count of all items. +-- +-- @param inventory The InvRef object. +-- @param name The name of the inventory. +-- @return The hash. +function inventoryutil.hash(inventory, name) + local hash = {} + + for index = 1, inventory:get_size(name), 1 do + local stack = inventory:get_stack(name, index) + + if not stack:is_empty() then + hash[index] = { + id = minetest.get_content_id(stack:get_name()), + count = stack:get_count() + } + else + hash[index] = { + id = -1, + count = 0 + } + end + end + + return hash +end + diff --git a/mods/utils/itemutil.lua b/mods/utils/itemutil.lua new file mode 100644 index 0000000..912d8a4 --- /dev/null +++ b/mods/utils/itemutil.lua @@ -0,0 +1,171 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Provides various utility functions for working with items. +itemutil = { + --- The split mode for randomly splitting the stack. + SPLIT_MODE_RANDOM = "random", + + --- The split mode for splitting the stack into single items. + SPLIT_MODE_SINGLE = "single", + + --- The split mode for preserving the complete stack. + SPLIT_MODE_STACK = "stack" +} + + +--- "Blops" the item into existence at the given position and assigns it +-- a random velocity/acceleration. +-- +-- @param position_or_object The position, a pos value or an ObjectRef. +-- @param itemstrings_or_stacks The item string or an ItemStack. +-- @param x_strength Optional. The strength of the random movement in +-- the x direction, defaults to 5. +-- @param y_strength Optional. The strength o the random movement in +-- the y direction, defaults to 5, minimum is 1. +-- @param z_strength Optional. The strength of the random movement in +-- the z direction, defaults to 5. +-- @param split_mode Optional. The mode for splitting the items, defaults +-- to SPLIT_MODE_STACK. +-- @return The spawned items in a List. +function itemutil.blop(position_or_object, itemstrings_or_stacks, x_strength, y_strength, z_strength, split_mode) + x_strength = x_strength or 5 + y_strength = math.max(y_strength or 5, 1) + z_strength = z_strength or 5 + split_mode = split_mode or itemutil.SPLIT_MODE_STACK + + local position = position_or_object + if type(position.getpos) == "function" then + position = position:getpos() + end + + local itemstrings = List:new() + + if type(itemstrings_or_stacks) == "table" then + for index, itemstring_or_stack in ipairs(itemstrings_or_stacks) do + itemstrings:add_list(itemutil.split(itemstring_or_stack, split_mode)) + end + else + itemstrings:add_list(itemutil.split(itemstrings_or_stacks, split_mode)) + end + + local spawned_items = List:new() + + itemstrings:foreach(function(itemstring, index) + local spawned_item = minetest.add_item(position, itemstring) + + if spawned_item ~= nil then + spawned_item:setvelocity({ + x = random.next_float(-x_strength, x_strength), + y = random.next_float(1, y_strength), + z = random.next_float(-z_strength, z_strength) + }) + + spawned_items:add(spawned_item) + end + end) + + return spawned_items +end + +--- Gets the item string from the given item. +-- +-- @param item The item for which to get the item string. +-- @return The item string, or nil. +function itemutil.get_itemstring(item) + if item ~= nil then + if type(item) == "string" then + return item + elseif type(item.to_string) == "function" then + return item:to_string() + end + end + + return nil +end + +--- Splits the given item stack according to the provided method. +-- +-- @param itemstring_or_itemstack The item string or ItemStack to split. +-- @param split_mode The split mode. +-- @return A List of item strings, an empty List it could not be split. +function itemutil.split(itemstring_or_itemstack, split_mode) + if split_mode == itemutil.SPLIT_MODE_RANDOM then + return itemutil.split_random(itemstring_or_itemstack) + elseif split_mode == itemutil.SPLIT_MODE_SINGLE then + return itemutil.split_single(itemstring_or_itemstack) + elseif split_mode == itemutil.SPLIT_MODE_STACK then + return List:new(itemutil.get_itemstring(itemstring_or_itemstack)) + end + + return List:new() +end + +--- Splits the given item stack randomly. +-- +-- @param itemstring_or_itemstack The item string or ItemStack to split +-- randomly. +-- @return The List of item strings. +function itemutil.split_random(itemstring_or_itemstack) + local stack = ItemStack(itemstring_or_itemstack) + + local itemstrings = List:new() + + local name = stack:get_name() + local remaining = stack:get_count() + + while remaining > 0 do + local count = random.next_int(1, remaining) + local itemstring = name .. " " .. tostring(count) + + itemstrings:add(itemstring) + + remaining = remaining - count; + end + + return itemstrings +end + +--- Splits the given item stack into single items. +-- +-- @param itemstring_or_itemstack The item string or ItemStack to split +-- into single items. +-- @return The List of item strings. +function itemutil.split_single(itemstring_or_itemstack) + local stack = ItemStack(itemstring_or_itemstack) + + local itemstrings = List:new() + + local name = stack:get_name() + + for counter = 1, stack:get_count(), 1 do + itemstrings:add(name) + end + + return itemstrings +end + diff --git a/mods/utils/list.lua b/mods/utils/list.lua new file mode 100644 index 0000000..87deb9c --- /dev/null +++ b/mods/utils/list.lua @@ -0,0 +1,379 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A simple list that keeps the order in which the items are added to it. +-- +-- It is a thin wrapper around a simple, number indexed table providing +-- various convenience methods. +List = { + --- An accept function that only accepts non nil values. + -- + -- @param value The value that is checked. + -- @return true if the given value is not nil. + ACCEPT_NON_NIL = function(value) + return value ~= nil + end, + + --- An accept function that only accepts non empty string values. + -- + -- @param value The value that is checked. + -- @return true if the given value is a not empty string value. + ACCEPT_NON_EMPTY_STRING = function(value) + return type(value) == "string" and #value > 0 + end +} + + +--- Creates a new instance of List. +-- +-- @param ... Optional. A list of values to add. +-- @return A new instance of List. +function List:new(...) + local instance = { + counter = 1 + } + + setmetatable(instance, self) + self.__index = self + + instance:add(...) + + return instance +end + + +--- Adds the given items to the list. +-- +-- @param ... The items to add. +function List:add(...) + for index, value in ipairs({...}) do + self[self.counter] = value + self.counter = self.counter + 1 + end +end + +--- Adds the given List to the list. +-- +-- @param ... The Lists to add. +function List:add_list(...) + for index, list in ipairs({...}) do + list:foreach(function(value, value_index) + self:add(value) + end) + end +end + +--- Clears all entries from the list. +function List:clear() + for index = 1, self.counter - 1, 1 do + self[index] = nil + end + + self.counter = 1 +end + +--- Checks if this list contains the given item. +-- +-- @param item The item to search for. +-- @return true if this list contains the given item. +function List:contains(item) + return self:index(item) >= 0 +end + +--- Culls/removes all duplicates from this list. +-- +-- @param comparator Optional. The comparator to be used. Accepts two values +-- and returns true if they can be considered equal. Defaults +-- to testing the identity. +function List:cull_duplicates(comparator) + comparator = comparator or function(a, b) + return a == b + end + + -- Find duplicates. + for index = 1, self.counter - 1, 1 do + local value = self[index] + + if value ~= nil then + for sec_index = index + 1, self.counter - 1, 1 do + if comparator(self[sec_index], value) then + self[sec_index] = nil + end + end + end + end + + -- Compact the list. + local last_index = 1 + for index = 1, self.counter - 1, 1 do + local value = self[index] + + if value ~= nil then + self[last_index] = value + last_index = last_index + 1 + end + end + + -- Remove trailing elements. + for index = last_index, self.counter - 1, 1 do + self[index] = nil + end + + self.counter = last_index +end + +--- Iterates over all items in the list and invokes the given action on them. +-- +-- @param action The function to invoke on the item, the first parameter will be +-- the item itself, the second (optional) parameter is the index. +-- The function can return true to stop iterating over the items. +function List:foreach(action) + for index = 1, self.counter - 1, 1 do + if action(self[index], index) == true then + return + end + end +end + +--- Gets the item at the given index. Returns nil if there is no item. +-- Note that there is no different between "no item" and "nil is the item", +-- in both cases nil is returned. +-- +-- @param index The index of the item to get. +-- @return The item at the given index. nil if there is no item. +function List:get(index) + return self[index] +end + +--- Gets the first value in this List that is accepted by the given function. +-- +-- @param accept Optional. The function to accept values. Accepts the value and +-- returns a boolean, true if the value is accepted. If nil +-- the first value in the list will be returned. +-- @return The first accepted value, or if none was accepted, nil. +function List:get_first(accept) + for index = 1, self.counter - 1, 1 do + if accept == nil or accept(self[index]) then + return self[index] + end + end + + return nil +end + +--- Gets the last value in this List that is accepted by the given function. +-- +-- @param accept Optional. The function to accept values. Accepts the value and +-- returns a boolean, true if the value is accepted. If nil +-- the last value in the list will be returned. +-- @return The last accepted value, or if none was accepted, nil. +function List:get_last(accept) + local value = nil + + for index = 1, self.counter - 1, 1 do + if accept == nil or accept(self[index]) then + value = self[index] + end + end + + return value +end + +--- Returns the index of the given item. +-- +-- @param item The item for which to get the index. +-- @param equals Optional. The equals function to use. +-- @return The index of the given item. -1 if this item is not in this list. +function List:index(item, equals) + equals = equals or function(a, b) + return a == b + end + + for index = 1, self.counter - 1, 1 do + if equals(self[index], item) then + return index + end + end + + return -1 +end + +--- If the List contains functions, this invokes all items with the given +-- parameters. +-- +-- @param ... The parameters to invoke the functions. +function List:invoke(...) + for index = 1, self.counter - 1, 1 do + self[index](...) + end +end + +--- Gets if this List is empty. +-- +-- @return true if this List is empty. +function List:is_empty() + return self.counter == 1 +end + +--- Returns a List with all items that match the given condition. +-- +-- @param condition The condition, a function that accepts one parameter, +-- the item, and returns a boolean. +-- @return The List of matching items. +function List:matching(condition) + local found = List:new() + + for index = 1, self.counter - 1, 1 do + local item = self[index] + + if condition(item) then + found:add(item) + end + end + + return found +end + +--- Removes the given values from the list. +-- +-- @param ... The values to remove. +function List:remove(...) + for index, value_to_remove in ipairs({...}) do + self:remove_index(self:index(value_to_remove)) + end +end + +--- Removes the given index from the list. +-- +-- @param ... The index to remove. +function List:remove_index(...) + local to_remove = {...} + + table.sort(to_remove) + + for index = #to_remove, 1, -1 do + local index_to_remove = to_remove[index] + + if index_to_remove > 0 and index_to_remove < self.counter then + for index_walk = index_to_remove, self.counter, 1 do + self[index_walk] = self[index_walk + 1] + end + + self.counter = self.counter - 1 + end + end +end + +--- Invokes the contained functions and returns the first value that is accepted +-- by the given function. +-- +-- @param accept The function to accept values, takes the value and returns +-- a boolean, true if the value is accepted. +-- @param ... Optional. The parameters to invoke the functions with. +-- @return The first accepted return value, nil if none was accepted. +function List:return_first(accept, ...) + for index = 1, self.counter - 1, 1 do + local value = self[index](...) + + if accept(value) then + return value + end + end + + return nil +end + +--- Invokes the contained functions and returns the last value that is accepted +-- by the given function. +-- +-- @param accept The function to accept values, takes the value and returns +-- a boolean, true if the value is accepted. +-- @param ... Optional. The parameters to invoke the functions with. +-- @return The last accepted return value, nil if none was accepted. +function List:return_last(accept, ...) + local value = nil + + for index = 1, self.counter - 1, 1 do + local returned_value = self[index](...) + + if accept(returned_value) then + value = returned_value + end + end + + return value +end + +--- Gets the size of the list. +-- +-- @return The size of the list. +function List:size() + return self.counter - 1 +end + +--- Sorts this List. +-- +-- @param comparator Optional. The comparator to be used. Accepts two values +-- and returns a boolean, true if the first is parameter is +-- less than the second. +function List:sort(comparator) + table.sort(self, comparator or tableutil.comparator) +end + +--- Gets a sub list starting from the given index and the given number of items. +-- +-- @param from The starting index. +-- @param count The count of items to get. +-- @return A List containing the items starting by the given index. The List +-- will be empty if the starting index is out of range, if there are not +-- as many items as specified with count, all items that there are will +-- be returned. +function List:sub_list(from, count) + local sub = List:new() + + for index = math.max(from, 1), math.min(from + count - 1, self.counter - 1), 1 do + sub:add(self[index]) + end + + return sub +end + +--- Turns this list into a table, the return table will be a one indexed array, +-- and can freely be modified as it is not the table used by this instance. +-- However the items in the returned table are not copies. +-- +-- @return This list as table. +function List:to_table() + local table = {} + + self:foreach(function(item, index) + table[index] = item + end) + + return table +end + diff --git a/mods/utils/log.lua b/mods/utils/log.lua new file mode 100644 index 0000000..77db52c --- /dev/null +++ b/mods/utils/log.lua @@ -0,0 +1,87 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A simple utility for logging purposes. +-- +-- This utility uses the minetest.log() method. If the minetest object is not +-- available, it will fallback to printing the messages to stdout. +log = { + --- Whether all messages should be printed instead of being handed + -- to Minetest (if available). + print_all = false +} + + +--- Logs an action. +-- +-- @param ... The message to log. +function log.action(...) + log.log("action", ...) +end + +--- Logs an error. +-- +-- @param ... The message to log. +function log.error(...) + log.log("error", ...) +end + +--- Logs an info. +-- +-- @param ... The message to log. +function log.info(...) + log.log("info", ...) +end + +--- Logs a message with the given level. +-- +-- @param level The log level, should be action, error, info or verbose to +-- stay compatible with minetest. +-- @param ... The message to log. +function log.log(level, ...) + if not log.print_all and minetest ~= nil then + minetest.log(level, stringutil.concat(...)) + else + print(stringutil.concat("[", string.upper(level), "] ", ...)) + end +end + +--- Allows to activate or deactivate that all messages are printed. +-- +-- @param print_all true if all messages should be printed, false if messages +-- should be handed to Minetest (if available). +function log.set_print_all(print_all) + log.print_all = print_all +end + +--- Logs a message. +-- +-- @param ... The message to log. +function log.verbose(...) + log.log("verbose", ...) +end + diff --git a/mods/utils/mapmanipulator.lua b/mods/utils/mapmanipulator.lua new file mode 100644 index 0000000..312fc4b --- /dev/null +++ b/mods/utils/mapmanipulator.lua @@ -0,0 +1,155 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The MapManipulator is a thin wrapper around the VoxelManip object +-- provided by minetest. It only capsules the VoxelManip and VoxelArea behind +-- a few functions to minimize code. +MapManipulator = {} + + +--- Creates a new instance of MapManipulator. +-- +-- The parameters only need to be used if you want to read from a certain +-- area of the map. They are not needed if called from on_generated function. +-- +-- @param minp Optional. The minimum point to read the data from. +-- @param maxp Optional. The maximum point to read the data from. +-- @return A new instance. +function MapManipulator:new(minp, maxp) + local instance = { + area = nil, + data = nil, + emax = nil, + emin = nil, + param2_data = nil, + voxelmanip = nil + } + + if minp == nil and maxp == nil then + instance.voxelmanip, instance.emin, instance.emax = minetest.get_mapgen_object("voxelmanip") + else + instance.voxelmanip = minetest.get_voxel_manip() + instance.emin = minp + instance.emax = maxp + instance.voxelmanip:read_from_map(instance.emin, instance.emax) + end + + instance.area = VoxelArea:new({ + MinEdge = instance.emin, + MaxEdge = instance.emax + }) + + setmetatable(instance, self) + self.__index = self + + return instance +end + + +--- Gets the VoxelArea for the current VoxelManip. +-- +-- @return The VoxelArea. +function MapManipulator:get_area() + return self.area +end + +--- Gets the data from the VoxelManip object. +-- The data is an array that can be accessed by using the VoxelArea object. +-- +-- @return Two values, the data and the param2 data. +function MapManipulator:get_data() + if self.data == nil then + self.data = self.voxelmanip:get_data() + self.param2_data = self.voxelmanip:get_param2_data() + end + + return self.data, self.param2_data +end + +--- Gets the node and param2 at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @return Two values, the node at the given location and the param2 value. +function MapManipulator:get_node(x, z, y) + if self.data == nil then + self.data = self.voxelmanip:get_data() + self.param2_data = self.voxelmanip:get_param2_data() + end + + local index = self.area:index(x, y, z) + + return self.data[index], self.param2_data[index] +end + +--- Sets the data into the VoxelManip object. +-- Will also correct and update the lighting, the liquids and flush the map. +-- +-- @param data Optional. The data to set. If nil the cached data will be used. +-- @param param2_data Optional. The param2 data to set. If nil the cached data +-- will be used. +function MapManipulator:set_data(data, param2_data) + if data == nil and self.data == nil then + return + end + + self.voxelmanip:set_data(data or self.data) + self.voxelmanip:set_param2_data(param2_data or self.param2_data) + + self.voxelmanip:set_lighting({ + day = 1, + night = 0 + }) + self.voxelmanip:calc_lighting() + self.voxelmanip:update_liquids() + self.voxelmanip:write_to_map() + self.voxelmanip:update_map() + + self.data = nil + self.param2_data = nil +end + +--- Sets the node at the given location. +-- +-- @param x The x coordinate (width). +-- @param z the z coordinate (depth). +-- @param y The y coordinate (height). +-- @param node The node to set. +-- @param param2 Optional. The param2 data to set for this node. +function MapManipulator:set_node(x, z, y, node, param2) + if self.data == nil then + self.data = self.voxelmanip:get_data() + self.param2_data = self.voxelmanip:get_param2_data() + end + + local index = self.area:index(x, y, z) + + self.data[index] = node + self.param2_data[index] = param2 +end + diff --git a/mods/utils/mathutil.lua b/mods/utils/mathutil.lua new file mode 100644 index 0000000..0c5b135 --- /dev/null +++ b/mods/utils/mathutil.lua @@ -0,0 +1,254 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various mathematical functions. +mathutil = { + --- The maximum value a signed 8bit integer can have. + SIGNED_8BIT_MAX = 2^7 - 1, + + --- The minimum value a signed 8bit integer can have. + SIGNED_8BIT_MIN = -2^7, + + --- The maximum value a signed 16bit integer can have. + SIGNED_16BIT_MAX = 2^15 - 1, + + --- The minimum value a signed 16bit integer can have. + SIGNED_16BIT_MIN = -2^15, + + --- The maximum value a signed 32bit integer can have. + SIGNED_32BIT_MAX = 2^31 - 1, + + --- The minimum value a signed 32bit integer can have. + SIGNED_32BIT_MIN = -2^31, + + --- The maximum value an unsigned 8bit integer can have. + UNSIGNED_8BIT_MAX = 2^8 - 1, + + --- The minimum value an unsigned 8bit integer can have. + UNSIGNED_8BIT_MIN = 0, + + --- The maximum value an unsigned 16bit integer can have. + UNSIGNED_16BIT_MAX = 2^16 - 1, + + --- The minimum value an unsigned 16bit integer can have. + UNSIGNED_16BIT_MIN = 0, + + --- The maximum value an unsigned 32bit integer can have. + UNSIGNED_32BIT_MAX = 2^32 - 1, + + --- The minimum value an unsigned 32bit integer can have. + UNSIGNED_32BIT_MIN = 0 +} + + +--- Uses the Cantor Pairing function on the two given values and returns +-- a unique integer for the given numbers. +-- +-- @param a The first value. +-- @param b The second value. +-- @return A unique value for the two given values. +function mathutil.cantor_pairing(a, b) + return ((a + b) * (a + b + 1)) / 2 + b +end + +--- Clamps one value to the given minimum/maximum values. Defaults to +-- 0 to 1 if min/max are omitted. +-- +-- @param value The value to clamp. +-- @param min Optional. The minimum value, defaults to 0. +-- @param max Optional. The masximum value, defaults to 1. +-- @return The value clamped to the given range. +function mathutil.clamp(value, min, max) + if min == nil or max == nil then + return math.min(math.max(value, -1), 1) + else + return math.min(math.max(value, min), max) + end +end + +--- Gets the distance between the two given points or objects. +-- +-- @param a The first object. Either a position or an ObjectRef. +-- @param b The second object. Either a position or an ObjectRef. +-- @return The distance between the two given points or objects. +function mathutil.distance(a, b) + if type(a.getpos) == "function" then + a = a:getpos() + end + + if type(b.getpos) == "function" then + b = b:getpos() + end + + local distance_point = { + x = math.abs(a.x - b.x), + y = math.abs(a.y - b.y), + z = math.abs(a.z - b.z) + } + + local distance2d = math.sqrt(math.pow(distance_point.x, 2) + math.pow(distance_point.z, 2)) + local distance3d = math.sqrt(math.pow(distance2d, 2) + math.pow(distance_point.y, 2)) + + return distance3d +end + +--- Returns a vector indicating the general direction from a to b. +-- +-- @param source_pos The source point, a vector. +-- @param target_pos The target point, a vector. +-- @return The vector containing the direction, either 1 for the positive +-- direction or -1 for the negative one. +function mathutil.direction(source_pos, target_pos) + return { + x = mathutil.sign(target_pos.x - source_pos.x), + y = mathutil.sign(target_pos.y - source_pos.y), + z = mathutil.sign(target_pos.z - source_pos.z) + } +end + +--- Gets the distance between two given points in the x/z plane. +-- +-- @param a The first object. Either a position or an ObjectRef. +-- @param b The first object. Either a position or an ObjectRef. +-- @return The distance between the two given points or objects in +-- the x/z plane. +function mathutil.distance2d(a, b) + if type(a.getpos) == "function" then + a = a:getpos() + end + + if type(b.getpos) == "function" then + b = b:getpos() + end + + local distance_point = { + x = math.abs(a.x - b.x), + z = math.abs(a.z - b.z) + } + + return math.sqrt(math.pow(distance_point.x, 2) + math.pow(distance_point.z, 2)) +end + +--- Tests if the given value is within the given range. +-- +-- @param value The value to test. +-- @param min The minimum value. It can also be a table with either two values, +-- the first being the minimum and the second being the maximum, or +-- with two named values, min and max. +-- @param max The maximum value. Not used if min is a table. +function mathutil.in_range(value, min, max) + if type(min) == "table" then + if min.min == nil then + max = min[2] + min = min[1] + else + max = min.max + min = min.min + end + end + + if min > max then + local temp = min + min = max + max = temp + end + + return value >= min and value <= max +end + +--- Checks if the given first two values intersect with the other given values. +-- +-- @param min_a The first minimum value. +-- @param max_a The first maximum value. +-- @param min_b The second minimum value. +-- @param max_b The second maximum value. +-- @return true if the first values intersect with the second. +function mathutil.intersects(min_a, max_a, min_b, max_b) + return mathutil.in_range(min_a, min_b, max_b) + or mathutil.in_range(max_a, min_b, max_b) + or (min_a < min_b + and max_a > max_b) +end + +--- Checks if the given first two positions intersect with the other given +-- positions. +-- +-- @param min_a The first minimum value. +-- @param max_a The first maximum value. +-- @param min_b The second minimum value. +-- @param max_b The second maximum value. +-- @return true if the first positions intersect with the second. +function mathutil.intersects3d(min_a, max_a, min_b, max_b) + return mathutil.intersects(min_a.x, min_b.x) + and mathutil.intersects(min_a.z, min_b.z) + and mathutil.intersects(min_a.y, min_b.y) +end + +--- Gets the next lower prime from the given number. +-- +-- @param number The number. +-- @return The next lower prime. +function mathutil.next_lower_prime(number) + for lower = number, 0, -1 do + if (lower <= 2 or math.fmod(lower, 2) ~= 0) + and (lower <= 3 or math.fmod(lower, 3) ~= 0) + and (lower <= 5 or math.fmod(lower, 5) ~= 0) + and (lower <= 7 or math.fmod(lower, 7) ~= 0) then + + return lower + end + end + + return 0 +end + +--- Rounds to the nearest number with the given decimal places. +-- +-- @param value The value to round. +-- @param decimal_places Optional. The number of decimal places to round to, +-- defaults to 0. +-- @return The rounded value. +function mathutil.round(value, decimal_places) + decimal_places = decimal_places or 0 + + local multiplicator = 10 ^ decimal_places + return math.floor(value * multiplicator + 0.5) / multiplicator +end + +--- Gets the sign of the given number. +-- +-- @param number The number of which to get the sign. +-- @return 1 for a positive number, -1 for a negative one. Zero is considered +-- a positive number for this function, there for returns 1. +function mathutil.sign(number) + if number >= 0 then + return 1 + else + return -1 + end +end + diff --git a/mods/utils/minetestex.lua b/mods/utils/minetestex.lua new file mode 100644 index 0000000..3b61e5e --- /dev/null +++ b/mods/utils/minetestex.lua @@ -0,0 +1,85 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Provides various extensions to the builtin functions. +minetestex = { + node_drops_handlers = List:new(), + original_node_drops_function = nil +} + + +--- The handler that is used for invoking the registered node drop functions. +-- +-- @param position The position at which the drop occurred. +-- @param drops The drops that are being dropped, a list of ItemStacks. +-- @param player The player which the event originated at. +function minetestex.handle_node_drops(position, drops, player) + local dropped_items = List:new() + + for index, drop in ipairs(drops) do + dropped_items:add(ItemStack(drop)) + end + + local handled = false + + minetestex.node_drops_handlers:foreach(function(handler, index) + handled = (handler(position, dropped_items, player, handled) == true) + end) + + if not handled then + minetestex.original_node_drops_function(position, drops, player) + end +end + +--- Initializes the node drops system. This is an internal function and should +-- not be called from clients. +function minetestex.init() + minetestex.original_node_drops_function = minetest.handle_node_drops + minetest.handle_node_drops = minetestex.handle_node_drops +end + +--- Registers the given handler for node drops. +-- +-- @param handler The handler function. The function is assumed to take four +-- parameters, the position at which the drops occurred, +-- the drops which are dropped as list if ItemStacks, the player +-- with which the even originated and if the event has been +-- handled so far or not. Can return a boolean if the event +-- has been handled. The handled flag is used to indicate +-- wether the builtin functionality should be invoked or not. +-- That means that if the last handler returns true, the items +-- will not be added to the players inventory by default. By +-- default the handler should return the given handled parameter +-- to not change the state or return the desired state. +function minetestex.register_on_nodedrops(handler) + minetestex.node_drops_handlers:add(handler) +end + + +-- Initialize everything. +minetestex.init() + diff --git a/mods/utils/nodeutil.lua b/mods/utils/nodeutil.lua new file mode 100644 index 0000000..41653fd --- /dev/null +++ b/mods/utils/nodeutil.lua @@ -0,0 +1,131 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions related to nodes. +nodeutil = {} + + +--- Gets the content id of the given node. +-- +-- @param node The node, can either be an id, a name or a table with the name. +-- @return The content id of the given node. +function nodeutil.get_id(node) + if type(node) == "string" then + return minetest.get_content_id(node) + elseif type(node) == "table" then + return minetest.get_content_id(node.name) + end + + return node +end + +--- Gets the name of given node. +-- +-- @param node The node, can either be an id, a name or a table with the name. +-- @return The name of the given node. +function nodeutil.get_name(node) + if type(node) == "number" then + return minetest.get_name_from_content_id(node) + elseif type(node) == "table" then + return node.name + end + + return node +end + +--- Checks if the given node has the given group. +-- +-- @param node The node to check. +-- @param group_name The name of the group. +-- @return true if the node has the given group. +function nodeutil.has_group(node, group_name) + local node_name = nodeutil.get_name(node) + + return minetest.get_item_group(node_name, group_name) > 0 +end + +--- Checks if the given node is walkable. +-- +-- @param node The node to check, can either be an id, a name or a table with +-- the name. +-- @return true if the given node is walkable. +function nodeutil.is_walkable(node) + local node_name = nodeutil.get_name(node) + local node_definition = minetest.registered_nodes[node_name] + + if node_definition ~= nil then + -- Test against false needed in case that walkable is not set, + -- as it defaults to true. + return node_definition.walkable ~= false + end + + -- The node does not exist, sad. + return false +end + +--- Iterates over the surroundings of the given position and invokes +-- the callback for every node in the surroundings. +-- +-- For example if you want to iterate over the direct neighbourse in all +-- dimensions, you'd do the following: +-- +-- nodeutil.surroundings(pos, -1, 1, -1, 1, -1, 1, callback) +-- +-- @param pos The position that is the center. +-- @param x_begin The modifier for the beginning in the x dimension. +-- @param x_end The modifier for the end in the x dimension. +-- @param z_begin The modifier for the beginning in the z dimension. +-- @param z_end The modifier for the end in the z dimension. +-- @param y_begin The modifier for the beginning in the y dimension. +-- @param y_end The modifier for the end in the y dimension. +-- @param callback The callback to invoke for every surrounding node. can +-- return true if iterating over the surroundings should be +-- stopped. +-- @return true if the iterating over the surroundings has been stopped by +-- a callback. +function nodeutil.surroundings(pos, x_begin, x_end, z_begin, z_end, y_begin, y_end, callback) + for x = pos.x + x_begin, pos.x + x_end, 1 do + for z = pos.z + z_begin, pos.z + z_end, 1 do + for y = pos.y + y_begin, pos.y + y_end, 1 do + if x ~= pos.x or z ~= pos.z or y ~= pos.y then + local current_pos = { + x = x, + y = y, + z = z + } + + if callback(current_pos, minetest.get_node(current_pos)) then + return true + end + end + end + end + end + + return false +end + diff --git a/mods/utils/noisemanager.lua b/mods/utils/noisemanager.lua new file mode 100644 index 0000000..cfbbed2 --- /dev/null +++ b/mods/utils/noisemanager.lua @@ -0,0 +1,138 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The NoiseManager manages seeds and creates PRNG of various kinds, always +-- with a new, unique seed. The seed is incremented with each creation, so +-- it is guaranteed that the results are reproducable. +NoiseManager = {} + + +--- Creates a new instance of NoiseManager. +-- +-- @param start_seed Optional. The initial seed value, defaults to 0. +-- @param size_x Optional. The map size in the x direction, defaults to +-- the mapchunk size (see blockutil.MAPCHUNK_SIZE). +-- @param size_y Optional. The map size in the y direction, defaults to size_x. +-- @param size_z Optional. The map size in the z direction, defaults to size_z. +-- @return A new instance of NoiseManager. +function NoiseManager:new(start_seed, size_x, size_y, size_z) + local instance = { + map_size = { + x = size_x or blockutil.MAPCHUNK_SIZE, + y = size_y or size_x or blockutil.MAPCHUNK_SIZE, + z = size_z or size_x or blockutil.MAPCHUNK_SIZE + }, + next_seed = start_seed or 0 + } + + setmetatable(instance, self) + self.__index = self + + return instance +end + + +--- Creates a Perlin object with the given values. +-- +-- @param octaves The count of octaves. +-- @param persistence The persistence values. +-- @param scale The scale. +-- @return The new Perlin object. +function NoiseManager:get_noise(octaves, persistence, scale) + self.next_seed = self.next_seed + 1 + + return minetest.get_perlin(self.next_seed, octaves, persistence, scale) +end + +-- Creates a PerlinMap object with the given values suitable for 2D noise. +-- +-- @param octaves The count of octaves. +-- @param persistence The persistence value. +-- @param scale The scale. +-- @param spreadx The spread of the x axis. +-- @param spready Optional. The spread of the y axis, defaults to spreadx. +-- @param flags Optional. Additional flags for the noise. +-- return The new PerlinMap object. +function NoiseManager:get_map2d(octaves, persistence, scale, spreadx, spready, flags) + return self:get_map3d(octaves, persistence, scale, spreadx, spready, 1, flags) +end + +-- Creates a PerlinMap object with the given values suitable for 3D noise. +-- +-- @param octaves The count of octaves. +-- @param persistence The persistence value. +-- @param scale The scale. +-- @param spreadx The spread of the x axis. +-- @param spready Optional. The spread of the y axis, defaults to spreadx. +-- @param spreadz Optional. The spread of the z axis, defaults to spreadx. +-- @param flags Optional. Additional flags for the noise. +-- return The new PerlinMap object. +function NoiseManager:get_map3d(octaves, persistence, scale, spreadx, spready, spreadz, flags) + self.next_seed = self.next_seed + 1 + + local parameters = { + offset = 0, + scale = scale, + spread = { + x = spreadx, + y = spready or spreadx, + z = spreadz or spreadx + }, + seed = self.next_seed, + octaves = octaves, + persist = persistence, + flags = flags + } + + return minetest.get_perlin_map(parameters, self.map_size) +end + +--- Gets the next seed that will be used. Does not increment the counter. +-- +-- @return The next seed that will be used. +function NoiseManager:get_next_seed() + return self.next_seed +end + +--- Creates a PcgRandom object. +-- +-- @return The new PcgRandom object. +function NoiseManager:get_pcgrandom() + self.next_seed = self.next_seed + 1 + + return PcgRandom(self.next_seed) +end + +--- Creates a PseudoRandom object. +-- +-- @return The new PseudoRandom object. +function NoiseManager:get_random() + self.next_seed = self.next_seed + 1 + + return PseudoRandom:new(self.next_seed) +end + diff --git a/mods/utils/numberutil.lua b/mods/utils/numberutil.lua new file mode 100644 index 0000000..524b127 --- /dev/null +++ b/mods/utils/numberutil.lua @@ -0,0 +1,90 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions for working with numbers. +numberutil = {} + + +--- Formats the given number into a nice, readable string. +-- +-- @param number The number to format. +-- @param decimal_places Optional. How many decimal places to show. The number +-- will be rounded to this amount of decimal places, +-- if omitted, as many as there are are printed. +-- @param decimal_separator Optional. The decimal separator to use, defaults +-- to a dot. +-- @param thousand_separator Optional. The thousand separator to use, defaults +-- to a comma. +-- @return The formatted number. +function numberutil.format(number, decimal_places, decimal_separator, thousand_separator) + decimal_separator = decimal_separator or "." + thousand_separator = thousand_separator or "," + + if decimal_places then + number = mathutil.round(number, decimal_places) + end + + local number_string = tostring(number) + + local start_index, end_index, minus, integer, fraction = string.find(number_string, "(-?)(%d+)([.]?%d*)") + + local formatted = "" + + if #integer > 3 then + for index = #integer, 3, -3 do + formatted = thousand_separator .. string.sub(integer, index - 2, index) .. formatted + end + + local rest = math.fmod(#integer, 3) + if rest > 0 then + formatted = string.sub(integer, 1, rest) .. formatted + end + else + formatted = integer .. formatted + end + + if minus ~= nil and minus ~= "" then + formatted = minus .. formatted + end + + if decimal_places == nil or decimal_places > 0 then + if fraction ~= nil and fraction ~= "" then + fraction = string.sub(fraction, 2) + + if decimal_places and #fraction < decimal_places then + fraction = fraction .. string.rep("0", decimal_places - #fraction) + end + + formatted = formatted .. decimal_separator .. fraction + elseif decimal_places ~= nil then + formatted = formatted .. decimal_separator .. string.rep("0", decimal_places) + end + end + + return formatted +end + diff --git a/mods/utils/objectrefutil.lua b/mods/utils/objectrefutil.lua new file mode 100644 index 0000000..d86d9c6 --- /dev/null +++ b/mods/utils/objectrefutil.lua @@ -0,0 +1,41 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Provides various utility methods for manipulating ObjectRefs. +objectrefutil = {} + + +--- Checks if the given ObjectRef is still alive, meaning it has a HP value +-- greater than zero or damage has been deactivated. +-- +-- @param objectref The objectref to check. +-- @return true if the ObjectRef is still alive. +function objectrefutil.is_alive(objectref) + return objectref:get_hp() > 0 + or not settings.get_bool("enable_damage", true) +end + diff --git a/mods/utils/pathutil.lua b/mods/utils/pathutil.lua new file mode 100644 index 0000000..89cc01a --- /dev/null +++ b/mods/utils/pathutil.lua @@ -0,0 +1,66 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various utility functions for working with paths. +pathutil = { + + --- The path delimiter used. + delimiter = "/" +} + +--- Concats all given value into a valid path. +-- +-- @param ... The items to concatenate. Assumed to be strings. +-- @return A pthat delimited by the current path delimiter. +function pathutil.concat(...) + if ... == nil then + return "" + end + + local path = "" + + for idx, value in ipairs({...}) do + if value ~= nil and value ~= "" then + if path ~= "" and stringutil.startswith(value, pathutil.delimiter) then + value = string.sub(value, string.len(pathutil.delimiter) + 1) + end + + if stringutil.endswith(value, pathutil.delimiter) then + value = string.sub(value, 1, -string.len(pathutil.delimiter)) + end + + if not stringutil.endswith(path, pathutil.delimiter) and path ~= "" then + path = path .. pathutil.delimiter + end + + path = path .. tostring(value) + end + end + + return path +end + diff --git a/mods/utils/posutil.lua b/mods/utils/posutil.lua new file mode 100644 index 0000000..d6da889 --- /dev/null +++ b/mods/utils/posutil.lua @@ -0,0 +1,58 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions for working with positions. +posutil = {} + + +--- Returns the position above the given position. +-- +-- @param pos The position. +-- @param add Optional. The value to add to the y value. Defaults to 1. +-- @return The position above the given one. +function posutil.above(pos, add) + return { + x = pos.x, + y = pos.y + (add or 1), + z = pos.z + } +end + +--- Returns the position below the given position. +-- +-- @param pos The position. +-- @param subtract Optional. The value to subtract from the y value. Defaults +-- to 1. +-- @return The position below the given one. +function posutil.below(pos, subtract) + return { + x = pos.x, + y = pos.y - (subtract or 1), + z = pos.z + } +end + diff --git a/mods/utils/random.lua b/mods/utils/random.lua new file mode 100644 index 0000000..f73afcf --- /dev/null +++ b/mods/utils/random.lua @@ -0,0 +1,113 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Random is a static utility that provides fast and easy access to +-- random numbers. +random = { + --- The internal maximum value. + max = 2147483646, + + --- The internal minimum value. + min = 0, + + --- The provider for random numbers. + random_provider = nil +} + + +--- Initializes random. Should not be called from the client. +function random.init() + if PcgRandom ~= nil then + random.random_provider = PcgRandom(os.time()) + else + math.randomseed(os.time()) + + random.random_provider = { + next = function(self, lower_bound, upper_bound) + return math.abs(math.random(lower_bound, upper_bound)) + end + } + end +end + +--- Returns true or false based on the given chance. +-- +-- @param chance Optional. The "one in chance" chance to get true, defaults +-- to 2 (ans in "one in two"). +-- @return true or false based in the given chance. +function random.next_bool(chance) + chance = chance or 2 + + if chance <= 0 then + return false + elseif chance == 1 then + return true + end + + return random.next_int(0, chance) == chance - 1 +end + +--- Returns a float between the given bounds. +-- +-- @param lower_bound Optional. The lower bound (inclusive), defaults to 0. +-- @param upper_bound Optional. The upper bound (inclusive), defaults to 1. +-- @param decimal_places Optional. To how many decimal places the resulting +-- float should be rounded. +-- @return a float between the given bounds. +function random.next_float(lower_bound, upper_bound, decimal_places) + lower_bound = lower_bound or 0 + upper_bound = upper_bound or 1.0 + + local value = random.random_provider:next(random.min, random.max) + value = (value - random.min) / (random.max - random.min) + value = value * (upper_bound - lower_bound) + lower_bound + + if decimal_places then + value = mathutil.round(value, decimal_places) + end + + return value +end + +--- Returns an int between the given bounds. +-- +-- @param lower_bound Optional. The lower bound (inclusive), defaults to +-- random.min. +-- @param upper_bound Optional. The upper bound (inclusive), defaults to +-- random.max. +-- @return a integer between the given bounds. +function random.next_int(lower_bound, upper_bound) + lower_bound = lower_bound or random.min + upper_bound = upper_bound or random.max + + return random.random_provider:next(lower_bound, upper_bound) +end + + +-- Initialize the random object. +random.init() + diff --git a/mods/utils/rotationutil.lua b/mods/utils/rotationutil.lua new file mode 100644 index 0000000..20fe02f --- /dev/null +++ b/mods/utils/rotationutil.lua @@ -0,0 +1,178 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions for rotating nodes. +-- +-- The internal mechanics of Minetest are as follows: It uses the facedir value +-- to apply an rotation. It is value with the minimum of 0 (no rotation) to +-- the maximum of 23 (1 0 1 1 1). It consists of two parts, the lower two bits +-- are the amount of rotation applied: +-- +-- Bits Value Description +-- 0 0 0 No rotation +-- 0 1 1 90 degrees (sign depending on axis, + for z+ x- y-) +-- 1 0 2 180 degrees +-- 1 1 3 -90 degrees (sign depending on axis, + for z- x+ y+) +-- +-- These values correspond to the ROT_* constants. +-- +-- The upper three bits are the axis that is used: +-- +-- Bits Value Shifted Description +-- 0 0 0 0 0 y+, no rotation +-- 0 0 1 1 4 z+, 90 degrees clockwise around x +-- 0 1 0 2 8 z-, 90 degrees counter-clockwise around x +-- 0 1 1 3 12 x+, 90 degrees counter-clockwise around z +-- 1 0 0 4 16 x-, 90 degrees clockwise around z +-- 1 0 1 5 20 y-, 180 degrees counter-clockwise around x +-- +-- These values correspond to the POS_* and NEG_* constants. +-- +-- The rotation is a two step process, first the rotation of the axis/upper +-- three bits are applied, after that the rotation/lower two bits. +-- +-- See the mapnode.cpp/transformNodeBox function for even more details. +rotationutil = { + --- The negative X Axis. Will rotate the node around the Z axis by + -- 90 degrees clockwise before the additional rotation is applied. + -- + -- Minetest internal it has the value 4, within facedir it is 16 (1 0 0 R R). + NEG_X = 16, + --- The negative Z Axis. Will rotate the node around the X axis by + -- 90 degrees counter-clockwise before the additional rotation is applied. + -- + -- Minetest internal it has the value 2, within facedir it is 8 (0 1 0 R R). + NEG_Z = 8, + --- The negative Y Axis. Will rotate the node around the Z axis by + -- 180 degrees counter-clockwise before the additional rotation is applied. + -- + -- Minetest internal it has the value 5, within the bitmask of facedir it + -- is 20 (1 0 1 R R). + NEG_Y = 20, + --- The positive X Axis. Will rotate the node around the Z axis by + -- 90 degrees counter-clockwise before the additional rotation is applied. + -- + -- Minetest internal it has the value 3, within facedir it is 12 (0 1 1 R R). + POS_X = 12, + --- The positive Y Axis. Will not rotate the node before the additional + -- rotation is applied. + -- + -- Minetest internal it has the value 0, within of facedir it is 0 (0 0 0 R R). + POS_Y = 0, + --- The positive Z Axis. Will rotate the node around the X axis by + -- 90 degrees clockwise before the additional rotation is applied. + -- + -- Minetest internal it has the value 1, within facedir it is 4 (0 0 1 R R). + POS_Z = 4, + --- No rotation. + ROT_0 = 0, + --- Rotation 90 degrees, sign depends on the axis. + ROT_90 = 1, + --- Rotation 180 degrees. + ROT_180 = 2, + --- Rotation 270/-90 degrees, sign depends on the axis. + ROT_270 = 3 +} + + +--- Returns the decremented rotation, so given rotation - 90 degrees. +-- +-- @param rotation The rotation to decrement. +-- @return The decremented rotation, or the given value if it was not valid. +function rotationutil.decrement(rotation) + if rotation == rotationutil.ROT_0 then + return rotationutil.ROT_270 + elseif rotation == rotationutil.ROT_90 then + return rotationutil.ROT_0 + elseif rotation == rotationutil.ROT_180 then + return rotationutil.ROT_90 + elseif rotation == rotationutil.ROT_270 then + return rotationutil.ROT_180 + end + + return rotation +end + +--- Creates the facedir value from the given axis and rotation. +-- +-- @param axis The axis, one of the POS_* or NEG_* constants. +-- @param rotation The rotation, one of the ROT_* constants. +-- @return The facedir value. +function rotationutil.facedir(axis, rotation) + return axis + rotation +end + +--- Returns the incremented rotation, so given rotation + 90 degrees. +-- +-- @param rotation The rotation to increment. +-- @return The incremented rotation, or the given value if it was not valid. +function rotationutil.increment(rotation) + if rotation == rotationutil.ROT_0 then + return rotationutil.ROT_90 + elseif rotation == rotationutil.ROT_90 then + return rotationutil.ROT_180 + elseif rotation == rotationutil.ROT_180 then + return rotationutil.ROT_270 + elseif rotation == rotationutil.ROT_270 then + return rotationutil.ROT_0 + end + + return rotation +end + +--- Inverts the given axis or rotation. +-- @param axis_or_rotation The axis or rotation, one of the POS_*, NEG_* or +-- ROT_* constants. +-- @return The inverted value, or the given value if it was not valid. +function rotationutil.invert(axis_or_rotation) + if axis_or_rotation == rotationutil.NEG_X then + return rotationutil.POS_X + elseif axis_or_rotation == rotationutil.NEG_Y then + return rotationutil.POS_Y + elseif axis_or_rotation == rotationutil.NEG_Z then + return rotationutil.POS_Z + elseif axis_or_rotation == rotationutil.POS_X then + return rotationutil.NEG_X + elseif axis_or_rotation == rotationutil.POS_Y then + return rotationutil.NEG_Y + elseif axis_or_rotation == rotationutil.POS_Y then + return rotationutil.NEG_Z + end + + if axis_or_rotation == rotationutil.ROT_0 then + return rotationutil.ROT_180 + elseif axis_or_rotation == rotationutil.ROT_90 then + return rotationutil.ROT_270 + elseif axis_or_rotation == rotationutil.ROT_180 then + return rotationutil.ROT_0 + elseif axis_or_rotation == rotationutil.ROT_270 then + return rotationutil.ROT_90 + end + + return axis_or_rotation +end + diff --git a/mods/utils/scheduler.lua b/mods/utils/scheduler.lua new file mode 100644 index 0000000..d8d02f3 --- /dev/null +++ b/mods/utils/scheduler.lua @@ -0,0 +1,117 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The Scheduler allows you to easily schedule functions for execution. Under +-- the hood it used minetest.register_on_globalstep to schedule functions. +scheduler = { + --- If more time has elapsed than the interval of the scheduled function, + -- the function will be run as many times as necessary to catch up. + OVERSHOOT_POLICY_CATCH_UP = 1, + + --- If more time has elpased than the interval of the scheduled function, + -- the function will still only be run once. + OVERSHOOT_POLICY_RUN_ONCE = 2, + + --- The table of functions for immediate execution. + immediate_functions = {}, + + --- If the scheduler has been initialized. + initialized = false, + + -- The table of scheduled functions. + scheduled_functions = {} +} + + +--- Initializes the scheduler. +-- +-- Note that the client should never need to call this function. +function scheduler.init() + if not scheduler.initialized then + minetest.register_globalstep(scheduler.step) + end +end + +--- Schedules the given function. +-- +-- @param name The name of the function. +-- @param interval The interval in which to run the function. A value of zero +-- will make the function run on every global step, +-- the overshoot policy will have no effect in that case. +-- @param run_function The function to execute. +-- @param overshoot_policy Optional. The overshoot policy. Defaults to +-- scheduler.OVERSHOOT_POLICY_RUN_ONCE. +function scheduler.schedule(name, interval, run_function, overshoot_policy) + scheduler.scheduled_functions[name] = { + interval = interval, + overshoot_policy = overshoot_policy or scheduler.OVERSHOOT_POLICY_RUN_ONCE, + run_function = run_function, + timer = 0 + } + + if not scheduler.initialized then + scheduler.init() + end +end + +--- The step function that is registered with minetest.register_on_globalstep. +-- +-- Note that the client should never call this function as it might mess up +-- the scheduled functions. +-- +-- @param since_last_call The elapsed time since the last call. +function scheduler.step(since_last_call) + for name, scheduled in pairs(scheduler.scheduled_functions) do + if scheduled.interval > 0 then + scheduled.timer = scheduled.timer + since_last_call + + if scheduled.timer >= scheduled.interval then + scheduled.run_function() + + local additional_runs = math.floor(scheduled.timer / scheduled.interval) - 1 + + if scheduled.overshoot_policy == scheduler.OVERSHOOT_POLICY_CATCH_UP then + for counter = 1, additional_runs, 1 do + scheduled.run_function() + end + end + + scheduled.timer = 0 + end + else + scheduled.run_function() + end + end +end + +--- Unschedules/Removes the function with the given name. +-- +-- @param name The name of the function to unschedule. +function scheduler.unschedule(name) + scheduler.scheduled_functions[name] = nil +end + diff --git a/mods/utils/settings.lua b/mods/utils/settings.lua new file mode 100644 index 0000000..6afef62 --- /dev/null +++ b/mods/utils/settings.lua @@ -0,0 +1,215 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Encapsulates the settings API of minetest and extends it with further +-- functions. +settings = {} + + +--- Gets a value from the configuration as is. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default_value to return if the value is +-- not set in the configuration. Can be nil. +-- @param cast_function Optional. The function to apply to the value that is +-- read, for example to convert it into a different type. +-- If this function returns nil, the default value IS +-- returned. Can be nil. +-- @return The value from the configuration with the given name. If the read +-- value is nil, the default value is returned or nil. +function settings.get(name, default_value, cast_function) + local value = minetest.setting_get(name) + + if value ~= nil and cast_function ~= nil then + value = cast_function(value) + end + + if value ~= nil then + return value + else + return default_value + end +end + +--- Gets a boolean from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The boolean with the given name, or the default value if it is nil, +-- or nil. +function settings.get_bool(name, default_value) + local value = minetest.setting_getbool(name) + + if value ~= nil then + return value + else + return default_value + end +end + +--- Gets a list from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is +-- nil. Can be nil. +-- @return The list with the given name, or the default value if it is nil, +-- or nil. +function settings.get_list(name, default_value) + local value = settings.get(name, nil, tostring) + + if value ~= nil then + return stringutil.split(value, ",") + elseif type(default_value) == "string" then + return stringutil.split(default_value, ",") + else + return default_value + end +end + +--- Gets a number from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The number with the given name, or the default value if it is nil, +-- or nil. +function settings.get_number(name, default_value) + return settings.get(name, default_value, tonumber) +end + +--- Gets a pos (with x and y values) from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The pos with the given name, or the default value if it is nil, +-- or nil. +function settings.get_pos2d(name, default_value) + local value = minetest.setting_get(name) + + if value ~= nil then + local splitted_value = stringutil.split(value, ",") + + if splitted_value:size() == 2 then + local x = tonumber(splitted_value:get(1)) + local y = tonumber(splitted_value:get(2)) + + if x ~= nil and y ~= nil then + return { + x = x, + y = y + } + end + end + end + + return default_value +end + +--- Gets a pos with (x, y and z values) from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The pos with the given name, or the default value if it is nil, +-- or nil. +function settings.get_pos3d(name, default_value) + local value = minetest.setting_get_pos(name) + + if value ~= nil then + return value + else + return default_value + end +end + +--- Gets a string from the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The string with the given name, or the default value if it is nil, +-- or nil. +function settings.get_string(name, default_value) + return settings.get(name, default_value, tostring) +end + +--- Gets a table with the given keys form the configuration. +-- +-- @param name The name of the value to get. +-- @param default_value The default value to return if the value is nil, can be +-- nil. +-- @param ... The name of the keys. +-- @return The table with the given name and the given keys, or the default +-- value it is nil. +function settings.get_table(name, default_value, ...) + local value = settings.get_list(name, nil) + + if value ~= nil then + local table = {} + + if ... ~= nil then + for index, key in ipairs({...}) do + table[key] = value:get(index) + end + end + + if ... == nil or #{...} < value:size() then + for index = #{...} + 1, value:size(), 1 do + table[index] = value:get(index) + end + end + + return table + else + return default_value + end +end + +--- Saves all settings to configuration file. +function settings.save() + minetest.setting_save() +end + +--- Set a value with the given name into the configuration. +-- +-- @param name The name of the value to set. Is not allowed to contain '="#{}'. +-- @param value The value. +function settings.set(name, value) + minetest.setting_set(name, value) +end + +--- Gets a pos from the configuration, this is an alias for get_pos3d. +-- +-- @param name The name of the value to get. +-- @param default_value Optional. The default value to return if the value is nil. +-- Can be nil. +-- @return The pos with the given name, or the default value if it is nil, +-- or nil. +settings.get_pos = settings.get_pos3d + diff --git a/mods/utils/stopwatch.lua b/mods/utils/stopwatch.lua new file mode 100644 index 0000000..53e4350 --- /dev/null +++ b/mods/utils/stopwatch.lua @@ -0,0 +1,78 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Allows to easily time blocks of code. The result will be logged. +stopwatch = { + active_watches = {} +} + + +--- Start a watch with the given name. +-- +-- @param watch_name The name of the watch to start. +function stopwatch.start(watch_name) + stopwatch.active_watches[watch_name] = os.clock() +end + + +--- Stops the watch with the given name, logging the duration. +-- +-- It will be logged as info in the format "watch_name: duration ms" or +-- if the message is provided "message: duration ms" +-- @param watch_name The name of the watch to stop. +-- @param message Optional. The message to use for the log instead of the name. +-- @param decimal_places Optional. To how many decimal places the time should +-- be rounded. Defaults to 3. +function stopwatch.stop(watch_name, message, decimal_places) + decimal_places = decimal_places or 3 + + local duration = stopwatch.stop_only(watch_name) + duration = mathutil.round(duration, decimal_places) + + log.info(message or watch_name, ": ", duration, " ms") +end + +--- Stops the watch with the given name and returns the duration for which +-- the watch has been running. +-- +-- @param watch_name The name of the watch to stop. +-- @return The duration of the watch. -1 if it never was started. +function stopwatch.stop_only(watch_name) + local start = stopwatch.active_watches[watch_name] + + stopwatch.active_watches[watch_name] = nil + + if start ~= nil then + local duration = os.clock() - start + duration = duration * 1000 + + return duration + else + return -1 + end +end + diff --git a/mods/utils/stringutil.lua b/mods/utils/stringutil.lua new file mode 100644 index 0000000..f886d0f --- /dev/null +++ b/mods/utils/stringutil.lua @@ -0,0 +1,176 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various utility functions for working with strings. +stringutil = {} + + +--- Concats all the given items by invoking tostring on them into one string. +-- +-- @param ... The items to concat. +-- @return The concatenated items as string. +function stringutil.concat(...) + if ... == nil then + return "" + end + + local string = "" + + for idx, value in ipairs({...}) do + string = string .. tostring(value) + end + + return string +end + +--- Tests if the given text ends with the given value. +-- +-- @param text The text to check if it ends with the given value. +-- @param value The value that text should end with. +-- @return true if the given text ends with the value. +function stringutil.endswith(text, value) + if text == nil or value == nil then + return false + end + + if value == "" then + return true + end + + return string.sub(text, -string.len(value)) == value +end + +--- Creates a simple hash in the range of mathutil.SIGNED_32BIT_MIN and +-- mathutil.SIGNED_32BIT_MAX (which is roughly -2 billion to 2 billion). +-- Note that this is not the best string hash function there could be, but is +-- more than sufficient if all you want is to test a string if it is different +-- or if you want to create a number from a string of unknown length. +-- +-- @param value The string value to hash. +-- @return The hash. Always 0 if the given string is nil or empty. +function stringutil.hash(value) + -- Early bailout. + if value == nil or #value == 0 then + return 0 + end + + local hash = 0 + + for index = 1, #value, 1 do + hash = hash * 31 + string.byte(string.sub(value, index, index)) + + while hash > mathutil.SIGNED_32BIT_MAX do + hash = hash - mathutil.SIGNED_32BIT_MAX + end + end + + return hash +end + +--- Splits the given text using the given split value. Returns the splitted text +-- as List. If the string is empty or nil, the returned list will not contain +-- any entries. If the string only contains a value without a separator, +-- the list will contain one value, if it contains only the separator, +-- two empty values. +-- +-- @param text The text to split. +-- @param split The split value. +-- @param trim_values Optional. If the values should be trimmed, defaults to +-- true. +-- @return The list of splitted values. +function stringutil.split(text, split, trim_values) + if trim_values == nil then + trim_values = true + end + + local splitted = List:new() + + if string ~= nil and #text > 0 then + local previous_starts = 0 + local previous_ends = 0 + local starts, ends = string.find(text, split, 0, true) + + while ends ~= nil do + local value = string.sub(text, previous_ends + 1, starts - 1) + + if trim_values then + value = stringutil.trim(value) + end + + splitted:add(value) + + previous_starts = starts + previous_ends = ends + starts, ends = string.find(text, split, ends + 1, true) + end + + if previous_ends > 0 or splitted:size() == 0 then + local value = string.sub(text, previous_ends + 1) + + if trim_values then + value = stringutil.trim(value) + end + + splitted:add(value) + end + end + + return splitted +end + +--- Tests if the given text starts with the given value. +-- +-- @param text The text to check if it starts with the given value. +-- @param value The value that text should start with. +-- @return true if the given text starts with the value. +function stringutil.startswith(text, value) + if text == nil or value == nil then + return false + end + + if value == "" then + return true + end + + return string.sub(text, 1, string.len(value)) == value +end + +--- Trims the given text from any leading and trailing whitespace. +-- +-- @param text The text to trim. +-- @return The trimmed text. +function stringutil.trim(text) + if text ~= nil and #text > 0 then + local trimmed = string.gsub(text, "^%s+", "") + trimmed = string.gsub(trimmed, "%s+$", "") + + return trimmed + end + + return text +end + diff --git a/mods/utils/tableutil.lua b/mods/utils/tableutil.lua new file mode 100644 index 0000000..d659b89 --- /dev/null +++ b/mods/utils/tableutil.lua @@ -0,0 +1,247 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various utility functions for working with tables. +tableutil = {} + + +--- Performs a deep/recursive clone on the given table. +-- +-- @param table The table to deep clone. +-- @return The clone of the table. +function tableutil.clone(table) + if table == nil then + return nil + end + + if type(table) ~= "table" then + local clone = table + return clone + end + + local clone = {} + + for key, value in next, table, nil do + if value ~= table then + clone[tableutil.clone(key)] = tableutil.clone(value) + else + clone[tableutil.clone(key)] = clone + end + end + + setmetatable(clone, tableutil.clone(getmetatable(table))) + + return clone +end + +--- A comparator function that can be used for sorting a table with different +-- value types. It sorts numbers first, after that strings, tables and nil. +-- +-- @param a The first value. +-- @param b The second value. +-- @return true if the first value is less than (should come before) the second. +function tableutil.comparator(a, b) + if a == b then + return false + end + + if a ~= nil and b == nil then + return false + elseif b ~= nil and a == nil then + return true + end + + local type_a = type(a) + local type_b = type(b) + + if type_a == "number" and type_b == "number" then + return a < b + elseif type_a == "string" and type_b == "string" then + return a < b + elseif type_a == "number" and type_b == "string" then + return true + elseif type_a == "string" and type_b == "number" then + return false + elseif type_a ~= "table" and type_b == "table" then + return true + else + -- We can't sort objects. + return false + end +end + +--- Tests the two given tables for equality. +-- +-- @param a The first table. +-- @param b The second table. +-- @return true if the tables are equal. +function tableutil.equals(a, b) + if a == b then + return true + end + + if type(a) ~= "table" or type(b) ~= "table" then + return a == b + end + + if #a ~= #b then + return false + end + + local keys = tableutil.keys(a, b):to_table() + + for index, key in pairs(keys) do + local valuea = a[key] + local valueb = b[key] + + if type(valuea) == "table" then + if not tableutil.equals(valuea, valueb) then + return false + end + else + if valuea ~= valueb then + return false + end + end + end + + return true +end + +--- Returns a (unique) list with all keys of all tables. +-- +-- @param ... The list of tables. +-- @return A list with all keys. +function tableutil.keys(...) + if ... == nil then + return List:new() + end + + local keys = List:new() + + for index, table in ipairs({...}) do + for key, value in pairs(table) do + if not keys:contains(key) then + keys:add(key) + end + end + end + + return keys +end + +--- Merges the given tables into one instance. Note that no cloning is performed +-- so fields may refer to the same instances. +-- +-- @param ... The tables to merge. +-- @return The merged table. +function tableutil.merge(...) + if ... == nil then + return nil + end + + local merged = {} + + for index, table in ipairs({...}) do + for key, value in next, table, nil do + merged[key] = value + end + end + + return merged +end + + +--- Returns the string representation of the given table. +-- +-- @param table The table. +-- @param one_line Optional. If the table should be printed on only one line. +-- Defaults to false. +-- @param table_ids Optional. If the table IDs should be printed. +-- Defaults to true. +-- @param indent Optional. The number of spaces of indentation. +-- @return The string representation of the given table. +function tableutil.to_string(table, one_line, table_ids, indent) + if table == nil then + return "nil" + end + + indent = indent or 0 + + if type(table) == "table" then + local str = "" + + if table_ids == nil or table_ids then + str = str .. tostring(table) .. " (" .. tostring(#table) .. ")" + end + + str = str .. " {" + + if one_line then + str = str .. " " + else + str = str .. "\n" + end + + local indentation = string.rep(" ", indent + 4) + + local keys = tableutil.keys(table) + keys:sort() + + keys:foreach(function(key, index) + if not one_line then + str = str .. indentation + end + + str = str .. tostring(key) .. " = " + str = str .. tableutil.to_string(table[key], one_line, table_ids, indent + 4) .. "," + + if one_line then + str = str .. " " + else + str = str .. "\n" + end + end) + + str = string.sub(str, 0, string.len(str) - 2) + + if one_line then + str = str .. " " + else + str = str .. "\n" .. string.rep(" ", indent) + end + + str = str .. "}" + + return str + elseif type(table) == "string" then + return "\"" .. tostring(table) .. "\"" + else + return tostring(table) + end +end + diff --git a/mods/utils/tango.lua b/mods/utils/tango.lua new file mode 100644 index 0000000..1d5917f --- /dev/null +++ b/mods/utils/tango.lua @@ -0,0 +1,65 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- The tango color scheme. +tango = {} + +tango.aluminium_1 = Color:new(238, 238, 238) +tango.aluminium_2 = Color:new(211, 215, 207) +tango.aluminium_3 = Color:new(186, 189, 182) +tango.aluminium_4 = Color:new(136, 138, 133) +tango.aluminium_5 = Color:new(85, 87, 83) +tango.aluminium_6 = Color:new(46, 52, 54) + +tango.butter_1 = Color:new(252, 233, 79) +tango.butter_2 = Color:new(237, 212, 0) +tango.butter_3 = Color:new(196, 160, 0) + +tango.orange_1 = Color:new(252, 175, 62) +tango.orange_2 = Color:new(245, 121, 0) +tango.orange_3 = Color:new(206, 92, 0) + +tango.chocolate_1 = Color:new(233, 185, 110) +tango.chocolate_2 = Color:new(193, 125, 17) +tango.chocolate_3 = Color:new(143, 89, 2) + +tango.chameleon_1 = Color:new(138, 226, 52) +tango.chameleon_2 = Color:new(115, 210, 22) +tango.chameleon_3 = Color:new(78, 154, 6) + +tango.skyblue_1 = Color:new(114, 159, 207) +tango.skyblue_2 = Color:new(52, 101, 164) +tango.skyblue_3 = Color:new(32, 74, 135) + +tango.plum_1 = Color:new(173, 127, 168) +tango.plum_2 = Color:new(117, 80, 123) +tango.plum_3 = Color:new(92, 53, 102) + +tango.scarletred_1 = Color:new(239, 41, 41) +tango.scarletred_2 = Color:new(204, 0, 0) +tango.scarletred_3 = Color:new(164, 0, 0) + diff --git a/mods/utils/test.lua b/mods/utils/test.lua new file mode 100644 index 0000000..f872248 --- /dev/null +++ b/mods/utils/test.lua @@ -0,0 +1,98 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- A simple utility for testing values and running unit tests. +test = {} + + +--- Test if the given value matches the given expected value. +-- If the values do not match, an error with the given message (if any) and +-- an additional message containing both values will be shown. +-- +-- The values will be compared with ==. +-- +-- @param expected The expected value. +-- @param actual The actual value. +-- @param message Optional. The additional message to be printed. +function test.equals(expected, actual, message) + if message ~= nil then + message = message .. "\n" + else + message = "" + end + + if expected == nil and actual ~= nil then + error(message .. "Assert failed! Expected: but got <" .. tostring(actual) .. ">", 2) + end + + if expected ~= nil and actual == nil then + error(message .. "Assert failed! Expected: <" .. tostring(expected) .. "> but got ", 2) + end + + if expected ~= nil and actual ~= nil then + if not tableutil.equals(expected, actual) then + error(message .. "Assert failed! Expected <" .. tostring(expected) .. "> but got <" .. tostring(actual) .. ">", 2) + end + end +end + +--- Runs the given method and prints a formatted information including the name. +-- +-- @param name The name of the method that is being run. +-- @param test_method The method to run. +function test.run(name, test_method) + io.write(string.rep(" ", 20 - string.len(name))) + io.write(name) + io.write(" ... ") + + local start = os.clock() + + local status, err = pcall(test_method) + + if status then + local time = mathutil.round((os.clock() - start) * 1000, 3) + print("Passed (" .. tostring(time) .. " ms)") + else + local indentation = string.rep(" ", 25) + + message = string.gsub(err, "\n", "\n" .. indentation) + + print("Failed: " .. message) + end +end + +--- Prints the given name as header. +-- +-- @param name The name of the header. +function test.start(name) + io.write("\n") + io.write(string.rep("-", 20 - string.len(name))) + io.write(name) + io.write(string.rep("-", 60)) + print("") +end + diff --git a/mods/utils/textures/cube_texture.png b/mods/utils/textures/cube_texture.png new file mode 100644 index 0000000..d895bff Binary files /dev/null and b/mods/utils/textures/cube_texture.png differ diff --git a/mods/utils/textures/dummy_border.png b/mods/utils/textures/dummy_border.png new file mode 100644 index 0000000..6f6acfc Binary files /dev/null and b/mods/utils/textures/dummy_border.png differ diff --git a/mods/utils/textures/dummy_inner.png b/mods/utils/textures/dummy_inner.png new file mode 100644 index 0000000..1a98fa0 Binary files /dev/null and b/mods/utils/textures/dummy_inner.png differ diff --git a/mods/utils/textureutil.lua b/mods/utils/textureutil.lua new file mode 100644 index 0000000..304b2db --- /dev/null +++ b/mods/utils/textureutil.lua @@ -0,0 +1,100 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Util for various functions regarding textures. +textureutil = {} + + +--- Creates a texture like for an unwrapped cube, see the cube_texture.png file +-- in the textures directory for an example. +-- +-- @param textures The textures or tiles. +-- @return The cube texture. +function textureutil.cube(textures) + local top = textureutil.get_name(textures[1]) + local bottom = textureutil.get_name(textures[2]) or top + local front = textureutil.get_name(textures[3]) or top + local back = textureutil.get_name(textures[4]) or top + local left = textureutil.get_name(textures[5]) or top + local right = textureutil.get_name(textures[6]) or top + + return "[combine:128x96" + .. ":32,0=" .. top + .. ":32,64=" .. bottom + .. ":32,32=" .. front + .. ":96,32=" .. back + .. ":0,32=" .. left + .. ":64,32=" .. right +end + +--- Creates a dummy texture with the two given colors. +-- +-- @param inner_color The color for the inner part, either a string with +-- leading "#" or a Color. +-- @param border_color The color for the border, either a string with +-- leading "#" or a Color. +-- @return The dummy texture (string). +function textureutil.dummy(inner_color, border_color) + if type(inner_color) == "table" then + inner_color = "#" .. inner_color.hex + end + if type(border_color) == "table" then + border_color = "#" .. border_color.hex + end + + local inner = "(dummy_inner.png^[colorize:" .. inner_color .. ":240)" + local border = "(dummy_border.png^[colorize:" .. border_color .. ":255)" + + return inner .. "^" .. border +end + +--- Gets the name from the given tile. +-- +-- @param tile The tile. +-- @return The name of the tile. +function textureutil.get_name(tile) + if type(tile) == "table" then + return tile.name + else + return tile + end +end + +--- Creates a tile with the given tileable parameters. +-- +-- @param tile The name of the tile. +-- @param horizontal If the tile is horizontally tileable. +-- @param vertical If the tile is vertically tileable. +-- @return A tile with tileable information. +function textureutil.tileable(tile, horizontal, vertical) + return { + name = tile, + tileable_horizontal = horizontal, + tileable_vertical = vertical + } +end + diff --git a/mods/utils/transform.lua b/mods/utils/transform.lua new file mode 100644 index 0000000..301bf35 --- /dev/null +++ b/mods/utils/transform.lua @@ -0,0 +1,142 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various mathematical functions for transforming values. +transform = {} + + +--- Performs a linear transform on the given value to transform the value +-- from the range -10/10 to 0/1. +-- +-- @param value The value to transform. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.big_linear(value, new_min, new_max) + return transform.linear(value, -10, 10, new_min, new_max) +end + +--- Performs the given transformation on the given value with the peak in center +-- of the min and max values. +-- +-- @param value The value to transform. +-- @param transformation The transformation function, assumed to accept five +-- values. +-- @param min Optional. The original minimum value, defaults to -1. +-- @param max Optional. The original maximum value, default to 1. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.centered(value, transformation, min, max, new_min, new_max) + min = min or -1 + max = max or 1 + + local center = (min + max) / 2 + + if value < center then + return transformation(value, min, center, new_min, new_max) + else + return transformation(value, max, center, new_min, new_max) + end +end + +--- Performs a cosine transformation on the given value with the peak in center +-- of the min and max values. +-- +-- @param value The value to transform. +-- @param min Optional. The original minimum value, defaults to -1. +-- @param max Optional. The original maximum value, default to 1. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.centered_cosine(value, min, max, new_min, new_max) + return transform.centered(value, transform.cosine, min, max, new_min, new_max) +end + +--- Performs a linear transformation on the given value with the peak in center +-- of the min and max values. +-- +-- @param value The value to transform. +-- @param min Optional. The original minimum value, defaults to -1. +-- @param max Optional. The original maximum value, default to 1. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +function transform.centered_linear(value, min, max, new_min, new_max) + return transform.centered(value, transform.linear, min, max, new_min, new_max) +end + +--- Performs a cosine transform on the given value to transform the value +-- from one range to another. +-- +-- @param value The value to transform. +-- @param min Optional. The original minimum value of the range, defaults to -1. +-- @param max Optional. The original maximum value of the range, defaults to 1. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.cosine(value, min, max, new_min, new_max) + min = min or -1 + max = max or 1 + + if new_min == nil or new_max == nil then + return interpolate.cosine((value - min) / (max - min)) + else + return interpolate.cosine((value - min) / (max - min)) * (new_max - new_min) + new_min + end +end + +--- Performs a linear transform on the given value to transform the value +-- from one range to another. +-- +-- @param value The value to transform. +-- @param min Optional. The original minimum value of the range, defaults to -1. +-- @param max Optional. The original maximum value of the range, defaults to 1. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.linear(value, min, max, new_min, new_max) + min = min or -1 + max = max or 1 + + if new_min == nil or new_max == nil then + return (value - min) / (max - min) + else + return (value - min) / (max - min) * (new_max - new_min) + new_min + end +end + +--- Performs a linear transform on the given value to transform the value +-- from the range -1/1 to 0/1. +-- +-- @param value The value to transform. +-- @param new_min Optional. The minimum value for the new range, defaults to 0. +-- @param new_max Optional. The maximum value for the new range, defaults to 1. +-- @return The transformed value. +function transform.small_linear(value, new_min, new_max) + return transform.linear(value, -1, 1, new_min, new_max) +end + diff --git a/mods/utils/wallmountedutil.lua b/mods/utils/wallmountedutil.lua new file mode 100644 index 0000000..20416bb --- /dev/null +++ b/mods/utils/wallmountedutil.lua @@ -0,0 +1,133 @@ +--[[ +Copyright (c) 2014, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Various functions and constants for working with the wallmounted +-- value. +wallmountedutil = { + --- Attached to the node in the negative x direction. + NEGATIVE_X = 3, + + --- Attached to the node in the negative y direction. + NEGATIVE_Y = 1, + + --- Attached to the node in the negative z direction. + NEGATIVE_Z = 5, + + --- The vector for the negative x direction. + NEGATIVE_X_VECTOR = { + x = -1, + y = 0, + z = 0 + }, + + --- The vector for the negative y direction. + NEGATIVE_Y_VECTOR = { + x = 0, + y = -1, + z = 0 + }, + + --- The vector for the negative z direction. + NEGATIVE_Z_VECTOR = { + x = 0, + y = 0, + z = -1 + }, + + --- Attached to the node in the positive y direction. + POSITIVE_X = 2, + + --- Attached to the node in the positive y direction. + POSITIVE_Y = 0, + + --- Attached to the node in the positive y direction. + POSITIVE_Z = 4, + + --- The vector for the positive x direction. + POSITIVE_X_VECTOR = { + x = 1, + y = 0, + z = 0 + }, + + --- The vector for the positive y direction. + POSITIVE_Y_VECTOR = { + x = 0, + y = 1, + z = 0 + }, + + --- The vector for the positive z direction. + POSITIVE_Z_VECTOR = { + x = 0, + y = 0, + z = 1 + } +} + + +--- Gets the vector for the given ID. +-- +-- @param id The ID for which to get the vector. +-- @return The vector for the given ID. +function wallmountedutil.get_vector(id) + if id == wallmountedutil.NEGATIVE_X then + return wallmountedutil.NEGATIVE_X_VECTOR + elseif id == wallmountedutil.NEGATIVE_Y then + return wallmountedutil.NEGATIVE_Y_VECTOR + elseif id == wallmountedutil.NEGATIVE_Z then + return wallmountedutil.NEGATIVE_Z_VECTOR + elseif id == wallmountedutil.POSITIVE_X then + return wallmountedutil.POSITIVE_X_VECTOR + elseif id == wallmountedutil.POSITIVE_Y then + return wallmountedutil.POSITIVE_Y_VECTOR + elseif id == wallmountedutil.POSITIVE_Z then + return wallmountedutil.POSITIVE_Z_VECTOR + end + + return wallmountedutil.NEGATIVE_Y_VECTOR +end + +--- Gets the corresponding facedir value for the given wallmounted value. +-- +-- @param wallmounted_id The wallmounted value/ID. +-- @return The facedir value/ID. +function wallmountedutil.to_facedir(wallmounted_id) + if wallmounted_id == wallmountedutil.NEGATIVE_X then + return facedirutil.NEGATIVE_X + elseif wallmounted_id == wallmountedutil.NEGATIVE_Z then + return facedirutil.NEGATIVE_Z + elseif wallmounted_id == wallmountedutil.POSITIVE_X then + return facedirutil.POSITIVE_X + elseif wallmounted_id == wallmountedutil.POSITIVE_Z then + return facedirutil.POSITIVE_Z + end + + return facedirutil.POSITIVE_X +end + + diff --git a/mods/vehicle_mash/126r.lua b/mods/vehicle_mash/126r.lua new file mode 100644 index 0000000..da5dcf6 --- /dev/null +++ b/mods/vehicle_mash/126r.lua @@ -0,0 +1,23 @@ + +local name = "car_126r" +local definition = ... + +definition.description = "126r car" +-- adjust to change how vehicle reacts while driving +definition.max_speed_forward = 12 +definition.max_speed_reverse = 10 +definition.accel = 3 +definition.braking = 6 +definition.turn_speed = 4 +definition.stepheight = 1.1 +-- model specific stuff +definition.mesh = "car_126r.x" +definition.collisionbox = {-0.7, -0.5, -0.7, 0.7, 0.7, 0.7} +definition.onplace_position_adj = 0 +definition.inventory_image = "car_126r_inventory.png" +definition.wield_image = "car_126r_wield.png" +definition.textures = {"car_126r.png"} +-- player specific stuff +definition.driver_attach_at = {x=0,y=10,z=-4} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/README.md b/mods/vehicle_mash/README.md new file mode 100644 index 0000000..65047ba --- /dev/null +++ b/mods/vehicle_mash/README.md @@ -0,0 +1,96 @@ +***Vehicles_mash*** +- version: 2.0 +- by blert2112 + +A merge of all the vehicles from: +- "Cars" by Radoslaw Slowik +- "Mesecars" by paramat +- "Car" by Esteban +- "Boats" by PilzAdam +- "Hovercraft" by Stuart Jones (experimental and disabled by default) + +- 26 vehicles currently (27 if you include the experimental hovercraft) +- Certain vehicles can now carry passengers. Currently one passenger max. + +- Disable vehicles by commenting out it's 'dofile' line in init.lua +- Adding new vehicles is a simple matter of: + - create/aquire vehicle model and textures + - create, and name appropriately, a new .lua file for the vehicle based on one of the existing ones + - change settings in the file you created to reflect the new vehicle + - add a new line to init.lua to load the vehicle 'dofile(minetest.get_modpath("vehicle_mash").."/NAME_OF_VEHICLE.lua")' + +***Installation*** +- rename folder to "vehicle_mash" if necessary + +***License*** +All licenses of previous works, of course, apply. (see credits below) +As far as the work I did... It's really just a fork of a fork of a fork of a fork, tossed it all into a blender and spun it on puree for a bit. Baked it for a while and set it on the counter to cool. What I mean is, make what you will of it, it matters not to me. + +***Dependencies*** +- Default +- lib_mount + +***To Do*** +- complete the addition of the hovercraft +- crafting + +***Change Log*** +v2.0 8/13/2016 + - converted to use the lib_mount mod for "driving" + - enlarged F1 and 126r models x2.5 + - added yellow Mesecar + - updated boat model from default boat mod + - various speed/braking/turning/acceleration tweaks + - various collision box tweaks + - various other tweaks I probably forgot about +v1.4 5/19/2015 + - attach (one) passenger added + - reorganized vehicle definition file code and added some variables pertaining to passengers + - added a vehicle definition file template with comments + - cleaned up to remove code dulplication +v1.3 5/5/2015 + - player now sits forward in vehicles + - tweaked player sit positions + - tweaked collison boxes + - proper placement on_ground/in_water +v1.2 5/1/2015 + - added boats + - changed name so to not conflict with other mods +v1.1 4/25/2015 + - car won't come to a complete stop (fixed) +v1.0 4/24/2015 + - first release + +***CREDIT WHERE CREDIT IS DUE*** +- F1 and 126R cars from: "Cars" by Radoslaw Slowik + - https://forum.minetest.net/viewtopic.php?f=9&t=8698 + - License: Code WTFPL, modeles/textures CC BY-NC-ND 4.0 + +- Black, Blue, Brown, Cyan, Dark Green, Dark Grey, Green, Grey, Magenta, Orange, Pink, Red, Violet, White, Yellow, Hot Rod, Nyan Ride, Oerkki Bliss, and Road Master from: "Car" by Esteban + - https://forum.minetest.net/viewtopic.php?f=13&t=7407 + - License: + - No info given in that mod but I am going to assume the credit for the original model goes to: + - Melcor and his CAR01 model + - https://forum.minetest.net/viewtopic.php?f=9&t=6512 + - License: CC-BY-NC-SA + +- MeseCars from: "Mesecars" by paramat + - https://forum.minetest.net/viewtopic.php?f=11&t=7967 + - Licenses: Code WTFPL, textures CC BY-SA + +- Boats from "Boats" by PilzAdam + - textures: Zeg9 + - model: thetoon and Zeg9, modified by PavelS(SokolovPavel) + - License: WTFPL + +- Hovercraft from "Hovercraft" by Stuart Jones + - Licenses: + - textures: CC-BY-SA + - sounds: freesound.org + - Rocket Boost Engine Loop by qubodup - CC0 + - CARTOON-BING-LOW by kantouth - CC-BY-3.0 + - All other sounds: Copyright Stuart Jones - CC-BY-SA + +I am sure many others deserve mention. If you feel left out let me know and I will add you in. + +Enjoy! \ No newline at end of file diff --git a/mods/vehicle_mash/black.lua b/mods/vehicle_mash/black.lua new file mode 100644 index 0000000..a999121 --- /dev/null +++ b/mods/vehicle_mash/black.lua @@ -0,0 +1,10 @@ + +local name = "car_black" +local definition = ... + +definition.description = "Black car" +definition.inventory_image = "inv_car_black.png" +definition.wield_image = "inv_car_black.png" +definition.textures = {"car_black.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/blue.lua b/mods/vehicle_mash/blue.lua new file mode 100644 index 0000000..dd9addd --- /dev/null +++ b/mods/vehicle_mash/blue.lua @@ -0,0 +1,10 @@ + +local name = "car_blue" +local definition = ... + +definition.description = "Blue car" +definition.inventory_image = "inv_car_blue.png" +definition.wield_image = "inv_car_blue.png" +definition.textures = {"car_blue.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/boat.lua b/mods/vehicle_mash/boat.lua new file mode 100644 index 0000000..abe097a --- /dev/null +++ b/mods/vehicle_mash/boat.lua @@ -0,0 +1,16 @@ + +local name = "boat" +local definition = ... + +definition.description = "BoatA" +definition.inventory_image = "boat_inventory.png" +definition.wield_image = "boat_wield.png" +definition.mesh = "boats_boat.obj" +definition.drop_on_destroy = "default:wood 3" +definition.recipe = { + {"", "", ""}, + {"", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/brown.lua b/mods/vehicle_mash/brown.lua new file mode 100644 index 0000000..290e40a --- /dev/null +++ b/mods/vehicle_mash/brown.lua @@ -0,0 +1,10 @@ + +local name = "car_brown" +local definition = ... + +definition.description = "Brown car" +definition.inventory_image = "inv_car_brown.png" +definition.wield_image = "inv_car_brown.png" +definition.textures = {"car_brown.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/crafts.lua b/mods/vehicle_mash/crafts.lua new file mode 100644 index 0000000..e7adf26 --- /dev/null +++ b/mods/vehicle_mash/crafts.lua @@ -0,0 +1,13 @@ +local colors = {"black", "blue", "brown", "cyan", +"dark_green", "dark_grey", "green", "grey", "magenta", +"orange", "pink", "red", "violet", "white", "yellow"} + +for id, color in pairs(colors) do + minetest.register_craft({ + output = "vehicle_mash:car_"..color, + recipe = { + {"default:steel_ingot", "wool:"..color, "default:steel_ingot"}, + {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"} + } + }) +end \ No newline at end of file diff --git a/mods/vehicle_mash/cyan.lua b/mods/vehicle_mash/cyan.lua new file mode 100644 index 0000000..a9c00b9 --- /dev/null +++ b/mods/vehicle_mash/cyan.lua @@ -0,0 +1,10 @@ + +local name = "car_cyan" +local definition = ... + +definition.description = "Cyan car" +definition.inventory_image = "inv_car_cyan.png" +definition.wield_image = "inv_car_cyan.png" +definition.textures = {"car_cyan.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/dark_green.lua b/mods/vehicle_mash/dark_green.lua new file mode 100644 index 0000000..3483fd4 --- /dev/null +++ b/mods/vehicle_mash/dark_green.lua @@ -0,0 +1,10 @@ + +local name = "car_dark_green" +local definition = ... + +definition.description = "Dark green car" +definition.inventory_image = "inv_car_dark_green.png" +definition.wield_image = "inv_car_dark_green.png" +definition.textures = {"car_dark_green.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/dark_grey.lua b/mods/vehicle_mash/dark_grey.lua new file mode 100644 index 0000000..cce03b7 --- /dev/null +++ b/mods/vehicle_mash/dark_grey.lua @@ -0,0 +1,10 @@ + +local name = "car_dark_grey" +local definition = ... + +definition.description = "Dark grey car" +definition.inventory_image = "inv_car_dark_grey.png" +definition.wield_image = "inv_car_dark_grey.png" +definition.textures = {"car_dark_grey.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/depends.txt b/mods/vehicle_mash/depends.txt new file mode 100644 index 0000000..b6cd120 --- /dev/null +++ b/mods/vehicle_mash/depends.txt @@ -0,0 +1,2 @@ +default +lib_mount diff --git a/mods/vehicle_mash/f1.lua b/mods/vehicle_mash/f1.lua new file mode 100644 index 0000000..b619566 --- /dev/null +++ b/mods/vehicle_mash/f1.lua @@ -0,0 +1,23 @@ + +local name = "car_f1" +local definition = ... + +definition.description = "F1 car" +-- adjust to change how vehicle reacts while driving +definition.max_speed_forward = 15 +definition.max_speed_reverse = 7 +definition.accel = 4 +definition.braking = 8 +definition.turn_speed = 4 +definition.stepheight = 0.6 +-- model specific stuff +definition.mesh = "car_f1.x" +definition.collisionbox = {-0.5, -0.4, -0.5, 0.5, 0.5, 0.5} +definition.onplace_position_adj = -0.1 +definition.inventory_image = "car_f1_inventory.png" +definition.wield_image = "car_f1_wield.png" +definition.textures = {"car_f1.png"} +-- player specific stuff +definition.driver_attach_at = {x=0,y=8,z=0} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/framework.lua b/mods/vehicle_mash/framework.lua new file mode 100644 index 0000000..c2f9bfc --- /dev/null +++ b/mods/vehicle_mash/framework.lua @@ -0,0 +1,196 @@ + +vehicle_mash = {} + +local function is_water(pos) + local nn = minetest.get_node(pos).name + return minetest.get_item_group(nn, "water") ~= 0 +end + +local drive = lib_mount.drive + +function vehicle_mash.register_vehicle(name, def) + minetest.register_entity(name, { + terrain_type = def.terrain_type, + collisionbox = def.collisionbox, + player_rotation = def.player_rotation, + driver_attach_at = def.driver_attach_at, + driver_eye_offset = def.driver_eye_offset, + driver_detach_pos_offset = def.driver_detach_pos_offset, + number_of_passengers = def.number_of_passengers, + passenger_attach_at = def.passenger_attach_at, + passenger_eye_offset = def.passenger_eye_offset, + passenger_detach_pos_offset = def.passenger_detach_pos_offset, + visual = def.visual, + mesh = def.mesh, + textures = def.textures, + tiles = def.tiles, + visual_size = def.visual_size, + stepheight = def.stepheight, + max_speed_forward = def.max_speed_forward, + max_speed_reverse = def.max_speed_reverse, + accel = def.accel, + braking = def.braking, + turn_spd = def.turn_speed, + drop_on_destroy = def.drop_on_destroy or function()end, + driver = nil, + passenge = nil, + v = 0, + v2 = 0, + mouselook = true, + physical = true, + removed = false, + offset = {x=0, y=0, z=0}, + owner = "", + enginesound = nil, + on_rightclick = function(self, clicker) + if not clicker or not clicker:is_player() then + return + end + -- if clicker is driver detach driver + if clicker == self.driver then + -- if passenger detach first + --[[if self.passenger then + lib_mount.detach(self.passenger, self.offset) + end--]] + -- detach driver + lib_mount.detach(self.driver, self.offset) + -- if clicker is not the driver + elseif clicker == self.passenger then + -- detach passenger + lib_mount.detach(self.passenger, self.offset) + -- if there is no driver + elseif not self.driver then + -- attach driver + --if self.owner == clicker:get_player_name() then + lib_mount.attach(self, clicker, false) + --end + -- if clicker is not passenger + else + -- attach passenger if possible + if not self.passenger and self.number_of_passengers > 0 then + lib_mount.attach(self, clicker, true) + end + end + end, + on_activate = function(self, staticdata, dtime_s) + self.object:set_armor_groups({immortal = 1}) + local tmp = minetest.deserialize(staticdata) + if tmp then + for _,stat in pairs(tmp) do + if _ == "owner" then print(stat) end + self[_] = stat + end + end + print("owner: ", self.owner) + self.v2 = self.v + end, + get_staticdata = function(self) + 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 + return core.serialize(tmp) + end, + on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir) + if not puncher or not puncher:is_player() or self.removed or self.driver then + if self.driver == puncher then + --if self.v > 0 then + minetest.sound_play("horn", { + max_hear_distance = 48, + gain = 8, + object = self.object + }) + --[[elseif self.enginesound ~= nil then + minetest.sound_stop(self.enginesound) + self.enginesound = nil + -end--]] + end + if self.enginesound ~= nil then + minetest.sound_stop(self.enginesound) + self.enginesound = nil + end + return + end + local punchername = puncher:get_player_name() + if self.owner == punchername or minetest.get_player_privs(punchername).protection_bypass then + self.removed = true + -- delay remove to ensure player is detached + minetest.after(0.1, function() + self.object:remove() + end) + puncher:get_inventory():add_item("main", self.name) + end + end, + on_step = function(self, dtime) + drive(self, dtime, false, nil, nil, 0, false) + if self.v ~= 0 and self.driver ~= nil then + if self.enginesound == nil then + self.enginesound = minetest.sound_play("engine", { + --pos = {self:get_pos()}, + max_hear_distance = 48, + gain = 5, + loop = true, + object = self.object + }) + end + end + if self.driver == nil and self.enginesound ~= nil then + minetest.sound_stop(self.enginesound) + self.enginesound = nil + end + end + }) + + local can_float = false + if def.terrain_type == 2 or def.terrain_type == 3 then + can_float = true + end + + minetest.register_craftitem(name, { + description = def.description, + inventory_image = def.inventory_image, + wield_image = def.wield_image, + wield_scale = def.wield_scale, + liquids_pointable = can_float, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return + end + local ent + if minetest.get_item_group(minetest.get_node(pointed_thing.under).name, "liquid") == 0 then + if def.terrain_type == 0 or def.terrain_type == 1 or def.terrain_type == 3 then + pointed_thing.above.y = pointed_thing.above.y + def.onplace_position_adj + ent = minetest.add_entity(pointed_thing.above, name) + else + return + end + else + if def.terrain_type == 2 or def.terrain_type == 3 then + pointed_thing.under.y = pointed_thing.under.y + 0.5 + ent = minetest.add_entity(pointed_thing.under, name) + else + return + end + + end + if ent:get_luaentity().player_rotation.y == 90 then + ent:setyaw(placer:get_look_yaw()) + else + ent:setyaw(placer:get_look_yaw() - math.pi/2) + end + ent:get_luaentity().owner = placer:get_player_name() + itemstack:take_item() + return itemstack + end + }) + + if def.recipe then + minetest.register_craft({ + output = name, + recipe = def.recipe + }) + end +end diff --git a/mods/vehicle_mash/green.lua b/mods/vehicle_mash/green.lua new file mode 100644 index 0000000..dfab73e --- /dev/null +++ b/mods/vehicle_mash/green.lua @@ -0,0 +1,10 @@ + +local name = "car_green" +local definition = ... + +definition.description = "Green car" +definition.inventory_image = "inv_car_green.png" +definition.wield_image = "inv_car_green.png" +definition.textures = {"car_green.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/grey.lua b/mods/vehicle_mash/grey.lua new file mode 100644 index 0000000..85fac07 --- /dev/null +++ b/mods/vehicle_mash/grey.lua @@ -0,0 +1,10 @@ + +local name = "car_grey" +local definition = ... + +definition.description = "Grey car" +definition.inventory_image = "inv_car_grey.png" +definition.wield_image = "inv_car_grey.png" +definition.textures = {"car_grey.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/hot_rod.lua b/mods/vehicle_mash/hot_rod.lua new file mode 100644 index 0000000..68ac3ab --- /dev/null +++ b/mods/vehicle_mash/hot_rod.lua @@ -0,0 +1,10 @@ + +local name = "car_hot_rod" +local definition = ... + +definition.description = "Hot Rod car" +definition.inventory_image = "inv_car_red.png" +definition.wield_image = "inv_car_red.png" +definition.textures = {"hot_rod.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/hover_blue.lua b/mods/vehicle_mash/hover_blue.lua new file mode 100644 index 0000000..0d46161 --- /dev/null +++ b/mods/vehicle_mash/hover_blue.lua @@ -0,0 +1,11 @@ + +local name = "hover_blue" + +local definition = ... + +definition.description = "Blue hovercraft" +definition.inventory_image = "hovercraft_blue_inv.png" +definition.wield_image = "hovercraft_blue_inv.png" +definition.textures = {"hovercraft_blue.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/init.lua b/mods/vehicle_mash/init.lua new file mode 100644 index 0000000..1189959 --- /dev/null +++ b/mods/vehicle_mash/init.lua @@ -0,0 +1,208 @@ + +-- get mod path +local mpath = minetest.get_modpath("vehicle_mash") + +-- load framework +dofile(mpath.."/framework.lua") + +-- load crafts +dofile(mpath.."/crafts.lua") + +-- *********************** +-- load vehicles down here +-- *********************** + +--[[ ** 126r and F1 ** +------------------------------------------------------------------------------ +-- create Cars common def +local cars_def = { + --adjust to change how vehicle reacts while driving + terrain_type = 1, -- 0 = air, 1 = land, 2 = liquid, 3 = land + liquid + --model specific stuff + visual = "mesh", + visual_size = {x=1, y=1}, + wield_scale = {x=1, y=1, z=1}, + --player specific stuff + player_rotation = {x=0,y=0,z=0}, + driver_eye_offset = {x=0, y=0, z=0}, + number_of_passengers = 0, + passenger_attach_at = {x=0,y=0,z=0}, + passenger_eye_offset = {x=0, y=0, z=0}, + --drop and recipe + drop_on_destroy = "", + recipe = nil +} + +-- vehicle specific values in the following files +-- you can override any common values from here +loadfile(mpath.."/126r.lua")(table.copy(cars_def)) +loadfile(mpath.."/f1.lua")(table.copy(cars_def)) +--]] + +-- ** CAR01s ** +------------------------------------------------------------------------------ +-- create CAR01 common def +local car01_def = { + --adjust to change how vehicle reacts while driving + terrain_type = 1, + max_speed_forward = 10, + max_speed_reverse = 7, + accel = 2, + braking = 4, + turn_speed = 2, + stepheight = 1.1, + --model specific stuff + visual = "mesh", + mesh = "car.x", + visual_size = {x=1, y=1}, + wield_scale = {x=1, y=1, z=1}, + collisionbox = {-0.6, -0.05, -0.6, 0.6, 1, 0.6}, + onplace_position_adj = -0.45, + --player specific stuff + player_rotation = {x=0,y=90,z=0}, + driver_attach_at = {x=3.5,y=12,z=3.5}, + driver_eye_offset = {x=-4, y=0, z=0}, + number_of_passengers = 1, + passenger_attach_at = {x=3.5,y=12,z=-3.5}, + passenger_eye_offset = {x=4, y=0, z=0}, + --drop and recipe + drop_on_destroy = "", + recipe = nil +} + +-- vehicle specific values in the following files +-- you can override any common values from here +loadfile(mpath.."/black.lua")(table.copy(car01_def)) +loadfile(mpath.."/blue.lua")(table.copy(car01_def)) +loadfile(mpath.."/brown.lua")(table.copy(car01_def)) +loadfile(mpath.."/cyan.lua")(table.copy(car01_def)) +loadfile(mpath.."/dark_green.lua")(table.copy(car01_def)) +loadfile(mpath.."/dark_grey.lua")(table.copy(car01_def)) +loadfile(mpath.."/green.lua")(table.copy(car01_def)) +loadfile(mpath.."/grey.lua")(table.copy(car01_def)) +loadfile(mpath.."/magenta.lua")(table.copy(car01_def)) +loadfile(mpath.."/orange.lua")(table.copy(car01_def)) +loadfile(mpath.."/pink.lua")(table.copy(car01_def)) +loadfile(mpath.."/red.lua")(table.copy(car01_def)) +loadfile(mpath.."/violet.lua")(table.copy(car01_def)) +loadfile(mpath.."/white.lua")(table.copy(car01_def)) +loadfile(mpath.."/yellow.lua")(table.copy(car01_def)) +--oadfile(mpath.."/hot_rod.lua")(table.copy(car01_def)) +--oadfile(mpath.."/nyan_ride.lua")(table.copy(car01_def)) +--oadfile(mpath.."/oerkki_bliss.lua")(table.copy(car01_def)) +--oadfile(mpath.."/road_master.lua")(table.copy(car01_def)) + + +--[[ ** MeseCars ** +------------------------------------------------------------------------------ +-- create Mesecar common def +local mesecar_def = { + --adjust to change how vehicle reacts while driving + terrain_type = 1, + max_speed_forward = 10, + max_speed_reverse = 7, + accel = 3, + braking = 6, + turn_speed = 4, + stepheight = 0.6, + --model specific stuff + visual = "cube", + mesh = "", + visual_size = {x=1.5, y=1.5}, + wield_scale = {x=1, y=1, z=1}, + collisionbox = {-0.75, -0.75, -0.75, 0.75, 0.75, 0.75}, + onplace_position_adj = 0.25, + --player specific stuff + player_rotation = {x=0,y=0,z=0}, + driver_attach_at = {x=0,y=2,z=0}, + driver_eye_offset = {x=0, y=0, z=0}, + number_of_passengers = 0, + passenger_attach_at = {x=0,y=0,z=0}, + passenger_eye_offset = {x=0, y=0, z=0}, + --drop and recipe + drop_on_destroy = "", + recipe = nil +} + +-- vehicle specific values in the following files +-- you can override any common values from here +loadfile(mpath.."/mese_blue.lua")(table.copy(mesecar_def)) +loadfile(mpath.."/mese_pink.lua")(table.copy(mesecar_def)) +loadfile(mpath.."/mese_purple.lua")(table.copy(mesecar_def)) +loadfile(mpath.."/mese_yellow.lua")(table.copy(mesecar_def)) + + +-- ** Boats ** +------------------------------------------------------------------------------ +-- create boats common def +local boat_def = { + --adjust to change how vehicle reacts while driving + terrain_type = 2, + max_speed_forward = 3, + max_speed_reverse = 3, + accel = 3, + braking = 3, + turn_speed = 3, + stepheight = 0, + --model specific stuff + visual = "mesh", + visual_size = {x=1, y=1}, + wield_scale = {x=1, y=1, z=1}, + collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5}, + onplace_position_adj = 0, + textures = {"default_wood.png"}, + --player specific stuff + player_rotation = {x=0, y=0, z=0}, + driver_attach_at = {x=0,y=11,z=-3}, + driver_eye_offset = {x=0, y=0, z=0}, + number_of_passengers = 0, + passenger_attach_at = {x=0,y=0,z=0}, + passenger_eye_offset = {x=0, y=0, z=0} +} + +-- vehicle specific values in the following files +-- you can override any common values from here +loadfile(mpath.."/boat.lua")(table.copy(boat_def)) +loadfile(mpath.."/rowboat.lua")(table.copy(boat_def)) + + +-- ** Hovercraft ** +------------------------------------------------------------------------------ +-- create hovercraft common def +local hover_def = { + --adjust to change how vehicle reacts while driving + terrain_type = 3, + max_speed_forward = 10, + max_speed_reverse = 0, + accel = 3, + braking = 1, + turn_speed = 2, + stepheight = 1.1, + --model specific stuff + visual = "mesh", + mesh = "hovercraft.x", + visual_size = {x=1, y=1}, + wield_scale = {x=1, y=1, z=1}, + collisionbox = {-0.8, -0.25, -0.8, 0.8, 1.2, 0.8}, + onplace_position_adj = -0.25, + --player specific stuff + player_rotation = {x=0,y=90,z=0}, + driver_attach_at = {x=-2,y=16.5,z=0}, + driver_eye_offset = {x=0, y=0, z=0}, + number_of_passengers = 0, + passenger_attach_at = {x=0,y=0,z=0}, + passenger_eye_offset = {x=0, y=0, z=0}, + --drop and recipe + drop_on_destroy = "", + recipe = nil +} + +-- vehicle specific values in the following files +-- you can override any common values from here +loadfile(mpath.."/hover_blue.lua")(table.copy(hover_def)) + +-- free unneeded global(s) +core.after(10, function() + vehicle_mash.register_vehicle = nil +end) +--]] \ No newline at end of file diff --git a/mods/vehicle_mash/magenta.lua b/mods/vehicle_mash/magenta.lua new file mode 100644 index 0000000..4536eaf --- /dev/null +++ b/mods/vehicle_mash/magenta.lua @@ -0,0 +1,10 @@ + +local name = "car_magenta" +local definition = ... + +definition.description = "Magenta car" +definition.inventory_image = "inv_car_magenta.png" +definition.wield_image = "inv_car_magenta.png" +definition.textures = {"car_magenta.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/mese_blue.lua b/mods/vehicle_mash/mese_blue.lua new file mode 100644 index 0000000..4a8edf7 --- /dev/null +++ b/mods/vehicle_mash/mese_blue.lua @@ -0,0 +1,17 @@ + +local name = "mesecar_blue" +local definition = ... + +definition.description = "Blue Mesecar" +definition.inventory_image = "mesecar_car1front.png" +definition.wield_image = "mesecar_car1front.png" +definition.textures = { + "mesecar_car1top.png", + "mesecar_carbase.png", + "mesecar_car1rightside.png", + "mesecar_car1leftside.png", + "mesecar_car1front.png", + "mesecar_car1back.png" +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/mese_pink.lua b/mods/vehicle_mash/mese_pink.lua new file mode 100644 index 0000000..0f27479 --- /dev/null +++ b/mods/vehicle_mash/mese_pink.lua @@ -0,0 +1,17 @@ + +local name = "mesecar_pink" +local definition = ... + +definition.description = "Pink Mesecar" +definition.inventory_image = "mesecar_car3front.png" +definition.wield_image = "mesecar_car3front.png" +definition.textures = { + "mesecar_car3top.png", + "mesecar_carbase.png", + "mesecar_car3rightside.png", + "mesecar_car3leftside.png", + "mesecar_car3front.png", + "mesecar_car3back.png" +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/mese_purple.lua b/mods/vehicle_mash/mese_purple.lua new file mode 100644 index 0000000..7669c92 --- /dev/null +++ b/mods/vehicle_mash/mese_purple.lua @@ -0,0 +1,17 @@ + +local name = "mesecar_purple" +local definition = ... + +definition.description = "Purple Mesecar" +definition.inventory_image = "mesecar_car2front.png" +definition.wield_image = "mesecar_car2front.png" +definition.textures = { + "mesecar_car2top.png", + "mesecar_carbase.png", + "mesecar_car2rightside.png", + "mesecar_car2leftside.png", + "mesecar_car2front.png", + "mesecar_car2back.png" +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/mese_yellow.lua b/mods/vehicle_mash/mese_yellow.lua new file mode 100644 index 0000000..5a8f2e6 --- /dev/null +++ b/mods/vehicle_mash/mese_yellow.lua @@ -0,0 +1,17 @@ + +local name = "mesecar_yellow" +local definition = ... + +definition.description = "Yellow Mesecar" +definition.inventory_image = "mesecar_car4front.png" +definition.wield_image = "mesecar_car4front.png" +definition.textures = { + "mesecar_car4top.png", + "mesecar_carbase.png", + "mesecar_car4rightside.png", + "mesecar_car4leftside.png", + "mesecar_car4front.png", + "mesecar_car4back.png" +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/models/boats_boat.obj b/mods/vehicle_mash/models/boats_boat.obj new file mode 100644 index 0000000..0f21e47 --- /dev/null +++ b/mods/vehicle_mash/models/boats_boat.obj @@ -0,0 +1,358 @@ +# Blender v2.76 (sub 11) OBJ File: 'boat.blend' +# www.blender.org +mtllib boat.mtl +o boats_boat +v -6.786140 -3.033999 -9.415440 +v -6.786140 -1.967150 -9.415440 +v -6.786140 -1.967150 8.793510 +v -6.786140 -3.033999 8.793510 +v 5.732520 -1.967150 -9.415440 +v 5.732520 -3.033999 -9.415440 +v 5.732520 -3.033999 8.793510 +v 5.732520 -1.967150 8.793510 +v -2.233900 -3.033999 -9.415440 +v -2.233900 -1.967150 -9.415440 +v -2.233900 -1.967150 8.793510 +v -2.233900 -3.033999 8.793510 +v 2.318340 -3.033999 -9.415440 +v 2.318340 -1.967150 -9.415440 +v 2.318340 -1.967150 8.793510 +v 2.318340 -3.033999 8.793510 +v -3.371960 -3.033999 8.793510 +v -3.371960 -1.967150 8.793510 +v -3.371960 -1.967150 -9.415440 +v -3.371960 -3.033999 -9.415440 +v 2.318340 0.276645 8.793510 +v 1.180280 -1.967150 8.793510 +v 5.732520 0.276645 8.793510 +v 5.732520 1.039180 8.793510 +v 6.870580 0.276645 8.793510 +v 6.870580 -1.967150 8.793510 +v 2.318340 1.039180 8.793510 +v 1.180280 0.276645 8.793510 +v 1.180280 1.039180 8.793510 +v 1.180280 -3.033999 8.793510 +v -2.233900 0.276645 8.793510 +v -3.371960 0.276645 8.793510 +v -2.233900 1.039180 8.793510 +v -3.371960 1.039180 8.793510 +v -6.786140 0.276645 8.793510 +v -7.786200 0.276645 8.793510 +v -7.786200 -1.967150 8.793510 +v -6.786140 1.039180 8.793510 +v 1.180280 -1.967150 -9.415440 +v 1.180280 -3.033999 -9.415440 +v 2.318340 0.276645 -9.415440 +v 1.180280 0.276645 -9.415440 +v 2.318340 1.039180 -9.415440 +v 5.732520 0.276645 -9.415440 +v 6.870580 -1.967150 -9.415440 +v 5.732520 1.039180 -9.415440 +v 6.870580 0.276645 -9.415440 +v 0.042220 1.039180 -9.415440 +v 1.180280 1.039180 -9.415440 +v 0.042220 -1.967150 -9.415440 +v -1.095840 -1.967150 -9.415440 +v -2.233900 0.276645 -9.415440 +v -3.371960 0.276645 -9.415440 +v -2.233900 1.039180 -9.415440 +v -1.095840 1.039180 -9.415440 +v -3.371960 1.039180 -9.415440 +v -6.786140 0.276645 -9.415440 +v -6.786140 1.039180 -9.415440 +v -7.786200 -1.967150 -9.415440 +v -7.786200 0.276645 -9.415440 +v -1.095840 0.156645 -12.044100 +v -1.095840 -4.601110 -9.415440 +v -1.095840 1.039181 -10.802900 +v -1.095840 2.868579 -10.802900 +v -1.095840 2.868580 -7.883420 +v -1.095840 3.746069 -12.034100 +v -1.095840 3.746070 -7.883420 +v -1.095840 0.156645 -14.294900 +v -1.095840 -4.601110 -14.284900 +v 0.042220 -4.601110 -14.284900 +v 0.042220 -4.601110 -9.415440 +v 0.042220 1.039181 -10.802900 +v 0.042220 0.156645 -12.044100 +v 0.042220 2.868579 -10.802900 +v 0.042220 0.156645 -14.294900 +v 0.042220 3.746069 -12.034100 +v 0.042220 3.746070 -7.883420 +v 0.042220 2.868580 -7.883420 +v -1.096322 -3.033999 -9.415440 +v 0.044046 -3.035397 -9.415440 +vt 1.000000 0.187500 +vt -1.000000 0.312500 +vt 1.000000 0.312500 +vt 0.687500 1.000000 +vt 0.500000 0.875000 +vt 0.500000 0.625000 +vt -1.000000 0.062500 +vt 1.000000 0.062500 +vt 1.000000 -0.000000 +vt -1.000000 0.125000 +vt 1.000000 0.125000 +vt 0.437500 0.125000 +vt 0.312500 0.500000 +vt 0.312500 0.125000 +vt 1.000000 0.625000 +vt -1.000000 0.500000 +vt 1.000000 0.500000 +vt 0.187500 0.687500 +vt -0.187500 0.687500 +vt -0.187500 0.312500 +vt 1.000000 0.812500 +vt -1.000000 0.937500 +vt -1.000000 0.812500 +vt 0.812500 0.687500 +vt 1.187500 0.687500 +vt 0.812500 0.312500 +vt 1.000000 0.562500 +vt 0.312500 0.437500 +vt 1.000000 0.437500 +vt 1.000000 0.750000 +vt -1.000000 0.875000 +vt -1.000000 0.750000 +vt -1.000000 1.000000 +vt 1.000000 1.000000 +vt 0.437500 0.625000 +vt 0.562500 0.437500 +vt 0.562500 0.625000 +vt -1.000000 0.437500 +vt -1.000000 0.000000 +vt 0.500000 0.062500 +vt 0.375000 0.750000 +vt 0.500000 0.750000 +vt -1.000000 0.250000 +vt -1.000000 0.687500 +vt 1.000000 0.687500 +vt 0.625000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.250000 +vt 1.000000 0.937500 +vt 0.437500 0.812500 +vt 0.312500 0.312500 +vt 0.312500 0.812500 +vt 0.437500 0.312500 +vt 0.437500 0.437500 +vt 0.687500 0.812500 +vt 0.000000 0.687500 +vt 0.000000 0.812500 +vt -1.000000 0.562500 +vt 0.875000 0.812500 +vt 0.875000 0.687500 +vt 0.250000 0.312500 +vt 0.562500 0.187500 +vt 0.250000 0.187500 +vt -1.000000 0.187500 +vt 0.312500 0.625000 +vt 0.312500 0.187500 +vt 0.312500 -0.187500 +vt 1.000000 -0.187500 +vt 0.687500 0.500000 +vt -0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.500000 +vt -1.000000 0.625000 +vt 0.812500 0.187500 +vt 1.187500 0.187500 +vt 1.187500 0.312500 +vt 1.312500 0.312500 +vt 1.312500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.312500 +vt 1.187500 0.812500 +vt 0.812500 0.812500 +vt 0.187500 0.312500 +vt 0.312500 0.687500 +vt 0.687500 0.687500 +vt -0.187500 0.187500 +vt 0.187500 0.187500 +vt -0.312500 0.687500 +vt -0.312500 0.312500 +vt 0.187500 0.812500 +vt -0.187500 0.812500 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.562500 0.812500 +vt 0.562500 0.687500 +vt 0.312500 0.562500 +vt 1.000000 0.875000 +vt 0.375000 0.062500 +vt -1.000000 0.375000 +vt 0.625000 0.500000 +vt 0.875000 0.562500 +vt 0.937500 0.812500 +vt 0.937500 0.687500 +vt 0.875000 0.937500 +vt 0.562500 0.312500 +vn -1.000000 0.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 -0.002100 -1.000000 +vn 0.001200 -1.000000 0.000000 +vn 0.000000 0.002800 -1.000000 +vn -0.001200 -1.000000 0.000200 +g boats_boat_boats_boat_None +usemtl None +s off +f 41/1/1 27/2/1 43/3/1 +f 76/4/2 74/5/2 72/6/2 +f 8/7/2 6/1/2 5/8/2 +f 15/9/1 13/10/1 16/11/1 +f 51/12/3 71/13/3 50/14/3 +f 56/15/2 32/16/2 53/17/2 +f 15/18/3 8/19/3 23/20/3 +f 22/21/2 40/22/2 39/23/2 +f 19/24/4 2/25/4 53/26/4 +f 70/27/5 62/28/5 69/29/5 +f 11/30/5 19/31/5 10/32/5 +f 4/15/5 20/33/5 17/34/5 +f 72/35/3 64/36/3 63/37/3 +f 13/8/5 7/38/5 16/7/5 +f 23/39/6 47/11/6 44/9/6 +f 68/40/7 70/41/7 69/42/7 +f 80/43/8 40/10/8 30/11/8 +f 3/15/1 1/32/1 4/30/1 +f 20/44/2 18/27/2 17/45/2 +f 74/17/5 65/46/5 64/47/5 +f 31/43/1 54/47/1 52/48/1 +f 22/47/5 14/43/5 15/48/5 +f 46/1/2 23/7/2 44/8/2 +f 57/21/1 38/22/1 58/49/1 +f 61/50/9 76/51/9 73/52/9 +f 37/45/5 2/23/5 3/21/5 +f 78/28/3 67/53/3 65/54/3 +f 64/5/1 66/4/1 63/6/1 +f 76/55/6 67/56/6 77/57/6 +f 47/17/2 26/10/2 45/11/2 +f 5/16/5 26/47/5 8/17/5 +f 33/58/6 48/59/6 55/60/6 +f 29/38/2 42/3/2 49/29/2 +f 32/44/6 52/21/6 53/45/6 +f 58/15/6 34/33/6 56/34/6 +f 27/7/6 46/29/6 43/8/6 +f 73/61/6 68/62/6 61/63/6 +f 21/58/6 42/29/6 28/38/6 +f 11/29/1 9/58/1 12/27/1 +f 59/45/1 36/2/1 60/3/1 +f 60/9/6 35/10/6 57/11/6 +f 41/1/1 21/64/1 27/2/1 +f 72/6/2 48/65/2 50/66/2 +f 50/66/2 71/67/2 70/68/2 +f 70/68/2 75/17/2 73/69/2 +f 76/4/2 77/70/2 74/5/2 +f 77/70/2 78/71/2 74/5/2 +f 50/66/2 70/68/2 73/69/2 +f 73/69/2 76/4/2 72/6/2 +f 72/6/2 50/66/2 73/69/2 +f 8/7/2 7/64/2 6/1/2 +f 15/9/1 14/39/1 13/10/1 +f 51/12/3 62/72/3 71/13/3 +f 56/15/2 34/73/2 32/16/2 +f 32/26/3 34/74/3 38/75/3 +f 35/76/3 36/77/3 37/78/3 +f 32/26/3 38/75/3 35/76/3 +f 29/66/3 33/79/3 31/80/3 +f 32/26/3 35/76/3 3/25/3 +f 28/51/3 29/66/3 31/80/3 +f 31/80/3 32/26/3 18/24/3 +f 3/25/3 4/81/3 17/82/3 +f 35/76/3 37/78/3 3/25/3 +f 21/83/3 28/51/3 22/84/3 +f 3/25/3 17/82/3 18/24/3 +f 11/85/3 12/55/3 30/52/3 +f 32/26/3 3/25/3 18/24/3 +f 11/85/3 30/52/3 22/84/3 +f 31/80/3 18/24/3 11/85/3 +f 24/86/3 27/87/3 21/83/3 +f 28/51/3 31/80/3 11/85/3 +f 11/85/3 22/84/3 28/51/3 +f 24/86/3 21/83/3 23/20/3 +f 26/88/3 25/89/3 23/20/3 +f 23/20/3 21/83/3 15/18/3 +f 15/18/3 16/90/3 7/91/3 +f 21/83/3 22/84/3 15/18/3 +f 8/19/3 26/88/3 23/20/3 +f 15/18/3 7/91/3 8/19/3 +f 22/21/2 30/49/2 40/22/2 +f 47/89/4 45/88/4 5/19/4 +f 5/19/4 6/91/4 13/90/4 +f 5/19/4 13/90/4 14/18/4 +f 44/20/4 47/89/4 5/19/4 +f 43/87/4 46/86/4 44/20/4 +f 41/83/4 43/87/4 44/20/4 +f 44/20/4 5/19/4 14/18/4 +f 39/84/4 40/52/4 80/50/4 +f 44/20/4 14/18/4 41/83/4 +f 42/51/4 41/83/4 39/84/4 +f 39/84/4 80/50/4 50/92/4 +f 41/83/4 14/18/4 39/84/4 +f 48/93/4 49/66/4 42/51/4 +f 50/92/4 48/93/4 42/51/4 +f 80/50/4 79/94/4 50/92/4 +f 50/92/4 42/51/4 39/84/4 +f 54/79/4 55/62/4 52/80/4 +f 50/92/4 79/94/4 51/95/4 +f 52/80/4 55/62/4 51/95/4 +f 51/95/4 79/94/4 10/85/4 +f 79/94/4 9/55/4 10/85/4 +f 53/26/4 52/80/4 10/85/4 +f 58/75/4 56/74/4 53/26/4 +f 59/78/4 60/77/4 57/76/4 +f 57/76/4 58/75/4 53/26/4 +f 52/80/4 51/95/4 10/85/4 +f 19/24/4 20/82/4 1/81/4 +f 53/26/4 10/85/4 19/24/4 +f 59/78/4 57/76/4 2/25/4 +f 19/24/4 1/81/4 2/25/4 +f 2/25/4 57/76/4 53/26/4 +f 70/27/5 71/96/5 62/28/5 +f 11/30/5 18/97/5 19/31/5 +f 4/15/5 1/73/5 20/33/5 +f 72/35/3 74/54/3 64/36/3 +f 13/8/5 6/29/5 7/38/5 +f 23/39/6 25/10/6 47/11/6 +f 68/40/7 75/98/7 70/41/7 +f 30/11/5 12/17/5 79/99/5 +f 79/99/10 80/43/10 30/11/10 +f 12/17/5 9/16/5 79/99/5 +f 3/15/1 2/73/1 1/32/1 +f 20/44/2 19/58/2 18/27/2 +f 74/17/5 78/100/5 65/46/5 +f 31/43/1 33/99/1 54/47/1 +f 22/47/5 39/99/5 14/43/5 +f 46/1/2 24/64/2 23/7/2 +f 57/21/1 35/23/1 38/22/1 +f 61/50/9 66/53/9 76/51/9 +f 37/45/5 59/44/5 2/23/5 +f 78/28/3 77/51/3 67/53/3 +f 62/67/1 51/66/1 69/68/1 +f 51/66/1 55/65/1 63/6/1 +f 68/17/1 69/68/1 61/69/1 +f 61/69/1 69/68/1 51/66/1 +f 61/69/1 51/66/1 63/6/1 +f 65/71/1 67/70/1 64/5/1 +f 61/69/1 63/6/1 66/4/1 +f 64/5/1 67/70/1 66/4/1 +f 76/55/6 66/85/6 67/56/6 +f 47/17/2 25/16/2 26/10/2 +f 5/16/5 45/99/5 26/47/5 +f 55/60/6 54/101/6 33/58/6 +f 33/58/6 29/22/6 48/59/6 +f 48/59/6 72/102/6 63/103/6 +f 29/22/6 49/104/6 48/59/6 +f 48/59/6 63/103/6 55/60/6 +f 29/38/2 28/2/2 42/3/2 +f 32/44/6 31/23/6 52/21/6 +f 58/15/6 38/73/6 34/33/6 +f 27/7/6 24/38/6 46/29/6 +f 73/61/6 75/105/6 68/62/6 +f 21/58/6 41/27/6 42/29/6 +f 11/29/1 10/38/1 9/58/1 +f 59/45/1 37/44/1 36/2/1 +f 60/9/6 36/39/6 35/10/6 diff --git a/mods/vehicle_mash/models/car.x b/mods/vehicle_mash/models/car.x new file mode 100644 index 0000000..7ddd9be --- /dev/null +++ b/mods/vehicle_mash/models/car.x @@ -0,0 +1,5139 @@ +xof 0303txt 0032 + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame _0002 { + FrameTransformMatrix { + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 1.000000,-0.000000,-0.000000, 0.000000, + 0.000000,-0.118811, 4.693520, 1.000000;; + } + Mesh { // _0002 mesh + 1460; + 7.941145; 3.556497; 6.900807;, + 7.941145; 3.556497; 4.900808;, + 7.941145; 7.056497; 4.900808;, + 7.941145; 7.056497; 6.900807;, + -7.808848; 7.056497; 6.650808;, + 7.691145; 7.056497; 6.650807;, + 7.691145; 3.556497; 6.650807;, + -7.808848; 3.556497; 6.650808;, + 7.691145; 7.056497; 6.650807;, + 7.691145; 7.056497; 4.900808;, + 7.691145; 3.556497; 4.900808;, + 7.691145; 3.556497; 6.650807;, + 7.941145; 3.556497; 4.900808;, + 7.691145; 3.556497; 4.900808;, + 7.691145; 7.056497; 4.900808;, + 7.941145; 7.056497; 4.900808;, + -8.058848; 3.556497; 6.900808;, + -8.058848; 7.056497; 6.900808;, + -8.058848; 7.056497; 4.900809;, + -8.058848; 3.556497; 4.900809;, + -8.058848; 3.556497; 4.900809;, + -8.058848; 7.056497; 4.900809;, + -7.808848; 7.056497; 4.900809;, + -7.808848; 3.556497; 4.900809;, + -7.808848; 7.056497; 6.650808;, + -7.808848; 3.556497; 6.650808;, + -7.808848; 3.556497; 4.900809;, + -7.808848; 7.056497; 4.900809;, + -8.058848; 3.556497; 6.900808;, + 7.941145; 3.556497; 6.900807;, + 7.941145; 7.056497; 6.900807;, + -8.058848; 7.056497; 6.900808;, + 7.691145; 6.556496;-7.599186;, + 0.191149; 6.556496;-7.599186;, + 0.191149; 6.556496;-6.099187;, + 7.691145; 6.556496;-6.099187;, + 0.191149; 6.556496;-6.099187;, + 0.191149;-0.943501;-6.099187;, + 7.691145;-0.943501;-6.099187;, + 7.691145; 6.556496;-6.099187;, + 0.191149; 6.556496;-7.599186;, + 0.191149;-0.943501;-7.599186;, + 0.191149;-0.943501;-6.099187;, + 0.191149; 6.556496;-6.099187;, + 7.691145; 6.556496;-0.349189;, + 0.191149; 6.556496;-0.349189;, + 0.191149; 6.556496; 1.150810;, + 7.691145; 6.556496; 1.150810;, + 0.191149; 6.556496; 1.150810;, + 0.191149;-0.943501; 1.150810;, + 7.691145;-0.943501; 1.150810;, + 7.691145; 6.556496; 1.150810;, + 7.691145;-0.943501;-0.349189;, + 0.191149;-0.943501;-0.349189;, + 0.191149;-0.943501; 6.150808;, + 7.691145;-0.943501; 6.150808;, + 0.191149;-0.943501;-0.349189;, + 0.191149;-2.443500;-0.349189;, + 0.191149;-2.443500; 6.150808;, + 0.191149;-0.943501; 6.150808;, + -7.808848; 6.556496;-7.599186;, + -7.808848; 6.556496;-6.099187;, + -0.308851; 6.556496;-6.099187;, + -0.308851; 6.556496;-7.599186;, + -7.808848; 6.556496;-6.099187;, + -7.808848; 6.556496;-7.599186;, + -7.808848;-0.943501;-7.599186;, + -7.808848;-0.943501;-6.099187;, + -0.308851; 6.556496;-6.099187;, + -7.808848; 6.556496;-6.099187;, + -7.808848;-0.943501;-6.099187;, + -0.308851;-0.943501;-6.099187;, + -0.308851;-0.943501;-7.599186;, + -0.308851;-0.943501;-1.099189;, + -0.308851;-2.443500;-1.099189;, + -0.308851;-2.443500;-7.599186;, + -7.808848; 6.556496;-0.349189;, + -7.808848; 6.556496; 1.150810;, + -0.308851; 6.556496; 1.150810;, + -0.308851; 6.556496;-0.349189;, + -0.308851; 6.556496; 1.150810;, + -7.808848; 6.556496; 1.150810;, + -7.808848;-0.943501; 1.150810;, + -0.308851;-0.943501; 1.150810;, + -0.308851; 6.556496;-0.349189;, + -0.308851; 6.556496; 1.150810;, + -0.308851;-0.943501; 1.150810;, + -0.308851;-0.943501;-0.349189;, + 7.941145; 0.556499;-15.099183;, + 8.941145; 0.556499;-15.099183;, + 8.941145;-3.443499;-15.099183;, + 7.941145;-3.443499;-15.099183;, + 8.941145; 0.556499;13.900805;, + 8.941145; 0.556499;14.900805;, + 8.941145;-3.443499;14.900805;, + 8.941145;-3.443499;13.900805;, + 7.941145;-3.443499;-14.099183;, + 7.941145;-3.443499;-15.099183;, + 8.941145;-3.443499;-15.099183;, + 8.941145;-3.443499;-14.099183;, + 8.941145; 0.556499; 4.900809;, + 8.941145; 0.556499; 6.900808;, + 8.941145;-3.443499; 6.900808;, + 8.941145;-3.443499; 4.900809;, + 7.941145;-3.443499; 8.400807;, + 7.941145;-3.443499; 6.900808;, + 8.941145;-3.443499; 6.900808;, + 8.941145;-3.443499; 8.400807;, + 8.941145; 1.556499;13.900805;, + 8.941145; 1.556499;14.900805;, + 8.941145; 0.556499;14.900805;, + 8.941145; 0.556499;13.900805;, + 7.941145; 1.556499;-15.099183;, + 8.941145; 1.556499;-15.099183;, + 8.941145; 0.556499;-15.099183;, + 7.941145; 0.556499;-15.099183;, + 8.941145; 1.556499; 4.900809;, + 8.941145; 1.556499; 6.900808;, + 8.941145; 0.556499; 6.900808;, + 8.941145; 0.556499; 4.900809;, + 8.941145; 1.556499; 8.400807;, + 8.941145; 1.556499;13.900805;, + 8.941145; 0.556499;13.900805;, + 8.941145; 0.556499; 8.400807;, + 7.941145;-3.443499;14.900805;, + 7.941145;-3.443499;13.900805;, + 8.941145;-3.443499;13.900805;, + 8.941145;-3.443499;14.900805;, + 8.941145; 1.556499; 6.900808;, + 8.941145; 1.556499; 8.400807;, + 8.941145; 0.556499; 8.400807;, + 8.941145; 0.556499; 6.900808;, + 8.941145; 0.556499; 6.900808;, + 8.941145; 0.556499; 8.400807;, + 8.941145;-3.443499; 8.400807;, + 8.941145;-3.443499; 6.900808;, + 8.941145; 0.556499;-15.099183;, + 8.941145; 0.556499;-14.099183;, + 8.941145;-3.443499;-14.099183;, + 8.941145;-3.443499;-15.099183;, + 8.941145; 1.556499;-15.099183;, + 8.941145; 1.556499;-14.099183;, + 8.941145; 0.556499;-14.099183;, + 8.941145; 0.556499;-15.099183;, + 8.941145; 0.556499;14.900805;, + 7.941145; 0.556499;14.900805;, + 7.941145;-3.443499;14.900805;, + 8.941145;-3.443499;14.900805;, + -8.058848; 0.556499;-15.099183;, + 7.941145; 0.556499;-15.099183;, + 7.941145;-3.443499;-15.099183;, + -8.058848;-3.443499;-15.099183;, + -8.058848;-3.443499; 8.400807;, + -8.058848;-3.443499; 6.900808;, + 7.941145;-3.443499; 6.900808;, + 7.941145;-3.443499; 8.400807;, + 8.941145; 2.556498; 8.400807;, + 8.941145; 2.556498; 6.900808;, + 7.941145; 2.556498; 6.900808;, + 7.941145; 2.556498; 8.400807;, + 8.941145; 1.556499;14.900805;, + 7.941145; 1.556499;14.900805;, + 7.941145; 0.556499;14.900805;, + 8.941145; 0.556499;14.900805;, + 8.941145; 2.556498;14.900805;, + 8.941145; 2.556498;13.900805;, + 7.941145; 2.556498;13.900805;, + 7.941145; 2.556498;14.900805;, + 7.941145;-3.443499; 8.400807;, + 7.941145; 0.556499; 8.400807;, + 7.941145; 0.556499;13.900805;, + 7.941145;-3.443499;13.900805;, + 8.941145; 2.556498;13.900805;, + 8.941145; 2.556498; 8.400807;, + 7.941145; 2.556498; 8.400807;, + 7.941145; 2.556498;13.900805;, + 8.941145;-3.443499;-14.099183;, + 8.941145; 0.556499;-14.099183;, + 7.941145; 0.556499;-14.099183;, + 7.941145;-3.443499;-14.099183;, + 8.941145; 0.556499; 8.400807;, + 7.941145; 0.556499; 8.400807;, + 7.941145;-3.443499; 8.400807;, + 8.941145;-3.443499; 8.400807;, + 8.941145; 0.556499;13.900805;, + 8.941145;-3.443499;13.900805;, + 7.941145;-3.443499;13.900805;, + 7.941145; 0.556499;13.900805;, + 8.941145; 0.556499; 8.400807;, + 8.941145; 0.556499;13.900805;, + 7.941145; 0.556499;13.900805;, + 7.941145; 0.556499; 8.400807;, + 7.941145; 0.556499;14.900805;, + 7.941145; 1.556499;14.900805;, + 7.941145; 1.556499;15.900805;, + 7.941145; 0.556499;15.900805;, + 7.941145; 2.556498;13.900805;, + 7.941145; 2.556498; 8.400807;, + 7.941145; 3.556497; 8.400807;, + 7.941145; 3.556497;13.900805;, + 8.941145; 2.556498;-8.599185;, + 7.941145; 2.556498;-8.599185;, + 7.941145; 2.556498; 4.900809;, + 8.941145; 2.556498; 4.900809;, + -8.058848; 2.556498;14.900805;, + 7.941145; 2.556498;14.900805;, + 7.941145; 3.556497;14.900805;, + -8.058848; 3.556497;14.900805;, + 7.941145; 2.556498;14.900805;, + 7.941145; 2.556498;13.900805;, + 7.941145; 3.556497;13.900805;, + 7.941145; 3.556497;14.900805;, + 7.941145; 2.556498; 8.400807;, + 7.941145; 2.556498; 6.900808;, + 7.941145; 3.556497; 6.900808;, + 7.941145; 3.556497; 8.400807;, + 8.941145; 2.556498;13.900805;, + 8.941145; 2.556498;14.900805;, + 8.941145; 1.556499;14.900805;, + 8.941145; 1.556499;13.900805;, + 8.941145; 2.556498; 4.900809;, + 8.941145; 2.556498; 6.900808;, + 8.941145; 1.556499; 6.900808;, + 8.941145; 1.556499; 4.900809;, + 8.941145; 2.556498; 8.400807;, + 8.941145; 2.556498;13.900805;, + 8.941145; 1.556499;13.900805;, + 8.941145; 1.556499; 8.400807;, + 8.941145; 2.556498; 6.900808;, + 8.941145; 2.556498; 8.400807;, + 8.941145; 1.556499; 8.400807;, + 8.941145; 1.556499; 6.900808;, + 8.941145; 2.556498;14.900805;, + 7.941145; 2.556498;14.900805;, + 7.941145; 1.556499;14.900805;, + 8.941145; 1.556499;14.900805;, + 7.941145; 1.556499;15.900805;, + -8.058848; 1.556499;15.900805;, + -8.058848; 0.556499;15.900805;, + 7.941145; 0.556499;15.900805;, + 7.941145;-3.443499;14.900805;, + 7.941145; 0.556499;14.900805;, + 7.941145; 0.556499;15.900805;, + 7.941145;-3.443499;15.900805;, + 7.941145;-3.443499; 6.900808;, + 7.941145;-3.443499; 4.900809;, + 8.941145;-3.443499; 4.900809;, + 8.941145;-3.443499; 6.900808;, + -8.058848;-3.443499; 6.900808;, + -8.058848;-3.443499; 4.900809;, + 7.941145;-3.443499; 4.900809;, + 7.941145;-3.443499; 6.900808;, + 7.941145; 7.056496; 6.900808;, + 7.941145; 7.056496; 4.900809;, + 7.691145; 7.056496; 4.900809;, + 7.691145; 7.056496; 6.650808;, + 8.941145; 2.556498; 4.900809;, + 7.941145; 2.556498; 4.900809;, + 7.941145; 2.556498; 6.900808;, + 8.941145; 2.556498; 6.900808;, + 8.941145; 2.556498;-8.599185;, + 8.941145; 2.556498; 4.900809;, + 8.941145; 1.556499; 4.900809;, + 8.941145; 1.556499;-8.599185;, + -7.808848; 3.556497; 6.650808;, + 7.691145; 3.556497; 6.650808;, + 7.691145; 2.556498; 6.650808;, + -7.808848; 2.556498; 6.650808;, + 7.691145; 3.556497; 6.650808;, + 7.691145; 3.556497; 4.900809;, + 7.691145; 2.556498; 4.900809;, + 7.691145; 2.556498; 6.650808;, + -9.058847; 0.556499;13.900805;, + -9.058847;-3.443499;13.900805;, + -9.058847;-3.443499;14.900805;, + -9.058847; 0.556499;14.900805;, + -9.058847; 0.556499; 4.900809;, + -9.058847;-3.443499; 4.900809;, + -9.058847;-3.443499; 6.900808;, + -9.058847; 0.556499; 6.900808;, + -9.058847; 1.556499;13.900805;, + -9.058847; 0.556499;13.900805;, + -9.058847; 0.556499;14.900805;, + -9.058847; 1.556499;14.900805;, + -9.058847; 1.556499; 4.900809;, + -9.058847; 0.556499; 4.900809;, + -9.058847; 0.556499; 6.900808;, + -9.058847; 1.556499; 6.900808;, + -9.058847; 1.556499; 8.400807;, + -9.058847; 0.556499; 8.400807;, + -9.058847; 0.556499;13.900805;, + -9.058847; 1.556499;13.900805;, + -8.058848;-3.443499;14.900805;, + -9.058847;-3.443499;14.900805;, + -9.058847;-3.443499;13.900805;, + -8.058848;-3.443499;13.900805;, + -9.058847; 1.556499; 6.900808;, + -9.058847; 0.556499; 6.900808;, + -9.058847; 0.556499; 8.400807;, + -9.058847; 1.556499; 8.400807;, + -9.058847; 0.556499; 6.900808;, + -9.058847;-3.443499; 6.900808;, + -9.058847;-3.443499; 8.400807;, + -9.058847; 0.556499; 8.400807;, + -9.058847; 0.556499;-15.099183;, + -9.058847;-3.443499;-15.099183;, + -9.058847;-3.443499;-14.099183;, + -9.058847; 0.556499;-14.099183;, + -9.058847; 0.556499;14.900805;, + -9.058847;-3.443499;14.900805;, + -8.058848;-3.443499;14.900805;, + -8.058848; 0.556499;14.900805;, + -9.058847; 2.556498; 8.400807;, + -8.058848; 2.556498; 8.400807;, + -8.058848; 2.556498; 6.900808;, + -9.058847; 2.556498; 6.900808;, + -9.058847; 1.556499;14.900805;, + -9.058847; 0.556499;14.900805;, + -8.058848; 0.556499;14.900805;, + -8.058848; 1.556499;14.900805;, + -9.058847; 2.556498;13.900805;, + -8.058848; 2.556498;13.900805;, + -8.058848; 2.556498; 8.400807;, + -9.058847; 2.556498; 8.400807;, + -9.058847;-3.443499;-14.099183;, + -8.058848;-3.443499;-14.099183;, + -8.058848; 0.556499;-14.099183;, + -9.058847; 0.556499;-14.099183;, + -9.058847; 0.556499;13.900805;, + -8.058848; 0.556499;13.900805;, + -8.058848;-3.443499;13.900805;, + -9.058847;-3.443499;13.900805;, + -9.058847; 0.556499; 8.400807;, + -8.058848; 0.556499; 8.400807;, + -8.058848; 0.556499;13.900805;, + -9.058847; 0.556499;13.900805;, + -9.058847; 2.556498; 4.900809;, + -9.058847; 2.556498; 6.900808;, + -8.058848; 2.556498; 6.900808;, + -8.058848; 2.556498; 4.900809;, + -9.058847; 2.556498;13.900805;, + -9.058847; 1.556499;13.900805;, + -9.058847; 1.556499;14.900805;, + -9.058847; 2.556498;14.900805;, + -9.058847; 2.556498; 4.900809;, + -9.058847; 1.556499; 4.900809;, + -9.058847; 1.556499; 6.900808;, + -9.058847; 2.556498; 6.900808;, + -9.058847; 2.556498; 8.400807;, + -9.058847; 1.556499; 8.400807;, + -9.058847; 1.556499;13.900805;, + -9.058847; 2.556498;13.900805;, + -9.058847; 2.556498; 6.900808;, + -9.058847; 1.556499; 6.900808;, + -9.058847; 1.556499; 8.400807;, + -9.058847; 2.556498; 8.400807;, + -8.058848; 2.556498; 6.900808;, + -8.058848; 3.556497; 6.900808;, + -8.058848; 3.556497; 4.900809;, + -8.058848; 2.556498; 4.900809;, + 7.941145;-2.943500; 6.650808;, + -8.058848;-2.943500; 6.650808;, + -8.058848; 2.556498; 6.650808;, + 7.941145; 2.556498; 6.650808;, + -8.058848; 2.556498; 4.900809;, + -8.058848; 3.556497; 4.900809;, + -7.808848; 3.556497; 4.900809;, + -7.808848; 2.556498; 4.900809;, + -9.058847; 2.556498;-8.599185;, + -8.058848; 2.556498;-8.599185;, + -8.058848; 2.556498;-14.099183;, + -9.058847; 2.556498;-14.099183;, + -9.058847; 0.556499; 8.400807;, + -9.058847;-3.443499; 8.400807;, + -8.058848;-3.443499; 8.400807;, + -8.058848; 0.556499; 8.400807;, + 7.941145; 1.556499;14.900805;, + -8.058848; 1.556499;14.900805;, + -8.058848; 1.556499;15.900805;, + 7.941145; 1.556499;15.900805;, + -8.058848;-3.443499;14.900805;, + 7.941145;-3.443499;14.900805;, + 7.941145;-3.443499;15.900805;, + -8.058848;-3.443499;15.900805;, + -8.058848; 2.556498;13.900805;, + -8.058848; 3.556497;13.900805;, + -8.058848; 3.556497; 8.400807;, + -8.058848; 2.556498; 8.400807;, + -8.058848;-3.443499;-14.099183;, + -8.058848;-3.443499;-15.099183;, + 7.941145;-3.443499;-15.099183;, + 7.941145;-3.443499;-14.099183;, + -9.058847; 2.556498;14.900805;, + -9.058847; 1.556499;14.900805;, + -8.058848; 1.556499;14.900805;, + -8.058848; 2.556498;14.900805;, + -8.058848; 1.556499;-14.099183;, + 7.941145; 1.556499;-14.099183;, + 7.941145; 1.556499;-15.099183;, + -8.058848; 1.556499;-15.099183;, + 8.941145; 2.556498;-14.099183;, + 8.941145; 1.556499;-14.099183;, + 7.941145; 1.556499;-14.099183;, + 7.941145; 2.556498;-14.099183;, + -8.058848; 1.556499;-14.099183;, + -8.058848; 1.556499;-15.099183;, + -9.058847; 1.556499;-15.099183;, + -9.058847; 1.556499;-14.099183;, + 7.941145; 2.556498;14.900805;, + -8.058848; 2.556498;14.900805;, + -8.058848; 1.556499;14.900805;, + 7.941145; 1.556499;14.900805;, + 7.941145; 0.556499;15.900805;, + -8.058848; 0.556499;15.900805;, + -8.058848;-3.443499;15.900805;, + 7.941145;-3.443499;15.900805;, + -9.058847; 1.556499;-15.099183;, + -9.058847; 0.556499;-15.099183;, + -9.058847; 0.556499;-14.099183;, + -9.058847; 1.556499;-14.099183;, + -9.058847; 2.556498;-14.099183;, + -8.058848; 2.556498;-14.099183;, + -8.058848; 1.556499;-14.099183;, + -9.058847; 1.556499;-14.099183;, + 7.941145; 1.556499;-14.099183;, + 8.941145; 1.556499;-14.099183;, + 8.941145; 1.556499;-15.099183;, + 7.941145; 1.556499;-15.099183;, + -8.058848; 0.556499;-15.099183;, + -8.058848;-3.443499;-15.099183;, + -9.058847;-3.443499;-15.099183;, + -9.058847; 0.556499;-15.099183;, + -9.058847; 2.556498;-14.099183;, + -9.058847; 1.556499;-14.099183;, + -9.058847; 1.556499;-8.599185;, + -9.058847; 2.556498;-8.599185;, + -8.058848; 0.556499;14.900805;, + -8.058848; 0.556499;15.900805;, + -8.058848; 1.556499;15.900805;, + -8.058848; 1.556499;14.900805;, + -8.058848; 2.556498; 8.400807;, + -8.058848; 3.556497; 8.400807;, + -8.058848; 3.556497; 6.900808;, + -8.058848; 2.556498; 6.900808;, + -9.058847; 2.556498;14.900805;, + -8.058848; 2.556498;14.900805;, + -8.058848; 2.556498;13.900805;, + -9.058847; 2.556498;13.900805;, + -8.058848; 1.556499;-15.099183;, + 7.941145; 1.556499;-15.099183;, + 7.941145; 0.556499;-15.099183;, + -8.058848; 0.556499;-15.099183;, + -8.058848; 2.556498;14.900805;, + -8.058848; 3.556497;14.900805;, + -8.058848; 3.556497;13.900805;, + -8.058848; 2.556498;13.900805;, + -8.058848;-3.443499; 6.900808;, + -9.058847;-3.443499; 6.900808;, + -9.058847;-3.443499; 4.900809;, + -8.058848;-3.443499; 4.900809;, + -8.058848;-3.443499; 8.400807;, + -9.058847;-3.443499; 8.400807;, + -9.058847;-3.443499; 6.900808;, + -8.058848;-3.443499; 6.900808;, + 7.941145; 3.556497;13.900805;, + 7.941145; 3.556497; 8.400807;, + -8.058848; 3.556497; 8.400807;, + -8.058848; 3.556497;13.900805;, + 7.941145; 3.556497;14.900805;, + 7.941145; 3.556497;13.900805;, + -8.058848; 3.556497;13.900805;, + -8.058848; 3.556497;14.900805;, + -8.058848;-3.443499; 8.400807;, + -8.058848;-3.443499;13.900805;, + -8.058848; 0.556499;13.900805;, + -8.058848; 0.556499; 8.400807;, + -8.058848; 1.556499;-15.099183;, + -8.058848; 0.556499;-15.099183;, + -9.058847; 0.556499;-15.099183;, + -9.058847; 1.556499;-15.099183;, + -8.058848; 7.056496; 6.900808;, + -7.808848; 7.056496; 6.650808;, + -7.808848; 7.056496; 4.900809;, + -8.058848; 7.056496; 4.900809;, + 7.941145; 3.556497; 8.400807;, + 7.941145; 3.556497; 6.900808;, + -8.058848; 3.556497; 6.900808;, + -8.058848; 3.556497; 8.400807;, + 7.941145; 2.556498;-14.099183;, + 7.941145; 1.556499;-14.099183;, + -8.058848; 1.556499;-14.099183;, + -8.058848; 2.556498;-14.099183;, + -8.058848;-3.443499;14.900805;, + -8.058848;-3.443499;13.900805;, + 7.941145;-3.443499;13.900805;, + 7.941145;-3.443499;14.900805;, + -8.058848;-3.443499;-14.099183;, + -9.058847;-3.443499;-14.099183;, + -9.058847;-3.443499;-15.099183;, + -8.058848;-3.443499;-15.099183;, + -8.058848;-3.443499;14.900805;, + -8.058848;-3.443499;15.900805;, + -8.058848; 0.556499;15.900805;, + -8.058848; 0.556499;14.900805;, + -8.058848;-3.443499; 8.400807;, + 7.941145;-3.443499; 8.400807;, + 7.941145;-3.443499;13.900805;, + -8.058848;-3.443499;13.900805;, + -8.058848; 7.056496; 6.900808;, + 7.941145; 7.056496; 6.900808;, + 7.691145; 7.056496; 6.650808;, + -7.808848; 7.056496; 6.650808;, + -7.808848; 3.556497; 6.650808;, + -7.808848; 2.556498; 6.650808;, + -7.808848; 2.556498; 4.900809;, + -7.808848; 3.556497; 4.900809;, + -9.058847;-3.443499;-8.599185;, + -9.058847; 0.556499;-8.599185;, + -8.058848; 0.556499;-8.599185;, + -8.058848;-3.443499;-8.599185;, + 7.941145;-3.443499;-14.099183;, + 7.941145; 0.556499;-14.099183;, + 7.941145; 0.556499;-8.599185;, + 7.941145;-3.443499;-8.599185;, + 8.941145; 0.556499;-14.099183;, + 8.941145; 0.556499;-8.599185;, + 7.941145; 0.556499;-8.599185;, + 7.941145; 0.556499;-14.099183;, + -9.058847; 0.556499;-14.099183;, + -8.058848; 0.556499;-14.099183;, + -8.058848; 0.556499;-8.599185;, + -9.058847; 0.556499;-8.599185;, + -8.058848;-3.443499;-14.099183;, + -8.058848;-3.443499;-8.599185;, + -8.058848; 0.556499;-8.599185;, + -8.058848; 0.556499;-14.099183;, + 7.941145;-3.443499;-14.099183;, + 7.941145;-3.443499;-8.599185;, + -8.058848;-3.443499;-8.599185;, + -8.058848;-3.443499;-14.099183;, + 8.941145;-3.443499;-8.599185;, + 7.941145;-3.443499;-8.599185;, + 7.941145; 0.556499;-8.599185;, + 8.941145; 0.556499;-8.599185;, + -9.058847; 1.556499;-14.099183;, + -9.058847; 0.556499;-14.099183;, + -9.058847; 0.556499;-8.599185;, + -9.058847; 1.556499;-8.599185;, + 8.941145; 1.556499;-14.099183;, + 8.941145; 1.556499;-8.599185;, + 8.941145; 0.556499;-8.599185;, + 8.941145; 0.556499;-14.099183;, + 8.941145; 2.556498;-14.099183;, + 8.941145; 2.556498;-8.599185;, + 8.941145; 1.556499;-8.599185;, + 8.941145; 1.556499;-14.099183;, + -8.058848;-3.443499; 4.900809;, + -8.058848;-3.443499;-8.599185;, + 7.941145;-3.443499;-8.599185;, + 7.941145;-3.443499; 4.900809;, + -9.058847; 0.556499;-8.599185;, + -9.058847;-3.443499;-8.599185;, + -9.058847;-3.443499; 4.900809;, + -9.058847; 0.556499; 4.900809;, + -9.058847; 1.556499;-8.599185;, + -9.058847; 0.556499;-8.599185;, + -9.058847; 0.556499; 4.900809;, + -9.058847; 1.556499; 4.900809;, + 7.941145;-3.443499; 4.900809;, + 7.941145;-3.443499;-8.599185;, + 8.941145;-3.443499;-8.599185;, + 8.941145;-3.443499; 4.900809;, + 8.941145; 0.556499;-8.599185;, + 8.941145; 0.556499; 4.900809;, + 8.941145;-3.443499; 4.900809;, + 8.941145;-3.443499;-8.599185;, + 8.941145; 1.556499;-8.599185;, + 8.941145; 1.556499; 4.900809;, + 8.941145; 0.556499; 4.900809;, + 8.941145; 0.556499;-8.599185;, + 7.941145; 2.556498;-8.599185;, + 7.941145; 2.556498;-14.099183;, + -8.058848; 2.556498;-14.099183;, + -8.058848; 2.556498;-8.599185;, + -9.058847; 2.556498;-8.599185;, + -9.058847; 1.556499;-8.599185;, + -9.058847; 1.556499; 4.900809;, + -9.058847; 2.556498; 4.900809;, + 7.941145; 2.556498;-8.599185;, + -8.058848; 2.556498;-8.599185;, + -8.058848;-2.943500;-8.599185;, + 7.941145;-2.943500;-8.599185;, + -9.058847; 2.556498;-8.599185;, + -9.058847; 2.556498; 4.900809;, + -8.058848; 2.556498; 4.900809;, + -8.058848; 2.556498;-8.599185;, + -8.058848; 2.556498; 4.900809;, + -8.058848;-2.943500; 4.900809;, + -8.058848;-2.943500;-8.599185;, + -8.058848; 2.556498;-8.599185;, + 8.941145; 2.556498;-8.599185;, + 8.941145; 2.556498;-14.099183;, + 7.941145; 2.556498;-14.099183;, + 7.941145; 2.556498;-8.599185;, + -8.058848;-3.443499; 4.900809;, + -9.058847;-3.443499; 4.900809;, + -9.058847;-3.443499;-8.599185;, + -8.058848;-3.443499;-8.599185;, + 7.941145; 2.556498; 6.900808;, + 7.941145; 2.556498; 4.900809;, + 7.941145; 3.556497; 4.900809;, + 7.941145; 3.556497; 6.900808;, + 7.941145;-2.943500; 4.900809;, + 7.941145;-2.943500; 6.650808;, + 7.941145; 2.556498; 6.650808;, + 7.941145; 2.556498; 4.900809;, + 7.941145; 2.556498; 4.900809;, + 7.691145; 2.556498; 4.900809;, + 7.691145; 3.556497; 4.900809;, + 7.941145; 3.556497; 4.900809;, + -8.058848;-2.943500; 4.900809;, + -8.058848;-2.943500; 6.650808;, + 7.941145;-2.943500; 6.650808;, + 7.941145;-2.943500; 4.900809;, + -8.058848;-2.943500; 6.650808;, + -8.058848;-2.943500; 4.900809;, + -8.058848; 2.556498; 4.900809;, + -8.058848; 2.556498; 6.650808;, + 7.941145; 2.556498; 4.900809;, + 7.941145; 2.556498;-8.599185;, + 7.941145;-2.943500;-8.599185;, + 7.941145;-2.943500; 4.900809;, + -8.058848;-2.943500;-8.599185;, + -8.058848;-2.943500; 4.900809;, + 7.941145;-2.943500; 4.900809;, + 7.941145;-2.943500;-8.599185;, + 7.941145;-1.193501;12.150805;, + 7.941145;-1.193501;13.150805;, + 7.941145;-0.193501;13.150805;, + 7.941145;-0.193501;12.150805;, + 9.691145;-3.193499;13.150805;, + 7.941145;-3.193499;13.150805;, + 7.941145;-4.193499;13.150805;, + 9.691145;-4.193499;13.150805;, + 7.941145;-3.193499;12.150805;, + 7.941145;-3.193499;13.150805;, + 7.941145;-1.193501;13.150805;, + 7.941145;-1.193501;12.150805;, + 9.691145;-1.193501; 9.150807;, + 9.691145;-0.193501; 9.150807;, + 9.691145;-0.193501;10.150807;, + 9.691145;-1.193501;10.150807;, + 7.941145;-1.193501;10.150807;, + 7.941145;-1.193501;12.150805;, + 7.941145;-0.193501;12.150805;, + 7.941145;-0.193501;10.150807;, + 9.691145;-0.193501; 9.150807;, + 7.941145;-0.193501; 9.150807;, + 7.941145;-0.193501;10.150807;, + 9.691145;-0.193501;10.150807;, + 9.691145;-3.193499; 9.150807;, + 9.691145;-1.193501; 9.150807;, + 9.691145;-1.193501;10.150807;, + 9.691145;-3.193499;10.150807;, + 9.691145;-3.193499;10.150807;, + 9.691145;-1.193501;10.150807;, + 9.691145;-1.193501;12.150805;, + 9.691145;-3.193499;12.150805;, + 7.941145;-3.193499;10.150807;, + 7.941145;-3.193499;12.150805;, + 7.941145;-1.193501;12.150805;, + 7.941145;-1.193501;10.150807;, + 9.691145;-1.193501;13.650805;, + 7.941145;-1.193501;13.650805;, + 7.941145;-3.193499;13.650805;, + 9.691145;-3.193499;13.650805;, + 9.691145;-3.193499; 8.650807;, + 7.941145;-3.193499; 8.650807;, + 7.941145;-1.193501; 8.650807;, + 9.691145;-1.193501; 8.650807;, + 9.691145;-4.693499;12.150805;, + 7.941145;-4.693499;12.150805;, + 7.941145;-4.693499;10.150807;, + 9.691145;-4.693499;10.150807;, + 9.691145; 0.306499;10.150807;, + 7.941145; 0.306499;10.150807;, + 7.941145; 0.306499;12.150805;, + 9.691145; 0.306499;12.150805;, + 7.941145;-3.193499; 8.650807;, + 7.941145;-3.193499; 9.150807;, + 7.941145;-1.193501; 9.150807;, + 7.941145;-1.193501; 8.650807;, + 9.691145;-4.693499;10.150807;, + 9.691145;-4.193499;10.150807;, + 9.691145;-4.193499;12.150805;, + 9.691145;-4.693499;12.150805;, + 9.691145;-4.693499;12.150805;, + 9.691145;-4.193499;12.150805;, + 7.941145;-4.193499;12.150805;, + 7.941145;-4.693499;12.150805;, + 9.691145;-1.193501;12.150805;, + 9.691145;-0.193501;12.150805;, + 9.691145;-0.193501;13.150805;, + 9.691145;-1.193501;13.150805;, + 9.691145;-4.193499;10.150807;, + 7.941145;-4.193499;10.150807;, + 7.941145;-4.193499; 9.150807;, + 9.691145;-4.193499; 9.150807;, + 9.691145;-0.193501;12.150805;, + 7.941145;-0.193501;12.150805;, + 7.941145;-0.193501;13.150805;, + 9.691145;-0.193501;13.150805;, + 9.691145;-1.193501; 9.150807;, + 7.941145;-1.193501; 9.150807;, + 7.941145;-0.193501; 9.150807;, + 9.691145;-0.193501; 9.150807;, + 9.691145;-4.193499;12.150805;, + 9.691145;-3.193499;12.150805;, + 9.691145;-3.193499;13.150805;, + 9.691145;-4.193499;13.150805;, + 9.691145;-3.193499;12.150805;, + 9.691145;-1.193501;12.150805;, + 9.691145;-1.193501;13.150805;, + 9.691145;-3.193499;13.150805;, + 7.941145;-4.193499;12.150805;, + 7.941145;-4.193499;13.150805;, + 7.941145;-3.193499;13.150805;, + 7.941145;-3.193499;12.150805;, + 9.691145;-0.193501;13.150805;, + 7.941145;-0.193501;13.150805;, + 7.941145;-1.193501;13.150805;, + 9.691145;-1.193501;13.150805;, + 9.691145;-4.193499; 9.150807;, + 7.941145;-4.193499; 9.150807;, + 7.941145;-3.193499; 9.150807;, + 9.691145;-3.193499; 9.150807;, + 9.691145;-1.193501;10.150807;, + 9.691145;-0.193501;10.150807;, + 9.691145;-0.193501;12.150805;, + 9.691145;-1.193501;12.150805;, + 7.941145;-1.193501; 9.150807;, + 7.941145;-1.193501;10.150807;, + 7.941145;-0.193501;10.150807;, + 7.941145;-0.193501; 9.150807;, + 9.691145;-4.193499;13.150805;, + 7.941145;-4.193499;13.150805;, + 7.941145;-4.193499;12.150805;, + 9.691145;-4.193499;12.150805;, + 9.691145;-4.193499; 9.150807;, + 9.691145;-3.193499; 9.150807;, + 9.691145;-3.193499;10.150807;, + 9.691145;-4.193499;10.150807;, + 9.691145;-4.193499;10.150807;, + 9.691145;-3.193499;10.150807;, + 9.691145;-3.193499;12.150805;, + 9.691145;-4.193499;12.150805;, + 7.941145;-4.193499; 9.150807;, + 7.941145;-4.193499;10.150807;, + 7.941145;-3.193499;10.150807;, + 7.941145;-3.193499; 9.150807;, + 7.941145;-4.193499;10.150807;, + 7.941145;-4.193499;12.150805;, + 7.941145;-3.193499;12.150805;, + 7.941145;-3.193499;10.150807;, + 7.941145;-3.193499; 9.150807;, + 7.941145;-3.193499;10.150807;, + 7.941145;-1.193501;10.150807;, + 7.941145;-1.193501; 9.150807;, + 9.691145;-3.193499;13.650805;, + 9.691145;-3.193499;13.150805;, + 9.691145;-1.193501;13.150805;, + 9.691145;-1.193501;13.650805;, + 9.691145;-1.193501; 8.650807;, + 9.691145;-1.193501; 9.150807;, + 9.691145;-3.193499; 9.150807;, + 9.691145;-3.193499; 8.650807;, + 7.941145;-1.193501;13.650805;, + 7.941145;-1.193501;13.150805;, + 7.941145;-3.193499;13.150805;, + 7.941145;-3.193499;13.650805;, + 9.691145;-1.193501;13.650805;, + 9.691145;-1.193501;13.150805;, + 7.941145;-1.193501;13.150805;, + 7.941145;-1.193501;13.650805;, + 7.941145;-3.193499;13.650805;, + 7.941145;-3.193499;13.150805;, + 9.691145;-3.193499;13.150805;, + 9.691145;-3.193499;13.650805;, + 9.691145;-3.193499; 8.650807;, + 9.691145;-3.193499; 9.150807;, + 7.941145;-3.193499; 9.150807;, + 7.941145;-3.193499; 8.650807;, + 7.941145;-1.193501; 8.650807;, + 7.941145;-1.193501; 9.150807;, + 9.691145;-1.193501; 9.150807;, + 9.691145;-1.193501; 8.650807;, + 9.691145; 0.306499;12.150805;, + 9.691145;-0.193501;12.150805;, + 9.691145;-0.193501;10.150807;, + 9.691145; 0.306499;10.150807;, + 7.941145;-4.693499;12.150805;, + 7.941145;-4.193499;12.150805;, + 7.941145;-4.193499;10.150807;, + 7.941145;-4.693499;10.150807;, + 7.941145; 0.306499;10.150807;, + 7.941145;-0.193501;10.150807;, + 7.941145;-0.193501;12.150805;, + 7.941145; 0.306499;12.150805;, + 7.941145;-4.693499;10.150807;, + 7.941145;-4.193499;10.150807;, + 9.691145;-4.193499;10.150807;, + 9.691145;-4.693499;10.150807;, + 9.691145; 0.306499;10.150807;, + 9.691145;-0.193501;10.150807;, + 7.941145;-0.193501;10.150807;, + 7.941145; 0.306499;10.150807;, + 7.941145; 0.306499;12.150805;, + 7.941145;-0.193501;12.150805;, + 9.691145;-0.193501;12.150805;, + 9.691145; 0.306499;12.150805;, + 7.941145;-1.193501;-10.349185;, + 7.941145;-1.193501;-9.349185;, + 7.941145;-0.193501;-9.349185;, + 7.941145;-0.193501;-10.349185;, + 9.691145;-3.193499;-9.349185;, + 7.941145;-3.193499;-9.349185;, + 7.941145;-4.193499;-9.349185;, + 9.691145;-4.193499;-9.349185;, + 7.941145;-3.193499;-10.349185;, + 7.941145;-3.193499;-9.349185;, + 7.941145;-1.193501;-9.349185;, + 7.941145;-1.193501;-10.349185;, + 9.691145;-1.193501;-13.349183;, + 9.691145;-0.193501;-13.349183;, + 9.691145;-0.193501;-12.349183;, + 9.691145;-1.193501;-12.349183;, + 7.941145;-1.193501;-12.349183;, + 7.941145;-1.193501;-10.349185;, + 7.941145;-0.193501;-10.349185;, + 7.941145;-0.193501;-12.349183;, + 9.691145;-0.193501;-13.349183;, + 7.941145;-0.193501;-13.349183;, + 7.941145;-0.193501;-12.349183;, + 9.691145;-0.193501;-12.349183;, + 9.691145;-3.193499;-13.349183;, + 9.691145;-1.193501;-13.349183;, + 9.691145;-1.193501;-12.349183;, + 9.691145;-3.193499;-12.349183;, + 9.691145;-3.193499;-12.349183;, + 9.691145;-1.193501;-12.349183;, + 9.691145;-1.193501;-10.349185;, + 9.691145;-3.193499;-10.349185;, + 7.941145;-3.193499;-12.349183;, + 7.941145;-3.193499;-10.349185;, + 7.941145;-1.193501;-10.349185;, + 7.941145;-1.193501;-12.349183;, + 9.691145;-1.193501;-8.849185;, + 7.941145;-1.193501;-8.849185;, + 7.941145;-3.193499;-8.849185;, + 9.691145;-3.193499;-8.849185;, + 9.691145;-3.193499;-13.849183;, + 7.941145;-3.193499;-13.849183;, + 7.941145;-1.193501;-13.849183;, + 9.691145;-1.193501;-13.849183;, + 9.691145;-4.693499;-10.349185;, + 7.941145;-4.693499;-10.349185;, + 7.941145;-4.693499;-12.349183;, + 9.691145;-4.693499;-12.349183;, + 9.691145; 0.306499;-12.349183;, + 7.941145; 0.306499;-12.349183;, + 7.941145; 0.306499;-10.349185;, + 9.691145; 0.306499;-10.349185;, + 7.941145;-3.193499;-13.849183;, + 7.941145;-3.193499;-13.349183;, + 7.941145;-1.193501;-13.349183;, + 7.941145;-1.193501;-13.849183;, + 9.691145;-4.693499;-12.349183;, + 9.691145;-4.193499;-12.349183;, + 9.691145;-4.193499;-10.349185;, + 9.691145;-4.693499;-10.349185;, + 9.691145;-4.693499;-10.349185;, + 9.691145;-4.193499;-10.349185;, + 7.941145;-4.193499;-10.349185;, + 7.941145;-4.693499;-10.349185;, + 9.691145;-1.193501;-10.349185;, + 9.691145;-0.193501;-10.349185;, + 9.691145;-0.193501;-9.349185;, + 9.691145;-1.193501;-9.349185;, + 9.691145;-4.193499;-12.349183;, + 7.941145;-4.193499;-12.349183;, + 7.941145;-4.193499;-13.349183;, + 9.691145;-4.193499;-13.349183;, + 9.691145;-0.193501;-10.349185;, + 7.941145;-0.193501;-10.349185;, + 7.941145;-0.193501;-9.349185;, + 9.691145;-0.193501;-9.349185;, + 9.691145;-1.193501;-13.349183;, + 7.941145;-1.193501;-13.349183;, + 7.941145;-0.193501;-13.349183;, + 9.691145;-0.193501;-13.349183;, + 9.691145;-4.193499;-10.349185;, + 9.691145;-3.193499;-10.349185;, + 9.691145;-3.193499;-9.349185;, + 9.691145;-4.193499;-9.349185;, + 9.691145;-3.193499;-10.349185;, + 9.691145;-1.193501;-10.349185;, + 9.691145;-1.193501;-9.349185;, + 9.691145;-3.193499;-9.349185;, + 7.941145;-4.193499;-10.349185;, + 7.941145;-4.193499;-9.349185;, + 7.941145;-3.193499;-9.349185;, + 7.941145;-3.193499;-10.349185;, + 9.691145;-0.193501;-9.349185;, + 7.941145;-0.193501;-9.349185;, + 7.941145;-1.193501;-9.349185;, + 9.691145;-1.193501;-9.349185;, + 9.691145;-4.193499;-13.349183;, + 7.941145;-4.193499;-13.349183;, + 7.941145;-3.193499;-13.349183;, + 9.691145;-3.193499;-13.349183;, + 9.691145;-1.193501;-12.349183;, + 9.691145;-0.193501;-12.349183;, + 9.691145;-0.193501;-10.349185;, + 9.691145;-1.193501;-10.349185;, + 7.941145;-1.193501;-13.349183;, + 7.941145;-1.193501;-12.349183;, + 7.941145;-0.193501;-12.349183;, + 7.941145;-0.193501;-13.349183;, + 9.691145;-4.193499;-9.349185;, + 7.941145;-4.193499;-9.349185;, + 7.941145;-4.193499;-10.349185;, + 9.691145;-4.193499;-10.349185;, + 9.691145;-4.193499;-13.349183;, + 9.691145;-3.193499;-13.349183;, + 9.691145;-3.193499;-12.349183;, + 9.691145;-4.193499;-12.349183;, + 9.691145;-4.193499;-12.349183;, + 9.691145;-3.193499;-12.349183;, + 9.691145;-3.193499;-10.349185;, + 9.691145;-4.193499;-10.349185;, + 7.941145;-4.193499;-13.349183;, + 7.941145;-4.193499;-12.349183;, + 7.941145;-3.193499;-12.349183;, + 7.941145;-3.193499;-13.349183;, + 7.941145;-4.193499;-12.349183;, + 7.941145;-4.193499;-10.349185;, + 7.941145;-3.193499;-10.349185;, + 7.941145;-3.193499;-12.349183;, + 7.941145;-3.193499;-13.349183;, + 7.941145;-3.193499;-12.349183;, + 7.941145;-1.193501;-12.349183;, + 7.941145;-1.193501;-13.349183;, + 9.691145;-3.193499;-8.849185;, + 9.691145;-3.193499;-9.349185;, + 9.691145;-1.193501;-9.349185;, + 9.691145;-1.193501;-8.849185;, + 9.691145;-1.193501;-13.849183;, + 9.691145;-1.193501;-13.349183;, + 9.691145;-3.193499;-13.349183;, + 9.691145;-3.193499;-13.849183;, + 7.941145;-1.193501;-8.849185;, + 7.941145;-1.193501;-9.349185;, + 7.941145;-3.193499;-9.349185;, + 7.941145;-3.193499;-8.849185;, + 9.691145;-1.193501;-8.849185;, + 9.691145;-1.193501;-9.349185;, + 7.941145;-1.193501;-9.349185;, + 7.941145;-1.193501;-8.849185;, + 7.941145;-3.193499;-8.849185;, + 7.941145;-3.193499;-9.349185;, + 9.691145;-3.193499;-9.349185;, + 9.691145;-3.193499;-8.849185;, + 9.691145;-3.193499;-13.849183;, + 9.691145;-3.193499;-13.349183;, + 7.941145;-3.193499;-13.349183;, + 7.941145;-3.193499;-13.849183;, + 7.941145;-1.193501;-13.849183;, + 7.941145;-1.193501;-13.349183;, + 9.691145;-1.193501;-13.349183;, + 9.691145;-1.193501;-13.849183;, + 9.691145; 0.306499;-10.349185;, + 9.691145;-0.193501;-10.349185;, + 9.691145;-0.193501;-12.349183;, + 9.691145; 0.306499;-12.349183;, + 7.941145;-4.693499;-10.349185;, + 7.941145;-4.193499;-10.349185;, + 7.941145;-4.193499;-12.349183;, + 7.941145;-4.693499;-12.349183;, + 7.941145; 0.306499;-12.349183;, + 7.941145;-0.193501;-12.349183;, + 7.941145;-0.193501;-10.349185;, + 7.941145; 0.306499;-10.349185;, + 7.941145;-4.693499;-12.349183;, + 7.941145;-4.193499;-12.349183;, + 9.691145;-4.193499;-12.349183;, + 9.691145;-4.693499;-12.349183;, + 9.691145; 0.306499;-12.349183;, + 9.691145;-0.193501;-12.349183;, + 7.941145;-0.193501;-12.349183;, + 7.941145; 0.306499;-12.349183;, + 7.941145; 0.306499;-10.349185;, + 7.941145;-0.193501;-10.349185;, + 9.691145;-0.193501;-10.349185;, + 9.691145; 0.306499;-10.349185;, + -8.058848;-1.193501;12.150805;, + -8.058848;-0.193501;12.150805;, + -8.058848;-0.193501;13.150805;, + -8.058848;-1.193501;13.150805;, + -9.808847;-3.193499;13.150805;, + -9.808847;-4.193499;13.150805;, + -8.058848;-4.193499;13.150805;, + -8.058848;-3.193499;13.150805;, + -8.058848;-3.193499;12.150805;, + -8.058848;-1.193501;12.150805;, + -8.058848;-1.193501;13.150805;, + -8.058848;-3.193499;13.150805;, + -9.808847;-1.193501; 9.150807;, + -9.808847;-1.193501;10.150807;, + -9.808847;-0.193501;10.150807;, + -9.808847;-0.193501; 9.150807;, + -8.058848;-1.193501;10.150807;, + -8.058848;-0.193501;10.150807;, + -8.058848;-0.193501;12.150805;, + -8.058848;-1.193501;12.150805;, + -9.808847;-0.193501; 9.150807;, + -9.808847;-0.193501;10.150807;, + -8.058848;-0.193501;10.150807;, + -8.058848;-0.193501; 9.150807;, + -9.808847;-3.193499; 9.150807;, + -9.808847;-3.193499;10.150807;, + -9.808847;-1.193501;10.150807;, + -9.808847;-1.193501; 9.150807;, + -9.808847;-3.193499;10.150807;, + -9.808847;-3.193499;12.150805;, + -9.808847;-1.193501;12.150805;, + -9.808847;-1.193501;10.150807;, + -8.058848;-3.193499;10.150807;, + -8.058848;-1.193501;10.150807;, + -8.058848;-1.193501;12.150805;, + -8.058848;-3.193499;12.150805;, + -9.808847;-1.193501;13.650805;, + -9.808847;-3.193499;13.650805;, + -8.058848;-3.193499;13.650805;, + -8.058848;-1.193501;13.650805;, + -9.808847;-3.193499; 8.650807;, + -9.808847;-1.193501; 8.650807;, + -8.058848;-1.193501; 8.650807;, + -8.058848;-3.193499; 8.650807;, + -9.808847;-4.693499;12.150805;, + -9.808847;-4.693499;10.150807;, + -8.058848;-4.693499;10.150807;, + -8.058848;-4.693499;12.150805;, + -9.808847; 0.306499;10.150807;, + -9.808847; 0.306499;12.150805;, + -8.058848; 0.306499;12.150805;, + -8.058848; 0.306499;10.150807;, + -8.058848;-3.193499; 8.650807;, + -8.058848;-1.193501; 8.650807;, + -8.058848;-1.193501; 9.150807;, + -8.058848;-3.193499; 9.150807;, + -9.808847;-4.693499;10.150807;, + -9.808847;-4.693499;12.150805;, + -9.808847;-4.193499;12.150805;, + -9.808847;-4.193499;10.150807;, + -9.808847;-4.693499;12.150805;, + -8.058848;-4.693499;12.150805;, + -8.058848;-4.193499;12.150805;, + -9.808847;-4.193499;12.150805;, + -9.808847;-1.193501;12.150805;, + -9.808847;-1.193501;13.150805;, + -9.808847;-0.193501;13.150805;, + -9.808847;-0.193501;12.150805;, + -9.808847;-4.193499;10.150807;, + -9.808847;-4.193499; 9.150807;, + -8.058848;-4.193499; 9.150807;, + -8.058848;-4.193499;10.150807;, + -9.808847;-0.193501;12.150805;, + -9.808847;-0.193501;13.150805;, + -8.058848;-0.193501;13.150805;, + -8.058848;-0.193501;12.150805;, + -9.808847;-1.193501; 9.150807;, + -9.808847;-0.193501; 9.150807;, + -8.058848;-0.193501; 9.150807;, + -8.058848;-1.193501; 9.150807;, + -9.808847;-4.193499;12.150805;, + -9.808847;-4.193499;13.150805;, + -9.808847;-3.193499;13.150805;, + -9.808847;-3.193499;12.150805;, + -9.808847;-3.193499;12.150805;, + -9.808847;-3.193499;13.150805;, + -9.808847;-1.193501;13.150805;, + -9.808847;-1.193501;12.150805;, + -8.058848;-4.193499;12.150805;, + -8.058848;-3.193499;12.150805;, + -8.058848;-3.193499;13.150805;, + -8.058848;-4.193499;13.150805;, + -9.808847;-0.193501;13.150805;, + -9.808847;-1.193501;13.150805;, + -8.058848;-1.193501;13.150805;, + -8.058848;-0.193501;13.150805;, + -9.808847;-4.193499; 9.150807;, + -9.808847;-3.193499; 9.150807;, + -8.058848;-3.193499; 9.150807;, + -8.058848;-4.193499; 9.150807;, + -9.808847;-1.193501;10.150807;, + -9.808847;-1.193501;12.150805;, + -9.808847;-0.193501;12.150805;, + -9.808847;-0.193501;10.150807;, + -8.058848;-1.193501; 9.150807;, + -8.058848;-0.193501; 9.150807;, + -8.058848;-0.193501;10.150807;, + -8.058848;-1.193501;10.150807;, + -9.808847;-4.193499;13.150805;, + -9.808847;-4.193499;12.150805;, + -8.058848;-4.193499;12.150805;, + -8.058848;-4.193499;13.150805;, + -9.808847;-4.193499; 9.150807;, + -9.808847;-4.193499;10.150807;, + -9.808847;-3.193499;10.150807;, + -9.808847;-3.193499; 9.150807;, + -9.808847;-4.193499;10.150807;, + -9.808847;-4.193499;12.150805;, + -9.808847;-3.193499;12.150805;, + -9.808847;-3.193499;10.150807;, + -8.058848;-4.193499; 9.150807;, + -8.058848;-3.193499; 9.150807;, + -8.058848;-3.193499;10.150807;, + -8.058848;-4.193499;10.150807;, + -8.058848;-4.193499;10.150807;, + -8.058848;-3.193499;10.150807;, + -8.058848;-3.193499;12.150805;, + -8.058848;-4.193499;12.150805;, + -8.058848;-3.193499; 9.150807;, + -8.058848;-1.193501; 9.150807;, + -8.058848;-1.193501;10.150807;, + -8.058848;-3.193499;10.150807;, + -9.808847;-3.193499;13.650805;, + -9.808847;-1.193501;13.650805;, + -9.808847;-1.193501;13.150805;, + -9.808847;-3.193499;13.150805;, + -9.808847;-1.193501; 8.650807;, + -9.808847;-3.193499; 8.650807;, + -9.808847;-3.193499; 9.150807;, + -9.808847;-1.193501; 9.150807;, + -8.058848;-1.193501;13.650805;, + -8.058848;-3.193499;13.650805;, + -8.058848;-3.193499;13.150805;, + -8.058848;-1.193501;13.150805;, + -9.808847;-1.193501;13.650805;, + -8.058848;-1.193501;13.650805;, + -8.058848;-1.193501;13.150805;, + -9.808847;-1.193501;13.150805;, + -8.058848;-3.193499;13.650805;, + -9.808847;-3.193499;13.650805;, + -9.808847;-3.193499;13.150805;, + -8.058848;-3.193499;13.150805;, + -9.808847;-3.193499; 8.650807;, + -8.058848;-3.193499; 8.650807;, + -8.058848;-3.193499; 9.150807;, + -9.808847;-3.193499; 9.150807;, + -8.058848;-1.193501; 8.650807;, + -9.808847;-1.193501; 8.650807;, + -9.808847;-1.193501; 9.150807;, + -8.058848;-1.193501; 9.150807;, + -9.808847; 0.306499;12.150805;, + -9.808847; 0.306499;10.150807;, + -9.808847;-0.193501;10.150807;, + -9.808847;-0.193501;12.150805;, + -8.058848;-4.693499;12.150805;, + -8.058848;-4.693499;10.150807;, + -8.058848;-4.193499;10.150807;, + -8.058848;-4.193499;12.150805;, + -8.058848; 0.306499;10.150807;, + -8.058848; 0.306499;12.150805;, + -8.058848;-0.193501;12.150805;, + -8.058848;-0.193501;10.150807;, + -8.058848;-4.693499;10.150807;, + -9.808847;-4.693499;10.150807;, + -9.808847;-4.193499;10.150807;, + -8.058848;-4.193499;10.150807;, + -9.808847; 0.306499;10.150807;, + -8.058848; 0.306499;10.150807;, + -8.058848;-0.193501;10.150807;, + -9.808847;-0.193501;10.150807;, + -8.058848; 0.306499;12.150805;, + -9.808847; 0.306499;12.150805;, + -9.808847;-0.193501;12.150805;, + -8.058848;-0.193501;12.150805;, + -8.058848;-1.193501;-10.349185;, + -8.058848;-0.193501;-10.349185;, + -8.058848;-0.193501;-9.349185;, + -8.058848;-1.193501;-9.349185;, + -9.808847;-3.193499;-9.349185;, + -9.808847;-4.193499;-9.349185;, + -8.058848;-4.193499;-9.349185;, + -8.058848;-3.193499;-9.349185;, + -8.058848;-3.193499;-10.349185;, + -8.058848;-1.193501;-10.349185;, + -8.058848;-1.193501;-9.349185;, + -8.058848;-3.193499;-9.349185;, + -9.808847;-1.193501;-13.349183;, + -9.808847;-1.193501;-12.349183;, + -9.808847;-0.193501;-12.349183;, + -9.808847;-0.193501;-13.349183;, + -8.058848;-1.193501;-12.349183;, + -8.058848;-0.193501;-12.349183;, + -8.058848;-0.193501;-10.349185;, + -8.058848;-1.193501;-10.349185;, + -9.808847;-0.193501;-13.349183;, + -9.808847;-0.193501;-12.349183;, + -8.058848;-0.193501;-12.349183;, + -8.058848;-0.193501;-13.349183;, + -9.808847;-3.193499;-13.349183;, + -9.808847;-3.193499;-12.349183;, + -9.808847;-1.193501;-12.349183;, + -9.808847;-1.193501;-13.349183;, + -9.808847;-3.193499;-12.349183;, + -9.808847;-3.193499;-10.349185;, + -9.808847;-1.193501;-10.349185;, + -9.808847;-1.193501;-12.349183;, + -8.058848;-3.193499;-12.349183;, + -8.058848;-1.193501;-12.349183;, + -8.058848;-1.193501;-10.349185;, + -8.058848;-3.193499;-10.349185;, + -9.808847;-1.193501;-8.849185;, + -9.808847;-3.193499;-8.849185;, + -8.058848;-3.193499;-8.849185;, + -8.058848;-1.193501;-8.849185;, + -9.808847;-3.193499;-13.849183;, + -9.808847;-1.193501;-13.849183;, + -8.058848;-1.193501;-13.849183;, + -8.058848;-3.193499;-13.849183;, + -9.808847;-4.693499;-10.349185;, + -9.808847;-4.693499;-12.349183;, + -8.058848;-4.693499;-12.349183;, + -8.058848;-4.693499;-10.349185;, + -9.808847; 0.306499;-12.349183;, + -9.808847; 0.306499;-10.349185;, + -8.058848; 0.306499;-10.349185;, + -8.058848; 0.306499;-12.349183;, + -8.058848;-3.193499;-13.849183;, + -8.058848;-1.193501;-13.849183;, + -8.058848;-1.193501;-13.349183;, + -8.058848;-3.193499;-13.349183;, + -9.808847;-4.693499;-12.349183;, + -9.808847;-4.693499;-10.349185;, + -9.808847;-4.193499;-10.349185;, + -9.808847;-4.193499;-12.349183;, + -9.808847;-4.693499;-10.349185;, + -8.058848;-4.693499;-10.349185;, + -8.058848;-4.193499;-10.349185;, + -9.808847;-4.193499;-10.349185;, + -9.808847;-1.193501;-10.349185;, + -9.808847;-1.193501;-9.349185;, + -9.808847;-0.193501;-9.349185;, + -9.808847;-0.193501;-10.349185;, + -9.808847;-4.193499;-12.349183;, + -9.808847;-4.193499;-13.349183;, + -8.058848;-4.193499;-13.349183;, + -8.058848;-4.193499;-12.349183;, + -9.808847;-0.193501;-10.349185;, + -9.808847;-0.193501;-9.349185;, + -8.058848;-0.193501;-9.349185;, + -8.058848;-0.193501;-10.349185;, + -9.808847;-1.193501;-13.349183;, + -9.808847;-0.193501;-13.349183;, + -8.058848;-0.193501;-13.349183;, + -8.058848;-1.193501;-13.349183;, + -9.808847;-4.193499;-10.349185;, + -9.808847;-4.193499;-9.349185;, + -9.808847;-3.193499;-9.349185;, + -9.808847;-3.193499;-10.349185;, + -9.808847;-3.193499;-10.349185;, + -9.808847;-3.193499;-9.349185;, + -9.808847;-1.193501;-9.349185;, + -9.808847;-1.193501;-10.349185;, + -8.058848;-4.193499;-10.349185;, + -8.058848;-3.193499;-10.349185;, + -8.058848;-3.193499;-9.349185;, + -8.058848;-4.193499;-9.349185;, + -9.808847;-0.193501;-9.349185;, + -9.808847;-1.193501;-9.349185;, + -8.058848;-1.193501;-9.349185;, + -8.058848;-0.193501;-9.349185;, + -9.808847;-4.193499;-13.349183;, + -9.808847;-3.193499;-13.349183;, + -8.058848;-3.193499;-13.349183;, + -8.058848;-4.193499;-13.349183;, + -9.808847;-1.193501;-12.349183;, + -9.808847;-1.193501;-10.349185;, + -9.808847;-0.193501;-10.349185;, + -9.808847;-0.193501;-12.349183;, + -8.058848;-1.193501;-13.349183;, + -8.058848;-0.193501;-13.349183;, + -8.058848;-0.193501;-12.349183;, + -8.058848;-1.193501;-12.349183;, + -9.808847;-4.193499;-9.349185;, + -9.808847;-4.193499;-10.349185;, + -8.058848;-4.193499;-10.349185;, + -8.058848;-4.193499;-9.349185;, + -9.808847;-4.193499;-13.349183;, + -9.808847;-4.193499;-12.349183;, + -9.808847;-3.193499;-12.349183;, + -9.808847;-3.193499;-13.349183;, + -9.808847;-4.193499;-12.349183;, + -9.808847;-4.193499;-10.349185;, + -9.808847;-3.193499;-10.349185;, + -9.808847;-3.193499;-12.349183;, + -8.058848;-4.193499;-13.349183;, + -8.058848;-3.193499;-13.349183;, + -8.058848;-3.193499;-12.349183;, + -8.058848;-4.193499;-12.349183;, + -8.058848;-4.193499;-12.349183;, + -8.058848;-3.193499;-12.349183;, + -8.058848;-3.193499;-10.349185;, + -8.058848;-4.193499;-10.349185;, + -8.058848;-3.193499;-13.349183;, + -8.058848;-1.193501;-13.349183;, + -8.058848;-1.193501;-12.349183;, + -8.058848;-3.193499;-12.349183;, + -9.808847;-3.193499;-8.849185;, + -9.808847;-1.193501;-8.849185;, + -9.808847;-1.193501;-9.349185;, + -9.808847;-3.193499;-9.349185;, + -9.808847;-1.193501;-13.849183;, + -9.808847;-3.193499;-13.849183;, + -9.808847;-3.193499;-13.349183;, + -9.808847;-1.193501;-13.349183;, + -8.058848;-1.193501;-8.849185;, + -8.058848;-3.193499;-8.849185;, + -8.058848;-3.193499;-9.349185;, + -8.058848;-1.193501;-9.349185;, + -9.808847;-1.193501;-8.849185;, + -8.058848;-1.193501;-8.849185;, + -8.058848;-1.193501;-9.349185;, + -9.808847;-1.193501;-9.349185;, + -8.058848;-3.193499;-8.849185;, + -9.808847;-3.193499;-8.849185;, + -9.808847;-3.193499;-9.349185;, + -8.058848;-3.193499;-9.349185;, + -9.808847;-3.193499;-13.849183;, + -8.058848;-3.193499;-13.849183;, + -8.058848;-3.193499;-13.349183;, + -9.808847;-3.193499;-13.349183;, + -8.058848;-1.193501;-13.849183;, + -9.808847;-1.193501;-13.849183;, + -9.808847;-1.193501;-13.349183;, + -8.058848;-1.193501;-13.349183;, + -9.808847; 0.306499;-10.349185;, + -9.808847; 0.306499;-12.349183;, + -9.808847;-0.193501;-12.349183;, + -9.808847;-0.193501;-10.349185;, + -8.058848;-4.693499;-10.349185;, + -8.058848;-4.693499;-12.349183;, + -8.058848;-4.193499;-12.349183;, + -8.058848;-4.193499;-10.349185;, + -8.058848; 0.306499;-12.349183;, + -8.058848; 0.306499;-10.349185;, + -8.058848;-0.193501;-10.349185;, + -8.058848;-0.193501;-12.349183;, + -8.058848;-4.693499;-12.349183;, + -9.808847;-4.693499;-12.349183;, + -9.808847;-4.193499;-12.349183;, + -8.058848;-4.193499;-12.349183;, + -9.808847; 0.306499;-12.349183;, + -8.058848; 0.306499;-12.349183;, + -8.058848;-0.193501;-12.349183;, + -9.808847;-0.193501;-12.349183;, + -8.058848; 0.306499;-10.349185;, + -9.808847; 0.306499;-10.349185;, + -9.808847;-0.193501;-10.349185;, + -8.058848;-0.193501;-10.349185;, + 1.691148; 5.806497; 6.400808;, + 1.691148; 5.806497; 5.650808;, + 1.691148; 1.306499; 5.650808;, + 1.691148; 1.306499; 6.400808;, + 1.691148; 5.806497; 5.650808;, + 6.191145; 5.806497; 5.650808;, + 6.191145; 1.306499; 5.650808;, + 1.691148; 1.306499; 5.650808;, + 6.191145; 5.806497; 5.650808;, + 6.191145; 5.806497; 6.400808;, + 6.191145; 1.306499; 6.400808;, + 6.191145; 1.306499; 5.650808;, + 6.191145; 5.806497; 6.400808;, + 6.191145; 5.806497; 5.650808;, + 1.691148; 5.806497; 5.650808;, + 1.691148; 5.806497; 6.400808;, + 1.691148; 1.306499; 6.400808;, + 6.191145; 1.306499; 6.400808;, + 6.191145; 5.806497; 6.400808;, + 1.691148; 5.806497; 6.400808;, + 7.691145; 6.556496;-6.099187;, + 7.691145;-0.943501;-6.099187;, + 7.691145;-0.943501;-7.599186;, + 7.691145; 6.556496;-7.599186;, + 7.691145; 6.556496;-7.599186;, + 7.691145;-0.943501;-7.599186;, + 0.191149;-0.943501;-7.599186;, + 0.191149; 6.556496;-7.599186;, + 7.691145;-0.943501;-7.599186;, + 0.191149;-0.943501;-7.599186;, + 0.191149;-0.943501;-1.099189;, + 7.691145;-0.943501;-1.099189;, + 0.191149;-0.943501;-7.599186;, + 0.191149;-2.443500;-7.599186;, + 0.191149;-2.443500;-1.099189;, + 0.191149;-0.943501;-1.099189;, + 7.691145; 6.556496; 1.150810;, + 7.691145;-0.943501; 1.150810;, + 7.691145;-0.943501;-0.349189;, + 7.691145; 6.556496;-0.349189;, + 0.191149; 6.556496;-0.349189;, + 0.191149;-0.943501;-0.349189;, + 0.191149;-0.943501; 1.150810;, + 0.191149; 6.556496; 1.150810;, + 7.691145; 6.556496;-0.349189;, + 7.691145;-0.943501;-0.349189;, + 0.191149;-0.943501;-0.349189;, + 0.191149; 6.556496;-0.349189;, + -0.308851; 6.556496;-7.599186;, + -0.308851; 6.556496;-6.099187;, + -0.308851;-0.943501;-6.099187;, + -0.308851;-0.943501;-7.599186;, + -7.808848; 6.556496;-7.599186;, + -0.308851; 6.556496;-7.599186;, + -0.308851;-0.943501;-7.599186;, + -7.808848;-0.943501;-7.599186;, + -7.808848;-0.943501;-7.599186;, + -7.808848;-0.943501;-1.099189;, + -0.308851;-0.943501;-1.099189;, + -0.308851;-0.943501;-7.599186;, + -7.808848; 6.556496; 1.150810;, + -7.808848; 6.556496;-0.349189;, + -7.808848;-0.943501;-0.349189;, + -7.808848;-0.943501; 1.150810;, + -7.808848; 6.556496;-0.349189;, + -0.308851; 6.556496;-0.349189;, + -0.308851;-0.943501;-0.349189;, + -7.808848;-0.943501;-0.349189;, + -7.808848;-0.943501;-0.349189;, + -7.808848;-0.943501; 6.150808;, + -0.308851;-0.943501; 6.150808;, + -0.308851;-0.943501;-0.349189;, + -0.308851;-0.943501;-0.349189;, + -0.308851;-0.943501; 6.150808;, + -0.308851;-2.443500; 6.150808;, + -0.308851;-2.443500;-0.349189;, + 7.941145; 3.556497; 6.900808;, + 7.941145; 3.556497; 4.900809;, + 7.691145; 3.556497; 4.900809;, + 7.691145; 3.556497; 6.650808;, + -8.058848; 3.556497; 6.900808;, + 7.941145; 3.556497; 6.900808;, + 7.691145; 3.556497; 6.650808;, + -7.808848; 3.556497; 6.650808;, + -8.058848; 3.556497; 4.900809;, + -8.058848; 3.556497; 6.900808;, + -7.808848; 3.556497; 6.650808;, + -7.808848; 3.556497; 4.900809;; + 365; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 4;339,338,337,336;, + 4;343,342,341,340;, + 4;347,346,345,344;, + 4;351,350,349,348;, + 4;355,354,353,352;, + 4;359,358,357,356;, + 4;363,362,361,360;, + 4;367,366,365,364;, + 4;371,370,369,368;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 4;471,470,469,468;, + 4;475,474,473,472;, + 4;479,478,477,476;, + 4;483,482,481,480;, + 4;487,486,485,484;, + 4;491,490,489,488;, + 4;495,494,493,492;, + 4;499,498,497,496;, + 4;503,502,501,500;, + 4;507,506,505,504;, + 4;511,510,509,508;, + 4;515,514,513,512;, + 4;519,518,517,516;, + 4;523,522,521,520;, + 4;527,526,525,524;, + 4;531,530,529,528;, + 4;535,534,533,532;, + 4;539,538,537,536;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 4;615,614,613,612;, + 4;619,618,617,616;, + 4;623,622,621,620;, + 4;627,626,625,624;, + 4;631,630,629,628;, + 4;635,634,633,632;, + 4;639,638,637,636;, + 4;643,642,641,640;, + 4;647,646,645,644;, + 4;651,650,649,648;, + 4;655,654,653,652;, + 4;659,658,657,656;, + 4;663,662,661,660;, + 4;667,666,665,664;, + 4;671,670,669,668;, + 4;675,674,673,672;, + 4;679,678,677,676;, + 4;683,682,681,680;, + 4;687,686,685,684;, + 4;691,690,689,688;, + 4;695,694,693,692;, + 4;699,698,697,696;, + 4;703,702,701,700;, + 4;707,706,705,704;, + 4;711,710,709,708;, + 4;715,714,713,712;, + 4;719,718,717,716;, + 4;723,722,721,720;, + 4;727,726,725,724;, + 4;731,730,729,728;, + 4;735,734,733,732;, + 4;739,738,737,736;, + 4;743,742,741,740;, + 4;747,746,745,744;, + 4;751,750,749,748;, + 4;755,754,753,752;, + 4;759,758,757,756;, + 4;763,762,761,760;, + 4;767,766,765,764;, + 4;771,770,769,768;, + 4;775,774,773,772;, + 4;779,778,777,776;, + 4;783,782,781,780;, + 4;787,786,785,784;, + 4;791,790,789,788;, + 4;795,794,793,792;, + 4;799,798,797,796;, + 4;803,802,801,800;, + 4;807,806,805,804;, + 4;811,810,809,808;, + 4;815,814,813,812;, + 4;819,818,817,816;, + 4;823,822,821,820;, + 4;827,826,825,824;, + 4;831,830,829,828;, + 4;835,834,833,832;, + 4;839,838,837,836;, + 4;843,842,841,840;, + 4;847,846,845,844;, + 4;851,850,849,848;, + 4;855,854,853,852;, + 4;859,858,857,856;, + 4;863,862,861,860;, + 4;867,866,865,864;, + 4;871,870,869,868;, + 4;875,874,873,872;, + 4;879,878,877,876;, + 4;883,882,881,880;, + 4;887,886,885,884;, + 4;891,890,889,888;, + 4;895,894,893,892;, + 4;899,898,897,896;, + 4;903,902,901,900;, + 4;907,906,905,904;, + 4;911,910,909,908;, + 4;915,914,913,912;, + 4;919,918,917,916;, + 4;923,922,921,920;, + 4;927,926,925,924;, + 4;931,930,929,928;, + 4;935,934,933,932;, + 4;939,938,937,936;, + 4;943,942,941,940;, + 4;947,946,945,944;, + 4;951,950,949,948;, + 4;955,954,953,952;, + 4;959,958,957,956;, + 4;963,962,961,960;, + 4;967,966,965,964;, + 4;971,970,969,968;, + 4;975,974,973,972;, + 4;979,978,977,976;, + 4;983,982,981,980;, + 4;987,986,985,984;, + 4;991,990,989,988;, + 4;995,994,993,992;, + 4;999,998,997,996;, + 4;1003,1002,1001,1000;, + 4;1007,1006,1005,1004;, + 4;1011,1010,1009,1008;, + 4;1015,1014,1013,1012;, + 4;1019,1018,1017,1016;, + 4;1023,1022,1021,1020;, + 4;1027,1026,1025,1024;, + 4;1031,1030,1029,1028;, + 4;1035,1034,1033,1032;, + 4;1039,1038,1037,1036;, + 4;1043,1042,1041,1040;, + 4;1047,1046,1045,1044;, + 4;1051,1050,1049,1048;, + 4;1055,1054,1053,1052;, + 4;1059,1058,1057,1056;, + 4;1063,1062,1061,1060;, + 4;1067,1066,1065,1064;, + 4;1071,1070,1069,1068;, + 4;1075,1074,1073,1072;, + 4;1079,1078,1077,1076;, + 4;1083,1082,1081,1080;, + 4;1087,1086,1085,1084;, + 4;1091,1090,1089,1088;, + 4;1095,1094,1093,1092;, + 4;1099,1098,1097,1096;, + 4;1103,1102,1101,1100;, + 4;1107,1106,1105,1104;, + 4;1111,1110,1109,1108;, + 4;1115,1114,1113,1112;, + 4;1119,1118,1117,1116;, + 4;1123,1122,1121,1120;, + 4;1127,1126,1125,1124;, + 4;1131,1130,1129,1128;, + 4;1135,1134,1133,1132;, + 4;1139,1138,1137,1136;, + 4;1143,1142,1141,1140;, + 4;1147,1146,1145,1144;, + 4;1151,1150,1149,1148;, + 4;1155,1154,1153,1152;, + 4;1159,1158,1157,1156;, + 4;1163,1162,1161,1160;, + 4;1167,1166,1165,1164;, + 4;1171,1170,1169,1168;, + 4;1175,1174,1173,1172;, + 4;1179,1178,1177,1176;, + 4;1183,1182,1181,1180;, + 4;1187,1186,1185,1184;, + 4;1191,1190,1189,1188;, + 4;1195,1194,1193,1192;, + 4;1199,1198,1197,1196;, + 4;1203,1202,1201,1200;, + 4;1207,1206,1205,1204;, + 4;1211,1210,1209,1208;, + 4;1215,1214,1213,1212;, + 4;1219,1218,1217,1216;, + 4;1223,1222,1221,1220;, + 4;1227,1226,1225,1224;, + 4;1231,1230,1229,1228;, + 4;1235,1234,1233,1232;, + 4;1239,1238,1237,1236;, + 4;1243,1242,1241,1240;, + 4;1247,1246,1245,1244;, + 4;1251,1250,1249,1248;, + 4;1255,1254,1253,1252;, + 4;1259,1258,1257,1256;, + 4;1263,1262,1261,1260;, + 4;1267,1266,1265,1264;, + 4;1271,1270,1269,1268;, + 4;1275,1274,1273,1272;, + 4;1279,1278,1277,1276;, + 4;1283,1282,1281,1280;, + 4;1287,1286,1285,1284;, + 4;1291,1290,1289,1288;, + 4;1295,1294,1293,1292;, + 4;1299,1298,1297,1296;, + 4;1303,1302,1301,1300;, + 4;1307,1306,1305,1304;, + 4;1311,1310,1309,1308;, + 4;1315,1314,1313,1312;, + 4;1319,1318,1317,1316;, + 4;1323,1322,1321,1320;, + 4;1327,1326,1325,1324;, + 4;1331,1330,1329,1328;, + 4;1335,1334,1333,1332;, + 4;1339,1338,1337,1336;, + 4;1343,1342,1341,1340;, + 4;1347,1346,1345,1344;, + 4;1351,1350,1349,1348;, + 4;1355,1354,1353,1352;, + 4;1359,1358,1357,1356;, + 4;1363,1362,1361,1360;, + 4;1367,1366,1365,1364;, + 4;1371,1370,1369,1368;, + 4;1375,1374,1373,1372;, + 4;1379,1378,1377,1376;, + 4;1383,1382,1381,1380;, + 4;1387,1386,1385,1384;, + 4;1391,1390,1389,1388;, + 4;1395,1394,1393,1392;, + 4;1399,1398,1397,1396;, + 4;1403,1402,1401,1400;, + 4;1407,1406,1405,1404;, + 4;1411,1410,1409,1408;, + 4;1415,1414,1413,1412;, + 4;1419,1418,1417,1416;, + 4;1423,1422,1421,1420;, + 4;1427,1426,1425,1424;, + 4;1431,1430,1429,1428;, + 4;1435,1434,1433,1432;, + 4;1439,1438,1437,1436;, + 4;1443,1442,1441,1440;, + 4;1447,1446,1445,1444;, + 4;1451,1450,1449,1448;, + 4;1455,1454,1453,1452;, + 4;1459,1458,1457,1456;; + MeshNormals { // _0002 normals + 1460; + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;; + 365; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 4;339,338,337,336;, + 4;343,342,341,340;, + 4;347,346,345,344;, + 4;351,350,349,348;, + 4;355,354,353,352;, + 4;359,358,357,356;, + 4;363,362,361,360;, + 4;367,366,365,364;, + 4;371,370,369,368;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 4;471,470,469,468;, + 4;475,474,473,472;, + 4;479,478,477,476;, + 4;483,482,481,480;, + 4;487,486,485,484;, + 4;491,490,489,488;, + 4;495,494,493,492;, + 4;499,498,497,496;, + 4;503,502,501,500;, + 4;507,506,505,504;, + 4;511,510,509,508;, + 4;515,514,513,512;, + 4;519,518,517,516;, + 4;523,522,521,520;, + 4;527,526,525,524;, + 4;531,530,529,528;, + 4;535,534,533,532;, + 4;539,538,537,536;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 4;615,614,613,612;, + 4;619,618,617,616;, + 4;623,622,621,620;, + 4;627,626,625,624;, + 4;631,630,629,628;, + 4;635,634,633,632;, + 4;639,638,637,636;, + 4;643,642,641,640;, + 4;647,646,645,644;, + 4;651,650,649,648;, + 4;655,654,653,652;, + 4;659,658,657,656;, + 4;663,662,661,660;, + 4;667,666,665,664;, + 4;671,670,669,668;, + 4;675,674,673,672;, + 4;679,678,677,676;, + 4;683,682,681,680;, + 4;687,686,685,684;, + 4;691,690,689,688;, + 4;695,694,693,692;, + 4;699,698,697,696;, + 4;703,702,701,700;, + 4;707,706,705,704;, + 4;711,710,709,708;, + 4;715,714,713,712;, + 4;719,718,717,716;, + 4;723,722,721,720;, + 4;727,726,725,724;, + 4;731,730,729,728;, + 4;735,734,733,732;, + 4;739,738,737,736;, + 4;743,742,741,740;, + 4;747,746,745,744;, + 4;751,750,749,748;, + 4;755,754,753,752;, + 4;759,758,757,756;, + 4;763,762,761,760;, + 4;767,766,765,764;, + 4;771,770,769,768;, + 4;775,774,773,772;, + 4;779,778,777,776;, + 4;783,782,781,780;, + 4;787,786,785,784;, + 4;791,790,789,788;, + 4;795,794,793,792;, + 4;799,798,797,796;, + 4;803,802,801,800;, + 4;807,806,805,804;, + 4;811,810,809,808;, + 4;815,814,813,812;, + 4;819,818,817,816;, + 4;823,822,821,820;, + 4;827,826,825,824;, + 4;831,830,829,828;, + 4;835,834,833,832;, + 4;839,838,837,836;, + 4;843,842,841,840;, + 4;847,846,845,844;, + 4;851,850,849,848;, + 4;855,854,853,852;, + 4;859,858,857,856;, + 4;863,862,861,860;, + 4;867,866,865,864;, + 4;871,870,869,868;, + 4;875,874,873,872;, + 4;879,878,877,876;, + 4;883,882,881,880;, + 4;887,886,885,884;, + 4;891,890,889,888;, + 4;895,894,893,892;, + 4;899,898,897,896;, + 4;903,902,901,900;, + 4;907,906,905,904;, + 4;911,910,909,908;, + 4;915,914,913,912;, + 4;919,918,917,916;, + 4;923,922,921,920;, + 4;927,926,925,924;, + 4;931,930,929,928;, + 4;935,934,933,932;, + 4;939,938,937,936;, + 4;943,942,941,940;, + 4;947,946,945,944;, + 4;951,950,949,948;, + 4;955,954,953,952;, + 4;959,958,957,956;, + 4;963,962,961,960;, + 4;967,966,965,964;, + 4;971,970,969,968;, + 4;975,974,973,972;, + 4;979,978,977,976;, + 4;983,982,981,980;, + 4;987,986,985,984;, + 4;991,990,989,988;, + 4;995,994,993,992;, + 4;999,998,997,996;, + 4;1003,1002,1001,1000;, + 4;1007,1006,1005,1004;, + 4;1011,1010,1009,1008;, + 4;1015,1014,1013,1012;, + 4;1019,1018,1017,1016;, + 4;1023,1022,1021,1020;, + 4;1027,1026,1025,1024;, + 4;1031,1030,1029,1028;, + 4;1035,1034,1033,1032;, + 4;1039,1038,1037,1036;, + 4;1043,1042,1041,1040;, + 4;1047,1046,1045,1044;, + 4;1051,1050,1049,1048;, + 4;1055,1054,1053,1052;, + 4;1059,1058,1057,1056;, + 4;1063,1062,1061,1060;, + 4;1067,1066,1065,1064;, + 4;1071,1070,1069,1068;, + 4;1075,1074,1073,1072;, + 4;1079,1078,1077,1076;, + 4;1083,1082,1081,1080;, + 4;1087,1086,1085,1084;, + 4;1091,1090,1089,1088;, + 4;1095,1094,1093,1092;, + 4;1099,1098,1097,1096;, + 4;1103,1102,1101,1100;, + 4;1107,1106,1105,1104;, + 4;1111,1110,1109,1108;, + 4;1115,1114,1113,1112;, + 4;1119,1118,1117,1116;, + 4;1123,1122,1121,1120;, + 4;1127,1126,1125,1124;, + 4;1131,1130,1129,1128;, + 4;1135,1134,1133,1132;, + 4;1139,1138,1137,1136;, + 4;1143,1142,1141,1140;, + 4;1147,1146,1145,1144;, + 4;1151,1150,1149,1148;, + 4;1155,1154,1153,1152;, + 4;1159,1158,1157,1156;, + 4;1163,1162,1161,1160;, + 4;1167,1166,1165,1164;, + 4;1171,1170,1169,1168;, + 4;1175,1174,1173,1172;, + 4;1179,1178,1177,1176;, + 4;1183,1182,1181,1180;, + 4;1187,1186,1185,1184;, + 4;1191,1190,1189,1188;, + 4;1195,1194,1193,1192;, + 4;1199,1198,1197,1196;, + 4;1203,1202,1201,1200;, + 4;1207,1206,1205,1204;, + 4;1211,1210,1209,1208;, + 4;1215,1214,1213,1212;, + 4;1219,1218,1217,1216;, + 4;1223,1222,1221,1220;, + 4;1227,1226,1225,1224;, + 4;1231,1230,1229,1228;, + 4;1235,1234,1233,1232;, + 4;1239,1238,1237,1236;, + 4;1243,1242,1241,1240;, + 4;1247,1246,1245,1244;, + 4;1251,1250,1249,1248;, + 4;1255,1254,1253,1252;, + 4;1259,1258,1257,1256;, + 4;1263,1262,1261,1260;, + 4;1267,1266,1265,1264;, + 4;1271,1270,1269,1268;, + 4;1275,1274,1273,1272;, + 4;1279,1278,1277,1276;, + 4;1283,1282,1281,1280;, + 4;1287,1286,1285,1284;, + 4;1291,1290,1289,1288;, + 4;1295,1294,1293,1292;, + 4;1299,1298,1297,1296;, + 4;1303,1302,1301,1300;, + 4;1307,1306,1305,1304;, + 4;1311,1310,1309,1308;, + 4;1315,1314,1313,1312;, + 4;1319,1318,1317,1316;, + 4;1323,1322,1321,1320;, + 4;1327,1326,1325,1324;, + 4;1331,1330,1329,1328;, + 4;1335,1334,1333,1332;, + 4;1339,1338,1337,1336;, + 4;1343,1342,1341,1340;, + 4;1347,1346,1345,1344;, + 4;1351,1350,1349,1348;, + 4;1355,1354,1353,1352;, + 4;1359,1358,1357,1356;, + 4;1363,1362,1361,1360;, + 4;1367,1366,1365,1364;, + 4;1371,1370,1369,1368;, + 4;1375,1374,1373,1372;, + 4;1379,1378,1377,1376;, + 4;1383,1382,1381,1380;, + 4;1387,1386,1385,1384;, + 4;1391,1390,1389,1388;, + 4;1395,1394,1393,1392;, + 4;1399,1398,1397,1396;, + 4;1403,1402,1401,1400;, + 4;1407,1406,1405,1404;, + 4;1411,1410,1409,1408;, + 4;1415,1414,1413,1412;, + 4;1419,1418,1417,1416;, + 4;1423,1422,1421,1420;, + 4;1427,1426,1425,1424;, + 4;1431,1430,1429,1428;, + 4;1435,1434,1433,1432;, + 4;1439,1438,1437,1436;, + 4;1443,1442,1441,1440;, + 4;1447,1446,1445,1444;, + 4;1451,1450,1449,1448;, + 4;1455,1454,1453,1452;, + 4;1459,1458,1457,1456;; + } // End of _0002 normals + MeshTextureCoords { // _0002 UV coordinates + 1460; + 0.943548; 0.921875;, + 0.943548; 0.984375;, + 1.000000; 0.984375;, + 1.000000; 0.921875;, + 1.000000; 0.921875;, + 1.000000; 0.421875;, + 0.943548; 0.421875;, + 0.943548; 0.921875;, + 1.000000; 0.421875;, + 1.000000; 0.359375;, + 0.943548; 0.359375;, + 0.943548; 0.421875;, + 0.943548; 0.984375;, + 0.943548; 1.000000;, + 1.000000; 1.000000;, + 1.000000; 0.984375;, + 0.943548; 0.421875;, + 1.000000; 0.421875;, + 1.000000; 0.359375;, + 0.943548; 0.359375;, + 0.943548; 0.359375;, + 1.000000; 0.359375;, + 1.000000; 0.343750;, + 0.943548; 0.343750;, + 1.000000; 0.921875;, + 0.943548; 0.921875;, + 0.943548; 0.984375;, + 1.000000; 0.984375;, + 0.943548; 0.421875;, + 0.943548; 0.921875;, + 1.000000; 0.921875;, + 1.000000; 0.421875;, + 0.822581; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.015625;, + 0.822581; 0.015625;, + 0.822581; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.959677; 0.062500;, + 0.822581; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.015625;, + 0.822581; 0.015625;, + 0.822581; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.093750;, + 0.822581; 0.093750;, + 0.919355; 0.375000;, + 0.919355; 0.421875;, + 0.822581; 0.421875;, + 0.822581; 0.375000;, + 0.935484; 0.062500;, + 0.935484; 0.015625;, + 0.822581; 0.015625;, + 0.822581; 0.062500;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.935484; 0.062500;, + 0.822581; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.919355; 0.375000;, + 0.822581; 0.375000;, + 0.822581; 0.421875;, + 0.919355; 0.421875;, + 0.935484; 0.062500;, + 0.935484; 0.015625;, + 0.822581; 0.015625;, + 0.822581; 0.062500;, + 0.935484; 0.062500;, + 0.822581; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.629032; 0.000000;, + 0.629032; 0.031250;, + 0.693548; 0.031250;, + 0.693548; 0.000000;, + 0.629032; 0.937500;, + 0.629032; 0.968750;, + 0.693548; 0.968750;, + 0.693548; 0.937500;, + 0.306452; 0.046875;, + 0.306452; 0.015625;, + 0.290323; 0.015625;, + 0.290323; 0.046875;, + 0.629032; 0.656250;, + 0.629032; 0.718750;, + 0.693548; 0.718750;, + 0.693548; 0.656250;, + 0.306452; 0.750000;, + 0.306452; 0.703125;, + 0.290323; 0.703125;, + 0.290323; 0.750000;, + 0.620968; 0.937500;, + 0.620968; 0.968750;, + 0.629032; 0.968750;, + 0.629032; 0.937500;, + 0.620968; 0.000000;, + 0.620968; 0.031250;, + 0.629032; 0.031250;, + 0.629032; 0.000000;, + 0.620968; 0.656250;, + 0.620968; 0.718750;, + 0.629032; 0.718750;, + 0.629032; 0.656250;, + 0.620968; 0.765625;, + 0.620968; 0.937500;, + 0.629032; 0.937500;, + 0.629032; 0.765625;, + 0.306452; 0.953125;, + 0.306452; 0.921875;, + 0.290323; 0.921875;, + 0.290323; 0.953125;, + 0.620968; 0.718750;, + 0.620968; 0.765625;, + 0.629032; 0.765625;, + 0.629032; 0.718750;, + 0.629032; 0.718750;, + 0.629032; 0.765625;, + 0.693548; 0.765625;, + 0.693548; 0.718750;, + 0.629032; 0.031250;, + 0.629032; 0.062500;, + 0.693548; 0.062500;, + 0.693548; 0.031250;, + 0.620968; 0.031250;, + 0.620968; 0.062500;, + 0.629032; 0.062500;, + 0.629032; 0.031250;, + 0.629032; 0.968750;, + 0.629032; 1.000000;, + 0.693548; 1.000000;, + 0.693548; 0.968750;, + 0.016129; 0.125000;, + 0.266129; 0.125000;, + 0.266129; 0.000000;, + 0.016129; 0.000000;, + 0.556452; 0.750000;, + 0.556452; 0.703125;, + 0.306452; 0.703125;, + 0.306452; 0.750000;, + 0.604839; 0.765625;, + 0.604839; 0.718750;, + 0.588710; 0.718750;, + 0.588710; 0.765625;, + 0.620968; 0.968750;, + 0.620968; 1.000000;, + 0.629032; 1.000000;, + 0.629032; 0.968750;, + 0.604839; 0.968750;, + 0.604839; 0.937500;, + 0.588710; 0.937500;, + 0.588710; 0.968750;, + 0.862903; 1.000000;, + 0.862903; 0.875000;, + 0.774194; 0.875000;, + 0.774194; 1.000000;, + 0.604839; 0.937500;, + 0.604839; 0.765625;, + 0.588710; 0.765625;, + 0.588710; 0.937500;, + 0.879032; 1.000000;, + 0.879032; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 1.000000;, + 0.879032; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 1.000000;, + 0.879032; 1.000000;, + 0.758065; 0.875000;, + 0.758065; 1.000000;, + 0.774194; 1.000000;, + 0.774194; 0.875000;, + 0.862903; 0.843750;, + 0.774194; 0.843750;, + 0.774194; 0.875000;, + 0.862903; 0.875000;, + 0.282258; 0.859375;, + 0.282258; 0.828125;, + 0.266129; 0.828125;, + 0.266129; 0.859375;, + 0.282258; 0.703125;, + 0.282258; 0.531250;, + 0.266129; 0.531250;, + 0.266129; 0.703125;, + 0.604839; 0.234375;, + 0.588710; 0.234375;, + 0.588710; 0.656250;, + 0.604839; 0.656250;, + 0.016129; 0.765625;, + 0.266129; 0.765625;, + 0.266129; 0.734375;, + 0.016129; 0.734375;, + 0.282258; 0.734375;, + 0.282258; 0.703125;, + 0.266129; 0.703125;, + 0.266129; 0.734375;, + 0.282258; 0.531250;, + 0.282258; 0.484375;, + 0.266129; 0.484375;, + 0.266129; 0.531250;, + 0.604839; 0.937500;, + 0.604839; 0.968750;, + 0.620968; 0.968750;, + 0.620968; 0.937500;, + 0.604839; 0.656250;, + 0.604839; 0.718750;, + 0.620968; 0.718750;, + 0.620968; 0.656250;, + 0.604839; 0.765625;, + 0.604839; 0.937500;, + 0.620968; 0.937500;, + 0.620968; 0.765625;, + 0.604839; 0.718750;, + 0.604839; 0.765625;, + 0.620968; 0.765625;, + 0.620968; 0.718750;, + 0.604839; 0.968750;, + 0.604839; 1.000000;, + 0.620968; 1.000000;, + 0.620968; 0.968750;, + 0.266129; 0.828125;, + 0.016129; 0.828125;, + 0.016129; 0.859375;, + 0.266129; 0.859375;, + 0.282258; 0.984375;, + 0.282258; 0.859375;, + 0.266129; 0.859375;, + 0.266129; 0.984375;, + 0.306452; 0.703125;, + 0.306452; 0.640625;, + 0.290323; 0.640625;, + 0.290323; 0.703125;, + 0.556452; 0.703125;, + 0.556452; 0.640625;, + 0.306452; 0.640625;, + 0.306452; 0.703125;, + 0.935484; 0.421875;, + 0.935484; 0.484375;, + 0.927419; 0.484375;, + 0.927419; 0.421875;, + 0.604839; 0.656250;, + 0.588710; 0.656250;, + 0.588710; 0.718750;, + 0.604839; 0.718750;, + 0.604839; 0.234375;, + 0.604839; 0.656250;, + 0.620968; 0.656250;, + 0.620968; 0.234375;, + 0.903226; 0.468750;, + 0.903226; 0.875000;, + 0.919355; 0.875000;, + 0.919355; 0.468750;, + 0.903226; 0.875000;, + 0.903226; 0.890625;, + 0.919355; 0.890625;, + 0.919355; 0.875000;, + 0.629032; 0.937500;, + 0.693548; 0.937500;, + 0.693548; 0.968750;, + 0.629032; 0.968750;, + 0.629032; 0.656250;, + 0.693548; 0.656250;, + 0.693548; 0.718750;, + 0.629032; 0.718750;, + 0.620968; 0.937500;, + 0.629032; 0.937500;, + 0.629032; 0.968750;, + 0.620968; 0.968750;, + 0.620968; 0.656250;, + 0.629032; 0.656250;, + 0.629032; 0.718750;, + 0.620968; 0.718750;, + 0.620968; 0.765625;, + 0.629032; 0.765625;, + 0.629032; 0.937500;, + 0.620968; 0.937500;, + 0.556452; 0.953125;, + 0.572581; 0.953125;, + 0.572581; 0.921875;, + 0.556452; 0.921875;, + 0.620968; 0.718750;, + 0.629032; 0.718750;, + 0.629032; 0.765625;, + 0.620968; 0.765625;, + 0.629032; 0.718750;, + 0.693548; 0.718750;, + 0.693548; 0.765625;, + 0.629032; 0.765625;, + 0.629032; 0.031250;, + 0.693548; 0.031250;, + 0.693548; 0.062500;, + 0.629032; 0.062500;, + 0.629032; 0.968750;, + 0.693548; 0.968750;, + 0.693548; 1.000000;, + 0.629032; 1.000000;, + 0.604839; 0.765625;, + 0.588710; 0.765625;, + 0.588710; 0.718750;, + 0.604839; 0.718750;, + 0.620968; 0.968750;, + 0.629032; 0.968750;, + 0.629032; 1.000000;, + 0.620968; 1.000000;, + 0.604839; 0.937500;, + 0.588710; 0.937500;, + 0.588710; 0.765625;, + 0.604839; 0.765625;, + 0.758065; 1.000000;, + 0.774194; 1.000000;, + 0.774194; 0.875000;, + 0.758065; 0.875000;, + 0.879032; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 1.000000;, + 0.879032; 1.000000;, + 0.774194; 0.843750;, + 0.774194; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 0.843750;, + 0.604839; 0.656250;, + 0.604839; 0.718750;, + 0.588710; 0.718750;, + 0.588710; 0.656250;, + 0.604839; 0.937500;, + 0.620968; 0.937500;, + 0.620968; 0.968750;, + 0.604839; 0.968750;, + 0.604839; 0.656250;, + 0.620968; 0.656250;, + 0.620968; 0.718750;, + 0.604839; 0.718750;, + 0.604839; 0.765625;, + 0.620968; 0.765625;, + 0.620968; 0.937500;, + 0.604839; 0.937500;, + 0.604839; 0.718750;, + 0.620968; 0.718750;, + 0.620968; 0.765625;, + 0.604839; 0.765625;, + 0.000000; 0.484375;, + 0.016129; 0.484375;, + 0.016129; 0.421875;, + 0.000000; 0.421875;, + 0.862903; 0.765625;, + 0.741935; 0.765625;, + 0.741935; 0.828125;, + 0.862903; 0.828125;, + 0.919355; 0.421875;, + 0.903226; 0.421875;, + 0.903226; 0.453125;, + 0.919355; 0.453125;, + 0.604839; 0.234375;, + 0.588710; 0.234375;, + 0.588710; 0.062500;, + 0.604839; 0.062500;, + 0.758065; 0.875000;, + 0.758065; 1.000000;, + 0.774194; 1.000000;, + 0.774194; 0.875000;, + 0.266129; 0.796875;, + 0.016129; 0.796875;, + 0.016129; 0.828125;, + 0.266129; 0.828125;, + 0.556452; 0.953125;, + 0.306452; 0.953125;, + 0.306452; 0.984375;, + 0.556452; 0.984375;, + 0.000000; 0.703125;, + 0.016129; 0.703125;, + 0.016129; 0.531250;, + 0.000000; 0.531250;, + 0.556452; 0.046875;, + 0.556452; 0.015625;, + 0.306452; 0.015625;, + 0.306452; 0.046875;, + 0.604839; 0.968750;, + 0.620968; 0.968750;, + 0.620968; 1.000000;, + 0.604839; 1.000000;, + 0.016129; 0.187500;, + 0.266129; 0.187500;, + 0.266129; 0.156250;, + 0.016129; 0.156250;, + 0.604839; 0.062500;, + 0.620968; 0.062500;, + 0.620968; 0.031250;, + 0.604839; 0.031250;, + 0.604839; 0.062500;, + 0.604839; 0.031250;, + 0.620968; 0.031250;, + 0.620968; 0.062500;, + 0.266129; 0.765625;, + 0.016129; 0.765625;, + 0.016129; 0.796875;, + 0.266129; 0.796875;, + 0.266129; 0.859375;, + 0.016129; 0.859375;, + 0.016129; 0.984375;, + 0.266129; 0.984375;, + 0.620968; 0.031250;, + 0.629032; 0.031250;, + 0.629032; 0.062500;, + 0.620968; 0.062500;, + 0.604839; 0.062500;, + 0.604839; 0.031250;, + 0.620968; 0.031250;, + 0.620968; 0.062500;, + 0.604839; 0.062500;, + 0.620968; 0.062500;, + 0.620968; 0.031250;, + 0.604839; 0.031250;, + 0.629032; 0.000000;, + 0.693548; 0.000000;, + 0.693548; 0.031250;, + 0.629032; 0.031250;, + 0.604839; 0.062500;, + 0.620968; 0.062500;, + 0.620968; 0.234375;, + 0.604839; 0.234375;, + 0.000000; 0.859375;, + 0.016129; 0.859375;, + 0.016129; 0.828125;, + 0.000000; 0.828125;, + 0.000000; 0.531250;, + 0.016129; 0.531250;, + 0.016129; 0.484375;, + 0.000000; 0.484375;, + 0.604839; 0.968750;, + 0.588710; 0.968750;, + 0.588710; 0.937500;, + 0.604839; 0.937500;, + 0.016129; 0.156250;, + 0.266129; 0.156250;, + 0.266129; 0.125000;, + 0.016129; 0.125000;, + 0.000000; 0.734375;, + 0.016129; 0.734375;, + 0.016129; 0.703125;, + 0.000000; 0.703125;, + 0.556452; 0.703125;, + 0.572581; 0.703125;, + 0.572581; 0.640625;, + 0.556452; 0.640625;, + 0.556452; 0.750000;, + 0.572581; 0.750000;, + 0.572581; 0.703125;, + 0.556452; 0.703125;, + 0.266129; 0.703125;, + 0.266129; 0.531250;, + 0.016129; 0.531250;, + 0.016129; 0.703125;, + 0.266129; 0.734375;, + 0.266129; 0.703125;, + 0.016129; 0.703125;, + 0.016129; 0.734375;, + 0.774194; 1.000000;, + 0.862903; 1.000000;, + 0.862903; 0.875000;, + 0.774194; 0.875000;, + 0.620968; 0.000000;, + 0.629032; 0.000000;, + 0.629032; 0.031250;, + 0.620968; 0.031250;, + 0.935484; 0.921875;, + 0.927419; 0.921875;, + 0.927419; 0.859375;, + 0.935484; 0.859375;, + 0.266129; 0.531250;, + 0.266129; 0.484375;, + 0.016129; 0.484375;, + 0.016129; 0.531250;, + 0.266129; 0.218750;, + 0.266129; 0.187500;, + 0.016129; 0.187500;, + 0.016129; 0.218750;, + 0.556452; 0.953125;, + 0.556452; 0.921875;, + 0.306452; 0.921875;, + 0.306452; 0.953125;, + 0.556452; 0.046875;, + 0.572581; 0.046875;, + 0.572581; 0.015625;, + 0.556452; 0.015625;, + 0.000000; 0.984375;, + 0.016129; 0.984375;, + 0.016129; 0.859375;, + 0.000000; 0.859375;, + 0.556452; 0.750000;, + 0.306452; 0.750000;, + 0.306452; 0.921875;, + 0.556452; 0.921875;, + 0.935484; 0.921875;, + 0.935484; 0.421875;, + 0.927419; 0.421875;, + 0.927419; 0.921875;, + 0.903226; 0.468750;, + 0.919355; 0.468750;, + 0.919355; 0.453125;, + 0.903226; 0.453125;, + 0.879032; 1.000000;, + 0.879032; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 1.000000;, + 0.862903; 1.000000;, + 0.862903; 0.875000;, + 0.774194; 0.875000;, + 0.774194; 1.000000;, + 0.862903; 0.843750;, + 0.774194; 0.843750;, + 0.774194; 0.875000;, + 0.862903; 0.875000;, + 0.774194; 0.843750;, + 0.774194; 0.875000;, + 0.862903; 0.875000;, + 0.862903; 0.843750;, + 0.774194; 1.000000;, + 0.862903; 1.000000;, + 0.862903; 0.875000;, + 0.774194; 0.875000;, + 0.306452; 0.046875;, + 0.306452; 0.218750;, + 0.556452; 0.218750;, + 0.556452; 0.046875;, + 0.758065; 1.000000;, + 0.774194; 1.000000;, + 0.774194; 0.875000;, + 0.758065; 0.875000;, + 0.620968; 0.062500;, + 0.629032; 0.062500;, + 0.629032; 0.234375;, + 0.620968; 0.234375;, + 0.620968; 0.062500;, + 0.620968; 0.234375;, + 0.629032; 0.234375;, + 0.629032; 0.062500;, + 0.604839; 0.062500;, + 0.604839; 0.234375;, + 0.620968; 0.234375;, + 0.620968; 0.062500;, + 0.556452; 0.640625;, + 0.556452; 0.218750;, + 0.306452; 0.218750;, + 0.306452; 0.640625;, + 0.629032; 0.234375;, + 0.693548; 0.234375;, + 0.693548; 0.656250;, + 0.629032; 0.656250;, + 0.620968; 0.234375;, + 0.629032; 0.234375;, + 0.629032; 0.656250;, + 0.620968; 0.656250;, + 0.306452; 0.640625;, + 0.306452; 0.218750;, + 0.290323; 0.218750;, + 0.290323; 0.640625;, + 0.629032; 0.234375;, + 0.629032; 0.656250;, + 0.693548; 0.656250;, + 0.693548; 0.234375;, + 0.620968; 0.234375;, + 0.620968; 0.656250;, + 0.629032; 0.656250;, + 0.629032; 0.234375;, + 0.266129; 0.390625;, + 0.266129; 0.218750;, + 0.016129; 0.218750;, + 0.016129; 0.390625;, + 0.604839; 0.234375;, + 0.620968; 0.234375;, + 0.620968; 0.656250;, + 0.604839; 0.656250;, + 0.862903; 0.468750;, + 0.741935; 0.468750;, + 0.741935; 0.546875;, + 0.862903; 0.546875;, + 0.604839; 0.234375;, + 0.604839; 0.656250;, + 0.588710; 0.656250;, + 0.588710; 0.234375;, + 0.701613; 0.750000;, + 0.741935; 0.750000;, + 0.741935; 0.546875;, + 0.701613; 0.546875;, + 0.604839; 0.234375;, + 0.604839; 0.062500;, + 0.588710; 0.062500;, + 0.588710; 0.234375;, + 0.556452; 0.640625;, + 0.572581; 0.640625;, + 0.572581; 0.218750;, + 0.556452; 0.218750;, + 0.282258; 0.484375;, + 0.282258; 0.421875;, + 0.266129; 0.421875;, + 0.266129; 0.484375;, + 0.862903; 0.750000;, + 0.862903; 0.765625;, + 0.895161; 0.765625;, + 0.895161; 0.750000;, + 0.919355; 0.921875;, + 0.919355; 0.890625;, + 0.903226; 0.890625;, + 0.903226; 0.921875;, + 0.741935; 0.750000;, + 0.741935; 0.765625;, + 0.862903; 0.765625;, + 0.862903; 0.750000;, + 0.741935; 0.765625;, + 0.741935; 0.750000;, + 0.701613; 0.750000;, + 0.701613; 0.765625;, + 0.895161; 0.750000;, + 0.895161; 0.546875;, + 0.862903; 0.546875;, + 0.862903; 0.750000;, + 0.741935; 0.546875;, + 0.741935; 0.750000;, + 0.862903; 0.750000;, + 0.862903; 0.546875;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.078125;, + 0.701613; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.701613; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.109375;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.733871; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.758065; 0.171875;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.758065; 0.109375;, + 0.733871; 0.218750;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.218750;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.685484; 0.078125;, + 0.685484; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.203125;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.701613; 0.203125;, + 0.685484; 0.203125;, + 0.685484; 0.171875;, + 0.701613; 0.171875;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.109375;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.750000; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.750000; 0.203125;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.203125;, + 0.750000; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.750000; 0.109375;, + 0.677419; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.677419; 0.109375;, + 0.758065; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.171875;, + 0.758065; 0.171875;, + 0.677419; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.677419; 0.171875;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.701613; 0.062500;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.062500;, + 0.701613; 0.218750;, + 0.701613; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.218750;, + 0.733871; 0.062500;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.062500;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.078125;, + 0.701613; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.701613; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.109375;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.733871; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.758065; 0.171875;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.758065; 0.109375;, + 0.733871; 0.218750;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.218750;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.685484; 0.078125;, + 0.685484; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.203125;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.701613; 0.203125;, + 0.685484; 0.203125;, + 0.685484; 0.171875;, + 0.701613; 0.171875;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.109375;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.750000; 0.078125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.750000; 0.203125;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.203125;, + 0.750000; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.750000; 0.109375;, + 0.677419; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.677419; 0.109375;, + 0.758065; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.171875;, + 0.758065; 0.171875;, + 0.677419; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.677419; 0.171875;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.701613; 0.062500;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.062500;, + 0.701613; 0.218750;, + 0.701613; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.218750;, + 0.733871; 0.062500;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.062500;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.685484; 0.078125;, + 0.685484; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.750000; 0.078125;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.750000; 0.109375;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.171875;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.758065; 0.171875;, + 0.758065; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.171875;, + 0.733871; 0.218750;, + 0.701613; 0.218750;, + 0.701613; 0.203125;, + 0.733871; 0.203125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.078125;, + 0.701613; 0.078125;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.203125;, + 0.685484; 0.203125;, + 0.685484; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.203125;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.750000; 0.109375;, + 0.750000; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.750000; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.750000; 0.203125;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.203125;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.677419; 0.171875;, + 0.677419; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.758065; 0.109375;, + 0.758065; 0.171875;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.677419; 0.109375;, + 0.677419; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.701613; 0.062500;, + 0.733871; 0.062500;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.218750;, + 0.733871; 0.218750;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.733871; 0.062500;, + 0.701613; 0.062500;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.685484; 0.078125;, + 0.685484; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.750000; 0.078125;, + 0.733871; 0.109375;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.750000; 0.109375;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.171875;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.758065; 0.171875;, + 0.758065; 0.109375;, + 0.750000; 0.109375;, + 0.750000; 0.171875;, + 0.733871; 0.218750;, + 0.701613; 0.218750;, + 0.701613; 0.203125;, + 0.733871; 0.203125;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.701613; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.078125;, + 0.701613; 0.078125;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.701613; 0.203125;, + 0.685484; 0.203125;, + 0.685484; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.203125;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.733871; 0.109375;, + 0.701613; 0.109375;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.750000; 0.109375;, + 0.750000; 0.078125;, + 0.733871; 0.078125;, + 0.733871; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.750000; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.750000; 0.171875;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.701613; 0.171875;, + 0.733871; 0.171875;, + 0.750000; 0.203125;, + 0.750000; 0.171875;, + 0.733871; 0.171875;, + 0.733871; 0.203125;, + 0.733871; 0.203125;, + 0.733871; 0.171875;, + 0.701613; 0.171875;, + 0.701613; 0.203125;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.733871; 0.109375;, + 0.733871; 0.171875;, + 0.677419; 0.171875;, + 0.677419; 0.109375;, + 0.685484; 0.109375;, + 0.685484; 0.171875;, + 0.758065; 0.109375;, + 0.758065; 0.171875;, + 0.750000; 0.171875;, + 0.750000; 0.109375;, + 0.677419; 0.109375;, + 0.677419; 0.171875;, + 0.685484; 0.171875;, + 0.685484; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.701613; 0.062500;, + 0.733871; 0.062500;, + 0.733871; 0.078125;, + 0.701613; 0.078125;, + 0.701613; 0.218750;, + 0.733871; 0.218750;, + 0.733871; 0.203125;, + 0.701613; 0.203125;, + 0.733871; 0.062500;, + 0.701613; 0.062500;, + 0.701613; 0.078125;, + 0.733871; 0.078125;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.798387; 0.109375;, + 0.766129; 0.109375;, + 0.766129; 0.156250;, + 0.798387; 0.156250;, + 0.814516; 0.265625;, + 0.798387; 0.265625;, + 0.798387; 0.406250;, + 0.814516; 0.406250;, + 0.798387; 0.265625;, + 0.725806; 0.265625;, + 0.725806; 0.406250;, + 0.798387; 0.406250;, + 0.725806; 0.265625;, + 0.709677; 0.265625;, + 0.709677; 0.406250;, + 0.725806; 0.406250;, + 0.725806; 0.234375;, + 0.725806; 0.265625;, + 0.798387; 0.265625;, + 0.798387; 0.234375;, + 0.798387; 0.406250;, + 0.725806; 0.406250;, + 0.725806; 0.265625;, + 0.798387; 0.265625;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.822581; 0.296875;, + 0.822581; 0.062500;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.093750;, + 0.822581; 0.093750;, + 0.919355; 0.375000;, + 0.919355; 0.421875;, + 0.822581; 0.421875;, + 0.822581; 0.375000;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.822581; 0.296875;, + 0.822581; 0.062500;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.822581; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.093750;, + 0.822581; 0.093750;, + 0.822581; 0.296875;, + 0.959677; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.959677; 0.296875;, + 0.822581; 0.062500;, + 0.935484; 0.062500;, + 0.935484; 0.296875;, + 0.822581; 0.296875;, + 0.935484; 0.296875;, + 0.935484; 0.093750;, + 0.822581; 0.093750;, + 0.822581; 0.296875;, + 0.919355; 0.375000;, + 0.822581; 0.375000;, + 0.822581; 0.421875;, + 0.919355; 0.421875;, + 0.927419; 0.921875;, + 0.927419; 0.859375;, + 0.935484; 0.859375;, + 0.935484; 0.921875;, + 0.927419; 0.421875;, + 0.927419; 0.921875;, + 0.935484; 0.921875;, + 0.935484; 0.421875;, + 0.927419; 0.484375;, + 0.927419; 0.421875;, + 0.935484; 0.421875;, + 0.935484; 0.484375;; + } // End of _0002 UV coordinates + } // End of _0002 mesh + } // End of _0002 +} // End of Root diff --git a/mods/vehicle_mash/models/car_126r.x b/mods/vehicle_mash/models/car_126r.x new file mode 100644 index 0000000..5807721 --- /dev/null +++ b/mods/vehicle_mash/models/car_126r.x @@ -0,0 +1,6761 @@ +xof 0303txt 0032 + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame _0002 { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000,-1.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Mesh { // _0002 mesh + 1904; + 3.333261;-2.456014;-12.688454;, + 2.812428;-2.143514;-12.688455;, + 2.812428;-2.143514;-13.938454;, + 3.333261;-2.456014;-13.938454;, + 4.166594;-2.456014;-12.688455;, + 3.333261;-2.456014;-12.688454;, + 3.333261;-2.456014;-13.938454;, + 4.166595;-2.456014;-13.938455;, + 4.687428;-2.143514;-12.688456;, + 4.166594;-2.456014;-12.688455;, + 4.166595;-2.456014;-13.938455;, + 4.687428;-2.143514;-13.938456;, + 3.333263; 0.043985;-13.938455;, + 2.812428;-0.268514;-13.938454;, + 2.812428;-0.268514;-12.688455;, + 3.333261; 0.043986;-12.688454;, + 4.166596; 0.043985;-13.938455;, + 3.333263; 0.043985;-13.938455;, + 3.333261; 0.043986;-12.688454;, + 4.166595; 0.043986;-12.688455;, + 4.687428;-0.268515;-13.938456;, + 4.166596; 0.043985;-13.938455;, + 4.166595; 0.043986;-12.688455;, + 4.687428;-0.268515;-12.688456;, + 4.999928;-1.622681;-12.688456;, + 4.687428;-2.143514;-12.688456;, + 4.687428;-2.143514;-13.938456;, + 4.999928;-1.622682;-13.938456;, + 4.999929;-0.789347;-12.688456;, + 4.999928;-1.622681;-12.688456;, + 4.999928;-1.622682;-13.938456;, + 4.999928;-0.789347;-13.938456;, + 4.687428;-0.268515;-12.688456;, + 4.999929;-0.789347;-12.688456;, + 4.999928;-0.789347;-13.938456;, + 4.687428;-0.268515;-13.938456;, + 2.499928;-0.789346;-12.688455;, + 2.812428;-0.268514;-12.688455;, + 2.812428;-0.268514;-13.938454;, + 2.499928;-0.789346;-13.938454;, + 2.499928;-1.622681;-12.688455;, + 2.499928;-0.789346;-12.688455;, + 2.499928;-0.789346;-13.938454;, + 2.499928;-1.622681;-13.938454;, + 2.812428;-2.143514;-12.688455;, + 2.499928;-1.622681;-12.688455;, + 2.499928;-1.622681;-13.938454;, + 2.812428;-2.143514;-13.938454;, + 2.499928;-0.789346;-13.938454;, + 2.812428;-0.268514;-13.938454;, + 3.333263; 0.043985;-13.938455;, + 3.333263;-0.789346;-13.938455;, + 2.499928;-1.622681;-13.938454;, + 2.499928;-0.789346;-13.938454;, + 3.333263;-0.789346;-13.938455;, + 3.333263;-1.622681;-13.938455;, + 3.333263;-1.622681;-13.938455;, + 3.333261;-2.456014;-13.938454;, + 2.812428;-2.143514;-13.938454;, + 2.499928;-1.622681;-13.938454;, + 3.333263;-0.789346;-13.938455;, + 3.333263; 0.043985;-13.938455;, + 4.166596; 0.043985;-13.938455;, + 4.166595;-0.789347;-13.938455;, + 3.333263;-1.622681;-13.938455;, + 3.333263;-0.789346;-13.938455;, + 4.166595;-0.789347;-13.938455;, + 4.166595;-1.622682;-13.938455;, + 3.333261;-2.456014;-13.938454;, + 3.333263;-1.622681;-13.938455;, + 4.166595;-1.622682;-13.938455;, + 4.166595;-2.456014;-13.938455;, + 4.166595;-0.789347;-13.938455;, + 4.166596; 0.043985;-13.938455;, + 4.687428;-0.268515;-13.938456;, + 4.999928;-0.789347;-13.938456;, + 4.166595;-1.622682;-13.938455;, + 4.166595;-0.789347;-13.938455;, + 4.999928;-0.789347;-13.938456;, + 4.999928;-1.622682;-13.938456;, + 4.166595;-2.456014;-13.938455;, + 4.166595;-1.622682;-13.938455;, + 4.999928;-1.622682;-13.938456;, + 4.687428;-2.143514;-13.938456;, + 4.999929;-0.789347;-12.688456;, + 4.687428;-0.268515;-12.688456;, + 4.166595; 0.043986;-12.688455;, + 4.166594;-0.789346;-12.063455;, + 4.999928;-1.622681;-12.688456;, + 4.999929;-0.789347;-12.688456;, + 4.166594;-0.789346;-12.063455;, + 4.166594;-1.622681;-12.063455;, + 4.687428;-2.143514;-12.688456;, + 4.999928;-1.622681;-12.688456;, + 4.166594;-1.622681;-12.063455;, + 4.166594;-2.456014;-12.688455;, + 4.166594;-0.789346;-12.063455;, + 4.166595; 0.043986;-12.688455;, + 3.333261; 0.043986;-12.688454;, + 3.333261;-0.789346;-12.063455;, + 4.166594;-1.622681;-12.063455;, + 4.166594;-0.789346;-12.063455;, + 3.333261;-0.789346;-12.063455;, + 3.333261;-1.622681;-12.063455;, + 4.166594;-2.456014;-12.688455;, + 4.166594;-1.622681;-12.063455;, + 3.333261;-1.622681;-12.063455;, + 3.333261;-2.456014;-12.688454;, + 3.333261;-0.789346;-12.063455;, + 3.333261; 0.043986;-12.688454;, + 2.812428;-0.268514;-12.688455;, + 2.499928;-0.789346;-12.688455;, + 3.333261;-1.622681;-12.063455;, + 3.333261;-0.789346;-12.063455;, + 2.499928;-0.789346;-12.688455;, + 2.499928;-1.622681;-12.688455;, + 3.333261;-2.456014;-12.688454;, + 3.333261;-1.622681;-12.063455;, + 2.499928;-1.622681;-12.688455;, + 2.812428;-2.143514;-12.688455;, + -4.166739;-2.456013;-12.688455;, + -4.687572;-2.143513;-12.688455;, + -4.687572;-2.143513;-13.938455;, + -4.166739;-2.456013;-13.938455;, + -3.333407;-2.456013;-12.688455;, + -4.166739;-2.456013;-12.688455;, + -4.166739;-2.456013;-13.938455;, + -3.333404;-2.456013;-13.938455;, + -2.812572;-2.143513;-12.688455;, + -3.333407;-2.456013;-12.688455;, + -3.333404;-2.456013;-13.938455;, + -2.812572;-2.143513;-13.938455;, + -4.166736; 0.043987;-13.938455;, + -4.687572;-0.268513;-13.938455;, + -4.687572;-0.268513;-12.688455;, + -4.166739; 0.043987;-12.688455;, + -3.333404; 0.043987;-13.938455;, + -4.166736; 0.043987;-13.938455;, + -4.166739; 0.043987;-12.688455;, + -3.333405; 0.043987;-12.688455;, + -2.812572;-0.268514;-13.938455;, + -3.333404; 0.043987;-13.938455;, + -3.333405; 0.043987;-12.688455;, + -2.812572;-0.268513;-12.688455;, + -2.500072;-1.622680;-12.688455;, + -2.812572;-2.143513;-12.688455;, + -2.812572;-2.143513;-13.938455;, + -2.500072;-1.622681;-13.938455;, + -2.500072;-0.789345;-12.688455;, + -2.500072;-1.622680;-12.688455;, + -2.500072;-1.622681;-13.938455;, + -2.500072;-0.789346;-13.938455;, + -2.812572;-0.268513;-12.688455;, + -2.500072;-0.789345;-12.688455;, + -2.500072;-0.789346;-13.938455;, + -2.812572;-0.268514;-13.938455;, + -5.000072;-0.789346;-12.688455;, + -4.687572;-0.268513;-12.688455;, + -4.687572;-0.268513;-13.938455;, + -5.000072;-0.789346;-13.938455;, + -5.000072;-1.622680;-12.688455;, + -5.000072;-0.789346;-12.688455;, + -5.000072;-0.789346;-13.938455;, + -5.000072;-1.622680;-13.938455;, + -4.687572;-2.143513;-12.688455;, + -5.000072;-1.622680;-12.688455;, + -5.000072;-1.622680;-13.938455;, + -4.687572;-2.143513;-13.938455;, + -5.000072;-0.789346;-13.938455;, + -4.687572;-0.268513;-13.938455;, + -4.166736; 0.043987;-13.938455;, + -4.166736;-0.789346;-13.938455;, + -5.000072;-1.622680;-13.938455;, + -5.000072;-0.789346;-13.938455;, + -4.166736;-0.789346;-13.938455;, + -4.166736;-1.622680;-13.938455;, + -4.166736;-1.622680;-13.938455;, + -4.166739;-2.456013;-13.938455;, + -4.687572;-2.143513;-13.938455;, + -5.000072;-1.622680;-13.938455;, + -4.166736;-0.789346;-13.938455;, + -4.166736; 0.043987;-13.938455;, + -3.333404; 0.043987;-13.938455;, + -3.333404;-0.789346;-13.938455;, + -4.166736;-1.622680;-13.938455;, + -4.166736;-0.789346;-13.938455;, + -3.333404;-0.789346;-13.938455;, + -3.333404;-1.622680;-13.938455;, + -4.166739;-2.456013;-13.938455;, + -4.166736;-1.622680;-13.938455;, + -3.333404;-1.622680;-13.938455;, + -3.333404;-2.456013;-13.938455;, + -3.333404;-0.789346;-13.938455;, + -3.333404; 0.043987;-13.938455;, + -2.812572;-0.268514;-13.938455;, + -2.500072;-0.789346;-13.938455;, + -3.333404;-1.622680;-13.938455;, + -3.333404;-0.789346;-13.938455;, + -2.500072;-0.789346;-13.938455;, + -2.500072;-1.622681;-13.938455;, + -3.333404;-2.456013;-13.938455;, + -3.333404;-1.622680;-13.938455;, + -2.500072;-1.622681;-13.938455;, + -2.812572;-2.143513;-13.938455;, + -2.500072;-0.789345;-12.688455;, + -2.812572;-0.268513;-12.688455;, + -3.333405; 0.043987;-12.688455;, + -3.333406;-0.789345;-12.063455;, + -2.500072;-1.622680;-12.688455;, + -2.500072;-0.789345;-12.688455;, + -3.333406;-0.789345;-12.063455;, + -3.333406;-1.622680;-12.063455;, + -2.812572;-2.143513;-12.688455;, + -2.500072;-1.622680;-12.688455;, + -3.333406;-1.622680;-12.063455;, + -3.333407;-2.456013;-12.688455;, + -3.333406;-0.789345;-12.063455;, + -3.333405; 0.043987;-12.688455;, + -4.166739; 0.043987;-12.688455;, + -4.166739;-0.789346;-12.063455;, + -3.333406;-1.622680;-12.063455;, + -3.333406;-0.789345;-12.063455;, + -4.166739;-0.789346;-12.063455;, + -4.166739;-1.622681;-12.063455;, + -3.333407;-2.456013;-12.688455;, + -3.333406;-1.622680;-12.063455;, + -4.166739;-1.622681;-12.063455;, + -4.166739;-2.456013;-12.688455;, + -4.166739;-0.789346;-12.063455;, + -4.166739; 0.043987;-12.688455;, + -4.687572;-0.268513;-12.688455;, + -5.000072;-0.789346;-12.688455;, + -4.166739;-1.622681;-12.063455;, + -4.166739;-0.789346;-12.063455;, + -5.000072;-0.789346;-12.688455;, + -5.000072;-1.622680;-12.688455;, + -4.166739;-2.456013;-12.688455;, + -4.166739;-1.622681;-12.063455;, + -5.000072;-1.622680;-12.688455;, + -4.687572;-2.143513;-12.688455;, + -2.291739; 1.293986;-13.313455;, + -2.812572; 1.606486;-13.313455;, + -2.812571; 1.606486;-14.563456;, + -2.291739; 1.293986;-14.563456;, + -1.458405; 1.293986;-13.313455;, + -2.291739; 1.293986;-13.313455;, + -2.291739; 1.293986;-14.563456;, + -1.458405; 1.293986;-14.563456;, + -0.937571; 1.606486;-13.313455;, + -1.458405; 1.293986;-13.313455;, + -1.458405; 1.293986;-14.563456;, + -0.937571; 1.606486;-14.563456;, + -2.291735; 3.793986;-14.563457;, + -2.812572; 3.481486;-14.563457;, + -2.812572; 3.481487;-13.313456;, + -2.291739; 3.793987;-13.313456;, + -1.458403; 3.793986;-14.563457;, + -2.291735; 3.793986;-14.563457;, + -2.291739; 3.793987;-13.313456;, + -1.458406; 3.793986;-13.313456;, + -0.937572; 3.481486;-14.563457;, + -1.458403; 3.793986;-14.563457;, + -1.458406; 3.793986;-13.313456;, + -0.937572; 3.481486;-13.313456;, + -0.625072; 2.127319;-13.313455;, + -0.937571; 1.606486;-13.313455;, + -0.937571; 1.606486;-14.563456;, + -0.625072; 2.127319;-14.563456;, + -0.625072; 2.960654;-13.313456;, + -0.625072; 2.127319;-13.313455;, + -0.625072; 2.127319;-14.563456;, + -0.625072; 2.960654;-14.563457;, + -0.937572; 3.481486;-13.313456;, + -0.625072; 2.960654;-13.313456;, + -0.625072; 2.960654;-14.563457;, + -0.937572; 3.481486;-14.563457;, + -3.125072; 2.960654;-13.313456;, + -2.812572; 3.481487;-13.313456;, + -2.812572; 3.481486;-14.563457;, + -3.125072; 2.960653;-14.563457;, + -3.125072; 2.127318;-13.313455;, + -3.125072; 2.960654;-13.313456;, + -3.125072; 2.960653;-14.563457;, + -3.125072; 2.127318;-14.563456;, + -2.812572; 1.606486;-13.313455;, + -3.125072; 2.127318;-13.313455;, + -3.125072; 2.127318;-14.563456;, + -2.812571; 1.606486;-14.563456;, + -3.125072; 2.960653;-14.563457;, + -2.812572; 3.481486;-14.563457;, + -2.291735; 3.793986;-14.563457;, + -2.291737; 2.960654;-14.563457;, + -3.125072; 2.127318;-14.563456;, + -3.125072; 2.960653;-14.563457;, + -2.291737; 2.960654;-14.563457;, + -2.291737; 2.127319;-14.563456;, + -2.291737; 2.127319;-14.563456;, + -2.291739; 1.293986;-14.563456;, + -2.812571; 1.606486;-14.563456;, + -3.125072; 2.127318;-14.563456;, + -2.291737; 2.960654;-14.563457;, + -2.291735; 3.793986;-14.563457;, + -1.458403; 3.793986;-14.563457;, + -1.458403; 2.960654;-14.563457;, + -2.291737; 2.127319;-14.563456;, + -2.291737; 2.960654;-14.563457;, + -1.458403; 2.960654;-14.563457;, + -1.458405; 2.127319;-14.563456;, + -2.291739; 1.293986;-14.563456;, + -2.291737; 2.127319;-14.563456;, + -1.458405; 2.127319;-14.563456;, + -1.458405; 1.293986;-14.563456;, + -1.458403; 2.960654;-14.563457;, + -1.458403; 3.793986;-14.563457;, + -0.937572; 3.481486;-14.563457;, + -0.625072; 2.960654;-14.563457;, + -1.458405; 2.127319;-14.563456;, + -1.458403; 2.960654;-14.563457;, + -0.625072; 2.960654;-14.563457;, + -0.625072; 2.127319;-14.563456;, + -1.458405; 1.293986;-14.563456;, + -1.458405; 2.127319;-14.563456;, + -0.625072; 2.127319;-14.563456;, + -0.937571; 1.606486;-14.563456;, + -0.625072; 2.960654;-13.313456;, + -0.937572; 3.481486;-13.313456;, + -1.458406; 3.793986;-13.313456;, + -1.458406; 2.960654;-12.688456;, + -0.625072; 2.127319;-13.313455;, + -0.625072; 2.960654;-13.313456;, + -1.458406; 2.960654;-12.688456;, + -1.458406; 2.127319;-12.688455;, + -0.937571; 1.606486;-13.313455;, + -0.625072; 2.127319;-13.313455;, + -1.458406; 2.127319;-12.688455;, + -1.458405; 1.293986;-13.313455;, + -1.458406; 2.960654;-12.688456;, + -1.458406; 3.793986;-13.313456;, + -2.291739; 3.793987;-13.313456;, + -2.291739; 2.960654;-12.688456;, + -1.458406; 2.127319;-12.688455;, + -1.458406; 2.960654;-12.688456;, + -2.291739; 2.960654;-12.688456;, + -2.291739; 2.127320;-12.688455;, + -1.458405; 1.293986;-13.313455;, + -1.458406; 2.127319;-12.688455;, + -2.291739; 2.127320;-12.688455;, + -2.291739; 1.293986;-13.313455;, + -2.291739; 2.960654;-12.688456;, + -2.291739; 3.793987;-13.313456;, + -2.812572; 3.481487;-13.313456;, + -3.125072; 2.960654;-13.313456;, + -2.291739; 2.127320;-12.688455;, + -2.291739; 2.960654;-12.688456;, + -3.125072; 2.960654;-13.313456;, + -3.125072; 2.127318;-13.313455;, + -2.291739; 1.293986;-13.313455;, + -2.291739; 2.127320;-12.688455;, + -3.125072; 2.127318;-13.313455;, + -2.812572; 1.606486;-13.313455;, + 1.458261; 1.293986;-13.313455;, + 0.937428; 1.606486;-13.313455;, + 0.937428; 1.606486;-14.563456;, + 1.458261; 1.293985;-14.563456;, + 2.291593; 1.293987;-13.313455;, + 1.458261; 1.293986;-13.313455;, + 1.458261; 1.293985;-14.563456;, + 2.291595; 1.293985;-14.563457;, + 2.812428; 1.606485;-13.313454;, + 2.291593; 1.293987;-13.313455;, + 2.291595; 1.293985;-14.563457;, + 2.812428; 1.606485;-14.563456;, + 1.458264; 3.793986;-14.563457;, + 0.937428; 3.481486;-14.563457;, + 0.937428; 3.481486;-13.313456;, + 1.458261; 3.793986;-13.313456;, + 2.291596; 3.793985;-14.563457;, + 1.458264; 3.793986;-14.563457;, + 1.458261; 3.793986;-13.313456;, + 2.291594; 3.793986;-13.313456;, + 2.812428; 3.481485;-14.563457;, + 2.291596; 3.793985;-14.563457;, + 2.291594; 3.793986;-13.313456;, + 2.812428; 3.481486;-13.313455;, + 3.124928; 2.127319;-13.313454;, + 2.812428; 1.606485;-13.313454;, + 2.812428; 1.606485;-14.563456;, + 3.124929; 2.127318;-14.563456;, + 3.124928; 2.960654;-13.313455;, + 3.124928; 2.127319;-13.313454;, + 3.124929; 2.127318;-14.563456;, + 3.124928; 2.960653;-14.563457;, + 2.812428; 3.481486;-13.313455;, + 3.124928; 2.960654;-13.313455;, + 3.124928; 2.960653;-14.563457;, + 2.812428; 3.481485;-14.563457;, + 0.624928; 2.960654;-13.313456;, + 0.937428; 3.481486;-13.313456;, + 0.937428; 3.481486;-14.563457;, + 0.624928; 2.960654;-14.563457;, + 0.624928; 2.127319;-13.313455;, + 0.624928; 2.960654;-13.313456;, + 0.624928; 2.960654;-14.563457;, + 0.624928; 2.127319;-14.563456;, + 0.937428; 1.606486;-13.313455;, + 0.624928; 2.127319;-13.313455;, + 0.624928; 2.127319;-14.563456;, + 0.937428; 1.606486;-14.563456;, + 0.624928; 2.960654;-14.563457;, + 0.937428; 3.481486;-14.563457;, + 1.458264; 3.793986;-14.563457;, + 1.458264; 2.960654;-14.563457;, + 0.624928; 2.127319;-14.563456;, + 0.624928; 2.960654;-14.563457;, + 1.458264; 2.960654;-14.563457;, + 1.458264; 2.127319;-14.563457;, + 1.458264; 2.127319;-14.563457;, + 1.458261; 1.293985;-14.563456;, + 0.937428; 1.606486;-14.563456;, + 0.624928; 2.127319;-14.563456;, + 1.458264; 2.960654;-14.563457;, + 1.458264; 3.793986;-14.563457;, + 2.291596; 3.793985;-14.563457;, + 2.291596; 2.960652;-14.563457;, + 1.458264; 2.127319;-14.563457;, + 1.458264; 2.960654;-14.563457;, + 2.291596; 2.960652;-14.563457;, + 2.291596; 2.127317;-14.563457;, + 1.458261; 1.293985;-14.563456;, + 1.458264; 2.127319;-14.563457;, + 2.291596; 2.127317;-14.563457;, + 2.291595; 1.293985;-14.563457;, + 2.291596; 2.960652;-14.563457;, + 2.291596; 3.793985;-14.563457;, + 2.812428; 3.481485;-14.563457;, + 3.124928; 2.960653;-14.563457;, + 2.291596; 2.127317;-14.563457;, + 2.291596; 2.960652;-14.563457;, + 3.124928; 2.960653;-14.563457;, + 3.124929; 2.127318;-14.563456;, + 2.291595; 1.293985;-14.563457;, + 2.291596; 2.127317;-14.563457;, + 3.124929; 2.127318;-14.563456;, + 2.812428; 1.606485;-14.563456;, + 3.124928; 2.960654;-13.313455;, + 2.812428; 3.481486;-13.313455;, + 2.291594; 3.793986;-13.313456;, + 2.291594; 2.960654;-12.688456;, + 3.124928; 2.127319;-13.313454;, + 3.124928; 2.960654;-13.313455;, + 2.291594; 2.960654;-12.688456;, + 2.291593; 2.127319;-12.688455;, + 2.812428; 1.606485;-13.313454;, + 3.124928; 2.127319;-13.313454;, + 2.291593; 2.127319;-12.688455;, + 2.291593; 1.293987;-13.313455;, + 2.291594; 2.960654;-12.688456;, + 2.291594; 3.793986;-13.313456;, + 1.458261; 3.793986;-13.313456;, + 1.458261; 2.960653;-12.688456;, + 2.291593; 2.127319;-12.688455;, + 2.291594; 2.960654;-12.688456;, + 1.458261; 2.960653;-12.688456;, + 1.458261; 2.127319;-12.688455;, + 2.291593; 1.293987;-13.313455;, + 2.291593; 2.127319;-12.688455;, + 1.458261; 2.127319;-12.688455;, + 1.458261; 1.293986;-13.313455;, + 1.458261; 2.960653;-12.688456;, + 1.458261; 3.793986;-13.313456;, + 0.937428; 3.481486;-13.313456;, + 0.624928; 2.960654;-13.313456;, + 1.458261; 2.127319;-12.688455;, + 1.458261; 2.960653;-12.688456;, + 0.624928; 2.960654;-13.313456;, + 0.624928; 2.127319;-13.313455;, + 1.458261; 1.293986;-13.313455;, + 1.458261; 2.127319;-12.688455;, + 0.624928; 2.127319;-13.313455;, + 0.937428; 1.606486;-13.313455;, + -8.750063; 1.293993;19.186543;, + -8.750066; 0.043993;19.186543;, + -8.750066; 0.043993;21.686543;, + -8.750071; 1.293993;21.686543;, + 8.749929; 0.043991;19.186544;, + 8.749926; 1.293991;19.186544;, + 8.749918; 1.293991;21.686544;, + 8.749926; 0.043991;21.686544;, + 4.999937; 0.043991;20.436544;, + 8.749929; 0.043991;19.186544;, + 8.749926; 0.043991;21.686544;, + 4.999929; 0.043991;22.936544;, + -5.000065; 0.043992;20.436543;, + 4.999937; 0.043991;20.436544;, + 4.999929; 0.043991;22.936544;, + -5.000069; 0.043993;22.936543;, + -8.750066; 0.043993;19.186543;, + -5.000065; 0.043992;20.436543;, + -5.000069; 0.043993;22.936543;, + -8.750066; 0.043993;21.686543;, + 4.999922; 1.293991;22.936544;, + 8.749918; 1.293991;21.686544;, + 8.749926; 1.293991;19.186544;, + 4.999933; 1.293991;20.436544;, + -5.000080; 1.293993;22.936543;, + 4.999922; 1.293991;22.936544;, + 4.999933; 1.293991;20.436544;, + -5.000065; 1.293992;20.436543;, + -8.750071; 1.293993;21.686543;, + -5.000080; 1.293993;22.936543;, + -5.000065; 1.293992;20.436543;, + -8.750063; 1.293993;19.186543;, + 8.749918; 1.293991;21.686544;, + 4.999922; 1.293991;22.936544;, + 4.999929; 0.043991;22.936544;, + 8.749926; 0.043991;21.686544;, + -5.000069; 0.043993;22.936543;, + 4.999929; 0.043991;22.936544;, + 4.999922; 1.293991;22.936544;, + -5.000080; 1.293993;22.936543;, + -8.750066; 0.043993;21.686543;, + -5.000069; 0.043993;22.936543;, + -5.000080; 1.293993;22.936543;, + -8.750071; 1.293993;21.686543;, + -5.000065; 0.043992;20.436543;, + -8.750066; 0.043993;19.186543;, + -8.750063; 1.293993;19.186543;, + -5.000065; 1.293992;20.436543;, + 4.999937; 0.043991;20.436544;, + -5.000065; 0.043992;20.436543;, + -5.000065; 1.293992;20.436543;, + 4.999933; 1.293991;20.436544;, + 8.749929; 0.043991;19.186544;, + 4.999937; 0.043991;20.436544;, + 4.999933; 1.293991;20.436544;, + 8.749926; 1.293991;19.186544;, + 8.749921; 1.293986;-9.563455;, + 8.749924; 0.043986;-9.563457;, + 8.749923; 0.043986;-12.063454;, + 8.749928; 1.293986;-12.063455;, + -8.750072; 0.043988;-9.563457;, + -8.750066; 1.293988;-9.563457;, + -8.750062; 1.293988;-12.063457;, + -8.750068; 0.043988;-12.063455;, + -5.000079; 0.043987;-10.813457;, + -8.750072; 0.043988;-9.563457;, + -8.750068; 0.043988;-12.063455;, + -5.000072; 0.043987;-13.313455;, + 4.999923; 0.043986;-10.813456;, + -5.000079; 0.043987;-10.813457;, + -5.000072; 0.043987;-13.313455;, + 4.999928; 0.043985;-13.313456;, + 8.749924; 0.043986;-9.563457;, + 4.999923; 0.043986;-10.813456;, + 4.999928; 0.043985;-13.313456;, + 8.749923; 0.043986;-12.063454;, + -5.000060; 1.293987;-13.313456;, + -8.750062; 1.293988;-12.063457;, + -8.750066; 1.293988;-9.563457;, + -5.000074; 1.293987;-10.813457;, + 4.999939; 1.293985;-13.313456;, + -5.000060; 1.293987;-13.313456;, + -5.000074; 1.293987;-10.813457;, + 4.999923; 1.293985;-10.813456;, + 8.749928; 1.293986;-12.063455;, + 4.999939; 1.293985;-13.313456;, + 4.999923; 1.293985;-10.813456;, + 8.749921; 1.293986;-9.563455;, + -8.750062; 1.293988;-12.063457;, + -5.000060; 1.293987;-13.313456;, + -5.000072; 0.043987;-13.313455;, + -8.750068; 0.043988;-12.063455;, + 4.999928; 0.043985;-13.313456;, + -5.000072; 0.043987;-13.313455;, + -5.000060; 1.293987;-13.313456;, + 4.999939; 1.293985;-13.313456;, + 8.749923; 0.043986;-12.063454;, + 4.999928; 0.043985;-13.313456;, + 4.999939; 1.293985;-13.313456;, + 8.749928; 1.293986;-12.063455;, + 4.999923; 0.043986;-10.813456;, + 8.749924; 0.043986;-9.563457;, + 8.749921; 1.293986;-9.563455;, + 4.999923; 1.293985;-10.813456;, + -5.000079; 0.043987;-10.813457;, + 4.999923; 0.043986;-10.813456;, + 4.999923; 1.293985;-10.813456;, + -5.000074; 1.293987;-10.813457;, + -8.750072; 0.043988;-9.563457;, + -5.000079; 0.043987;-10.813457;, + -5.000074; 1.293987;-10.813457;, + -8.750066; 1.293988;-9.563457;, + 2.499928;-0.581013;-8.000943;, + 2.499926;-3.081013;-6.750956;, + -2.500069;-3.081012;-6.750956;, + -2.500070;-0.581013;-8.000955;, + -2.500071;-0.581008;16.999035;, + -2.500071;-3.081008;15.749043;, + 2.499927;-3.081009;15.749046;, + 2.499928;-0.581009;16.999041;, + 2.499926;-3.081013;-6.750956;, + 2.499929;-0.581011; 4.499049;, + -2.500069;-0.581011; 4.499039;, + -2.500069;-3.081012;-6.750956;, + 2.499929;-0.581011; 4.499049;, + 2.499928;-0.581013;-8.000943;, + -2.500070;-0.581013;-8.000955;, + -2.500069;-0.581011; 4.499039;, + 2.499928;-0.581009;16.999041;, + 2.499929;-0.581011; 4.499049;, + -2.500069;-0.581011; 4.499039;, + -2.500071;-0.581008;16.999035;, + 2.499929;-0.581011; 4.499049;, + 2.499926;-3.081013;-6.750956;, + 2.499928;-0.581013;-8.000943;, + -2.500069;-0.581011; 4.499039;, + -2.500070;-0.581013;-8.000955;, + -2.500069;-3.081012;-6.750956;, + -2.500071;-3.081009;12.311543;, + -2.500069;-0.581011; 4.499039;, + 2.499929;-0.581011; 4.499049;, + 2.499929;-3.081010;12.311549;, + -2.500071;-3.081008;15.749043;, + -2.500071;-3.081009;12.311543;, + 2.499929;-3.081010;12.311549;, + 2.499927;-3.081009;15.749046;, + -2.500069;-0.581011; 4.499039;, + -2.500071;-3.081009;12.311543;, + -2.500071;-3.081008;15.749043;, + -2.500071;-0.581008;16.999035;, + 2.499929;-0.581011; 4.499049;, + 2.499928;-0.581009;16.999041;, + 2.499927;-3.081009;15.749046;, + 2.499929;-3.081010;12.311549;, + -7.500071;-1.518503;15.436543;, + -7.500071;-1.831003;15.124043;, + -7.500071;-1.831003;15.436543;, + 7.499930;-1.831014;15.124043;, + 7.499930;-1.518514;15.436543;, + 7.499930;-1.831014;15.436543;, + -7.500071;-1.831003;15.124043;, + -7.500071;-2.143502;15.436543;, + -7.500071;-1.831003;15.436543;, + 7.499930;-2.143515;15.436543;, + 7.499930;-1.831014;15.124043;, + 7.499930;-1.831014;15.436543;, + -7.500071;-2.143502;15.436543;, + -7.500072;-1.831003;15.749043;, + -7.500071;-1.831003;15.436543;, + 7.499930;-1.831014;15.749043;, + 7.499930;-2.143515;15.436543;, + 7.499930;-1.831014;15.436543;, + -7.500071;-1.518503;15.436543;, + -7.500071;-1.831003;15.436543;, + -7.500072;-1.831003;15.749043;, + 7.499930;-1.518514;15.436543;, + 7.499930;-1.831014;15.749043;, + 7.499930;-1.831014;15.436543;, + 7.499930;-1.831014;15.124043;, + -7.500071;-1.831003;15.124043;, + -7.500071;-1.518503;15.436543;, + 7.499930;-1.518514;15.436543;, + 7.499930;-2.143515;15.436543;, + -7.500071;-2.143502;15.436543;, + -7.500071;-1.831003;15.124043;, + 7.499930;-1.831014;15.124043;, + 7.499930;-1.831014;15.749043;, + -7.500072;-1.831003;15.749043;, + -7.500071;-2.143502;15.436543;, + 7.499930;-2.143515;15.436543;, + -7.500072;-1.831003;15.749043;, + 7.499930;-1.831014;15.749043;, + 7.499930;-1.518514;15.436543;, + -7.500071;-1.518503;15.436543;, + -7.500072;-1.518507;-6.438456;, + -7.500072;-1.831007;-6.750956;, + -7.500072;-1.831007;-6.438456;, + 7.499929;-1.831018;-6.750957;, + 7.499929;-1.518518;-6.438457;, + 7.499929;-1.831018;-6.438457;, + -7.500072;-1.831007;-6.750956;, + -7.500072;-2.143506;-6.438456;, + -7.500072;-1.831007;-6.438456;, + 7.499929;-2.143518;-6.438457;, + 7.499929;-1.831018;-6.750957;, + 7.499929;-1.831018;-6.438457;, + -7.500072;-2.143506;-6.438456;, + -7.500072;-1.831006;-6.125956;, + -7.500072;-1.831007;-6.438456;, + 7.499929;-1.831018;-6.125957;, + 7.499929;-2.143518;-6.438457;, + 7.499929;-1.831018;-6.438457;, + -7.500072;-1.518507;-6.438456;, + -7.500072;-1.831007;-6.438456;, + -7.500072;-1.831006;-6.125956;, + 7.499929;-1.518518;-6.438457;, + 7.499929;-1.831018;-6.125957;, + 7.499929;-1.831018;-6.438457;, + 7.499929;-1.831018;-6.750957;, + -7.500072;-1.831007;-6.750956;, + -7.500072;-1.518507;-6.438456;, + 7.499929;-1.518518;-6.438457;, + 7.499929;-2.143518;-6.438457;, + -7.500072;-2.143506;-6.438456;, + -7.500072;-1.831007;-6.750956;, + 7.499929;-1.831018;-6.750957;, + 7.499929;-1.831018;-6.125957;, + -7.500072;-1.831006;-6.125956;, + -7.500072;-2.143506;-6.438456;, + 7.499929;-2.143518;-6.438457;, + -7.500072;-1.831006;-6.125956;, + 7.499929;-1.831018;-6.125957;, + 7.499929;-1.518518;-6.438457;, + -7.500072;-1.518507;-6.438456;, + -6.250069;-5.581011;-6.438455;, + -6.250070;-5.078606;-8.313454;, + -6.250072;-1.831012;-6.438456;, + -6.250070;-5.078606;-8.313454;, + -6.250072;-3.706012;-9.686049;, + -6.250072;-1.831012;-6.438456;, + -6.250072;-3.706012;-9.686049;, + -6.250072;-1.831012;-10.188455;, + -6.250072;-1.831012;-6.438456;, + -6.250072;-1.831012;-10.188455;, + -6.250072; 0.043990;-9.686049;, + -6.250072;-1.831012;-6.438456;, + -6.250072; 0.043990;-9.686049;, + -6.250073; 1.416586;-8.313455;, + -6.250072;-1.831012;-6.438456;, + -6.250073; 1.416586;-8.313455;, + -6.250073; 1.918988;-6.438457;, + -6.250072;-1.831012;-6.438456;, + -6.250073; 1.918988;-6.438457;, + -6.250074; 1.416587;-4.563455;, + -6.250072;-1.831012;-6.438456;, + -6.250074; 1.416587;-4.563455;, + -6.250070; 0.043991;-3.190863;, + -6.250072;-1.831012;-6.438456;, + -6.250070; 0.043991;-3.190863;, + -6.250071;-1.831008;-2.688456;, + -6.250072;-1.831012;-6.438456;, + -6.250071;-1.831008;-2.688456;, + -6.250072;-3.706008;-3.190861;, + -6.250072;-1.831012;-6.438456;, + -6.250072;-3.706008;-3.190861;, + -6.250070;-5.078604;-4.563451;, + -6.250072;-1.831012;-6.438456;, + -6.250069;-5.581011;-6.438455;, + -6.250072;-1.831012;-6.438456;, + -6.250070;-5.078604;-4.563451;, + -8.750070;-5.078609;-8.313452;, + -6.250070;-5.078606;-8.313454;, + -6.250069;-5.581011;-6.438455;, + -8.750071;-5.581011;-6.438452;, + -8.750072;-3.706015;-9.686046;, + -6.250072;-3.706012;-9.686049;, + -6.250070;-5.078606;-8.313454;, + -8.750070;-5.078609;-8.313452;, + -8.750072;-1.831017;-10.188455;, + -6.250072;-1.831012;-10.188455;, + -6.250072;-3.706012;-9.686049;, + -8.750072;-3.706015;-9.686046;, + -8.750072; 0.043985;-9.686051;, + -6.250072; 0.043990;-9.686049;, + -6.250072;-1.831012;-10.188455;, + -8.750072;-1.831017;-10.188455;, + -8.750073; 1.416580;-8.313457;, + -6.250073; 1.416586;-8.313455;, + -6.250072; 0.043990;-9.686049;, + -8.750072; 0.043985;-9.686051;, + -8.750073; 1.918988;-6.438457;, + -6.250073; 1.918988;-6.438457;, + -6.250073; 1.416586;-8.313455;, + -8.750073; 1.416580;-8.313457;, + -8.750072; 1.416587;-4.563457;, + -6.250074; 1.416587;-4.563455;, + -6.250073; 1.918988;-6.438457;, + -8.750073; 1.918988;-6.438457;, + -8.750072; 0.043992;-3.190863;, + -6.250070; 0.043991;-3.190863;, + -6.250074; 1.416587;-4.563455;, + -8.750072; 1.416587;-4.563457;, + -8.750072;-1.831006;-2.688456;, + -6.250071;-1.831008;-2.688456;, + -6.250070; 0.043991;-3.190863;, + -8.750072; 0.043992;-3.190863;, + -8.750072;-3.706008;-3.190857;, + -6.250072;-3.706008;-3.190861;, + -6.250071;-1.831008;-2.688456;, + -8.750072;-1.831006;-2.688456;, + -8.750071;-5.078604;-4.563448;, + -6.250070;-5.078604;-4.563451;, + -6.250072;-3.706008;-3.190861;, + -8.750072;-3.706008;-3.190857;, + -6.250070;-5.078604;-4.563451;, + -8.750071;-5.078604;-4.563448;, + -8.750071;-5.581011;-6.438452;, + -6.250069;-5.581011;-6.438455;, + -8.750072;-3.454809;-5.500954;, + -8.750072;-3.706011;-6.438456;, + -8.750071;-5.581011;-6.438452;, + -8.750071;-5.078604;-4.563448;, + -8.750072;-2.768509;-4.814656;, + -8.750072;-3.454809;-5.500954;, + -8.750071;-5.078604;-4.563448;, + -8.750072;-3.706008;-3.190857;, + -8.750072;-1.831008;-4.563454;, + -8.750072;-2.768509;-4.814656;, + -8.750072;-3.706008;-3.190857;, + -8.750072;-1.831006;-2.688456;, + -8.750072;-0.893508;-4.814660;, + -8.750072;-1.831008;-4.563454;, + -8.750072;-1.831006;-2.688456;, + -8.750072; 0.043992;-3.190863;, + -8.750071;-0.207214;-5.500957;, + -8.750072;-0.893508;-4.814660;, + -8.750072; 0.043992;-3.190863;, + -8.750072; 1.416587;-4.563457;, + -8.750072; 0.043989;-6.438456;, + -8.750071;-0.207214;-5.500957;, + -8.750072; 1.416587;-4.563457;, + -8.750073; 1.918988;-6.438457;, + -8.750072;-0.207214;-7.375956;, + -8.750072; 0.043989;-6.438456;, + -8.750073; 1.918988;-6.438457;, + -8.750073; 1.416580;-8.313457;, + -8.750072;-0.893515;-8.062252;, + -8.750072;-0.207214;-7.375956;, + -8.750073; 1.416580;-8.313457;, + -8.750072; 0.043985;-9.686051;, + -8.750072;-1.831014;-8.313455;, + -8.750072;-0.893515;-8.062252;, + -8.750072; 0.043985;-9.686051;, + -8.750072;-1.831017;-10.188455;, + -8.750072;-2.768514;-8.062252;, + -8.750072;-1.831014;-8.313455;, + -8.750072;-1.831017;-10.188455;, + -8.750072;-3.706015;-9.686046;, + -8.750073;-3.454809;-7.375956;, + -8.750072;-2.768514;-8.062252;, + -8.750072;-3.706015;-9.686046;, + -8.750070;-5.078609;-8.313452;, + -8.750072;-3.706011;-6.438456;, + -8.750073;-3.454809;-7.375956;, + -8.750070;-5.078609;-8.313452;, + -8.750071;-5.581011;-6.438452;, + -7.500072;-3.706011;-6.438456;, + -7.500072;-3.454809;-7.375956;, + -8.750073;-3.454809;-7.375956;, + -8.750072;-3.706011;-6.438456;, + -7.500072;-3.454809;-7.375956;, + -7.500072;-2.768512;-8.062252;, + -8.750072;-2.768514;-8.062252;, + -8.750073;-3.454809;-7.375956;, + -7.500072;-2.768512;-8.062252;, + -7.500072;-1.831012;-8.313455;, + -8.750072;-1.831014;-8.313455;, + -8.750072;-2.768514;-8.062252;, + -7.500072;-1.831012;-8.313455;, + -7.500071;-0.893512;-8.062252;, + -8.750072;-0.893515;-8.062252;, + -8.750072;-1.831014;-8.313455;, + -7.500071;-0.893512;-8.062252;, + -7.500072;-0.207215;-7.375956;, + -8.750072;-0.207214;-7.375956;, + -8.750072;-0.893515;-8.062252;, + -7.500072;-0.207215;-7.375956;, + -7.500072; 0.043988;-6.438456;, + -8.750072; 0.043989;-6.438456;, + -8.750072;-0.207214;-7.375956;, + -7.500072; 0.043988;-6.438456;, + -7.500071;-0.207211;-5.500957;, + -8.750071;-0.207214;-5.500957;, + -8.750072; 0.043989;-6.438456;, + -7.500071;-0.207211;-5.500957;, + -7.500072;-0.893508;-4.814660;, + -8.750072;-0.893508;-4.814660;, + -8.750071;-0.207214;-5.500957;, + -7.500072;-0.893508;-4.814660;, + -7.500071;-1.831008;-4.563454;, + -8.750072;-1.831008;-4.563454;, + -8.750072;-0.893508;-4.814660;, + -7.500071;-1.831008;-4.563454;, + -7.500072;-2.768508;-4.814656;, + -8.750072;-2.768509;-4.814656;, + -8.750072;-1.831008;-4.563454;, + -7.500072;-2.768508;-4.814656;, + -7.500073;-3.454807;-5.500954;, + -8.750072;-3.454809;-5.500954;, + -8.750072;-2.768509;-4.814656;, + -7.500073;-3.454807;-5.500954;, + -7.500072;-3.706011;-6.438456;, + -8.750072;-3.706011;-6.438456;, + -8.750072;-3.454809;-5.500954;, + -7.500073;-3.454807;-5.500954;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-3.706011;-6.438456;, + -7.500072;-2.768508;-4.814656;, + -8.750072;-1.831011;-6.438456;, + -7.500073;-3.454807;-5.500954;, + -7.500071;-1.831008;-4.563454;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-2.768508;-4.814656;, + -7.500072;-0.893508;-4.814660;, + -8.750072;-1.831011;-6.438456;, + -7.500071;-1.831008;-4.563454;, + -7.500071;-0.207211;-5.500957;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-0.893508;-4.814660;, + -7.500072; 0.043988;-6.438456;, + -8.750072;-1.831011;-6.438456;, + -7.500071;-0.207211;-5.500957;, + -7.500072;-0.207215;-7.375956;, + -8.750072;-1.831011;-6.438456;, + -7.500072; 0.043988;-6.438456;, + -7.500071;-0.893512;-8.062252;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-0.207215;-7.375956;, + -7.500072;-1.831012;-8.313455;, + -8.750072;-1.831011;-6.438456;, + -7.500071;-0.893512;-8.062252;, + -7.500072;-2.768512;-8.062252;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-1.831012;-8.313455;, + -7.500072;-3.454809;-7.375956;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-2.768512;-8.062252;, + -7.500072;-3.706011;-6.438456;, + -8.750072;-1.831011;-6.438456;, + -7.500072;-3.454809;-7.375956;, + -6.250068;-5.581008;15.436543;, + -6.250069;-5.078602;13.561544;, + -6.250070;-1.831008;15.436544;, + -6.250069;-5.078602;13.561544;, + -6.250071;-3.706008;12.188950;, + -6.250070;-1.831008;15.436544;, + -6.250071;-3.706008;12.188950;, + -6.250071;-1.831009;11.686544;, + -6.250070;-1.831008;15.436544;, + -6.250071;-1.831009;11.686544;, + -6.250070; 0.043993;12.188948;, + -6.250070;-1.831008;15.436544;, + -6.250070; 0.043993;12.188948;, + -6.250073; 1.416589;13.561543;, + -6.250070;-1.831008;15.436544;, + -6.250073; 1.416589;13.561543;, + -6.250073; 1.918992;15.436543;, + -6.250070;-1.831008;15.436544;, + -6.250073; 1.918992;15.436543;, + -6.250072; 1.416590;17.311543;, + -6.250070;-1.831008;15.436544;, + -6.250072; 1.416590;17.311543;, + -6.250070; 0.043994;18.684135;, + -6.250070;-1.831008;15.436544;, + -6.250070; 0.043994;18.684135;, + -6.250071;-1.831005;19.186543;, + -6.250070;-1.831008;15.436544;, + -6.250071;-1.831005;19.186543;, + -6.250071;-3.706004;18.684137;, + -6.250070;-1.831008;15.436544;, + -6.250071;-3.706004;18.684137;, + -6.250069;-5.078600;17.311543;, + -6.250070;-1.831008;15.436544;, + -6.250068;-5.581008;15.436543;, + -6.250070;-1.831008;15.436544;, + -6.250069;-5.078600;17.311543;, + -8.750070;-5.078605;13.561545;, + -6.250069;-5.078602;13.561544;, + -6.250068;-5.581008;15.436543;, + -8.750070;-5.581007;15.436545;, + -8.750072;-3.706011;12.188951;, + -6.250071;-3.706008;12.188950;, + -6.250069;-5.078602;13.561544;, + -8.750070;-5.078605;13.561545;, + -8.750072;-1.831013;11.686543;, + -6.250071;-1.831009;11.686544;, + -6.250071;-3.706008;12.188950;, + -8.750072;-3.706011;12.188951;, + -8.750071; 0.043989;12.188947;, + -6.250070; 0.043993;12.188948;, + -6.250071;-1.831009;11.686544;, + -8.750072;-1.831013;11.686543;, + -8.750072; 1.416584;13.561542;, + -6.250073; 1.416589;13.561543;, + -6.250070; 0.043993;12.188948;, + -8.750071; 0.043989;12.188947;, + -8.750072; 1.918992;15.436542;, + -6.250073; 1.918992;15.436543;, + -6.250073; 1.416589;13.561543;, + -8.750072; 1.416584;13.561542;, + -8.750072; 1.416590;17.311543;, + -6.250072; 1.416590;17.311543;, + -6.250073; 1.918992;15.436543;, + -8.750072; 1.918992;15.436542;, + -8.750071; 0.043996;18.684135;, + -6.250070; 0.043994;18.684135;, + -6.250072; 1.416590;17.311543;, + -8.750072; 1.416590;17.311543;, + -8.750071;-1.831002;19.186543;, + -6.250071;-1.831005;19.186543;, + -6.250070; 0.043994;18.684135;, + -8.750071; 0.043996;18.684135;, + -8.750072;-3.706005;18.684139;, + -6.250071;-3.706004;18.684137;, + -6.250071;-1.831005;19.186543;, + -8.750071;-1.831002;19.186543;, + -8.750070;-5.078600;17.311546;, + -6.250069;-5.078600;17.311543;, + -6.250071;-3.706004;18.684137;, + -8.750072;-3.706005;18.684139;, + -6.250069;-5.078600;17.311543;, + -8.750070;-5.078600;17.311546;, + -8.750070;-5.581007;15.436545;, + -6.250068;-5.581008;15.436543;, + -8.750072;-3.454805;16.374043;, + -8.750072;-3.706007;15.436547;, + -8.750070;-5.581007;15.436545;, + -8.750070;-5.078600;17.311546;, + -8.750072;-2.768505;17.060341;, + -8.750072;-3.454805;16.374043;, + -8.750070;-5.078600;17.311546;, + -8.750072;-3.706005;18.684139;, + -8.750072;-1.831004;17.311543;, + -8.750072;-2.768505;17.060341;, + -8.750072;-3.706005;18.684139;, + -8.750071;-1.831002;19.186543;, + -8.750071;-0.893504;17.060337;, + -8.750072;-1.831004;17.311543;, + -8.750071;-1.831002;19.186543;, + -8.750071; 0.043996;18.684135;, + -8.750071;-0.207211;16.374039;, + -8.750071;-0.893504;17.060337;, + -8.750071; 0.043996;18.684135;, + -8.750072; 1.416590;17.311543;, + -8.750071; 0.043992;15.436542;, + -8.750071;-0.207211;16.374039;, + -8.750072; 1.416590;17.311543;, + -8.750072; 1.918992;15.436542;, + -8.750071;-0.207211;14.499042;, + -8.750071; 0.043992;15.436542;, + -8.750072; 1.918992;15.436542;, + -8.750072; 1.416584;13.561542;, + -8.750072;-0.893511;13.812745;, + -8.750071;-0.207211;14.499042;, + -8.750072; 1.416584;13.561542;, + -8.750071; 0.043989;12.188947;, + -8.750072;-1.831010;13.561543;, + -8.750072;-0.893511;13.812745;, + -8.750071; 0.043989;12.188947;, + -8.750072;-1.831013;11.686543;, + -8.750072;-2.768511;13.812745;, + -8.750072;-1.831010;13.561543;, + -8.750072;-1.831013;11.686543;, + -8.750072;-3.706011;12.188951;, + -8.750072;-3.454806;14.499043;, + -8.750072;-2.768511;13.812745;, + -8.750072;-3.706011;12.188951;, + -8.750070;-5.078605;13.561545;, + -8.750072;-3.706007;15.436547;, + -8.750072;-3.454806;14.499043;, + -8.750070;-5.078605;13.561545;, + -8.750070;-5.581007;15.436545;, + -7.500071;-3.706007;15.436546;, + -7.500071;-3.454806;14.499044;, + -8.750072;-3.454806;14.499043;, + -8.750072;-3.706007;15.436547;, + -7.500071;-3.454806;14.499044;, + -7.500071;-2.768508;13.812746;, + -8.750072;-2.768511;13.812745;, + -8.750072;-3.454806;14.499043;, + -7.500071;-2.768508;13.812746;, + -7.500070;-1.831008;13.561544;, + -8.750072;-1.831010;13.561543;, + -8.750072;-2.768511;13.812745;, + -7.500070;-1.831008;13.561544;, + -7.500070;-0.893508;13.812746;, + -8.750072;-0.893511;13.812745;, + -8.750072;-1.831010;13.561543;, + -7.500070;-0.893508;13.812746;, + -7.500070;-0.207211;14.499041;, + -8.750071;-0.207211;14.499042;, + -8.750072;-0.893511;13.812745;, + -7.500070;-0.207211;14.499041;, + -7.500070; 0.043992;15.436541;, + -8.750071; 0.043992;15.436542;, + -8.750071;-0.207211;14.499042;, + -7.500070; 0.043992;15.436541;, + -7.500071;-0.207208;16.374041;, + -8.750071;-0.207211;16.374039;, + -8.750071; 0.043992;15.436542;, + -7.500071;-0.207208;16.374041;, + -7.500071;-0.893505;17.060337;, + -8.750071;-0.893504;17.060337;, + -8.750071;-0.207211;16.374039;, + -7.500071;-0.893505;17.060337;, + -7.500071;-1.831005;17.311543;, + -8.750072;-1.831004;17.311543;, + -8.750071;-0.893504;17.060337;, + -7.500071;-1.831005;17.311543;, + -7.500071;-2.768504;17.060341;, + -8.750072;-2.768505;17.060341;, + -8.750072;-1.831004;17.311543;, + -7.500071;-2.768504;17.060341;, + -7.500072;-3.454803;16.374043;, + -8.750072;-3.454805;16.374043;, + -8.750072;-2.768505;17.060341;, + -7.500072;-3.454803;16.374043;, + -7.500071;-3.706007;15.436546;, + -8.750072;-3.706007;15.436547;, + -8.750072;-3.454805;16.374043;, + -7.500072;-3.454803;16.374043;, + -8.750072;-1.831008;15.436543;, + -7.500071;-3.706007;15.436546;, + -7.500071;-2.768504;17.060341;, + -8.750072;-1.831008;15.436543;, + -7.500072;-3.454803;16.374043;, + -7.500071;-1.831005;17.311543;, + -8.750072;-1.831008;15.436543;, + -7.500071;-2.768504;17.060341;, + -7.500071;-0.893505;17.060337;, + -8.750072;-1.831008;15.436543;, + -7.500071;-1.831005;17.311543;, + -7.500071;-0.207208;16.374041;, + -8.750072;-1.831008;15.436543;, + -7.500071;-0.893505;17.060337;, + -7.500070; 0.043992;15.436541;, + -8.750072;-1.831008;15.436543;, + -7.500071;-0.207208;16.374041;, + -7.500070;-0.207211;14.499041;, + -8.750072;-1.831008;15.436543;, + -7.500070; 0.043992;15.436541;, + -7.500070;-0.893508;13.812746;, + -8.750072;-1.831008;15.436543;, + -7.500070;-0.207211;14.499041;, + -7.500070;-1.831008;13.561544;, + -8.750072;-1.831008;15.436543;, + -7.500070;-0.893508;13.812746;, + -7.500071;-2.768508;13.812746;, + -8.750072;-1.831008;15.436543;, + -7.500070;-1.831008;13.561544;, + -7.500071;-3.454806;14.499044;, + -8.750072;-1.831008;15.436543;, + -7.500071;-2.768508;13.812746;, + -7.500071;-3.706007;15.436546;, + -8.750072;-1.831008;15.436543;, + -7.500071;-3.454806;14.499044;, + 6.249932; 1.918990;15.436543;, + 6.249932; 1.416587;13.561543;, + 6.249928;-1.831009;15.436543;, + 6.249932; 1.416587;13.561543;, + 6.249930; 0.043989;12.188949;, + 6.249928;-1.831009;15.436543;, + 6.249930; 0.043989;12.188949;, + 6.249928;-1.831010;11.686543;, + 6.249928;-1.831009;15.436543;, + 6.249928;-1.831010;11.686543;, + 6.249928;-3.706010;12.188950;, + 6.249928;-1.831009;15.436543;, + 6.249928;-3.706010;12.188950;, + 6.249927;-5.078604;13.561544;, + 6.249928;-1.831009;15.436543;, + 6.249927;-5.078604;13.561544;, + 6.249927;-5.581009;15.436544;, + 6.249928;-1.831009;15.436543;, + 6.249927;-5.581009;15.436544;, + 6.249926;-5.078603;17.311543;, + 6.249928;-1.831009;15.436543;, + 6.249926;-5.078603;17.311543;, + 6.249929;-3.706009;18.684135;, + 6.249928;-1.831009;15.436543;, + 6.249929;-3.706009;18.684135;, + 6.249929;-1.831009;19.186543;, + 6.249928;-1.831009;15.436543;, + 6.249929;-1.831009;19.186543;, + 6.249929; 0.043990;18.684137;, + 6.249928;-1.831009;15.436543;, + 6.249929; 0.043990;18.684137;, + 6.249931; 1.416585;17.311543;, + 6.249928;-1.831009;15.436543;, + 6.249932; 1.918990;15.436543;, + 6.249928;-1.831009;15.436543;, + 6.249931; 1.416585;17.311543;, + 8.749932; 1.416585;13.561545;, + 6.249932; 1.416587;13.561543;, + 6.249932; 1.918990;15.436543;, + 8.749932; 1.918990;15.436545;, + 8.749930; 0.043992;12.188951;, + 6.249930; 0.043989;12.188949;, + 6.249932; 1.416587;13.561543;, + 8.749932; 1.416585;13.561545;, + 8.749928;-1.831008;11.686543;, + 6.249928;-1.831010;11.686543;, + 6.249930; 0.043989;12.188949;, + 8.749930; 0.043992;12.188951;, + 8.749928;-3.706008;12.188948;, + 6.249928;-3.706010;12.188950;, + 6.249928;-1.831010;11.686543;, + 8.749928;-1.831008;11.686543;, + 8.749927;-5.078604;13.561543;, + 6.249927;-5.078604;13.561544;, + 6.249928;-3.706010;12.188950;, + 8.749928;-3.706008;12.188948;, + 8.749927;-5.581009;15.436543;, + 6.249927;-5.581009;15.436544;, + 6.249927;-5.078604;13.561544;, + 8.749927;-5.078604;13.561543;, + 8.749926;-5.078607;17.311541;, + 6.249926;-5.078603;17.311543;, + 6.249927;-5.581009;15.436544;, + 8.749927;-5.581009;15.436543;, + 8.749928;-3.706014;18.684135;, + 6.249929;-3.706009;18.684135;, + 6.249926;-5.078603;17.311543;, + 8.749926;-5.078607;17.311541;, + 8.749929;-1.831014;19.186543;, + 6.249929;-1.831009;19.186543;, + 6.249929;-3.706009;18.684135;, + 8.749928;-3.706014;18.684135;, + 8.749929; 0.043986;18.684139;, + 6.249929; 0.043990;18.684137;, + 6.249929;-1.831009;19.186543;, + 8.749929;-1.831014;19.186543;, + 8.749931; 1.416583;17.311546;, + 6.249931; 1.416585;17.311543;, + 6.249929; 0.043990;18.684137;, + 8.749929; 0.043986;18.684139;, + 6.249931; 1.416585;17.311543;, + 8.749931; 1.416583;17.311546;, + 8.749932; 1.918990;15.436545;, + 6.249932; 1.918990;15.436543;, + 8.749929;-0.207215;16.374043;, + 8.749928; 0.043990;15.436545;, + 8.749932; 1.918990;15.436545;, + 8.749931; 1.416583;17.311546;, + 8.749929;-0.893512;17.060341;, + 8.749929;-0.207215;16.374043;, + 8.749931; 1.416583;17.311546;, + 8.749929; 0.043986;18.684139;, + 8.749928;-1.831012;17.311543;, + 8.749929;-0.893512;17.060341;, + 8.749929; 0.043986;18.684139;, + 8.749929;-1.831014;19.186543;, + 8.749928;-2.768512;17.060337;, + 8.749928;-1.831012;17.311543;, + 8.749929;-1.831014;19.186543;, + 8.749928;-3.706014;18.684135;, + 8.749929;-3.454809;16.374041;, + 8.749928;-2.768512;17.060337;, + 8.749928;-3.706014;18.684135;, + 8.749926;-5.078607;17.311541;, + 8.749928;-3.706009;15.436543;, + 8.749929;-3.454809;16.374041;, + 8.749926;-5.078607;17.311541;, + 8.749927;-5.581009;15.436543;, + 8.749928;-3.454808;14.499043;, + 8.749928;-3.706009;15.436543;, + 8.749927;-5.581009;15.436543;, + 8.749927;-5.078604;13.561543;, + 8.749929;-2.768510;13.812746;, + 8.749928;-3.454808;14.499043;, + 8.749927;-5.078604;13.561543;, + 8.749928;-3.706008;12.188948;, + 8.749928;-1.831010;13.561543;, + 8.749929;-2.768510;13.812746;, + 8.749928;-3.706008;12.188948;, + 8.749928;-1.831008;11.686543;, + 8.749929;-0.893510;13.812746;, + 8.749928;-1.831010;13.561543;, + 8.749928;-1.831008;11.686543;, + 8.749930; 0.043992;12.188951;, + 8.749930;-0.207213;14.499043;, + 8.749929;-0.893510;13.812746;, + 8.749930; 0.043992;12.188951;, + 8.749932; 1.416585;13.561545;, + 8.749928; 0.043990;15.436545;, + 8.749930;-0.207213;14.499043;, + 8.749932; 1.416585;13.561545;, + 8.749932; 1.918990;15.436545;, + 7.499930; 0.043990;15.436545;, + 7.499930;-0.207213;14.499043;, + 8.749930;-0.207213;14.499043;, + 8.749928; 0.043990;15.436545;, + 7.499930;-0.207213;14.499043;, + 7.499929;-0.893510;13.812746;, + 8.749929;-0.893510;13.812746;, + 8.749930;-0.207213;14.499043;, + 7.499929;-0.893510;13.812746;, + 7.499928;-1.831010;13.561543;, + 8.749928;-1.831010;13.561543;, + 8.749929;-0.893510;13.812746;, + 7.499928;-1.831010;13.561543;, + 7.499929;-2.768510;13.812746;, + 8.749929;-2.768510;13.812746;, + 8.749928;-1.831010;13.561543;, + 7.499929;-2.768510;13.812746;, + 7.499928;-3.454807;14.499043;, + 8.749928;-3.454808;14.499043;, + 8.749929;-2.768510;13.812746;, + 7.499928;-3.454807;14.499043;, + 7.499928;-3.706010;15.436543;, + 8.749928;-3.706009;15.436543;, + 8.749928;-3.454808;14.499043;, + 7.499928;-3.706010;15.436543;, + 7.499929;-3.454809;16.374041;, + 8.749929;-3.454809;16.374041;, + 8.749928;-3.706009;15.436543;, + 7.499929;-3.454809;16.374041;, + 7.499929;-2.768512;17.060337;, + 8.749928;-2.768512;17.060337;, + 8.749929;-3.454809;16.374041;, + 7.499929;-2.768512;17.060337;, + 7.499929;-1.831012;17.311543;, + 8.749928;-1.831012;17.311543;, + 8.749928;-2.768512;17.060337;, + 7.499929;-1.831012;17.311543;, + 7.499929;-0.893512;17.060341;, + 8.749929;-0.893512;17.060341;, + 8.749928;-1.831012;17.311543;, + 7.499929;-0.893512;17.060341;, + 7.499929;-0.207215;16.374043;, + 8.749929;-0.207215;16.374043;, + 8.749929;-0.893512;17.060341;, + 7.499929;-0.207215;16.374043;, + 7.499930; 0.043990;15.436545;, + 8.749928; 0.043990;15.436545;, + 8.749929;-0.207215;16.374043;, + 7.499929;-0.207215;16.374043;, + 8.749928;-1.831010;15.436543;, + 7.499930; 0.043990;15.436545;, + 7.499929;-0.893512;17.060341;, + 8.749928;-1.831010;15.436543;, + 7.499929;-0.207215;16.374043;, + 7.499929;-1.831012;17.311543;, + 8.749928;-1.831010;15.436543;, + 7.499929;-0.893512;17.060341;, + 7.499929;-2.768512;17.060337;, + 8.749928;-1.831010;15.436543;, + 7.499929;-1.831012;17.311543;, + 7.499929;-3.454809;16.374041;, + 8.749928;-1.831010;15.436543;, + 7.499929;-2.768512;17.060337;, + 7.499928;-3.706010;15.436543;, + 8.749928;-1.831010;15.436543;, + 7.499929;-3.454809;16.374041;, + 7.499928;-3.454807;14.499043;, + 8.749928;-1.831010;15.436543;, + 7.499928;-3.706010;15.436543;, + 7.499929;-2.768510;13.812746;, + 8.749928;-1.831010;15.436543;, + 7.499928;-3.454807;14.499043;, + 7.499928;-1.831010;13.561543;, + 8.749928;-1.831010;15.436543;, + 7.499929;-2.768510;13.812746;, + 7.499929;-0.893510;13.812746;, + 8.749928;-1.831010;15.436543;, + 7.499928;-1.831010;13.561543;, + 7.499930;-0.207213;14.499043;, + 8.749928;-1.831010;15.436543;, + 7.499929;-0.893510;13.812746;, + 7.499930; 0.043990;15.436545;, + 8.749928;-1.831010;15.436543;, + 7.499930;-0.207213;14.499043;, + 6.249931; 1.918986;-6.438457;, + 6.249931; 1.416584;-8.313455;, + 6.249928;-1.831013;-6.438457;, + 6.249931; 1.416584;-8.313455;, + 6.249929; 0.043986;-9.686049;, + 6.249928;-1.831013;-6.438457;, + 6.249929; 0.043986;-9.686049;, + 6.249928;-1.831013;-10.188455;, + 6.249928;-1.831013;-6.438457;, + 6.249928;-1.831013;-10.188455;, + 6.249928;-3.706014;-9.686049;, + 6.249928;-1.831013;-6.438457;, + 6.249928;-3.706014;-9.686049;, + 6.249925;-5.078608;-8.313454;, + 6.249928;-1.831013;-6.438457;, + 6.249925;-5.078608;-8.313454;, + 6.249925;-5.581012;-6.438456;, + 6.249928;-1.831013;-6.438457;, + 6.249925;-5.581012;-6.438456;, + 6.249925;-5.078607;-4.563455;, + 6.249928;-1.831013;-6.438457;, + 6.249925;-5.078607;-4.563455;, + 6.249928;-3.706013;-3.190863;, + 6.249928;-1.831013;-6.438457;, + 6.249928;-3.706013;-3.190863;, + 6.249928;-1.831012;-2.688457;, + 6.249928;-1.831013;-6.438457;, + 6.249928;-1.831012;-2.688457;, + 6.249929; 0.043987;-3.190862;, + 6.249928;-1.831013;-6.438457;, + 6.249929; 0.043987;-3.190862;, + 6.249931; 1.416581;-4.563453;, + 6.249928;-1.831013;-6.438457;, + 6.249931; 1.918986;-6.438457;, + 6.249928;-1.831013;-6.438457;, + 6.249931; 1.416581;-4.563453;, + 8.749930; 1.416581;-8.313453;, + 6.249931; 1.416584;-8.313455;, + 6.249931; 1.918986;-6.438457;, + 8.749930; 1.918987;-6.438455;, + 8.749928; 0.043988;-9.686046;, + 6.249929; 0.043986;-9.686049;, + 6.249931; 1.416584;-8.313455;, + 8.749930; 1.416581;-8.313453;, + 8.749928;-1.831012;-10.188455;, + 6.249928;-1.831013;-10.188455;, + 6.249929; 0.043986;-9.686049;, + 8.749928; 0.043988;-9.686046;, + 8.749928;-3.706012;-9.686049;, + 6.249928;-3.706014;-9.686049;, + 6.249928;-1.831013;-10.188455;, + 8.749928;-1.831012;-10.188455;, + 8.749926;-5.078608;-8.313455;, + 6.249925;-5.078608;-8.313454;, + 6.249928;-3.706014;-9.686049;, + 8.749928;-3.706012;-9.686049;, + 8.749926;-5.581013;-6.438457;, + 6.249925;-5.581012;-6.438456;, + 6.249925;-5.078608;-8.313454;, + 8.749926;-5.078608;-8.313455;, + 8.749926;-5.078610;-4.563457;, + 6.249925;-5.078607;-4.563455;, + 6.249925;-5.581012;-6.438456;, + 8.749926;-5.581013;-6.438457;, + 8.749928;-3.706017;-3.190864;, + 6.249928;-3.706013;-3.190863;, + 6.249925;-5.078607;-4.563455;, + 8.749926;-5.078610;-4.563457;, + 8.749928;-1.831017;-2.688457;, + 6.249928;-1.831012;-2.688457;, + 6.249928;-3.706013;-3.190863;, + 8.749928;-3.706017;-3.190864;, + 8.749928; 0.043982;-3.190859;, + 6.249929; 0.043987;-3.190862;, + 6.249928;-1.831012;-2.688457;, + 8.749928;-1.831017;-2.688457;, + 8.749930; 1.416579;-4.563451;, + 6.249931; 1.416581;-4.563453;, + 6.249929; 0.043987;-3.190862;, + 8.749928; 0.043982;-3.190859;, + 6.249931; 1.416581;-4.563453;, + 8.749930; 1.416579;-4.563451;, + 8.749930; 1.918987;-6.438455;, + 6.249931; 1.918986;-6.438457;, + 8.749928;-0.207219;-5.500956;, + 8.749928; 0.043987;-6.438457;, + 8.749930; 1.918987;-6.438455;, + 8.749930; 1.416579;-4.563451;, + 8.749928;-0.893516;-4.814658;, + 8.749928;-0.207219;-5.500956;, + 8.749930; 1.416579;-4.563451;, + 8.749928; 0.043982;-3.190859;, + 8.749928;-1.831016;-4.563455;, + 8.749928;-0.893516;-4.814658;, + 8.749928; 0.043982;-3.190859;, + 8.749928;-1.831017;-2.688457;, + 8.749928;-2.768516;-4.814660;, + 8.749928;-1.831016;-4.563455;, + 8.749928;-1.831017;-2.688457;, + 8.749928;-3.706017;-3.190864;, + 8.749928;-3.454813;-5.500957;, + 8.749928;-2.768516;-4.814660;, + 8.749928;-3.706017;-3.190864;, + 8.749926;-5.078610;-4.563457;, + 8.749928;-3.706013;-6.438457;, + 8.749928;-3.454813;-5.500957;, + 8.749926;-5.078610;-4.563457;, + 8.749926;-5.581013;-6.438457;, + 8.749928;-3.454811;-7.375957;, + 8.749928;-3.706013;-6.438457;, + 8.749926;-5.581013;-6.438457;, + 8.749926;-5.078608;-8.313455;, + 8.749928;-2.768513;-8.062251;, + 8.749928;-3.454811;-7.375957;, + 8.749926;-5.078608;-8.313455;, + 8.749928;-3.706012;-9.686049;, + 8.749928;-1.831013;-8.313455;, + 8.749928;-2.768513;-8.062251;, + 8.749928;-3.706012;-9.686049;, + 8.749928;-1.831012;-10.188455;, + 8.749928;-0.893513;-8.062251;, + 8.749928;-1.831013;-8.313455;, + 8.749928;-1.831012;-10.188455;, + 8.749928; 0.043988;-9.686046;, + 8.749928;-0.207216;-7.375957;, + 8.749928;-0.893513;-8.062251;, + 8.749928; 0.043988;-9.686046;, + 8.749930; 1.416581;-8.313453;, + 8.749928; 0.043987;-6.438457;, + 8.749928;-0.207216;-7.375957;, + 8.749930; 1.416581;-8.313453;, + 8.749930; 1.918987;-6.438455;, + 7.499929; 0.043986;-6.438457;, + 7.499929;-0.207216;-7.375957;, + 8.749928;-0.207216;-7.375957;, + 8.749928; 0.043987;-6.438457;, + 7.499929;-0.207216;-7.375957;, + 7.499929;-0.893513;-8.062252;, + 8.749928;-0.893513;-8.062251;, + 8.749928;-0.207216;-7.375957;, + 7.499929;-0.893513;-8.062252;, + 7.499928;-1.831013;-8.313455;, + 8.749928;-1.831013;-8.313455;, + 8.749928;-0.893513;-8.062251;, + 7.499928;-1.831013;-8.313455;, + 7.499928;-2.768514;-8.062252;, + 8.749928;-2.768513;-8.062251;, + 8.749928;-1.831013;-8.313455;, + 7.499928;-2.768514;-8.062252;, + 7.499928;-3.454811;-7.375957;, + 8.749928;-3.454811;-7.375957;, + 8.749928;-2.768513;-8.062251;, + 7.499928;-3.454811;-7.375957;, + 7.499928;-3.706013;-6.438457;, + 8.749928;-3.706013;-6.438457;, + 8.749928;-3.454811;-7.375957;, + 7.499928;-3.706013;-6.438457;, + 7.499928;-3.454813;-5.500957;, + 8.749928;-3.454813;-5.500957;, + 8.749928;-3.706013;-6.438457;, + 7.499928;-3.454813;-5.500957;, + 7.499928;-2.768515;-4.814660;, + 8.749928;-2.768516;-4.814660;, + 8.749928;-3.454813;-5.500957;, + 7.499928;-2.768515;-4.814660;, + 7.499929;-1.831016;-4.563456;, + 8.749928;-1.831016;-4.563455;, + 8.749928;-2.768516;-4.814660;, + 7.499929;-1.831016;-4.563456;, + 7.499928;-0.893516;-4.814658;, + 8.749928;-0.893516;-4.814658;, + 8.749928;-1.831016;-4.563455;, + 7.499928;-0.893516;-4.814658;, + 7.499929;-0.207219;-5.500956;, + 8.749928;-0.207219;-5.500956;, + 8.749928;-0.893516;-4.814658;, + 7.499929;-0.207219;-5.500956;, + 7.499929; 0.043986;-6.438457;, + 8.749928; 0.043987;-6.438457;, + 8.749928;-0.207219;-5.500956;, + 7.499929;-0.207219;-5.500956;, + 8.749928;-1.831013;-6.438457;, + 7.499929; 0.043986;-6.438457;, + 7.499928;-0.893516;-4.814658;, + 8.749928;-1.831013;-6.438457;, + 7.499929;-0.207219;-5.500956;, + 7.499929;-1.831016;-4.563456;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-0.893516;-4.814658;, + 7.499928;-2.768515;-4.814660;, + 8.749928;-1.831013;-6.438457;, + 7.499929;-1.831016;-4.563456;, + 7.499928;-3.454813;-5.500957;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-2.768515;-4.814660;, + 7.499928;-3.706013;-6.438457;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-3.454813;-5.500957;, + 7.499928;-3.454811;-7.375957;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-3.706013;-6.438457;, + 7.499928;-2.768514;-8.062252;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-3.454811;-7.375957;, + 7.499928;-1.831013;-8.313455;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-2.768514;-8.062252;, + 7.499929;-0.893513;-8.062252;, + 8.749928;-1.831013;-6.438457;, + 7.499928;-1.831013;-8.313455;, + 7.499929;-0.207216;-7.375957;, + 8.749928;-1.831013;-6.438457;, + 7.499929;-0.893513;-8.062252;, + 7.499929; 0.043986;-6.438457;, + 8.749928;-1.831013;-6.438457;, + 7.499929;-0.207216;-7.375957;, + 9.999928; 5.668987;-2.688458;, + 8.749928; 5.668985;-11.438457;, + 8.749931; 6.918987;-3.938444;, + 7.499934;13.168989; 2.311541;, + 9.999928; 5.668987;-2.688458;, + 8.749931; 6.918987;-3.938444;, + 8.749928; 5.668985;-11.438457;, + 3.749928; 5.668986;-12.688445;, + 3.749929; 7.543987;-5.188457;, + 8.749931; 6.918987;-3.938444;, + 3.749929; 5.668992;22.311543;, + 8.749929; 5.668991;21.061541;, + 7.499930;13.168992;15.436542;, + 3.749931;13.793988;16.061541;, + 8.749931; 6.918987;-3.938444;, + 3.749929; 7.543987;-5.188457;, + 3.749931;13.793985; 1.061541;, + 7.499934;13.168989; 2.311541;, + 3.749928; 1.918985;-12.688454;, + 3.749928; 5.668986;-12.688445;, + 8.749928; 5.668985;-11.438457;, + 8.749928; 3.168986;-11.438457;, + 3.749928;-0.581014;-11.438455;, + 3.749928; 1.918985;-12.688454;, + 8.749928; 3.168986;-11.438457;, + 7.499929;-0.581014;-10.188456;, + 8.749929; 3.168991;21.061541;, + 8.749929; 5.668991;21.061541;, + 3.749929; 5.668992;22.311543;, + 3.749929; 3.168991;22.311543;, + 7.499929;-0.581009;19.811541;, + 8.749929; 3.168991;21.061541;, + 3.749929; 3.168991;22.311543;, + 3.749929;-0.581009;21.061541;, + 8.749929; 5.668991;21.061541;, + 9.999923; 5.668990;13.561543;, + 7.499930;13.168992;15.436542;, + -8.750070; 5.668993;21.061539;, + -7.500069;13.168994;15.436542;, + -10.000068; 5.668992;13.561542;, + 8.749924;-0.581012;-2.264622;, + 8.749923;-0.581010;11.061543;, + 3.749929;-1.831010;11.061543;, + 3.749929;-1.831013;-2.264621;, + 9.999928; 5.668987;-2.688458;, + 9.999923; 5.668990;13.561543;, + 9.999930; 3.168990;13.561543;, + 9.999928; 3.168987;-2.688457;, + 9.999928; 3.168987;-2.688457;, + 9.999930; 3.168990;13.561543;, + 8.749923;-0.581010;11.061543;, + 8.749924;-0.581012;-2.264622;, + -8.750069;-0.581011;-2.264623;, + -8.750072;-0.581008;11.061543;, + -10.000069; 3.168992;13.561542;, + -10.000071; 3.168989;-2.688457;, + -10.000071; 3.168989;-2.688457;, + -10.000069; 3.168992;13.561542;, + -10.000068; 5.668992;13.561542;, + -10.000063; 5.668989;-2.688457;, + -3.750072; 5.668986;-12.688456;, + -8.750072; 5.668987;-11.438456;, + -8.750060; 6.918989;-3.938469;, + -3.750071; 7.543987;-5.188457;, + 3.749928; 5.668986;-12.688445;, + -3.750072; 5.668986;-12.688456;, + -3.750071; 7.543987;-5.188457;, + 3.749929; 7.543987;-5.188457;, + -3.750071; 5.668992;22.311539;, + 3.749929; 5.668992;22.311543;, + 3.749931;13.793988;16.061541;, + -3.750070;13.793991;16.061539;, + -8.750070; 5.668993;21.061539;, + -3.750071; 5.668992;22.311539;, + -3.750070;13.793991;16.061539;, + -7.500069;13.168994;15.436542;, + -3.750071; 7.543987;-5.188457;, + -8.750060; 6.918989;-3.938469;, + -7.500067;13.168991; 2.311542;, + -3.750070;13.793988; 1.061542;, + 3.749929; 7.543987;-5.188457;, + -3.750071; 7.543987;-5.188457;, + -3.750070;13.793988; 1.061542;, + 3.749931;13.793985; 1.061541;, + -3.750072; 5.668986;-12.688456;, + 3.749928; 5.668986;-12.688445;, + 3.749928; 1.918985;-12.688454;, + -3.750072; 1.918987;-12.688455;, + -8.750072; 5.668987;-11.438456;, + -3.750072; 5.668986;-12.688456;, + -3.750072; 1.918987;-12.688455;, + -8.750072; 3.168988;-11.438456;, + -8.750072; 3.168988;-11.438456;, + -3.750072; 1.918987;-12.688455;, + -3.750072;-0.581013;-11.438455;, + -7.500072;-0.581012;-10.188455;, + 3.749928;-0.581014;-11.438455;, + -3.750072;-0.581013;-11.438455;, + -3.750072; 1.918987;-12.688455;, + 3.749928; 1.918985;-12.688454;, + -3.750071; 5.668992;22.311539;, + -8.750070; 5.668993;21.061539;, + -8.750070; 3.168993;21.061539;, + -3.750071; 3.168993;22.311539;, + 3.749929; 5.668992;22.311543;, + -3.750071; 5.668992;22.311539;, + -3.750071; 3.168993;22.311539;, + 3.749929; 3.168991;22.311543;, + -3.750071; 3.168993;22.311539;, + -8.750070; 3.168993;21.061539;, + -7.500070;-0.581007;19.811541;, + -3.750071;-0.581008;21.061541;, + 3.749929; 3.168991;22.311543;, + -3.750071; 3.168993;22.311539;, + -3.750071;-0.581008;21.061541;, + 3.749929;-0.581009;21.061541;, + -3.750071;-1.831009;11.061543;, + -8.750072;-0.581008;11.061543;, + -8.750069;-0.581011;-2.264623;, + -3.750071;-1.831011;-2.264623;, + 3.749929;-1.831010;11.061543;, + -3.750071;-1.831009;11.061543;, + -3.750071;-1.831011;-2.264623;, + 3.749929;-1.831013;-2.264621;, + 8.749928; 5.668985;-11.438457;, + 9.999928; 5.668987;-2.688458;, + 9.687428; 3.168987;-5.188457;, + 9.687428; 3.168987;-5.188457;, + 9.999928; 5.668987;-2.688458;, + 9.999928; 3.168987;-2.688457;, + 9.999928; 3.168987;-2.688457;, + 8.749924;-0.581012;-2.264622;, + 9.687428; 3.168987;-5.188457;, + -9.687571; 3.168989;-5.188455;, + -8.750069;-0.581011;-2.264623;, + -10.000071; 3.168989;-2.688457;, + -10.000063; 5.668989;-2.688457;, + -8.750072; 5.668987;-11.438456;, + -9.687571; 3.168989;-5.188455;, + -10.000071; 3.168989;-2.688457;, + -10.000063; 5.668989;-2.688457;, + -9.687571; 3.168989;-5.188455;, + 9.062428; 2.543986;-8.938455;, + 7.499929;-0.581014;-10.188456;, + 8.749928; 3.168986;-11.438457;, + -7.500072;-0.581012;-10.188455;, + -9.062572; 2.543988;-8.938455;, + -8.750072; 3.168988;-11.438456;, + -9.062572; 2.543988;-8.938455;, + -9.687571; 3.168989;-5.188455;, + -8.750072; 5.668987;-11.438456;, + -8.750072; 3.168988;-11.438456;, + 9.062428; 2.543986;-8.938455;, + 8.749928; 3.168986;-11.438457;, + 8.749928; 5.668985;-11.438457;, + 9.687428; 3.168987;-5.188457;, + 3.749928; 3.168987;-5.188456;, + 3.749929; 2.543986;-8.938455;, + 9.062428; 2.543986;-8.938455;, + 9.687428; 3.168987;-5.188457;, + -3.750072;-0.581013;-10.188455;, + -3.750072;-0.581013;-11.438455;, + 3.749928;-0.581014;-11.438455;, + 3.749928;-0.581014;-10.188455;, + 3.749928; 3.168987;-5.188456;, + 9.687428; 3.168987;-5.188457;, + 8.749924;-0.581012;-2.264622;, + 3.749929;-1.831013;-2.264621;, + 3.749928;-0.581014;-10.188455;, + 3.749928;-0.581014;-11.438455;, + 7.499929;-0.581014;-10.188456;, + 3.749929; 2.543986;-8.938455;, + 3.749928;-0.581014;-10.188455;, + 7.499929;-0.581014;-10.188456;, + 9.062428; 2.543986;-8.938455;, + 3.749929; 2.543986;-8.938455;, + 3.749928; 3.168987;-5.188456;, + 3.749929;-1.831013;-2.264621;, + 3.749928;-0.581014;-10.188455;, + -3.750072;-0.581013;-10.188455;, + 3.749928;-0.581014;-10.188455;, + 3.749929;-1.831013;-2.264621;, + -3.750071;-1.831011;-2.264623;, + -3.750071; 2.543988;-8.938455;, + -3.750071; 3.168988;-5.188456;, + -9.687571; 3.168989;-5.188455;, + -9.062572; 2.543988;-8.938455;, + -3.750071; 2.543988;-8.938455;, + -9.062572; 2.543988;-8.938455;, + -7.500072;-0.581012;-10.188455;, + -3.750072;-0.581013;-10.188455;, + -3.750071; 3.168988;-5.188456;, + -3.750071;-1.831011;-2.264623;, + -8.750069;-0.581011;-2.264623;, + -9.687571; 3.168989;-5.188455;, + -3.750071; 2.543988;-8.938455;, + -3.750072;-0.581013;-10.188455;, + -3.750071;-1.831011;-2.264623;, + -3.750071; 3.168988;-5.188456;, + -3.750072;-0.581013;-11.438455;, + -3.750072;-0.581013;-10.188455;, + -7.500072;-0.581012;-10.188455;, + 9.374929; 3.168991;17.311543;, + 8.749929; 5.668991;21.061541;, + 8.749929; 3.168991;21.061541;, + 8.749929; 3.168991;21.061541;, + 7.499929;-0.581009;19.811541;, + 9.374929; 3.168991;17.311543;, + 9.999930; 3.168990;13.561543;, + 9.999923; 5.668990;13.561543;, + 8.749929; 5.668991;21.061541;, + 9.374929; 3.168991;17.311543;, + -8.750070; 3.168993;21.061539;, + -8.750070; 5.668993;21.061539;, + -9.375071; 3.168993;17.311543;, + -8.750070; 3.168993;21.061539;, + -9.375071; 3.168993;17.311543;, + -7.500070;-0.581007;19.811541;, + -10.000069; 3.168992;13.561542;, + -9.375071; 3.168993;17.311543;, + -8.750070; 5.668993;21.061539;, + -10.000068; 5.668992;13.561542;, + -3.750071;-0.581008;19.811539;, + -3.750071;-1.831009;11.061543;, + 3.749929;-1.831010;11.061543;, + 3.749929;-0.581009;19.811539;, + -3.750071;-0.581008;21.061541;, + -3.750071;-0.581008;19.811539;, + 3.749929;-0.581009;19.811539;, + 3.749929;-0.581009;21.061541;, + 3.749929;-0.581009;21.061541;, + 3.749929;-0.581009;19.811539;, + 7.499929;-0.581009;19.811541;, + -3.750071;-0.581008;19.811539;, + -3.750071;-0.581008;21.061541;, + -7.500070;-0.581007;19.811541;, + -3.750071; 3.168991;13.561543;, + -3.750071; 3.168992;17.311543;, + -9.375071; 3.168993;17.311543;, + -10.000069; 3.168992;13.561542;, + 3.749929; 3.168990;17.311543;, + 3.749929;-0.581009;19.811539;, + 3.749929;-1.831010;11.061543;, + 3.749930; 3.168990;13.561543;, + -3.750071; 3.168991;13.561543;, + -10.000069; 3.168992;13.561542;, + -8.750072;-0.581008;11.061543;, + -3.750071;-1.831009;11.061543;, + -3.750071; 3.168992;17.311543;, + -3.750071; 3.168991;13.561543;, + -3.750071;-1.831009;11.061543;, + -3.750071;-0.581008;19.811539;, + -3.750071;-0.581008;19.811539;, + -7.500070;-0.581007;19.811541;, + -9.375071; 3.168993;17.311543;, + -3.750071; 3.168992;17.311543;, + -3.750070;13.793988; 1.061542;, + -3.750070;13.793991;16.061539;, + 3.749931;13.793988;16.061541;, + 3.749931;13.793985; 1.061541;, + 3.749931;13.793985; 1.061541;, + 3.749931;13.793988;16.061541;, + 7.499930;13.168992;15.436542;, + 7.499934;13.168989; 2.311541;, + -3.750070;13.793988; 1.061542;, + -7.500067;13.168991; 2.311542;, + -7.500069;13.168994;15.436542;, + -3.750070;13.793991;16.061539;, + -8.750072; 5.668987;-11.438456;, + -10.000063; 5.668989;-2.688457;, + -8.750060; 6.918989;-3.938469;, + -10.000063; 5.668989;-2.688457;, + -7.500067;13.168991; 2.311542;, + -8.750060; 6.918989;-3.938469;, + 3.749929; 3.168990;17.311543;, + 9.374929; 3.168991;17.311543;, + 7.499929;-0.581009;19.811541;, + 3.749929;-0.581009;19.811539;, + 3.749929; 3.168990;17.311543;, + 3.749930; 3.168990;13.561543;, + 9.999930; 3.168990;13.561543;, + 9.374929; 3.168991;17.311543;, + 3.749930; 3.168990;13.561543;, + 3.749929;-1.831010;11.061543;, + 8.749923;-0.581010;11.061543;, + 9.999930; 3.168990;13.561543;, + 7.812430;12.231491;13.366229;, + 7.812433;12.231490; 3.522479;, + 7.499934;13.168989; 2.311541;, + 7.499930;13.168992;15.436542;, + 9.687427; 6.606488;11.959980;, + 7.812430;12.231491;13.366229;, + 7.499930;13.168992;15.436542;, + 9.999923; 5.668990;13.561543;, + 9.687428; 6.606487;-0.227520;, + 9.687427; 6.606488;11.959980;, + 9.999923; 5.668990;13.561543;, + 9.999928; 5.668987;-2.688458;, + 7.812433;12.231490; 3.522479;, + 9.687428; 6.606487;-0.227520;, + 9.999928; 5.668987;-2.688458;, + 7.499934;13.168989; 2.311541;, + 9.687427; 6.606488;11.959980;, + 9.687428; 6.606487;-0.227520;, + 7.812433;12.231490; 3.522479;, + 7.812430;12.231491;13.366229;, + -7.812567;12.231492; 3.522480;, + -7.812569;12.231493;13.366229;, + -7.500069;13.168994;15.436542;, + -7.500067;13.168991; 2.311542;, + -7.812569;12.231493;13.366229;, + -9.687568; 6.606491;11.959979;, + -10.000068; 5.668992;13.561542;, + -7.500069;13.168994;15.436542;, + -9.687568; 6.606491;11.959979;, + -9.687565; 6.606489;-0.227519;, + -10.000063; 5.668989;-2.688457;, + -10.000068; 5.668992;13.561542;, + -9.687565; 6.606489;-0.227519;, + -7.812567;12.231492; 3.522480;, + -7.500067;13.168991; 2.311542;, + -10.000063; 5.668989;-2.688457;, + -9.687568; 6.606491;11.959979;, + -7.812569;12.231493;13.366229;, + -7.812567;12.231492; 3.522480;, + -9.687565; 6.606489;-0.227519;; + 510; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 4;339,338,337,336;, + 4;343,342,341,340;, + 4;347,346,345,344;, + 4;351,350,349,348;, + 4;355,354,353,352;, + 4;359,358,357,356;, + 4;363,362,361,360;, + 4;367,366,365,364;, + 4;371,370,369,368;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 4;471,470,469,468;, + 4;475,474,473,472;, + 4;479,478,477,476;, + 4;483,482,481,480;, + 4;487,486,485,484;, + 4;491,490,489,488;, + 4;495,494,493,492;, + 4;499,498,497,496;, + 4;503,502,501,500;, + 4;507,506,505,504;, + 4;511,510,509,508;, + 4;515,514,513,512;, + 4;519,518,517,516;, + 4;523,522,521,520;, + 4;527,526,525,524;, + 4;531,530,529,528;, + 4;535,534,533,532;, + 4;539,538,537,536;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 3;614,613,612;, + 3;617,616,615;, + 4;621,620,619,618;, + 4;625,624,623,622;, + 4;629,628,627,626;, + 4;633,632,631,630;, + 3;636,635,634;, + 3;639,638,637;, + 3;642,641,640;, + 3;645,644,643;, + 3;648,647,646;, + 3;651,650,649;, + 3;654,653,652;, + 3;657,656,655;, + 4;661,660,659,658;, + 4;665,664,663,662;, + 4;669,668,667,666;, + 4;673,672,671,670;, + 3;676,675,674;, + 3;679,678,677;, + 3;682,681,680;, + 3;685,684,683;, + 3;688,687,686;, + 3;691,690,689;, + 3;694,693,692;, + 3;697,696,695;, + 4;701,700,699,698;, + 4;705,704,703,702;, + 4;709,708,707,706;, + 4;713,712,711,710;, + 3;716,715,714;, + 3;719,718,717;, + 3;722,721,720;, + 3;725,724,723;, + 3;728,727,726;, + 3;731,730,729;, + 3;734,733,732;, + 3;737,736,735;, + 3;740,739,738;, + 3;743,742,741;, + 3;746,745,744;, + 3;749,748,747;, + 4;753,752,751,750;, + 4;757,756,755,754;, + 4;761,760,759,758;, + 4;765,764,763,762;, + 4;769,768,767,766;, + 4;773,772,771,770;, + 4;777,776,775,774;, + 4;781,780,779,778;, + 4;785,784,783,782;, + 4;789,788,787,786;, + 4;793,792,791,790;, + 4;797,796,795,794;, + 4;801,800,799,798;, + 4;805,804,803,802;, + 4;809,808,807,806;, + 4;813,812,811,810;, + 4;817,816,815,814;, + 4;821,820,819,818;, + 4;825,824,823,822;, + 4;829,828,827,826;, + 4;833,832,831,830;, + 4;837,836,835,834;, + 4;841,840,839,838;, + 4;845,844,843,842;, + 4;849,848,847,846;, + 4;853,852,851,850;, + 4;857,856,855,854;, + 4;861,860,859,858;, + 4;865,864,863,862;, + 4;869,868,867,866;, + 4;873,872,871,870;, + 4;877,876,875,874;, + 4;881,880,879,878;, + 4;885,884,883,882;, + 4;889,888,887,886;, + 4;893,892,891,890;, + 3;896,895,894;, + 3;899,898,897;, + 3;902,901,900;, + 3;905,904,903;, + 3;908,907,906;, + 3;911,910,909;, + 3;914,913,912;, + 3;917,916,915;, + 3;920,919,918;, + 3;923,922,921;, + 3;926,925,924;, + 3;929,928,927;, + 3;932,931,930;, + 3;935,934,933;, + 3;938,937,936;, + 3;941,940,939;, + 3;944,943,942;, + 3;947,946,945;, + 3;950,949,948;, + 3;953,952,951;, + 3;956,955,954;, + 3;959,958,957;, + 3;962,961,960;, + 3;965,964,963;, + 4;969,968,967,966;, + 4;973,972,971,970;, + 4;977,976,975,974;, + 4;981,980,979,978;, + 4;985,984,983,982;, + 4;989,988,987,986;, + 4;993,992,991,990;, + 4;997,996,995,994;, + 4;1001,1000,999,998;, + 4;1005,1004,1003,1002;, + 4;1009,1008,1007,1006;, + 4;1013,1012,1011,1010;, + 4;1017,1016,1015,1014;, + 4;1021,1020,1019,1018;, + 4;1025,1024,1023,1022;, + 4;1029,1028,1027,1026;, + 4;1033,1032,1031,1030;, + 4;1037,1036,1035,1034;, + 4;1041,1040,1039,1038;, + 4;1045,1044,1043,1042;, + 4;1049,1048,1047,1046;, + 4;1053,1052,1051,1050;, + 4;1057,1056,1055,1054;, + 4;1061,1060,1059,1058;, + 4;1065,1064,1063,1062;, + 4;1069,1068,1067,1066;, + 4;1073,1072,1071,1070;, + 4;1077,1076,1075,1074;, + 4;1081,1080,1079,1078;, + 4;1085,1084,1083,1082;, + 4;1089,1088,1087,1086;, + 4;1093,1092,1091,1090;, + 4;1097,1096,1095,1094;, + 4;1101,1100,1099,1098;, + 4;1105,1104,1103,1102;, + 4;1109,1108,1107,1106;, + 3;1112,1111,1110;, + 3;1115,1114,1113;, + 3;1118,1117,1116;, + 3;1121,1120,1119;, + 3;1124,1123,1122;, + 3;1127,1126,1125;, + 3;1130,1129,1128;, + 3;1133,1132,1131;, + 3;1136,1135,1134;, + 3;1139,1138,1137;, + 3;1142,1141,1140;, + 3;1145,1144,1143;, + 3;1148,1147,1146;, + 3;1151,1150,1149;, + 3;1154,1153,1152;, + 3;1157,1156,1155;, + 3;1160,1159,1158;, + 3;1163,1162,1161;, + 3;1166,1165,1164;, + 3;1169,1168,1167;, + 3;1172,1171,1170;, + 3;1175,1174,1173;, + 3;1178,1177,1176;, + 3;1181,1180,1179;, + 4;1185,1184,1183,1182;, + 4;1189,1188,1187,1186;, + 4;1193,1192,1191,1190;, + 4;1197,1196,1195,1194;, + 4;1201,1200,1199,1198;, + 4;1205,1204,1203,1202;, + 4;1209,1208,1207,1206;, + 4;1213,1212,1211,1210;, + 4;1217,1216,1215,1214;, + 4;1221,1220,1219,1218;, + 4;1225,1224,1223,1222;, + 4;1229,1228,1227,1226;, + 4;1233,1232,1231,1230;, + 4;1237,1236,1235,1234;, + 4;1241,1240,1239,1238;, + 4;1245,1244,1243,1242;, + 4;1249,1248,1247,1246;, + 4;1253,1252,1251,1250;, + 4;1257,1256,1255,1254;, + 4;1261,1260,1259,1258;, + 4;1265,1264,1263,1262;, + 4;1269,1268,1267,1266;, + 4;1273,1272,1271,1270;, + 4;1277,1276,1275,1274;, + 4;1281,1280,1279,1278;, + 4;1285,1284,1283,1282;, + 4;1289,1288,1287,1286;, + 4;1293,1292,1291,1290;, + 4;1297,1296,1295,1294;, + 4;1301,1300,1299,1298;, + 4;1305,1304,1303,1302;, + 4;1309,1308,1307,1306;, + 4;1313,1312,1311,1310;, + 4;1317,1316,1315,1314;, + 4;1321,1320,1319,1318;, + 4;1325,1324,1323,1322;, + 3;1328,1327,1326;, + 3;1331,1330,1329;, + 3;1334,1333,1332;, + 3;1337,1336,1335;, + 3;1340,1339,1338;, + 3;1343,1342,1341;, + 3;1346,1345,1344;, + 3;1349,1348,1347;, + 3;1352,1351,1350;, + 3;1355,1354,1353;, + 3;1358,1357,1356;, + 3;1361,1360,1359;, + 3;1364,1363,1362;, + 3;1367,1366,1365;, + 3;1370,1369,1368;, + 3;1373,1372,1371;, + 3;1376,1375,1374;, + 3;1379,1378,1377;, + 3;1382,1381,1380;, + 3;1385,1384,1383;, + 3;1388,1387,1386;, + 3;1391,1390,1389;, + 3;1394,1393,1392;, + 3;1397,1396,1395;, + 4;1401,1400,1399,1398;, + 4;1405,1404,1403,1402;, + 4;1409,1408,1407,1406;, + 4;1413,1412,1411,1410;, + 4;1417,1416,1415,1414;, + 4;1421,1420,1419,1418;, + 4;1425,1424,1423,1422;, + 4;1429,1428,1427,1426;, + 4;1433,1432,1431,1430;, + 4;1437,1436,1435,1434;, + 4;1441,1440,1439,1438;, + 4;1445,1444,1443,1442;, + 4;1449,1448,1447,1446;, + 4;1453,1452,1451,1450;, + 4;1457,1456,1455,1454;, + 4;1461,1460,1459,1458;, + 4;1465,1464,1463,1462;, + 4;1469,1468,1467,1466;, + 4;1473,1472,1471,1470;, + 4;1477,1476,1475,1474;, + 4;1481,1480,1479,1478;, + 4;1485,1484,1483,1482;, + 4;1489,1488,1487,1486;, + 4;1493,1492,1491,1490;, + 4;1497,1496,1495,1494;, + 4;1501,1500,1499,1498;, + 4;1505,1504,1503,1502;, + 4;1509,1508,1507,1506;, + 4;1513,1512,1511,1510;, + 4;1517,1516,1515,1514;, + 4;1521,1520,1519,1518;, + 4;1525,1524,1523,1522;, + 4;1529,1528,1527,1526;, + 4;1533,1532,1531,1530;, + 4;1537,1536,1535,1534;, + 4;1541,1540,1539,1538;, + 3;1544,1543,1542;, + 3;1547,1546,1545;, + 3;1550,1549,1548;, + 3;1553,1552,1551;, + 3;1556,1555,1554;, + 3;1559,1558,1557;, + 3;1562,1561,1560;, + 3;1565,1564,1563;, + 3;1568,1567,1566;, + 3;1571,1570,1569;, + 3;1574,1573,1572;, + 3;1577,1576,1575;, + 3;1580,1579,1578;, + 3;1583,1582,1581;, + 4;1587,1586,1585,1584;, + 4;1591,1590,1589,1588;, + 4;1595,1594,1593,1592;, + 4;1599,1598,1597,1596;, + 4;1603,1602,1601,1600;, + 4;1607,1606,1605,1604;, + 4;1611,1610,1609,1608;, + 3;1614,1613,1612;, + 3;1617,1616,1615;, + 4;1621,1620,1619,1618;, + 4;1625,1624,1623,1622;, + 4;1629,1628,1627,1626;, + 4;1633,1632,1631,1630;, + 4;1637,1636,1635,1634;, + 4;1641,1640,1639,1638;, + 4;1645,1644,1643,1642;, + 4;1649,1648,1647,1646;, + 4;1653,1652,1651,1650;, + 4;1657,1656,1655,1654;, + 4;1661,1660,1659,1658;, + 4;1665,1664,1663,1662;, + 4;1669,1668,1667,1666;, + 4;1673,1672,1671,1670;, + 4;1677,1676,1675,1674;, + 4;1681,1680,1679,1678;, + 4;1685,1684,1683,1682;, + 4;1689,1688,1687,1686;, + 4;1693,1692,1691,1690;, + 4;1697,1696,1695,1694;, + 4;1701,1700,1699,1698;, + 3;1704,1703,1702;, + 3;1707,1706,1705;, + 3;1710,1709,1708;, + 3;1713,1712,1711;, + 3;1716,1715,1714;, + 3;1719,1718,1717;, + 3;1722,1721,1720;, + 3;1725,1724,1723;, + 4;1729,1728,1727,1726;, + 4;1733,1732,1731,1730;, + 4;1737,1736,1735,1734;, + 4;1741,1740,1739,1738;, + 4;1745,1744,1743,1742;, + 3;1748,1747,1746;, + 4;1752,1751,1750,1749;, + 4;1756,1755,1754,1753;, + 4;1760,1759,1758,1757;, + 4;1764,1763,1762,1761;, + 4;1768,1767,1766,1765;, + 4;1772,1771,1770,1769;, + 4;1776,1775,1774,1773;, + 3;1779,1778,1777;, + 3;1782,1781,1780;, + 3;1785,1784,1783;, + 4;1789,1788,1787,1786;, + 3;1792,1791,1790;, + 3;1795,1794,1793;, + 4;1799,1798,1797,1796;, + 4;1803,1802,1801,1800;, + 4;1807,1806,1805,1804;, + 3;1810,1809,1808;, + 3;1813,1812,1811;, + 4;1817,1816,1815,1814;, + 4;1821,1820,1819,1818;, + 4;1825,1824,1823,1822;, + 4;1829,1828,1827,1826;, + 4;1833,1832,1831,1830;, + 4;1837,1836,1835,1834;, + 4;1841,1840,1839,1838;, + 4;1845,1844,1843,1842;, + 3;1848,1847,1846;, + 3;1851,1850,1849;, + 4;1855,1854,1853,1852;, + 4;1859,1858,1857,1856;, + 4;1863,1862,1861,1860;, + 4;1867,1866,1865,1864;, + 4;1871,1870,1869,1868;, + 4;1875,1874,1873,1872;, + 4;1879,1878,1877,1876;, + 4;1883,1882,1881,1880;, + 4;1887,1886,1885,1884;, + 4;1891,1890,1889,1888;, + 4;1895,1894,1893,1892;, + 4;1899,1898,1897,1896;, + 4;1903,1902,1901,1900;; + MeshNormals { // _0002 normals + 1904; + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + -0.514481;-0.857479; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + 0.514481;-0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + -0.514481; 0.857479; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.514481; 0.857479; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 0.857479;-0.514481; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + 0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -0.857479; 0.514481; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + -0.857479;-0.514481; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.457472; 0.457472; 0.762474;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.599994; 0.000000; 0.799982;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.457472;-0.457472; 0.762474;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.599994; 0.799982;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + 0.000000;-0.599994; 0.799982;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.457472; 0.457472; 0.762474;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.599994; 0.000000; 0.799982;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.457472;-0.457472; 0.762474;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000;-0.948668;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + 0.316202; 0.000000;-0.948668;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + -0.316202; 0.000000; 0.948668;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.316202; 0.000000; 0.948668;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188; 0.894406;, + 0.000000;-0.447188; 0.894406;, + 0.000000;-0.447188; 0.894406;, + 0.000000;-0.447188; 0.894406;, + 0.000000;-0.976165; 0.216926;, + 0.000000;-0.976165; 0.216926;, + 0.000000;-0.976165; 0.216926;, + 0.000000;-0.976165; 0.216926;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-0.952422;-0.304758;, + 0.000000;-0.952422;-0.304758;, + 0.000000;-0.952422;-0.304758;, + 0.000000;-0.952422;-0.304758;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.147008; 0.548662;, + -0.822993;-0.147008; 0.548662;, + -0.822993;-0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.147008;-0.548662;, + -0.822993; 0.147008;-0.548662;, + -0.822993; 0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.548662;-0.147008;, + -0.822993;-0.548662;-0.147008;, + -0.822993;-0.548662;-0.147008;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.548662; 0.147008;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.401654; 0.401654;, + -0.822993;-0.147008; 0.548662;, + -0.822993;-0.147008; 0.548662;, + -0.822993;-0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.147008; 0.548662;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.401654; 0.401654;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662; 0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.548662;-0.147008;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.401654;-0.401654;, + -0.822993; 0.147008;-0.548662;, + -0.822993; 0.147008;-0.548662;, + -0.822993; 0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.147008;-0.548662;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.401654;-0.401654;, + -0.822993;-0.548662;-0.147008;, + -0.822993;-0.548662;-0.147008;, + -0.822993;-0.548662;-0.147008;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.147008; 0.548662;, + 0.822993; 0.147008; 0.548662;, + 0.822993; 0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.147008;-0.548662;, + 0.822993;-0.147008;-0.548662;, + 0.822993;-0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.548662;-0.147008;, + 0.822993; 0.548662;-0.147008;, + 0.822993; 0.548662;-0.147008;, + -0.999969; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.548662; 0.147008;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.401654; 0.401654;, + 0.822993; 0.147008; 0.548662;, + 0.822993; 0.147008; 0.548662;, + 0.822993; 0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.147008; 0.548662;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.401654; 0.401654;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662; 0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.548662;-0.147008;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.401654;-0.401654;, + 0.822993;-0.147008;-0.548662;, + 0.822993;-0.147008;-0.548662;, + 0.822993;-0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.147008;-0.548662;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.401654;-0.401654;, + 0.822993; 0.548662;-0.147008;, + 0.822993; 0.548662;-0.147008;, + 0.822993; 0.548662;-0.147008;, + 0.754814; 0.646992;-0.107822;, + 0.754814; 0.646992;-0.107822;, + 0.754814; 0.646992;-0.107822;, + 0.811090; 0.486648;-0.324442;, + 0.811090; 0.486648;-0.324442;, + 0.811090; 0.486648;-0.324442;, + 0.111454; 0.972869;-0.202673;, + 0.111454; 0.972869;-0.202673;, + 0.111454; 0.972869;-0.202673;, + 0.111454; 0.972869;-0.202673;, + 0.208136; 0.602313; 0.770623;, + 0.208136; 0.602313; 0.770623;, + 0.208136; 0.602313; 0.770623;, + 0.208136; 0.602313; 0.770623;, + 0.288064; 0.691366;-0.662557;, + 0.288064; 0.691366;-0.662557;, + 0.288064; 0.691366;-0.662557;, + 0.288064; 0.691366;-0.662557;, + 0.242531; 0.000000;-0.970122;, + 0.242531; 0.000000;-0.970122;, + 0.242531; 0.000000;-0.970122;, + 0.242531; 0.000000;-0.970122;, + 0.304209;-0.405591;-0.861934;, + 0.304209;-0.405591;-0.861934;, + 0.304209;-0.405591;-0.861934;, + 0.304209;-0.405591;-0.861934;, + 0.242531; 0.000000; 0.970122;, + 0.242531; 0.000000; 0.970122;, + 0.242531; 0.000000; 0.970122;, + 0.242531; 0.000000; 0.970122;, + 0.257942;-0.343944; 0.902860;, + 0.257942;-0.343944; 0.902860;, + 0.257942;-0.343944; 0.902860;, + 0.257942;-0.343944; 0.902860;, + 0.947935; 0.276467; 0.157964;, + 0.947935; 0.276467; 0.157964;, + 0.947935; 0.276467; 0.157964;, + -0.947935; 0.276467; 0.157964;, + -0.947935; 0.276467; 0.157964;, + -0.947935; 0.276467; 0.157964;, + 0.242531;-0.970122; 0.000000;, + 0.242531;-0.970122; 0.000000;, + 0.242531;-0.970122; 0.000000;, + 0.242531;-0.970122; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.948668;-0.316202; 0.000000;, + 0.948668;-0.316202; 0.000000;, + 0.948668;-0.316202; 0.000000;, + 0.948668;-0.316202; 0.000000;, + -0.948668;-0.316202; 0.000000;, + -0.948668;-0.316202; 0.000000;, + -0.948668;-0.316202; 0.000000;, + -0.948668;-0.316202; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.111454; 0.972869;-0.202673;, + -0.111454; 0.972869;-0.202673;, + -0.111454; 0.972869;-0.202673;, + -0.111454; 0.972869;-0.202673;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.609699; 0.792596;, + 0.000000; 0.609699; 0.792596;, + 0.000000; 0.609699; 0.792596;, + 0.000000; 0.609699; 0.792596;, + -0.208136; 0.602313; 0.770623;, + -0.208136; 0.602313; 0.770623;, + -0.208136; 0.602313; 0.770623;, + -0.208136; 0.602313; 0.770623;, + -0.288064; 0.691366;-0.662557;, + -0.288064; 0.691366;-0.662557;, + -0.288064; 0.691366;-0.662557;, + -0.288064; 0.691366;-0.662557;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + -0.242531; 0.000000;-0.970122;, + -0.242531; 0.000000;-0.970122;, + -0.242531; 0.000000;-0.970122;, + -0.242531; 0.000000;-0.970122;, + -0.304209;-0.405591;-0.861904;, + -0.304209;-0.405591;-0.861904;, + -0.304209;-0.405591;-0.861904;, + -0.304209;-0.405591;-0.861904;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + -0.242531; 0.000000; 0.970122;, + -0.242531; 0.000000; 0.970122;, + -0.242531; 0.000000; 0.970122;, + -0.242531; 0.000000; 0.970122;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + -0.257942;-0.343944; 0.902860;, + -0.257942;-0.343944; 0.902860;, + -0.257942;-0.343944; 0.902860;, + -0.257942;-0.343944; 0.902860;, + 0.000000;-0.316202; 0.948668;, + 0.000000;-0.316202; 0.948668;, + 0.000000;-0.316202; 0.948668;, + 0.000000;-0.316202; 0.948668;, + -0.242531;-0.970122; 0.000000;, + -0.242531;-0.970122; 0.000000;, + -0.242531;-0.970122; 0.000000;, + -0.242531;-0.970122; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.989776; 0.017670;-0.141392;, + 0.989776; 0.017670;-0.141392;, + 0.989776; 0.017670;-0.141392;, + 0.992248; 0.000000;-0.124027;, + 0.992248; 0.000000;-0.124027;, + 0.992248; 0.000000;-0.124027;, + 0.938078;-0.325938;-0.117252;, + 0.938078;-0.325938;-0.117252;, + 0.938078;-0.325938;-0.117252;, + -0.938078;-0.325938;-0.117252;, + -0.938078;-0.325938;-0.117252;, + -0.938078;-0.325938;-0.117252;, + -0.989776; 0.017670;-0.141392;, + -0.989776; 0.017670;-0.141392;, + -0.989776; 0.017670;-0.141392;, + -0.992248; 0.000000;-0.124027;, + -0.992248; 0.000000;-0.124027;, + -0.992248; 0.000000;-0.124027;, + 0.905698;-0.370495;-0.205817;, + 0.905698;-0.370495;-0.205817;, + 0.905698;-0.370495;-0.205817;, + -0.905698;-0.370495;-0.205817;, + -0.905698;-0.370495;-0.205817;, + -0.905698;-0.370495;-0.205817;, + -0.988739;-0.019745;-0.148289;, + -0.988739;-0.019745;-0.148289;, + -0.988739;-0.019745;-0.148289;, + -0.988739;-0.019745;-0.148289;, + 0.988739;-0.019745;-0.148289;, + 0.988739;-0.019745;-0.148289;, + 0.988739;-0.019745;-0.148289;, + 0.988739;-0.019745;-0.148289;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.063906;-0.559221;-0.826533;, + 0.063906;-0.559221;-0.826533;, + 0.063906;-0.559221;-0.826533;, + 0.063906;-0.559221;-0.826533;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.987762;-0.155797;, + 0.000000;-0.987762;-0.155797;, + 0.000000;-0.987762;-0.155797;, + 0.000000;-0.987762;-0.155797;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.986389; 0.164373;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + 0.000000;-0.371380; 0.928465;, + -0.063906;-0.559221;-0.826533;, + -0.063906;-0.559221;-0.826533;, + -0.063906;-0.559221;-0.826533;, + -0.063906;-0.559221;-0.826533;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.986389; 0.000000; 0.164373;, + 0.986389; 0.000000; 0.164373;, + 0.986389; 0.000000; 0.164373;, + 0.920957;-0.358135; 0.153478;, + 0.920957;-0.358135; 0.153478;, + 0.920957;-0.358135; 0.153478;, + 0.986389; 0.000000; 0.164373;, + 0.986389; 0.000000; 0.164373;, + 0.986389; 0.000000; 0.164373;, + 0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + -0.920957;-0.358135; 0.153478;, + -0.920957;-0.358135; 0.153478;, + -0.920957;-0.358135; 0.153478;, + -0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + -0.986389; 0.000000; 0.164373;, + 0.000000;-0.989929; 0.141392;, + 0.000000;-0.989929; 0.141392;, + 0.000000;-0.989929; 0.141392;, + 0.000000;-0.989929; 0.141392;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -0.055696;-0.501328; 0.863430;, + -0.055696;-0.501328; 0.863430;, + -0.055696;-0.501328; 0.863430;, + -0.055696;-0.501328; 0.863430;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.164373; 0.986389; 0.000000;, + 0.164373; 0.986389; 0.000000;, + 0.164373; 0.986389; 0.000000;, + 0.164373; 0.986389; 0.000000;, + -0.164373; 0.986389; 0.000000;, + -0.164373; 0.986389; 0.000000;, + -0.164373; 0.986389; 0.000000;, + -0.164373; 0.986389; 0.000000;, + -0.754814; 0.646992;-0.107822;, + -0.754814; 0.646992;-0.107822;, + -0.754814; 0.646992;-0.107822;, + -0.811090; 0.486648;-0.324442;, + -0.811090; 0.486648;-0.324442;, + -0.811090; 0.486648;-0.324442;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-0.554674;-0.832026;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.055696;-0.501328; 0.863430;, + 0.055696;-0.501328; 0.863430;, + 0.055696;-0.501328; 0.863430;, + 0.055696;-0.501328; 0.863430;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + 0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;, + -0.948668; 0.316202; 0.000000;; + 510; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 4;339,338,337,336;, + 4;343,342,341,340;, + 4;347,346,345,344;, + 4;351,350,349,348;, + 4;355,354,353,352;, + 4;359,358,357,356;, + 4;363,362,361,360;, + 4;367,366,365,364;, + 4;371,370,369,368;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 4;471,470,469,468;, + 4;475,474,473,472;, + 4;479,478,477,476;, + 4;483,482,481,480;, + 4;487,486,485,484;, + 4;491,490,489,488;, + 4;495,494,493,492;, + 4;499,498,497,496;, + 4;503,502,501,500;, + 4;507,506,505,504;, + 4;511,510,509,508;, + 4;515,514,513,512;, + 4;519,518,517,516;, + 4;523,522,521,520;, + 4;527,526,525,524;, + 4;531,530,529,528;, + 4;535,534,533,532;, + 4;539,538,537,536;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 3;614,613,612;, + 3;617,616,615;, + 4;621,620,619,618;, + 4;625,624,623,622;, + 4;629,628,627,626;, + 4;633,632,631,630;, + 3;636,635,634;, + 3;639,638,637;, + 3;642,641,640;, + 3;645,644,643;, + 3;648,647,646;, + 3;651,650,649;, + 3;654,653,652;, + 3;657,656,655;, + 4;661,660,659,658;, + 4;665,664,663,662;, + 4;669,668,667,666;, + 4;673,672,671,670;, + 3;676,675,674;, + 3;679,678,677;, + 3;682,681,680;, + 3;685,684,683;, + 3;688,687,686;, + 3;691,690,689;, + 3;694,693,692;, + 3;697,696,695;, + 4;701,700,699,698;, + 4;705,704,703,702;, + 4;709,708,707,706;, + 4;713,712,711,710;, + 3;716,715,714;, + 3;719,718,717;, + 3;722,721,720;, + 3;725,724,723;, + 3;728,727,726;, + 3;731,730,729;, + 3;734,733,732;, + 3;737,736,735;, + 3;740,739,738;, + 3;743,742,741;, + 3;746,745,744;, + 3;749,748,747;, + 4;753,752,751,750;, + 4;757,756,755,754;, + 4;761,760,759,758;, + 4;765,764,763,762;, + 4;769,768,767,766;, + 4;773,772,771,770;, + 4;777,776,775,774;, + 4;781,780,779,778;, + 4;785,784,783,782;, + 4;789,788,787,786;, + 4;793,792,791,790;, + 4;797,796,795,794;, + 4;801,800,799,798;, + 4;805,804,803,802;, + 4;809,808,807,806;, + 4;813,812,811,810;, + 4;817,816,815,814;, + 4;821,820,819,818;, + 4;825,824,823,822;, + 4;829,828,827,826;, + 4;833,832,831,830;, + 4;837,836,835,834;, + 4;841,840,839,838;, + 4;845,844,843,842;, + 4;849,848,847,846;, + 4;853,852,851,850;, + 4;857,856,855,854;, + 4;861,860,859,858;, + 4;865,864,863,862;, + 4;869,868,867,866;, + 4;873,872,871,870;, + 4;877,876,875,874;, + 4;881,880,879,878;, + 4;885,884,883,882;, + 4;889,888,887,886;, + 4;893,892,891,890;, + 3;896,895,894;, + 3;899,898,897;, + 3;902,901,900;, + 3;905,904,903;, + 3;908,907,906;, + 3;911,910,909;, + 3;914,913,912;, + 3;917,916,915;, + 3;920,919,918;, + 3;923,922,921;, + 3;926,925,924;, + 3;929,928,927;, + 3;932,931,930;, + 3;935,934,933;, + 3;938,937,936;, + 3;941,940,939;, + 3;944,943,942;, + 3;947,946,945;, + 3;950,949,948;, + 3;953,952,951;, + 3;956,955,954;, + 3;959,958,957;, + 3;962,961,960;, + 3;965,964,963;, + 4;969,968,967,966;, + 4;973,972,971,970;, + 4;977,976,975,974;, + 4;981,980,979,978;, + 4;985,984,983,982;, + 4;989,988,987,986;, + 4;993,992,991,990;, + 4;997,996,995,994;, + 4;1001,1000,999,998;, + 4;1005,1004,1003,1002;, + 4;1009,1008,1007,1006;, + 4;1013,1012,1011,1010;, + 4;1017,1016,1015,1014;, + 4;1021,1020,1019,1018;, + 4;1025,1024,1023,1022;, + 4;1029,1028,1027,1026;, + 4;1033,1032,1031,1030;, + 4;1037,1036,1035,1034;, + 4;1041,1040,1039,1038;, + 4;1045,1044,1043,1042;, + 4;1049,1048,1047,1046;, + 4;1053,1052,1051,1050;, + 4;1057,1056,1055,1054;, + 4;1061,1060,1059,1058;, + 4;1065,1064,1063,1062;, + 4;1069,1068,1067,1066;, + 4;1073,1072,1071,1070;, + 4;1077,1076,1075,1074;, + 4;1081,1080,1079,1078;, + 4;1085,1084,1083,1082;, + 4;1089,1088,1087,1086;, + 4;1093,1092,1091,1090;, + 4;1097,1096,1095,1094;, + 4;1101,1100,1099,1098;, + 4;1105,1104,1103,1102;, + 4;1109,1108,1107,1106;, + 3;1112,1111,1110;, + 3;1115,1114,1113;, + 3;1118,1117,1116;, + 3;1121,1120,1119;, + 3;1124,1123,1122;, + 3;1127,1126,1125;, + 3;1130,1129,1128;, + 3;1133,1132,1131;, + 3;1136,1135,1134;, + 3;1139,1138,1137;, + 3;1142,1141,1140;, + 3;1145,1144,1143;, + 3;1148,1147,1146;, + 3;1151,1150,1149;, + 3;1154,1153,1152;, + 3;1157,1156,1155;, + 3;1160,1159,1158;, + 3;1163,1162,1161;, + 3;1166,1165,1164;, + 3;1169,1168,1167;, + 3;1172,1171,1170;, + 3;1175,1174,1173;, + 3;1178,1177,1176;, + 3;1181,1180,1179;, + 4;1185,1184,1183,1182;, + 4;1189,1188,1187,1186;, + 4;1193,1192,1191,1190;, + 4;1197,1196,1195,1194;, + 4;1201,1200,1199,1198;, + 4;1205,1204,1203,1202;, + 4;1209,1208,1207,1206;, + 4;1213,1212,1211,1210;, + 4;1217,1216,1215,1214;, + 4;1221,1220,1219,1218;, + 4;1225,1224,1223,1222;, + 4;1229,1228,1227,1226;, + 4;1233,1232,1231,1230;, + 4;1237,1236,1235,1234;, + 4;1241,1240,1239,1238;, + 4;1245,1244,1243,1242;, + 4;1249,1248,1247,1246;, + 4;1253,1252,1251,1250;, + 4;1257,1256,1255,1254;, + 4;1261,1260,1259,1258;, + 4;1265,1264,1263,1262;, + 4;1269,1268,1267,1266;, + 4;1273,1272,1271,1270;, + 4;1277,1276,1275,1274;, + 4;1281,1280,1279,1278;, + 4;1285,1284,1283,1282;, + 4;1289,1288,1287,1286;, + 4;1293,1292,1291,1290;, + 4;1297,1296,1295,1294;, + 4;1301,1300,1299,1298;, + 4;1305,1304,1303,1302;, + 4;1309,1308,1307,1306;, + 4;1313,1312,1311,1310;, + 4;1317,1316,1315,1314;, + 4;1321,1320,1319,1318;, + 4;1325,1324,1323,1322;, + 3;1328,1327,1326;, + 3;1331,1330,1329;, + 3;1334,1333,1332;, + 3;1337,1336,1335;, + 3;1340,1339,1338;, + 3;1343,1342,1341;, + 3;1346,1345,1344;, + 3;1349,1348,1347;, + 3;1352,1351,1350;, + 3;1355,1354,1353;, + 3;1358,1357,1356;, + 3;1361,1360,1359;, + 3;1364,1363,1362;, + 3;1367,1366,1365;, + 3;1370,1369,1368;, + 3;1373,1372,1371;, + 3;1376,1375,1374;, + 3;1379,1378,1377;, + 3;1382,1381,1380;, + 3;1385,1384,1383;, + 3;1388,1387,1386;, + 3;1391,1390,1389;, + 3;1394,1393,1392;, + 3;1397,1396,1395;, + 4;1401,1400,1399,1398;, + 4;1405,1404,1403,1402;, + 4;1409,1408,1407,1406;, + 4;1413,1412,1411,1410;, + 4;1417,1416,1415,1414;, + 4;1421,1420,1419,1418;, + 4;1425,1424,1423,1422;, + 4;1429,1428,1427,1426;, + 4;1433,1432,1431,1430;, + 4;1437,1436,1435,1434;, + 4;1441,1440,1439,1438;, + 4;1445,1444,1443,1442;, + 4;1449,1448,1447,1446;, + 4;1453,1452,1451,1450;, + 4;1457,1456,1455,1454;, + 4;1461,1460,1459,1458;, + 4;1465,1464,1463,1462;, + 4;1469,1468,1467,1466;, + 4;1473,1472,1471,1470;, + 4;1477,1476,1475,1474;, + 4;1481,1480,1479,1478;, + 4;1485,1484,1483,1482;, + 4;1489,1488,1487,1486;, + 4;1493,1492,1491,1490;, + 4;1497,1496,1495,1494;, + 4;1501,1500,1499,1498;, + 4;1505,1504,1503,1502;, + 4;1509,1508,1507,1506;, + 4;1513,1512,1511,1510;, + 4;1517,1516,1515,1514;, + 4;1521,1520,1519,1518;, + 4;1525,1524,1523,1522;, + 4;1529,1528,1527,1526;, + 4;1533,1532,1531,1530;, + 4;1537,1536,1535,1534;, + 4;1541,1540,1539,1538;, + 3;1544,1543,1542;, + 3;1547,1546,1545;, + 3;1550,1549,1548;, + 3;1553,1552,1551;, + 3;1556,1555,1554;, + 3;1559,1558,1557;, + 3;1562,1561,1560;, + 3;1565,1564,1563;, + 3;1568,1567,1566;, + 3;1571,1570,1569;, + 3;1574,1573,1572;, + 3;1577,1576,1575;, + 3;1580,1579,1578;, + 3;1583,1582,1581;, + 4;1587,1586,1585,1584;, + 4;1591,1590,1589,1588;, + 4;1595,1594,1593,1592;, + 4;1599,1598,1597,1596;, + 4;1603,1602,1601,1600;, + 4;1607,1606,1605,1604;, + 4;1611,1610,1609,1608;, + 3;1614,1613,1612;, + 3;1617,1616,1615;, + 4;1621,1620,1619,1618;, + 4;1625,1624,1623,1622;, + 4;1629,1628,1627,1626;, + 4;1633,1632,1631,1630;, + 4;1637,1636,1635,1634;, + 4;1641,1640,1639,1638;, + 4;1645,1644,1643,1642;, + 4;1649,1648,1647,1646;, + 4;1653,1652,1651,1650;, + 4;1657,1656,1655,1654;, + 4;1661,1660,1659,1658;, + 4;1665,1664,1663,1662;, + 4;1669,1668,1667,1666;, + 4;1673,1672,1671,1670;, + 4;1677,1676,1675,1674;, + 4;1681,1680,1679,1678;, + 4;1685,1684,1683,1682;, + 4;1689,1688,1687,1686;, + 4;1693,1692,1691,1690;, + 4;1697,1696,1695,1694;, + 4;1701,1700,1699,1698;, + 3;1704,1703,1702;, + 3;1707,1706,1705;, + 3;1710,1709,1708;, + 3;1713,1712,1711;, + 3;1716,1715,1714;, + 3;1719,1718,1717;, + 3;1722,1721,1720;, + 3;1725,1724,1723;, + 4;1729,1728,1727,1726;, + 4;1733,1732,1731,1730;, + 4;1737,1736,1735,1734;, + 4;1741,1740,1739,1738;, + 4;1745,1744,1743,1742;, + 3;1748,1747,1746;, + 4;1752,1751,1750,1749;, + 4;1756,1755,1754,1753;, + 4;1760,1759,1758,1757;, + 4;1764,1763,1762,1761;, + 4;1768,1767,1766,1765;, + 4;1772,1771,1770,1769;, + 4;1776,1775,1774,1773;, + 3;1779,1778,1777;, + 3;1782,1781,1780;, + 3;1785,1784,1783;, + 4;1789,1788,1787,1786;, + 3;1792,1791,1790;, + 3;1795,1794,1793;, + 4;1799,1798,1797,1796;, + 4;1803,1802,1801,1800;, + 4;1807,1806,1805,1804;, + 3;1810,1809,1808;, + 3;1813,1812,1811;, + 4;1817,1816,1815,1814;, + 4;1821,1820,1819,1818;, + 4;1825,1824,1823,1822;, + 4;1829,1828,1827,1826;, + 4;1833,1832,1831,1830;, + 4;1837,1836,1835,1834;, + 4;1841,1840,1839,1838;, + 4;1845,1844,1843,1842;, + 3;1848,1847,1846;, + 3;1851,1850,1849;, + 4;1855,1854,1853,1852;, + 4;1859,1858,1857,1856;, + 4;1863,1862,1861,1860;, + 4;1867,1866,1865,1864;, + 4;1871,1870,1869,1868;, + 4;1875,1874,1873,1872;, + 4;1879,1878,1877,1876;, + 4;1883,1882,1881,1880;, + 4;1887,1886,1885,1884;, + 4;1891,1890,1889,1888;, + 4;1895,1894,1893,1892;, + 4;1899,1898,1897,1896;, + 4;1903,1902,1901,1900;; + } // End of _0002 normals + MeshTextureCoords { //Cube_001 UV Coordinates + 1904; + 0.967713; 0.165504;, + 0.967751; 0.159298;, + 0.982645; 0.159343;, + 0.982606; 0.165549;, + 0.967751; 0.159298;, + 0.967781; 0.149369;, + 0.982675; 0.149414;, + 0.982645; 0.159343;, + 0.967781; 0.149369;, + 0.967781; 0.143163;, + 0.982674; 0.143208;, + 0.982675; 0.149414;, + 0.846125; 0.657064;, + 0.846071; 0.663270;, + 0.831180; 0.663316;, + 0.831234; 0.657110;, + 0.846071; 0.663270;, + 0.846102; 0.673199;, + 0.831211; 0.673245;, + 0.831180; 0.663316;, + 0.846102; 0.673199;, + 0.846193; 0.679405;, + 0.831302; 0.679450;, + 0.831211; 0.673245;, + 0.532374; 0.033322;, + 0.532353; 0.027174;, + 0.547246; 0.027129;, + 0.547267; 0.033277;, + 0.532353; 0.027174;, + 0.532322; 0.017246;, + 0.547216; 0.017201;, + 0.547246; 0.027129;, + 0.532322; 0.017246;, + 0.532305; 0.010984;, + 0.547199; 0.010939;, + 0.547216; 0.017201;, + 0.502449; 0.033277;, + 0.502466; 0.027015;, + 0.517360; 0.027061;, + 0.517343; 0.033322;, + 0.502466; 0.027015;, + 0.502497; 0.017087;, + 0.517390; 0.017133;, + 0.517360; 0.027061;, + 0.502497; 0.017087;, + 0.502518; 0.010939;, + 0.517411; 0.010984;, + 0.517390; 0.017133;, + 0.817987; 0.058753;, + 0.817990; 0.065990;, + 0.809474; 0.060885;, + 0.814578; 0.052369;, + 0.817990; 0.065990;, + 0.812886; 0.074506;, + 0.804369; 0.069402;, + 0.809474; 0.060885;, + 0.799265; 0.077918;, + 0.804369; 0.069402;, + 0.812886; 0.074506;, + 0.806502; 0.077915;, + 0.814578; 0.052369;, + 0.809474; 0.060885;, + 0.800957; 0.055780;, + 0.806062; 0.047264;, + 0.809474; 0.060885;, + 0.804369; 0.069402;, + 0.795853; 0.064297;, + 0.800957; 0.055780;, + 0.804369; 0.069402;, + 0.799265; 0.077918;, + 0.790748; 0.072814;, + 0.795853; 0.064297;, + 0.806062; 0.047264;, + 0.800957; 0.055780;, + 0.792441; 0.050676;, + 0.798825; 0.047267;, + 0.800957; 0.055780;, + 0.795853; 0.064297;, + 0.787336; 0.059192;, + 0.792441; 0.050676;, + 0.795853; 0.064297;, + 0.790748; 0.072814;, + 0.787339; 0.066429;, + 0.787336; 0.059192;, + 0.084189; 0.032111;, + 0.088824; 0.028402;, + 0.093761; 0.038347;, + 0.081396; 0.038309;, + 0.941789; 0.477264;, + 0.951712; 0.477295;, + 0.951428; 0.487223;, + 0.941504; 0.487193;, + 0.951712; 0.477295;, + 0.957903; 0.481037;, + 0.961605; 0.487254;, + 0.951428; 0.487223;, + 0.081396; 0.038309;, + 0.093761; 0.038347;, + 0.093730; 0.048276;, + 0.081365; 0.048238;, + 0.941504; 0.487193;, + 0.951428; 0.487223;, + 0.951397; 0.497152;, + 0.941474; 0.497122;, + 0.951428; 0.487223;, + 0.961605; 0.487254;, + 0.961575; 0.497184;, + 0.951397; 0.497152;, + 0.081365; 0.048238;, + 0.093730; 0.048276;, + 0.088732; 0.058190;, + 0.084120; 0.054452;, + 0.941474; 0.497122;, + 0.951397; 0.497152;, + 0.951621; 0.507082;, + 0.941698; 0.507052;, + 0.951397; 0.497152;, + 0.961575; 0.497184;, + 0.957835; 0.503378;, + 0.951621; 0.507082;, + 0.968228; 0.068181;, + 0.968266; 0.061975;, + 0.983159; 0.062020;, + 0.983121; 0.068226;, + 0.968266; 0.061975;, + 0.968296; 0.052046;, + 0.983190; 0.052091;, + 0.983159; 0.062020;, + 0.968296; 0.052046;, + 0.968296; 0.045840;, + 0.983189; 0.045885;, + 0.983190; 0.052091;, + 0.816218; 0.657064;, + 0.816165; 0.663270;, + 0.801274; 0.663316;, + 0.801327; 0.657110;, + 0.816165; 0.663270;, + 0.816195; 0.673199;, + 0.801304; 0.673245;, + 0.801274; 0.663316;, + 0.816195; 0.673199;, + 0.816287; 0.679405;, + 0.801396; 0.679450;, + 0.801304; 0.673245;, + 0.319956; 0.034880;, + 0.319935; 0.028731;, + 0.334829; 0.028686;, + 0.334850; 0.034834;, + 0.319935; 0.028731;, + 0.319905; 0.018803;, + 0.334799; 0.018758;, + 0.334829; 0.028686;, + 0.319905; 0.018803;, + 0.319888; 0.012542;, + 0.334781; 0.012496;, + 0.334799; 0.018758;, + 0.773172; 0.032325;, + 0.773189; 0.026063;, + 0.788083; 0.026108;, + 0.788066; 0.032370;, + 0.773189; 0.026063;, + 0.773220; 0.016135;, + 0.788113; 0.016180;, + 0.788083; 0.026108;, + 0.773220; 0.016135;, + 0.773241; 0.009987;, + 0.788134; 0.010032;, + 0.788113; 0.016180;, + 0.547264; 0.067382;, + 0.543855; 0.073766;, + 0.538751; 0.065249;, + 0.547267; 0.060144;, + 0.543855; 0.073766;, + 0.535339; 0.078870;, + 0.530234; 0.070354;, + 0.538751; 0.065249;, + 0.521718; 0.075458;, + 0.530234; 0.070354;, + 0.535339; 0.078870;, + 0.528102; 0.078867;, + 0.547267; 0.060144;, + 0.538751; 0.065249;, + 0.533646; 0.056733;, + 0.542163; 0.051628;, + 0.538751; 0.065249;, + 0.530234; 0.070354;, + 0.525130; 0.061837;, + 0.533646; 0.056733;, + 0.530234; 0.070354;, + 0.521718; 0.075458;, + 0.516613; 0.066942;, + 0.525130; 0.061837;, + 0.542163; 0.051628;, + 0.533646; 0.056733;, + 0.528542; 0.048216;, + 0.535779; 0.048219;, + 0.533646; 0.056733;, + 0.525130; 0.061837;, + 0.520025; 0.053321;, + 0.528542; 0.048216;, + 0.525130; 0.061837;, + 0.516613; 0.066942;, + 0.516616; 0.059705;, + 0.520025; 0.053321;, + 0.964411; 0.385438;, + 0.969046; 0.381729;, + 0.973983; 0.391673;, + 0.961618; 0.391635;, + 0.961381; 0.566576;, + 0.951458; 0.566607;, + 0.951682; 0.556677;, + 0.961605; 0.556646;, + 0.951458; 0.566607;, + 0.945245; 0.562902;, + 0.941504; 0.556708;, + 0.951682; 0.556677;, + 0.961618; 0.391635;, + 0.973983; 0.391673;, + 0.973953; 0.401602;, + 0.961588; 0.401564;, + 0.961605; 0.556646;, + 0.951682; 0.556677;, + 0.951652; 0.546748;, + 0.961575; 0.546717;, + 0.951682; 0.556677;, + 0.941504; 0.556708;, + 0.941474; 0.546779;, + 0.951652; 0.546748;, + 0.961588; 0.401564;, + 0.973953; 0.401602;, + 0.968955; 0.411516;, + 0.964343; 0.407779;, + 0.961575; 0.546717;, + 0.951652; 0.546748;, + 0.951367; 0.536819;, + 0.961290; 0.536789;, + 0.951652; 0.546748;, + 0.941474; 0.546779;, + 0.945176; 0.540562;, + 0.951367; 0.536819;, + 0.967002; 0.648553;, + 0.967040; 0.642347;, + 0.981934; 0.642392;, + 0.981895; 0.648598;, + 0.967040; 0.642347;, + 0.967070; 0.632418;, + 0.981964; 0.632463;, + 0.981934; 0.642392;, + 0.967070; 0.632418;, + 0.967070; 0.626212;, + 0.981963; 0.626258;, + 0.981964; 0.632463;, + 0.831766; 0.966351;, + 0.831713; 0.972557;, + 0.816822; 0.972603;, + 0.816876; 0.966397;, + 0.831713; 0.972557;, + 0.831743; 0.982486;, + 0.816853; 0.982532;, + 0.816822; 0.972603;, + 0.831743; 0.982486;, + 0.831835; 0.988692;, + 0.816944; 0.988737;, + 0.816853; 0.982532;, + 0.968296; 0.030946;, + 0.968275; 0.024798;, + 0.983169; 0.024752;, + 0.983190; 0.030901;, + 0.968275; 0.024798;, + 0.968245; 0.014870;, + 0.983138; 0.014824;, + 0.983169; 0.024752;, + 0.968245; 0.014870;, + 0.968228; 0.008608;, + 0.983121; 0.008563;, + 0.983138; 0.014824;, + 0.976499; 0.566561;, + 0.976516; 0.560299;, + 0.991410; 0.560345;, + 0.991393; 0.566607;, + 0.976516; 0.560299;, + 0.976547; 0.550371;, + 0.991440; 0.550417;, + 0.991410; 0.560345;, + 0.976547; 0.550371;, + 0.976568; 0.544223;, + 0.991461; 0.544269;, + 0.991440; 0.550417;, + 0.946691; 0.400894;, + 0.943282; 0.407278;, + 0.938177; 0.398762;, + 0.946694; 0.393657;, + 0.943282; 0.407278;, + 0.934766; 0.412383;, + 0.929661; 0.403867;, + 0.938177; 0.398762;, + 0.921144; 0.408971;, + 0.929661; 0.403867;, + 0.934766; 0.412383;, + 0.927528; 0.412380;, + 0.946694; 0.393657;, + 0.938177; 0.398762;, + 0.933073; 0.390245;, + 0.941589; 0.385141;, + 0.938177; 0.398762;, + 0.929661; 0.403867;, + 0.924556; 0.395350;, + 0.933073; 0.390245;, + 0.929661; 0.403867;, + 0.921144; 0.408971;, + 0.916040; 0.400455;, + 0.924556; 0.395350;, + 0.941589; 0.385141;, + 0.933073; 0.390245;, + 0.927968; 0.381729;, + 0.935205; 0.381732;, + 0.933073; 0.390245;, + 0.924556; 0.395350;, + 0.919452; 0.386833;, + 0.927968; 0.381729;, + 0.924556; 0.395350;, + 0.916040; 0.400455;, + 0.916043; 0.393218;, + 0.919452; 0.386833;, + 0.053427; 0.032111;, + 0.058062; 0.028402;, + 0.062999; 0.038347;, + 0.050634; 0.038309;, + 0.583303; 0.115417;, + 0.593227; 0.115447;, + 0.592942; 0.125376;, + 0.583019; 0.125345;, + 0.593227; 0.115447;, + 0.599417; 0.119190;, + 0.603120; 0.125407;, + 0.592942; 0.125376;, + 0.050634; 0.038309;, + 0.062999; 0.038347;, + 0.062968; 0.048276;, + 0.050604; 0.048238;, + 0.583019; 0.125345;, + 0.592942; 0.125376;, + 0.592911; 0.135305;, + 0.582988; 0.135274;, + 0.592942; 0.125376;, + 0.603120; 0.125407;, + 0.603089; 0.135336;, + 0.592911; 0.135305;, + 0.050604; 0.048238;, + 0.062968; 0.048276;, + 0.057971; 0.058190;, + 0.053359; 0.054452;, + 0.582988; 0.135274;, + 0.592911; 0.135305;, + 0.593135; 0.145235;, + 0.583212; 0.145204;, + 0.592911; 0.135305;, + 0.603089; 0.135336;, + 0.599349; 0.141530;, + 0.593135; 0.145235;, + 0.965688; 0.977625;, + 0.965726; 0.971419;, + 0.980620; 0.971465;, + 0.980581; 0.977670;, + 0.965726; 0.971419;, + 0.965757; 0.961490;, + 0.980650; 0.961535;, + 0.980620; 0.971465;, + 0.965757; 0.961490;, + 0.965756; 0.955284;, + 0.980650; 0.955330;, + 0.980650; 0.961535;, + 0.876031; 0.657064;, + 0.875978; 0.663270;, + 0.861087; 0.663316;, + 0.861140; 0.657110;, + 0.875978; 0.663270;, + 0.876008; 0.673199;, + 0.861117; 0.673245;, + 0.861087; 0.663316;, + 0.876008; 0.673199;, + 0.876099; 0.679405;, + 0.861208; 0.679450;, + 0.861117; 0.673245;, + 0.976568; 0.603884;, + 0.976547; 0.597736;, + 0.991440; 0.597690;, + 0.991461; 0.603838;, + 0.976547; 0.597736;, + 0.976516; 0.587808;, + 0.991410; 0.587762;, + 0.991440; 0.597690;, + 0.976516; 0.587808;, + 0.976499; 0.581546;, + 0.991393; 0.581501;, + 0.991410; 0.587762;, + 0.803028; 0.032325;, + 0.803045; 0.026063;, + 0.817939; 0.026108;, + 0.817922; 0.032370;, + 0.803045; 0.026063;, + 0.803076; 0.016135;, + 0.817969; 0.016180;, + 0.817939; 0.026108;, + 0.803076; 0.016135;, + 0.803097; 0.009987;, + 0.817990; 0.010032;, + 0.817969; 0.016180;, + 0.901143; 0.400894;, + 0.897734; 0.407278;, + 0.892629; 0.398762;, + 0.901146; 0.393657;, + 0.897734; 0.407278;, + 0.889217; 0.412383;, + 0.884113; 0.403867;, + 0.892629; 0.398762;, + 0.875596; 0.408971;, + 0.884113; 0.403867;, + 0.889217; 0.412383;, + 0.881980; 0.412380;, + 0.901146; 0.393657;, + 0.892629; 0.398762;, + 0.887525; 0.390245;, + 0.896041; 0.385141;, + 0.892629; 0.398762;, + 0.884113; 0.403867;, + 0.879008; 0.395350;, + 0.887525; 0.390245;, + 0.884113; 0.403867;, + 0.875596; 0.408971;, + 0.870492; 0.400455;, + 0.879008; 0.395350;, + 0.896041; 0.385141;, + 0.887525; 0.390245;, + 0.882420; 0.381729;, + 0.889657; 0.381732;, + 0.887525; 0.390245;, + 0.879008; 0.395350;, + 0.873904; 0.386833;, + 0.882420; 0.381729;, + 0.879008; 0.395350;, + 0.870492; 0.400455;, + 0.870495; 0.393218;, + 0.873904; 0.386833;, + 0.431519; 0.025959;, + 0.436154; 0.022250;, + 0.441091; 0.032194;, + 0.428726; 0.032156;, + 0.941789; 0.581501;, + 0.951712; 0.581531;, + 0.951428; 0.591459;, + 0.941504; 0.591429;, + 0.951712; 0.581531;, + 0.957903; 0.585273;, + 0.961605; 0.591491;, + 0.951428; 0.591459;, + 0.428726; 0.032156;, + 0.441091; 0.032194;, + 0.441060; 0.042123;, + 0.428696; 0.042085;, + 0.941504; 0.591429;, + 0.951428; 0.591459;, + 0.951397; 0.601388;, + 0.941474; 0.601358;, + 0.951428; 0.591459;, + 0.961605; 0.591491;, + 0.961575; 0.601420;, + 0.951397; 0.601388;, + 0.428696; 0.042085;, + 0.441060; 0.042123;, + 0.436063; 0.052037;, + 0.431451; 0.048299;, + 0.941474; 0.601358;, + 0.951397; 0.601388;, + 0.951621; 0.611318;, + 0.941698; 0.611288;, + 0.951397; 0.601388;, + 0.961575; 0.601420;, + 0.957835; 0.607614;, + 0.951621; 0.611318;, + 0.965102; 0.112953;, + 0.950210; 0.112907;, + 0.950302; 0.083120;, + 0.965194; 0.083165;, + 0.948925; 0.292137;, + 0.963817; 0.292091;, + 0.963908; 0.321879;, + 0.949016; 0.321924;, + 0.787290; 0.381820;, + 0.772260; 0.426455;, + 0.742473; 0.426365;, + 0.757503; 0.381729;, + 0.772260; 0.426455;, + 0.771897; 0.545605;, + 0.742110; 0.545514;, + 0.742473; 0.426365;, + 0.771897; 0.545605;, + 0.786654; 0.590332;, + 0.756867; 0.590241;, + 0.742110; 0.545514;, + 0.771543; 0.903156;, + 0.756516; 0.858520;, + 0.786297; 0.858429;, + 0.801325; 0.903065;, + 0.756516; 0.858520;, + 0.756151; 0.739371;, + 0.785933; 0.739280;, + 0.786297; 0.858429;, + 0.756151; 0.739371;, + 0.770905; 0.694644;, + 0.800687; 0.694553;, + 0.785933; 0.739280;, + 0.861434; 0.739233;, + 0.862080; 0.694553;, + 0.876965; 0.694599;, + 0.876319; 0.739278;, + 0.876319; 0.739278;, + 0.875953; 0.858428;, + 0.861068; 0.858382;, + 0.861434; 0.739233;, + 0.875953; 0.858428;, + 0.876325; 0.903110;, + 0.861440; 0.903065;, + 0.861068; 0.858382;, + 0.894513; 0.158139;, + 0.894376; 0.202821;, + 0.879482; 0.202775;, + 0.879619; 0.158094;, + 0.894376; 0.202821;, + 0.894010; 0.321970;, + 0.879116; 0.321925;, + 0.879482; 0.202775;, + 0.894010; 0.321970;, + 0.893873; 0.366651;, + 0.878979; 0.366606;, + 0.879116; 0.321925;, + 0.963908; 0.366606;, + 0.949016; 0.366651;, + 0.948925; 0.336864;, + 0.963817; 0.336818;, + 0.949016; 0.233634;, + 0.963908; 0.233679;, + 0.963817; 0.263467;, + 0.948925; 0.263421;, + 0.682036; 0.590241;, + 0.697066; 0.545605;, + 0.726853; 0.545696;, + 0.711823; 0.590332;, + 0.697066; 0.545605;, + 0.697429; 0.426455;, + 0.727216; 0.426546;, + 0.726853; 0.545696;, + 0.697429; 0.426455;, + 0.682672; 0.381729;, + 0.712459; 0.381820;, + 0.727216; 0.426546;, + 0.394909; 0.187632;, + 0.409936; 0.232267;, + 0.380155; 0.232358;, + 0.365127; 0.187723;, + 0.409936; 0.232267;, + 0.410301; 0.351417;, + 0.380519; 0.351508;, + 0.380155; 0.232358;, + 0.410301; 0.351417;, + 0.395547; 0.396144;, + 0.365765; 0.396235;, + 0.380519; 0.351508;, + 0.892259; 0.477263;, + 0.892396; 0.432582;, + 0.907290; 0.432628;, + 0.907153; 0.477309;, + 0.907153; 0.477309;, + 0.906787; 0.596458;, + 0.891893; 0.596413;, + 0.892259; 0.477263;, + 0.906787; 0.596458;, + 0.906650; 0.641139;, + 0.891756; 0.641094;, + 0.891893; 0.596413;, + 0.440719; 0.158414;, + 0.441091; 0.203097;, + 0.426206; 0.203051;, + 0.425834; 0.158368;, + 0.441091; 0.203097;, + 0.440725; 0.322246;, + 0.425840; 0.322201;, + 0.426206; 0.203051;, + 0.440725; 0.322246;, + 0.440080; 0.366926;, + 0.425195; 0.366880;, + 0.425840; 0.322201;, + 0.162530; 0.164393;, + 0.130129; 0.164293;, + 0.130312; 0.104719;, + 0.162713; 0.104818;, + 0.648292; 0.145235;, + 0.618013; 0.145142;, + 0.618196; 0.085567;, + 0.648475; 0.085660;, + 0.007855; 0.456088;, + 0.008264; 0.321891;, + 0.067839; 0.322073;, + 0.067430; 0.456270;, + 0.590935; 0.992553;, + 0.590479; 0.843644;, + 0.650054; 0.843462;, + 0.650510; 0.992371;, + 0.590479; 0.843644;, + 0.590024; 0.694735;, + 0.649599; 0.694553;, + 0.650054; 0.843462;, + 0.876863; 0.507005;, + 0.847489; 0.641139;, + 0.847033; 0.492202;, + 0.834256; 0.366651;, + 0.834712; 0.217714;, + 0.864086; 0.351849;, + 0.067430; 0.456270;, + 0.067147; 0.549198;, + 0.007572; 0.549017;, + 0.007855; 0.456088;, + 0.067147; 0.549198;, + 0.067022; 0.590156;, + 0.007447; 0.589974;, + 0.007572; 0.549017;, + 0.832139; 0.547962;, + 0.802642; 0.641140;, + 0.802184; 0.492202;, + 0.832013; 0.507005;, + 0.816219; 0.843490;, + 0.816677; 0.694553;, + 0.846175; 0.787730;, + 0.846049; 0.828688;, + 0.085625; 0.396521;, + 0.085625; 0.391256;, + 0.088258; 0.393888;, + 0.007447; 0.205788;, + 0.007447; 0.200523;, + 0.010080; 0.203156;, + 0.090890; 0.396521;, + 0.085625; 0.396521;, + 0.088258; 0.393888;, + 0.007447; 0.200523;, + 0.012712; 0.200523;, + 0.010080; 0.203156;, + 0.090890; 0.391255;, + 0.090890; 0.396521;, + 0.088258; 0.393888;, + 0.012712; 0.200523;, + 0.012713; 0.205789;, + 0.010080; 0.203156;, + 0.088258; 0.393888;, + 0.085625; 0.391256;, + 0.090890; 0.391255;, + 0.012713; 0.205789;, + 0.007447; 0.205788;, + 0.010080; 0.203156;, + 0.917879; 0.694555;, + 0.917811; 0.873229;, + 0.912546; 0.873227;, + 0.912614; 0.694553;, + 0.567954; 0.086719;, + 0.567406; 0.265443;, + 0.562161; 0.265427;, + 0.562709; 0.086702;, + 0.933483; 0.187915;, + 0.934031; 0.366640;, + 0.930182; 0.366651;, + 0.929634; 0.187927;, + 0.085633; 0.590156;, + 0.085084; 0.411431;, + 0.090342; 0.411415;, + 0.090890; 0.590140;, + 0.007447; 0.185629;, + 0.007447; 0.180364;, + 0.010080; 0.182996;, + 0.109970; 0.173175;, + 0.109970; 0.167909;, + 0.112603; 0.170542;, + 0.012712; 0.185629;, + 0.007447; 0.185629;, + 0.010080; 0.182996;, + 0.109970; 0.167909;, + 0.115235; 0.167910;, + 0.112603; 0.170542;, + 0.012713; 0.180363;, + 0.012712; 0.185629;, + 0.010080; 0.182996;, + 0.115235; 0.167910;, + 0.115236; 0.173175;, + 0.112603; 0.170542;, + 0.010080; 0.182996;, + 0.007447; 0.180364;, + 0.012713; 0.180363;, + 0.115236; 0.173175;, + 0.109970; 0.173175;, + 0.112603; 0.170542;, + 0.914740; 0.187978;, + 0.914672; 0.366651;, + 0.909407; 0.366649;, + 0.909475; 0.187976;, + 0.897652; 0.694569;, + 0.897104; 0.873294;, + 0.891858; 0.873277;, + 0.892407; 0.694553;, + 0.926032; 0.432582;, + 0.926580; 0.611307;, + 0.922732; 0.611318;, + 0.922184; 0.432594;, + 0.109978; 0.366809;, + 0.109430; 0.188085;, + 0.114687; 0.188069;, + 0.115236; 0.366793;, + 0.718087; 0.179130;, + 0.738116; 0.190695;, + 0.706525; 0.222286;, + 0.694959; 0.179129;, + 0.718087; 0.179130;, + 0.706525; 0.222286;, + 0.674931; 0.190691;, + 0.694959; 0.179129;, + 0.706525; 0.222286;, + 0.663369; 0.210719;, + 0.674931; 0.190691;, + 0.706525; 0.222286;, + 0.663370; 0.233847;, + 0.663369; 0.210719;, + 0.706525; 0.222286;, + 0.674935; 0.253877;, + 0.663370; 0.233847;, + 0.706525; 0.222286;, + 0.694964; 0.265442;, + 0.674935; 0.253877;, + 0.706525; 0.222286;, + 0.718091; 0.265443;, + 0.694964; 0.265442;, + 0.706525; 0.222286;, + 0.738119; 0.253881;, + 0.718091; 0.265443;, + 0.706525; 0.222286;, + 0.749682; 0.233852;, + 0.738119; 0.253881;, + 0.706525; 0.222286;, + 0.749681; 0.210725;, + 0.749682; 0.233852;, + 0.706525; 0.222286;, + 0.706525; 0.222286;, + 0.738116; 0.190695;, + 0.749681; 0.210725;, + 0.675025; 0.042920;, + 0.704812; 0.043011;, + 0.704744; 0.065320;, + 0.674957; 0.065229;, + 0.648383; 0.040815;, + 0.648475; 0.070602;, + 0.625436; 0.070673;, + 0.625345; 0.040886;, + 0.920938; 0.940436;, + 0.950726; 0.940345;, + 0.950794; 0.962685;, + 0.921007; 0.962777;, + 0.920870; 0.918096;, + 0.950657; 0.918004;, + 0.950726; 0.940345;, + 0.920938; 0.940436;, + 0.854126; 0.068216;, + 0.854137; 0.038437;, + 0.877266; 0.038447;, + 0.877255; 0.068226;, + 0.186587; 0.063748;, + 0.216374; 0.063657;, + 0.216443; 0.086110;, + 0.186655; 0.086201;, + 0.186519; 0.041528;, + 0.216306; 0.041437;, + 0.216374; 0.063657;, + 0.186587; 0.063748;, + 0.816914; 0.951457;, + 0.816822; 0.921670;, + 0.839916; 0.921599;, + 0.840007; 0.951387;, + 0.487370; 0.125074;, + 0.457583; 0.124982;, + 0.457651; 0.102859;, + 0.487438; 0.102951;, + 0.487301; 0.147606;, + 0.457514; 0.147514;, + 0.457583; 0.124982;, + 0.487370; 0.125074;, + 0.487250; 0.164509;, + 0.457462; 0.164418;, + 0.457514; 0.147514;, + 0.487301; 0.147606;, + 0.704676; 0.087691;, + 0.674888; 0.087600;, + 0.674957; 0.065229;, + 0.704744; 0.065320;, + 0.189082; 0.238239;, + 0.194864; 0.228224;, + 0.216442; 0.234005;, + 0.204877; 0.254035;, + 0.194864; 0.228224;, + 0.194864; 0.216661;, + 0.216443; 0.210877;, + 0.216442; 0.234005;, + 0.194864; 0.216661;, + 0.189083; 0.206646;, + 0.204880; 0.190849;, + 0.216443; 0.210877;, + 0.189083; 0.206646;, + 0.179069; 0.200865;, + 0.184852; 0.179287;, + 0.204880; 0.190849;, + 0.179069; 0.200865;, + 0.167505; 0.200866;, + 0.161725; 0.179288;, + 0.184852; 0.179287;, + 0.167505; 0.200866;, + 0.157491; 0.206648;, + 0.141695; 0.190853;, + 0.161725; 0.179288;, + 0.157491; 0.206648;, + 0.151708; 0.216663;, + 0.130131; 0.210883;, + 0.141695; 0.190853;, + 0.151708; 0.216663;, + 0.151708; 0.228227;, + 0.130129; 0.234010;, + 0.130131; 0.210883;, + 0.151708; 0.228227;, + 0.157489; 0.238241;, + 0.141692; 0.254039;, + 0.130129; 0.234010;, + 0.157489; 0.238241;, + 0.167503; 0.244022;, + 0.161720; 0.265601;, + 0.141692; 0.254039;, + 0.167503; 0.244022;, + 0.179067; 0.244022;, + 0.184847; 0.265600;, + 0.161720; 0.265601;, + 0.179067; 0.244022;, + 0.189082; 0.238239;, + 0.204877; 0.254035;, + 0.184847; 0.265600;, + 0.117964; 0.030160;, + 0.117929; 0.019050;, + 0.132823; 0.019004;, + 0.132857; 0.030114;, + 0.912591; 0.888122;, + 0.924138; 0.888158;, + 0.924092; 0.903052;, + 0.912546; 0.903016;, + 0.963852; 0.207678;, + 0.963818; 0.218740;, + 0.948925; 0.218694;, + 0.948958; 0.207633;, + 0.963887; 0.196412;, + 0.963852; 0.207678;, + 0.948958; 0.207633;, + 0.948993; 0.196367;, + 0.963913; 0.187961;, + 0.963887; 0.196412;, + 0.948993; 0.196367;, + 0.949019; 0.187915;, + 0.970886; 0.891836;, + 0.970920; 0.880650;, + 0.985813; 0.880695;, + 0.985779; 0.891881;, + 0.970852; 0.902990;, + 0.970886; 0.891836;, + 0.985779; 0.891881;, + 0.985745; 0.903036;, + 0.293429; 0.019986;, + 0.304948; 0.019951;, + 0.304994; 0.034844;, + 0.293475; 0.034880;, + 0.932807; 0.817306;, + 0.932773; 0.806136;, + 0.947667; 0.806090;, + 0.947701; 0.817261;, + 0.932842; 0.828477;, + 0.932807; 0.817306;, + 0.947701; 0.817261;, + 0.947735; 0.828431;, + 0.704859; 0.028026;, + 0.693295; 0.028021;, + 0.693300; 0.013132;, + 0.704865; 0.013137;, + 0.117929; 0.019050;, + 0.117895; 0.007823;, + 0.132789; 0.007778;, + 0.132823; 0.019004;, + 0.855854; 0.104853;, + 0.877266; 0.110479;, + 0.871483; 0.120494;, + 0.855854; 0.104853;, + 0.877266; 0.098915;, + 0.877266; 0.110479;, + 0.855854; 0.104853;, + 0.871485; 0.088901;, + 0.877266; 0.098915;, + 0.855854; 0.104853;, + 0.861471; 0.083120;, + 0.871485; 0.088901;, + 0.855854; 0.104853;, + 0.849907; 0.083120;, + 0.861471; 0.083120;, + 0.855854; 0.104853;, + 0.839892; 0.088903;, + 0.849907; 0.083120;, + 0.855854; 0.104853;, + 0.834110; 0.098918;, + 0.839892; 0.088903;, + 0.855854; 0.104853;, + 0.834109; 0.110482;, + 0.834110; 0.098918;, + 0.855854; 0.104853;, + 0.839891; 0.120496;, + 0.834109; 0.110482;, + 0.855854; 0.104853;, + 0.849905; 0.126277;, + 0.839891; 0.120496;, + 0.855854; 0.104853;, + 0.861468; 0.126276;, + 0.849905; 0.126277;, + 0.855854; 0.104853;, + 0.871483; 0.120494;, + 0.861468; 0.126276;, + 0.515672; 0.179404;, + 0.535701; 0.190969;, + 0.504111; 0.222560;, + 0.492545; 0.179403;, + 0.515672; 0.179404;, + 0.504111; 0.222560;, + 0.472516; 0.190965;, + 0.492545; 0.179403;, + 0.504111; 0.222560;, + 0.460954; 0.210994;, + 0.472516; 0.190965;, + 0.504111; 0.222560;, + 0.460955; 0.234121;, + 0.460954; 0.210994;, + 0.504111; 0.222560;, + 0.472520; 0.254151;, + 0.460955; 0.234121;, + 0.504111; 0.222560;, + 0.492549; 0.265716;, + 0.472520; 0.254151;, + 0.504111; 0.222560;, + 0.515677; 0.265718;, + 0.492549; 0.265716;, + 0.504111; 0.222560;, + 0.535705; 0.254155;, + 0.515677; 0.265718;, + 0.504111; 0.222560;, + 0.547267; 0.234127;, + 0.535705; 0.254155;, + 0.504111; 0.222560;, + 0.547266; 0.210999;, + 0.547267; 0.234127;, + 0.504111; 0.222560;, + 0.504111; 0.222560;, + 0.535701; 0.190969;, + 0.547266; 0.210999;, + 0.132926; 0.045053;, + 0.162713; 0.045144;, + 0.162645; 0.067453;, + 0.132858; 0.067362;, + 0.035619; 0.041631;, + 0.035710; 0.071418;, + 0.012672; 0.071489;, + 0.012580; 0.041701;, + 0.922252; 0.648644;, + 0.952039; 0.648553;, + 0.952108; 0.670893;, + 0.922321; 0.670985;, + 0.922184; 0.626303;, + 0.951971; 0.626212;, + 0.952039; 0.648553;, + 0.922252; 0.648644;, + 0.892160; 0.068216;, + 0.892171; 0.038437;, + 0.915300; 0.038447;, + 0.915289; 0.068226;, + 0.932841; 0.716864;, + 0.962629; 0.716773;, + 0.962697; 0.739226;, + 0.932910; 0.739317;, + 0.932773; 0.694644;, + 0.962561; 0.694553;, + 0.962629; 0.716773;, + 0.932841; 0.716864;, + 0.035710; 0.086453;, + 0.035619; 0.116241;, + 0.012525; 0.116170;, + 0.012616; 0.086382;, + 0.749614; 0.124799;, + 0.719827; 0.124708;, + 0.719895; 0.102585;, + 0.749682; 0.102676;, + 0.749545; 0.147331;, + 0.719758; 0.147240;, + 0.719827; 0.124708;, + 0.749614; 0.124799;, + 0.749493; 0.164235;, + 0.719706; 0.164143;, + 0.719758; 0.147240;, + 0.749545; 0.147331;, + 0.162577; 0.089825;, + 0.132789; 0.089734;, + 0.132858; 0.067362;, + 0.162645; 0.067453;, + 0.189082; 0.339448;, + 0.194864; 0.329433;, + 0.216442; 0.335213;, + 0.204877; 0.355243;, + 0.194864; 0.329433;, + 0.194864; 0.317869;, + 0.216443; 0.312086;, + 0.216442; 0.335213;, + 0.194864; 0.317869;, + 0.189083; 0.307855;, + 0.204880; 0.292057;, + 0.216443; 0.312086;, + 0.189083; 0.307855;, + 0.179069; 0.302074;, + 0.184852; 0.280495;, + 0.204880; 0.292057;, + 0.179069; 0.302074;, + 0.167505; 0.302074;, + 0.161725; 0.280496;, + 0.184852; 0.280495;, + 0.167505; 0.302074;, + 0.157491; 0.307857;, + 0.141695; 0.292061;, + 0.161725; 0.280496;, + 0.157491; 0.307857;, + 0.151708; 0.317872;, + 0.130131; 0.312091;, + 0.141695; 0.292061;, + 0.151708; 0.317872;, + 0.151708; 0.329435;, + 0.130129; 0.335219;, + 0.130131; 0.312091;, + 0.151708; 0.329435;, + 0.157489; 0.339450;, + 0.141692; 0.355247;, + 0.130129; 0.335219;, + 0.157489; 0.339450;, + 0.167503; 0.345231;, + 0.161720; 0.366809;, + 0.141692; 0.355247;, + 0.167503; 0.345231;, + 0.179067; 0.345230;, + 0.184847; 0.366808;, + 0.161720; 0.366809;, + 0.179067; 0.345230;, + 0.189082; 0.339448;, + 0.204877; 0.355243;, + 0.184847; 0.366808;, + 0.147819; 0.030160;, + 0.147785; 0.019050;, + 0.162679; 0.019004;, + 0.162713; 0.030114;, + 0.094536; 0.366774;, + 0.082989; 0.366809;, + 0.082943; 0.351916;, + 0.094490; 0.351880;, + 0.364671; 0.072128;, + 0.364637; 0.083190;, + 0.349744; 0.083144;, + 0.349778; 0.072083;, + 0.364706; 0.060862;, + 0.364671; 0.072128;, + 0.349778; 0.072083;, + 0.349812; 0.060817;, + 0.364732; 0.052411;, + 0.364706; 0.060862;, + 0.349812; 0.060817;, + 0.349838; 0.052365;, + 0.970886; 0.854556;, + 0.970920; 0.843370;, + 0.985814; 0.843416;, + 0.985779; 0.854602;, + 0.970852; 0.865711;, + 0.970886; 0.854556;, + 0.985779; 0.854602;, + 0.985745; 0.865756;, + 0.738117; 0.013132;, + 0.749636; 0.013097;, + 0.749682; 0.027991;, + 0.738163; 0.028026;, + 0.962663; 0.817306;, + 0.962629; 0.806136;, + 0.977523; 0.806090;, + 0.977557; 0.817261;, + 0.962698; 0.828477;, + 0.962663; 0.817306;, + 0.977557; 0.817261;, + 0.977591; 0.828431;, + 0.585285; 0.027057;, + 0.573721; 0.027052;, + 0.573726; 0.012162;, + 0.585291; 0.012167;, + 0.147785; 0.019050;, + 0.147751; 0.007823;, + 0.162645; 0.007778;, + 0.162679; 0.019004;, + 0.913905; 0.104853;, + 0.935316; 0.110479;, + 0.929534; 0.120494;, + 0.913905; 0.104853;, + 0.935317; 0.098915;, + 0.935316; 0.110479;, + 0.913905; 0.104853;, + 0.929535; 0.088901;, + 0.935317; 0.098915;, + 0.913905; 0.104853;, + 0.919521; 0.083120;, + 0.929535; 0.088901;, + 0.913905; 0.104853;, + 0.907958; 0.083120;, + 0.919521; 0.083120;, + 0.913905; 0.104853;, + 0.897943; 0.088903;, + 0.907958; 0.083120;, + 0.913905; 0.104853;, + 0.892160; 0.098918;, + 0.897943; 0.088903;, + 0.913905; 0.104853;, + 0.892160; 0.110482;, + 0.892160; 0.098918;, + 0.913905; 0.104853;, + 0.897941; 0.120496;, + 0.892160; 0.110482;, + 0.913905; 0.104853;, + 0.907955; 0.126277;, + 0.897941; 0.120496;, + 0.913905; 0.104853;, + 0.919519; 0.126276;, + 0.907955; 0.126277;, + 0.913905; 0.104853;, + 0.929534; 0.120494;, + 0.919519; 0.126276;, + 0.562162; 0.311933;, + 0.573727; 0.291903;, + 0.605318; 0.323494;, + 0.562161; 0.335061;, + 0.562162; 0.311933;, + 0.605318; 0.323494;, + 0.573724; 0.355089;, + 0.562161; 0.335061;, + 0.605318; 0.323494;, + 0.593752; 0.366651;, + 0.573724; 0.355089;, + 0.605318; 0.323494;, + 0.616879; 0.366650;, + 0.593752; 0.366651;, + 0.605318; 0.323494;, + 0.636909; 0.355085;, + 0.616879; 0.366650;, + 0.605318; 0.323494;, + 0.648474; 0.335055;, + 0.636909; 0.355085;, + 0.605318; 0.323494;, + 0.648475; 0.311928;, + 0.648474; 0.335055;, + 0.605318; 0.323494;, + 0.636912; 0.291899;, + 0.648475; 0.311928;, + 0.605318; 0.323494;, + 0.616884; 0.280337;, + 0.636912; 0.291899;, + 0.605318; 0.323494;, + 0.593757; 0.280338;, + 0.616884; 0.280337;, + 0.605318; 0.323494;, + 0.605318; 0.323494;, + 0.573727; 0.291903;, + 0.593757; 0.280338;, + 0.410301; 0.083099;, + 0.380514; 0.083190;, + 0.380445; 0.060737;, + 0.410232; 0.060646;, + 0.953334; 0.038447;, + 0.953323; 0.068226;, + 0.930194; 0.068216;, + 0.930205; 0.038437;, + 0.334781; 0.072205;, + 0.304994; 0.072114;, + 0.305063; 0.049773;, + 0.334850; 0.049865;, + 0.334713; 0.094546;, + 0.304925; 0.094454;, + 0.304994; 0.072114;, + 0.334781; 0.072205;, + 0.932865; 0.784069;, + 0.932773; 0.754281;, + 0.955811; 0.754211;, + 0.955903; 0.783998;, + 0.487370; 0.065594;, + 0.457583; 0.065503;, + 0.457651; 0.043194;, + 0.487438; 0.043285;, + 0.487302; 0.087966;, + 0.457515; 0.087875;, + 0.457583; 0.065503;, + 0.487370; 0.065594;, + 0.834246; 0.185917;, + 0.864034; 0.185826;, + 0.864086; 0.202729;, + 0.834298; 0.202821;, + 0.834177; 0.163385;, + 0.863965; 0.163294;, + 0.864034; 0.185826;, + 0.834246; 0.185917;, + 0.834109; 0.141262;, + 0.863897; 0.141171;, + 0.863965; 0.163294;, + 0.834177; 0.163385;, + 0.952728; 0.143163;, + 0.952819; 0.172950;, + 0.929726; 0.173021;, + 0.929634; 0.143234;, + 0.380377; 0.038517;, + 0.410164; 0.038426;, + 0.410232; 0.060646;, + 0.380445; 0.060737;, + 0.034808; 0.279635;, + 0.044823; 0.285418;, + 0.039042; 0.306996;, + 0.019013; 0.295431;, + 0.044823; 0.285418;, + 0.056387; 0.285418;, + 0.062170; 0.306997;, + 0.039042; 0.306996;, + 0.056387; 0.285418;, + 0.066401; 0.279637;, + 0.082198; 0.295435;, + 0.062170; 0.306997;, + 0.066401; 0.279637;, + 0.072182; 0.269623;, + 0.093761; 0.275406;, + 0.082198; 0.295435;, + 0.072182; 0.269623;, + 0.072181; 0.258059;, + 0.093759; 0.252279;, + 0.093761; 0.275406;, + 0.072181; 0.258059;, + 0.066399; 0.248044;, + 0.082194; 0.232249;, + 0.093759; 0.252279;, + 0.066399; 0.248044;, + 0.056384; 0.242262;, + 0.062165; 0.220684;, + 0.082194; 0.232249;, + 0.056384; 0.242262;, + 0.044821; 0.242261;, + 0.039038; 0.220683;, + 0.062165; 0.220684;, + 0.044821; 0.242261;, + 0.034807; 0.248042;, + 0.019009; 0.232245;, + 0.039038; 0.220683;, + 0.034807; 0.248042;, + 0.029025; 0.258057;, + 0.007447; 0.252273;, + 0.019009; 0.232245;, + 0.029025; 0.258057;, + 0.029026; 0.269620;, + 0.007448; 0.275401;, + 0.007447; 0.252273;, + 0.029026; 0.269620;, + 0.034808; 0.279635;, + 0.019013; 0.295431;, + 0.007448; 0.275401;, + 0.364732; 0.015131;, + 0.364698; 0.026317;, + 0.349804; 0.026271;, + 0.349838; 0.015086;, + 0.426129; 0.121147;, + 0.426103; 0.112695;, + 0.440997; 0.112650;, + 0.441022; 0.121101;, + 0.426163; 0.132413;, + 0.426129; 0.121147;, + 0.441022; 0.121101;, + 0.441057; 0.132367;, + 0.426197; 0.143474;, + 0.426163; 0.132413;, + 0.441057; 0.132367;, + 0.441091; 0.143429;, + 0.950579; 0.903052;, + 0.939032; 0.903016;, + 0.939077; 0.888122;, + 0.950624; 0.888158;, + 0.991427; 0.488491;, + 0.991461; 0.499601;, + 0.976568; 0.499646;, + 0.976533; 0.488536;, + 0.991393; 0.477264;, + 0.991427; 0.488491;, + 0.976533; 0.488536;, + 0.976499; 0.477310;, + 0.024146; 0.011842;, + 0.035710; 0.011847;, + 0.035704; 0.026737;, + 0.024140; 0.026732;, + 0.905921; 0.668280;, + 0.905887; 0.679451;, + 0.890993; 0.679405;, + 0.891027; 0.668235;, + 0.905955; 0.657110;, + 0.905921; 0.668280;, + 0.891027; 0.668235;, + 0.891062; 0.657064;, + 0.487438; 0.028265;, + 0.475919; 0.028300;, + 0.475874; 0.013407;, + 0.487393; 0.013371;, + 0.364698; 0.026317;, + 0.364664; 0.037471;, + 0.349770; 0.037426;, + 0.349804; 0.026271;, + 0.796578; 0.114236;, + 0.790631; 0.135969;, + 0.780617; 0.130186;, + 0.796578; 0.114236;, + 0.802195; 0.135969;, + 0.790631; 0.135969;, + 0.796578; 0.114236;, + 0.812209; 0.130188;, + 0.802195; 0.135969;, + 0.796578; 0.114236;, + 0.817990; 0.120174;, + 0.812209; 0.130188;, + 0.796578; 0.114236;, + 0.817990; 0.108610;, + 0.817990; 0.120174;, + 0.796578; 0.114236;, + 0.812207; 0.098595;, + 0.817990; 0.108610;, + 0.796578; 0.114236;, + 0.802193; 0.092813;, + 0.812207; 0.098595;, + 0.796578; 0.114236;, + 0.790629; 0.092812;, + 0.802193; 0.092813;, + 0.796578; 0.114236;, + 0.780615; 0.098593;, + 0.790629; 0.092812;, + 0.796578; 0.114236;, + 0.774834; 0.108607;, + 0.780615; 0.098593;, + 0.796578; 0.114236;, + 0.774834; 0.120171;, + 0.774834; 0.108607;, + 0.796578; 0.114236;, + 0.780617; 0.130186;, + 0.774834; 0.120171;, + 0.460955; 0.312207;, + 0.472520; 0.292178;, + 0.504111; 0.323768;, + 0.460954; 0.335335;, + 0.460955; 0.312207;, + 0.504111; 0.323768;, + 0.472516; 0.355363;, + 0.460954; 0.335335;, + 0.504111; 0.323768;, + 0.492545; 0.366926;, + 0.472516; 0.355363;, + 0.504111; 0.323768;, + 0.515672; 0.366924;, + 0.492545; 0.366926;, + 0.504111; 0.323768;, + 0.535701; 0.355359;, + 0.515672; 0.366924;, + 0.504111; 0.323768;, + 0.547266; 0.335330;, + 0.535701; 0.355359;, + 0.504111; 0.323768;, + 0.547267; 0.312202;, + 0.547266; 0.335330;, + 0.504111; 0.323768;, + 0.535705; 0.292174;, + 0.547267; 0.312202;, + 0.504111; 0.323768;, + 0.515677; 0.280611;, + 0.535705; 0.292174;, + 0.504111; 0.323768;, + 0.492549; 0.280613;, + 0.515677; 0.280611;, + 0.504111; 0.323768;, + 0.504111; 0.323768;, + 0.472520; 0.292178;, + 0.492549; 0.280613;, + 0.276475; 0.083284;, + 0.246687; 0.083375;, + 0.246619; 0.060923;, + 0.276406; 0.060831;, + 0.964614; 0.432592;, + 0.964603; 0.462371;, + 0.941474; 0.462361;, + 0.941485; 0.432582;, + 0.846075; 0.880816;, + 0.816287; 0.880724;, + 0.816356; 0.858384;, + 0.846143; 0.858475;, + 0.846006; 0.903156;, + 0.816219; 0.903065;, + 0.816287; 0.880724;, + 0.846075; 0.880816;, + 0.562252; 0.071809;, + 0.562161; 0.042021;, + 0.585199; 0.041951;, + 0.585291; 0.071738;, + 0.749614; 0.065320;, + 0.719827; 0.065229;, + 0.719895; 0.042920;, + 0.749682; 0.043011;, + 0.749546; 0.087691;, + 0.719758; 0.087600;, + 0.719827; 0.065229;, + 0.749614; 0.065320;, + 0.663505; 0.147331;, + 0.693293; 0.147240;, + 0.693345; 0.164143;, + 0.663557; 0.164235;, + 0.663436; 0.124799;, + 0.693224; 0.124708;, + 0.693293; 0.147240;, + 0.663505; 0.147331;, + 0.663369; 0.102676;, + 0.693156; 0.102585;, + 0.693224; 0.124708;, + 0.663436; 0.124799;, + 0.955867; 0.843370;, + 0.955958; 0.873158;, + 0.932864; 0.873229;, + 0.932773; 0.843441;, + 0.246551; 0.038702;, + 0.276338; 0.038611;, + 0.276406; 0.060831;, + 0.246619; 0.060923;, + 0.690730; 0.339290;, + 0.700745; 0.345072;, + 0.694964; 0.366650;, + 0.674935; 0.355085;, + 0.700745; 0.345072;, + 0.712308; 0.345073;, + 0.718091; 0.366651;, + 0.694964; 0.366650;, + 0.712308; 0.345073;, + 0.722322; 0.339291;, + 0.738120; 0.355089;, + 0.718091; 0.366651;, + 0.722322; 0.339291;, + 0.728104; 0.329277;, + 0.749682; 0.335061;, + 0.738120; 0.355089;, + 0.728104; 0.329277;, + 0.728103; 0.317714;, + 0.749681; 0.311933;, + 0.749682; 0.335061;, + 0.728103; 0.317714;, + 0.722321; 0.307699;, + 0.738116; 0.291903;, + 0.749681; 0.311933;, + 0.722321; 0.307699;, + 0.712306; 0.301916;, + 0.718087; 0.280338;, + 0.738116; 0.291903;, + 0.712306; 0.301916;, + 0.700742; 0.301915;, + 0.694959; 0.280337;, + 0.718087; 0.280338;, + 0.700742; 0.301915;, + 0.690728; 0.307697;, + 0.674931; 0.291899;, + 0.694959; 0.280337;, + 0.690728; 0.307697;, + 0.684947; 0.317711;, + 0.663369; 0.311928;, + 0.674931; 0.291899;, + 0.684947; 0.317711;, + 0.684948; 0.329275;, + 0.663370; 0.335055;, + 0.663369; 0.311928;, + 0.684948; 0.329275;, + 0.690730; 0.339290;, + 0.674935; 0.355085;, + 0.663370; 0.335055;, + 0.985758; 0.754256;, + 0.985724; 0.765442;, + 0.970831; 0.765396;, + 0.970865; 0.754211;, + 0.426129; 0.075428;, + 0.426103; 0.066977;, + 0.440997; 0.066931;, + 0.441022; 0.075382;, + 0.426163; 0.086694;, + 0.426129; 0.075428;, + 0.441022; 0.075382;, + 0.441057; 0.086648;, + 0.426197; 0.097756;, + 0.426163; 0.086694;, + 0.441057; 0.086648;, + 0.441091; 0.097710;, + 0.094490; 0.336987;, + 0.082943; 0.336951;, + 0.082989; 0.322057;, + 0.094536; 0.322093;, + 0.992519; 0.705779;, + 0.992553; 0.716889;, + 0.977659; 0.716935;, + 0.977625; 0.705825;, + 0.992485; 0.694553;, + 0.992519; 0.705779;, + 0.977625; 0.705825;, + 0.977591; 0.694599;, + 0.666836; 0.013132;, + 0.678401; 0.013137;, + 0.678395; 0.028026;, + 0.666831; 0.028021;, + 0.980616; 0.929220;, + 0.980582; 0.940390;, + 0.965688; 0.940345;, + 0.965722; 0.929175;, + 0.980650; 0.918050;, + 0.980616; 0.929220;, + 0.965722; 0.929175;, + 0.965757; 0.918004;, + 0.978567; 0.678386;, + 0.967048; 0.678421;, + 0.967002; 0.663527;, + 0.978521; 0.663492;, + 0.985724; 0.765442;, + 0.985690; 0.776596;, + 0.970797; 0.776551;, + 0.970831; 0.765396;, + 0.072349; 0.094507;, + 0.066401; 0.116240;, + 0.056387; 0.110457;, + 0.072349; 0.094507;, + 0.077965; 0.116241;, + 0.066401; 0.116240;, + 0.072349; 0.094507;, + 0.087979; 0.110459;, + 0.077965; 0.116241;, + 0.072349; 0.094507;, + 0.093761; 0.100445;, + 0.087979; 0.110459;, + 0.072349; 0.094507;, + 0.093760; 0.088881;, + 0.093761; 0.100445;, + 0.072349; 0.094507;, + 0.087977; 0.078867;, + 0.093760; 0.088881;, + 0.072349; 0.094507;, + 0.077963; 0.073084;, + 0.087977; 0.078867;, + 0.072349; 0.094507;, + 0.066399; 0.073083;, + 0.077963; 0.073084;, + 0.072349; 0.094507;, + 0.056385; 0.078865;, + 0.066399; 0.073083;, + 0.072349; 0.094507;, + 0.050604; 0.088879;, + 0.056385; 0.078865;, + 0.072349; 0.094507;, + 0.050604; 0.100443;, + 0.050604; 0.088879;, + 0.072349; 0.094507;, + 0.056387; 0.110457;, + 0.050604; 0.100443;, + 0.320415; 0.605317;, + 0.320961; 0.709580;, + 0.305796; 0.694725;, + 0.320961; 0.709580;, + 0.231337; 0.769414;, + 0.305796; 0.694725;, + 0.667142; 0.530437;, + 0.652434; 0.590057;, + 0.562799; 0.590332;, + 0.577363; 0.530712;, + 0.537515; 0.381820;, + 0.547267; 0.441425;, + 0.425469; 0.441051;, + 0.426187; 0.396372;, + 0.216409; 0.530220;, + 0.211093; 0.590156;, + 0.105784; 0.575222;, + 0.111094; 0.530175;, + 0.231519; 0.336568;, + 0.276201; 0.336706;, + 0.261124; 0.396235;, + 0.231337; 0.396143;, + 0.347916; 0.247303;, + 0.315515; 0.247403;, + 0.305818; 0.202751;, + 0.349594; 0.187723;, + 0.666369; 0.694553;, + 0.696139; 0.694644;, + 0.695448; 0.754218;, + 0.665678; 0.754126;, + 0.696139; 0.694644;, + 0.741257; 0.709677;, + 0.740612; 0.754356;, + 0.695448; 0.754218;, + 0.321553; 0.903198;, + 0.321599; 0.992553;, + 0.231815; 0.925798;, + 0.411159; 0.671980;, + 0.500943; 0.605225;, + 0.500897; 0.694580;, + 0.007447; 0.872951;, + 0.007931; 0.714172;, + 0.067506; 0.714276;, + 0.067022; 0.873055;, + 0.321553; 0.903198;, + 0.320961; 0.709580;, + 0.350745; 0.709489;, + 0.351337; 0.903107;, + 0.351337; 0.903107;, + 0.350745; 0.709489;, + 0.395209; 0.714394;, + 0.395695; 0.873175;, + 0.575038; 0.724603;, + 0.574552; 0.883384;, + 0.530088; 0.888290;, + 0.530681; 0.694671;, + 0.530681; 0.694671;, + 0.530088; 0.888290;, + 0.500304; 0.888198;, + 0.500897; 0.694580;, + 0.651796; 0.381545;, + 0.666869; 0.441074;, + 0.577090; 0.441349;, + 0.562161; 0.381820;, + 0.666869; 0.441074;, + 0.667142; 0.530437;, + 0.577363; 0.530712;, + 0.577090; 0.441349;, + 0.547267; 0.441425;, + 0.546993; 0.530787;, + 0.425195; 0.530413;, + 0.425469; 0.441051;, + 0.546993; 0.530787;, + 0.536876; 0.590332;, + 0.425638; 0.575096;, + 0.425195; 0.530413;, + 0.211173; 0.381703;, + 0.216443; 0.440883;, + 0.111128; 0.440838;, + 0.105852; 0.396548;, + 0.216443; 0.440883;, + 0.216409; 0.530220;, + 0.111094; 0.530175;, + 0.111128; 0.440838;, + 0.231519; 0.336568;, + 0.231794; 0.247206;, + 0.276475; 0.247343;, + 0.276201; 0.336706;, + 0.231794; 0.247206;, + 0.231976; 0.187631;, + 0.261764; 0.187723;, + 0.276475; 0.247343;, + 0.348190; 0.336666;, + 0.350233; 0.396235;, + 0.306366; 0.381475;, + 0.315789; 0.336765;, + 0.315789; 0.336765;, + 0.315515; 0.247403;, + 0.347916; 0.247303;, + 0.348190; 0.336666;, + 0.665730; 0.903065;, + 0.665404; 0.843489;, + 0.695174; 0.843580;, + 0.695500; 0.903156;, + 0.665404; 0.843489;, + 0.665678; 0.754126;, + 0.695448; 0.754218;, + 0.695174; 0.843580;, + 0.695500; 0.903156;, + 0.695174; 0.843580;, + 0.740337; 0.843718;, + 0.740709; 0.888401;, + 0.695174; 0.843580;, + 0.695448; 0.754218;, + 0.740612; 0.754356;, + 0.740337; 0.843718;, + 0.215959; 0.873587;, + 0.156384; 0.873327;, + 0.156868; 0.714548;, + 0.216443; 0.714808;, + 0.156384; 0.873327;, + 0.067022; 0.873055;, + 0.067506; 0.714276;, + 0.156868; 0.714548;, + 0.320961; 0.709580;, + 0.320415; 0.605317;, + 0.350597; 0.679700;, + 0.320961; 0.709580;, + 0.350597; 0.679700;, + 0.350745; 0.709489;, + 0.395209; 0.714394;, + 0.350745; 0.709489;, + 0.350597; 0.679700;, + 0.574552; 0.883384;, + 0.529940; 0.918079;, + 0.530088; 0.888290;, + 0.499758; 0.992462;, + 0.500304; 0.888198;, + 0.529940; 0.918079;, + 0.500304; 0.888198;, + 0.530088; 0.888290;, + 0.529940; 0.918079;, + 0.394693; 0.619974;, + 0.357792; 0.634992;, + 0.350199; 0.605225;, + 0.537136; 0.962787;, + 0.574036; 0.977804;, + 0.529542; 0.992553;, + 0.529940; 0.918079;, + 0.537136; 0.962787;, + 0.529542; 0.992553;, + 0.499758; 0.992462;, + 0.350199; 0.605225;, + 0.357792; 0.634992;, + 0.350597; 0.679700;, + 0.320415; 0.605317;, + 0.786380; 0.679312;, + 0.741661; 0.679450;, + 0.741442; 0.608705;, + 0.786185; 0.616014;, + 0.157201; 0.605322;, + 0.157156; 0.620215;, + 0.067794; 0.619943;, + 0.067839; 0.605049;, + 0.657850; 0.608705;, + 0.658067; 0.679450;, + 0.590024; 0.679659;, + 0.601261; 0.620049;, + 0.067839; 0.605049;, + 0.067794; 0.619943;, + 0.023112; 0.619807;, + 0.178528; 0.101210;, + 0.216249; 0.101095;, + 0.216443; 0.164393;, + 0.178665; 0.145891;, + 0.802184; 0.433614;, + 0.816502; 0.390639;, + 0.855598; 0.381729;, + 0.855595; 0.477309;, + 0.067794; 0.619943;, + 0.157156; 0.620215;, + 0.156868; 0.714548;, + 0.067506; 0.714276;, + 0.502548; 0.093764;, + 0.547267; 0.093900;, + 0.547074; 0.157199;, + 0.502332; 0.164509;, + 0.296935; 0.172738;, + 0.297129; 0.109440;, + 0.334850; 0.109555;, + 0.334713; 0.154237;, + 0.733447; 0.992553;, + 0.665404; 0.992344;, + 0.665621; 0.921599;, + 0.722210; 0.932943;, + 0.817990; 0.246443;, + 0.778894; 0.237532;, + 0.764576; 0.194557;, + 0.817987; 0.150863;, + 0.157156; 0.620215;, + 0.157201; 0.605322;, + 0.201837; 0.620352;, + 0.321599; 0.992553;, + 0.351360; 0.947784;, + 0.351383; 0.992462;, + 0.395786; 0.977423;, + 0.351383; 0.992462;, + 0.351360; 0.947784;, + 0.321553; 0.903198;, + 0.351337; 0.903107;, + 0.351360; 0.947784;, + 0.321599; 0.992553;, + 0.500943; 0.605225;, + 0.530727; 0.605317;, + 0.530704; 0.649994;, + 0.530704; 0.649994;, + 0.530727; 0.605317;, + 0.575130; 0.620355;, + 0.530704; 0.649994;, + 0.530681; 0.694671;, + 0.500897; 0.694580;, + 0.500943; 0.605225;, + 0.156384; 0.873327;, + 0.156066; 0.977660;, + 0.066704; 0.977387;, + 0.067022; 0.873055;, + 0.156066; 0.977660;, + 0.156021; 0.992553;, + 0.066658; 0.992281;, + 0.066704; 0.977387;, + 0.066704; 0.977387;, + 0.066658; 0.992281;, + 0.022023; 0.977251;, + 0.156021; 0.992553;, + 0.156066; 0.977660;, + 0.200747; 0.977796;, + 0.231564; 0.098407;, + 0.276245; 0.098269;, + 0.276475; 0.172738;, + 0.231771; 0.165429;, + 0.819282; 0.366651;, + 0.770860; 0.343444;, + 0.764576; 0.299207;, + 0.819362; 0.261337;, + 0.410073; 0.098084;, + 0.410301; 0.172552;, + 0.349744; 0.172738;, + 0.364446; 0.113118;, + 0.593688; 0.227573;, + 0.599973; 0.183336;, + 0.648394; 0.160128;, + 0.648475; 0.265443;, + 0.748478; 0.966444;, + 0.748341; 0.921763;, + 0.801723; 0.921599;, + 0.801928; 0.988621;, + 0.231337; 0.456311;, + 0.410027; 0.455764;, + 0.410301; 0.545127;, + 0.231610; 0.545674;, + 0.231610; 0.545674;, + 0.410301; 0.545127;, + 0.395691; 0.589853;, + 0.239337; 0.590332;, + 0.395145; 0.411129;, + 0.410027; 0.455764;, + 0.231337; 0.456311;, + 0.238790; 0.411607;, + 0.500304; 0.888198;, + 0.499758; 0.992462;, + 0.485140; 0.903054;, + 0.410680; 0.828364;, + 0.500304; 0.888198;, + 0.485140; 0.903054;, + 0.672961; 0.675727;, + 0.673167; 0.608705;, + 0.726548; 0.608869;, + 0.726411; 0.653550;, + 0.905749; 0.992473;, + 0.861068; 0.992337;, + 0.861273; 0.925315;, + 0.905976; 0.918004;, + 0.093761; 0.205789;, + 0.033203; 0.205603;, + 0.033432; 0.131135;, + 0.079058; 0.146168;, + 0.242607; 0.783810;, + 0.242965; 0.901098;, + 0.231815; 0.925798;, + 0.231337; 0.769414;, + 0.242965; 0.901098;, + 0.310269; 0.884148;, + 0.321553; 0.903198;, + 0.231815; 0.925798;, + 0.310269; 0.884148;, + 0.309825; 0.738935;, + 0.320961; 0.709580;, + 0.321553; 0.903198;, + 0.309825; 0.738935;, + 0.242607; 0.783810;, + 0.231337; 0.769414;, + 0.320961; 0.709580;, + 0.309825; 0.738935;, + 0.310269; 0.884148;, + 0.242965; 0.901098;, + 0.242607; 0.783810;, + 0.422309; 0.696681;, + 0.421950; 0.813968;, + 0.410680; 0.828364;, + 0.411159; 0.671980;, + 0.489613; 0.713630;, + 0.422309; 0.696681;, + 0.411159; 0.671980;, + 0.500897; 0.694580;, + 0.489168; 0.858844;, + 0.489613; 0.713630;, + 0.500897; 0.694580;, + 0.500304; 0.888198;, + 0.421950; 0.813968;, + 0.489168; 0.858844;, + 0.500304; 0.888198;, + 0.410680; 0.828364;, + 0.422309; 0.696681;, + 0.489613; 0.713630;, + 0.489168; 0.858844;, + 0.421950; 0.813968;; + } //End of Cube_001 UV Coordinates + } // End of _0002 mesh + } // End of _0002 +} // End of Root diff --git a/mods/vehicle_mash/models/car_f1.x b/mods/vehicle_mash/models/car_f1.x new file mode 100644 index 0000000..e2cc87b --- /dev/null +++ b/mods/vehicle_mash/models/car_f1.x @@ -0,0 +1,4657 @@ +xof 0303txt 0032 + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame _0002 { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000,-1.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Mesh { // _0002 mesh + 1306; + 3.125003;-2.538288;-7.940267;, + -3.124995;-2.538288;-7.940269;, + -3.124992;-2.538290;-15.440267;, + 3.125002;-2.538290;-15.440267;, + 3.125003; 0.586711;-7.940267;, + 3.125005; 0.586710;-15.440265;, + -3.124992; 0.586711;-15.440267;, + -3.124991; 0.586712;-7.940267;, + 3.125005; 0.586710;-15.440265;, + 3.125002;-2.538290;-15.440267;, + -3.124992;-2.538290;-15.440267;, + -3.124992; 0.586711;-15.440267;, + 3.125003; 0.586711;-7.940267;, + 3.125003;-2.538288;-7.940267;, + 3.125002;-2.538290;-15.440267;, + 3.125005; 0.586710;-15.440265;, + -3.124991; 0.586712;-7.940267;, + -3.124995;-2.538288;-7.940269;, + 3.125003;-2.538288;-7.940267;, + 3.125003; 0.586711;-7.940267;, + -3.124995;-2.538288;-7.940269;, + -3.124991; 0.586712;-7.940267;, + -3.124992; 0.586711;-15.440267;, + -3.124992;-2.538290;-15.440267;, + 3.750003;-2.538285;15.809729;, + -3.749994;-2.538284;15.809730;, + -6.249992;-2.538285; 8.309731;, + 6.250003;-2.538286; 8.309731;, + 3.750001; 0.586715;15.809732;, + 6.250006; 0.586714; 8.309733;, + -6.249990; 0.586716; 8.309731;, + -3.749991; 0.586716;15.809729;, + 6.250006; 0.586714; 8.309733;, + 6.250003;-2.538286; 8.309731;, + -6.249992;-2.538285; 8.309731;, + -6.249990; 0.586716; 8.309731;, + 3.750001; 0.586715;15.809732;, + 3.750003;-2.538285;15.809729;, + 6.250003;-2.538286; 8.309731;, + 6.250006; 0.586714; 8.309733;, + -3.749991; 0.586716;15.809729;, + -3.749994;-2.538284;15.809730;, + 3.750003;-2.538285;15.809729;, + 3.750001; 0.586715;15.809732;, + -3.749994;-2.538284;15.809730;, + -3.749991; 0.586716;15.809729;, + -6.249990; 0.586716; 8.309731;, + -6.249992;-2.538285; 8.309731;, + 0.625006;-1.288285;13.934731;, + 6.875006;-1.288285;13.934731;, + 7.500006;-1.288285;14.559731;, + 0.000006;-1.288284;14.559731;, + 0.625006;-1.288285;10.184731;, + 0.625006;-1.288285;13.934731;, + 0.000006;-1.288284;14.559731;, + 0.000006;-1.288285; 9.559731;, + 6.875006;-1.288286;10.184731;, + 0.625006;-1.288285;10.184731;, + 0.000006;-1.288285; 9.559731;, + 7.500006;-1.288286; 9.559731;, + 6.875006;-1.288285;13.934731;, + 6.875006;-1.288286;10.184731;, + 7.500006;-1.288286; 9.559731;, + 7.500006;-1.288285;14.559731;, + 6.875006;-0.038286;13.934731;, + 6.875006;-0.038286;10.184731;, + 6.875006;-1.288286;10.184731;, + 6.875006;-1.288285;13.934731;, + 6.875006;-0.038286;10.184731;, + 0.625006;-0.038285;10.184731;, + 0.625006;-1.288285;10.184731;, + 6.875006;-1.288286;10.184731;, + 0.625006;-0.038285;10.184731;, + 0.625006;-0.038285;13.934731;, + 0.625006;-1.288285;13.934731;, + 0.625006;-1.288285;10.184731;, + 0.625006;-0.038285;13.934731;, + 6.875006;-0.038286;13.934731;, + 6.875006;-1.288285;13.934731;, + 0.625006;-1.288285;13.934731;, + 7.500006;-0.038286;14.559731;, + 0.000006;-0.038284;14.559731;, + 0.000006;-1.288284;14.559731;, + 7.500006;-1.288285;14.559731;, + 0.000006;-0.038285; 9.559731;, + 7.500006;-0.038286; 9.559731;, + 7.500006;-1.288286; 9.559731;, + 0.000006;-1.288285; 9.559731;, + 7.500006;-0.038286; 9.559731;, + 7.500006;-0.038286;14.559731;, + 7.500006;-1.288285;14.559731;, + 7.500006;-1.288286; 9.559731;, + 6.875006;-0.038286;13.934731;, + 7.500006;-0.038286;14.559731;, + 7.500006;-0.038286; 9.559731;, + 6.875006;-0.038286;10.184731;, + 6.875006;-0.038286;10.184731;, + 7.500006;-0.038286; 9.559731;, + 0.000006;-0.038285; 9.559731;, + 0.625006;-0.038285;10.184731;, + 0.625006;-0.038285;10.184731;, + 0.000006;-0.038285; 9.559731;, + 0.000006;-0.038284;14.559731;, + 0.625006;-0.038285;13.934731;, + 0.625006;-0.038285;13.934731;, + 0.000006;-0.038284;14.559731;, + 7.500006;-0.038286;14.559731;, + 6.875006;-0.038286;13.934731;, + 8.750006;-0.663291;11.747231;, + -8.749994;-0.663279;11.747231;, + -8.749994;-0.350779;12.059731;, + 8.750006;-0.350791;12.059731;, + 8.750006;-0.975791;12.059731;, + -8.749994;-0.975779;12.059731;, + -8.749994;-0.663279;11.747231;, + 8.750006;-0.663291;11.747231;, + 8.750006;-0.663291;12.372231;, + -8.749994;-0.663279;12.372231;, + -8.749994;-0.975779;12.059731;, + 8.750006;-0.975791;12.059731;, + -8.749994;-0.663279;12.372231;, + 8.750006;-0.663291;12.372231;, + 8.750006;-0.350791;12.059731;, + -8.749994;-0.350779;12.059731;, + 8.750006;-0.975791;12.059731;, + 8.750006;-0.663291;11.747231;, + 8.750006;-0.350791;12.059731;, + 8.750006;-0.663291;12.372231;, + -8.749994;-0.975779;12.059731;, + -8.749994;-0.663279;12.372231;, + -8.749994;-0.350779;12.059731;, + -8.749994;-0.663279;11.747231;, + 6.250004;-0.663295;-12.002768;, + -6.249996;-0.663284;-12.002767;, + -6.249996;-0.350784;-11.690267;, + 6.250004;-0.350795;-11.690268;, + 6.250004;-0.975795;-11.690268;, + -6.249996;-0.975784;-11.690267;, + -6.249996;-0.663284;-12.002767;, + 6.250004;-0.663295;-12.002768;, + 6.250004;-0.663295;-11.377768;, + -6.249996;-0.663284;-11.377767;, + -6.249996;-0.975784;-11.690267;, + 6.250004;-0.975795;-11.690268;, + -6.249996;-0.663284;-11.377767;, + 6.250004;-0.663295;-11.377768;, + 6.250004;-0.350795;-11.690268;, + -6.249996;-0.350784;-11.690267;, + 6.250004;-0.975795;-11.690268;, + 6.250004;-0.663295;-12.002768;, + 6.250004;-0.350795;-11.690268;, + 6.250004;-0.663295;-11.377768;, + -6.249996;-0.975784;-11.690267;, + -6.249996;-0.663284;-11.377767;, + -6.249996;-0.350784;-11.690267;, + -6.249996;-0.663284;-12.002767;, + -6.874995;-1.288283;13.934731;, + -0.624994;-1.288284;13.934731;, + 0.000006;-1.288284;14.559731;, + -7.499995;-1.288283;14.559731;, + -6.874995;-1.288284;10.184731;, + -6.874995;-1.288283;13.934731;, + -7.499995;-1.288283;14.559731;, + -7.499995;-1.288284; 9.559731;, + -0.624994;-1.288285;10.184731;, + -6.874995;-1.288284;10.184731;, + -7.499995;-1.288284; 9.559731;, + 0.000006;-1.288285; 9.559731;, + -0.624994;-1.288284;13.934731;, + -0.624994;-1.288285;10.184731;, + 0.000006;-1.288285; 9.559731;, + 0.000006;-1.288284;14.559731;, + -0.624994;-0.038284;13.934731;, + -0.624994;-0.038285;10.184731;, + -0.624994;-1.288285;10.184731;, + -0.624994;-1.288284;13.934731;, + -0.624994;-0.038285;10.184731;, + -6.874995;-0.038284;10.184731;, + -6.874995;-1.288284;10.184731;, + -0.624994;-1.288285;10.184731;, + -6.874995;-0.038284;10.184731;, + -6.874995;-0.038283;13.934731;, + -6.874995;-1.288283;13.934731;, + -6.874995;-1.288284;10.184731;, + -6.874995;-0.038283;13.934731;, + -0.624994;-0.038284;13.934731;, + -0.624994;-1.288284;13.934731;, + -6.874995;-1.288283;13.934731;, + 0.000006;-0.038284;14.559731;, + -7.499995;-0.038284;14.559731;, + -7.499995;-1.288283;14.559731;, + 0.000006;-1.288284;14.559731;, + -7.499995;-0.038284;14.559731;, + -7.499995;-0.038285; 9.559731;, + -7.499995;-1.288284; 9.559731;, + -7.499995;-1.288283;14.559731;, + -7.499995;-0.038285; 9.559731;, + 0.000006;-0.038285; 9.559731;, + 0.000006;-1.288285; 9.559731;, + -7.499995;-1.288284; 9.559731;, + -0.624994;-0.038284;13.934731;, + 0.000006;-0.038284;14.559731;, + 0.000006;-0.038285; 9.559731;, + -0.624994;-0.038285;10.184731;, + -0.624994;-0.038285;10.184731;, + 0.000006;-0.038285; 9.559731;, + -7.499995;-0.038285; 9.559731;, + -6.874995;-0.038284;10.184731;, + -6.874995;-0.038284;10.184731;, + -7.499995;-0.038285; 9.559731;, + -7.499995;-0.038284;14.559731;, + -6.874995;-0.038283;13.934731;, + -6.874995;-0.038283;13.934731;, + -7.499995;-0.038284;14.559731;, + 0.000006;-0.038284;14.559731;, + -0.624994;-0.038284;13.934731;, + 4.375004;-0.038289;-10.752768;, + 0.625005;-0.038288;-8.877767;, + 0.000005;-0.038288;-7.940267;, + 5.000004;-0.038289;-10.440268;, + 4.375004;-0.038290;-12.627768;, + 4.375004;-0.038289;-10.752768;, + 5.000004;-0.038289;-10.440268;, + 5.000004;-0.038290;-12.940268;, + 0.625005;-0.038289;-14.502767;, + 4.375004;-0.038290;-12.627768;, + 5.000004;-0.038290;-12.940268;, + 0.000005;-0.038289;-15.440267;, + 0.625005;-0.038288;-8.877767;, + 0.625005;-0.038289;-14.502767;, + 0.000005;-0.038289;-15.440267;, + 0.000005;-0.038288;-7.940267;, + 0.625005;-1.288288;-8.877767;, + 0.625005;-1.288289;-14.502767;, + 0.625005;-0.038289;-14.502767;, + 0.625005;-0.038288;-8.877767;, + 0.625005;-1.288289;-14.502767;, + 4.375004;-1.288289;-12.627768;, + 4.375004;-0.038290;-12.627768;, + 0.625005;-0.038289;-14.502767;, + 4.375004;-1.288289;-12.627768;, + 4.375004;-1.288289;-10.752768;, + 4.375004;-0.038289;-10.752768;, + 4.375004;-0.038290;-12.627768;, + 4.375004;-1.288289;-10.752768;, + 0.625005;-1.288288;-8.877767;, + 0.625005;-0.038288;-8.877767;, + 4.375004;-0.038289;-10.752768;, + 0.000005;-1.288288;-7.940267;, + 5.000004;-1.288289;-10.440268;, + 5.000004;-0.038289;-10.440268;, + 0.000005;-0.038288;-7.940267;, + 5.000004;-1.288289;-10.440268;, + 5.000004;-1.288290;-12.940268;, + 5.000004;-0.038290;-12.940268;, + 5.000004;-0.038289;-10.440268;, + 5.000004;-1.288290;-12.940268;, + 0.000005;-1.288289;-15.440267;, + 0.000005;-0.038289;-15.440267;, + 5.000004;-0.038290;-12.940268;, + 0.625005;-1.288288;-8.877767;, + 0.000005;-1.288288;-7.940267;, + 0.000005;-1.288289;-15.440267;, + 0.625005;-1.288289;-14.502767;, + 0.625005;-1.288289;-14.502767;, + 0.000005;-1.288289;-15.440267;, + 5.000004;-1.288290;-12.940268;, + 4.375004;-1.288289;-12.627768;, + 4.375004;-1.288289;-12.627768;, + 5.000004;-1.288290;-12.940268;, + 5.000004;-1.288289;-10.440268;, + 4.375004;-1.288289;-10.752768;, + 4.375004;-1.288289;-10.752768;, + 5.000004;-1.288289;-10.440268;, + 0.000005;-1.288288;-7.940267;, + 0.625005;-1.288288;-8.877767;, + -4.374996;-1.288288;-10.752767;, + -0.624995;-1.288288;-8.877767;, + 0.000005;-1.288288;-7.940267;, + -4.999996;-1.288288;-10.440267;, + -4.374996;-1.288288;-12.627768;, + -4.374996;-1.288288;-10.752767;, + -4.999996;-1.288288;-10.440267;, + -4.999996;-1.288288;-12.940267;, + -0.624995;-1.288289;-14.502767;, + -4.374996;-1.288288;-12.627768;, + -4.999996;-1.288288;-12.940267;, + 0.000005;-1.288289;-15.440267;, + -0.624995;-1.288288;-8.877767;, + -0.624995;-1.288289;-14.502767;, + 0.000005;-1.288289;-15.440267;, + 0.000005;-1.288288;-7.940267;, + -0.624995;-0.038288;-8.877767;, + -0.624995;-0.038289;-14.502767;, + -0.624995;-1.288289;-14.502767;, + -0.624995;-1.288288;-8.877767;, + -0.624995;-0.038289;-14.502767;, + -4.374996;-0.038288;-12.627768;, + -4.374996;-1.288288;-12.627768;, + -0.624995;-1.288289;-14.502767;, + -4.374996;-0.038288;-12.627768;, + -4.374996;-0.038288;-10.752767;, + -4.374996;-1.288288;-10.752767;, + -4.374996;-1.288288;-12.627768;, + -4.374996;-0.038288;-10.752767;, + -0.624995;-0.038288;-8.877767;, + -0.624995;-1.288288;-8.877767;, + -4.374996;-1.288288;-10.752767;, + 0.000005;-0.038288;-7.940267;, + -4.999996;-0.038288;-10.440267;, + -4.999996;-1.288288;-10.440267;, + 0.000005;-1.288288;-7.940267;, + -4.999996;-0.038288;-10.440267;, + -4.999996;-0.038288;-12.940267;, + -4.999996;-1.288288;-12.940267;, + -4.999996;-1.288288;-10.440267;, + -4.999996;-0.038288;-12.940267;, + 0.000005;-0.038289;-15.440267;, + 0.000005;-1.288289;-15.440267;, + -4.999996;-1.288288;-12.940267;, + -0.624995;-0.038288;-8.877767;, + 0.000005;-0.038288;-7.940267;, + 0.000005;-0.038289;-15.440267;, + -0.624995;-0.038289;-14.502767;, + -0.624995;-0.038289;-14.502767;, + 0.000005;-0.038289;-15.440267;, + -4.999996;-0.038288;-12.940267;, + -4.374996;-0.038288;-12.627768;, + -4.374996;-0.038288;-12.627768;, + -4.999996;-0.038288;-12.940267;, + -4.999996;-0.038288;-10.440267;, + -4.374996;-0.038288;-10.752767;, + -4.374996;-0.038288;-10.752767;, + -4.999996;-0.038288;-10.440267;, + 0.000005;-0.038288;-7.940267;, + -0.624995;-0.038288;-8.877767;, + -7.499997;-4.413283;12.059732;, + -7.499997;-3.910883;10.184732;, + -7.499995;-0.663287;12.059731;, + -7.499997;-3.910883;10.184732;, + -7.499995;-2.538287; 8.812136;, + -7.499995;-0.663287;12.059731;, + -7.499995;-2.538287; 8.812136;, + -7.499995;-0.663287; 8.309731;, + -7.499995;-0.663287;12.059731;, + -7.499995;-0.663287; 8.309731;, + -7.499995; 1.211713; 8.812136;, + -7.499995;-0.663287;12.059731;, + -7.499995; 1.211713; 8.812136;, + -7.499991; 2.584308;10.184731;, + -7.499995;-0.663287;12.059731;, + -7.499991; 2.584308;10.184731;, + -7.499991; 3.086713;12.059731;, + -7.499995;-0.663287;12.059731;, + -7.499991; 3.086713;12.059731;, + -7.499992; 2.584311;13.934731;, + -7.499995;-0.663287;12.059731;, + -7.499992; 2.584311;13.934731;, + -7.499994; 1.211717;15.307327;, + -7.499995;-0.663287;12.059731;, + -7.499994; 1.211717;15.307327;, + -7.499995;-0.663283;15.809732;, + -7.499995;-0.663287;12.059731;, + -7.499995;-0.663283;15.809732;, + -7.499995;-2.538283;15.307327;, + -7.499995;-0.663287;12.059731;, + -7.499995;-2.538283;15.307327;, + -7.499997;-3.910879;13.934734;, + -7.499995;-0.663287;12.059731;, + -7.499997;-4.413283;12.059732;, + -7.499995;-0.663287;12.059731;, + -7.499997;-3.910879;13.934734;, + -12.499996;-3.910878;10.184735;, + -7.499997;-3.910883;10.184732;, + -7.499997;-4.413283;12.059732;, + -12.499996;-4.413280;12.059735;, + -12.499995;-2.538286; 8.812140;, + -7.499995;-2.538287; 8.812136;, + -7.499997;-3.910883;10.184732;, + -12.499996;-3.910878;10.184735;, + -12.499994;-0.663286; 8.309731;, + -7.499995;-0.663287; 8.309731;, + -7.499995;-2.538287; 8.812136;, + -12.499995;-2.538286; 8.812140;, + -12.499993; 1.211717; 8.812135;, + -7.499995; 1.211713; 8.812136;, + -7.499995;-0.663287; 8.309731;, + -12.499994;-0.663286; 8.309731;, + -12.499991; 2.584311;10.184730;, + -7.499991; 2.584308;10.184731;, + -7.499995; 1.211713; 8.812136;, + -12.499993; 1.211717; 8.812135;, + -12.499990; 3.086719;12.059729;, + -7.499991; 3.086713;12.059731;, + -7.499991; 2.584308;10.184731;, + -12.499991; 2.584311;10.184730;, + -12.499991; 2.584314;13.934730;, + -7.499992; 2.584311;13.934731;, + -7.499991; 3.086713;12.059731;, + -12.499990; 3.086719;12.059729;, + -12.499993; 1.211722;15.307324;, + -7.499994; 1.211717;15.307327;, + -7.499992; 2.584311;13.934731;, + -12.499991; 2.584314;13.934730;, + -12.499993;-0.663276;15.809733;, + -7.499995;-0.663283;15.809732;, + -7.499994; 1.211717;15.307327;, + -12.499993; 1.211722;15.307324;, + -12.499994;-2.538279;15.307330;, + -7.499995;-2.538283;15.307327;, + -7.499995;-0.663283;15.809732;, + -12.499993;-0.663276;15.809733;, + -12.499995;-3.910875;13.934738;, + -7.499997;-3.910879;13.934734;, + -7.499995;-2.538283;15.307327;, + -12.499994;-2.538279;15.307330;, + -7.499997;-3.910879;13.934734;, + -12.499995;-3.910875;13.934738;, + -12.499996;-4.413280;12.059735;, + -7.499997;-4.413283;12.059732;, + -12.499995;-2.287078;12.997234;, + -12.499994;-2.538280;12.059731;, + -12.499996;-4.413280;12.059735;, + -12.499995;-3.910875;13.934738;, + -12.499995;-1.600778;13.683529;, + -12.499995;-2.287078;12.997234;, + -12.499995;-3.910875;13.934738;, + -12.499994;-2.538279;15.307330;, + -12.499993;-0.663278;13.934731;, + -12.499995;-1.600778;13.683529;, + -12.499994;-2.538279;15.307330;, + -12.499993;-0.663276;15.809733;, + -12.499993; 0.274219;13.683526;, + -12.499993;-0.663278;13.934731;, + -12.499993;-0.663276;15.809733;, + -12.499993; 1.211722;15.307324;, + -12.499993; 0.960516;12.997231;, + -12.499993; 0.274219;13.683526;, + -12.499993; 1.211722;15.307324;, + -12.499991; 2.584314;13.934730;, + -12.499993; 1.211719;12.059731;, + -12.499993; 0.960516;12.997231;, + -12.499991; 2.584314;13.934730;, + -12.499990; 3.086719;12.059729;, + -12.499993; 0.960514;11.122231;, + -12.499993; 1.211719;12.059731;, + -12.499990; 3.086719;12.059729;, + -12.499991; 2.584311;10.184730;, + -12.499993; 0.274217;10.435935;, + -12.499993; 0.960514;11.122231;, + -12.499991; 2.584311;10.184730;, + -12.499993; 1.211717; 8.812135;, + -12.499994;-0.663283;10.184731;, + -12.499993; 0.274217;10.435935;, + -12.499993; 1.211717; 8.812135;, + -12.499994;-0.663286; 8.309731;, + -12.499994;-1.600784;10.435937;, + -12.499994;-0.663283;10.184731;, + -12.499994;-0.663286; 8.309731;, + -12.499995;-2.538286; 8.812140;, + -12.499994;-2.287081;11.122231;, + -12.499994;-1.600784;10.435937;, + -12.499995;-2.538286; 8.812140;, + -12.499996;-3.910878;10.184735;, + -12.499994;-2.538280;12.059731;, + -12.499994;-2.287081;11.122231;, + -12.499996;-3.910878;10.184735;, + -12.499996;-4.413280;12.059735;, + -12.499994;-2.538280;12.059731;, + -9.999994;-0.663281;12.059731;, + -12.499994;-2.287081;11.122231;, + -12.499994;-2.287081;11.122231;, + -9.999994;-0.663281;12.059731;, + -12.499994;-1.600784;10.435937;, + -12.499994;-1.600784;10.435937;, + -9.999994;-0.663281;12.059731;, + -12.499994;-0.663283;10.184731;, + -12.499994;-0.663283;10.184731;, + -9.999994;-0.663281;12.059731;, + -12.499993; 0.274217;10.435935;, + -12.499993; 0.274217;10.435935;, + -9.999994;-0.663281;12.059731;, + -12.499993; 0.960514;11.122231;, + -12.499993; 0.960514;11.122231;, + -9.999994;-0.663281;12.059731;, + -12.499993; 1.211719;12.059731;, + -12.499993; 1.211719;12.059731;, + -9.999994;-0.663281;12.059731;, + -12.499993; 0.960516;12.997231;, + -12.499993; 0.960516;12.997231;, + -9.999994;-0.663281;12.059731;, + -12.499993; 0.274219;13.683526;, + -12.499993; 0.274219;13.683526;, + -9.999994;-0.663281;12.059731;, + -12.499993;-0.663278;13.934731;, + -12.499993;-0.663278;13.934731;, + -9.999994;-0.663281;12.059731;, + -12.499995;-1.600778;13.683529;, + -12.499995;-1.600778;13.683529;, + -9.999994;-0.663281;12.059731;, + -12.499995;-2.287078;12.997234;, + -12.499995;-2.287078;12.997234;, + -9.999994;-0.663281;12.059731;, + -12.499994;-2.538280;12.059731;, + -4.999998;-4.413287;-11.690266;, + -4.999998;-3.910887;-13.565266;, + -4.999996;-0.663291;-11.690267;, + -4.999998;-3.910887;-13.565266;, + -4.999996;-2.538291;-14.937862;, + -4.999996;-0.663291;-11.690267;, + -4.999996;-2.538291;-14.937862;, + -4.999996;-0.663291;-15.440268;, + -4.999996;-0.663291;-11.690267;, + -4.999996;-0.663291;-15.440268;, + -4.999996; 1.211709;-14.937862;, + -4.999996;-0.663291;-11.690267;, + -4.999996; 1.211709;-14.937862;, + -4.999992; 2.584304;-13.565267;, + -4.999996;-0.663291;-11.690267;, + -4.999992; 2.584304;-13.565267;, + -4.999992; 3.086709;-11.690268;, + -4.999996;-0.663291;-11.690267;, + -4.999992; 3.086709;-11.690268;, + -4.999992; 2.584306;-9.815267;, + -4.999996;-0.663291;-11.690267;, + -4.999992; 2.584306;-9.815267;, + -4.999995; 1.211712;-8.442673;, + -4.999996;-0.663291;-11.690267;, + -4.999995; 1.211712;-8.442673;, + -4.999995;-0.663287;-7.940267;, + -4.999996;-0.663291;-11.690267;, + -4.999995;-0.663287;-7.940267;, + -4.999996;-2.538288;-8.442673;, + -4.999996;-0.663291;-11.690267;, + -4.999996;-2.538288;-8.442673;, + -4.999998;-3.910883;-9.815264;, + -4.999996;-0.663291;-11.690267;, + -4.999998;-4.413287;-11.690266;, + -4.999996;-0.663291;-11.690267;, + -4.999998;-3.910883;-9.815264;, + -9.999998;-3.910883;-13.565264;, + -4.999998;-3.910887;-13.565266;, + -4.999998;-4.413287;-11.690266;, + -9.999998;-4.413285;-11.690264;, + -9.999996;-2.538290;-14.937860;, + -4.999996;-2.538291;-14.937862;, + -4.999998;-3.910887;-13.565266;, + -9.999998;-3.910883;-13.565264;, + -9.999996;-0.663291;-15.440267;, + -4.999996;-0.663291;-15.440268;, + -4.999996;-2.538291;-14.937862;, + -9.999996;-2.538290;-14.937860;, + -9.999994; 1.211712;-14.937861;, + -4.999996; 1.211709;-14.937862;, + -4.999996;-0.663291;-15.440268;, + -9.999996;-0.663291;-15.440267;, + -9.999993; 2.584306;-13.565269;, + -4.999992; 2.584304;-13.565267;, + -4.999996; 1.211709;-14.937862;, + -9.999994; 1.211712;-14.937861;, + -9.999991; 3.086715;-11.690270;, + -4.999992; 3.086709;-11.690268;, + -4.999992; 2.584304;-13.565267;, + -9.999993; 2.584306;-13.565269;, + -9.999993; 2.584309;-9.815269;, + -4.999992; 2.584306;-9.815267;, + -4.999992; 3.086709;-11.690268;, + -9.999991; 3.086715;-11.690270;, + -9.999994; 1.211717;-8.442676;, + -4.999995; 1.211712;-8.442673;, + -4.999992; 2.584306;-9.815267;, + -9.999993; 2.584309;-9.815269;, + -9.999995;-0.663279;-7.940267;, + -4.999995;-0.663287;-7.940267;, + -4.999995; 1.211712;-8.442673;, + -9.999994; 1.211717;-8.442676;, + -9.999995;-2.538283;-8.442671;, + -4.999996;-2.538288;-8.442673;, + -4.999995;-0.663287;-7.940267;, + -9.999995;-0.663279;-7.940267;, + -9.999997;-3.910880;-9.815261;, + -4.999998;-3.910883;-9.815264;, + -4.999996;-2.538288;-8.442673;, + -9.999995;-2.538283;-8.442671;, + -4.999998;-3.910883;-9.815264;, + -9.999997;-3.910880;-9.815261;, + -9.999998;-4.413285;-11.690264;, + -4.999998;-4.413287;-11.690266;, + -9.999994;-2.287082;-10.752765;, + -9.999994;-2.538285;-11.690265;, + -9.999998;-4.413285;-11.690264;, + -9.999997;-3.910880;-9.815261;, + -9.999997;-1.600783;-10.066467;, + -9.999994;-2.287082;-10.752765;, + -9.999997;-3.910880;-9.815261;, + -9.999995;-2.538283;-8.442671;, + -9.999996;-0.663283;-9.815267;, + -9.999997;-1.600783;-10.066467;, + -9.999995;-2.538283;-8.442671;, + -9.999995;-0.663279;-7.940267;, + -9.999995; 0.274215;-10.066469;, + -9.999996;-0.663283;-9.815267;, + -9.999995;-0.663279;-7.940267;, + -9.999994; 1.211717;-8.442676;, + -9.999993; 0.960512;-10.752769;, + -9.999995; 0.274215;-10.066469;, + -9.999994; 1.211717;-8.442676;, + -9.999993; 2.584309;-9.815269;, + -9.999993; 1.211715;-11.690269;, + -9.999993; 0.960512;-10.752769;, + -9.999993; 2.584309;-9.815269;, + -9.999991; 3.086715;-11.690270;, + -9.999994; 0.960510;-12.627767;, + -9.999993; 1.211715;-11.690269;, + -9.999991; 3.086715;-11.690270;, + -9.999993; 2.584306;-13.565269;, + -9.999995; 0.274213;-13.314064;, + -9.999994; 0.960510;-12.627767;, + -9.999993; 2.584306;-13.565269;, + -9.999994; 1.211712;-14.937861;, + -9.999996;-0.663287;-13.565267;, + -9.999995; 0.274213;-13.314064;, + -9.999994; 1.211712;-14.937861;, + -9.999996;-0.663291;-15.440267;, + -9.999995;-1.600787;-13.314064;, + -9.999996;-0.663287;-13.565267;, + -9.999996;-0.663291;-15.440267;, + -9.999996;-2.538290;-14.937860;, + -9.999994;-2.287086;-12.627765;, + -9.999995;-1.600787;-13.314064;, + -9.999996;-2.538290;-14.937860;, + -9.999998;-3.910883;-13.565264;, + -9.999994;-2.538285;-11.690265;, + -9.999994;-2.287086;-12.627765;, + -9.999998;-3.910883;-13.565264;, + -9.999998;-4.413285;-11.690264;, + -9.999994;-2.538285;-11.690265;, + -7.499996;-0.663285;-11.690267;, + -9.999994;-2.287086;-12.627765;, + -9.999994;-2.287086;-12.627765;, + -7.499996;-0.663285;-11.690267;, + -9.999995;-1.600787;-13.314064;, + -9.999995;-1.600787;-13.314064;, + -7.499996;-0.663285;-11.690267;, + -9.999996;-0.663287;-13.565267;, + -9.999996;-0.663287;-13.565267;, + -7.499996;-0.663285;-11.690267;, + -9.999995; 0.274213;-13.314064;, + -9.999995; 0.274213;-13.314064;, + -7.499996;-0.663285;-11.690267;, + -9.999994; 0.960510;-12.627767;, + -9.999994; 0.960510;-12.627767;, + -7.499996;-0.663285;-11.690267;, + -9.999993; 1.211715;-11.690269;, + -9.999993; 1.211715;-11.690269;, + -7.499996;-0.663285;-11.690267;, + -9.999993; 0.960512;-10.752769;, + -9.999993; 0.960512;-10.752769;, + -7.499996;-0.663285;-11.690267;, + -9.999995; 0.274215;-10.066469;, + -9.999995; 0.274215;-10.066469;, + -7.499996;-0.663285;-11.690267;, + -9.999996;-0.663283;-9.815267;, + -9.999996;-0.663283;-9.815267;, + -7.499996;-0.663285;-11.690267;, + -9.999997;-1.600783;-10.066467;, + -9.999997;-1.600783;-10.066467;, + -7.499996;-0.663285;-11.690267;, + -9.999994;-2.287082;-10.752765;, + -9.999994;-2.287082;-10.752765;, + -7.499996;-0.663285;-11.690267;, + -9.999994;-2.538285;-11.690265;, + -3.749998;-1.288289;-19.190268;, + -9.999994;-1.288288;-19.190268;, + -9.999987;-1.288289;-21.690268;, + 0.000008;-1.288290;-21.690266;, + 3.750002;-1.288290;-19.190268;, + -3.749998;-1.288289;-19.190268;, + 0.000008;-1.288290;-21.690266;, + 9.999997;-1.288291;-19.190269;, + 3.750002;-1.288290;-19.190268;, + 0.000008;-1.288290;-21.690266;, + 10.000003;-1.288292;-21.690266;, + -9.999990;-0.038288;-19.190268;, + -3.750000;-0.038289;-19.190268;, + 0.000008;-1.288290;-21.690266;, + -9.999987;-1.288289;-21.690268;, + 3.749999;-0.038290;-19.190268;, + 0.000008;-1.288290;-21.690266;, + -3.750000;-0.038289;-19.190268;, + 10.000003;-1.288292;-21.690266;, + 0.000008;-1.288290;-21.690266;, + 3.749999;-0.038290;-19.190268;, + 9.999997;-0.038291;-19.190269;, + -3.749998;-1.288289;-19.190268;, + 3.750002;-1.288290;-19.190268;, + 3.749999;-0.038290;-19.190268;, + -3.750000;-0.038289;-19.190268;, + -3.750000;-0.038289;-19.190268;, + -4.999996;-0.038289;-16.690266;, + -3.749998;-1.288289;-19.190268;, + -9.999992;-0.038288;-16.690266;, + -4.999996;-0.038289;-16.690266;, + -3.750000;-0.038289;-19.190268;, + -9.999990;-0.038288;-19.190268;, + -4.999996;-0.038289;-16.690266;, + -9.999992;-0.038288;-16.690266;, + -9.999994;-1.288288;-19.190268;, + -3.749998;-1.288289;-19.190268;, + 3.750002;-1.288290;-19.190268;, + 5.000004;-0.038290;-16.690266;, + 3.749999;-0.038290;-19.190268;, + 5.000004;-0.038290;-16.690266;, + 9.999997;-0.038290;-16.690266;, + 9.999997;-0.038291;-19.190269;, + 3.749999;-0.038290;-19.190268;, + 9.999997;-0.038290;-16.690266;, + 5.000004;-0.038290;-16.690266;, + 3.750002;-1.288290;-19.190268;, + 9.999997;-1.288291;-19.190269;, + -9.999992;-0.038288;-16.690266;, + -9.999990;-0.038288;-19.190268;, + -9.999987;-1.288289;-21.690268;, + -9.999994;-1.288288;-19.190268;, + 9.999997;-0.038290;-16.690266;, + 9.999997;-1.288291;-19.190269;, + 10.000003;-1.288292;-21.690266;, + 9.999997;-0.038291;-19.190269;, + 2.500005;-1.913288;-2.940270;, + -2.499995;-1.913287;-2.940275;, + -2.499996;-1.913290;-21.690264;, + 2.500004;-1.913291;-21.690264;, + 2.500008; 0.586709;-22.940256;, + 2.500004;-1.913291;-21.690264;, + -2.499996;-1.913290;-21.690264;, + -2.499992; 0.586710;-22.940268;, + 2.500006; 3.086712;-2.940269;, + 2.500005;-1.913288;-2.940270;, + 2.500004;-1.913291;-21.690264;, + 2.500008; 0.586709;-22.940256;, + -2.499995;-1.913287;-2.940275;, + -2.499994; 3.086712;-2.940274;, + -2.499992; 0.586710;-22.940268;, + -2.499996;-1.913290;-21.690264;, + -1.249994; 0.586706;17.059725;, + -2.500001;-1.913294;17.059719;, + 2.499998;-1.913294;17.059725;, + 1.250006; 0.586706;17.059729;, + -2.500001;-1.913294;17.059719;, + -7.499997;-1.913288; 2.059726;, + 7.500005;-1.913289; 2.059732;, + 2.499998;-1.913294;17.059725;, + 7.500005;-1.913289; 2.059732;, + 6.250004;-1.913288;-2.940271;, + 6.250005; 3.086712;-2.940269;, + 7.500006; 3.086712; 2.059733;, + -7.499992; 3.086713; 2.059731;, + -6.249993; 3.086712;-2.940274;, + -6.249998;-1.913287;-2.940275;, + -7.499997;-1.913288; 2.059726;, + -1.249994; 0.586706;17.059725;, + -3.749993; 4.336714; 2.059728;, + -7.499992; 3.086713; 2.059731;, + 7.500006; 3.086712; 2.059733;, + 3.750006; 4.336713; 2.059731;, + 1.250006; 0.586706;17.059729;, + 1.250006; 0.586706;17.059729;, + 3.750006; 4.336713; 2.059731;, + 2.500007; 6.836713; 7.059731;, + 2.500007; 6.836713; 7.059731;, + 3.750006; 4.336713; 2.059731;, + 1.250006; 6.836713; 2.059731;, + -3.749993; 4.336714; 2.059728;, + -1.249994; 0.586706;17.059725;, + -2.499992; 6.836714; 7.059731;, + -1.249994; 6.836713; 2.059727;, + -3.749993; 4.336714; 2.059728;, + -2.499992; 6.836714; 7.059731;, + 2.500007; 6.836713; 7.059731;, + 1.250006; 6.836713; 2.059731;, + -1.249994; 6.836713; 2.059727;, + -2.499992; 6.836714; 7.059731;, + 2.500007; 6.836713; 7.059731;, + -2.499992; 6.836714; 7.059731;, + -1.249994; 0.586706;17.059725;, + 1.250006; 0.586706;17.059729;, + 7.500006; 3.086712; 2.059733;, + 6.250005; 3.086712;-2.940269;, + 2.500006; 3.086712;-2.940269;, + 3.750006; 4.336713; 2.059731;, + -7.499992; 3.086713; 2.059731;, + -3.749993; 4.336714; 2.059728;, + -2.499994; 3.086712;-2.940274;, + -6.249993; 3.086712;-2.940274;, + -1.249994; 6.836713; 2.059727;, + 1.250006; 6.836713; 2.059731;, + 1.250006; 4.336713; 2.059731;, + -1.249994; 4.336713; 2.059731;, + 1.250006; 4.336713; 2.059731;, + 1.250006; 6.836713; 2.059731;, + 3.750006; 4.336713; 2.059731;, + -3.749993; 4.336714; 2.059728;, + -1.249994; 6.836713; 2.059727;, + -1.249994; 4.336713; 2.059731;, + 2.500008; 0.586709;-22.940256;, + -2.499992; 0.586710;-22.940268;, + -1.249994; 4.336712;-2.940274;, + 1.250006; 4.336712;-2.940271;, + -1.249994; 4.336712;-2.940274;, + -2.499992; 0.586710;-22.940268;, + -2.499994; 3.086712;-2.940274;, + 2.500006; 3.086712;-2.940269;, + 2.500008; 0.586709;-22.940256;, + 1.250006; 4.336712;-2.940271;, + 1.250006; 4.336713; 2.059731;, + 3.750006; 4.336713; 2.059731;, + 2.500006; 3.086712;-2.940269;, + 1.250006; 4.336712;-2.940271;, + -3.749993; 4.336714; 2.059728;, + -1.249994; 4.336713; 2.059731;, + -1.249994; 4.336712;-2.940274;, + -2.499994; 3.086712;-2.940274;, + -1.249995;-0.663286; 2.059732;, + -1.249995;-0.663288;-7.940267;, + -1.249994; 4.336712;-2.940274;, + -1.249994; 4.336713; 2.059731;, + 1.250005;-0.663288;-7.940267;, + 1.250005;-0.663287; 2.059732;, + 1.250006; 4.336713; 2.059731;, + 1.250006; 4.336712;-2.940271;, + -1.249995;-0.663288;-7.940267;, + 1.250005;-0.663288;-7.940267;, + 1.250006; 4.336712;-2.940271;, + -1.249994; 4.336712;-2.940274;, + 1.250005;-0.663287; 2.059732;, + -1.249995;-0.663286; 2.059732;, + -1.249994; 4.336713; 2.059731;, + 1.250006; 4.336713; 2.059731;, + -1.249995;-0.663286; 2.059732;, + 1.250005;-0.663287; 2.059732;, + 1.250005;-0.663288;-7.940267;, + -1.249995;-0.663288;-7.940267;, + -5.312495; 1.836711; 2.059725;, + -5.312495;-0.663288; 2.059724;, + -6.249998;-1.913287;-2.940275;, + -6.249993; 3.086712;-2.940274;, + -5.312495;-0.663288; 2.059724;, + -3.437495;-0.663289; 2.059724;, + -2.499995;-1.913287;-2.940275;, + -6.249998;-1.913287;-2.940275;, + -3.437493; 1.836711; 2.059726;, + -5.312495; 1.836711; 2.059725;, + -6.249993; 3.086712;-2.940274;, + -2.499994; 3.086712;-2.940274;, + -3.437495;-0.663289; 2.059724;, + -3.437493; 1.836711; 2.059726;, + -2.499994; 3.086712;-2.940274;, + -2.499995;-1.913287;-2.940275;, + -5.312495;-0.663288; 2.059724;, + -5.312495; 1.836711; 2.059725;, + -3.437493; 1.836711; 2.059726;, + -3.437495;-0.663289; 2.059724;, + 3.437505;-0.663290; 2.059728;, + 5.312505;-0.663290; 2.059728;, + 6.250004;-1.913288;-2.940271;, + 2.500005;-1.913288;-2.940270;, + 5.312505;-0.663290; 2.059728;, + 5.312505; 1.836710; 2.059728;, + 6.250005; 3.086712;-2.940269;, + 6.250004;-1.913288;-2.940271;, + 5.312505; 1.836710; 2.059728;, + 3.437506; 1.836710; 2.059728;, + 2.500006; 3.086712;-2.940269;, + 6.250005; 3.086712;-2.940269;, + 3.437506; 1.836710; 2.059728;, + 3.437505;-0.663290; 2.059728;, + 2.500005;-1.913288;-2.940270;, + 2.500006; 3.086712;-2.940269;, + 5.312505; 1.836710; 2.059728;, + 5.312505;-0.663290; 2.059728;, + 3.437505;-0.663290; 2.059728;, + 3.437506; 1.836710; 2.059728;, + -7.499992; 3.086713; 2.059731;, + -7.499997;-1.913288; 2.059726;, + -2.500001;-1.913294;17.059719;, + -1.249994; 0.586706;17.059725;, + 7.500006; 3.086712; 2.059733;, + 1.250006; 0.586706;17.059729;, + 2.499998;-1.913294;17.059725;, + 7.500005;-1.913289; 2.059732;, + -7.499997;-1.913288; 2.059726;, + -6.249998;-1.913287;-2.940275;, + -2.499995;-1.913287;-2.940275;, + 6.250004;-1.913288;-2.940271;, + 7.500005;-1.913289; 2.059732;, + 2.500005;-1.913288;-2.940270;, + -7.499997;-1.913288; 2.059726;, + -2.499995;-1.913287;-2.940275;, + 2.500005;-1.913288;-2.940270;, + 7.500005;-1.913289; 2.059732;, + 7.500002; 7.461715;17.059727;, + 7.500002; 6.211715;13.309731;, + 7.500002; 6.211714; 9.559732;, + 7.500004; 7.461714;13.309732;, + 3.750007; 6.211714; 9.559732;, + 7.500002; 6.211714; 9.559732;, + 7.500002; 6.211715;13.309731;, + 4.375006; 6.211715;13.309731;, + 4.375006; 6.211715;13.309731;, + 7.500002; 6.211715;13.309731;, + 7.500002; 7.461715;17.059727;, + 3.750008; 7.461715;17.059727;, + 7.500002; 6.211714; 9.559732;, + 3.750007; 6.211714; 9.559732;, + 0.000007; 7.461715;13.309732;, + 7.500004; 7.461714;13.309732;, + 7.500004; 7.461714;13.309732;, + 0.000007; 7.461715;13.309732;, + 3.750008; 7.461715;17.059727;, + 7.500002; 7.461715;17.059727;, + 3.750008; 7.461715;17.059727;, + 3.750004; 0.586714; 7.059732;, + 3.750007; 6.211714; 9.559732;, + 4.375006; 6.211715;13.309731;, + 3.750008; 7.461715;17.059727;, + 3.125008; 6.211715;13.309731;, + 3.750007; 6.211714; 9.559732;, + 3.750004; 0.586714; 7.059732;, + -3.749992; 7.461716;17.059727;, + -4.374994; 6.211716;13.309731;, + -3.749992; 6.211715; 9.559732;, + -3.749996; 0.586715; 7.059732;, + -3.749992; 7.461716;17.059727;, + -3.749996; 0.586715; 7.059732;, + -3.749992; 6.211715; 9.559732;, + -3.124992; 6.211716;13.309731;, + -3.124992; 6.211716;13.309731;, + 3.125008; 6.211715;13.309731;, + 3.750008; 7.461715;17.059727;, + -3.749992; 7.461716;17.059727;, + 0.000007; 7.461715;13.309732;, + -3.749992; 7.461716;17.059727;, + 3.750008; 7.461715;17.059727;, + -3.124992; 6.211716;13.309731;, + -3.749992; 6.211715; 9.559732;, + 3.750007; 6.211714; 9.559732;, + 3.125008; 6.211715;13.309731;, + -3.749992; 6.211715; 9.559732;, + 0.000007; 7.461715;13.309732;, + 3.750007; 6.211714; 9.559732;, + 0.000007; 7.461715;13.309732;, + -3.749992; 6.211715; 9.559732;, + -7.499989; 6.211716; 9.559732;, + -7.499993; 7.461717;13.309732;, + -7.499993; 7.461717;13.309732;, + -7.499993; 7.461717;17.059727;, + -3.749992; 7.461716;17.059727;, + 0.000007; 7.461715;13.309732;, + -3.749992; 6.211715; 9.559732;, + -4.374994; 6.211716;13.309731;, + -7.499994; 6.211717;13.309731;, + -7.499989; 6.211716; 9.559732;, + -7.499993; 7.461717;17.059727;, + -7.499994; 6.211717;13.309731;, + -4.374994; 6.211716;13.309731;, + -3.749992; 7.461716;17.059727;, + -7.499993; 7.461717;17.059727;, + -7.499993; 7.461717;13.309732;, + -7.499989; 6.211716; 9.559732;, + -7.499994; 6.211717;13.309731;, + 7.500010; 3.086716;12.059731;, + 7.500010; 2.584311;10.184731;, + 7.500006;-0.663284;12.059731;, + 7.500010; 2.584311;10.184731;, + 7.500006; 1.211715; 8.812137;, + 7.500006;-0.663284;12.059731;, + 7.500006; 1.211715; 8.812137;, + 7.500006;-0.663285; 8.309731;, + 7.500006;-0.663284;12.059731;, + 7.500006;-0.663285; 8.309731;, + 7.500004;-2.538286; 8.812137;, + 7.500006;-0.663284;12.059731;, + 7.500004;-2.538286; 8.812137;, + 7.500002;-3.910879;10.184732;, + 7.500006;-0.663284;12.059731;, + 7.500002;-3.910879;10.184732;, + 7.500002;-4.413283;12.059732;, + 7.500006;-0.663284;12.059731;, + 7.500002;-4.413283;12.059732;, + 7.500002;-3.910880;13.934732;, + 7.500006;-0.663284;12.059731;, + 7.500002;-3.910880;13.934732;, + 7.500005;-2.538285;15.307327;, + 7.500006;-0.663284;12.059731;, + 7.500005;-2.538285;15.307327;, + 7.500005;-0.663285;15.809732;, + 7.500006;-0.663284;12.059731;, + 7.500005;-0.663285;15.809732;, + 7.500007; 1.211714;15.307327;, + 7.500006;-0.663284;12.059731;, + 7.500007; 1.211714;15.307327;, + 7.500008; 2.584309;13.934733;, + 7.500006;-0.663284;12.059731;, + 7.500010; 3.086716;12.059731;, + 7.500006;-0.663284;12.059731;, + 7.500008; 2.584309;13.934733;, + 12.500008; 2.584306;10.184732;, + 7.500010; 2.584311;10.184731;, + 7.500010; 3.086716;12.059731;, + 12.500008; 3.086711;12.059731;, + 12.500006; 1.211715; 8.812138;, + 7.500006; 1.211715; 8.812137;, + 7.500010; 2.584311;10.184731;, + 12.500008; 2.584306;10.184732;, + 12.500006;-0.663285; 8.309731;, + 7.500006;-0.663285; 8.309731;, + 7.500006; 1.211715; 8.812137;, + 12.500006; 1.211715; 8.812138;, + 12.500007;-2.538287; 8.812133;, + 7.500004;-2.538286; 8.812137;, + 7.500006;-0.663285; 8.309731;, + 12.500006;-0.663285; 8.309731;, + 12.500005;-3.910882;10.184729;, + 7.500002;-3.910879;10.184732;, + 7.500004;-2.538286; 8.812137;, + 12.500007;-2.538287; 8.812133;, + 12.500005;-4.413285;12.059729;, + 7.500002;-4.413283;12.059732;, + 7.500002;-3.910879;10.184732;, + 12.500005;-3.910882;10.184729;, + 12.500003;-3.910883;13.934729;, + 7.500002;-3.910880;13.934732;, + 7.500002;-4.413283;12.059732;, + 12.500005;-4.413285;12.059729;, + 12.500007;-2.538291;15.307323;, + 7.500005;-2.538285;15.307327;, + 7.500002;-3.910880;13.934732;, + 12.500003;-3.910883;13.934729;, + 12.500007;-0.663293;15.809731;, + 7.500005;-0.663285;15.809732;, + 7.500005;-2.538285;15.307327;, + 12.500007;-2.538291;15.307323;, + 12.500007; 1.211710;15.307328;, + 7.500007; 1.211714;15.307327;, + 7.500005;-0.663285;15.809732;, + 12.500007;-0.663293;15.809731;, + 12.500009; 2.584306;13.934735;, + 7.500008; 2.584309;13.934733;, + 7.500007; 1.211714;15.307327;, + 12.500007; 1.211710;15.307328;, + 7.500008; 2.584309;13.934733;, + 12.500009; 2.584306;13.934735;, + 12.500008; 3.086711;12.059731;, + 7.500010; 3.086716;12.059731;, + 12.500008; 0.960508;12.997232;, + 12.500006; 1.211711;12.059731;, + 12.500008; 3.086711;12.059731;, + 12.500009; 2.584306;13.934735;, + 12.500008; 0.274208;13.683527;, + 12.500008; 0.960508;12.997232;, + 12.500009; 2.584306;13.934735;, + 12.500007; 1.211710;15.307328;, + 12.500006;-0.663291;13.934731;, + 12.500008; 0.274208;13.683527;, + 12.500007; 1.211710;15.307328;, + 12.500007;-0.663293;15.809731;, + 12.500006;-1.600788;13.683525;, + 12.500006;-0.663291;13.934731;, + 12.500007;-0.663293;15.809731;, + 12.500007;-2.538291;15.307323;, + 12.500006;-2.287086;12.997231;, + 12.500006;-1.600788;13.683525;, + 12.500007;-2.538291;15.307323;, + 12.500003;-3.910883;13.934729;, + 12.500006;-2.538289;12.059731;, + 12.500006;-2.287086;12.997231;, + 12.500003;-3.910883;13.934729;, + 12.500005;-4.413285;12.059729;, + 12.500006;-2.287085;11.122231;, + 12.500006;-2.538289;12.059731;, + 12.500005;-4.413285;12.059729;, + 12.500005;-3.910882;10.184729;, + 12.500005;-1.600786;10.435933;, + 12.500006;-2.287085;11.122231;, + 12.500005;-3.910882;10.184729;, + 12.500007;-2.538287; 8.812133;, + 12.500006;-0.663286;10.184731;, + 12.500005;-1.600786;10.435933;, + 12.500007;-2.538287; 8.812133;, + 12.500006;-0.663285; 8.309731;, + 12.500007; 0.274214;10.435935;, + 12.500006;-0.663286;10.184731;, + 12.500006;-0.663285; 8.309731;, + 12.500006; 1.211715; 8.812138;, + 12.500006; 0.960511;11.122231;, + 12.500007; 0.274214;10.435935;, + 12.500006; 1.211715; 8.812138;, + 12.500008; 2.584306;10.184732;, + 12.500006; 1.211711;12.059731;, + 12.500006; 0.960511;11.122231;, + 12.500008; 2.584306;10.184732;, + 12.500008; 3.086711;12.059731;, + 12.500006; 1.211711;12.059731;, + 10.000006;-0.663288;12.059731;, + 12.500006; 0.960511;11.122231;, + 12.500006; 0.960511;11.122231;, + 10.000006;-0.663288;12.059731;, + 12.500007; 0.274214;10.435935;, + 12.500007; 0.274214;10.435935;, + 10.000006;-0.663288;12.059731;, + 12.500006;-0.663286;10.184731;, + 12.500006;-0.663286;10.184731;, + 10.000006;-0.663288;12.059731;, + 12.500005;-1.600786;10.435933;, + 12.500005;-1.600786;10.435933;, + 10.000006;-0.663288;12.059731;, + 12.500006;-2.287085;11.122231;, + 12.500006;-2.287085;11.122231;, + 10.000006;-0.663288;12.059731;, + 12.500006;-2.538289;12.059731;, + 12.500006;-2.538289;12.059731;, + 10.000006;-0.663288;12.059731;, + 12.500006;-2.287086;12.997231;, + 12.500006;-2.287086;12.997231;, + 10.000006;-0.663288;12.059731;, + 12.500006;-1.600788;13.683525;, + 12.500006;-1.600788;13.683525;, + 10.000006;-0.663288;12.059731;, + 12.500006;-0.663291;13.934731;, + 12.500006;-0.663291;13.934731;, + 10.000006;-0.663288;12.059731;, + 12.500008; 0.274208;13.683527;, + 12.500008; 0.274208;13.683527;, + 10.000006;-0.663288;12.059731;, + 12.500008; 0.960508;12.997232;, + 12.500008; 0.960508;12.997232;, + 10.000006;-0.663288;12.059731;, + 12.500006; 1.211711;12.059731;, + 5.000008; 3.086712;-11.690268;, + 5.000008; 2.584307;-13.565266;, + 5.000004;-0.663287;-11.690268;, + 5.000008; 2.584307;-13.565266;, + 5.000004; 1.211712;-14.937862;, + 5.000004;-0.663287;-11.690268;, + 5.000004; 1.211712;-14.937862;, + 5.000004;-0.663288;-15.440268;, + 5.000004;-0.663287;-11.690268;, + 5.000004;-0.663288;-15.440268;, + 5.000004;-2.538290;-14.937862;, + 5.000004;-0.663287;-11.690268;, + 5.000004;-2.538290;-14.937862;, + 5.000002;-3.910882;-13.565266;, + 5.000004;-0.663287;-11.690268;, + 5.000002;-3.910882;-13.565266;, + 5.000000;-4.413287;-11.690266;, + 5.000004;-0.663287;-11.690268;, + 5.000000;-4.413287;-11.690266;, + 5.000002;-3.910884;-9.815266;, + 5.000004;-0.663287;-11.690268;, + 5.000002;-3.910884;-9.815266;, + 5.000004;-2.538289;-8.442673;, + 5.000004;-0.663287;-11.690268;, + 5.000004;-2.538289;-8.442673;, + 5.000004;-0.663289;-7.940267;, + 5.000004;-0.663287;-11.690268;, + 5.000004;-0.663289;-7.940267;, + 5.000005; 1.211711;-8.442673;, + 5.000004;-0.663287;-11.690268;, + 5.000005; 1.211711;-8.442673;, + 5.000008; 2.584306;-9.815265;, + 5.000004;-0.663287;-11.690268;, + 5.000008; 3.086712;-11.690268;, + 5.000004;-0.663287;-11.690268;, + 5.000008; 2.584306;-9.815265;, + 10.000008; 2.584303;-13.565265;, + 5.000008; 2.584307;-13.565266;, + 5.000008; 3.086712;-11.690268;, + 10.000008; 3.086707;-11.690267;, + 10.000006; 1.211711;-14.937860;, + 5.000004; 1.211712;-14.937862;, + 5.000008; 2.584307;-13.565266;, + 10.000008; 2.584303;-13.565265;, + 10.000005;-0.663289;-15.440267;, + 5.000004;-0.663288;-15.440268;, + 5.000004; 1.211712;-14.937862;, + 10.000006; 1.211711;-14.937860;, + 10.000005;-2.538291;-14.937861;, + 5.000004;-2.538290;-14.937862;, + 5.000004;-0.663288;-15.440268;, + 10.000005;-0.663289;-15.440267;, + 10.000003;-3.910885;-13.565269;, + 5.000002;-3.910882;-13.565266;, + 5.000004;-2.538290;-14.937862;, + 10.000005;-2.538291;-14.937861;, + 10.000004;-4.413289;-11.690269;, + 5.000000;-4.413287;-11.690266;, + 5.000002;-3.910882;-13.565266;, + 10.000003;-3.910885;-13.565269;, + 10.000002;-3.910887;-9.815268;, + 5.000002;-3.910884;-9.815266;, + 5.000000;-4.413287;-11.690266;, + 10.000004;-4.413289;-11.690269;, + 10.000005;-2.538295;-8.442676;, + 5.000004;-2.538289;-8.442673;, + 5.000002;-3.910884;-9.815266;, + 10.000002;-3.910887;-9.815268;, + 10.000006;-0.663297;-7.940269;, + 5.000004;-0.663289;-7.940267;, + 5.000004;-2.538289;-8.442673;, + 10.000005;-2.538295;-8.442676;, + 10.000006; 1.211705;-8.442672;, + 5.000005; 1.211711;-8.442673;, + 5.000004;-0.663289;-7.940267;, + 10.000006;-0.663297;-7.940269;, + 10.000008; 2.584303;-9.815263;, + 5.000008; 2.584306;-9.815265;, + 5.000005; 1.211711;-8.442673;, + 10.000006; 1.211705;-8.442672;, + 5.000008; 2.584306;-9.815265;, + 10.000008; 2.584303;-9.815263;, + 10.000008; 3.086707;-11.690267;, + 5.000008; 3.086712;-11.690268;, + 10.000006; 0.960505;-10.752765;, + 10.000006; 1.211708;-11.690265;, + 10.000008; 3.086707;-11.690267;, + 10.000008; 2.584303;-9.815263;, + 10.000006; 0.274205;-10.066466;, + 10.000006; 0.960505;-10.752765;, + 10.000008; 2.584303;-9.815263;, + 10.000006; 1.211705;-8.442672;, + 10.000005;-0.663295;-9.815267;, + 10.000006; 0.274205;-10.066466;, + 10.000006; 1.211705;-8.442672;, + 10.000006;-0.663297;-7.940269;, + 10.000005;-1.600792;-10.066470;, + 10.000005;-0.663295;-9.815267;, + 10.000006;-0.663297;-7.940269;, + 10.000005;-2.538295;-8.442676;, + 10.000006;-2.287090;-10.752769;, + 10.000005;-1.600792;-10.066470;, + 10.000005;-2.538295;-8.442676;, + 10.000002;-3.910887;-9.815268;, + 10.000004;-2.538292;-11.690269;, + 10.000006;-2.287090;-10.752769;, + 10.000002;-3.910887;-9.815268;, + 10.000004;-4.413289;-11.690269;, + 10.000005;-2.287088;-12.627767;, + 10.000004;-2.538292;-11.690269;, + 10.000004;-4.413289;-11.690269;, + 10.000003;-3.910885;-13.565269;, + 10.000005;-1.600791;-13.314063;, + 10.000005;-2.287088;-12.627767;, + 10.000003;-3.910885;-13.565269;, + 10.000005;-2.538291;-14.937861;, + 10.000005;-0.663291;-13.565267;, + 10.000005;-1.600791;-13.314063;, + 10.000005;-2.538291;-14.937861;, + 10.000005;-0.663289;-15.440267;, + 10.000005; 0.274210;-13.314063;, + 10.000005;-0.663291;-13.565267;, + 10.000005;-0.663289;-15.440267;, + 10.000006; 1.211711;-14.937860;, + 10.000006; 0.960507;-12.627765;, + 10.000005; 0.274210;-13.314063;, + 10.000006; 1.211711;-14.937860;, + 10.000008; 2.584303;-13.565265;, + 10.000006; 1.211708;-11.690265;, + 10.000006; 0.960507;-12.627765;, + 10.000008; 2.584303;-13.565265;, + 10.000008; 3.086707;-11.690267;, + 10.000006; 1.211708;-11.690265;, + 7.500004;-0.663292;-11.690268;, + 10.000006; 0.960507;-12.627765;, + 10.000006; 0.960507;-12.627765;, + 7.500004;-0.663292;-11.690268;, + 10.000005; 0.274210;-13.314063;, + 10.000005; 0.274210;-13.314063;, + 7.500004;-0.663292;-11.690268;, + 10.000005;-0.663291;-13.565267;, + 10.000005;-0.663291;-13.565267;, + 7.500004;-0.663292;-11.690268;, + 10.000005;-1.600791;-13.314063;, + 10.000005;-1.600791;-13.314063;, + 7.500004;-0.663292;-11.690268;, + 10.000005;-2.287088;-12.627767;, + 10.000005;-2.287088;-12.627767;, + 7.500004;-0.663292;-11.690268;, + 10.000004;-2.538292;-11.690269;, + 10.000004;-2.538292;-11.690269;, + 7.500004;-0.663292;-11.690268;, + 10.000006;-2.287090;-10.752769;, + 10.000006;-2.287090;-10.752769;, + 7.500004;-0.663292;-11.690268;, + 10.000005;-1.600792;-10.066470;, + 10.000005;-1.600792;-10.066470;, + 7.500004;-0.663292;-11.690268;, + 10.000005;-0.663295;-9.815267;, + 10.000005;-0.663295;-9.815267;, + 7.500004;-0.663292;-11.690268;, + 10.000006; 0.274205;-10.066466;, + 10.000006; 0.274205;-10.066466;, + 7.500004;-0.663292;-11.690268;, + 10.000006; 0.960505;-10.752765;, + 10.000006; 0.960505;-10.752765;, + 7.500004;-0.663292;-11.690268;, + 10.000006; 1.211708;-11.690265;; + 355; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 3;338,337,336;, + 3;341,340,339;, + 3;344,343,342;, + 3;347,346,345;, + 3;350,349,348;, + 3;353,352,351;, + 3;356,355,354;, + 3;359,358,357;, + 3;362,361,360;, + 3;365,364,363;, + 3;368,367,366;, + 3;371,370,369;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 3;470,469,468;, + 3;473,472,471;, + 3;476,475,474;, + 3;479,478,477;, + 3;482,481,480;, + 3;485,484,483;, + 3;488,487,486;, + 3;491,490,489;, + 3;494,493,492;, + 3;497,496,495;, + 3;500,499,498;, + 3;503,502,501;, + 3;506,505,504;, + 3;509,508,507;, + 3;512,511,510;, + 3;515,514,513;, + 3;518,517,516;, + 3;521,520,519;, + 3;524,523,522;, + 3;527,526,525;, + 3;530,529,528;, + 3;533,532,531;, + 3;536,535,534;, + 3;539,538,537;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 4;615,614,613,612;, + 4;619,618,617,616;, + 4;623,622,621,620;, + 4;627,626,625,624;, + 4;631,630,629,628;, + 4;635,634,633,632;, + 3;638,637,636;, + 3;641,640,639;, + 3;644,643,642;, + 3;647,646,645;, + 3;650,649,648;, + 3;653,652,651;, + 3;656,655,654;, + 3;659,658,657;, + 3;662,661,660;, + 3;665,664,663;, + 3;668,667,666;, + 3;671,670,669;, + 4;675,674,673,672;, + 3;678,677,676;, + 4;682,681,680,679;, + 4;686,685,684,683;, + 3;689,688,687;, + 4;693,692,691,690;, + 4;697,696,695,694;, + 3;700,699,698;, + 4;704,703,702,701;, + 4;708,707,706,705;, + 3;711,710,709;, + 4;715,714,713,712;, + 4;719,718,717,716;, + 4;723,722,721,720;, + 4;727,726,725,724;, + 4;731,730,729,728;, + 4;735,734,733,732;, + 4;739,738,737,736;, + 4;743,742,741,740;, + 4;747,746,745,744;, + 4;751,750,749,748;, + 4;755,754,753,752;, + 4;759,758,757,756;, + 3;762,761,760;, + 3;765,764,763;, + 3;768,767,766;, + 3;771,770,769;, + 3;774,773,772;, + 3;777,776,775;, + 4;781,780,779,778;, + 4;785,784,783,782;, + 4;789,788,787,786;, + 4;793,792,791,790;, + 4;797,796,795,794;, + 3;800,799,798;, + 3;803,802,801;, + 4;807,806,805,804;, + 3;810,809,808;, + 3;813,812,811;, + 4;817,816,815,814;, + 4;821,820,819,818;, + 4;825,824,823,822;, + 4;829,828,827,826;, + 4;833,832,831,830;, + 4;837,836,835,834;, + 4;841,840,839,838;, + 4;845,844,843,842;, + 4;849,848,847,846;, + 4;853,852,851,850;, + 4;857,856,855,854;, + 4;861,860,859,858;, + 4;865,864,863,862;, + 4;869,868,867,866;, + 4;873,872,871,870;, + 4;877,876,875,874;, + 4;881,880,879,878;, + 4;885,884,883,882;, + 4;889,888,887,886;, + 3;892,891,890;, + 3;895,894,893;, + 4;899,898,897,896;, + 4;903,902,901,900;, + 4;907,906,905,904;, + 4;911,910,909,908;, + 4;915,914,913,912;, + 4;919,918,917,916;, + 4;923,922,921,920;, + 4;927,926,925,924;, + 4;931,930,929,928;, + 4;935,934,933,932;, + 4;939,938,937,936;, + 3;942,941,940;, + 4;946,945,944,943;, + 3;949,948,947;, + 4;953,952,951,950;, + 4;957,956,955,954;, + 4;961,960,959,958;, + 4;965,964,963,962;, + 4;969,968,967,966;, + 3;972,971,970;, + 3;975,974,973;, + 3;978,977,976;, + 3;981,980,979;, + 3;984,983,982;, + 3;987,986,985;, + 3;990,989,988;, + 3;993,992,991;, + 3;996,995,994;, + 3;999,998,997;, + 3;1002,1001,1000;, + 3;1005,1004,1003;, + 4;1009,1008,1007,1006;, + 4;1013,1012,1011,1010;, + 4;1017,1016,1015,1014;, + 4;1021,1020,1019,1018;, + 4;1025,1024,1023,1022;, + 4;1029,1028,1027,1026;, + 4;1033,1032,1031,1030;, + 4;1037,1036,1035,1034;, + 4;1041,1040,1039,1038;, + 4;1045,1044,1043,1042;, + 4;1049,1048,1047,1046;, + 4;1053,1052,1051,1050;, + 4;1057,1056,1055,1054;, + 4;1061,1060,1059,1058;, + 4;1065,1064,1063,1062;, + 4;1069,1068,1067,1066;, + 4;1073,1072,1071,1070;, + 4;1077,1076,1075,1074;, + 4;1081,1080,1079,1078;, + 4;1085,1084,1083,1082;, + 4;1089,1088,1087,1086;, + 4;1093,1092,1091,1090;, + 4;1097,1096,1095,1094;, + 4;1101,1100,1099,1098;, + 3;1104,1103,1102;, + 3;1107,1106,1105;, + 3;1110,1109,1108;, + 3;1113,1112,1111;, + 3;1116,1115,1114;, + 3;1119,1118,1117;, + 3;1122,1121,1120;, + 3;1125,1124,1123;, + 3;1128,1127,1126;, + 3;1131,1130,1129;, + 3;1134,1133,1132;, + 3;1137,1136,1135;, + 3;1140,1139,1138;, + 3;1143,1142,1141;, + 3;1146,1145,1144;, + 3;1149,1148,1147;, + 3;1152,1151,1150;, + 3;1155,1154,1153;, + 3;1158,1157,1156;, + 3;1161,1160,1159;, + 3;1164,1163,1162;, + 3;1167,1166,1165;, + 3;1170,1169,1168;, + 3;1173,1172,1171;, + 4;1177,1176,1175,1174;, + 4;1181,1180,1179,1178;, + 4;1185,1184,1183,1182;, + 4;1189,1188,1187,1186;, + 4;1193,1192,1191,1190;, + 4;1197,1196,1195,1194;, + 4;1201,1200,1199,1198;, + 4;1205,1204,1203,1202;, + 4;1209,1208,1207,1206;, + 4;1213,1212,1211,1210;, + 4;1217,1216,1215,1214;, + 4;1221,1220,1219,1218;, + 4;1225,1224,1223,1222;, + 4;1229,1228,1227,1226;, + 4;1233,1232,1231,1230;, + 4;1237,1236,1235,1234;, + 4;1241,1240,1239,1238;, + 4;1245,1244,1243,1242;, + 4;1249,1248,1247,1246;, + 4;1253,1252,1251,1250;, + 4;1257,1256,1255,1254;, + 4;1261,1260,1259,1258;, + 4;1265,1264,1263,1262;, + 4;1269,1268,1267,1266;, + 3;1272,1271,1270;, + 3;1275,1274,1273;, + 3;1278,1277,1276;, + 3;1281,1280,1279;, + 3;1284,1283,1282;, + 3;1287,1286,1285;, + 3;1290,1289,1288;, + 3;1293,1292,1291;, + 3;1296,1295,1294;, + 3;1299,1298,1297;, + 3;1302,1301,1300;, + 3;1305,1304,1303;; + MeshNormals { // _0002 normals + 1306; + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.948668; 0.000000; 0.316202;, + 0.948668; 0.000000; 0.316202;, + 0.948668; 0.000000; 0.316202;, + 0.948668; 0.000000; 0.316202;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.948668; 0.000000; 0.316202;, + -0.948668; 0.000000; 0.316202;, + -0.948668; 0.000000; 0.316202;, + -0.948668; 0.000000; 0.316202;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.447188; 0.000000; 0.894406;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + 0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -0.447188; 0.000000; 0.894406;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + -0.447188; 0.000000;-0.894406;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.209571; 0.782220;, + -0.586657; 0.209571; 0.782220;, + -0.586657; 0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.782220; 0.209571;, + -0.586657;-0.782220; 0.209571;, + -0.586657;-0.782220; 0.209571;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.209571;-0.782220;, + -0.586657;-0.209571;-0.782220;, + -0.586657;-0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.782220;-0.209571;, + -0.586657; 0.782220;-0.209571;, + -0.586657; 0.782220;-0.209571;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.782220; 0.209571;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.572619; 0.572619;, + -0.586657; 0.209571; 0.782220;, + -0.586657; 0.209571; 0.782220;, + -0.586657; 0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.209571; 0.782220;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.572619; 0.572619;, + -0.586657;-0.782220; 0.209601;, + -0.586657;-0.782220; 0.209601;, + -0.586657;-0.782220; 0.209601;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.782220;-0.209571;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.572619;-0.572619;, + -0.586657;-0.209571;-0.782220;, + -0.586657;-0.209571;-0.782220;, + -0.586657;-0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.209571;-0.782220;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.572619;-0.572619;, + -0.586657; 0.782220;-0.209571;, + -0.586657; 0.782220;-0.209571;, + -0.586657; 0.782220;-0.209571;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.894406;-0.447188;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.894406; 0.000000; 0.447188;, + 0.894406; 0.000000; 0.447188;, + 0.894406; 0.000000; 0.447188;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + -0.894406; 0.000000; 0.447188;, + -0.894406; 0.000000; 0.447188;, + -0.894406; 0.000000; 0.447188;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + 0.000000;-0.894406; 0.447188;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 0.000000;-0.447188;-0.894406;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.970122; 0.000000;-0.242531;, + 0.970122; 0.000000;-0.242531;, + 0.970122; 0.000000;-0.242531;, + 0.970122; 0.000000;-0.242531;, + -0.970122; 0.000000;-0.242531;, + -0.970122; 0.000000;-0.242531;, + -0.970122; 0.000000;-0.242531;, + -0.970122; 0.000000;-0.242531;, + -0.303720; 0.911161; 0.278390;, + -0.303720; 0.911161; 0.278390;, + -0.303720; 0.911161; 0.278390;, + 0.303720; 0.911161; 0.278390;, + 0.303720; 0.911161; 0.278390;, + 0.303720; 0.911161; 0.278390;, + 0.975799; 0.108402; 0.189734;, + 0.975799; 0.108402; 0.189734;, + 0.975799; 0.108402; 0.189734;, + 0.696310; 0.696310;-0.174078;, + 0.696310; 0.696310;-0.174078;, + 0.696310; 0.696310;-0.174078;, + -0.975799; 0.108402; 0.189734;, + -0.975799; 0.108402; 0.189734;, + -0.975799; 0.108402; 0.189734;, + -0.696310; 0.696310;-0.174047;, + -0.696310; 0.696310;-0.174047;, + -0.696310; 0.696310;-0.174047;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.847987; 0.529984;, + 0.000000; 0.847987; 0.529984;, + 0.000000; 0.847987; 0.529984;, + 0.000000; 0.847987; 0.529984;, + 0.162206; 0.973327;-0.162206;, + 0.162206; 0.973327;-0.162206;, + 0.162206; 0.973327;-0.162206;, + 0.162206; 0.973327;-0.162206;, + -0.162206; 0.973327;-0.162206;, + -0.162206; 0.973327;-0.162206;, + -0.162206; 0.973327;-0.162206;, + -0.162206; 0.973327;-0.162206;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.982849;-0.184271;, + 0.000000; 0.982849;-0.184271;, + 0.000000; 0.982849;-0.184271;, + 0.000000; 0.982849;-0.184271;, + -0.704337; 0.704337;-0.088015;, + -0.704337; 0.704337;-0.088015;, + -0.704337; 0.704337;-0.088015;, + 0.704337; 0.704337;-0.088015;, + 0.704337; 0.704337;-0.088015;, + 0.704337; 0.704337;-0.088015;, + 0.312326; 0.937040;-0.156163;, + 0.312326; 0.937040;-0.156163;, + 0.312326; 0.937040;-0.156163;, + 0.312326; 0.937040;-0.156163;, + -0.312326; 0.937040;-0.156163;, + -0.312326; 0.937040;-0.156163;, + -0.312326; 0.937040;-0.156163;, + -0.312326; 0.937040;-0.156163;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-0.999969;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + 0.000000; 0.970122;-0.242531;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + -0.982849; 0.000000;-0.184271;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.000000;-0.970122;-0.242531;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.982849; 0.000000;-0.184271;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.920957; 0.153478; 0.358135;, + -0.920957; 0.153478; 0.358135;, + -0.920957; 0.153478; 0.358135;, + -0.920957; 0.153478; 0.358135;, + 0.920957; 0.153478; 0.358135;, + 0.920957; 0.153478; 0.358135;, + 0.920957; 0.153478; 0.358135;, + 0.920957; 0.153478; 0.358135;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.999969; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + -0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.990570;-0.135075; 0.022492;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000; 0.999969; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 0.948668;-0.316202;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + 0.000000;-0.948668; 0.316202;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.209571; 0.782220;, + 0.586657;-0.209571; 0.782220;, + 0.586657;-0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.209571;-0.782220;, + 0.586657; 0.209571;-0.782220;, + 0.586657; 0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.782220;-0.209571;, + 0.586657;-0.782220;-0.209571;, + 0.586657;-0.782220;-0.209571;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -0.999969; 0.000000; 0.000000;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.965911;-0.258797;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.707083;-0.707083;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000; 0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.258797;-0.965911;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.707083;-0.707083;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911;-0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.965911; 0.258797;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.707083; 0.707083;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000;-0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.258797; 0.965911;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.707083; 0.707083;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.000000; 0.965911; 0.258797;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.999969; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.782220; 0.209571;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.572619; 0.572619;, + 0.586657;-0.209571; 0.782220;, + 0.586657;-0.209571; 0.782220;, + 0.586657;-0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.209571; 0.782220;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.572619; 0.572619;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220; 0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.782220;-0.209571;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.572619;-0.572619;, + 0.586657; 0.209571;-0.782220;, + 0.586657; 0.209571;-0.782220;, + 0.586657; 0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.209571;-0.782220;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.572619;-0.572619;, + 0.586657;-0.782220;-0.209571;, + 0.586657;-0.782220;-0.209571;, + 0.586657;-0.782220;-0.209571;; + 355; + 4;3,2,1,0;, + 4;7,6,5,4;, + 4;11,10,9,8;, + 4;15,14,13,12;, + 4;19,18,17,16;, + 4;23,22,21,20;, + 4;27,26,25,24;, + 4;31,30,29,28;, + 4;35,34,33,32;, + 4;39,38,37,36;, + 4;43,42,41,40;, + 4;47,46,45,44;, + 4;51,50,49,48;, + 4;55,54,53,52;, + 4;59,58,57,56;, + 4;63,62,61,60;, + 4;67,66,65,64;, + 4;71,70,69,68;, + 4;75,74,73,72;, + 4;79,78,77,76;, + 4;83,82,81,80;, + 4;87,86,85,84;, + 4;91,90,89,88;, + 4;95,94,93,92;, + 4;99,98,97,96;, + 4;103,102,101,100;, + 4;107,106,105,104;, + 4;111,110,109,108;, + 4;115,114,113,112;, + 4;119,118,117,116;, + 4;123,122,121,120;, + 4;127,126,125,124;, + 4;131,130,129,128;, + 4;135,134,133,132;, + 4;139,138,137,136;, + 4;143,142,141,140;, + 4;147,146,145,144;, + 4;151,150,149,148;, + 4;155,154,153,152;, + 4;159,158,157,156;, + 4;163,162,161,160;, + 4;167,166,165,164;, + 4;171,170,169,168;, + 4;175,174,173,172;, + 4;179,178,177,176;, + 4;183,182,181,180;, + 4;187,186,185,184;, + 4;191,190,189,188;, + 4;195,194,193,192;, + 4;199,198,197,196;, + 4;203,202,201,200;, + 4;207,206,205,204;, + 4;211,210,209,208;, + 4;215,214,213,212;, + 4;219,218,217,216;, + 4;223,222,221,220;, + 4;227,226,225,224;, + 4;231,230,229,228;, + 4;235,234,233,232;, + 4;239,238,237,236;, + 4;243,242,241,240;, + 4;247,246,245,244;, + 4;251,250,249,248;, + 4;255,254,253,252;, + 4;259,258,257,256;, + 4;263,262,261,260;, + 4;267,266,265,264;, + 4;271,270,269,268;, + 4;275,274,273,272;, + 4;279,278,277,276;, + 4;283,282,281,280;, + 4;287,286,285,284;, + 4;291,290,289,288;, + 4;295,294,293,292;, + 4;299,298,297,296;, + 4;303,302,301,300;, + 4;307,306,305,304;, + 4;311,310,309,308;, + 4;315,314,313,312;, + 4;319,318,317,316;, + 4;323,322,321,320;, + 4;327,326,325,324;, + 4;331,330,329,328;, + 4;335,334,333,332;, + 3;338,337,336;, + 3;341,340,339;, + 3;344,343,342;, + 3;347,346,345;, + 3;350,349,348;, + 3;353,352,351;, + 3;356,355,354;, + 3;359,358,357;, + 3;362,361,360;, + 3;365,364,363;, + 3;368,367,366;, + 3;371,370,369;, + 4;375,374,373,372;, + 4;379,378,377,376;, + 4;383,382,381,380;, + 4;387,386,385,384;, + 4;391,390,389,388;, + 4;395,394,393,392;, + 4;399,398,397,396;, + 4;403,402,401,400;, + 4;407,406,405,404;, + 4;411,410,409,408;, + 4;415,414,413,412;, + 4;419,418,417,416;, + 4;423,422,421,420;, + 4;427,426,425,424;, + 4;431,430,429,428;, + 4;435,434,433,432;, + 4;439,438,437,436;, + 4;443,442,441,440;, + 4;447,446,445,444;, + 4;451,450,449,448;, + 4;455,454,453,452;, + 4;459,458,457,456;, + 4;463,462,461,460;, + 4;467,466,465,464;, + 3;470,469,468;, + 3;473,472,471;, + 3;476,475,474;, + 3;479,478,477;, + 3;482,481,480;, + 3;485,484,483;, + 3;488,487,486;, + 3;491,490,489;, + 3;494,493,492;, + 3;497,496,495;, + 3;500,499,498;, + 3;503,502,501;, + 3;506,505,504;, + 3;509,508,507;, + 3;512,511,510;, + 3;515,514,513;, + 3;518,517,516;, + 3;521,520,519;, + 3;524,523,522;, + 3;527,526,525;, + 3;530,529,528;, + 3;533,532,531;, + 3;536,535,534;, + 3;539,538,537;, + 4;543,542,541,540;, + 4;547,546,545,544;, + 4;551,550,549,548;, + 4;555,554,553,552;, + 4;559,558,557,556;, + 4;563,562,561,560;, + 4;567,566,565,564;, + 4;571,570,569,568;, + 4;575,574,573,572;, + 4;579,578,577,576;, + 4;583,582,581,580;, + 4;587,586,585,584;, + 4;591,590,589,588;, + 4;595,594,593,592;, + 4;599,598,597,596;, + 4;603,602,601,600;, + 4;607,606,605,604;, + 4;611,610,609,608;, + 4;615,614,613,612;, + 4;619,618,617,616;, + 4;623,622,621,620;, + 4;627,626,625,624;, + 4;631,630,629,628;, + 4;635,634,633,632;, + 3;638,637,636;, + 3;641,640,639;, + 3;644,643,642;, + 3;647,646,645;, + 3;650,649,648;, + 3;653,652,651;, + 3;656,655,654;, + 3;659,658,657;, + 3;662,661,660;, + 3;665,664,663;, + 3;668,667,666;, + 3;671,670,669;, + 4;675,674,673,672;, + 3;678,677,676;, + 4;682,681,680,679;, + 4;686,685,684,683;, + 3;689,688,687;, + 4;693,692,691,690;, + 4;697,696,695,694;, + 3;700,699,698;, + 4;704,703,702,701;, + 4;708,707,706,705;, + 3;711,710,709;, + 4;715,714,713,712;, + 4;719,718,717,716;, + 4;723,722,721,720;, + 4;727,726,725,724;, + 4;731,730,729,728;, + 4;735,734,733,732;, + 4;739,738,737,736;, + 4;743,742,741,740;, + 4;747,746,745,744;, + 4;751,750,749,748;, + 4;755,754,753,752;, + 4;759,758,757,756;, + 3;762,761,760;, + 3;765,764,763;, + 3;768,767,766;, + 3;771,770,769;, + 3;774,773,772;, + 3;777,776,775;, + 4;781,780,779,778;, + 4;785,784,783,782;, + 4;789,788,787,786;, + 4;793,792,791,790;, + 4;797,796,795,794;, + 3;800,799,798;, + 3;803,802,801;, + 4;807,806,805,804;, + 3;810,809,808;, + 3;813,812,811;, + 4;817,816,815,814;, + 4;821,820,819,818;, + 4;825,824,823,822;, + 4;829,828,827,826;, + 4;833,832,831,830;, + 4;837,836,835,834;, + 4;841,840,839,838;, + 4;845,844,843,842;, + 4;849,848,847,846;, + 4;853,852,851,850;, + 4;857,856,855,854;, + 4;861,860,859,858;, + 4;865,864,863,862;, + 4;869,868,867,866;, + 4;873,872,871,870;, + 4;877,876,875,874;, + 4;881,880,879,878;, + 4;885,884,883,882;, + 4;889,888,887,886;, + 3;892,891,890;, + 3;895,894,893;, + 4;899,898,897,896;, + 4;903,902,901,900;, + 4;907,906,905,904;, + 4;911,910,909,908;, + 4;915,914,913,912;, + 4;919,918,917,916;, + 4;923,922,921,920;, + 4;927,926,925,924;, + 4;931,930,929,928;, + 4;935,934,933,932;, + 4;939,938,937,936;, + 3;942,941,940;, + 4;946,945,944,943;, + 3;949,948,947;, + 4;953,952,951,950;, + 4;957,956,955,954;, + 4;961,960,959,958;, + 4;965,964,963,962;, + 4;969,968,967,966;, + 3;972,971,970;, + 3;975,974,973;, + 3;978,977,976;, + 3;981,980,979;, + 3;984,983,982;, + 3;987,986,985;, + 3;990,989,988;, + 3;993,992,991;, + 3;996,995,994;, + 3;999,998,997;, + 3;1002,1001,1000;, + 3;1005,1004,1003;, + 4;1009,1008,1007,1006;, + 4;1013,1012,1011,1010;, + 4;1017,1016,1015,1014;, + 4;1021,1020,1019,1018;, + 4;1025,1024,1023,1022;, + 4;1029,1028,1027,1026;, + 4;1033,1032,1031,1030;, + 4;1037,1036,1035,1034;, + 4;1041,1040,1039,1038;, + 4;1045,1044,1043,1042;, + 4;1049,1048,1047,1046;, + 4;1053,1052,1051,1050;, + 4;1057,1056,1055,1054;, + 4;1061,1060,1059,1058;, + 4;1065,1064,1063,1062;, + 4;1069,1068,1067,1066;, + 4;1073,1072,1071,1070;, + 4;1077,1076,1075,1074;, + 4;1081,1080,1079,1078;, + 4;1085,1084,1083,1082;, + 4;1089,1088,1087,1086;, + 4;1093,1092,1091,1090;, + 4;1097,1096,1095,1094;, + 4;1101,1100,1099,1098;, + 3;1104,1103,1102;, + 3;1107,1106,1105;, + 3;1110,1109,1108;, + 3;1113,1112,1111;, + 3;1116,1115,1114;, + 3;1119,1118,1117;, + 3;1122,1121,1120;, + 3;1125,1124,1123;, + 3;1128,1127,1126;, + 3;1131,1130,1129;, + 3;1134,1133,1132;, + 3;1137,1136,1135;, + 3;1140,1139,1138;, + 3;1143,1142,1141;, + 3;1146,1145,1144;, + 3;1149,1148,1147;, + 3;1152,1151,1150;, + 3;1155,1154,1153;, + 3;1158,1157,1156;, + 3;1161,1160,1159;, + 3;1164,1163,1162;, + 3;1167,1166,1165;, + 3;1170,1169,1168;, + 3;1173,1172,1171;, + 4;1177,1176,1175,1174;, + 4;1181,1180,1179,1178;, + 4;1185,1184,1183,1182;, + 4;1189,1188,1187,1186;, + 4;1193,1192,1191,1190;, + 4;1197,1196,1195,1194;, + 4;1201,1200,1199,1198;, + 4;1205,1204,1203,1202;, + 4;1209,1208,1207,1206;, + 4;1213,1212,1211,1210;, + 4;1217,1216,1215,1214;, + 4;1221,1220,1219,1218;, + 4;1225,1224,1223,1222;, + 4;1229,1228,1227,1226;, + 4;1233,1232,1231,1230;, + 4;1237,1236,1235,1234;, + 4;1241,1240,1239,1238;, + 4;1245,1244,1243,1242;, + 4;1249,1248,1247,1246;, + 4;1253,1252,1251,1250;, + 4;1257,1256,1255,1254;, + 4;1261,1260,1259,1258;, + 4;1265,1264,1263,1262;, + 4;1269,1268,1267,1266;, + 3;1272,1271,1270;, + 3;1275,1274,1273;, + 3;1278,1277,1276;, + 3;1281,1280,1279;, + 3;1284,1283,1282;, + 3;1287,1286,1285;, + 3;1290,1289,1288;, + 3;1293,1292,1291;, + 3;1296,1295,1294;, + 3;1299,1298,1297;, + 3;1302,1301,1300;, + 3;1305,1304,1303;; + } // End of _0002 normals + MeshTextureCoords { //Cube_001 UV Coordinates + 1306; + 0.717871; 0.768436;, + 0.788054; 0.768222;, + 0.788311; 0.852436;, + 0.718128; 0.852651;, + 0.788312; 0.866903;, + 0.788054; 0.951003;, + 0.717871; 0.950788;, + 0.718129; 0.866687;, + 0.707799; 0.192565;, + 0.672707; 0.192458;, + 0.672923; 0.122275;, + 0.708014; 0.122382;, + 0.063343; 0.232384;, + 0.028252; 0.232277;, + 0.028510; 0.148057;, + 0.063602; 0.148165;, + 0.360518; 0.128721;, + 0.395609; 0.128613;, + 0.395824; 0.198796;, + 0.360733; 0.198904;, + 0.761033; 0.151961;, + 0.796125; 0.151854;, + 0.796383; 0.236073;, + 0.761292; 0.236181;, + 0.087613; 0.513719;, + 0.087355; 0.429499;, + 0.171484; 0.401168;, + 0.171913; 0.541534;, + 0.395394; 0.519016;, + 0.311380; 0.490684;, + 0.311638; 0.406465;, + 0.395824; 0.378649;, + 0.790034; 0.572634;, + 0.754943; 0.572526;, + 0.755373; 0.432160;, + 0.790465; 0.432268;, + 0.457849; 0.232350;, + 0.422757; 0.232242;, + 0.422948; 0.148047;, + 0.458040; 0.148155;, + 0.122527; 0.288466;, + 0.087435; 0.288358;, + 0.087694; 0.204139;, + 0.122785; 0.204246;, + 0.472076; 0.148155;, + 0.507168; 0.148047;, + 0.507359; 0.232242;, + 0.472268; 0.232350;, + 0.558828; 0.775390;, + 0.559043; 0.845573;, + 0.552047; 0.852613;, + 0.551789; 0.768393;, + 0.559043; 0.845573;, + 0.601150; 0.845444;, + 0.608190; 0.852441;, + 0.552047; 0.852613;, + 0.601150; 0.845444;, + 0.600936; 0.775261;, + 0.607932; 0.768222;, + 0.608190; 0.852441;, + 0.600936; 0.775261;, + 0.558828; 0.775390;, + 0.551789; 0.768393;, + 0.607932; 0.768222;, + 0.978845; 0.113689;, + 0.978716; 0.071579;, + 0.992752; 0.071536;, + 0.992881; 0.113646;, + 0.923951; 0.796991;, + 0.924166; 0.726808;, + 0.938203; 0.726851;, + 0.937988; 0.797034;, + 0.978816; 0.641208;, + 0.978945; 0.599098;, + 0.992982; 0.599141;, + 0.992853; 0.641251;, + 0.920144; 0.258736;, + 0.920359; 0.188553;, + 0.934396; 0.188596;, + 0.934180; 0.258779;, + 0.286143; 0.280350;, + 0.286401; 0.196130;, + 0.300438; 0.196173;, + 0.300179; 0.280393;, + 0.820012; 0.767538;, + 0.820270; 0.683318;, + 0.834307; 0.683361;, + 0.834049; 0.767581;, + 0.528968; 0.102827;, + 0.529140; 0.046680;, + 0.543177; 0.046723;, + 0.543005; 0.102870;, + 0.007018; 0.541362;, + 0.014048; 0.534366;, + 0.056098; 0.534495;, + 0.063085; 0.541534;, + 0.063085; 0.541534;, + 0.056098; 0.534495;, + 0.056314; 0.464311;, + 0.063343; 0.457315;, + 0.063343; 0.457315;, + 0.056314; 0.464311;, + 0.014263; 0.464182;, + 0.007277; 0.457143;, + 0.007277; 0.457143;, + 0.014263; 0.464182;, + 0.014048; 0.534366;, + 0.007018; 0.541362;, + 0.913897; 0.814733;, + 0.913866; 0.973874;, + 0.908904; 0.973873;, + 0.908935; 0.814732;, + 0.909914; 0.599099;, + 0.909883; 0.758241;, + 0.904921; 0.758240;, + 0.904952; 0.599098;, + 0.297312; 0.378649;, + 0.297343; 0.537791;, + 0.292380; 0.537792;, + 0.292349; 0.378650;, + 0.901144; 0.386489;, + 0.901113; 0.227347;, + 0.906076; 0.227346;, + 0.906107; 0.386488;, + 0.311435; 0.567257;, + 0.311435; 0.572220;, + 0.306472; 0.572220;, + 0.306472; 0.567257;, + 0.659556; 0.413161;, + 0.664518; 0.413161;, + 0.664518; 0.418124;, + 0.659556; 0.418124;, + 0.928836; 0.059527;, + 0.928814; 0.173199;, + 0.923851; 0.173198;, + 0.923873; 0.059526;, + 0.932919; 0.814733;, + 0.932897; 0.928405;, + 0.927934; 0.928404;, + 0.927956; 0.814732;, + 0.928914; 0.599098;, + 0.928936; 0.712771;, + 0.923973; 0.712772;, + 0.923951; 0.599099;, + 0.920166; 0.386489;, + 0.920144; 0.272816;, + 0.925107; 0.272815;, + 0.925129; 0.386488;, + 0.292436; 0.567257;, + 0.292436; 0.572220;, + 0.287473; 0.572220;, + 0.287473; 0.567257;, + 0.678555; 0.413161;, + 0.683518; 0.413161;, + 0.683518; 0.418124;, + 0.678555; 0.418124;, + 0.559086; 0.859610;, + 0.559301; 0.929793;, + 0.552304; 0.936833;, + 0.552047; 0.852613;, + 0.559301; 0.929793;, + 0.601408; 0.929664;, + 0.608447; 0.936661;, + 0.552304; 0.936833;, + 0.601408; 0.929664;, + 0.601193; 0.859481;, + 0.608190; 0.852441;, + 0.608447; 0.936661;, + 0.601193; 0.859481;, + 0.559086; 0.859610;, + 0.552047; 0.852613;, + 0.608190; 0.852441;, + 0.975261; 0.544625;, + 0.975132; 0.502515;, + 0.989169; 0.502472;, + 0.989298; 0.544582;, + 0.939166; 0.342999;, + 0.939381; 0.272815;, + 0.953417; 0.272859;, + 0.953202; 0.343042;, + 0.978716; 0.169836;, + 0.978845; 0.127726;, + 0.992881; 0.127769;, + 0.992752; 0.169879;, + 0.911000; 0.572655;, + 0.911216; 0.502472;, + 0.925252; 0.502515;, + 0.925037; 0.572699;, + 0.285884; 0.364570;, + 0.286143; 0.280350;, + 0.300179; 0.280393;, + 0.299921; 0.364613;, + 0.187094; 0.241880;, + 0.186922; 0.185733;, + 0.200958; 0.185690;, + 0.201130; 0.241836;, + 0.820270; 0.683318;, + 0.820529; 0.599098;, + 0.834565; 0.599141;, + 0.834307; 0.683361;, + 0.007277; 0.457143;, + 0.014306; 0.450146;, + 0.056357; 0.450275;, + 0.063343; 0.457315;, + 0.063343; 0.457315;, + 0.056357; 0.450275;, + 0.056572; 0.380092;, + 0.063602; 0.373095;, + 0.063602; 0.373095;, + 0.056572; 0.380092;, + 0.014522; 0.379963;, + 0.007535; 0.372923;, + 0.007535; 0.372923;, + 0.014522; 0.379963;, + 0.014306; 0.450146;, + 0.007277; 0.457143;, + 0.582812; 0.477390;, + 0.620439; 0.505666;, + 0.620440; 0.513511;, + 0.570271; 0.475809;, + 0.620439; 0.505666;, + 0.639248; 0.496271;, + 0.645519; 0.500983;, + 0.620440; 0.513511;, + 0.639248; 0.496271;, + 0.639239; 0.449203;, + 0.645508; 0.438227;, + 0.645519; 0.500983;, + 0.639239; 0.449203;, + 0.582812; 0.477390;, + 0.570271; 0.475809;, + 0.645508; 0.438227;, + 0.367557; 0.051412;, + 0.367364; 0.114576;, + 0.353327; 0.114533;, + 0.353521; 0.051369;, + 0.989175; 0.357121;, + 0.989045; 0.399231;, + 0.975009; 0.399188;, + 0.975138; 0.357078;, + 0.760039; 0.968600;, + 0.760103; 0.989655;, + 0.746067; 0.989698;, + 0.746002; 0.968643;, + 0.008611; 0.063901;, + 0.008481; 0.021791;, + 0.022518; 0.021748;, + 0.022647; 0.063858;, + 0.311435; 0.586299;, + 0.311263; 0.642446;, + 0.297226; 0.642403;, + 0.297398; 0.586256;, + 0.708014; 0.020655;, + 0.707928; 0.048728;, + 0.693892; 0.048685;, + 0.693978; 0.020612;, + 0.186122; 0.459709;, + 0.185950; 0.403563;, + 0.199986; 0.403520;, + 0.200159; 0.459666;, + 0.480885; 0.438193;, + 0.493438; 0.436619;, + 0.549942; 0.464844;, + 0.556223; 0.475827;, + 0.556223; 0.475827;, + 0.549942; 0.464844;, + 0.549925; 0.417764;, + 0.556201; 0.413053;, + 0.556201; 0.413053;, + 0.549925; 0.417764;, + 0.531091; 0.408356;, + 0.531088; 0.400509;, + 0.531088; 0.400509;, + 0.531091; 0.408356;, + 0.493438; 0.436619;, + 0.480885; 0.438193;, + 0.487166; 0.449176;, + 0.487182; 0.496256;, + 0.480907; 0.500966;, + 0.480885; 0.438193;, + 0.487182; 0.496256;, + 0.506017; 0.505664;, + 0.506019; 0.513511;, + 0.480907; 0.500966;, + 0.506017; 0.505664;, + 0.543669; 0.477401;, + 0.556223; 0.475827;, + 0.506019; 0.513511;, + 0.543669; 0.477401;, + 0.487166; 0.449176;, + 0.480885; 0.438193;, + 0.556223; 0.475827;, + 0.381788; 0.114576;, + 0.381594; 0.051412;, + 0.395631; 0.051369;, + 0.395824; 0.114533;, + 0.610526; 0.013704;, + 0.610655; 0.055814;, + 0.596619; 0.055857;, + 0.596489; 0.013747;, + 0.717864; 0.989655;, + 0.717929; 0.968600;, + 0.731966; 0.968643;, + 0.731901; 0.989698;, + 0.963777; 0.984552;, + 0.963906; 0.942442;, + 0.977943; 0.942485;, + 0.977814; 0.984595;, + 0.297054; 0.698549;, + 0.297226; 0.642403;, + 0.311263; 0.642446;, + 0.311090; 0.698592;, + 0.689791; 0.989698;, + 0.689705; 0.961625;, + 0.703742; 0.961582;, + 0.703828; 0.989655;, + 0.200159; 0.459666;, + 0.200331; 0.515813;, + 0.186294; 0.515856;, + 0.186122; 0.459709;, + 0.570271; 0.475809;, + 0.576539; 0.464833;, + 0.632967; 0.436646;, + 0.645508; 0.438227;, + 0.645508; 0.438227;, + 0.632967; 0.436646;, + 0.595340; 0.408370;, + 0.595338; 0.400526;, + 0.595338; 0.400526;, + 0.595340; 0.408370;, + 0.576531; 0.417766;, + 0.570260; 0.413053;, + 0.570260; 0.413053;, + 0.576531; 0.417766;, + 0.576539; 0.464833;, + 0.570271; 0.475809;, + 0.746997; 0.356713;, + 0.736098; 0.375590;, + 0.706321; 0.345814;, + 0.746997; 0.334915;, + 0.746997; 0.356713;, + 0.706321; 0.345814;, + 0.736098; 0.316037;, + 0.746997; 0.334915;, + 0.706321; 0.345814;, + 0.717220; 0.305139;, + 0.736098; 0.316037;, + 0.706321; 0.345814;, + 0.695423; 0.305139;, + 0.717220; 0.305139;, + 0.706321; 0.345814;, + 0.676545; 0.316038;, + 0.695423; 0.305139;, + 0.706321; 0.345814;, + 0.665646; 0.334915;, + 0.676545; 0.316038;, + 0.706321; 0.345814;, + 0.665646; 0.356713;, + 0.665646; 0.334915;, + 0.706321; 0.345814;, + 0.676545; 0.375590;, + 0.665646; 0.356713;, + 0.706321; 0.345814;, + 0.695423; 0.386489;, + 0.676545; 0.375590;, + 0.706321; 0.345814;, + 0.717220; 0.386489;, + 0.695423; 0.386489;, + 0.706321; 0.345814;, + 0.706321; 0.345814;, + 0.736098; 0.375590;, + 0.717220; 0.386489;, + 0.185603; 0.105934;, + 0.185775; 0.162080;, + 0.164784; 0.162145;, + 0.164613; 0.105998;, + 0.942872; 0.113685;, + 0.942881; 0.068216;, + 0.964679; 0.068220;, + 0.964670; 0.113689;, + 0.250086; 0.171493;, + 0.250258; 0.115347;, + 0.271313; 0.115411;, + 0.271141; 0.171558;, + 0.229031; 0.171429;, + 0.229204; 0.115282;, + 0.250258; 0.115347;, + 0.250086; 0.171493;, + 0.249507; 0.101241;, + 0.249516; 0.055772;, + 0.271313; 0.055776;, + 0.271304; 0.101245;, + 0.888317; 0.173134;, + 0.888489; 0.116987;, + 0.909814; 0.117053;, + 0.909642; 0.173199;, + 0.867592; 0.173070;, + 0.867764; 0.116924;, + 0.888489; 0.116987;, + 0.888317; 0.173134;, + 0.306368; 0.111781;, + 0.306360; 0.066312;, + 0.328157; 0.066308;, + 0.328166; 0.111777;, + 0.866022; 0.386424;, + 0.865849; 0.330278;, + 0.886904; 0.330213;, + 0.887077; 0.386360;, + 0.844967; 0.386489;, + 0.844795; 0.330343;, + 0.865849; 0.330278;, + 0.866022; 0.386424;, + 0.927943; 0.987915;, + 0.927934; 0.942446;, + 0.949732; 0.942442;, + 0.949741; 0.987911;, + 0.143668; 0.162209;, + 0.143496; 0.106063;, + 0.164613; 0.105998;, + 0.164784; 0.162145;, + 0.678047; 0.889396;, + 0.668608; 0.883946;, + 0.674058; 0.863609;, + 0.692935; 0.874508;, + 0.668608; 0.883946;, + 0.657709; 0.883946;, + 0.652260; 0.863609;, + 0.674058; 0.863609;, + 0.657709; 0.883946;, + 0.648271; 0.889396;, + 0.633383; 0.874507;, + 0.652260; 0.863609;, + 0.648271; 0.889396;, + 0.642821; 0.898834;, + 0.622484; 0.893385;, + 0.633383; 0.874507;, + 0.642821; 0.898834;, + 0.642821; 0.909733;, + 0.622484; 0.915183;, + 0.622484; 0.893385;, + 0.642821; 0.909733;, + 0.648271; 0.919172;, + 0.633383; 0.934060;, + 0.622484; 0.915183;, + 0.648271; 0.919172;, + 0.657710; 0.924621;, + 0.652260; 0.944959;, + 0.633383; 0.934060;, + 0.657710; 0.924621;, + 0.668608; 0.924621;, + 0.674058; 0.944959;, + 0.652260; 0.944959;, + 0.668608; 0.924621;, + 0.678047; 0.919172;, + 0.692935; 0.934060;, + 0.674058; 0.944959;, + 0.678047; 0.919172;, + 0.683496; 0.909733;, + 0.703834; 0.915183;, + 0.692935; 0.934060;, + 0.683496; 0.909733;, + 0.683496; 0.898834;, + 0.703834; 0.893385;, + 0.703834; 0.915183;, + 0.683496; 0.898834;, + 0.678047; 0.889396;, + 0.692935; 0.874508;, + 0.703834; 0.893385;, + 0.063602; 0.029088;, + 0.063599; 0.063901;, + 0.053700; 0.062753;, + 0.063602; 0.029088;, + 0.053700; 0.062753;, + 0.043848; 0.058092;, + 0.063602; 0.029088;, + 0.043848; 0.058092;, + 0.036684; 0.051165;, + 0.796383; 0.067505;, + 0.769465; 0.045428;, + 0.776629; 0.038501;, + 0.796383; 0.067505;, + 0.776629; 0.038501;, + 0.786481; 0.033839;, + 0.796383; 0.067505;, + 0.786481; 0.033839;, + 0.796380; 0.032692;, + 0.095867; 0.048885;, + 0.095870; 0.014072;, + 0.105769; 0.015220;, + 0.095867; 0.048885;, + 0.105769; 0.015220;, + 0.115621; 0.019881;, + 0.095867; 0.048885;, + 0.115621; 0.019881;, + 0.122785; 0.026808;, + 0.201666; 0.038336;, + 0.228584; 0.060413;, + 0.221420; 0.067340;, + 0.201666; 0.038336;, + 0.221420; 0.067340;, + 0.211568; 0.072001;, + 0.201666; 0.038336;, + 0.211568; 0.072001;, + 0.201669; 0.073149;, + 0.507359; 0.297961;, + 0.496460; 0.316838;, + 0.466684; 0.287062;, + 0.507359; 0.276163;, + 0.507359; 0.297961;, + 0.466684; 0.287062;, + 0.496460; 0.257285;, + 0.507359; 0.276163;, + 0.466684; 0.287062;, + 0.477583; 0.246387;, + 0.496460; 0.257285;, + 0.466684; 0.287062;, + 0.455785; 0.246387;, + 0.477583; 0.246387;, + 0.466684; 0.287062;, + 0.436908; 0.257286;, + 0.455785; 0.246387;, + 0.466684; 0.287062;, + 0.426009; 0.276163;, + 0.436908; 0.257286;, + 0.466684; 0.287062;, + 0.426009; 0.297961;, + 0.426009; 0.276163;, + 0.466684; 0.287062;, + 0.436908; 0.316838;, + 0.426009; 0.297961;, + 0.466684; 0.287062;, + 0.455785; 0.327737;, + 0.436908; 0.316838;, + 0.466684; 0.287062;, + 0.477583; 0.327737;, + 0.455785; 0.327737;, + 0.466684; 0.287062;, + 0.466684; 0.287062;, + 0.496460; 0.316838;, + 0.477583; 0.327737;, + 0.894695; 0.814732;, + 0.894867; 0.870878;, + 0.873876; 0.870942;, + 0.873705; 0.814796;, + 0.942973; 0.644567;, + 0.942982; 0.599098;, + 0.964779; 0.599102;, + 0.964770; 0.644571;, + 0.832328; 0.173135;, + 0.832500; 0.116988;, + 0.853555; 0.117053;, + 0.853383; 0.173199;, + 0.811273; 0.173070;, + 0.811445; 0.116924;, + 0.832500; 0.116988;, + 0.832328; 0.173135;, + 0.942872; 0.173195;, + 0.942881; 0.127726;, + 0.964679; 0.127730;, + 0.964670; 0.173199;, + 0.774885; 0.137752;, + 0.775058; 0.081605;, + 0.796383; 0.081671;, + 0.796211; 0.137817;, + 0.754161; 0.137688;, + 0.754333; 0.081542;, + 0.775058; 0.081605;, + 0.774885; 0.137752;, + 0.163977; 0.091897;, + 0.163968; 0.046428;, + 0.185766; 0.046424;, + 0.185775; 0.091893;, + 0.866022; 0.243447;, + 0.865849; 0.187300;, + 0.886904; 0.187236;, + 0.887077; 0.243382;, + 0.844967; 0.243511;, + 0.844795; 0.187365;, + 0.865849; 0.187300;, + 0.866022; 0.243447;, + 0.686217; 0.108238;, + 0.686208; 0.062769;, + 0.708005; 0.062765;, + 0.708014; 0.108234;, + 0.852760; 0.871007;, + 0.852588; 0.814861;, + 0.873705; 0.814796;, + 0.873876; 0.870942;, + 0.678047; 0.794009;, + 0.668608; 0.788559;, + 0.674058; 0.768222;, + 0.692935; 0.779120;, + 0.668608; 0.788559;, + 0.657709; 0.788559;, + 0.652260; 0.768222;, + 0.674058; 0.768222;, + 0.657709; 0.788559;, + 0.648271; 0.794009;, + 0.633383; 0.779120;, + 0.652260; 0.768222;, + 0.648271; 0.794009;, + 0.642821; 0.803447;, + 0.622484; 0.797998;, + 0.633383; 0.779120;, + 0.642821; 0.803447;, + 0.642821; 0.814346;, + 0.622484; 0.819796;, + 0.622484; 0.797998;, + 0.642821; 0.814346;, + 0.648271; 0.823785;, + 0.633383; 0.838673;, + 0.622484; 0.819796;, + 0.648271; 0.823785;, + 0.657710; 0.829234;, + 0.652260; 0.849572;, + 0.633383; 0.838673;, + 0.657710; 0.829234;, + 0.668608; 0.829234;, + 0.674058; 0.849572;, + 0.652260; 0.849572;, + 0.668608; 0.829234;, + 0.678047; 0.823785;, + 0.692935; 0.838673;, + 0.674058; 0.849572;, + 0.678047; 0.823785;, + 0.683496; 0.814346;, + 0.703834; 0.819796;, + 0.692935; 0.838673;, + 0.683496; 0.814346;, + 0.683496; 0.803447;, + 0.703834; 0.797998;, + 0.703834; 0.819796;, + 0.683496; 0.803447;, + 0.678047; 0.794009;, + 0.692935; 0.779120;, + 0.703834; 0.797998;, + 0.980157; 0.432160;, + 0.980154; 0.466973;, + 0.970255; 0.465826;, + 0.980157; 0.432160;, + 0.970255; 0.465826;, + 0.960404; 0.461164;, + 0.980157; 0.432160;, + 0.960404; 0.461164;, + 0.953239; 0.454237;, + 0.975350; 0.223366;, + 0.948433; 0.201289;, + 0.955597; 0.194362;, + 0.975350; 0.223366;, + 0.955597; 0.194362;, + 0.965448; 0.189700;, + 0.975350; 0.223366;, + 0.965448; 0.189700;, + 0.975347; 0.188553;, + 0.952240; 0.761621;, + 0.952242; 0.726808;, + 0.962142; 0.727956;, + 0.952240; 0.761621;, + 0.962142; 0.727956;, + 0.971993; 0.732617;, + 0.952240; 0.761621;, + 0.971993; 0.732617;, + 0.979157; 0.739545;, + 0.728511; 0.032692;, + 0.755428; 0.054769;, + 0.748264; 0.061696;, + 0.728511; 0.032692;, + 0.748264; 0.061696;, + 0.738413; 0.066358;, + 0.728511; 0.032692;, + 0.738413; 0.066358;, + 0.728513; 0.067505;, + 0.438776; 0.754098;, + 0.438562; 0.683915;, + 0.466505; 0.641720;, + 0.466848; 0.754012;, + 0.438562; 0.683915;, + 0.438304; 0.599696;, + 0.466505; 0.641720;, + 0.438304; 0.599696;, + 0.438090; 0.529513;, + 0.466161; 0.529427;, + 0.466505; 0.641720;, + 0.438368; 0.838491;, + 0.438583; 0.768307;, + 0.467364; 0.768396;, + 0.467019; 0.880689;, + 0.467019; 0.880689;, + 0.438110; 0.922710;, + 0.438368; 0.838491;, + 0.467019; 0.880689;, + 0.466675; 0.992982;, + 0.437895; 0.992893;, + 0.438110; 0.922710;, + 0.584555; 0.206882;, + 0.584296; 0.291102;, + 0.570260; 0.291059;, + 0.570518; 0.206839;, + 0.675668; 0.992943;, + 0.663099; 0.967854;, + 0.675656; 0.961582;, + 0.410378; 0.824368;, + 0.410550; 0.768222;, + 0.438583; 0.768307;, + 0.438368; 0.838491;, + 0.410548; 0.754185;, + 0.410377; 0.698038;, + 0.438562; 0.683915;, + 0.438776; 0.754098;, + 0.200331; 0.358122;, + 0.200318; 0.389483;, + 0.187761; 0.383211;, + 0.409861; 0.992807;, + 0.410033; 0.936661;, + 0.438110; 0.922710;, + 0.437895; 0.992893;, + 0.410033; 0.585745;, + 0.409861; 0.529599;, + 0.438090; 0.529513;, + 0.438304; 0.599696;, + 0.137374; 0.060510;, + 0.149920; 0.035396;, + 0.149932; 0.066783;, + 0.137386; 0.091897;, + 0.980011; 0.297930;, + 0.979999; 0.329317;, + 0.967454; 0.304202;, + 0.967466; 0.272815;, + 0.073442; 0.786876;, + 0.128407; 0.775417;, + 0.171377; 0.981522;, + 0.116413; 0.992982;, + 0.122613; 0.119155;, + 0.094540; 0.119069;, + 0.094712; 0.062922;, + 0.122785; 0.063008;, + 0.311435; 0.932090;, + 0.255711; 0.938963;, + 0.256081; 0.712629;, + 0.285661; 0.723124;, + 0.185950; 0.766647;, + 0.241674; 0.773520;, + 0.215900; 0.982487;, + 0.186320; 0.992982;, + 0.939030; 0.488307;, + 0.911000; 0.474184;, + 0.911086; 0.446111;, + 0.939203; 0.432160;, + 0.007018; 0.743374;, + 0.027607; 0.567031;, + 0.082572; 0.555571;, + 0.171913; 0.708996;, + 0.607420; 0.529636;, + 0.607214; 0.585795;, + 0.551068; 0.585623;, + 0.551273; 0.529464;, + 0.481606; 0.992943;, + 0.481400; 0.936784;, + 0.537547; 0.936611;, + 0.537752; 0.992770;, + 0.367579; 0.589952;, + 0.395144; 0.755998;, + 0.325472; 0.589076;, + 0.367579; 0.936082;, + 0.325472; 0.936958;, + 0.395143; 0.770035;, + 0.662295; 0.529464;, + 0.662287; 0.703080;, + 0.621456; 0.577103;, + 0.611910; 0.121571;, + 0.641508; 0.069893;, + 0.651610; 0.121618;, + 0.466840; 0.341774;, + 0.466848; 0.515390;, + 0.426009; 0.467751;, + 0.451213; 0.133963;, + 0.411513; 0.134011;, + 0.421615; 0.082286;, + 0.257449; 0.351389;, + 0.271313; 0.407499;, + 0.215167; 0.407327;, + 0.229375; 0.351303;, + 0.215167; 0.407327;, + 0.271313; 0.407499;, + 0.256945; 0.515856;, + 0.228871; 0.515770;, + 0.339680; 0.992982;, + 0.325472; 0.936958;, + 0.367579; 0.936082;, + 0.381790; 0.992852;, + 0.367579; 0.589952;, + 0.325472; 0.589076;, + 0.339680; 0.533052;, + 0.381790; 0.533181;, + 0.676332; 0.675817;, + 0.696183; 0.655966;, + 0.716034; 0.675817;, + 0.696183; 0.695668;, + 0.676332; 0.675817;, + 0.696183; 0.695668;, + 0.676332; 0.715518;, + 0.696183; 0.655966;, + 0.735885; 0.655966;, + 0.716034; 0.675817;, + 0.480885; 0.527547;, + 0.537031; 0.527720;, + 0.522300; 0.754185;, + 0.494227; 0.754099;, + 0.537293; 0.386472;, + 0.536738; 0.187219;, + 0.556223; 0.191009;, + 0.830203; 0.386489;, + 0.811273; 0.191025;, + 0.830758; 0.187236;, + 0.367579; 0.936082;, + 0.395653; 0.935995;, + 0.395825; 0.992062;, + 0.381790; 0.992852;, + 0.395653; 0.590038;, + 0.367579; 0.589952;, + 0.381790; 0.533181;, + 0.395824; 0.533971;, + 0.063257; 0.246421;, + 0.063602; 0.358714;, + 0.007455; 0.358886;, + 0.007283; 0.302740;, + 0.732651; 0.529636;, + 0.732306; 0.641929;, + 0.676332; 0.585610;, + 0.676504; 0.529464;, + 0.744801; 0.291098;, + 0.722067; 0.291102;, + 0.722051; 0.211699;, + 0.744786; 0.211694;, + 0.755736; 0.715518;, + 0.735885; 0.735369;, + 0.696183; 0.695668;, + 0.716034; 0.675817;, + 0.171569; 0.288466;, + 0.143496; 0.288380;, + 0.143840; 0.176246;, + 0.171913; 0.176332;, + 0.257424; 0.241793;, + 0.229351; 0.241880;, + 0.215167; 0.185767;, + 0.271313; 0.185594;, + 0.112083; 0.190102;, + 0.091028; 0.190037;, + 0.080675; 0.133191;, + 0.122785; 0.133320;, + 0.031848; 0.078002;, + 0.052903; 0.077938;, + 0.063602; 0.133892;, + 0.021492; 0.134020;, + 0.206730; 0.712629;, + 0.234592; 0.716065;, + 0.241674; 0.773520;, + 0.185950; 0.766647;, + 0.613885; 0.964869;, + 0.613798; 0.992943;, + 0.592743; 0.992878;, + 0.592830; 0.964805;, + 0.640908; 0.192565;, + 0.619853; 0.192501;, + 0.609500; 0.135655;, + 0.651610; 0.135784;, + 0.353862; 0.212941;, + 0.381935; 0.213027;, + 0.395824; 0.269226;, + 0.339678; 0.269053;, + 0.475606; 0.077992;, + 0.496660; 0.077928;, + 0.507359; 0.133882;, + 0.465249; 0.134011;, + 0.304353; 0.989545;, + 0.276491; 0.992982;, + 0.255711; 0.938963;, + 0.311435; 0.932090;, + 0.628007; 0.992943;, + 0.627921; 0.964869;, + 0.648976; 0.964805;, + 0.649062; 0.992878;, + 0.537547; 0.936611;, + 0.481400; 0.936784;, + 0.509125; 0.768320;, + 0.537164; 0.768222;, + 0.578792; 0.754086;, + 0.551068; 0.585623;, + 0.607214; 0.585795;, + 0.606832; 0.754185;, + 0.032218; 0.795471;, + 0.007018; 0.743374;, + 0.073442; 0.786876;, + 0.171913; 0.708996;, + 0.169631; 0.766822;, + 0.128407; 0.775417;, + 0.073442; 0.786876;, + 0.007018; 0.743374;, + 0.171913; 0.708996;, + 0.128407; 0.775417;, + 0.214995; 0.127170;, + 0.214876; 0.171558;, + 0.201666; 0.131573;, + 0.201785; 0.087185;, + 0.651610; 0.290973;, + 0.609500; 0.291102;, + 0.616389; 0.248973;, + 0.651481; 0.248866;, + 0.651481; 0.248866;, + 0.616389; 0.248973;, + 0.609242; 0.206731;, + 0.651352; 0.206602;, + 0.270926; 0.656482;, + 0.270797; 0.698592;, + 0.228000; 0.698461;, + 0.228258; 0.614241;, + 0.228258; 0.614241;, + 0.228000; 0.698461;, + 0.185950; 0.698332;, + 0.186079; 0.656222;, + 0.840705; 0.432160;, + 0.840573; 0.568431;, + 0.828314; 0.525782;, + 0.804501; 0.491044;, + 0.784846; 0.292868;, + 0.797105; 0.250218;, + 0.797236; 0.386489;, + 0.761033; 0.327606;, + 0.793585; 0.641748;, + 0.805844; 0.599098;, + 0.805975; 0.735369;, + 0.769772; 0.676486;, + 0.838551; 0.814732;, + 0.838420; 0.951003;, + 0.826161; 0.908353;, + 0.802348; 0.873615;, + 0.164766; 0.344788;, + 0.094583; 0.345003;, + 0.087435; 0.302760;, + 0.171655; 0.302503;, + 0.186337; 0.572002;, + 0.228258; 0.614241;, + 0.186079; 0.656222;, + 0.087693; 0.387131;, + 0.094583; 0.345003;, + 0.164766; 0.344788;, + 0.171913; 0.386874;, + 0.228258; 0.614241;, + 0.271184; 0.572263;, + 0.270926; 0.656482;, + 0.271184; 0.572263;, + 0.228258; 0.614241;, + 0.228516; 0.530021;, + 0.271313; 0.530153;, + 0.186466; 0.529893;, + 0.228516; 0.530021;, + 0.228258; 0.614241;, + 0.186337; 0.572002;, + 0.700867; 0.248887;, + 0.708014; 0.290973;, + 0.665905; 0.291102;, + 0.665776; 0.248995;, + 0.665776; 0.248995;, + 0.665646; 0.206731;, + 0.707756; 0.206602;, + 0.700867; 0.248887;, + 0.722051; 0.153270;, + 0.735260; 0.113285;, + 0.735379; 0.157673;, + 0.722170; 0.197657;, + 0.600036; 0.386489;, + 0.581158; 0.375590;, + 0.610935; 0.345814;, + 0.621834; 0.386489;, + 0.600036; 0.386489;, + 0.610935; 0.345814;, + 0.640711; 0.375590;, + 0.621834; 0.386489;, + 0.610935; 0.345814;, + 0.651610; 0.356713;, + 0.640711; 0.375590;, + 0.610935; 0.345814;, + 0.651610; 0.334915;, + 0.651610; 0.356713;, + 0.610935; 0.345814;, + 0.640711; 0.316038;, + 0.651610; 0.334915;, + 0.610935; 0.345814;, + 0.621834; 0.305139;, + 0.640711; 0.316038;, + 0.610935; 0.345814;, + 0.600036; 0.305139;, + 0.621834; 0.305139;, + 0.610935; 0.345814;, + 0.581158; 0.316037;, + 0.600036; 0.305139;, + 0.610935; 0.345814;, + 0.570260; 0.334915;, + 0.581158; 0.316037;, + 0.610935; 0.345814;, + 0.570260; 0.356713;, + 0.570260; 0.334915;, + 0.610935; 0.345814;, + 0.610935; 0.345814;, + 0.581158; 0.375590;, + 0.570260; 0.356713;, + 0.896964; 0.432289;, + 0.896791; 0.488436;, + 0.875466; 0.488370;, + 0.875638; 0.432224;, + 0.968762; 0.814736;, + 0.968753; 0.860205;, + 0.946955; 0.860201;, + 0.946964; 0.814732;, + 0.557965; 0.116971;, + 0.557793; 0.173118;, + 0.536738; 0.173053;, + 0.536910; 0.116907;, + 0.579020; 0.117036;, + 0.578848; 0.173182;, + 0.557793; 0.173118;, + 0.557965; 0.116971;, + 0.964779; 0.667303;, + 0.964770; 0.712772;, + 0.942973; 0.712767;, + 0.942982; 0.667298;, + 0.873876; 0.950938;, + 0.873705; 0.894792;, + 0.894695; 0.894728;, + 0.894867; 0.950874;, + 0.852760; 0.951003;, + 0.852588; 0.894856;, + 0.873705; 0.894792;, + 0.873876; 0.950938;, + 0.961087; 0.502472;, + 0.961096; 0.547941;, + 0.939298; 0.547946;, + 0.939289; 0.502477;, + 0.869657; 0.599163;, + 0.869829; 0.655309;, + 0.848774; 0.655374;, + 0.848602; 0.599227;, + 0.890712; 0.599098;, + 0.890884; 0.655245;, + 0.869829; 0.655309;, + 0.869657; 0.599163;, + 0.853546; 0.057414;, + 0.853555; 0.102883;, + 0.831757; 0.102887;, + 0.831748; 0.057418;, + 0.854741; 0.488307;, + 0.854913; 0.432160;, + 0.875638; 0.432224;, + 0.875466; 0.488370;, + 0.215750; 0.281703;, + 0.210301; 0.291142;, + 0.189963; 0.285693;, + 0.200862; 0.266815;, + 0.210301; 0.291142;, + 0.210301; 0.302041;, + 0.189963; 0.307490;, + 0.189963; 0.285693;, + 0.210301; 0.302041;, + 0.215750; 0.311480;, + 0.200862; 0.326368;, + 0.189963; 0.307490;, + 0.215750; 0.311480;, + 0.225189; 0.316929;, + 0.219740; 0.337267;, + 0.200862; 0.326368;, + 0.225189; 0.316929;, + 0.236088; 0.316929;, + 0.241537; 0.337267;, + 0.219740; 0.337267;, + 0.236088; 0.316929;, + 0.245526; 0.311480;, + 0.260415; 0.326368;, + 0.241537; 0.337267;, + 0.245526; 0.311480;, + 0.250976; 0.302041;, + 0.271313; 0.307490;, + 0.260415; 0.326368;, + 0.250976; 0.302041;, + 0.250976; 0.291142;, + 0.271313; 0.285692;, + 0.271313; 0.307490;, + 0.250976; 0.291142;, + 0.245526; 0.281703;, + 0.260415; 0.266815;, + 0.271313; 0.285692;, + 0.245526; 0.281703;, + 0.236088; 0.276254;, + 0.241537; 0.255916;, + 0.260415; 0.266815;, + 0.236088; 0.276254;, + 0.225189; 0.276254;, + 0.219739; 0.255916;, + 0.241537; 0.255916;, + 0.225189; 0.276254;, + 0.215750; 0.281703;, + 0.200862; 0.266815;, + 0.219739; 0.255916;, + 0.480441; 0.063891;, + 0.480444; 0.029078;, + 0.490343; 0.030225;, + 0.480441; 0.063891;, + 0.490343; 0.030225;, + 0.500195; 0.034887;, + 0.480441; 0.063891;, + 0.500195; 0.034887;, + 0.507359; 0.041814;, + 0.480885; 0.351659;, + 0.507802; 0.373736;, + 0.500638; 0.380663;, + 0.480885; 0.351659;, + 0.500638; 0.380663;, + 0.490787; 0.385325;, + 0.480885; 0.351659;, + 0.490787; 0.385325;, + 0.480887; 0.386472;, + 0.328166; 0.017458;, + 0.328164; 0.052271;, + 0.318264; 0.051124;, + 0.328166; 0.017458;, + 0.318264; 0.051124;, + 0.308413; 0.046462;, + 0.328166; 0.017458;, + 0.308413; 0.046462;, + 0.301249; 0.039535;, + 0.578707; 0.992943;, + 0.551789; 0.970866;, + 0.558953; 0.963939;, + 0.578707; 0.992943;, + 0.558953; 0.963939;, + 0.568805; 0.959277;, + 0.578707; 0.992943;, + 0.568805; 0.959277;, + 0.578704; 0.958129;, + 0.344250; 0.364613;, + 0.325373; 0.353714;, + 0.355149; 0.323938;, + 0.366048; 0.364613;, + 0.344250; 0.364613;, + 0.355149; 0.323938;, + 0.384926; 0.353714;, + 0.366048; 0.364613;, + 0.355149; 0.323938;, + 0.395824; 0.334836;, + 0.384926; 0.353714;, + 0.355149; 0.323938;, + 0.395824; 0.313039;, + 0.395824; 0.334836;, + 0.355149; 0.323938;, + 0.384926; 0.294161;, + 0.395824; 0.313039;, + 0.355149; 0.323938;, + 0.366048; 0.283262;, + 0.384926; 0.294161;, + 0.355149; 0.323938;, + 0.344250; 0.283262;, + 0.366048; 0.283262;, + 0.355149; 0.323938;, + 0.325373; 0.294161;, + 0.344250; 0.283262;, + 0.355149; 0.323938;, + 0.314474; 0.313039;, + 0.325373; 0.294161;, + 0.355149; 0.323938;, + 0.314474; 0.334836;, + 0.314474; 0.313039;, + 0.355149; 0.323938;, + 0.355149; 0.323938;, + 0.325373; 0.353714;, + 0.314474; 0.334836;, + 0.896964; 0.512285;, + 0.896791; 0.568431;, + 0.875466; 0.568366;, + 0.875638; 0.512220;, + 0.968762; 0.882936;, + 0.968753; 0.928405;, + 0.946955; 0.928401;, + 0.946964; 0.882932;, + 0.307111; 0.125882;, + 0.306939; 0.182029;, + 0.285884; 0.181964;, + 0.286056; 0.125818;, + 0.328166; 0.125947;, + 0.327994; 0.182094;, + 0.306939; 0.182029;, + 0.307111; 0.125882;, + 0.960972; 0.357083;, + 0.960963; 0.402552;, + 0.939166; 0.402547;, + 0.939174; 0.357078;, + 0.869890; 0.767516;, + 0.869719; 0.711369;, + 0.890709; 0.711305;, + 0.890881; 0.767452;, + 0.848774; 0.767581;, + 0.848602; 0.711434;, + 0.869719; 0.711369;, + 0.869890; 0.767516;, + 0.579011; 0.057397;, + 0.579020; 0.102866;, + 0.557222; 0.102870;, + 0.557213; 0.057401;, + 0.865849; 0.259966;, + 0.866022; 0.316112;, + 0.844967; 0.316177;, + 0.844795; 0.260030;, + 0.886904; 0.259901;, + 0.887077; 0.316048;, + 0.866022; 0.316112;, + 0.865849; 0.259966;, + 0.889390; 0.057414;, + 0.889398; 0.102883;, + 0.867601; 0.102887;, + 0.867592; 0.057418;, + 0.854741; 0.568303;, + 0.854913; 0.512156;, + 0.875638; 0.512220;, + 0.875466; 0.568366;, + 0.685343; 0.457947;, + 0.679893; 0.467386;, + 0.659556; 0.461937;, + 0.670455; 0.443059;, + 0.679893; 0.467386;, + 0.679893; 0.478285;, + 0.659556; 0.483735;, + 0.659556; 0.461937;, + 0.679893; 0.478285;, + 0.685343; 0.487724;, + 0.670455; 0.502612;, + 0.659556; 0.483735;, + 0.685343; 0.487724;, + 0.694781; 0.493173;, + 0.689332; 0.513511;, + 0.670455; 0.502612;, + 0.694781; 0.493173;, + 0.705680; 0.493173;, + 0.711130; 0.513511;, + 0.689332; 0.513511;, + 0.705680; 0.493173;, + 0.715119; 0.487724;, + 0.730007; 0.502612;, + 0.711130; 0.513511;, + 0.715119; 0.487724;, + 0.720568; 0.478285;, + 0.740906; 0.483734;, + 0.730007; 0.502612;, + 0.720568; 0.478285;, + 0.720568; 0.467386;, + 0.740906; 0.461937;, + 0.740906; 0.483734;, + 0.720568; 0.467386;, + 0.715119; 0.457947;, + 0.730007; 0.443059;, + 0.740906; 0.461937;, + 0.715119; 0.457947;, + 0.705680; 0.452498;, + 0.711130; 0.432160;, + 0.730007; 0.443059;, + 0.705680; 0.452498;, + 0.694781; 0.452498;, + 0.689332; 0.432160;, + 0.711130; 0.432160;, + 0.694781; 0.452498;, + 0.685343; 0.457947;, + 0.670455; 0.443059;, + 0.689332; 0.432160;, + 0.624692; 0.055857;, + 0.624695; 0.021043;, + 0.634594; 0.022191;, + 0.624692; 0.055857;, + 0.634594; 0.022191;, + 0.644445; 0.026853;, + 0.624692; 0.055857;, + 0.644445; 0.026853;, + 0.651610; 0.033780;, + 0.424295; 0.033436;, + 0.451212; 0.055513;, + 0.444048; 0.062440;, + 0.424295; 0.033436;, + 0.444048; 0.062440;, + 0.434197; 0.067102;, + 0.424295; 0.033436;, + 0.434197; 0.067102;, + 0.424298; 0.068249;, + 0.969790; 0.019366;, + 0.969787; 0.054179;, + 0.959888; 0.053032;, + 0.969790; 0.019366;, + 0.959888; 0.053032;, + 0.950037; 0.048370;, + 0.969790; 0.019366;, + 0.950037; 0.048370;, + 0.942872; 0.041443;, + 0.648374; 0.754185;, + 0.621456; 0.732108;, + 0.628621; 0.725181;, + 0.648374; 0.754185;, + 0.628621; 0.725181;, + 0.638472; 0.720519;, + 0.648374; 0.754185;, + 0.638472; 0.720519;, + 0.648371; 0.719372;; + } //End of Cube_001 UV Coordinates + } // End of _0002 mesh + } // End of _0002 +} // End of Root diff --git a/mods/vehicle_mash/models/hovercraft.blend b/mods/vehicle_mash/models/hovercraft.blend new file mode 100644 index 0000000..a66e458 Binary files /dev/null and b/mods/vehicle_mash/models/hovercraft.blend differ diff --git a/mods/vehicle_mash/models/hovercraft.x b/mods/vehicle_mash/models/hovercraft.x new file mode 100644 index 0000000..d40912d --- /dev/null +++ b/mods/vehicle_mash/models/hovercraft.x @@ -0,0 +1,2132 @@ +xof 0303txt 0032 + +template XSkinMeshHeader { + <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; +} + +template SkinWeights { + <6f0d123b-bad2-4167-a0d0-80224f25fabb> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array float weights[nWeights]; + Matrix4x4 matrixOffset; +} + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 1.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame Armature { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 0.000000, 3.500000, 1.000000;; + } + Frame Armature_Body { + FrameTransformMatrix { + 1.000000,-0.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + -0.000000,-1.000000, 0.000000, 0.000000, + -0.000000, 0.000000,-2.459941, 1.000000;; + } + Frame Armature_Thruster { + FrameTransformMatrix { + 0.000000, 0.000000,-1.000000, 0.000000, + -1.000000, 0.000000,-0.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + -4.639344, 8.859941, 0.000000, 1.000000;; + } + } //End of Armature_Thruster + } //End of Armature_Body + Frame Hovercraft { + FrameTransformMatrix { + -0.000003,-4.000000, 0.000000, 0.000000, + 4.000000,-0.000003, 0.000000, 0.000000, + 0.000000, 0.000000, 2.581575, 0.000000, + 0.000000, 0.000000,-0.500000, 1.000000;; + } + Mesh { //Mesh Mesh + 184; + -1.874999;-1.875000;-0.774721;, + 1.875000;-1.874998;-0.774721;, + 1.874998; 1.875000;-0.774721;, + -1.875000; 1.874998;-0.774721;, + 1.874999; 1.874999; 0.387360;, + 1.875000;-1.874999; 0.387360;, + -1.874998;-1.875000; 0.387360;, + -1.874999; 1.874999; 0.387360;, + 1.874998; 1.875000;-0.774721;, + 1.874999; 1.874999; 0.387360;, + -1.874999; 1.874999; 0.387360;, + -1.875000; 1.874998;-0.774721;, + 1.875000;-1.874998;-0.774721;, + 1.875000;-1.874999; 0.387360;, + 1.874999; 1.874999; 0.387360;, + 1.874998; 1.875000;-0.774721;, + -1.874999;-1.875000;-0.774721;, + -1.874998;-1.875000; 0.387360;, + 1.875000;-1.874999; 0.387360;, + 1.875000;-1.874998;-0.774721;, + -1.874998;-1.875000; 0.387360;, + -1.874999;-1.875000;-0.774721;, + -1.875000; 1.874998;-0.774721;, + -1.874999; 1.874999; 0.387360;, + -1.999998;-2.000000;-0.581041;, + 2.000000;-1.999998;-0.581041;, + 1.999998; 2.000000;-0.581041;, + -2.000000; 1.999998;-0.581041;, + 1.999999; 1.999999; 0.193680;, + 2.000000;-1.999999; 0.193680;, + -1.999998;-2.000000; 0.193680;, + -1.999999; 1.999999; 0.193680;, + 1.999998; 2.000000;-0.581041;, + 1.999999; 1.999999; 0.193680;, + -1.999999; 1.999999; 0.193680;, + -2.000000; 1.999998;-0.581041;, + 2.000000;-1.999998;-0.581041;, + 2.000000;-1.999999; 0.193680;, + 1.999999; 1.999999; 0.193680;, + 1.999998; 2.000000;-0.581041;, + -1.999998;-2.000000;-0.581041;, + -1.999998;-2.000000; 0.193680;, + 2.000000;-1.999999; 0.193680;, + 2.000000;-1.999998;-0.581041;, + -1.999998;-2.000000; 0.193680;, + -1.999998;-2.000000;-0.581041;, + -2.000000; 1.999998;-0.581041;, + -1.999999; 1.999999; 0.193680;, + 0.500000;-1.000000; 3.200000;, + 0.500000;-2.000000; 3.200000;, + -0.500000;-2.000000; 3.200000;, + -0.500000;-1.000000; 3.200000;, + 0.500000;-2.000000; 1.700000;, + -0.500000;-2.000000; 1.700000;, + -0.500000;-2.000000; 3.200000;, + 0.500000;-2.000000; 3.200000;, + -0.500000;-2.000000; 1.700000;, + -0.500000;-1.000000; 1.700000;, + -0.500000;-1.000000; 3.200000;, + -0.500000;-2.000000; 3.200000;, + 0.500000;-2.000000; 3.200000;, + 0.500000;-1.000000; 3.200000;, + 0.500000;-1.000000; 1.700000;, + 0.500000;-2.000000; 1.700000;, + 0.500000;-1.000000; 3.200000;, + -0.500000;-1.000000; 3.200000;, + -0.500000;-1.000000; 1.700000;, + 0.500000;-1.000000; 1.700000;, + -0.500000;-2.000000; 1.700000;, + 0.500000;-2.000000; 1.700000;, + 0.500000;-1.000000; 1.700000;, + -0.500000;-1.000000; 1.700000;, + 1.000000; 1.000000; 0.676959;, + 1.000000; 0.999999; 1.100000;, + -1.000000; 1.000000; 1.100000;, + -1.000000; 1.000000; 0.676959;, + -1.000000;-1.000000; 1.100000;, + -1.000000;-1.000000; 0.677000;, + -1.000000; 1.000000; 0.676959;, + -1.000000; 1.000000; 1.100000;, + -1.000000;-1.000000; 0.677000;, + -1.000000;-1.000000; 1.100000;, + 0.999999;-1.000001; 1.100000;, + 0.999999;-1.000000; 0.677000;, + 0.999999;-1.000000; 0.677000;, + 0.999999;-1.000001; 1.100000;, + 1.000000; 0.999999; 1.100000;, + 1.000000; 1.000000; 0.676959;, + 0.999999;-1.000001; 1.100000;, + -1.000000;-1.000000; 1.100000;, + -1.000000; 1.000000; 1.100000;, + 1.000000; 0.999999; 1.100000;, + -0.500000;-1.000000; 0.677000;, + -0.500000;-1.000000; 2.900000;, + -0.750000;-1.000000; 2.900000;, + -0.750000;-1.000000; 0.677000;, + -0.750000;-1.500000; 2.900000;, + -0.750000;-1.500000; 0.677000;, + -0.750000;-1.000000; 0.677000;, + -0.750000;-1.000000; 2.900000;, + -0.500000;-1.500000; 0.677000;, + -0.500000;-1.500000; 2.900000;, + -0.500000;-1.000000; 2.900000;, + -0.500000;-1.000000; 0.677000;, + -0.500000;-1.500000; 2.900000;, + -0.750000;-1.500000; 2.900000;, + -0.750000;-1.000000; 2.900000;, + -0.500000;-1.000000; 2.900000;, + -0.750000;-1.500000; 2.900000;, + -0.500000;-1.500000; 2.900000;, + -0.500000;-1.500000; 0.677000;, + -0.750000;-1.500000; 0.677000;, + -1.500000;-1.500000; 0.387000;, + -1.500000; 1.500000; 0.387000;, + -1.500000; 1.500000; 0.677000;, + -1.500000;-1.500000; 0.677000;, + 1.500001; 1.499999; 0.387000;, + 1.499999;-1.500001; 0.387000;, + 1.499999;-1.500001; 0.677000;, + 1.500001; 1.499999; 0.677000;, + -1.500000; 1.500000; 0.677000;, + -1.500000; 1.500000; 0.387000;, + 1.500001; 1.499999; 0.387000;, + 1.500001; 1.499999; 0.677000;, + -1.000000; 1.500000; 0.677122;, + 1.000000; 1.500000; 0.676959;, + 1.000000; 1.000000; 0.676959;, + -1.000000; 1.000000; 0.676959;, + 0.999999;-1.000000; 0.677000;, + 0.999999;-1.500001; 0.677000;, + -1.000000;-1.500000; 0.677000;, + -1.000000;-1.000000; 0.677000;, + 1.499999;-1.500001; 0.387000;, + -1.500000;-1.500000; 0.387000;, + -1.500000;-1.500000; 0.677000;, + 1.499999;-1.500001; 0.677000;, + -1.500000; 1.500000; 0.677000;, + -1.000000; 1.500000; 0.677122;, + -1.000000;-1.500000; 0.677000;, + -1.500000;-1.500000; 0.677000;, + 0.499519;-1.500000; 2.900000;, + 0.750000;-1.500000; 2.900000;, + 0.750000;-1.500000; 0.677000;, + 0.499519;-1.500000; 0.677000;, + 0.750000;-1.500000; 2.900000;, + 0.499519;-1.500000; 2.900000;, + 0.499519;-1.000000; 2.900000;, + 0.750000;-1.000000; 2.900000;, + 0.750000;-1.500000; 0.677000;, + 0.750000;-1.500000; 2.900000;, + 0.750000;-1.000000; 2.900000;, + 0.750000;-1.000000; 0.677000;, + 0.499519;-1.500000; 2.900000;, + 0.499519;-1.500000; 0.677000;, + 0.499519;-1.000000; 0.677000;, + 0.499519;-1.000000; 2.900000;, + 0.750000;-1.000000; 0.677000;, + 0.750000;-1.000000; 2.900000;, + 0.499519;-1.000000; 2.900000;, + 0.499519;-1.000000; 0.677000;, + -0.374998;-1.875001; 1.898066;, + 0.375002;-1.875000; 1.898066;, + 0.375001;-1.125000; 1.898066;, + -0.374999;-1.125001; 1.898066;, + 0.375002;-1.875000; 2.982676;, + 0.375001;-1.125000; 2.982676;, + 0.375001;-1.125000; 1.898066;, + 0.375002;-1.875000; 1.898066;, + -0.374998;-1.875001; 1.898066;, + -0.374999;-1.125001; 1.898066;, + -0.374999;-1.125001; 2.982676;, + -0.374998;-1.875001; 2.982676;, + 0.375002;-1.875000; 1.898066;, + -0.374998;-1.875001; 1.898066;, + -0.374998;-1.875001; 2.982676;, + 0.375002;-1.875000; 2.982676;, + 0.375001;-1.125000; 2.982676;, + 0.375002;-1.875000; 2.982676;, + -0.374998;-1.875001; 2.982676;, + -0.374999;-1.125001; 2.982676;, + 1.499999;-1.500001; 0.677000;, + 0.999999;-1.500001; 0.677000;, + 1.000000; 1.500000; 0.676959;, + 1.500001; 1.499999; 0.677000;; + 46; + 4;0;1;2;3;, + 4;4;5;6;7;, + 4;8;9;10;11;, + 4;12;13;14;15;, + 4;16;17;18;19;, + 4;20;21;22;23;, + 4;24;25;26;27;, + 4;28;29;30;31;, + 4;32;33;34;35;, + 4;36;37;38;39;, + 4;40;41;42;43;, + 4;44;45;46;47;, + 4;48;49;50;51;, + 4;52;53;54;55;, + 4;56;57;58;59;, + 4;60;61;62;63;, + 4;64;65;66;67;, + 4;68;69;70;71;, + 4;72;73;74;75;, + 4;76;77;78;79;, + 4;80;81;82;83;, + 4;84;85;86;87;, + 4;88;89;90;91;, + 4;92;93;94;95;, + 4;96;97;98;99;, + 4;100;101;102;103;, + 4;104;105;106;107;, + 4;108;109;110;111;, + 4;112;113;114;115;, + 4;116;117;118;119;, + 4;120;121;122;123;, + 4;124;125;126;127;, + 4;128;129;130;131;, + 4;132;133;134;135;, + 4;136;137;138;139;, + 4;140;141;142;143;, + 4;144;145;146;147;, + 4;148;149;150;151;, + 4;152;153;154;155;, + 4;156;157;158;159;, + 4;160;161;162;163;, + 4;164;165;166;167;, + 4;168;169;170;171;, + 4;172;173;174;175;, + 4;176;177;178;179;, + 4;180;181;182;183;; + MeshNormals { //Mesh Normals + 184; + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + 1.000000; 0.000000;-0.000001;, + 1.000000; 0.000000;-0.000001;, + 1.000000; 0.000000;-0.000001;, + 1.000000; 0.000000;-0.000001;, + 0.000000;-1.000000;-0.000001;, + 0.000000;-1.000000;-0.000001;, + 0.000000;-1.000000;-0.000001;, + 0.000000;-1.000000;-0.000001;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + -1.000000;-0.000000; 0.000001;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000;-0.000000;, + -1.000000; 0.000000;-0.000000;, + -1.000000; 0.000000;-0.000000;, + -1.000000; 0.000000;-0.000000;, + -0.000000;-1.000000;-0.000000;, + -0.000000;-1.000000;-0.000000;, + -0.000000;-1.000000;-0.000000;, + -0.000000;-1.000000;-0.000000;, + 1.000000;-0.000001;-0.000000;, + 1.000000;-0.000001;-0.000000;, + 1.000000;-0.000001;-0.000000;, + 1.000000;-0.000001;-0.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000;-0.000001; 0.000000;, + 1.000000;-0.000001; 0.000000;, + 1.000000;-0.000001; 0.000000;, + 1.000000;-0.000001; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000041;-0.000162; 1.000000;, + 0.000041;-0.000162; 1.000000;, + 0.000041;-0.000162; 1.000000;, + 0.000041;-0.000162; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000001;-1.000000; 0.000000;, + -0.000001;-1.000000; 0.000000;, + -0.000001;-1.000000; 0.000000;, + -0.000001;-1.000000; 0.000000;, + -0.000122;-0.000020; 1.000000;, + -0.000122;-0.000020; 1.000000;, + -0.000122;-0.000020; 1.000000;, + -0.000122;-0.000020; 1.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-1.000000;-0.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 1.000000; 0.000001; 0.000000;, + 1.000000; 0.000001; 0.000000;, + 1.000000; 0.000001; 0.000000;, + 1.000000; 0.000001; 0.000000;, + -1.000000;-0.000001; 0.000000;, + -1.000000;-0.000001; 0.000000;, + -1.000000;-0.000001; 0.000000;, + -1.000000;-0.000001; 0.000000;, + 0.000001;-1.000000; 0.000000;, + 0.000001;-1.000000; 0.000000;, + 0.000001;-1.000000; 0.000000;, + 0.000001;-1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000041; 0.000007; 1.000000;, + -0.000041; 0.000007; 1.000000;, + -0.000041; 0.000007; 1.000000;, + -0.000041; 0.000007; 1.000000;; + 46; + 4;0;1;2;3;, + 4;4;5;6;7;, + 4;8;9;10;11;, + 4;12;13;14;15;, + 4;16;17;18;19;, + 4;20;21;22;23;, + 4;24;25;26;27;, + 4;28;29;30;31;, + 4;32;33;34;35;, + 4;36;37;38;39;, + 4;40;41;42;43;, + 4;44;45;46;47;, + 4;48;49;50;51;, + 4;52;53;54;55;, + 4;56;57;58;59;, + 4;60;61;62;63;, + 4;64;65;66;67;, + 4;68;69;70;71;, + 4;72;73;74;75;, + 4;76;77;78;79;, + 4;80;81;82;83;, + 4;84;85;86;87;, + 4;88;89;90;91;, + 4;92;93;94;95;, + 4;96;97;98;99;, + 4;100;101;102;103;, + 4;104;105;106;107;, + 4;108;109;110;111;, + 4;112;113;114;115;, + 4;116;117;118;119;, + 4;120;121;122;123;, + 4;124;125;126;127;, + 4;128;129;130;131;, + 4;132;133;134;135;, + 4;136;137;138;139;, + 4;140;141;142;143;, + 4;144;145;146;147;, + 4;148;149;150;151;, + 4;152;153;154;155;, + 4;156;157;158;159;, + 4;160;161;162;163;, + 4;164;165;166;167;, + 4;168;169;170;171;, + 4;172;173;174;175;, + 4;176;177;178;179;, + 4;180;181;182;183;; + } //End of Mesh Normals + MeshMaterialList { //Mesh Material List + 1; + 46; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0;; + Material Hovercraft { + 0.640000; 0.640000; 0.640000; 1.000000;; + 96.078431; + 1.000000; 1.000000; 1.000000;; + 0.000000; 0.000000; 0.000000;; + } + } //End of Mesh Material List + MeshTextureCoords { //Mesh UV Coordinates + 184; + 0.031250; 0.531250;, + 0.468750; 0.531250;, + 0.468750; 0.968750;, + 0.031250; 0.968750;, + 0.031250; 0.531250;, + 0.468750; 0.531250;, + 0.468750; 0.968750;, + 0.031250; 0.968750;, + 0.531250; 0.968750;, + 0.531250; 0.781250;, + 0.968750; 0.781250;, + 0.968750; 0.968750;, + 0.968750; 0.718750;, + 0.968750; 0.531250;, + 0.531250; 0.531250;, + 0.531250; 0.718750;, + 0.531250; 0.968750;, + 0.531250; 0.781250;, + 0.968750; 0.781250;, + 0.968750; 0.968750;, + 0.968750; 0.531250;, + 0.968750; 0.718750;, + 0.531250; 0.718750;, + 0.531250; 0.531250;, + 0.000000; 0.500000;, + 0.500000; 0.500000;, + 0.500000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.500000;, + 0.500000; 0.500000;, + 0.500000; 1.000000;, + 0.000000; 1.000000;, + 0.500000; 0.968750;, + 0.500000; 0.812500;, + 1.000000; 0.812500;, + 1.000000; 0.968750;, + 1.000000; 0.718750;, + 1.000000; 0.562500;, + 0.500000; 0.562500;, + 0.500000; 0.718750;, + 0.500000; 0.968750;, + 0.500000; 0.812500;, + 1.000000; 0.812500;, + 1.000000; 0.968750;, + 1.000000; 0.562500;, + 1.000000; 0.718750;, + 0.500000; 0.718750;, + 0.500000; 0.562500;, + 0.625000; 0.000000;, + 0.750000; 0.000000;, + 0.750000; 0.125000;, + 0.625000; 0.125000;, + 0.875000; 0.250000;, + 0.750000; 0.250000;, + 0.750000; 0.125000;, + 0.875000; 0.125000;, + 0.625000; 0.125000;, + 0.500000; 0.125000;, + 0.500000; 0.000000;, + 0.625000; 0.000000;, + 0.875000; 0.125000;, + 0.750000; 0.125000;, + 0.750000; 0.000000;, + 0.875000; 0.000000;, + 0.625000; 0.125000;, + 0.750000; 0.125000;, + 0.750000; 0.250000;, + 0.625000; 0.250000;, + 1.000000; 0.000000;, + 1.000000; 0.125000;, + 0.875000; 0.125000;, + 0.875000; 0.000000;, + 0.078125; 0.125000;, + 0.125000; 0.125000;, + 0.125000; 0.375000;, + 0.078125; 0.375000;, + 0.375000; 0.078125;, + 0.375000; 0.125000;, + 0.125000; 0.125000;, + 0.125000; 0.078125;, + 0.421875; 0.375000;, + 0.375000; 0.375000;, + 0.375000; 0.125000;, + 0.421875; 0.125000;, + 0.375000; 0.421875;, + 0.375000; 0.375000;, + 0.125000; 0.375000;, + 0.125000; 0.421875;, + 0.375000; 0.125000;, + 0.375000; 0.375000;, + 0.125000; 0.375000;, + 0.125000; 0.125000;, + 0.500000; 0.500000;, + 0.500000; 0.296875;, + 0.546875; 0.296875;, + 0.546875; 0.500000;, + 0.609375; 0.296875;, + 0.609375; 0.500000;, + 0.546875; 0.500000;, + 0.546875; 0.296875;, + 0.718750; 0.500000;, + 0.718750; 0.296875;, + 0.656250; 0.296875;, + 0.656250; 0.500000;, + 0.609375; 0.250000;, + 0.609375; 0.296875;, + 0.546875; 0.296875;, + 0.546875; 0.250000;, + 0.609375; 0.296875;, + 0.656250; 0.296875;, + 0.656250; 0.500000;, + 0.609375; 0.500000;, + 0.937500; 0.531250;, + 0.562500; 0.531250;, + 0.562500; 0.500000;, + 0.937500; 0.500000;, + 0.562500; 0.531250;, + 0.937500; 0.531250;, + 0.937500; 0.500000;, + 0.562500; 0.500000;, + 0.937500; 0.750000;, + 0.937500; 0.781250;, + 0.562500; 0.781250;, + 0.562500; 0.750000;, + 0.000000; 0.375000;, + 0.000000; 0.125000;, + 0.078125; 0.125000;, + 0.078125; 0.375000;, + 0.421875; 0.125000;, + 0.500000; 0.125000;, + 0.500000; 0.375000;, + 0.421875; 0.375000;, + 0.937500; 0.781250;, + 0.562500; 0.781250;, + 0.562500; 0.750000;, + 0.937500; 0.750000;, + 0.062500; 0.078125;, + 0.062500; 0.000000;, + 0.437500; 0.000000;, + 0.437500; 0.078125;, + 0.859375; 0.296875;, + 0.812500; 0.296875;, + 0.812500; 0.500000;, + 0.859375; 0.500000;, + 0.859375; 0.250000;, + 0.859375; 0.296875;, + 0.921875; 0.296875;, + 0.921875; 0.250000;, + 0.750000; 0.500000;, + 0.750000; 0.296875;, + 0.812500; 0.296875;, + 0.812500; 0.500000;, + 0.859375; 0.296875;, + 0.859375; 0.500000;, + 0.921875; 0.500000;, + 0.921875; 0.296875;, + 0.968750; 0.500000;, + 0.968750; 0.296875;, + 0.921875; 0.296875;, + 0.921875; 0.500000;, + 0.609375; 0.140625;, + 0.609375; 0.234375;, + 0.515625; 0.234375;, + 0.515625; 0.140625;, + 0.609375; 0.234375;, + 0.515625; 0.234375;, + 0.515625; 0.140625;, + 0.609375; 0.140625;, + 0.609375; 0.234375;, + 0.515625; 0.234375;, + 0.515625; 0.140625;, + 0.609375; 0.140625;, + 0.984375; 0.234375;, + 0.890625; 0.234375;, + 0.890625; 0.140625;, + 0.984375; 0.140625;, + 0.515625; 0.140625;, + 0.609375; 0.140625;, + 0.609375; 0.234375;, + 0.515625; 0.234375;, + 0.062500; 0.421875;, + 0.062500; 0.500000;, + 0.437500; 0.500000;, + 0.437500; 0.421875;; + } //End of Mesh UV Coordinates + XSkinMeshHeader { + 1; + 3; + 2; + } + SkinWeights { + "Armature_Thruster"; + 20; + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -4.000000, 0.000002, 0.000000, 0.000000, + -0.000002,-4.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 2.581575, 0.000000, + -0.000000,-4.639344,-6.900000, 1.000000;; + } //End of Armature_Thruster Skin Weights + SkinWeights { + "Armature_Body"; + 164; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 180, + 181, + 182, + 183; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -0.000003,-0.000000, 4.000000, 0.000000, + 4.000000, 0.000000, 0.000003, 0.000000, + -0.000000, 2.581575, 0.000000, 0.000000, + 0.000000, 1.959941, 0.000000, 1.000000;; + } //End of Armature_Body Skin Weights + } //End of Mesh Mesh + } //End of Hovercraft + } //End of Armature +} //End of Root Frame +AnimationSet { + Animation { + {Armature} + AnimationKey { //Position + 2; + 76; + 0;3; 0.000000, 0.000000, 3.500000;;, + 1;3; 0.000000, 0.000000, 3.500000;;, + 2;3; 0.000000, 0.000000, 3.500000;;, + 3;3; 0.000000, 0.000000, 3.500000;;, + 4;3; 0.000000, 0.000000, 3.500000;;, + 5;3; 0.000000, 0.000000, 3.500000;;, + 6;3; 0.000000, 0.000000, 3.500000;;, + 7;3; 0.000000, 0.000000, 3.500000;;, + 8;3; 0.000000, 0.000000, 3.500000;;, + 9;3; 0.000000, 0.000000, 3.500000;;, + 10;3; 0.000000, 0.000000, 3.500000;;, + 11;3; 0.000000, 0.000000, 3.500000;;, + 12;3; 0.000000, 0.000000, 3.500000;;, + 13;3; 0.000000, 0.000000, 3.500000;;, + 14;3; 0.000000, 0.000000, 3.500000;;, + 15;3; 0.000000, 0.000000, 3.500000;;, + 16;3; 0.000000, 0.000000, 3.500000;;, + 17;3; 0.000000, 0.000000, 3.500000;;, + 18;3; 0.000000, 0.000000, 3.500000;;, + 19;3; 0.000000, 0.000000, 3.500000;;, + 20;3; 0.000000, 0.000000, 3.500000;;, + 21;3; 0.000000, 0.000000, 3.500000;;, + 22;3; 0.000000, 0.000000, 3.500000;;, + 23;3; 0.000000, 0.000000, 3.500000;;, + 24;3; 0.000000, 0.000000, 3.500000;;, + 25;3; 0.000000, 0.000000, 3.500000;;, + 26;3; 0.000000, 0.000000, 3.500000;;, + 27;3; 0.000000, 0.000000, 3.500000;;, + 28;3; 0.000000, 0.000000, 3.500000;;, + 29;3; 0.000000, 0.000000, 3.500000;;, + 30;3; 0.000000, 0.000000, 3.500000;;, + 31;3; 0.000000, 0.000000, 3.500000;;, + 32;3; 0.000000, 0.000000, 3.500000;;, + 33;3; 0.000000, 0.000000, 3.500000;;, + 34;3; 0.000000, 0.000000, 3.500000;;, + 35;3; 0.000000, 0.000000, 3.500000;;, + 36;3; 0.000000, 0.000000, 3.500000;;, + 37;3; 0.000000, 0.000000, 3.500000;;, + 38;3; 0.000000, 0.000000, 3.500000;;, + 39;3; 0.000000, 0.000000, 3.500000;;, + 40;3; 0.000000, 0.000000, 3.500000;;, + 41;3; 0.000000, 0.000000, 3.500000;;, + 42;3; 0.000000, 0.000000, 3.500000;;, + 43;3; 0.000000, 0.000000, 3.500000;;, + 44;3; 0.000000, 0.000000, 3.500000;;, + 45;3; 0.000000, 0.000000, 3.500000;;, + 46;3; 0.000000, 0.000000, 3.500000;;, + 47;3; 0.000000, 0.000000, 3.500000;;, + 48;3; 0.000000, 0.000000, 3.500000;;, + 49;3; 0.000000, 0.000000, 3.500000;;, + 50;3; 0.000000, 0.000000, 3.500000;;, + 51;3; 0.000000, 0.000000, 3.500000;;, + 52;3; 0.000000, 0.000000, 3.500000;;, + 53;3; 0.000000, 0.000000, 3.500000;;, + 54;3; 0.000000, 0.000000, 3.500000;;, + 55;3; 0.000000, 0.000000, 3.500000;;, + 56;3; 0.000000, 0.000000, 3.500000;;, + 57;3; 0.000000, 0.000000, 3.500000;;, + 58;3; 0.000000, 0.000000, 3.500000;;, + 59;3; 0.000000, 0.000000, 3.500000;;, + 60;3; 0.000000, 0.000000, 3.500000;;, + 61;3; 0.000000, 0.000000, 3.500000;;, + 62;3; 0.000000, 0.000000, 3.500000;;, + 63;3; 0.000000, 0.000000, 3.500000;;, + 64;3; 0.000000, 0.000000, 3.500000;;, + 65;3; 0.000000, 0.000000, 3.500000;;, + 66;3; 0.000000, 0.000000, 3.500000;;, + 67;3; 0.000000, 0.000000, 3.500000;;, + 68;3; 0.000000, 0.000000, 3.500000;;, + 69;3; 0.000000, 0.000000, 3.500000;;, + 70;3; 0.000000, 0.000000, 3.500000;;, + 71;3; 0.000000, 0.000000, 3.500000;;, + 72;3; 0.000000, 0.000000, 3.500000;;, + 73;3; 0.000000, 0.000000, 3.500000;;, + 74;3; 0.000000, 0.000000, 3.500000;;, + 75;3; 0.000000, 0.000000, 3.500000;;; + } + AnimationKey { //Rotation + 0; + 76; + 0;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 1;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 2;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 3;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 4;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 5;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 6;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 7;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 8;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 9;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 10;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 11;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 12;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 13;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 14;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 15;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 16;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 17;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 18;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 19;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 20;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 21;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 22;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 23;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 24;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 25;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 26;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 27;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 28;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 29;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 30;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 31;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 32;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 33;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 34;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 35;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 36;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 37;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 38;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 39;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 40;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 41;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 42;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 43;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 44;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 45;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 46;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 47;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 48;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 49;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 50;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 51;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 52;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 53;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 54;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 55;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 56;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 57;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 58;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 59;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 60;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 61;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 62;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 63;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 64;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 65;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 66;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 67;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 68;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 69;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 70;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 71;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 72;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 73;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 74;4; -1.000000, 0.000000, 0.000000, 0.000000;;, + 75;4; -1.000000, 0.000000, 0.000000, 0.000000;;; + } + AnimationKey { //Scale + 1; + 76; + 0;3; 1.000000, 1.000000, 1.000000;;, + 1;3; 1.000000, 1.000000, 1.000000;;, + 2;3; 1.000000, 1.000000, 1.000000;;, + 3;3; 1.000000, 1.000000, 1.000000;;, + 4;3; 1.000000, 1.000000, 1.000000;;, + 5;3; 1.000000, 1.000000, 1.000000;;, + 6;3; 1.000000, 1.000000, 1.000000;;, + 7;3; 1.000000, 1.000000, 1.000000;;, + 8;3; 1.000000, 1.000000, 1.000000;;, + 9;3; 1.000000, 1.000000, 1.000000;;, + 10;3; 1.000000, 1.000000, 1.000000;;, + 11;3; 1.000000, 1.000000, 1.000000;;, + 12;3; 1.000000, 1.000000, 1.000000;;, + 13;3; 1.000000, 1.000000, 1.000000;;, + 14;3; 1.000000, 1.000000, 1.000000;;, + 15;3; 1.000000, 1.000000, 1.000000;;, + 16;3; 1.000000, 1.000000, 1.000000;;, + 17;3; 1.000000, 1.000000, 1.000000;;, + 18;3; 1.000000, 1.000000, 1.000000;;, + 19;3; 1.000000, 1.000000, 1.000000;;, + 20;3; 1.000000, 1.000000, 1.000000;;, + 21;3; 1.000000, 1.000000, 1.000000;;, + 22;3; 1.000000, 1.000000, 1.000000;;, + 23;3; 1.000000, 1.000000, 1.000000;;, + 24;3; 1.000000, 1.000000, 1.000000;;, + 25;3; 1.000000, 1.000000, 1.000000;;, + 26;3; 1.000000, 1.000000, 1.000000;;, + 27;3; 1.000000, 1.000000, 1.000000;;, + 28;3; 1.000000, 1.000000, 1.000000;;, + 29;3; 1.000000, 1.000000, 1.000000;;, + 30;3; 1.000000, 1.000000, 1.000000;;, + 31;3; 1.000000, 1.000000, 1.000000;;, + 32;3; 1.000000, 1.000000, 1.000000;;, + 33;3; 1.000000, 1.000000, 1.000000;;, + 34;3; 1.000000, 1.000000, 1.000000;;, + 35;3; 1.000000, 1.000000, 1.000000;;, + 36;3; 1.000000, 1.000000, 1.000000;;, + 37;3; 1.000000, 1.000000, 1.000000;;, + 38;3; 1.000000, 1.000000, 1.000000;;, + 39;3; 1.000000, 1.000000, 1.000000;;, + 40;3; 1.000000, 1.000000, 1.000000;;, + 41;3; 1.000000, 1.000000, 1.000000;;, + 42;3; 1.000000, 1.000000, 1.000000;;, + 43;3; 1.000000, 1.000000, 1.000000;;, + 44;3; 1.000000, 1.000000, 1.000000;;, + 45;3; 1.000000, 1.000000, 1.000000;;, + 46;3; 1.000000, 1.000000, 1.000000;;, + 47;3; 1.000000, 1.000000, 1.000000;;, + 48;3; 1.000000, 1.000000, 1.000000;;, + 49;3; 1.000000, 1.000000, 1.000000;;, + 50;3; 1.000000, 1.000000, 1.000000;;, + 51;3; 1.000000, 1.000000, 1.000000;;, + 52;3; 1.000000, 1.000000, 1.000000;;, + 53;3; 1.000000, 1.000000, 1.000000;;, + 54;3; 1.000000, 1.000000, 1.000000;;, + 55;3; 1.000000, 1.000000, 1.000000;;, + 56;3; 1.000000, 1.000000, 1.000000;;, + 57;3; 1.000000, 1.000000, 1.000000;;, + 58;3; 1.000000, 1.000000, 1.000000;;, + 59;3; 1.000000, 1.000000, 1.000000;;, + 60;3; 1.000000, 1.000000, 1.000000;;, + 61;3; 1.000000, 1.000000, 1.000000;;, + 62;3; 1.000000, 1.000000, 1.000000;;, + 63;3; 1.000000, 1.000000, 1.000000;;, + 64;3; 1.000000, 1.000000, 1.000000;;, + 65;3; 1.000000, 1.000000, 1.000000;;, + 66;3; 1.000000, 1.000000, 1.000000;;, + 67;3; 1.000000, 1.000000, 1.000000;;, + 68;3; 1.000000, 1.000000, 1.000000;;, + 69;3; 1.000000, 1.000000, 1.000000;;, + 70;3; 1.000000, 1.000000, 1.000000;;, + 71;3; 1.000000, 1.000000, 1.000000;;, + 72;3; 1.000000, 1.000000, 1.000000;;, + 73;3; 1.000000, 1.000000, 1.000000;;, + 74;3; 1.000000, 1.000000, 1.000000;;, + 75;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Body} + AnimationKey { //Position + 2; + 76; + 0;3; -0.000000, 0.000000,-2.459941;;, + 1;3; -0.000000, 0.000000,-2.455327;;, + 2;3; -0.000000, 0.000000,-2.441401;;, + 3;3; -0.000000, 0.000000,-2.418439;;, + 4;3; -0.000000, 0.000000,-2.387453;;, + 5;3; -0.000000, 0.000000,-2.350351;;, + 6;3; -0.000000, 0.000000,-2.309918;;, + 7;3; -0.000000, 0.000000,-2.269489;;, + 8;3; -0.000000, 0.000000,-2.232396;;, + 9;3; -0.000000, 0.000000,-2.201421;;, + 10;3; -0.000000, 0.000000,-2.178471;;, + 11;3; -0.000000, 0.000000,-2.164552;;, + 12;3; -0.000000, 0.000000,-2.159941;;, + 13;3; -0.000000, 0.000000,-2.164208;;, + 14;3; -0.000000, 0.000000,-2.175990;;, + 15;3; -0.000000, 0.000000,-2.194004;;, + 16;3; -0.000000, 0.000000,-2.217200;;, + 17;3; -0.000000, 0.000000,-2.244668;;, + 18;3; -0.000000, 0.000000,-2.275574;;, + 19;3; -0.000000, 0.000000,-2.309081;;, + 20;3; -0.000000, 0.000000,-2.344266;;, + 21;3; -0.000000, 0.000000,-2.379952;;, + 22;3; -0.000000, 0.000000,-2.414374;;, + 23;3; -0.000000, 0.000000,-2.444181;;, + 24;3; -0.000000, 0.000000,-2.459941;;, + 25;3; -0.000000, 0.000000,-2.459941;;, + 26;3; -0.000000, 0.000000,-2.459941;;, + 27;3; -0.000000, 0.000000,-2.459941;;, + 28;3; -0.000000, 0.000000,-2.459941;;, + 29;3; -0.000000, 0.000000,-2.459941;;, + 30;3; -0.000000, 0.000000,-2.459941;;, + 31;3; -0.000000, 0.000000,-2.459941;;, + 32;3; -0.000000, 0.000000,-2.459941;;, + 33;3; -0.000000, 0.000000,-2.459941;;, + 34;3; -0.000000, 0.000000,-2.459941;;, + 35;3; -0.000000, 0.000000,-2.459941;;, + 36;3; -0.000000, 0.000000,-2.459941;;, + 37;3; -0.000000, 0.000000,-2.459941;;, + 38;3; -0.000000, 0.000000,-2.459941;;, + 39;3; -0.000000, 0.000000,-2.459941;;, + 40;3; -0.000000, 0.000000,-2.459941;;, + 41;3; -0.000000, 0.000000,-2.459941;;, + 42;3; -0.000000, 0.000000,-2.459941;;, + 43;3; -0.000000, 0.000000,-2.459941;;, + 44;3; -0.000000, 0.000000,-2.459941;;, + 45;3; -0.000000, 0.000000,-2.459941;;, + 46;3; -0.000000, 0.000000,-2.459941;;, + 47;3; -0.000000, 0.000000,-2.459941;;, + 48;3; -0.000000, 0.000000,-2.459941;;, + 49;3; -0.000000, 0.000000,-2.459941;;, + 50;3; -0.000000, 0.000000,-2.459941;;, + 51;3; -0.000000, 0.000000,-2.459941;;, + 52;3; -0.000000, 0.000000,-2.459941;;, + 53;3; -0.000000, 0.000000,-2.459941;;, + 54;3; -0.000000, 0.000000,-2.459941;;, + 55;3; -0.000000, 0.000000,-2.459941;;, + 56;3; -0.000000, 0.000000,-2.459941;;, + 57;3; -0.000000, 0.000000,-2.459941;;, + 58;3; -0.000000, 0.000000,-2.459941;;, + 59;3; -0.000000, 0.000000,-2.459941;;, + 60;3; -0.000000, 0.000000,-2.459941;;, + 61;3; -0.000000, 0.000000,-2.459941;;, + 62;3; -0.000000, 0.000000,-2.459941;;, + 63;3; -0.000000, 0.000000,-2.459941;;, + 64;3; -0.000000, 0.000000,-2.459941;;, + 65;3; -0.000000, 0.000000,-2.459941;;, + 66;3; -0.000000, 0.000000,-2.459941;;, + 67;3; -0.000000, 0.000000,-2.459941;;, + 68;3; -0.000000, 0.000000,-2.459941;;, + 69;3; -0.000000, 0.000000,-2.459941;;, + 70;3; -0.000000, 0.000000,-2.459941;;, + 71;3; -0.000000, 0.000000,-2.459941;;, + 72;3; -0.000000, 0.000000,-2.459941;;, + 73;3; -0.000000, 0.000000,-2.459941;;, + 74;3; -0.000000, 0.000000,-2.459941;;, + 75;3; -0.000000, 0.000000,-2.459941;;; + } + AnimationKey { //Rotation + 0; + 76; + 0;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 1;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 2;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 3;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 4;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 5;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 6;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 7;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 8;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 9;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 10;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 11;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 12;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 13;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 14;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 15;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 16;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 17;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 18;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 19;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 20;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 21;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 22;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 23;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 24;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 25;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 26;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 27;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 28;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 29;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 30;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 31;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 32;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 33;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 34;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 35;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 36;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 37;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 38;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 39;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 40;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 41;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 42;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 43;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 44;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 45;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 46;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 47;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 48;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 49;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 50;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 51;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 52;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 53;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 54;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 55;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 56;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 57;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 58;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 59;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 60;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 61;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 62;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 63;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 64;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 65;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 66;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 67;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 68;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 69;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 70;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 71;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 72;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 73;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 74;4; -0.707107, 0.707107, 0.000000,-0.000000;;, + 75;4; -0.707107, 0.707107, 0.000000,-0.000000;;; + } + AnimationKey { //Scale + 1; + 76; + 0;3; 1.000000, 1.000000, 1.000000;;, + 1;3; 1.000000, 1.000000, 1.000000;;, + 2;3; 1.000000, 1.000000, 1.000000;;, + 3;3; 1.000000, 1.000000, 1.000000;;, + 4;3; 1.000000, 1.000000, 1.000000;;, + 5;3; 1.000000, 1.000000, 1.000000;;, + 6;3; 1.000000, 1.000000, 1.000000;;, + 7;3; 1.000000, 1.000000, 1.000000;;, + 8;3; 1.000000, 1.000000, 1.000000;;, + 9;3; 1.000000, 1.000000, 1.000000;;, + 10;3; 1.000000, 1.000000, 1.000000;;, + 11;3; 1.000000, 1.000000, 1.000000;;, + 12;3; 1.000000, 1.000000, 1.000000;;, + 13;3; 1.000000, 1.000000, 1.000000;;, + 14;3; 1.000000, 1.000000, 1.000000;;, + 15;3; 1.000000, 1.000000, 1.000000;;, + 16;3; 1.000000, 1.000000, 1.000000;;, + 17;3; 1.000000, 1.000000, 1.000000;;, + 18;3; 1.000000, 1.000000, 1.000000;;, + 19;3; 1.000000, 1.000000, 1.000000;;, + 20;3; 1.000000, 1.000000, 1.000000;;, + 21;3; 1.000000, 1.000000, 1.000000;;, + 22;3; 1.000000, 1.000000, 1.000000;;, + 23;3; 1.000000, 1.000000, 1.000000;;, + 24;3; 1.000000, 1.000000, 1.000000;;, + 25;3; 1.000000, 1.000000, 1.000000;;, + 26;3; 1.000000, 1.000000, 1.000000;;, + 27;3; 1.000000, 1.000000, 1.000000;;, + 28;3; 1.000000, 1.000000, 1.000000;;, + 29;3; 1.000000, 1.000000, 1.000000;;, + 30;3; 1.000000, 1.000000, 1.000000;;, + 31;3; 1.000000, 1.000000, 1.000000;;, + 32;3; 1.000000, 1.000000, 1.000000;;, + 33;3; 1.000000, 1.000000, 1.000000;;, + 34;3; 1.000000, 1.000000, 1.000000;;, + 35;3; 1.000000, 1.000000, 1.000000;;, + 36;3; 1.000000, 1.000000, 1.000000;;, + 37;3; 1.000000, 1.000000, 1.000000;;, + 38;3; 1.000000, 1.000000, 1.000000;;, + 39;3; 1.000000, 1.000000, 1.000000;;, + 40;3; 1.000000, 1.000000, 1.000000;;, + 41;3; 1.000000, 1.000000, 1.000000;;, + 42;3; 1.000000, 1.000000, 1.000000;;, + 43;3; 1.000000, 1.000000, 1.000000;;, + 44;3; 1.000000, 1.000000, 1.000000;;, + 45;3; 1.000000, 1.000000, 1.000000;;, + 46;3; 1.000000, 1.000000, 1.000000;;, + 47;3; 1.000000, 1.000000, 1.000000;;, + 48;3; 1.000000, 1.000000, 1.000000;;, + 49;3; 1.000000, 1.000000, 1.000000;;, + 50;3; 1.000000, 1.000000, 1.000000;;, + 51;3; 1.000000, 1.000000, 1.000000;;, + 52;3; 1.000000, 1.000000, 1.000000;;, + 53;3; 1.000000, 1.000000, 1.000000;;, + 54;3; 1.000000, 1.000000, 1.000000;;, + 55;3; 1.000000, 1.000000, 1.000000;;, + 56;3; 1.000000, 1.000000, 1.000000;;, + 57;3; 1.000000, 1.000000, 1.000000;;, + 58;3; 1.000000, 1.000000, 1.000000;;, + 59;3; 1.000000, 1.000000, 1.000000;;, + 60;3; 1.000000, 1.000000, 1.000000;;, + 61;3; 1.000000, 1.000000, 1.000000;;, + 62;3; 1.000000, 1.000000, 1.000000;;, + 63;3; 1.000000, 1.000000, 1.000000;;, + 64;3; 1.000000, 1.000000, 1.000000;;, + 65;3; 1.000000, 1.000000, 1.000000;;, + 66;3; 1.000000, 1.000000, 1.000000;;, + 67;3; 1.000000, 1.000000, 1.000000;;, + 68;3; 1.000000, 1.000000, 1.000000;;, + 69;3; 1.000000, 1.000000, 1.000000;;, + 70;3; 1.000000, 1.000000, 1.000000;;, + 71;3; 1.000000, 1.000000, 1.000000;;, + 72;3; 1.000000, 1.000000, 1.000000;;, + 73;3; 1.000000, 1.000000, 1.000000;;, + 74;3; 1.000000, 1.000000, 1.000000;;, + 75;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Thruster} + AnimationKey { //Position + 2; + 76; + 0;3; -4.639344, 8.859941, 0.000000;;, + 1;3; -4.639344, 8.859941, 0.000000;;, + 2;3; -4.639344, 8.859941, 0.000000;;, + 3;3; -4.639344, 8.859941, 0.000000;;, + 4;3; -4.639344, 8.859941, 0.000000;;, + 5;3; -4.639344, 8.859941, 0.000000;;, + 6;3; -4.639344, 8.859941, 0.000000;;, + 7;3; -4.639344, 8.859941, 0.000000;;, + 8;3; -4.639344, 8.859941, 0.000000;;, + 9;3; -4.639344, 8.859941, 0.000000;;, + 10;3; -4.639344, 8.859941, 0.000000;;, + 11;3; -4.639344, 8.859941, 0.000000;;, + 12;3; -4.639344, 8.859941, 0.000000;;, + 13;3; -4.639344, 8.859941, 0.000000;;, + 14;3; -4.639344, 8.859941, 0.000000;;, + 15;3; -4.639344, 8.859941, 0.000000;;, + 16;3; -4.639344, 8.859941, 0.000000;;, + 17;3; -4.639344, 8.859941, 0.000000;;, + 18;3; -4.639344, 8.859941, 0.000000;;, + 19;3; -4.639344, 8.859941, 0.000000;;, + 20;3; -4.639344, 8.859941, 0.000000;;, + 21;3; -4.639344, 8.859941, 0.000000;;, + 22;3; -4.639344, 8.859941, 0.000000;;, + 23;3; -4.639344, 8.859941, 0.000000;;, + 24;3; -4.639344, 8.859941, 0.000000;;, + 25;3; -4.639344, 8.859941, 0.000000;;, + 26;3; -4.751536, 8.859941, 0.000000;;, + 27;3; -4.926180, 8.859941, 0.000000;;, + 28;3; -5.116801, 8.859941, 0.000000;;, + 29;3; -5.313328, 8.859941, 0.000000;;, + 30;3; -5.511499, 8.859941, 0.000000;;, + 31;3; -5.708984, 8.859941, 0.000000;;, + 32;3; -5.904290, 8.859941, 0.000000;;, + 33;3; -6.096343, 8.859941, 0.000000;;, + 34;3; -6.284297, 8.859941, 0.000000;;, + 35;3; -6.467437, 8.859941, 0.000000;;, + 36;3; -6.645113, 8.859941, 0.000000;;, + 37;3; -6.816706, 8.859941, 0.000000;;, + 38;3; -6.981606, 8.859941, 0.000000;;, + 39;3; -7.139187, 8.859941, 0.000000;;, + 40;3; -7.288791, 8.859941, 0.000000;;, + 41;3; -7.429712, 8.859941, 0.000000;;, + 42;3; -7.561180, 8.859941, 0.000000;;, + 43;3; -7.682340, 8.859941, 0.000000;;, + 44;3; -7.792232, 8.859941, 0.000000;;, + 45;3; -7.889764, 8.859941, 0.000000;;, + 46;3; -7.973680, 8.859941, 0.000000;;, + 47;3; -8.042510, 8.859941, 0.000000;;, + 48;3; -8.094524, 8.859941, 0.000000;;, + 49;3; -8.127645, 8.859941, 0.000000;;, + 50;3; -8.139342, 8.859941, 0.000000;;, + 51;3; -8.127024, 8.859941, 0.000000;;, + 52;3; -8.089846, 8.859941, 0.000000;;, + 53;3; -8.027658, 8.859941, 0.000000;;, + 54;3; -7.940606, 8.859941, 0.000000;;, + 55;3; -7.829194, 8.859941, 0.000000;;, + 56;3; -7.694356, 8.859941, 0.000000;;, + 57;3; -7.537523, 8.859941, 0.000000;;, + 58;3; -7.360665, 8.859941, 0.000000;;, + 59;3; -7.166321, 8.859941, 0.000000;;, + 60;3; -6.957588, 8.859941, 0.000000;;, + 61;3; -6.738070, 8.859941, 0.000000;;, + 62;3; -6.511783, 8.859941, 0.000000;;, + 63;3; -6.283020, 8.859941, 0.000000;;, + 64;3; -6.056183, 8.859941, 0.000000;;, + 65;3; -5.835609, 8.859941, 0.000000;;, + 66;3; -5.625397, 8.859941, 0.000000;;, + 67;3; -5.429261, 8.859941, 0.000000;;, + 68;3; -5.250427, 8.859941, 0.000000;;, + 69;3; -5.091565, 8.859941, 0.000000;;, + 70;3; -4.954775, 8.859941, 0.000000;;, + 71;3; -4.841600, 8.859941, 0.000000;;, + 72;3; -4.753072, 8.859941, 0.000000;;, + 73;3; -4.689772, 8.859941, 0.000000;;, + 74;3; -4.651900, 8.859941, 0.000000;;, + 75;3; -4.639344, 8.859941, 0.000000;;; + } + AnimationKey { //Rotation + 0; + 76; + 0;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 1;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 2;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 3;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 4;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 5;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 6;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 7;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 8;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 9;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 10;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 11;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 12;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 13;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 14;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 15;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 16;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 17;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 18;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 19;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 20;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 21;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 22;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 23;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 24;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 25;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 26;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 27;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 28;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 29;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 30;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 31;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 32;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 33;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 34;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 35;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 36;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 37;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 38;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 39;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 40;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 41;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 42;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 43;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 44;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 45;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 46;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 47;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 48;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 49;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 50;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 51;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 52;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 53;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 54;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 55;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 56;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 57;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 58;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 59;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 60;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 61;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 62;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 63;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 64;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 65;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 66;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 67;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 68;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 69;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 70;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 71;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 72;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 73;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 74;4; -0.500000,-0.500000, 0.500000, 0.500000;;, + 75;4; -0.500000,-0.500000, 0.500000, 0.500000;;; + } + AnimationKey { //Scale + 1; + 76; + 0;3; 1.000000, 1.000000, 1.000000;;, + 1;3; 1.000000, 1.000000, 1.000000;;, + 2;3; 1.000000, 1.000000, 1.000000;;, + 3;3; 1.000000, 1.000000, 1.000000;;, + 4;3; 1.000000, 1.000000, 1.000000;;, + 5;3; 1.000000, 1.000000, 1.000000;;, + 6;3; 1.000000, 1.000000, 1.000000;;, + 7;3; 1.000000, 1.000000, 1.000000;;, + 8;3; 1.000000, 1.000000, 1.000000;;, + 9;3; 1.000000, 1.000000, 1.000000;;, + 10;3; 1.000000, 1.000000, 1.000000;;, + 11;3; 1.000000, 1.000000, 1.000000;;, + 12;3; 1.000000, 1.000000, 1.000000;;, + 13;3; 1.000000, 1.000000, 1.000000;;, + 14;3; 1.000000, 1.000000, 1.000000;;, + 15;3; 1.000000, 1.000000, 1.000000;;, + 16;3; 1.000000, 1.000000, 1.000000;;, + 17;3; 1.000000, 1.000000, 1.000000;;, + 18;3; 1.000000, 1.000000, 1.000000;;, + 19;3; 1.000000, 1.000000, 1.000000;;, + 20;3; 1.000000, 1.000000, 1.000000;;, + 21;3; 1.000000, 1.000000, 1.000000;;, + 22;3; 1.000000, 1.000000, 1.000000;;, + 23;3; 1.000000, 1.000000, 1.000000;;, + 24;3; 1.000000, 1.000000, 1.000000;;, + 25;3; 1.000000, 1.000000, 1.000000;;, + 26;3; 1.000000, 1.000000, 1.000000;;, + 27;3; 1.000000, 1.000000, 1.000000;;, + 28;3; 1.000000, 1.000000, 1.000000;;, + 29;3; 1.000000, 1.000000, 1.000000;;, + 30;3; 1.000000, 1.000000, 1.000000;;, + 31;3; 1.000000, 1.000000, 1.000000;;, + 32;3; 1.000000, 1.000000, 1.000000;;, + 33;3; 1.000000, 1.000000, 1.000000;;, + 34;3; 1.000000, 1.000000, 1.000000;;, + 35;3; 1.000000, 1.000000, 1.000000;;, + 36;3; 1.000000, 1.000000, 1.000000;;, + 37;3; 1.000000, 1.000000, 1.000000;;, + 38;3; 1.000000, 1.000000, 1.000000;;, + 39;3; 1.000000, 1.000000, 1.000000;;, + 40;3; 1.000000, 1.000000, 1.000000;;, + 41;3; 1.000000, 1.000000, 1.000000;;, + 42;3; 1.000000, 1.000000, 1.000000;;, + 43;3; 1.000000, 1.000000, 1.000000;;, + 44;3; 1.000000, 1.000000, 1.000000;;, + 45;3; 1.000000, 1.000000, 1.000000;;, + 46;3; 1.000000, 1.000000, 1.000000;;, + 47;3; 1.000000, 1.000000, 1.000000;;, + 48;3; 1.000000, 1.000000, 1.000000;;, + 49;3; 1.000000, 1.000000, 1.000000;;, + 50;3; 1.000000, 1.000000, 1.000000;;, + 51;3; 1.000000, 1.000000, 1.000000;;, + 52;3; 1.000000, 1.000000, 1.000000;;, + 53;3; 1.000000, 1.000000, 1.000000;;, + 54;3; 1.000000, 1.000000, 1.000000;;, + 55;3; 1.000000, 1.000000, 1.000000;;, + 56;3; 1.000000, 1.000000, 1.000000;;, + 57;3; 1.000000, 1.000000, 1.000000;;, + 58;3; 1.000000, 1.000000, 1.000000;;, + 59;3; 1.000000, 1.000000, 1.000000;;, + 60;3; 1.000000, 1.000000, 1.000000;;, + 61;3; 1.000000, 1.000000, 1.000000;;, + 62;3; 1.000000, 1.000000, 1.000000;;, + 63;3; 1.000000, 1.000000, 1.000000;;, + 64;3; 1.000000, 1.000000, 1.000000;;, + 65;3; 1.000000, 1.000000, 1.000000;;, + 66;3; 1.000000, 1.000000, 1.000000;;, + 67;3; 1.000000, 1.000000, 1.000000;;, + 68;3; 1.000000, 1.000000, 1.000000;;, + 69;3; 1.000000, 1.000000, 1.000000;;, + 70;3; 1.000000, 1.000000, 1.000000;;, + 71;3; 1.000000, 1.000000, 1.000000;;, + 72;3; 1.000000, 1.000000, 1.000000;;, + 73;3; 1.000000, 1.000000, 1.000000;;, + 74;3; 1.000000, 1.000000, 1.000000;;, + 75;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Hovercraft} + AnimationKey { //Position + 2; + 76; + 0;3; 0.000000, 0.000000,-0.500000;;, + 1;3; 0.000000, 0.000000,-0.500000;;, + 2;3; 0.000000, 0.000000,-0.500000;;, + 3;3; 0.000000, 0.000000,-0.500000;;, + 4;3; 0.000000, 0.000000,-0.500000;;, + 5;3; 0.000000, 0.000000,-0.500000;;, + 6;3; 0.000000, 0.000000,-0.500000;;, + 7;3; 0.000000, 0.000000,-0.500000;;, + 8;3; 0.000000, 0.000000,-0.500000;;, + 9;3; 0.000000, 0.000000,-0.500000;;, + 10;3; 0.000000, 0.000000,-0.500000;;, + 11;3; 0.000000, 0.000000,-0.500000;;, + 12;3; 0.000000, 0.000000,-0.500000;;, + 13;3; 0.000000, 0.000000,-0.500000;;, + 14;3; 0.000000, 0.000000,-0.500000;;, + 15;3; 0.000000, 0.000000,-0.500000;;, + 16;3; 0.000000, 0.000000,-0.500000;;, + 17;3; 0.000000, 0.000000,-0.500000;;, + 18;3; 0.000000, 0.000000,-0.500000;;, + 19;3; 0.000000, 0.000000,-0.500000;;, + 20;3; 0.000000, 0.000000,-0.500000;;, + 21;3; 0.000000, 0.000000,-0.500000;;, + 22;3; 0.000000, 0.000000,-0.500000;;, + 23;3; 0.000000, 0.000000,-0.500000;;, + 24;3; 0.000000, 0.000000,-0.500000;;, + 25;3; 0.000000, 0.000000,-0.500000;;, + 26;3; 0.000000, 0.000000,-0.500000;;, + 27;3; 0.000000, 0.000000,-0.500000;;, + 28;3; 0.000000, 0.000000,-0.500000;;, + 29;3; 0.000000, 0.000000,-0.500000;;, + 30;3; 0.000000, 0.000000,-0.500000;;, + 31;3; 0.000000, 0.000000,-0.500000;;, + 32;3; 0.000000, 0.000000,-0.500000;;, + 33;3; 0.000000, 0.000000,-0.500000;;, + 34;3; 0.000000, 0.000000,-0.500000;;, + 35;3; 0.000000, 0.000000,-0.500000;;, + 36;3; 0.000000, 0.000000,-0.500000;;, + 37;3; 0.000000, 0.000000,-0.500000;;, + 38;3; 0.000000, 0.000000,-0.500000;;, + 39;3; 0.000000, 0.000000,-0.500000;;, + 40;3; 0.000000, 0.000000,-0.500000;;, + 41;3; 0.000000, 0.000000,-0.500000;;, + 42;3; 0.000000, 0.000000,-0.500000;;, + 43;3; 0.000000, 0.000000,-0.500000;;, + 44;3; 0.000000, 0.000000,-0.500000;;, + 45;3; 0.000000, 0.000000,-0.500000;;, + 46;3; 0.000000, 0.000000,-0.500000;;, + 47;3; 0.000000, 0.000000,-0.500000;;, + 48;3; 0.000000, 0.000000,-0.500000;;, + 49;3; 0.000000, 0.000000,-0.500000;;, + 50;3; 0.000000, 0.000000,-0.500000;;, + 51;3; 0.000000, 0.000000,-0.500000;;, + 52;3; 0.000000, 0.000000,-0.500000;;, + 53;3; 0.000000, 0.000000,-0.500000;;, + 54;3; 0.000000, 0.000000,-0.500000;;, + 55;3; 0.000000, 0.000000,-0.500000;;, + 56;3; 0.000000, 0.000000,-0.500000;;, + 57;3; 0.000000, 0.000000,-0.500000;;, + 58;3; 0.000000, 0.000000,-0.500000;;, + 59;3; 0.000000, 0.000000,-0.500000;;, + 60;3; 0.000000, 0.000000,-0.500000;;, + 61;3; 0.000000, 0.000000,-0.500000;;, + 62;3; 0.000000, 0.000000,-0.500000;;, + 63;3; 0.000000, 0.000000,-0.500000;;, + 64;3; 0.000000, 0.000000,-0.500000;;, + 65;3; 0.000000, 0.000000,-0.500000;;, + 66;3; 0.000000, 0.000000,-0.500000;;, + 67;3; 0.000000, 0.000000,-0.500000;;, + 68;3; 0.000000, 0.000000,-0.500000;;, + 69;3; 0.000000, 0.000000,-0.500000;;, + 70;3; 0.000000, 0.000000,-0.500000;;, + 71;3; 0.000000, 0.000000,-0.500000;;, + 72;3; 0.000000, 0.000000,-0.500000;;, + 73;3; 0.000000, 0.000000,-0.500000;;, + 74;3; 0.000000, 0.000000,-0.500000;;, + 75;3; 0.000000, 0.000000,-0.500000;;; + } + AnimationKey { //Rotation + 0; + 76; + 0;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 1;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 2;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 3;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 4;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 5;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 6;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 7;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 8;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 9;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 10;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 11;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 12;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 13;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 14;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 15;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 16;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 17;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 18;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 19;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 20;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 21;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 22;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 23;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 24;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 25;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 26;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 27;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 28;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 29;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 30;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 31;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 32;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 33;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 34;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 35;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 36;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 37;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 38;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 39;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 40;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 41;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 42;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 43;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 44;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 45;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 46;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 47;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 48;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 49;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 50;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 51;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 52;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 53;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 54;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 55;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 56;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 57;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 58;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 59;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 60;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 61;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 62;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 63;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 64;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 65;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 66;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 67;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 68;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 69;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 70;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 71;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 72;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 73;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 74;4; -0.707107, 0.000000, 0.000000,-0.707107;;, + 75;4; -0.707107, 0.000000, 0.000000,-0.707107;;; + } + AnimationKey { //Scale + 1; + 76; + 0;3; 4.000000, 4.000000, 2.581575;;, + 1;3; 4.000000, 4.000000, 2.581575;;, + 2;3; 4.000000, 4.000000, 2.581575;;, + 3;3; 4.000000, 4.000000, 2.581575;;, + 4;3; 4.000000, 4.000000, 2.581575;;, + 5;3; 4.000000, 4.000000, 2.581575;;, + 6;3; 4.000000, 4.000000, 2.581575;;, + 7;3; 4.000000, 4.000000, 2.581575;;, + 8;3; 4.000000, 4.000000, 2.581575;;, + 9;3; 4.000000, 4.000000, 2.581575;;, + 10;3; 4.000000, 4.000000, 2.581575;;, + 11;3; 4.000000, 4.000000, 2.581575;;, + 12;3; 4.000000, 4.000000, 2.581575;;, + 13;3; 4.000000, 4.000000, 2.581575;;, + 14;3; 4.000000, 4.000000, 2.581575;;, + 15;3; 4.000000, 4.000000, 2.581575;;, + 16;3; 4.000000, 4.000000, 2.581575;;, + 17;3; 4.000000, 4.000000, 2.581575;;, + 18;3; 4.000000, 4.000000, 2.581575;;, + 19;3; 4.000000, 4.000000, 2.581575;;, + 20;3; 4.000000, 4.000000, 2.581575;;, + 21;3; 4.000000, 4.000000, 2.581575;;, + 22;3; 4.000000, 4.000000, 2.581575;;, + 23;3; 4.000000, 4.000000, 2.581575;;, + 24;3; 4.000000, 4.000000, 2.581575;;, + 25;3; 4.000000, 4.000000, 2.581575;;, + 26;3; 4.000000, 4.000000, 2.581575;;, + 27;3; 4.000000, 4.000000, 2.581575;;, + 28;3; 4.000000, 4.000000, 2.581575;;, + 29;3; 4.000000, 4.000000, 2.581575;;, + 30;3; 4.000000, 4.000000, 2.581575;;, + 31;3; 4.000000, 4.000000, 2.581575;;, + 32;3; 4.000000, 4.000000, 2.581575;;, + 33;3; 4.000000, 4.000000, 2.581575;;, + 34;3; 4.000000, 4.000000, 2.581575;;, + 35;3; 4.000000, 4.000000, 2.581575;;, + 36;3; 4.000000, 4.000000, 2.581575;;, + 37;3; 4.000000, 4.000000, 2.581575;;, + 38;3; 4.000000, 4.000000, 2.581575;;, + 39;3; 4.000000, 4.000000, 2.581575;;, + 40;3; 4.000000, 4.000000, 2.581575;;, + 41;3; 4.000000, 4.000000, 2.581575;;, + 42;3; 4.000000, 4.000000, 2.581575;;, + 43;3; 4.000000, 4.000000, 2.581575;;, + 44;3; 4.000000, 4.000000, 2.581575;;, + 45;3; 4.000000, 4.000000, 2.581575;;, + 46;3; 4.000000, 4.000000, 2.581575;;, + 47;3; 4.000000, 4.000000, 2.581575;;, + 48;3; 4.000000, 4.000000, 2.581575;;, + 49;3; 4.000000, 4.000000, 2.581575;;, + 50;3; 4.000000, 4.000000, 2.581575;;, + 51;3; 4.000000, 4.000000, 2.581575;;, + 52;3; 4.000000, 4.000000, 2.581575;;, + 53;3; 4.000000, 4.000000, 2.581575;;, + 54;3; 4.000000, 4.000000, 2.581575;;, + 55;3; 4.000000, 4.000000, 2.581575;;, + 56;3; 4.000000, 4.000000, 2.581575;;, + 57;3; 4.000000, 4.000000, 2.581575;;, + 58;3; 4.000000, 4.000000, 2.581575;;, + 59;3; 4.000000, 4.000000, 2.581575;;, + 60;3; 4.000000, 4.000000, 2.581575;;, + 61;3; 4.000000, 4.000000, 2.581575;;, + 62;3; 4.000000, 4.000000, 2.581575;;, + 63;3; 4.000000, 4.000000, 2.581575;;, + 64;3; 4.000000, 4.000000, 2.581575;;, + 65;3; 4.000000, 4.000000, 2.581575;;, + 66;3; 4.000000, 4.000000, 2.581575;;, + 67;3; 4.000000, 4.000000, 2.581575;;, + 68;3; 4.000000, 4.000000, 2.581575;;, + 69;3; 4.000000, 4.000000, 2.581575;;, + 70;3; 4.000000, 4.000000, 2.581575;;, + 71;3; 4.000000, 4.000000, 2.581575;;, + 72;3; 4.000000, 4.000000, 2.581575;;, + 73;3; 4.000000, 4.000000, 2.581575;;, + 74;3; 4.000000, 4.000000, 2.581575;;, + 75;3; 4.000000, 4.000000, 2.581575;;; + } + } +} //End of AnimationSet diff --git a/mods/vehicle_mash/models/rowboat.x b/mods/vehicle_mash/models/rowboat.x new file mode 100644 index 0000000..73a61df --- /dev/null +++ b/mods/vehicle_mash/models/rowboat.x @@ -0,0 +1,760 @@ +xof 0303txt 0032 + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.000000, 1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame Cube_000 { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Mesh { // Cube_000 mesh + 240; + 6.000000; 3.999999; 2.376923;, + 5.999998;-8.000001; 2.376923;, + 5.999998;-8.000001; 4.376923;, + 6.000001; 3.999999; 4.376923;, + -2.000000; 8.000000; 2.376923;, + 2.000000; 8.000000; 2.376923;, + 2.000001; 8.000000; 4.376923;, + -1.999999; 8.000000; 4.376923;, + -6.000000; 4.000000; 4.376923;, + -6.000001;-8.000000; 4.376923;, + -6.000001;-7.999999; 2.376923;, + -6.000000; 4.000000; 2.376923;, + -3.999999; 6.000001; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -2.000001;-8.000002; 2.376923;, + -4.000001;-8.000000; 2.376923;, + -2.000000; 4.000000;-1.623077;, + -2.000001;-7.999999;-1.623077;, + 1.999999;-8.000001;-1.623077;, + 2.000000; 4.000000;-1.623077;, + -2.000000; 4.000000; 0.376923;, + 2.000000; 3.999999; 0.376923;, + 1.999999;-8.000001; 0.376923;, + -2.000001;-8.000000; 0.376923;, + -2.000000; 4.000000;-1.623077;, + 2.000000; 4.000000;-1.623077;, + 2.000000; 3.999999; 0.376923;, + -2.000000; 4.000000; 0.376923;, + 2.000000; 4.000000;-1.623077;, + 1.999999;-8.000001;-1.623077;, + 1.999999;-8.000001; 0.376923;, + 2.000000; 3.999999; 0.376923;, + 1.999999;-8.000001;-1.623077;, + -2.000001;-7.999999;-1.623077;, + -2.000001;-8.000000; 0.376923;, + 1.999999;-8.000001; 0.376923;, + -2.000000; 4.000000; 0.376923;, + -2.000001;-8.000000; 0.376923;, + -2.000001;-7.999999;-1.623077;, + -2.000000; 4.000000;-1.623077;, + -4.000001;-8.000000; 0.376923;, + -4.000001;-10.000000; 0.376923;, + 4.000000;-10.000000; 0.376923;, + 3.999999;-8.000000; 0.376923;, + -4.000000;-7.999999; 4.376923;, + 4.000000;-8.000001; 4.376923;, + 3.999999;-10.000001; 4.376923;, + -4.000001;-10.000000; 4.376923;, + -4.000001;-8.000000; 0.376923;, + 3.999999;-8.000000; 0.376923;, + 4.000000;-8.000001; 4.376923;, + -4.000000;-7.999999; 4.376923;, + 3.999999;-8.000000; 0.376923;, + 4.000000;-10.000000; 0.376923;, + 3.999999;-10.000001; 4.376923;, + 4.000000;-8.000001; 4.376923;, + 4.000000;-10.000000; 0.376923;, + -4.000001;-10.000000; 0.376923;, + -4.000001;-10.000000; 4.376923;, + 3.999999;-10.000001; 4.376923;, + -4.000000;-7.999999; 4.376923;, + -4.000001;-10.000000; 4.376923;, + -4.000001;-10.000000; 0.376923;, + -4.000001;-8.000000; 0.376923;, + 4.000000; 4.000000; 2.376923;, + 3.999999;-8.000001; 2.376923;, + 5.999998;-8.000001; 2.376923;, + 6.000000; 3.999999; 2.376923;, + 4.000001; 4.000000; 4.376923;, + 6.000001; 3.999999; 4.376923;, + 5.999998;-8.000001; 4.376923;, + 4.000000;-8.000001; 4.376923;, + 4.000000; 4.000000; 2.376923;, + 6.000000; 3.999999; 2.376923;, + 6.000001; 3.999999; 4.376923;, + 4.000001; 4.000000; 4.376923;, + 5.999998;-8.000001; 2.376923;, + 3.999999;-8.000001; 2.376923;, + 4.000000;-8.000001; 4.376923;, + 5.999998;-8.000001; 4.376923;, + 4.000001; 4.000000; 4.376923;, + 4.000000;-8.000001; 4.376923;, + 3.999999;-8.000001; 2.376923;, + 4.000000; 4.000000; 2.376923;, + 2.000000; 6.000000; 0.376923;, + 1.999999;-8.000001; 0.376923;, + 3.999999;-8.000000; 0.376923;, + 4.000000; 6.000000; 0.376923;, + 2.000001; 6.000000; 2.376923;, + 4.000001; 5.999999; 2.376923;, + 3.999999;-8.000001; 2.376923;, + 1.999999;-8.000000; 2.376923;, + 2.000000; 6.000000; 0.376923;, + 4.000000; 6.000000; 0.376923;, + 4.000001; 5.999999; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 4.000000; 6.000000; 0.376923;, + 3.999999;-8.000000; 0.376923;, + 3.999999;-8.000001; 2.376923;, + 4.000001; 5.999999; 2.376923;, + 3.999999;-8.000000; 0.376923;, + 1.999999;-8.000001; 0.376923;, + 1.999999;-8.000000; 2.376923;, + 3.999999;-8.000001; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 1.999999;-8.000000; 2.376923;, + 1.999999;-8.000001; 0.376923;, + 2.000000; 6.000000; 0.376923;, + 2.000001; 6.000000; 2.376923;, + 2.000000; 4.000000; 2.376923;, + 4.000000; 4.000000; 2.376923;, + 4.000001; 5.999999; 2.376923;, + 2.000001; 6.000000; 4.376923;, + 4.000001; 5.999999; 4.376923;, + 4.000001; 4.000000; 4.376923;, + 2.000000; 4.000000; 4.376923;, + 2.000001; 6.000000; 2.376923;, + 4.000001; 5.999999; 2.376923;, + 4.000001; 5.999999; 4.376923;, + 2.000001; 6.000000; 4.376923;, + 4.000001; 5.999999; 2.376923;, + 4.000000; 4.000000; 2.376923;, + 4.000001; 4.000000; 4.376923;, + 4.000001; 5.999999; 4.376923;, + 4.000000; 4.000000; 2.376923;, + 2.000000; 4.000000; 2.376923;, + 2.000000; 4.000000; 4.376923;, + 4.000001; 4.000000; 4.376923;, + 2.000001; 6.000000; 4.376923;, + 2.000000; 4.000000; 4.376923;, + 2.000000; 4.000000; 2.376923;, + 2.000001; 6.000000; 2.376923;, + -3.999999; 6.000001; 2.376923;, + -4.000000; 4.000000; 2.376923;, + -2.000000; 4.000000; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -3.999999; 6.000001; 4.376923;, + -1.999999; 6.000000; 4.376923;, + -2.000000; 4.000000; 4.376923;, + -4.000000; 3.999999; 4.376923;, + -3.999999; 6.000001; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -1.999999; 6.000000; 4.376923;, + -3.999999; 6.000001; 4.376923;, + -1.999999; 6.000000; 2.376923;, + -2.000000; 4.000000; 2.376923;, + -2.000000; 4.000000; 4.376923;, + -1.999999; 6.000000; 4.376923;, + -2.000000; 4.000000; 2.376923;, + -4.000000; 4.000000; 2.376923;, + -4.000000; 3.999999; 4.376923;, + -2.000000; 4.000000; 4.376923;, + -3.999999; 6.000001; 4.376923;, + -4.000000; 3.999999; 4.376923;, + -4.000000; 4.000000; 2.376923;, + -3.999999; 6.000001; 2.376923;, + -2.000000; 8.000000; 2.376923;, + -1.999999; 6.000000; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 2.000000; 8.000000; 2.376923;, + -1.999999; 8.000000; 4.376923;, + 2.000001; 8.000000; 4.376923;, + 2.000001; 6.000000; 4.376923;, + -1.999999; 6.000000; 4.376923;, + 2.000000; 8.000000; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 2.000001; 6.000000; 4.376923;, + 2.000001; 8.000000; 4.376923;, + 2.000001; 6.000000; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -1.999999; 6.000000; 4.376923;, + 2.000001; 6.000000; 4.376923;, + -1.999999; 8.000000; 4.376923;, + -1.999999; 6.000000; 4.376923;, + -1.999999; 6.000000; 2.376923;, + -2.000000; 8.000000; 2.376923;, + -2.000000; 6.000000; 0.376923;, + -2.000000; 4.000000; 0.376923;, + 2.000000; 3.999999; 0.376923;, + 2.000000; 6.000000; 0.376923;, + -1.999999; 6.000000; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 2.000000; 4.000000; 2.376923;, + -2.000000; 4.000000; 2.376923;, + -2.000000; 6.000000; 0.376923;, + 2.000000; 6.000000; 0.376923;, + 2.000001; 6.000000; 2.376923;, + -1.999999; 6.000000; 2.376923;, + 2.000000; 6.000000; 0.376923;, + 2.000000; 3.999999; 0.376923;, + 2.000000; 4.000000; 2.376923;, + 2.000001; 6.000000; 2.376923;, + 2.000000; 3.999999; 0.376923;, + -2.000000; 4.000000; 0.376923;, + -2.000000; 4.000000; 2.376923;, + 2.000000; 4.000000; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -2.000000; 4.000000; 2.376923;, + -2.000000; 4.000000; 0.376923;, + -2.000000; 6.000000; 0.376923;, + -6.000000; 4.000000; 2.376923;, + -6.000001;-7.999999; 2.376923;, + -4.000001;-8.000000; 2.376923;, + -4.000000; 4.000000; 2.376923;, + -6.000000; 4.000000; 4.376923;, + -4.000000; 3.999999; 4.376923;, + -4.000000;-7.999999; 4.376923;, + -6.000001;-8.000000; 4.376923;, + -6.000000; 4.000000; 2.376923;, + -4.000000; 4.000000; 2.376923;, + -4.000000; 3.999999; 4.376923;, + -6.000000; 4.000000; 4.376923;, + -4.000000; 4.000000; 2.376923;, + -4.000001;-8.000000; 2.376923;, + -4.000000;-7.999999; 4.376923;, + -4.000000; 3.999999; 4.376923;, + -4.000001;-8.000000; 2.376923;, + -6.000001;-7.999999; 2.376923;, + -6.000001;-8.000000; 4.376923;, + -4.000000;-7.999999; 4.376923;, + -4.000000; 6.000001; 0.376923;, + -4.000001;-8.000000; 0.376923;, + -2.000001;-8.000000; 0.376923;, + -2.000000; 6.000000; 0.376923;, + -4.000000; 6.000001; 0.376923;, + -2.000000; 6.000000; 0.376923;, + -1.999999; 6.000000; 2.376923;, + -3.999999; 6.000001; 2.376923;, + -2.000000; 6.000000; 0.376923;, + -2.000001;-8.000000; 0.376923;, + -2.000001;-8.000002; 2.376923;, + -1.999999; 6.000000; 2.376923;, + -2.000001;-8.000000; 0.376923;, + -4.000001;-8.000000; 0.376923;, + -4.000001;-8.000000; 2.376923;, + -2.000001;-8.000002; 2.376923;, + -3.999999; 6.000001; 2.376923;, + -4.000001;-8.000000; 2.376923;, + -4.000001;-8.000000; 0.376923;, + -4.000000; 6.000001; 0.376923;; + 60; + 4;0,1,2,3;, + 4;4,5,6,7;, + 4;8,9,10,11;, + 4;12,13,14,15;, + 4;16,17,18,19;, + 4;20,21,22,23;, + 4;24,25,26,27;, + 4;28,29,30,31;, + 4;32,33,34,35;, + 4;36,37,38,39;, + 4;40,41,42,43;, + 4;44,45,46,47;, + 4;48,49,50,51;, + 4;52,53,54,55;, + 4;56,57,58,59;, + 4;60,61,62,63;, + 4;64,65,66,67;, + 4;68,69,70,71;, + 4;72,73,74,75;, + 4;76,77,78,79;, + 4;80,81,82,83;, + 4;84,85,86,87;, + 4;88,89,90,91;, + 4;92,93,94,95;, + 4;96,97,98,99;, + 4;100,101,102,103;, + 4;104,105,106,107;, + 4;108,109,110,111;, + 4;112,113,114,115;, + 4;116,117,118,119;, + 4;120,121,122,123;, + 4;124,125,126,127;, + 4;128,129,130,131;, + 4;132,133,134,135;, + 4;136,137,138,139;, + 4;140,141,142,143;, + 4;144,145,146,147;, + 4;148,149,150,151;, + 4;152,153,154,155;, + 4;156,157,158,159;, + 4;160,161,162,163;, + 4;164,165,166,167;, + 4;168,169,170,171;, + 4;172,173,174,175;, + 4;176,177,178,179;, + 4;180,181,182,183;, + 4;184,185,186,187;, + 4;188,189,190,191;, + 4;192,193,194,195;, + 4;196,197,198,199;, + 4;200,201,202,203;, + 4;204,205,206,207;, + 4;208,209,210,211;, + 4;212,213,214,215;, + 4;216,217,218,219;, + 4;220,221,222,223;, + 4;224,225,226,227;, + 4;228,229,230,231;, + 4;232,233,234,235;, + 4;236,237,238,239;; + MeshNormals { // Cube_000 normals + 60; + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000;-0.000000;, + 1.000000;-0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000;-0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000;-0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000;-0.000001;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 1.000000;-0.000001;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000001;-1.000000; 0.000000;, + -1.000000; 0.000001;-0.000000;, + -0.000000; 1.000000; 0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000;-0.000000; 0.000000;, + -0.000000; 1.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000;-0.000000;, + 1.000000;-0.000000;-0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000000;-1.000000;-0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000001; 1.000000; 0.000001;, + 1.000000;-0.000000;-0.000000;; + 60; + 4;0,0,0,0;, + 4;1,1,1,1;, + 4;2,2,2,2;, + 4;3,3,3,3;, + 4;4,4,4,4;, + 4;5,5,5,5;, + 4;6,6,6,6;, + 4;7,7,7,7;, + 4;8,8,8,8;, + 4;9,9,9,9;, + 4;10,10,10,10;, + 4;11,11,11,11;, + 4;12,12,12,12;, + 4;13,13,13,13;, + 4;14,14,14,14;, + 4;15,15,15,15;, + 4;16,16,16,16;, + 4;17,17,17,17;, + 4;18,18,18,18;, + 4;19,19,19,19;, + 4;20,20,20,20;, + 4;21,21,21,21;, + 4;22,22,22,22;, + 4;23,23,23,23;, + 4;24,24,24,24;, + 4;25,25,25,25;, + 4;26,26,26,26;, + 4;27,27,27,27;, + 4;28,28,28,28;, + 4;29,29,29,29;, + 4;30,30,30,30;, + 4;31,31,31,31;, + 4;32,32,32,32;, + 4;33,33,33,33;, + 4;34,34,34,34;, + 4;35,35,35,35;, + 4;36,36,36,36;, + 4;37,37,37,37;, + 4;38,38,38,38;, + 4;39,39,39,39;, + 4;40,40,40,40;, + 4;41,41,41,41;, + 4;42,42,42,42;, + 4;43,43,43,43;, + 4;44,44,44,44;, + 4;45,45,45,45;, + 4;46,46,46,46;, + 4;47,47,47,47;, + 4;48,48,48,48;, + 4;49,49,49,49;, + 4;50,50,50,50;, + 4;51,51,51,51;, + 4;52,52,52,52;, + 4;53,53,53,53;, + 4;54,54,54,54;, + 4;55,55,55,55;, + 4;56,56,56,56;, + 4;57,57,57,57;, + 4;58,58,58,58;, + 4;59,59,59,59;; + } // End of Cube_000 normals + MeshTextureCoords { // Cube_000 UV coordinates + 240; + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 6.000000; 0.000000;, + 2.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 2.000000; 0.000000;, + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 6.000000; 0.000000;, + 7.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 5.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 5.000000;-1.000000;, + 6.000000;-1.000000;, + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 2.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 2.000000; 0.000000;, + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 6.000000; 0.000000;, + 3.000000; 0.999999;, + 0.000000; 1.000000;, + 0.000000; 0.000001;, + 3.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000001; 1.000000;, + 0.000000;-4.000000;, + 1.000000;-4.000000;, + 1.000000;-3.000000;, + 0.999999; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-3.000000;, + 4.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 4.000000;-1.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 1.000000;-1.000000;, + 5.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-0.999999;, + 5.000000;-1.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 1.000000;-1.000000;, + 5.375000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 5.375000; 0.000000;, + 5.375000; 0.000000;, + 5.375000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 6.000000; 0.000000;, + 7.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 1.000000;-1.000000;, + 1.000000;-1.000000;, + 0.999999; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 2.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000001;, + 2.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 1.000000;-1.000000;, + 1.000000;-1.000000;, + 0.999999; 1.000000;, + 0.000000; 1.000000;, + 0.000000;-1.000000;, + 2.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 2.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 2.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000001;, + 2.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 7.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 6.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 6.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;, + 1.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 1.000000; 0.000000;, + 7.000000; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.000000;, + 7.000000; 0.000000;; + } // End of Cube_000 UV coordinates + MeshMaterialList { // Cube_000 material list + 1; + 60; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0;; + Material Material { + 0.640000; 0.640000; 0.640000; 1.000000;; + 96.078431; + 0.500000; 0.500000; 0.500000;; + 0.000000; 0.000000; 0.000000;; + TextureFilename {"default_wood.png";} + } + } // End of Cube_000 material list + } // End of Cube_000 mesh + } // End of Cube_000 +} // End of Root diff --git a/mods/vehicle_mash/nyan_ride.lua b/mods/vehicle_mash/nyan_ride.lua new file mode 100644 index 0000000..1d8ff86 --- /dev/null +++ b/mods/vehicle_mash/nyan_ride.lua @@ -0,0 +1,10 @@ + +local name = "car_nyan_ride" +local definition = ... + +definition.description = "Nyan Ride car" +definition.inventory_image = "inv_car_pink.png" +definition.wield_image = "inv_car_pink.png" +definition.textures = {"nyan_ride.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/oerkki_bliss.lua b/mods/vehicle_mash/oerkki_bliss.lua new file mode 100644 index 0000000..84323d4 --- /dev/null +++ b/mods/vehicle_mash/oerkki_bliss.lua @@ -0,0 +1,10 @@ + +local name = "car_oerkki_bliss" +local definition = ... + +definition.description = "Oerkki Bliss car" +definition.inventory_image = "inv_car_black.png" +definition.wield_image = "inv_car_black.png" +definition.textures = {"oerkki_bliss.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/orange.lua b/mods/vehicle_mash/orange.lua new file mode 100644 index 0000000..30c3950 --- /dev/null +++ b/mods/vehicle_mash/orange.lua @@ -0,0 +1,10 @@ + +local name = "car_orange" +local definition = ... + +definition.description = "Orange car" +definition.inventory_image = "inv_car_orange.png" +definition.wield_image = "inv_car_orange.png" +definition.textures = {"car_orange.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/pink.lua b/mods/vehicle_mash/pink.lua new file mode 100644 index 0000000..fc0def9 --- /dev/null +++ b/mods/vehicle_mash/pink.lua @@ -0,0 +1,10 @@ + +local name = "car_pink" +local definition = ... + +definition.description = "Pink car" +definition.inventory_image = "inv_car_pink.png" +definition.wield_image = "inv_car_pink.png" +definition.textures = {"car_pink.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/red.lua b/mods/vehicle_mash/red.lua new file mode 100644 index 0000000..24f67d5 --- /dev/null +++ b/mods/vehicle_mash/red.lua @@ -0,0 +1,10 @@ + +local name = "car_red" +local definition = ... + +definition.description = "Red car" +definition.inventory_image = "inv_car_red.png" +definition.wield_image = "inv_car_red.png" +definition.textures = {"car_red.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/road_master.lua b/mods/vehicle_mash/road_master.lua new file mode 100644 index 0000000..91fe123 --- /dev/null +++ b/mods/vehicle_mash/road_master.lua @@ -0,0 +1,10 @@ + +local name = "car_road_master" +local definition = ... + +definition.description = "Road Master car" +definition.inventory_image = "inv_car_brown.png" +definition.wield_image = "inv_car_brown.png" +definition.textures = {"road_master.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/rowboat.lua b/mods/vehicle_mash/rowboat.lua new file mode 100644 index 0000000..5081d4c --- /dev/null +++ b/mods/vehicle_mash/rowboat.lua @@ -0,0 +1,16 @@ + +local name = "rowboat" +local definition = ... + +definition.description = "Rowboat" +definition.inventory_image = "rowboat_inventory.png" +definition.wield_image = "rowboat_wield.png" +definition.mesh = "rowboat.x" +definition.drop_on_destroy = "default:wood 4" +definition.recipe = { + {"", "", ""}, + {"group:wood", "", "group:wood"}, + {"group:wood", "group:wood", "group:wood"} +} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/sounds/engine.ogg b/mods/vehicle_mash/sounds/engine.ogg new file mode 100644 index 0000000..4158539 Binary files /dev/null and b/mods/vehicle_mash/sounds/engine.ogg differ diff --git a/mods/vehicle_mash/sounds/horn.ogg b/mods/vehicle_mash/sounds/horn.ogg new file mode 100644 index 0000000..dd30686 Binary files /dev/null and b/mods/vehicle_mash/sounds/horn.ogg differ diff --git a/mods/vehicle_mash/sounds/hovercraft_bounce.ogg b/mods/vehicle_mash/sounds/hovercraft_bounce.ogg new file mode 100644 index 0000000..ec63515 Binary files /dev/null and b/mods/vehicle_mash/sounds/hovercraft_bounce.ogg differ diff --git a/mods/vehicle_mash/sounds/hovercraft_jump.ogg b/mods/vehicle_mash/sounds/hovercraft_jump.ogg new file mode 100644 index 0000000..851c42a Binary files /dev/null and b/mods/vehicle_mash/sounds/hovercraft_jump.ogg differ diff --git a/mods/vehicle_mash/sounds/hovercraft_thrust_fade.ogg b/mods/vehicle_mash/sounds/hovercraft_thrust_fade.ogg new file mode 100644 index 0000000..f60dd23 Binary files /dev/null and b/mods/vehicle_mash/sounds/hovercraft_thrust_fade.ogg differ diff --git a/mods/vehicle_mash/sounds/hovercraft_thrust_loop.ogg b/mods/vehicle_mash/sounds/hovercraft_thrust_loop.ogg new file mode 100644 index 0000000..f99ad99 Binary files /dev/null and b/mods/vehicle_mash/sounds/hovercraft_thrust_loop.ogg differ diff --git a/mods/vehicle_mash/template.lua b/mods/vehicle_mash/template.lua new file mode 100644 index 0000000..4e8023d --- /dev/null +++ b/mods/vehicle_mash/template.lua @@ -0,0 +1,32 @@ +local name = "car_template" -- mod name of vehicle + +local definition = { + description = "Template car", -- name as seen in inventory + collisionbox = {0, 0, 0, 0, 0, 0}, -- back, bottom, starboard, front, top, port + onplace_position_adj = 0, -- adjust placement position up/down + is_boat = false, -- does vehicle travel on water? + player_rotation = {x=0,y=0,z=0}, -- rotate player so they sit facing the correct direction + driver_attach_at = {x=0,y=0,z=0}, -- attach the driver at + driver_eye_offset = {x=0, y=0, z=0}, -- offset for first person driver view + number_of_passengers = 0, -- testing: 0 for none, do not increase at this time! + passenger_attach_at = {x=0,y=0,z=0}, -- attach the passenger, if applicable, at + passenger_eye_offset = {x=0, y=0, z=0}, -- offset for first person passenger view + inventory_image = "filename.png", -- image to use in inventory + wield_image = "filename.png", -- image to use in hand + wield_scale = {x=1, y=1, z=1}, -- + visual = "mesh", -- what type of object (mesh, cube, etc...) + mesh = "filename.ext", -- mesh model to use + textures = {"filename.png"}, -- mesh texture(s) + visual_size = {x=1, y=1}, -- adjust vehicle size + stepheight = 0, -- what can the vehicle climb over?, 0.6 = climb slabs, 1.1 = climb nodes + max_speed_forward = 10, -- vehicle maximum forward speed + max_speed_reverse = 5, -- vehicle maximum reverse speed + accel = 1, -- how fast vehicle accelerates + braking = 2, -- how fast can the vehicle stop + turn_speed = 2, -- how quick can the vehicle turn + drop_on_destroy = "", -- what gets dropped when vehicle is destroyed + recipe = {} -- crafting recipe +} + +-- nothing to change down here +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/textures/boat_inventory.png b/mods/vehicle_mash/textures/boat_inventory.png new file mode 100644 index 0000000..e075663 Binary files /dev/null and b/mods/vehicle_mash/textures/boat_inventory.png differ diff --git a/mods/vehicle_mash/textures/boat_wield.png b/mods/vehicle_mash/textures/boat_wield.png new file mode 100644 index 0000000..ca62b14 Binary files /dev/null and b/mods/vehicle_mash/textures/boat_wield.png differ diff --git a/mods/vehicle_mash/textures/boats_inventory.png b/mods/vehicle_mash/textures/boats_inventory.png new file mode 100644 index 0000000..f9d082e Binary files /dev/null and b/mods/vehicle_mash/textures/boats_inventory.png differ diff --git a/mods/vehicle_mash/textures/boats_wield.png b/mods/vehicle_mash/textures/boats_wield.png new file mode 100644 index 0000000..f998b5b Binary files /dev/null and b/mods/vehicle_mash/textures/boats_wield.png differ diff --git a/mods/vehicle_mash/textures/car_126r.png b/mods/vehicle_mash/textures/car_126r.png new file mode 100644 index 0000000..8432394 Binary files /dev/null and b/mods/vehicle_mash/textures/car_126r.png differ diff --git a/mods/vehicle_mash/textures/car_126r_inventory.png b/mods/vehicle_mash/textures/car_126r_inventory.png new file mode 100644 index 0000000..df63f72 Binary files /dev/null and b/mods/vehicle_mash/textures/car_126r_inventory.png differ diff --git a/mods/vehicle_mash/textures/car_126r_wield.png b/mods/vehicle_mash/textures/car_126r_wield.png new file mode 100644 index 0000000..df63f72 Binary files /dev/null and b/mods/vehicle_mash/textures/car_126r_wield.png differ diff --git a/mods/vehicle_mash/textures/car_black.png b/mods/vehicle_mash/textures/car_black.png new file mode 100644 index 0000000..400849a Binary files /dev/null and b/mods/vehicle_mash/textures/car_black.png differ diff --git a/mods/vehicle_mash/textures/car_blue.png b/mods/vehicle_mash/textures/car_blue.png new file mode 100644 index 0000000..257b8a8 Binary files /dev/null and b/mods/vehicle_mash/textures/car_blue.png differ diff --git a/mods/vehicle_mash/textures/car_brown.png b/mods/vehicle_mash/textures/car_brown.png new file mode 100644 index 0000000..7b3d801 Binary files /dev/null and b/mods/vehicle_mash/textures/car_brown.png differ diff --git a/mods/vehicle_mash/textures/car_cyan.png b/mods/vehicle_mash/textures/car_cyan.png new file mode 100644 index 0000000..7427582 Binary files /dev/null and b/mods/vehicle_mash/textures/car_cyan.png differ diff --git a/mods/vehicle_mash/textures/car_dark_green.png b/mods/vehicle_mash/textures/car_dark_green.png new file mode 100644 index 0000000..2a5d3b9 Binary files /dev/null and b/mods/vehicle_mash/textures/car_dark_green.png differ diff --git a/mods/vehicle_mash/textures/car_dark_grey.png b/mods/vehicle_mash/textures/car_dark_grey.png new file mode 100644 index 0000000..4743628 Binary files /dev/null and b/mods/vehicle_mash/textures/car_dark_grey.png differ diff --git a/mods/vehicle_mash/textures/car_f1.png b/mods/vehicle_mash/textures/car_f1.png new file mode 100644 index 0000000..dc6b88d Binary files /dev/null and b/mods/vehicle_mash/textures/car_f1.png differ diff --git a/mods/vehicle_mash/textures/car_f1_inventory.png b/mods/vehicle_mash/textures/car_f1_inventory.png new file mode 100644 index 0000000..a3b4bcf Binary files /dev/null and b/mods/vehicle_mash/textures/car_f1_inventory.png differ diff --git a/mods/vehicle_mash/textures/car_f1_wield.png b/mods/vehicle_mash/textures/car_f1_wield.png new file mode 100644 index 0000000..fc0e050 Binary files /dev/null and b/mods/vehicle_mash/textures/car_f1_wield.png differ diff --git a/mods/vehicle_mash/textures/car_green.png b/mods/vehicle_mash/textures/car_green.png new file mode 100644 index 0000000..07b7062 Binary files /dev/null and b/mods/vehicle_mash/textures/car_green.png differ diff --git a/mods/vehicle_mash/textures/car_grey.png b/mods/vehicle_mash/textures/car_grey.png new file mode 100644 index 0000000..a63bab3 Binary files /dev/null and b/mods/vehicle_mash/textures/car_grey.png differ diff --git a/mods/vehicle_mash/textures/car_magenta.png b/mods/vehicle_mash/textures/car_magenta.png new file mode 100644 index 0000000..e6f0f4b Binary files /dev/null and b/mods/vehicle_mash/textures/car_magenta.png differ diff --git a/mods/vehicle_mash/textures/car_orange.png b/mods/vehicle_mash/textures/car_orange.png new file mode 100644 index 0000000..f3003d4 Binary files /dev/null and b/mods/vehicle_mash/textures/car_orange.png differ diff --git a/mods/vehicle_mash/textures/car_pink.png b/mods/vehicle_mash/textures/car_pink.png new file mode 100644 index 0000000..78201fe Binary files /dev/null and b/mods/vehicle_mash/textures/car_pink.png differ diff --git a/mods/vehicle_mash/textures/car_red.png b/mods/vehicle_mash/textures/car_red.png new file mode 100644 index 0000000..4518e19 Binary files /dev/null and b/mods/vehicle_mash/textures/car_red.png differ diff --git a/mods/vehicle_mash/textures/car_violet.png b/mods/vehicle_mash/textures/car_violet.png new file mode 100644 index 0000000..72654d5 Binary files /dev/null and b/mods/vehicle_mash/textures/car_violet.png differ diff --git a/mods/vehicle_mash/textures/car_white.png b/mods/vehicle_mash/textures/car_white.png new file mode 100644 index 0000000..4e32b39 Binary files /dev/null and b/mods/vehicle_mash/textures/car_white.png differ diff --git a/mods/vehicle_mash/textures/car_yellow.png b/mods/vehicle_mash/textures/car_yellow.png new file mode 100644 index 0000000..434dbe6 Binary files /dev/null and b/mods/vehicle_mash/textures/car_yellow.png differ diff --git a/mods/vehicle_mash/textures/hot_rod.png b/mods/vehicle_mash/textures/hot_rod.png new file mode 100644 index 0000000..e4f4151 Binary files /dev/null and b/mods/vehicle_mash/textures/hot_rod.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_blue.png b/mods/vehicle_mash/textures/hovercraft_blue.png new file mode 100644 index 0000000..76d7ade Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_blue.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_blue_inv.png b/mods/vehicle_mash/textures/hovercraft_blue_inv.png new file mode 100644 index 0000000..e7b0e7d Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_blue_inv.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_green.png b/mods/vehicle_mash/textures/hovercraft_green.png new file mode 100644 index 0000000..d775609 Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_green.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_green_inv.png b/mods/vehicle_mash/textures/hovercraft_green_inv.png new file mode 100644 index 0000000..ee5bdce Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_green_inv.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_red.png b/mods/vehicle_mash/textures/hovercraft_red.png new file mode 100644 index 0000000..b3d8bec Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_red.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_red_inv.png b/mods/vehicle_mash/textures/hovercraft_red_inv.png new file mode 100644 index 0000000..c03785e Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_red_inv.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_yellow.png b/mods/vehicle_mash/textures/hovercraft_yellow.png new file mode 100644 index 0000000..bf5bb82 Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_yellow.png differ diff --git a/mods/vehicle_mash/textures/hovercraft_yellow_inv.png b/mods/vehicle_mash/textures/hovercraft_yellow_inv.png new file mode 100644 index 0000000..aa9133c Binary files /dev/null and b/mods/vehicle_mash/textures/hovercraft_yellow_inv.png differ diff --git a/mods/vehicle_mash/textures/inv_car_black.png b/mods/vehicle_mash/textures/inv_car_black.png new file mode 100644 index 0000000..1f60d1e Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_black.png differ diff --git a/mods/vehicle_mash/textures/inv_car_blue.png b/mods/vehicle_mash/textures/inv_car_blue.png new file mode 100644 index 0000000..365171e Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_blue.png differ diff --git a/mods/vehicle_mash/textures/inv_car_brown.png b/mods/vehicle_mash/textures/inv_car_brown.png new file mode 100644 index 0000000..0a66832 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_brown.png differ diff --git a/mods/vehicle_mash/textures/inv_car_cyan.png b/mods/vehicle_mash/textures/inv_car_cyan.png new file mode 100644 index 0000000..28db88b Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_cyan.png differ diff --git a/mods/vehicle_mash/textures/inv_car_dark_green.png b/mods/vehicle_mash/textures/inv_car_dark_green.png new file mode 100644 index 0000000..20f534f Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_dark_green.png differ diff --git a/mods/vehicle_mash/textures/inv_car_dark_grey.png b/mods/vehicle_mash/textures/inv_car_dark_grey.png new file mode 100644 index 0000000..e832cdd Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_dark_grey.png differ diff --git a/mods/vehicle_mash/textures/inv_car_green.png b/mods/vehicle_mash/textures/inv_car_green.png new file mode 100644 index 0000000..072878e Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_green.png differ diff --git a/mods/vehicle_mash/textures/inv_car_grey.png b/mods/vehicle_mash/textures/inv_car_grey.png new file mode 100644 index 0000000..e1da748 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_grey.png differ diff --git a/mods/vehicle_mash/textures/inv_car_magenta.png b/mods/vehicle_mash/textures/inv_car_magenta.png new file mode 100644 index 0000000..1dc80c7 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_magenta.png differ diff --git a/mods/vehicle_mash/textures/inv_car_orange.png b/mods/vehicle_mash/textures/inv_car_orange.png new file mode 100644 index 0000000..6ee1a53 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_orange.png differ diff --git a/mods/vehicle_mash/textures/inv_car_pink.png b/mods/vehicle_mash/textures/inv_car_pink.png new file mode 100644 index 0000000..10cdac2 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_pink.png differ diff --git a/mods/vehicle_mash/textures/inv_car_red.png b/mods/vehicle_mash/textures/inv_car_red.png new file mode 100644 index 0000000..ba2e131 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_red.png differ diff --git a/mods/vehicle_mash/textures/inv_car_violet.png b/mods/vehicle_mash/textures/inv_car_violet.png new file mode 100644 index 0000000..e95743b Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_violet.png differ diff --git a/mods/vehicle_mash/textures/inv_car_white.png b/mods/vehicle_mash/textures/inv_car_white.png new file mode 100644 index 0000000..3bd7b39 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_white.png differ diff --git a/mods/vehicle_mash/textures/inv_car_yellow.png b/mods/vehicle_mash/textures/inv_car_yellow.png new file mode 100644 index 0000000..52e3b68 Binary files /dev/null and b/mods/vehicle_mash/textures/inv_car_yellow.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car1back.png b/mods/vehicle_mash/textures/mesecar_car1back.png new file mode 100644 index 0000000..d52b605 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car1back.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car1front.png b/mods/vehicle_mash/textures/mesecar_car1front.png new file mode 100644 index 0000000..2b825cf Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car1front.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car1leftside.png b/mods/vehicle_mash/textures/mesecar_car1leftside.png new file mode 100644 index 0000000..94289da Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car1leftside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car1rightside.png b/mods/vehicle_mash/textures/mesecar_car1rightside.png new file mode 100644 index 0000000..f83ebcd Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car1rightside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car1top.png b/mods/vehicle_mash/textures/mesecar_car1top.png new file mode 100644 index 0000000..bf2accb Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car1top.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car2back.png b/mods/vehicle_mash/textures/mesecar_car2back.png new file mode 100644 index 0000000..c0f0897 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car2back.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car2front.png b/mods/vehicle_mash/textures/mesecar_car2front.png new file mode 100644 index 0000000..80db81a Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car2front.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car2leftside.png b/mods/vehicle_mash/textures/mesecar_car2leftside.png new file mode 100644 index 0000000..c3dbd8d Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car2leftside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car2rightside.png b/mods/vehicle_mash/textures/mesecar_car2rightside.png new file mode 100644 index 0000000..733e3e0 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car2rightside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car2top.png b/mods/vehicle_mash/textures/mesecar_car2top.png new file mode 100644 index 0000000..dca622d Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car2top.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car3back.png b/mods/vehicle_mash/textures/mesecar_car3back.png new file mode 100644 index 0000000..a933a2a Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car3back.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car3front.png b/mods/vehicle_mash/textures/mesecar_car3front.png new file mode 100644 index 0000000..6d33407 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car3front.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car3leftside.png b/mods/vehicle_mash/textures/mesecar_car3leftside.png new file mode 100644 index 0000000..9dbf37c Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car3leftside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car3rightside.png b/mods/vehicle_mash/textures/mesecar_car3rightside.png new file mode 100644 index 0000000..dbc3f19 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car3rightside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car3top.png b/mods/vehicle_mash/textures/mesecar_car3top.png new file mode 100644 index 0000000..0b80e76 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car3top.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car4back.png b/mods/vehicle_mash/textures/mesecar_car4back.png new file mode 100644 index 0000000..52b628c Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car4back.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car4front.png b/mods/vehicle_mash/textures/mesecar_car4front.png new file mode 100644 index 0000000..717f860 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car4front.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car4leftside.png b/mods/vehicle_mash/textures/mesecar_car4leftside.png new file mode 100644 index 0000000..7ca24ce Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car4leftside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car4rightside.png b/mods/vehicle_mash/textures/mesecar_car4rightside.png new file mode 100644 index 0000000..8a4bb61 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car4rightside.png differ diff --git a/mods/vehicle_mash/textures/mesecar_car4top.png b/mods/vehicle_mash/textures/mesecar_car4top.png new file mode 100644 index 0000000..5dc219f Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_car4top.png differ diff --git a/mods/vehicle_mash/textures/mesecar_carbase.png b/mods/vehicle_mash/textures/mesecar_carbase.png new file mode 100644 index 0000000..18eca26 Binary files /dev/null and b/mods/vehicle_mash/textures/mesecar_carbase.png differ diff --git a/mods/vehicle_mash/textures/mesetest.png b/mods/vehicle_mash/textures/mesetest.png new file mode 100644 index 0000000..229ac37 Binary files /dev/null and b/mods/vehicle_mash/textures/mesetest.png differ diff --git a/mods/vehicle_mash/textures/motor.png b/mods/vehicle_mash/textures/motor.png new file mode 100644 index 0000000..57693f9 Binary files /dev/null and b/mods/vehicle_mash/textures/motor.png differ diff --git a/mods/vehicle_mash/textures/nyan_ride.png b/mods/vehicle_mash/textures/nyan_ride.png new file mode 100644 index 0000000..2e24707 Binary files /dev/null and b/mods/vehicle_mash/textures/nyan_ride.png differ diff --git a/mods/vehicle_mash/textures/oerkki_bliss.png b/mods/vehicle_mash/textures/oerkki_bliss.png new file mode 100644 index 0000000..e095472 Binary files /dev/null and b/mods/vehicle_mash/textures/oerkki_bliss.png differ diff --git a/mods/vehicle_mash/textures/road_master.png b/mods/vehicle_mash/textures/road_master.png new file mode 100644 index 0000000..0828715 Binary files /dev/null and b/mods/vehicle_mash/textures/road_master.png differ diff --git a/mods/vehicle_mash/textures/rowboat_inventory.png b/mods/vehicle_mash/textures/rowboat_inventory.png new file mode 100644 index 0000000..086bb92 Binary files /dev/null and b/mods/vehicle_mash/textures/rowboat_inventory.png differ diff --git a/mods/vehicle_mash/textures/rowboat_wield.png b/mods/vehicle_mash/textures/rowboat_wield.png new file mode 100644 index 0000000..ea60fd6 Binary files /dev/null and b/mods/vehicle_mash/textures/rowboat_wield.png differ diff --git a/mods/vehicle_mash/textures/steel_frame.png b/mods/vehicle_mash/textures/steel_frame.png new file mode 100644 index 0000000..1de2b0d Binary files /dev/null and b/mods/vehicle_mash/textures/steel_frame.png differ diff --git a/mods/vehicle_mash/textures/tire.png b/mods/vehicle_mash/textures/tire.png new file mode 100644 index 0000000..2c46386 Binary files /dev/null and b/mods/vehicle_mash/textures/tire.png differ diff --git a/mods/vehicle_mash/textures/windshield.png b/mods/vehicle_mash/textures/windshield.png new file mode 100644 index 0000000..51f9ced Binary files /dev/null and b/mods/vehicle_mash/textures/windshield.png differ diff --git a/mods/vehicle_mash/violet.lua b/mods/vehicle_mash/violet.lua new file mode 100644 index 0000000..48d660e --- /dev/null +++ b/mods/vehicle_mash/violet.lua @@ -0,0 +1,10 @@ + +local name = "car_violet" +local definition = ... + +definition.description = "Violet car" +definition.inventory_image = "inv_car_violet.png" +definition.wield_image = "inv_car_violet.png" +definition.textures = {"car_violet.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/white.lua b/mods/vehicle_mash/white.lua new file mode 100644 index 0000000..60826aa --- /dev/null +++ b/mods/vehicle_mash/white.lua @@ -0,0 +1,10 @@ + +local name = "car_white" +local definition = ... + +definition.description = "White car" +definition.inventory_image = "inv_car_white.png" +definition.wield_image = "inv_car_white.png" +definition.textures = {"car_white.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vehicle_mash/yellow.lua b/mods/vehicle_mash/yellow.lua new file mode 100644 index 0000000..71d01b0 --- /dev/null +++ b/mods/vehicle_mash/yellow.lua @@ -0,0 +1,10 @@ + +local name = "car_yellow" +local definition = ... + +definition.description = "Yellow car" +definition.inventory_image = "inv_car_yellow.png" +definition.wield_image = "inv_car_yellow.png" +definition.textures = {"car_yellow.png"} + +vehicle_mash.register_vehicle("vehicle_mash:"..name, definition) diff --git a/mods/vessels/README.txt b/mods/vessels/README.txt new file mode 100644 index 0000000..5bb798c --- /dev/null +++ b/mods/vessels/README.txt @@ -0,0 +1,22 @@ +Minetest Game mod: vessels +========================== +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Vanessa Ezekowitz (LGPL 2.1) +Modified by Perttu Ahola (LGPL 2.1) +Various Minetest developers and contributors (LGPL 2.1) + +Authors of media (textures) +--------------------------- +All not listed below, Vanessa Ezekowitz (CC BY-SA 3.0) + +The following textures were modified by Thomas-S (CC BY-SA 3.0): + vessels_drinking_glass.png + vessels_drinking_glass_inv.png + vessels_glass_bottle.png + vessels_steel_bottle.png + +The following texture was created by Wuzzy (CC BY-SA 3.0): + vessels_shelf_slot.png (based on vessels_glass_bottle.png) diff --git a/mods/vessels/depends.txt b/mods/vessels/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/vessels/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/vessels/init.lua b/mods/vessels/init.lua new file mode 100644 index 0000000..688413f --- /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 = "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/vessels/license.txt b/mods/vessels/license.txt new file mode 100644 index 0000000..de16a3b --- /dev/null +++ b/mods/vessels/license.txt @@ -0,0 +1,52 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2012-2016 celeron55, Perttu Ahola +Copyright (C) 2012-2016 Various Minetest developers and contributors + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Vanessa Ezekowitz +Copyright (C) 2016 Thomas-S + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/vessels/textures/vessels_drinking_glass.png b/mods/vessels/textures/vessels_drinking_glass.png new file mode 100644 index 0000000..d5037b8 Binary files /dev/null and b/mods/vessels/textures/vessels_drinking_glass.png differ diff --git a/mods/vessels/textures/vessels_drinking_glass_inv.png b/mods/vessels/textures/vessels_drinking_glass_inv.png new file mode 100644 index 0000000..9992bd9 Binary files /dev/null and b/mods/vessels/textures/vessels_drinking_glass_inv.png differ diff --git a/mods/vessels/textures/vessels_glass_bottle.png b/mods/vessels/textures/vessels_glass_bottle.png new file mode 100644 index 0000000..6ea37db Binary files /dev/null and b/mods/vessels/textures/vessels_glass_bottle.png differ diff --git a/mods/vessels/textures/vessels_glass_fragments.png b/mods/vessels/textures/vessels_glass_fragments.png new file mode 100644 index 0000000..7c6c488 Binary files /dev/null and b/mods/vessels/textures/vessels_glass_fragments.png differ diff --git a/mods/vessels/textures/vessels_shelf.png b/mods/vessels/textures/vessels_shelf.png new file mode 100644 index 0000000..87c69b2 Binary files /dev/null and b/mods/vessels/textures/vessels_shelf.png differ diff --git a/mods/vessels/textures/vessels_shelf_slot.png b/mods/vessels/textures/vessels_shelf_slot.png new file mode 100644 index 0000000..ff29082 Binary files /dev/null and b/mods/vessels/textures/vessels_shelf_slot.png differ diff --git a/mods/vessels/textures/vessels_steel_bottle.png b/mods/vessels/textures/vessels_steel_bottle.png new file mode 100644 index 0000000..61d3071 Binary files /dev/null and b/mods/vessels/textures/vessels_steel_bottle.png differ diff --git a/mods/voice/depends.txt b/mods/voice/depends.txt new file mode 100644 index 0000000..9487075 --- /dev/null +++ b/mods/voice/depends.txt @@ -0,0 +1 @@ +utils diff --git a/mods/voice/init.lua b/mods/voice/init.lua new file mode 100644 index 0000000..7b3703b --- /dev/null +++ b/mods/voice/init.lua @@ -0,0 +1,34 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +-- Get the base path. +local base_path = minetest.get_modpath(minetest.get_current_modname()) + +dofile(base_path .. "/voice.lua") +dofile(base_path .. "/radio.lua") + +voice.activate() \ No newline at end of file diff --git a/mods/voice/radio.lua b/mods/voice/radio.lua new file mode 100644 index 0000000..170e538 --- /dev/null +++ b/mods/voice/radio.lua @@ -0,0 +1,68 @@ +local playerchannel = {} + +local function get_radiousers(channel) + local players = {} + for player, chan in pairs(playerchannel) do + if chan == channel then + table.insert(players, player) + end + end + return players +end + +local function radio_message(channel, message) + for id, player in pairs(get_radiousers(channel)) do + minetest.chat_send_player(player, message) + end +end + +minetest.register_chatcommand("r", { + params = "", + description = "Send text to send over radio.", + privs = {shout = true}, + func = function(name, param) + if playerchannel[name] then + voice.speak(minetest.get_player_by_name(name), param, voice.whisper_parameters) + radio_message(playerchannel[name], "<"..name.."> ("..playerchannel[name].."): "..param) + else + return false, "You aren't in a radio channel!" + end + end +}) + +minetest.register_chatcommand("radio", { + params = "", + description = "Usage: /radio join [channel], /radio who, /radio leave", + privs = {shout = true}, + func = function(name, param) + local param2 = string.match(param, "^join ([%a%d_-]+)") + if param == "" then + if playerchannel[name] then + voice.speak(minetest.get_player_by_name(name), param, voice.whisper_parameters) + radio_message(playerchannel[name], "<"..name.."> ("..playerchannel[name].."): "..param) + else + return false, "See /help radio." + end + end + if param == "leave" then + if not playerchannel[name] then return false, "You aren't in a radio channel!" end + radio_message(playerchannel[name], name.." has left "..playerchannel[name]..".") + playerchannel[name] = nil + return true + end + if param == "who" then + if not playerchannel[name] then return false, "You aren't in a radio channel!" end + local text = "Players in "..playerchannel[name]..":" + for id, player in pairs(get_radiousers(playerchannel[name])) do + text = text.." "..player + end + minetest.chat_send_player(name, text) + end + if param2 then + if param2 == "" then return false, "You must enter the channel you wish to join." end + playerchannel[name] = param2 + radio_message(playerchannel[name], name.." has joined "..param2.."!") + return true + end + end +}) \ No newline at end of file diff --git a/mods/voice/voice.lua b/mods/voice/voice.lua new file mode 100644 index 0000000..f0cbb24 --- /dev/null +++ b/mods/voice/voice.lua @@ -0,0 +1,386 @@ +--[[ +Copyright (c) 2015, Robert 'Bobby' Zenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--]] + + +--- Voice is a system to make the chat of Minetest more like a voice. +-- +-- The only function that should be called from the client is activate. +voice = { + --- Type constant for a global message. + TYPE_GLOBAL = "global", + + --- Type constant for a shouted message. + TYPE_SHOUT = "shout", + + --- Type constant for a talked message. + TYPE_TALK = "talk", + + --- Type constant for a whispered message. + TYPE_WHISPER = "whisper", + + --- If the system should be activated automatically. + activate_automatically = settings.get_bool("voice_activate", true), + + --- If the system is active/has been activated. + active = false, + + --- The privilege that is needed for using the global command. + global_privilege = settings.get_string("voice_global_privilege", "voice_global"), + + --- The line of sight modification, which means that if the target does not + -- have line of sight with the source, this mod will be applied to + -- the range to limit it. + line_of_sight_mod = settings.get_number("voice_line_of_sight_mod", 0.40), + + --- The callbacks for when a message is send. + message_callbacks = List:new(), + + --- The parameters for talking. + + --- The parameters for shouting. + shout_parameters = { + --- Everything within this range (inclusive) will be understandable. + understandable = settings.get_number("voice_shout_understandable", 45), + + --- Everything within this range (inclusive) will be abstruse, which + -- means that only part of the message (depending on the distance) will + -- be understandable. + abstruse = settings.get_number("voice_shout_abstruse", 60), + + --- Everything within this range (inclusive) will not be understandable. + incomprehensible = settings.get_number("voice_shout_incomprehensible", 80), + + -- The type of these parameters. + type = "shout" + }, + + talk_parameters = { + --- Everything within this range (inclusive) will be understandable. + understandable = settings.get_number("voice_talk_understandable", 6), + + --- Everything within this range (inclusive) will be abstruse, which + -- means that only part of the message (depending on the distance) will + -- be understandable. + abstruse = settings.get_number("voice_talk_abstruse", 12), + + --- Everything within this range (inclusive) will not be understandable. + incomprehensible = settings.get_number("voice_talk_incomprehenisble", 17), + + -- The type of these parameters. + type = "talk" + }, + + --- The parameters for whispering. + whisper_parameters = { + --- Everything within this range (inclusive) will be understandable. + understandable = settings.get_number("voice_whisper_understandable", 3), + + --- Everything within this range (inclusive) will be abstruse, which + -- means that only part of the message (depending on the distance) will + -- be understandable. + abstruse = settings.get_number("voice_whisper_abstruse", 4), + + --- Everything within this range (inclusive) will not be understandable. + incomprehensible = settings.get_number("voice_whisper_incomprehensible", 5), + + -- The type of these parameters. + type = "whisper" + } +} + + +--- Abstruses the given message. That means that parts of it will be blanked, +-- based on the rate. +-- +-- @param message The message to abstruse. +-- @param rate The rate at which to abstruse the message, a value between +-- 0 and 1, with 1 being everything abstrused. +-- @return The abstrused message. +function voice.abstruse(message, rate) + local abstruse_message = "" + + for index = 1, string.len(message), 1 do + local piece = string.sub(message, index, index) + + -- Only abstruse words, leave dots, quotes etc. in place. + if string.find(piece, "%w") ~= nil then + if voice.random(rate) then + abstruse_message = abstruse_message .. "." + else + abstruse_message = abstruse_message .. piece + end + else + abstruse_message = abstruse_message .. piece + end + end + + return abstruse_message +end + +--- Activates the voice system. +function voice.activate() + if voice.activate_automatically then + voice.activate_internal() + end +end + +--- Activates the system, without checking the configuration. +function voice.activate_internal() + if not voice.active then + minetest.register_privilege(voice.global_privilege, { + description = "The privilege needed to use the global chat.", + give_to_singleplayer = true + }) + + --minetest.register_on_chat_message(voice.on_chat_message) + + voice.register_chatcommand("t", "talk", "Talk", voice.talk_parameters) + voice.register_chatcommand("s", "shout", "Shout", voice.shout_parameters) + voice.register_chatcommand("w", "whisper", "Whisper", voice.whisper_parameters) + voice.register_global_chatcommand() + + voice.active = true + end +end + +--- Checks if the given distance is in the given range, considering +-- the line of sight. +-- +-- @param distance The distance. +-- @param range The range. +-- @param line_of_sight If there is line of sight. +-- @return true if it is in range. +function voice.in_range(distance, range, line_of_sight) + if line_of_sight then + return distance <= range + else + return distance <= (range * voice.line_of_sight_mod) + end +end + +--- Invokes all registered message callbacks. +-- +-- @param player The player that is sending the message. +-- @param type The type of the message. +-- @param message The message to be send. +-- @return true if the message should be suppressed, and the second return +-- value is the modified message. +function voice.invoke_message_callbacks(player, type, message) + local suppress = false + voice.message_callbacks:foreach(function(callback, index) + local modified_suppress = nil + local modified_message = nil + + modified_suppress, modified_message = callback( + player, + type, + suppress, + message) + + if modified_suppress ~= nil then + suppress = modified_suppress + end + if modified_message ~= nil then + message = modified_message + end + end) + + return suppress, message +end + +--- Muffles the given messages, meaning replaces everything with dots. +-- +-- @param message The message to muffle. +-- @return The muffled message. +function voice.muffle(message) + -- Replace only words. + return string.gsub(message, "%w", ".") +end + +--- Callback for if a chat message is send. +-- +-- @param name The name of the sending player. +-- @param message The message that is send. +-- @return true if the message has been handled and should not be send. +function voice.on_chat_message(name, message) + local player = minetest.get_player_by_name(name) + + voice.speak(player, message, voice.talk_parameters) + + -- Do not send the message further, we've done that. + return true +end + +--- Gets a random chance based on the given rate. +-- +-- @param rate The rate. A number between 0 and 1, with 1 being always true. +-- @return true if there is a chance. +function voice.random(rate) + return (random.next_int(0, 100) / 100) <= rate +end + +--- Registers a chat chommand. +-- +-- @param short The short command. +-- @param long The long command. +-- @param description The description of the command. +-- @param parameters The parameters to use. +function voice.register_chatcommand(short, long, description, parameters) + local command = { + description = description, + params = "", + func = function(player_name, message) + local player = minetest.get_player_by_name(player_name) + + voice.speak(player, message, parameters) + + return true + end + } + + minetest.register_chatcommand(short, command) + minetest.register_chatcommand(long, command) +end + +--- Registers the chat command for global messaging. +function voice.register_global_chatcommand() + minetest.register_privilege("voice_global", { + description = "Allows the player to send global messages.", + give_to_singleplayer = true + }) + + local command = { + description = "Global", + params = "", + privs = { [voice.global_privilege] = true }, + func = function(player_name, message) + local suppress, message = voice.invoke_message_callbacks( + minetest.get_player_by_name(player_name), + voice.TYPE_GLOBAL, + message) + + if suppress then + return true + end + + minetest.chat_send_all("<" .. player_name .. ">(Global): " .. message) + minetest.log("CHAT: <" .. player_name .. ">(Global): " .. message) + irc:say("<" .. player_name .. ">(Global): " .. message) + + return true + end + } + + minetest.register_chatcommand("g", command) + minetest.register_chatcommand("global", command) +end + +--- Registers a callback that is invoked for every message that is send. +-- +-- @param callback The callback that is to be registered, a function that +-- accepts the player (Player object), the type of the message +-- (TYPE_* constants), if the message is going to be send and +-- the message itself. The callback can return two values, +-- the first, a boolean that is true if the message should +-- be suppressed, and the second being a message to be sent +-- instead. The last callback can determine if the message +-- should actually be send or not. +function voice.register_on_message(callback) + voice.message_callbacks:add(callback) +end + +--- Speaks the given message. +-- +-- @param speaking_player The speaking player, a Player Object. +-- @param message The message that is spoken. +-- @param parameters The speak parameters, like talk_parameters. +function voice.speak(speaking_player, message, parameters) + local suppress, message = voice.invoke_message_callbacks( + speaking_player, + parameters.type, + message) + + if suppress then + return + end + + local source_name = speaking_player:get_player_name() + local source_pos = speaking_player:getpos() + local short = string.sub(parameters.type, 1, 1) + + for index, player in ipairs(minetest.get_connected_players()) do + local target_name = player:get_player_name() + + if source_name ~= target_name then + local target_pos = player:getpos() + local distance = mathutil.distance(source_pos, target_pos) + + -- Test now if we're even in range, minor optimization. + if distance <= parameters.incomprehensible then + -- TODO The y+1 thing is to emulate players height, might be wrong. + local line_of_sight = minetest.line_of_sight({ + x = source_pos.x, + y = source_pos.y + 1, + z = source_pos.z + }, { + x = target_pos.x, + y = target_pos.y + 1, + z = target_pos.z + }) + local short_type = string.sub(parameters.type, 1, 1) + short = short_type + + if voice.in_range(distance, parameters.understandable, line_of_sight) then + minetest.chat_send_player( + target_name, + "<" .. source_name .. "> (" .. short_type .. ") " .. message) + elseif voice.in_range(distance, parameters.abstruse, line_of_sight) then + local rate = transform.linear(distance, parameters.understandable, parameters.abstruse) + + -- Here we have a random chance that the player name is muffeld. + if voice.random(rate) then + minetest.chat_send_player( + target_name, + "<" .. voice.muffle(source_name) .. ">(" .. short_type .. "): " .. voice.abstruse(message, rate)) + else + minetest.chat_send_player( + target_name, + "<" .. source_name .. ">(" .. short_type .. "): " .. voice.abstruse(message, rate)) + end + elseif voice.in_range(distance, parameters.incomprehensible, line_of_sight) then + minetest.chat_send_player( + target_name, + "<" .. voice.muffle(source_name) .. ">(" .. short_type .. "): " .. voice.muffle(message)) + end + end + end + end + minetest.log("CHAT: <" .. source_name .. "> (" .. short .. ") " .. message) + if not minetest.get_player_privs(source_name).interact then + --irc:say("<" .. source_name .. "> (" .. short .. ") " .. message) + end +end + diff --git a/mods/walking_light/init.lua b/mods/walking_light/init.lua new file mode 100644 index 0000000..61f300e --- /dev/null +++ b/mods/walking_light/init.lua @@ -0,0 +1,122 @@ +local players = {} +local player_positions = {} +local last_wielded = {} + +function round(num) + return math.floor(num + 0.5) +end + +minetest.register_on_joinplayer(function(player) + local player_name = player:get_player_name() + table.insert(players, player_name) + last_wielded[player_name] = player:get_wielded_item():get_name() + local pos = player:getpos() + local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} + local wielded_item = player:get_wielded_item():get_name() + if wielded_item ~= "default:torch" and wielded_item ~= "xdecor:candle" and wielded_item ~= "xdecor:lantern" then + -- Neuberechnung des Lichts erzwingen + if minetest.get_node(rounded_pos) == "walking_light:light" then + minetest.env:add_node(rounded_pos,{type="node",name="air"}) + end + end + player_positions[player_name] = {} + player_positions[player_name]["x"] = rounded_pos.x; + player_positions[player_name]["y"] = rounded_pos.y; + player_positions[player_name]["z"] = rounded_pos.z; +end) + +minetest.register_on_leaveplayer(function(player) + local player_name = player:get_player_name() + for i,v in ipairs(players) do + if v == player_name then + table.remove(players, i) + last_wielded[player_name] = nil + -- Neuberechnung des Lichts erzwingen + local pos = player:getpos() + local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} + local headblock = minetest.env:get_node(rounded_pos) + if headblock.name == "walking_light:light" then + minetest.env:add_node(rounded_pos,{type="node",name="air"}) + end + player_positions[player_name]["x"] = nil + player_positions[player_name]["y"] = nil + player_positions[player_name]["z"] = nil + player_positions[player_name]["m"] = nil + player_positions[player_name] = nil + end + end +end) + +minetest.register_globalstep(function(dtime) + for i,player_name in ipairs(players) do + local player = minetest.env:get_player_by_name(player_name) + local wielded_item = player:get_wielded_item():get_name() + if wielded_item == "default:torch" or wielded_item == "xdecor:candle" or wielded_item == "xdecor:lantern" then + -- Fackel ist in der Hand + local pos = player:getpos() + local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} + if (last_wielded[player_name] ~= "default:torch" and last_wielded[player_name] ~= "xdecor:candle" and last_wielded[player_name] ~= "xdecor:lantern") or (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then + -- Fackel gerade in die Hand genommen oder zu neuem Node bewegt + local is_air = minetest.env:get_node_or_nil(rounded_pos) + if is_air == nil or (is_air ~= nil and (is_air.name == "air" or is_air.name == "walking_light:light")) then + -- wenn an aktueller Position "air" ist, Fackellicht setzen + minetest.env:add_node(rounded_pos,{type="node",name="walking_light:light"}) + end + if (player_positions[player_name]["x"] ~= rounded_pos.x or player_positions[player_name]["y"] ~= rounded_pos.y or player_positions[player_name]["z"] ~= rounded_pos.z) then + -- wenn Position gender, dann altes Licht lschen + local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} + -- Neuberechnung des Lichts erzwingen + local is_light = minetest.env:get_node_or_nil(old_pos) + if is_light ~= nil and is_light.name == "walking_light:light" then + minetest.env:add_node(old_pos,{type="node",name="air"}) + end + end + -- gemerkte Position ist nun die gerundete neue Position + player_positions[player_name]["x"] = rounded_pos.x + player_positions[player_name]["y"] = rounded_pos.y + player_positions[player_name]["z"] = rounded_pos.z + end + + last_wielded[player_name] = wielded_item; + elseif last_wielded[player_name] == "default:torch" or last_wielded[player_name] == "xdecor:candle" or last_wielded[player_name] == "xdecor:lantern" then + -- Fackel nicht in der Hand, aber beim letzten Durchgang war die Fackel noch in der Hand + local pos = player:getpos() + local rounded_pos = {x=round(pos.x),y=round(pos.y)+1,z=round(pos.z)} + repeat + local is_light = minetest.env:get_node_or_nil(rounded_pos) + if is_light ~= nil and is_light.name == "walking_light:light" then + -- minetest.env:remove_node(rounded_pos) + -- Erzwinge Neuberechnung des Lichts + minetest.env:add_node(rounded_pos,{type="node",name="air"}) + end + until minetest.env:get_node_or_nil(rounded_pos) ~= "walking_light:light" + local old_pos = {x=player_positions[player_name]["x"], y=player_positions[player_name]["y"], z=player_positions[player_name]["z"]} + repeat + is_light = minetest.env:get_node_or_nil(old_pos) + if is_light ~= nil and is_light.name == "walking_light:light" then + -- minetest.env:remove_node(old_pos) + -- Erzwinge Neuberechnung des Lichts + minetest.env:add_node(old_pos,{type="node",name="air"}) + end + until minetest.env:get_node_or_nil(old_pos) ~= "walking_light:light" + last_wielded[player_name] = wielded_item + end + end +end) + +minetest.register_node("walking_light:light", { + drawtype = "glasslike", + tile_images = {"walking_light.png"}, + -- tile_images = {"walking_light_debug.png"}, + inventory_image = minetest.inventorycube("walking_light.png"), + paramtype = "light", + walkable = false, + is_ground_content = true, + light_propagates = true, + sunlight_propagates = true, + light_source = 13, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0}, + }, +}) \ No newline at end of file diff --git a/mods/walking_light/textures/walking_light.png b/mods/walking_light/textures/walking_light.png new file mode 100644 index 0000000..334cb07 Binary files /dev/null and b/mods/walking_light/textures/walking_light.png differ diff --git a/mods/walking_light/textures/walking_light_debug.png b/mods/walking_light/textures/walking_light_debug.png new file mode 100644 index 0000000..43e41bd Binary files /dev/null and b/mods/walking_light/textures/walking_light_debug.png differ diff --git a/mods/walking_light/textures/walking_light_mesepick.png b/mods/walking_light/textures/walking_light_mesepick.png new file mode 100644 index 0000000..9f98229 Binary files /dev/null and b/mods/walking_light/textures/walking_light_mesepick.png differ diff --git a/mods/walls/README.txt b/mods/walls/README.txt new file mode 100644 index 0000000..0389174 --- /dev/null +++ b/mods/walls/README.txt @@ -0,0 +1,7 @@ +Minetest Game mod: walls +======================== +See license.txt for license information. + +Authors of source code +---------------------- +Auke Kok (LGPL 2.1) diff --git a/mods/walls/depends.txt b/mods/walls/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/walls/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/walls/init.lua b/mods/walls/init.lua new file mode 100644 index 0000000..bee8e46 --- /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" }, + 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/walls/license.txt b/mods/walls/license.txt new file mode 100644 index 0000000..ccfaf1c --- /dev/null +++ b/mods/walls/license.txt @@ -0,0 +1,14 @@ +License of source code +---------------------- + +GNU Lesser General Public License, version 2.1 +Copyright (C) 2015 Auke Kok + +This program is free software; you can redistribute it and/or modify it under the terms +of the GNU Lesser General Public License as published by the Free Software Foundation; +either version 2.1 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU Lesser General Public License for more details: +https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html diff --git a/mods/wool/README.txt b/mods/wool/README.txt new file mode 100644 index 0000000..a66677d --- /dev/null +++ b/mods/wool/README.txt @@ -0,0 +1,16 @@ +Minetest Game mod: wool +======================= +See license.txt for license information. + +Authors of source code +---------------------- +Originally by Perttu Ahola (celeron55) (MIT) +Various Minetest developers and contributors (MIT) + +Authors of media (textures) +--------------------------- +Cisoun (CC BY-SA 3.0): + wool_black.png wool_brown.png wool_dark_green.png wool_green.png + wool_magenta.png wool_pink.png wool_violet.png wool_yellow.png + wool_blue.png wool_cyan.png wool_dark_grey.png wool_grey.png + wool_orange.png wool_red.png wool_white.png diff --git a/mods/wool/depends.txt b/mods/wool/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/mods/wool/depends.txt @@ -0,0 +1 @@ +default diff --git a/mods/wool/init.lua b/mods/wool/init.lua new file mode 100644 index 0000000..a36e4dd --- /dev/null +++ b/mods/wool/init.lua @@ -0,0 +1,47 @@ +-- This uses a trick: you can first define the recipes using all of the base +-- colors, and then some recipes using more specific colors for a few non-base +-- colors available. When crafting, the last recipes will be checked first. + +local dyes = { + {"white", "White", "basecolor_white"}, + {"grey", "Grey", "basecolor_grey"}, + {"black", "Black", "basecolor_black"}, + {"red", "Red", "basecolor_red"}, + {"yellow", "Yellow", "basecolor_yellow"}, + {"green", "Green", "basecolor_green"}, + {"cyan", "Cyan", "basecolor_cyan"}, + {"blue", "Blue", "basecolor_blue"}, + {"magenta", "Magenta", "basecolor_magenta"}, + {"orange", "Orange", "excolor_orange"}, + {"violet", "Violet", "excolor_violet"}, + {"brown", "Brown", "unicolor_dark_orange"}, + {"pink", "Pink", "unicolor_light_red"}, + {"dark_grey", "Dark Grey", "unicolor_darkgrey"}, + {"dark_green", "Dark Green", "unicolor_dark_green"}, +} + +for i = 1, #dyes do + local name, desc, craft_color_group = unpack(dyes[i]) + + minetest.register_node("wool:" .. name, { + description = desc .. " Wool", + tiles = {"wool_" .. name .. ".png"}, + is_ground_content = false, + groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 3, + flammable = 3, wool = 1}, + sounds = default.node_sound_defaults(), + }) + + minetest.register_craft{ + type = "shapeless", + output = "wool:" .. name, + recipe = {"group:dye," .. craft_color_group, "group:wool"}, + } +end + + +-- legacy + +-- Backwards compatibility with jordach's 16-color wool mod +minetest.register_alias("wool:dark_blue", "wool:blue") +minetest.register_alias("wool:gold", "wool:yellow") diff --git a/mods/wool/license.txt b/mods/wool/license.txt new file mode 100644 index 0000000..9310163 --- /dev/null +++ b/mods/wool/license.txt @@ -0,0 +1,60 @@ +License of source code +---------------------- + +The MIT License (MIT) +Copyright (C) 2012-2016 Perttu Ahola (celeron55) +Copyright (C) 2012-2016 Various Minetest developers and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +For more details: +https://opensource.org/licenses/MIT + + +Licenses of media (textures) +---------------------------- + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +Copyright (C) 2012-2016 Cisoun + +You are free to: +Share — copy and redistribute the material in any medium or format. +Adapt — remix, transform, and build upon the material for any purpose, even commercially. +The licensor cannot revoke these freedoms as long as you follow the license terms. + +Under the following terms: + +Attribution — You must give appropriate credit, provide a link to the license, and +indicate if changes were made. You may do so in any reasonable manner, but not in any way +that suggests the licensor endorses you or your use. + +ShareAlike — If you remix, transform, or build upon the material, you must distribute +your contributions under the same license as the original. + +No additional restrictions — You may not apply legal terms or technological measures that +legally restrict others from doing anything the license permits. + +Notices: + +You do not have to comply with the license for elements of the material in the public +domain or where your use is permitted by an applicable exception or limitation. +No warranties are given. The license may not give you all of the permissions necessary +for your intended use. For example, other rights such as publicity, privacy, or moral +rights may limit how you use the material. + +For more details: +http://creativecommons.org/licenses/by-sa/3.0/ diff --git a/mods/wool/textures/wool_black.png b/mods/wool/textures/wool_black.png new file mode 100644 index 0000000..700d439 Binary files /dev/null and b/mods/wool/textures/wool_black.png differ diff --git a/mods/wool/textures/wool_blue.png b/mods/wool/textures/wool_blue.png new file mode 100644 index 0000000..a074986 Binary files /dev/null and b/mods/wool/textures/wool_blue.png differ diff --git a/mods/wool/textures/wool_brown.png b/mods/wool/textures/wool_brown.png new file mode 100644 index 0000000..2620dfd Binary files /dev/null and b/mods/wool/textures/wool_brown.png differ diff --git a/mods/wool/textures/wool_cyan.png b/mods/wool/textures/wool_cyan.png new file mode 100644 index 0000000..395b6ac Binary files /dev/null and b/mods/wool/textures/wool_cyan.png differ diff --git a/mods/wool/textures/wool_dark_green.png b/mods/wool/textures/wool_dark_green.png new file mode 100644 index 0000000..0e73999 Binary files /dev/null and b/mods/wool/textures/wool_dark_green.png differ diff --git a/mods/wool/textures/wool_dark_grey.png b/mods/wool/textures/wool_dark_grey.png new file mode 100644 index 0000000..7253696 Binary files /dev/null and b/mods/wool/textures/wool_dark_grey.png differ diff --git a/mods/wool/textures/wool_green.png b/mods/wool/textures/wool_green.png new file mode 100644 index 0000000..dcb663b Binary files /dev/null and b/mods/wool/textures/wool_green.png differ diff --git a/mods/wool/textures/wool_grey.png b/mods/wool/textures/wool_grey.png new file mode 100644 index 0000000..2f4c338 Binary files /dev/null and b/mods/wool/textures/wool_grey.png differ diff --git a/mods/wool/textures/wool_magenta.png b/mods/wool/textures/wool_magenta.png new file mode 100644 index 0000000..5c2c4a7 Binary files /dev/null and b/mods/wool/textures/wool_magenta.png differ diff --git a/mods/wool/textures/wool_orange.png b/mods/wool/textures/wool_orange.png new file mode 100644 index 0000000..a059f36 Binary files /dev/null and b/mods/wool/textures/wool_orange.png differ diff --git a/mods/wool/textures/wool_pink.png b/mods/wool/textures/wool_pink.png new file mode 100644 index 0000000..8e90140 Binary files /dev/null and b/mods/wool/textures/wool_pink.png differ diff --git a/mods/wool/textures/wool_red.png b/mods/wool/textures/wool_red.png new file mode 100644 index 0000000..da12ecf Binary files /dev/null and b/mods/wool/textures/wool_red.png differ diff --git a/mods/wool/textures/wool_violet.png b/mods/wool/textures/wool_violet.png new file mode 100644 index 0000000..d7d6783 Binary files /dev/null and b/mods/wool/textures/wool_violet.png differ diff --git a/mods/wool/textures/wool_white.png b/mods/wool/textures/wool_white.png new file mode 100644 index 0000000..88f1e2f Binary files /dev/null and b/mods/wool/textures/wool_white.png differ diff --git a/mods/wool/textures/wool_yellow.png b/mods/wool/textures/wool_yellow.png new file mode 100644 index 0000000..2b0f048 Binary files /dev/null and b/mods/wool/textures/wool_yellow.png differ diff --git a/mods/worldedge/README.md b/mods/worldedge/README.md new file mode 100644 index 0000000..cebff04 --- /dev/null +++ b/mods/worldedge/README.md @@ -0,0 +1,13 @@ +worldedge +========= + +A Minetest Mod that teleports you to the other side of the map when you reach its edge. +This gives the illusion that that world is round and you can walk all the way around. + +You can change the worlds edge by changing the first variable in init.lua + local edge = 30000 + +License of code: DWYWPL + +Written by Amaz +Modified by Don diff --git a/mods/worldedge/depends.txt b/mods/worldedge/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/mods/worldedge/description.txt b/mods/worldedge/description.txt new file mode 100644 index 0000000..1672213 --- /dev/null +++ b/mods/worldedge/description.txt @@ -0,0 +1 @@ +Allows you to limit the size of your world. diff --git a/mods/worldedge/init.lua b/mods/worldedge/init.lua new file mode 100644 index 0000000..4e6c8cd --- /dev/null +++ b/mods/worldedge/init.lua @@ -0,0 +1,143 @@ +-------------- +-- TODO: Check for terrain height + +-- Defines the edge of a world +local edge = 1000 +-- Radius which should be checked for a good teleportation place +local radius = 5 +-------------- + +local count = 0 +local waiting_list = {} +--[[ Explanation of waiting_list table + Index = Player name + Value = { + player = Player to teleport + pos = Destination + obj = Attacked entity + notified = When the player must wait longer... + } +]] + +minetest.register_globalstep(function(dtime) + count = count + dtime + if count < 3 then + return + end + count = 0 + + for k, v in pairs(waiting_list) do + if v.player and v.player:is_player() then + local pos = get_surface_pos(v.pos) + if pos then + v.obj:setpos(pos) + minetest.after(0.2, function(p, o) + p:set_detach() + o:remove() + end, v.player, v.obj) + waiting_list[k] = nil + elseif not v.notified then + v.notified = true + minetest.chat_send_player(k, "Sorry, we have not found a free place yet. Please be patient.") + end + else + v.obj:remove() + waiting_list[k] = nil + end + end + + local newedge = edge - 5 + -- Check if the players are near the edge and teleport them + local players = minetest.get_connected_players() + for i, player in ipairs(players) do + local name = player:get_player_name() + if not waiting_list[name] then + local pos = vector.round(player:getpos()) + local newpos = nil + if pos.x >= edge then + newpos = {x = -newedge, y = 10, z = pos.z} + elseif pos.x <= -edge then + newpos = {x = newedge, y = 10, z = pos.z} + end + + if pos.z >= edge then + newpos = {x = pos.x, y = 10, z = -newedge} + elseif pos.z <= -edge then + newpos = {x = pos.x, y = 10, z = newedge} + end + + -- Teleport the player + if newpos then + minetest.chat_send_player(name, "Please wait a few seconds. We will teleport you soon.") + local obj = minetest.add_entity(newpos, "worldedge:lock") + player:set_attach(obj, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) + waiting_list[name] = { + player = player, + pos = newpos, + obj = obj + } + obj:setpos(newpos) + end + end + end +end) + +function get_surface_pos(pos) + local minp = { + x = pos.x - radius - 1, + y = -10, + z = pos.z - radius - 1 + } + local maxp = { + x = pos.x + radius - 1, + y = 50, + z = pos.z + radius - 1 + } + + local c_air = minetest.get_content_id("air") + local c_ignore = minetest.get_content_id("ignore") + + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(minp, maxp) + local area = VoxelArea:new{MinEdge = emin, MaxEdge = emax} + local data = vm:get_data() + + local seen_air = false + local deepest_place = vector.new(pos) + deepest_place.y = 50 + + for x = minp.x, maxp.x do + for z = minp.z, maxp.z do + local solid = 0 + for y = deepest_place.y, -10, -1 do + local node = data[area:index(x, y, z)] + if y < deepest_place.y and node == c_air then + deepest_place = vector.new(x, y, z) + seen_air = true + end + if solid > 5 then + -- Do not find caves! + break + end + if node ~= c_air and node ~= c_ignore then + solid = solid + 1 + end + end + end + end + + if seen_air then + return deepest_place + else + return false + end +end + +minetest.register_entity("worldedge:lock", { + initial_properties = { + is_visible = false + }, + on_activate = function(staticdata, dtime_s) + --self.object:set_armor_groups({immortal = 1}) + end +}) \ No newline at end of file diff --git a/mods/worldedge/licence.txt b/mods/worldedge/licence.txt new file mode 100644 index 0000000..f50419b --- /dev/null +++ b/mods/worldedge/licence.txt @@ -0,0 +1,13 @@ +DO WHAT YOU WANT TO PUBLIC LICENSE +or abbreviated DWYWPL + +December 2nd 2015 +License Copyright (C) 2015 Michael Tomaino (PlatinumArts@gmail.com) +www.sandboxgamemaker.com/DWYWPL/ + +DO WHAT YOU WANT TO PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +1. You are allowed to do whatever you want to with what content is using this license. +2. This content is provided 'as-is', without any express or implied warranty. In no event +will the authors be held liable for any damages arising from the use of this content. diff --git a/mods/worldedge/mod.conf b/mods/worldedge/mod.conf new file mode 100644 index 0000000..ed5ed80 --- /dev/null +++ b/mods/worldedge/mod.conf @@ -0,0 +1 @@ +name = worldedge diff --git a/mods/worldedge/screenshot.png b/mods/worldedge/screenshot.png new file mode 100644 index 0000000..4c5a208 Binary files /dev/null and b/mods/worldedge/screenshot.png differ diff --git a/mods/xban2/bower.json b/mods/xban2/bower.json new file mode 100644 index 0000000..1e1576d --- /dev/null +++ b/mods/xban2/bower.json @@ -0,0 +1,15 @@ +{ + "name": "xban2", + "description": "Ban system extension with support for temporary bans.", + "keywords": [ + "ban", + "administration", + "system", + "server" + ], + "homepage": "http://github.com/kaeza/minetest-xban2.git", + "authors": [ + "Diego Martínez " + ], + "license": "BSD 2-Clause" +} diff --git a/mods/xban2/dbimport.lua b/mods/xban2/dbimport.lua new file mode 100644 index 0000000..ec9293d --- /dev/null +++ b/mods/xban2/dbimport.lua @@ -0,0 +1,38 @@ + +xban.importers = { } + +dofile(xban.MP.."/importers/minetest.lua") +dofile(xban.MP.."/importers/v1.lua") +dofile(xban.MP.."/importers/v2.lua") + +minetest.register_chatcommand("xban_dbi", { + description = "Import old databases", + params = "", + privs = { server=true }, + func = function(name, params) + if params == "--list" then + local names = { } + for name in pairs(xban.importers) do + table.insert(names, name) + end + minetest.chat_send_player(name, + ("[xban] Known importers: %s"):format( + table.concat(names, ", "))) + return + elseif not xban.importers[params] then + minetest.chat_send_player(name, + ("[xban] Unknown importer `%s'"):format(params)) + minetest.chat_send_player(name, "[xban] Try `--list'") + return + end + local f = xban.importers[params] + local ok, err = f() + if ok then + minetest.chat_send_player(name, + "[xban] Import successfull") + else + minetest.chat_send_player(name, + ("[xban] Import failed: %s"):format(err)) + end + end, +}) diff --git a/mods/xban2/doc/API.md b/mods/xban2/doc/API.md new file mode 100644 index 0000000..bee7c42 --- /dev/null +++ b/mods/xban2/doc/API.md @@ -0,0 +1,32 @@ + +## Extended Ban Mod API + +### ban_player + +`xban.ban_player(player_or_ip, source, expires, reason)` + +Ban a player and all of his/her alternative names and IPs. + +#### Arguments: + +* `player_or_ip` - Player to search for and ban. See note 1 below. +* `source` - Source of the ban. See note 2 below. +* `expires` - Time at which the ban expires. If nil, ban is permanent. +* `reason` - Reason for ban. + +### unban_player + +`xban.unban_player(player_or_ip, source)` + +Unban a player and all of his/her alternative names and IPs. + +#### Arguments: + +* `player_or_ip` - Player to search for and unban. +* `source` - Source of the ban. See note 2 below. + +### Notes + +* 1: If player is currently online, all his accounts are kicked. +* 2: Mods using the xban API are advised to use the `"modname:source"` +format for `source` (for example: `"anticheat:main"`). diff --git a/mods/xban2/doc/dbformat.txt b/mods/xban2/doc/dbformat.txt new file mode 100644 index 0000000..71b25a5 --- /dev/null +++ b/mods/xban2/doc/dbformat.txt @@ -0,0 +1,45 @@ + +Database is a regular Lua script that returns a table. + +Table has a single named field `timestamp' containing the time_t the +DB was last saved. It's not used in the mod and is only meant for +external use (I don't find filesystem timestamps too reliable). + +Next is a simple array (number indices) of entries. + +Each entry contains following fields: + +[1] = { + -- Names/IPs associated with this entry + names = { + ["foo"] = true, + ["bar"] = true, + ["123.45.67.89"] = true, + }, + banned = true, -- Whether this user is banned + -- Other fields do not apply if false + time = 12341234, -- Time of last ban (*1) + expires = 43214321 -- Time at which ban expires (*2) + -- If nil, permanent ban + reason = "asdf", -- Reason for ban + source = "qwerty", -- Source of ban (*2) + record = { + [1] = { + source = "asdf", + reason = "qwerty", + time = 12341234, + expires = 43214321, + }, + [1] = { + source = "asdf", + reason = "Unbanned", -- When unbanned + time = 12341234, + }, + }, +} + +Notes: +(*1) All times are expressed in whatever unit `os.time()' uses + (`time_t' on most (all?) systems). +(*2) Mods using the xban API are advised to use the "modname:source" + format for `source' (for example: "anticheat:main"). diff --git a/mods/xban2/gui.lua b/mods/xban2/gui.lua new file mode 100644 index 0000000..fb0c1df --- /dev/null +++ b/mods/xban2/gui.lua @@ -0,0 +1,134 @@ + +local FORMNAME = "xban2:main" +local MAXLISTSIZE = 100 + +local strfind, format = string.find, string.format + +local ESC = minetest.formspec_escape + +local function make_list(filter) + filter = filter or "" + local list, n, dropped = { }, 0, false + for k in pairs(minetest.auth_table) do + if strfind(k, filter, 1, true) then + if n >= MAXLISTSIZE then + dropped = true + break + end + n=n+1 list[n] = k + end + end + table.sort(list) + return list, dropped +end + +local states = { } + +local function get_state(name) + local state = states[name] + if not state then + state = { index=1, filter="" } + states[name] = state + state.list, state.dropped = make_list() + end + return state +end + +local function get_record_simple(name) + local e = xban.find_entry(name) + if not e then + return nil, ("No entry for `%s'"):format(name) + elseif (not e.record) or (#e.record == 0) then + return nil, ("`%s' has no ban records"):format(name) + end + local record = { } + for _, rec in ipairs(e.record) do + local msg = (os.date("%Y-%m-%d %H:%M:%S", rec.time).." | " + ..(rec.reason or "No reason given.")) + table.insert(record, msg) + end + return record, e.record +end + +local function make_fs(name) + local state = get_state(name) + local list, filter = state.list, state.filter + local pli, ei = state.player_index or 1, state.entry_index or 0 + if pli > #list then + pli = #list + end + local fs = { + "size[16,12]", + "label[0,-.1;Filter]", + "field[1.5,0;12.8,1;filter;;"..ESC(filter).."]", + "button[14,-.3;2,1;search;Search]", + } + local fsn = #fs + fsn=fsn+1 fs[fsn] = format("textlist[0,.8;4,9.3;player;%s;%d;0]", + table.concat(list, ","), pli) + local record_name = list[pli] + if record_name then + local record, e = get_record_simple(record_name) + if record then + for i, r in ipairs(record) do + record[i] = ESC(r) + end + fsn=fsn+1 fs[fsn] = format( + "textlist[4.2,.8;11.7,9.3;entry;%s;%d;0]", + table.concat(record, ","), ei) + local rec = e[ei] + if rec then + fsn=fsn+1 fs[fsn] = format("label[0,10.3;%s]", + ESC("Source: "..(rec.source or "") + .."\nTime: "..os.date("%c", rec.time) + .."\n"..(rec.expires and + os.date("%c", rec.expires) or "")), + pli) + end + else + fsn=fsn+1 fs[fsn] = "textlist[4.2,.8;11.7,9.3;err;"..ESC(e)..";0]" + fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]" + end + else + local e = "No entry matches the query." + fsn=fsn+1 fs[fsn] = "textlist[4.2,.8;11.7,9.3;err;"..ESC(e)..";0]" + fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]" + end + return table.concat(fs) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname ~= FORMNAME then return end + local name = player:get_player_name() + local state = get_state(name) + if fields.player then + local t = minetest.explode_textlist_event(fields.player) + if (t.type == "CHG") or (t.type == "DCL") then + state.player_index = t.index + minetest.show_formspec(name, FORMNAME, make_fs(name)) + end + return + end + if fields.entry then + local t = minetest.explode_textlist_event(fields.entry) + if (t.type == "CHG") or (t.type == "DCL") then + state.entry_index = t.index + minetest.show_formspec(name, FORMNAME, make_fs(name)) + end + return + end + if fields.search then + local filter = fields.filter or "" + state.filter = filter + state.list = make_list(filter) + minetest.show_formspec(name, FORMNAME, make_fs(name)) + end +end) + +minetest.register_chatcommand("xban_gui", { + description = "Show XBan GUI", + params = "", + func = function(name, params) + minetest.show_formspec(name, FORMNAME, make_fs(name)) + end, +}) diff --git a/mods/xban2/importers/minetest.lua b/mods/xban2/importers/minetest.lua new file mode 100644 index 0000000..e19c3c6 --- /dev/null +++ b/mods/xban2/importers/minetest.lua @@ -0,0 +1,29 @@ + +function xban.importers.minetest() + local f, e = io.open(minetest.get_worldpath().."/ipban.txt") + if not f then + return false, "Unable to open `ipban.txt': "..e + end + for line in f:lines() do + local ip, name = line:match("([^|]+)%|(.+)") + if ip and name then + local entry + entry = xban.find_entry(ip, true) + entry.banned = true + entry.reason = "Banned in `ipban.txt'" + entry.names[name] = true + entry.names[ip] = true + entry.time = os.time() + entry.expires = nil + entry.source = "xban:importer_minetest" + table.insert(entry.record, { + source = entry.source, + reason = entry.reason, + time = entry.time, + expires = nil, + }) + end + end + f:close() + return true +end diff --git a/mods/xban2/importers/v1.lua b/mods/xban2/importers/v1.lua new file mode 100644 index 0000000..a3722c7 --- /dev/null +++ b/mods/xban2/importers/v1.lua @@ -0,0 +1,33 @@ + +function xban.importers.v1() + local f, e = io.open(minetest.get_worldpath().."/players.iplist") + if not f then + return false, "Unable to open `players.iplist': "..e + end + for line in f:lines() do + local list = line:split("|") + if #list >= 2 then + local banned = (list[1]:sub(1, 1) == "!") + local entry + entry = xban.find_entry(list[1], true) + entry.banned = banned + for _, name in ipairs(list) do + entry.names[name] = true + end + if banned then + entry.reason = "Banned in `players.iplist'" + entry.time = os.time() + entry.expires = nil + entry.source = "xban:importer_v1" + table.insert(entry.record, { + source = entry.source, + reason = entry.reason, + time = entry.time, + expires = nil, + }) + end + end + end + f:close() + return true +end diff --git a/mods/xban2/importers/v2.lua b/mods/xban2/importers/v2.lua new file mode 100644 index 0000000..fd29966 --- /dev/null +++ b/mods/xban2/importers/v2.lua @@ -0,0 +1,35 @@ + +function xban.importers.v2() + return pcall(function() + local f, e = io.open(minetest.get_worldpath().."/players.iplist.v2") + if not f then + error("Unable to open `players.iplist.v2': "..e) + end + local text = f:read("*a") + f:close() + local db = minetest.deserialize(text) + for _, e in ipairs(db) do + for name in pairs(e.names) do + local entry = xban.find_entry(name, true) + if entry.source ~= "xban:importer_v2" then + for nm in pairs(e.names) do + entry.names[nm] = true + end + if e.banned then + entry.banned = true + entry.reason = e.banned + entry.source = "xban:importer_v2" + entry.time = e.time + entry.expires = e.expires + table.insert(entry.record, { + source = entry.source, + reason = entry.reason, + time = entry.time, + expires = entry.expires, + }) + end + end + end + end + end) +end diff --git a/mods/xban2/init.lua b/mods/xban2/init.lua new file mode 100644 index 0000000..81818a8 --- /dev/null +++ b/mods/xban2/init.lua @@ -0,0 +1,331 @@ + +xban = { MP = minetest.get_modpath(minetest.get_current_modname()) } + +dofile(xban.MP.."/serialize.lua") + +local db = { } +local tempbans = { } + +local DEF_SAVE_INTERVAL = 300 -- 5 minutes +local DEF_DB_FILENAME = minetest.get_worldpath().."/xban.db" + +local DB_FILENAME = minetest.setting_get("xban.db_filename") +local SAVE_INTERVAL = tonumber( + minetest.setting_get("xban.db_save_interval")) or DEF_SAVE_INTERVAL + +if (not DB_FILENAME) or (DB_FILENAME == "") then + DB_FILENAME = DEF_DB_FILENAME +end + +local function make_logger(level) + return function(text, ...) + minetest.log(level, "[xban] "..text:format(...)) + end +end + +local ACTION = make_logger("action") +local INFO = make_logger("info") +local WARNING = make_logger("warning") +local ERROR = make_logger("error") + +local unit_to_secs = { + s = 1, m = 60, h = 3600, + D = 86400, W = 604800, M = 2592000, Y = 31104000, + [""] = 1, +} + +local function parse_time(t) --> secs + local secs = 0 + for num, unit in t:gmatch("(%d+)([smhDWMY]?)") do + secs = secs + (tonumber(num) * (unit_to_secs[unit] or 1)) + end + return secs +end + +function xban.find_entry(player, create) --> entry, index + for index, e in ipairs(db) do + for name in pairs(e.names) do + if name == player then + return e, index + end + end + end + if create then + print(("Created new entry for `%s'"):format(player)) + local e = { + names = { [player]=true }, + banned = false, + record = { }, + } + table.insert(db, e) + return e, #db + end + return nil +end + +function xban.get_info(player) --> ip_name_list, banned, last_record + local e = xban.find_entry(player) + if not e then + return nil, "No such entry" + end + return e.names, e.banned, e.record[#e.record] +end + +function xban.ban_player(player, source, expires, reason) --> bool, err + local e = xban.find_entry(player, true) + local rec = { + source = source, + time = os.time(), + expires = expires, + reason = reason, + } + table.insert(e.record, rec) + e.names[player] = true + local pl = minetest.get_player_by_name(player) + if pl then + local ip = minetest.get_player_ip(player) + if ip then + e.names[ip] = true + end + e.last_pos = pl:getpos() + end + e.reason = reason + e.time = rec.time + e.expires = expires + e.banned = true + local msg + local date = (expires and os.date("%c", expires) + or "the end of time") + if expires then + table.insert(tempbans, e) + msg = ("Banned: Expires: %s, Reason: %s"):format(date, reason) + else + msg = ("Banned: Reason: %s"):format(reason) + end + for nm in pairs(e.names) do + minetest.kick_player(nm, msg) + end + ACTION("%s bans %s until %s for reason: %s", source, player, + date, reason) + ACTION("Banned Names/IPs: %s", table.concat(e.names, ", ")) + return true +end + +function xban.unban_player(player, source) --> bool, err + local e = xban.find_entry(player) + if not e then + return nil, "No such entry" + end + local rec = { + source = source, + time = os.time(), + reason = "Unbanned", + } + table.insert(e.record, rec) + e.banned = false + e.reason = nil + e.expires = nil + e.time = nil + ACTION("%s unbans %s", source, player) + ACTION("Unbanned Names/IPs: %s", table.concat(e.names, ", ")) + return true +end + +function xban.get_record(player) + local e = xban.find_entry(player) + if not e then + return nil, ("No entry for `%s'"):format(player) + elseif (not e.record) or (#e.record == 0) then + return nil, ("`%s' has no ban records"):format(player) + end + local record = { } + for _, rec in ipairs(e.record) do + local msg = rec.reason or "No reason given." + if rec.expires then + msg = msg..(", Expires: %s"):format(os.date("%c", e.expires)) + end + if rec.source then + msg = msg..", Source: "..rec.source + end + table.insert(record, ("[%s]: %s"):format(os.date("%c", e.time), msg)) + end + local last_pos + if e.last_pos then + last_pos = ("User was last seen at %s"):format( + minetest.pos_to_string(e.last_pos)) + end + return record, last_pos +end + +minetest.register_on_prejoinplayer(function(name, ip) + local e = xban.find_entry(name) or xban.find_entry(ip) + if not e then return end + if e.banned then + local date = (e.expires and os.date("%c", e.expires) + or "the end of time") + return ("Banned: Expires: %s, Reason: %s"):format( + date, e.reason) + end +end) + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + local e = xban.find_entry(name) + local ip = minetest.get_player_ip(name) + if not e then + if ip then + e = xban.find_entry(ip, true) + else + return + end + end + e.names[name] = true + if ip then + e.names[ip] = true + end + e.last_seen = os.time() +end) + +minetest.register_chatcommand("xban", { + description = "XBan a player", + params = " ", + privs = { ban=true }, + func = function(name, params) + local plname, reason = params:match("(%S+)%s+(.+)") + if not (plname and reason) then + return false, "Usage: /xban " + end + xban.ban_player(plname, name, nil, reason) + return true, ("Banned %s."):format(plname) + end, +}) + +minetest.register_chatcommand("xtempban", { + description = "XBan a player temporarily", + params = "