Skip to main content
All Projects

game dev

Magna Mater [Unreleased Prototype]

Mother nature fights backs against the humans that seek to harness its magic. Player controls a team of 4 heros with customizable abilities.

UnityC#AIModelingAnimationShaders

Cover Art

Overview

Magna mater is singleplayer RTS/Rougelite set in a world where sentient nature has long been controlled by man to aid in its own destruction. Player guide a team of 4 heros through a branching series of levels.

I created all game assets myself (meshes, shaders, textures, animations, particles, etc.).

My Role

Sole developer, designer, and artist.

Inspiration

Magna Mater was created in response of the design flaws I encounted when running Warborne playtests, but the inspiration remains largely the same.

I love RTS games, but controlling massive armies is very stressful. Maximizing APM can be fun sometimes, but most of the time I found myself avoiding starcraft because it felt like work.

When playing through Warcraft III reforged I found myself really enjoying the campaign levels where you have to guide a hero and a small army through a level (no base building). I realized this format would work well with the positive feedback from Warborne playtests.

I set out to capture the feel of those Warcraft III levels and add in meaningful strategy/better enemy AI.

Design

To solve the issue of stress in RTS games:

  • Slow down movement speed of units (slow turn rate, slow movement speed). I found this gave me plenty of mental bandwidth to think as I commanded units.
  • Consistent set number of units (4). No need to create new control groups on the fly, consistency made controlling units a lot easier to learn.
  • Each unit has 1 unique ability
  • New control schemes.
    • [1], [2], [3], [4] selects each unit individually
    • Combinations of unit selection keys selects multiple units. Ex: [1] + [2] selects 1/2 at same time
    • [q], [w], [e], [r] each cast the ability for 1 unit ([q] = unit 1, [2] = unit 2, [e] = unit 3, [r] = unit 4)

To add strategy:

  • Branching series of levels the requires players to make choices about their path throughout the world.
  • Customizable heros that require the player to make build choices
    • swappable/upgradable abilities
    • natural/explict synergies between abilities
    • character stats modified by items
  • predictable/unique AI behaviour in response to player actions (strengthens natural synergies between abilities/items)

Outcome

Playtests revealed that combat was more fun than in "Warborne" due to the predictability of AI enemies + locality of heroes.

Unfortunately, development of Magna Mater stopped when I joined the Nifty Island as it required my full focus and efforts.

Featured Work

Game Architechture: Units/Players/GameLoop

Game Architechture

Units

All dynamic entities in the game world are Units. All Units have:

  • Stats (health, movespeed, etc)
  • configurable number of abilities
  • inventories that hold items

Units can be anything from a destructible object, building, hero, or boss.

Players

Each unit is controlled by a Player of which there are 2 types: HumanPlayer, AIPlayer. HumanPlayers control units with the mouse/keyboard while AIPlayers control units via a FSM known as the Brain.

Gameloop

The GameLoop spawns Players and assigns them control of all groups of Units. Gameloop is also responsible for loading/unloading levels, transitioning between different player states.

The seperation between Units/Players/Gameloop created very flexibile architecture that enabled rapid content creation (units, AI brains, abilities) very easy. Architechturial guidelines are enforced via AssemblyDefinition dependenices (code will not compile if rules are not followed).

AI State Machine Editor Tooling

Enemy AI Designer

Early on I realized that enemies having predictable behaviour in response to certain stimuli was a cornerstone of what made the game fun. It provides a nice skill curve and strengthens natural synergies between abilities/items.

To make designing enemy AI as easy as possible I build a node based editor for AI state machines (Brains). It allowed for creation of modular states (c#) connected to each other via transitions. Transitions may have TransitionConditions that determine when a state may be transitioned to (much like mechanim state machines).