top of page

Knights in Tight Spaces

Overview

The medieval fantasy spinoff of Ground Shatter's flagship game, Knights in Tight Spaces (2025) is a grid-based deckbuilding rogue-like akin to its predecessor. Gather a group of heroes and take on the biggest threats in the realm, all conveniently situated in battles within very small environments. All of the old gameplay is there, with an extra layer of team dynamics that lets you truly control the field.
 
Developer: Ground Shatter
Publisher: Raw Fury
Platforms: Steam, GoG

My Involvement

My responsibilities included:

  • Building, maintaining and iterating upon all of the game's systems

  • Providing tools to facilitate the creation of game content and promotional material

An Evolved Game

Given the strong foundation established by its predecessor, we were confident in making Knights in Tight Spaces (KITS) a more ambitious project. We wanted to retain everything that made Fights in Tight Spaces so successful and push the formula forwards.

On the programming team, we were conscious that FITS' codebase had become quite complex. A great deal of our previous work was spent figuring out what the game needed to be, and how to make a game of this type. Rapid prototyping and evolving design resulted in a codebase that did precisely what it needed to do, but that was difficult to adapt for other purposes. Given that the fundamentals of KITS' design were already figured out, we felt there was great value in rewriting a lot of the codebase to make new content and iterative design easier for everyone. This took a considerable amount of time and effort, but it put us in a much stronger position in the long run. This was an investment we were prepared to make given the company's excitement about continuing to make games that followed in FITS' foosteps.

My first contributions came before the team put its full weight behind the game, in something of an R&D phase. I worked on a new version of our abilities system (which describes the workings of player cards and enemy behaviours) and an updated system for entities (the characters who exist on a game board). FITS constructed these elements with large, inflexible pieces defined in code with lots of settings for designers to change, each using behaviour programmed for a specific purpose. The new intention was to make a modular system which allowed designers to construct whatever they wanted using a selection of smaller discrete components. The goals were to reduce the necessity for programmers to get involved when new content was needed, and to remove barriers for the designers. My early work on these systems convinced our director that there were great benefits to pursuing this refactor, and gave us the green light to create some of our most powerful and flexible solutions to date.

The Ground Shatter team in pre-production discussions for Knights in Tight Spaces.

The Ground Shatter team in pre-production discussions for Knights in Tight Spaces.

When we began full development, my role continued much as it did in Fights in Tight Spaces, only this time we were able to put the full effort of our team into the game for its duration. This meant that, while I was still involved in nearly every aspect of our codebase, I was able to focus my attention on certain systems much more than I was able to before. These systems included existing elements such as entities, character animation, levels, UI, saving and loading, progression, rewards and editor tools, as well as brand new features such as party management, weapons and equipment, tools for branching narrative, and our new Legacy and Revenge character systems.

GOSH_GROUND SHATTER_KITS LAUNCH_2.3.25_W_SCREENSHOT.jpg

The Ground Shatter team and friends watch the live-action trailer for Knights in Tight Spaces for the first time at the game's launch party.

Ink Integration

An interaction in Knights in Tight Spaces, offering the player multiple choices with different rewards.

An interaction in Knights in Tight Spaces, offering the player multiple choices with different rewards.

There are various opportunities for narrative integration in the Tight Spaces games. The first game used what we called cutscenes, vignettes and events. Cutscenes involved characters in an environment that looked like a game board, talking with speech bubbles, but without any gameplay functionality. Vignettes were very similar but used at the start of an actual level in the game to let the player character converse with their enemies. Events were entirely separate, UI-driven, multiple-choice scenarios that could reward or punish the player. All of these things were very simple in concept, but they were driven by bespoke data and systems that became unwieldy to use.

For Knights in Tight Spaces, we started using Ink, a narrative scripting language and Unity integration made by Inkle. The game continued using vignettes, and our cutscenes and events were merged into what we called interactions: extended conversations that took place in the UI with multiple choices for the player to make throughout. Ink is an excellent tool for writing and implementing branching narratives, but for our purposes, it wasn't without its challenges.

Ink is built to permit a great deal of control and flexibility over the text that appears on screen, allowing a writer to set up dynamic sentence construction based on choices the player makes. This is at odds with the ability to localise text into different languages, as syntactic variation between languages makes it impossible to make consistently coherent strings that are assembled on the fly. For KITS, this dynamic behaviour wasn't needed for gameplay, but localisation support was.

As the programmer in charge of Ink integration with KITS, I was responsible for finding a way to make it work. My solution was to modify Ink's import process to integrate with I2, the package we use for handling localisation in our games. When an Ink script was imported, the new code checked the script file line-by-line, identified the lines which represented display text (excluding functions and variable logic) and added a number at the start called a localisation tag. The tagged text was used in the JSON version of the script that was compiled for the gameplay. When showing narrative text in game, instead of showing the text that Ink tells us to display, the game finds the tag at the start of the line and uses to to get the actual text in I2, which comes in whatever language we are using.

While we lost the support for variable text, we were able to use the vast majority of features that Ink offers in our game, making complex, branching narratives and influencing the game state with penalties and rewards, while now offering the ability for all of this to be presented in a variety of languages for international, multicultural appeal, just as Ground Shatter does for all of its games.

Now Do It Again, But Better

As part of the Fights in Tight Spaces post-mortem, we conducted an analysis of the code architecture that highlighted several areas we felt could be improved, some of which would be necessary given the intention of building something more ambitious upon that foundation.

I delivered a talk at the Develop:Brighton 2025 conference in which I discussed how the limitations of our code came about, the challenges they posed, and how we addressed them. In the presentation, I examined three case studies:

  • Cards and abilities - the central gameplay mechanic

  • Replays - watching previous gameplay back as a film

  • Simulation - predicting the outcomes of actions to assist in player and AI decision-making


You can download the slideshow for my presentation, including all of my speaker notes.

Screenshot 2026-02-27 192608.png

James Vigor gives a talk at the Develop:Brighton 2025 conference about updating the FITS codebase for KITS.

bottom of page