Posts for: #Games

Perfection, the Enemy of Sharing

I’ve implemented working Outposts, where you can buy and sell things, repair your ship, and more. It’s been in various stages of working for almost two weeks. However, I haven’t shared it yet because “it’s not ready.”

At an Outpost, you can:

  • Repair your hull
  • Buy Schematics, which are permanent cross-run upgrades that allow you to craft devices
  • Craft Devices from a Schematic (For a cost)
  • Sell Devices (at a loss)
  • Buy Devices
  • Chat with the Outpost AI
  • Attack the Outpost, although this is a bad idea
  • Just leave

I had to make several new data types, build user interfaces, implement state machines, and write some music (my eldest daughter asked for something like Digital Circus). There’s even a little display screen in the lower-left that shows contextual text about each action. It’s not a mockup, it all works. So, why didn’t I show it off?

[Read more]

Procedurally Generating Map

I worked on map generation over a month ago, then set it aside; I was spinning wheels on rendering and prioritized the conflict loop instead. It’s back and more robust.

My implementation is a directed acyclic graph; you start from the root node and have a series of choices about where you can go, eventually narrowing down to a single terminal node. Traversal works (disabling nodes you can’t visit), and since the nodes are practically buttons, I got controller navigation for free (ish).

[Read more]

Carried Away with Upgrades

I’ve been busy. The game is building and deploying to Steam, I know whether it’s been purchased using GodotSteam, I moved to a command queue for animations, I’ve implemented FMOD reactive audio, added YarnSpinner for dialog, and started an overworld map. There’s also a main menu, settings menu, about ten minutes of original music, and some new gameplay mechanics.

Main Menu

Tada.

Yeah, so I broke my own rule, and it’s been more than a week since I last posted. I felt like I was making progress, but it wasn’t “enough” to discuss yet. Here it is, almost Wednesday of the next week, and if I don’t push myself to write this now, it’s going to probably wait until next week.

[Read more]

Reinvented Wheels

I was ambitious in my goals last week, but it’s paid off. I’ve got a preliminary title screen, scenario selection, and a whole lot more under the hood.

I started by moving away from JSON Schema. Sounded good on paper, but I found myself in an anti-pattern, fighting the Godot way of doing things. I have now formally structured into classes (which I had before) and Godot-managed resources (instead of dynamically creating them at runtime).

[Read more]

Scaling the Foundation

I made some solid progress towards adding more content this week, providing a scaleable foundation.

  • Added a new device and card combo with a new mechanic (evade)
  • A global persistent player now exists, along with an abstracted file-based configuration
  • The engine now supports multiple opponents with a dynamic layout and repositioning
  • Added deck counters such as draw, discard, and spent
  • Added hover hints to improve ease of use and improved internal naming for debugging
  • Controller Focus is much more complete and user friendly, including sticky targeting
  • Intents are smaller, more accurate (off by one), and have a shader effect
  • Mouse controls are cleaner on the backend and less buggy
  • Implemented a JSON schema for all my data types, facilitating adding more content
  • GUT was broken in CI, which I didn’t notice because it was failing silently
  • Removed some clutter and old prototypes from the codebase (they’re still in Git)

Sticky targeting is important to me from a usability perspective; I want the game to be smart about minimizing the amount of effort the player needs to put into performing actions. For example, if there are two opponents, you aim at the second and attack, then defend yourself, then go back to attack, assume they still want to attack the second opponent. Same goes for using cards; don’t default to the first card, default to the nearest card of the same type, else the closest card. This is supposed to be a strategy card game, not a clicker.

[Read more]