Skip to content

Releases: moby-it/useless-dragon

v0.1.3-prealpha

14 Apr 17:36
Compare
Choose a tag to compare
v0.1.3-prealpha Pre-release
Pre-release

Changed ui library from gocui to bubbletea due to incompatibility issues. Did not manage to find cross platform solutions for buggy UIs on Windows and Linux

Full Changelog: v.0.1.2-prealpha...v0.1.3-prealpha

v0.1.2-prealpha

13 Apr 10:49
Compare
Choose a tag to compare
v0.1.2-prealpha Pre-release
Pre-release

Combat System and Console UI

The scope of this release is to have a first draft of the Combat System, that is almost fully customizable. The goal is to have an environment in which the play tester can change combat modifiers for free, create new monsters and new encounters to test the extend of the current combat system.This is crucial for us in order to get quality feedback.

Combat Mechanics

Combat is turn based. Each turn a player chooses an action after seeing what the enemies intent to do.

The combat system aims to be a puzzle that you can solve. Each Enemy has a specific list of intents which they endlessly rotate till they win or lose. Enemies have the same set of actions as the Player while the Player is the only one having the option to act re-actively.

From now on terms that refer to both Enemies and Player will refer to them as Combatants.

Combatant Stats

Before jumping into more mechanics let's briefly go over the basic stats: Health, Attack, Defense

Defense is a flat damage reduction number. So as a base formula damage dealt = initiator attack - receiver defense.

Actions and Stances

Combatants have 3 Actions to choose from:

  • Basic Attack - Deals damage = Initiator Attack Stat - Receiver Defense Stat.
  • Power Attack - Deals damage = Initiator Attack Stat - Receiver Defense Stat + Power Attack Bonus
  • Guard - Initiator gains Guard Defense Bonus extra defense for the turn.

Enemy Actions are called Intents. They are exactly the same thing, with the same modifiers/effects but they are ordered and predefined in order to add an enemy learning curve to the game.

Stances

A core combat concept is the concept of Stances. Stances are: Normal(NS), Aggressive(AS), Defensive Stance(DS). A stance essentially gives a buff to a Combatant for a specific duration. Stances work in combination with Actions.

Aggressive Stance <-> Reckless Buff

Whenever a Combatant does a Power Attack while in Normal Stance, they enter Aggressive Stance after all turn Actions are resolved.

Reckless Buff gives a flat attack bonus and reducers the Combatants defense.

  1. If a Combatant executes a Guard Action while in Aggressive Stance they will revert to normal stance. This will result in them loosing the
    Reckless Buff at the end of the Round.
  2. If a Combatant executes a Basic Attack Action while in Aggressive Stance, the duration of the Reckless Buff is extended by 1 round.

Defensive Stance <-> Stalwart Buff

Whenever a Combatant does a Guard Action while in Normal Stance, they enter Defensive Stance after all turn Actions are resolved.

Stalwart Buff gives a flat defense bonus and reducers the Combatants attack.

  1. If a Combatant executes a Guard Action while in Aggressive Stance they will revert to normal stance. This will result in them loosing the
    Reckless Buff at the end of the Round.
  2. If a Combatant executes a Guard Action while in Defensive Stance, the duration of the Stalwart Buff is extended by 1 round.

Action-Stance Matrix

ActionStanceMatrix

How to Modify your Game

After downloading the zip/tgz file and extract it you'll notice there's an assets folder. Inside this folder is a set of text files from which you can modify your game.

  • By modifying the player.json file, you modify your characters stats
  • By modifying config.json file, you can modify stat bonuses for ALL COMBATANTS. Specifically you can modify:
    • Power Attack Bonus
    • Guard Defense Bonus
    • Stalwart buff modifiers
    • Reckless buff modifiers

Additionally you can create your own enemies and compose them into custom encounters. The encounters.json file is an array of arrays. Each element of the inner array is the name of an enemy. Enemies are found in assets/enemies folder. Enemy files are named [enemy-name].json. In the encounters.json you can write stuff like:

[
  [
    "teenage-wyvern"
  ],
  [
    "teenage-wyvern",
    "red-guard"
  ]
]

This will result in a series of encounters. The first one you will be fighting Teenage Wyvern, and the 2nd one you'll be fighting Teenage Wyvern and Red Guard. Remember that the Enemy names must match the [enemy_name].json file inside assets/enemies folder.

Creating Enemies

Enemies should be created inside the assets/enemies folder. An example enemy is:

assets/enemies/teenage-wyvern.json

{
  "name":"Teenage Wyvern",
  "description": "A wyvern with a bit of a temper.",
  "health": 100,
  "attack": 15,
  "defense": 0,
  "stance": "Normal",
  "intents": [
    "ba",
    "ba",
    "pa",
    "gd",
    "gd"
  ]
}

What should be mentioned is the structure of the intents array.

  • ba = Basic Attack
  • pa = Power Attack
  • gd = Guard

The enemy will execute the sequence of actions given until they win or lose. When the sequence runs out, the enemy the sequence again again.

Remember that Enemies have the same Action Stance Matrix as the Player

Hope you have fun.

What's Changed

New Contributors

Full Changelog: https://github.com/moby-it/useless-dragon/commits/v.0.1.2-prealpha