From a838fe51507d16ed92de2012614059824d451076 Mon Sep 17 00:00:00 2001 From: SimonFlapse Date: Thu, 7 Mar 2019 00:13:37 +0100 Subject: [PATCH 1/5] Added research player scaling The technology price modifier increases with number of connected players. Only updates on_research_finished to always show the player the correct cost when picking a research. The module keeps track of its own modifiers so that others can manipulate this value without conflicting. --- config.lua | 6 ++++++ control.lua | 3 +++ features/research_scaling.lua | 38 +++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 features/research_scaling.lua diff --git a/config.lua b/config.lua index bbfbbde0d..78d72c632 100644 --- a/config.lua +++ b/config.lua @@ -337,6 +337,12 @@ global.config = { -- gradually informs players of features such as chat, toasts, etc. player_onboarding = { enabled = true + }, + -- increases technology price multiplier with number of connected players + research_scaling = { + enabled = true, + -- the increase in the multiplier with every player + scale_value = 0.05 } } diff --git a/control.lua b/control.lua index cf66955e1..4a1c53bac 100644 --- a/control.lua +++ b/control.lua @@ -127,6 +127,9 @@ end if config.rich_text_gui.enabled then require 'features.gui.rich_text' end +if config.research_scaling.enabled then + require 'features.research_scaling' +end -- Debug-only modules if _DEBUG then diff --git a/features/research_scaling.lua b/features/research_scaling.lua new file mode 100644 index 000000000..dce1b359a --- /dev/null +++ b/features/research_scaling.lua @@ -0,0 +1,38 @@ +---Scales technology price multiplier based on number of online players. +---It does so only when finished research +local Event = require 'utils.event' +local Global = require 'utils.global' + +local config = global.config.research_scaling +local scale_value = config.scale_value + +local multipliers = { + current_multiplier = 0, + old_multiplier = 0 +} + +Global.register( + { + multipliers = multipliers + }, + function(tbl) + multipliers = tbl.multipliers + end +) + +local function update_research_cost() + local player_count = #game.connected_players + local setting = game.difficulty_settings.technology_price_multiplier + local modifier = player_count * scale_value - scale_value + + -- keeping track of old and new multiplier + multipliers.old_multiplier = multipliers.current_multiplier + multipliers.current_multiplier = modifier + + -- setting new modifier by subtracting old multiplier from setting and adding the new + modifier = setting - multipliers.old_multiplier + modifier + game.difficulty_settings.technology_price_multiplier = modifier + +end + +Event.add(defines.events.on_research_finished, update_research_cost) From ff742a834b94da9b7189bd878a48a1737905b553 Mon Sep 17 00:00:00 2001 From: SimonFlapse Date: Thu, 7 Mar 2019 00:20:06 +0100 Subject: [PATCH 2/5] Changed default to being off --- config.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lua b/config.lua index 78d72c632..fb3035876 100644 --- a/config.lua +++ b/config.lua @@ -340,7 +340,7 @@ global.config = { }, -- increases technology price multiplier with number of connected players research_scaling = { - enabled = true, + enabled = false, -- the increase in the multiplier with every player scale_value = 0.05 } From ff97560d0048de1ddd1c51578dbc712a34dd2420 Mon Sep 17 00:00:00 2001 From: SimonFlapse Date: Thu, 7 Mar 2019 00:28:07 +0100 Subject: [PATCH 3/5] Added better handling of changed setting --- features/research_scaling.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/features/research_scaling.lua b/features/research_scaling.lua index dce1b359a..25428a6f7 100644 --- a/features/research_scaling.lua +++ b/features/research_scaling.lua @@ -8,7 +8,8 @@ local scale_value = config.scale_value local multipliers = { current_multiplier = 0, - old_multiplier = 0 + old_multiplier = 0, + old_setting = 0 } Global.register( @@ -30,7 +31,11 @@ local function update_research_cost() multipliers.current_multiplier = modifier -- setting new modifier by subtracting old multiplier from setting and adding the new - modifier = setting - multipliers.old_multiplier + modifier + if setting == multipliers.old_setting then + modifier = setting - multipliers.old_multiplier + modifier + else -- if the setting was changed in between add the modifier a new. + modifier = setting + modifier + end game.difficulty_settings.technology_price_multiplier = modifier end From e7ce07e7c03f69759db0b2aa7aab06a6d49b7f44 Mon Sep 17 00:00:00 2001 From: SimonFlapse Date: Fri, 8 Mar 2019 12:37:02 +0100 Subject: [PATCH 4/5] Added limit option --- config.lua | 4 +++- features/research_scaling.lua | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/config.lua b/config.lua index fb3035876..ed1ac52c6 100644 --- a/config.lua +++ b/config.lua @@ -342,7 +342,9 @@ global.config = { research_scaling = { enabled = false, -- the increase in the multiplier with every player - scale_value = 0.05 + scale_value = 0.05, + -- max increase in research price multiplier (-1 for disabled) + limit = -1 } } diff --git a/features/research_scaling.lua b/features/research_scaling.lua index 25428a6f7..ca5aa339b 100644 --- a/features/research_scaling.lua +++ b/features/research_scaling.lua @@ -4,6 +4,7 @@ local Event = require 'utils.event' local Global = require 'utils.global' local config = global.config.research_scaling +local limit = config.limit local scale_value = config.scale_value local multipliers = { @@ -25,6 +26,10 @@ local function update_research_cost() local player_count = #game.connected_players local setting = game.difficulty_settings.technology_price_multiplier local modifier = player_count * scale_value - scale_value + -- if config.limit is enabled, make sure the modifier doesn't exceed the limit + if limit ~= -1 then + modifier = (modifier <= limit) and modifier or limit + end -- keeping track of old and new multiplier multipliers.old_multiplier = multipliers.current_multiplier From 68187cd5540e954806d5fb8eeeb4a057de13f526 Mon Sep 17 00:00:00 2001 From: SimonFlapse Date: Fri, 8 Mar 2019 12:56:56 +0100 Subject: [PATCH 5/5] Forgot to set old_setting --- features/research_scaling.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/research_scaling.lua b/features/research_scaling.lua index ca5aa339b..d5853459f 100644 --- a/features/research_scaling.lua +++ b/features/research_scaling.lua @@ -42,7 +42,7 @@ local function update_research_cost() modifier = setting + modifier end game.difficulty_settings.technology_price_multiplier = modifier - + multipliers.old_setting = modifier end Event.add(defines.events.on_research_finished, update_research_cost)