From a1be5250b80f1dd7b0b3b9c59611cdb0c0bf57a7 Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Wed, 6 May 2015 23:59:25 -0700 Subject: Unify the difficulty settings into init.lua All the scaling factors are now either in the plant table or the crops.settings table. This makes end-user tuning a bit harder, but switching easier and configuring easier as well. --- corn.lua | 20 ++++++++++---------- init.lua | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- melon.lua | 10 +++++----- polebean.lua | 4 ++-- potato.lua | 8 ++++---- tomato.lua | 8 ++++---- 6 files changed, 71 insertions(+), 35 deletions(-) diff --git a/corn.lua b/corn.lua index 3d561cd..8dd04ac 100644 --- a/corn.lua +++ b/corn.lua @@ -84,8 +84,8 @@ minetest.register_node("crops:corn_base_seed", { minetest.register_abm({ nodenames = { "crops:corn_base_seed" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -112,8 +112,8 @@ minetest.register_node("crops:corn_base_1", { minetest.register_abm({ nodenames = { "crops:corn_base_1" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -218,10 +218,10 @@ minetest.register_node("crops:corn_top_1", { minetest.register_abm({ nodenames = { "crops:corn_top_1" }, neighbors = { "crops:corn_base_2" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) - if minetest.get_node_light(pos, nil) < crops.light then + if minetest.get_node_light(pos, nil) < crops.settings.light then return end minetest.swap_node(pos, { name = "crops:corn_top_2" }) @@ -254,12 +254,12 @@ minetest.register_node("crops:corn_top_2", { minetest.register_abm({ nodenames = { "crops:corn_top_2" }, neighbors = { "crops:corn_base_2" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) -- we don't call crops.grow here otherwise there would be 2 abm's hitting -- this stack, and dmg needs to be applied to the bottom part - if minetest.get_node_light(pos, nil) < crops.light then + if minetest.get_node_light(pos, nil) < crops.settings.light then return end minetest.swap_node(pos, { name = "crops:corn_top_3" }) diff --git a/init.lua b/init.lua index d1c52ac..1a35830 100644 --- a/init.lua +++ b/init.lua @@ -13,6 +13,27 @@ of the license, or (at your option) any later version. crops = {} crops.plants = {} +local settings_easy = { + chance = 4, + interval = 30, + light = 8, +} +local settings_normal = { + chance = 8, + interval = 30, + light = 10, + watercan = 25, + watercan_max = 90, + watercan_uses = 20, + max_damage = 50 +} +local settings_hard = { + chance = 16, + interval = 30, + light = 13, +} + + local worldpath = minetest.get_worldpath() local modpath = minetest.get_modpath(minetest.get_current_modname()) @@ -35,6 +56,21 @@ else dofile(worldpath .. "/crops_settings.txt") end +if not crops.difficulty then + crops.difficulty = "normal" + minetest.log("error", "Defaulting to \"normal\" difficulty settings") +end +if crops.difficulty == "easy" then + crops.settings = settings_easy +elseif crops.difficulty == "normal" then + crops.settings = settings_normal +elseif crops.difficulty == "difficult" then + crops.settings = settings_difficult +else + minetest.log("error", "Defaulting to \"normal\" difficulty settings") + crops.settings = settings_normal +end + local find_plant = function(node) for i = 1,table.getn(crops.plants) do if crops.plants[i].name == node.name then @@ -54,7 +90,7 @@ crops.plant = function(pos, node) end crops.can_grow = function(pos) - if minetest.get_node_light(pos, nil) < crops.light then + if minetest.get_node_light(pos, nil) < crops.settings.light then return false end local node = minetest.get_node(pos) @@ -87,8 +123,8 @@ crops.particles = function(pos, flag) if flag == 0 then -- wither (0) p = { - amount = 1 * crops.interval, - time = crops.interval, + amount = 1 * crops.settings.interval, + time = crops.settings.interval, minpos = { x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4 }, maxpos = { x = pos.x + 0.4, y = pos.y + 0.4, z = pos.z + 0.4 }, minvel = { x = 0, y = 0.2, z = 0 }, @@ -106,8 +142,8 @@ crops.particles = function(pos, flag) else -- soak (1) p = { - amount = 8 * crops.interval, - time = crops.interval, + amount = 8 * crops.settings.interval, + time = crops.settings.interval, minpos = { x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4 }, maxpos = { x = pos.x + 0.4, y = pos.y - 0.4, z = pos.z + 0.4 }, minvel = { x = -0.04, y = 0, z = -0.04 }, @@ -162,10 +198,10 @@ minetest.register_tool("crops:watering_can", { if wear == 65534 then return itemstack end - water = math.min(water + crops.watercan, crops.watercan_max) + water = math.min(water + crops.settings.watercan, crops.settings.watercan_max) meta:set_int("crops_water", water) - itemstack:set_wear(math.min(65534, wear + (65535 / crops.watercanuses))) + itemstack:set_wear(math.min(65534, wear + (65535 / crops.settings.watercan_uses))) return itemstack end, }) @@ -234,8 +270,8 @@ end -- water handling code minetest.register_abm({ nodenames = nodenames, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) local meta = minetest.get_meta(pos) local water = meta:get_int("crops_water") @@ -287,7 +323,7 @@ minetest.register_abm({ crops.particles(pos, 1) return end - meta:set_int("crops_damage", math.min(crops.max_damage, damage)) + meta:set_int("crops_damage", math.min(crops.settings.max_damage, damage)) -- is it dead? if damage >= 100 then diff --git a/melon.lua b/melon.lua index 79b93d9..a07c1bf 100644 --- a/melon.lua +++ b/melon.lua @@ -140,8 +140,8 @@ minetest.register_node("crops:melon", { minetest.register_abm({ nodenames = { "crops:melon_plant_1", "crops:melon_plant_2", "crops:melon_plant_3","crops:melon_plant_4" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -161,8 +161,8 @@ minetest.register_abm({ minetest.register_abm({ nodenames = { "crops:melon_plant_5" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -207,7 +207,7 @@ minetest.register_abm({ -- minetest.register_abm({ nodenames = { "crops:melon_plant_5_attached" }, - interval = crops.interval, + interval = crops.settings.interval, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) for face = 1, 4 do diff --git a/polebean.lua b/polebean.lua index 5af61ac..11350cf 100644 --- a/polebean.lua +++ b/polebean.lua @@ -245,8 +245,8 @@ end minetest.register_abm({ nodenames = { "crops:beanpole_plant_base_1", "crops:beanpole_plant_base_2", "crops:beanpole_plant_base_3", "crops:beanpole_plant_base_4" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, neighbors = { "group:soil" }, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then diff --git a/potato.lua b/potato.lua index 093b9b5..edf6672 100644 --- a/potato.lua +++ b/potato.lua @@ -112,8 +112,8 @@ minetest.register_node("crops:soil_with_potatoes", { minetest.register_abm({ nodenames = { "crops:potato_plant_1", "crops:potato_plant_2", "crops:potato_plant_3" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -141,8 +141,8 @@ minetest.register_abm({ minetest.register_abm({ nodenames = { "crops:potato_plant_4" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return diff --git a/tomato.lua b/tomato.lua index 72b3638..4fdb216 100644 --- a/tomato.lua +++ b/tomato.lua @@ -123,8 +123,8 @@ minetest.register_craft({ minetest.register_abm({ nodenames = { "crops:tomato_plant_1", "crops:tomato_plant_2", "crops:tomato_plant_3" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return @@ -143,8 +143,8 @@ minetest.register_abm({ minetest.register_abm({ nodenames = { "crops:tomato_plant_4" }, neighbors = { "group:soil" }, - interval = crops.interval, - chance = crops.chance, + interval = crops.settings.interval, + chance = crops.settings.chance, action = function(pos, node, active_object_count, active_object_count_wider) if not crops.can_grow(pos) then return -- cgit v1.2.3