TL;DR
Expensive mode makes it unnecessarily complex to dynamically modify recipes and technologies in a mod, and should be removed (or at the very least changed).What ?
For those not in the know, expensive mode is a map setting you can enable to make a select few recipes more expensive, and there's another setting for technologies to make them cost more. The technology setting is not used in the vanilla game, and only exists for mods to use.On the surface, this is a cool mode to add some challenge to the game, without changing that much.
In my opinion, this feature has little to no value, especially when it's feature can be easily implemented as a mod, and probably better at that.
From a modder's perspective, it is one of the more annoying features to work around.
Why ?
The following examples generally apply for both recipes and technologies, however I will be using only recipes as examples.Starting off simple, the definition for a non-expensive mode recipe might look like this:
Code: Select all
{
type = "recipe",
name = "iron-plate",
category = "smelting",
energy_required = 3.2,
ingredients = {{"iron-ore", 1}},
result = "iron-plate"
},
An expensive recipe definition might look something like this:
Code: Select all
{
type = "recipe",
name = "iron-gear-wheel",
normal =
{
ingredients = {{"iron-plate", 2}},
result = "iron-gear-wheel"
},
expensive =
{
ingredients = {{"iron-plate", 4}},
result = "iron-gear-wheel"
}
},
Both of these recipes are defined completely correctly, and are in fact taken directly from the base mod. I have no problem with either of those recipe definitions.
The "problems" start to occur when mods get involved.
According to the engine, this is a valid recipe prototype:
Code: Select all
{
type = "recipe",
name = "iron-gear-wheel",
expensive =
{
ingredients = {{"iron-plate", 4}},
result = "iron-gear-wheel"
}
},
If a recipe should be the same for both difficulties, wouldn't it make more sense to define the recipe data like the iron plate example?
Why is it allowed for expensive to be set and not normal, and vice versa? This has no reason to exist.
One of the other things expensive mode can do is disable a recipe depending on the mode that is selected by setting one of them to false.
Code: Select all
{
type = "recipe",
name = "iron-gear-wheel",
normal =
{
ingredients = {{"iron-plate", 4}},
result = "iron-gear-wheel"
}
expensive = false
},
The same can be done vice versa, where the recipe is enabled at game start in expensive mode and disabled in normal mode.
However, the recipe can still be enabled by technology unlocks and script, and it will still use the other difficulty data.
Marginally useful at best, but still unnecessary since it's the same data, and enabled can still be set through script.
So, why do we have expensive mode at all?
Adding a little bit of challenge to the game, sure, but expensive mode is limiting.
What if a mod wanted multiple levels of difficulties that the player could choose from?
What if a mod wanted different categories of things to be expensive without affecting all recipes?
What benefit does expensive mode give over a mod?
Well, you can change the value of it on world creation instead of having it be a startup setting.
Big whoop, now you can't change it after the world starts without using a mod or the editor.
What about having one place that toggles all mods' expensive recipes?
Easily doable with another mod, to unify all expensive settings into one thing.
Plus, with it being a mod, it could have more customizability than the vanilla dropdown "yes or no."
I must admit I'm a quite biased as a modder myself, and seeing many people dealing with recipes and technologies getting confused as heck with all of the different configurations has made expensive mode feel completely unnecessary to me.
I honestly don't think it will ever get removed, as it is too big of a feature for the player base not to care, and that is why I propose a modification to the way expensive prototype data is defined:
If a mod wants to make a recipe or technology have different data for expensive mode, they must set both normal and expensive properties to not nil, possibly even removing the ability to set them to anything other than a table of recipe data. This keeps the players happy as the game mode is not removed, and it makes modders happy because they don't have to deal with the possibility of crap data from other mods. Everything expensive mode can do is still possible, and is significantly cleaner to define and deal with.
Expensive mode has been forgotten for long enough, I think it's time for something about it to change.