At the moment, every item usable as a tool is a special unique snowflake, meaning crafting recipes allowing different tools devolve into long lists of NEEDS pocket knife OR steak knife OR butcher knife OR integrated toolset OR sharpened piece of metal OR strong teeth OR you get the idea.
This seems needlessly complicated and prone to problems:
The more duplicate tools are introduced, the more complicated and difficult to read the crafting recipes will get. You’ll never be able to use any bladed object in the game for even the easiest crafts, as that would make the recipe tool list unreadable.
If a new tool or recipe is added, it’s easy to miss an instance that needs to be updated, leading to the new swiss army knife being able to open tin cans, but not aluminium ones (as that unique recipe was missed when adding the tool in).
I don’t see any advantage of doing it this way.
Instead I propose the following:
Items usable as tools get a special TAG denoting their tool use. This TAG denotes the TYPE of tool the item can be used for and its TOOL LEVEL.
A digging stick thus gains the TAG “Digging Tool Lvl.1”, a shovel gets “Digging Tool Lvl.2”. Naturally, these TAGs are listed in the item desciptions along with weight and other stats.
Crafting recipes look for those TAGs instead of specific items.
Digging a shallow pit thus requires a “Digging Tool Lvl.1”, digging a deep pit requires a “Digging Tool Lvl.2”.
Having a higher level tool available than the minimum required makes the task go faster/easier.
Thus, you want to carry a hammer even with the abundance of rocks around, because those are just "Clubbing Tool Lvl.1"s, while the craftsman’s hammer is better.
You may still have a few special instances of OR in the recipes (like requiring a “Heating Tool” OR a nearby flame), but it’ll be much reduced. Recipes will be easier to read. Tools are more standarised allowing a bunch of similar items and tools of different quality allow for more interesting choices.
Names are still TBD, obviously. “Digging Tool” sounds okay, “Clubbing Tool”, not so much.
Wonderful news. Trust the developers in full swing. So I don’t need to try implementing it with my meager coding skills myself.
Is there a list somewhere where the main developers keep their current pet projects / todo lists, so I can come up with good ideas not already in the works?
Well… the git issue tracker is pretty good. Lurking the Suggestions board is usually OK- we haven’t mentioned word of this system in a while, so it’s no big deal at all.
Well, I certainly suck at coding, too. I’m not a programmer and I haven’t really written anything in C in the better part of a decade, but this doesn’t seem too complicated.
At least I don’t really have to write much from scratch, just change code that’s already there.
If there’s already a consensus that this would be a good addition, I’ll take a stab at trying to implement it myself over the next few days.
I hope all code related to crafting is in crafting.cpp? That’ll take me a bit to digest…
One issue you’ll need to consider is recipes where different items require different numbers of charges to achieve the same result - like “welder (120 charges) OR integrated toolset (6 charges)” - or indeed “hotplate (7 charges) OR nearby fire”.
If recipes don’t call out these items individually, you’ll need a method of working out how many charges different items will use up on the same task, and of providing the player with this information.
One way would be to have a tool effectiveness tag in the craft. A screwdriver is better at screwdriving than an integrated toolset, but worse than a power drill. That effectiveness stat could act as a time modifier (so crafting takes more time with less effective tools) and as a power multiplier for power tool.
Basically, replace your levels with this. Some craft could require a minimum tool level, or you could just make different tags for digging stick and shovels.
Why not show different tools in the crafting window, but only the ones that the player has on them or nearby? That way they could see how many charges it would use. There could be a key command in the menu to open a popup window that shows the whole list of tools and their charges. If the player has nothing, the tool listing would say “needs pounding tool” or “needs heat element or fire”.