Sponsored By

In this article, we’ll walk through how our extensive spatial inventory system works, then dive into the cautionary tales of design ramifications that it had for our game.

March 2, 2022

14 Min Read

Author: by Joel Mason

Game Developer Deep Dives are an ongoing series with a goal of shedding light on specific design, art, or technical features within a video game in order to show how seemingly simple, fundamental design decisions aren't really that simple at all.

This article was written by Joel Mason -- programmer, writer and co-designer at Black Salt Games, a new, small, studio of four from New Zealand working on our debut game Dredge, a sinister fishing adventure.

In January of 2021 we began prototyping Dredge, our cosmic-horror inspired fishing game. In the first iteration, you'd sail over to a spot bubbling with fish, press an interaction button, and a "+1 Fish" notification would pop up. You'd do this for a while, and then return to a dock to sell your fish.

This was extremely boring.

We had to do something with our inventory system. In a game about a fisherman dealing with their cargo hold, we knew that Inventory Management -- while it may be the dullest sounding Steam tag out there -- had to play a big part. In the end, it turned into the core mechanic for our game.

In this article, we'll walk through how our extensive spatial inventory system works, then dive into the cautionary tales of design ramifications that it had for our game.

What's a Spatial Inventory System?

Spatial inventory systems revolve around the notion that stuff occupies space. We'll ignore systems such as Skyrim that just add item weights against maximum player encumbrance, as they don't concern space.

Really, a spatial inventory needs just 2 components:

  • Space.

  • Stuff that fits into that space.

Players can place items into the space, picking up, re-arranging, and sorting items as they please. In Dredge, our space is a grid.

A container filled with fish, represented by a 6 by 5 grid occupied by fish that take up two tiles each.


Why a Spatial Inventory System?

At its root, spatial inventories are supposed to add decision points for players. Items have to be weighed up against others, and depending on the player's current situation, one may be more suitable than another. There's an inherent value-density calculation that players can perform - and eventually gain mastery in that assessment ability.

The above image of regularly shaped mackerel in a regularly shaped grid is…still pretty boring. What if items were different shapes and sizes? What if they had different values? What if they had different preferred positions?

We can pretty quickly make our definition of a spatial inventory system more complicated, and way more exciting. It could be comprised of:

  • A grid.

    • (Optional) The grid could be an irregular shape.

    • (Optional) Cells could accept different types of stuff.

  • Stuff that fits on the grid.

    • (Optional) The stuff could be different sizes.

    • (Optional) The stuff could be irregular shapes.

    • (Optional) The stuff could want to be next to / away from other stuff.

Working Example

So, let's walk through how we use this all in Dredge.

First, we start with a basic grid. This is a 7x9 grid, with some special cells.

  • At the corners, there are some unusable, blank cells that you can't even see.

  • At the bottom are some cells where engines can be placed.

  • To the sides are cells where fishing equipment can be placed.

  • At the top are some cells for lights.

A 7 by 9 square grid. Six spaces in each corner are inaccessible to players. Seventeen squares are marked by special symbols.


So we might expect a player to populate their inventory with the following pieces of equipment:

  • A variety of rods on the sides to allow them to catch different types of fish.

  • Some basic lights and engines to allow them to move and see through the fog.

The same 7 by 9 square grid, now with fishing rods, lights, and engines occupying 1/3 of the spaces.


And we might expect a good day's fishing to result in a catch that looks like the following:

  • 6 Mackerel

  • 4 Cod

The same 7 by 9 square grid, now compltely filled with two types of fish in addition to existing fishing rods, lights, and engines.


Player agency is important. In Dredge, while equipment can only be placed on dedicated attachment points, fish (and other non-equipment items) can be placed anywhere - even over empty attachment points. So, there are choices that can be made:

  • You could leave some of your rods in storage at the dock, reducing your fishing speed and ability, but making more cargo space.

  • You could sell some of your engines, making you slower, but again, freeing up more space.

  • You could forgo lights entirely, but you'd better get back before dark…

A player could decide to take some (or all) of these risks, resulting in a more lucrative catch of:

  • 9 Mackerel

  • 5 Cod

The same 7 by 9 square grid, now with only one fishing rod and engine but filled to the brim with even more fish


Similarly, you may choose to invest in some upgraded hydraulic rods, allowing you to catch some more valuable species like sharks or stingrays.

The same 7 by 9 square grid, containing equipment that takes up more space. Large fish occupy the rest of the space


But the ocean is unpredictable, and not every day goes to plan. You might get lost in the fog and run aground - taking damage to your engines. Or a creature from the deep might blindside you -- causing that prized shark to fall overboard.

The 7 by 9 square grid storage space, with some missing fish and a large X marking a space that cannot be used.


In Dredge, your inventory is also your health bar. Damage occupies physical space, damaging or destroying items and preventing new ones from being placed there until the damage is repaired. Fish can be lost overboard, and equipment can malfunction. Take too much damage to your hull and you'll slip beneath the waves for good.

We've talked about decisions players can make with the grid we've given them -- but what if they could customize their grids? It's the perfect opportunity for upgrades to fit into the core loop. These allow our players to add extra slots for rods, engines, and more.

An upgrade tree allows players to customise their spatial storage. The pictured upgrade adds 4 additional spaces near the hull.

There's also no reason that item placement has to be restricted to the player's own inventory. A natural place for it is in shops -- it's a good way of representing a shop's stock. Instead of vendors having a finite amount of money with which to buy your stuff, they could be limited by whether or not they can even fit your items in at all.

A traveling merchant sells fishing gear and purchases the player's fish.

Or you could use it in environmental puzzles. Placing a certain set of items in a particular configuration could be the key to unlocking some forbidden secrets…

A puzzle requires players to organize L shaped blocks of fish into a certain shape.

It might not be obvious from the still images, but the act of packing your inventory efficiently is (according to our playtesters) "fun." There's a definite sense of satisfaction gained from slotting a plaice into the perfect place. And again, there's potential for mastery in planning ahead and leaving a correctly-shaped space for the fish you can see on the horizon.

Bringing It Together

So we've just illustrated the facets of our inventory mechanics. To summarize the above, we have an inventory that encapsulates the following traditional systems:

  • Item Storage (it holds items)

  • Player Health (it can take damage and inconvenience the player at low health)

  • Player Skills & Stats (it provides the slots for equipment loadouts)

  • Upgrades (players can customize their grids)

  • Shop Inventories (vendors can only hold so many items)

  • Inventory Management Gameplay (it's fun to move stuff around)

  • Environmental Puzzles (adds depth to discoveries)

Lessons Learned

Ok, so the above examples are kinda cool (at least, cool for an inventory management game). But before you go away and start working spatial inventories into all of your games, let's talk about some of the knock-on design headaches we've run into with ours.

Item Placement

First and foremost, if we've decided that item placement is important, we should make it the player's responsibility. You can't place an item for the player. Well, you can, but it would be a little bit like opening your front door and finding an unexpected couch in your hallway. It's in a stupid place, and you'd wonder who's been in your house.

This immediately has some ramifications for picking up items. Whether it be catching fish, finding treasure, or being given an important quest item, the player must be given an opportunity to arrange this new item into their cargo as they see fit. This means a lot of potential stopping and starting, which can interrupt the flow of gameplay. Your game has to fit this potentially slow cadence.

Quest Items Are Special

I just mentioned quest items. In Dredge, people will frequently offer you items for various reasons. The most basic example of this is a package that needs to be delivered. So we engage in dialogue with a quest giver, who then shoves a package into our hands. What happens if we're full of eels? Our boat, that is. Do we have to toss eels overboard until the package fits? That seems like a punishing solution -- how were we to know from the outset of this conversation that we would be required to discard our hard-caught, slippery profits?

The player must be given the opportunity to refuse the item -- at least, temporarily! This means new dialogue must be written -- an "Oh, you've no space for it now? Nevermind, come back later." sort of deal. Then on the other side, once the player has sold all of their eels to the local fishmonger and they return for the package, more quest logic must be implemented to play some more unique dialogue for an "Oh, you're back for the package?" line. And of course, those extra lines and flows have to be tested and localized.

Quest Items Are Not Special

So, about that package…Remember when I showed you how your inventory can take damage? And how it can 'hit' items in your inventory, potentially destroying them? Well, you might be thinking that quest items (and the cells underneath them) are immune from damage.

Dredge has a bunch of quest items. Not an obscene number, but enough that, if key items were invulnerable, you could have a fully laden boat of quest items acting as an invincibility shield. We didn't want this.

In Dredge, most key items can be destroyed. Not just by an unlucky collision with a rock either; players can discard people's packages, unique items, or even…

A boat's grid-based inventory, where a person labeled

Yes, we allow players to lose or 'discard' key items, even if they're characters who have hopped on board at the promise of safe passage. Quests and their outcomes change based on these events. It's brutal, but it's part of giving players full control over their inventory and making players feel responsible for the integrity of their vessel.

The dog is invulnerable, though.

A sleeping dog occupies the central 4 spaces of a ship's grid-based inventory system.

Hot Swapping

While rearranging items, players will very often be holding an item and want to swap it with an item underneath it. Supporting this functionality is absolutely essential to avoid player frustration.


Going further, what if players are holding a large item and attempting to place it over the top of multiple smaller items? We can't do a 1-for-1 swap. This is a much harder problem. Some potential solutions are to:

  • Give players a temporary placement grid in which to put items.

  • Allow the larger item to be placed, and then store the multiple smaller items on the player cursor, waiting for placement.

Quick Exit

Rearranging items also has another pitfall. If the player is currently holding an item and about to place it, do you still allow them to exit their inventory? There's simple logic that says "Sure, let them exit, and just place the item back to where it came from."

Unfortunately, that logic doesn't hold up if you have item swapping. The thing they're holding may have just been replaced - there are no free cells for it to go back to! Do you throw it overboard on their behalf? Do you try to automatically place it for them?

Controls

Dealing with the grid is just another thing to teach people. As it's not a ubiquitous mechanic, it's unfamiliar to some. Despite having huge tooltips showing that you can "Rotate" this item, a number of players will not read this, and it can take a number of inefficient fishing voyages before they figure it out. You can help people out by:

  • Pre-placing some items at different angles to demonstrate that items can be rotated.

  • Designing grids and items in ways that encourage rotation and tessellation by including corners and awkward shapes.

Without some extra work to help the player along, moving items around with a controller can be a clunky process too - especially if the player is moving items long distances or between different grids. You can provide some assistance here:

  • Give players a "Auto Move" button that automatically places the item into the other grid. No guarantee of intelligent or optimal placement, but that seems fair, given the player has taken a shortcut.

  • Give players a "Swap Sides" button that places their cursor into the middle of the other grid (or perhaps at a valid candidate location), then allowing them to adjust and confirm the final placement.

Visibility of Information

A downside of visually laying out a player's inventory is that it makes it difficult to show details of individual items -- there's no concise list of stats and values.

I mentioned previously that we have tooltips. These show all of that detailed information that players are missing out on; here's an example of one in Dredge:

A tooltop displays the durability and capacity of a crab pot held in a ship's inventory.

Can you see the problem? If I want to re-arrange this crab pot, I have no idea what the left-hand side of my inventory looks like, because the selected item's detailed information obscures some of the spatial information of my grid.

Some solutions:

  • Make smaller tooltips.

  • Keep the tooltips off the grid. This reduces the immediate association between the item and the tooltip (as it's not directly attached to the item), but would likely be worth the tradeoff.

  • Communicate critical information via item image states. For example, in Dredge we're planning on making fresh fish glisten with water droplets, or giving rotten fish stink lines. This provides useful information at a glance without the need to hover to read the tooltip - but too many of these may lead to visual clutter.

Balance

This last one sort of goes without saying - giving items physical dimensions adds another aspect to balance. Not only should your shapes be interesting and varied, but you need to ensure that players are still able to physically hold the objects you want them to at the right time.

In our case, if we want our players to be moving at a certain speed by the time they encounter a certain creature of the deep, we need to ensure we've given them the opportunity to build their boat's grid large enough to hold enough engines.

Conclusion

Will we include a spatial inventory system in our next games? It depends.

I don't believe they're suitable for every game. I think the game has to offer plausible pauses in the action for the player to be in the right mindset for a bit of inventory rearrangement.

To use an example, Tarkov [a hardcore FPS], also utilizes a spatial inventory system -- but it's hard to feel like you have the freedom to optimize your inventory (and gain satisfaction from that perfect optimization) when you're in near-constant danger. By contrast, it's narratively quite acceptable for our player character in Dredge to take a moment to move some mackerel about.

From the outset, we certainly did not foresee all of the design challenges we'd face with our spatial inventory. But as it sank its teeth deeper into our core loop, we knew that the issues were all worth the effort to solve.

At the end of the day, few game mechanics are without flaw. And we didn't set out to make the perfect game. What we do strive for, however, is to show you something you haven't seen before.

I haven't delved into the rather complex technical side of things in this article; if you're curious or if you want a few pointers, please reach out to me @bsg_joel.

Daily news, dev blogs, and stories from Game Developer straight to your inbox

You May Also Like