Àite Domhainn part 2: time for a diet

Tags: games · software-dev · C++

A big to-do list

When I started on Áite Domhainn I had some grand ideas: a procedurally generated universe (easy enough); a user controlled colony that grows over time (yeah okay, can do); a realistic history for the planets (ooft, okay maybe); multiplayer interaction (not too bad I guess, a bit of added complexity); RPG-style statistics that represent the abilities of the colony (more complexity)… The list goes on.

This quickly became unweildy. The code base has grown pretty dramatically to some 300-odd files or so. Not huge, but a fairly big codebase for one (fairly green) person to manage. A big issue was with the generality of the code I was writing. I wanted code to be too reusable. This resulted in some janky code that wasn't super useful, readable, or (probably) safe to use. In addition, the generality limited useability of the code; which in turn stunted the scope. I had imagined this grand game, but it would turn out to feel half-assed because of this.

I became disheartened, and I almost abandoned to project. Other work was piling up and Áite was left to the side for a few weeks.

However, I didn't want to let the project fall to the wayside, I like the concept and I want to see it through to completion: I decided Áite needed to go on a diet!

What to cut?

I decided to be a bit brutal. I'm cutting everything that "does not spark joy", with the thinking that features can be added back later.

Colony statistics and RPG elements are cut. This will impact the progression of the game, as the game will become predictable with no improvement; this will be the first feature to add in next.

Projects are cut. These were activities the colony could work on (production of a thing, create new habitable area, travel to new world). The blurry scope made the projects really amorphous and tough to limit. These will have to be re-thought and re-worked if they're to be re-added. That's a lot of re-ing!

History elements are cut. These are pretty tough to keep consistent, especially in the procedurally generated game. I'd rather just not have it than have it inconsistently done.

Okay, so what's left?

Procedurally generated worlds, stars, nebulae etc? Check. A colony that grows over time? Check. Detailed descriptions of the planets? Check. Technically multiplayer? Check. CLI interface? Check.

This means leaves more of an aquarium than a game, but its a starting point! The player's colony will grow over time and try to explore new locations when they run out of space.

Adding some game

How to add some game to this aquarium? That's a good question.

The game will need to establish the needs of a colony (space, power, resources), and then establish a means by which the resoruces become scarce. This could be due to growth (a bigger colony needs more space), or due to player desires (adding abilities consuming resources), or due to upkeep on requirements (habitat requiring maintenance upkeep of metal etc).

The previously implemented Projects system was too amorphous and generic. I want the player to be able to add in new abilities to the colony, but I need to rethink how to implement this. This will add the necessary element of strategy into this strategy game.

Finally, there needs to be a failure condition. There should be some way for the player to lose. This is necessary to create some kind of tension for the player, some motivation. Otherwise, there is no need for the player to ever really play the game.

Needs

A colony will have the following needs:

  • Space
  • Power
  • Resource

Space, as in living space, is obtained by exploring new planets and building new habitat in the available space. This need is exacerbated by the growth of the colony. The colony will forever need new space.

Power is provided by solar and nuclear generation methods. Nuclear fuel is created by processing resource and solar power to created by harnessing the light from nearby stars. Power is required by population, and also by new abilities.

Resources are found by exploring new planets and become scarce by use in various ways.

This is a simplification; in game, this is more complex (space and power are processed resources, derived from resources, which are broken down into constituents). I'm leaving the complicated version in-server, but the client, I think, will only talk about the simplified versions ("3x105 m3 of living space", "5x1024 kg of usable resources").

Scarcity

Resources are used up as the colony grows. Whether in space (a bigger colony needs more room) or in time (over time the colony will drain its stock of resource).

Discussed in the next section are Abilities, things the colony works up to being able to do. These abilities will add drains onto the Colony's resources and contribute to the scarcity.

Abilities

I'd like there to be some player advancement in the game. Like in a game of Civ: as a game goes on your cities grow and production increases and buildings are created faster, so that when you start a new game you are starkly reminded how far you've come. So to in Áite. I'd like the player to feel a sense of progress over time. This will be accomplished by the use of Abilities.

A colony can work towards abilities, requiring the use of resources and time to obtain.

Interaction

I didn't mention it above, but I guess its implied. There will need to be a way for the player to interact! I had envisaged a plurality of interaction methods: a curses-based TUI, a full GUI, as well as the command line command processor. However, I think the former two are antithetical to the original idea: a game you "play" in your terminal over the course of many, many weeks.

I think simple commands would be the easiest way to achieve this, perhaps being strict with having a minimal syntax:

aite_client <command> [<subcommand>]

This would force me to keep the game (and the codebase) simple.

Conclusion

So I'm gonna trim the fat on Áite: cutting features I regard as bloat. I'm gonna keep it simple, and not introduce new (unnecessary) features. I'm going to keep additions minimal, and only introduce them if they coincide with the games intent: simple idle game, elements of strategy and space adventure.


Questions? Comments? Get in touch on Twitter!