Releases: moby-it/useless-dragon
v0.1.3-prealpha
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
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.
- 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. - 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.
- 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. - 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
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
- Merge Docs by @George-Spanos in #1
- 0.1.0-prealpha by @George-Spanos in #2
- fix combat exit error by @George-Spanos in #4
- fix multiple enemies terminal not working on windows by @George-Spanos in #5
New Contributors
- @George-Spanos made their first contribution in #1
Full Changelog: https://github.com/moby-it/useless-dragon/commits/v.0.1.2-prealpha