From bf48073c96d0c6866bb2edf944ba19be62ff9136 Mon Sep 17 00:00:00 2001
From: nsensfel <SpamShield0@noot-noot.org>
Date: Mon, 30 Sep 2019 18:16:34 +0200
Subject: Moves tacticians-server/other to 'misc'

---
 misc/attrib_stats.txt        | 155 +++++++++++++++++++++++++++++++++++++++++++
 misc/db_bounty.txt           |  18 +++++
 misc/demo_map0.map           |  32 +++++++++
 misc/erl_module_template.erl |  17 +++++
 misc/luck.txt                |  97 +++++++++++++++++++++++++++
 misc/magic.txt               |  75 +++++++++++++++++++++
 misc/skills.txt              |  92 +++++++++++++++++++++++++
 7 files changed, 486 insertions(+)
 create mode 100644 misc/attrib_stats.txt
 create mode 100644 misc/db_bounty.txt
 create mode 100644 misc/demo_map0.map
 create mode 100644 misc/erl_module_template.erl
 create mode 100644 misc/luck.txt
 create mode 100644 misc/magic.txt
 create mode 100644 misc/skills.txt

diff --git a/misc/attrib_stats.txt b/misc/attrib_stats.txt
new file mode 100644
index 0000000..cc06824
--- /dev/null
+++ b/misc/attrib_stats.txt
@@ -0,0 +1,155 @@
+{Attributes
+   Constitution
+   Dexterity
+   Intelligence
+   Mind
+   Speed
+   Strength
+}
+{Stats
+   {Movement Points
+      Controlled by: Speed
+      ((Speed)^1.8)/20
+   }
+   {Health
+      Controlled by: Constitution
+      ((Constitution)^1.8)/20
+   }
+   {Dodges
+      Controlled by: average(Dexterity, Mind, Speed)
+      Max: 75%
+      Min: 5%
+      min(75,max(5,(4^(x/25))))
+      ((average(Dexterity, Mind, Speed))^1.8)/40
+   }
+   {Parries
+      Controlled by: average(Dexterity, Speed, Strength)
+      Melee only
+      Max: 75%
+      Min: 0%
+      min(75,(4^(x/25)))
+   }
+   {Physical Weapons
+      {Damage
+         Controlled by: Strength
+         limits + (((Strength - 50)/75) limits)
+      }
+      {Accuracy
+         Controlled by: Dexterity
+         Max: 100%
+         Min: 0%
+         (30 * (log((x + 5)/4))) // Might be too generous
+         Note: failing that roll halves the damages.
+      }
+      {Double Hits
+         Controlled by: Speed
+         Max: 100%
+         Min: 0%
+         (x^2.5)/1000
+      }
+      {Critical Hits
+         Controlled by: Intelligence
+         Max: 100%
+         Min: 0%
+         (x^2.5)/1000
+      }
+   }
+   {Magical Weapons
+      {Damage
+         Controlled by: Intelligence
+         limits + (((Strength - 50)/75) limits)
+      }
+      {Accuracy
+         Controlled by: Mind
+         Max: 100%
+         Min: 0%
+         (30 * (log((x + 5)/4))) // Might be too generous
+         Note: failing that roll halves the damages.
+      }
+      {Double Hits
+         Controlled by: Speed
+         Max: 100%
+         Min: 0%
+         (x^2.5)/1000
+      }
+      {Critical Hits
+         Controlled by: Dexterity
+         Max: 100%
+         Min: 0%
+         (x^2.5)/1000
+      }
+   }
+}
+{Physical Attack
+   {Damage Type
+      Bludgeoning
+      Piercing
+      Slashing
+   }
+   {Ranged
+      {Short Bow
+         Minimal Range: 2
+         Maximal Range: 4
+         Damage Type: Arrow dependent
+      }
+      {Long Bow
+         Minimal Range: 2
+         Maximal Range: 6
+         Damage Type: Arrow dependent
+         Attribute Penalty: Speed
+      }
+      {Crossbow
+         Minimal Range: 2
+         Maximal Range: 4
+         Damage Type: Bolt dependent
+         Attribute Penalty: Dexterity
+         Misc: High damage
+      }
+      {Arbalest
+         Minimal Range: 2
+         Maximal Range: 6
+         Damage Type: Bolt dependent
+         Attribute Penalty: Dexterity, Speed
+         Misc: High damage
+      }
+   }
+   {Melee
+      {Sword
+         Minimal Range: 1
+         Maximal Range: 1
+         Damage Type: Slashing
+      }
+      {Claymore
+         Minimal Range: 1
+         Maximal Range: 2
+         Damage Type: Slashing
+         Attribute Penalty: Speed
+      }
+      {Mace
+         Minimal Range: 1
+         Maximal Range: 1
+         Damage Type: Bludgeoning
+      }
+      {War Hammer
+         Minimal Range: 1
+         Maximal Range: 2
+         Damage Type: Bludgeoning
+         Attribute Penalty: Speed
+      }
+      {Dagger
+         Minimal Range: 1
+         Maximal Range: 1
+         Damage Type: Piercing
+      }
+      {Spear
+         Minimal Range: 1
+         Maximal Range: 2
+         Damage Type: Piercing
+         Attribute Penalty: Speed
+      }
+   }
+}
+{Base Accuracy
+   Melee: Base Accuracy bonus.
+   Ranged: No Base Accuracy bonus.
+}
diff --git a/misc/db_bounty.txt b/misc/db_bounty.txt
new file mode 100644
index 0000000..d31226a
--- /dev/null
+++ b/misc/db_bounty.txt
@@ -0,0 +1,18 @@
+Designing with a "it can crash at any point" mentality
++ can't combine DB queries in an atomic manner
+= Potential for partially completed tasks, "corrupting" the global DB.
+
+A solution could be having "bounty" entries, which work as follows:
+A process P0 needs to do tasks T0, then T1, then T2.
+P0 creates a bounty B0:
+{
+   not_before: 60s.
+   task: T0_T1_T2.
+   params: [{T0.id, T1.id, 20]
+}
+P0 adds B0 to the Bounty DB.
+P0 attempts T0, T1, and T2.
+P0 removes B0 from the Bounty DB.
+
+There are other processes trying to access available bounties (i.e. bounties
+for which the "not_before" has expired) to complete them.
diff --git a/misc/demo_map0.map b/misc/demo_map0.map
new file mode 100644
index 0000000..8a66d8e
--- /dev/null
+++ b/misc/demo_map0.map
@@ -0,0 +1,32 @@
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2;
+ 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 2;
+ 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 6, 9, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2;
+ 2, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2;
+ 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2;
+ 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2;
+ 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,11, 7, 7, 7, 7,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 4, 3, 3, 3, 3, 3, 3, 3, 3, 5, 0, 0, 0, 0, 0, 1, 0, 2;
+ 2, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,11, 7, 7, 7, 7, 7, 7, 7, 7,10, 0, 0, 0, 0, 0, 1, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2;
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2;
+ 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,11, 7, 7,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2;
+ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2;
+ 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2;
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6;
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3;
diff --git a/misc/erl_module_template.erl b/misc/erl_module_template.erl
new file mode 100644
index 0000000..01c79bd
--- /dev/null
+++ b/misc/erl_module_template.erl
@@ -0,0 +1,17 @@
+-module(name).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/misc/luck.txt b/misc/luck.txt
new file mode 100644
index 0000000..33d7fc2
--- /dev/null
+++ b/misc/luck.txt
@@ -0,0 +1,97 @@
+Hitting your target, parrying, critical hits, double hits, and elemental status
+are controlled by random chance. On the one hand, this adds depth through
+management of risks and rewards, and it forces unexpected events on the players.
+On the other hand, it can quickly make combats feel unfair (e.g. good tactics
+failing due to bad luck) or infuriate players (e.g. missing a 95% chance shot in
+XCOM).
+
+To mitigate the drawbacks, TO should balance the impact of luck.
+
+During a battle, each players has a Luck meter. Luck in between -200 and 200. It
+starts at 0.
+
+When a player makes a roll with X% chance, the result is as follows:
+Roll = rand(100);
+IsSuccess = ((X + Luck) >= Roll);
+if (IsSuccess)
+{
+   if (X > 50)
+   {
+      // It was likely to succeed, pay just what you used.
+      MissingPoints = max(0, (Roll - X))
+      Luck' = (Luck - MissingPoints)
+   }
+   else if (X =< 50)
+   {
+      // It was unlikely to succeed, pay a lot.
+      Cost = (55 - X) // How far was it from being reasonable?
+      Luck' = (Luck - Cost)
+   }
+}
+else
+{
+   // Failure due to bad roll.
+   if (X >= 50)
+   {
+      // It was likely to succeed, you're owed a lot.
+      OwedPoints = (X - 45)
+      Luck' = (Luck + OwedPoints)
+   }
+}
+
+For example:
+
+A/ The character of a player with 15 Luck attempts a 10% chance parry:
+if (Roll <= 25)
+{
+   // Unlikely Success.
+   Cost = (55 - 10) = 45
+   Luck' = 15 - 45 = -30
+}
+else if (Roll > 25)
+{
+  // Expected Failure.
+}
+
+B/ The character of a player with 20 Luck attempts a 45% chance parry:
+if (Roll <= 60)
+{
+   // Unlikely Success.
+   Cost = (55 - 45) = 10
+   Luck' = 20 - 10 = 10
+}
+else if (Roll > 60)
+{
+  // Expected Failure.
+}
+
+D/ The character of a player with 20 Luck attempts a 55% chance parry:
+if (Roll <= 70)
+{
+   // Likely Success.
+   UsedUpLuck = max(0, (55 - Roll)) = [0, 20]
+   Luck' = 20 - UsedUpLuck = [0, 20]
+}
+else if (Roll > 70)
+{
+  // Unlucky dice roll.
+  OwedPoints = (55 - 45) = 10
+  Luck' = 20 + 10 = 30
+}
+
+D/ The character of a player with -35 Luck attempts a 15% chance parry:
+No roll required. This fails. No luck update.
+
+E/ The character of a player with -35 Luck attempts a 75% chance parry:
+if (Roll <= 40)
+{
+   // Without the negative luck, it was likely to succeed
+   // Luck clearly didn't help, so none is to be payed.
+}
+else if (Roll > 40)
+{
+   // If not for that negative luck, you were likely to make it.
+   // You're owed some luck back.
+   OwedPoints = (75 - 45) = 30
+   Luck' = -35 + 30 = -5
+}
diff --git a/misc/magic.txt b/misc/magic.txt
new file mode 100644
index 0000000..d414d65
--- /dev/null
+++ b/misc/magic.txt
@@ -0,0 +1,75 @@
+Elements:
+
+            Wind
+   Lightning      Snow
+Fire                 Water
+   Magma          Plant
+            Earth
+
+Omnimods for each element:
+- Damage (>0)
+- Defense (any)
+- Status Chance (0-100)
+- Status Def (any)
+
+Chance to inflict status calculated similarly to evasion:
+   min(100, max(0, {attacker status chance} - {defender status def}))
+
+Status Def > 100 -> ({defender status def} - 100)% of {attacker damage} are
+   actually healing defender.
+
+Omnimods are manually set so that gaining X in an element leads to:
+* X/2 in the elements next to it.
+* -X in the opposite element
+* -(X/2) in the elements next to its opposite element
+
+Having this done manually allows for exception.
+
+The element chosen for the status that can be triggered is chosen randomly among
+the ones the character, with weights depending on the percentage of the damage
+caused by that element. For each element, there are two variants: Alpha, which
+inflicts a status on the character getting hit, and Beta, which grants one for
+the character doing the hitting. Status are taken into consideration only after
+the attack that generated them. Characters may have multiple elemental status in
+effect.
+
+Characters affected by the status of element, be it antagonistic or not, gain
+affinity in that element (i.e. omnimods for that element, and all the associated
+{X/2,-X,-(X/2)} stuff).
+
+* Wind:
+   Alpha: Reduces max movement points.
+   Beta: Increases max movement points.
+
+* Lightning:
+   Alpha: Character is disabled for a turn.
+   Beta:
+      Attacking this character, regardless of range, will result in taking
+      lightning damage.
+
+* Fire:
+   Alpha:
+      Character suffer fire damage over time (don't forget to make it worth it
+      despite the affinity gain).
+   Beta:
+      Character deals more damage.
+
+* Magma:
+   Alpha: TBD
+   Beta: TBD + Inflict magma damage when attacked by melee.
+
+* Earth:
+   Alpha: Lowers the character's defense
+   Beta: Increases the character's defense.
+
+* Plant:
+   Alpha: Character cannot be healed, nor gain SPs (not even with skill).
+   Beta: Character gains life-steal.
+
+* Water:
+   Alpha: Halves the character's HP.
+   Beta: The character receives some healing.
+
+* Snow:
+   Alpha: Character loses all evasion.
+   Beta: Character gets max evasion.
diff --git a/misc/skills.txt b/misc/skills.txt
new file mode 100644
index 0000000..9794967
--- /dev/null
+++ b/misc/skills.txt
@@ -0,0 +1,92 @@
+Characters have an SP gauge. It starts empty.
+To be decided: is the capacity of the gauge linked to a (new) stat, or is it
+   simply a way to measure how much SP is required before the skill can be cast
+   (i.e. it has exactly enough for one cast).
+
+SPs are gained from participation in an attack. The attacker gets 1 point per
+attack (which should make being able to do two attacks per turn worthwhile),
+1 point for a parry, and, possibly (to be decided), 1 point when defending
+(maybe % chance? This reduces the importance of double hits).
+
+Each character has exactly one skill, which is chosen like any other part of
+their equipment. Skills have infinite range, and are casted on a single target
+(faction is not taken into account), which is either a character or a tile
+(that may actually place the skill on a pattern around itself).
+The use of a skill counts as an action (i.e. it replaces either switching
+weapons or attacking).
+
+Multiple variants of the same skill allow players to select a more costly skill
+for an increase in either power (Alpha variant), duration (Beta variant), or
+both (Gamma variant). The increase should not be linear (e.g. 2 times the power
+costs 175% of the default version). The X Gamma variant combines the advantages
+of the Beta and the Alpha versions. It obviously costs way more than either of
+them. Another variation could be to have the skill triggered later, by
+targeting a tile. Depending on the variant, a character (ally, enemy, or
+either) would trigger the effect upon walking on the tile. This could for
+example be used for a self-resurrection skill.
+
+Ideas for some skills:
+* Attack Anywhere:
+   The caster performs an attack on the target with their current weapon,
+   regardless of where that target is.
+
+* Shields Up {D, A0, A1, B0, B1, G0, G1}:
+   Target benefits from {D: 25, A0: 50, A1: 75}% damage reduction for
+   {D: 1, B0: 2, B1: 3} turns.
+
+* Static Heal {D, A0, A1, A2, A3}:
+   Target heals for {D: 20, A0: 40, A1: 60, A2: 80, A3: 100} HPs, if nothing
+   prevents it.
+
+* Percentage Heal {D, A0, A1, A2, A3}:
+   Target heals for {D: 15, A0: 25, A1: 35, A2: 50, A3: 65} percent of their
+   maximum HPs, if nothing prevents it.
+
+* Healing Over Time {D, A0, A1, A2, A3, B0, B1, B2, B3, G0, G1, G2, G3}:
+   Target gains a {D: 4, B0: 6, B2: 8, B3: 10} turns duration status that heals
+   them for {D: 6, A0: 12, A1: 18, A2: 24, A3: 30} HPs.
+
+* Dispel {D, A0}:
+   Target loses {D: a random, A0: all} active status(es).
+
+* Redirection:
+   Target and caster swaps all their active status.
+
+* Overload {D, A0, A1, B0, B1, G0, G1}:
+   Target gains a {D: 1, B0: 2, B1: 3} status providing a {D: 5, A0: 10, A1:
+   20}% damage increase per active status (including this one) when attacking.
+   The count is done during the attack, not during the cast.
+
+* Trickster {D, A0, A1}:
+   Target and caster swaps {D: secondary, A0: active, A1: all} weapon(s).
+
+* Confusion:
+   The target equips their secondary weapon.
+
+* Vampire {D, A0, A1, A2, B0, B1, B2, G0, G1, G2}:
+   Caster gains the "Vampire" active status. The Vampire status lasts
+   {D: 3, B0: 6, B1: 9, B2: 12} turns and, for melee attacks: grants
+   {D: 10, A0: 15, A1: 20, A2: 25}% life-steal, and adds the Vampire status
+   to the defender (with a reset duration).
+
+* Teleportation:
+   The caster is teleported to the target tile, if applicable.
+
+* Switch:
+   Caster and target swap locations.
+
+* Mark Target {D, A0, A1, A2, B0, B1, B2, G0, G1, G2}:
+   The target gains an active status, "Target", that increases the critical
+   chance and precision of attacks it receives. The status lasts {D: 1, B0: 2,
+   B1: 3, B2: 4} turns, and increases chances by {D: 15, A0: 25, A1: 35, A2: 45}
+   points.
+
+* Petrify {D, B0, B1}:
+   The target becomes inactive and invulnerable for {D: 1, B0: 2, B1: 3} turns.
+
+* Sacrifice {D, A0, A1, A2, A3}:
+   Target gains <cost of the skill> SP points.
+
+* Denial {D, B0, B1, B2}:
+   Target is unable to gain SP points from attacks, parries, or defenses for
+   {D: 2, B0: 4, B1: 6} turns.
-- 
cgit v0.12-29-g3973

