---
# System prepended metadata

title: 'Test project, battle system notes'

---

# Test project, battle system notes

You would equip "runes" to your normal buttons: A/B/X/Y/L/R (X/Circle/Square/Triangle/L1/R!).

You press the buttons to start "chanting" - once it finishes, it adds the Rune to your current spell.

You can always move around. Never any restrictions on it.

Enemies adhere to the same rules and chant their abilities - letting the player see what they are about to do as well as use this to see when hidden spells are used.

Chanting costs MP. MP Comes back at a decent pace over time.

You can "charge" a Rune by holding the Charge button as it is being chanted. 
Charging a rune means its secondary effect becomes stronger. Every tick will further drain your MP.
If you hold Charge while not chanting, it instead enters a DBZ-like ki-charge.

When ki-charging MP rapidly recovers and can overflow up to 200%.

There are unique spells you can find by doing certain combinations of runes. If no unique spell is made from your combination, it takes the majority element and makes that your spell. i.e, a "Fire-Fire-Wind" becomes a Fire spell. It does, however, take on the properties of all included Runes, meaning in this case it would also haev the Wind properties of Homing.

---

## Technical
Since both the player and enemies will be interfacing with the same system, it should be built out of re-usable Resources.

### Resource: CharacterSheet
This Resource is something every combat entity has and as the name implies has all of their necessary data as well as functions for influencing the stats and all.

```gdscript
@export var 
@export var current_hp
@export var max_hp
@export var current_mp
@export var max_mp
@export var mp_charge_speed
@export var rune_charge_speed
@export var spell_damage
@export var resistance
@export var current_modifiers
...

# RUNE SLOTS
@export var rune1: Rune
@export var rune2: Rune
@export var rune3: Rune
@export var rune4: Rune
@export var rune5: Rune
@export var rune6: Rune
...
```

### Resource: Rune
Runes are effectively items and are generated randomly. They come with different modifiers, rariry, and elements.

```gdscript
@export var rune_element: RuneElement
@export var rarity: RuneRarity
@export var mp_cost: float
@export var secondary_effect: SecondaryEffect
@export var modifiers: RuneModifier
...
```

Doing this through a Resource means we can create all Runes as its own Resource and easily slot them into the CharacterSheet for entities.

This resource will also hold functions that easily returns data we might want so the battle system can then make use of it.

### Actor: Player
The PlayerController. Lock the camera behind the back.

The character will need a State to identify which input logic to be used. i.e, if you're chanting or not.

The player should be able to select which Runes they want equipped. But as a start just set 3 placeholder Runes down.

### The battle system
Most likely an autoloaded script that is always around. Contains helper functions and what not.

### A first proof of concept
- [ ] Make all the resources, even if barebones
- [ ] Have the player controller setup with a basic cylinder that can just be swapped out for the real model
- [ ] The act of chanting should work, even if it accomplishes nothing
- [ ] "Ki charge" should work