pax_global_header00006660000000000000000000000064131436620320014512gustar00rootroot0000000000000052 comment=3764d33490b343b22eaf0d809858de09f3e489c2 unifieddyes-stable-20170925/000077500000000000000000000000001314366203200155455ustar00rootroot00000000000000unifieddyes-stable-20170925/.gitignore000066400000000000000000000000031314366203200175260ustar00rootroot00000000000000*~ unifieddyes-stable-20170925/API.md000066400000000000000000000157201314366203200165050ustar00rootroot00000000000000### API This section details the Unified Dyes API and how to use it with your mods. In your node definition, you must include a few things to interface with Unified Dyes. Here is an example: ```lua minetest.register_node("mymod:colored_node", { description = "My custom colored node", tiles = { "mymod_custom_colored_node.png" }, paramtype = "light", paramtype2 = "color", palette = "unifieddyes_palette_extended.png", place_param2 = 240, groups = {snappy = 1, cracky = 2, ud_param2_colorable = 1} on_construct = unifieddyes.on_construct, after_place_node = unifieddyes.recolor_on_place, after_dig_node = unifieddyes.after_dig_node, }) ``` `paramtype2` must be one of: - "color" this is an 89-color or 256-color node - "colorwallmounted" this is a 32-color node using "wallmounted" mode - "colorfacedir" this node uses one of the "split" 89-color palettes. `palette` must be set to match the `paramtype2` setting, and must be one of: - "unifieddyes_palette.png" - "unifieddyes_palette_extended.png" - "unifieddyes_palette_colorwallmounted.png" - or one of the "split" hues palettes (see below). `place_param2` generally is only needed for the 256-color palette, and should usually be set to 240 (which corresponds to white). `groups` If your node can be colored by punching it with dye, its groups entry must contain the key ud_param2_colorable = 1, among whatever else you'd normally put there. If the node is software-controlled, as might be the case for some mesecons-digilines aware node, then this group key should be omitted. `on_construct` see below. `after_place_node` see below. `after_dig_node` see below. #### Function calls **`unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)`** Call this within your node's `after_place_node` callback to allow Unified Dyes to automatically color the node using the dye you last used on that kind of node The feature will remain active until the dye runs out, or the user places a different kind of colorable node, or the user cancels the feature. **`unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)` `unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)`** These two are used to re-orient `wallmounted` nodes after placing. The former allows positioning to floor, ceiling, and four walls, while the latter restricts the rotation to just the four walls. The latter is most often used with a node whose model is designed so that the four wall positions actually place the model "upright", facing +/- X or Z. This is a hacky way to make a node look like it has basic `facedir` capability, while being able to use the 32-color palette. **`unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2)`** This serves the same purpose as the `fix_rotation_nsew`, but is used to restrict the node's rotation after it's been hit with the screwdriver. **`unifieddyes.select_node(pointed_thing)`** Just what it says on the tin. :-) This function returns a position and node definition of whatever is being pointed at. **`unifieddyes.is_buildable_to(placer_name, ...)`** Again, another obvious one, returns whether or not the pointed node is `buildable_to` (can be overwritten by another node). **`unifieddyes.get_hsv(name)`** Accepts an item name, and returns the corresponding hue, saturation, and value (in that order), as strings. If the item name is a color (not greyscale), then hue will be the basic hue for that color, saturation will be empty string for high saturation or `_s50` for low, and value will be `dark_`, `medium_`, `light_`, or an empty string if it's full color. If the item name is greyscale, then hue will contain `white`, `light_grey`, `grey`, `dark_grey`, or `black`, saturation will (ironically) be an empty string, and value will be `light_`, `dark_`, or empty string if it's medium grey. For example: "mymod:mynode_red" would return ("red", "", "") "mymod:mynode_light_blue" would return ("blue", "", "light_") "mymod:mynode_dark_yellow_s50" would return ("yellow", "_s50", "dark_") "mymod:mynode_dark_grey" would return ("dark_grey", "", "dark_") **`unifieddyes.getpaletteidx(color, palette_type)`** When given a `color` string (in the form of "dye:foo" or "unifieddyes:foo") and `palette_type` (either a boolean or string), this function returns the numerical index into that palette, and the hue name as a string. `false` or `nil`: the 89-color palette `true`: 89 color "split" palette mode, for nodes that need full `facedir` support. In this case, the hue field would match whichever of the 13 "split" palettes the node is using, and the index will be 1-7, representing the shade within that palette. See my coloredwoods mod for more information on how this mode is used. `wallmounted`: the 32-color palette, for nodes using `colorwallmounted` mode. `extended`: the 256-color "extended" palette **`unifieddyes.on_construct(pos)`** This function, called in your node definition's on_construct, just sets the `palette = "ext"` metadata key for the node after it's been placed. This can then be read in an LBM to determine if this node needs to be converted from the old 89-color palette to the extended 256-color palette. Although it is good practice to call this for any node that uses the 256-color palette, it isn't strictly necessary as long as the node has never used the 89-color palette and won't be subjected to an LBM that changes its color. **`unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)`** This function handles returning dyes to the user when a node is dug. All colorized nodes need to call this in `after_dig_node`. **`unifieddyes.on_use(itemstack, player, pointed_thing)`** This function is used internally by Unfiied Dyes to actually make a dye able to colorize a node when you wield and punch with it. Unified Dyes redefines the minetest_game default dye items to call this function. #### Tables In addition to the above API calls, Unified Dyes provides several useful tables `unifieddyes.HUES` contains a list of the 12 hues used by the 89-color palette. `unifieddyes.HUES_EXTENDED` contains a list of the 24 hues in the 256-color palette. Each line contains the color name and its RGB value expressed as three numbers (rather than the usual `#RRGGBB` string). `unifieddyes.base_color_crafts` contains a condensed list of crafting recipes for all 24 basic hues, plus black and white, most of which have multiple alternative recipes. Each line contains the name of the color, up to five dye itemstrings (with `nil` in each unused space), and the yield for that craft. `unifieddyes.shade_crafts` contains recipes for each of the 10 shades a hue can take on, used with one or two portions of the dye corresponding to that hue. Each line contains the shade name with trailing "_", the saturation name (either `_s50` or empty string), up to three dye itemstrings, and the yield for that craft. `unifieddyes.greymixes` contains the recipes for the 14 shades of grey. Each line contains the grey shade number from 1-14, up to four dye item names, and the yield for that craft. unifieddyes-stable-20170925/LICENSE000066400000000000000000000355661314366203200165710ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 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. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. 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 Program or any portion of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, 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 Program, 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 Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) 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; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, 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 executable. However, as a special exception, the source code 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. If distribution of executable or 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 counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program 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. 5. 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 Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program 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 to this License. 7. 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 Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program 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 Program. 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. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program 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. 9. The Free Software Foundation may publish revised and/or new versions of the 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 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 Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, 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 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. 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 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. END OF TERMS AND CONDITIONS unifieddyes-stable-20170925/README.md000066400000000000000000000021041314366203200170210ustar00rootroot00000000000000VanessaE's Unified Dyes ======================= The purpose of this mod originally was to supply a complete set of colors for Minetest mod authors to use for colorized nodes, or to reference in recipes. Since the advent of the default dyes mod in minetest_game, this mod has become more of an extension of the default mod. Since the advent of param2 colorization, it has also become a library for general color handling. Unified Dyes expands the standard dye set from 15 colors to 32, 89, or 256 (see the API and usage info). Dependencies: Minetest engine version 0.4.16 or higher and a corresponding copy of minetest_game. License: GPL 2.0 or higher. Install: Unzip the distribution file, rename the resultant folder to just "unifieddyes", move it into Minetest's mods folder, and enable it in your world configuration. Usage: for detailed usage information, please see [the Unified Dyes Thread](https://forum.minetest.net/viewtopic.php?f=11&t=2178&p=28399) on the Minetest forum. API: the full API is documented here: https://github.com/minetest-mods/unifieddyes/blob/master/API.md unifieddyes-stable-20170925/bottle_overlay.png000066400000000000000000000004441314366203200213070ustar00rootroot00000000000000PNG  IHDRaIDAT8˵M {nutkV@B錍 (17opku uh9!pMi@QS\9 4"h<+cgqxXk-RъHskQ^KT> Cq` MSC:3!)olh K#*8m\ݍaZiNmX(z5 Mdh"8;41>c,Dג_swyIENDB`unifieddyes-stable-20170925/changelog.txt000066400000000000000000000100721314366203200202350ustar00rootroot00000000000000Changelog --------- 2013-04-30: Multiple changes * Refactored the code to use default "common" dyes rather than directly from flowers. * This mod now depends on "default" and "dye" from the Minetest common sub-game. Since the default dye mod uses default flowers, this mod no longer checks for what version of flowers you're using, or even depends on it. * Bottle-based textures have been replaced with piles of dye powder, based on the default red dye texture. * All dyes are obtained by crafting, not cooking, for consistency with the default dye mod. * The somewhat-complicated method using separate "pigment" powders, glass bottles and "liquid dye base" has been done away with. Now it's just dry dye powders, as with the default dye mod. * Also, got rid of the whole paint scheme, in favor of dry powders. * All old dyes, paints, and Unified Dyes pigment powders have been aliased back to the standard dye powders. 2012-07-26: Added a "version" check for the flowers dependency: If the flowers mod defines "flowers:flower_geranium" (as is the case with my update of 2012-08-01), then those will be used to get blue pigment powder, and violas will produce violet powder, both of which can be directly used to create their respective liquid dye colors. If it is not defined (e.g. the user has an older version of the flowers mod), then violas produce blue dye powder. Violet dye can still be formed by mixing blue and magenta or blue and red dyes, as before. 2012-07-26: Better bottle textures. Note that these are blended against the 50% grey field they normally appear on in the inventory display, so they will show artifacts if you try to wield them. Don't do that. :-) 2012-07-26: Split off glass bottles into a separate mod, "Vessels". This mod now depends on it. 2012-07-25 (almost immediately after): Fixed a copy&paste error for black dye. 2012-07-25: Replaced missing craftitem entries and got rid of some redundant code left over from last update. Added group settings for all dyes according to recently-published standard. Fixed a few typos in item descriptions, and straightened up capitalization. 2012-07-24: Added some extra steps to the dye-making process, added recommendation that empty bottles be given back to the player on use. Dyes are still easy to make, they just require a more realistic (and this, harder) process now. 2012-07-16 (a bit later): fixed a minor error in generation of medium grey. 2012-07-16: Added a new set of colors, "light" (brightness of 150% versus the 'full' shade), for a total of 89. No 50% saturation version of this set. Added a palette image showing the full set of colors. 2012-07-13: Fixed some missing commas. 2012-07-13: Added a script to aid in the generation of new textures for mods that depend on unifieddyes. Moved this changelog from the forum into the distribution directory. Rewrote the README to contain everything from the forum post, and expanded it to document the new generation script. 2012-07-12 (a bit later): added groups = {dye=1}, to each register_craftitem call, to make it easier for other mods to identify the dyes and categorize them. 2012-07-12: moved project to github. 2012-07-11 (continuing): Tweaked the script to remove titanium dioxide from the output, since it isn't intended to be directly used as a dye/paint (but rather, to make paint that can then be used). Regenerated colors.txt. 2012-07-11 (immediately after): The script was reading the wrong pixel from the image, resulting in lighter-than-correct colors. Fixed it and regenerated the colors.txt file. 2012-07-11: Added a script to list all of the colors and their RGB values and texture filenames, and a text file containing the output thereof. 2012-07-08 (a bit later): deleted a few unused files (copy&paste error). 2012-07-08: Major boost in the number of available colors - was 8, now 77. Should cover pretty much the entire spectrum of colors one might use in this game. 2012-07-02: Deleted a few redundant files (leftovers from when I wanted to merge in flowers and then changed my mind). 2012-06-26: Initial upload. unifieddyes-stable-20170925/colors.txt000066400000000000000000000133331314366203200176120ustar00rootroot00000000000000 Full-saturation colors: ----------------------- dark aqua 0, 84, 42 unifieddyes_dark_aqua.png dark blue 0, 0, 84 unifieddyes_dark_blue.png dark cyan 0, 84, 83 unifieddyes_dark_cyan.png dark green 0, 84, 0 unifieddyes_dark_green.png dark lime 43, 84, 0 unifieddyes_dark_lime.png dark magenta 84, 0, 83 unifieddyes_dark_magenta.png dark orange 84, 42, 0 unifieddyes_dark_orange.png dark red 84, 0, 0 unifieddyes_dark_red.png dark redviolet 84, 0, 42 unifieddyes_dark_redviolet.png dark skyblue 0, 42, 84 unifieddyes_dark_skyblue.png dark violet 43, 0, 84 unifieddyes_dark_violet.png dark yellow 84, 83, 0 unifieddyes_dark_yellow.png medium aqua 0,169, 84 unifieddyes_medium_aqua.png medium blue 0, 0,169 unifieddyes_medium_blue.png medium cyan 0,169,167 unifieddyes_medium_cyan.png medium green 0,169, 0 unifieddyes_medium_green.png medium lime 87,169, 0 unifieddyes_medium_lime.png medium magenta 169, 0,167 unifieddyes_medium_magenta.png medium orange 169, 84, 0 unifieddyes_medium_orange.png medium red 168, 0, 0 unifieddyes_medium_red.png medium redviolet 169, 0, 84 unifieddyes_medium_redviolet.png medium skyblue 0, 84,169 unifieddyes_medium_skyblue.png medium violet 87, 0,169 unifieddyes_medium_violet.png medium yellow 169,167, 0 unifieddyes_medium_yellow.png aqua 1,255,127 unifieddyes_aqua.png blue 1, 1,255 unifieddyes_blue.png cyan 1,255,252 unifieddyes_cyan.png green 1,255, 1 unifieddyes_green.png lime 132,255, 1 unifieddyes_lime.png magenta 255, 1,252 unifieddyes_magenta.png orange 255,127, 1 unifieddyes_orange.png red 255, 0, 0 unifieddyes_red.png redviolet 255, 1,127 unifieddyes_redviolet.png skyblue 1,127,255 unifieddyes_skyblue.png violet 132, 1,255 unifieddyes_violet.png yellow 255,252, 1 unifieddyes_yellow.png Low-saturation colors: ---------------------- dark aqua 50% saturation 21, 63, 42 unifieddyes_dark_aqua_s50.png dark blue 50% saturation 21, 21, 63 unifieddyes_dark_blue_s50.png dark cyan 50% saturation 21, 63, 63 unifieddyes_dark_cyan_s50.png dark green 50% saturation 21, 63, 21 unifieddyes_dark_green_s50.png dark lime 50% saturation 43, 63, 21 unifieddyes_dark_lime_s50.png dark magenta 50% saturation 63, 21, 63 unifieddyes_dark_magenta_s50.png dark orange 50% saturation 63, 42, 21 unifieddyes_dark_orange_s50.png dark red 50% saturation 63, 21, 21 unifieddyes_dark_red_s50.png dark redviolet 50% saturation 63, 21, 42 unifieddyes_dark_redviolet_s50.png dark skyblue 50% saturation 21, 42, 63 unifieddyes_dark_skyblue_s50.png dark violet 50% saturation 43, 21, 63 unifieddyes_dark_violet_s50.png dark yellow 50% saturation 63, 63, 21 unifieddyes_dark_yellow_s50.png medium aqua 50% saturation 42,126, 84 unifieddyes_medium_aqua_s50.png medium blue 50% saturation 42, 42,126 unifieddyes_medium_blue_s50.png medium cyan 50% saturation 42,126,126 unifieddyes_medium_cyan_s50.png medium green 50% saturation 42,126, 42 unifieddyes_medium_green_s50.png medium lime 50% saturation 86,126, 42 unifieddyes_medium_lime_s50.png medium magenta 50% saturation 126, 42,126 unifieddyes_medium_magenta_s50.png medium orange 50% saturation 126, 84, 42 unifieddyes_medium_orange_s50.png medium red 50% saturation 127, 42, 42 unifieddyes_medium_red_s50.png medium redviolet 50% saturation 126, 42, 84 unifieddyes_medium_redviolet_s50.png medium skyblue 50% saturation 42, 84,126 unifieddyes_medium_skyblue_s50.png medium violet 50% saturation 86, 42,126 unifieddyes_medium_violet_s50.png medium yellow 50% saturation 126,126, 42 unifieddyes_medium_yellow_s50.png aqua 50% saturation 65,191,127 unifieddyes_aqua_s50.png blue 50% saturation 65, 65,191 unifieddyes_blue_s50.png cyan 50% saturation 65,191,190 unifieddyes_cyan_s50.png green 50% saturation 65,191, 65 unifieddyes_green_s50.png lime 50% saturation 130,191, 65 unifieddyes_lime_s50.png magenta 50% saturation 191, 65,190 unifieddyes_magenta_s50.png orange 50% saturation 191,127, 65 unifieddyes_orange_s50.png red 50% saturation 192, 64, 64 unifieddyes_red_s50.png redviolet 50% saturation 191, 65,127 unifieddyes_redviolet_s50.png skyblue 50% saturation 65,127,191 unifieddyes_skyblue_s50.png violet 50% saturation 130, 65,191 unifieddyes_violet_s50.png yellow 50% saturation 191,190, 65 unifieddyes_yellow_s50.png Greyscale: ---------- black 0, 0, 0 unifieddyes_black.png dark grey 64, 64, 64 unifieddyes_darkgrey_paint.png medium grey 128,128,128 unifieddyes_grey_paint.png light grey 192,192,192 unifieddyes_lightgrey_paint.png white 255,255,255 unifieddyes_white_paint.png unifieddyes-stable-20170925/depends.txt000066400000000000000000000000261314366203200177260ustar00rootroot00000000000000default dye intllib? unifieddyes-stable-20170925/description.txt000066400000000000000000000001001314366203200206200ustar00rootroot00000000000000Unified Dyes expands the standard dye set from 15 to 90 colors. unifieddyes-stable-20170925/init.lua000066400000000000000000001006031314366203200172130ustar00rootroot00000000000000--[[ Unified Dyes This mod provides an extension to the Minetest 0.4.x dye system ============================================================================== Copyright (C) 2012-2013, Vanessa Ezekowitz Email: vanessaezekowitz@gmail.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ============================================================================== --]] --===================================================================== unifieddyes = {} unifieddyes.last_used_dye = {} unifieddyes.last_dyed_node = {} local creative_mode = minetest.settings:get_bool("creative_mode") -- 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 -- helper functions for other mods that use this one unifieddyes.HUES = { "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "skyblue", "blue", "violet", "magenta", "redviolet" } -- the names of the various colors here came from http://www.procato.com/rgb+index/ unifieddyes.HUES_EXTENDED = { { "red", 0xff, 0x00, 0x00 }, { "vermilion", 0xff, 0x40, 0x00 }, { "orange", 0xff, 0x80, 0x00 }, { "amber", 0xff, 0xbf, 0x00 }, { "yellow", 0xff, 0xff, 0x00 }, { "lime", 0xbf, 0xff, 0x00 }, { "chartreuse", 0x80, 0xff, 0x00 }, { "harlequin", 0x40, 0xff, 0x00 }, { "green", 0x00, 0xff, 0x00 }, { "malachite", 0x00, 0xff, 0x40 }, { "spring", 0x00, 0xff, 0x80 }, { "turquoise", 0x00, 0xff, 0xbf }, { "cyan", 0x00, 0xff, 0xff }, { "cerulean", 0x00, 0xbf, 0xff }, { "azure", 0x00, 0x80, 0xff }, { "sapphire", 0x00, 0x40, 0xff }, { "blue", 0x00, 0x00, 0xff }, { "indigo", 0x40, 0x00, 0xff }, { "violet", 0x80, 0x00, 0xff }, { "mulberry", 0xbf, 0x00, 0xff }, { "magenta", 0xff, 0x00, 0xff }, { "fuchsia", 0xff, 0x00, 0xbf }, { "rose", 0xff, 0x00, 0x80 }, { "crimson", 0xff, 0x00, 0x40 } } unifieddyes.SATS = { "", "_s50" } unifieddyes.VALS = { "", "medium_", "dark_" } unifieddyes.VALS_EXTENDED = { "faint_", "pastel_", "light_", "bright_", "", "medium_", "dark_" } unifieddyes.GREYS = { "white", "light_grey", "grey", "dark_grey", "black" } local default_dyes = { "black", "blue", "brown", "cyan", "dark_green", "dark_grey", "green", "grey", "magenta", "orange", "pink", "red", "violet", "white", "yellow" } -- automatically recolor a placed node to match the last-used dye -- should be called in the node's `after_place_node` callback. function unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing) local playername = placer:get_player_name() local stackname = itemstack:get_name() if unifieddyes.last_dyed_node[playername] ~= stackname then if unifieddyes.last_used_dye[playername] then minetest.chat_send_player(playername, "Switched to \""..stackname.."\" while auto-coloring, color reset to neutral.") end unifieddyes.last_used_dye[playername] = nil unifieddyes.last_dyed_node[playername] = nil end unifieddyes.last_dyed_node[playername] = stackname if unifieddyes.last_used_dye[playername] then local lastdye = unifieddyes.last_used_dye[playername] local inv = placer:get_inventory() if (lastdye and lastdye ~= "" and inv:contains_item("main", lastdye.." 1")) or creative_mode then local nodedef = minetest.registered_nodes[stackname] local newname = nodedef.ud_replacement_node or stackname local node = minetest.get_node(pos) local palette_type = true -- default to 89-color split, because the others are easier to check for. local oldfdir = node.param2 % 32 if nodedef.palette == "unifieddyes_palette.png" then palette_type = false oldfdir = 0 elseif nodedef.palette == "unifieddyes_palette_colorwallmounted.png" then palette_type = "wallmounted" oldfdir = node.param2 % 8 elseif nodedef.palette == "unifieddyes_palette_extended.png" then palette_type = "extended" oldfdir = 0 end local paletteidx, hue = unifieddyes.getpaletteidx(lastdye, palette_type) if palette_type == true then newname = string.gsub(newname, "_grey", "_"..unifieddyes.HUES[hue]) end minetest.set_node(pos, { name = newname, param2 = oldfdir + paletteidx }) local meta = minetest.get_meta(pos) meta:set_string("dye", lastdye) if not creative_mode then inv:remove_item("main", lastdye.." 1") end else minetest.chat_send_player(playername, "Ran out of "..unifieddyes.last_used_dye[playername]..", resetting to neutral.") unifieddyes.last_used_dye[playername] = nil end end end minetest.register_on_leaveplayer(function(player) local playername = player:get_player_name() unifieddyes.last_used_dye[playername] = nil unifieddyes.last_dyed_node[playername] = nil end) -- code borrowed from homedecor -- call this function to reset the rotation of a "wallmounted" object on place function unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing) local node = minetest.get_node(pos) local yaw = placer:get_look_horizontal() local dir = minetest.yaw_to_dir(yaw) -- -1.5) local pitch = placer:get_look_vertical() local fdir = minetest.dir_to_wallmounted(dir) if pitch < -(math.pi/8) then fdir = 0 elseif pitch > math.pi/8 then fdir = 1 end minetest.swap_node(pos, { name = node.name, param2 = fdir }) end -- use this when you have a "wallmounted" node that should never be oriented -- to floor or ceiling... function unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing) local node = minetest.get_node(pos) local yaw = placer:get_look_horizontal() local dir = minetest.yaw_to_dir(yaw+1.5) local fdir = minetest.dir_to_wallmounted(dir) minetest.swap_node(pos, { name = node.name, param2 = fdir }) end -- ... and use this one to force that kind of node off of floor/ceiling -- orientation after the screwdriver rotates it. function unifieddyes.fix_after_screwdriver_nsew(pos, node, user, mode, new_param2) local new_fdir = new_param2 % 8 local color = new_param2 - new_fdir if new_fdir < 2 then new_fdir = 2 minetest.swap_node(pos, { name = node.name, param2 = new_fdir + color }) return true end end function unifieddyes.select_node(pointed_thing) local pos = pointed_thing.under local node = minetest.get_node_or_nil(pos) local def = node and minetest.registered_nodes[node.name] if not def or not def.buildable_to then pos = pointed_thing.above node = minetest.get_node_or_nil(pos) def = node and minetest.registered_nodes[node.name] end return def and pos, def end function unifieddyes.is_buildable_to(placer_name, ...) for _, pos in ipairs({...}) do local node = minetest.get_node_or_nil(pos) local def = node and minetest.registered_nodes[node.name] if not (def and def.buildable_to) or minetest.is_protected(pos, placer_name) then return false end end return true end function unifieddyes.get_hsv(name) -- expects a node/item name local hue = "" local a,b for _, i in ipairs(unifieddyes.HUES) do a,b = string.find(name, "_"..i) if a and not ( string.find(name, "_redviolet") and i == "red" ) then hue = i break end end if string.find(name, "_light_grey") then hue = "light_grey" elseif string.find(name, "_lightgrey") then hue = "light_grey" elseif string.find(name, "_dark_grey") then hue = "dark_grey" elseif string.find(name, "_darkgrey") then hue = "dark_grey" elseif string.find(name, "_grey") then hue = "grey" elseif string.find(name, "_white") then hue = "white" elseif string.find(name, "_black") then hue = "black" end local sat = "" if string.find(name, "_s50") then sat = "_s50" end local val = "" if string.find(name, "dark_") then val = "dark_" end if string.find(name, "medium_") then val = "medium_" end if string.find(name, "light_") then val = "light_" end return hue, sat, val end -- code partially borrowed from cheapie's plasticbox mod -- in the function below, color is just a color string, while -- palette_type can be: -- -- false/nil = standard 89 color palette -- true = 89 color palette split into pieces for colorfacedir -- "wallmounted" = 32-color abridged palette -- "extended" = 256 color palette function unifieddyes.getpaletteidx(color, palette_type) local origcolor = color local aliases = { ["pink"] = "light_red", ["brown"] = "medium_orange", } local grayscale = { ["white"] = 1, ["light_grey"] = 2, ["grey"] = 3, ["dark_grey"] = 4, ["black"] = 5, } local grayscale_extended = { ["white"] = 0, ["grey_14"] = 1, ["grey_13"] = 2, ["grey_12"] = 3, ["light_grey"] = 3, ["grey_11"] = 4, ["grey_10"] = 5, ["grey_9"] = 6, ["grey_8"] = 7, ["grey"] = 7, ["grey_7"] = 8, ["grey_6"] = 9, ["grey_5"] = 10, ["grey_4"] = 11, ["dark_grey"] = 11, ["grey_3"] = 12, ["grey_2"] = 13, ["grey_1"] = 14, ["black"] = 15, } local grayscale_wallmounted = { ["white"] = 0, ["light_grey"] = 1, ["grey"] = 2, ["dark_grey"] = 3, ["black"] = 4, } local hues = { ["red"] = 1, ["orange"] = 2, ["yellow"] = 3, ["lime"] = 4, ["green"] = 5, ["aqua"] = 6, ["cyan"] = 7, ["skyblue"] = 8, ["blue"] = 9, ["violet"] = 10, ["magenta"] = 11, ["redviolet"] = 12, } local hues_extended = { ["red"] = 0, ["vermilion"] = 1, ["orange"] = 2, ["amber"] = 3, ["yellow"] = 4, ["lime"] = 5, ["chartreuse"] = 6, ["harlequin"] = 7, ["green"] = 8, ["malachite"] = 9, ["spring"] = 10, ["turquoise"] = 11, ["cyan"] = 12, ["cerulean"] = 13, ["azure"] = 14, ["sapphire"] = 15, ["blue"] = 16, ["indigo"] = 17, ["violet"] = 18, ["mulberry"] = 19, ["magenta"] = 20, ["fuchsia"] = 21, ["rose"] = 22, ["crimson"] = 23, } local hues_wallmounted = { ["red"] = 0, ["orange"] = 1, ["yellow"] = 2, ["green"] = 3, ["cyan"] = 4, ["blue"] = 5, ["violet"] = 6, ["magenta"] = 7 } local shades = { [""] = 1, ["s50"] = 2, ["light"] = 3, ["medium"] = 4, ["mediums50"] = 5, ["dark"] = 6, ["darks50"] = 7, } local shades_extended = { ["faint"] = 0, ["pastel"] = 1, ["light"] = 2, ["bright"] = 3, [""] = 4, ["s50"] = 5, ["medium"] = 6, ["mediums50"] = 7, ["dark"] = 8, ["darks50"] = 9 } local shades_wallmounted = { [""] = 1, ["medium"] = 2, ["dark"] = 3 } if string.sub(color,1,4) == "dye:" then color = string.sub(color,5,-1) elseif string.sub(color,1,12) == "unifieddyes:" then color = string.sub(color,13,-1) else return end if palette_type == "wallmounted" then if grayscale_wallmounted[color] then return (grayscale_wallmounted[color] * 8), 0 end elseif palette_type == true then if grayscale[color] then return (grayscale[color] * 32), 0 end elseif palette_type == "extended" then if grayscale_extended[color] then return grayscale_extended[color]+240, 0 end else if grayscale[color] then return grayscale[color], 0 end end local shade = "" -- assume full if string.sub(color,1,6) == "faint_" then shade = "faint" color = string.sub(color,7,-1) elseif string.sub(color,1,7) == "pastel_" then shade = "pastel" color = string.sub(color,8,-1) elseif string.sub(color,1,6) == "light_" then shade = "light" color = string.sub(color,7,-1) elseif string.sub(color,1,7) == "bright_" then shade = "bright" color = string.sub(color,8,-1) elseif string.sub(color,1,7) == "medium_" then shade = "medium" color = string.sub(color,8,-1) elseif string.sub(color,1,5) == "dark_" then shade = "dark" color = string.sub(color,6,-1) end if string.sub(color,-4,-1) == "_s50" then shade = shade.."s50" color = string.sub(color,1,-5) end if palette_type == "wallmounted" then if color == "brown" then return 48,1 elseif color == "pink" then return 56,7 elseif color == "blue" and shade == "light" then return 40,5 elseif hues_wallmounted[color] and shades_wallmounted[shade] then return (shades_wallmounted[shade] * 64 + hues_wallmounted[color] * 8), hues_wallmounted[color] end else if color == "brown" then color = "orange" shade = "medium" elseif color == "pink" then color = "red" shade = "light" end if palette_type == true then -- it's colorfacedir if hues[color] and shades[shade] then return (shades[shade] * 32), hues[color] end elseif palette_type == "extended" then if hues_extended[color] and shades_extended[shade] then return (hues_extended[color] + shades_extended[shade]*24), hues_extended[color] end else -- it's the 89-color palette -- If using this palette, translate new color names back to old. if shade == "" then if color == "spring" then color = "aqua" elseif color == "azure" then color = "skyblue" elseif color == "rose" then color = "redviolet" end end if hues[color] and shades[shade] then return (hues[color] * 8 + shades[shade]), hues[color] end end end end -- if your node was once 89-color and uses an LBM to convert to the 256-color palette, -- call this in that node def's on_construct: function unifieddyes.on_construct(pos) local meta = minetest.get_meta(pos) meta:set_string("palette", "ext") end -- call this in your node's after_dig_node to get the last-used dye back. function unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger) local prevdye if oldmetadata and oldmetadata.fields then prevdye = oldmetadata.fields.dye end local inv = digger:get_inventory() if prevdye and not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then if inv:room_for_item("main", prevdye) then inv:add_item("main", prevdye) else minetest.add_item(pos, prevdye) end end end function unifieddyes.on_use(itemstack, player, pointed_thing) local stackname = itemstack:get_name() local playername = player:get_player_name() if pointed_thing and pointed_thing.type == "node" then if minetest.is_protected(unifieddyes.select_node(pointed_thing), playername) and not minetest.check_player_privs(playername, "protection_bypass") then minetest.chat_send_player(playername, "Sorry, someone else owns that spot.") return end end if pointed_thing and pointed_thing.type == "object" then pointed_thing.ref:punch(player, 0, itemstack:get_tool_capabilities()) return player:get_wielded_item() -- punch may modified the wielded item, load the new and return it end if not (pointed_thing and pointed_thing.type == "node") then return end -- if "using" the dye on nothing at all (e.g. air) local pos = minetest.get_pointed_thing_position(pointed_thing) local node = minetest.get_node(pos) local nodedef = minetest.registered_nodes[node.name] if not nodedef then return end -- target was an unknown node, just bail out -- if the node has an on_punch defined, bail out and call that instead, unless "sneak" is pressed. if not player:get_player_control().sneak then local onpunch = nodedef.on_punch(pos, node, player, pointed_thing) if onpunch then return onpunch end end if player:get_player_control().sneak then if unifieddyes.last_used_dye[playername] then minetest.chat_send_player(playername, "Shift-punched a node, switching back to neutral color." ) end unifieddyes.last_used_dye[playername] = nil return end -- if the target is unknown, has no groups defined, or isn't UD-colorable, just bail out if not (nodedef and nodedef.groups and nodedef.groups.ud_param2_colorable) then minetest.chat_send_player(playername, "That node can't be colored.") return end local newnode = nodedef.ud_replacement_node local palette_type if nodedef.palette == "unifieddyes_palette_extended.png" then palette_type = "extended" elseif nodedef.palette == "unifieddyes_palette.png" then palette_type = false elseif nodedef.paramtype2 == "colorfacedir" then palette_type = true elseif nodedef.paramtype2 == "colorwallmounted" then palette_type = "wallmounted" end if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then minetest.record_protection_violation(pos, playername) return end local pos2 = unifieddyes.select_node(pointed_thing) local paletteidx, hue = unifieddyes.getpaletteidx(stackname, palette_type) if paletteidx then if unifieddyes.last_used_dye[playername] ~= stackname then minetest.chat_send_player(playername, "Color "..stackname.." selected, auto-coloring activated." ) unifieddyes.last_used_dye[playername] = stackname end local meta = minetest.get_meta(pos) local prevdye = meta:get_string("dye") local inv = player:get_inventory() if not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then if inv:room_for_item("main", prevdye) then inv:add_item("main", prevdye) else minetest.add_item(pos, prevdye) end end meta:set_string("dye", stackname) if prevdye == stackname then local a,b = string.find(stackname, ":") minetest.chat_send_player(playername, "That node is already "..string.sub(stackname, a + 1).."." ) return elseif not creative_mode then itemstack:take_item() end node.param2 = paletteidx local oldpaletteidx, oldhuenum = unifieddyes.getpaletteidx(prevdye, palette_type) local oldnode = minetest.get_node(pos) local oldhue = nil for _, i in ipairs(unifieddyes.HUES) do if string.find(oldnode.name, "_"..i) and not ( string.find(oldnode.name, "_redviolet") and i == "red" ) then oldhue = i break end end if newnode then -- this path is used when the calling mod want to supply a replacement node if palette_type == "wallmounted" then node.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) elseif palette_type == true then -- it's colorfacedir if oldhue ~=0 then -- it's colored, not grey if oldhue ~= nil then -- it's been painted before if hue ~= 0 then -- the player's wielding a colored dye newnode = string.gsub(newnode, "_"..oldhue, "_"..unifieddyes.HUES[hue]) else -- it's a greyscale dye newnode = string.gsub(newnode, "_"..oldhue, "_grey") end else -- it's never had a color at all if hue ~= 0 then -- and if the wield is greyscale, don't change the node name newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) end end else if hue ~= 0 then -- greyscale dye on greyscale node = no hue change newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) end end node.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) else -- it's the 89-color palette, or the extended palette node.param2 = paletteidx end node.name = newnode minetest.swap_node(pos, node) if palette_type == "extended" then meta:set_string("palette", "ext") end if not creative_mode then return itemstack end else -- this path is used when you're just painting an existing node, rather than replacing one. newnode = oldnode -- note that here, newnode/oldnode are a full node, not just the name. if palette_type == "wallmounted" then newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) elseif palette_type == true then -- it's colorfacedir if oldhue then if hue ~= 0 then newnode.name = string.gsub(newnode.name, "_"..oldhue, "_"..unifieddyes.HUES[hue]) else newnode.name = string.gsub(newnode.name, "_"..oldhue, "_grey") end elseif string.find(minetest.get_node(pos).name, "_grey") and hue ~= 0 then newnode.name = string.gsub(newnode.name, "_grey", "_"..unifieddyes.HUES[hue]) end newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) else -- it's the 89-color palette, or the extended palette newnode.param2 = paletteidx end minetest.swap_node(pos, newnode) if palette_type == "extended" then meta:set_string("palette", "ext") end if not creative_mode then return itemstack end end else local a,b = string.find(stackname, ":") if a then minetest.chat_send_player(playername, "That node can't be colored "..string.sub(stackname, a + 1).."." ) end end end -- re-define default dyes slightly, to add on_use for _, color in ipairs(default_dyes) do minetest.override_item("dye:"..color, { on_use = unifieddyes.on_use }) end -- build a table to convert from classic/89-color palette to extended palette -- the first five entries are for the old greyscale - white, light, grey, dark, black unifieddyes.convert_classic_palette = { 240, 244, 247, 251, 253 } for hue = 0, 11 do -- light local paletteidx = unifieddyes.getpaletteidx("dye:light_"..unifieddyes.HUES[hue+1], false) unifieddyes.convert_classic_palette[paletteidx] = hue*2 + 48 for sat = 0, 1 do for val = 0, 2 do -- all other shades local paletteidx = unifieddyes.getpaletteidx("dye:"..unifieddyes.VALS[val+1]..unifieddyes.HUES[hue+1]..unifieddyes.SATS[sat+1], false) unifieddyes.convert_classic_palette[paletteidx] = hue*2 + sat*24 + (val*48+96) end end end -- Generate all dyes that are not part of the default minetest_game dyes mod for _, h in ipairs(unifieddyes.HUES_EXTENDED) do local hue = h[1] local r = h[2] local g = h[3] local b = h[4] for v = 0, 6 do local val = unifieddyes.VALS_EXTENDED[v+1] local factor = 40 if v > 3 then factor = 75 end local r2 = math.max(math.min(r + (4-v)*factor, 255), 0) local g2 = math.max(math.min(g + (4-v)*factor, 255), 0) local b2 = math.max(math.min(b + (4-v)*factor, 255), 0) -- full-sat color local desc = hue:gsub("%a", string.upper, 1).." Dye" if val ~= "" then desc = val:sub(1, -2):gsub("%a", string.upper, 1) .." "..desc end local color = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2) if minetest.registered_items["dye:"..val..hue] then minetest.override_item("dye:"..val..hue, { inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", on_use = unifieddyes.on_use }) else if (val..hue) ~= "medium_orange" and (val..hue) ~= "light_red" then minetest.register_craftitem(":dye:"..val..hue, { description = S(desc), inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", groups = { dye=1, not_in_creative_inventory=1 }, on_use = unifieddyes.on_use }) end end minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue) if v > 3 then -- also register the low-sat version local pr = 0.299 local pg = 0.587 local pb = 0.114 local p = math.sqrt(r2*r2*pr + g2*g2*pg + b2*b2*pb) local r3 = math.floor(p+(r2-p)*0.5) local g3 = math.floor(p+(g2-p)*0.5) local b3 = math.floor(p+(b2-p)*0.5) local color = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3) minetest.register_craftitem(":dye:"..val..hue.."_s50", { description = S(desc.." (low saturation)"), inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", groups = { dye=1, not_in_creative_inventory=1 }, on_use = unifieddyes.on_use }) minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50") end end end -- register the greyscales too :P for y = 1, 14 do -- colors 0 and 15 are black and white, default dyes if y ~= 4 and y ~= 8 and y~= 11 then -- don't register the three greys, they're done separately. local rgb = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17) local name = "grey_"..y local desc = "Grey Dye #"..y minetest.register_craftitem(":dye:"..name, { description = S(desc), inventory_image = "unifieddyes_dye.png^[colorize:#"..rgb..":200", groups = { dye=1, not_in_creative_inventory=1 }, on_use = unifieddyes.on_use }) minetest.register_alias("unifieddyes:"..name, "dye:"..name) end end minetest.override_item("dye:grey", { inventory_image = "unifieddyes_dye.png^[colorize:#888888:200", on_use = unifieddyes.on_use }) minetest.override_item("dye:dark_grey", { inventory_image = "unifieddyes_dye.png^[colorize:#444444:200", on_use = unifieddyes.on_use }) minetest.register_craftitem(":dye:light_grey", { description = S("Light grey Dye"), inventory_image = "unifieddyes_dye.png^[colorize:#cccccc:200", groups = { dye=1, not_in_creative_inventory=1 }, on_use = unifieddyes.on_use }) unifieddyes.base_color_crafts = { { "red", "flowers:rose", nil, nil, nil, nil, 4 }, { "vermilion", "dye:red", "dye:orange", nil, nil, nil, 3 }, { "orange", "flowers:tulip", nil, nil, nil, nil, 4 }, { "orange", "dye:red", "dye:yellow", nil, nil, nil, 2 }, { "amber", "dye:orange", "dye:yellow", nil, nil, nil, 2 }, { "yellow", "flowers:dandelion_yellow", nil, nil, nil, nil, 4 }, { "lime", "dye:yellow", "dye:chartreuse", nil, nil, nil, 2 }, { "lime", "dye:yellow", "dye:yellow", "dye:green", nil, nil, 3 }, { "chartreuse", "dye:yellow", "dye:green", nil, nil, nil, 2 }, { "harlequin", "dye:chartreuse", "dye:green", nil, nil, nil, 2 }, { "harlequin", "dye:yellow", "dye:green", "dye:green", nil, nil, 3 }, { "green", "default:cactus", nil, nil, nil, nil, 4 }, { "green", "dye:yellow", "dye:blue", nil, nil, nil, 2 }, { "malachite", "dye:green", "dye:spring", nil, nil, nil, 2 }, { "malachite", "dye:green", "dye:green", "dye:cyan", nil, nil, 3 }, { "malachite", "dye:green", "dye:green", "dye:green", "dye:blue", nil, 4 }, { "spring", "dye:green", "dye:cyan", nil, nil, nil, 2 }, { "spring", "dye:green", "dye:green", "dye:blue", nil, nil, 3 }, { "turquoise", "dye:spring", "dye:cyan", nil, nil, nil, 2 }, { "turquoise", "dye:green", "dye:cyan", "dye:cyan", nil, nil, 3 }, { "turquoise", "dye:green", "dye:green", "dye:green", "dye:blue", "dye:blue", 5 }, { "cyan", "dye:green", "dye:blue", nil, nil, nil, 2 }, { "cerulean", "dye:cyan", "dye:azure", nil, nil, nil, 2 }, { "cerulean", "dye:cyan", "dye:cyan", "dye:blue", nil, nil, 3 }, { "cerulean", "dye:green", "dye:green", "dye:blue", "dye:blue", "dye:blue", 5 }, { "azure", "dye:cyan", "dye:blue", nil, nil, nil, 2 }, { "azure", "dye:green", "dye:blue", "dye:blue", nil, nil, 3 }, { "sapphire", "dye:azure", "dye:blue", nil, nil, nil, 2 }, { "sapphire", "dye:cyan", "dye:blue", "dye:blue", nil, nil, 3 }, { "sapphire", "dye:green", "dye:blue", "dye:blue", "dye:blue", nil, 4 }, { "blue", "flowers:geranium", nil, nil, nil, nil, 4 }, { "indigo", "dye:blue", "dye:violet", nil, nil, nil, 2 }, { "violet", "flowers:viola", nil, nil, nil, nil, 4 }, { "violet", "dye:blue", "dye:magenta", nil, nil, nil, 2 }, { "mulberry", "dye:violet", "dye:magenta", nil, nil, nil, 2 }, { "mulberry", "dye:violet", "dye:blue", "dye:red", nil, nil, 3 }, { "magenta", "dye:blue", "dye:red", nil, nil, nil, 2 }, { "fuchsia", "dye:magenta", "dye:rose", nil, nil, nil, 2 }, { "fuchsia", "dye:blue", "dye:red", "dye:rose", nil, nil, 3 }, { "fuchsia", "dye:red", "dye:violet", nil, nil, nil, 2 }, { "rose", "dye:magenta", "dye:red", nil, nil, nil, 2 }, { "rose", "dye:red", "dye:red", "dye:blue", nil, nil, 3 }, { "crimson", "dye:rose", "dye:red", nil, nil, nil, 2 }, { "crimson", "dye:magenta", "dye:red", "dye:red", nil, nil, 3 }, { "crimson", "dye:red", "dye:red", "dye:red", "dye:blue", nil, 4 }, { "black", "default:coal_lump", nil, nil, nil, nil, 4 }, { "white", "flowers:dandelion_white", nil, nil, nil, nil, 4 }, } unifieddyes.shade_crafts = { { "faint_", "", "dye:white", "dye:white", "dye:white", 4 }, { "pastel_", "", "dye:white", "dye:white", nil, 3 }, { "light_", "", "dye:white", nil, nil, 2 }, { "bright_", "", "color", "dye:white", nil, 3 }, { "", "_s50", "dye:light_grey", nil, nil, 2 }, { "", "_s50", "dye:black", "dye:white", "dye:white", 3 }, { "medium_", "", "dye:black", nil, nil, 2 }, { "medium_", "_s50", "dye:grey", nil, nil, 2 }, { "medium_", "_s50", "dye:black", "dye:white", nil, 3 }, { "dark_", "", "dye:black", "dye:black", nil, 3 }, { "dark_", "_s50", "dye:dark_grey", nil, nil, 2 }, { "dark_", "_s50", "dye:black", "dye:black", "dye:white", 4 }, } for _,i in ipairs(unifieddyes.base_color_crafts) do local color = i[1] local yield = i[7] minetest.register_craft( { type = "shapeless", output = "dye:"..color.." "..yield, recipe = { i[2], i[3], i[4], i[5], i[6], }, }) for _,j in ipairs(unifieddyes.shade_crafts) do local firstdye = j[3] if firstdye == "color" then firstdye = "dye:"..color end -- ignore black, white, anything containing the word "grey" if color ~= "black" and color ~= "white" and not string.find(color, "grey") then minetest.register_craft( { type = "shapeless", output = "dye:"..j[1]..color..j[2].." "..yield, recipe = { "dye:"..color, firstdye, j[4], j[5] }, }) end end end -- greys unifieddyes.greymixes = { { 1, "dye:black", "dye:black", "dye:black", "dye:dark_grey", 4 }, { 2, "dye:black", "dye:black", "dye:dark_grey", nil, 3 }, { 3, "dye:black", "dye:dark_grey", nil, nil, 2 }, { 4, "dye:white", "dye:black", "dye:black", nil, 3 }, { 5, "dye:dark_grey", "dye:dark_grey", "dye:grey", nil, 3 }, { 6, "dye:dark_grey", "dye:grey", nil, nil, 2 }, { 7, "dye:dark_grey", "dye:grey", "dye:grey", nil, 3 }, { 8, "dye:white", "dye:black", nil, nil, 2 }, { 9, "dye:grey", "dye:grey", "dye:light_grey", nil, 3 }, { 10, "dye:grey", "dye:light_grey", "dye:light_grey", nil, 3 }, { 11, "dye:white", "dye:white", "dye:black", nil, 3 }, { 12, "dye:light_grey", "dye:light_grey", "dye:white", nil, 3 }, { 13, "dye:light_grey", "dye:white", nil, nil, 2 }, { 14, "dye:white", "dye:white", "dye:light_grey", nil, 3 }, } for _, i in ipairs(unifieddyes.greymixes) do local shade = i[1] local dye1 = i[2] local dye2 = i[3] local dye3 = i[4] local dye4 = i[5] local yield = i[6] local color = "grey_"..shade if shade == 4 then color = "dark_grey" elseif shade == 8 then color = "grey" elseif shade == 11 then color = "light_grey" end minetest.register_craft( { type = "shapeless", output = "dye:"..color.." "..yield, recipe = { dye1, dye2, dye3, dye4, }, }) end -- we can't make dark orange anymore because brown/medium orange conflicts minetest.register_craft( { type = "shapeless", output = "dye:dark_orange", recipe = { "dye:brown", "dye:brown" }, }) minetest.register_alias("dye:light_red", "dye:pink") minetest.register_alias("dye:medium_orange", "dye:brown") minetest.register_alias("unifieddyes:black", "dye:black") minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey") minetest.register_alias("unifieddyes:light_grey", "dye:light_grey") minetest.register_alias("unifieddyes:white", "dye:white") minetest.register_alias("unifieddyes:grey_0", "dye:black") minetest.register_alias("unifieddyes:grey_4", "dye:dark_grey") minetest.register_alias("unifieddyes:grey_8", "dye:grey") minetest.register_alias("unifieddyes:grey_11", "dye:light_grey") minetest.register_alias("unifieddyes:grey_15", "dye:white") minetest.register_alias("unifieddyes:white_paint", "dye:white") minetest.register_alias("unifieddyes:titanium_dioxide", "dye:white") minetest.register_alias("unifieddyes:lightgrey_paint", "dye:light_grey") minetest.register_alias("unifieddyes:grey_paint", "dye:grey") minetest.register_alias("unifieddyes:darkgrey_paint", "dye:dark_grey") minetest.register_alias("unifieddyes:carbon_black", "dye:black") -- aqua -> spring, skyblue -> azure, and redviolet -> rose aliases -- note that technically, lime should be aliased, but can't be (there IS -- lime in the new color table, it's just shifted up a bit) minetest.register_alias("unifieddyes:aqua", "unifieddyes:spring") minetest.register_alias("unifieddyes:skyblue", "unifieddyes:azure") minetest.register_alias("unifieddyes:redviolet", "unifieddyes:rose") print(S("[UnifiedDyes] Loaded!")) unifieddyes-stable-20170925/locale/000077500000000000000000000000001314366203200170045ustar00rootroot00000000000000unifieddyes-stable-20170925/locale/de.txt000066400000000000000000000100251314366203200201330ustar00rootroot00000000000000# Translation by Xanthin Lime Dye = Gelbgruener Farbstoff (Gelbgruen) Aqua Dye = Aqua Farbstoff Sky-blue Dye = Himmelblauer Farbstoff Red-violet Dye = Rotvioletter Farbstoff Light Grey Dye = Hellgrauer Farbstoff Dark Red Dye (low saturation) = Dunkelroter Farbstoff (geringe Saettigung) Dark Orange Dye (low saturation) = Dunkeloranger Farbstoff (geringe Saettigung) Dark Yellow Dye (low saturation) = Dunkelgelber Farbstoff (geringe Saettigung) Dark Lime Dye (low saturation) = Gelbgruenerlime Farbstoff (geringe Saettigung) Dark Green Dye (low saturation) = Dunkelgruener Farbstoff (geringe Saettigung) Dark Aqua Dye (low saturation) = Dunkelaqua Farbstoff (geringe Saettigung) Dark Cyan Dye (low saturation) = Dunkeltuerkiser Farbstoff (geringe Saettigung) Dark Sky-blue Dye (low saturation) = Dunkelhimmelblauer Farbstoff (geringe Saettigung) Dark Blue Dye (low saturation) = Dunkelblauer Farbstoff (geringe Saettigung) Dark Violet Dye (low saturation) = Dunkelvioletter Farbstoff (geringe Saettigung) Dark Magenta Dye (low saturation) = Dunkelmagenta Farbstoff (geringe Saettigung) Dark Red-violet Dye (low saturation) = Dunkelrotvioletter Farbstoff (geringe Saettigung) Dark Red Dye = Dunkelroter Farbstoff Dark Orange Dye = Dunkeloranger Farbstoff Dark Yellow Dye = Dunkelgelber Farbstoff Dark Lime Dye = Dunkelgelbgruener Farbstoff Dark Green Dye = Dunkelgruener Farbstoff Dark Aqua Dye = Dunkelaqua Farbstoff Dark Cyan Dye = Dunkeltuerkiser Farbstoff Dark Sky-blue Dye = Dunkelhimmelblauer Farbstoff Dark Blue Dye = Dunkelblauer Farbstoff Dark Violet Dye = Dunkelvioletter Farbstoff Dark Magenta Dye = Dunkelmagenta Farbstoff Dark Red-violet Dye = Dunkelrotvioletter Farbstoff Medium Red Dye (low saturation) = Mittelroter Farbstoff (geringe Saettigung) Medium Orange Dye (low saturation) = Mitteloranger Farbstoff (geringe Saettigung) Medium Yellow Dye (low saturation) = Mittelgelber Farbstoff (geringe Saettigung) Medium Lime Dye (low saturation) = Mittelgelbgruener Farbstoff (geringe Saettigung) Medium Green Dye (low saturation) = Mittelgruener Farbstoff (geringe Saettigung) Medium Aqua Dye (low saturation) = Mittelaqua Farbstoff (geringe Saettigung) Medium Cyan Dye (low saturation) = Mitteltuerkiser Farbstoff (geringe Saettigung) Medium Sky-blue Dye (low saturation) = Mittelhimmelblauer Farbstoff (geringe Saettigung) Medium Blue Dye (low saturation) = Mittelblauer Farbstoff (geringe Saettigung) Medium Violet Dye (low saturation) = Mittelvioletter Farbstoff (geringe Saettigung) Medium Magenta Dye (low saturation) = Mittelmagenta Farbstoff (geringe Saettigung) Medium Red-violet Dye (low saturation) = Mittelrotvioletter Farbstoff (geringe Saettigung) Medium Red Dye = Mittelroter Farbstoff Medium Orange Dye = Mitteloranger Farbstoff Medium Yellow Dye = Mittelgelber Farbstoff Medium Lime Dye = Mittelgelbgruener Farbstoff Medium Green Dye = Mittelgruener Farbstoff Medium Aqua Dye = Mittelaqua Farbstoff Medium Cyan Dye = Mitteltuerkiser Farbstoff Medium Sky-blue = Mittelhimmelblauer Farbstoff Medium Blue Dye = Mittelblauer Farbstoff Medium Violet Dye = Mittelvioletter Farbstoff Medium Magenta Dye = Mittelmagenta Farbstoff Medium Red-violet Dye = Mittelrotvioletter Farbstoff Red Dye (low saturation) = Roter Farbstoff (geringe Saettigung) Orange Dye (low saturation) = Oranger Farbstoff (geringe Saettigung) Yellow Dye (low saturation) = Gelber Farbstoff (geringe Saettigung) Lime Dye (low saturation) = Gelbgruener Farbstoff (geringe Saettigung) Green Dye (low saturation) = Gruener Farbstoff (geringe Saettigung) Aqua Dye (low saturation) = Aqua Farbstoff (geringe Saettigung) Cyan Dye (low saturation) = Tuerkiser Farbstoff (geringe Saettigung) Sky-blue Dye (low saturation) = Himmelblauer Farbstoff (geringe Saettigung) Blue Dye (low saturation) = Blauer Farbstoff (geringe Saettigung) Violet Dye (low saturation) = Violetter Farbstoff (geringe Saettigung) Magenta Dye (low saturation) = Magenta Farbstoff (geringe Saettigung) lila Red-violet Dye (low saturation) = Rotvioletter Farbstoff (geringe Saettigung) [UnifiedDyes] Loaded! = [UnifiedDyes] geladen! unifieddyes-stable-20170925/locale/fr.txt000066400000000000000000000101661314366203200201600ustar00rootroot00000000000000# Template Lime Dye = Teinture citron-vert Aqua Dye = Teinture aqua Sky-blue Dye = Teinture bleu ciel Red-violet Dye = Teinture rouge-violet Light Grey Dye = Teinture gris clair Dark Red Dye (low saturation) = Teinture rouge foncé (basse saturation) Dark Orange Dye (low saturation) = Teinture orange foncé (basse saturation) Dark Yellow Dye (low saturation) = Teinture jaune foncé (basse saturation) Dark Lime Dye (low saturation) = Teinture citron-vert foncé (basse saturation) Dark Green Dye (low saturation) = Teinture vert foncé (basse saturation) Dark Aqua Dye (low saturation) = Teinture aqua foncé (basse saturation) Dark Cyan Dye (low saturation) = Teinture cyan foncé (basse saturation) Dark Sky-blue Dye (low saturation) = Teinture bleu ciel foncé (basse saturation) Dark Blue Dye (low saturation) = Teinture bleu foncé (basse saturation) Dark Violet Dye (low saturation) = Teinture violet foncé (basse saturation) Dark Magenta Dye (low saturation) = Teinture magenta foncé (basse saturation) Dark Red-violet Dye (low saturation) = Teinture rouge-violet foncé (basse saturation) Dark Red Dye = Teinture rouge foncé Dark Orange Dye = Teinture orange foncé Dark Yellow Dye = Teinture jaune foncé Dark Lime Dye = Teinture citron-vert foncé Dark Green Dye = Teinture vert foncé Dark Aqua Dye = Teinture aqua foncé Dark Cyan Dye = Teinture cyan foncé Dark Sky-blue Dye = Teinture bleu ciel foncé Dark Blue Dye = Teinture bleu foncé Dark Violet Dye = Teinture violet foncé Dark Magenta Dye = Teinture magenta foncé Dark Red-violet Dye = Teinture rouge-violet foncé Medium Red Dye (low saturation) = Teinture rouge moyen (basse saturation) Medium Orange Dye (low saturation) = Teinture orange moyen (basse saturation) Medium Yellow Dye (low saturation) = Teinture jaune moyen (basse saturation) Medium Lime Dye (low saturation) = Teinture citron-vert moyen (basse saturation) Medium Green Dye (low saturation) = Teinture vert moyen (basse saturation) Medium Aqua Dye (low saturation) = Teinture aqua moyen (basse saturation) Medium Cyan Dye (low saturation) = Teinture cyan moyen (basse saturation) Medium Sky-blue Dye (low saturation) = Teinture bleu ciel moyen (basse saturation) Medium Blue Dye (low saturation) = Teinture bleu moyen (basse saturation) Medium Violet Dye (low saturation) = Teinture violet moyen (basse saturation) Medium Magenta Dye (low saturation) = Teinture magenta moyen (basse saturation) Medium Red-violet Dye (low saturation) = Teinture rouge-violet moyen (basse saturation) Medium Red Dye = Teinture rouge moyen Medium Orange Dye = Teinture orange moyen Medium Yellow Dye = Teinture jaune moyen Medium Lime Dye = Teinture citron-vert moyen Medium Green Dye = Teinture vert moyen Medium Aqua Dye = Teinture aqua moyen Medium Cyan Dye = Teinture cyan moyen Medium Sky-blue = Teinture bleu ciel moyen Medium Blue Dye = Teinture bleu moyen Medium Violet Dye = Teinture violet moyen Medium Magenta Dye = Teinture magenta moyen Medium Red-violet Dye = Teinture rouge-violet moyen Red Dye (low saturation) = Teinture rouge (basse saturation) Orange Dye (low saturation) = Teinture orange (basse saturation) Yellow Dye (low saturation) = Teinture jaune (basse saturation) Lime Dye (low saturation) = Teinture citron-vert (basse saturation) Green Dye (low saturation) = Teinture vert (basse saturation) Aqua Dye (low saturation) = Teinture aqua (basse saturation) Cyan Dye (low saturation) = Teinture cyan (basse saturation) Sky-blue Dye (low saturation) = Teinture bleu ciel (basse saturation) Blue Dye (low saturation) = Teinture bleu (basse saturation) Violet Dye (low saturation) = Teinture violet (basse saturation) Magenta Dye (low saturation) = Teinture magenta (basse saturation) Red-violet Dye (low saturation) = Teinture rouge-violet (basse saturation) Red Dye = Teinture rouge Orange Dye = Teinture orange Yellow Dye = Teinture jaune Lime Dye = Teinture citron-vert Green Dye = Teinture vert Aqua Dye = Teinture aqua Cyan Dye = Teinture cyan Sky-blue Dye = Teinture bleu ciel Blue Dye = Teinture bleu Violet Dye = Teinture violet Magenta Dye = Teinture magenta Red-violet Dye = Teinture rouge-violet [UnifiedDyes] Loaded! = [UnifiedDyes] chargé ! unifieddyes-stable-20170925/locale/pt.txt000066400000000000000000000102051314366203200201660ustar00rootroot00000000000000Lime Dye = Corante Lima Aqua Dye = Corante Água Sky-blue Dye = Corante Azul-Céu Red-violet Dye = Corante Vermelho-Violeta Light Grey Dye = Corante Cinza Claro Dark Red Dye (low saturation) = Corante Vermelho Escuro (baixa saturação) Dark Orange Dye (low saturation) = Corante Laranja Escuro (baixa saturação) Dark Yellow Dye (low saturation) = Corante Amarelo Escuro (baixa saturação) Dark Lime Dye (low saturation) = Corante Lima Escuro (baixa saturação) Dark Green Dye (low saturation) = Corante Verde Escuro (baixa saturação) Dark Aqua Dye (low saturation) = Corante Água Escuro (baixa saturação) Dark Cyan Dye (low saturation) = Corante Ciano Escuro (baixa saturação) Dark Sky-blue Dye (low saturation) = Corante Azul-Céu Escuro (baixa saturação) Dark Blue Dye (low saturation) = Corante Azul Escuro (baixa saturação) Dark Violet Dye (low saturation) = Corante Violeta Escuro (baixa saturação) Dark Magenta Dye (low saturation) = Corante Magenta Escuro (baixa saturação) Dark Red-violet Dye (low saturation) = Corante Vermelho-Violeta Escuro (baixa saturação) Dark Red Dye = Corante Vermelho Escuro Dark Orange Dye = Corante Laranja Escuro Dark Yellow Dye = Corante Amarelo Escuro Dark Lime Dye = Corante Lima Escuro Dark Green Dye = Corante Verde Escuro Dark Aqua Dye = Corante Água Escuro Dark Cyan Dye = Corante Ciano Escuro Dark Sky-blue Dye = Corante Azul-Céu Escuro Dark Blue Dye = Corante Azul Escuro Dark Violet Dye = Corante Violeta Escuro Dark Magenta Dye = Corante Magenta Escuro Dark Red-violet Dye = Corante Vermelho-Violeta Escuro Medium Red Dye (low saturation) = Corante Vermelho Médio (baixa saturação) Medium Orange Dye (low saturation) = Corante Laranja Médio (baixa saturação) Medium Yellow Dye (low saturation) = Corante Amarelo Médio (baixa saturação) Medium Lime Dye (low saturation) = Corante Lima Médio (baixa saturação) Medium Green Dye (low saturation) = Corante Verde Médio (baixa saturação) Medium Aqua Dye (low saturation) = Corante Água Médio (baixa saturação) Medium Cyan Dye (low saturation) = Corante Ciano Médio (baixa saturação) Medium Sky-blue Dye (low saturation) = Corante Azul-Céu Médio (baixa saturação) Medium Blue Dye (low saturation) = Corante Azul Médio (baixa saturação) Medium Violet Dye (low saturation) = Corante Violeta Médio (baixa saturação) Medium Magenta Dye (low saturation) = Corante Magenta Médio (baixa saturação) Medium Red-violet Dye (low saturation) = Corante Vermelho-Violeta Médio (baixa saturação) Medium Red Dye = Corante Vermelho Médio Medium Orange Dye = Corante Laranja Médio Medium Yellow Dye = Corante Amarelo Médio Medium Lime Dye = Corante Lima Médio Medium Green Dye = Corante Verde Médio Medium Aqua Dye = Corante Água Médio Medium Cyan Dye = Corante Ciano Médio Medium Sky-blue = Corante Azul-Céu Médio Medium Blue Dye = Corante Azul Médio Medium Violet Dye = Corante Violeta Médio Medium Magenta Dye = Corante Magenta Médio Medium Red-violet Dye = Corante Vermelho-Violeta Médio Red Dye (low saturation) = Corante Vermelho (baixa saturação) Orange Dye (low saturation) = Corante Laranja (baixa saturação) Yellow Dye (low saturation) = Corante Amarelo (baixa saturação) Lime Dye (low saturation) = Corante Lima (baixa saturação) Green Dye (low saturation) = Corante Vermelho (baixa saturação) Aqua Dye (low saturation) = Corante Água (baixa saturação) Cyan Dye (low saturation) = Corante Ciano (baixa saturação) Sky-blue Dye (low saturation) = Corante Azul-Céu (baixa saturação) Blue Dye (low saturation) = Corante Azul (baixa saturação) Violet Dye (low saturation) = Corante Violeta (baixa saturação) Magenta Dye (low saturation) = Corante Magenta (baixa saturação) Red-violet Dye (low saturation) = Corante Vermelho-Violeta (baixa saturação) Red Dye = Corante Vermelho Orange Dye = Corante Laranja Yellow Dye = Corante Amarelo Lime Dye = Corante Lima Green Dye = Corante Verde Aqua Dye = Corante Água Cyan Dye = Corano Ciano Sky-blue Dye = Corante Azul-Céu Blue Dye = Corante Azul Violet Dye = Corante Violeta Magenta Dye = Corante Magenta Red-violet Dye = Corante Vermelho-Violeta [UnifiedDyes] Loaded! = [UnifiedDyes] Carregado! unifieddyes-stable-20170925/locale/template.txt000066400000000000000000000037121314366203200213630ustar00rootroot00000000000000# Template Lime Dye = Aqua Dye = Sky-blue Dye = Red-violet Dye = Light Grey Dye = Dark Red Dye (low saturation) = Dark Orange Dye (low saturation) = Dark Yellow Dye (low saturation) = Dark Lime Dye (low saturation) = Dark Green Dye (low saturation) = Dark Aqua Dye (low saturation) = Dark Cyan Dye (low saturation) = Dark Sky-blue Dye (low saturation) = Dark Blue Dye (low saturation) = Dark Violet Dye (low saturation) = Dark Magenta Dye (low saturation) = Dark Red-violet Dye (low saturation) = Dark Red Dye = Dark Orange Dye = Dark Yellow Dye = Dark Lime Dye = Dark Green Dye = Dark Aqua Dye = Dark Cyan Dye = Dark Sky-blue Dye = Dark Blue Dye = Dark Violet Dye = Dark Magenta Dye = Dark Red-violet Dye = Medium Red Dye (low saturation) = Medium Orange Dye (low saturation) = Medium Yellow Dye (low saturation) = Medium Lime Dye (low saturation) = Medium Green Dye (low saturation) = Medium Aqua Dye (low saturation) = Medium Cyan Dye (low saturation) = Medium Sky-blue Dye (low saturation) = Medium Blue Dye (low saturation) = Medium Violet Dye (low saturation) = Medium Magenta Dye (low saturation) = Medium Red-violet Dye (low saturation) = Medium Red Dye = Medium Orange Dye = Medium Yellow Dye = Medium Lime Dye = Medium Green Dye = Medium Aqua Dye = Medium Cyan Dye = Medium Sky-blue = Medium Blue Dye = Medium Violet Dye = Medium Magenta Dye = Medium Red-violet Dye = Red Dye (low saturation) = Orange Dye (low saturation) = Yellow Dye (low saturation) = Lime Dye (low saturation) = Green Dye (low saturation) = Aqua Dye (low saturation) = Cyan Dye (low saturation) = Sky-blue Dye (low saturation) = Blue Dye (low saturation) = Violet Dye (low saturation) = Magenta Dye (low saturation) = Red-violet Dye (low saturation) = Red Dye = Orange Dye = Yellow Dye = Lime Dye = Green Dye = Aqua Dye = Cyan Dye = Sky-blue Dye = Blue Dye = Violet Dye = Magenta Dye = Red-violet Dye = [UnifiedDyes] Loaded! = unifieddyes-stable-20170925/locale/tr.txt000066400000000000000000000100571314366203200201750ustar00rootroot00000000000000# TUrkish translation # Mahmutelmas06@hotmail.com Lime Dye = Limon Yeşili Boya Aqua Dye = Deniz mavisi Boya Sky-blue Dye = Gök-Mavi Boya Red-violet Dye = Kırmızılı Boya Light Grey Dye = Açık Grey Boya Dark Red Dye (low saturation) = Koyu Kırmızı Boya (düşük doygunluk) Dark Orange Dye (low saturation) = Koyu Turuncu Boya (düşük doygunluk) Dark Yellow Dye (low saturation) = Koyu Sarı Boya (düşük doygunluk) Dark Lime Dye (low saturation) = Koyu Limon Yeşili Boya (düşük doygunluk) Dark Green Dye (low saturation) = Koyu Yeşil Boya (düşük doygunluk) Dark Aqua Dye (low saturation) = Koyu Deniz mavisi boya (düşük doygunluk) Dark Cyan Dye (low saturation) = Koyu Cam göbeği Boya (düşük doygunluk) Dark Sky-blue Dye (low saturation) = Koyu Gök-Mavi Boya (düşük doygunluk) Dark Blue Dye (low saturation) = Koyu Mavi Boya (düşük doygunluk) Dark Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) Dark Magenta Dye (low saturation) = Koyu Kızılımsı Mor Boya (düşük doygunluk) Dark Red-violet Dye (low saturation) = Koyu Kırmızılı Boya (düşük doygunluk) Dark Red Dye = Koyu Kırmızı Boya Dark Orange Dye = Koyu Turuncu Boya Dark Yellow Dye = Koyu Sarı Boya Dark Lime Dye = Koyu Limon Yeşili Boya Dark Green Dye = Koyu Yeşil Boya Dark Aqua Dye = Koyu Deniz mavisi Boya Dark Cyan Dye = Koyu Cam göbeği Boya Dark Sky-blue Dye = Koyu Gök-Mavi Boya Dark Blue Dye = Koyu Mavi Boya Dark Violet Dye = Koyu mor Boya Dark Magenta Dye = Koyu Kızılımsı Mor Boya Dark Red-violet Dye = Koyu Kırmızılı Boya Medium Red Dye (low saturation) = Kırmızı Boya (düşük doygunluk) Medium Orange Dye (low saturation) = Turuncu Boya (düşük doygunluk) Medium Yellow Dye (low saturation) = Sarı Boya (düşük doygunluk) Medium Lime Dye (low saturation) = Limon Yeşili Boya (düşük doygunluk) Medium Green Dye (low saturation) = Yeşil Boya (düşük doygunluk) Medium Aqua Dye (low saturation) = Deniz mavisi Boya (düşük doygunluk) Medium Cyan Dye (low saturation) = Cam göbeği Boya (düşük doygunluk) Medium Sky-blue Dye (low saturation) = Gök-Mavi Boya (düşük doygunluk) Medium Blue Dye (low saturation) = Mavi Boya (düşük doygunluk) Medium Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) Medium Magenta Dye (low saturation) = Kızılımsı Mor Boya (düşük doygunluk) Medium Red-violet Dye (low saturation) = Kırmızılı Boya (düşük doygunluk) Medium Red Dye = Kırmızı Boya Medium Orange Dye = Turuncu Boya Medium Yellow Dye = Sarı Boya Medium Lime Dye = Limon Yeşili Boya Medium Green Dye = Yeşil Boya Medium Aqua Dye = Deniz mavisi Boya Medium Cyan Dye = Cam göbeği Boya Medium Sky-blue = Gök-Mavi Medium Blue Dye = Mavi Boya Medium Violet Dye = Koyu mor Boya Medium Magenta Dye = Kızılımsı Mor Boya Medium Red-violet Dye = Kırmızılı Boya Red Dye (low saturation) = Kırmızı Boya (düşük doygunluk) Orange Dye (low saturation) = Turuncu Boya (düşük doygunluk) Yellow Dye (low saturation) = Sarı Boya (düşük doygunluk) Lime Dye (low saturation) = Limon Yeşili Boya (düşük doygunluk) Green Dye (low saturation) = Yeşil Boya (düşük doygunluk) Aqua Dye (low saturation) = Deniz mavisi Boya (düşük doygunluk) Cyan Dye (low saturation) = Cam göbeği Boya (düşük doygunluk) Sky-blue Dye (low saturation) = Gök-Mavi Boya (düşük doygunluk) Blue Dye (low saturation) = Mavi Boya (düşük doygunluk) Violet Dye (low saturation) = Koyu mor Boya (düşük doygunluk) Magenta Dye (low saturation) = Kızılımsı Mor Boya (düşük doygunluk) Red-violet Dye (low saturation) = Kırmızılı Boya (düşük doygunluk) Red Dye = Kırmızı Boya Orange Dye = Turuncu Boya Yellow Dye = Sarı Boya Lime Dye = Limon Yeşili Boya Green Dye = Yeşil Boya Aqua Dye = Deniz mavisi Boya Cyan Dye = Cam göbeği Boya Sky-blue Dye = Gök-Mavi Boya Blue Dye = Mavi Boya Violet Dye = Koyu mor Boya Magenta Dye = Kızılımsı Mor Boya Red-violet Dye = Kırmızılı Boya [UnifiedDyes] Loaded! = [UnifiedBoyas] yüklendi! unifieddyes-stable-20170925/mod.conf000066400000000000000000000000231314366203200171660ustar00rootroot00000000000000name = unifieddyes unifieddyes-stable-20170925/textures/000077500000000000000000000000001314366203200174305ustar00rootroot00000000000000unifieddyes-stable-20170925/textures/unifieddyes_dye.png000066400000000000000000000002261314366203200233070ustar00rootroot00000000000000PNG  IHDRa]IDAT81 ČgKNH4 A;1c9I!)>="$i)Y`fmed\!K ;0#znV,@IENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette.png000066400000000000000000000003171314366203200241650ustar00rootroot00000000000000PNG  IHDR IDAT(m0 B+xKXCY>B=CS_?G2z(ZK)˲w)m/0$ҙL{e7B$ @#vJ~#!{q$'k7$!aOhz;~|9!Aѻ"bIENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_aquas.png000066400000000000000000000001431314366203200253540ustar00rootroot00000000000000PNG  IHDRC*IDATcFFVNeкp57 R <IENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_blues.png000066400000000000000000000001431314366203200253540ustar00rootroot00000000000000PNG  IHDRC*IDAT /A R@x1͞ UЪ3 LjvDn,&IENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_colorwallmounted.png000066400000000000000000000002101314366203200276270ustar00rootroot00000000000000PNG  IHDR<OIDAT%DZ я &83fzpKnCIENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_redviolets.png000066400000000000000000000001431314366203200264220ustar00rootroot00000000000000PNG  IHDRC*IDATcFV6Lep57 ~ }IENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_skyblues.png000066400000000000000000000001431314366203200261030ustar00rootroot00000000000000PNG  IHDRC*IDATcFdbpuQ7 < tIENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_violets.png000066400000000000000000000001431314366203200257270ustar00rootroot00000000000000PNG  IHDRC*IDATcFF6d`кpuF7 R úE'IENDB`unifieddyes-stable-20170925/textures/unifieddyes_palette_yellows.png000066400000000000000000000001451314366203200257420ustar00rootroot00000000000000PNG  IHDRC,IDAT!@A?@*jIENDB`