Compare commits
27 Commits
2018-09-08
...
2019-07-18
Author | SHA1 | Date | |
---|---|---|---|
9ff40a7fe6 | |||
e048da9c3c | |||
6c8a0b2387 | |||
10ab87bf65 | |||
f59c8affc1 | |||
667bce80b9 | |||
5039a8ce07 | |||
13a8cbb38f | |||
58dd71e561 | |||
1fd850d37c | |||
334de564fd | |||
545968517b | |||
368205d3b8 | |||
feed6d5aae | |||
4811847655 | |||
44629935d2 | |||
ccbedcd3d6 | |||
622d09a243 | |||
27fe090395 | |||
230ac1342a | |||
e921095006 | |||
3eb3a9a330 | |||
078a998d29 | |||
4b88997360 | |||
ef7d357e0b | |||
66774213e2 | |||
ad21862eee |
19
API.md
@ -12,7 +12,6 @@ minetest.register_node("mymod:colored_node", {
|
|||||||
paramtype2 = "color",
|
paramtype2 = "color",
|
||||||
palette = "unifieddyes_palette_extended.png",
|
palette = "unifieddyes_palette_extended.png",
|
||||||
groups = {snappy = 1, cracky = 2, ud_param2_colorable = 1}
|
groups = {snappy = 1, cracky = 2, ud_param2_colorable = 1}
|
||||||
on_construct = unifieddyes.on_construct,
|
|
||||||
airbrush_replacement_node = "mymod:my_other_colored_node"
|
airbrush_replacement_node = "mymod:my_other_colored_node"
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
@ -32,8 +31,6 @@ minetest.register_node("mymod:colored_node", {
|
|||||||
|
|
||||||
If your node if of the kind where you need the split palette, but you need to put the *full color name* into the node name, as opposed to just the hue, then add the keys `ud_color_start` and `ud_color_end` and set them to the positions of the first and last characters of the color name (where 1 is the first character of the mod name at the start of the node name, i.e. "mymod:foo_bar_orange_baz" would have the start set to 15 and the end at 20).
|
If your node if of the kind where you need the split palette, but you need to put the *full color name* into the node name, as opposed to just the hue, then add the keys `ud_color_start` and `ud_color_end` and set them to the positions of the first and last characters of the color name (where 1 is the first character of the mod name at the start of the node name, i.e. "mymod:foo_bar_orange_baz" would have the start set to 15 and the end at 20).
|
||||||
|
|
||||||
`on_construct`: see below.
|
|
||||||
|
|
||||||
`airbrush_replacement_node`: The node to swap in when the airbrush is used on this node. For example, you could `minetest.override_item()` on some default node to add this field, pointing to a colorable node of your own, so that when the default node is painted, it's replaced with yours in the new color.
|
`airbrush_replacement_node`: The node to swap in when the airbrush is used on this node. For example, you could `minetest.override_item()` on some default node to add this field, pointing to a colorable node of your own, so that when the default node is painted, it's replaced with yours in the new color.
|
||||||
|
|
||||||
#### Function calls
|
#### Function calls
|
||||||
@ -86,10 +83,6 @@ This is called when a node is punched while wielding the airbrush.
|
|||||||
|
|
||||||
This one does just what it sounds like - it shows the color selector formspec.
|
This one does just what it sounds like - it shows the color selector formspec.
|
||||||
|
|
||||||
**`unifieddyes.on_construct(pos)`**
|
|
||||||
|
|
||||||
This function, usually called from 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 actually 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.register_color_craft(recipe)`**
|
**`unifieddyes.register_color_craft(recipe)`**
|
||||||
|
|
||||||
This will loop through all of Unified Dyes' color lists, generating one recipe for every color in the palette given in the call. Example usage:
|
This will loop through all of Unified Dyes' color lists, generating one recipe for every color in the palette given in the call. Example usage:
|
||||||
@ -117,12 +110,17 @@ This will loop through all of Unified Dyes' color lists, generating one recipe f
|
|||||||
|
|
||||||
`recipe` is the same as in the normal call, except that Unified Dyes will replace all instances of the string "NEUTRAL_NODE" with the item specified in the preceding `neutral_node` field. Every instance of "MAIN_DYE" will be replaced with a portion of dye, as Unified Dyes' recipe helper works through its color lists (i.e. this field will become whatever dye is needed for each recipe).
|
`recipe` is the same as in the normal call, except that Unified Dyes will replace all instances of the string "NEUTRAL_NODE" with the item specified in the preceding `neutral_node` field. Every instance of "MAIN_DYE" will be replaced with a portion of dye, as Unified Dyes' recipe helper works through its color lists (i.e. this field will become whatever dye is needed for each recipe).
|
||||||
|
|
||||||
`output_prefix` and `output_suffix`, if specified (must use both if at all), will cause the recipe registration to ignore the usual `output` field, and instead set to the output item to `output_prefix` + (hue) + `output_suffix`. Used for mods that use the split 89-color palette. `hue` will thus be one of the 12 hues, or "grey", as defined by the split palettes.
|
`output_prefix` and `output_suffix`, if specified (must use both if at all), will cause the recipe registration to set to the output item to `output_prefix` + (hue) + `output_suffix` + `output`. Used for mods that use the split 89-color palette. `hue` will thus be one of the 12 hues, or "grey", as defined by the split palettes. In this situation, you can set `output` to your recipe yield (with a leading space) if needed. For example, if the prefix is "foo:bar", the suffix is "baz", and the output is set to " 3", then the craft helper will generate output item strings of the form "foo:bar_COLOR_baz 3", for each color in the table.
|
||||||
|
|
||||||
**`unifieddyes.make_colored_itemstack(itemstack, palette, color)`**
|
**`unifieddyes.make_colored_itemstack(itemstack, palette, color)`**
|
||||||
|
|
||||||
Makes a colored itemstack out of the given `itemstack` and `color` (as a dye, e.g. "dye:dark_red_s50"), setting the correct index per the `palette` field, which works as described above for `unifieddyes.getpaletteidx()`. Said itemstack is returned as a string suitable for use as the output field of a craft recipe, equal in size to the itemstack passed into the function (e.g. if you give it "mymod:colored_node 7", it'll return a stack of 7 colored items).
|
Makes a colored itemstack out of the given `itemstack` and `color` (as a dye, e.g. "dye:dark_red_s50"), setting the correct index per the `palette` field, which works as described above for `unifieddyes.getpaletteidx()`. Said itemstack is returned as a string suitable for use as the output field of a craft recipe, equal in size to the itemstack passed into the function (e.g. if you give it "mymod:colored_node 7", it'll return a stack of 7 colored items).
|
||||||
|
|
||||||
|
**`unifieddyes.generate_split_palette_nodes(name, def, drop)`**
|
||||||
|
|
||||||
|
Does just what it sounds like - it registers all the nodes that are needed for a given base node (`def`) to be able to use the split palette, each named according to `name`, with the palette hue appended. If a custom drop is needed, it can be passed along (only a string is allowed here, specifying a single item).
|
||||||
|
|
||||||
|
|
||||||
#### Tables
|
#### Tables
|
||||||
|
|
||||||
In addition to the above API calls, Unified Dyes provides several useful tables
|
In addition to the above API calls, Unified Dyes provides several useful tables
|
||||||
@ -162,10 +160,9 @@ If your mod used the old paradigm where you craft a neutral-colored item, place
|
|||||||
|
|
||||||
* Convert that remaining texture to grayscale, enhance its contrast as much as you can without distorting it, and rename it and the node it'll be used to something neutral-sounding.
|
* Convert that remaining texture to grayscale, enhance its contrast as much as you can without distorting it, and rename it and the node it'll be used to something neutral-sounding.
|
||||||
|
|
||||||
* Add the `on_construct` and `palette` keys to your neutral node definition, for example:
|
* Add the `palette` key to your neutral node definition, for example:
|
||||||
|
|
||||||
`palette = "unifieddyes_palette_extended.png",`
|
`palette = "unifieddyes_palette_extended.png",`
|
||||||
`on_construct = unifieddyes.on_construct,`
|
|
||||||
|
|
||||||
* Adjust your node's groups to specify that the node can be colored. Example (note the last item):
|
* Adjust your node's groups to specify that the node can be colored. Example (note the last item):
|
||||||
|
|
||||||
@ -175,7 +172,7 @@ If your mod used the old paradigm where you craft a neutral-colored item, place
|
|||||||
|
|
||||||
* Add the above recipes helper call (which replaces those delted recipes)
|
* Add the above recipes helper call (which replaces those delted recipes)
|
||||||
|
|
||||||
* If your colored node is based on someone else's neutral node, for example if you made a mod that creates multiple colors of minetest_game's default clay, you may find it best to create a single "stand-in" node that's identical to the neutral node, but named for your mod, hidden from the creative inventory, and which has a properly-prepared grayscale texture image in addition to the above keys. Use `minetest.override_item()` to add the `on_construct`, `palette`, and `airbrush_replacement_node` keys, and the `ud_param2_colorable` group, to that "someone else's" node. Then use that node and your custom, hidden node in the craft helper call.
|
* If your colored node is based on someone else's neutral node, for example if you made a mod that creates multiple colors of minetest_game's default clay, you may find it best to create a single "stand-in" node that's identical to the neutral node, but named for your mod, hidden from the creative inventory, and which has a properly-prepared grayscale texture image in addition to the above keys. Use `minetest.override_item()` to add the `palette` and `airbrush_replacement_node` keys, and the `ud_param2_colorable` group, to that "someone else's" node. Then use that node and your custom, hidden node in the craft helper call.
|
||||||
|
|
||||||
* You will need to write a run-only-once LBM to convert your old statically-colored nodes to use hardware coloring. See above for functions that will help reduce the work required for this part.
|
* You will need to write a run-only-once LBM to convert your old statically-colored nodes to use hardware coloring. See above for functions that will help reduce the work required for this part.
|
||||||
|
|
||||||
|
90
colors.txt
@ -1,90 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
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
|
|
407
init.lua
@ -41,23 +41,6 @@ else
|
|||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
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/
|
-- the names of the various colors here came from http://www.procato.com/rgb+index/
|
||||||
|
|
||||||
unifieddyes.HUES_EXTENDED = {
|
unifieddyes.HUES_EXTENDED = {
|
||||||
@ -87,6 +70,13 @@ unifieddyes.HUES_EXTENDED = {
|
|||||||
{ "crimson", 0xff, 0x00, 0x40 }
|
{ "crimson", 0xff, 0x00, 0x40 }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unifieddyes.HUES_WITH_GREY = {}
|
||||||
|
|
||||||
|
for _,i in ipairs(unifieddyes.HUES_EXTENDED) do
|
||||||
|
table.insert(unifieddyes.HUES_WITH_GREY, i[1])
|
||||||
|
end
|
||||||
|
table.insert(unifieddyes.HUES_WITH_GREY, "grey")
|
||||||
|
|
||||||
unifieddyes.HUES_WALLMOUNTED = {
|
unifieddyes.HUES_WALLMOUNTED = {
|
||||||
"red",
|
"red",
|
||||||
"orange",
|
"orange",
|
||||||
@ -109,6 +99,14 @@ unifieddyes.VALS = {
|
|||||||
"dark_"
|
"dark_"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unifieddyes.VALS_SPLIT = {
|
||||||
|
"faint_",
|
||||||
|
"light_",
|
||||||
|
"",
|
||||||
|
"medium_",
|
||||||
|
"dark_"
|
||||||
|
}
|
||||||
|
|
||||||
unifieddyes.VALS_EXTENDED = {
|
unifieddyes.VALS_EXTENDED = {
|
||||||
"faint_",
|
"faint_",
|
||||||
"pastel_",
|
"pastel_",
|
||||||
@ -130,7 +128,7 @@ unifieddyes.GREYS = {
|
|||||||
unifieddyes.GREYS_EXTENDED = table.copy(unifieddyes.GREYS)
|
unifieddyes.GREYS_EXTENDED = table.copy(unifieddyes.GREYS)
|
||||||
|
|
||||||
for i = 1, 14 do
|
for i = 1, 14 do
|
||||||
if i ~= 0 and i ~= 3 and i ~= 7 and i ~= 11 and i ~= 15 then
|
if i ~= 0 and i ~= 4 and i ~= 8 and i ~= 11 and i ~= 15 then
|
||||||
table.insert(unifieddyes.GREYS_EXTENDED, "grey_"..i)
|
table.insert(unifieddyes.GREYS_EXTENDED, "grey_"..i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -159,8 +157,6 @@ unifieddyes.player_last_right_clicked = {}
|
|||||||
unifieddyes.palette_has_color = {}
|
unifieddyes.palette_has_color = {}
|
||||||
unifieddyes.player_showall = {}
|
unifieddyes.player_showall = {}
|
||||||
|
|
||||||
-- unifieddyes.player_last_right_clicked[placer:get_player_name()] = {pos = pos, node = node, def = def}
|
|
||||||
|
|
||||||
-- if a node with a palette is placed in the world,
|
-- if a node with a palette is placed in the world,
|
||||||
-- but the itemstack used to place it has no palette_index (color byte),
|
-- but the itemstack used to place it has no palette_index (color byte),
|
||||||
-- create something appropriate to make it officially white.
|
-- create something appropriate to make it officially white.
|
||||||
@ -176,24 +172,67 @@ minetest.register_on_placenode(
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not string.find(itemstack:to_string(), "palette_index") then
|
if not string.find(itemstack:to_string(), "palette_index") then
|
||||||
local param2 = 0
|
local param2
|
||||||
local color = 0
|
local color = 0
|
||||||
|
|
||||||
if def.palette == "unifieddyes_palette_extended.png" then
|
if def.palette == "unifieddyes_palette_extended.png"
|
||||||
|
and def.paramtype2 == "color" then
|
||||||
param2 = 240
|
param2 = 240
|
||||||
color = 240
|
color = 240
|
||||||
elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then
|
elseif def.palette == "unifieddyes_palette_colorwallmounted.png"
|
||||||
|
and def.paramtype2 == "colorwallmounted" then
|
||||||
param2 = newnode.param2 % 8
|
param2 = newnode.param2 % 8
|
||||||
else -- it's a split palette
|
elseif string.find(def.palette, "unifieddyes_palette_")
|
||||||
|
and def.paramtype2 == "colorfacedir" then -- it's a split palette
|
||||||
param2 = newnode.param2 % 32
|
param2 = newnode.param2 % 32
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if param2 then
|
||||||
minetest.swap_node(pos, {name = newnode.name, param2 = param2})
|
minetest.swap_node(pos, {name = newnode.name, param2 = param2})
|
||||||
minetest.get_meta(pos):set_int("palette_index", color)
|
minetest.get_meta(pos):set_int("palette_index", color)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
-- The complementary function: strip-off the color if the node being dug is still white/neutral
|
||||||
|
|
||||||
|
local function move_item(item, pos, inv)
|
||||||
|
if not creative_mode or not inv:contains_item("main", item, true) then
|
||||||
|
inv:add_item("main", item)
|
||||||
|
end
|
||||||
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
function unifieddyes.on_dig(pos, node, digger)
|
||||||
|
|
||||||
|
local playername = digger:get_player_name()
|
||||||
|
if minetest.is_protected(pos, playername) then
|
||||||
|
minetest.record_protection_violation(pos, playername)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local oldparam2 = minetest.get_node(pos).param2
|
||||||
|
local def = minetest.registered_items[node.name]
|
||||||
|
local del_color
|
||||||
|
|
||||||
|
if def.paramtype2 == "color" and oldparam2 == 240 and def.palette == "unifieddyes_palette_extended.png" then
|
||||||
|
del_color = true
|
||||||
|
elseif def.paramtype2 == "colorwallmounted" and math.floor(oldparam2 / 8) == 0 and def.palette == "unifieddyes_palette_colorwallmounted.png" then
|
||||||
|
del_color = true
|
||||||
|
elseif def.paramtype2 == "colorfacedir" and math.floor(oldparam2 / 32) == 0 and string.find(def.palette, "unifieddyes_palette_") then
|
||||||
|
del_color = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local inv = digger:get_inventory()
|
||||||
|
|
||||||
|
if del_color then
|
||||||
|
if inv:room_for_item("main", node.name) then move_item(node.name, pos, inv) end
|
||||||
|
else
|
||||||
|
return minetest.node_dig(pos, node, digger)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- just stubs to keep old mods from crashing when expecting auto-coloring
|
-- just stubs to keep old mods from crashing when expecting auto-coloring
|
||||||
-- or getting back the dye on dig.
|
-- or getting back the dye on dig.
|
||||||
|
|
||||||
@ -203,6 +242,35 @@ end
|
|||||||
function unifieddyes.after_dig_node(foo)
|
function unifieddyes.after_dig_node(foo)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- This helper function creates multiple copies of the passed node,
|
||||||
|
-- for the split palette - one per hue, plus grey - and assigns
|
||||||
|
-- proper palettes and other attributes
|
||||||
|
|
||||||
|
function unifieddyes.generate_split_palette_nodes(name, def, drop)
|
||||||
|
for _, color in ipairs(unifieddyes.HUES_WITH_GREY) do
|
||||||
|
local def2 = table.copy(def)
|
||||||
|
local desc_color = string.gsub(string.upper(string.sub(color, 1, 1))..string.sub(color, 2), "_", " ")
|
||||||
|
if string.sub(def2.description, -1) == ")" then
|
||||||
|
def2.description = string.sub(def2.description, 1, -2)..", "..desc_color.." shades)"
|
||||||
|
else
|
||||||
|
def2.description = def2.description.."("..desc_color.." shades)"
|
||||||
|
end
|
||||||
|
def2.palette = "unifieddyes_palette_"..color.."s.png"
|
||||||
|
def2.paramtype2 = "colorfacedir"
|
||||||
|
def2.groups.ud_param2_colorable = 1
|
||||||
|
|
||||||
|
if drop then
|
||||||
|
def2.drop = {
|
||||||
|
items = {
|
||||||
|
{items = {drop.."_"..color}, inherit_color = true },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_node(":"..name.."_"..color, def2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- This helper function creates a colored itemstack
|
-- This helper function creates a colored itemstack
|
||||||
|
|
||||||
function unifieddyes.make_colored_itemstack(item, palette, color)
|
function unifieddyes.make_colored_itemstack(item, palette, color)
|
||||||
@ -215,13 +283,14 @@ end
|
|||||||
-- these helper functions register all of the recipes needed to create colored
|
-- these helper functions register all of the recipes needed to create colored
|
||||||
-- nodes with any of the dyes supported by that node's palette.
|
-- nodes with any of the dyes supported by that node's palette.
|
||||||
|
|
||||||
local function register_c(craft, hue, sat, val)
|
local function register_c(craft, h, sat, val)
|
||||||
|
local hue = (type(h) == "table") and h[1] or h
|
||||||
local color = ""
|
local color = ""
|
||||||
if val then
|
if val then
|
||||||
if craft.palette ~= "extended" then
|
if craft.palette == "wallmounted" then
|
||||||
color = val..hue..sat
|
color = val..hue..sat
|
||||||
else
|
else
|
||||||
color = val..hue[1]..sat
|
color = val..hue..sat
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
color = hue -- if val is nil, then it's grey.
|
color = hue -- if val is nil, then it's grey.
|
||||||
@ -233,18 +302,19 @@ local function register_c(craft, hue, sat, val)
|
|||||||
recipe = string.gsub(recipe, "NEUTRAL_NODE", craft.neutral_node)
|
recipe = string.gsub(recipe, "NEUTRAL_NODE", craft.neutral_node)
|
||||||
local newrecipe = minetest.deserialize(recipe)
|
local newrecipe = minetest.deserialize(recipe)
|
||||||
|
|
||||||
local output = craft.output
|
local coutput = craft.output or ""
|
||||||
|
local output = coutput
|
||||||
if craft.output_prefix then
|
if craft.output_prefix then
|
||||||
if craft.palette ~= "split" then
|
if craft.palette ~= "split" then
|
||||||
output = craft.output_prefix..color..craft.output_suffix
|
output = craft.output_prefix..color..craft.output_suffix..coutput
|
||||||
else
|
else
|
||||||
if hue == "white" or hue == "black" or string.find(hue, "grey") then
|
if hue == "white" or hue == "black" or string.find(hue, "grey") then
|
||||||
output = craft.output_prefix.."grey"..craft.output_suffix
|
output = craft.output_prefix.."grey"..craft.output_suffix..coutput
|
||||||
elseif hue == "pink" then
|
elseif hue == "pink" then
|
||||||
dye = "dye:light_red"
|
dye = "dye:light_red"
|
||||||
output = craft.output_prefix.."red"..craft.output_suffix
|
output = craft.output_prefix.."red"..craft.output_suffix..coutput
|
||||||
else
|
else
|
||||||
output = craft.output_prefix..hue..craft.output_suffix
|
output = craft.output_prefix..hue..craft.output_suffix..coutput
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -261,9 +331,9 @@ local function register_c(craft, hue, sat, val)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function unifieddyes.register_color_craft(craft)
|
function unifieddyes.register_color_craft(craft)
|
||||||
local hues_table = unifieddyes.HUES
|
local hues_table = unifieddyes.HUES_EXTENDED
|
||||||
local sats_table = unifieddyes.SATS
|
local sats_table = unifieddyes.SATS
|
||||||
local vals_table = unifieddyes.VALS
|
local vals_table = unifieddyes.VALS_SPLIT
|
||||||
local greys_table = unifieddyes.GREYS
|
local greys_table = unifieddyes.GREYS
|
||||||
|
|
||||||
if craft.palette == "wallmounted" then
|
if craft.palette == "wallmounted" then
|
||||||
@ -273,7 +343,6 @@ function unifieddyes.register_color_craft(craft)
|
|||||||
sats_table = {""}
|
sats_table = {""}
|
||||||
vals_table = unifieddyes.VALS
|
vals_table = unifieddyes.VALS
|
||||||
elseif craft.palette == "extended" then
|
elseif craft.palette == "extended" then
|
||||||
hues_table = unifieddyes.HUES_EXTENDED
|
|
||||||
vals_table = unifieddyes.VALS_EXTENDED
|
vals_table = unifieddyes.VALS_EXTENDED
|
||||||
greys_table = unifieddyes.GREYS_EXTENDED
|
greys_table = unifieddyes.GREYS_EXTENDED
|
||||||
end
|
end
|
||||||
@ -358,10 +427,10 @@ end
|
|||||||
function unifieddyes.get_hsv(name) -- expects a node/item name
|
function unifieddyes.get_hsv(name) -- expects a node/item name
|
||||||
local hue = ""
|
local hue = ""
|
||||||
local a,b
|
local a,b
|
||||||
for _, i in ipairs(unifieddyes.HUES) do
|
for _, i in ipairs(unifieddyes.HUES_EXTENDED) do
|
||||||
a,b = string.find(name, "_"..i)
|
a,b = string.find(name, "_"..i[1])
|
||||||
if a and not ( string.find(name, "_redviolet") and i == "red" ) then
|
if a then
|
||||||
hue = i
|
hue = i[1]
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -391,9 +460,10 @@ end
|
|||||||
-- in the function below, color is just a color string, while
|
-- in the function below, color is just a color string, while
|
||||||
-- palette_type can be:
|
-- palette_type can be:
|
||||||
--
|
--
|
||||||
-- "split" = 89 color palette split into pieces for colorfacedir
|
|
||||||
-- "wallmounted" = 32-color abridged palette
|
|
||||||
-- "extended" = 256 color palette
|
-- "extended" = 256 color palette
|
||||||
|
-- "split" = 200 color palette split into pieces for colorfacedir
|
||||||
|
-- "wallmounted" = 32-color abridged palette
|
||||||
|
|
||||||
|
|
||||||
function unifieddyes.getpaletteidx(color, palette_type)
|
function unifieddyes.getpaletteidx(color, palette_type)
|
||||||
|
|
||||||
@ -417,7 +487,7 @@ function unifieddyes.getpaletteidx(color, palette_type)
|
|||||||
["grey_14"] = 1,
|
["grey_14"] = 1,
|
||||||
["grey_13"] = 2,
|
["grey_13"] = 2,
|
||||||
["grey_12"] = 3,
|
["grey_12"] = 3,
|
||||||
["light_grey"] = 3,
|
["light_grey"] = 4,
|
||||||
["grey_11"] = 4,
|
["grey_11"] = 4,
|
||||||
["grey_10"] = 5,
|
["grey_10"] = 5,
|
||||||
["grey_9"] = 6,
|
["grey_9"] = 6,
|
||||||
@ -442,24 +512,6 @@ function unifieddyes.getpaletteidx(color, palette_type)
|
|||||||
["black"] = 4,
|
["black"] = 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
local hues = {
|
|
||||||
["red"] = 1,
|
|
||||||
["orange"] = 2,
|
|
||||||
["yellow"] = 3,
|
|
||||||
["lime"] = 4,
|
|
||||||
["green"] = 5,
|
|
||||||
["aqua"] = 6,
|
|
||||||
["spring"] = 6,
|
|
||||||
["cyan"] = 7,
|
|
||||||
["skyblue"] = 8,
|
|
||||||
["azure"] = 8,
|
|
||||||
["blue"] = 9,
|
|
||||||
["violet"] = 10,
|
|
||||||
["magenta"] = 11,
|
|
||||||
["redviolet"] = 12,
|
|
||||||
["rose"] = 12,
|
|
||||||
}
|
|
||||||
|
|
||||||
local hues_extended = {
|
local hues_extended = {
|
||||||
["red"] = 0,
|
["red"] = 0,
|
||||||
["vermilion"] = 1,
|
["vermilion"] = 1,
|
||||||
@ -511,6 +563,17 @@ function unifieddyes.getpaletteidx(color, palette_type)
|
|||||||
["darks50"] = 7,
|
["darks50"] = 7,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local shades_split = {
|
||||||
|
["faint"] = 0,
|
||||||
|
[""] = 1,
|
||||||
|
["s50"] = 2,
|
||||||
|
["light"] = 3,
|
||||||
|
["medium"] = 4,
|
||||||
|
["mediums50"] = 5,
|
||||||
|
["dark"] = 6,
|
||||||
|
["darks50"] = 7,
|
||||||
|
}
|
||||||
|
|
||||||
local shades_extended = {
|
local shades_extended = {
|
||||||
["faint"] = 0,
|
["faint"] = 0,
|
||||||
["pastel"] = 1,
|
["pastel"] = 1,
|
||||||
@ -594,19 +657,8 @@ function unifieddyes.getpaletteidx(color, palette_type)
|
|||||||
shade = "light"
|
shade = "light"
|
||||||
end
|
end
|
||||||
if palette_type == "split" then -- it's colorfacedir
|
if palette_type == "split" then -- it's colorfacedir
|
||||||
|
if hues_extended[color] and shades_split[shade] then
|
||||||
-- If using this palette, translate new color names back to old.
|
return (shades_split[shade] * 32), hues_extended[color]+1
|
||||||
|
|
||||||
if color == "spring" then
|
|
||||||
color = "aqua"
|
|
||||||
elseif color == "azure" then
|
|
||||||
color = "skyblue"
|
|
||||||
elseif color == "rose" then
|
|
||||||
color = "redviolet"
|
|
||||||
end
|
|
||||||
|
|
||||||
if hues[color] and shades[shade] then
|
|
||||||
return (shades[shade] * 32), hues[color]
|
|
||||||
end
|
end
|
||||||
elseif palette_type == "extended" then
|
elseif palette_type == "extended" then
|
||||||
if hues_extended[color] and shades_extended[shade] then
|
if hues_extended[color] and shades_extended[shade] then
|
||||||
@ -616,6 +668,19 @@ function unifieddyes.getpaletteidx(color, palette_type)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function unifieddyes.get_color_from_dye_name(name)
|
||||||
|
if name == "dye:black" then
|
||||||
|
return "000000"
|
||||||
|
elseif name == "dye:white" then
|
||||||
|
return "ffffff"
|
||||||
|
end
|
||||||
|
local item = minetest.registered_items[name]
|
||||||
|
if not item then return end
|
||||||
|
local inv_image = item.inventory_image
|
||||||
|
if not inv_image then return end
|
||||||
|
return string.match(inv_image,"colorize:#(......):200")
|
||||||
|
end
|
||||||
|
|
||||||
-- punch-to-recolor using the airbrush
|
-- punch-to-recolor using the airbrush
|
||||||
|
|
||||||
function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
||||||
@ -626,8 +691,30 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
|||||||
painting_with = unifieddyes.player_current_dye[player_name]
|
painting_with = unifieddyes.player_current_dye[player_name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not painting_with then
|
||||||
|
minetest.chat_send_player(player_name, "*** You need to set a color first.")
|
||||||
|
minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,")
|
||||||
|
minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.")
|
||||||
|
minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
local pos = minetest.get_pointed_thing_position(pointed_thing)
|
||||||
if not pos then return end
|
if not pos then
|
||||||
|
local look_angle = player:get_look_vertical()
|
||||||
|
if look_angle > -1.55 then
|
||||||
|
minetest.chat_send_player(player_name, "*** No node selected")
|
||||||
|
else
|
||||||
|
local hexcolor = unifieddyes.get_color_from_dye_name(painting_with)
|
||||||
|
if hexcolor then
|
||||||
|
local r = tonumber(string.sub(hexcolor,1,2),16)
|
||||||
|
local g = tonumber(string.sub(hexcolor,3,4),16)
|
||||||
|
local b = tonumber(string.sub(hexcolor,5,6),16)
|
||||||
|
player:set_sky({r=r,g=g,b=b,a=255},"plain")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local def = minetest.registered_items[node.name]
|
local def = minetest.registered_items[node.name]
|
||||||
@ -638,29 +725,29 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if not painting_with then
|
if not (def.groups and def.groups.ud_param2_colorable and def.groups.ud_param2_colorable > 0) then
|
||||||
minetest.chat_send_player(player_name, "*** You need to set a color first.")
|
|
||||||
minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,")
|
|
||||||
minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.")
|
|
||||||
minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if not def.palette or not (def.groups and def.groups.ud_param2_colorable > 0) then
|
|
||||||
minetest.chat_send_player(player_name, "*** That node can't be colored.")
|
minetest.chat_send_player(player_name, "*** That node can't be colored.")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local palette = nil
|
local palette = nil
|
||||||
local fdir = 0
|
local fdir = 0
|
||||||
if def.palette == "unifieddyes_palette_extended.png" then
|
if not def or not def.palette then
|
||||||
|
minetest.chat_send_player(player_name, "*** That node can't be colored -- it's either undefined or has no palette.")
|
||||||
|
return
|
||||||
|
elseif def.palette == "unifieddyes_palette_extended.png" then
|
||||||
palette = "extended"
|
palette = "extended"
|
||||||
elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then
|
elseif def.palette == "unifieddyes_palette_colorwallmounted.png" then
|
||||||
palette = "wallmounted"
|
palette = "wallmounted"
|
||||||
fdir = node.param2 % 8
|
fdir = node.param2 % 8
|
||||||
else
|
elseif def.palette ~= "unifieddyes_palette_extended.png"
|
||||||
|
and def.palette ~= "unifieddyes_palette_colorwallmounted.png"
|
||||||
|
and string.find(def.palette, "unifieddyes_palette_") then
|
||||||
palette = "split"
|
palette = "split"
|
||||||
fdir = node.param2 % 32
|
fdir = node.param2 % 32
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(player_name, "*** That node can't be colored -- it has an invalid color mode.")
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local idx, hue = unifieddyes.getpaletteidx(painting_with, palette)
|
local idx, hue = unifieddyes.getpaletteidx(painting_with, palette)
|
||||||
@ -683,6 +770,7 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
|||||||
local name = def.airbrush_replacement_node or node.name
|
local name = def.airbrush_replacement_node or node.name
|
||||||
|
|
||||||
if palette == "split" then
|
if palette == "split" then
|
||||||
|
|
||||||
local modname = string.sub(name, 1, string.find(name, ":")-1)
|
local modname = string.sub(name, 1, string.find(name, ":")-1)
|
||||||
local nodename2 = string.sub(name, string.find(name, ":")+1)
|
local nodename2 = string.sub(name, string.find(name, ":")+1)
|
||||||
local oldcolor = "snozzberry"
|
local oldcolor = "snozzberry"
|
||||||
@ -693,21 +781,21 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
|
|||||||
newcolor = string.sub(painting_with, 5)
|
newcolor = string.sub(painting_with, 5)
|
||||||
else
|
else
|
||||||
if hue ~= 0 then
|
if hue ~= 0 then
|
||||||
newcolor = unifieddyes.HUES[hue]
|
newcolor = unifieddyes.HUES_EXTENDED[hue][1]
|
||||||
else
|
else
|
||||||
newcolor = "grey"
|
newcolor = "grey"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if def.airbrush_replacement_node then
|
||||||
|
oldcolor = "grey"
|
||||||
|
else
|
||||||
local s = string.sub(def.palette, 21)
|
local s = string.sub(def.palette, 21)
|
||||||
oldcolor = string.sub(s, 1, string.find(s, "s.png")-1)
|
oldcolor = string.sub(s, 1, string.find(s, "s.png")-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
if newcolor == "spring" then newcolor = "aqua"
|
|
||||||
elseif newcolor == "azure" then newcolor = "skyblue"
|
|
||||||
elseif newcolor == "rose" then newcolor = "redviolet"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
name = modname..":"..string.gsub(nodename2, oldcolor, newcolor)
|
name = modname..":"..string.gsub(nodename2, oldcolor, newcolor)
|
||||||
|
|
||||||
if not minetest.registered_items[name] then
|
if not minetest.registered_items[name] then
|
||||||
minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.")
|
minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.")
|
||||||
return
|
return
|
||||||
@ -772,16 +860,16 @@ function unifieddyes.color_to_name(param2, def)
|
|||||||
local h = color - v * 8
|
local h = color - v * 8
|
||||||
return unifieddyes.VALS[v]..unifieddyes.HUES_WALLMOUNTED[h+1]
|
return unifieddyes.VALS[v]..unifieddyes.HUES_WALLMOUNTED[h+1]
|
||||||
|
|
||||||
elseif string.find(def.palette, "unifieddyes_palette") then -- it's the "split" 89-color palette
|
elseif string.find(def.palette, "unifieddyes_palette") then -- it's the split palette
|
||||||
-- palette names in this mode are always "unifieddyes_palette_COLORs.png"
|
-- palette names in this mode are always "unifieddyes_palette_COLORs.png"
|
||||||
|
|
||||||
local s = string.sub(def.palette, 21)
|
local s = string.sub(def.palette, 21)
|
||||||
local color = string.sub(s, 1, string.find(s, "s.png")-1)
|
local color = string.sub(s, 1, string.find(s, "s.png")-1)
|
||||||
|
|
||||||
local v = math.floor(param2/32)
|
local v = math.floor(param2/32)
|
||||||
if v == 0 then return "white" end
|
|
||||||
if color ~= "grey" then
|
if color ~= "grey" then
|
||||||
if v == 1 then return color
|
if v == 0 then return "faint_"..color
|
||||||
|
elseif v == 1 then return color
|
||||||
elseif v == 2 then return color.."_s50"
|
elseif v == 2 then return color.."_s50"
|
||||||
elseif v == 3 then return "light_"..color
|
elseif v == 3 then return "light_"..color
|
||||||
elseif v == 4 then return "medium_"..color
|
elseif v == 4 then return "medium_"..color
|
||||||
@ -799,10 +887,18 @@ end
|
|||||||
|
|
||||||
local hps = 0.6 -- horizontal position scale
|
local hps = 0.6 -- horizontal position scale
|
||||||
local vps = 1.3 -- vertical position scale
|
local vps = 1.3 -- vertical position scale
|
||||||
local vs = 0.3 -- vertical shift/offset
|
local vs = 0.1 -- vertical shift/offset
|
||||||
local color_button_size = ";0.75,0.75;"
|
|
||||||
|
|
||||||
function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv)
|
local color_button_size = ";0.75,0.75;"
|
||||||
|
local color_square_size = ";0.69,0.69;"
|
||||||
|
|
||||||
|
function unifieddyes.make_readable_color(color)
|
||||||
|
local s = string.gsub(color, "_", " ")
|
||||||
|
s = string.gsub(s, "s50", "(low saturation)")
|
||||||
|
return s
|
||||||
|
end
|
||||||
|
|
||||||
|
function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist)
|
||||||
|
|
||||||
local dye = "dye:"..colorname
|
local dye = "dye:"..colorname
|
||||||
|
|
||||||
@ -814,7 +910,8 @@ function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative,
|
|||||||
end
|
end
|
||||||
|
|
||||||
local unavail_overlay = ""
|
local unavail_overlay = ""
|
||||||
if not showall and not unifieddyes.palette_has_color[nodepalette.."_"..colorname] then
|
if not showall and not unifieddyes.palette_has_color[nodepalette.."_"..colorname]
|
||||||
|
or (explist and not explist[colorname]) then
|
||||||
if overlay == "" then
|
if overlay == "" then
|
||||||
unavail_overlay = "^unifieddyes_unavailable_overlay.png"
|
unavail_overlay = "^unifieddyes_unavailable_overlay.png"
|
||||||
else
|
else
|
||||||
@ -822,18 +919,30 @@ function unifieddyes.make_colored_square(hexcolor, colorname, showall, creative,
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local tooltip = "tooltip["..colorname..";"..
|
||||||
|
unifieddyes.make_readable_color(colorname)..
|
||||||
|
"\n(dye:"..colorname..")]"
|
||||||
|
|
||||||
if dye == painting_with then
|
if dye == painting_with then
|
||||||
overlay = "^unifieddyes_select_overlay.png"
|
overlay = "^unifieddyes_select_overlay.png"
|
||||||
selindic = "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..
|
selindic = "unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..tooltip
|
||||||
"tooltip["..colorname..";"..colorname.."]"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local form = "image_button["..
|
local form
|
||||||
|
if unavail_overlay == "" then
|
||||||
|
form = "image_button["..
|
||||||
(hp*hps)..","..(v2*vps+vs)..
|
(hp*hps)..","..(v2*vps+vs)..
|
||||||
color_button_size..
|
color_button_size..
|
||||||
"unifieddyes_white_square.png"..colorize..overlay..unavail_overlay..";"..
|
"unifieddyes_white_square.png"..colorize..overlay..unavail_overlay..";"..
|
||||||
colorname..";]"..
|
colorname..";]"..
|
||||||
"tooltip["..colorname..";"..colorname.."]"
|
tooltip
|
||||||
|
else
|
||||||
|
form = "image["..
|
||||||
|
(hp*hps)..","..(v2*vps+vs)..
|
||||||
|
color_square_size..
|
||||||
|
"unifieddyes_white_square.png"..colorize..overlay..unavail_overlay.."]"..
|
||||||
|
tooltip
|
||||||
|
end
|
||||||
|
|
||||||
return form, selindic
|
return form, selindic
|
||||||
end
|
end
|
||||||
@ -850,7 +959,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
local nodepalette = "extended"
|
local nodepalette = "extended"
|
||||||
local showall = unifieddyes.player_showall[player_name]
|
local showall = unifieddyes.player_showall[player_name]
|
||||||
|
|
||||||
t[1] = "size[15,8.5]label[7,-0.25;Select a color:]"
|
t[1] = "size[14.5,8.5]label[7,-0.3;Select a color:]"
|
||||||
local selindic = "unifieddyes_select_overlay.png^unifieddyes_question.png]"
|
local selindic = "unifieddyes_select_overlay.png^unifieddyes_question.png]"
|
||||||
|
|
||||||
local last_right_click = unifieddyes.player_last_right_clicked[player_name]
|
local last_right_click = unifieddyes.player_last_right_clicked[player_name]
|
||||||
@ -861,15 +970,22 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
elseif last_right_click.def.palette == "unifieddyes_palette_extended.png" then
|
elseif last_right_click.def.palette == "unifieddyes_palette_extended.png" then
|
||||||
t[#t+1] = "label[0.5,8.25;(Right-clicked a node that supports all 256 colors, showing them all)]"
|
t[#t+1] = "label[0.5,8.25;(Right-clicked a node that supports all 256 colors, showing them all)]"
|
||||||
showall = true
|
showall = true
|
||||||
elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png" then
|
elseif last_right_click.def.palette ~= "unifieddyes_palette_extended.png"
|
||||||
|
and last_right_click.def.palette ~= "unifieddyes_palette_colorwallmounted.png"
|
||||||
|
and string.find(last_right_click.def.palette, "unifieddyes_palette_") then
|
||||||
nodepalette = "split"
|
nodepalette = "split"
|
||||||
elseif not string.find(last_right_click.def.palette, "unifieddyes_palette_") then
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not last_right_click.def.groups
|
||||||
|
or not last_right_click.def.groups.ud_param2_colorable
|
||||||
|
or not last_right_click.def.palette
|
||||||
|
or not string.find(last_right_click.def.palette, "unifieddyes_palette_") then
|
||||||
t[#t+1] = "label[0.5,8.25;(Right-clicked a node not supported by the Airbrush, showing all colors)]"
|
t[#t+1] = "label[0.5,8.25;(Right-clicked a node not supported by the Airbrush, showing all colors)]"
|
||||||
end
|
end
|
||||||
else
|
|
||||||
t[#t+1] = "label[0.5,8.25;(Right-clicked a non-colorable node, showing all colors)]"
|
local explist = last_right_click.def.explist
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for v = 0, 6 do
|
for v = 0, 6 do
|
||||||
local val = unifieddyes.VALS_EXTENDED[v+1]
|
local val = unifieddyes.VALS_EXTENDED[v+1]
|
||||||
@ -879,7 +995,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
|
|
||||||
for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
||||||
local hue = h[1]
|
local hue = h[1]
|
||||||
local hp=hi-0.5
|
local hp=hi-1
|
||||||
|
|
||||||
local r = h[2]
|
local r = h[2]
|
||||||
local g = h[3]
|
local g = h[3]
|
||||||
@ -897,7 +1013,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
|
|
||||||
local hexcolor = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2)
|
local hexcolor = string.format("%02x", r2)..string.format("%02x", g2)..string.format("%02x", b2)
|
||||||
local f
|
local f
|
||||||
f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv)
|
f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist)
|
||||||
t[#t+1] = f
|
t[#t+1] = f
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -907,7 +1023,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
|
|
||||||
for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
for hi, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
||||||
local hue = h[1]
|
local hue = h[1]
|
||||||
local hp=hi-0.5
|
local hp=hi-1
|
||||||
|
|
||||||
local r = h[2]
|
local r = h[2]
|
||||||
local g = h[3]
|
local g = h[3]
|
||||||
@ -930,7 +1046,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
|
|
||||||
local hexcolor = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3)
|
local hexcolor = string.format("%02x", r3)..string.format("%02x", g3)..string.format("%02x", b3)
|
||||||
local f
|
local f
|
||||||
f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv)
|
f, selindic = unifieddyes.make_colored_square(hexcolor, val..hue..sat, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist)
|
||||||
t[#t+1] = f
|
t[#t+1] = f
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -939,7 +1055,7 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
local v2=5
|
local v2=5
|
||||||
for y = 0, 15 do
|
for y = 0, 15 do
|
||||||
|
|
||||||
local hp=(15-y)+0.5
|
local hp=15-y
|
||||||
|
|
||||||
local hexgrey = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17)
|
local hexgrey = string.format("%02x", y*17)..string.format("%02x", y*17)..string.format("%02x", y*17)
|
||||||
local grey = "grey_"..y
|
local grey = "grey_"..y
|
||||||
@ -952,54 +1068,58 @@ function unifieddyes.show_airbrush_form(player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local f
|
local f
|
||||||
f, selindic = unifieddyes.make_colored_square(hexgrey, grey, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv)
|
f, selindic = unifieddyes.make_colored_square(hexgrey, grey, showall, creative, painting_with, nodepalette, hp, v2, selindic, inv, explist)
|
||||||
t[#t+1] = f
|
t[#t+1] = f
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if not creative then
|
if not creative then
|
||||||
t[#t+1] = "image[10.3,"
|
t[#t+1] = "image[10,"
|
||||||
t[#t+1] = (vps*5+vs)
|
t[#t+1] = (vps*5.55+vs)
|
||||||
t[#t+1] = color_button_size
|
t[#t+1] = color_button_size
|
||||||
t[#t+1] = "unifieddyes_onhand_overlay.png]label[11.0,"
|
t[#t+1] = "unifieddyes_onhand_overlay.png]label[10.7,"
|
||||||
t[#t+1] = (vps*5.02+vs)
|
t[#t+1] = (vps*5.51+vs)
|
||||||
t[#t+1] = ";Dyes]"
|
t[#t+1] = ";Dyes]"
|
||||||
t[#t+1] = "label[11.0,"
|
t[#t+1] = "label[10.7,"
|
||||||
t[#t+1] = (vps*5.18+vs)
|
t[#t+1] = (vps*5.67+vs)
|
||||||
t[#t+1] = ";on hand]"
|
t[#t+1] = ";on hand]"
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
t[#t+1] = "image[11.9,"
|
t[#t+1] = "image[10,"
|
||||||
t[#t+1] = (vps*5+vs)
|
t[#t+1] = (vps*5+vs)
|
||||||
t[#t+1] = color_button_size
|
t[#t+1] = color_button_size
|
||||||
t[#t+1] = selindic
|
t[#t+1] = selindic
|
||||||
|
|
||||||
if painting_with then
|
if painting_with then
|
||||||
t[#t+1] = "label[12.6,"
|
t[#t+1] = "label[10.7,"
|
||||||
t[#t+1] = (vps*5.02+vs)
|
t[#t+1] = (vps*4.90+vs)
|
||||||
t[#t+1] = ";Your selection:]"
|
t[#t+1] = ";Your selection:]"
|
||||||
t[#t+1] = "label[12.6,"
|
t[#t+1] = "label[10.7,"
|
||||||
t[#t+1] = (vps*5.18+vs)
|
t[#t+1] = (vps*5.07+vs)
|
||||||
t[#t+1] = ";"
|
t[#t+1] = ";"
|
||||||
|
t[#t+1] = unifieddyes.make_readable_color(string.sub(painting_with, 5))
|
||||||
|
t[#t+1] = "]label[10.7,"
|
||||||
|
t[#t+1] = (vps*5.24+vs)
|
||||||
|
t[#t+1] = ";("
|
||||||
t[#t+1] = painting_with
|
t[#t+1] = painting_with
|
||||||
t[#t+1] = "]"
|
t[#t+1] = ")]"
|
||||||
else
|
else
|
||||||
t[#t+1] = "label[12.6,"
|
t[#t+1] = "label[10.7,"
|
||||||
t[#t+1] = (vps*5.1+vs)
|
t[#t+1] = (vps*5.07+vs)
|
||||||
t[#t+1] = ";Your selection]"
|
t[#t+1] = ";Your selection]"
|
||||||
end
|
end
|
||||||
|
|
||||||
t[#t+1] = "button_exit[11,8;2,1;cancel;Cancel]button_exit[13,8;2,1;accept;Accept]"
|
t[#t+1] = "button_exit[10.5,8;2,1;cancel;Cancel]button_exit[12.5,8;2,1;accept;Accept]"
|
||||||
|
|
||||||
|
|
||||||
if last_right_click and last_right_click.def and last_right_click.def.palette and nodepalette ~= "extended" then
|
if last_right_click and last_right_click.def and nodepalette ~= "extended" then
|
||||||
if showall then
|
if showall then
|
||||||
t[#t+1] = "button[0.5,8;2,1;show_avail;Show Available]"
|
t[#t+1] = "button[0,8;2,1;show_avail;Show Available]"
|
||||||
t[#t+1] = "label[2.5,8.25;(Currently showing all 256 colors)]"
|
t[#t+1] = "label[2,8.25;(Currently showing all 256 colors)]"
|
||||||
else
|
else
|
||||||
t[#t+1] = "button[0.5,8;2,1;show_all;Show All Colors]"
|
t[#t+1] = "button[0,8;2,1;show_all;Show All Colors]"
|
||||||
t[#t+1] = "label[2.5,8.25;(Currently only showing what the right-clicked node can use)]"
|
t[#t+1] = "label[2,8.25;(Currently only showing what the right-clicked node can use)]"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1047,7 +1167,7 @@ minetest.register_tool("unifieddyes:airbrush", {
|
|||||||
minetest.register_craft( {
|
minetest.register_craft( {
|
||||||
output = "unifieddyes:airbrush",
|
output = "unifieddyes:airbrush",
|
||||||
recipe = {
|
recipe = {
|
||||||
{ "default:gold_ingot", "", "bucket:bucket_empty" },
|
{ "basic_materials:brass_ingot", "", "basic_materials:plastic_sheet" },
|
||||||
{ "", "default:steel_ingot", "" },
|
{ "", "default:steel_ingot", "" },
|
||||||
{ "", "", "default:steel_ingot" }
|
{ "", "", "default:steel_ingot" }
|
||||||
},
|
},
|
||||||
@ -1165,14 +1285,6 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue)
|
minetest.register_alias("unifieddyes:"..val..hue, "dye:"..val..hue)
|
||||||
if h[1] == "spring" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."aqua", "dye:"..val.."spring")
|
|
||||||
elseif h[1] == "azure" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."skyblue", "dye:"..val.."azure")
|
|
||||||
elseif h[1] == "rose" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."redviolet", "dye:"..val.."rose")
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if v > 3 then -- also register the low-sat version
|
if v > 3 then -- also register the low-sat version
|
||||||
|
|
||||||
@ -1193,13 +1305,6 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do
|
|||||||
groups = { dye=1, not_in_creative_inventory=1 },
|
groups = { dye=1, not_in_creative_inventory=1 },
|
||||||
})
|
})
|
||||||
minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50")
|
minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50")
|
||||||
if h[1] == "spring" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."aqua_s50", "dye:"..val.."spring_s50")
|
|
||||||
elseif h[1] == "azure" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."skyblue_s50", "dye:"..val.."azure_s50")
|
|
||||||
elseif h[1] == "rose" then
|
|
||||||
minetest.register_alias("unifieddyes:"..val.."redviolet_s50", "dye:"..val.."rose_s50")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -1366,7 +1471,7 @@ for _,i in ipairs(unifieddyes.base_color_crafts) do
|
|||||||
|
|
||||||
minetest.register_craft( {
|
minetest.register_craft( {
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "dye:"..j[1]..color..j[2].." "..yield,
|
output = "dye:"..j[1]..color..j[2].." "..j[6],
|
||||||
recipe = {
|
recipe = {
|
||||||
"dye:"..color,
|
"dye:"..color,
|
||||||
firstdye,
|
firstdye,
|
||||||
|
74
locale/ru.txt
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# Translation by @drakes_journey
|
||||||
|
|
||||||
|
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) = Краснофиолетовая краска (низкая насыщенность)
|
||||||
|
|
||||||
|
[UnifiedDyes] Loaded! = [UnifiedDyes] загружен!
|
BIN
textures/unifieddyes_palette_ambers.png
Normal file
After Width: | Height: | Size: 93 B |
BIN
textures/unifieddyes_palette_azures.png
Normal file
After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_ceruleans.png
Normal file
After Width: | Height: | Size: 93 B |
BIN
textures/unifieddyes_palette_chartreuses.png
Normal file
After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_crimsons.png
Normal file
After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_fuchsias.png
Normal file
After Width: | Height: | Size: 93 B |
Before Width: | Height: | Size: 91 B After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_harlequins.png
Normal file
After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_indigos.png
Normal file
After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 93 B |
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_malachites.png
Normal file
After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_mulberrys.png
Normal file
After Width: | Height: | Size: 93 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B |
BIN
textures/unifieddyes_palette_roses.png
Normal file
After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_sapphires.png
Normal file
After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B |
BIN
textures/unifieddyes_palette_springs.png
Normal file
After Width: | Height: | Size: 91 B |
BIN
textures/unifieddyes_palette_turquoises.png
Normal file
After Width: | Height: | Size: 93 B |
BIN
textures/unifieddyes_palette_vermilions.png
Normal file
After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 91 B |