I’ve only played a few games with crafting, but the basic approach seems to be that I collect some materials and then combine them into what I want to make. In some games the recipes are in the game; in others I have to find them on a wiki. Many games have multi-step crafting, where I can use a crafted item as a material to craft another item.

In a game where I find crafting materials randomly (e.g. Dungeons of Dredmore), the question I want to answer is which of these items do I want to make with what I have, or do I want to wait?. For example, if I find a Gel in Terraria, this is what I can make, sometimes by combining Gel with something else:

Diagram of what I can craft given what I have

In a game where I can choose to find materials (e.g. Terraria) or buy materials (e.g. World of Warcraft), the question I want to answer is what materials do I need to make what I want? For example, if I want a Hero’s Hat in Terraria, this is what I need:

Diagram of what I need to craft something

Both of these are subsets of a crafting graph, which may be rather complex and difficult to show on the screen at once. This is an approximate graph for Minecraft crafting:

Diagram of Minecraft crafting graph

I either want to look forwards from the materials I currently have or I want to look backwards from the items I want to make. Games typically give me a UI that only shows a single step forwards. They can’t show the entire crafting graph because it’s typically too complex.

I’d like better ways to interact with the crafting graph:

  1. In games with a complex crafting graph, help me explore it in the game so I don’t need to use a wiki to find the information.
  2. In games where I’m discovering crafting recipes, help me track what I’ve learned and what I’m missing.
  3. In games where I’m able to pick which materials to find, help me track goals like “make Hero’s Hat” that translate into subgoals like “find 9 seeds from the Jungle”.
  4. In games where I’m unable to pick which materials to find, consider adjusting the loot drop rates to favor materials that would be useful for the goals I’ve set.

In the good old days, RPGs didn’t explicitly track the map or quests for you. Instead, you did it yourself, on paper. These days, RPGs have removed much of the mundane aspects of tracking things by automatically remembering things for you. There are nifty interfaces for maps, skill/tech trees, quests, subquests, lore, and so on. I’d like to see that sort of thinking applied to crafting.



konberg wrote at October 18, 2011 5:21 AM

Just yesterday I was thinking how you hadn't posted anything in a while. How nice to see this today.

I also prepared a long reply to you, but it turned in to winding nonesense, so let's leave it there.

Amit wrote at October 18, 2011 8:26 AM

Thanks! I had planned to write a bit about all the reasons I haven't posted lately but ended up taking it out as mostly irrelevant — most of this blog's visitors are not regular readers. I am now treating this blog as “I'll post when I have something to say” instead of trying to post at a regular schedule, and a “blog” format is not ideal for this, but I'll keep using it until I find something else.

Noble Kale wrote at October 18, 2011 8:38 AM

This is a pretty reasonable interpretation of Crafting.

It's something I am struggling to justify in my own game. I want to introduce crafting as a mechanism to increase 'continued play' value, but I simply cannot imagine the items that could be created.

Food for thought.

Thomas R. Koll wrote at October 18, 2011 10:31 AM

I wrote a tech tree for one of my prototype games earlier this year and a tree structure was the obivous choice for me. Specially as most recipes are only unlocked after cooking certain recipe.
But that tree didn't cover raw materials. In a sophisticated system i'd directly notify the player about new recipes available.

http://trollbridge-armours.ananasblau.com/ and if you like to read it's code: https://github.com/TomK32/Trollbridge-Armours

xaminmo wrote at October 18, 2011 4:58 PM

Minecraft has you! Maybe you could design a rudimentary mod for MC that gave a secondary inventory type screen that would track goals and display craftable things.

Adam Faulconbridge wrote at October 19, 2011 8:40 AM

It might be better to think of crafting as a Petri net (http://en.wikipedia.org/wiki/Petri_net). That way there are algorithms to check for things like "infinite mass"

Amit wrote at October 19, 2011 10:39 AM

Adam: I agree, it's not a plain graph; each game will attach semantics to the nodes and edges. Many games will have AND nodes ("you need wood AND ore"). WoW includes preconditions ("you must be level 65 and carry an adamantium rod"). Minecraft requires parts to be arranged on the grid (if I understand correctly). Dwarf Fortress has OR nodes ("you need ash wood OR pine wood to make a bed"). Petri nets or linear logic may be be reasonable choices for expressing these, but it'll vary by game.

Unknown wrote at October 19, 2011 7:53 PM

You are ALIVE!!!
It has been more than a year. I was starting to worry that you were going to leave this blog to die.

What are you working on rigth now?

Amit wrote at October 21, 2011 8:44 PM

Hi Draco! Yes, I'm still around, but family and work kept me busy most of the year, and I didn't have a lot to write about here.

What am I up to? I've been looking at how I learn and I find that going back and forth between reading and doing helps a lot more than only reading or only doing. I asked myself a few years ago: why are web articles formatted just like print articles? We have linking, forms, and interactivity on the web, but very few articles take advantage of that to help people learn better.

I'm looking at interactive diagrams — see my small experiment — to help explain the topics on my tutorials and articles. To that end, I've been learning networking, Javascript, HTML5, Canvas, SVG, WebGL, and a few other things. Also read Bret Victor's approach (he has several cool interactive articles on his site, such as this one).

I have lots of topics I want to write about, but I want to learn some more about interactive diagrams so that I can create really good ones to incorporate into my writings.

Anonymous wrote at November 02, 2011 4:17 AM

Hi would you be bothered letting me know which page platform you're using? I'm seeking to father my own web site before long but I'm experiencing a tough time deciding between BlogEngine/Wordpress/B2evolution furthermore Drupal. The reason I ask is for the reason that your project looks unique when in contrast to
nearly all sites as a consequence I'm aiming for something exclusive. P.S Sorry for being off-matter but I had to ask!

As a final point , give permission me thank you for your patience with my English as (I'm persuaded you have figured this at this moment ,), English is not my first language therefore I am using Google Translate to shape out what to note down what I truly have in mind to voice.

Amit wrote at November 02, 2011 7:33 AM

Hi Anonymous: this page is posted through Blogger. I used Blogger/Blogspot because it allows extensive customization by allowing me to edit the HTML template directly, and I don't have to run a web server of my own. I've customized my template to match my non-Blogger web site as much as possible.

I usually write my blog posts with Markdown, which converts to HTML, which I copied into Blogger. The graphs were made with Graphviz, which converts to PNG, which I uploaded.

rob wrote at November 05, 2011 3:58 PM

Cheers, Amit! It's been a long time, but I'm glad you're still into game programming. I've got some Flex experience now and am thinking about warming up some of my old game ideas.