From 04f28c1be53fcccd17daf24c1bff42955a707a9c Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 5 Jan 2017 05:17:16 +0100 Subject: [PATCH] Import new torches mod by BlockMen and sofar --- mods/torches/LICENSE.txt | 502 ++++++++++++++++++++++++ mods/torches/README.txt | 69 +++- mods/torches/changelog.txt | 37 ++ mods/torches/crafting.lua | 14 - mods/torches/description.txt | 1 + mods/torches/init.lua | 413 ++++++++++--------- mods/torches/mod.conf | 1 + mods/torches/models/torch_floor.obj | 50 +++ mods/torches/models/torch_wall.obj | 64 +++ mods/torches/screenshot.png | Bin 0 -> 36243 bytes mods/torches/settingtypes.txt | 9 + mods/torches/textures/torches_fire1.png | Bin 408 -> 0 bytes mods/torches/textures/torches_fire2.png | Bin 561 -> 0 bytes mods/torches/textures/torches_side.png | Bin 195 -> 0 bytes mods/torches/textures/torches_torch.png | Bin 227 -> 0 bytes 15 files changed, 921 insertions(+), 239 deletions(-) create mode 100644 mods/torches/LICENSE.txt create mode 100644 mods/torches/changelog.txt delete mode 100644 mods/torches/crafting.lua create mode 100644 mods/torches/description.txt create mode 100644 mods/torches/mod.conf create mode 100644 mods/torches/models/torch_floor.obj create mode 100644 mods/torches/models/torch_wall.obj create mode 100644 mods/torches/screenshot.png create mode 100644 mods/torches/settingtypes.txt delete mode 100644 mods/torches/textures/torches_fire1.png delete mode 100644 mods/torches/textures/torches_fire2.png delete mode 100644 mods/torches/textures/torches_side.png delete mode 100644 mods/torches/textures/torches_torch.png diff --git a/mods/torches/LICENSE.txt b/mods/torches/LICENSE.txt new file mode 100644 index 00000000..4362b491 --- /dev/null +++ b/mods/torches/LICENSE.txt @@ -0,0 +1,502 @@ + 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/torches/README.txt b/mods/torches/README.txt index 0816b35f..a463b567 100644 --- a/mods/torches/README.txt +++ b/mods/torches/README.txt @@ -1,29 +1,62 @@ Minetest mod "Torches" -======================= -version: 1.1 +====================== -License of source code: WTFPL ------------------------------------------ -(c) Copyright BlockMen (2013) +(c) Copyright BlockMen (2013-2015) +(C) Copyright sofar (2016) -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://sam.zoy.org/wtfpl/COPYING for more details. +About this mod: +~~~~~~~~~~~~~~~ +This mod changes the default torch drawtype from "torchlike" to "mesh", +giving the torch a three dimensional appearance. The mesh contains the +proper pixel mapping to make the animation appear as a particle above +the torch, while in fact the animation is just the texture of the mesh. + +Originally, this mod created in-game alternatives with several +draw styles. The alternatives have been removed and instead of +providing alternate nodes, this mod now directly modifies the existing +nodes. Conversion from the wallmounted style is done through an LBM. + +The wield light part is inspired, but not copied from "walking light", +a mod by "echo". After looking at the code I decided to implement +it from scratch as I found it to be too resource intensive and not +implemented efficiently enough. Still, echo deserves the credit for +the excellent idea. + +Torches is meant for minetest-0.4.14, and does not directly support +older minetest releases. You'll need a recent git, or nightly build. -Using the mod: --------------- +License: +~~~~~~~~ +(c) Copyright BlockMen (2013-2015) -This mod adds 3D torches to Minetest. They also have real flames and look much more realistic. +Textures and Meshes/Models: +CC-BY 3.0 BlockMen +Note that the models were entirely done from scratch by sofar. -Notice: Already placed old torches wont be changed. +Code: +Licensed under the GNU LGPL version 2.1 or higher. +You can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License +as published by the Free Software Foundation; + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt + + +Github: +~~~~~~~ +https://github.com/BlockMen/torches + +Forum: +~~~~~~ +https://forum.minetest.net/viewtopic.php?id=6099 Changelog: ----------- -- Torches on wall dont fall when node under it is dug -- Torches fall directly when not placed on floor or wall -- fixed different placing bugs \ No newline at end of file +~~~~~~~~~~ +see changelog.txt diff --git a/mods/torches/changelog.txt b/mods/torches/changelog.txt new file mode 100644 index 00000000..cab14fd7 --- /dev/null +++ b/mods/torches/changelog.txt @@ -0,0 +1,37 @@ +Changelog: +---------- +1.1 - 1.2.x: +- Torches on wall dont fall when node under it is dug +- Torches fall directly when not placed on floor or wall +- fixed different placing bugs + +1.3: +- Torches only show flames when player is near (13 blocks) +- Old torches are converted to new, ceiling torches are dropped + +1.3.1: +- fix dropping torches when digging a block next to it +- all torches attached to a block get droped when dug + +1.3.2: +- fix crashes by unknown nodes + +2.0: +- Use new mesh drawtype to improve wallmounted torches +- Update particle usage +- New textures; flame texture fix by Yepoleb +- Fix for doors, chests, etc (rightclick support) + +2.1 +- Fix wallmounted torch mesh +- Clean up code, use wallmounted paramtype2 +- Fix torches being placeable on ceilings (reported by kilbith) + +3.0 +- Minetest style added and used by default +- style can be changed via settings +- using Minetest style allows ceiling torches via settings +- Minetest style supports all texturepacks (as long torch shaped) + +3.0.1 +- Fix global variable that caused rarely placing issues (thanks to tchncs for pointing out) diff --git a/mods/torches/crafting.lua b/mods/torches/crafting.lua deleted file mode 100644 index 687f5471..00000000 --- a/mods/torches/crafting.lua +++ /dev/null @@ -1,14 +0,0 @@ -minetest.register_craft({ - type = "fuel", - recipe = "torches:torch", - burntime = 4, -}) - -minetest.register_craft({ - output = 'torches:torch 4', - recipe = { - {'group:coal'}, - {'default:stick'}, - } -}) - diff --git a/mods/torches/description.txt b/mods/torches/description.txt new file mode 100644 index 00000000..1ce04a36 --- /dev/null +++ b/mods/torches/description.txt @@ -0,0 +1 @@ +Mesh-based torches - three dimensional torches for minetest. diff --git a/mods/torches/init.lua b/mods/torches/init.lua index a2cae899..7761c74c 100644 --- a/mods/torches/init.lua +++ b/mods/torches/init.lua @@ -1,231 +1,230 @@ -local VIEW_DISTANCE = 13 -local null = {x=0, y=0, z=0} +-- +-- 3d torch part +-- -local dirs = {{-1,0,-1},{-1,0,0},{0,0,-1}, -{1,0,1},{1,0,0},{0,0,1},{0,1,0}} +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 = 13, + groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + drop = "default:torch", + selection_box = { + type = "wallmounted", + wall_top = {-1/16, -2/16, -1/16, 1/16, 0.5, 1/16}, + wall_bottom = {-1/16, -0.5, -1/16, 1/16, 2/16, 1/16}, + }, + sounds = default.node_sound_wood_defaults(), + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + -- no interaction possible with entities, for now. + return itemstack + end ---fire_particles -local function add_fire(pos) - pos.y = pos.y+0.19 - minetest.add_particle(pos, null, null, 1.1, - 1.5, true, "torches_fire"..tostring(math.random(1,2)) ..".png") - pos.y = pos.y +0.01 - minetest.add_particle(pos, null, null, 0.8, - 1.5, true, "torches_fire"..tostring(math.random(1,2)) ..".png") -end + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick then + return def.on_rightclick(under, node, placer, itemstack, + pointed_thing) or itemstack, false + end ---help functions -function check_attached_node_fdir(p, n) - local def = minetest.registered_nodes[n.name] - local d = {x=0, y=0, z=0} - if def.paramtype2 == "facedir" then - if n.param2 == 0 then - d.z = 1 - elseif n.param2 == 1 then - d.x = 1 - elseif n.param2 == 2 then - d.z = -1 - elseif n.param2 == 3 then - d.x = -1 + local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) + local fakestack = itemstack + local retval + if wdir <= 1 then + retval = fakestack:set_name("default:torch") + else + retval = fakestack:set_name("default:torch_wall") + end + if not retval then + return itemstack + 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 = 13, + 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 = {-0.1, -0.1, -0.1, 0.1, 0.5, 0.1}, + wall_bottom = {-0.1, -0.5, -0.1, 0.1, 0.1, 0.1}, + wall_side = {-0.5, -0.3, -0.1, -0.2, 0.3, 0.1}, + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_lbm({ + name = "torches:convert_wallmounted", + nodenames = {"default:torch", "torches:floor", "torches:wall"}, + action = function(pos, node) + if node.param2 >= 2 then + minetest.set_node(pos, {name = "default:torch_wall", + param2 = node.param2}) + else + minetest.set_node(pos, {name = "default:torch", + param2 = node.param2}) end end - local p2 = {x=p.x+d.x, y=p.y+d.y, z=p.z+d.z} - local nn = minetest.env:get_node(p2).name - local def2 = minetest.registered_nodes[nn] - if def2 and not def2.walkable then +}) + +-- +-- torch wield light +-- + +if not minetest.is_yes(minetest.setting_get("torches_wieldlight_enable") or true) then + return +end +local torchlight_update_interval = minetest.setting_get("torches_wieldlight_interval") or 0.25 + +minetest.register_node("torches:torchlight", { + drawtype = "airlike", + groups = {not_in_creative_inventory = 1}, + walkable = false, + paramtype = "light", + sunlight_propagates = true, + light_source = 11, + pointable = false, + buildable_to = true, + drops = {}, +}) + +-- state tables +local torchlight = {} +local playerlist = {} + +local function wields_torch(player) + if not player then + return false + end + local item = player:get_wielded_item() + if not item then + return false + end + return item:get_name() == "default:torch" +end + +local function wielded_torch(name) + if not torchlight[name] then return false end return true end -local function is_wall(wallparam) - if wallparam == 0 then return false end - local para2 = 0 - if wallparam == 2 then - para2 = 1 - elseif wallparam == 3 then - para2 = 3 - elseif wallparam == 4 then - para2 = 0 - elseif wallparam == 5 then - para2 = 2 - end - return para2 +local function is_torchlight(pos) + local node = minetest.get_node(pos) + return node.name == "torches:torchlight" end -local function player_near(pos) - for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, VIEW_DISTANCE)) do - if object:is_player() then - return true - end +local function remove_torchlight(pos) + if is_torchlight(pos) then + minetest.swap_node(pos, {name = "air"}) end +end +local function place_torchlight(pos) + local name = minetest.get_node(pos).name + if name == "torches:torchlight" then + return true + end + if (minetest.get_node_light(pos) or 0) > 11 then + -- no reason to place torch here, so save a bunch + -- of node updates this way + return false + end + if name == "air" then + minetest.swap_node(pos, {name = "torches:torchlight"}) + return true + end return false end --- abms for flames -minetest.register_abm({ - nodenames = {"torches:wand"}, - interval = 1, - chance = 1, - action = function(pos) - if player_near(pos) then - add_fire(pos) - end +local function get_torchpos(player) + return vector.add({x = 0, y = 1, z = 0}, vector.round(player:getpos())) +end + +minetest.register_on_joinplayer(function(player) + local name = player:get_player_name() + playerlist[name] = true +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + -- don't look at wielded() here, it's likely invalid + if torchlight[name] then + remove_torchlight(torchlight[name]) + torchlight[name] = nil end -}) + playerlist[name] = nil +end) -minetest.register_abm({ - nodenames = {"torches:floor"}, - interval = 1, - chance = 1, - action = function(pos) - if player_near(pos) then - add_fire(pos) - end - end -}) - -minetest.register_craftitem("torches:torch", { - description = "Torch", - inventory_image = "torches_torch.png", - wield_image = "torches_torch.png", - stack_max = 64, - wield_scale = {x=1,y=1,z=1+1/16}, - liquids_pointable = false, - on_place = function(itemstack, placer, pointed_thing) - local pn = placer:get_player_name() - if pointed_thing.type ~= "node" - or string.find(minetest.env:get_node(pointed_thing.above).name, "group:torch") - or string.find(minetest.env:get_node(pointed_thing.above).name, "doors:") then - return itemstack - end - if minetest.is_protected(pointed_thing.above, pn) then - return itemstack - end - local above = pointed_thing.above - local under = pointed_thing.under - local wdir = minetest.dir_to_wallmounted({x = under.x - above.x, y = under.y - above.y, z = under.z - above.z}) - local pos = {x = above.x, y = above.y, z = above.z} - local u_n = minetest.get_node(under) - local udef = minetest.registered_nodes[u_n.name] - if u_n and udef and not udef.walkable then above = under end - u_n = minetest.get_node(above) - udef = minetest.registered_nodes[u_n.name] - if u_n and udef and udef.walkable then return itemstack end - if wdir == 1 then - minetest.env:add_node(above, {name = "torches:floor"}) - if minetest.env:get_node(under).name:find("wallet:wall") == 1 then - update_wall_global(pos) - end - else - minetest.env:add_node(above, {name = "torches:wand", param2 = is_wall(wdir)}) - end - if not wdir == 0 or not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - return itemstack - - end - -}) - -minetest.register_node("torches:floor", { - inventory_image = "default_torch.png", - wield_image = "torches_torch.png", - wield_scale = {x=1,y=1,z=1+2/16}, - drawtype = "nodebox", - tiles = {"torches_torch.png^[transformfy", "default_wood.png", "torches_torch.png", - "torches_torch.png^[transformfx", "torches_torch.png", "torches_torch.png"}, - paramtype = "light", - paramtype2 = "none", - is_ground_content = false, - sunlight_propagates = true, - drop = "default:torch", - walkable = false, - light_source = 13, - groups = {choppy=2,dig_immediate=3,flammable=1,not_in_creative_inventory=1,torch=1,attached_node=1,dig_by_water=1}, - legacy_wallmounted = true, - node_box = { - type = "fixed", - fixed = {-1/16, -0.5, -1/16, 1/16, 2/16, 1/16}, - }, - selection_box = { - type = "fixed", - fixed = {-1/16, -0.5, -1/16, 1/16, 2/16, 1/16}, - }, - --after_dig_node = function(pos, oldnode, oldmetadata, digger) - -- if not digger:is_player() then minetest.add_item(pos, {name="default:torch"}) end - --end, - - update = function(pos,node, pos2) - if pos2.y < pos.y then - minetest.dig_node(pos) - end - end, -}) - -local wall_ndbx = { - {-1/16,-6/16, 6/16, 1/16, -5/16, 0.5}, - {-1/16,-5/16, 5/16, 1/16, -4/16, 7/16}, - {-1/16,-4/16, 4/16, 1/16, -3/16, 6/16}, - {-1/16,-3/16, 3/16, 1/16, -2/16, 5/16}, - {-1/16,-2/16, 2/16, 1/16, -1/16, 4/16}, - {-1/16,-1/16, 1/16, 1/16, 0, 3/16}, - {-1/16,0, 1/16, 1/16, 1/16, 2/16}, - {-1/16, 0, -1/16, 1/16, 2/16, 1/16}, -} - -minetest.register_node("torches:wand", { - inventory_image = "default_torch.png", - wield_image = "torches_torch.png", - wield_scale = {x=1,y=1,z=1+1/16}, - drawtype = "nodebox", - tiles = {"torches_torch.png^[transformfy", "default_wood.png", "torches_side.png", - "torches_side.png^[transformfx", "default_wood.png", "torches_torch.png"}, - - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - sunlight_propagates = true, - walkable = false, - light_source = 13, - groups = {choppy=2,dig_immediate=3,flammable=1,not_in_creative_inventory=1,torch=1,attached_node=1,dig_by_water=1}, - legacy_wallmounted = true, - drop = "default:torch", - node_box = { - type = "fixed", - fixed = wall_ndbx - }, - selection_box = { - type = "fixed", - fixed = {-1/16, -6/16, 7/16, 1/16, 2/16, 2/16}, - }, - update = function(pos,node) - if not check_attached_node_fdir(pos, node) then - minetest.add_item(pos, {name="torches:torch"}) - end - end, - - -}) - -minetest.register_on_dignode(function(pos, oldnode, digger) - if minetest.find_node_near(pos, 1, {"group:torch"}) == nil then return end - for i=1,#dirs do - local v = dirs[i] - local p = {x=pos.x+v[1],y=pos.y+v[2],z=pos.z+v[3]} - local n = minetest.get_node_or_nil(p) - if n and n.name then - local def = minetest.registered_nodes[n.name] - if def and def.update then - def.update(p, n, pos) - end - end +minetest.register_on_shutdown(function() + for i, _ in pairs(torchlight) do + remove_torchlight(torchlight[i]) end end) -dofile(minetest.get_modpath("torches") .. "/crafting.lua") +local function update_torchlight(dtime) + for name, _ in pairs(playerlist) do + local player = minetest.get_player_by_name(name) + local wielded = wielded_torch(name) + local wields = wields_torch(player) + + if not wielded and wields then + local torchpos = get_torchpos(player) + if place_torchlight(torchpos) then + torchlight[name] = vector.new(torchpos) + end + elseif wielded and not wields then + remove_torchlight(torchlight[name]) + torchlight[name] = nil + elseif wielded and wields then + local torchpos = get_torchpos(player) + if not vector.equals(torchpos, torchlight[name]) or + not is_torchlight(torchpos) then + if place_torchlight(torchpos) then + remove_torchlight(torchlight[name]) + torchlight[name] = vector.new(torchpos) + elseif vector.distance(torchlight[name], torchpos) > 2 then + -- player went into some node + remove_torchlight(torchlight[name]) + torchlight[name] = nil + end + end + end + end + minetest.after(torchlight_update_interval, update_torchlight) +end + +minetest.after(torchlight_update_interval, update_torchlight) -minetest.register_alias("default:torch", "torches:torch") diff --git a/mods/torches/mod.conf b/mods/torches/mod.conf new file mode 100644 index 00000000..b8c44b94 --- /dev/null +++ b/mods/torches/mod.conf @@ -0,0 +1 @@ +name = torches diff --git a/mods/torches/models/torch_floor.obj b/mods/torches/models/torch_floor.obj new file mode 100644 index 00000000..e2487efe --- /dev/null +++ b/mods/torches/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/torches/models/torch_wall.obj b/mods/torches/models/torch_wall.obj new file mode 100644 index 00000000..57baa9e6 --- /dev/null +++ b/mods/torches/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/torches/screenshot.png b/mods/torches/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9f85919fd676fc32d3333bcba43c218353785a GIT binary patch literal 36243 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 literal 0 HcmV?d00001 diff --git a/mods/torches/settingtypes.txt b/mods/torches/settingtypes.txt new file mode 100644 index 00000000..3d99e647 --- /dev/null +++ b/mods/torches/settingtypes.txt @@ -0,0 +1,9 @@ + +# Enable wielded torches to light the area around it as the player moves. This is +# somewhat resource intensive and may be disabled to reduce lag. +torches_wieldlight_enable (Enable held torch to emit light) bool false + +# How often the wieldlight should be moved if the player moves with a torch in their +# hand. Reducing this makes it feel more laggy, but reduces the amount of network +# packets sent to clients. +torches_wieldlight_interval (Torch light from held torch update interval) float 0.25 diff --git a/mods/torches/textures/torches_fire1.png b/mods/torches/textures/torches_fire1.png deleted file mode 100644 index 5faa24fc404689deab8bf68d039327f713649a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 408 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznV9?}XV_;ygXEaktG3V_hMQ`Uo ziMIO>njDWPtcl$q)n<12)TA3M{~HfJklzvND&cG*kr&u~HNnuwG0{=r$jP>xjzg0U z@nqFLG@Y}#^4;BMrR58pdHgM(*PO3BUvB4dNP#EhkNyv9ra7Wc0u#JT_BShv_&DhO zx{Ecbf;=uK$bXuzYda zTee3R%UN~f{CWMF`b0i96>r?Aa!u^abhg08eD2zgpHm{fAMv_nvv{ZaJ{hTbWoM!^ zwF>grR6mOL)Or6cCuz#Nrdy3O&Ub9>sW8v`woYN)&5wPeJ8V)8*M6*zxxjPed9Q!h z%ezz$Myegd%!$d()Hap$BWw- Q7#J8lUHx3vIVCg!0J>?h?f?J) diff --git a/mods/torches/textures/torches_fire2.png b/mods/torches/textures/torches_fire2.png deleted file mode 100644 index cc5d675bf8262a0c61c955b4f6ecb318efeb03f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmeAS@N?(olHy`uVBq!ia0y~yU=UznV9?}XV_;ygXje9XmhU&9r>KM^R&ndg8-ajZ}uB`&$oJ zC-5x2^IxAe@&`N18Rs+Q<@fCCS>oC|)b?^evl2JvFT7CyTz`e*8OJ;KYt{BGn8$MK zm+su%5ANA%zgVdKAjzR%nYbh4BU|T_9J^$mnlSIq6;rHhv6yXm#ObC_%2^Ko+1uu2 z>GN>kbC`3=;#^+%zjX@L9l-+fX#zES3q0=Y%XwUqe;>G^@S8_fYo+9)BXWlK)Q?q9 zwh6P|VyL@CT(j-Q3-S7ENA)M4EG|_)DB2M|d2Mym+DSiNuK4lf17DN)IftE0r+=Nu zXWE@zAos{R_y^-7rX$-Y?y$YPq)_i?4dbH~#ZPQR{@F_8-weE}pQRtsWWl)clDb)u zZ``vZlOA4mER@vTci_|8jq@8%-zv<1tH*iIIi~Q&Ji+=ahmIWIv$gX{X5~l5BZ}G@PBLb#&I0+f9^DquRzK>ca?a(Emr7mVk*&gy zOpbVm2}mv5B^a^loZvLYdj2Cxc>Brov WT0K!bHj06Pfx*+&&t;ucLK6T;?fnk` diff --git a/mods/torches/textures/torches_side.png b/mods/torches/textures/torches_side.png deleted file mode 100644 index d8d6505042add49ad5b5e3468e021df22ed811a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUy&}wbX5TxyOtO&-wKM8yEHd?`QabgW>=G=?-S$Y t%;wy)7?{_9xG)Vve diff --git a/mods/torches/textures/torches_torch.png b/mods/torches/textures/torches_torch.png deleted file mode 100644 index 59e79a8fd6a24947d1984d38678a426a2221eb68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4rT@h2A3sW#~2tGECYN(T>t<7Z>cA1Yp7sn zq-bxfLQk~>5vB-6DiTl(t&uQgebL#^B_cHvy#_<2&)c^nfvu>z5 z!@$76SQ6wH%;50sMj8VHLxiV`V~EA+x91Io8WaSa15-pdH$5u)fB06k3Ttoc%KItL zmVbG_xckN2=IBO=SBX4acglqsWMmBZR#mOYYi(xY)4QL;XA*i*LF+-p^8=ixnNs*3 eG%%dzwsACLx}02~9>BoBz~JfX=d#Wzp$Py|7g4qV