Skip to content

tredfern/terminus

Repository files navigation

Build Status Coverage Status GitHub milestone Love2D Version

Terminus

Develop a game that combines my learnings of systems thinking, opinions on software engineering, and love for games that give control to the player to influence the world.

Goals

Fun

The game should be fun to play. That fun should come from the combination of challenge and discovery.

99% Unit Test Coverage

A strange goal perhaps. I believe that TDD can assist any project. Because of the planned complexity of interactions between entities, unit tests will provide a foundation to validate those interactions and potentially test balance.

Easy to Mod

The game should feel like a framework that could be extended. Similar to creating an RPG system where the adventures, items and characters can be created by anyone.

High Replay Value

The game should have either different challenges or feel so different every time that it encourages people to play again.

A Feeling of Story

The game should have a feeling that a story is occurring and the player is contributing to the creation of that story.

Development

Weekly Blog Posts giving a brief overview of the code changes implemented and screenshots of progress.

Live Coding on Twitch Saturdays & Sundays 13:00-15:00 EST.

Milestone Progress will track significant changes and progress.

Builds / Releases will be automatically created for every tagged push.

Concept

An RPG based game/system set in a sci-fi universe. Player is one of a small group of soldiers that awakens on a ship/space station/moon base to a major disaster in progress. Player needs to navigate rogue robots and damaged systems to repair the ship to save the rest of the crew.

Play styles could vary between more combat expertise, which will increase survivability but might limit exploration or other skill opportunities. Or maybe using more survival skills which will help with finding supplies and alternate routes. Or maybe a more skill focus that allows the character more abilities to explore and solve problems.

Theme / Setting

Survival Theme: The hero desire to keep taking a step forward even when facing overwhelming odds just to survive.

Potential deeper themes:

  • When society is collapsing, what is the balance between preserving ourselves and preserving the people around us?
  • Turn-based game that allows the player time to think and choose actions
  • However, action-based game would allow the chaos of the situation to feel more present

Inspiration

I'm focusing my inspiration on games from the past. Certainly there will be ideas that will leverage current games including things like Dwarf Fortress/Rimworld or Caves of Qud, or Fall Guys (inspiration can and should come from anywhere). These old games captured my mind when I started playing them and finding what made that spark happen is what I'm curious about exploring with this project.

The Magic Candle - I played this game when it first came out in 1989. It has been a while since I last played it, but I remember being impressed by the mechanics of exploration. This game felt huge. And also the ways that you managed your party.

Darklands - A very interesting RPG that allowed a lot of freedom in how you approached the game. But one of my favorite features was that you didn't have to move your character through each individual square when walking through a town. How much time did I waste in most RPG's just clicking from one side of the map to another just to complete a quest? Being able to navigate to locations was fantastic.

Ultima V - The main Ultima game I played. I loved the variety of towns and quests that linked things together. Getting the magic carpet, was awesome.

Everything Epyx - I grew up looking at everything Epyx released. I loved their motto even as a kid of combining strategy with action. Some of their games that are influencing my thinking on this project are, Temple of Apshai Trilogy, Dragonriders of Pern (I'm serious, I played that game a ton),

An interesting tidbit I learned from research is that Epyx did the port of Rogue to non-Unix platforms.

Force 7 - There was this game on the C64 where you had a crew and needed to eliminate all these aliens in various rooms.

Cogmind - similar genre and also sci-fi. Different play styles available and need to keep alert level down.

Dungeon of the Endless - Random generated dungeon of rooms where you are trying to get to the top level

Rimworld - If the game evolves into more of a base-building mechanic

Shadowgrounds - Aliens attacking a base and working through levels to solve/protect it

Metamorphisis Alpha - Never played this, but the general story is similar and a strong basis for inspiration.

Traveller - Never played this, character design is interesting. Generally seen as a very open-ended RPG system in a sci-fi world that can help inspire how to face certain design decisions for the underlying mechanics.

Books / Movies

Orphans in the Sky - I read this book as a child and remember it still.

Aliens - Both from Newt's survival session on her own to the marines fighting their way in

Diehard - Facing off against an invading force on your own. Identifying your enemy and their intentions

Lost in Space - Traveling to a new world, a catastrophe happens and people band together to survive

Game Design Documentation

Design documentation for the game can be found in the docs folder of the repo. This will outline any milestones, project plans, different design considerations or other information about the game.

Framework

This project depends on the Moonpie framework for Love2D. This framework is designed to organize code into clear separation of responsibilities. This allows for the ability to create unit tests efficiently for any point of the system that can benefit from testing.

The key pieces of the framework are the store and ui.components. The ui.components provide an easy way to define the UI in a responsive way. Making it easy to layout the style and various controls necessary for displaying and receiving user input. The store manages the game state and all the information happening in the game.

Both of these patterns are similar in spirit to React-Redux. By isolating state and making sure all updates are coordinated through actions and reducers, we can easily control state changes and centralize the updates.

Project Organization

The project is organized around the concept of rules. Rules represent some either complex interactions or entity in the game. For example, currently there is a character rule section, and a combat rule section. Each with it's own concerns. Within any rules domain, there can be actions which can be dispatched to the store, selectors which retrieve values from state, or any other custom functionality that makes the most sense for this section of the rules.

By separating into various section, each rules area can control a section of state. If any other rules area wants to modify another rules state section, it dispatches the appropriate action to the other rule for those to be handle.

An Example

Characters manage the various bits of information like, how much health do I have, what is my name, what team am I on, etc... Combat manages the interaction between potentially characters, but could be other entities as well. But has no state of it's own that it manages.

When a character attacks another character. A combat action is dispatched to resolve the attack and encapsulate all the rules about how combat is resolved. The combat might need to check-in with the skills rules and to figure out how some competing skill checks get resolved. Depending on that resolution it will dispatch updates to the character that some damage has occurred, or some ammunition is consumed, etc...

Contributing / Building from Source

Terminus runs in Love2D and you will need to download the appropriate version for your system first - Download Love2D.

$ git clone git@github.com:tredfern/terminus.git
$ cd terminus
$ git submodule update --init
$ path/to/love .