diff --git a/df_farming/dimple_cup.lua b/df_farming/dimple_cup.lua index 0b53640..0dcb520 100644 --- a/df_farming/dimple_cup.lua +++ b/df_farming/dimple_cup.lua @@ -2,7 +2,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) local dimple_grow_time = df_farming.config.plant_growth_time * df_farming.config.dimple_cup_delay_multiplier / 4 -local dimple_cup_groups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, color_blue = 1, basecolor_blue = 1, excolor_blue = 1, light_sensitive_fungus = 11, flower = 1, flora = 1, fire_encouragement=60,fire_flammability=100, compostability=70, handy=1,shearsy=1,hoey=1} +local dimple_cup_groups = {snappy = 3, flammable = 2, plant = 1, not_in_creative_inventory = 1, attached_node = 1, light_sensitive_fungus = 11, flower = 1, flora = 1, fire_encouragement=60,fire_flammability=100, compostability=70, handy=1,shearsy=1,hoey=1} local register_dimple_cup = function(number) local name = "df_farming:dimple_cup_"..tostring(number) @@ -60,6 +60,14 @@ for i = 1,4 do register_dimple_cup(i) end +local dimple_cup_groups_harvested = {} +for group, val in pairs(dimple_cup_groups) do + dimple_cup_groups_harvested[group] = val +end +dimple_cup_groups_harvested.color_blue = 1 +dimple_cup_groups_harvested.basecolor_blue = 1 +dimple_cup_groups_harvested.excolor_blue = 1 + local name = "df_farming:dimple_cup_harvested" local def = { description = S("Dimple Cup"), @@ -73,7 +81,7 @@ local def = { floodable = true, is_ground_content = false, buildable_to = true, - groups = dimple_cup_groups, + groups = dimple_cup_groups_harvested, sounds = df_dependencies.sound_leaves(), selection_box = { type = "fixed", diff --git a/df_underworld_items/puzzle_chest.lua b/df_underworld_items/puzzle_chest.lua index 38a2341..130c2ca 100644 --- a/df_underworld_items/puzzle_chest.lua +++ b/df_underworld_items/puzzle_chest.lua @@ -8,6 +8,13 @@ local initialize = function(pos, meta) if not meta:contains("key") then local inv = meta:get_inventory() inv:set_size("main", 8) + + for i = 1, math.random(1,8) do + local item = ItemStack(df_underworld_items.colour_items[math.random(1,#df_underworld_items.colour_items)]) + --item:set_count(math.random(1,4)) + inv:add_item("main", item) + end + local next_seed = math.random() * 2^21 math.randomseed(pos.x + pos.y^8 + pos.z^16) -- Key is consistent with location @@ -32,19 +39,16 @@ end -- 3 4 local formspec_dial = function(identifier, state) - -- TODO replace label with image[] - -- TODO replace buttons with image buttons? - return "label[0.5,0;"..tostring(state).."]" - .. "button[0,0.25;0.5,0.5;"..identifier.."-;<]" - .. "button[1.5,0.25;0.5,0.5;"..identifier.."+;>]" + return "image[0.5,0;2,1;dfcaverns_chest_dial_"..tostring(state)..".png]" + .. "button[0,0.25;0.5,0.5;"..identifier.."+;<]" + .. "button[2.5,0.25;0.5,0.5;"..identifier.."-;>]" end local formspec_bar = function(horizontal, state, key) - -- TODO replace boxes with image[] if horizontal then - return "box[0,0;".. tostring(key/14 * 2) ..",1;#222222ff]box[0,0.1;".. tostring(state/14 * 2)..",0.8;#ff00ffff]" + return "box[0,0;".. tostring(key/14 * 2 + 0.1) ..",1;#222222ff]box[0.1,0.1;".. tostring(state/14 * 2)..",0.85;#ff00ff44]" end - return "box[0,0;1,".. tostring(key/14 * 2) ..";#222222ff]box[0.1,0;0.8,".. tostring(state/14 * 2)..";#ff00ffff]" + return "box[0,0;1,".. tostring(key/14 * 2 + 0.1) ..";#222222ff]box[0.1,0.1;0.85,".. tostring(state/14 * 2)..";#ff00ff44]" end local prefix = "df_underworld_items:puzzle_chest" @@ -61,22 +65,22 @@ local show_formspec = function(pos, node, clicker, itemstack, pointed_thing) local playername = clicker:get_player_name() local formname = prefix .. minetest.pos_to_string(pos) local formspec = "formspec_version[6]" - .. "size[11,11.5]" - .. "container[3.5,1]" + .. "size[11,12]" + .. "container[1.5,0.5]" .. "container[0,0]" .. formspec_dial("dial1", state[1]) .. "container_end[]" - .. "container[2,0]" .. formspec_dial("dial2", state[2]) .. "container_end[]" - .. "container[0,1]" .. formspec_dial("dial3", state[3]) .. "container_end[]" - .. "container[2,1]" .. formspec_dial("dial4", state[4]) .. "container_end[]" - .. "container[4.1,0]" .. formspec_bar(true, state_sum[1], key_sum[1]) .. "container_end[]" - .. "container[4.1,1]" .. formspec_bar(true, state_sum[2], key_sum[2]) .. "container_end[]" - .. "container[0.5,2.1]" .. formspec_bar(false, state_sum[3], key_sum[3]) .. "container_end[]" - .. "container[2.5,2.1]" .. formspec_bar(false, state_sum[4], key_sum[4]) .. "container_end[]" + .. "container[3,0]" .. formspec_dial("dial2", state[2]) .. "container_end[]" + .. "container[0,1.5]" .. formspec_dial("dial3", state[3]) .. "container_end[]" + .. "container[3,1.5]" .. formspec_dial("dial4", state[4]) .. "container_end[]" + .. "container[6.1,0]" .. formspec_bar(true, state_sum[1], key_sum[1]) .. "container_end[]" + .. "container[6.1,1.5]" .. formspec_bar(true, state_sum[2], key_sum[2]) .. "container_end[]" + .. "container[1,2.75]" .. formspec_bar(false, state_sum[3], key_sum[3]) .. "container_end[]" + .. "container[4,2.75]" .. formspec_bar(false, state_sum[4], key_sum[4]) .. "container_end[]" .. "container_end[]" - .. "list[current_player;main;0.6,6.2;8,4;]" + .. "list[current_player;main;0.6,6.7;8,4;]" if solved then local nodemeta = "nodemeta:"..pos.x..","..pos.y..","..pos.z formspec = formspec - .. "list["..nodemeta..";main;0.6,4.7;8,1;]" + .. "list["..nodemeta..";main;0.6,5.4;8,1;]" if meta:get_string("solved") ~= "true" then minetest.sound_play("dfcaverns_puzzle_chest_open", {pos = pos}) meta:set_string("solved", "true") @@ -112,6 +116,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) show_formspec(pos, nil, player) end) +local puzzle_chest_can_dig = function(pos, player) + local meta = minetest.get_meta(pos) + initialize(pos, meta) + local inv = meta:get_inventory() + return inv:is_empty("main") +end minetest.register_node("df_underworld_items:puzzle_chest_closed", { description = S("Puzzle Chest"), @@ -133,12 +143,7 @@ minetest.register_node("df_underworld_items:puzzle_chest_closed", { _mcl_hardness = 50, on_rightclick = show_formspec, - can_dig = function(pos, player) - local meta = minetest.get_meta(pos) - initialize(pos, meta) - local inv = meta:get_inventory() - return inv:is_empty("main") - end, + can_dig = puzzle_chest_can_dig, }) minetest.register_node("df_underworld_items:puzzle_chest_opened", { @@ -152,22 +157,18 @@ minetest.register_node("df_underworld_items:puzzle_chest_opened", { {name = "dfcaverns_slade_block.png^dfcaverns_chest_mask_side.png", backface_culling = true}, {name = "dfcaverns_slade_block.png^dfcaverns_chest_mask_side.png^dfcaverns_chest_lock_plate.png^dfcaverns_chest_lock_colours.png", backface_culling = true}, {name = "([combine:16x32:0,0=dfcaverns_slade_block.png:0,16=dfcaverns_slade_block.png)^dfcaverns_chest_mask_interior.png", backface_culling = true}, - }, + }, is_ground_content = false, mesh = "dfcaverns_chest_open.obj", drawtype= "mesh", visual = "mesh", paramtype2="facedir", groups = {stone=1, slade=1, pit_plasma_resistant=1, mese_radiation_shield=1, cracky = 3, building_block=1, material_stone=1, not_in_creative_inventory=1}, + drop = "df_underworld_items:puzzle_chest_closed", sounds = df_dependencies.sound_stone({ footstep = { name = "bedrock2_step", gain = 1 } }), _mcl_blast_resistance = 1200, _mcl_hardness = 50, on_rightclick = show_formspec, - can_dig = function(pos, player) - local meta = minetest.get_meta(pos) - initialize(pos, meta) - local inv = meta:get_inventory() - return inv:is_empty("main") - end, + can_dig = puzzle_chest_can_dig, }) diff --git a/df_underworld_items/puzzle_seal.lua b/df_underworld_items/puzzle_seal.lua index 1c224e5..28cd619 100644 --- a/df_underworld_items/puzzle_seal.lua +++ b/df_underworld_items/puzzle_seal.lua @@ -58,6 +58,8 @@ local colour_groups = { {"color_white", "basecolor_white", "excolor_white", "excolor_lightgrey", "color_grey"}, -- 7 } +df_underworld_items.colour_items = {} + local cull_colour_groups = function() local culled_colour_groups = {} for _, groups in ipairs(colour_groups) do @@ -74,6 +76,22 @@ local cull_colour_groups = function() table.insert(culled_colour_groups, new_set) end colour_groups = culled_colour_groups + + -- collect a list of all items with useful colour groups + -- to be used for treasure generation + local colour_item_set = {} + for itemname, def in pairs(minetest.registered_items) do + for _, groups in ipairs(colour_groups) do + for _, colour in ipairs(groups) do + if minetest.get_item_group(itemname, colour) ~= 0 then + colour_item_set[itemname] = true + end + end + end + end + for colour_item, _ in pairs(colour_item_set) do + table.insert(df_underworld_items.colour_items, colour_item) + end end minetest.after(0, cull_colour_groups) diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_0.png b/df_underworld_items/textures/dfcaverns_chest_dial_0.png new file mode 100644 index 0000000..363285a Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_0.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_1.png b/df_underworld_items/textures/dfcaverns_chest_dial_1.png new file mode 100644 index 0000000..e86ea51 Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_1.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_2.png b/df_underworld_items/textures/dfcaverns_chest_dial_2.png new file mode 100644 index 0000000..8c2b163 Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_2.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_3.png b/df_underworld_items/textures/dfcaverns_chest_dial_3.png new file mode 100644 index 0000000..7c14631 Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_3.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_4.png b/df_underworld_items/textures/dfcaverns_chest_dial_4.png new file mode 100644 index 0000000..5075c7e Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_4.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_5.png b/df_underworld_items/textures/dfcaverns_chest_dial_5.png new file mode 100644 index 0000000..fb0a1f0 Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_5.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_6.png b/df_underworld_items/textures/dfcaverns_chest_dial_6.png new file mode 100644 index 0000000..468b37f Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_6.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_dial_7.png b/df_underworld_items/textures/dfcaverns_chest_dial_7.png new file mode 100644 index 0000000..d4d0ebf Binary files /dev/null and b/df_underworld_items/textures/dfcaverns_chest_dial_7.png differ diff --git a/df_underworld_items/textures/dfcaverns_chest_lock_colours.png b/df_underworld_items/textures/dfcaverns_chest_lock_colours.png index 60d3fb4..c07ce27 100644 Binary files a/df_underworld_items/textures/dfcaverns_chest_lock_colours.png and b/df_underworld_items/textures/dfcaverns_chest_lock_colours.png differ diff --git a/df_underworld_items/textures/puzzle dial.xcf b/df_underworld_items/textures/puzzle dial.xcf new file mode 100644 index 0000000..e03194c Binary files /dev/null and b/df_underworld_items/textures/puzzle dial.xcf differ