init.lua 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. local S = minetest.get_translator("colorcubes")
  2. local cc = {}
  3. cc.colors = { "white", "yellow", "orange", "red", "redviolet", "magenta", "violet", "blue", "skyblue", "cyan", "aqua", "green", "lime", "pink", "brown", "dark_green", "light_gray", "dark_gray", "black" }
  4. cc.dye_colors = {
  5. white = "unicolor_white", yellow = "unicolor_yellow", orange = "unicolor_orange", red = "unicolor_red", redviolet = "unicolor_red_violet", magenta = "unicolor_magenta", violet = "unicolor_violet", blue = "unicolor_blue", skyblue = "unicolor_sky_blue", cyan = "unicolor_cyan", aqua = "unicolor_aqua", green = "unicolor_green", lime = "unicolor_lime", pink = "unicolor_light_red", brown = "unicolor_dark_orange", dark_green = "unicolor_dark_green", light_gray = "unicolor_grey", dark_gray = "unicolor_darkgrey", black = "unicolor_black" }
  6. cc.human_colors = {
  7. single = {
  8. white = S("White basic color cube"),
  9. yellow = S("Yellow basic color cube"),
  10. orange = S("Orange basic color cube"),
  11. red = S("Red basic color cube"),
  12. redviolet = S("Red-violet basic color cube"),
  13. magenta = S("Magenta basic color cube"),
  14. violet = S("Violet basic color cube"),
  15. blue = S("Blue basic color cube"),
  16. skyblue = S("Skyblue basic color cube"),
  17. cyan = S("Cyan basic color cube"),
  18. aqua = S("Aqua basic color cube"),
  19. green = S("Green basic color cube"),
  20. lime = S("Lime basic color cube"),
  21. pink = S("Pink basic color cube"),
  22. brown = S("Brown basic color cube"),
  23. dark_green = S("Dark green basic color cube"),
  24. light_gray = S("Light gray basic color cube"),
  25. dark_gray = S("Dark gray basic color cube"),
  26. black = S("Black basic color cube"),
  27. },
  28. window = {
  29. white = S("White window color cube"),
  30. yellow = S("Yellow window color cube"),
  31. orange = S("Orange window color cube"),
  32. red = S("Red window color cube"),
  33. redviolet = S("Red-violet window color cube"),
  34. magenta = S("Magenta window color cube"),
  35. violet = S("Violet window color cube"),
  36. blue = S("Blue window color cube"),
  37. skyblue = S("Skyblue window color cube"),
  38. cyan = S("Cyan window color cube"),
  39. aqua = S("Aqua window color cube"),
  40. green = S("Green window color cube"),
  41. lime = S("Lime window color cube"),
  42. pink = S("Pink window color cube"),
  43. brown = S("Brown window color cube"),
  44. dark_green = S("Dark green window color cube"),
  45. light_gray = S("Light gray window color cube"),
  46. dark_gray = S("Dark gray window color cube"),
  47. black = S("Black window color cube"),
  48. },
  49. tiled = {
  50. white = S("White tiled color cube"),
  51. yellow = S("Yellow tiled color cube"),
  52. orange = S("Orange tiled color cube"),
  53. red = S("Red tiled color cube"),
  54. redviolet = S("Red-violet tiled color cube"),
  55. magenta = S("Magenta tiled color cube"),
  56. violet = S("Violet tiled color cube"),
  57. blue = S("Blue tiled color cube"),
  58. skyblue = S("Skyblue tiled color cube"),
  59. cyan = S("Cyan tiled color cube"),
  60. aqua = S("Aqua tiled color cube"),
  61. green = S("Green tiled color cube"),
  62. lime = S("Lime tiled color cube"),
  63. pink = S("Pink tiled color cube"),
  64. brown = S("Brown tiled color cube"),
  65. dark_green = S("Dark green tiled color cube"),
  66. light_gray = S("Light gray tiled color cube"),
  67. dark_gray = S("Dark gray tiled color cube"),
  68. black = S("Black tiled color cube"),
  69. },
  70. inward = {
  71. white = S("White concentric color cube"),
  72. yellow = S("Yellow concentric color cube"),
  73. orange = S("Orange concentric color cube"),
  74. red = S("Red concentric color cube"),
  75. redviolet = S("Red-violet concentric color cube"),
  76. magenta = S("Magenta concentric color cube"),
  77. violet = S("Violet concentric color cube"),
  78. blue = S("Blue concentric color cube"),
  79. skyblue = S("Skyblue concentric color cube"),
  80. cyan = S("Cyan concentric color cube"),
  81. aqua = S("Aqua concentric color cube"),
  82. green = S("Green concentric color cube"),
  83. lime = S("Lime concentric color cube"),
  84. pink = S("Pink concentric color cube"),
  85. brown = S("Brown concentric color cube"),
  86. dark_green = S("Dark green concentric color cube"),
  87. light_gray = S("Light gray concentric color cube"),
  88. dark_gray = S("Dark gray concentric color cube"),
  89. black = S("Black concentric color cube"),
  90. },
  91. light = {
  92. white = S("White light color cube"),
  93. yellow = S("Yellow light color cube"),
  94. orange = S("Orange light color cube"),
  95. red = S("Red light color cube"),
  96. redviolet = S("Red-violet light color cube"),
  97. magenta = S("Magenta light color cube"),
  98. violet = S("Violet light color cube"),
  99. blue = S("Blue light color cube"),
  100. skyblue = S("Skyblue light color cube"),
  101. cyan = S("Cyan light color cube"),
  102. aqua = S("Aqua light color cube"),
  103. green = S("Green light color cube"),
  104. lime = S("Lime light color cube"),
  105. }
  106. }
  107. local light_level = 14
  108. local soundmaker = function (mod)
  109. if mod == nil then mod = 0 end
  110. local scrub = function(value)
  111. return math.min(1, math.max(value, 0))
  112. end
  113. return { footstep = { name = "colorcubes_block_footstep", gain = scrub(0.25 + mod) },
  114. dig = { name = "colorcubes_block_dig", gain = scrub(1) },
  115. dug = { name = "colorcubes_block_dug", gain = scrub(0.7 + mod) },
  116. place = { name = "colorcubes_block_place", gain = 0.5 }, }
  117. end
  118. --[[
  119. Color Cubes groups for better identification:
  120. colorcube=1: this item is a color cube
  121. colorcube_single=1: basic color cube
  122. colorcube_window=1: window color cube
  123. colorcube_tiled=1: tiled color cube (1 color)
  124. colorcube_tiled=2: tiled color cube (2 colors)
  125. colorcube_inward=1: concentric color cube
  126. colorcube_light=1: light color cube
  127. ]]
  128. for i=1,#cc.colors do
  129. local c = cc.colors[i]
  130. local d = cc.dye_colors[c]
  131. -- Blocks with a simple square pattern
  132. local nodedef1 = {
  133. description = cc.human_colors.single[c],
  134. tiles = { "colorcubes_1_"..c..".png" },
  135. groups = { dig_immediate = 2, colorcube = 1, colorcube_single = 1 },
  136. sounds = soundmaker(0),
  137. }
  138. minetest.register_node("colorcubes:"..c.."_single", nodedef1)
  139. -- Windows
  140. local nodedef_window = {
  141. description = cc.human_colors.window[c],
  142. tiles = { "colorcubes_window_"..c..".png" },
  143. groups = { dig_immediate = 2, colorcube = 1, colorcube_window = 1 },
  144. use_texture_alpha = true,
  145. drawtype = "glasslike",
  146. sunlight_propagates = true,
  147. paramtype = "light",
  148. sounds = soundmaker(-0.1),
  149. }
  150. minetest.register_node("colorcubes:"..c.."_window", nodedef_window)
  151. -- Blocks with a tile pattern (4 tiles)
  152. local nodedef4 = {
  153. description = cc.human_colors.tiled[c],
  154. tiles = { "colorcubes_4_"..c..".png" },
  155. groups = { dig_immediate = 2, colorcube = 1, colorcube_tiled = 1 },
  156. sounds = soundmaker(0.1),
  157. }
  158. minetest.register_node("colorcubes:"..c.."_tiled", nodedef4)
  159. -- Blocks with a concentric square pattern
  160. local nodedef_inward = {
  161. description = cc.human_colors.inward[c],
  162. tiles = { "colorcubes_inward_"..c..".png" },
  163. groups = { dig_immediate = 2, colorcube = 1, colorcube_inward = 1},
  164. sounds = soundmaker(0.15),
  165. }
  166. minetest.register_node("colorcubes:"..c.."_inward", nodedef_inward)
  167. -- Lamps in different brightness levels
  168. if light_level > 1 then
  169. local nodedef_light = {
  170. description = cc.human_colors.light[c],
  171. tiles = { "colorcubes_light_"..c..".png" },
  172. groups = { dig_immediate = 2, colorcube = 1, colorcube_light = 1 },
  173. sounds = soundmaker(-0.05),
  174. light_source = light_level,
  175. }
  176. minetest.register_node("colorcubes:"..c.."_light", nodedef_light)
  177. if(minetest.get_modpath("paint_roller") ~= nil) then
  178. paint_roller.register_one("colorcubes:"..c.."_light", d, "light color cubes" )
  179. end
  180. light_level = light_level - 1
  181. end
  182. --[[ If the paint_roller mod is installed, register the nodes to it ]]
  183. if(minetest.get_modpath("paint_roller") ~= nil) then
  184. paint_roller.register_one("colorcubes:"..c.."_single", d, "basic color cubes" )
  185. paint_roller.register_one("colorcubes:"..c.."_tiled", d, "tiled color cubes" )
  186. paint_roller.register_one("colorcubes:"..c.."_inward", d, "concentric color cubes" )
  187. paint_roller.register_one("colorcubes:"..c.."_window", d, "window color cubes" )
  188. end
  189. -- Register various crafting recipes for convenience
  190. minetest.register_craft({
  191. output = "colorcubes:"..c.."_tiled",
  192. recipe = {
  193. {"colorcubes:"..c.."_single", "colorcubes:"..c.."_single" },
  194. {"colorcubes:"..c.."_single", "colorcubes:"..c.."_single" },
  195. },
  196. })
  197. minetest.register_craft({
  198. output = "colorcubes:"..c.."_inward",
  199. recipe = {
  200. {"colorcubes:"..c.."_single", "colorcubes:"..c.."_single", "colorcubes:"..c.."_single" },
  201. {"colorcubes:"..c.."_single", "", "colorcubes:"..c.."_single" },
  202. {"colorcubes:"..c.."_single", "colorcubes:"..c.."_single", "colorcubes:"..c.."_single" },
  203. },
  204. })
  205. minetest.register_craft({
  206. output = "colorcubes:"..c.."_single 8",
  207. recipe = {
  208. {"colorcubes:"..c.."_inward" }
  209. },
  210. })
  211. minetest.register_craft({
  212. output = "colorcubes:"..c.."_single 4",
  213. recipe = {
  214. {"colorcubes:"..c.."_tiled" }
  215. },
  216. })
  217. -- Color recipes (dye + color cube)
  218. minetest.register_craft({
  219. type = "shapeless",
  220. output = "colorcubes:"..c.."_single",
  221. recipe = { "group:dye,"..d, "group:colorcube_single" },
  222. })
  223. minetest.register_craft({
  224. type = "shapeless",
  225. output = "colorcubes:"..c.."_tiled",
  226. recipe = { "group:dye,"..d, "group:colorcube_tiled" },
  227. })
  228. minetest.register_craft({
  229. type = "shapeless",
  230. output = "colorcubes:"..c.."_inward",
  231. recipe = { "group:dye,"..d, "group:colorcube_inward" },
  232. })
  233. minetest.register_craft({
  234. type = "shapeless",
  235. output = "colorcubes:"..c.."_light",
  236. recipe = { "group:dye,"..d, "group:colorcube_light" },
  237. })
  238. minetest.register_craft({
  239. type = "shapeless",
  240. output = "colorcubes:"..c.."_window",
  241. recipe = { "group:dye,"..d, "group:colorcube_window" },
  242. })
  243. end
  244. --[[ Tiled blocks with 2 different colors (usuall complementary colors) ]]
  245. local complementary = { { "yellow", "blue"}, {"aqua", "redviolet"}, {"red", "cyan"}, {"light_gray", "dark_gray"}, {"green", "magenta"}, {"orange", "skyblue"}, {"lime", "violet"}, {"black", "white"}, {"orange", "brown"} }
  246. local complementary_names = {
  247. S("Yellow/blue tiled color cube"),
  248. S("Aqua/red-violet tiled color cube"),
  249. S("Red/cyan tiled color cube"),
  250. S("Light/dark gray tiled color cube"),
  251. S("Green/magenta tiled color cube"),
  252. S("Orange/skyblue tiled color cube"),
  253. S("Lime/violet tiled color cube"),
  254. S("Black/white tiled color cube"),
  255. S("Orange/brown tiled color cube"),
  256. }
  257. for i=1,#complementary do
  258. local c1, c2
  259. c1 = complementary[i][1]
  260. c2 = complementary[i][2]
  261. local nodeid = "colorcubes:"..c1.."_"..c2.."_tiled"
  262. local tex = "colorcubes_4c_"..c1.."_"..c2..".png"
  263. local texR90 = tex .. "^[transformR90"
  264. minetest.register_node(nodeid, {
  265. description = complementary_names[i],
  266. tiles = { tex, tex, tex, tex, texR90, texR90 },
  267. groups = { dig_immediate = 2, colorcube = 1, colorcube_tiled = 2 },
  268. sounds = soundmaker(0.1),
  269. })
  270. minetest.register_craft({
  271. output = nodeid,
  272. recipe = {
  273. {"colorcubes:"..c1.."_single", "colorcubes:"..c2.."_single" },
  274. {"colorcubes:"..c2.."_single", "colorcubes:"..c1.."_single" },
  275. },
  276. })
  277. minetest.register_craft({
  278. output = nodeid,
  279. recipe = {
  280. {"colorcubes:"..c2.."_single", "colorcubes:"..c1.."_single" },
  281. {"colorcubes:"..c1.."_single", "colorcubes:"..c2.."_single" },
  282. },
  283. })
  284. --[[ This register the block to the paint roller mod. Note that this block can
  285. only be painted, but it can not be reversed; it will not be possible to paint a
  286. tiled block so that it becomes a 2-color block. Thus, we use minor hack by using
  287. a fake dye group called “none” to make sure there is no dye to turn a tiled block
  288. into a 2-color tiled block. ]]
  289. if(minetest.get_modpath("paint_roller") ~= nil) then
  290. paint_roller.register_one(nodeid, "none", "tiled color cubes" )
  291. end
  292. end