<div align='center'>
<h2>Choose your Ancestry:</h2>
<table>
<tr>
<td><<button "Human">>
<<dialog>>
<<include "Human Passage">>
<div align='center'>
<<link "I choose to be a Human">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Human">>
<<if visited("AncestryPage") < 2>>
<<set $character[1].availableAttribute += 5>>
<</if>>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
<td><<button "Dwarf">>
<<dialog>>
<<include "Dwarf Passage">>
<div align='center'>
<<link "I choose to be a Dwarf">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Dwarf">>
<<if visited("AncestryPage") < 2>>
<<set $character[1].availableExpertise += 10>>
<</if>>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
<td><<button "Herald">>
<<dialog>>
<<include "Herald Passage">>
<div align='center'>
<<link "I choose to be a Herald">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Herald">>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
<td><<button "Elf">>
<<dialog>>
<<include "Elf Passage">>
<div align='center'>
<<link "I choose to be an Elf">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Elf">>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
<td><<button "Draconian">>
<<dialog>>
<<include "Draconian Passage">>
<div align='center'>
<<link "I choose to be a Draconian">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Draconian">>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
<td><<button "Vanadi">>
<<dialog>>
<<include "Vanadi Passage">>
<div align='center'>
<<link "I choose to be a Vanadi">>
<<goto "Character Creation">>
<<set $character[1].Ancestry to "Vanadi">>
<<dialogclose>>
<</link>>
<<link "I reject this fate">>
<<dialogclose>>
<</link>>
</div>
<</dialog>>
<</button>></td>
</tr>
</table>
</div><div align='center'>
<img src="img/others/Archer.png" style="float: left; background-color: black; padding-left: 25em; padding-right: 25em;">
<hr>
<h2>Archer</h2>
<b>The Archer is a Specialization of the Warrior Class that focuses on Ranged weapon usage, being able to finish fights before enemies can have a reaction.</b>
<i><b>Main Attribute:</b> Strength (STR)</i>
<i><b>Secondary Attribute:</b> Perception (Per)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Archer:</b> (Skill) Quick Shot.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Archer:</b> Spare Arrows: After killing a enemy with a ranged weapon, reduce the cooldown of your weapon by 1.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Warrior:</b> Weapon Mastery: Your weapons apply additional effects based on their damage type.
Blunt - Has 50% to apply Confusion on the target (does not stack).
Slashing - Applies Bleed for 2 turns.
Piercing - Decreases the target's defense by 5 (does not stack).
</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i><b>Archer:</b> Barbed Points. Increase the number of dices of your ranged weapons by 1. (Ex.: 1d4 to 2d4)</i></td>
</tr>
<tr>
<td>At level 08 | <i><b>Archer:</b> (Skill) Triple Shot:</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i><b>Warrior:</b> Tactical Genius: Your Skills that cost three or more Action Points cost 1 point less.</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Archer:</b> (Skill) Arrow Barrage: </i></td>
</tr>
<tr>
<td>At level 13 | <i><b>Archer:</b> Follow-up: After using an Offensive skill, make a minor weapon attack against the same target. </i></td>
</tr>
<tr>
<td>At level 15 | <i><b>Warrior:</b> Second Wind: During each combat, the first time you hit below 25% of your maximum health, heal yourself by 35% of your lost health.</i></td>
</tr>
<tr>
<td>At level 16 | <i><b>Archer:</b> Dragon Piercing Arrows: Increase the damage dice of your ranged weapons by 1 step. (d4 to d6, d6 to d8, d8 to d10, d10 to d12) </i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i><b>Archer:</b> Headshot: Your ranged weapon attacks have a chance to execute certain enemies.</i></td>
</tr>
</table>
<hr>
<div align='center'>
An Archer character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Gamberson</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Shortbow</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Assassin</h2>
<b>The Assassin is a Specialization of the Rogue Class that focuses on ending the combat without being touched.</b>
<i><b>Main Attribute:</b> Dexterity (DEX)</i>
<i><b>Secondary Attribute:</b> Strength (STR)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i>(skill) Apply Venom.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Rogue:</b> Nimble Fingers: During combat, you gain 15% more Gold from defeating enemies. Additionally, you may steal from story characters (NPCs).</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
An Assassin character starts with:
<table>
<tr>
<td><b>Torso:</b><i>Leather armor</i></td>
<td><b>Legs:</b><i>Pants</i></td>
<td><b>Main Hand:</b><i>Crossbow</i></td>
<td><b>Off-Hand:</b><i>Wooden Shield</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Bard</h2>
<b>The Bard is a Specialization of the Artist Class that not only allows the player to inspire new ways to resolve problems but as well as improving their standing at combat trials.</b>
<i><b>Main Attribute:</b> Charisma (CHA)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i>(Skill) Earworm.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Bard character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Waist:<b> <i>Belt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Short Sword</i></td>
<td><b>Offhand:</b> <i>Lute</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Berserker</h2>
<b>The Berserker is a Specialization of the Barbarian Class that focuses on distilling as much damage as it can withhold, or even more.</b>
<i><b>Main Attribute:</b> Resilience (RES)</i>
<i><b>Secondary Attribute:</b> Strenght (STR)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Berserker</b> Though Skin: When under 50% of your health, decrease all damage taken by 3.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Berserker</b> (skill) Warcry.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Berserker</b> (skill) Cleave.</i></td>
</tr>
<tr>
<td>At level 06 | <i><b>Barbarian</b> Champion's Might: Add your resilience to your Damage and to your Athletics.</i></td>
</tr>
<tr>
<td>At level 08 | <i><i><b>Berserker</b> Bloodthirst: You deal additional damage equal to 10% of the target's current Lifeblood.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 11 | Whenever you are hit by an attack, increase all of your damage dealt by 3.
</tr>
<tr>
<td>At level 12 | <i><b>Barbarian</b>Unending Vigor: At the start of each turn, regain 3 health.</i></td>
</tr>
<tr>
<td>At level 13 | <i><b>Berserker</b> (skill) Feel the Pain.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Barbarian</b> Unyelding: When you would be killed by an attack, make a weapon attack, if you kill your attacker, recover 15% of your missing life. Can only happen once per battle.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
</table>
<hr>
<div align='center'>
A Berserker character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool shirt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main Hand:</b> <i>Great Axe</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<<link "I have made a mistake">>
<<set $character[1].traits=[]>>
<<goto $return>>
<</link>>
<hr>
<i>1-4 weak | 5-9 ordinary | 10-14 strong | 15-20 Legendary</i>
<h2>Attributes:</h2>
You have <span id="current-avlb-attr"><<print $character[1].availableAttribute>></span> Points remaining.
<hr>
<table>
<tr>
<td> <abbr title="Affects hit chance for Melee weapons, as well as damage on Heavy or Versatile weapons.">STRENGTH:</abbr> </td>
<td> <abbr title="Affects hit chance for Melee weapons, as well as damage on Agile or Versatile weapons.">DEXTERITY:</abbr> </td>
<td> <abbr title="Affects only your Lifeblood (Life).">RESILIENCE:</abbr> </td>
<td> <abbr title="Mainly used for its expertises, it also affects your Essence (Mana) and the majority of abilities.">INTELLIGENCE:</abbr> </td>
<td> <abbr title="Mainly used for its expertise, it also affects some abilities.">CHARISMA:</abbr> </td>
<td> <abbr title="Affects hitchance for Ranged weapons, as well as some abilities.">PERCEPTION:</abbr> </td>
</tr>
<tr>
<td><span id="current-attr-STR"><<print $character[1].STR>></span> </td>
<td><span id="current-attr-DEX"><<print $character[1].DEX>></span></td>
<td><span id="current-attr-RES"><<print $character[1].RES>></span> </td>
<td><span id="current-attr-INT"><<print $character[1].INT>></span> </td>
<td><span id="current-attr-CHA"><<print $character[1].CHA>></span> </td>
<td><span id="current-attr-PER"><<print $character[1].PER>></span> </td>
</tr>
</table>
<hr>
<table>
<tr>
<td>
<<button "Increase Strength">>
<<if ($character[1].availableAttribute >= 1 && $character[1].STR < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].STR += 1>>
<<replace "#current-attr-STR">><<print $character[1].STR>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Strength">>
<<if $character[1].STR > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].STR -= 1>>
<<replace "#current-attr-STR">><<print $character[1].STR>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Dexterity">>
<<if ($character[1].availableAttribute >= 1 && $character[1].DEX < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].DEX += 1>>
<<replace "#current-attr-DEX">><<print $character[1].DEX>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Dexterity">>
<<if $character[1].DEX > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].DEX -= 1>>
<<replace "#current-attr-DEX">><<print $character[1].DEX>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Resilience">>
<<if ($character[1].availableAttribute >= 1 && $character[1].RES < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].RES += 1>>
<<replace "#current-attr-RES">><<print $character[1].RES>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Resilience">>
<<if $character[1].RES > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].RES -= 1>>
<<replace "#current-attr-RES">><<print $character[1].RES>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Intelligence">>
<<if ($character[1].availableAttribute >= 1 && $character[1].INT < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].INT += 1>>
<<replace "#current-attr-INT">><<print $character[1].INT>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Intelligence">>
<<if $character[1].INT > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].INT -= 1>>
<<replace "#current-attr-INT">><<print $character[1].INT>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Charisma">>
<<if ($character[1].availableAttribute >= 1 && $character[1].CHA < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].CHA += 1>>
<<replace "#current-attr-CHA">><<print $character[1].CHA>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Charisma">>
<<if $character[1].CHA > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].CHA -= 1>>
<<replace "#current-attr-CHA">><<print $character[1].CHA>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Perception">>
<<if ($character[1].availableAttribute >= 1 && $character[1].PER < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].PER += 1>>
<<replace "#current-attr-PER">><<print $character[1].PER>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Perception">>
<<if $character[1].PER > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].PER -= 1>>
<<replace "#current-attr-PER">><<print $character[1].PER>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
</table>
<h2>Expertises:</h2>
You have <span id="current-avlb-exp"><<print $character[1].availableExpertise>></span> Points remaining.
<hr>
<table>
<tr>
<td>Athletics:</td>
<td>Acrobatics:</td>
<td>Stealth: </td>
<td>Sleight of Hands:</td>
<td>World Knowledge:</td>
<td>Mystical Knowledge:</td>
</tr>
<tr>
<td><span id="current-expertise-Athletics"><<print $character[1].Athletics>></span></td>
<td><span id="current-expertise-Acrobatics"><<print $character[1].Acrobatics>></span></td>
<td><span id="current-expertise-Stealth"><<print $character[1].Stealth>></span ></td>
<td><span id="current-expertise-SleightofHands"><<print $character[1].SleightofHands>></span> </td>
<td><span id="current-expertise-WorldKnowledge"><<print $character[1].WorldKnowledge>></span> </td>
<td><span id="current-expertise-MysticalKnowledge"><<print $character[1].MysticalKnowledge>></span></td>
</tr>
<tr>
<td>Arcane Knowledge:</td>
<td>Speech:</td>
<td>Arts:</td>
<td>Intimidation:</td>
<td>Insight: </td>
<td>Awareness: </td>
</tr>
<tr>
<td><span id="current-expertise-ArcaneKnowledge"><<print $character[1].ArcaneKnowledge>></span></td>
<td><span id="current-expertise-Speech"><<print $character[1].Speech>></span></td>
<td><span id="current-expertise-Arts"><<print $character[1].Arts>></span></td>
<td><span id="current-expertise-Intimidation"><<print $character[1].Intimidation>></span></td>
<td><span id="current-expertise-Insight"><<print $character[1].Insight>></span></td>
<td><span id="current-expertise-Awareness"><<print $character[1].Awareness>></span></td>
</tr>
</table>
<hr>
<table>
<tr>
<td>
<<button "Increase Athletics">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Athletics < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Athletics += 1>>
<<replace "#current-expertise-Athletics">><<print $character[1].Athletics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Athletics">>
<<if $character[1].Athletics > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Athletics -= 1>>
<<replace "#current-expertise-Athletics">><<print $character[1].Athletics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Acrobatics">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Acrobatics < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Acrobatics += 1>>
<<replace "#current-expertise-Acrobatics">><<print $character[1].Acrobatics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Acrobatics">>
<<if $character[1].Acrobatics > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Acrobatics -= 1>>
<<replace "#current-expertise-Acrobatics">><<print $character[1].Acrobatics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Stealth">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Stealth < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Stealth += 1>>
<<replace "#current-expertise-Stealth">><<print $character[1].Stealth>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Stealth">>
<<if $character[1].Stealth > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Stealth -= 1>>
<<replace "#current-expertise-Stealth">><<print $character[1].Stealth>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Sleight of Hands">>
<<if ($character[1].availableExpertise >= 1 && $character[1].SleightofHands < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].SleightofHands += 1>>
<<replace "#current-expertise-SleightofHands">><<print $character[1].SleightofHands>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Sleight of Hands">>
<<if $character[1].SleightofHands > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].SleightofHands -= 1>>
<<replace "#current-expertise-SleightofHands">><<print $character[1].SleightofHands>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase World Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].WorldKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].WorldKnowledge += 1>>
<<replace "#current-expertise-WorldKnowledge">><<print $character[1].WorldKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease World Knowledge">>
<<if $character[1].WorldKnowledge > 1 >>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].WorldKnowledge -= 1>>
<<replace "#current-expertise-WorldKnowledge">><<print $character[1].WorldKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Mystical Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].MysticalKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].MysticalKnowledge += 1>>
<<replace "#current-expertise-MysticalKnowledge">><<print $character[1].MysticalKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Mystical Knowledge">>
<<if $character[1].MysticalKnowledge > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].MysticalKnowledge -= 1>>
<<replace "#current-expertise-MysticalKnowledge">><<print $character[1].MysticalKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Arcane Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].ArcaneKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].ArcaneKnowledge += 1>>
<<replace "#current-expertise-ArcaneKnowledge">><<print $character[1].ArcaneKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Arcane Knowledge">>
<<if $character[1].ArcaneKnowledge > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].ArcaneKnowledge -= 1>>
<<replace "#current-expertise-ArcaneKnowledge">><<print $character[1].ArcaneKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Speech">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Speech < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Speech += 1>>
<<replace "#current-expertise-Speech">><<print $character[1].Speech>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Speech">>
<<if $character[1].Speech > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Speech -= 1>>
<<replace "#current-expertise-Speech">><<print $character[1].Speech>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Arts">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Arts < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Arts += 1>>
<<replace "#current-expertise-Arts">><<print $character[1].Arts>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Arts">>
<<if $character[1].Speech > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Arts -= 1>>
<<replace "#current-expertise-Arts">><<print $character[1].Arts>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<!-- Repeat the above structure for other expertise -->
<tr>
<td>
<<button "Increase Intimidation">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Intimidation < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Intimidation += 1>>
<<replace "#current-expertise-Intimidation">><<print $character[1].Intimidation>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Intimidation">>
<<if $character[1].Intimidation > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Intimidation -= 1>>
<<replace "#current-expertise-Intimidation">><<print $character[1].Intimidation>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<!-- Repeat the above structure for other expertise -->
<tr>
<td>
<<button "Increase Insight">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Insight < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Insight += 1>>
<<replace "#current-expertise-Insight">><<print $character[1].Insight>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Insight">>
<<if $character[1].Insight > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Insight -= 1>>
<<replace "#current-expertise-Insight">><<print $character[1].Insight>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Awareness">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Awareness < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Awareness += 1>>
<<replace "#current-expertise-Awareness">><<print $character[1].Awareness>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Awareness">>
<<if $character[1].Awareness > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Awareness -= 1>>
<<replace "#current-expertise-Awareness">><<print $character[1].Awareness>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
</table>
<hr>
[[Let us proceed|Class and Specialization]]
</div><div align='center'>
[[Inventory]] | [[Jornal]]
| <h2>Character's Page:</h2> |
</div>
<b>Name</b> <<print $character[1].Name>>
<b>Class Specialization:</b> <<print $character[1].Specialization>>
<b>Ancestry:</b> <<print $character[1].Ancestry>>
<b>Gold</b> <i><<print $character[1].Gold>></i>
<b>Lifeblood:</b> <<print $character[1].currentLife>> | <<print $character[1].MAXLIFE>>
<b>Essence:</b> <<print $character[1].currentMana>> | <<print $character[1].MAXMANA>>
<b>Current Experience:</b> <<print $character[1].experience>> / <<print $xpToLevelUp>> | <b>Level:</b><<print $character[1].level>>.
<<if $character[1].experience >= $xpToLevelUp>>
<<button "Level Up">>
<<set $character[1].level += 1>>
<<set $xpToLevelUp += Math.round($xpToLevelUp * 1.5)>>
<<set $character[1].availableAttribute += 3>>
<<if $character[1].traits.includes("Unlimited Potential")>>
<<set $character[1].availableExpertise += 4>>
<<else>>
<<set $character[1].availableExpertise += 3>>
<</if>>
<<goto "level up passage">>
<</button>>
<</if>>
<b>Traits:</b> <<print $character[1].traits.join(", ")>>
<b>Skills:</b>
<<button "Show Skills">>
<<replace "#skillsContainer">>
<ul>
<<for _i to 0; _i lt $character[1].skills.length; _i++>>
<<set _skill = $character[1].skills[_i]>>
<li><b>Name:</b> <<print _skill.name>><br>
<b>Categories:</b> <<print _skill.categories.join(", ")>><br>
<b>Description:</b> <<print _skill.description>><br>
<b>AP Cost:</b> <<print _skill.APcost>> | <b>Mana Cost:</b> <<print _skill.Manacost>><br>
<b>Cooldown:</b> <<print _skill.cooldown>> turns<br></li>
<</for>>
</ul>
<</replace>>
<</button>> | <<button "Hide Skills">>
<<replace "#skillsContainer">>
<!-- Replace with an empty container, effectively hiding the skills -->
<</replace>>
<</button>>
<span id="skillsContainer">
</span>
<h3>Equipment</h3>
<b>Head:</b> <<print $character[1].equipment.head.Name>>
<b>Torso:</b> <<print $character[1].equipment.torso.Name>>
<b>Waist:</b> <<print $character[1].equipment.waist.Name>>
<b>Legs:</b> <<print $character[1].equipment.legs.Name>>
<b>Feet:</b> <<print $character[1].equipment.feet.Name>>
<b>Main hand:</b> <<print $character[1].equipment.mainhand.Name>>
<b>Offhand:</b> <<print $character[1].equipment.offhand.Name>>
<hr>
<div align='center'>
<h3>Attributes:</h3>
<hr>
<table>
<tr>
<td> STRENGTH: </td>
<td> DEXTERITY: </td>
<td> RESILIENCE: </td>
<td> INTELLIGENCE: </td>
<td> CHARISMA: </td>
<td> PERCEPTION: </td>
</tr>
<tr>
<td><span id="current-attr-STR"><<print $character[1].STR>></span> </td>
<td><span id="current-attr-DEX"><<print $character[1].DEX>></span></td>
<td><span id="current-attr-RES"><<print $character[1].RES>></span> </td>
<td><span id="current-attr-INT"><<print $character[1].INT>></span> </td>
<td><span id="current-attr-CHA"><<print $character[1].CHA>></span> </td>
<td><span id="current-attr-PER"><<print $character[1].PER>></span> </td>
</tr>
</table>
</div>
<hr>
<div align='center'>
<h3>Expertises:</h3>
<hr>
<table>
<tr>
<td>Athletics:</td>
<td>Acrobatics:</td>
<td>Stealth: </td>
<td>Sleight of Hands:</td>
<td>World Knowledge:</td>
<td>Mystical Knowledge:</td>
</tr>
<tr>
<td><span id="current-expertise-Athletics"><<print $character[1].Athletics>></span></td>
<td><span id="current-expertise-Acrobatics"><<print $character[1].Acrobatics>></span></td>
<td><span id="current-expertise-Stealth"><<print $character[1].Stealth>></span ></td>
<td><span id="current-expertise-SleightofHands"><<print $character[1].SleightofHands>></span> </td>
<td><span id="current-expertise-WorldKnowledge"><<print $character[1].WorldKnowledge>></span> </td>
<td><span id="current-expertise-MysticalKnowledge"><<print $character[1].MysticalKnowledge>></span></td>
</tr>
<tr>
<td>Arcane Knowledge:</td>
<td>Speech:</td>
<td>Arts:</td>
<td>Intimidation:</td>
<td>Insight: </td>
<td>Awareness: </td>
</tr>
<tr>
<td><span id="current-expertise-ArcaneKnowledge"><<print $character[1].ArcaneKnowledge>></span></td>
<td><span id="current-expertise-Speech"><<print $character[1].Speech>></span></td>
<td><span id="current-expertise-Arts"><<print $character[1].Arts>></span></td>
<td><span id="current-expertise-Intimidation"><<print $character[1].Intimidation>></span></td>
<td><span id="current-expertise-Insight"><<print $character[1].Insight>></span></td>
<td><span id="current-expertise-Awareness"><<print $character[1].Awareness>></span></td>
</tr>
</table>
</div>
Human Thief
Dwarf Vanguard
Elf Cleric
Herald Wizard
Draconian Feral<style>
.class-container {
display: grid;
grid-template-columns: repeat(6, 1fr);
text-align: center;
}
.grid-header {
grid-column: span 6;
}
.custom-table {
width: 100%;
border-collapse: collapse;
}
.grid-item {
padding: 10px;
border: 1px solid #000;
}
div.align-center {
text-align: center;
}
.warrior-header {
background-color: #8B0000; /* Dark Red */
}
.rogue-header {
background-color: #333333; /* Dark Gray */
color: #ffffff; /* White text on dark background */
}
.barbarian-header {
background-color: #4B4B00; /* Dark Moss Green */
}
.mage-header {
background-color: #00008B; /* Dark Blue (Azure) */
}
.artist-header {
background-color: #8B008B; /* Dark Violet */
}
.devotee-header {
background-color: #8B8B00; /* Dark Yellow (Light Yellow) */
}
</style>
<<set $character[1].Oath = "">>
<<set $character[1].Pact = "">>
<div class="grid-container" align='center'>
<div class="grid-header"><h3>Classes and Specializations:</h3></div>
<table class="custom-table">
<thead>
<tr>
<th><div class="grid-header warrior-header">Warrior:</div></th>
<th><div class="grid-header rogue-header">Rogue</div></th>
<th><div class="grid-header barbarian-header">Barbarian</div></th>
<th><div class="grid-header mage-header">Mage</div></th>
<th><div class="grid-header artist-header">Artist</div></th>
<th><div class="grid-header devotee-header">Devotee</div></th>
</tr>
</thead>
<tbody>
<tr>
<td><div class="grid-item"><<link "Vanguard">><<dialog>><<include "Vanguard">><div align="center"><<link "I shall become a Vanguard">><<set $character[1].Specialization to "Vanguard">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Assassin">><<dialog>><<include "Assassin">><div align="center"><<link "I shall become an Asssassin">><<set $character[1].Specialization to "Assassin">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Juggernaut">><<dialog>><<include "Juggernaut">><div align="center"><<link "I shall become a Juggernaut">><<set $character[1].Specialization to "Juggernaut">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Wizard">><<dialog>><<include "Wizard">><div align="center"><<link "I shall become a Wizard">><<set $character[1].Specialization to "Wizard">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Dancer">><<dialog>><<include "Dancer">><div align="center"><<link "I shall become a Dancer">><<set $character[1].Specialization to "Dancer">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Paladin">><<dialog>><<include "Paladin">><div align="center"><<link "I shall become a Paladin">><<set $character[1].Specialization to "Paladin">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
</tr>
<tr>
<td><div class="grid-item"><<link "Archer">><<dialog>><<include "Archer">><div align="center"><<link "I shall become an Archer">><<set $character[1].Specialization to "Archer">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Thief">><<dialog>><<include "Thief">><div align="center"><<link "I shall become a Thief">><<set $character[1].Specialization to "Thief">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Berserker">><<dialog>><<include "Berserker">><div align="center"><<link "I shall become a Berserker">><<set $character[1].Specialization to "Berserker">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Warlock">><<dialog>><<include "Warlock">><div align="center"><<link "I shall become a Warlock">><<set $character[1].Specialization to "Warlock">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Bard">><<dialog>><<include "Bard">><div align="center"><<link "I shall become a Bard">><<set $character[1].Specialization to "Bard">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Cleric">><<dialog>><<include "Cleric">><div align="center"><<link "I shall become a Cleric">><<set $character[1].Specialization to "Cleric">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
</tr>
<tr>
<td><div class="grid-item"><<link "Duelist">><<dialog>><<include "Duelist">><div align="center"><<link "I shall become a Duelist">><<set $character[1].Specialization to "Duelist">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Spy">><<dialog>><<include "Spy">><div align="center"><<link "I shall become a Spy">><<set $character[1].Specialization to "Spy">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Feral">><<dialog>><<include "Feral">><div align="center"><<link "I shall become a Feral">><<set $character[1].Specialization to "Feral">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Invoker">><<dialog>><<include "Invoker">><div align="center"><<link "I shall become a Invoker">><<set $character[1].Specialization to "Invoker">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Scholar">><<dialog>><<include "Scholar">><div align="center"><<link "I shall become a Scholar">><<set $character[1].Specialization to "Scholar">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
<td><div class="grid-item"><<link "Inquisitor">><<dialog>><<include "Inquisitor">><div align="center"><<link "I shall become an Inquisitor">><<set $character[1].Specialization to "Inquisitor">><<goto "Confirmation">><<dialogclose>><</link>></div><</dialog>><</link>></div></td>
</tr>
</tbody>
</table>
</div>
<div align='center'>
</div>
<div align='center'>
<h2>Cleric</h2>
<b>The Cleric is a Specialization of the Devotee Class that gives the Player access to powers beyond compared to the divine.</b>
<i><b>Main Attribute:</b> Perception (PER)</i>
<i><b>Secondary Attribute:</b> Intelligence (INT)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Cleric:</b> Divine blessing: You start with the <i>Heal</i>, <i>Judgement</i> and <i>Shield of the Faithfull</i> Skills.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Cleric character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Holy Garments</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Wand</i></td>
<td><b>Offhand:</b> <i>Dvine Symbol</i></td>
</tr>
</table>
<hr>
</div><<run UIBar.stow();>><<run UIBar.hide();>>
<nobr>
<style>
body {
background-color: black;
color: #ccc;
font-family: Arial, sans-serif;
margin: 0;
display: block;
height: 100vh;
}
#enemy-list {
display: contents;
justify-items: stretch;
}
#Onething {
display: flex;
}
.sidenav {
margin-left: -20em;
background-color: transparent;
}
.sidenav p {
height: 100%;
width: 300px;
background-image: url('img/others/Combatbar.png');
background-size: 175px 50px;
background-position: inherit;
background-repeat: no-repeat;
padding: 16px;
text-decoration: none;
display: block;
}
.combat-hud {
width: 40em;
height: 30em;
background-image: url('img/others/combatHud.png');
background-size: cover; /* Adjust the value as needed */
background-repeat: no-repeat;
display: grid;
padding-left: 20px;
grid-template-rows: repeat(4, 1fr);
grid-template-areas: "player-name player-name player-name"
"show-skills skills skills"
"show-attack attack attack"
"end-turn end-turn end-turn";
}
.grid-item {
display: flex;
}
#player-name {
grid-area: player-name;
display: flex;
align-items: baseline;
}
#show-skills {
grid-area: show-skills;
position: static;
}
#attack {
margin-left: 5em;
grid-area: attack;
}
#skills {
display: block;
margin-left: 5em;
grid-area: skills;
overflow: scroll;
grid-area: skills;
height: 12em;
}
#show-attack {
grid-area: show-attack;
position: static;
}
#end-turn {
grid-area: end-turn;
position: static;
}
button:hover {
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
}
#battle-log {
display: block;
overflow-y: auto;
height: 300px;
width: 100%;
color: #ccc;
text-align: justify;
padding: 10px;
background-color: #222;
border: 1px solid #555;
border-radius: 5px;
margin-top: 20px;
}
.message-divider {
border: none;
height: 1px;
background-color: rgba(169, 169, 169, 0.3);
margin: 10px 0;
width: 100%;
}
.player-turn {
float: left;
clear: left;
color: silver;
border-radius: 5px;
padding: 5px;
margin: 5px 0;
max-width: 70%;
}
.enemy-turn {
float: right;
clear: right;
color: silver;
border-radius: 5px;
padding: 5px;
margin: 5px 0;
max-width: 70%;
}
</style>
</nobr>
<h2>Enemies You Are Facing</h2>
<div id="enemy-list" align='center'>
<table>
<tr id="enemy-row">
<!-- Generate enemy names and details -->
</tr>
</table>
</div>
<div id="selected-enemy-details" style="display: none;">
<!-- Display detailed information about the selected enemy -->
</div>
<nobr>
<div id="Onething">
<div class="sidenav">
<p><b>Lifeblood:</b> <i><<print $character[1].currentLife>> / <<print $character[1].MAXLIFE>></i></p>
<p><b>Essence:</b> <i><<print $character[1].currentMana>> / <<print $character[1].MAXMANA>></i></p>
<p><b>AP:</b> <i><<print $character[1].AP>></i></p>
</div>
<div class="combat-hud" >
<!-- Player Information -->
<div class="grid-item" id="player-name">
<h2><<print $character[1].Name>></h2> - <b>Specialization:</b><<print $character[1].Specialization>><i>(<<print $character[1].level>>)</i>
</div>
<div class="grid-item" id="show-skills">
<button id="generateSkillbox" onclick="window.toggleSkillsDisplay()">Skills</button>
</div>
<div class="grid-item" id="show-attack">
<button id="generate-button" onclick="window.createAttackButtons()">Attack</button>
</div>
<div class="grid-item" id="skills">
<div id="skills-grid"></div>
</div>
<div class="grid-item" id="attack">
<div id="attack-buttons"></div>
</div>
<div class="grid-item" id="end-turn" align="center">
<button id="end-turn-button" disabled onclick="endPlayerTurn()">End Turn</button>
<button id="game-over-button" style="display: none;">[[Game Over][UIBar.unstow(); UIBar.show();]]</button>
<button id="victory-button" style="display: none;">[[Victory|Victory Screen]]</button>
</div>
</div>
</div>
<hr>
<div align='center'>
<<button "Help">>
<<dialog "Help">>
<b>How does combat work?</b> Combat mainly occurs in turns with the sequence: <i>Player > Summons > Enemies > Player</i>. During your turn, you can Attack or use Skills.
- Attacks cost 1-2 Action Points <i>(AP)</i>. <b>1-Handed</b> weapons have a lower damage dices, and therefore cost 1 AP, while<b>2-Handed</b> weapons have an higher cost and damage.
-Skills that contain "Technique" often only cost AP but tend to have higher cooldowns. While "Spells" tend to cost both AP and Essence.<br>
<b>How can I attack an enemy?</b> First, click on the "Attack" button. This will display the available targets <i>(from left to right)</i>.<br>
After choosing a target, your hit chance will be calculated as follows: <i>(Weapon hit-chance + attacker's additional Hit Chance - target's Defense + target's additional Defense)</i>. If the attack is higher than the target's Defense, it's a hit; otherwise, it's a miss.
Different types of weapons have different hit chances:
- <b>Melee</b> weapons have a hit chance of 30 + (Attacker's Strength + Attacker's Dexterity) / 2.
- <b>Ranged</b> weapons have a hit chance of 15 + (Attacker's Perception) * 2
<b>How is Damage calculated?</b> Damage calculation depends on the weapon type:
- <b>Heavy</b> weapons add 1/3 of your Strength to the damage.
- <b>Agile</b> weapons add 1/3 of your Dexterity to the damage.
- <b>Versatile</b> adds 1/3 of the higher value between your Dexterity and Strength to the damage.
- <b>Visceral</b> weapons add 7% of the target's missing life to the damage.
- <b>Esoteric</b> weapons increase the base damage of Offensive Spells.
<b>What are Stun, Poison, Bleed?</b> These are status effects:
- <b>Poison</b> damages you by its value at the start of each turn, then it's halved.
- <b>Bleed</b> damages you by 5% of your maximum health/Lifeblood at the start of each turn.
- <b>Regeneration</b> heals you by its value, then decreases by 1 for the next turn.
- <b>Stun</b> prevents you from attacking.
- <b>Confusion</b> prevents you from using skills.
- <b>Improved attacks</b> determines the number of improved attacks by skills you hold. Most status effects last for a few turns, decreasing by one (1) at the end of your turn.
<b>What happens when a enemy is killed?</b> Well, their body remains until the end of the enemies turn, i don't want bugs to happen with the "on-death" mechanics.
<b>Is there anything else I should know?</b> Yes! Enemy traits affect combat. For example, an enemy with the "Opportunistic" trait will retaliate when you miss an attack. The "Follower" trait halves the enemy's Action Points when they are alone.
<</dialog>>
<</button>>
</div>
<hr>
<div id="battle-log"></div>
</nobr>
<<script>>
let isPlayerTurn = true;
let enemyInstances = State.variables.enemyInstances;
let selectedEnemyIndex = -1;
let character = State.variables.character[1];
function selectEnemy(index, attacker, target) {
const selectedEnemyElement = document.querySelector(`#enemy-${index}`);
if (!selectedEnemyElement) {
return; // Exit the function if the element does not exist
}
// Check if the clicked enemy is already selected, then deselect it
if (selectedEnemyIndex === index) {
selectedEnemyElement.classList.remove('selected-enemy');
document.getElementById('selected-enemy-details').style.display = 'none';
selectedEnemyIndex = -1; // Reset the selected enemy index
// Remove the target image if it exists
const targetImage = selectedEnemyElement.querySelector('.target-image');
if (targetImage) {
targetImage.remove();
}
} else {
// Remove the "selected-enemy" class from the previously selected enemy
if (selectedEnemyIndex >= 0) {
const previousSelectedEnemyElement = document.querySelector(`#enemy-${selectedEnemyIndex}`);
if (previousSelectedEnemyElement) {
previousSelectedEnemyElement.classList.remove('selected-enemy');
}
document.getElementById('selected-enemy-details').style.display = 'none';
// Remove the target image from the previously selected enemy
const previousSelectedTargetImage = previousSelectedEnemyElement.querySelector('.target-image');
if (previousSelectedTargetImage) {
previousSelectedTargetImage.remove();
}
}
// Add the "selected-enemy" class to the newly selected enemy
selectedEnemyElement.classList.add('selected-enemy');
selectedEnemyIndex = index;
console.log("selectedEnemyIndex:", selectedEnemyIndex);
// Calculate the position of the selectedEnemyElement relative to its parent
const parentRect = selectedEnemyElement.parentElement.getBoundingClientRect();
const enemyRect = selectedEnemyElement.getBoundingClientRect();
const topOffset = enemyRect.top - parentRect.top;
const leftOffset = enemyRect.left - parentRect.left;
// Show the selected enemy's details
const selectedEnemy = enemyInstances[selectedEnemyIndex];
const detailsHtml = `
<h3>Enemy: ${selectedEnemy.Name}</h3>
<p><b>Type:</b><i> ${selectedEnemy.Specialization}</i></p>
<p><b>Ancestry:</b><i> ${selectedEnemy.Ancestry}</i></p>
<p><b>Traits:</b><i> ${selectedEnemy.traits.join(', ')}</i></p>
<p><b>Lifeblood:</b><i> ${selectedEnemy.currentLife} / ${selectedEnemy.MAXLIFE} </i></p>
<p><b>Essence:</b><i> ${selectedEnemy.currentMana} / ${selectedEnemy.MAXMANA}</i></p>
<!-- Add more properties here -->
`;
const deadHtml = `
<h3>Enemy: ${selectedEnemy.Specialization} (<b>Dead</b>)</h3>
<p><b>Lifeblood:</b><i> ${selectedEnemy.currentLife}</b></p>
`;
// Create a new img element for the target image
const targetImage = document.createElement('img');
targetImage.src = "img\\others\\target.png";
targetImage.style.position = 'inherit'; // Set the position to absolute for precise placement
targetImage.classList.add('target-image'); // Add a class for easier identification and removal
// Append the target image to the selected enemy's container
selectedEnemyElement.appendChild(targetImage);
if (selectedEnemy.currentLife > 0) {
document.getElementById('selected-enemy-details').innerHTML = detailsHtml;
document.getElementById('selected-enemy-details').style.display = 'block';
} else {
document.getElementById('selected-enemy-details').innerHTML = deadHtml;
document.getElementById('selected-enemy-details').style.display = 'block';
}
}
}
let enemyCells = []; // Array to store enemy cell elements
window.initializeEnemyList = function() {
const enemyListRow = document.getElementById('enemy-row'); // Get the row to append to
const specializationCounts = {}; // To count occurrences of each specialization
// Clear existing enemy cells
enemyListRow.innerHTML = '';
// Loop through the player's skills and generate table data cells
enemyInstances.forEach((enemy, index) => {
const specialization = enemy.Name;
const isBoss = enemy.traits && enemy.traits.includes('Boss');
// Count occurrences of each specialization
const count = specializationCounts[specialization] || 0;
specializationCounts[specialization] = count + 1;
// Create a table data cell within the row
const cell = document.createElement('td');
// Create a container div for the enemy image and border images
const container = document.createElement('div');
container.style.position = 'relative'; // Set the container to relative position for proper overlapping
container.style.width = '100px'; // Set the width of the container (adjust as needed)
container.style.height = '100px'; // Set the height of the container (adjust as needed)
// Create an image element for the enemy
const enemyImage = document.createElement('img');
enemyImage.src = enemy.image; // Set the image source from the enemy's "image" property
enemyImage.alt = specialization; // Set alt text for accessibility
enemyImage.style.position = 'absolute'; // Set the position to absolute for precise placement
enemyImage.style.top = '0'; // Aligns the top of the enemy image with the top of the container
enemyImage.style.left = '0'; // Aligns the left of the enemy image with the left of the container
// Create an image element for the border
const borderImage = document.createElement('img');
borderImage.style.position = 'absolute'; // Set the position to absolute for precise placement
borderImage.style.top = '0'; // Aligns the top of the border image with the top of the container
borderImage.style.left = '0'; // Aligns the left of the border image with the left of the container
// Set the source of the border image based on the "Boss" trait
if (isBoss) {
borderImage.src = "img/others/borderBnormal.png"; // Set the border image for bosses
} else {
borderImage.src = "img/others/BorderAnormal.png"; // Set the border image for non-bosses
}
container.appendChild(enemyImage); // Append the enemy image to the container
container.appendChild(borderImage); // Append the border image to the container
// Append the container to the cell
cell.appendChild(container);
// Determine the label for the enemy cell, including a numeric identifier for duplicates
const enemyLabel = count === 0 ? specialization : `${specialization} (${count + 1})`;
// Create a paragraph element for the enemy label (name)
const nameLabel = document.createElement('p');
nameLabel.textContent = enemyLabel;
cell.appendChild(nameLabel); // Append the enemy label to the cell
// Assign an ID for each enemy cell
cell.id = `enemy-${index}`;
// Add click event listeners to select enemies
cell.addEventListener('click', function () {
selectEnemy(index);
});
// Append the cell to the row
enemyListRow.appendChild(cell);
// Add the cell to the array
enemyCells.push(cell);
});
}
// Run the initialization function when the DOM is fully loaded
setTimeout(initializeEnemyList, 0);
window.createAttackButtons = function() {
const attackButtonsContainer = document.getElementById('attack-buttons');
const generateButton = document.getElementById('generate-button');
const equippedWeapon = character.equipment.mainhand;
// Clear the innerHTML of attack-buttons container
attackButtonsContainer.innerHTML = '';
// Create attack buttons for enemies
for (let i = 0; i < enemyInstances.length; i++) {
const enemy = enemyInstances[i];
const button = document.createElement('button');
button.id = `attack-button-enemy-${i}`;
// Check if the enemy is intangible
if (enemy.statusEffects.intangibleTurns > 0) {
// Enemy is hiding and cannot be attacked
button.textContent = `${enemy.Name} is hiding`;
button.disabled = true; // Disable the button
} else {
// Enemy can be attacked
button.textContent = `Attack ${enemy.Name}`;
// Attach an onclick event handler to trigger the 'attack' macro
button.onclick = function() {
// Provide the specific slot, e.g., 'mainhand'
const slot = 'mainhand'; // Replace with the actual slot
if (equippedWeapon.incooldown > 0) {
// Weapon is on cooldown, prevent the attack
console.log(`Weapon ${equippedWeapon.Name} is on cooldown for ${equippedWeapon.incooldown} turn(s).`);
return;
} else {
// Set the weapon cooldown in turns
window.triggerAttack(State.variables.character[1], enemy, slot);
window.checkPlayerAP(); // Call the checkPlayerAP function after each attack
equippedWeapon.incooldown += equippedWeapon.Cooldown; // Increase cooldown turns
attackButtonsContainer.innerHTML = '';
attackButtonsContainer.style.display = 'none';
// Change the button text back to "Generate Attack Buttons"
generateButton.textContent = 'Attack';
}
};
}
// Disable the button if the weapon is on cooldown
if (equippedWeapon.incooldown > 0) {
button.disabled = true;
console.log(`Your ${equippedWeapon.Name} needs to be recharged, it will take ${equippedWeapon.incooldown} turn(s)`);
}
attackButtonsContainer.appendChild(button);
}
// Show attack buttons and the container
attackButtonsContainer.style.display = 'block';
// Change the button text to "Cancel"
generateButton.textContent = 'Cancel';
// Attach an onclick event handler to the "Cancel" button
generateButton.onclick = function() {
// Clear attack buttons and hide the container
attackButtonsContainer.innerHTML = '';
attackButtonsContainer.style.display = 'none';
// Change the button text back to "Generate Attack Buttons"
generateButton.textContent = 'Attack';
// Attach the original onclick event handler to the "Generate Attack Buttons" button
generateButton.onclick = window.createAttackButtons;
};
};
// Attach an onclick event handler to the "Generate Attack Buttons" button
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('generate-button').onclick = window.createAttackButtons;
});
window.checkPlayerAP = function () {
const playerAP = State.variables.character[1].AP;
const endTurnButton = document.getElementById('end-turn-button');
if (playerAP <= 1) {
endTurnButton.removeAttribute('disabled');
} else {
endTurnButton.setAttribute('disabled', 'true');
}
};
window.handleCooldowns = function (user) {
if (user && user.equipment && user.equipment.mainhand && user.equipment.mainhand.incooldown > 0) {
reduceCooldown(user);
}
user.skills.forEach(skill => {
if (skill.inCooldown > 0) {
skill.inCooldown -= 1;
}
});
};
function reduceCooldown(user) {
console.log(`${user.Name} is using ${user.equipment.mainhand.Name}, it requires ${user.equipment.mainhand.incooldown} turns`);
const weapon = user.equipment ? user.equipment.mainhand : null;
if (weapon.incooldown > 0) {
weapon.incooldown -= 1;
if (weapon.incooldown === 0) {
console.log(`${user.Name}'s ${user.equipment.mainhand.Name} was recharged.`)
}
}
}
window.checkGameOver= function () {
if (State.variables.character[1].currentLife <= 0) {
State.variables.character[1].currentLife = 0;
// If the player's currentLife is 0 or below, trigger the game over scene
document.getElementById('end-turn-button').style.display = 'none'; // Hide the "End Turn" button
document.getElementById('game-over-button').style.display = 'block'; // Show the "Game Over" button
document.getElementById('victory-button').style.display = 'none'; // Hide the "Victory" button
} else if (enemyInstances.length === 0) {
if (State.variables.character[1].damageSuffered > 0) {
State.variables.character[1].damageSuffered = 0;
}
addToBattleLog(`Success! Alone in victory.`);
console.log("All enemies defeated."); // Add this line for debugging
// If there are no more enemy instances, trigger the victory scene
document.getElementById('end-turn-button').style.display = 'none'; // Hide the "End Turn" button
document.getElementById('game-over-button').style.display = 'none'; // Hide the "Game Over" button
document.getElementById('victory-button').style.display = 'block'; // Show the "Victory" button
} else {
// If neither game over nor victory conditions are met, hide both buttons
document.getElementById('end-turn-button').style.display = 'block'; // Show the "End Turn" button
document.getElementById('game-over-button').style.display = 'none'; // Hide the "Game Over" button
document.getElementById('victory-button').style.display = 'none'; // Hide the "Victory" button
}
}
window.disableDeadEnemies = function () {
for (let i = enemyInstances.length - 1; i >= 0; i--) {
const enemy = enemyInstances[i];
// Check if the enemy is disabled (currentLife <= 0)
if (enemy.currentLife <= 0) {
// Remove the enemy from the array
enemyInstances.splice(i, 1);
// Remove the corresponding cell element from the array
const removedCell = enemyCells.splice(i, 1)[0];
// Ensure the cell element exists and has a parent node before removing it
if (removedCell && removedCell.parentNode) {
removedCell.parentNode.removeChild(removedCell);
}
// Update enemy details (you may need to pass the updated enemyInstances to the updateEnemyDetails function)
updateEnemyDetails(enemyInstances);
// Optionally, you can perform other actions like adding to a defeated enemies list
console.log(`${enemy.Name} has been defeated!`);
}
}
// After removing defeated enemies, reinitialize the enemy list in the UI
initializeEnemyList();
};
window.startEnemyTurn = function() {
const character = State.variables.character[1];
addToBattleLog(`${character.Name}'s turn is over, your enemies prepare themselves to strike`);
checkGameOver();
if (isPlayerTurn) {
isPlayerTurn = false;
}
for (let i = 0; i < enemyInstances.length; i++) {
const enemy = enemyInstances[i];
if (enemy.currentLife <= 0) {
enemyInstances.splice(i, 1);
i--;
continue;
}
if (enemy.traits.includes("Behavioral")) {
enemy.behavior();
} else {
enemy.AP = enemy.APregen;
while (enemy.AP > 0) {
const action = Math.floor(Math.random() * 3);
if (action === 0) {
// Use a skill
if (enemy.statusEffects.confused > 0 && availableSkills.length > 0) {
// Skip using a skill if confused
const randomSkill = availableSkills[Math.floor(Math.random() * availableSkills.length)];
randomSkill.onUse(enemy, State.variables.character[1]);
} else {
// Perform a basic attack
if (enemy.equipment.mainhand) {
window.triggerAttack(enemy, State.variables.character[1], enemy.equipment.mainhand);
} else {
console.log("Enemy has no mainhand weapon!");
}
}
} else if (action === 1) {
if (enemy.statusEffects.stunned > 0) {
// Skip performing a basic attack if stunned
addToBattleLog(`${enemy.Name} is stunned and cannot perform a basic attack.`);
} else {
// Perform a basic attack
if (enemy.equipment.mainhand) {
window.triggerAttack(enemy, State.variables.character[1], enemy.equipment.mainhand);
} else {
console.log("Enemy has no mainhand weapon!");
}
}
} else {
// If action is 2, do nothing
addToBattleLog(`${enemy.Name} wasted part of his turn doing nothing! Marvelous.`);
}
enemy.AP--; // Deduct 1 AP per action
}
}
if (enemy.statusEffects.EscapeAttempt !== undefined && enemy.statusEffects.EscapeAttempt) {
let escapeChance = Math.floor(Math.random() * 100) + 1;
// Check if the escape attempt is successful (60% chance)
if (escapeChance <= 40) {
enemy.statusEffects.EscapeAttempt = false;
enemy.currentLife = 0;
window.disableDeadEnemies();
// Successful escape: Send the character to their last visited passage
addToBattleLog(`${enemy.Name} successfully fled from combat like a coward.`);
} else {
// Failed escape
enemy.statusEffects.EscapeAttempt = false;
addToBattleLog(`Your escape attempt failed. As if you could run off so easily.`);
}
}
handleEnemyStatusEffects(enemy);
if (enemy.skills && Array.isArray(enemy.skills)) {
handleCooldowns(enemy);
enemy.skills.forEach(skill => {
if (enemy.traits.includes("Coward") && enemy.currentLife < 0.3 * enemy.MAXLIFE) {
const escapeSkill = enemy.skills.find(skill => skill.name === "Escape");
if (escapeSkill && escapeSkill.learned && escapeSkill.inCooldown <= 0) {
escapeSkill.onUse(enemy);
}
}
});
}
if (enemy.riposteActive) {
enemy.riposteActive = false;
}
}
startCharacterTurn();
};
function handleEnemyStatusEffects(enemy) {
if (enemy.statusEffects.earwormDuration && enemy.statusEffects.earwormDuration > 0) {
enemy.statusEffects.earwormDuration -= 1;
if (enemy.statusEffects.earwormDuration ==0) {
enemy.additionalDamage += 5;
enemy.additionalHitChance += 10;
}
}
// Apply poison damage to the enemy and decrease poison duration
if (enemy.statusEffects.poison > 0) {
const poisonDamage = enemy.statusEffects.poison;
enemy.currentLife -= poisonDamage;
enemy.statusEffects.poison = Math.round((enemy.statusEffects.poison / 2));
if (enemy.statusEffects.poison <= 1) {
enemy.statusEffects.poison = 0
}
if (enemy.currentLife <= 0) {
addToBattleLog(`It seems that ${enemy.Name}'s immunological system was not strong enough to save them from the toxins.`);
character.experience += (enemy.level * 5);
if (character.traits.includes("Nimble Fingers")) {
character.Gold +=Math.round((enemy.Gold * 1.15));
} else {
character.Gold += enemy.Gold;
}
} else { addToBattleLog(`The poison has weakened ${enemy.Name} for ${poisonDamage} of its lifeblood.`); }
}
if (enemy.statusEffects.bleed > 0) {
// Apply bleed damage to the enemy and decrease bleed duration
const bleedDamage = Math.round(enemy.MAXLIFE * 0.005);
enemy.currentLife -= bleedDamage;
enemy.statusEffects.bleed = Math.max(0, enemy.statusEffects.bleed - 1);
if (enemy.currentLife <= 0) {
addToBattleLog(`It seems that ${enemy.Name}'s bled himself to death...`);
character.experience += (enemy.level * 5);
if (character.traits.includes("Nimble Fingers")) {
character.Gold +=Math.round((enemy.Gold * 1.15));
} else {
character.Gold += enemy.Gold;
}
} else { addToBattleLog(`${enemy.Name} has bled for ${bleedDamage} damage.`); }
}
if (enemy.statusEffects.regeneration > 0) {
// Apply regeneration to the enemy and decrease regeneration duration
const regenerationAmount = enemy.statusEffects.regeneration;
enemy.currentLife += regenerationAmount;
enemy.statusEffects.regeneration = Math.max(0, enemy.statusEffects.regeneration - 1);
addToBattleLog(`${enemy.Name} has recovered ${regenerationAmount} points of its life.`);
}
// Decrease stunned and confused durations for the enemy
if (enemy.statusEffects.stunned > 0) {
enemy.statusEffects.stunned--;
console.log(`${enemy.Name} is stunned and cannot attack.`);
addToBattleLog(`${enemy.Name} is stunned and cannot attack.`);
}
if (enemy.statusEffects.confusion > 0) {
enemy.statusEffects.confusion--;
console.log(`${enemy.Name} is confused and cannot use skills.`);
addToBattleLog(`${enemy.Name} is confused and cannot use skills.`);
}
if (enemy.traits && enemy.traits.includes && enemy.traits.includes('sneaky') && Math.random() <= 0.3 && enemy.statusEffects.intangibleTurns <= 0) {
enemy.statusEffects.intangibleTurns = 1; // Become intangible for 1 turn (30% chance)
}
if (enemy.traits && enemy.traits.includes && enemy.traits.includes('indomitable')) {
// Halve status effect durations when applied to this enemy
enemy.statusEffects.poison = Math.ceil((enemy.statusEffects.poison || 0) / 2);
enemy.statusEffects.bleed = Math.ceil((enemy.statusEffects.bleed || 0) / 2);
enemy.statusEffects.regeneration = Math.ceil((enemy.statusEffects.regeneration || 0) / 2);
enemy.statusEffects.stunned = Math.ceil((enemy.statusEffects.stunned || 0) / 2);
enemy.statusEffects.confusion = Math.ceil((enemy.statusEffects.confusion || 0) / 2);
}
const isAlone = enemyInstances.length === 1 && enemyInstances[0] === enemy;
if (enemy.traits.includes('follower') && isAlone) {
enemy.AP = Math.round((enemy.APregen / 2));
if (enemy.AP < 1) {
enemy.AP = 1;
}
} else {
enemy.AP = enemy.APregen;
}
updateEnemyDetails(enemyInstances);
}
function applyStatusEffects(character) {
if (character.statusEffects.poison > 0) {
character.currentLife -= character.statusEffects.poison;
console.log(`${character.Name} is took ${character.statusEffects.poison} damage from the Venom.`);
addToBattleLog(`${character.Name} is took ${character.statusEffects.poison} damage from the Venom.`);
character.statusEffects.poison = Math.round((character.statusEffects.poison / 2));
if (character.statusEffects.poison < 1) {
character.statusEffects.poison = 0
}
}
const bleedDamage = Math.round(character.MAXLIFE * 0.005);
if (character.statusEffects.bleed > 0) {
character.currentLife -= bleedDamage;
console.log(`${character.Name} bled for ${Math.round(character.MAXLIFE * 0.005)}.`);
addToBattleLog(`${character.Name} bled for ${Math.round(character.MAXLIFE * 0.005)}.`);
character.statusEffects.bleed--;
}
if (character.statusEffects.stunned > 0) {
character.statusEffects.stunned--;
document.getElementById("generate-button").disabled = true;
console.log(`${enemy.Name} is stunned and cannot attack.`);
addToBattleLog(`${enemy.Name} is stunned and cannot attack.`);
}
if (character.statusEffects.confusion > 0) {
character.statusEffects.confusion--;
document.getElementById('generateSkillbox').disabled = true;
console.log(`${enemy.Name} is confused and cannot use skills.`);
addToBattleLog(`${enemy.Name} is stunned and cannot use skills.`);
}
}
function startCharacterTurn() {
const character = State.variables.character[1];
if (!isPlayerTurn) {
isPlayerTurn = true;
}
if (character.traits.includes("Overflow")) {
character.currentMana += Math.round(character.INT / 3);
if (character.currentMana > character.MAXMANA) {
character.currentMana = character.MAXMANA;
}
} else if (character.traits.includes("Overflow II")) {
character.currentMana += Math.round(character.INT / 2);
if (character.currentMana > character.MAXMANA) {
character.currentMana = character.MAXMANA;
}
} else if (character.traits.includes("Overflow III")) {
character.currentMana += character.INT;
if (character.currentMana > character.MAXMANA) {
character.currentMana = character.MAXMANA;
}
}
if (character.statusEffects.castASpellthisTurn) {
character.statusEffects.castASpellthisTurn = false;
}
applyStatusEffects(character);
if (character.statusEffects.EscapeAttempt !== undefined && character.statusEffects.EscapeAttempt) {
let escapeChance = Math.floor(Math.random() * 100) + 1;
if (character.statusEffects.shieldofthefaithfulDuration && character.statusEffects.shieldofthefaithfulDuration > 0) {
character.statusEffects.shieldofthefaithfulDuration -= 1;
if (character.statusEffects.shieldofthefaithfulDuration == 0) {
character.additionalDefense =- 5 + Math.round((character.PER / 2));
addToBattleLog(`Your Shield of the Faithfulhas faded.`)
}
}
if (character.statusEffects.feintDuration > 0) {
character.statusEffects.feintDuration -= 1;
if (character.statusEffects.feintDuration == 0) {
attacker.additionalDefense -= 10;
}
}
// Check if the escape attempt is successful (60% chance)
if (escapeChance <= 60) {
character.statusEffects.EscapeAttempt = false;
// Successful escape: Send the character to their last visited passage
addToBattleLog(`&{Character.Name} successfully fled from combat like a coward.`);
goToPassage(State.variables.return);
} else {
// Failed escape
character.statusEffects.EscapeAttempt = false;
addToBattleLog(`Your escape attempt failed. As if you could run off so easily.`);
}
}
addToBattleLog(`It's ${character.Name}'s turn, prepare yourself.`);
character.AP = character.APregen;
window.checkPlayerAP();
checkGameOver();
if (character.riposteActive) {
character.riposteActive = false;
}
updatePlayerDetails(character);
updateEnemyDetails(enemyInstances);
checkGameOver();
}
State.variables.allyInstances = [ ];
window.endPlayerTurn = function() {
const character = State.variables.character[1];
const summons = State.variables.allyInstances;
if (summons.length > 0) {
for (let i = summons.length - 1; i >= 0; i--) {
const summon = summons[i];
summon.behavior();
summon.currentLife--;
if (summon.currentLife <= 0) {
// Remove the summon from the array if its life is zero or less
summons.splice(i, 1);
if (character.traits.includes("Master Summoner")) {
character.currentMana += summon.storedMana;
addToBattleLog(`Your regained ${summon.storedMana} Essence back.`);
if (character.currentMana > character.MAXMANA) {
character.currentMana = character.MAXMANA;
}
}
}
}
}
if (character.statusEffects.regeneration > 0) {
character.currentLife += character.statusEffects.regenerationle;
character.statusEffects.regeneration--;
}
if (character.statusEffects.stunned > 0) {
character.statusEffects.stunned--;
}
if (character.statusEffects.confusion > 0) {
character.statusEffects.confusion--;
// Handle confusion logic here
}
handleCooldowns(character)
startEnemyTurn();
}
window.toggleSkillsDisplay = function () {
const skillsGrid = document.getElementById('skills-grid');
const skillButton = document.getElementById('generateSkillbox');
if (skillsGrid.style.display === 'none' || skillsGrid.style.display === '') {
skillsGrid.style.display = 'grid';
skillsGrid.innerHTML = '';
const skills = character.skills;
skillButton.textContent = 'Cancel';
skillButton.onclick = function () {
skillsGrid.style.display = 'none';
skillsGrid.innerHTML = '';
skillButton.textContent = 'Skills';
skillButton.onclick = window.toggleSkillsDisplay; // Reset the onclick handler
};
skills.forEach((skill, index) => {
const skillContainer = document.createElement('div');
skillContainer.classList.add('skill-container');
const skillName = document.createElement('div');
skillName.innerHTML = `<strong>${skill.name}:</strong> (AP: ${skill.APcost} | Essence: ${skill.Manacost} | Cooldown: ${skill.cooldown})`;
const skillInfo = document.createElement('div');
skillInfo.innerHTML = `<em>${skill.description}</em>`;
const skillButtonElement = document.createElement('button');
skillButtonElement.textContent = 'Use Skill';
skillButtonElement.onclick = function () {
showSkillTargets(skill);
};
skillContainer.appendChild(skillName);
skillContainer.appendChild(skillInfo);
skillContainer.appendChild(skillButtonElement);
skillsGrid.appendChild(skillContainer);
});
} else {
skillsGrid.style.display = 'none';
skillsGrid.innerHTML = '';
skillButton.textContent = 'Skills';
}
};
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('generateSkillbox').onclick = window.toggleSkillsDisplay;
});
function showSkillTargets(skill) {
console.log(`Selected skill: ${skill.name}`);
const targetsGrid = document.getElementById('attack-buttons');
targetsGrid.innerHTML = ''; // Clear previous targets
// If the skill is Offensive, show targets
if (skill.categories.includes('Offensive')) {
targetsGrid.style.display = 'block';
// Iterate through the enemyInstances and create buttons for each enemy
enemyInstances.forEach((enemy, index) => {
const targetButton = createTargetButton(`Target Enemy ${index + 1}`, () => {
console.log(`Button clicked: Target Enemy ${index + 1}`);
// Handle offensive skill activation logic with selected skill and target
useSkill(State.variables.character[1], skill, enemy);
targetsGrid.innerHTML = ''; // Clear skill targets after use
});
targetsGrid.appendChild(targetButton);
});
// Add Cancel button for offensive skill targets
const cancelButton = createTargetButton('Cancel', () => {
console.log('Cancel button clicked');
targetsGrid.innerHTML = ''; // Clear skill targets
});
targetsGrid.appendChild(cancelButton);
console.log('Buttons created successfully');
}
// If the skill is Defensive, target the user (attacker)
else if (skill.categories.includes('Defensive')) {
// Handle defensive skill activation logic with the user (attacker)
useSkill(character, skill);
}
// If the skill is Summon or General, do not require targets
else if (skill.categories.includes('Summon') || skill.categories.includes('General')) {
// Handle summon or general skill activation logic without targets
useSkill(character, skill);
}
}
function createTargetButton(label, onClickFunction) {
const targetButton = document.createElement('button');
targetButton.textContent = label;
targetButton.onclick = onClickFunction;
return targetButton;
}
function useSkill(attacker, skill, target) {
// Check if the skill is usable (not on cooldown and enough AP)
// Execute the skill's onUse function
if (skill.inCooldown > 0) {
addToBattleLog(`${skill.name} is on cooldown for ${skill.inCooldown} turns!`);
} else {
if (attacker.AP < skill.APcost) {
addToBattleLog(`Not enough Action Points to use ${skill.name}!`);
} else {
if (attacker.currentMana < skill.Manacost) {
addToBattleLog(`Not enough Essence to use ${skill.name}!`);
} else {
if (skill.onUse) {
addToBattleLog(`${attacker.Name} used ${skill.name}`);
skill.onUse(attacker, target); // Pass attacker and target to the onUse function
if (skill.categories.includes("Spell")){
State.variables.character[1].statusEffects.castASpellthisTurn = true;
}
skill.inCooldown = skill.cooldown;
attacker.AP -= skill.APcost;
checkPlayerAP();
if (skill.categories.includes('Summon')){
let summon = State.variables.allyInstances[i];
if (attacker.traits.includes("Improved Summons")) {
summon.currentLife += Math.round((attacker.INT / 2));
summon.MAXLIFE += Math.round((attacker.INT / 2));
}
if (attacker.traits.includes("Master Summoner")) {
if (!summon.storedMana) {
summon.storedMana = 0;
}
summon.storedMana += skill.Manacost;
// Modify the skill's Manacost property for future uses
skill.Manacost = Math.round(skill.Manacost / 2);
}
if (attacker.traits.includes("Bonded Existence")) {
attacker.additionalDamage += 3;
attacker.statusEffects.bondedExistencebonus += 3;
if (State.variables.allyInstances.length > 0) {
for (let i = State.variables.allyInstances.length - 1; i >= 0; i--) {
const summonedCreature = State.variables.allyInstances[i];
const lostEssence = attacker.MAXMANA - attacker.currentMana;
attacker.currentMana += Math.round(lostEssence * 0.07);
}
}
}
}
}
if (skill.categories.includes('Offensive')) {
if (attacker.traits.includes("Intellect Empowerment") && skill.categories.includes("Spell")) {
target.currentLife -= Math.round((attacker.INT / 2));
addToBattleLog(`${attacker.Name} empowers their ${skill.name} Spell, dealing ${Math.round((attacker.INT / 2))} as damage against ${target.Name}.`)
}
if (target.currentLife <= 0 && target.level !== undefined) {
attacker.experience += 5 * target.level;
if (attacker.traits.includes("Nimble Fingers")) {
attacker.Gold +=Math.round((target.Gold * 1.15));
} else {
attacker.Gold += target.Gold;
}
addToBattleLog(`${target.Name} has been reaped.`)
}
if (attacker.traits.includes("Spare Arrows")) {
if (target.currentLife <= 0 && attacker.equipment.mainhand.inCooldown > 0) {
attacker.equipment.mainhand.inCooldown -= 1
}
}
if (attacker.traits.includes("Eternal Hunger")) {
if (target.currentLife <= 0) {
attacker.currentMana += 3 + target.level
if (attacker.currentMana >= attacker.MAXMANA) {
attacker.MAXMANA = attacker.MAXMANA;
}updatePlayerDetails(character);
}
}
}
if (attacker.Pact && attacker.Pact === "Blood") {
attacker.currentLife -= Math.round((skill.Manacost * 2));
} else {
attacker.currentMana -= skill.Manacost;
}
if (attacker.traits.includes("Essence Renewal")) {
attacker.currentLife += skill.Manacost;
if (attacker.currentLife > attacker.MAXLIFE) {
attacker.currentLife = attacker.MAXLIFE
}
}
updatePlayerDetails(character);
updateEnemyDetails(target);
// Clear attack buttons (assuming you want to clear them after using a skill)
const targetsGrid = document.getElementById('attack-buttons');
targetsGrid.innerHTML = '';
const attackButtonsContainer = document.getElementById('attack-buttons');
attackButtonsContainer.innerHTML = '';
attackButtonsContainer.style.display = 'none';
// Hide the skills grid
const skillsGrid = document.getElementById('skills-grid');
skillsGrid.style.display = 'none';
generateSkillbox.textContent = 'Skills';
// Show the Skill button
document.getElementById('generateSkillbox').style.display = 'block';
return;
}
}
}
}
function initiateEnemyTurn() {
window.startEnemyTurn();
}
window.addToBattleLog = function (message) {
const logElement = document.getElementById('battle-log');
// Create a message container div
const messageContainer = document.createElement('div');
messageContainer.className = 'message-container';
// Create a message element
const messageElement = document.createElement('p');
messageElement.textContent = message;
if (isPlayerTurn) {
messageElement.classList.add('player-turn'); // Add a class for player's messages
} else {
messageElement.classList.add('enemy-turn'); // Add a class for enemy's messages
}
// Append the message to the message container
messageContainer.appendChild(messageElement);
// Insert the message container into the log element
logElement.appendChild(messageContainer);
// Create a line break element
const lineBreakElement = document.createElement('hr');
lineBreakElement.className = 'message-divider'; // Add a class for styling if needed
// Insert the line break after the message container
logElement.appendChild(lineBreakElement);
// Adjust the scroll to maintain visibility of the new message
logElement.scrollTop = logElement.scrollHeight;
};
<</script>>
<<script>>
$(document).on('keyup', 'input', function(e) {
if (e.which === 13) { // Check if Enter key is released
State.variables.character[1].Name = State.variables.playerName; // Update the Player's Name property with the new name
console.log(`${State.variables.character[1].Name}`); // Corrected to log the updated name
var nameChangeSpan = $('#namechange');
nameChangeSpan.text(" You have renamed yourself!");
nameChangeSpan.show();
// Automatically revert to the dot after a few seconds (e.g., 3 seconds)
setTimeout(function() {
nameChangeSpan.text(".");
nameChangeSpan.hide();
}, 3000); // 3000 milliseconds (3 seconds)
}
});
<</script>>
| <h1> Your Character </h1> |
<div align='center'>
<<textbox "$playerName" "Player's Character">> <i><span id="namechange">.</span></i>
<i>(Type your name and press Enter)</i>
<<link 'Configure your pronouns.'>>
<<pronouns>>
<</link>>
<b>Ancestry:</b> <<print $character[1].Ancestry>>
<hr>
<h3>Attributes:</h3>
<hr>
<table>
<tr>
<td> STRENGTH: </td>
<td> DEXTERITY: </td>
<td> RESILIENCE: </td>
<td> INTELLIGENCE: </td>
<td> CHARISMA: </td>
<td> PERCEPTION: </td>
</tr>
<tr>
<td><span id="current-attr-STR"><<print $character[1].STR>></span> </td>
<td><span id="current-attr-DEX"><<print $character[1].DEX>></span></td>
<td><span id="current-attr-RES"><<print $character[1].RES>></span> </td>
<td><span id="current-attr-INT"><<print $character[1].INT>></span> </td>
<td><span id="current-attr-CHA"><<print $character[1].CHA>></span> </td>
<td><span id="current-attr-PER"><<print $character[1].PER>></span> </td>
</tr>
</table>
</div>
<hr>
<div align='center'>
<h3>Expertises:</h3>
<hr>
<table>
<tr>
<td>Athletics:</td>
<td>Acrobatics:</td>
<td>Stealth: </td>
<td>Sleight of Hands:</td>
<td>World Knowledge:</td>
<td>Mystical Knowledge:</td>
</tr>
<tr>
<td><span id="current-expertise-Athletics"><<print $character[1].Athletics>></span></td>
<td><span id="current-expertise-Acrobatics"><<print $character[1].Acrobatics>></span></td>
<td><span id="current-expertise-Stealth"><<print $character[1].Stealth>></span ></td>
<td><span id="current-expertise-SleightofHands"><<print $character[1].SleightofHands>></span> </td>
<td><span id="current-expertise-WorldKnowledge"><<print $character[1].WorldKnowledge>></span> </td>
<td><span id="current-expertise-MysticalKnowledge"><<print $character[1].MysticalKnowledge>></span></td>
</tr>
<tr>
<td>Arcane Knowledge:</td>
<td>Speech:</td>
<td>Arts:</td>
<td>Intimidation:</td>
<td>Insight: </td>
<td>Awareness: </td>
</tr>
<tr>
<td><span id="current-expertise-ArcaneKnowledge"><<print $character[1].ArcaneKnowledge>></span></td>
<td><span id="current-expertise-Speech"><<print $character[1].Speech>></span></td>
<td><span id="current-expertise-Arts"><<print $character[1].Arts>></span></td>
<td><span id="current-expertise-Intimidation"><<print $character[1].Intimidation>></span></td>
<td><span id="current-expertise-Insight"><<print $character[1].Insight>></span></td>
<td><span id="current-expertise-Awareness"><<print $character[1].Awareness>></span></td>
</tr>
</table>
</div>
<hr>
<div align='center'>
<h3>Class Specialization:</h3>
<<print $character[1].Specialization>>
<hr>
You are free to roam the land now.
[[I am ready|NOTRICKS]]
[[I would like to rethink my choices.|Character Creation]]. <<link "But, Randomly!!">>
<<run window.randomCharacterCreation()>>
<<goto "Confirmation">>
<</link>>
</div>
<h2>Dancer</h2>
<b>The Dancer is a Specialization of the Artist Class that allows the Player to graciously dance on the battlefield, making numerous movements during their turns.</b>
<i><b>Main Attribute:</b> Charisma (CHA)</i>
<i><b>Secondary Attribute:</b> Dexterity (DEX)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Dancer</b> Blade Dancer: While equipped with a Slashing weapon, increase your defense and mark it as an instrument.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Dancer character starts with:
<table>
<tr>
<td><b>Head:<b> <i>Circlet</i></td>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Scimitar</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h1>Draconian:</h1>
<hr>
<h4> "The might of an empire is defined by one of its warriors." </h4>
<h3>Lore:</h3>
</div>
<hr>
<div align='left'>
"In the annals of centuries ago, the Draconians emerged from the embers of the forgotten Iruxi. A name whispered with reverence, a reminder of a time before shadows deepened. A people who thrived amidst enigmatic swamps and sinuous rivers, their existence was a relentless symphony of conflict, an unending dance for meager resources. Unity was alien to these people, and vulnerability was their anathema, for they embraced a semi-primal existence where the strongest ruled the weak. Yet, the overture of their existence was no more with the birth of the Dragons, the ironic architects of their metamorphosis.
The Dragons stood as a wave of destruction over the Giants, with such terrible force that left even their creators in awe. Even the seductive calls whispered silently by the twisted "Mother of Monsters." A deity whose silent but overt demands that echo through primal instinctive urges could not sway them to the divine fold. No, their allegiance remained unwaveringly with the Dragons, the world asunder. And in the detached nature of deities, their yearning was granted.
As the fierce Iruxi transitioned into the zealous Draconians, their society underwent a seismic transformation over five centuries. What once were designed to be hidden enclaves to fend for their newborns. Rose instead obsidian citadels to show their dominion over the land. They tamed the wild rivers, seizing control over the arteries of resources upon which rival races depended. Their fervor blazed like an inferno, an unyielding devotion to their draconic overlords. With righteous fury, they reclaimed the scorched ruins, remnants of the Dragons' fiery breath, only to find the once-desolate sanctuaries now harboring humans. Audacious interlopers, insolent heretics of the Draconic might who dared to loot the spoils of the Dragons, who had defeated the once-thought invincible Giants. Enraged by this disrespect, the Draconians unleashed their wrath upon the invaders and their kin, a clash that marked the birth of the Scalebounds order, draconic knights sworn to guard the sanctity of their legacy. From the embers of that clash arose a decree to ensure that the lowly and pathetic humans were to understand their place.
Thus, the sentence to be subjugation was given to the humans, to live in servitude of the worthy and strong Draconians, and from the insides of their tumbling cities, rows of broken families and proud nobles terrified by their new fate.
Yet dissent lingered, concealed in shadows, for tradition dictated reverence and utter obedience to the Elders. Rebellion whispered, not through actions, but in silent inaction, as they overlooked the rebellious few that orchestrated liberation of the conquered folk, offering freedom to the oppressed with deft hands and cunning minds. Among the Draconians, a group spurned the tide of transformation, clinging to their ancient and proud Iruxi heritage as the world plunged further into the abyss with each passing day."
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Natural Warriors:</b>
<i>Draconians have natural Claws instead of Fists and durable skin, increasing their natural defense.</i>
<b>Underwater Marauder</b>
<i>Draconians can swim and breathe underwater with ease.</i>
<hr>
</div>
<<set $return to passage()>>
<div align='center'>
<h2> Invoker </h2>
<b>The Invoker is a Specialization of the Mage Class that focuses on improving your Summons.</b>
<i><b>Main Attribute:</b> Intelligence (INT)</i>
<i><b>Secondary Attribute:</b> Perception (PER)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Mage:</b> Arcane Initiation: Add the skills: "Fire Bolt." "Lightning Strike." and "Freeze." to your repertoire.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Invoker:</b> (skill) Summon: Undead.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Invoker:</b> (skill) Summon: Elemental.</i></td>
</tr>
<tr>
<td>At level 06 | <i> <b>Invoker:</b> Bonded Existence: Whenever you invoke a Summon, increase your Damage by 3, additionally, for each invoked Summon, regain 7% of your lost Essence.</i></td>
</tr>
<tr>
<td>At level 08 | <i><b>Invoker:</b> (skill) Summon: Spirit.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<tr>
<td>At level 10 | <i><b>Mage:</b> Arcane Mastery: Add the skills; "Inferno", "Storm and "Blizzard" to your repertoire.</i></td>
</tr>
<tr>
<td>At level 11 | <i><b>Invoker:</b> Improved Summons: When you invoke a new summon, increase their Lifeblood by 1/2 of your Intelligence.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i><b>Invoker: Master Summoner: Decrease the cost of your summons by half. Additionally, when a summon would be destroyed, regain Essence equal to it's original cost.</b>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i><b>Invoker</b> Masterful summon: Increase your Summons Life by your Intelligence.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Invoker character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Arcane Staff</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<img src="img/others/Duelist.png" style="float: left; background-color: black; padding-left: 25em; padding-right: 25em;">
<hr>
<h2>Duelist</h2>
<b>The Duelist is a Specialization of the Warrior Class that focuses on the usage of Riposte, exceeding on-on-one combats.</b>
<i><b>Main Attribute:</b> Strength (STR)</i>
<i><b>Secondary Attribute:</b> Dexterity (DEX)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Duelist:</b> (Skill) Feint</i></td>
</tr>
<tr>
<td>At level 03 | <i><b>Duelist:</b> Natural Reflexes: At the end of your turn, gain Riposte.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Warrior:</b> Weapon Mastery: Your weapons apply additional effects based on their damage type.
Blunt - Has 50% to apply Confusion on the target (does not stack).
Slashing - Applies Bleed for 2 turns.
Piercing - Decreases the target's defense by 5 (does not stack).
</i></td>
</tr>
<tr>
<td>At level 07 | <i><b>Duelist:</b> (Skill) En Garde!:</i></td>
</tr>
<tr>
<td>At level 08 | <i><b>Duelist:</b> Graceful: While wielding only a 1-handed weapon in your hands, increase your Defense and Hit-Chance.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i><b>Warrior:</b> Tactical Genius: Your Skills that cost three or more Action Points cost 1 point less.</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Duelist:</b>Bon Mot: After killing an enemy, heal yourself with some of your lost Lifeblood.</i></td>
</tr>
<tr>
<td>At level 14 | <i><b>Duelist:</b> (Skill) Disengage.</i></td>
</tr>
<tr>
<td>At level 15 | <i><b>Warrior:</b> Second Wind: During each combat, the first time you hit below 25% of your maximum health, heal yourself by 35% of your lost health.</i></td>
</tr>
<tr>
<td>At level 16 | <i><b>Duelist:</b> Firm Hand: While wielding only a 1-handed weapon in your hands, increase your damage dealt with that weapon.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i><b>Duelist:</b> Masterful Efficiency: Riposte no longer fades after you hit an enemy.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Duelist character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Gamberson</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Rapier</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h1>Dwarf</h1>
<hr>
<h4> "The proud descendants of our usurped sovereigns." </h4>
<h3>Lore:</h3>
</div>
<hr>
<div align='left'>
"The Dwarfs, keepers of ancient knowledge, hold the weight of their forefathers' legacy on their sturdy shoulders. Their ancestors, the fallen Giants, created them to preserve their achievements from the invading gods who sought to destroy them. The Dwarfs are a mixture of the Giants' resilient flesh and the unyielding rock of their mountain homes, brought to life by the fiery heart of our world. Though their size is but a pebble compared to their creators, their minds are perfected beyond measure. But the Dwarfs must hide from the eyes of the gods and their monstrous creations, the Dragons. As well as their zealots, the Iruxian bastards who now call themselves "Draconians";
Their matriarchal society may seem oppressive to outsiders, but it is necessary for their underground continuity;
The Law-Mothers, the first Dwarfs the Giants created, dictate the customs that the Dwarfs must live by, favoring preserving the same lifestyle as their architects, basking in their vast glories and devising new inventions with each passing day;
The family Matrons command each household, training their daughters and boys from birth to the coming roles they will assume in their society;
While women and lasses may become establishment owners, bankers, or even Matrons themselves, men and lads serve only as workforce, upper-world scouts, or bodyguards. It is one of the rarest sights to see a female Dwarf in the upper world, generally tending to be scorned or expelled from their subterranean society for unspoken crimes.
Few males can advance enough to be granted recognition in their roles. But when they accomplish this feat, they are revered to the same degree as a Law-mother. A strategy implemented so their morale may not falter during misfortune periods they may yet face.
The Dwarfs carry a heavy weight to preserve their ancestors' knowledge and customs. They hid their cities beneath the feet and eyes of thousands, but they did this mission hoping to persevere beyond these dark times and endure they shall. Their small stature misrepresents their mighty intellects and even mightier deeds. The dwarven society shall withstand the harshest of trials."
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Ancestral Knowledge:</b>
<i>Dwarfs start with +10 points to distribute among their expertise.</i>
<h4>Re-forger</h4>
<i>Dwarfs are able to improve their wearings any armor has a higher defense value based on its type.</i>
<hr>
</div>
<<set $return to passage()>><div align='center'>
<h1>Elf</h1>
<hr>
<h4> "The gods once favored their progeny, or at least that was our belief." </h4>
<h3>Lore:</h3>
</div>
<hr>
<div align='left'>
"Conceived and shaped from the very heartwood of our world, they were instilled with life by the sovereignty of our novel divine overlords, devoid of any purpose but to propagate their lineage. These majestic and ethereal entities flourished with a yearning only for tranquil existence, even forsaking dominion over our realm to safeguard its harmonious equilibrium—a glint of benevolence amid the gods' release of the harrowing scourge known as the 'Dragons' whose fierce beasts were intended solely to eradicate the mighty giants and enthrone their creators as true sovereigns, forever altering our domain.
Yet, lamentably, this compassion is now entwined with encroaching madness.
Like an affliction ravaging their psyche, it inches inexorably through their ranks, slowly transmuting the once noble and intricate arboreal folk into ravenous brutes. They rend asunder and splay wide the roots of an ominous, twisted woodland—a forest consumed by a never-ending ravening appetite. That unveils each dawn, a deepening monstrosity of increasingly aberrant nature.
It comes as no shock that the wellspring of this ailment springs from one of their progenitors—Urahyahra, dubbed as the "Mother of Monsters." a title aptly earned, for she is the malign goddess of savagery and fecundity, a manifestation of the innate chaos that yearns for mortals to crave her triad of laws: breed, endure, and devour.
Now, the fate of their people falls upon the elves to unearth a remedy and quell the perverse longings of their sinister progenitor."
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Favored</b>
<i>The gods give easier trials for Elfs.</i>
<b>Harmonious Existence:</b>
<i>Elf Characters add their Perception to their Life and Mana.</i>
<hr>
</div>
<<set $return to passage()>>
<div align='center'>
<h2>Feral</h2>
<b>The Feral is a Specialization of the Barbarian Class that embodies the brutal and animalistic qualities of nature into a hectic fighter.</b>
<i><b>Main Attribute:</b> Resilience (RES)</i>
<i><b>Secondary Attribute:</b> Perception (PER)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Feral</b> Natural Fighter: For each unequipped slot, increase your Damage and defense.</i></td>
</tr>
<tr>
<td>At level 03 | <i><b>Feral</b> (Skill) Adrenaline Rush.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Feral</b> (Skill) Multilate.</i></i></td>
</tr>
<tr>
<td>At level 06 | <i><b>Barbarian</b> Champion's Might: Add your resilience to your Damage and to your Athletics.</i></td>
</tr>
<tr>
<td>At level 08 | <i><b>Feral</b> Sturdy Skin: When not equipped with any item, increase your Lifblood by 50%.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 11 | <i><b>Feral</b> Bloody Frenzy: You recover 30% of the damage dealt as Lifeblood</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Barbarian</b>Unending Vigor: At the start of each turn, regain three health.</i></td>
</tr>
<tr>
<td>At level 14 | <i><b>Feral</b> Primal Strength: Increase your Fist damage dice to 1d8, if it's Draconian claws, increase it to 1d10.</i></td>
</tr>
<tr>
<td>At level 17 | <i><b>Feral</b>(Skill) Nature's call.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
</table>
<hr>
<div align='center'>
A Feral character starts with:
- Nothing -
<hr>
</div><div align='center'>
<h1>Herald</h1>
<hr><h4> "The undesired children of the greatest powers combined." </h4>
<h3>Lore:</h3>
</div>
<hr>
<div align='left'>
"Little there is to tell about the Heralds, beings that exist as an unforeseen consequence of the Giants' unnerving natural immunity to the mystical powers of the otherworldly deities that invaded our realm. They are not born of flesh and lifeblood. Nor bestowed life by any creator; No, they are the essence of the arcane itself, given corporeal form and an independent consciousness. These creatures are the offspring of fathers and mothers who harbored an intense hatred for one another, striving to maintain a veneer of ignorance regarding their newfound progeny.
However, with the fall of the Giants into the ravenous maws of the dreadful Dragons, the Heralds came to be perceived as a potential threat. Unfortunately for them, when struck with a fatal blow, they release the esoteric energies that sustain their forms, unleashing cataclysmic devastation to those nearby, leaving behind only distorted, charred, and mutated remains by the not supposed-to-be contained magic. Due to this devastating consequence, it alone retains the divinities' hands from eradicating their existence, for without this self-destructive safeguard, perhaps they would be permitted to coexist with other beings. Instead, they have to live in isolation for years or maybe centuries;
A Herald, as it seems, is nothing more than a harbinger of its torment and loneliness."
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Arcane Core:</b>
<i>When near death, Heralds release all their remaining Essence to damage nearby enemies.</i>
<span id=choicetextA>
<<if $HeraldChoice !== "">>
<</if>>
</span>
<table>
<thead>
<tr>
<th></th>
<th><b>Choose your Calling:</b></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><<nobr>><<button "Nature's Harbinger">>
<<set $HeraldChoice = "Nature's Harbinger">>
<<replace "#choicetextA">>
<p>You have chosen to be a <<print $HeraldChoice>>.</p>
<p>When answered the call of Nature, the world around a Herald strengthens Their form, solidifying the magic inside you.</P>
<p><b>Nature's Blessing:</b></p>
<p>Your Essence is halved and added to your Lifeblood.</P>
<</replace>>
<</button>><</nobr>></td>
<td><<nobr>><<button "Cosmos' Harbinger">>
<<set $HeraldChoice = "Cosmos' Harbinger">>
<<replace"#choicetextA">>
<p>You have chosen to be a <<print $HeraldChoice>>.</p>
<p>When answered the call of the Cosmos, a Herald's mind is filled with the infinitude of the cosmos' knowledge and madness.</p>
<p><b>Astral Connection:</b> </p>
<p>Heralds may expend part of their 'Essence' to reveal hidden secrets.</p>
<</replace>>
<</button>><</nobr>></td>
<td><<nobr>><<button "Creation's Harbinger">>
<<set $HeraldChoice = "Creation's Harbinger">>
<<replace "#choicetextA">>
<p>You have chosen to be a <<print $HeraldChoice>>.</p>
<p>When answered the call of Creation, contained magic inside a Herald is allowed to take the form of trinkets or objects.</p>
<p><b>Architect of Reality:</b></p>
<p>A Herald may pay part of their Essence to create certain items when needed.</p>
<</replace>>
<</button>><</nobr>></td>
<td><<nobr>><<button "Destruction's Harbinger">>
<<set $HeraldChoice = "Destruction's Harbinger">>
<<replace "#choicetextA">>
<p>You have chosen to be a <<print $HeraldChoice>>.</p>
<p>When answered the call of Destruction, a Heralds is able to consume part of the Essence of others into themselves.</p>
<p><b>Eternal Hunger:</b></p>
<p>During combat, when a Herald defeat an enemy, regain a part of your lost Essence.</p>
<</replace>>
<</button>><</nobr>></td>
</tr>
</tbody>
</table>
<hr>
</div>
<<set $return to passage()>>
<div align='center'>
<h1>Human</h1>
<hr>
<i><b> "To be Human means to have but two choices: to be a slave in the Draconian's claws. Or at a Human's hand." </b></i>
<hr>
<h2>Lore:</h2>
</div>
<div align='left'>
<i>"Over the centuries, humanity lived in a fragile peace, merely observing the Old War's ferocity from the sidelines, their hands untainted by the bloodshed as they fixated on their development. Expanding the horizons of their borders and unfurling the banners of progress, they sculpted for themselves a world seemingly untouched by the world's turmoil.
However, as the colossal giants succumbed to the might of the terrible Dragons, their titan frames shattered just as their sovereignty crumbled, and a sinister shift stained the horizon as otherworldly outsiders crowned themselves as divinities of the world. Swiftly, humanity dispatched expeditions to the fallen giants' desolated cities, driven perhaps either by an insatiable hunger for arcane technologies and artifacts or their fear of yielding some of the prosperity they forged for themselves. Their urge to uncover the world's hidden wisdom propelled their actions, yet, in their ceaseless search, they unearthed not the coveted mastery but rather the dormant embers of animosity—embers seen as hallowed by the Draconians.
In the Draconians' eyes, these human incursions were nothing short of sacrilegious plundering, a transgression against the spoils rightfully earned by the Dragons through their relentless battles against the towering Giants. As such, an inferno of rage blazed within the Draconians' hearts, an all-consuming fire that ignited retribution. Humanity's fate veered that day, forever shackled by the draconic dominion.
Within the Draconian order, a sinister faction emerged—the Scalebounds, draconic knights ordained with the grim task of guarding the artifacts left by the Giants and relentlessly hunting humans for enslavement. When the Draconians swept over human cities and capitals, a tidal wave of domination tumbling over the grandeur of their empire, the Scalebounds emerged as the enforcers of oppression. Their armor, forged from Dragon scales, became a chilling emblem of submission and dread.
In the aftermath of the Draconian onslaught, a handful of humans endure, their lives teetering on the precipice between survival and subjugation. They cloak themselves in shadows, ghosting through a world now cast in Draconian chains, evading the ravenous jaws that ache for their enslavement. Others opt for an alternative, navigating the desolate wastelands to the west, where the landscape's unforgiving bleakness mirrors their despair. Amidst this desolation, a faint glimmer endures—a spark of the indomitable human spirit. This flame, a testament to resilience, flickers amidst the torrent of Draconian dominion, an embodiment of defiance that declares even in the abyssal depths of adversity;
Liberation remains a possibility.
Curiously, there be another faction of humans—the dwellers of the Great Desert. These individuals, driven by a rapacious pursuit of wealth as much as power, had long sponsored the very explorations that would eventually unleash the Draconians. Their hands remained unscathed, spared by the vast distances that separated them from the fires of vengeance. Ironically, they title themselves the "Free Humans," standing as a paradox, for their social hierarchy relegates the less fortunate to near-slavery, a cruel mimicry of the Draconians' oppression. A sinister marketplace emerges, where these "Free Humans" willingly barter their less privileged brethren to the Draconians in exchange for substantial resources, valuing riches over the lives they discard."</i>
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Adaptable:</b>
<i>Humans start with +5 points to distribute among their Attributes.</i>
<b>Unlimited Potential:</b>
<i>Whenever a Human levels up, they gain +1 point to distribute among their Expertises.</i>
</div>
<<set $return to passage()>>
<div align='center'>
<h2>Inquisitor</h2>
<b>The Inquisitor is a Specialization of the Devotee Class that allows the player to inquire and press into deep secrets of the world..</b>
<i><b>Main Attribute:</b> Perception (PER)</i>
<i><b>Secondary Attribute:</b> Charisma (CHA)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Inquisitor:</b> Zealous Fevor: You add 1/3 of your Perception to your damage.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
An Inquisitor character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Holy Garments</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Mace</i></td>
<td><b>Offhand:</b> <i>Dvine Symbol</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
[[Character Page|Characterpage]] | [[Jornal]]
</div>
| <h3>Equipment</h3> |
<div id="gear-container">
<span id="gear">
<b>Head:</b> <<print $character[1].equipment.head.Name>> <<if $character[1].equipment.head.Name !== 'Empty Head'>> <button onclick='unequipItem("head")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.head.Description>></i>
<b>Torso:</b> <<print $character[1].equipment.torso.Name>> <<if $character[1].equipment.torso.Name !== 'Empty Torso'>> <button onclick='unequipItem("torso")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.torso.Description>></i>
<b>Waist:</b> <<print $character[1].equipment.waist.Name>> <<if $character[1].equipment.waist.Name !== 'Empty Waist'>> <button onclick='unequipItem("waist")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.waist.Description>></i>
<b>Legs:</b> <<print $character[1].equipment.legs.Name>> <<if $character[1].equipment.legs.Name !== 'Empty Legs'>> <button onclick='unequipItem("legs")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.legs.Description>></i>
<b>Feet:</b> <<print $character[1].equipment.feet.Name>> <<if $character[1].equipment.feet.Name !== 'Empty Feet'>> <button onclick='unequipItem("feet")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.feet.Description>></i>
<b>Main hand:</b> <<print $character[1].equipment.mainhand.Name>> <<if $character[1].equipment.mainhand.Name !== 'Fist' && $character[1].equipment.mainhand.Name !== 'Draconian claws'>> <button onclick='unequipItem("mainhand")'>Unequip</button> <<endif>>
<<print '<img src="' + $character[1].equipment.mainhand.icon + '">'>>
<i><<print $character[1].equipment.mainhand.Description>></i>
<b>Offhand:</b> <<print $character[1].equipment.offhand.Name>> <<if $character[1].equipment.offhand.Name !== 'Other hand' && $character[1].equipment.offhand.Name !== 'Handler'>> <button onclick='unequipItem("offhand")'>Unequip</button> <<endif>>
<i><<print $character[1].equipment.offhand.Description>></i>
</span>
</div>
<b>Gold</b> <i><<print $character[1].Gold>></i>
<hr>
<div align="center">
<h3>Inventory</h3>
</div>
<<for _i to 0; _i lt $character[1].inventory.length; _i++>>
<<set _item to $character[1].inventory[_i]>>
<<if _item.Slot && !_item.Type.includes("bornwith")>>
<<print '<img src="' + _item.icon + '">'>>
[<<print _item.Name>> | x <<print _item.count>>] <<= _item.Type.join(', ')>>
<<capture _item>>
<<if _item.Type.includes("instrument") || _item.Type.includes("wearable") || _item.Type.includes("Weapon") || _item.Type.includes("shield")>>
<<link "Equip _item.Name">>
<<notify 2s "Inventory">>You equipped _item.Name<</notify>>
<<equipItem _item.Name>> <!-- Updated to use the equipItem macro -->
<<run updateGearDisplay()>> <!-- Add this line to update the gear display -->
<<run updateInventoryDisplay()>> <!-- Add this line to update the inventory display -->
<</link>>
<<elseif _item.Type.includes("Usable")>>
<<link "Use _item.Name">>
<<run _item.onUse>>
<</link>>
<</if>>
<</capture>>
<<else>>
[<<print _item.Name>> | x <<print _item.count>> | <<print _item.equipped>>]
<<endif>> - <i><<print _item.Description>></i><br>
<</for>>
<hr>
<p><i><b>???:</b> For now the inventory is not automatically updating, perhaps in the future the author will make a pact with a demon to teach him how to fix this.</i></p>
<p><b>The WIcked Mind:</b> ... Do i really need to?</p><div align='center'>
<h2>Juggernaut</h2>
<b>The Juggernaut is a Specialization of the Barbarian Class that focuses on having impossible amounts of Defense, outlasting any enemy that may come your way.</b>
<i><b>Main Attribute:</b> Resilience (RES)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Juggernaut</b> Iron Suit: For each equipped slot, increase your Defense by 2.</i></td>
</tr>
<tr>
<td>At level 03 | <i><b>Juggernaut</b> ???: While above of 70% of your Lifeblood, increase your damage and hit chance by 5. </i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 06 | <i><b>Barbarian</b> Champion's Might: Add your resilience to your Damage and to your Athletics.</i></td>
</tr>
<tr>
<td>At level 07 | <i><b>Juggernaut</b> (Skill). Taunt.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i><b>Juggernaut</b> Spiked: When you are attacked, deal damage equal to 10% of your Defense.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Barbarian</b>Unending Vigor: At the start of each turn, regain 3 health.</i></td>
</tr>
<tr>
<td>At level 13 | <i><b>Juggernaut</b> Body Slam: During combat, if your damage is lower than your Defense, increase your damage to your Defense value.</i>.</i></td>
</tr>
<tr>
<td>At level 17 | <i><b>Juggernaut</b> (Skill) Liberate.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
</table>
<hr>
<div align='center'>
A Juggernaut character starts with:
<table>
<tr>
<td><b>Head:</b> <i>Coif</i></td>
<td><b>Torso:</b> <i>Leather Armor</i></td>
<td><b>Waist:</b> <i>Buckle</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Rusted Sword</i></td>
<td><b>Offhand:</b> <i>Wooden Shield</i></td>
</tr>
</table>
<hr>
</div><<nobr>>
<<if $moon == 31>><<set $moon to 1>><</if>>
/*New moon*/
<<if $moon == 1>>🌑
/*Waxing Crescent*/
<<elseif $moon >= 2 && $moon <= 7>>🌒
/*First Quarter*/
<<elseif $moon == 8>>🌓
/*Waxing Gibbous*/
<<elseif $moon >= 9 && $moon <= 15>>🌔
/*Full moon*/
<<elseif $moon == 16>>🌕
/*Waning Gibbous*/
<<elseif $moon >= 17 && $moon <= 23>>🌖
/*Third Quarter*/
<<elseif $moon == 24>>🌗
/*Waning Crescent*/
<<elseif $moon >= 25 && $moon <= 30>>🌘<</if>>
<</nobr>><div align='center'>
<h2>Paladin</h2>
<b>The Paladin is a Specialization of the Devotee Class that bounds the player to an oath that empowers the paladin.</b>
<i><b>Main Attribute:</b> Perception (PER)</i>
<i><b>Secondary Attribute:</b> Resilience (RES)</i>
<h3>Oath of:</h3>
<span id="Oath">
<table>
<thead>
<tr>
<th>Selfishness:</th>
<th>Conquest:</th>
<th>Liberty:</th>
<th>Justice:</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Oath of Selfishness demands that you act on your desires, free to do as you please, without fear of facing consequences.</td>
<td>The Oath of Conquest demands that you enforce your will upon others, making them submit to your laws.</td>
<td>The Oath of Liberty demands you to guarantee the freedom of all living beings, allowing them to act on their desires while understanding the consequences of doing so.</td>
<td>The Oath of Justice demands of you to uphold the law and good of all and societies</td>
</tr>
<tr>
<td><<button "Selfishness">><<set $character[1].Oath to "Selfishness">><<replace "#Oath">>
<table>
<thead>
<tr>
<th>Selfishness:</th>
<th>Conquest:</th>
<th>Liberty:</th>
<th>Justice:</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Oath of Selfishness demands that you act on your desires, free to do as you please, without fear of facing consequences.</td>
<td>The Oath of Conquest demands that you enforce your will upon others, making them submit to your laws.</td>
<td>The Oath of Liberty demands you to guarantee the freedom of all living beings, allowing them to act on their desires while understanding the consequences of doing so.</td>
<td>The Oath of Justice demands of you to uphold the law and good of all and societies</td>
</tr>
<tr>
<td>You have sworn to act upon this cause.</td>
<td>You made an oath to Selfishness.</td>
<td>You made an oath to Selfishness.</td>
<td>You made an oath to Selfishness.</td>
</tr>
</tbody>
</table>
<</replace>>
>><</button>></td>
<td><<button "Conquest">><<set $character[1].Oath to "Conquest">><<replace "#Oath">>
<table>
<thead>
<tr>
<th>Selfishness:</th>
<th>Conquest:</th>
<th>Liberty:</th>
<th>Justice:</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Oath of Selfishness demands that you act on your desires, free to do as you please, without fear of facing consequences.</td>
<td>The Oath of Conquest demands that you enforce your will upon others, making them submit to your laws.</td>
<td>The Oath of Liberty demands you to guarantee the freedom of all living beings, allowing them to act on their desires while understanding the consequences of doing so.</td>
<td>The Oath of Justice demands of you to uphold the law and good of all and societies</td>
</tr>
<tr>
<td>You made an oath to Conquest.</td>
<td>You have sworn to act upon this cause.</td>
<td>You made an oath to Conquest.</td>
<td>You made an oath to Conquest.</td>
</tr>
</tbody>
</table>
<</replace>><</button>></td>
<td><<button "Liberty">><<set $character[1].Oath to "Liberty">><<replace "#Oath">>
<table>
<thead>
<tr>
<th>Selfishness:</th>
<th>Conquest:</th>
<th>Liberty:</th>
<th>Justice:</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Oath of Selfishness demands that you act on your desires, free to do as you please, without fear of facing consequences.</td>
<td>The Oath of Conquest demands that you enforce your will upon others, making them submit to your laws.</td>
<td>The Oath of Liberty demands you to guarantee the freedom of all living beings, allowing them to act on their desires while understanding the consequences of doing so.</td>
<td>The Oath of Justice demands of you to uphold the law and good of all and societies</td>
</tr>
<tr>
<td>You made an oath to Liberty.</td>
<td>You made an oath to Liberty.</td>
<td>You have sworn to act upon this cause.</td>
<td>You made an oath to Liberty.</td>
</tr>
</tbody>
</table>
<</replace>><</button>></td>
<td><<button "Justice">><<set $character[1].Oath to "Justice">><<replace "#Oath">>
<table>
<thead>
<tr>
<th>Selfishness:</th>
<th>Conquest:</th>
<th>Liberty:</th>
<th>Justice:</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Oath of Selfishness demands that you act on your desires, free to do as you please, without fear of facing consequences.</td>
<td>The Oath of Conquest demands that you enforce your will upon others, making them submit to your laws.</td>
<td>The Oath of Liberty demands you to guarantee the freedom of all living beings, allowing them to act on their desires while understanding the consequences of doing so.</td>
<td>The Oath of Justice demands of you to uphold the law and good of all and societies</td>
</tr>
<tr>
<td>You made an oath to Justice.</td>
<td>You made an oath to Justice.</td>
<td>You made an oath to Justice.</td>
<td>You have sworn to act upon this cause.</td>
</tr>
</tbody>
</table>
<</replace>><</button>></td>
</tr>
</tbody>
</table>
</span>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Paladin:</b> Aura of Devotion: Paladins get different bonuses depending on their Oaths.</i>
(Selfishness) Aura of the Uncaring: Increase your Damage by five (5) and your Sleight of Hands by 1/3 of your Perception;
(Conquest): Aura of Tyrants: Increase your Damage by five (5) and your Intimidation by 1/3 of your Perception;
(Liberty) Aura of the Dauntless: Increase your Defense by five (5) and your Acrobatics by 1/3 of your Perception;
(Justice) Aura of Heroism: Increase your Defense by five (5) and your Athletics by 1/3 of your Perception;</td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Paladin character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Holy Garments</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Warhammer</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Scholar</h2>
<b>The Scholar is a Specialization of the Artist Class that gives the Player further knowledge on the most diverse topics at any time.</b>
<i><b>Main Attribute:</b> Charisma (CHA)</i>
<i><b>Secondary Attribute:</b> Intelligence (INT)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Scholar</b> Novice Knowledge: Add 1/3 of your Charisma to test on Arcane, Mystical, or World knowledge.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Scholar character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Waist:<b> <i>Belt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Quatterstaff</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Spy</h2>
<b>The Spy is a Specialization of the Rogue Class that allows the player new interactions in the world and being able to avoid unnecessary combat.</b>
<i><b>Main Attribute:</b> Dexterity (DEX)</i>
<i><b>Secondary Attribute:</b> Charisma (CHA)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Spy</b>Silver Tongue: Increase your Speech Expertise by 3. Whenever you level up, increase it by 1.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Rogue:</b> Nimble Fingers: During combat, you gain 15% more Gold from defeating enemies. Additionally, you may steal from story characters (NPCs).</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Spy character starts with:
<table>
<tr>
<td><b>Head:</b>Mask</i></td>
<td><b>Torso:</b> <i>Leather armor</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main Hand:</b> <i>Dagger</i></td>
</tr>
</table>
<hr>
</div><style>
.body {
background-color: black;
background-color: rgba(0, 0, 0, 0.8); /* Transparent black background */
}
</style>
<<set $day to State.variables.now.getDate()>>
<<set $hour to State.variables.now.getHours()>>
<<set $minute to State.variables.now.getMinutes()>>
<div align="center">
<b>Day:</b> $day. <br>
<b>Hours:</b> $hour : $minute.
</div>
<<if $hour >= 18>>
<<if $night is false>>
<<set $night to true>>
<</if>>
<</if>>
<<if $hour >= 6 and $night is true>>
<<set $moon += 1>>
<<set $night to false>>
<</if>>/* Time */
<<set $moon to 1>>
<<set $night to false>>
<<set $enemyInstances = []>>
<<set $showAttackButtons = false>>
<<set $whosturn = "">>
<<set $xpToLevelUp to 35>>
<<set $inMenu to 0>>
<<set $return to "">>
<<set $Owner to {
Name: "Owner",
Gold: 50,
Ancestry: "Human",
hasmet: false,
Respect: 10.
}>>
<<set $oldMan to {
Name: "Old man",
Gold: 125,
Ancestry: "Human",
hasmet: false,
Respect: 10,
}>>
<<set $bandit1 to {
Name: "Bald-fella",
Ancestry: "Human",
Respect: -10,
}>>
<<set $bandit2 to {
Name: "'mud'-face",
Ancestry: "Human",
Respect: -10,
}>>
<<set $bandit3 to {
Name: "Third guy",
Ancestry: "Human",
Respect: -5,
}>>
<<set $banditleader1 to {
Name: "Bandit Leader",
Ancestry: "Human",
Respect: -25,
}>>
<<set $loreBits = [
"Esoteric weapons increase the damage of your Offensive spells",
"Try having your Lifeblood above 0. Most of the times, it works.",
"If there were any tales about the Mother of Monsters, they would tell you about her twin, the embodiment of nature's beauty and nurturing. They would tell you the tales of the Horned maw devouring her whole.",
"She of the three faces is the goddess of Fortune, Fate, and Death; Ellis is the god of War and Civilization; Urahyahra is the goddess of Nature and Fertility, while Uldrun is the god of Hope and Despair.",
"Draconians are natural hunters and apex warriors. A single unequipped Draconian warrior is equivalent to five heavily armored humans.",
"Heralds often refer to themselves as 'Vösh'. The reason? I don't know, I never asked one...",
"In Dwarven society, to shave a beard is a mark of utmost shame.",
"Ellis demands all crafts of his despíction must be made in gold-this caused some places to accept any other round-shaped metal as coin, although the term 'gold' is still the most commonly used.",
"Hobgoblins hate Goblins for seeing them as a shameful version of themselves, while Goblins find Hobgoblins to be a bunch of funny dumb looking Goblins.",
"Ellis demands worship of him under the threat of eternal darkness. Many prefer to comply other than to verify his capabilities.",
"She of the three faces is the only of the gods who did not demand worship. Mortals are just that desperate for good fortune.",
"Uldur, the white, the savior of the fallen, the knight that comes from the skies. Uldur, the one who pushes you to the bottom of a well so he can pretend to be the one who takes you from there.",
"The Mother of Monsters, Urahyahra, is depicted as the 'boogeyman' of the four gods, a role she plays too well with the abominations she calls children and the madness her words bring to one's mind.",
"A farmer would pray to Ellis for sunlight. While also praying for 'She of the three faces' for a bountiful harvest. Neither would bother to comply without proper tribute.",
"In human language, Vanadi could be translated to either 'Shapeshifter' 'Skinwalker' or 'Pretty skin'.",
"Orcs are hemarfrodites.",
"TO GOBLINS, SPEAKING LOUDER MEANS SPEAKING GOOD.",
"There were made 36 Dragons, one for each dozen Giants. Only three have fallen during the war."
]>>
<<set $RuffianImage to "img/enemies/Ruffian.jpg">><div align='center'>
<h2>Thief</h2>
<b>The Thief is a Specialization of the Rogue Class that permits the player new interactions and earns extra rewards amidst combat.</b>
<i><b>Main Attribute:</b> Dexterity (DEX)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i>(skill) Pickpocket.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Rogue:</b> Nimble Fingers: During combat, you gain 15% more Gold from defeating enemies. Additionally, you may steal from story characters (NPCs).</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Thief character starts with:
<table>
<tr>
<td><b>Head:</b>Hood</i></td>
<td><b>Torso:</b> <i>Leather armor</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main Hand:</b> <i>Dagger</i></td>
</tr>
</table>
<hr>
</div>[align.center]
<u><strong>High priority</strong></u>
<ul>
<li>Ancestry affecting the story; dwarfs being disrespected by elfs and draconians, humans being seen as pitiful beings, elves being overestimated.</li>
<li>More Class Traits: and skills.</li>
<li>Journal (Quests & Achievements)</li>
<li>Item Descriptions: It is hard to be funny or descriptive when you lack charisma.</li>
<li>Skill descriptions.</li>
<li>The whole design of the game</li>
<li>More enemies</li>
<hr>
<u><strong>Minor:</strong></u>
<ul>
<li>Origin adventure: Instead of just reading a text, the player would experience a tutorial-like adventure.</li>
<li>Images (Pixel art)</li>
<li>Different fonts for each race (Still thinking about it)</li>
<b>When is the game going to leave Alpha?</b> When I have all the Origin lores written.
.
<hr>
[[Return|main-menu]]<div align='center'>
<img src="img/others/Vanguard.png" style="float: left; background-color: black; padding-left: 25em; padding-right: 25em;">
<hr>
<h2>Vanguard</h2>
<b>The Vanguard is a Specialization of the Warrior Class that focuses on Shield usage and survivability against multiple opponents.</b>
<i><b>Main Attribute:</b> Strength (STR)</i>
<i><b>Secondary Attribute:</b> Resilience (RES)</i>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Vanguard:</b> Defensive Stance: You gain additional Defense based upon the number of enemies alive</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Vanguard:</b> (Skill) Bash.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Warrior:</b> Weapon Mastery: Your weapons apply additional effects based on their damage type.
Blunt - Has 50% to apply Confusion on the target (does not stack).
Slashing - Applies Bleed for 2 turns.
Piercing - Decreases the target's defense by 5 (does not stack).
</i></td>
</tr>
<tr>
<td>At level 07 | <i><b>Vanguard:</b>Offensive Stance: You gain additional hit-chance based upon the number of enemies alive</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i><b>Warrior:</b> Tactical Genius: Your Skills that cost three or more Action Points cost 1 point less.</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Vanguard:</b> (Skill) Shield up.</i></td>
</tr>
<tr>
<td>At level 14 | <i><b>Vanguard:</b>Survivalist: Increase the bonus of your Defensive and Offensive Stance.</i></td>
</tr>
<tr>
<td>At level 15 | <i><b>Warrior:</b> Second Wind: During each combat, the first time you hit below 25% of your maximum health, heal yourself by 35% of your lost health.</i></td>
</tr>
<tr>
<td>At level 17 | <i><b>Vanguard:</b> Arcane Aegis: Reduce the damage taken by Spells by 20% while wielding a Shield.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 20 | <i><b>Vanguard:</b> Shield wall: Double the Defense given by your Shield.</i></td>
</tr>
</table>
<hr>
A Vanguard character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Gamberson</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main Hand:</b> <i>Short sword</i></td>
<td><b>Off-Hand:</b> <i>Wooden shield</i></td>
</tr>
</table>
<hr>
</div>
<div align='center'>
<h2>Warlock</h2>
<b>The Warlock is a Specialization of the Mage Class that allows the Player to take pacts, powerful blessings for terrible curses.</b>
<i><b>Main Attribute:</b> Intelligence (INT)</i>
<i><b>Secondary Attribute:</b> Resilience (RES)</i>
</div>
<hr>
<h3>Pact of The:</h3>
<table>
<tr>
<td><<button "Shadowless">><<set $character[1].Pact to "Shadows">>
<<replace "#textclassA">>
<p>You have captured an otherworldly creature, trapping them in your shadow, forcing your will upon them.</p>
<p>Thus, although you can command your shadow to perform actions, you feel your own grip on the world weaker; the creature feeds on your Lifeblood.<p>
<p><b>Blessing:</b> At certain times, you may call your shadow to perform actions. You also gain the "Summon: Shadow" skill.
<p><b>Curse:</b> Your Lifeblood is diminished by 15% and does not regenerate each day.</p>
<</replace>>
<</button>></td>
<td><<button "Bloodless">><<set $character[1].Pact to "Blood">>
<<replace "#textclassA">>
<p>Seeking immortality, you have made a pact with an otherworldly creature, but the creature has duped you! It has taught you how to maintain your body by feeding from the Lifeblood of others, but the creature also has escaped with your blood.</p>
<p>Now, you are required to use your Essence at all times just to preserve your body and an unending stream of victims to guarantee your existence.</p>
<p><b>Blessing:</b> Your Essence is added into your Lifeblood.</p>
<p><b>Curse:</b> You use your Lifeblood to cast spells, but they cost twice as more.</p>
<</replace>>
<</button>></td>
<td><<button "Soulless">><<set $character[1].Pact to "Soul">>
<<replace "#textclassA">>
<p>In your quest to understand the afterlife, you have unadvisedly summoned a Lich, an undead creature as powerful as it is vile.</p>
<p>Thankfully, the Lich proposed to you that with the exchange of your servitude, they would teach you what you so desired, fearing repercussions from rejecting such an offer, you have accepted it. Thus, the creature severed your soul from your being and placed it under a gem to guarantee your obedience.
<p>Now, you have a deeper understanding of the necrotic arts of the arcane, while the joy of life feels like a hellish torture.</p>
<p><b>Blessing: </b></p>
<p><b>Curse:</b> Your Expertises are halved during tests.</p>
<</replace>>
<</button>></td>
<td><<button "Fateless">><<set $character[1].Pact to "Fate">>
<<replace "#textclassA">>
<p><b>Blessing:</b> You add your Intelligence to any test.
<p><b>Curse:</b> All tests are more difficult to pass.
<</replace>>
<</button>></td>
</tr>
</table>
<div align='center'>
<span id="textclassA">
<i>Make your pact, warlock.</i>
</span>
</div>
<div align='center'>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Mage:</b> Arcane Initiation: Add the skills: "Fire Bolt." "Lightning Strike." and "Freeze." to your repertoire.</i></td>
</tr>
<tr>
<td>At level 02 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 03 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 06 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 07 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 08 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<tr>
<td>At level 10 | <i><b>Mage:</b> Arcane Mastery: Add the skills; "Inferno", "Storm and "Blizzard" to your repertoire.</i></td>
</tr>
<tr>
<td>At level 11 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 12 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 13 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 14 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 15 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 16 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 17 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i>Yet to add.</i></td>
</tr>
<tr>
<td>At level 20 | <i>Yet to add.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Warlock character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Wand</i></td>
<td><b>Offhand:</b> <i>Spellbook</i></td>
</tr>
</table>
<hr>
</div><div align='center'>
<h2>Wizard</h2>
<b>The Wizard is a Specialization of the Mage Class that focuses on using costly spells to deal as much damage as possible.</b>
<i><b>Main Attribute:</b> Intelligence (INT)</i>
</div>
<hr>
<table>
<tr>
<td>At level 01 | <i><b>Mage:</b> Arcane Initiation: Add the skills "Fire Bolt."; "Lightning Strike." and "Freeze." to your repertoire.</i></td>
</tr>
<tr>
<td>At level 02 | <i><b>Wizard:</b> Overflow I: At the start of each turn, regain Essence equal to 1/3 of your Intelligence .</i></td>
</tr>
<tr>
<td>At level 04 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 05 | <i><b>Wizard:</b> Mystical Arsenal: Add the skills "Daze', "Arcane Armor" and "Arcane Beam"to your repertoire.</i></td>
</tr>
<tr>
<td>At level 08 | <i><b>Wizard:</b> Overflow II: At the start of each turn, regain Essence equal to 1/2 of your Intelligence (Replaces Overflow I).</i></td>
</tr>
<tr>
<td>At level 09 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 10 | <i><b>Mage:</b> Arcane Mastery: Add the skills; "Inferno", "Storm and "Blizzard" to your repertoire.</i></td>
</tr>
<tr>
<td>At level 12 | <i><b>Mage:</b> Intellect Empowerment: Whenever you cast a spell against an enemy, deal 1/2 of your Intelligence as damage against it.</i></td>
</tr>
<tr>
<td>At level 14 | <i><b>Wizard:</b> Overflow III: At the start of each turn, regain Essence equal to your Intelligence (Replaces Overflow II).</i></td>
</tr>
<tr>
<td>At level 18 | <i><b>Action Points Increment.</b></i></td>
</tr>
<tr>
<td>At level 19 | <i><b>Wizard:</b> Essence Renewal: Whenever you cast a spell, regain Lifeblood equal to it's cost.</i></td>
</tr>
</table>
<hr>
<div align='center'>
A Wizard character starts with:
<table>
<tr>
<td><b>Torso:</b> <i>Wool Shirt</i></td>
<td><b>Legs:</b> <i>Pants</i></td>
<td><b>Main-hand:</b> <i>Arcane Staff</i></td>
</tr>
</table>
<hr>
</div><style>
body {
background-image: url("img/others/background.png");
background-color: transparent;
background-repeat: no-repeat;
background-size: cover;
}
.header {
font-family: 'ENDOR';
font-size: 42;
letter-spacing: 3px;
outline: 3px ridge #cacdce;
margin: auto;
outline-offset: 11px;
filter: drop-shadow(-7px 6px 15px #000000);
text-transform: uppercase;
}
.sub [
line-height: 2;
text-transform: lowercase;
}
.changelog {
overflow: hidden;
}
</style>
<<run UIBar.stow();>><<run UIBar.hide();>>
<div id="game-container">
<div id="text-container">
<div class="header" align='center'>
<img src="img\others\Tittle.png">
<div class="sub">
<i>A Dark Fantasy Adventure.</i>
</div>
</div>
<div class="content" align='center'>
<<link "New Game">><<goto "pre-Character Creation">><</link>>
<<link "Resume Game">><<run UIBar.unstow();>> <<run UIBar.show();>><<run Save.autosave.load()>><</link>>
<<link "Load Game">><<run UI.saves();>><<run UIBar.unstow();>> <<run UIBar.show();>><</link>>
[[Plan to Add]]
</div>
<hr>
<div class=changelog>
Alpha V0.003:
<div align="center">Changelog:</div>
<ul>
<li> New Ancestry: The Vanadi.</li>
<li> Jornal.</li>
<li> Warlock's Shadowless pact skill has changed from "Shadow Strike" to "Summon: Shadow."</li>
<li> Druid has become Invoker.</li>
<li> Juggernaut, Beeserker, Feral, ,Invoker and Wizard's pages have been completed.</li>
<li> I'm a terrible at bug-fixing. But at last, Duelist's Feint is working properly.</li>
<li> Skill description and "Help" added to combat</li>
<li> Random Character Creation. For those that like chaos. </li>
</ul>
</div>
</div>
</div><<run UIBar.stow();>><<run UIBar.hide();>>
<<set $EndCreation to false>>
<b>The Wicked Mind:</b> Hello, this game still is in its alpha, while being done by someone who never did a project this large. There may be missing details, texts, lore, and other things that may not work as intended.
I WILL fix these things, do not worry, or even try to witch hunt me.<i>(I already tried to kill me with fire, did not work)</i>.But I would appreciate it if I was given a nudge on where the error is happening. Or what word is wrong/missing?
Additionally, this game contains foul language, so be warned.
Without any other delay, enjoy this tiny bit of my project.
<div aling='center'>
[[Create your own character.|AncestryPage]]
<<link "Create a Random Character">>
<<run window.randomCharacterCreation()>>
<<goto "Confirmation">>
<</link>>
[[Go Back|main-menu]]
</div><<nobr>>
<<if $minute == 60>>
<<set $minute to 0>>
<<set $hour += 1>>
<</if>>
<<if $hour >= 18>>
<<if $night is false>>
<<set $night to true>>
<</if>>
<<elseif $hour >= 6>>
<<if $night is true>>
<<set $moon += 1>>
<<set $night to false>>
<</if>>
<</if>>
<<if $night is false>>☀️<<else>><<display "moon">><</if>>
<</nobr>>
<<goto "RealStart">>
<div align='center'>
<<fadein 200ms 3s>> Chapter 1:<</fadein>><<fadein 200ms 4s>><h2>The Whose Give A Fuck Village:</h2><</fadein>>
<<fadein 200ms 5s>>[[Start|Chapter 1]]<</fadein>>
</div>
<<silently>>
<<if $character[1].Specialization === "Vanguard">>
<<run State.variables.character[1].addTrait("Defensive Stance")>>
<<elseif $character[1].Specialization === "Archer">>
<<run State.variables.character[1].addSkill("Quick Shot")>>
<<elseif $character[1].Specialization === "Duelist">>
<<run State.variables.character[1].addSkill("Feint")>>
<<elseif $character[1].Specialization === "Thief">>
<<run State.variables.character[1].addSkill("Pickpocket")>>
<<elseif $character[1].Specialization === "Assassin">>
<<run State.variables.character[1].addSkill("Apply Venom")>>
<<elseif $character[1].Specialization === "Spy">>
<<run State.variables.character[1].addTrait("Silver Tongue")>>
<<elseif $character[1].Specialization === "Berserker">>
<<run State.variables.character[1].addTrait("Though Skin")>>
<<elseif $character[1].Specialization === "Feral">>
<<run State.variables.character[1].addTrait("Natural Fighter")>>
<<elseif $character[1].Specialization === "Juggernaut">>
<<run State.variables.character[1].addTrait("Iron Suit")>>
<<elseif $character[1].Specialization === "Wizard">>
<<run State.variables.character[1].addTrait("Arcane Initiation")>>
<<run State.variables.character[1].addSkill("Fire Bolt")>>
<<run State.variables.character[1].addSkill("Lightning Strike")>>
<<run State.variables.character[1].addSkill("Freeze")>>
<<elseif $character[1].Specialization === "Warlock">>
<<run State.variables.character[1].addTrait("Arcane Initiation")>>
<<run State.variables.character[1].addSkill("Fire Bolt")>>
<<run State.variables.character[1].addSkill("Lightning Strike")>>
<<run State.variables.character[1].addSkill("Freeze")>>
<<if $character[1].Pact === "Shadows">>
<<run State.variables.character[1].addSkill("Summon: Shadow")>>
<</if>>
<<elseif $character[1].Specialization === "Invoker">>
<<run State.variables.character[1].addTrait("Arcane Initiation")>>
<<run State.variables.character[1].addSkill("Fire Bolt")>>
<<run State.variables.character[1].addSkill("Lightning Strike")>>
<<run State.variables.character[1].addSkill("Freeze")>>
<<elseif $character[1].Specialization === "Dancer">>
<<run State.variables.character[1].addTrait("Blade Dancer")>>
<<elseif $character[1].Specialization === "Bard">>
<<run State.variables.character[1].addSkill("Earworm")>>
<<elseif $character[1].Specialization === "Scholar">>
<<run State.variables.character[1].addTrait("Novice Knowledge")>>
<<elseif $character[1].Specialization === "Paladin">>
<<run State.variables.character[1].addTrait("Aura of Devotion")>>
<<elseif $character[1].Specialization === "Cleric">>
<<run State.variables.character[1].addTrait("Divine blessing")>>
<<run State.variables.character[1].addSkill("Heal")>>
<<run State.variables.character[1].addSkill("Judgement")>>
<<run State.variables.character[1].addSkill("Shield of the Faithful")>>
<<elseif $character[1].Specialization === "Inquisitor">>
<<run State.variables.character[1].addTrait("Zealous Fevor")>>
<</if>>
<<if $character[1].Ancestry === 'Elf'>>
<<set $character[1].MAXLIFE = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + Math.round($character[1].PER / 2) + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<elseif $character[1].Ancestry === 'Herald' && $heraldChoice === "Nature">>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].MAXMANA = parseInt(Math.round(10 + $character[1].RES + 5 * $character[1].level) / 2)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<else>>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<</if>>
<<if $character[1].Ancestry === "Draconian">>
<<addItem "Draconian claws">><</addItem>>
<<equipItem "Draconian claws">>
<</if>>
<<set $EndCreation to true>>
<<if $character[1].Pact === "Blood">>
<<set $character[1].MAXLIFE += parseInt($character[1].MAXMANA)>>
<<set $character[1].currentLife += parseInt($character[1].currentMana)>>
<<elseif $character[1].Pact === "Shadow">>
<<set $character[1].MAXLIFE = parseInt(Math.round($character[1].MAXLIFE * 0.15))>>
<<set $character[1].currentLife = parseInt(Math.round($character[1].currentLife * 0.15))>>
<</if>><<set $character[1].Athletics += Math.round($character[1].STR / 3)>> <<set $character[1].Acrobatics += Math.round($character[1].DEX / 3)>> <<set $character[1].Stealth += Math.round($character[1].DEX / 3)>> <<set $character[1].SleightofHands += Math.round($character[1].DEX / 3)>> <<set $character[1].WorldKnowledge += Math.round($character[1].INT / 3)>> <<set $character[1].MysticalKnowledge += Math.round($character[1].INT / 3)>> <<set $character[1].ArcaneKnowledge += Math.round($character[1].INT / 3)>> <<set $character[1].Speech += Math.round($character[1].CHA / 3)>> <<set $character[1].Arts += Math.round($character[1].CHA / 3)>> <<set $character[1].Intimidation += Math.round($character[1].CHA / 3)>> <<set $character[1].Insight += Math.round($character[1].PER / 3)>> <<set $character[1].Awareness += Math.round($character[1].PER / 3)>>
<<if $character[1].Ancestry === 'Human'>><<set $character[1].traits.push('Adaptable')>> <<set $character[1].traits.push('Unlimited Potential')>> <<elseif $character[1].Ancestry === 'Vanadi'>> <<set $character[1].traits.push('Animal senses')>> <<run State.variables.character[1].addTrait("Feral Mask")>> <<set $character[1].additionalHitChance += 5>> <<elseif $character[1].Ancestry === 'Dwarf'>><<set $character[1].traits.push('Re-forger')>> <<set $character[1].traits.push('Ancestral Knowledge')>> <<elseif $character[1].Ancestry === 'Elf'>> <<set $character[1].traits.push('Favored')>> <<set $character[1].traits.push('Harmonious Existence')>> <<elseif $character[1].Ancestry === 'Draconian'>> <<set $character[1].BaseDefense = 15>><<set $character[1].traits.push('Natural Warriors')>> <<set $character[1].traits.push('Underwater Marauder')>> <<elseif $character[1].Ancestry === 'Herald'>><<set $character[1].traits.push('Arcane Core')>> <<if $HeraldChoice === "Nature's Harbinger">><<set $character[1].traits.push("Nature's Blessing")>> <<elseif $HeraldChoice === "Cosmos' Harbinger">> <<set $character[1].traits.push("Astral Connection")>>
<<elseif $HeraldChoice === "Creation's Harbinger">> <<set $character[1].traits.push("Architect of Reality")>> <<elseif $HeraldChoice === "Destruction's Harbinger">> <<set $character[1].traits.push("Eternal Hunger")>>
<</if>> <</if>>
<<if $character[1].Specialization === "Vanguard">> <<addItem "Pants">><</addItem>> <<addItem "Gamberson">><</addItem>>
<<addItem "Short sword">><</addItem>> <<addItem "Shield">><</addItem>> <<set $character[1].Gold = 25>>
<<elseif ($character[1].Specialization === "Archer")>> <<addItem "Pants">><</addItem>> <<addItem "Gamberson">><</addItem>>
<<addItem "Short bow">><</addItem>> <<set $character[1].Gold = 25>>
<<elseif ($character[1].Specialization === "Duelist")>>
<<addItem "Pants">><</addItem>> <<addItem "Gamberson">><</addItem>>
<<addItem "Rapier">><</addItem>> <<set $character[1].Gold = 25>>
<<elseif ($character[1].Specialization === "Assassin")>>
<<addItem "Hood">><</addItem>> <<addItem "Leather armor">><</addItem>> <<addItem "Crossbow">><</addItem>><<addItem "Wooden shield">><</addItem>> <<set $character[1].Gold = 45>>
<<elseif ($character[1].Specialization === "Thief")>> <<addItem "Hood">><</addItem>> <<addItem "Leather armor">><</addItem>> <<addItem "Dagger">><</addItem>> <<addItem "Pants">><</addItem>><<set $character[1].Gold = 45>>
<<elseif ($character[1].Specialization === "Spy")>> <<addItem "Mask">><</addItem>><<addItem "Pants">><</addItem>> <<addItem "Leather armor">><</addItem>> <<addItem "Dagger">><</addItem>> <<set $character[1].Gold = 45>>
<<elseif ($character[1].Specialization === "Juggernaut")>> <<addItem "Coif">><</addItem>><<addItem "Leather armor">><</addItem>> <<addItem "Buckle">><</addItem>><<addItem "Pants">><</addItem>> <<addItem "Rusted sword">><</addItem>> <<addItem "Wooden shield">><</addItem>>
<<elseif ($character[1].Specialization === "Berserker")>><<addItem "Pants">><</addItem>> <<addItem "Great axe">><</addItem>> <<set $character[1].Gold = 20>> <<elseif ($character[1].Specialization === "Feral")>> <<set $character[1].Gold = 90>>
<<elseif ($character[1].Specialization === "Wizard")>><<addItem "Wool shirt">><</addItem>> <<addItem "Circlet">><</addItem>> <<addItem "Arcane staff">><</addItem>> <<set $character[1].Gold = 35>><<addItem "Pants">><</addItem>>
<<elseif ($character[1].Specialization === "Warlock")>><<addItem "Wool shirt">><</addItem>><<addItem "Circlet">><</addItem>> <<addItem "Wand">><</addItem>> <<addItem "Spellbook">><</addItem>> <<set $character[1].Gold = 35>><<addItem "Pants">><</addItem>>
<<elseif ($character[1].Specialization === "Invoker")>><<addItem "Wool shirt">><</addItem>> <<addItem "Circlet">><</addItem>><<addItem "Arcane staff">><</addItem>><<set $character[1].Gold = 35>><<addItem "Pants">><</addItem>>
<<elseif ($character[1].Specialization === "Dancer")>> <<addItem "Circlet">><</addItem>> <<addItem "Wool shirt">><</addItem>><<addItem "Belted skirt">><</addItem>> <<addItem "Scimitar">><</addItem>> <<set $character[1].Gold = 65>>
<<elseif ($character[1].Specialization === "Bard")>> <<addItem "Belt">><</addItem>> <<addItem "Pants">><</addItem>> <<addItem "Wool shirt">><</addItem>><<addItem "Short sword">><</addItem>> <<addItem "Lute">><</addItem>> <<set $character[1].Gold = 65>>
<<elseif ($character[1].Specialization === "Scholar")>> <<addItem "Wool shirt">><</addItem>> <<addItem "Belt">><</addItem>>
<<addItem "Pants">><</addItem>> <<addItem "Quatterstaff">><</addItem>>
<<set $character[1].Gold = 65>>
<<elseif ($character[1].Specialization === "Paladin")>> <<addItem "Holy garments">><</addItem>> <<addItem "Pants">><</addItem>> <<addItem "Warhammer">><</addItem>> <<set $character[1].Gold = 15>>
<<elseif ($character[1].Specialization === "Cleric")>> <<addItem "Holy garments">><</addItem>> <<addItem "Pants">><</addItem>> <<addItem "Wand">><</addItem>> <<addItem "Divine symbol">><</addItem>> <<set $character[1].Gold = 15>>
<<elseif ($character[1].Specialization === "Inquisitor")>> <<addItem "Holy garments">><</addItem>> <<addItem "Divine symbol">><</addItem>><<addItem "Pants">><</addItem>> <<addItem "Mace">><</addItem>> <<set $character[1].Gold = 15>>
<</if>>
<</silently>><<run UIBar.unstow();>> <<run UIBar.show();>>
<i>*Thump*</i>
The sound made by an agonizing step;
Another <i>*Thump*</i> you make.
This mind-numbing rhythm has been your weary routine for the past few days, each step a torturous reminder of your unrelenting march toward nowhere. You are exhausted, bored, and parched beyond belief, simply yearning for a break -any break, even if it is just a brief respite. But rest is ot an option for you now, not when the gnawing fear that if you close your eyes, you might never open them again circles over you like a vulture circles dead meat.
Curiously, a vulture does indeed appear in the skies above you. But not because of you, no. Not everything is about you.
Thankfully, a few hours ago, you stumbled upon a crude wooden signpost, a desperate cry for civilization in this desolate wasteland. It points to a road that looks like it has not seen maintenance in centuries, but it is a path nonetheless, and you follow it with a heavy heart and heavier feet.
One might say the scenery has a certain rugged charm, if they were blind and had lost all sense of smell. Unfortunately, you possess both sight and scent, and the overwhelming stench of decay and filth in the air strips away any semblance of beauty. Even the flies, those resilient scavengers, have given up and flown to less foul pastures. Only someone truly desperate for the promise of a warm meal and a bed would willingly endure this torturous journey. And, unsurprisingly, that someone is you.
Why, you might ask? Well, my dear traveler, it is because...
<span id="originslector">
<div align='center'>
<hr>
Choose your history:
<<if $character[1].Ancestry === "Human">>
<<link "You have barely escaped from draconian slavery.">>
<<replace "#originslector">>
<<include "Draconian Slave">>
<</replace>>
<<set $character[1].Origin = "Escapee">>
<</link>>
<<link "You have lost everything you once had.">>
<<replace "#originslector">>
<<include "No longer Free">>
<</replace>>
<<set $character[1].Origin = "Free-human">>
<</link>>
<<link "They allowed you to go free, for some reason...">>
<<replace "#originslector">>
<<include "Earned Freedom">>
<</replace>>
<<set $character[1].Origin = "Liberated">>
<</link>>
<<elseif $character[1].Ancestry === "Elf">>
<<link "With showing signs of the affliction, you were presenting yourself as a danger for anyone around.">>
<<set $character[1].Origin = "Sick">>
<<replace "#originslector">>
<<include "Ravenous">>
<</replace>>
<</link>>
<<link "I simply wanted to explore this world.">>
<<set $character[1].Origin = "Curious mind">>
<<replace "#originslector">>
<<include "What a beautiful word">>
<</replace>>
<</link>>
<<link "Someone I care about was afflicted, I must search for a way to cure them.">>
<<set $character[1].Origin = "Searching for a cure">>
<<replace "#originslector">>
<<include "Must save someone">>
<</replace>>
<</link>>
<<elseif $character[1].Ancestry === "Herald">>
<<link "Something calls for me.">>
<<set $character[1].Origin = "Called">>
<<replace "#originslector">>
<<include "Strange dreams">>
<</replace>>
<</link>>
<<link "The only person that cared for me has passed away, I have nowhere to call home.">>
<<set $character[1].Origin = "Without home">>
<<replace "#originslector">>
<<include "Goodbye">>
<</replace>>
<</link>>
<<elseif $character[1].Ancestry === "Dwarf">>
<<link "They cast me out and shaved my beard. I cannot ever return back.">>
<<set $character[1].Origin = "Banished">>
<<replace "#originslector">>
<<include "Against the law">>
<</replace>>
<</link>>
<<link "I am tasked to explore the upperworld.">>
<<set $character[1].Origin = "Overworld Scout">>
<<replace "#originslector">>
<<include "Tasked with a mission">>
<</replace>>
<</link>>
<<link "Someone needed my skills, but it ended up bad.">>
<<set $character[1].Origin = "Hired for a job">>
<<replace "#originslector">>
<<include "Bad job">>
<</replace>>
<</link>>
<<elseif $character[1].Ancestry === "Draconian">>
<<link "Did not return home. And never will!">>
<<set $character[1].Origin = "Immature">>
<<replace "#originslector">>
<<include "Never going back">>
<</replace>>
<</link>>
<<link "Cast out from Scalebound order.">>
<<set $character[1].Origin = "Ex-Scalebound">>
<<replace "#originslector">>
<<include "Heresy">>
<</replace>>
<</link>>
<<link "Draconians forgotten of our true name! But Iruxi lives through me!">>
<<set $character[1].Origin = "Iruxi Legacy">>
<<replace "#originslector">>
<<include "A memory">>
<</replace>>
<</link>>
<<elseif $character[1].Ancestry === "Vanadi">>
<<link "Our homes were burned... and our children, killed...">>
<<set $character[1].Origin = "Survivor">>
<<replace "#originslector">>
<<include "In blazes">>
<</replace>>
<</link>>
<<link "Monsters attacked my lands, i fear i was the only survivor.">>
<<set $character[1].Origin = "Prey">>
<<replace "#originslector">>
<<include "Runaway">>
<</replace>>
<</link>>
<</if>>
</div>
</span>"You've managed to scrape away from the gripping claws of draconian slavery, although you owe your newfound freedom to the odd decision of a guard who chose to rest at the most convenient time for you. But who's complaining? Not you, perhaps the other slaves who did not get the memo? But who cares about their opinion, anyway?
In the bizarre minds of those reptiles, you're practically a free soul in the world now – well, at least until you cross paths with one of those Scalebound fanatics, but at least those are as rare as common sense. To most draconians, it does not matter from whence you came; if you are not working as a slave, then you aren't one.
But let's not downplay the years you've toiled away crafting the Draconians' weapons, structures, and designs. And let's not forget those nights of catering to the whims of the demanding draconian ladies, an experience far less enjoyable than one might initially imagine.
Nevertheless, you've survived – or more accurately, parts of you have survived, bearing the marks of harsh cuts and bites as badges of resilience. What's left doesn't have the slightest intention of taking a leisurely rest right now. No, it yearns for restitution, for the stolen moments and wasted years to return with interest.
Sadly, true freedom doesn't come cheap, especially when your coin purse is lighter than a cloud, and the only ones willing to employ a former slave are the rebellion groups who risk themselves to free other slaves. You're going to spoil your hands, tackling the oddest jobs and questionable tasks, to slowly and certainly fallible, produce a reputation as a mercenary who answers to no one but themselves."
[[Procceed|Company Arrives]]You've seen it all slip away, haven't you? The palaces, the gleaming gold, the finest clothing money could buy, and a line of lovers that would make any court poet envious – all gone. A single disastrous wager, a treacherous 'associate' who turned out to be a viper in disguise – that's the tale of your riches-to-rags plunge. But then again, that's life in the Great Desert of Havar. A place where slaves can ascend to nobility while nobles plummet into servitude in the blink of an eye. It's what they mean when they say, 'You reap what you sow.'
Sure, you might've engaged in some morally questionable endeavors to amass that obscene wealth back in the day, but it's different, right? Back then, you were on the winning side, not playing the part of the dupe, but that's how it sadly works in the golden cities; only those with gold are considered citizens.
Gold, and gold alone, speaks as the hammer of justice. No law protects someone from unfair deals or theft. No bribe is enough to secure someone's wealth. Even for the chance of work, one has to pay a hefty price. Thus, many have fallen into a treacherous and unending cycle of debt and semi-slavery. Others are sold as slaves in markets and caravans for and by Draconian tourists, a profitable and despicable practice that rends piles of Draconian coins.
Alas, it's all behind you now. The past is a distant mirage, fading with every step you take, retreating like a cowardly cur. You had to abandon your opulent abode, or else you'd be consigned to the same fate as those other poor saps – a life of backbreaking labor and subservience. So here you are, traversing the Grasslands amidst Draconians, Elves, and fellow humans who, unlike you, never had the privilege of tasting life's finer fruits and instead languished as perpetual thralls.
[[Company Arrives]]Like countless others before you and doubtlessly countless more to come, you were nothing more than a human slave, or at least until recently. By some twisted stroke of luck, you found yourself among the double-digit number of slaves granted a semblance of freedom. The reasons behind your newfound liberty matter little to you; you are thankful to be no longer within the cruel grasp of Ulgarosh Citadel (Uhl-gah-roash), the very heart of the draconian empire, a testament to the hundreds of thousands of slaves whose blood and sweat had soaked into the stones over centuries, their spirits crushed beneath the draconian overlords' rule.
But behind those stone-cold walls, your brother remains trapped alongside those reptilian monsters. Your existence as a slave, while undoubtedly unbearable, was not as agonizing as it had been in the last month. You both served primarily as cookers in the household of a minor draconian family—though using the term 'family' felt foreign, given the draconians' peculiar concept of familial bonds. They traded partners with every gestation. As soon as the offspring were born, they were to be trained by their biological fathers to hunt and fight. After years of this harsh education, they returned to their mothers to learn their tongue and history, and, above all, they were taught reverence for the dragons. Only then were these draconian children granted a semblance of freedom. An irony that was not lost; the draconians valued their offspring's liberty while ruthlessly enslaving yours. But such musings mattered little in the grand scheme of your existence. The truth was, they fed you. You had time to rest and mend from wounds and diseases. You even had your own house within those walls, although it was far from the comfort the draconians enjoyed. A part of you yearned for the familiar weight of chains, the perverse sense of stability it offered. But another part, a defiant part, yearned for dignity—for you and your brother.
You couldn't stand the thought of him remaining captive for any moment longer. Whispers among the slaves spoke of northern human lands engaging in the commerce of slaves. Horrendous as it is, perhaps, if you could amass enough coins, you might secure your brother's freedom, wrenching him from the clutches of the draconians. In the vast expanse of your determination, the spark of hope flickered, dim yet unyielding, lighting the path to your uncertain future.
[[Company Arrives]]
Sometimes...Sometimes, when you squeeze your eyelids shut, closing your senses of the world, you can feel it moving.
Slithering through your phloems, worming its way deep within you, that vile imprint burrowing, forming a nest within you, a mark into the very core of your wood-flesh to brand you as the new abomination, a child of the dark goddess Urahyahra, "The Horned maw"; "The mother of monsters" as the mortals call her.
You can feel the hunger within you. The lust that suggests, no, demands you to quench your thirst with blood, feed your hunger with flesh and bones, and force yourself to spread your "gift" with others.
The call to purge the weak;
The urge to change, to evolve, and to be more. So much more.
It's like a necessity, an instinct that somehow was always inside you, hidden in some locked chamber, that slowly, day by day, consumes your being.
But you have to be stronger.
You cannot allow her to have another twisted child.
The thought of your starting to delve into those desires terrifies you. That "thing" is not the being you desire to be; that "gift" is not a gift at all. It's a curse, a twisted view of nature that grows at the same rate as it devours itself whole. It's madness.
No wonder your "serie'rey" shunned you, or as in human terms, your "family"-although that term does not entirely grasp the complexity of your connection... You were more than kin; the three of you, carved from the same roots, fed by the same soil, and your minds and feelings entwined as one, it was harmonic.
But when the dark mother decided to play favorites, they were forced to serve you from that harmony to save themselves from the disease you now carry in your thoughts. But you are lost without them. They made you whole. But you cannot put them in danger of sharing such fate. No, no one deserves this.
You ran away, as far as you could from them;
But it's merely a matter of time before her influence condemns you to become a bannermen of her twisted visage, propagating her cycle of unending violence as spores of a mutated carnivorous plant that seeks proliferation at all moments. That's why you must resist her as long as you can. Her design is cunning, a cascading effect of unending chaos.
She may be a goddess, but some once stood toe to toe with her before the dragon's birth. Perhaps they have a cure.
There must be one.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
"Honor.
What does that damned word even mean?
You had "honor" once when you were nothing more than a lapdog for your matron when you beat some sense into those who did not follow her orders.
When she told you to sit, you'd sit;
When she told you to bark, you'd bark;
When she told you to kill, you'd kill;
Fuck "honor". Fuck that bitch, she got what she deserved, a knife on her throat. But that is not what the other dwarves saw, no. They only saw a "liability" as a son who committed matricide. Fuck them too.
At least it was fast.
The trial had no delay settled in a single day. The court dictated you were guilty, not even allowing you to have a lawyer or being able to present your case, no, just the punishments; you'd be marked as an outcast and sent to the overworld to never put a foot again inside the undercities. And, of course, it meant that they would strip you of anything that marked you as a Dwarf: your belongings, heritage, and even your beard.
Now, you are alone in a world you have no fucking clue how it works, no one to help or give a fuck for you.
You are fucked..."
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]
<<if visited('Confirmation')>>
<<if $inMenu is 1>>
<<nobr>><<if $return neq "">>
<<link "Return to the Game">>
<<goto $return>>
<<set $inMenu to 0>>
<</link>>
<</if>><</nobr>>
<<else>>
<<link 'Character'>>
<<goto 'Characterpage'>>
<<set $return to passage()>>
<<set $inMenu to 1>>
<</link>>
<<link 'Inventory'>>
<<goto 'Inventory'>>
<<set $return to passage()>>
<<set $inMenu to 1>>
<</link>>
<<link 'Jornal'>>
<<goto 'Jornal'>>
<<set $return to passage()>>
<<set $inMenu to 1>>
<</link>>
<</if>>
<</if>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 4)>>
You hear noises, the sound of movement,
the sound of a hurry, laughter, and metal.
And then,
Two men come from the woods.
The first is an old, hairless, and toothless light-skinned man, not taller than you, with an ugly scar covering the leftmost part of his face, which, to be honest, is not a hideous mug to look at. Sure, the wound takes a toil to his looks, but perhaps, in another life, he could've been a ladies' man. In this one, though, he prefers the company of women convinced by the metallic clinking of coins
The other is a younger man with far more hair than his fellow friend, somewhere between bronzed or brownish skin - well, it is hard to say when "mud" paints his face. Unlike his friend, this one has a roundish mug, a crooked nose, and eyes of the wrong colors. Not even his mother could love his face, especially after he beat her to death for money to spend on booze and whores. But you didn’t hear that from me.
These two men come from the forest grinning like wolves as they play, push, and laugh at each other's jokes and antics as two idiots who have been friends for years. In their hands lies a pouch. Even from afar, you can hear the sound it makes with each of its bearer's steps. Of the dangling sound of the many metallic pieces in contact with each other, the sound of coins.
At first, they are unaware of your presence, but their ignorance towards you lives short as the delightful and very..."perfumed" aroma of your unshowered body reaches their nostrils;
Briefly, they trade glances before turning to you with mischievous smiles - if they were trying to conceal it, they have failed. And as if they weren't two of the worst actors in the world, they fake some worried expressions as they approach you to babble.
<b> Bald fella:</b> "Oi! Ye seems lost, pal! Are ye all right?"
<br>
<b>"Mud"-face:</b> "Ye wanna some help, buddy? Wunna us to show you sum' shelter?"
<br>
<b>??? (1):</b> "We can show ye the place, ye know..? *giggles* For a price."
<span id="page2choice">
Do you:
<hr>
<<link "Attempt to dissuade them?">>
<<replace "#page2choice">>
<<include "diplomacy approach1">>
<</replace>>
<</link>>
<<link "Attempt to dissuade them <b>firmly</b>?">>
<<replace "#page2choice">>
<<include "intimidation approach1">>
<</replace>>
<</link>>
<<link "Tell in their faces how pathetic they are.">>
<<replace "#page2choice">>
<<include "tell them some truth">>
<</replace>>
<</link>>
<<link "Or do you want to get rid of them?">>
<<replace "#page2choice">>
<<include "straight to combat">>
<</replace>>
<</link>>
<<if $character[1].Specialization is "Thief" || $character[1].Specialization is "Assassin" || $character[1].Specialization is "Spy">>
<<link "Chat a little with them, you know, from thief to thieves.">>
<<replace "#page2choice">>
<<include "what a rapscallion">>
<</replace>>
<</link>>
<</if>>
</span>
<<if visited("Combatpage") >= 1>>
<<set $initBandits = "dead">>
<<goto "Was that it?">>
<</if>><<run UIBar.unstow();>> <<run UIBar.show();>>
<h2>Victory</h2>
<<run checkLevelUp();>>
<<link "Return">>
<<set $whosturn = "">>
<<goto $return>>
<</link>>
<<silently>>
<<set $allyInstances to []>>
<<if $character[1].statusEffects.eagleForm>>
<<set $character[1].PER -= 6>>
<<set $character[1].INT -= 3>>
<<set $character[1].statusEffects.eagleForm to false>>
<<elseif $character[1].statusEffects.wolfForm>>
<<set $character[1].STR -= 6>>
<<set $character[1].DEX -= 3>>
<<set $character[1].statusEffects.wolfForm to false>>
<<esleif $character[1].statusEffects.bearForm>>
<<set $character[1].RES -= 6>>
<<set $character[1].CHA -= 3>>
<<set $character[1].statusEffects.bearForm to false>>
<</if>>
<<set $character[1].statusEffects. poison to 0>>
<<set $character[1].statusEffects. bleed to 0>>
<<set $character[1].statusEffects. regeneration to 0>>
<<set $character[1].statusEffects. stunned to 0>>
<<set $character[1].statusEffects. confusion to 0>>
<<set $character[1].statusEffects. improvedAttacks to 0>>
<<set $character[1].riposteActive to false>>
<<if $character[1].statusEffects.feintDuration && $character[1].statusEffects.feintDuration > 0>>
<<set $character[1].statusEffects.feintDuration to 0>>
<</if>>
<<if $character[1].statusEffects.applyVenom>>
<<set $character[1].statusEffects.applyVenom to false>>
<</if>>
<<if $character[1].statusEffects.adrenalineRushDuration && $character[1].statusEffects.adrenalineRushDuration > 0>>
<<$character[1].statusEffects.adrenalineRushDuration = 0>>
<</if>>
<<if $character[1].statusEffects.infuseWeaponDice>>
<<set $character[1].statusEffects.infuseWeaponDice = "">>
<</if>>
<<if $character[1].statusEffects.warcryDuration && $character[1].statusEffects.warcryDuration > 0>>
<<set $character[1].statusEffects.warcryDuration to 0>>
<</if>>
<<if $character[1].statusEffects.freezeDuration && $character[1].statusEffects.freezeDuration > 0>>
<<set $character[1].statusEffects.freezeDuration to 0>>
<</if>>
<<if $character[1].statusEffects.earwormDuration && $character[1].statusEffects.earwormDuration > 0>>
<<set $character[1].statusEffects.earwormDuration to 0>>
<<set $character[1].additionalHitChance += 15>>
<<set $character[1].additionalDamage += 5>>
<</if>>
<<if $character[1].statusEffects.warSongDuration && $character[1].statusEffects.warSongDuration > 0>>
<<set $character[1].statusEffects.warSongDuration to 0>>
<</if>>
<<if $character[1].statusEffects.songOfHeroesDuration && $character[1].statusEffects.songOfHeroesDuration > 0>>
<<set $character[1].statusEffects.songOfHeroesDuration to 0>>
<<set $character[1].additionalHitChance -= 15>>
<<set $character[1].additionalDamage -= 5>>
<<set $character[1].additionaltDefense -= 15>>
<</if>>
<<if $character[1].statusEffects. sentenceDuration && $character[1].statusEffects. sentenceDuration> 0>>
<<set $character[1].statusEffects. sentenceDuration to 0>>
<<set $character[1].additionalDefense += 10>>
<<set $character[1].additionalHitChance += 5>>
<</if>>
<<if $character[1].statusEffects.arcaneArmor>>
<<set _defensebonus = $character[1].INT>>
<<if $character[1].level >= 5>>
<<set _defensebonus += 5>>
<</if>>
<<if $character[1].level >= 10>>
<<set _defensebonus += 5>>
<</if>>
<<if $character[1].level >= 15>>
<<set _defensebonus += 5>>
<</if>>
<<set $character[1].additionalDefense -= _defensebonus>>
<<set $character[1].statusEffects.arcaneArmor = false>> // Remove the status effect after adjusting defense
<</if>>
<<if $character[1].statusEffects.bondedExistencebonus !== undefined>>
<<set $character[1].additionalDamage -= $character[1].statusEffects.bondedExistencebonus>>
<<set $character[1].statusEffects.bondedExistencebonus to 0>>
<</if>>
<</silently>>
GOBB'S AR DE BEST
traits:
<b>GOBLIN SPEECH:</b>
OLL WRITTY STUFF GITS TO BE SUMTHING MORE GOBLIN SMARTZY!!
<b>BESTEST LOOTERS></b>
GOBLINS AR GOOD IN FINDING SHINY STUFF! GOBLINS FIND MUR GOLD FROM DEADSIES!<div align='center'>
<h1>You have been defeated in battle</h1>
<<set $return to passage()>>
Restart the game.
</div><style>
div {
display: grid;
place-items: center;
}
</style>
<<if $character[1].experience >= $xpToLevelUp>> <i>You have enough experience to level up, go to your Character's page</i><</if>>
<div align='center'>
<<if $character[1].Ancestry is "Human">>
<img src="img\others\Humanbar.png">
<<elseif $character[1].Ancestry is "Dwarf">>
<img src="img\others\Dwarfbar.png">
<<elseif $character[1].Ancestry is "Draconian">>
<img src="img\others\Draconianbar.png">
<<elseif $character[1].Ancestry is "Elf">>
<img src="img\others\Elfbar.png">
<<elseif $character[1].Ancestry is "Herald">>
<img src="img\others\Heraldbar.png">
<<elseif $character[1].Ancestry is "Vanadi">>
<img src="img\others\Vanadibar.png">
<<else>>
<img src="img\others\bar.png">
<</if>>
</div>
<style>
div {
display: grid;
place-items: center;
}
</style>
<div align='center'>
<<if $character[1].Ancestry is "Human">>
<img src="img\others\Humanbar.png">
<<elseif $character[1].Ancestry is "Dwarf">>
<img src="img\others\Dwarfbar.png">
<<elseif $character[1].Ancestry is "Draconian">>
<img src="img\others\Draconianbar.png">
<<elseif $character[1].Ancestry is "Elf">>
<img src="img\others\Elfbar.png">
<<elseif $character[1].Ancestry is "Herald">>
<img src="img\others\Heraldbar.png">
<<elseif $character[1].Ancestry is "Vanadi">>
<img src="img\others\Vanadibar.png">
<<else>>
<img src="img\others\bar.png">
<</if>>
</div>
Fala chapa, se você tá lendo isso, 1. você entende português ou foi no google translate e 2. você acessou os arquivos desse jogo no twine. Não posso te impedir, então tenha um bom dia, tarde ou noite;
]tipos de quest
Caça: Lute contra um cara e fim de missão.
Trabalho: Repetivel, da pouco dinheiro mas n tem dificuldade.
Missão: Você tem que chegar no local, conversar com locais para entender a parada então resolver o troço
Aventurar: pega os tres acima e se vira fazendo algo repetitivo que não pareça
capitulo 1
zé ninguem catando trampo ruim
capitulo 2
inicia primeira aventura, onde uma mina jurada da escama te chama para consertar a merda que deu no trampo dela, vc ou fica miguxo dela ou de uma revolucionaria humana, no fim voce falha em consertar a merda
capitulo 3
dragões viajam ao leste, convocados pelos deuses para enfrentar alguma merda que deu la
Draconianos estao entrando em desespero, se voce se aliou a draconata voce vai ajudar a botar ordem, se voce se aliou a revolucionaria voce vai aproveitar para libertar mais escravos
inicio a aventuras secundarias além da aventura principal
capitulo 4+
ainda pensando
You observe the two men, a glimmer of fear in your eyes, but determination shines through. With a shaky yet sincere voice, you attempt to appeal to their humanity, "Gentlemen, please, I mean you no harm. I'm just a weary traveler, trying to survive in these harsh lands. I have a little gold, not much, but it's yours if you let me go unharmed. We all have families to look out for, right?"
<<test Speech 8>>
<<onSuccess>> <i> - Speech</i>
The older bandit scratches his head, exchanging a hesitant glance with his friend. After a moment of deliberation, he grunts, "Fine, just pay us a toil and scram. But remember, next time we meet, it won't be this easy."
[[Hand them your gold and git.|Was that it?][$character[1].Gold -= 5, $initBandits = "DiplomacyResolution"]]
<<link "On second hand... (punch their faces, instead)">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "Player">>
<<goto Combatpage>>
<</link>>
<<onFailure>> <i> - Speech</i>
The bandits eye your gold greedily, dismissing your plea. "Nice try, traveler," sneers the younger one. "We'll take that gold and whatever else you've got.".
<div align="center">
<<link "It seems that the vermin wish to fight">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "ambush">>
<<goto Combatpage>>
<</link>>
</div>
<</test>>
<<if visited("Combatpage") >= 1>>
<<set $initBandits = "dead">>
<<goto "Was that it?">>
<</if>>You straighten your posture, your eyes hardening as you stare at them. "You've picked the wrong person to mess with," you growl, your tone low and menacing. "I suggest you turn around and forget you ever saw me. I'm not someone you want to cross." Your hand subtly moves toward a hidden weapon, making your point clear.
<<test Intimidation 8>>
<<onSuccess>> <i> - Intimidation</i>
Your confident demeanor and icy tone give them pause. The older bandit gulps nervously and stammers, "Alright, we ain't looking for trouble. Let's go, mate." They retreat into the woods, leaving you unharmed and victorious.
[[And just like that, they leave|Was that it?][$initBandits ="IntimidationResolution"]]
<<link "Wait, who said them that they could leave?">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "Player">>
<<goto Combatpage>>
<</link>>
<<onFailure>> <i> - Intimidation</i>
Despite your attempts at intimidation, the bandits exchange amused glances. The older one smirks, "Nice try, little tough guy. Let's see how tough you really are
<<link "Time to get rid of the vermin">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "ambush">>
<<goto Combatpage>>
<</link>>
<</test>>
<<if visited("Combatpage") >= 1>>
<<set $initBandits = "dead">>
<<goto "Was that it?">>
<</if>><<if visited("Combatpage") > 1>>
<<set $initBandits = "dead">>
<<goto "Was that it?">>
<<else>>
With a sneer, you unleash a torrent of insults, questioning their intelligence and parentage. The men's faces contort with rage, and before you can react, a swift punch lands on your jaw. Pain shoots through your face, but you bear it, your defiance unwavering, knowing you provoked this reaction.
<b>??? (2)</b> You are going to regret this, ye little fucker!
<<link "Shouldn't have done that.">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "ambush">>
<<goto Combatpage>>
<</link>>
<<set $character[1].currentLife -= 5>>
<</if>>You widen your eyes and take on a tone of exaggerated familiarity, "Wait a minute... aren't you two... from Galden's Gang? It's me, Renny! You remember, right? We shared a drink at the Red Dragon Inn just last summer!" Their eyes narrow, clearly unsure. "Come on, guys, it's me, your old friend! I've been through some rough times, lost a bit of weight, you know how it is."
<<test Speech 6>>
<<onSuccess>> <i> - Speech</i>
Doubt creeps into their eyes as they glance at each other, unsure. "Renny, huh? You do look a bit familiar... Fine, old friend, we'll let you go this time," says the younger bandit, a tad relunted. With a mixture of relief and guilt, you accept their aid and continue your journey.
[[And off you go.|Was that it?][$initBandits = "DeceiveResolution"]]
<<link "Wait, you are not done yet.">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "Player">>
<<goto Combatpage>>
<</link>>
<<onFailure>> <i> - Speech</i>
The bandits exchange suspicious looks, clearly unconvinced. The older one folds his arms, chuckling, "Nice try, but we're not that gullible."
<<link "Better luck next time.">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "Player">>
<<goto Combatpage>>
<</link>>
<</test>>
<<if visited("Combatpage") > 1>>
<<set $initBandits = "dead">>
<goto "Was that it?">>
<</if>>You waste not your time or your words. All you do is take your weapons in your arms.
And they readily answer the call for battle, happily so.
<b>Bald fella:</b> Ye going to regret this.
<hr>
<div align="center">
<<link "Time to get rid of the vermin">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set $whosturn to "Player">>
<<goto Combatpage>>
<</link>>
</div>
<<if visited("Combatpage") > 1>>
<<set $initBandits = "dead">>
<<goto "Was that it?">>
<</if>><div align='center'>
Sadly, this is all i have for now, please come back in a future update.
Please, leave behind either your harshest of praises, gentlest of critiscims or whatever that lies in between and beyond.
Or don't, i cannot control your actions.
</div>
Config.saves.autosave = true;
function setReturn() {
if (!State.passage.tags.includes("menu")) {
State.variables.$return = State.passage.title;
}
}
function round(value, decimals) {
return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals);
}
if (Config.macros.maxLoopIterations < 2000) {
Config.macros.maxLoopIterations = 2000;
}
State.variables.Items = {};
class Item {
constructor(Name,options = {}) {
this.ID = options.ID || null;
this.Name = options.Name || "Unnamed Item";
this.Singular = options.Singular || Name;
this.Plural = options.Plural || this.Name + "s";
this.Description = options.Description || "yet to add";
this.Type = options.Type || [];
this.Slot = options.Slot || ["head", "torso", "waist", "legs", "feet", "mainHand", "offhand"];
this.Price = options.Price || 0;
this.equipped = false;
this.Damage = options.Damage || null;
this.Defense = options.Defense || 0;
this.Cooldown = options.Cooldown || 0;
this.icon = options.icon;
}
}
function createItem(name, options) {
options.Name = name;
options.Description = options.Description || "yet to add";
options.equipable = options.equipable || false;
State.variables.Items[name] = new Item(name, options);
}
var emptyHead = createItem("Empty Head", {
Type: ["bornwith", "not a item", "non-armor"],
Slot: 'head',
equipped: false,
});
var emptyTorso = createItem("Empty Torso", {
Type: ["bornwith", "not a item", "non-armor"],
Slot: 'torso',
equipped: false,
});
var emptyWaist = createItem("Empty Waist", {
Type: ["bornwith", "not a item", "non-armor"],
Slot: 'waist',
equipped: false,
});
var emptyLegs = createItem("Empty Legs", {
Type: ["bornwith", "not a item", "non-armor"],
Slot: 'legs',
equipped: false,
});
var emptyFeet = createItem("Empty Feet", {
Type: ["bornwith", "not a item", "non-armor"],
Slot: 'feet',
equipped: false,
});
var divineSymbol = createItem("Divine symbol", {
Plural: "divine symbols",
Description: "a sacred symbol of your deity.",
Type: ["sacred", "item"],
Slot: 'offhand',
Price: 35,
equipped: false,
});
var spellbook = createItem("Spellbook", {
Plural: "spellbooks",
Type: ["arcane", "item"],
Slot: 'offhand',
Price: 60,
equipped: false,
});
var lute = createItem("Lute", {
Singular: "a lute",
Type: ["instrument"],
Slot: ['offHand'],
Price: 50,
equipped: false,
});
var harp = createItem("Harp", {
Singular: "an harp",
Type: ["instrument"],
Slot: 'offhand',
Price: 60,
equipped: false,
});
var flute = createItem("Flute", {
Singular: "a flute",
Type: ["instrument"],
Slot: 'offhand',
Price: 45,
equipped: false,
});
var bagpipes = createItem("Bagpipes", {
Singular: "a bagpipe",
Type: ["instrument"],
Slot: 'offhand',
Price: 50,
equipped: false,
});
var drum = createItem("Drum", {
Singular: "a drum",
Type: ["instrument"],
Slot: 'offHand',
Price: 40,
equipped: false,
});
var dragonHelmet = createItem("Dragon Scale helmet", {
Singular: "a dragon scale helmet",
Plural: "dragon scale helmets",
Type: ["wearable", "heavy armor", "draconic"],
Slot: 'head',
Defense: 10,
Price: 2500,
equipped: false,
});
var helmet = createItem("Helmet", {
Type: ["wearable", "heavy armor"],
Slot: 'head',
Defense: 8,
Price: 110,
equipped: false,
});
var greatHelm = createItem("Great helm", {
Type: ["wearable", "heavy armor"],
Slot: 'head',
Defense: 8,
Price: 120,
equipped: false,
});
var bascinet = createItem("Bascinet", {
Type: ["wearable", "heavy armor"],
Slot: 'head',
Defense: 8,
Price: 115,
equipped: false,
});
var coif = createItem("Coif", {
Type: ["wearable", "light armor"],
Slot: 'head',
Defense: 1,
Price: 25,
equipped: false,
});
var mask = createItem("Mask", {
Type: ["wearable", "light armor", "secretive"],
Slot: 'head',
Defense: 2,
Price: 32,
equipped: false,
});
var hood = createItem("Hood", {
Type: ["wearable", "light armor", "secretive"],
Slot: 'head',
Defense: 1,
Price: 29,
equipped: false,
});
var circlet = createItem("Circlet", {
Type: ["wearable", "light armor"],
Slot: 'head',
Defense: 1,
Price: 30,
equipped: false,
});
var chainmail = createItem("Chainmail", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 4,
Price: 70,
equipped: false,
});
var dragonArmor = createItem("Dragon Scale armor", {
Type: ["wearable", "heavy armor", "draconic"],
Slot: 'torso',
Defense: 12,
Price: 2600,
equipped: false,
});
var plateArmor = createItem("Plate armor", {
Type: ["wearable", "heavy armor"],
Slot: 'torso',
Defense: 9,
Price: 150,
equipped: false,
});
var woolShirt = createItem("Wool shirt", {
Description: "A woolen shirt that barely protects you from the cold, what to say of blades.",
Plural: "Woolen shirts",
Type: ["wearable", "light armor"],
Slot: 'torso',
Defense: 1,
Price: 20,
equipped: false,
});
var holyGarments = createItem("Holy garments", {
Plural: "Holy garments",
Type: ["wearable", "light armor", "sacred"],
Slot: 'torso',
Defense: 1,
Price: 35,
equipped: false,
});
var leatherArmor = createItem("Leather armor", {
Type: ["wearable", "light armor"],
Slot: 'torso',
Defense: 2,
Price: 40,
equipped: false,
});
var gamberson = createItem("Gamberson", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 3,
Price: 60,
equipped: false,
});
var bringandine = createItem("Brigandine", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 5,
Price: 80,
equipped: false,
});
var cuirass = createItem("Cuirass", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 6,
Price: 85,
equipped: false,
});
var hauberk = createItem("Hauberk", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 6,
Price: 95,
equipped: false,
});
var breastplate = createItem("Breastplate", {
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 6,
Price: 100,
equipped: false,
});
var faulds = createItem("Faulds", {
Plural: "Faulds",
Type: ["wearable", "medium armor"],
Slot: 'torso',
Defense: 5,
Price: 75,
equipped: false,
});
var belt = createItem("Belt", {
Type: ["wearable", "light armor"],
Slot: 'waist',
GearDefense: 1,
Price: 20,
equipped: false,
});
var beltpouch = createItem("Belt pouch", {
Type: ["wearable", "light armor"],
Slot: 'waist',
Defense: 1,
Price: 22,
equipped: false,
});
var buckle = createItem("Buckle", {
Type: ["wearable", "light armor"],
Slot: 'waist',
Defense: 2,
Price: 25,
equipped: false,
});
var beltedSkirt = createItem("Belted skirt", {
Type: ["wearable", "medium"],
Slot: 'waist',
Defense: 5,
Price: 70,
equipped: false,
});
var tassets = createItem("Tassets", {
Plural: "Tassets",
Type: ["wearable", "heavy armor"],
Slot: 'waist',
Defense: 9,
Price: 130,
equipped: false,
});
var dragonTassets = createItem("Dragon Scale tassets", {
Plural: "Dragon Scale tassets",
Type: ["wearable", "heavy armor", "draconic"],
Slot: 'waist',
Defense: 12,
Price: 2575,
equipped: false,
});
var greaves = createItem("Greaves", {
Plural: "Greaves",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 8,
Price: 125,
equipped: false,
});
var chausses = createItem("Chausses", {
Plural: "Chasses",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 7,
Price: 110,
equipped: false,
});
var cuisses = createItem("Cuisses", {
Plural: "Cuisses",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 8,
Price: 120,
equipped: false,
});
var leggings = createItem("Leggings", {
Plural: "Leggings",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 8,
Price: 120,
equipped: false,
});
var dragonLeggings = createItem("Dragon Scale leggings", {
Plural: "Dragon scale leggins",
Type: ["wearable", "heavy armor", "draconic"],
Slot: 'legs',
Defense: 11,
Price: 2550,
equipped: false,
});
var pants = createItem("Pants", {
Plural: "Pants",
Description: "A pair of pants made of durable fabric.",
Type: ["wearable", "medium armor"],
Slot: 'legs',
Defense: 3,
Price: 55,
equipped: false,
});
var boots = createItem("Boots", {
Plural: "Boots",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 7,
Price: 110,
equipped: false,
});
var greavesBoots = createItem("Greaves boots", {
Plural: "Greaves boots",
Type: ["wearable", "heavy armor"],
Slot: 'legs',
Defense: 8,
Price: 120,
equipped: false,
});
var sabatons = createItem("Sabatons", {
Plural: "Sabatons",
Type: ["wearable", "heavy armor"],
Slot: 'feet',
Defense: 9,
Price: 130,
equipped: false,
});
var dragonSabatons = createItem("Dragon Scale sabatons", {
Plural: "Dragon Scale sabatons",
Type: ["wearable", "heavy armor", "draconic"],
Slot: 'legs',
Defense: 12,
Price: 2500,
equipped: false,
});
var sandals = createItem("Sandals", {
Plural: "Sandals",
Type: ["wearable", "light armor"],
Slot: 'legs',
Defense: 1,
Price: 24,
equipped: false,
});
var shoes = createItem("Shoes", {
Plural: "Shoes",
Type: ["wearable", "light armor"],
Slot: 'legs',
Defense: 2,
Price: 30,
equipped: false,
});
var rustySword = createItem("Rusted sword", {
Type: ["weapon", "blunt", "melee", "1-handed", "agile"],
Slot: 'mainhand',
Damage: "1d8",
icon: "weaponIcons/RustySword.png",
Price: 20,
equipped: false,
});
var shortSword = createItem("Short sword", {
Description: "Size means little, it's how you use it.",
Type: ["weapon", "slashing", "melee", "1-handed", "agile"],
Slot: 'mainhand',
Damage: "2d4",
icon: "weaponIcons/ShortSword.png",
Price: 40,
equipped: false,
});
var fist = createItem("Fist", {
Description: "Your favorite hand to beat people.",
Type: ["weapon", "blunt", "melee", "1-handed", "bornwith", 'visceral'],
Slot: 'mainhand',
Damage: "1d4",
equipped: false,
});
var otherhand = createItem("Other hand", {
Description: "The other hand, except less usefull.",
Type: ["1-handed", "bornwith"],
Slot: 'offhand',
Defense: 1,
equipped: false,
});
var bewarHands = createItem("Bear hands", {
Plural: "Bear Hands",
Description: "Your bare bear hands... just bear with me...",
Type: ["weapon", "blunt", "melee", "1-handed", "visceral"],
Slot: 'mainhand',
Damage: "1d6",
equipped: false,
});
var draconianClaws = createItem("Draconian claws", {
Plural: "Draconian claws",
Description: "Your bare claws. Sharp enough to kill someone.",
Type: ["weapon", "slashing", "melee", "1-handed", "bornwith", 'visceral'],
Slot: 'mainhand',
Damage: "2d4",
equipped: false,
});
var sword = createItem("Sword", {
Description: "A staple, the most versatile of blades, a weapon to be used when you have no better weapon with you...",
Type: ["weapon", "slashing", "melee", "1-handed", "versatile"],
Slot: 'mainhand',
Damage: "2d8",
icon: "weaponIcons/Sword.png",
Price: 80,
equipped: false,
});
var scimitar = createItem("Scimitar", {
Type: ["weapon", "slashing", "melee", "1-handed", "versatile"],
Slot: 'mainhand',
Damage: "2d8",
icon: "weaponIcons/Scimitar.png",
Price: 80,
equipped: false,
});
var rapier = createItem("Rapier", {
Type: ["weapon", "piercing", "melee", "1-handed", "versatile", "elegant"],
Slot: 'mainhand',
Damage: "2d6",
Price: 90,
equipped: false,
});
var greatsword = createItem("Greatsword", {
Description: "Bigger is better.",
Type: ["weapon", "slashing", "melee", "2-handed", "heavy"],
Slot: 'mainhand',
Damage: "2d12",
icon: "weaponIcons/GreatSword.png",
Price: 150,
equipped:false,
});
var axe = createItem("Axe", {
Type: ["weapon", "slashing", "melee", "1-handed", "visceral"],
Slot: 'mainhand',
Damage: "3d4",
Price: 60,
equipped: false,
});
var greataxe = createItem("Great axe", {
Type: ["weapon", "slashing", "melee", "2-handed", "visceral"],
Slot: 'mainhand',
Damage: "5d4",
Price: 90,
equipped: false,
});
var shortbow = createItem("Short bow", {
Type: ["weapon", "piercing", "ranged", "2-handed", "ammunition", "precision"],
Slot: 'mainhand',
Damage: "5d4",
Cooldown: 1,
Price: 40,
equipped: false,
});
var longbow = createItem("Longbow", {
Type: ["weapon", "piercing", "ranged", "2-handed", "ammunition", "precision"],
Slot: 'mainhand',
Damage: "5d6",
Cooldown: 2,
Price: 85,
equipped: false,
});
var heavyCrossbow = createItem("Heavy crossbow", {
Type: ["weapon", "piercing", "ranged", "2-handed", "precision"],
Slot: 'mainhand',
Damage: "6d6",
Cooldown: 3,
Price: 60,
equipped: false,
});
var crossbow = createItem("Crossbow", {
Type: ["weapon", "piercing", "ranged", "1-handed", "precision"],
Slot: 'mainhand',
Damage: "4d4",
Cooldown: 2,
Price: 50,
equipped: false,
});
var dagger = createItem("Dagger", {
Type: ["weapon", "piercing", "melee", "1-handed", "agile"],
Slot: 'mainhand',
Damage: "1d4",
icon: "weaponIcons/Dagger.png",
Price: 25,
equipped: false,
});
var mace = createItem("Mace", {
Type: ["Weapon", "blunt", "melee", "1-handed", "heavy"],
Slot: 'mainhand',
Damage: "2d8",
Price: 70,
equipped: false,
});
var wand = createItem("Wand", {
Type: ["Weapon", "melee", "1-handed", "arcane", "esoteric"],
Slot: 'mainhand',
Damage: "1d4",
Price: 120,
equipped: false,
});
var arcanestaff = createItem("Arcane staff", {
Type: ["Weapon", "melee", "2-handed", "arcane", "esoteric"],
Slot: 'mainhand',
Damage: "2d4",
Price: 240,
equipped: false,
});
var flail = createItem("Flail", {
Type: ["weapon", "blunt", "melee", "1-handed", "heavy", "Imprecise"],
Slot: 'mainhand',
Damage: "3d8",
Price: 75,
equipped: false,
});
var spear = createItem("Spear", {
Type: ["weapon", "piercing", "melee", "2-handed", "precision"],
Slot: 'mainhand',
Damage: "2d6",
icon: "weaponIcons/Spear.png",
Price: 40,
equipped: false,
});
var quarterstaff = createItem("Quarterstaff", {
Description: "Big stick.",
Type: ["weapon", "blunt", "melee", "2-handed", "versatile"],
Slot: 'mainhand',
Damage: "1d8",
Price: 15,
equipped: false,
});
var warhammer = createItem("War hammer", {
Description: "Legends tell that one day, mankind will battle armed with forty thousands War hammers in a hopeless war for sovereignty of the dark and terrible cosmos.",
Type: ["weapon", "blunt", "melee", "2-handed", "heavy"],
Place: 'mainhand',
Damage: "3d8",
Price: 100,
equipped: false,
});
var halberd = createItem("Halberd", {
Type: ["weapon", "slashing", "melee", "2-handed", "heavy"],
Slot: 'mainhand',
Damage: "3d6",
icon: "weaponIcons/Halberd.png",
Price: 120,
equipped: false,
});
var shield = createItem("Shield", {
Type: ["shield", "1-handed"],
Slot: 'offhand',
Defense: 10,
Price: 75,
equipped: false,
});
var woodenShield = createItem("Wooden shield", {
Description: "The sturdiest shield the richest peasent can buy.",
Type: ["shield", "1-handed"],
Slot: 'offhand',
Defense: 5,
Price: 30,
equipped: false,
});
var towerShield = createItem("Tower shield", {
Type: ["shield", "1-handed"],
Slot: 'offhand',
Defense: 20,
Price: 140,
equipped: false,
});
var weaponhandler = createItem("Handler", {
Description: "The end of a very large weapon. Usually forgotten by many.",
Type: ["weapon", "2-handed"],
Slot: 'offhand',
Defense: 3,
Price: 0,
equipped: false,
});
State.variables.character = [""];
class character {
constructor(
Name = "Unknown",
Ancestry = "Unknown",
Specialization = "Unknown",
Origin = "Unknown",
AP = 2,
APregen = 2,
BaseDefense = 10,
level = 1,
STR = 3,
DEX = 3,
RES = 3,
INT = 3,
CHA = 3,
PER = 3,
MAXLIFE = 25,
MAXMANA = 10,
currentLife = 25,
currentMana = 10,
Athletics = 1,
Acrobatics = 1,
Stealth = 1,
SleightofHands = 1,
WorldKnowledge = 1,
MysticalKnowledge = 1,
ArcaneKnowledge = 1,
Speech = 1,
Arts = 1,
Intimidation = 1,
Insight = 1,
Awareness = 1,
availableAttribute = 1,
availableExpertise = 1,
traits = [],
skills = [],
inventory = [],
equipment = {
head: 'Empty Head',
torso: 'Empty Torso',
waist: 'Empty Waist',
legs: 'Empty Legs',
feet: 'Empty Feet',
mainhand: 'Fist',
offhand: 'Other hand'
},
statusEffects = {
poison: 0, // Turns remaining for Poison effect
bleed: 0, // Turns remaining for Bleed effect
regeneration: 0, // Turns remaining for Regeneration effect
stunned: 0, // Turns remaining for Stunned effect
confusion: 0 // Turns remaining for Confusion effect
},
additionalDefense = 0,
additionalDamage = 0,
additionalHitChance = 0
) {
this.Name = Name;
this.Ancestry = Ancestry;
this.Specialization = Specialization;
this.Origin = Origin;
this.AP = AP;
this.APregen = APregen;
this.BaseDefense = BaseDefense;
this.level = level;
this.experience = 0;
this.STR = STR;
this.DEX = DEX;
this.RES = RES;
this.INT = INT;
this.CHA = CHA;
this.PER = PER;
this.MAXLIFE = MAXLIFE,
this.MAXMANA = MAXMANA,
this.currentLife = currentLife,
this.currentMana = currentMana,
this.Athletics = Athletics;
this.Acrobatics = Acrobatics;
this.Stealth = Stealth;
this.SleightofHands = SleightofHands;
this.WorldKnowledge = WorldKnowledge;
this.MysticalKnowledge = MysticalKnowledge;
this.ArcaneKnowledge = ArcaneKnowledge;
this.Speech = Speech;
this.Arts = Arts;
this.Intimidation = Intimidation;
this.Insight = Insight;
this.Awareness = Awareness;
this.availableAttribute = availableAttribute;
this.availableExpertise = availableExpertise;
this.traits = traits;
this.skills = skills;
this.inventory = inventory;
this.equipment = equipment;
this.statusEffects = {
poison: 0, // Turns remaining for Poison effect
bleed: 0, // Turns remaining for Bleed effect
regeneration: 0, // Turns remaining for Regeneration effect
stunned: 0, // Turns remaining for Stunned effect
confusion: 0 // Turns remaining for Confusion effect
};
this.additionalDefense = additionalDefense;
this.additionalDamage = additionalDamage;
this.additionalHitChance = additionalHitChance;
this.Gold = 0;
}
addTrait(trait) {
this.traits.push(trait);
if (this.traits.includes("Natural Fighter")) {
for (const slot in this.equipment) {
const item = this.equipment[slot];
if (item && item.Type.includes("bornwith")) {
this.additionalDefense += 2;
this.additionalDamage += 2;
}
}
}
}
addSkill(skill) {
this.skills.push(skill);
}
}
window.Player = new character();
Player.Name = "Player Character";
Player.STR = 3;
Player.DEX = 3;
Player.RES = 3;
Player.INT = 3;
Player.CHA = 3;
Player.PER = 3;
Player.Ancestry = "Unknown";
Player.Specialization = "Unknown";
Player.Origin = "Unknown";
Player.AP = 2;
Player.APregen = 2;
Player.BaseDefense = 10;
Player.level = 1;
Player.MAXLIFE = 25 + (Player.RES * Player.level) + 5;
Player.MAXMANA = 10 + (Player.INT * Player.level) + 5;
Player.currentLife = 25 + (Player.RES * Player.level) + 5;
Player.currentMana = 10 + (Player.INT * Player.level) + 5;
Player.experience = 1;
Player.Athletics = 1;
Player.Acrobatics = 1;
Player.Stealth = 1;
Player.SleightofHands = 1;
Player.WorldKnowledge = 1;
Player.MysticalKnowledge = 1;
Player.ArcaneKnowledge = 1;
Player.Speech = 1;
Player.Arts = 1;
Player.Intimidation = 1;
Player.Insight = 1;
Player.Awareness = 1;
Player.availableAttribute = 15;
Player.availableExpertise = 10;
Player.traits = [];
Player.skills = [];
Player.inventory = [];
Player.equipment = {
head: "Empty Head",
torso: "Empty Torso",
waist: "Empty Waist",
legs: "Empty Legs",
feet: "Empty Feet",
mainhand: "Fist",
offhand: "other hand"
};
Player.Gold = 0;
Player.statusEffects = {
poison: 0, // Turns remaining for Poison effect
bleed: 0, // Turns remaining for Bleed effect
regeneration: 0, // Turns remaining for Regeneration effect
stunned: 0, // Turns remaining for Stunned effect
confusion: 0 // Turns remaining for Confusion effect
};
Player.additionalDefense = 0;
Player.additionalDamage = 0;
Player.additionalHitChance = 0;
State.variables.character.push(Player);
State.variables.character[1] === Player;
window.checkLevelUp = function () {
let experiencePerLevel = 50;
const expertiseIncrease = 3; // Default expertise increase
const humanExpertiseIncrease = 4; // Expertise increase for humans
const attributeIncrease = 2; // Attribute increase
const currentLevel = State.variables.character[1].level;
const nextLevel = currentLevel + 1;
const nextLevelExperienceRequired = experiencePerLevel * nextLevel;
if (State.variables.character[1].experience >= nextLevelExperienceRequired) {
State.variables.character[1].level = nextLevel;
let expertiseIncreaseAmount = expertiseIncrease;
if (State.variables.character[1].traits.includes("Unlimited Potential")) {
expertiseIncreaseAmount = humanExpertiseIncrease;
}
State.variables.character[1].availableExpertise += expertiseIncreaseAmount;
State.variables.character[1].availableAttribute += attributeIncrease;
experiencePerLevel += 200;
return {
levelUp: true,
level: nextLevel,
nextLevelExperienceRequired: nextLevelExperienceRequired,
};
} else {
return {
levelUp: false,
level: currentLevel,
nextLevelExperienceRequired: nextLevelExperienceRequired,
};
}
}
setup.updateExperienceInfo = function () {
const currentExperienceElement = document.getElementById('current-experience');
const experienceToLevelUpElement = document.getElementById('experience-to-level-up');
currentExperienceElement.textContent = State.variables.character[1].experience;
experienceToLevelUpElement.textContent = calculateExperienceForNextLevel();
}
setup.calculateExperienceForNextLevel = function () {
const experiencePerLevel = 65;
return experiencePerLevel * (State.variables.character[1].level + 1);
}
const levelUpResult = checkLevelUp();
if (levelUpResult.levelUp) {
updateExperienceInfo();
addToBattleLog(`Congratulations! You reached level ${levelUpResult.level}!`);
}
let testInstanceId = 1;
Macro.add('test', {
tags: ['onSuccess', 'onFailure'],
handler: function () {
const expertise = this.args[0];
const onSuccess = this.payload[1].contents;
const onFailure = this.payload[2].contents;
const $wrapper = $(document.createElement('span'));
let targetNumber = this.args[1];
const result = random(1, 6) + random(1, 6) + Player[expertise];
const testResult = {
id: testInstanceId,
result: result
};
State.variables[`testResult_${testInstanceId}`] = testResult;
testInstanceId++;
if (typeof State.variables.character[1][expertise] === 'number') {
if (State.variables.pact === 'Soul') {
State.variables.character[1][expertise] = Math.round(Player[expertise] / 2);
}
if (State.variables.pact === 'Fate') {
targetNumber = Math.round(targetNumber * 1.25);
result += Math.round(Player.INT / 3);
}
}
const isSuccess = result >= targetNumber;
const isFailure = result < targetNumber;
let content = "";
if (isSuccess) {
console.log(`(${result-Player[expertise]}(+${Player[expertise]}) vs ${targetNumber})`);
content = `(${result} vs ${targetNumber}) ${onSuccess}`;
} else if (isFailure) {
console.log(`(${result-Player[expertise]} (+${Player[expertise]}) vs ${targetNumber})`);
content = `(${result} vs ${targetNumber}) ${onFailure}`;
} else {
console.error(`Skill '${expertise}' not found in Player.`);
}
$wrapper
.wiki(content)
.addClass('macro-' + this.name)
.appendTo(this.output);
},
});
function addItemToInventory(itemName) {
const item = State.variables.Items[itemName];
if (item) {
const existingItem = State.variables.character[1].inventory.find((invItem) => invItem.Name === itemName);
if (existingItem) {
existingItem.count += 1;
} else {
const itemCopy = { ...item };
itemCopy.count = 1;
State.variables.character[1].inventory.push(itemCopy);
}
}
}
function removeItemFromInventory(itemName) {
const item = State.variables.Items[itemName];
if (item) {
const existingItemIndex = State.variables.character.inventory.findIndex((invItem) => invItem.Name === itemName);
if (existingItemIndex !== -1) {
State.variables.character.inventory[existingItemIndex].count -= 1;
if (State.variables.character.inventory[existingItemIndex].count === 0) {
State.variables.character.inventory.splice(existingItemIndex, 1);
}
}
}
}
addItemToInventory("Empty Head");
addItemToInventory("Empty Torso");
addItemToInventory("Empty Waist");
addItemToInventory("Empty Legs");
addItemToInventory("Empty Feet");
addItemToInventory("Fist");
addItemToInventory("Other hand");
Macro.add('addItem', {
tags: ['item'],
handler: function () {
const itemName = this.args[0];
addItemToInventory(itemName);
},
});
Macro.add('Drop', {
tags: ['item'],
handler: function () {
const itemName = this.args[0];
removeItemFromInventory(itemName);
},
});
function applyDwarfTrait(character) {
if (character.traits.includes("Re-forger") && character.Ancestry === "Dwarf") {
let additionalDefense = 0;
const slotsToCheck = [
"head",
"torso",
"waist",
"legs",
"feet",
"offhand"
];
for (const slot of slotsToCheck) {
const equippedArmor = character.equipment[slot];
if (equippedArmor && !equippedArmor.countedForDwarfTrait) {
if (equippedArmor.Type.includes("Giant forged")) {
equippedArmor.Defense += 4;
} else if (equippedArmor.Type.includes("light armor")) {
equippedArmor.Defense += 1;
} else if (equippedArmor.Type.includes("medium armor")) {
equippedArmor.Defense += 2;
} else if (equippedArmor.Type.includes("heavy armor")) {
equippedArmor.Defense += 3;
}
equippedArmor.countedForDwarfTrait = true;
}
}
}
}
Macro.add("equipItem", {
handler: function () {
const itemName = this.args[0];
const character = State.variables.character[1];
const itemInstance = character.inventory.find((item) => item.Name === itemName);
if (itemInstance) {
if (itemInstance.Slot) {
character.equipment[itemInstance.Slot] = itemInstance;
if (itemInstance.mainhand && itemInstance.mainhand.Type) {
character.equipment.offhand = State.variables.Items.Handler;
}
character.inventory.splice(
character.inventory.indexOf(itemInstance),
1
);
itemInstance.equipped = true;
console.log(`Equipped: ${itemInstance.Name}. The item has left your inventory.`);
applyDwarfTrait(character);
updateGearDisplay();
} else {
console.error(`Cannot equip: ${itemInstance.Name} because it has no slot.`);
}
} else {
console.error(`Item not found: ${itemName}`);
}
},
});
window.updateGearDisplay = function () {
var gearContainer = document.getElementById("gear-container");
if (gearContainer) {
var gearSpan = document.getElementById("gear");
var newGearSpan = document.createElement("span");
newGearSpan.id = "gear";
newGearSpan.innerHTML = getGearHTML(State.variables.character[1]);
gearContainer.replaceChild(newGearSpan, gearSpan);
}
}
function getGearHTML(character) {
var gearHTML = `
<p><b>Head:</b> ${character.equipment.head.Name} ${
character.equipment.head.Name !== 'Empty Head'
? `<button onclick='unequipItem("head")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.head.Description}</i></p>
<p><b>Torso:</b> ${character.equipment.torso.Name} ${
character.equipment.torso.Name !== 'Empty Torso'
? `<button onclick='unequipItem("torso")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.torso.Description}</i></p>
<p><b>Waist:</b> ${character.equipment.waist.Name} ${
character.equipment.waist.Name !== 'Empty Waist'
? `<button onclick='unequipItem("waist")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.waist.Description}</i></p>
<p><b>Legs:</b> ${character.equipment.legs.Name} ${
character.equipment.legs.Name !== 'Empty Legs'
? `<button onclick='unequipItem("legs")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.legs.Description}</i></p>
<p><b>Feet:</b> ${character.equipment.feet.Name} ${
character.equipment.feet.Name !== 'Empty Feet'
? `<button onclick='unequipItem("feet")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.feet.Description}</i></p>
<p><b>Main hand:</b> ${character.equipment.mainhand.Name} ${
character.equipment.mainhand.Name !== 'Fist' &&
character.equipment.mainhand.Name !== 'Draconian claws'
? `<button onclick='unequipItem("mainhand")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.mainhand.Description}</i></p>
<p><b>Offhand:</b> ${character.equipment.offhand.Name} ${
character.equipment.offhand.Name !== 'Other hand' &&
character.equipment.offhand.Name !== 'Handler'
? `<button onclick='unequipItem("offhand")'>Unequip</button>`
: ''
}</p>
<p><i>${character.equipment.offhand.Description}</i></p>
`;
return gearHTML;
}
window.updateInventoryDisplay = function () {
var inventoryContainer = document.getElementById("inventory-container");
if (inventoryContainer) {
var inventorySpan = document.getElementById("inventory");
var newInventorySpan = document.createElement("span");
newInventorySpan.id = "inventory";
newInventorySpan.innerHTML = getInventoryHTML(State.variables.character[1]);
inventoryContainer.replaceChild(newInventorySpan, inventorySpan);
}
}
function getInventoryHTML(character) {
var inventoryHTML = `
<p><b>Inventory:</b></p>
<ul>
`;
for (var i = 0; i < character.inventory.length; i++) {
var item = character.inventory[i];
inventoryHTML += `
<li>${item.Name} - x ${item.count}</li>
`;
}
inventoryHTML += `
</ul>
`;
return inventoryHTML;
}
window.unequipItem = function (slot) {
const equipment = State.variables.character[1].equipment;
if (equipment[slot]) {
const item = equipment[slot];
if (item) {
if (item.Type.includes("2-handed")) {
if (equipment["offhand"] && equipment["offhand"].Name === "Handler") {
equipment["offhand"] = null;
}
equipment["mainhand"] = null;
addItemToInventory(item.Name);
console.log(`${item.Name} was unequipped and returned to your inventory.`);
equipment["mainhand"] = State.variables.Items["Fist"];
equipment["offhand"] = State.variables.Items["Other hand"];
updateGearDisplay();
} else {
// Create a copy of the item to prevent it from becoming the macro reference
const itemCopy = Object.assign({}, item);
// Unequip the item in the specified slot
State.variables.character[1].equipment[slot] = null;
if (item.Name === "Handler") {
updateGearDisplay();
console.log(`${item.Name} was unequipped.`);
} else {
addItemToInventory(item.Name);
console.log(`${item.Name} was unequipped and returned to your inventory.`);
}
item.equipped = false;
switch (slot) {
case "head":
equipment["head"] = State.variables.Items["Empty Head"];
break;
case "torso":
equipment["torso"] = State.variables.Items["Empty Torso"];
break;
case "waist":
equipment["waist"] = State.variables.Items["Empty Waist"];
break;
case "legs":
equipment["legs"] = State.variables.Items["Empty Legs"];
break;
case "feet":
equipment["feet"] = State.variables.Items["Empty Feet"];
break;
case "mainhand":
if (State.variables.character[1].Ancestry === "Draconian") {
equipment["mainhand"] = State.variables.Items["Draconian claws"];
} else {
equipment["mainhand"] = State.variables.Items["Fist"];
}
break;
case "offhand":
equipment["offhand"] = State.variables.Items["other hand"];
break;
default:
break;
}
updateGearDisplay();
}
}
}
};
//////////////
//Enemy Data//
//////////////
class Enemy {
constructor(Name, Ancestry, Specialization, AP, APregen, BaseDefense, Danger, STR, DEX, RES, INT, CHA, PER, traits, skills, equipment, statusEffects, additionalDefense, additionalDamage, additionalHitChance, Gold) {
this.Name = Name;
this.Ancestry = Ancestry;
this.Specialization = Specialization;
this.AP = AP;
this.APregen = APregen;
this.BaseDefense = BaseDefense;
this.level = Danger;
this.STR = STR;
this.DEX = DEX;
this.RES = RES;
this.INT = INT;
this.CHA = CHA;
this.PER = PER;
this.traits = traits;
this.skills = skills;
this.equipment = equipment;
this.statusEffects = {
poison: 0, // Turns remaining for Poison effect
bleed: 0, // Turns remaining for Bleed effect
regeneration: 0, // Turns remaining for Regeneration effect
stunned: 0, // Turns remaining for Stunned effect
confusion: 0 // Turns remaining for Confusion effect
};
this.additionalDefense = additionalDefense;
this.additionalDamage = additionalDamage;
this.additionalHitChance = additionalHitChance;
this.Gold = 0;
}
}
//Life = 10 + RES * Danger
//Mana = 5 + INT * Danger
//Enemy traits
//opportunistic: Attacks back when opponent misses an strike
//follower; While alone, halved AP regen
//though: WHen dropped to 0 health, drop to 1, instead, can only happen once per fight
//sneaky: 30% of Chance of becoming intangible for 1 turn at the end of its turn.
//ravenous: When below 50% of its health gain +5 additionalDamage.
//boss: This is a dangerous enemy.
//Idomitable: Status effects are halved when applied to this enemy.
const Ruffian = new Enemy();
Ruffian.Name = "Ruffian";
Ruffian.Ancestry = "Human";
Ruffian.Specialization = "Bandit";
Ruffian.AP = 1;
Ruffian.APregen = 2;
Ruffian.BaseDefense = 10;
Ruffian.level = 1;
Ruffian.STR = 6;
Ruffian.RES = 4;
Ruffian.DEX = 9;
Ruffian.INT = 3;
Ruffian.CHA = 5;
Ruffian.PER = 6;
Ruffian.AP = 0;
Ruffian.level = 1;
Ruffian.APregen = 2;
Ruffian.traits = ["opportunistic", "follower"];
Ruffian.skills = [];
Ruffian.equipment = {
head: State.variables.Items.Hood,
torso: State.variables.Items['Leather armor'],
waist: State.variables.Items['Empty Waist'],
legs: State.variables.Items.Pants,
feet: State.variables.Items.Shoes,
mainhand: State.variables.Items.Dagger,
offhand: State.variables.Items['Other hand'],
};
Ruffian.additionalDefense = 0;
Ruffian.additionalDamage = 0;
Ruffian.additionalHitChance = 0;
Ruffian.MAXLIFE = 14;
Ruffian.MAXMANA = 8;
Ruffian.currentLife = Ruffian.MAXLIFE;
Ruffian.currentMana = Ruffian.currentMana;
State.variables.character.push(Ruffian);
// Create and register Hired Muscle instance
const hiredMuscle = new Enemy();
hiredMuscle.Name = "Hired Muscle";
hiredMuscle.Ancestry = "Human";
hiredMuscle.Specialization = "Bandit";
hiredMuscle.AP = 2;
hiredMuscle.APregen = 2;
hiredMuscle.BaseDefense = 15;
hiredMuscle.level = 3;
hiredMuscle.STR = 8;
hiredMuscle.RES = 8;
hiredMuscle.DEX = 9;
hiredMuscle.INT = 3;
hiredMuscle.CHA = 4;
hiredMuscle.PER = 6;
hiredMuscle.traits = ["opportunistic", "though"];
hiredMuscle.skills = [];
hiredMuscle.equipment = {
head: State.variables.Items.Hood,
torso: State.variables.Items['Leather armor'],
waist: State.variables.Items.Belt,
legs: State.variables.Items.Pants,
feet: State.variables.Items.Shoes,
mainhand: State.variables.Items['Short sword'],
offhand: State.variables.Items['Other hand'],
};
hiredMuscle.additionalDefense = 0;
hiredMuscle.additionalDamage = 0;
hiredMuscle.additionalHitChance = 0;
hiredMuscle.currentLife = 34;
hiredMuscle.currentMana = 18;
hiredMuscle.MAXLIFE = 34;
hiredMuscle.MAXMANA = 18;
State.variables.character.push(hiredMuscle);
// Create and register Hired Spellcaster instance
const hiredSpellcaster = new Enemy();
hiredSpellcaster.Name = "Hired Spellcaster";
hiredSpellcaster.Ancestry = "Human";
hiredSpellcaster.Specialization = "Bandit";
hiredSpellcaster.AP = 2;
hiredSpellcaster.APregen = 2;
hiredSpellcaster.BaseDefense = 15;
hiredSpellcaster.level = 3;
hiredSpellcaster.MAXLIFE = 6;
hiredSpellcaster.MAXMANA = 15;
hiredSpellcaster.STR = 3;
hiredSpellcaster.RES = 4;
hiredSpellcaster.DEX = 9;
hiredSpellcaster.INT = 8;
hiredSpellcaster.CHA = 5;
hiredSpellcaster.PER = 8;
hiredSpellcaster.traits = ["opportunistic", "follower"];
hiredSpellcaster.skills = [];
hiredSpellcaster.equipment = {
head: State.variables.Items.circlet,
torso: State.variables.Items['leather armor'],
waist: State.variables.Items['empty waist'],
legs: State.variables.Items.pants,
feet: State.variables.Items.shoes,
mainhand: State.variables.Items.quaterstaff,
offhand: State.variables.Items.quaterstaff,
};
hiredSpellcaster.additionalDefense = 0;
hiredSpellcaster.additionalDamage = 0;
hiredSpellcaster.additionalHitChance = 0;
hiredSpellcaster.currentLife = 22;
hiredSpellcaster.currentMana = 29;
hiredSpellcaster.MAXLIFE = 22;
hiredSpellcaster.MAXMANA = 29;
State.variables.character.push(hiredSpellcaster);
// Create and register Bandit Leader instance
const banditLeader = new Enemy();
banditLeader.Name = "Bandit Leader";
banditLeader.Ancestry = "Human";
banditLeader.Specialization = "Bandit";
banditLeader.AP = 5;
banditLeader.APregen = 3;
banditLeader.BaseDefense = 15;
banditLeader.level = 5;
banditLeader.MAXLIFE = 30;
banditLeader.MAXMANA = 12;
banditLeader.STR = 14;
banditLeader.RES = 12;
banditLeader.DEX = 10;
banditLeader.INT = 6;
banditLeader.CHA = 8;
banditLeader.PER = 6;
banditLeader.traits = ["opportunistic", "boss"];
banditLeader.skills = [];
banditLeader.equipment = {
head: State.variables.Items.hood,
torso: State.variables.Items['leather armor'],
waist: State.variables.Items.belt,
legs: State.variables.Items.pants,
feet: State.variables.Items.shoes,
mainhand: State.variables.Items['short sword'],
offhand: State.variables.Items.fist,
};
banditLeader.additionalDefense = 0;
banditLeader.additionalDamage = 0;
banditLeader.additionalHitChance = 0;
banditLeader.currentLife = 70;
banditLeader.currentMana = 35;
banditLeader.MAXLIFE = 70;
banditLeader.MAXMANA = 35;
State.variables.character.push(banditLeader);
//King of Thousand Hanbds (Badit Specialization, Human Ancestry, Boss)
//Scalebound Defenser (Draconian Ancestry)
//Scalebound Hunter (Draconian Ancestry)
//Scalebound Ravager (Draconian Ancestry)
//Dragon
//Ogre (Ogroid Ancestry)
//Orc (Ogroid Ancestry)
//Goblin (Ogroid Ancestry)
//Hobgoblin (Ogroid Ancestry)
//Afflicted Elf (Elf Ancestry)
//Other Monsters
const enemyInstances = State.variables.enemyInstances;
const enemyTypes = {
Ruffian: Ruffian, // Register the Ruffian instance
HiredMuscle: hiredMuscle,
HiredSpellcaster: hiredSpellcaster,
BanditLeader: banditLeader,
// Add other enemy types and instances as needed
};
function createEnemyInstance(type) {
// Check if the enemy type is registered
const enemyInstance = enemyTypes[type];
if (!enemyInstance) {
console.error(`Unknown enemy type: ${type}`);
return null;
}
// Create a new enemy instance based on the provided type
const enemy = new Enemy();
Object.assign(enemy, enemyInstance); // Copy properties from enemyInstance to the new enemy
return enemy;
}
function addEnemiesToBattle(enemyType, numberOfEnemies) {
for (let i = 0; i < numberOfEnemies; i++) {
const enemy = createEnemyInstance(enemyType);
if (enemy) {
State.variables.enemyInstances.push(enemy);
// Log the addition of the enemy
console.log(`A ${enemy.Name} enters the fray of battle.`);
}
}
}
Macro.add('battle', {
tags: null,
handler: function () {
const enemyType = this.args[0]; // Type of enemy to create
const numberOfEnemies = this.args[1]; // Number of enemies to create
if (!enemyType || !numberOfEnemies || numberOfEnemies <= 0) {
return this.error('Invalid arguments. Usage: <<Battle enemyType numberOfEnemies>>');
}
addEnemiesToBattle(enemyType, numberOfEnemies);
},
});
/////////////////////
//Skills and Status//
/////////////////////
//Status
//Poison (x), an character that is poisoned takes (x) of damage at the start of their turn, and looses the status
//Bleed (x), an character that is bledding looses 5% of their Lifeblood at the start of their turn, the effect lasts for (x) turns.
//Regeneration (X) an character that is regenerating, heals by (x) and reduce the value by 1, the effect lasts for (x) turns
//Stunned (x) an character that is stunned cannot attack for (x) turns.
//Confusion (x) an character that is confused cannot use skills for (x) turns.
State.variables.skill = [];
class Skill {
constructor(name, options) {
this.name = name || "Unnamed Skill";
this.categories = options.categories;
this.description = options.description || "yet to add";
this.duration = options.duration || 0;
this.APcost = options.APcost || 1;
this.Manacost = options.Manacost || 1;
this.cooldown = options.cooldown || 1;
this.inCooldown = 0;
this.buff = options.buff || [];
this.debuff = options.debuff || [];
this.onUse = options.onUse || null;
this.learned = options.learned || false;
// Add other skill-specific properties as needed
}
use(entity) {
if (this.cooldown <= 0) {
// Execute skill logic
this.onUse(entity);
// Set cooldown separately for each entity
this.cooldown = entity === player ? this.defaultCooldown : this.defaultCooldown * 2; // Example: Player's cooldown is default, enemy's cooldown is double
return true; // Skill used successfully
} else {
return false; // Skill is on cooldown
}
}
reduceCooldown() {
if (this.cooldown > 0) {
this.cooldown--;
}
}
}
State.variables.character[1].skills = [];
window.addSkill = function (name, options) {
const newSkill = new Skill(name, options);
State.variables.character[1].skills.push(newSkill);
}
function createSkill(name, options) {
options.name = name;
options.description = options.description;
options.learned = options.learned;
State.variables.skill.push(new Skill(name, options));
}
//Vanguard
var bash = createSkill("Bash", {
description: "Apply Stun to an enemy. If you are wielding a shield, also damage the target by its defense bonus.",
categories: ["Technique", "Melee", "Offensive"],
APcost: 1,
learned: false,
cooldown: 1,
onUse: function(attacker, target) {
// Apply Stun to the target
target.statusEffects.stunned = 1;
// If attacker is wielding a shield, damage the target by its defense bonus
if (attacker.equipment.offhand && attacker.equipment.offhand.Type.includes("Shield")) {
let damage = attacker.equipment.offhand.Defense;
target.currentLife -= damage;
addToBattleLog(`${attacker.Name} bashed ${target.Name}, dealing ${damage} damage.`);
}
// Log skill usage
addToBattleLog(`${attacker.Name} used Bash on ${target.Name}.`);
// Set skill in cooldown
this.inCooldown = this.cooldown;
}
});
//Shields up: Increase your defense by 5, If you are wielding a Shield, increase it by 10, instead. this bonus last until the end of the battle. (Can only be used once per battle)
var shieldsUp = createSkill("Shields Up", {
description: "Increase your defense by 5. If you are wielding a Shield, increase it by 10, instead. This bonus lasts until the end of the battle. (Can only be used once per battle)",
categories: ["Technique", "Melee", "Defensive"],
APcost: 1,
learned: false,
cooldown: 20,
onUse: function(attacker) {
// Check if the skill is not already in cooldown
if (this.inCooldown === 0 && !shieldUpused) {
// Increase defense based on shield presence
let defenseBonus = 5;
if (attacker.equipment.offhand && attacker.equipment.offhand.Type.includes("Shield")) {
defenseBonus = 10;
}
// Apply defense bonus
attacker.additionalDefense += defenseBonus;
shieldUpused === true;
// Log skill usage
addToBattleLog(`${attacker.Name} used Shields Up, increasing defense by ${defenseBonus}.`);
// Set skill in cooldown
this.inCooldown = this.cooldown;
} else {
addToBattleLog("Shields Up can only be used once per battle.");
}
}
});
//Archer
var quickShot = createSkill("Quick Shot", {
description: "With haste, you load and release an bolt in a single action",
categories: ["Technique", "Ranged", "Offensive"],
duration: 0,
APcost: 1,
cooldown: 3,
learned: false,
inCooldown: 0,
learned: false,
onUse: function (attacker, target, slot) {
if (quickShot.inCooldown === 0) {
attacker.additionalHitChance -= 15.
let attackHits = calculateHitChance(attacker, target);
attacker.AP -= 1;
quickShot.inCooldown = quickShot.cooldown;
if (attackHits > 0) {
let damage = calculateDamage(attacker, target, slot);
target.currentLife -= damage;
updatePlayerDetails();
updateEnemyDetails();
console.log(`You managed to hit your target! You maimed them for ${damage} damage!`);
} else {
console.log(`You missed, perhaps you should work on your aiming next time.`);
}
attacker.additionalHitChance += 15.
} else {
console.log(`${attacker.name} must learn patience. This skill is on cooldown for ${quickShot.inCooldown} turns remaining.`);
}
}
})
var tripleShot = createSkill("Triple Shot", {
description: "Make three ranged weapon attacks against a single enemy.",
categories: ["Technique", "Ranged", "Offensive"],
APcost: 2,
learned: false,
cooldown: 5,
onUse: function(attacker, target, slot) {
if (attacker.AP >= this.APCost) {
for (let i = 0; i < 3; i++) {
if (calculateHitChance(attacker, target)) {
let damage = calculateDamage(attacker, target, slot);
target.currentLife -= damage;
addToBattleLog(`${attacker.Name} used Triple Shot, hitting ${target.Name} for ${damage} damage.`);
} else {
addToBattleLog(`${attacker.Name} used Triple Shot but missed ${target.Name}.`);
}
}
attacker.AP -= this.APCost;
this.inCooldown = this.cooldown;
} else {
addToBattleLog(`${attacker.Name} doesn't have enough Action Points to use Triple Shot.`);
}
}
});
// Arrow Barrage: For each enemy, make a ranged attack against it.
var arrowBarrage = createSkill("Arrow Barrage", {
description: "For each enemy, make a ranged attack against it.",
categories: ["Technique", "Ranged", "Offensive"],
APcost: 3,
learned: false,
cooldown: 8,
onUse: function(attacker) {
if (attacker.AP >= this.APCost) {
for (let i = 0; i < enemyInstances.length; i++) {
let target = enemyInstances[i];
if (calculateHitChance(attacker, target)) {
let damage = calculateDamage(attacker, target, attacker.equipment.mainhand);
target.currentLife -= damage;
addToBattleLog(`${attacker.Name} used Arrow Barrage, hitting ${target.Name} for ${damage} damage.`);
} else {
addToBattleLog(`${attacker.Name} used Arrow Barrage but missed ${target.Name}.`);
}
}
attacker.AP -= this.APCost;
this.inCooldown = this.cooldown;
} else {
addToBattleLog(`${attacker.Name} doesn't have enough Action Points to use Arrow Barrage.`);
}
}
});
//Duelist
var feint = createSkill("Feint", {
description: "A maneuver to trick the enemies into their defeat: Increase your defense by 10 and activate Riposte.",
categories: ["Technique", "Melee", "Defensive"],
buff: ["Defense"],
duration: 2,
APcost: 1,
cooldown: 3,
inCooldown: 0,
learned: false,
onUse: function (attacker) {
if (skill.feint.inCooldown === 0) {
if (attacker.AP >= feint.APcost) {
attacker.additionalDefense += 10;
attacker.riposteActive = true;
attacker.feintDuration = 2;
attacker.AP -= 1;
feint.inCooldown = feint.cooldown
}
} else {
console.log(`${attacker.name} must learn patience. This skill is on cooldown for ${skill.feint.inCooldown} turns remaining.`);
}
}
});
var enGarde = createSkill("En Garde!", {
description: "Make a weapon attack with a melee weapon, then gain Riposte.",
categories: ["Technique", "Melee", "Offensive"],
APcost: 2,
learned: false,
cooldown: 2,
onUse: function(attacker, target, slot) {
if (attacker.AP >= this.APCost) {
if (calculateHitChance(attacker, target)) {
let damage = calculateDamage(attacker, target, slot);
target.currentLife -= damage;
addToBattleLog(`${attacker.Name} used En Garde!, hitting ${target.Name} for ${damage} damage.`);
// Apply Riposte
attacker.riposteActive = true;
addToBattleLog(`${attacker.Name} gained Riposte.`);
} else {
addToBattleLog(`${attacker.Name} used En Garde! but missed ${target.Name}.`);
}
attacker.AP -= this.APCost;
this.inCooldown = this.cooldown;
} else {
addToBattleLog(`${attacker.Name} doesn't have enough Action Points to use En Garde!.`);
}
}
});
// Disengage: Expend all your Action Points, for each you've expended, increase your Defense by 15 for 1 turn.
var disengage = createSkill("Disengage", {
description: "Expend all your Action Points, for each you've expended, increase your Defense by 15 for 1 turn.",
categories: ["Technique", "Melee", "Defensive"],
APcost: 0,
learned: false,
cooldown: 3,
onUse: function(attacker) {
if (attacker.AP > 0) {
let defenseBonus = attacker.AP * 15;
attacker.additionalDefense += defenseBonus;
addToBattleLog(`${attacker.Name} used Disengage, increasing thwie Defense by ${defenseBonus} for 1 turn.`);
// Consume all Action Points
attacker.AP = 0;
this.inCooldown = this.cooldown;
} else {
addToBattleLog(`${attacker.Name} doesn't have any Action Points to use Disengage.`);
}
}
});
//Assassin
var applyVenom = createSkill("Apply Venom", {
description: "Your next weapon attack will apply Venom(5). If it's a ranged weapon, also reduce its cooldown by 1. At level 5, increase the number of improved attacks by 1. At level 10, increase to 3.",
categories: ["Technique", "Offensive"],
APCost: 1,
cooldown: 5,
onUse: function(attacker) {
attacker.statusEffects.improvedAttacks = 1;
if (attacker.level >= 5) {
attacker.statusEffects.improvedAttacks = 2;
}
if (attacker.level >= 10) {
attacker.statusEffects.improvedAttacks = 3;
}
if (attacker.equipment.mainhand.Type.includes("Ranged")) {
attacker.equipment.mainhand.cooldown--;
}
addToBattleLog(`${attacker.Name} applied Venom to their next attack.`);
}
});
var poisonousBomb = createSkill("Poisonous Bomb", {
description: "Apply Venom(10) to an enemy and Venom(5) to all other enemies.",
categories: ["Technique", "Area", "Offensive"],
APCost: 2,
cooldown: 8,
onUse: function(attacker, enemies) {
enemies.forEach(function(enemy) {
if (enemy !== target) {
enemy.statusEffects.applyVenom = {
duration: 1,
potency: 5
};
} else {
enemy.statusEffects.applyVenom = {
duration: 1,
potency: 10
};
}
});
addToBattleLog(`${attacker.Name} used Poisonous Bomb, applying Venom to enemies.`);
}
});
var assassinate = createSkill("Assassinate", {
description: "Kill an enemy under 30% of its maximum life. You may target bosses if their Lifeblood is below 10%.",
categories: ["Technique", "Offensive"],
APCost: 3,
cooldown: 12,
onUse: function(attacker, target) {
if (target.currentLife <= 0) {
addToBattleLog(`${target.Name} is already defeated.`);
return;
}
var healthThreshold = 0.3;
var bossHealthThreshold = 0.1;
if (target.isBoss && target.currentLife / target.MAXLIFE <= bossHealthThreshold) {
target.currentLife = 0;
addToBattleLog(`${attacker.Name} assassinated ${target.Name}!`);
} else if (target.currentLife / target.MAXLIFE <= healthThreshold) {
target.currentLife = 0;
addToBattleLog(`${attacker.Name} assassinated ${target.Name}!`);
} else {
addToBattleLog(`Assassinate failed. ${target.Name} has too much health.`);
}
}
});
//Thief
//Spy
//Juggernaut
//Berseker
var warcry = createSkill("War Cry", {
description: "Increase the damage dealt of every combatant (self and enemies) by 5 for 5 turns.",
categories: ["Technique", "General", "Buff"],
APCost: 1,
cooldown: 10,
onUse: function(attacker) {
// Apply Warcry effect to self
attacker.statusEffects.warcryDuration = 5;
attacker.statusEffects.additionalDamage = 5;
for (let enemy of enemyInstances) {
enemy.statusEffects.warcryDuration = 5;
enemy.additionalDamage += 5;
}
addToBattleLog(`${attacker.Name} used Warcry, increasing the damage of everyone by 5 for 5 turns.`);
}
});
var cleave = createSkill("Cleave", {
description: "Strike an enemy, if it hits, also damage its adjacent enemies by half of the damage.",
categories: ["Technique", "Melee", "Offensive"],
APCost: 2,
cooldown: 8,
onUse: function(attacker, target) {
let attackHits = calculateHitChance(attacker, target);
if (attackHits) {
let damage = calculateDamage(attacker, target, slot) + attacker.additionalDamage;
target.currentLife -= damage;
if (target.currentLife < 0) {
target.currentLife = 0;
checkGameOver();
}
// Damage adjacent enemies
let adjacentTargets = [enemyInstances[i - 1], enemyInstances[i + 1]];
for (let adjacentTarget of adjacentTargets) {
if (adjacentTarget) {
let adjacentDamage = Math.round(damage / 2);
adjacentTarget.currentLife -= adjacentDamage;
if (adjacentTarget.currentLife < 0) {
adjacentTarget.currentLife = 0;
checkGameOver();
}
}
}
addToBattleLog(`${attacker.Name} cleaved through ${target.Name} and damaged adjacent enemies.`);
updateEnemyDetails(target);
checkGameOver();
} else {
addToBattleLog(`${attacker.Name} missed ${target.Name}.`);
}
attacker.AP -= this.APCost;
updatePlayerDetails(attacker);
}
});
var feelThePain = createSkill("Feel the Pain", {
description: "Damage self by 10, gain regeneration (10).",
categories: ["Technique", "Self-Damage", "Buff"],
APCost: 0,
cooldown: 15,
onUse: function(attacker) {
attacker.currentLife -= 10;
if (attacker.currentLife < 0) {
attacker.currentLife = 0;
checkGameOver();
}
attacker.statusEffects.regeneration = 10;
addToBattleLog(`${attacker.Name} felt the pain, damaging themselves by 10 and gaining regeneration for 10 turns.`);
}
});
//Feral
var adrenalineRush = createSkill("Adrenaline Rush", {
description: "Increase your Action Points amount by 2 at the start of your next turn.",
categories: ["Technique", "Buff"],
APCost: 1,
cooldown: 8,
onUse: function(attacker) {
// Apply Adrenaline Rush effect
attacker.statusEffects.adrenalineRushDuration = 1;
addToBattleLog(`${attacker.Name} used Adrenaline Rush, increasing Action Points by 2 at the start of the next turn.`);
}
});
var mutilate = createSkill("Mutilate", {
description: "Make a weapon attack against a random enemy 5 times.",
categories: ["Technique", "Melee", "Offensive"],
APCost: 3,
cooldown: 12,
onUse: function(attacker) {
for (let i = 0; i < 5; i++) {
// Select a random enemy target
let randomIndex = Math.floor(Math.random() * enemyInstances.length);
let target = enemyInstances[randomIndex];
// Perform an attack against the selected target
triggerAttack(attacker, target, "mainhand");
}
addToBattleLog(`${attacker.Name} used Mutilate, attacking 5 random enemies.`);
}
});
//Mage
var freeze = createSkill("Freeze", {
description: "Deal 1d8 damage to a single enemy and reduce their defense by 5.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.08,
onUse: function(attacker, target) {
var damage = rollDice(1, 8);
target.currentLife -= damage;
target.Defense -= 5;
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Freeze, dealing ${damage} damage and reducing ${target.Name}'s defense by 5.`);
}
});
var blizzard = createSkill("Blizzard", {
description: "Deal 1d8 damage to all enemies and reduce their defense by 5.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.08,
onUse: function(attacker) {
var damage = rollDice(1, 8);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
for (let i = 0; i < enemyInstances.length; i++) {
enemyInstances[i].currentLife -= damage;
enemyInstances[i].Defense -= 5;
}
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Blizzard, dealing ${damage} damage and reducing enemies' defense by 5.`);
}
});
var fireBolt = createSkill("Fire Bolt", {
description: "Deal 1d12 damage to a single enemy.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 2,
cooldown: 4,
Manacost: 0.1,
onUse: function(attacker, target) {
var damage = rollDice(1, 12);
target.currentLife -= damage;
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Fire Bolt, dealing ${damage} damage to ${target.Name}.`);
}
});
var inferno = createSkill("Inferno", {
description: "Deal 1d12 damage to all enemies.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 2,
cooldown: 4,
Manacost: 0.1,
onUse: function(attacker) {
var damage = rollDice(1, 12);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
for (let i = 0; i < enemyInstances.length; i++) {
enemyInstances[i].currentLife -= damage;
}
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Inferno, dealing ${damage} damage to all enemies.`);
}
});
var lightningStrike = createSkill("Lightning Strike", {
description: "Apply stun and deal 1d6 damage to a single enemy.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.06,
onUse: function(attacker, target) {
var damage = rollDice(1, 6);
target.currentLife -= damage;
target.statusEffects.stunned = 1;
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Lightning Strike, dealing ${damage} damage and stunning ${target.Name}.`);
}
});
var storm = createSkill("Storm", {
description: "Apply stun and deal 1d6 damage to all enemies.",
categories: ["Spell", "Elemental", "Offensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.06,
onUse: function(attacker) {
var damage = rollDice(1, 6);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
for (let i = 0; i < enemyInstances.length; i++) {
enemyInstances[i].currentLife -= damage;
enemyInstances[i].statusEffects.stunned = 1;
}
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Storm, dealing ${damage} damage and stunning all enemies.`);
}
});
//Wizard
var dazzle = createSkill("Dazzle", {
description: "Apply confusion to an enemy.",
categories: ["Spell", "Arcane", "Control"],
APcost: 1,
cooldown: 2,
Manacost: 0.05,
onUse: function(attacker, target) {
target.statusEffects.confusion = 1;
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Dazzle, applying confusion to ${target.Name}.`);
}
});
var dazzleAll = createSkill("Dazzle All", {
description: "Apply confusion to all enemies.",
categories: ["Spell", "Arcane", "Control"],
APcost: 1,
cooldown: 2,
Manacost: 0.1,
onUse: function(attacker) {
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
for (let i = 0; i < enemyInstances.length; i++) {
enemyInstances[i].statusEffects.confusion = 1;
}
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Dazzle All, applying confusion to all enemies.`);
}
});
var arcaneBeam = createSkill("Arcane Beam", {
description: "Deal damage equal to your Intelligence to an enemy. If it kills the target, deal remaining damage to a random enemy.",
categories: ["Spell", "Arcane", "Offensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.15,
onUse: function(attacker, target) {
var damage = attacker.Intelligence;
if (attacker.level >= 5) {
damage *= 1.5;
}
if (attacker.level >= 10) {
damage *= 2;
}
if (attacker.level >= 15) {
damage *= 2.5;
}
target.currentLife -= damage;
if (target.currentLife < 0) {
var remainingDamage = Math.abs(target.currentLife);
var randomEnemyIndex = Math.floor(Math.random() * enemyInstances.length);
enemyInstances[randomEnemyIndex].currentLife -= remainingDamage;
addToBattleLog(`${attacker.Name} used Arcane Beam, dealing ${damage} damage to ${target.Name} and ${remainingDamage} damage to ${enemyInstances[randomEnemyIndex].Name}.`);
} else {
addToBattleLog(`${attacker.Name} used Arcane Beam, dealing ${damage} damage to ${target.Name}.`);
}
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var arcaneArmor = createSkill("Arcane Armor", {
description: "Increase your defense by your Intelligence for this turn.",
categories: ["Spell", "Arcane", "Defensive"],
APcost: 1,
cooldown: 3,
Manacost: 0.1,
onUse: function(attacker) {
var defenseBonus = attacker.Intelligence;
if (attacker.level >= 5) {
defenseBonus *= 1.5;
}
if (attacker.level >= 10) {
defenseBonus *= 2;
}
if (attacker.level >= 15) {
defenseBonus *= 2.5;
}
attacker.additionalDefense += defenseBonus;
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
addToBattleLog(`${attacker.Name} used Arcane Armor, increasing defense by ${defenseBonus}.`);
}
});
//Warlock
var soulSyphon = createSkill("Soul Syphon", {
description: "Deal damage to an enemy and heal yourself.",
categories: ["Spell", "Necromancy", "Offensive", "Healing"],
APcost: 1,
cooldown: 3,
Manacost: 0.1,
onUse: function(attacker, target) {
var damageDice = 8;
var healingDice = 4;
if (attacker.level >= 5) {
damageDice = 10;
healingDice = 6;
}
if (attacker.level >= 10) {
damageDice = 12;
healingDice = 8;
}
var damage = rollDice(damageDice);
var healing = rollDice(healingDice);
target.currentLife -= damage;
attacker.currentLife += healing;
addToBattleLog(`${attacker.Name} used Soul Syphon, dealing ${damage} damage to ${target.Name} and healing for ${healing} life.`);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var infuseWeapon = createSkill("Infuse Weapon", {
description: "Add extra damage to your attacks.",
categories: ["Spell", "Buff", "Defensive"],
APcost: 1,
cooldown: 1,
Manacost: 0.05,
onUse: function(attacker) {
var damageDice = 4;
if (attacker.statusEffects.infuseWeaponDice === 6) {
damageDice = 6;
} else if (attacker.statusEffects.infuseWeaponDice === 8) {
damageDice = 8;
} else if (attacker.statusEffects.infuseWeaponDice === 10) {
damageDice = 10;
} else if (attacker.statusEffects.infuseWeaponDice === 12) {
damageDice = 12;
}
attacker.additionalDamage += rollDice(damageDice);
attacker.statusEffects.infuseWeaponDice = damageDice;
addToBattleLog(`${attacker.Name} infused their weapon, adding extra ${damageDice} damage to their attacks.`);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
})
//Shadow Strike
//Summons are a helpers to the character, they act at the start of your turn, each do a special feature and last until a new summon is called.
var elementalSummon = createSkill("Summon: Elemental", {
description: "Summons a Elemental to unleash its fury upon thy enemies.",
categories: ["Spell", "Summon", "Elemental"],
APcost: 2,
cooldown: 5,
Manacost: 0.2,
onUse: function(attacker) {
// Summon Elemental helper
var elementalHelper = createSummon("Elemental Helper", 30, 15, 8, 10, "Elemental");
State.variables.summons.push(elementalHelper);
addToBattleLog(`${attacker.Name} summoned an Elemental helper to aid in battle.`);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
function elementalHelperTurn(elementalHelper) {
// Check if a spell has been cast this turn
if (State.variables.spellCastThisTurn) {
// Randomly select a spell (Freeze, Fire bolt, or Lightning Strike)
var spells = ["Freeze", "Fire bolt", "Lightning Strike"];
var selectedSpell = spells[Math.floor(Math.random() * spells.length)];
// Find a random enemy target
var enemies = State.variables.enemyInstances;
var randomEnemy = enemies[Math.floor(Math.random() * enemies.length)];
// Apply the selected spell to the random enemy target
applySpell(selectedSpell, elementalHelper, randomEnemy);
}
}
// Use this function to mark that a spell has been cast during the turn
function castSpell() {
State.variables.spellCastThisTurn = true;
}
//Summon: Undead.
var undeadSummon = createSkill("Summon: Undead", {
description: "Summons an Undead servant to fight and die in your name.",
categories: ["Spell", "Summon", "Necromancy"],
APcost: 2,
cooldown: 5,
Manacost: 0.2,
onUse: function(attacker) {
// Summon Undead helper
var undeadHelper = createSummon("Undead Helper", 25, 12, 6, 15, "Undead");
State.variables.summons.push(undeadHelper);
addToBattleLog(`${attacker.Name} summoned an Undead helper to aid in battle.`);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
// Add logic to Undead Helper's turn
function undeadHelperTurn(undeadHelper) {
// Find the weakest enemy
var enemies = State.variables.enemyInstances;
var weakestEnemy = getWeakestEnemy(enemies);
if (weakestEnemy) {
// Equip the Undead helper with a rusty sword
undeadHelper.equipment.mainhand = rustySword;
undeadHelper.equipment.mainhand.equipped = true;
// Use the triggerAttack function for the Undead helper's attack
triggerAttack(undeadHelper, weakestEnemy, 'mainhand');
// Check if the attack killed the weakest enemy
if (weakestEnemy.currentLife <= 0) {
// If it killed the enemy, make another strike
var nextEnemy = getRandomEnemy(excludeEnemy);
if (nextEnemy) {
// Use the triggerAttack function for the Undead helper's second attack
triggerAttack(undeadHelper, nextEnemy, 'mainhand');
}
}
}
}
//Summon: Spirit.
var spiritSummon = createSkill("Summon: Spirit", {
description: "Summons a Mystical Spirit to aid you in combat.",
categories: ["Spell", "Summon", "Arcane"],
APcost: 2,
cooldown: 5,
Manacost: 0.2,
onUse: function(attacker) {
// Summon Spirit helper
var spiritHelper = createSummon("Spirit Helper", 35, 18, 5, 20, "Spirit");
State.variables.summons.push(spiritHelper);
addToBattleLog(`${attacker.Name} summoned a Spirit helper to aid in battle.`);
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
// Add logic to Spirit Helper's turn
function spiritHelperTurn(spiritHelper) {
// Recover a bit of Lifeblood and Essence for the summoner (attacker)
var attacker = State.variables.character[1];
attacker.currentLife += 5; // Adjust the amount as needed
attacker.currentEssence += 5; // Adjust the amount as needed
}
//Artist
var earworm = createSkill("Earworm", {
categories: ["Spell", "Ballad", "Offensive"],
debuff: ["Damage", "Hit Chance"],
APcost: 1,
duration: 3,
cooldown: 4,
learned: false,
Manacost: 0.06,
onUse: function(attacker, target) {
// Decrease damage and hit chance of all enemies
enemyInstances.forEach(enemy => {
enemy.additionalDamage -= 5;
enemy.additionalHitChance -= 15;
});
addToBattleLog(`${attacker.Name} used Earworm, decreasing damage and hit chance of all enemies.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var healingSong = createSkill("Healing Song", {
categories: ["Spell", "Ballad", "Defensive", "Healing"],
APCost: 1,
cooldown: 4,
learned: false,
Manacost: 0.08,
onUse: function(attacker) {
// Gain regeneration for a certain number of turns based on attacker's level
var regenerationDuration;
if (attacker.level < 5) {
regenerationDuration = 5;
} else if (attacker.level >= 5 && attacker.level < 10) {
regenerationDuration = 7;
} else if (attacker.level >= 10 && attacker.level < 15) {
regenerationDuration = 9;
} else if (attacker.level >= 15) {
regenerationDuration = 11;
}
attacker.statusEffects.regeneration = regenerationDuration;
addToBattleLog(`${attacker.Name} used Healing Song, gaining regeneration for ${regenerationDuration} turns.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var warSong = createSkill("War Song", {
categories: ["Spell", "Ballad", "Defensive"],
buff: ["Damage"],
APcost: 1,
duration: 6,
cooldown: 7,
learned: false,
Manacost: 0.12,
onUse: function(attacker) {
// Add half of attacker's Charisma to damage for 6 turns when attacking
attacker.statusEffects.warSongDuration = 6;
addToBattleLog(`${attacker.Name} used War Song, increasing damage with half of Charisma for 6 turns.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var crescendo = createSkill("Crescendo", {
categories: ["Spell", "Ballad", "Defensive"],
APcost: 2,
cooldown: 8,
duration: 3,
learned: false,
Manacost: 0.15,
onUse: function (attacker) {
// Apply the Crescendo effect
attacker.statusEffects.crescendoDuration = this.duration;
attacker.statusEffects.crescendoBonus = 0; // Initialize the bonus
addToBattleLog(`${attacker.Name} used Crescendo, increasing next attack's damage by 5% for 3 turns.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var songOfHeroes = createSkill("Song of Heroes", {
categories: ["Spell", "Ballad", "Defensive"],
APcost: 2,
cooldown: 12,
learned: false,
Manacost: 0.3,
onUse: function (attacker) {
// Increase hitchance, defense, additional damage, and duration of effects
attacker.additionalHitChance += 15;
attacker.additionaltDefense += 15;
attacker.additionalDamage += 5;
attacker.statusEffects.songOfHeroesDuration = 10;
addToBattleLog(`${attacker.Name} used Song of Heroes, increasing hitchance, defense, and damage for 10 turns.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
//Initiated skills
var judgement = createSkill("Judgement", {
categories: ["Spell", "Holy", "Offensive"],
APcost: 1,
cooldown: 1,
Manacost: 0.05,
onUse: function (attacker, target) {
var damage = rollDice(1, 10); // Roll 1d10 for damage
target.currentLife -= damage;
// Check if the target is defeated
if (target.currentLife <= 0) {
var lifebloodRegain = 5 * target.level;
attacker.currentLife += lifebloodRegain;
if (attacker.currentLife > attacker.MAXLIFE) {
attacker.currentLife = attacker.MAXLIFE; // Ensure lifeblood doesn't exceed MAXLIFE
}
}
addToBattleLog(`${attacker.Name} used Judgement dealing ${damage} damage to ${target.Name}.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var smite = createSkill("Smite", {
categories: ["Spell", "Holy", "Offensive"],
APcost: 2,
cooldown: 0,
learned: false,
Manacost: 0.1,
onUse: function (attacker, target) {
var damage = target.MAXLIFE * 0.15; // Deal 15% of target's MAXLIFE as damage
// Double the damage if target's lifeblood is full
if (target.currentLife === target.MAXLIFE) {
damage *= 2;
}
target.currentLife -= damage;
addToBattleLog(`${attacker.Name} used Smite dealing ${damage} damage to ${target.Name}.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var shieldofthefaithful = createSkill("Shield of the Faithful", {
categories: ["Spell", "Holy", "Defensive"],
APcost: 2,
cooldown: 2,
learned: false,
Manacost: 0.04,
onUse: function (attacker) {
var defenseIncrease = attacker.Perception; // Increase defense by attacker's Perception
attacker.additionalDefense += defenseIncrease;
addToBattleLog(`${attacker.Name} used Shield of the Faithful, increasing their defense by ${defenseIncrease}.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var sentence = createSkill("Sentence", {
categories: ["Spell", "Holy", "Offensive"],
APcost: 1,
cooldown: 3,
learned: false,
Manacost: 0.10,
debuff: ["additionalDefense", "additionalHitChance"],
onUse: function(attacker, target) {
var debuffAmount = 10; // Reduce defense and hit chance by 10
target.additionalDefense -= debuffAmount;
target.additionalHitChance -= debuffAmount;
// Set a duration for the debuff (in turns)
var debuffDuration = 2;
target.statusEffects.sentenceDuration = debuffDuration;
addToBattleLog(`${attacker.Name} used Sentence, reducing ${target.Name}'s defense and hit chance by ${debuffAmount} for ${debuffDuration} turns.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
var heal = createSkill("Heal", {
categories: ["Spell", "Holy", "Defensive", "Healing"],
APCost: 2,
cooldown: 3,
learned: false,
Manacost: 0.10,
onUse: function(attacker) {
var missingLife = attacker.MAXLIFE - attacker.currentLife;
var healAmount;
if (attacker.level < 5) {
healAmount = Math.floor(0.25 * missingLife); // Heal by 25% of missing life
} else if (attacker.level >= 5 && attacker.level < 15) {
healAmount = Math.floor(0.45 * missingLife);
} else if (attacker.level >= 15) {
healAmount = Math.floor(0.55 * missingLife);
}
attacker.currentLife += healAmount;
addToBattleLog(`${attacker.Name} used Heal, healing ${healAmount} life.`);
// Reduce attacker's mana
var Manacost = Math.floor(attacker.MAXMANA * this.Manacost);
attacker.currentMana -= Manacost;
}
});
window.handleDuration = function (attacker, skillName) {
if (attacker.statusEffects[skillName + 'Duration'] > 0) {
attacker.statusEffects[skillName + 'Duration']--;
if (attacker.statusEffects[skillName + 'Duration'] <= 0) {
// Reset additionalDefense, additionalHitChance, and additionalDamage
attacker.additionalDefense -= attacker.statusEffects[skillName + 'Bonus'];
attacker.additionalHitChance -= attacker.statusEffects[skillName + 'Bonus'];
attacker.additionalDamage -= attacker.statusEffects[skillName + 'Bonus'];
// Reset the bonus stacks
attacker.statusEffects[skillName + 'Bonus'] = 0;
addToBattleLog(`${attacker.Name}'s ${skillName} effect has ended.`);
}
}
};
// Reduce cooldowns (call this in your game loop)
//State.variables.character[1].skills.forEach(skill => skill.reduceCooldown());
//enemyInstances.skills.forEach(skill => skill.reduceCooldown());
//////////
//Combat//
//////////
window.getRandomInt = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
window.calculateHitChance = function (attacker, target, slot) {
let hitChance = 0;
const attackerEquipment = attacker.equipment;
const enemiesAlive = State.variables.enemyInstances.filter(enemy => enemy.currentLife > 0).length;
for (const attackerSlot in attackerEquipment) {
const item = attackerEquipment[attackerSlot];
if (item && item.Type) {
if (item.Type.includes('melee')) {
hitChance += getRandomInt(10, 45) + attacker.STR + attacker.DEX;
} else if (item.Type.includes('ranged')) {
hitChance += getRandomInt(5, 30) + Math.round(attacker.PER * 2);
}
}
}
// Calculate hit chance modifiers based on traits
if (target.traits.includes("Defensive Stance")) {
target.additionalDefense += enemiesAlive * 2;
if (target.traits.includes("Survivalist")) {
target.additionalDefense += (enemiesAlive * 2) * 1.25;
}
}
if (attacker.traits.includes("Offensive Stance")) {
attacker.additionalHitChance += enemiesAlive * 2;
if (attacker.traits.includes("Survivalist")) {
attacker.additionalHitChance += (enemiesAlive * 2) * 1.25;
}
}
// Calculate combined defense of the target
const combinedDefense = calculateCombinedDefense(target);
hitChance -= combinedDefense;
// Log the hit chance and attack result
console.log(`Hit Chance: ${hitChance}, Combined Defense: ${combinedDefense}`);
let attackHits = (hitChance + attacker.additionalHitChance) >= combinedDefense;
// Check if the attack hits and handle riposte and opportunistic attacks
if (attackHits) {
console.log(`It's a hit! The attack was higher than the target's defense`);
addToBattleLog(`A blow is dealt!`);
attackHits
handleRiposte(attacker, target, attackHits);
} else {
console.log(`It missed! The attack was lower than the target's defense`);
addToBattleLog(`A miss, a fumble, missfortune strikes.`);
handleRiposte(attacker, target, attackHits);
handleOpportunisticAttack(attacker, target, attackHits);
}
return attackHits;
}
function calculateCombinedDefense(target) {
const enemiesAlive = State.variables.enemyInstances.filter(enemy => enemy.currentLife > 0).length;
const equipmentSlots = ['head', 'torso', 'waist', 'legs', 'feet', 'offhand'];
let combinedDefense = target.BaseDefense + target.additionalDefense - enemiesAlive * 2;
equipmentSlots.forEach(slot => {
const equippedItem = target.equipment[slot];
if (equippedItem && equippedItem.Defense) {
combinedDefense += equippedItem.Defense;
}
});
return combinedDefense;
}
window.handleRiposte = function (attacker, defender, attackHits) {
let riposteHits = false;
if (defender.riposteActive) {
console.log(`${defender.Name} activates Riposte and counterattacks ${attacker.Name}!`);
addToBattleLog(`${defender.Name} activates Riposte and counterattacks ${attacker.Name}!`);
defender.additionalHitChance -= 5;
riposteHits = calculateHitChance(defender, attacker);
if (riposteHits) {
const riposteDamage = calculateDamage(defender, attacker);
console.log(`${defender.Name} performs a Riposte against ${attacker.Name}, dealing ${riposteDamage} damage!`);
addToBattleLog(`${defender.Name} performs a Riposte against ${attacker.Name}, dealing ${riposteDamage} damage!`);
attacker.currentLife -= riposteDamage;
updateEnemyDetails();
updatePlayerDetails();
} else {
console.log(`${defender.Name}'s Riposte attempt misses.`);
addToBattleLog(`${defender.Name}'s Riposte attempt misses.`);
}
defender.additionalHitChance += 5;
}
return attackHits;
}
window.handleOpportunisticAttack = function (attacker, defender, attackHits) {
let opportunisticHits = false;
if (defender.traits.includes("opportunistic") && !attackHits) {
console.log(`${defender.Name} takes the opportunity to attack ${attacker.Name}!`);
addToBattleLog(`${defender.Name} takes the opportunity to attack ${attacker.Name}!`);
defender.additionalHitChance -= 15;
opportunisticHits = calculateHitChance(defender, attacker);
if (opportunisticHits) {
const opportunisticDamage = calculateDamage(defender, attacker);
console.log(`${defender.Name} took the opportunity during ${attacker.Name}'s fumble, dealing ${opportunisticDamage} damage!`);
addToBattleLog(`${defender.Name} took the opportunity during ${attacker.Name}'s fumble, dealing ${opportunisticDamage} damage!`);
attacker.currentLife -= opportunisticDamage;
updateEnemyDetails();
updatePlayerDetails();
} else {
console.log(`${defender.Name}'s attempt ends in failure.`);
addToBattleLog(`${defender.Name}'s attempt ends in failure.`);
}
defender.additionalHitChance += 15;
}
return false; // Always return false if the attack missed
}
window.rollDice = function (diceString) {
// Split the dice string into parts (e.g., "5d4" => ["5", "4"])
const [numDice, numSides] = diceString.split('d').map(Number);
// Roll the dice and calculate the total damage
let totalDamage = 0;
for (let i = 0; i < numDice; i++) {
totalDamage += Math.floor(Math.random() * numSides) + 1;
}
console.log(`Rolled ${numDice}d${numSides}: ${totalDamage} damage`);
return totalDamage;
}
function calculateArmorModifier(combinedSlots, armorType) {
if (armorType === 'slashing') {
return combinedSlots.includes('light armor') ? 5 : combinedSlots.includes('heavy armor') ? -0.05 : 0;
} else if (armorType === 'piercing') {
return combinedSlots.includes('medium armor') ? 5 : (combinedSlots.includes('light armor') || combinedSlots.includes('heavy armor')) ? -0.025 : 0;
} else if (armorType === 'blunt') {
return combinedSlots.includes('heavy armor') ? 5 : combinedSlots.includes('light armor') ? -0.05 : 0;
} else if (armorType === 'esoteric') {
return combinedSlots.includes('giant forged') ? -0.075 : 0;
}
return 0;
}
window.calculateDamage = function (attacker, target, slot) {
const equippedItem = attacker.equipment.mainhand;
if (equippedItem && equippedItem.Damage) {
const damageDiceString = equippedItem.Damage;
const rawDamage = rollDice(damageDiceString);
let damageModifier = 0;
if (equippedItem.Type.includes('versatile')) {
damageModifier = Math.max(Math.round(attacker.DEX / 3), Math.round(attacker.STR / 3));
} else if (equippedItem.Type.includes('heavy')) {
damageModifier = Math.round(attacker.STR / 3);
} else if (equippedItem.Type.includes('esoteric')) {
damageModifier = Math.round((attacker.INT + attacker.CHA) / 3);
} else if (equippedItem.Type.includes('agile')) {
damageModifier = Math.round(attacker.DEX / 3);
} else if (equippedItem.Type.includes('visceral')) {
const targetMissingLife = (target.MAXLIFE - target.currentLife);
damageModifier = Math.round(targetMissingLife * 0.07);
} else if (equippedItem.Type.includes('firearm')) {
damageModifier = Math.round(attacker.PER / 3)
}
// Calculate armor modifier based on the target's armor type
const combinedSlots = [
target.equipment.head,
target.equipment.torso,
target.equipment.waist,
target.equipment.legs,
target.equipment.feet,
target.equipment.offhand,
].join('');
const armorModifier = calculateArmorModifier(combinedSlots, equippedItem.Type);
console.log(`Raw Damage: ${rawDamage}`);
console.log(`Damage Modifier: ${damageModifier}`);
console.log(`Armor Modifier: ${armorModifier}`);
const totalDamage = Math.max(0, rawDamage + damageModifier);
const finalDamage = parseInt(Math.round(totalDamage * (1 + armorModifier) + attacker.additionalDamage));
if (isNaN(finalDamage) || finalDamage < 0) {
finalDamage = 1;
}
console.log(`Damage dealt (${equippedItem.Damage}): ${finalDamage}.`);
return finalDamage;
} else {
console.log(`No damage calculated.`);
return 0;
}
};
window.updatePlayerDetails = function (character) {
const detailsHtml = `
<b>${State.variables.character[1].Name}</b> | <b>Level:</b> <i>${State.variables.character[1].level}</i> | <b>Specialization:</b> <i>${State.variables.character[1].Specialization}</i>
<div class="grid-item"><b>LifeBlood:</b> <i>${State.variables.character[1].currentLife} / ${State.variables.character[1].MAXLIFE}</i></div>
<div class="grid-item"><b>Essence:</b> <i>${State.variables.character[1].currentMana} / ${State.variables.character[1].MAXMANA}</i></div>
<div class="grid-item"> <i>${State.variables.character[1].AP}</I> </div>
`;
document.getElementById('stats').innerHTML = detailsHtml;
}
window.updateEnemyDetails = function (selectedEnemy) {
initializeEnemyList();
const enemyDetailsContainer = document.getElementById('selected-enemy-details');
enemyDetailsContainer.innerHTML = '';
State.variables.enemyInstances.forEach(enemy => {
const detailsHtml = `
<h3>Enemy: ${enemy.Name}</h3>
<p><b>Type:</b><i> ${enemy.Specialization}</i></p>
<p><b>Ancestry:</b><i> ${enemy.Ancestry}</i></p>
<p><b>Traits:</b><i> ${enemy.traits}</i></p>
<p><b>Lifeblood:</b><i> ${enemy.currentLife} / ${enemy.MAXLIFE} </i></p>
<p><b>Essence:</b><i> ${enemy.currentMana} / ${enemy.MAXMANA}</i></p>
<!-- Add more properties here -->
`;
const deadHtml = `
<h3>Enemy: ${enemy.Name} (<b>Dead</b>)</h3>
<p><b>Lifeblood:</b><i> ${enemy.currentLife}</b></p>
`;
const enemyDetails = document.createElement('div');
enemyDetails.className = 'enemy-details';
if (enemy.currentLife > 0) {
enemyDetails.innerHTML = detailsHtml;
} else {
enemyDetails.innerHTML = deadHtml;
}
enemyDetailsContainer.appendChild(enemyDetails);
});
}
window.addToBattleLog = function (message) {
const logElement = document.getElementById('battle-log');
const messageElement = document.createElement('p');
messageElement.textContent = message;
logElement.appendChild(messageElement);
logElement.scrollTop = logElement.scrollHeight;
};
window.triggerAttack = function(attacker, target, slot) {
if (attacker.AP < 1) {
console.log("Not enough Action Points to attack!");
return;
}
// Consume appropriate AP based on the weapon type
if (attacker.equipment.mainhand.Type.includes('1-handed')) {
attacker.AP--;
} else if (attacker.equipment.mainhand.Type.includes('2-handed')) {
attacker.AP -= 2;
}
let attackHits = calculateHitChance(attacker, target);
let damage = 0;
console.log(`${target.Name} current life: ${target.currentLife}`);
if (attackHits) {
damage = calculateDamage(attacker, target, slot);
applyDamage(attacker, target, damage);
if (target === State.variables.character[1]) {
updatePlayerDetails(character);
} else {
updatePlayerDetails(character);
const enemyIndex = State.variables.enemyInstances.indexOf(target);
if (enemyIndex !== -1) {
State.variables.enemyInstances[enemyIndex] = target;
updateEnemyDetails(target);
}
}
checkGameOver();
// Log attack result
const attackType = attacker.equipment.mainhand.Type.includes('blunt')
? 'maiming'
: attacker.equipment.mainhand.Type.includes('piercing')
? 'penetrating'
: attacker.equipment.mainhand.Type.includes('slashing')
? 'cutting'
: '';
if (attackHits) {
addToBattleLog(`${attacker.Name} hit ${target.Name}, ${attackType} them for ${damage} damage!`);
} else {
addToBattleLog(`${attacker.Name} missed ${target.Name}.`);
}
}
};
function applyDamage(attacker, target, damage) {
// Ensure target's currentLife is a valid number
if (isNaN(target.currentLife)) {
// If currentLife is NaN, set it to target's MAXLIFE
target.currentLife = target.MAXLIFE;
// Use damageSuffered as a backup value for tracking total damage
if (!target.damageSuffered) {
target.damageSuffered = 0;
}
target.currentLife -= target.damageSuffered;
}
// Apply damage
target.currentLife -= damage;
// Update individualistic damageSuffered for the target
if (!target.damageSuffered) {
target.damageSuffered = 0;
}
target.damageSuffered += damage;
// Ensure currentLife doesn't go below 0
if (target.currentLife < 0) {
target.currentLife = 0;
}
}
window.generateSkillButtons = function() {
const skillsGrid = document.getElementById('skills-grid');
const cancelButton = document.createElement('button');
cancelButton.textContent = 'Cancel';
cancelButton.onclick = function() {
skillsGrid.innerHTML = ''; // Clear skill buttons
skillsGrid.style.display = 'none'; // Hide skills grid
document.getElementById('generateSkillbox').style.display = 'block'; // Show the Skill button
};
// Clear any previous buttons
skillsGrid.innerHTML = '';
// Get the skills from character.skills
const skills = character.skills;
// Iterate through the skills and create buttons for each skill
skills.forEach(skill => {
const skillButton = document.createElement('button');
skillButton.textContent = skill.name;
skillButton.onclick = function() {
// Show skill targets for the selected skill
showSkillTargets(skill);
};
skillsGrid.appendChild(skillButton);
});
// Add Cancel button to the skills grid
skillsGrid.appendChild(cancelButton);
// Show the skills grid
skillsGrid.style.display = 'grid';
// Hide the Skill button
document.getElementById('generateSkillbox').style.display = 'none';
};
function showSkillTargets(skill) {
const targetsGrid = document.getElementById('attack-buttons');
targetsGrid.innerHTML = ''; // Clear previous targets
// If the skill is Offensive, show targets
if (skill.categories.includes('Offensive')) {
// Iterate through the targets and create buttons for each target
skill.targets.forEach(target => {
const targetButton = document.createElement('button');
targetButton.textContent = target.name;
targetButton.onclick = function() {
// Handle offensive skill activation logic with selected skill and target
useSkill(character, skill, target);
targetsGrid.innerHTML = ''; // Clear skill targets after use
};
targetsGrid.appendChild(targetButton);
});
// Add Cancel button for offensive skill targets
const cancelButton = document.createElement('button');
cancelButton.textContent = 'Cancel';
cancelButton.onclick = function() {
targetsGrid.innerHTML = ''; // Clear skill targets
};
targetsGrid.appendChild(cancelButton);
}
// If the skill is Defensive, target the user (attacker)
else if (skill.categories.includes('Defensive')) {
// Handle defensive skill activation logic with the user (attacker)
useSkill(character, skill);
}
// If the skill is Summon or General, do not require targets
else if (skill.categories.includes('Summon') || skill.categories.includes('General')) {
// Handle summon or general skill activation logic without targets
useSkill(character, skill);
}
}
function useSkill(attacker, skill, target) {
addToBattleLog(`${attacker.Name} used ${skill.name}`);
// Check if the skill is usable (not on cooldown and enough AP)
if (skill.inCooldown > 0) {
addToBattleLog(`${skill.name} is on cooldown for ${skill.inCooldown} turns!`);
return;
}
if (attacker.AP < skill.APcost) {
addToBattleLog(`Not enough Action Points to use ${skill.name}!`);
return;
}
// Execute the skill's onUse function
if (skill.onUse) {
skill.onUse(attacker);
}
// Update player details (assuming attacker is the player)
updatePlayerDetails(attacker);
// Update enemy details (when and if needed)
updateEnemyDetails(target);
// Handle skill cooldown
skill.inCooldown = skill.cooldown;
// Reduce attacker's Action Points
attacker.AP -= skill.APcost;
// Clear attack buttons (assuming you want to clear them after using a skill)
const targetsGrid = document.getElementById('attack-buttons');
targetsGrid.innerHTML = '';
// Hide the skills grid
const skillsGrid = document.getElementById('skills-grid');
skillsGrid.style.display = 'none';
// Show the Skill button
document.getElementById('generateSkillbox').style.display = 'block';
}
function initiateEnemyTurn() {
window.startEnemyTurn();
}
if (State.variables.whosturn === "ambush") {
setTimeout(initiateEnemyTurn, 1000); // Delay execution by 1 second (adjust the delay time if needed)
}
///////////////////////////////////////////////////////////////////
//////////"Stolen codes"
// dialog API macro set, by chapel; for sugarcube 2
// version 1.3.0
// see the documentation: https://github.com/ChapelR/custom-macros-for-sugarcube-2#dialog-api-macros
// <<dialog>> macro
Macro.add('dialog', {
tags : ['onopen', 'onclose'],
handler : function () {
// handle args (if any)
var errors = [];
var content = '', onOpen = null, onClose = null;
var title = (this.args.length > 0) ? this.args[0] : '';
var classes = (this.args.length > 1) ? this.args.slice(1).flatten() : [];
this.payload.forEach( function (pl, idx) {
if (idx === 0) {
content = pl.contents;
} else {
if (pl.name === 'onopen') {
onOpen = onOpen ? onOpen + pl.contents : pl.contents;
} else {
onClose = onClose ? onClose + pl.contents : pl.contents;
}
}
});
// add the macro- class
classes.push('macro-' + this.name);
// dialog box
Dialog.setup(title, classes.join(' '));
Dialog.wiki(content);
// should these be shadowWrapper-aware?
if (onOpen && typeof onOpen === 'string' && onOpen.trim()) {
$(document).one(':dialogopened', function () {
$.wiki(onOpen);
});
}
if (onClose && typeof onClose === 'string' && onClose.trim()) {
$(document).one(':dialogclosed', function () {
$.wiki(onClose);
});
}
Dialog.open();
}
});
// <<popup>> macro
Macro.add('popup', {
handler : function () {
// errors
if (this.args.length < 1) {
return this.error('need at least one argument; the passage to display');
}
if (!Story.has(this.args[0])) {
return this.error('the passage ' + this.args[0] + 'does not exist');
}
// passage name and title
var psg = this.args[0];
var title = (this.args.length > 1) ? this.args[1] : '';
var classes = (this.args.length > 2) ? this.args.slice(2).flatten() : [];
// add the macro- class
classes.push('macro-' + this.name);
// dialog box
Dialog.setup(title, classes.join(' '));
Dialog.wiki(Story.get(psg).processText());
Dialog.open();
}
});
// <<dialogclose>> macro
Macro.add('dialogclose', {
skipArgs : true,
handler : function () {
Dialog.close();
}
});
// css-macro.min.js, for SugarCube 2, by Chapel
// v1.0.0, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;!function(){"use strict";function t(t){if(t.length%2!=0)return"Style rules should be a list of key/value pairs; you've passed an odd number.";var r={};return t.forEach((function(e,n){n%2==0&&(r[e]=t[n+1])})),r}function r(t,r){try{return"string"==typeof r?r:(t instanceof jQuery||(t=$(t)),t.css(r))}catch(t){return t.message}}Macro.add("css",{handler:function(){var e=function(){try{var e,n=[].slice.call(arguments).flatten(),s=n.shift();return"string"==typeof n[0]?e=t(n):"object"==typeof n[0]&&(e=clone(n[0])),r(s,e)}catch(t){return t.message}}(this.args);if("string"==typeof e)return this.error(e)}})}();
// end css-macro.min.js
// fading-macro-set.min.js, for SugarCube 2, by Chapel
// v1.1.0, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;Macro.add("fadein",{tags:null,handler:function(){var t,a,s=$(document.createElement("span")),e=this.payload[0].contents;if(0===this.args.length)return this.error("no arguments given");t=Util.fromCssTime(this.args[0]),a=this.args.length>1?Util.fromCssTime(this.args[1]):0,s.wiki(e).addClass("macro-"+this.name).appendTo(this.output).hide().delay(a).fadeIn(t)}}),Macro.add("fadeout",{tags:null,handler:function(){var t,a,s=$(document.createElement("span")),e=this.payload[0].contents;if(0===this.args.length)return this.error("no arguments given");t=Util.fromCssTime(this.args[0]),a=this.args.length>1?Util.fromCssTime(this.args[1]):0,s.wiki(e).addClass("macro-"+this.name).appendTo(this.output).delay(a).fadeOut(t)}});
// end fading-macro-set.min.js
// articles.min.js, for SugarCube 2, by Chapel
// v1.0.0, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;!function(){"use strict";var e=new Map,r=["eunuch","eucalyptus","eugenics","eulogy","euphemism","euphony","euphoria","eureka","european","euphemistic","euphonic","euphoric","euphemistically","euphonically","euphorically","heir","heiress","herb","homage","honesty","honor","honour","hour","honest","honorous","honestly","hourly","one","ouija","once","ubiquitous","ugandan","ukrainian","unanimous","unicameral","unified","unique","unisex","universal","urinal","urological","useful","useless","usurious","usurped","utilitarian","utopic","ubiquitously","unanimously","unicamerally","uniquely","universally","urologically","usefully","uselessly","usuriously"],i=["a","an"],t=/[aeiou8]/i,n=/[A-Z]+$/,u=/[UFHLMNRSX]/,a=/[.,\/#!$%\^&\*;:{}=\-_`~()]/g;function o(e){return"a"===e?"an":"a"}function s(r,t,n){var u;return State.length>0?(u="cannot add article override -> needs to be run in StoryInit special passage or earlier",console.error(u),u):t&&"string"==typeof t?(r&&"string"==typeof r&&(r=r.toLowerCase().trim()),i.includes(r)?(t=t.trim(),void(n?e.set(t,{article:r,caseSensitive:!!n}):e.set(t.toLowerCase(),{article:r,caseSensitive:!!n}))):(u='cannot add article override -> invalid article, must be "a" or "an"',console.error(u),u)):(u="cannot add article override -> invalid word",console.error(u),u)}function l(e){var i;return i=t.test(e.first())?"an":"a",function(e,i){return!!r.includes(e.toLowerCase())&&o(i)}(e,i)||function(e,r){return!(!n.test(e)||!u.test(e.first()))&&o(r)}(e,i)||i}function c(r){if(r&&"string"==typeof r){var i=r.trim().split(" ")[0].trim();return function(r){var i=(r=r.trim()).toLowerCase();if(e.has(i)||e.has(r)){var t=e.get(i)||e.get(r);return t.caseSensitive&&!e.has(r)?null:t.article}return null}(i=i.replace(a,""))||l(i)}}function h(e,r){if(!e||"string"!=typeof e)return e;var i=c(e);return(r?i.toUpperFirst():i)+" "+e}setup.articles={find:c,output:h,override:s},Macro.add("setarticle",{handler:function(){var e=s(this.args[0],this.args[1],this.args[2]);e&&"string"==typeof e&&this.error(e)}}),Macro.add(["a","an","A","An"],{handler:function(){var e=this.name.first()===this.name.first().toUpperCase();this.output.append(h(String(this.args[0]),e))}})}();
// end articles.min.js
// disable.js, by chapel, for sugarcube 2
// v1.0.0
(function () {
'use strict';
var cls = 'disabled';
var interactive = ['button', 'fieldset', 'input', 'menuitem', 'optgroup', 'option', 'select', 'textarea'];
function getEl (self) {
// get the first interactive element
var $el = $(self).find(interactive.join(',')).first();
if (!$el[0]) {
$el = $(self).children().eq(0);
if (!$el[0]) {
return $(self);
}
}
return $el;
}
function changeCls ($el) {
if ($el.ariaIsDisabled()) {
$el.addClass(cls);
} else {
$el.removeClass(cls);
}
}
function disable ($el, bool) {
if (!($el instanceof $)) {
$el = $($el);
}
$el.ariaDisabled((bool === undefined) ? true : !!bool);
changeCls($el);
return $el;
}
// no need for JS API as there us a built-in jQuery extension
Macro.add('disable', {
tags : null,
handler : function () {
var bool, $wrapper = $(document.createElement('span'))
.addClass('macro-' + this.name)
.wiki(this.payload[0].contents);
try {
bool = this.args.raw.trim() ? !!Scripting.evalJavaScript(this.args.full) : undefined;
} catch (err) {
return this.error("bad evaluation: " + err.message);
}
disable(getEl($wrapper), bool);
// output
$(this.output).append($wrapper);
}
});
}());
// operations.min.js, for SugarCube 2, by Chapel
// v1.1.0, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;!function(){"use strict";var e=e||{},r=!0,t=!0,n=[0,100];function o(e,r){var t,n=[],o=0,i=1;if("string"==typeof e)n=e.split("d");else if("number"==typeof e&&r)n=[e,r];else{if(!(Array.isArray(e)&&e.length>=2))throw new TypeError("dice(): could not process arguments...");e.length=2,n=e}if(n[0]=Number(n[0]),"string"==typeof n[1]&&"F"===n[1].trim().toUpperCase()?(n[1]=3,i=-1):n[1]=Number(n[1]),n.some((function(e){return Number.isNaN(e)})))throw new TypeError("dice(): could not process arguments...");for(t=0;t<n[0];t++){o+=Math.floor(State.random()*n[1])+i}return o}function i(e,r){if("string"==typeof e){var t=[(n=e.trim().replace(/\s/g,"").match(/(\d+[d][\df]\d*)(.*)/i))[1],Number(n[2])];return o(t[0])+t[1]}return o(e,r);var n}e.dice={roll:i},r&&(window.dice=window.dice||i),Number.prototype.dice||Object.defineProperty(Number.prototype,"dice",{configurable:!0,writable:!0,value:function(e){if(0===this)return 0;if(this<0)throw new TypeError("Number.prototype.dice: cannot roll a negative number of dice!");if(("string"!=typeof e||"F"!==e.trim().toUpperCase())&&(null==e||"number"!=typeof e||e<=0||!Number.isInteger(e)))throw new TypeError("Number.prototype.dice: error in argument");if(!Number.isInteger(this))throw new TypeError("Number.prototype.dice: cannot roll partial dice!");return i(this,e)}}),Number.prototype.fairmath||Object.defineProperty(Number.prototype,"fairmath",{configurable:!0,writable:!0,value:function(e){var r=n;if(this<r[0]||this>r[1])throw new TypeError("Number.prototype.fairmath called on a number that is out of the defined range (the number was "+this+").");if(null==e||"number"!=typeof e||e>100||e<-100||arguments.length<1)throw new TypeError("Number.prototype.fairmath given incorrect argument or an argument that is out of the valid 0-100 range.");if(0===e)return Math.clamp(Math.trunc(this),r[0],r[1]);if(e<0)return e*=-1,Math.clamp(Math.trunc(this-(this-r[0])*(e/r[1])),r[0],r[1]);if(e>0)return Math.clamp(Math.trunc(this+(r[1]-this)*(e/r[1])),r[0],r[1]);throw new Error("Number.prototype.fairmath encountered an unspecified error.")}}),Number.prototype.between||Object.defineProperty(Number.prototype,"between",{configurable:!0,writable:!0,value:function(e,r){if("number"!=typeof e||"number"!=typeof r)throw new TypeError("Number.between() -> both values must be numbers");var t=Number(this);if(e===r)return t===e;if(r<e){var n=r;r=e,e=n}return t>=e&&t<=r}}),Math.fairmath||Object.defineProperty(Math,"fairmath",{configurable:!0,writable:!0,value:function(e,r){return e.fairmath(r)}}),Math.between||Object.defineProperty(Math,"between",{configurable:!0,writable:!0,value:function(e,r,t){return e.between(r,t)}}),t&&(Math.fm||Object.defineProperty(Math,"fm",{configurable:!0,writable:!0,value:function(e,r){return e.fairmath(r)}}),Number.prototype.fm||Object.defineProperty(Number.prototype,"fm",{configurable:!0,writable:!0,value:function(e){return this.fairmath(e)}}),Number.prototype.d||Object.defineProperty(Number.prototype,"d",{configurable:!0,writable:!0,value:function(e){return this.dice(e)}}))}();
// end operations.min.js
// pronouns.min.js, for SugarCube 2, by Chapel
// v1.1.0, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;!function(){"use strict";if(Template&&Template.add&&"function"==typeof Template.add){var e={name:"gender",showSetting:!0,label:"Gender",desc:"",storyVar:"%%gender",default:"female"},t="#setting-control-"+e.name,r={subjective:["she","he","they"],objective:["her","him","them"],possessive:["hers","his","theirs"],determiner:["her","his","their"],reflexive:["herself","himself","themself"],noun:["woman","man","person"]};e.showSetting&&(Setting.addToggle(e.name,{label:e.label,desc:e.desc&&"string"==typeof e.desc&&e.desc.trim()?e.desc.trim():void 0}),$(document).on(":dialogopen :dialogopened",(function(){$("#ui-dialog-body").hasClass("settings")&&$(t).parent("div").empty().append($(document.createElement("button")).append("Configure...").ariaClick((function(){h()})))})));var a=/^is$/i,n=/^was$/i,s=/^has$/i,i=/oes$/i,o=/^[dl]ies$/i,l=/ies$/i,u=/sses$/i,c=/hes$/i,d=/s$/i,p=/they/i;Template.add(["he","she","they","He","She","They"],(function(){return S(this.name,g().subjective)})),Template.add(["him","her","them","Him","Her","Them"],(function(){return S(this.name,g().objective)})),Template.add(["his","hers","theirs","His","Hers","Theirs"],(function(){return S(this.name,g().possessive)})),Template.add(["his_","her_","their","His_","Her_","Their"],(function(){return S(this.name,g().determiner)})),Template.add(["himself","herself","themself","Himself","Herself","Themself"],(function(){return S(this.name,g().reflexive)})),Template.add(["man","woman","person","Man","Woman","Person"],(function(){return S(this.name,g().noun)})),Template.add(["he-s","she-s","they-re","He-s","She-s","They-re"],(function(){return S(this.name,g().subjective+T("'s","'re",y()))})),Macro.add("pronouns",{skipArgs:!0,handler:function(){h()}}),Macro.add("verb",{handler:function(){var e=y();if(this.args.length<1)return this.error("Please pass at least a singular third person pronoun to this macro.");this.args.includes("plural")&&(e=!0),this.output.append(T(String(this.args[0]),this.args[1]?String(this.args[1]):null,!!e))}}),setup.gender={pronouns:g,setPronouns:function(t){return"string"==typeof t?v(t):"object"==typeof t?function(t){if("object"==typeof t)return State.variables[e.storyVar]=v("male"===e.default?1:0),Object.assign(State.variables[e.storyVar],t)}(t):void 0},dialog:h,pluralize:b},window.gender=window.gender||setup.gender}else alert("Warning, this version of SugarCube does not include the Template API. Please upgrade to v2.29.0 or higher.");function m(){var t=$(document.createElement("div"));var a=Object.keys(r).map((function(t){var a=2;"male"===e.default?a=1:"female"===e.default&&(a=0);var n=State.variables,s=r[t][a];return n[e.storyVar]&&n[e.storyVar][t]&&(s=n[e.storyVar][t]),function(e,t,r){return $(document.createElement("label")).append(e).css("display","block").append($(document.createElement("input")).attr({type:"text",name:t}).css({float:"right","margin-left":"0.2em"}).val(r))}(t.toUpperFirst()+": ","gender-"+t,s)})),n=function(e,t,r){var a=$(document.createElement("select")).attr("name",t).css("float","right");return r.forEach((function(e,t){console.log(t),$(document.createElement("option")).attr("value",String(t)).append(e).appendTo(a)})),$(document.createElement("label")).css("display","block").append(e,a)}("Presets: ","gender-preset",["She/Her","He/Him","They/Them"]).on("change",(function(){var e=Number($(this).find("select").val());Number.isNaN(e)||a.forEach((function(t){var a=t.find("input"),n=a.attr("name").split("-")[1];a.val(r[n][e])}))})),s=n.find("select");State.variables[e.storyVar]?s.val(""):"male"===e.default?s.val("1"):"female"===e.default?s.val("0"):s.val("2");var i,o=$(document.createElement("button")).wiki("Confirm").addClass("gender-confirm").ariaClick({label:"Confirm pronoun selection."},(function(){var t=State.variables;t[e.storyVar]={},a.forEach((function(r){var a=r.find("input"),n=a.attr("name").split("-")[1];t[e.storyVar][n]=a.val().trim().toLowerCase()})),$("#ui-dialog-body").hasClass("reopen")&&UI.settings(),Dialog.close()})),l=(i=[n,"<br>"],a.forEach((function(e){i.push(e),i.push("<br>")})),i.push(o),i);return t.append(l)}function h(){var e,t,r,a;e="Customize Gender",t=m(),r="custom-gender",a=!1,Dialog.isOpen()&&$("#ui-dialog-body").hasClass("settings")&&(a=!0),Dialog.close(),Dialog.setup(e,a?r+" reopen":r),Dialog.append(t),Dialog.open()}function f(e){("number"!=typeof e||Number.isNaN(e)||e>2||e<0)&&(e=0);var t={};return Object.keys(r).forEach((function(a){t[a]=r[a][e]})),t}function g(){return State.variables[e.storyVar]&&State.variables[e.storyVar].subjective?State.variables[e.storyVar]:f("male"===e.default?1:0)}function v(t){var r;switch(t){case"female":r=f(0);break;case"male":r=f(1);break;default:r=f(2)}return State.variables[e.storyVar]=clone(r),r}function b(e){return e&&"string"==typeof e?(e=e.trim(),a.test(e)?e.replace(a,"are"):n.test(e)?e.replace(n,"were"):s.test(e)?e.replace(s,"have"):i.test(e)?e.replace(i,"o"):o.test(e)?e.replace(l,"ie"):l.test(e)?e.replace(l,"y"):u.test(e)?e.replace(u,"ss"):c.test(e)?e.replace(c,"h"):d.test(e)?e.replace(d,""):e):e}function y(){return p.test(g().subjective.trim())}function T(e,t,r){return r?t&&"string"==typeof t?t:b(e):e}function S(e,t){return e.first()===e.first().toUpperCase()?t.toUpperFirst():t}}();
// end pronouns.min.js
// notify.min.js, for SugarCube 2, by Chapel
// v1.1.1, 2022-07-21, 3bdbdfbe5ae47a46e4f4e52766d78701939ae9a6
;!function(){var s=/\d+m?s$/;function e(s,e,t){"string"==typeof s&&("number"!=typeof e&&(e=!1),$(document).trigger({type:":notify",message:s,delay:e,class:t||""}))}$(document.body).append("<div id='notify'></div>"),$(document).on(":notify",(function(s){s.message&&"string"==typeof s.message&&(s.message.trim(),s.class?"string"==typeof s.class?s.class="open macro-notify "+s.class:Array.isArray(s.class)?s.class="open macro-notify "+s.class.join(" "):s.class="open macro-notify":s.class="open macro-notify",s.delay?("number"!=typeof s.delay&&(s.delay=Number(s.delay)),Number.isNaN(s.delay)&&(s.delay=2e3)):s.delay=2e3,$("#notify").empty().wiki(s.message).addClass(s.class),setTimeout((function(){$("#notify").removeClass()}),s.delay))})),Macro.add("notify",{tags:null,handler:function(){var t=this.payload[0].contents,a=!1,n=!1;if(this.args.length>0){var i=s.test(this.args[0]);"number"==typeof this.args[0]||i?(a=i?Util.fromCssTime(this.args[0]):this.args[0],n=this.args.length>1&&this.args.slice(1).flatten()):n=this.args.flatten().join(" ")}e(t,a,n)}}),setup.notify=e}();
// end notify.min.js
var config = {
matureContent: true,
OwOContent: false
};
Setting.addToggle("OwO", {
label: 'Do you desire to suffer?',
default: false,
storyVar: 'OwO',
onChange: function(enabled) {
// Implement your logic to update the game content based on 'enabled'
updateGameContent(enabled);
}
});
Setting.addToggle("Mature Content", {
label: 'Allow for Mature Content?',
default: true,
storyVar: 'maturity',
onChange: function(enabled) {
// Implement your logic to update the game content based on 'enabled'
updateGameContent(enabled);
}
});
function replaceWords(content, enableMatureContent) {
const regex = /\?\(([^)]+)\)/g;
const replacedContent = content.replace(regex, (match, word) => {
const replacements = {
//Alert: Offensive words up ahead
'whore(s)?': '"woman(en)? of pleasure"',
'sex': 'pleasant act',
'orgy(ies)?': '"pleasant gathering(s)? of many"',
'phallus(es)?': '""manly" organ(s)?"',
'dick(s)?': '""manly" organ(s)?"',
'dickhead(s)?': '"person who cannot keep it in their pants"',
'penis(es)?': '""manly" organ(s)?"',
'vagina(s)?': '""womanly" organ(s)?"',
'pussy(ies)?': '""womanly" organ(s)?"',
'cunt(s)?': '""womanly" organ(s)?"',
'fuck(s)?': '""F" word"',
'fucked': '""F" word + ed"',
'bitch(es)?': '"female dog-like behaviour"',
'shit': '"fezzes"',
'shithead(s)?': '"head(s) made of fezzes"',
'motherfucker(s)?': '"mature women enjoyer(s)?"',
'blood': '"inner body fluids"',
'retard(s)?': '"CENSORED"',
// Add more word replacements as needed
};
// Convert the word to lowercase for case-insensitive matching
const lowercasedWord = word.toLowerCase();
// Replace offensive words with appropriate alternatives if mature content is enabled
if (enableMatureContent && replacements[lowercasedWord]) {
return replacements[lowercasedWord];
}
// If the word is not in the replacements list, keep the original word
return match;
});
return replacedContent;
}
Macro.add('replaceWord', {
tags: ['word'],
handler: function() {
// Get the word inside the macro tag
const word = this.payload[0].contents.trim();
// Get the passage content
var passageContent = State.get('passage');
// Get the "Mature Content" setting from story variables
var enableMatureContent = State.getVar("%%maturity") === true;
// Call the JavaScript function to replace the word
var replacedContent = replaceWords(passageContent, enableMatureContent, word);
// Set the modified content back to the passage
State.set('passage', replacedContent);
// Continue processing the passage
this.done();
}
});
function updateGameContent() {
// Get mature content and OwOification settings from story variables
var enableMatureContent = State.getVar("$maturity") === true;
var enableOwOContent = State.getVar("$OwO") === true;
// Get the passage content
var passageContent = Engine.passage;
// Replace offensive words only if passageContent is a valid string
if (typeof passageContent === 'string' || passageContent instanceof String) {
// Call the JavaScript function to replace words
var replacedContent = replaceWords(passageContent);
// Set the modified content back to the passage
State.set('passage', replacedContent);
} else {
// Handle the case where passageContent is not a valid string
console.error('Invalid passage content:', passageContent);
}
}
function owofy(content) {
// Define a list of "Owofication" transformations
const owofications = [
{ from: /(?:r|l)/g, to: 'w' },
{ from: /(?:n)/g, to: 'ny' },
{ from: /(?:ove)/g, to: 'uv' },
{ from: /(?:!|\?)/g, to: ' >w< ' }, // Replace exclamation marks and question marks with " >w< "
{ from: /(?:\.|,)/g, to: ' ^w^ ' }, // Replace periods and commas with " ^w^ "
{ from: /(?:th)/g, to: 'f' },
{ from: /(?:a|A)/g, to: 'wA' },
{ from: /(?:e|E)/g, to: 'wE' },
{ from: /(?:i|I)/g, to: 'wI' },
{ from: /(?:o|O)/g, to: 'wO' },
{ from: /(?:u|U)/g, to: 'wU' },
{ from: /(?:you)/g, to: 'yuw' },
{ from: /(?:this)/g, to: 'thisy' },
{ from: /(?:there)/g, to: 'theywe' },
{ from: /(?:there)/g, to: 'theywe' },
{ from: /(?:the)/g, to: 'de' },
{ from: /(?:ok)/g, to: 'owo' },
{ from: /(?:you)/g, to: 'u' },
{ from: /(?:please)/g, to: 'pwease' },
{ from: /(?:thank you)/g, to: 'fank yuw' },
{ from: /(?:hello)/g, to: 'hewwo' },
{ from: /(?:are)/g, to: 'awe' },
{ from: /(?:you)/g, to: 'yuw' },
{ from: /(?:babe)/g, to: 'babey' },
{ from: /(?:baby)/g, to: 'babey' },
{ from: /(?:kiss)/g, to: 'kith' },
{ from: /(?:fuck)/g, to: 'fwick' },
{ from: /(?:yes)/g, to: 'nyes' },
{ from: /(?:girl)/g, to: 'gwiwl' },
{ from: /(?:boy)/g, to: 'bwiy' },
{ from: /(?:good)/g, to: 'gwood' },
{ from: /(?:going)/g, to: 'gwoing' },
{ from: /(?:cute)/g, to: 'cutey' },
{ from: /(?:love)/g, to: 'wuv' },
{ from: /(?:loving)/g, to: 'wuvving' },
{ from: /(?:rude)/g, to: 'wude' },
{ from: /(?:stop)/g, to: 'stwop' },
{ from: /(?:yes)/g, to: 'yesh' },
{ from: /(?:no)/g, to: 'nu' },
{ from: /(?:yay)/g, to: 'yayy' },
{ from: /(?:horrible)/g, to: 'howwible' },
{ from: /(?:terrible)/g, to: 'tewwible' },
];
// Apply Owofications to the text
const emojis = [
'ɾ⚈▿⚈ɹ', '(・ω・)✾', '(〜 ☌ω☌)〜✾',
'(^◡^)っ✂╰⋃╯', '(¬‿¬)', '(≧◡≦)', '(¬_¬)', '(◠‿◠✿)', '(¬ω¬)', '(◕‿◕✿)',
'ʕ•ᴥ•ʔ', 'ʕ•̀ω•́ʔ✧', '(つ✧ω✧)つ', '(*≧ω≦)', '(´∩。• ᵕ •。∩`)', '(≧◡≦)', '(◕ᴥ◕)',
'(*°▽°*)', '(´。• ω •。`)', '(^▽^)', '(✯◡✯)', '( ´・ω・)っ', '(¬‿¬)', '(*≧ω≦)',
'(*´ω`*)', '(=^-ω-^=)', '(。♥‿♥。)', '(´。• ᵕ •。`)', '(つ✧ω✧)つ', '(づ。◕‿‿◕。)づ',
'(¬‿¬)', '(´• ω •`)', '(づ ̄ ³ ̄)づ', '(づ◡﹏◡)づ', '(っ⇀⑃↼)っ', '(っ´▽`)っ',
'(っ´ω`c)', '(っ*´∀`*)っ', '(=^-ω-^=)', '(*≧ω≦)', '(つ≧▽≦)つ', '(✯◡✯)', '(•ө•)♡',
'(⁄˘⁄ ⁄ ω⁄ ⁄ ˘⁄)♡', '(。♥‿♥。)', '(^▽^)', '(•̀ᴗ•́)و ̑̑', '(•̀ω•́)و✧', '(•̀ᴗ•́)و',
'(*˘︶˘*).。.:*♡', '( ̄▽ ̄)ノ', '(づ ̄ ³ ̄)づ', 'ლ(╹◡╹ლ)', '(つω`。)', '(*°▽°*)',
'✧(σ๑˃̶̀ꇴ˂̶́)σ', '(*°▽°*)', '(^◡^)っ✂╰⋃╯', '(¬‿¬)', '(≧◡≦)', '(¬_¬)', '(◠‿◠✿)',
'(*°▽°*)', '(´∩。• ᵕ •。∩`)', '(≧◡≦)', '(◕‿◕✿)', 'ʕ•ᴥ•ʔ', 'ʕ•̀ω•́ʔ✧', '(つ✧ω✧)つ',
'(*≧ω≦)', '(´∩。• ω •。∩`)', '(≧◡≦)', '(◕ᴥ◕)', '(*°▽°*)', '(´。• ᵕ •。`)', '(^▽^)',
'(✯◡✯)', '( ´・ω・)っ', '(¬‿¬)', '(*≧ω≦)', '(*´ω`*)', '(=^-ω-^=)', '(。♥‿♥。)',
'(´。• ᵕ •。`)', '(つ✧ω✧)つ', '(づ。◕‿‿◕。)づ', '(¬‿¬)', '(´• ω •`)', '(づ ̄ ³ ̄)づ',
'(づ◡﹏◡)づ', '(っ⇀⑃↼)っ', '(っ´▽`)っ', '(っ´ω`c)', '(っ*´∀`*)っ', '(=^-ω-^=)',
'(*≧ω≦)', '(つ≧▽≦)つ', '(✯◡✯)', '(•ө•)♡', '(⁄˘⁄ ⁄ ω⁄ ⁄ ˘⁄)♡', '(。♥‿♥。)', '(^▽^)',
'(•̀ᴗ•́)و ̑̑', '(•̀ω•́)و✧', '(•̀ᴗ•́)و', '(*˘︶˘*).。.:*♡', '( ̄▽ ̄)ノ', '(づ ̄ ³ ̄)づ',
'ლ(╹◡╹ლ)', '(つω`。)', '(*°▽°*)', '✧(σ๑˃̶̀ꇴ˂̶́)σ', '(*°▽°*)', '(^◡^)っ✂╰⋃╯',
'(¬‿¬)', '(≧◡≦)', '(¬_¬)', '(◠‿◠✿)', '(*°▽°*)', '(´∩。• ᵕ •。∩`)', '(≧◡≦)', '(◕‿◕✿)',
'ʕ•ᴥ•ʔ', 'ʕ•̀ω•́ʔ✧', '(つ✧ω✧)つ', '(*≧ω≦)', '(´∩。• ω •。∩`)', '(≧◡≦)', '(◕ᴥ◕)',
'(*°▽°*)', '(´。• ᵕ •。`)', '(^▽^)', '(✯◡✯)', '( ´・ω・)っ', '(¬‿¬)', '(*≧ω≦)',
'(*´ω`*)', '(=^-ω-^=)', '(。♥‿♥。)', '(´。• ᵕ •。`)', '(つ✧ω✧)つ', '(づ。◕‿‿◕。)づ',
'(¬‿¬)', '(´• ω •`)', '(づ ̄ ³ ̄)づ', '(づ◡﹏◡)づ', '(っ⇀⑃↼)っ', '(っ´▽`)っ',
'(っ´ω`c)', '(っ*´∀`*)っ', '(=^-ω-^=)', '(*≧ω≦)', '(つ≧▽≦)つ', '(✯◡✯)', '(•ө•)♡',
'(⁄˘⁄ ⁄ ω⁄ ⁄ ˘⁄)♡', '(。♥‿♥。)', '(^▽^)', '(•̀ᴗ•́)و ̑̑', '(•̀ω•́)و✧', '(•̀ᴗ•́)و',
'(*˘︶˘*).。.:*♡', '( ̄▽ ̄)ノ', '(づ ̄ ³ ̄)づ', 'ლ(╹◡╹ლ)', '(つω`。)', '(*°▽°*)',
'✧(σ๑˃̶̀ꇴ˂̶́)σ', '(*°▽°*)', '(^◡^)っ✂╰⋃╯', '(¬‿¬)', '(≧◡≦)', '(¬_¬)', '(◠‿◠✿)',
'(*°▽°*)', '(´∩。• ᵕ •。∩`)', '(≧◡≦)', '(◕‿◕✿)', 'ʕ•ᴥ•ʔ', 'ʕ•̀ω•́ʔ✧', '(つ✧ω✧)つ',
'(*≧ω≦)', '(´∩。• ω •。∩`)', '(≧◡≦)', '(◕ᴥ◕)', '(*°▽°*)', '(´。• ᵕ •。`)', '(^▽^)',
'(✯◡✯)', '( ´・ω・)っ', '(¬‿¬)', '(*≧ω≦)', '(*´ω`*)', '(=^-ω-^=)', '(。♥‿♥。)',
'(´。• ᵕ •。`)', '(つ✧ω✧)つ'];
if (enableOwOContent) {
owofications.forEach(owofication => {
content = content.replace(owofication.from, owofication.to);
});
const randomEmoji = getRandomEmoji(emojis);
content += ' ' + randomEmoji;
}
return content;
}
<<if $initBandits === "dead">>
<<unset $bandit1>> <<unset $bandit2>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 6)>>
And that was that.
Two lowly crooks are now lying dead upon the irregular, full-of-shit road.
Perhaps you should've spared a prayer for their souls, asking for mercy or further torment. Maybe you could've looted their bodies for more than the few coins you found in that sack, but you are still too tired, even more so after that action. Instead, you press on, walking down the road.
<<else>>
And with that, you are free to do what you should arelady be doing: walking.
<</if>>
For no more than half an hour, you can finally spot, while straining your eyes, a pillar of ashy smoke disrupting the monotonous gray and clouded sky, at last, a banner of civilization.
Perhaps you could reach the remote village post sundown if you continue walking.
[[I should rest, firstt|Rest]]
[[I can rest when I'm there][ ]]<<run UIBar.unstow();>> <<run UIBar.show();>>
<<set $askedforBlacksmithWork = false>>
<<fadein 200ms 2s>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>>
You walk,
<<fadein 200ms 4s>>
<div style="margin-left: 20px;">
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>> and walk,</div>
<<fadein 200ms 6s>>
<div style="margin-left: 60px;">
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>> and walk,</div>
<<fadein 200ms 8s>>
<div style="margin-left: 120px;">
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>> and walk,</div>
<<fadein 200ms 10s>>
<div style="margin-left: 160px;">
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>> and walk a little bit more,</div>
<<fadein 200ms 12s>>
<div style="margin-left: 200px;">
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 1)>> And at last,
<<fadein 200ms 14s>>you are there.
[[Finally...|Village Center]]<</fadein>>
</div>
<</fadein>>
<</fadein>>
<</fadein>>
<</fadein>>
<</fadein>>
<</fadein>><<run UIBar.stow();>><<run UIBar.hide();>>
<<set $character[1].currentLife += Math.round(($character[1].MAXLIFE / 2))>>
<<set $character[1].currentMana += Math.round(($character[1].MAXMANA / 2))>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'hours', 6)>>
<div align='left'>
<<set $randomLoreBit = $loreBits[random(0, $loreBits.length - 1)]>>
<i> <<print $randomLoreBit>></i>
</div>
<div align='right'>
<<fadein 200ms 8s>>
6 hours have passed.
You are rested.
<<fadein 200ms 10s>>
[[Continue|I can rest when I'm there]]
<</fadein>>
<</fadein>>
</div><b>Wicked Mind: I am still making this part.</b>
<<if $hour >= 14>>
[[Tavern]] The tavern is open
<<else>>
The tavern is closed.
<</if>>
<<if $hour < 17 && $hour >= 7>>
[[Blacksmith]]
<<else>>
The forge is closed for today.
<</if>>
[[Houses]]
<<link "Loiter for an hour">>
<<set $now = setup.changeDate(State.variables.now, 'hours', 1)>>
<<goto "Village Center">>
<</link>>
<<if $Banditproblem === "in progress">>
[[To the woods]]
<</if>><<run UIBar.unstow();>> <<run UIBar.show();>>
<<if $hour <= 16 && $oldMan.hasmet is false>>
<span id="grumpy">
<b>$oldMan.Name:</b> I'm busy, don't even bother.
</span>
<<elseif $hour <= 16 && $oldMan.hasmet is true>>
<span id="grumpy">
<b>$oldMan.Name:</b> It's you...
</span>
<<elseif $hour >= 17>>
<span id="grumpy">
<b>$oldMan.Name:</b> I'm going to close, so git.
</span>
<</if>>
<<if $askedforBlacksmithWork === false>>
<<link "Ask for work (Test: Speech)">>
<<test Speech 6>>
<<onSuccess>>
<<replace "#grumpy">>
<b>$oldMan.Name:</b> Urgh... fine. But come back later.
<</replace>>
<<set $askedforBlacksmithWork = true>>
<<onFailure>>
<<replace "#grumpy">>
<b>$oldMan.Name:</b> No.
<</replace>>
<</test>>
<</link>>
<<elseif $askedforBlacksmithWork === true && $hour <17>>
<<link "Work as Blacksmith">>
<<goto "BlacksmithWork">>
<</link>>
<</if>>
[[Houses]]
<<if $hour >= 14>>
[[Tavern]] The tavern is open
<<else>>
The tavern is closed.
<</if>>
[[Village Center]]Simple houses with very shut windows and doors, with no sign of a kind soul to allow a vagrant like yourself to have some a meal and rest.
<<if $hour >= 14>>
[[Tavern]] The tavern is open
<<else>>
The tavern is closed.
<</if>>
<<if $hour < 17 && $hour >= 7>>
[[Blacksmith]]
<<else>>
The forge is closed for today.
<</if>>
[[Village Center]]<<run UIBar.unstow();>> <<run UIBar.show();>>
<<set $Owner.hasmet to true>>
<<if visit("Tavern") > 2>>
<<if $character[1].Ancestry === "Dwarf">>
<i>As you enter the establishment, you are met with disgruntled eyes and coldness in the air. The man on the balcony is the only one who says out loud what everyone is thinking.</i>
<b><<print $Owner.Name>>:</b> We be danmed, it's a shorty...
<<elseif $character[1].Ancestry === "Draconian">>
<i> As you enter the establishment, you are welcomed with worried gazes and cold sweat. Clearly, your kind isn't a good sign to these folks.</i>
<b><<print $Owner.Name>>:</b> Shit, we are not in trouble. Are we?
<<elseif $character[1].Ancestry === "Herald">>
<i>As you enter the establishment, some of the customers leave the precinct, others let out an exasperated sigh.</i>
<b><<print $Owner.Name>>:</b> Look, as long you don't wish to go "kaboom" in our town, you can stay; otherwise, I suggest you find another place to go.
<<elseif $character[1].Ancestry === "Vanadi">>
<i>As you enter the establishment, you can feel the stares of the townsfolk as they wonder: "What the hell are you doing here?" Well... not everyone can have a narrator to tell them your whole backstory.</i>
<b><<print $Owner.Name>>:</b> A furry in these parts? You are lucky we don't worship the golden arsehole. What can I do for you?
<<else>>
<i>As you enter the establishment, you are met with... well, no one bothers with your presence. It seems that you will fit well here.</i>
<b><<print $Owner.Name>>:</b> What can i do for you?
<</if>>
<</if>>
<<link "Chat">>
<<replace "#chattext1">>
Mood: <<cycle "$Mood" autoselect>>.
<<option "Rude">>
<<option "Friendly">>
<<option "Flirty">>
<</cycle>>
<hr>
Ask:
<span id="answer1"> <<link "What's the village name?">>
<<replace "#answer1">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Greetings, could you tell me what this place's name is? <br>
<b><<print $Owner.Name>>:</b> I could've... if we had one.
<span id ="answer1A"> <<link "What do you mean by that?">>
<<replace "#answer1A">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Hold on, what do you mean by that?
<br>
<b><<print $Owner.Name>>:</b> I'm telling you, we don't have one...every time we tried to give ourselves a name, there would be a fire or some plague, so we just gave up on the idea.
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> Hold the fuck up, what the hell do you mean with that shit?
<br>
<b><<print $Owner.Name>>:</b> I'm telling you, we don't have one...every time we tried to give ourselves a name, there would be a fire or some plague, so we just gave up on the idea.
<<elseif $Mood is "Flirty">>
<b><<print $character[1].Name>>:</b> Oooh... mysterious, me likey!.<br>
<b><<print $Owner.Name>>:</b> ... Get a hold of yourself <<if $gender.noun is "man">> man <<elseif $gender.noun is "woman">> woman <<else>> person<</if>>, we don't have a name, every time we tried to decide one, there would be a plague or fire to worry our asses first.
<</if>>
<</replace>>
<</link>></span>
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> What's the name of this shithole? <br>
<b><<print $Owner.Name>>:</b> It's called "Fuck off Arsehole Village" be welcomed.
<span id ="answer1A"> <<link "What do you mean by that?">>
<<replace "#answer1A">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Sorry, but seriously, what is the name of this village?
<br>
<b><<print $Owner.Name>>:</b> Eh. We don't have one...every fucking time we tried to give ourselves a name, there would be a fire or some plague, so we just gave up on the idea.
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> Hold the fuck up, what the hell do you mean with that shit?
<br>
<b><<print $Owner.Name>>:</b> We don't have one, fuckface...every time we tried to give ourselves a name, there would be a fucking fire or some plague, or even a dumbass like you would appear, so we just gave up on the idea.
<<elseif $Mood is "Flirty">>
<b><<print $character[1].Name>>:</b> Come on, you can be honest with me, it is 'Dicktown' is it not?<br>
<b><<print $Owner.Name>>:</b> ... Get a hold of yourself <<if $gender.noun is "man">> man <<elseif $gender.noun is "woman">> woman <<else>> person<</if>>, we don't have a name, every time we tried to decide one, there would be a plague or fire.
<</if>>
<</replace>>
<</link>></span>
<<elseif $Mood is "Flirty">>
<b><<print $character[1].Name>>:</b> Say handsome, what's the name of the vicinity - let me guess: "Handsome Man Village"? <br>
<b><<print $Owner.Name>>:</b> Sorry, but I'm not into the ugly ones like yourself... As for the village name, well,.. Dicktown would be a better name than what we have...
<span id ="answer1A"> <<link "What do you mean by that?">>
<<replace "#answer1A">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Hold on, what do you mean by that?
<br>
<b><<print $Owner.Name>>:</b> I'm telling you, we don't have one...every time we tried to give ourselves a name, there would be a fire or some plague, so we just gave up on the idea.
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> Hold the fuck up, what the hell do you mean with that shit?
<br>
<b><<print $Owner.Name>>:</b> I'm telling you, we don't have one...every time we tried to give ourselves a name, there would be a fire or some plague, so we just gave up on the idea.
<<elseif $Mood is "Flirty">>
<b><<print $character[1].Name>>:</b> Tell me, is it Dicktown? - I would also not tell if it was 'Dicktown'...<br>
<b><<print $Owner.Name>>:</b> ... Get a hold of yourself <<if $gender.noun is "man">> man <<elseif $gender.noun is "woman">> woman <<else>> person<</if>>, we don't have a name, every time we tried to decide one, there would be a plague or fire.
<</if>>
<</replace>>
<</link>></span>
<span id ="answer1B"> <<link "Your loss, then.">>
<<replace "#answer1B">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Fair enough, what other activities can one <<if $gender.noun is "man">> man <<elseif $gender.noun is "woman">> woman <<else>> person <</if>> do to have some fun?
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> Fuck you, I did not even want to flirt with you; just look at yourself, disgusting! - Hope you get stabbed, arsehole.
<br>
<b><<print $Owner.Name>>:</b> Oh yeah?! Then you can get the hell away from here, idiot!
<b><<print $Owner.Name>>:</b> By the way, consider yourself banned from here! <<set $bannedfromTavern1 to true>>
<<elseif $Mood is "Flirty">>
<b><<print $character[1].Name>>:</b> Aw, but it's fun messing with you...<br>
<b><<print $Owner.Name>>:</b> Yeah, but I am asking you to stop, okay? Can you do that?
<</if>>
<</replace>>
<</link>></span>
<</if>>
<</replace>>
<</link>>
<span id=question2><<link "What is your name?">>
<<replace "#question2">>
<<if $Mood is "Friendly">>
<b><<print $character[1].Name>>:</b> Hey friend, mind if I ask you your name?
<br>
<b><<print $Owner.Name>>:</b> Not at all, the name is Ulffer. And yours? <<set $Owner.Name to "Ulffer">>
<br>
<b><<print $character[1].Name>>:</b> Mine is <<print $character[1].Name>>.
<<elseif $Mood is "Rude">>
<b><<print $character[1].Name>>:</b> Ugly mug! Do you have a name?
<br>
<b><<print $Owner.Name>>:</b> Sure, it's "Fuck off" <<set $Owner.Name to "Fuck off (Not actually his name)">>
<<else>>
<b><<print $character[1].Name>>:</b> Hey Daddy, what's your name.
<br>
<b><<print $Owner.Name>>:</b> Never again call me daddy. Did you hear me?<<set $Owner.Name to "Daddy">>
<</if>>
<</replace>>
<</link>>
</span>
<</replace>>
<</link>>
<span id="chattext1"></span>
<<link "Ask for a job">>
<<replace "#questgiver1">>]
<<if $bannedfromTavern1 !== true>>
<<if $Banditproblem === undefined>>
<b><<print $Owner.Name>>: </b> You are a mercenary, huh?
<b><<print $Owner.Name>>: </b> Well.., we have some bandit problems.
Not many people come to these parts, but when they do, they always tell me their story about meeting with some ruffians. They must be camping in the woods near the road. If you are looking for a more adventurous job, you could tell them their services as a welcoming committee are no longer needed.
<b><<print $Owner.Name>>: Whatever you find with them is yours.
<span id="acceptquest1">
<<link "Accept the quest">>
<<set $Banditproblem = "in progress">>
<<replace "#acceptquest1">>
Quest Accepted!
<</replace>>
<</link>>
</span>
<</if>>
<<if $askedforBlacksmithWork === false>>
<b><<print $Owner.Name>>:</b> Volo may hire you to help him at his forge, but the fella isn't the most charitable... you can say that I sent you. <<set $oldMan.Name to "Volo">>
<</if>>
<<else>>
<b><<print $Owner.Name>>: </b> A job? How about getting stabbed by a bandit?! Can you do that? Get out of here! A freaking job... for fucks sake.
<span id="acceptquest1">
<<link "Accept the quest">>
<<set $Banditproblem = "in progress">>
<<replace "#acceptquest1">>
Quest... Accepted?
<</replace>>
<</link>>
</span>
<</if>>
<</replace>>
<</link>>
<span id="questgiver1"></span>
<<link "Ask for a room">>
<<if $bannedfromTavern1>>
<<replace "#text2">>
<b><<print $Owner.Name>>: </b> Shouldn't have said those things, arsehole, now get your ass out of my tavern!
<</replace>>
<<else>>
<<if $character[1].Gold >= 7>>
<<replace "#text2">>
<b><<print $Owner.Name>>: </b>Sure, cost just seven pieces.
[[Rest until morning|TavernRest][$character[1].Gold -= 7, State.variables.now = setup.changeDate(State.variables.now, 'hours', (6 - State.variables.now.getHours())), State.variables.now.setMinutes(0)]]
[[Rest for 6 hours|TavernRest][$character[1].Gold -= 7, State.variables.now = setup.changeDate(State.variables.now, 'hours', 6)]]
<</replace>>
<<else>>
<<replace "#text2">>
Sure, cost seven pieces.
You don't have enough money.
<</replace>>
<</if>>
<</if>>
<</link>>
<span id="text2"></span>
[[Houses]]
<<if $hour < 17 && $hour >= 7>>
[[Blacksmith]]
<<else>>
The forge is closed for today.
<</if>>
[[Village Center]]<<run UIBar.stow();>><<run UIBar.hide();>>
<<set $now = setup.changeDate(State.variables.now, 'hours', 1)>>
<<test Awareness 7>>
<<onSuccess>> <i>(Awareness)</i>
<<test Athletics 9>>
<<onSuccess>> <i>(Athletics)</i>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)>>
<b>Old man:</b>: Hm. Acceptable. Here's your payment.
+5 gold
<<set $character[1].Gold += 5.>>
<<onFailure>> <i>(Athletics)</i>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)>>
<b>Old man:</b>: This is terrbile. I'm not paying you.
<</test>>
<<onFailure>> <i>(Awareness)</i>
<b>Old man:</b>: Are you kidding me?! Get out!
<</test>>
[[Finish work here.|Blacksmith]]<<run UIBar.stow();>><<run UIBar.hide();>>
<<set $character[1].currentLife = $character[1].MAXLIFE>>
<<set $character[1].currentMana = $character[1].MAXMANA>>
<div align='left'>
<<set $randomLoreBit = $loreBits[random(0, $loreBits.length - 1)]>>
<<print $randomLoreBit>>
</div>
<div align='right'>
<<fadein 200ms 8s>>
You are rested.
<<fadein 200ms 10s>>
[[Continue|Tavern]]
<</fadein>>
<</fadein>>
</div><<if $hour >= 18 || $hour <= 5>>
Under the shroud of darkness, you slip through the shadows, your steps silent on the damp earth while trying to avoid stepping on dry leaves or broken twigs. The moonlight filters through the dense canopy of trees, casting eerie shapes on the forest floor. You know why you are here, but parts of you don't really accept the fact that you are hunting other people for money, even if they are criminals. But that's what we do when we are desperate, anything.
With every careful stride, you listen intently to the night sounds – the rustle of leaves, the howl of the wind, and even the distant hoot of an owl, if it's an owl. In your hand, your grip tightens around the <<if $character[1].equipment.mainhand.Type.includes("2-handed")>> handler<<else>>hilt<</if>> of your <<print $character[1].equipment.mainhand.name>>. The respiration is heavy with anticipation as you follow the remnants of a trail that leads deeper into the woods. Thank the darkness for cloaking you like a protective veil as you inch closer to your targets. Your senses heightened as your heart beat excitedly with the rhythm of the hunt. There's an edge to the silence, broken only by the occasional missteps over broken twigs under your foot. You glimpse something ahead.
<<elseif $hour >= 5 || $hour <= 18>>
As the sunlight filters through the leaves, dappling the forest floor with patches of golden light, you tread lightly along the worn path. The greenery of the woods seems barely alive with the squeamish colors and the eerie silence, perhaps a good sign; not many animals means not many aberrations around as well. But the current problem is other; daylight brings a different kind of challenge – visibility may be higher, but so is the risk of being spotted.
As you move with purpose, your eyes scan the surroundings, alert to any movement or sound that might betray the presence of the ruffians. The air is crisp, filled with the sweet scent of shit, pine and earth. Maybe you stepped on a turd on your way here, for the smell has been following you for miles.
You grip your <<print $character[1].mainhand.Name>>, fingers tracing the familiar <<if $character[1].equipment.mainhand.Type.includes("2-handed")>> handler<<else>>hilt<</if>>. Even lacking colors, the forest has a certain magnificence. You can feel nature's defiance of death when you look at the fungus growing on the trunks of trees or when you gaze at the refusal of the leaves to switch to brownish tones. The forest may be malnourished, but it is not dead yet.
With determination returning to your being, you press on. You have a task to fulfill. Criminals to make face "justice".
<</if>>
[[Get closer.|Abandoned encampment][$hour += 1, $minute += 20]]<<if $day >= 2>>
You manage to find an encampment, it looks abandoned.
<span id="investigation1">
<<link "investigate it">>
<<replace "#investigation1">>
<<test Awareness 11>>
<<onSuccess>><i> - Awareness</i>
Thankfully, you were able to discover some footprints amidst the dead leaves and broken twigs spread on the ground. <<if $initBandits !== "dead">> It looks like there were three people last night; one went east, probably drunk beyond belief, while the other two slept the night and went north with the dawn. <<else>> It looks like there was only one person last night, they must have gathered everything and went north.<</if>>
<<onFailure>><i> - Awarness</i>
Okay, either they did a good job hiding their tracks, or you are not good in the head to be doing this type of job. You have no clue about their whereabouts. Or even how many are out there.
<</test>>
<</replace>>
<</link>>
</span>
Search at [[North][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[West][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[East][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
earch at [[South][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
<<elseif $day == 1 && $initBandits !== "dead">>
It is the dark of the night when you find the troublemakers that the tavern's owner asked you to hunt. It is a trio, all gathered around the fire, drinking their poisons and telling their stories, hah! As if they are a bunch of innocent children. A frontal assault would be unwise, too many. Even being furtive would be a risky maneuver, perhaps....
Wait.
You recognize them! At least two of them. It's the bald man and the "mud"-face. You could try a second time to deal with all of this peacefully, but it would be unwise to expect it to work.
As a failsafe, it's better to have your weapons in hand. You never know if someone wants to dance with death,
[[Approach them]]
[[Thinking better, you'd prefer to deal with the matter without words.|Night Ambush]]
<<elseif $day == 1 && $initBandits == "dead">>
It is the dark of the night when you find the troublemakers that the tavern's owner asked you to hunt. It's a single man, he seems in a hurry while he gathers all of his belongings, you could get rid of him now.., or you could make him lead you to his other "friends"...
[[Approach him|Night Ambush]]
[[Follow him|Gather intel]]
<</if>>
<<fadein 200ms 3s>>
You found something...
<<fadein 200ms 5s>>
Looks like an camp, at least, like an abandoned one.
<<set _daysaway to $now.getDate() - 1>>
<span id="textA">
<<link "Explore">>
<<replace "#textA">>
<<test Awareness 6>>
<<onSuccess>> <i> - Awareness</i>
<<if $initbandits === "dead">>
Two tents, so at least three persons were using this site. Everything of value was already gathered, but you can find some small portion of rations and
<<else>>
You can see that at least 3 people used this acampment
<</if>>
<<print _daysaway>>
<<onFailure>> <i> - Awareness</i>
</test>>
<span id="textB">
<<link "Explore more">>
<<replace "#textB">>
<<test Awareness 10>>
<<onSuccess>> <i> - Awareness</i>
<<onFailure>> <i> - Awareness</i>
</test>>
<span id="textC">
<<link "Explore more">>
<<replace "#textC">>
<<test Awareness 16>>
<<onSuccess>> <i> - Awareness</i>
<<onFailure>> <i> - Awareness</i>
</test>>
<</replace>>
<</link>>
</span>
<</replace>>
<</link>>
</span>
<</replace>>
<</link>>
</span>
<</fadein>><</fadein>>You find no trace of the bandits.
You just waisted your time...
Search at [[North][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[West][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[East][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
You find no trace of the bandits.
You just waisted your time...
Search at [[North][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[South][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[East][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
You find a empty bottle, but no trace of the bandits or the drinker.
You just waisted your time...
Search at [[North][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[West][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
Search at [[South][State.variables.now to setup.changeDate(State.variables.now, 'hours', 1), State.variables.now = setup.changeDate(State.variables.now, 'minutes', 30)]].
<<if visited("Combatpage") >= 2>>
Finally, all three of them were dealt with.
[[Simple as that...|Village Center][$Banditproblem to "dealt"]]
<<else>>
Mood: <<cycle "$Mood" autoselect>>.
<<option "Menacing">>
<<option "Diplomatic">>
<<option "Informal">>
<</cycle>>
<hr>
Ask:
<<set _anger to 0>> <<set _friendly to 0>> <<set _itsRenny to false>>
<span id="BanditApproaching">
<span id="question1"><<link "Say hi.">>
<<replace "#question1">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> Weapons down! Nobody needs to get hurt... <<set _anger += 1>>
<b><<print $bandit2.Name>>:</b> Shit...
<b> <<print $bandit1.Name>>:</b> Easy friend... there's plenty of liquor to share. Why don't you join us?
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> I hope I am not interrupting, but there are things that we need to discuss.
<b><<print $bandit2.Name>>:</b> What the hell? - They say, almost choking on their liquor
<b> <<print $bandit1.Name>>:</b> Hey.... I remember you, you are from earlier, aren't ya? <<if $initBandits === "DeceiveResolution">> What it was, again... Remy... Ranndy?
<span id="answer1a"> <<link "It's Rendri">>
<<replace "#answer1a">>
<b><<print $character[1].Name>>:</b> It's Rendri.
<b><<print $bandit2.Name>>:</b> Wait, no! It was Renny, you shit!
<b><<print $bandit3.Name>>:</b> Wait... ?he doesn't know ?his name?
<b><<print $bandit2.Name>>:</b> No, dumbass, ?he lied!
<<set _friendly -= 2>> <<set _anger += 1>>
<</replace>>
<</link>>
<<link "It's Remy">>
<<replace "#answer1a">>
<b><<print $character[1].Name>>:</b> It's Remy.
<b><<print $bandit2.Name>>:</b> Wait, no! It was Renny, you shit!
<b><<print $bandit3.Name>>:</b> Wait... ?he doesn't know /his name?
<b><<print $bandit2.Name>>:</b> No, dumbass, he lied!
<<set _friendly -= 2>> <<set _anger += 1>>
<</replace>>
<</link>>
<<link "It's Renny">>
<<replace "#answer1a">>
<b><<print $character[1].Name>>:</b> It's Renny.
<b><<print $bandit2.Name>></b> Renny! Come on, drink with us!
<b><<print $bandit3.Name>>:</b> Do you know this ?man?
<<set _friendly += 1>> <<set _itsRenny to true>>
<<set _trueName = $character[1].Name>>
<<set $character[1].Name = $character[1].Name + " (Renny)">>
<</replace>>
<</link>>
<<link "It's Bob">>
<<replace "#answer1a">>
<b><<print $character[1].Name>>:</b> It's Bob.
<b><<print $bandit2.Name>>:</b> Wait, no! It was Renny, you shit!
<b><<print $bandit3.Name>>:</b> Wait... ?he doesn't know ?his name?
<b><<print $bandit2.Name>>:</b> No, dumbass, ?he lied!
<<set _friendly -= 2>> <<set _anger += 1>>
<</replace>>
<</link>>
</span>
<<elseif $initBandits === "IntimidationResolution">>
<b><<print $character[1].Name>>:</b> We have nothing to discuss. <<set _anger += 1>>
<<elseif $initBandits === "DiplomacyResolution">>
<b><<print $character[1].Name>>:</b> What? Do you want your money back? Sorry, but no refunds. <<set _anger -= 1>>
<</if>>
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Do you guys have one more drink to share? <br>
<b><<print $bandit2.Name>>:</b> It depends; do we have "idiot" written on our faces?<br>
<b> <<print $bandit1.Name>>:</b> Aren't you the ?man from earlier? Got lost again?
<<set _friendly += 1>> <<set _anger += 1>>
<</if>>
<</replace>>
<</link>></span>
<span id="question2"><<link "Smalltalk.">>
<<replace "#question2">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> Any reason I shouldn't kill you three right now? <br> <<set _anger += 1>>
<b><<print $bandit3.Name>>:</b> Because... it's... wrong? </br>
The other two look at the third guy with either disbelief or amusement at the stupidity of what was said...
<b><<print $bandit1.Name>>:</b> If you kill us, nothing changes. Another group will come and do our jobs. At least we stick just to the roads.
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> So... how has business been? Good?<br>
<<set _anger += 1>><<set _friendly -= 1>>
<b><<print $bandit2.Name>>:</b> Right... as if we would tell you.
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> I didn't get your guy's name at our first encounter.... <br>
<<if _itsRenny is false>>
<b><<print $bandit2.Name>>:</b> Not telling. <br>
<b><<print $bandit1.Name>>:</b> They are Felka and Vargo. Mine's Gregory. <br>
<<set $bandit2.Name to "Felka">> <<set $bandit1.Name to "Gregory">> <<set $bandit3.Name to "Vargo">>
<b><<print $bandit2.Name>>:</b> What the heck, man? <br>
<set _friendly -= 1>> <<set _anger += 1>>
<<else>>
<b><<print $bandit2.Name>>:</b> Come on Renny! You wound me. It's Felka. <<set $bandit2.Name to "Felka">><br>
<b><<print $bandit1.Name>>:</b> Gregory. <<set $bandit1.Name to "Gregory">><br>
<b><<print $bandit1.Name>>:</b> Hi, i am Vargo. <<set $bandit3.Name to "Vargo">><br>
<<set _anger -= 1>>
<</if>>
<</if>>
<</replace>>
<</link>></span>
<span id="question3"><<link "Is there any more bandits?">>
<<replace "#question3">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> Should I worry about more bandits, then?
<b><<print $bandit3.Name>>:</b>...<br>
<b><<print $bandit1.Name>>:</b> I don't know. Should you?<br>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> This whole operation of yours, who of you three is the head?
<b><<print $bandit3.Name>>:</b> Jarret is the head, not us.<br>
<<set $banditleader1.Name to "Jarret">>
<<if _itsRenny>>
<b><<print $bandit2.Name>>:</b> Come on, Renny, did you forget?<br>
<set _friendly -= 1>>
<<else>>
<b><<print $bandit2.Name>>:</b> Shut the fuck up, Vargo.<br>
<<set _anger += 1>>
<</if>>
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Just three men against a whole town? Sorry, but the math isn't in your guy's favor.
<b><<print $bandit3.Name>>:</b> There are more on the hideout... <br>
<<set $hideoutInfo to true>>
<b><<print $bandit1.Name>>:</b> Quiet Vargo, let the talking to us.<br>
<<set _anger += 1>> <set _friendly -= 1>>
<</if>>
<</replace>>
<</link>></span>
<span id="question4"><<link "Ask them if they could leave.">>
<<replace "#question4">>
<<if $Mood is "Menacing">>
<<if _anger < 4 && _friendly > 3>>
<<test Intimidation 7>>
<<onSuccess>>
<i> - Intimidation </i>
<b><<print $character[1].Name>>:</b> Leave! And never come back. <br>
<b><<print $bandit1.Name>>:</b> Big mistake, pal.
Despite his last words, they comply with the orders, leaving the place and going deeper into the forest. Was this the right choice?
<<link "Go back to the village">>
<<set $Banditproblem to "unresolved">>
<<set $character[1].experience += 15>>
<<goto "VillageCenter">>
<</link>>
<<onFailure>>
<i> - Intimidation </i>
<b><<print $character[1].Name>>:</b> Leave! And never come back. <br>
<b><<print $bandit1.Name>>:</b> No. I don't think we will...
<<set _anger += 2>> <<set _friendly -= 2>>
<</test>>
<<else>>
<<test Intimidation 11>>
<<onSuccess>>
<i> - Intimidation </i>
<b><<print $character[1].Name>>:</b> Leave! And never come back. <br>
<b><<print $bandit1.Name>>:</b> Big mistake, pal.
Despite his last words, they comply with the orders, leaving the place and going deeper into the forest. Was this the right choice?
<<link "Go back to the village">>
<<set $Banditproblem to "unresolved">>
<<set $character[1].experience += 15>>
<<goto "VillageCenter">>
<</link>>
<<onFailure>>
<i> - Intimidation </i>
<b><<print $character[1].Name>>:</b> Leave! And never come back. <br>
<b><<print $bandit1.Name>>:</b> No. I don't think we will...
<<set _anger += 2>> <<set _friendly -= 2>>
<</test>>
<</if>>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> How about if I pay you guys to leave? Would you comply?
<b><<print $bandit1.Name>>:</b> ...
<b><<print $bandit1.Name>>:</b> 30 pieces, no less.
<<test Speech 8>>
<<onSuccess>>
<b><<print $character[1].Name>>:</b> 20.
<b><<print $bandit1.Name>>:</b> Tsc, 25.
<b><<print $character[1].Name>>:</b> 15.
<b><<print $bandit1.Name>>:</b> 22. Final offer.
<<if $character[1].Gold >= 22>>
You got the money, but are you willing to pay?
<span id="answerC"><<link "Pay up">>
<<replace "#answerC">>
<<set $character[1].Gold -= 22>>
<b><<print $character[1].Name>>:</b> Fine, here's the money, now leave.
<b><<print $bandit1.Name>>:</b> Pleasure doing business with you.
With his last words, they comply, packing up their things and leaving this place, and you with only one question: was this the right choice?
<<link "Go back to the village">>
<<set $Banditproblem to "unresolved">>
<<set $character[1].experience += 15>>
<<goto "VillageCenter">>
<</link>>
<</replace>><</link>>
<<link "No">>
<<replace "#answerC">>
<b><<print $character[1].Name>>:</b> Forget it.
<b><<print $bandit1.Name>>:</b> If that's the case... Then, I guess we will stay a tad longer...
<</replace>><</link>>
<</span>>
<<else>>
You don't even have the money.
<b><<print $bandit1.Name>>:</b> What? Don't even have the money?<br>
<b><<print $bandit2.Name>>:</b> Shouldn't be making deals you can't hold... <br>
<</if>>
<<onFailure>>
<b><<print $character[1].Name>>:</b> 20.
<b><<print $bandit1.Name>>:</b> 30! No more. No less.
<<if $character[1].Gold >= 30>>
You got the money, but are you willing to pay?
<span id="answerC"><<link "Pay up">>
<<replace "#answerC">>
<<set $character[1].Gold -= 30>>
<b><<print $character[1].Name>>:</b> Fine, here's the money, now leave.
<b><<print $bandit1.Name>>:</b> Pleasure doing business with you.
With his last words, they comply, packing up their things and leaving this place, and you with only one question: was this the right choice?
<<link "Go back to the village">>
<<set $Banditproblem to "unresolved">>
<<set $character[1].experience += 15>>
<<goto "VillageCenter">>
<</link>>
<</replace>><</link>>
<<link "No">>
<<replace "#answerC">>
<b><<print $character[1].Name>>:</b> Forget it.
<b><<print $bandit1.Name>>:</b> If that's the case... Then, I guess we will stay a tad longer...
<</replace>><</link>>
<</span>>
<<else>>
You don't even have the money.
<b><<print $bandit1.Name>>:</b> What? Don't even have the money?<br>
<b><<print $bandit2.Name>>:</b> Shouldn't be making deals you can't hold... <br>
<</if>>
<</onFailure>>
<</test>>
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Why do you guys even stick to this village? I bet there are better places to be.<br>
<b><<print $bandit2.Name>>:</b> What? Don't tell me you don't like the countryside? It is just so calm here... no one bothers anyone. <<set _friendly += 1>>
<</if>>
<</replace>>
<</link>>
<<link "Offer a deal.">>
<<replace "#question4">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b>How about you three start working for me? <br>
<b><<print $bandit2.Name>>:</b> And why the fuck would we do that?
<b><<print $character[1].Name>>:</b> Because if not, I will kill you three.
<<if _friendly > 4 && _anger < 4>>
<<test Intimidation 7>>
<<onSuccess>> <i>- Intimidation</i>
<<onFailure>> <i>- Intimidation</i>
<</test>>
<<else>>
<</if>>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> Is this what you three want to do with the rest of your life? Stealing from others? Preying on the weak?<br>
<b><<print $bandit1.Name>>:</b> That's how the world works... we do what we need to survive.<br>
<b><<print $character[1].Name>>:</b> Perhaps there could be an alternative that you may not have considered yet...
<<if _friendly > 5 && _anger < 5>>
<<test Speech 7>>
<<onSuccess>><i>- Speech</i>
<b><<print $bandit1.Name>>:</b> What do you suggest? <br>
<b><<print $character[1].Name>>:</b> Instead of stealing, you three could offer your services to protect the newcomers from other bad elements. <br>
<b><<print $bandit1.Name>>:</b> ... What do you, guys, think?<br>
<b><<print $bandit2.Name>>:</b> As long we get to eat at the end of the day, I don't care what we do.<br>
<b><<print $bandit3.Name>>:</b> Same. <br>
<b><<print $bandit1.Name>> Then you get yourself a deal, but I'll warn ye, some will not be happy with our change of heart.
You can consider the matter settled.
<<onFailure>> <i>- Speech</i>
<b><<print $bandit1.Name>>:</b> What do you suggest? <br>
<b><<print $character[1].Name>>:</b> Instead of stealing, you three could offer your services to protect the newcomers from other bad elements.
<b><<print $bandit1.Name>>:</b> <i>(Soft laugh)</i> Sorry, but that won't happen... It's too late for that.
<</test>>
<<else>>
<<test Speech 11>>
<<onSuccess>><i>- Speech</i>
<b><<print $bandit1.Name>>:</b> What do you suggest? <br>
<b><<print $character[1].Name>>:</b> Instead of stealing, you three could offer your services to protect the newcomers from other bad elements. <br>
<b><<print $bandit1.Name>>:</b> ... What do you, guys, think?<br>
<b><<print $bandit2.Name>>:</b> As long we get to eat at the end of the day, I don't care what we do.<br>
<b><<print $bandit3.Name>>:</b> Same. <br>
<b><<print $bandit1.Name>> Then you get yourself a deal, but I'll warn ye, some will not be happy with our change of heart.
You can consider the matter settled.
<<link "Go back to the village">>
<<set $Banditproblem to "Converted">>
<<set $character[1].experience += 15>>
<<goto "VillageCenter">>
<</link>>
<<onFailure>> <i>- Speech</i>
<b><<print $bandit1.Name>>:</b> What do you suggest? <br>
<b><<print $character[1].Name>>:</b> Instead of stealing, you three could offer your services to protect the newcomers from other bad elements.
<b><<print $bandit1.Name>>:</b> <i>(Soft laugh)</i> Sorry, but that won't happen...it's too late for that.
<</test>>
<</if>>
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Have the three of you ever thought about a career change? <br>
<b><<print $bandit2.Name>>:</b> Hah! What do you want us to do? Pick flowers?! Fuck off. << set _friendly -= 1>> <br>
<b><<print $character[1].Name>>:</b> I'm just saying it, you three could...
<b><<print $bandit2.Name>>:</b> Yeah? And we aren't interested. << set _anger += 1>>
<</replace>>
<</if>>
<</link>></span>
<<link "Just attack them.">>
<<battle "Ruffian" 3>><</battle>>
<<set $enemyInstances[0].additionalHitChance -= 10 && $enemyInstances[0].traits.push("Drunk")>>
<<set $enemyInstances[1].additionalHitChance -= 10>>
<<set $enemyInstances[2].additionalHitChance -= 10>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
</span>
<</if>>
<<link "go back to the town">>
<<set $character[1].Name = _trueName>>
<</link>>
<nobr>
<<set $bandit3.Name = "Bandit">>
<<set _anger to 2>>
<span id="oneguy">
<<link "Talk to him?">>
<<replace "#oneguy">>
Mood: <<cycle "$Mood" autoselect>>.
<<option "Menacing">>
<<option "Diplomatic">>
<<option "Informal">>
<</cycle>>
<span id="angerbar"><<print _anger>> / 5 Stress</span>
<hr>
<b><<print $bandit3.Name>>:</b> S-Shit... who are you?
<span id="text1"><<link "Act: Calm him down.">>
<<replace "#text1">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> If you don't want to die, it's better to calm yourself down.
<<set _anger += 1>>
<b><<print $bandit3.Name>>:</b> S-shut up! I'm warning you!
<<elseif $Mood is "Diplomatic">>
<<set _anger -= 1>>
<b><<print $character[1].Name>>:</b> I'm not here to harm you, let's talk...
<b><<print $bandit3.Name>>:</b> D-don't come any closer!
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Ow! Ow! Ow! Easy there, friend... let's not get hasty.
<b><<print $bandit3.Name>>:</b> I-I am not an idiot! Stay there!
<</if>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<<if _anger >= 5>>
<<replace "#oneguy">>
<b><<print $bandit3.Name>>:</b> Shut the fuck!
<<link "He had enough of your babble.">>
<<battle "Ruffian" 1>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
<</replace>>
<</if>>
<</link>>
</span>
<span id="text2"><<link "Ask: Who you are?.">>
<<replace "#text2">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> So... how should i call you? Fuckface or dead meat?
<b><<print $bandit3.Name>>:</b> *Gulp* L-look ?man, i don't want a problem. My name is Vargos.
<span id="text2a">
<<link "Call him 'Deadmeat'">>
<<replace "#text2a">>
<b><<print $character[1].Name>>:</b>Nah, I will stick with Deadmeat, and boy, you are in for a load of problems...
<<set $bandit3.Name to "Deadmeat">>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</replace>>
<</link>>
<<link "Call him 'Fuckface'.">>
<<replace "#text2a">>
<b><<print $character[1].Name>>:</b> Nah, I will stick with Fuckface, and boy, you are in for a load of problems...
<<set $bandit3.Name to "Fuckface">>
<<set _anger += 1>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</link>>
<<link "Call him 'Vargos'.">>
<<replace "#text2a">>
<b><<print $character[1].Name>>:</b> Then, Vargos... You are in a lot of problems...
<<set $bandit3.Name to "Vargos">>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</link>>
</span>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> Hey, what's your name? Mine is <<print $character[1].Name>>.
<b><<print $bandit3.Name>>:</b> I-It's V-vargos.... Please, just let me go.<br>
<b><<print $character[1].Name>>:</b> I am afraid i can't do that yet, Vargos.
<<set $bandit3.Name to "Vargos">>
<<set _anger -= 1>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Look, Bob... may i call you Bob?
<b><<print $bandit3.Name>>:</b> That is not my name!
<<set _anger += 1>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<span id="text2b">
<<link "Then, what's your name?">>
<b><<print $character[1].Name>>:</b> Then what's your name, Bob?
<b><<print $bandit3.Name>>:</b> It's Vargos...
<<set $bandit3.Name to "Vargos">>
<b><<print $character[1].Name>>:</b> Vargos, huh? That's a pretty name.
<<set _anger -= 1>>
<<replace "#tesxt2b">>
<</replace>>
<</link>>
</span>
<<link "Listen here, Bob...">>
<<set $bandit3.Name to "Bob">>
<<replace "#tesxt2a">>
<b><<print $character[1].Name>>:</b> Listen here, Bob, the truth is that you are in a lot of problems... and I don't give a shit what your name is, so you either: let me resolve this peacefully, or we are going to do it the "I going to kill you" way.
<b><<print $bandit3.Name>>:</b> F-fine, then...
<</replace>>
<</link>>
</span>
<</if>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<<if _anger >= 5>>
<<replace "#oneguy">>
<b><<print $bandit3.Name>>:</b> Shut the fuck!
<<link "He had enough of your babble.">>
<<battle "Ruffian" 1>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
<</replace>>
<</if>>
<</link>>
</span>
<span id="text3"><<link "Ask: What is you doing here? .">>
<<replace "#text3">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> So you are the little thief of the village? Huh?<br>
<b><<print $bandit3.Name>>:</b> W-well, y-i mean, no! I mean, I am just a lookout! <br>
<b><<print $character[1].Name>>:</b> So there are others?<br>
<b><<print $bandit3.Name>>:</b> Y-yes! They are the real thieves, not me!<br>
<span id="text3a">
<<link "But you helped them.">>
<<replace "#text3a">>
<b><<print $character[1].Name>>:</b> But you helped them, so you are to blame just as your friends.<br>
<b><<print $bandit3.Name>>:</b> What?! N-no! Come on, ?man.
<</replace>>
<</link>>
<<link "I see...">>
<<replace "#text3a">>
<b><<print $character[1].Name>>:</b> I see... What do the others look like?<br>
<b><<print $bandit3.Name>>:</b> Eh... I-I not telling. Not a rat.
<<set _anger += 1>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</link>>
<<link "All the same for me.">>
<<replace "#text3a">>
<b><<print $character[1].Name>>:</b> Don't care it's all the same for me. My job here is to kill you, and that's what I will do.<br>
<b><<print $bandit3.Name>>:</b> S-shit!
<<set _anger += 2>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</link>>
</span>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> I heard rumors of bandits hiding in these forests. You wouldn't know anything about it, would you? <br>
<b><<print $bandit3.Name>>:</b> N-no... Sorry.
<i>Despite his words, he is clearly lying...</i>
<br>
<span id=text3b>
<<link "Don't lie to me">>
<<replace "#text3b">>
<<if $Mood is "Menacing">>
<b><<print $character[1].Name>>:</b> Don't lie to me, you piece of shit! I know it is you!
<<set _anger += 2>>
<b><<print $bandit3.Name>>:</b> I-I am sorry, it's the truth, i did not steal a thing! I am just on the lookout!
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<<elseif $Mood is "Diplomatic">>
<b><<print $character[1].Name>>:</b> I see then. But, one more thing: It is just that I can't get it around my head, but what are you doing here? I mean, alone in the middle of the forest? When there is a village and tavern nearby to sleep at night... it just does not make sense.
<b><<print $bandit3.Name>>:</b> What? N-no, you got it wrong! I-I am just a lookout, not a thief! I swear!
<<elseif $Mood is "Informal">>
<b><<print $character[1].Name>>:</b> Sure.... and I am a pink elephant.
<b><<print $bandit3.Name>>:</b> I-It's the truth, I am not a thief, I am just the lookout...
<<set _anger += 1>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<</if>>
<</link>>
</span>
<<elseif $Mood is "Informal">>
<</if>>
<</replace>>
<<replace "#angerbar">> <<print _anger>>/ 5 <</replace>>
<<if _anger >= 5>>
<<replace "#oneguy">>
<b><<print $bandit3.Name>>:</b> Shut the fuck!
<<link "He had enough of your babble.">>
<<battle "Ruffian" 1>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
<</replace>>
<</if>>
<</link>>
</span>
<span id="text4">
<<link "Let's settle this, then.">>
<<replace "#text4">>
<<if _anger >= 5>>
<b><<print $bandit3.Name>>:</b> Y-you know what?! I had enough of you! <<link "DIE!">>
<<battle "Ruffian" 1>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
<<else>>
<b><<print $bandit3.Name>>:</b> Please... just let me go. I will never come back, I swear!
<div align="center">
<span id="text4a"><<link "Kill him">>
<<battle "Ruffian" 1>><</battle>>
<<set $return to passage()>>
<<goto "Combatpage">>
<<set $enemyInstances[0].currentLife to 5>>
<<set $enemyInstances[0].MAXLIFE to 5>>
<<set $enemyInstances[0].additionalHitchance to -15>>
<</link>> or <<link "Let him go">>
<<replace "#text4a">>
Perhaps this is not the smartest or best decision, but it is the kindest. You allow the poor man to go.
Maybe something good come up from that, but only time will tell.
<</replace>><</link>>
</span>
</div>
<</if>>
<</replace>>
<</link>>
</span>
<</replace>>
<</link>>
</span>
</nobr>
<<if $initBandits === "dead">>
<<link "Just kill him">> <<replace "#oneguy">>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 4)>>
<<test Stealth 6>>
<<onSuccess>> <i>- Stealth </i>
He did not even notices when you <<if $character[1].equipment.mainhand.Type.includes("blunt")>> crushed his skull <<elseif $character[1].equipment.mainhand.Type.includes("piercing")>> pierced his skull <<elseif $character[1].equipment.mainhand.Type.includes("slashing")>> cut his head off <<elseif $character[1].equipment.mainhand.Type.includes("esoteric")>> exploded his brain from inside out<</if>>.
[[Simple as that...|Village Center][$Banditproblem to "dealt"]]
<<onFailure>> <i>- Stealth </i>
<<link "He spotted you before you could do anything.">>
<<battle "Ruffian" 1>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $return to passage()>>
<<goto "Combatpage">>
<</link>>
<</test>>
<</replace>> <</link>>
</span>
<<else>>
<<if visited("Combatpage") >= 2>>
Finally, all three of them were dealt with.
[[Simple as that...|Village Center][$Banditproblem to "dealt"]]
<<else>>
You move through the shadows like a ghost, your steps silent upon the forest floor, with the crackling campfire casting flickering shadows across the faces of the three bandits and their laughter breaking the monotonous silence of the night.
You survey your scene: three men enjoying a hearty drink and a piece of jerked beef. The bald one hardly touches his glass as he prioritizes hearing the wild stories of the others... it looks like he is the smart one of the group.
As for the other two, the young man with a round face and an ugly mug, he is the one that keeps rambling, just stopping to take sips and refills of his drink. And then, the third man, his gaze is focused solely on the fire and the piece of meat it heats.
For now, you wait...
It does not take much time for the younger of the three to get up from its seat and go to the woods to answer the call of nature, which we mortal refers to as "taking a piss"...
<<test Stealth 9>>
<<onSuccess>> <i>- Stealth </i>
You do not waste the chance, you approach the drunkard and with weapons in had, <<if $character[1].equipment.mainhand.Type.includes("blunt")>> you bash his skull open wide.<<elseif $character[1].equipment.mainhand.Type.includes("piercing")>> you impale him, right at his throat... <<elseif $character[1].equipment.mainhand.Type.includes("slashing")>> cut his head off.<</if>>.
Thankfully, there was no sound.... no scream. Just a kill.
The other two bandits remain blissfully unaware for minutes before the elder one points out the lateness of their friend.
<<set $character[1].experience += 5>>
<<set $character[1].Gold += $character[2].Gold>>
<<test Stealth 12>>
<<onSuccess>> <i>- Stealth </i>
Sensing something is amiss, he and his remaining friend reach for the weapons and enter further into the forest...
...with each of their step...
getting closer to you;
Step by step;
Sweat by sweat;
Until...
<<if $character[1].equipment.mainhand.Type.includes("blunt")>>
*THUD!*
<<elseif $character[1].equipment.mainhand.Type.includes("piercing")>>
*SCHLUK!*
<<elseif $character[1].equipment.mainhand.Type.includes("slashing")>>
*SWISH!*
<</if>>.
A strike is made.
And a body lies dead.
Now, there only remains you and the last bandit.
<<set $character[1].experience += 5>>
<<set $character[1].Gold += $character[2].Gold>>
And here he comes to see the deceased body of his former friend. Just before he joins the dead.
<b><<print $bandit1.Name>>:</b> Vargos, where ar... Vargos?! Shit
<b><<print $bandit1.Name>>:</b> You... Heh! Well, fuck me, i guess... I'm gonna be honest with ye kid... if I had known you would do this to us, I'd have killed you on the spot... But guess life is just a bunch of mistakes.
<<link "Let's give him a proper battle.">>
<<battle "Ruffian" 1>><</battle>>
<<set $return to passage()>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 12)>>
<<set $whosturn to "ambush">>
<<goto "Combatpage">>
<</link>>
<<onFailure>> <i>- Stealth </i>
<<fadein 200ms 2s>> .<</fadein>><<fadein 200ms 4s>> .<</fadein>><<fadein 200ms 6s>> .<</fadein>>
<<fadein 200ms 8s>> <b><<print $bandit3.Name>>:</b> He's here!
<<link "Sadly, they have spotted you.">>
<<battle "Ruffian" 2>><</battle>>
<<set $return to passage()>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 15)>>
<<set $whosturn to "ambush">>
<<goto "Combatpage">>
<</link>>
<</fadein>>
<</test>>
<<onFailure>> <i>- Stealth </i>
<<link "Sadly, they have spotted you.">>
<<battle "Ruffian" 3>><</battle>>
<<set State.variables.now = setup.changeDate(State.variables.now, 'minutes', 24)>>
<<set $return to passage()>>
<<set $whosturn to "ambush">>
<<goto "Combatpage">>
<</link>>
<</test>>
<</if>>
<</if>><span id="test2">
<<link "It's dark...">>
<<replace"#test2">>
<<if $character[1].traits.includes("Animal Senses")>>
Its dark...
But your animal senses don't care for it... the feeling of the hunt, the adrenaline, it empowers you, your sight, your scent, your muscles. You maintain a keen watch on the man as if they were your prey. You silently follow as he heads north.
<br>
<<include "Intel2">>
<<elseif $character[1].Ancestry === "Draconian">>
It's dark...
But the night will not hinder you from hunting a human. Your sight may be tampered with, but your scent remains your most powerful asset.
And like every human, they reek of booze and fear. Easy prey.
He heads north...
<br>
<<include "Intel2">>
<<include "Intel2">>
<<elseif $character[1].Ancestry === "Dwarf">>
It's dark...
But the dark is no issue for you, for your eyes glow like two gemstones near the light of a fire, a trait that has born significance for one that has been living underground for decades. As for our pursuit, the man heads north...
<br>
<<include "Intel2">>
<<else>>
<<test Awareness 10>>
<<onSuccess>>
Even though the dark of the night tampers with your vision, you are able to stay behind him as they head north.
<br>
<<include "Intel2">>
<<onFailure>>
It's dark...
Too dark to see shit ahead.
Shit.
<span id="test3">[[Give up.|Village Center][$Banditproblem = "unresolved"]] | <<link "Re-do your steps">><<replace"#test2">>
<<fadein 200ms 2s>> . <<fadein 200ms 4s>> . <<fadein 200ms 6s>> . <</fadein>><</fadein>><</fadein>>
<<fadein 200ms 7s>>
<<test WorldKnowledge 8>>
<<onSuccess>>
<<set State.variables.now to setup.changeDate(State.variables.now, 'hours', 1)>>
You got it! He went north!
<br>
<<include "Intel2">>
<<onFailure>>
Shit...
<<set State.variables.now to setup.changeDate(State.variables.now, 'hours', 1)>>
[[Give up.|Village Center][$Banditproblem = "unresolved"]]
<</test>>
<</fadein>>
<</replace>><</link>></span>
<</test>>
<</if>>
<</replace>>
<</link>>
<<if $character[1].Specialization === "Wizard" || $character[1].Specialization === "Invoker" || $character[1].Specialization === "Warlock" || $character[1].Specialization === "Paladin" || $character[1].Specialization === "Cleric" || $character[1].Specialization === "inquisitor" >>
<<link "Cast a spell (5).">> <<set $character[1].currentMana -= 5>>
<<replace"#test2">>
<<set _magicglow to true>>
You create
<br>
<<include "Intel2">>
<</replace>>
<</link>>
<<elseif $character[1].traits.includes("Architect of Reality")>>
<<link "Create a torch (3)">> <<set $character[1].currentMana -= 3>>
<<replace"#test2">>
<<set _torch to true>>
You create
<br>
<<include "Intel2">>
<</replace>>
<</link>>
<</if>>
</span>
<div align='center'>
<h1>Vanadi</h1>
<hr><h4> "The wild ones." </h4>
<h3>Lore:</h3>
</div>
<hr>
<div align='left'>
In the everlasting tapestry of the world, the Vanadi emerge as enigmatic figures, cloaked in the skins of animals since their very inception. From the tender cradle of childhood, they don masks, shedding their human origins like brittle skin. Do not be deceived; these masks are more than mere ceremonial trinkets. They wield a potent magic, a transformative force that melds flesh and spirit. With these veils, they slip into the skin of fierce and graceful creatures, stepping into the silent dance of the wild.
Yet, adulthood weaves a different tapestry. It is a time when the younglings must learn the primal laws, the whispered secrets of nature's eternal cycle. Some return to their human forms, yet others, forever touched by the spirits, wear hybrid skins, a blend of the human and the beast, walking the line between two worlds.
But alas, the symphony of their existence is marred by the discordant intrusion of the otherworldly Gods. The Wild Spirits, ethereal beings once revered as patrons of this realm's very soul, now find themselves overshadowed. Ellis, the Conquering Sun, casts his scorching disdain, banishing Vanadi from his cities, breeding seeds of hatred and igniting the fires of discrimination. Uldur, the false Saviour, parades with honeyed hollow sermons of forgiveness even as his forces pillage Vanadi's lands, leaving behind only scorched earth and bitter memories. And then there's Urahyahra, the Mother of Monsters, a goddess whose fairness transcends race – every living soul, whether human, elf, or Vanadi, trembles beneath her monstrous dominion, where existence is both a sin and a curse.
Amidst these nightmarish trials, the Vanadi stand defiant, their spirits unyielding against adversity's onslaught. They clutch to their faith with their teeth and claws, refusing to relinquish the sacred artistry of their costumes. Even when the world they knew is no longer the same, they remain resolute, never waiver their strength, never abandon their lands, and never yield to the dominion of the usurping "gods"...
</div>
<hr>
<div align='center'>
<h3>Traits:</h3>
<b>Animal senses:</b>
<i>The Vanadi are keen to find themselves in the world, never getting lost. Additionally, they have a higher chance of striking their enemies.</i>
<b>Feral Mask:</b>
<i>The Vanadi gain the ability to shapeshift during combat, you gain the skills "Form of the Bear", "Form of the Wolf" and "Form of the Eagle".</i>
<hr>
</div>
<<set $return to passage()>>
Imagine that i have actually added the story here.
[[Company Arrives]]
Imagine that i have actually added the story here.
[[Company Arrives]]<<run UIBar.stow();>><<run UIBar.hide();>>
<<silently>>
<<if $character[1].level === 2>>
<<if $character[1].Specialization === 'Vanguard'>>
<<run State.variables.character[1].addSkill("Bash")>>
<<elseif $character[1].Specialization === 'Archer'>>
<<run State.variables.character[1].addTrait("Spare Arrows")>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Overflow")>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<run State.variables.character[1].addSkill("Summon: Undead")>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<run State.variables.character[1].addTrait("Nimble Fingers")>>
<<elseif $character[1].Specialization === 'Thief'>>
<<run State.variables.character[1].addTrait("Nimble Fingers")>>
<<elseif $character[1].Specialization === 'Spy'>>
<<run State.variables.character[1].addTrait("Nimble Fingers")>>
<</if>>
<<elseif $character[1].level === 3>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<run State.variables.character[1].addTrait("Natural Reflexes")>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 4>>
<<set $character[1] AP += 1>>
<<set $character[1] APregen += 1>>
<<elseif $character[1].level === 5>>
<<if $character[1].Specialization === 'Vanguard'>>
<<run State.variables.character[1].addTrait("Weapon Mastery")>>
<<elseif $character[1].Specialization === 'Archer'>>
<<run State.variables.character[1].addTrait("Weapon Mastery")>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<run State.variables.character[1].addTrait("Weapon Mastery")>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Mystical Arsenal")>>
<<run State.variables.character[1].addSkill("Daze")>>
<<run State.variables.character[1].addSkill("Arcane Armor")>>
<<run State.variables.character[1].addSkill("Arcane Beam")>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 6>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 7>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 8>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Overflow II")>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 9>>
<<set $character[1] AP += 1>>
<<set $character[1] APregen += 1>>
<<elseif $character[1].level === 10>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Arcane Mastery")>>
<<run State.variables.character[1].addSkill("Daze All")>>
<<run State.variables.character[1].addSkill("Inferno")>>
<<run State.variables.character[1].addSkill("Blizzard")>>
<<run State.variables.character[1].addSkill("Storm")>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<run State.variables.character[1].addTrait("Arcane Mastery")>>
<<run State.variables.character[1].addSkill("Inferno")>>
<<run State.variables.character[1].addSkill("Blizzard")>>
<<run State.variables.character[1].addSkill("Storm")>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<run State.variables.character[1].addTrait("Arcane Mastery")>>
<<run State.variables.character[1].addSkill("Inferno")>>
<<run State.variables.character[1].addSkill("Blizzard")>>
<<run State.variables.character[1].addSkill("Storm")>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 11>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 12>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Intellect Empowerment")>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 13>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 14>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Overflow III")>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 15>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 16>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 17>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 18>>
<<set $character[1] AP += 1>>
<<set $character[1] APregen += 1>>
<<elseif $character[1].level === 19>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Wizard'>>
<<run State.variables.character[1].addTrait("Essence Renewal")>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<<elseif $character[1].level === 20>>
<<if $character[1].Specialization === 'Vanguard'>>
<<elseif $character[1].Specialization === 'Archer'>>
<<elseif $character[1].Specialization === 'Duelist'>>
<<elseif $character[1].Specialization === 'Assassin'>>
<<elseif $character[1].Specialization === 'Thief'>>
<<elseif $character[1].Specialization === 'Spy'>>
<<elseif $character[1].Specialization === 'Juggernaut'>>
<<elseif $character[1].Specialization === 'Berserker'>>
<<elseif $character[1].Specialization === 'Feral'>>
<<elseif $character[1].Specialization === 'Warlock'>>
<<elseif $character[1].Specialization === 'Invoker'>>
<<elseif $character[1].Specialization === 'Dancer'>>
<<elseif $character[1].Specialization === 'Bard'>>
<<elseif $character[1].Specialization === 'Scholar'>>
<<elseif $character[1].Specialization === 'Paladin'>>
<<elseif $character[1].Specialization === 'Cleric'>>
<<elseif $character[1].Specialization === 'Inquisitor'>>
<</if>>
<</if>>
<</silently>>
<div align='center'>
<<link "Return to the game">><<goto $return>><<set $inMenu to 0>><</link>> | <<link "Return to your Character's Page">><<goto "Characterpage">><</link>>
<h2>Attributes:</h2>
You have <span id="current-avlb-attr"><<print $character[1].availableAttribute>></span> Points remaining.
<hr>
<table>
<tr>
<td> <abbr title="Affects hit chance for Melee weapons, as well as damage on Heavy or Versatile weapons.">STRENGTH:</abbr> </td>
<td> <abbr title="Affects hit chance for Melee weapons, as well as damage on Agile or Versatile weapons.">DEXTERITY:</abbr> </td>
<td> <abbr title="Affects only your Lifeblood (Life).">RESILIENCE:</abbr> </td>
<td> <abbr title="Mainly used for its expertises, it also affects your Essence (Mana) and the majority of abilities.">INTELLIGENCE:</abbr> </td>
<td> <abbr title="Mainly used for its expertise, it also affects some abilities.">CHARISMA:</abbr> </td>
<td> <abbr title="Affects hitchance for Ranged weapons, as well as some abilities.">PERCEPTION:</abbr> </td>
</tr>
<tr>
<td><span id="current-attr-STR"><<print $character[1].STR>></span> </td>
<td><span id="current-attr-DEX"><<print $character[1].DEX>></span></td>
<td><span id="current-attr-RES"><<print $character[1].RES>></span> </td>
<td><span id="current-attr-INT"><<print $character[1].INT>></span> </td>
<td><span id="current-attr-CHA"><<print $character[1].CHA>></span> </td>
<td><span id="current-attr-PER"><<print $character[1].PER>></span> </td>
</tr>
</table>
<hr>
<table>
<tr>
<td>
<<button "Increase Strength">>
<<if ($character[1].availableAttribute >= 1 && $character[1].STR < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].STR += 1>>
<<replace "#current-attr-STR">><<print $character[1].STR>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Strength">>
<<if $character[1].STR > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].STR -= 1>>
<<replace "#current-attr-STR">><<print $character[1].STR>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Dexterity">>
<<if ($character[1].availableAttribute >= 1 && $character[1].DEX < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].DEX += 1>>
<<replace "#current-attr-DEX">><<print $character[1].DEX>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Dexterity">>
<<if $character[1].DEX > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].DEX -= 1>>
<<replace "#current-attr-DEX">><<print $character[1].DEX>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Resilience">>
<<if ($character[1].availableAttribute >= 1 && $character[1].RES < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].RES += 1>>
<<replace "#current-attr-RES">><<print $character[1].RES>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Resilience">>
<<if $character[1].RES > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].RES -= 1>>
<<replace "#current-attr-RES">><<print $character[1].RES>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Intelligence">>
<<if ($character[1].availableAttribute >= 1 && $character[1].INT < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].INT += 1>>
<<replace "#current-attr-INT">><<print $character[1].INT>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Intelligence">>
<<if $character[1].INT > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].INT -= 1>>
<<replace "#current-attr-INT">><<print $character[1].INT>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Charisma">>
<<if ($character[1].availableAttribute >= 1 && $character[1].CHA < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].CHA += 1>>
<<replace "#current-attr-CHA">><<print $character[1].CHA>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Charisma">>
<<if $character[1].CHA > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].CHA -= 1>>
<<replace "#current-attr-CHA">><<print $character[1].CHA>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Perception">>
<<if ($character[1].availableAttribute >= 1 && $character[1].PER < 14)>>
<<set $character[1].availableAttribute -= 1>>
<<set $character[1].PER += 1>>
<<replace "#current-attr-PER">><<print $character[1].PER>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Perception">>
<<if $character[1].PER > 1>>
<<set $character[1].availableAttribute += 1>>
<<set $character[1].PER -= 1>>
<<replace "#current-attr-PER">><<print $character[1].PER>><</replace>>
<<replace "#current-avlb-attr">><<print $character[1].availableAttribute>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
</table>
<h2>Expertises:</h2>
You have <span id="current-avlb-exp"><<print $character[1].availableExpertise>></span> Points remaining.
<hr>
<table>
<tr>
<td>Athletics:</td>
<td>Acrobatics:</td>
<td>Stealth: </td>
<td>Sleight of Hands:</td>
<td>World Knowledge:</td>
<td>Mystical Knowledge:</td>
</tr>
<tr>
<td><span id="current-expertise-Athletics"><<print $character[1].Athletics>></span></td>
<td><span id="current-expertise-Acrobatics"><<print $character[1].Acrobatics>></span></td>
<td><span id="current-expertise-Stealth"><<print $character[1].Stealth>></span ></td>
<td><span id="current-expertise-SleightofHands"><<print $character[1].SleightofHands>></span> </td>
<td><span id="current-expertise-WorldKnowledge"><<print $character[1].WorldKnowledge>></span> </td>
<td><span id="current-expertise-MysticalKnowledge"><<print $character[1].MysticalKnowledge>></span></td>
</tr>
<tr>
<td>Arcane Knowledge:</td>
<td>Speech:</td>
<td>Arts:</td>
<td>Intimidation:</td>
<td>Insight: </td>
<td>Awareness: </td>
</tr>
<tr>
<td><span id="current-expertise-ArcaneKnowledge"><<print $character[1].ArcaneKnowledge>></span></td>
<td><span id="current-expertise-Speech"><<print $character[1].Speech>></span></td>
<td><span id="current-expertise-Arts"><<print $character[1].Arts>></span></td>
<td><span id="current-expertise-Intimidation"><<print $character[1].Intimidation>></span></td>
<td><span id="current-expertise-Insight"><<print $character[1].Insight>></span></td>
<td><span id="current-expertise-Awareness"><<print $character[1].Awareness>></span></td>
</tr>
</table>
<hr>
<table>
<tr>
<td>
<<button "Increase Athletics">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Athletics < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Athletics += 1>>
<<replace "#current-expertise-Athletics">><<print $character[1].Athletics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Athletics">>
<<if $character[1].Athletics > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Athletics -= 1>>
<<replace "#current-expertise-Athletics">><<print $character[1].Athletics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Acrobatics">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Acrobatics < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Acrobatics += 1>>
<<replace "#current-expertise-Acrobatics">><<print $character[1].Acrobatics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Acrobatics">>
<<if $character[1].Acrobatics > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Acrobatics -= 1>>
<<replace "#current-expertise-Acrobatics">><<print $character[1].Acrobatics>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Stealth">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Stealth < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Stealth += 1>>
<<replace "#current-expertise-Stealth">><<print $character[1].Stealth>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Stealth">>
<<if $character[1].Stealth > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Stealth -= 1>>
<<replace "#current-expertise-Stealth">><<print $character[1].Stealth>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Sleight of Hands">>
<<if ($character[1].availableExpertise >= 1 && $character[1].SleightofHands < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].SleightofHands += 1>>
<<replace "#current-expertise-SleightofHands">><<print $character[1].SleightofHands>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Sleight of Hands">>
<<if $character[1].SleightofHands > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].SleightofHands -= 1>>
<<replace "#current-expertise-SleightofHands">><<print $character[1].SleightofHands>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase World Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].WorldKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].WorldKnowledge += 1>>
<<replace "#current-expertise-WorldKnowledge">><<print $character[1].WorldKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease World Knowledge">>
<<if $character[1].WorldKnowledge > 1 >>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].WorldKnowledge -= 1>>
<<replace "#current-expertise-WorldKnowledge">><<print $character[1].WorldKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Mystical Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].MysticalKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].MysticalKnowledge += 1>>
<<replace "#current-expertise-MysticalKnowledge">><<print $character[1].MysticalKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Mystical Knowledge">>
<<if $character[1].MysticalKnowledge > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].MysticalKnowledge -= 1>>
<<replace "#current-expertise-MysticalKnowledge">><<print $character[1].MysticalKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Arcane Knowledge">>
<<if ($character[1].availableExpertise >= 1 && $character[1].ArcaneKnowledge < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].ArcaneKnowledge += 1>>
<<replace "#current-expertise-ArcaneKnowledge">><<print $character[1].ArcaneKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Arcane Knowledge">>
<<if $character[1].ArcaneKnowledge > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].ArcaneKnowledge -= 1>>
<<replace "#current-expertise-ArcaneKnowledge">><<print $character[1].ArcaneKnowledge>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Speech">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Speech < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Speech += 1>>
<<replace "#current-expertise-Speech">><<print $character[1].Speech>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Speech">>
<<if $character[1].Speech > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Speech -= 1>>
<<replace "#current-expertise-Speech">><<print $character[1].Speech>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Arts">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Arts < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Arts += 1>>
<<replace "#current-expertise-Arts">><<print $character[1].Arts>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Arts">>
<<if $character[1].Speech > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Arts -= 1>>
<<replace "#current-expertise-Arts">><<print $character[1].Arts>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<!-- Repeat the above structure for other expertise -->
<tr>
<td>
<<button "Increase Intimidation">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Intimidation < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Intimidation += 1>>
<<replace "#current-expertise-Intimidation">><<print $character[1].Intimidation>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Intimidation">>
<<if $character[1].Intimidation > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Intimidation -= 1>>
<<replace "#current-expertise-Intimidation">><<print $character[1].Intimidation>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<!-- Repeat the above structure for other expertise -->
<tr>
<td>
<<button "Increase Insight">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Insight < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Insight += 1>>
<<replace "#current-expertise-Insight">><<print $character[1].Insight>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Insight">>
<<if $character[1].Insight > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Insight -= 1>>
<<replace "#current-expertise-Insight">><<print $character[1].Insight>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
<tr>
<td>
<<button "Increase Awareness">>
<<if ($character[1].availableExpertise >= 1 && $character[1].Awareness < 20)>>
<<set $character[1].availableExpertise -= 1>>
<<set $character[1].Awareness += 1>>
<<replace "#current-expertise-Awareness">><<print $character[1].Awareness>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
<td>
<<button "Decrease Awareness">>
<<if $character[1].Awareness > 1>>
<<set $character[1].availableExpertise += 1>>
<<set $character[1].Awareness -= 1>>
<<replace "#current-expertise-Awareness">><<print $character[1].Awareness>><</replace>>
<<replace "#current-avlb-exp">><<print $character[1].availableExpertise>><</replace>>
<<else>>
<</if>><</button>>
</td>
</tr>
</table>
<<link "Return to the game">><<goto $return>><<set $inMenu to 0>>
<<run UIBar.unstow();>> <<run UIBar.show();>>
<<if $character[1].Ancestry === 'Elf'>>
<<set $character[1].MAXLIFE = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + Math.round($character[1].PER / 2) + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<elseif $character[1].Ancestry === 'Herald' && $heraldChoice === "Nature">>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].MAXMANA = parseInt(Math.round(10 + $character[1].RES + 5 * $character[1].level) / 2)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<else>>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<</if>>
<</link>> | <<link "Return to your Character's Page">><<goto "Characterpage">>
<<run UIBar.unstow();>> <<run UIBar.show();>>
<<if $character[1].Ancestry === 'Elf'>>
<<set $character[1].MAXLIFE = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + ($character[1].RES + Math.round($character[1].PER / 2)) * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + Math.round($character[1].PER / 2) + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<elseif $character[1].Ancestry === 'Herald' && $heraldChoice === "Nature">>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5 + $character[1].MAXMANA)>>
<<set $character[1].MAXMANA = parseInt(Math.round(10 + $character[1].RES + 5 * $character[1].level) / 2)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<<else>>
<<set $character[1].MAXLIFE = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].currentLife = parseInt(25 + $character[1].RES * $character[1].level + 5)>>
<<set $character[1].MAXMANA = parseInt(10 + $character[1].RES + 5 * $character[1].level)>>
<<set $character[1].currentMana to parseInt($character[1].MAXMANA)>>
<</if>>
<</link>>
</div>
You both walk under the heavy cloak of dusk, your eyes fixed on their silhouette ahead, as his eyes focus on the ground, trying, but failing, to have some balance. Maybe he shouldn't have drank that much... But thanks to that, his movements are slower, allowing you to sneak behind him.
You two have walked a fair bit.
But it seems that the man has a lot of ground to cover. It bears no end to the constant act of putting one foot in front of the other. And step, tread, pace, whatever more variations there are, you keep doing it, and you are tired of it already.
You two have been careful how you step in each twig or leave so far, trying to make the softest sound possible, trying not to gain the attention of some night predator... you never know when a beast is hungry... But, like every occasion, a break to the status quo has to occur. In this case, you step too harshly on a fallen branch, and the sweet and ecstatic sound of a *CRUNCH* echoes through the woods.
Startled like a deer, he looks back, and as luck's middle finger to you, he looks directly at your direction.<br>
<<if $character[1].Ancestry === "Elf">>
But thankfully, all he perceives are trees. You should thank the man for drinking too much the next time you two meet. If you don't end up killing each other first...
The both of you move on, this time more hastily, more paranoic, getting closer and closer... to a stone structure... a fort! Ah, a hideout...
The structure is small but old, ravaged by time alone. It's impressive it remains standing in the conditions it is in. But, together with the moss and vines, it allows it to blend in with the surroundings. Maybe, if some of the torchlights weren't lit, you would miss it.
You could try to explore the fortification...
But without knowing how many there are inside? It would be a terrible idea...
But a job is a job...
<<link "History is made by the brave or the fool!">>
<<goto "End of update">>
<</link>>
[[Leave it for another day..|Village Center][$Banditproblem = "Gathered Intel"]]
<<else>>
<<test Stealth 10>> <i> = Stealth </i>
<<onSuccess>>
His eyes scanning the dark forest, between each tree, for each possible shape that seems to not fit right with the place. But all that he sees is the pitch black of night. "She of the Three Faces" was merciful tonight and only gave you a warning.
The both of you move on, this time more hastily, more paranoic, getting closer and closer... to a stone structure... a fort! Ah, a hideout...
The structure is small but old, ravaged by time alone. It's impressive it remains standing in the conditions it is in. But, together with the moss and vines, it allows it to blend in with the surroundings. Maybe, if some of the torchlights weren't lit, you would miss it.
You could try to explore the fortification...
But without knowing how many there are inside? It would be a terrible idea...
But a job is a job...
<<link "History is made by the brave or the fool!">>
<<goto "End of update">>
<</link>>
[[Leave it for another day.|Village Center][$Banditproblem = "Gathered Intel"]]
<<onFailure>> <i> = Stealth </i>
And oh... he sees you.
Still, seemingly possessed by the animal's spirit, he starts to sprint, zig-zagging, from left to right with the hope that its predator, you, loses sight of him... a conflict that lasts for less than a minute. With him as the victorious front.
You could still try to remake your steps and look for hints he might have left with the chase, but it would take time...
<span id="test3">[[Give up.|Village Center][$Banditproblem = "unresolved"]] | <<link "Re-do your steps">><<replace"#test2">>
<<fadein 200ms 2s>> . <<fadein 200ms 4s>> . <<fadein 200ms 6s>> . <</fadein>><</fadein>><</fadein>>
<<fadein 200ms 7s>>
<<test WorldKnowledge 8>>
<<onSuccess>>
<<set State.variables.now to setup.changeDate(State.variables.now, 'hours', 1)>>
<br>
At last, you managed to deduce where the ruffian was headed to...
It was a decayed fortress, very well hidden from any prying eye.
You could try to explore the fortification...
But without knowing how many there are inside? It would be a terrible idea...
But a job is a job...
<<link "History is made by the brave or the fool!">>
<<goto "End of update">>
<</link>>
[[Leave it for another day.|Village Center][$Banditproblem = "Gathered Intel"]]
<br>
<<include "Intel2">>
<<onFailure>>
Shit...
<<set State.variables.now to setup.changeDate(State.variables.now, 'hours', 1)>>
[[Give up.|Village Center][$Banditproblem = "unresolved"]]
<</test>>
<</fadein>>
<</replace>><</link>></span>
<</test>>
<</if>><div align="center">
[[Character Page|Characterpage]] | [[Inventory]]
<hr>
|<h2> Jornal: </h2>|
<<link "Red my Origin again">>
<<replace "#origntext">>
<<if $character[1].Origin === "Escapee">>
"You've managed to scrape away from the gripping claws of draconian slavery, although you owe your newfound freedom to the odd decision of a guard who chose to rest at the most convenient time for you. But who's complaining? Not you, perhaps the other slaves who did not get the memo? But who cares about their opinion, anyway?
In the bizarre minds of those reptiles, you're practically a free soul in the world now – well, at least until you cross paths with one of those Scalebound fanatics, but at least those are as rare as common sense. To most draconians, it does not matter from whence you came; if you are not working as a slave, then you aren't one.
But let's not downplay the years you've toiled away crafting the Draconians' weapons, structures, and designs. And let's not forget those nights of catering to the whims of the demanding draconian ladies, an experience far less enjoyable than one might initially imagine.
Nevertheless, you've survived – or more accurately, parts of you have survived, bearing the marks of harsh cuts and bites as badges of resilience. What's left doesn't have the slightest intention of taking a leisurely rest right now. No, it yearns for restitution, for the stolen moments and wasted years to return with interest.
Sadly, true freedom doesn't come cheap, especially when your coin purse is lighter than a cloud, and the only ones willing to employ a former slave are the rebellion groups who risk themselves to free other slaves. You're going to spoil your hands, tackling the oddest jobs and questionable tasks, to slowly and certainly fallible, produce a reputation as a mercenary who answers to no one but themselves."
<<elseif $character[1].Origin === "Free-human">>
You've seen it all slip away, haven't you? The palaces, the gleaming gold, the finest clothing money could buy, and a line of lovers that would make any court poet envious – all gone. A single disastrous wager, a treacherous 'associate' who turned out to be a viper in disguise – that's the tale of your riches-to-rags plunge. But then again, that's life in the Great Desert of Havar. A place where slaves can ascend to nobility while nobles plummet into servitude in the blink of an eye. It's what they mean when they say, 'You reap what you sow.'
Sure, you might've engaged in some morally questionable endeavors to amass that obscene wealth back in the day, but it's different, right? Back then, you were on the winning side, not playing the part of the dupe, but that's how it sadly works in the golden cities; only those with gold are considered citizens.
Gold, and gold alone, speaks as the hammer of justice. No law protects someone from unfair deals or theft. No bribe is enough to secure someone's wealth. Even for the chance of work, one has to pay a hefty price. Thus, many have fallen into a treacherous and unending cycle of debt and semi-slavery. Others are sold as slaves in markets and caravans for and by Draconian tourists, a profitable and despicable practice that rends piles of Draconian coins.
Alas, it's all behind you now. The past is a distant mirage, fading with every step you take, retreating like a cowardly cur. You had to abandon your opulent abode, or else you'd be consigned to the same fate as those other poor saps – a life of backbreaking labor and subservience. So here you are, traversing the Grasslands amidst Draconians, Elves, and fellow humans who, unlike you, never had the privilege of tasting life's finer fruits and instead languished as perpetual thralls.
<<elseif $character[1].Origin === "Free-Liberated">>
Like countless others before you and doubtlessly countless more to come, you were nothing more than a human slave, or at least until recently. By some twisted stroke of luck, you found yourself among the double-digit number of slaves granted a semblance of freedom. The reasons behind your newfound liberty matter little to you; you are thankful to be no longer within the cruel grasp of Ulgarosh Citadel (Uhl-gah-roash), the very heart of the draconian empire, a testament to the hundreds of thousands of slaves whose blood and sweat had soaked into the stones over centuries, their spirits crushed beneath the draconian overlords' rule.
But behind those stone-cold walls, your brother remains trapped alongside those reptilian monsters. Your existence as a slave, while undoubtedly unbearable, was not as agonizing as it had been in the last month. You both served primarily as cookers in the household of a minor draconian family—though using the term 'family' felt foreign, given the draconians' peculiar concept of familial bonds. They traded partners with every gestation. As soon as the offspring were born, they were to be trained by their biological fathers to hunt and fight. After years of this harsh education, they returned to their mothers to learn their tongue and history, and, above all, they were taught reverence for the dragons. Only then were these draconian children granted a semblance of freedom. An irony that was not lost; the draconians valued their offspring's liberty while ruthlessly enslaving yours. But such musings mattered little in the grand scheme of your existence. The truth was, they fed you. You had time to rest and mend from wounds and diseases. You even had your own house within those walls, although it was far from the comfort the draconians enjoyed. A part of you yearned for the familiar weight of chains, the perverse sense of stability it offered. But another part, a defiant part, yearned for dignity—for you and your brother.
You couldn't stand the thought of him remaining captive for any moment longer. Whispers among the slaves spoke of northern human lands engaging in the commerce of slaves. Horrendous as it is, perhaps, if you could amass enough coins, you might secure your brother's freedom, wrenching him from the clutches of the draconians. In the vast expanse of your determination, the spark of hope flickered, dim yet unyielding, lighting the path to your uncertain future.
<<elseif $character[1].Origin === "Sick">>
Sometimes...Sometimes, when you squeeze your eyelids shut, closing your senses of the world, you can feel it moving.
Slithering through your phloems, worming its way deep within you, that vile imprint burrowing, forming a nest within you, a mark into the very core of your wood-flesh to brand you as the new abomination, a child of the dark goddess Urahyahra, "The Horned maw"; "The mother of monsters" as the mortals call her.
You can feel the hunger within you. The lust that suggests, no, demands you to quench your thirst with blood, feed your hunger with flesh and bones, and force yourself to spread your "gift" with others.
The call to purge the weak;
The urge to change, to evolve, and to be more. So much more.
It's like a necessity, an instinct that somehow was always inside you, hidden in some locked chamber, that slowly, day by day, consumes your being.
But you have to be stronger.
You cannot allow her to have another twisted child.
The thought of your starting to delve into those desires terrifies you. That "thing" is not the being you desire to be; that "gift" is not a gift at all. It's a curse, a twisted view of nature that grows at the same rate as it devours itself whole. It's madness.
No wonder your "serie'rey" shunned you, or as in human terms, your "family"-although that term does not entirely grasp the complexity of your connection... You were more than kin; the three of you, carved from the same roots, fed by the same soil, and your minds and feelings entwined as one, it was harmonic.
But when the dark mother decided to play favorites, they were forced to serve you from that harmony to save themselves from the disease you now carry in your thoughts. But you are lost without them. They made you whole. But you cannot put them in danger of sharing such fate. No, no one deserves this.
You ran away, as far as you could from them;
But it's merely a matter of time before her influence condemns you to become a bannermen of her twisted visage, propagating her cycle of unending violence as spores of a mutated carnivorous plant that seeks proliferation at all moments. That's why you must resist her as long as you can. Her design is cunning, a cascading effect of unending chaos.
She may be a goddess, but some once stood toe to toe with her before the dragon's birth. Perhaps they have a cure.
There must be one.
<<elseif $character[1].Origin === "Curious mind">>
<<elseif $character[1].Origin === "Searching for a cure">>
<<elseif $character[1].Origin === "Without home">>
<<elseif $character[1].Origin === "Called">>
<<elseif $character[1].Origin === "Overworld Scout">>
<<elseif $character[1].Origin === "Hired for a job">>
<<elseif $character[1].Origin === "Banished">>
"Honor.
What does that damned word even mean?
You had "honor" once when you were nothing more than a lapdog for your matron when you beat some sense into those who did not follow her orders.
When she told you to sit, you'd sit;
When she told you to bark, you'd bark;
When she told you to kill, you'd kill;
Fuck "honor". Fuck that bitch, she got what she deserved, a knife on her throat. But that is not what the other dwarves saw, no. They only saw a "liability" as a son who committed matricide. Fuck them too.
At least it was fast.
The trial had no delay settled in a single day. The court dictated you were guilty, not even allowing you to have a lawyer or being able to present your case, no, just the punishments; you'd be marked as an outcast and sent to the overworld to never put a foot again inside the undercities. And, of course, it meant that they would strip you of anything that marked you as a Dwarf: your belongings, heritage, and even your beard.
Now, you are alone in a world you have no fucking clue how it works, no one to help or give a fuck for you.
You are fucked..."
<<elseif $character[1].Origin === "Immature">>
<<elseif $character[1].Origin === "Ex-Scalebound>>
<<elseif $character[1].Origin === "Survivor">>
<<elseif $character[1].Origin === "Prey">>
<</if>>
<<link "Close">>
<<replace "#origntext">>
<</replace>>
<</link>>
<</replace>>
<</link>>
<span id="origntext"></span>
<<silently>>
<<if $initBandits !== undefined>>
Just hours before I reached the unnamed village, I met two bandits on the road, an old and hairless man and another, younger but far uglier, that had its face covered in some brownish substance.
<<if $initBandits === "dead">>
I dealt with them on the spot. They won't bother anyone anymore.
<<elseif $initBandits === "DeceiveResolution">>
I managed to trick them into believing I was some "old friend" of theirs. Hope it pays off in the future, but for now, it allowed me to live another day.
<<elseif $initBandits === "IntimidationResolution">>
They understood I was not in the mood to get robbed.
<<elseif $initBandits === "DiplomacyResolution">>
I convinced them not to kill me but had to pry myself off some of my coins; not off to a great start if I say so myself.
<</if>><</if>>
<</silently>>
</div>[[Halls]]There are no one outside of the entrance.
<<if visited() < 2>>
<<set $banditsnumber to 12>>
<span id="hallsoutside"
<<link "Sneak inside">>
<<replace "#hallsoutside">>
<<test Stealth 10>>
<<onSuccess>>
<<onFailure>>
<</test>>
<</replace>>
<</link>>
<<link "Make your way inside">>
<<replace "#hallsoutside">>
You rush inside
<</replace>>
<</link>>
<<link "Try to fool them">>
<<replace "#hallsoutside">>
<<test Speech 12>>
<<onSuccess>>
<<onFailure>>
<</test>>
<</replace>>
<</link>>
</span>
<<else>>
[[Halls]]
<</if>>
<<link "Return another day">>
<<set $banditFortress to "visited">>
<<goto "Village Center">>
<</link>>[[Entrance]]
[[Armory|"Armory"]]
[[The main room]]
[[Room1]]
[[Room2]] [[Halls]][[Halls]]
Secret door:
[[The main room]][[Halls]]
<<link "You meet an enemy">>
<<set $banditnumber -= 2>>
<<set $return to passage()>>
<<goto "Combatpage">>
<<battle "Ruffian" 2>>
<</link>>
<<if visited() <2>><<set $itenlist to ["dagger", "potion", "gold", "leather", "sword", "pants", "nothing"]>>
<<else>> <<set $itenlist to "nothing">>
<</if>>
<<link "explore this room">>
<<set _loot to Math.floor(Math.random * _itenlist)>>
<<replace "#loottable">>
<<switch _loot>>
<<case "dagger">>
you found a dagger
<<case "potion">>
you found a potion
<<case "gold">>
you found some gold
<<case "leather">>
you found some leather armor
<<case "sword">>
you found some pants
<<case "pants">>
you found some pants
<<deafault>>
You already explored this room.
<</switch>>
<</replace>>
<</link>>
<span id="loottable"></span>