diff options
Diffstat (limited to 'unifieddyes')
-rw-r--r-- | unifieddyes/API.md | 108 | ||||
-rw-r--r-- | unifieddyes/README | 246 | ||||
-rw-r--r-- | unifieddyes/README.md | 16 | ||||
-rw-r--r-- | unifieddyes/init.lua | 43 |
4 files changed, 159 insertions, 254 deletions
diff --git a/unifieddyes/API.md b/unifieddyes/API.md new file mode 100644 index 0000000..a4e0a62 --- /dev/null +++ b/unifieddyes/API.md @@ -0,0 +1,108 @@ +### 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. diff --git a/unifieddyes/README b/unifieddyes/README index eba6d52..bb71e65 100644 --- a/unifieddyes/README +++ b/unifieddyes/README @@ -1,248 +1,14 @@ VanessaE's Unified Dyes ======================= -The purpose of this mod originally was to supply a complete set of colors for -Minetest mod authors to use in their recipes. Since the default dyes mod that -is supplied with Minetest "common" is now usable (via flowers, also included in -"common"), this mod has become more of an extension pack. +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 to 90 colors. +Unified Dyes expands the standard dye set from 15 colors to 32, 89, or 256 (see below). -IMPORTANT: This mod is not intended to suggest that you should use the entire -palette. Rather, I was hoping people would just choose maybe the dozen or so -most useful colors to use in their mods. +Dependencies: Minetest engine version 0.4.16 or higher and a corresponding copy of minetest_game. -Dependencies: default and dye from Minetest "common". This mod will NOT work -without these. This mod will NOT work without these. The default dye mod is -normally activated only in the standard "build" and "minetest_game" games, or perhaps if -someone has a modpack or game that includes them. +License: GPL 2.0 or higher. -Recommends: flowers from common. +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. -License: GPL 2.0 or above - -Install: Unzip the distribution file, rename the resultant -VanessaE-unifieddyes-blahblah folder to just "unifieddyes", and move it into -Minetest's mods folder. - -The Palette: - -[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/color-swatches.png ] -[ The official palette, showing 84 colors and 5 greys. ] - -In the image above, the "50%" markings on the left next to each shade mean 50% -saturation for all hues in that shade line. Note that the "light" shades don't -have (or need) that variant. For the greys, the percentages shown are of -brightness relative to pure white. There are three special cases: Light red -has been aliased to default pink dye, and dark green has been aliased to -default dark greey dye. Brown dye also exists in the default set, it's just -not shown in the palette above. - - -Usage instructions, technical information -========================================= - -Getting Started ---------------- - -First thing's first: you're going to need to harvest some materials to make the -dyes from. For this, you need one or more of the following: roses (red), -tulips (orange), yellow dandelions (yellow), cactus (green), geraniums (blue), -violas (purple), coal (black), or white dandelions (white). Simply wander -around your world and collect whichever of the above you need to get your -colors. - -[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes1.png ] -[ The 8 base colors directly obtainable from a material in the world. ] - -Simply place one of the above materials into the crafting grid to obtain four -portions of dye in that color From those initial 8 colors, you can directly -fashion another 11, for a total of 19 standard colors (including the various -greys): - -[ http://digitalaudioconcepts.com/vanessa/hobbies/minetest/screenshots/unifieddyes2.png ] -[ The complete 19-color standard set. ] - -The standardized colors and their crafting methods are as follows: - -* Red (0°): one rose -* Orange (30°): one tulip, or put one red dye and one yellow dye into the - crafting grid to mix them (yields 2) -* Yellow (60°): one yellow dandelion -* Lime (90°): mix yellow + green (yields 2) -* Green (120°): one cactus, or mix yellow + blue (yields 2) -* Aqua (150°): mix green + cyan (yields 2) -* Cyan (180°): mix green + blue (yields 2) -* Sky blue (210°): mix cyan + blue (yields 2) -* Blue (240°): one geranium -* Violet (270°): one viola, or mix blue + magenta (yields 2). -* Magenta (300°): mix blue + red (yields 2) -* Red-violet (330°): mix magenta + red (yields 2) - -* Black (7.5%): one piece of coal -* Dark grey (25%): mix one white + two black (yields 3) -* Medium grey (50%): mix one white and one black (yields 2) -* Light grey (75%): Mix two white and one black (yields 3) -* White (95%): one white dandelion. - -The degree figures are the colors' hues on a standard HSV color wheel, and are -what I used in the textures supplied with this mod. For the greys, the figures -in parenthesis indicate the intended brightness of the shade, relative to -white. Note that black and white don't go all the way to the bottom/top of the -scale, as doing so may crush some details in textures made in those shades (see -below, regarding semi-automatic texture generation). - - -Darker/Lighter colors ---------------------- - -To obtain a dark (33%) version of a given color, use two portions of black dye -along with the base color from the list above, which yields three portions of -the final color. - -To obtain a medium-brightness (66%) version of a given color, mix one portion -the base color with one portion of black dye (for example, medium lime = lime + -black). All such mixtures yield two portions of the final color. - -To obtain a light (150% over full) version of a given color, mix one portion of -the base color with one portion of white dye. Yields 2 portions of the final -color. - - -Low-saturation colors ---------------------- - -To get the low saturation (50%) version of one of the base colors, mix one or -more of white, black, or a shade of grey with the desired base color: - -Dark, low saturation: dark grey dye + color (yields 2), or two blacks + 1 white -+ color (yields 4). For example, dark, low-saturation red = red + dark grey, -or red + two black + one white. - -Medium brightness, low saturation: medium grey dye + color (yields 2), or black -+ white + color (yields 3). For example, medium, low-saturation green = green -+ medium grey, or green + black + white. - -Full, low saturation: light grey dye + color (yields 2), or 1 black + 2 whites -+ color (yields 4). For example, bright, low-saturation blue = blue + light -grey, or blue + black + 2 white. - -There is no low-saturation version of the "light" colors. - -Red + white always returns default pink dye, and black + green always returns -default dark green dye. - - -RGB values ----------- - -All RGB values and filenames for all colors and shades of grey are represented -in the file "colors.txt" (which was generated with the bash script -"listcolors.sh"), included in the distribution directory. Note that -listcolors.sh is an example only and was written for a different set of -textures than what Unified Dyes includes now. - - -Misc. Notes ------------ - -If you need to use /give commands, the item names for the standard set of 12 -regular "full" colors (plus pink, brown, and dark green) is simply "dye:color", -e.g. "dye:red", "dye:pink", or "dye:skyblue". Greys have a similar naming -convention: dye:white, dye:light_grey, dye:grey, dye:dark_grey, or dye:black. - -For everything beyond those initial 19 colors, the item names are of the -following format: - -unifieddyes:{"light_" or "medium_" or "dark_"}{color}{nothing or "_s50"}. - -For example, low saturation dark yellow is "unifieddyes:dark_yellow_s50", while -light normal-saturation red-violet would be "unifieddyes:light_redviolet". - -See the texture filenames in the textures/ folder for further hints - all of -the item names follow the same format as the corresponding filenames, save for -having a colon (:) instead of the first underscore (_). - - -Semi-automatic generation of textures -===================================== - -The texture generator script ----------------------------- - -Obviously, in order for this mod or the above template to be useful, you'll -need textures. If you plan to support the entire range of colors offered by -Unified Dyes, there is a BASH script included with this mod as well with the -above template named gentextures.sh, which will, with an appropriately- colored -and appropriately-named source texture, and possibly an overlay texture, -generate a complete set of colored and greyscale textures. - -The script requires bc (the calculator program) to handle some basic math -regarding the hue adjustments, and Imagemagick's "convert" program handles all -of the actual conversions. - -First thing's first though - you need source textures. Using your favorite -image editor, create a single version of your desired texture. Draw it in the -brightest, deepest shade of RED you can muster without losing any detail, and -save it out. Ideally, you will want the average color of the texture, when -taking into account all bright and dark areas, to be as close as possible to -the hex value #FF0000 (0 degrees, 100% saturation, pure red) without losing any -appreciable #detail. - -Save this source texture out as a PNG image, with a filename of -"whatever_base.png", where "whatever" is the one-word name of your mod - for -example, mymod_base.png. - -If you want to add an image on top of the colored blocks, such as a frame, -which you want to be the same color throughout all of the textures, create it -now. It should consist only of those parts of the textures that you want to -leave unchanged, with some level of alpha transparency everywhere else, -depending on how much of the image needs to remain unchanged. Save it out as a -PNG image, using any filename you want, for example myoverlay.png. - -Now, use chmod to make the script executable, if necessary, and run it. - -If you don't need the overlay, you just need to supply one command line -argument: the base name of your mod. The script will use that parameter as the -basis of its texture filenames. For example: - -./gentextures.sh mymod - -The script will then look for mymod_base.png and copy and convert it into -things like mymod_red.png, mymod_dark_blue.png, and so on. - -If you want to use an overlay also, skip the above step and run the script with -the base name as the first parameter, and the complete filename of your overlay -as the second instead. For example: - -./gentextures.sh mymod myoverlay.png - -Otherwise, the program will iterate through all of the hues and shades that are -supported by unifieddyes (though this is done manually, not by reading anything -from the mod), compositing your overlay image in after the recolor step, if -you're using that option. - -All of the output files will be placed in a new folder, generated-textures/ in -the current directory. Note that the script looks for the above files in the -current directory also. - -The script has a third mode as well: - -./gentextures.sh -t mymod myoverlay.png - -In this mode, the script will leave the base texture mymod_base.png unchanged, -and instead will rotate the colors of the overlay image and then composite that -onto the base texture. The same color changes will happen with the overlay in -this mode, so it's a good idea to make the overlay some fairly saturated shade -of red. Along with that, the base image should be some neutral color; any -color is fine as long as the result is what you wanted. - -The program attempts to verify that the files you've asked it to use will -actually work, and will exit immediately if the any are invalid, missing, etc. - -Use your favorite image browser or file manager to review the results in -generated-textures/, and if they're right, copy them over to the textures/ -folder in your mod. - -Note that this script does not generate brown and pink variations of your base -texture - you'll have to do those two manually. +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. diff --git a/unifieddyes/README.md b/unifieddyes/README.md new file mode 100644 index 0000000..44ddbb2 --- /dev/null +++ b/unifieddyes/README.md @@ -0,0 +1,16 @@ +VanessaE'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 diff --git a/unifieddyes/init.lua b/unifieddyes/init.lua index 35b2e72..ff2fd41 100644 --- a/unifieddyes/init.lua +++ b/unifieddyes/init.lua @@ -315,7 +315,7 @@ function unifieddyes.getpaletteidx(color, palette_type) local origcolor = color local aliases = { ["pink"] = "light_red", - ["brown"] = "dark_orange", + ["brown"] = "medium_orange", } local grayscale = { @@ -499,7 +499,7 @@ function unifieddyes.getpaletteidx(color, palette_type) else if color == "brown" then color = "orange" - shade = "dark" + shade = "medium" elseif color == "pink" then color = "red" shade = "light" @@ -804,12 +804,15 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do on_use = unifieddyes.on_use }) else - 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 - }) + 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) @@ -960,6 +963,8 @@ for _,i in ipairs(unifieddyes.base_color_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( { @@ -976,6 +981,8 @@ for _,i in ipairs(unifieddyes.base_color_crafts) do 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 }, @@ -1021,15 +1028,23 @@ for _, i in ipairs(unifieddyes.greymixes) do }) end -minetest.register_alias("unifieddyes:light_red", "dye:pink") -minetest.register_alias("unifieddyes:dark_green", "dye:dark_green") +-- 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:darkgrey", "dye:dark_grey") minetest.register_alias("unifieddyes:dark_grey", "dye:dark_grey") -minetest.register_alias("unifieddyes:grey", "dye:grey") -minetest.register_alias("unifieddyes:lightgrey", "dye:light_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") |