diff --git a/README.md b/README.md index 778a1ba..5e8bebc 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ - Doyousketch2's Stained Glass mod - ver 1.4 + ver 1.6 Image: http://oi47.tinypic.com/hst6s3.jpg @@ -87,6 +86,8 @@ The Palette includes: Full & half-saturation, medium and dark shades have been included as well as light, pastel, and faint tints. +Look at settings.txt to see how you can enable/disable full-glow, half-glow and no-glow blocks -- tested in all combinations. enjoy. + ============================================================================== @@ -101,6 +102,9 @@ or /giveme stained_glass:pastel_yellow or /giveme stained_glass:faint_yellow or /giveme stained_glass:yellow +or /giveme stained_glass:lowglow_yellow +or /giveme stained_glass:noglow_dark_green + You get the idea. diff --git a/changelog.txt b/changelog.txt index 32f11d4..76a1174 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,6 +2,10 @@ Changelog --------- +ver 1.6 +Fri 30 Aug 2013 +added configfile settings.txt to allow disabling of full_light (super_glow_glass-based), med_light (glow_glass-based) and no_light (default:glass) blocks. just set the relevant fields to 'false' and they will not be loaded when you start the game. + ver 1.5.1 Mon 26 Aug 2013 diff --git a/init.lua b/init.lua index 7d4ed17..1c235e3 100644 --- a/init.lua +++ b/init.lua @@ -1,255 +1,264 @@ ---[[ - -Stained Glass - -This mod provides luminescent stained glass blocks for Minetest 0.4.7+ - -Depends: -[moreblocks] by Calinou -[unifieddyes] by VanessaE - -============================================================================== -Sat 04 May 2013 01:52:35 PM EDT - -Copyright (C) 2013, Eli Innis -Email: doyousketch2 @ yahoo.com - -Unified Dyes was released under GNU-GPL 2.0, see LICENSE for info. -More Blocks was released under zlib/libpng for code and CC BY-SA 3.0 Unported for textures, see LICENSE.txt for info. - -Additional changes by VanessaEzekowitz in July 2013 to take all items -out of creative inventory. - -August 2013 -- Jeremy Anderson tries to get this working after the new color -changes, and to resurrect the craft recipes. Still GPL'd as far as I'm concerned. - -August 2013 -- rewritten a bit by VanessaEzekowitz to further condense the code. - -============================================================================== - - -Recipe for standard colors: - -dye -super glow glass -super glow glass -super glow glass - - -Recipe for pastel colors: - -light dye -white paint -super glow glass -super glow glass -super glow glass - - -Recipe for faint colors: - -light dye -white paint -white paint -super glow glass -super glow glass -super glow glass - -recipe for low-glow-stained-glass: -as above, but substitute 'glow glass' for super glow glass. - -recipe for no-glow-stained-glass: -as regular stained glass, but substitute plain 'glass' for super glow glass - - -All recipes produce three stained glass blocks. - -============================================================================== -]]-- - -function makenode(arg) - local name=arg.blockname - local myglow=arg.glow - local myprefix=arg.prefix - - --register item attributes - - minetest.register_node("stained_glass:"..myprefix..name, { - description = "Stained Glass - "..myprefix..name, - drawtype = "glasslike", - tiles = {"stained_glass_" .. name .. ".png"}, - paramtype = "light", - sunlight_propagates = true, - use_texture_alpha = true, - light_source = myglow, - is_ground_content = true, - groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, not_in_creative_inventory=1}, - sounds = default.node_sound_glass_defaults() - }) -end - -function stained_glass_define(arg) - local code=arg.colorcode - local name=arg.colorname - local rawdyename=arg.recipe - local mydye=arg.recipe - local myshadename=arg.shade - - local stained_glass_blocktype = { - [""]="moreblocks:super_glow_glass" , - ["lowglow_"]="moreblocks:glow_glass", - ["noglow_"]="default:glass", - -- here you can define alternate glowlevels, with - -- what type of glass they should use. - -- levels added here must be added - -- below (in stained_glass_lightlevel), too. - } - - local stained_glass_lightlevel = { - ["noglow_"] = 0, - [""] = LIGHT_MAX, - ["lowglow_"] = LIGHT_MAX-3, - - -- define alternate light levels here, with a new - -- prefix name and a new light level. perhaps you'd - -- like "dim" at a level of '6' for example. - } - - for myprefix,myglow in pairs(stained_glass_lightlevel) do - local glasstype = stained_glass_blocktype[myprefix] - - -- define myrecipe as a table, pass it in. - - local myrecipe = { mydye, glasstype, glasstype, glasstype } - -- those four items will ALWAYS be there. For faint and pastel, we - -- need to add additional dyes. If you have defined a new shade, then - -- you should probably handle it here. - - if myshadename == "pastel_" then - myrecipe[5] = "dye:white" - end - - if myshadename == "faint_" then - myrecipe[5] = "dye:white" - myrecipe[6] = "dye:white" - end - - minetest.register_craft({ - type = "shapeless", - output = "stained_glass:"..myprefix..name.." 3", - recipe = myrecipe, - }) - - makenode{blockname=name, glow=myglow, prefix=myprefix} - - if myprefix == "" then - minetest.register_alias( "stained_glass:" .. code, "stained_glass:" .. name) - if string.match(name,"redviolet") then - oldname=name - name=string.gsub(name, "redviolet","red_violet") -- need to support red_violet existence, too. - minetest.register_alias( "stained_glass:" .. name, "stained_glass:" .. oldname) - end - end - -- and an alias from the numeric to the named block - -- we need to keep the numeric block for all the people that used - -- pre-v1.4 blocks in their worlds. - -- no aliases for noglow- and lowglow- blocks, because they didn't - -- exist until v1.5 - end -end - --- true means this color's recipe must use a direct "dye:xxxxx" item name --- (perhaps because the related groups overlap two or more distinct colors) --- false means the recipe uses "group:dye,unicolor_xxxxx" - -stained_glass_hues = { - { "yellow", true }, - { "lime", false }, - { "green", true }, - { "aqua", false }, - { "cyan", false }, - { "skyblue", true }, - { "blue", false }, - { "violet", false }, - { "magenta", true }, - { "redviolet", true }, - { "red", true }, - { "orange", false }, - --- please note that these only apply when our shadelevel is "" - -} - -stained_glass_shades = { - {"dark_", 3 }, - {"medium_", 4 }, - {"", 5 }, -- full brightness - {"light_", 8 }, - {"pastel_", 9 }, - {"faint_", 91 } - - -- note that dark_ medium_ and plain also have a half-saturation - -- equivalent automatically defined in the code -} - -for i in ipairs(stained_glass_hues) do - - local huename = stained_glass_hues[i][1] - local huenumber = i - - for j in ipairs(stained_glass_shades) do - - local shadename = stained_glass_shades[j][1] - local shadenumber = stained_glass_shades[j][2] - - local recipevalue = nil - - recipevalue = "group:dye,unicolor_"..shadename..huename - if (shadename == "" and stained_glass_hues[i][2]) then - -- print(huename .. " is set to true -- substituting dye:huename ") - recipevalue = "dye:"..huename - elseif (shadename=="pastel_" or shadename=="faint_") then - -- force light_dye for pastel and faint colors - recipevalue = "group:dye,unicolor_light_"..huename - else -- default case - recipevalue = "group:dye,unicolor_"..shadename..huename - end - - if shadename == "dark_" or shadename == "medium_" or shadename == "" then - stained_glass_define({ - colorcode = huenumber.."_"..shadenumber.."_7", - colorname = shadename..huename, - recipe = recipevalue, - shade = shadename, - }) - - -- below is the automatic "half saturation" block - -- which was mentioned previously - -- this is unicolor only, so switch dyename - -- back to unicolor... - recipevalue="group:dye,unicolor_"..shadename..huename - stained_glass_define({ - colorcode = huenumber.."_"..shadenumber.."_6", - colorname = shadename..huename.."_s50", - recipe = recipevalue.."_s50", - shade = shadename, - }) - -- because we define two blocks inside this chunk of - -- code, we can't just define the relevant vars and - -- move the proc_call after the if-then loop. - - elseif shadename == "light_" or shadename == "pastel_" or shadename == "faint_" then - stained_glass_define({ - colorcode = huenumber.."_"..shadenumber.."_", - colorname = shadename..huename, - recipe = recipevalue, - shade = shadename, - }) - - end - - end -end - -print("[stained_glass] Loaded!") - - +--[[ + +Stained Glass + +This mod provides luminescent stained glass blocks for Minetest 0.4.7+ + +Depends: +[moreblocks] by Calinou +[unifieddyes] by VanessaE + +============================================================================== +Sat 04 May 2013 01:52:35 PM EDT + +Copyright (C) 2013, Eli Innis +Email: doyousketch2 @ yahoo.com + +Unified Dyes was released under GNU-GPL 2.0, see LICENSE for info. +More Blocks was released under zlib/libpng for code and CC BY-SA 3.0 Unported for textures, see LICENSE.txt for info. + +Additional changes by VanessaEzekowitz in July 2013 to take all items +out of creative inventory. + +August 2013 -- Jeremy Anderson tries to get this working after the new color +changes, and to resurrect the craft recipes. Still GPL'd as far as I'm concerned. + +August 2013 -- rewritten a bit by VanessaEzekowitz to further condense the code. + +============================================================================== + + +Recipe for standard colors: + +dye +super glow glass +super glow glass +super glow glass + + +Recipe for pastel colors: + +light dye +white paint +super glow glass +super glow glass +super glow glass + + +Recipe for faint colors: + +light dye +white paint +white paint +super glow glass +super glow glass +super glow glass + +recipe for low-glow-stained-glass: +as above, but substitute 'glow glass' for super glow glass. + +recipe for no-glow-stained-glass: +as regular stained glass, but substitute plain 'glass' for super glow glass + + +All recipes produce three stained glass blocks. + +============================================================================== +]]-- + +function makenode(arg) + local name=arg.blockname + local myglow=arg.glow + local myprefix=arg.prefix + + --register item attributes + + minetest.register_node("stained_glass:"..myprefix..name, { + description = "Stained Glass - "..myprefix..name, + drawtype = "glasslike", + tiles = {"stained_glass_" .. name .. ".png"}, + paramtype = "light", + sunlight_propagates = true, + use_texture_alpha = true, + light_source = myglow, + is_ground_content = true, + groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, not_in_creative_inventory=1}, + sounds = default.node_sound_glass_defaults() + }) +end + +function stained_glass_define(arg) + local code=arg.colorcode + local name=arg.colorname + local rawdyename=arg.recipe + local mydye=arg.recipe + local myshadename=arg.shade + + local stained_glass_blocktype = { } + + local stained_glass_lightlevel = { } + + if stained_glass.full_light then + stained_glass_lightlevel[""] = LIGHT_MAX + stained_glass_blocktype[""] = "moreblocks:super_glow_glass" + end -- see settings.txt for these settings. + + if stained_glass.med_light then + stained_glass_lightlevel["lowglow_"] = LIGHT_MAX-3 + stained_glass_blocktype["lowglow_"] = "moreblocks:glow_glass" + end + + if stained_glass.no_light then + stained_glass_lightlevel["noglow_"] = 0 + stained_glass_blocktype["noglow_"] = "default:glass" + end + + for myprefix,myglow in pairs(stained_glass_lightlevel) do + local glasstype = stained_glass_blocktype[myprefix] + + -- define myrecipe as a table, pass it in. + + local myrecipe = { mydye, glasstype, glasstype, glasstype } + -- those four items will ALWAYS be there. For faint and pastel, we + -- need to add additional dyes. If you have defined a new shade, then + -- you should probably handle it here. + + if myshadename == "pastel_" then + myrecipe[5] = "dye:white" + end + + if myshadename == "faint_" then + myrecipe[5] = "dye:white" + myrecipe[6] = "dye:white" + end + + minetest.register_craft({ + type = "shapeless", + output = "stained_glass:"..myprefix..name.." 3", + recipe = myrecipe, + }) + + makenode{blockname=name, glow=myglow, prefix=myprefix} + + if myprefix == "" then + minetest.register_alias( "stained_glass:" .. code, "stained_glass:" .. name) + if string.match(name,"redviolet") then + oldname=name + name=string.gsub(name, "redviolet","red_violet") -- need to support red_violet existence, too. + minetest.register_alias( "stained_glass:" .. name, "stained_glass:" .. oldname) + end + end + -- and an alias from the numeric to the named block + -- we need to keep the numeric block for all the people that used + -- pre-v1.4 blocks in their worlds. + -- no aliases for noglow- and lowglow- blocks, because they didn't + -- exist until v1.5 + end +end + +-- true means this color's recipe must use a direct "dye:xxxxx" item name +-- (perhaps because the related groups overlap two or more distinct colors) +-- false means the recipe uses "group:dye,unicolor_xxxxx" + +stained_glass= {} +local worldpath=minetest.get_worldpath() +local modpath=minetest.get_modpath("stained_glass") +dofile(modpath .. "/settings.txt") + +-- the new settings.txt file has a variety of possible settings. +-- see the file for examples. We'll access those settings where its important, in +-- the stained glass module, where we'll build up the tables to contain +-- only what we need. + +stained_glass_hues = { + { "yellow", true }, + { "lime", false }, + { "green", true }, + { "aqua", false }, + { "cyan", false }, + { "skyblue", true }, + { "blue", false }, + { "violet", false }, + { "magenta", true }, + { "redviolet", true }, + { "red", true }, + { "orange", false }, + +-- please note that these only apply when our shadelevel is "" + +} + +stained_glass_shades = { + {"dark_", 3 }, + {"medium_", 4 }, + {"", 5 }, -- full brightness + {"light_", 8 }, + {"pastel_", 9 }, + {"faint_", 91 } + + -- note that dark_ medium_ and plain also have a half-saturation + -- equivalent automatically defined in the code +} + +for i in ipairs(stained_glass_hues) do + + local huename = stained_glass_hues[i][1] + local huenumber = i + + for j in ipairs(stained_glass_shades) do + + local shadename = stained_glass_shades[j][1] + local shadenumber = stained_glass_shades[j][2] + + local recipevalue = nil + + recipevalue = "group:dye,unicolor_"..shadename..huename + if (shadename == "" and stained_glass_hues[i][2]) then + -- print(huename .. " is set to true -- substituting dye:huename ") + recipevalue = "dye:"..huename + elseif (shadename=="pastel_" or shadename=="faint_") then + -- force light_dye for pastel and faint colors + recipevalue = "group:dye,unicolor_light_"..huename + else -- default case + recipevalue = "group:dye,unicolor_"..shadename..huename + end + + if shadename == "dark_" or shadename == "medium_" or shadename == "" then + stained_glass_define({ + colorcode = huenumber.."_"..shadenumber.."_7", + colorname = shadename..huename, + recipe = recipevalue, + shade = shadename, + }) + + -- below is the automatic "half saturation" block + -- which was mentioned previously + -- this is unicolor only, so switch dyename + -- back to unicolor... + recipevalue="group:dye,unicolor_"..shadename..huename + stained_glass_define({ + colorcode = huenumber.."_"..shadenumber.."_6", + colorname = shadename..huename.."_s50", + recipe = recipevalue.."_s50", + shade = shadename, + }) + -- because we define two blocks inside this chunk of + -- code, we can't just define the relevant vars and + -- move the proc_call after the if-then loop. + + elseif shadename == "light_" or shadename == "pastel_" or shadename == "faint_" then + stained_glass_define({ + colorcode = huenumber.."_"..shadenumber.."_", + colorname = shadename..huename, + recipe = recipevalue, + shade = shadename, + }) + + end + + end +end + +print("[stained_glass] Loaded!") + + diff --git a/settings.txt b/settings.txt new file mode 100644 index 0000000..0f2893c --- /dev/null +++ b/settings.txt @@ -0,0 +1,3 @@ +stained_glass.full_light = true +stained_glass.med_light = true +stained_glass.no_light = true