From e11c538450c16dacace44f705cc54bc62369f93c Mon Sep 17 00:00:00 2001 From: MedievalSteve Date: Mon, 18 Nov 2024 14:37:26 +1000 Subject: [PATCH] Bugfix updates to version 2.01 Demonologist Spells have been implemented. Fixed errors in the layout for Custom Classes - skills and abilities sections. Removed "readonly" from Secondary Skills and Paths textboxes to allow for custom edits. The Ammunition Repeating section event listener has been made more specific so that it does not overwrite custom data unless the Ammo type is changed. Multiple buttons beside Stealth and Perception were confusing some users. A toggle option has been added on the settings page, switching which button is visible. Armour penalties (from non-profession) were not being included in their relevant calculations; Javascript has been added to support it properly. Many of the AF3 armour options were incorrectly classified as AF4; this has now been fixed. Custom classes were not able to see spell lists; this has been corrected. Rearranged the front character sheet so that the most commonly used items are at the top - please send feedback, as it can always be changed back. Renamed the first two tabs to better reflect their purpose. The level advancement math was totally wrong! It has been adjusted and should be working properly now - please report any math errors. --- Dragon Warriors/Dragon Warriors Revised.css | 402 ++- Dragon Warriors/Dragon Warriors Revised.html | 2929 ++++++++++++------ Dragon Warriors/sheet.json | 3 +- 3 files changed, 2161 insertions(+), 1173 deletions(-) diff --git a/Dragon Warriors/Dragon Warriors Revised.css b/Dragon Warriors/Dragon Warriors Revised.css index c216cbaa0545..17ffaa48f3ba 100644 --- a/Dragon Warriors/Dragon Warriors Revised.css +++ b/Dragon Warriors/Dragon Warriors Revised.css @@ -42,6 +42,7 @@ padding: var(--padding); /* Consistent padding */ font-size: inherit; /* Inherit font size from the root */ box-sizing: border-box; + font-family: 'Cormorant Unicase', serif; } .sheet-auto-expand { @@ -255,7 +256,7 @@ } .ui-dialog .charsheet img.icon.shield { - width: 98%; + width: 95%; } .ui-dialog .charsheet img.icon.hand, @@ -280,10 +281,12 @@ /* Styling for header images */ .ui-dialog .charsheet img.headerimage { width: 100%; + height: auto; } .ui-dialog .charsheet img.icon.sword { - width: 60%; + width: 98%; + height: auto; } /* Additional image styling */ .ui-dialog .charsheet img.icon.bow { @@ -1298,17 +1301,16 @@ display: grid; grid-template-areas: "common common common" - "primaryattributes afattributes finalcombatattributes" - "finalattackdefenceattributes afattributes finalcombatattributes" - "evasionattribute hpattributes finalcombatattributes" - "stealthperceptionattributes hpattributes finalcombatattributes" - "mamdattributes hpattributes finalcombatattributes" - "gapfillimg mpattributes classcombatabilities"; - - /* Set all columns to equal width (1fr) */ - grid-template-columns: 1fr 1fr 1fr; - grid-template-rows: auto; /* Automatically adjust row height */ + "primaryattributes finalattackdefenceattributes afattributes" + "finalmeleecombatattributes finalrangedcombatattributes hpattributes" + "finalmeleecombatattributes finalrangedcombatattributes stealthperceptionattributes" + "finalmeleecombatattributes finalrangedcombatattributes evasionattribute" + "classcombatabilities mpattributes mamdattributes"; + /* Set all columns to equal width (1fr) */ + grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-rows: auto; gap: 10px; /* Space between grid items */ + box-sizing: border-box; } .common { @@ -1375,6 +1377,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .primaryattributes h2 { @@ -1461,6 +1464,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .finalattackdefenceattributes h2 { @@ -1527,6 +1531,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .evasionattribute h2 { @@ -1558,6 +1563,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .mamdattributes h2 { @@ -1596,6 +1602,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .stealthperceptionattributes h2 { @@ -1635,9 +1642,9 @@ margin: 0 5px; } - .gapfillimg { - grid-area: gapfillimg; - } + /* .gapfillimg { */ + /* grid-area: gapfillimg; */ + /* } */ .hpattributes { grid-area: hpattributes; @@ -1647,6 +1654,7 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; } .hpattributes h2 { @@ -1660,20 +1668,20 @@ .afattributes { display: grid; grid-area: afattributes; - grid-template-columns: 1fr 1fr; /* Adjust column widths */ + grid-template-columns: 1fr 2fr; /* Adjust column widths */ grid-template-areas: "afattribheader afattribheader" - "imgshieldcol aftype" - "imgshieldcol aftypeinput" - "imgshieldcol afname" + "aftype aftypeinput" "imgshieldcol afinput" - "shieldbox shieldbox" - "shieldtogglebox shieldtogglebox"; + "imgshieldcol shieldtogglebox" + "imgshieldcol frontshieldhidden"; gap: 5px; background-color: var(--primary-bg-color); padding: var(--padding); border-radius: var(--border-radius); - border: 5px double var(--border-color); /* Double-line border */ + border: 5px double var(--border-color); + box-sizing: border-box; + align-items: start; /* Vertically aligns the content */ } .afattributes h2 { @@ -1686,62 +1694,42 @@ /* Assign grid areas based on class names */ .afattributes .imgshieldcol { grid-area: imgshieldcol; - display: flex; - justify-content: center; - align-items: center; + width: 98%; } .afattributes .aftype { grid-area: aftype; - display: flex; - align-items: center; } .afattributes .aftypeinput { grid-area: aftypeinput; - } - - .afattributes .afname { - grid-area: afname; - display: flex; - align-items: center; + width: 98%; } .afattributes .afinput { grid-area: afinput; } - .afattributes .shieldbox { - grid-area: shieldbox; - display: flex; - align-items: center; - } - .shieldtogglebox { grid-area: shieldtogglebox; } - - .afattributes .shieldhidden { - grid-area: shieldhidden; - grid-template-areas: - "shielddie shieldbutton"; - } - .shielddie { - grid-area: shielddie; - } - - .shieldbutton { - grid-area: shieldbutton; + .shieldtogglebox select.shield { + width: 98%; } - .finalcombatattributes { - grid-area: finalcombatattributes; + .shieldhidden { + grid-area: frontshieldhidden; + } + + .finalmeleecombatattributes { + grid-area: finalmeleecombatattributes; display: grid; gap: 5px; background-color: var(--primary-bg-color); /* Make sure this matches your design */ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + box-sizing: border-box; grid-template-columns: 1fr 1fr; /* Ensures all elements stack in a single column */ grid-template-areas: "finalcombatheader finalcombatheader" @@ -1749,23 +1737,47 @@ "equippedweaponbox equippedweaponbox" "abrbox abrbox" "damagebox damagebox" - "swordimage swordimage" - "rangedattack1 rangedattack1" - "equippedrangedweaponbox equippedrangedweaponbox" - "equippedammobox equippedammobox" - "rangedabrbox rangedabrbox" - "rangeddamagebox rangeddamagebox" - "bowimage rangedweaponranges" - + "meleeothereffects meleeothereffects" + "swordimage swordimage"; + } + + .finalrangedcombatattributes { + grid-area: finalrangedcombatattributes; + display: grid; + gap: 5px; + background-color: var(--primary-bg-color); /* Make sure this matches your design */ + padding: var(--padding); + border-radius: var(--border-radius); + border: 5px double var(--border-color); /* Double-line border */ + grid-template-columns: 1fr 1fr; /* Ensures all elements stack in a single column */ + box-sizing: border-box; + grid-template-areas: + "finalcombatheader finalcombatheader" + "rangedattack1 rangedattack1" + "equippedrangedweaponbox equippedrangedweaponbox" + "equippedammobox equippedammobox" + "rangedabrbox rangedabrbox" + "rangeddamagebox rangeddamagebox" + "bowimage rangedweaponranges"; } - .finalcombatattributes h2 { + + .finalmeleecombatattributes h2 { + grid-area: finalcombatheader; + text-align: center; + font-size: 19px; + margin-bottom: 10px; + grid-row: 1; + } + + .finalrangedcombatattributes h2 { grid-area: finalcombatheader; text-align: center; font-size: 19px; margin-bottom: 10px; + grid-row: 1; } - + .meleeattack1 { grid-area: meleeattack1; } @@ -1781,6 +1793,10 @@ .damagebox { grid-area: damagebox; } + + .meleeothereffects { + grid-area: meleeothereffects; + } .rangedattack1 { grid-area: rangedattack1; @@ -1822,7 +1838,9 @@ padding: var(--padding); border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ + grid-template-rows: max-content; grid-template-columns: 1fr; /* Ensures all elements stack in a single column */ + box-sizing: border-box; grid-template-areas: "classcombatabilitiesheader" "skills_known" @@ -1841,17 +1859,59 @@ } .melee { + display: grid; grid-area: melee; + grid-template-rows: max-content; + grid-template-columns: 1fr; /* Ensures all elements stack in a single column */ + grid-template-areas: + "barbarianmelee" + "knightmelee" + "warlockmelee" + "assassinmelee" + "huntermelee" + "knavemelee" + "elementalistmelee" + "mysticmelee" + "priestmelee" + "demonologistmelee" + "nomelee"; } - .melee h2 { - grid-row: 1; - grid-column: 1 / -1; - text-align: center; - font-size: 19px; - margin-bottom: 10px; - } - + .barbarianmelee { + grid-area: barbarianmelee; + } + .knightmelee { + grid-area: knightmelee; + } + .warlockmelee { + grid-area: warlockmelee; + } + .assassinmelee { + grid-area: assassinmelee; + } + .huntermelee { + grid-area: huntermelee; + } + .knavemelee { + grid-area: knavemelee; + } + .elementalistmelee { + grid-area: elementalistmelee; + } + .mysticmelee { + grid-area: mysticmelee; + } + .priestmelee { + grid-area: priestmelee; + } + .demonologistmelee { + grid-area: demonologistmelee; + } + .nomelee { + grid-area: nomelee; + } + + .mpattributes { grid-area: mpattributes; display: grid; @@ -1861,6 +1921,7 @@ border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ grid-template-columns: 1fr; /* Ensures all elements stack in a single column */ + box-sizing: border-box; grid-template-areas: "mpattribheader" "mpattributeshidden" @@ -2471,48 +2532,68 @@ border: 5px double var(--border-color); /* Double-line border */ grid-template-columns: 1fr; grid-template-areas: - "spells"; - } - - .spells { - grid-area: spells; + "sorcerer" + "mystic" + "warlock" + "elementalist" + "demonologist" + "noncaster" ; } - - .spell-entry { - border: 1px solid var(--border-color); - border-radius: var(--border-radius); - padding: 10px; - margin-bottom: 10px; - background-color: var(--primary-bg-color); - } - - .spell-entry > div { /* Targets the direct children divs within .spell-entry */ - margin-bottom: 5px; - } - - .spell_name, - .spell_range, - .spell_duration, - .spell_replaces, - .spell_rarity, - .spell_origin { - font-weight: bold; - } - .spell_name { /* Style the spell name */ - font-size: 22px; /* Increased font size */ - font-weight: 700; /* Bolder font weight */ - } - - .spell_desc p { - font-size: 18px; /* Reduced font size for descriptions */ - font-family: 'Macondo', serif; - } - - .spell_darkness p { - font-size: 18px; /* Reduced font size for darkness descriptions */ - font-family: 'Macondo', serif; - } + .sorcerer_spell_list { + grid-area: sorcerer; + } + .mystic_spell_list { + grid-area: mystic; + } + .warlock_spell_list { + grid-area: warlock; + } + .elementalist_spell_list { + grid-area: elementalist; + } + .demonologist_spell_list { + grid-area: demonologist; + } + .noncaster { + grid-area: noncaster; + } + + .spell-entry { + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + padding: 10px; + margin-bottom: 10px; + background-color: var(--primary-bg-color); + } + + .spell-entry > div { /* Targets the direct children divs within .spell-entry */ + margin-bottom: 5px; + } + + .spell_name, + .spell_range, + .spell_duration, + .spell_replaces, + .spell_rarity, + .spell_origin { + font-weight: bold; + } + + .spell_name { /* Style the spell name */ + font-size: 22px; /* Increased font size */ + font-weight: 700; /* Bolder font weight */ + } + + .spell_desc p { + font-size: 18px; /* Reduced font size for descriptions */ + font-family: 'Macondo', serif; + } + + .spell_darkness p { + font-size: 18px; /* Reduced font size for darkness descriptions */ + font-family: 'Macondo', serif; + } /* Grid layout for inventory section */ .inventory { @@ -2576,13 +2657,13 @@ border-radius: var(--border-radius); border: 5px double var(--border-color); /* Double-line border */ grid-template-areas: - "armheader armheader" - "armourtypelist armourtypelist" - "basearmourdetails basearmourdetails" - "subheader subheader" - "armourproficiencypenalties armourproficiencypenalties" - "skullimage shieldtogglebox"; - + "armheader armheader" + "armourtypelist armourtypelist" + "basearmourdetails basearmourdetails" + "subheader subheader" + "armourproficiencypenalties armourproficiencypenalties" + "skullimage shieldtogglebox" + "inventoryshieldhidden inventoryshieldhidden" ; } /* Full-width headings */ @@ -2619,18 +2700,8 @@ } .armour .shieldhidden { - grid-area: shieldhidden; - grid-template-areas: - "shielddie" - "shieldbutton"; + grid-area: inventoryshieldhidden; } - .shielddie { - grid-area: shielddie; - } - .shieldbutton { - grid-area: shieldbutton; - } - /* General Section Styling */ .money { @@ -3061,10 +3132,13 @@ input.element-toggle3[value="Earth"] ~ div.earth_spell_list, input.element-toggle3[value="Water"] ~ div.water_spell_list, input.element-toggle3[value="Fire"] ~ div.fire_spell_list, input.element-toggle3[value="Darkness"] ~ div.darkness_spell_list, -input.profession-toggle[value="Elementalist"] ~ div.spelllist, -input.profession-toggle[value="Warlock"] ~ div.spelllist, -input.profession-toggle[value="Demonologist"] ~ div.spelllist, -input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.spelllist { +input.profession-toggle[value="Demonologist"] ~ div.demonologist_spell_list, +input.profession-toggle[value="Demonologist"] ~ div.demonologist_sorcerer_spells, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.sorcerer_spell_list, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.mystic_spell_list, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.warlock_spell_list, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.elementalist_spell_list, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.demonologist_spell_list { display: grid; } @@ -3091,7 +3165,7 @@ input.profession-toggle[value="Elementalist"] ~ div.customskills, input.profession-toggle[value="Knave"] ~ div.customskills, input.profession-toggle[value="Priest"] ~ div.customskills, input.profession-toggle[value="Demonologist"] ~ div.customskills, -input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ divs, +input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.knight, input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.barbarianskills, input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.assassinskills, input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([value="Warlock"]):not([value="Assassin"]):not([value="Knave"]):not([value="Hunter"]):not([value="Priest"]):not([value="Mystic"]):not([value="Elementalist"]):not([value="Demonologist"]):not([value="Sorcerer"]):not([value=""]) ~ div.hunterskills, @@ -3106,18 +3180,6 @@ input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([valu display: grid; /* Displays the element as a grid layout */ } -.charsheet input.rollhp-toggle:checked ~ div.rollbasehpbuttoncontainer, -.charsheet input.rollstats-toggle:checked ~ div.rollbasestatsbuttoncontainer { - display: block; -} - -.charsheet input.weaponskill1:checked ~ div.weaponskillrow1, -.charsheet input.weaponskill2:checked ~ div.weaponskillrow2, -.charsheet input.weaponskill3:checked ~ div.weaponskillrow3, -.charsheet input.shield-toggle:checked ~ div.shieldhidden { - display: block; -} - .charsheet input.track:not([value="0"]) ~ div.track, .charsheet input.disarm_technique:not([value="0"]) ~ div.disarm_technique, .charsheet input.main_gauche:not([value="0"]) ~ div.main_gauche, @@ -3204,36 +3266,42 @@ input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([valu display: block; } -/* When "Core" is selected, show ONLY the core powers div within the elementalistskills div */ -.charsheet input.elementalist_raw_power_type[value="Core"] ~ .elementalist_core_powers { - display: block; +.charsheet input.rollhp-toggle:checked ~ div.rollbasehpbuttoncontainer, +.charsheet input.rollstats-toggle:checked ~ div.rollbasestatsbuttoncontainer { + display: block; } -/* When "PG" is selected, show ONLY the alternate powers div within the elementalistskills div */ -.charsheet input.elementalist_raw_power_type[value="PG"] ~ .elementalist_alternate_powers { - display: block; +.charsheet input.weaponskill1:checked ~ div.weaponskillrow1, +.charsheet input.weaponskill2:checked ~ div.weaponskillrow2, +.charsheet input.weaponskill3:checked ~ div.weaponskillrow3 { + display: block; } -/* When "Both" is selected, show BOTH divs within the elementalistskills div */ +.charsheet input.shield[value="1"] ~ div.shieldhidden { + display: block; +} + +.charsheet input.elementalist_raw_power_type[value="Core"] ~ .elementalist_core_powers, +.charsheet input.elementalist_raw_power_type[value="PG"] ~ .elementalist_alternate_powers, .charsheet input.elementalist_raw_power_type[value="Both"] ~ .elementalist_alternate_powers, .charsheet input.elementalist_raw_power_type[value="Both"] ~ .elementalist_core_powers { - display: block; + display: block; } -/* Hide both divs by default */ -.charsheet div.elementalist_alternate_powers, -.charsheet div.attr_elementalist_core_powers { /* Use .attr_elementalist_core_powers here as well */ - display: none; +.charsheet input.ranged_magic_toggle[value="Enabled"] ~ div.rangedmagicallowed { + display: block; +} + +.charsheet input.steper_toggle[value="1"] ~ .steper_d20, +.charsheet input.steper_toggle[value="0"] ~ .steper_2d10 { + display: block; } + .charsheet input.supremacy_able[value="disabled"] ~ div.supremacy, .charsheet input.paths_toggle[value="disabled"] ~ div.pathscontainer, .charsheet input.secondaryskills_toggle[value="disabled"] ~ div.secondaryskillscontainer, -.charsheet input.playerspells_toggle[value="disabled"] ~ div.playerspell { - display: none; -} - -/* Hide all sections by default */ +.charsheet input.playerspells_toggle[value="disabled"] ~ div.playerspell, .charsheet div.knightskills, .charsheet div.barbarianskills, .charsheet div.assassinskills, @@ -3278,6 +3346,7 @@ input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([valu .charsheet div.mystic_spell_list, .charsheet div.warlock_spell_list, .charsheet div.elementalist_spell_list, +.charsheet div.demonologist_spell_list, .charsheet div.air_spell_list, .charsheet div.earth_spell_list, .charsheet div.water_spell_list, @@ -3377,9 +3446,12 @@ input.profession-toggle:not([value="Knight"]):not([value="Barbarian"]):not([valu .charsheet div.bloodrage_button_front, .charsheet div.main_gauche_button_front, .charsheet div.elementalist_alternate_powers, -.charsheet div.elementalist_core_powers { +.charsheet div.elementalist_core_powers, +.charsheet div.steper_d20, +.charsheet div.steper_2d10, +.charsheet div.rangedmagicallowed { display: none; - } +} /* Base styles for all custom templates */ .sheet-rolltemplate-custom, diff --git a/Dragon Warriors/Dragon Warriors Revised.html b/Dragon Warriors/Dragon Warriors Revised.html index 298c68c6db7b..01072a14f379 100644 --- a/Dragon Warriors/Dragon Warriors Revised.html +++ b/Dragon Warriors/Dragon Warriors Revised.html @@ -2,8 +2,8 @@
Dragon Warriors - - + + @@ -11,39 +11,28 @@
- -
-
-
-
-
-
-
-
-

Characteristics

-
Strength
@@ -51,7 +40,6 @@

Characteristics

-
Reflexes
@@ -59,7 +47,6 @@

Characteristics

-
Intelligence
@@ -67,7 +54,6 @@

Characteristics

-
Psychic Talent
@@ -75,7 +61,6 @@

Characteristics

-
Looks
@@ -84,10 +69,8 @@

Characteristics

-

Combat Factors

-
Melee Attack
@@ -104,11 +87,8 @@

Combat Factors

-
-
-

Dodging

Evasion @@ -117,7 +97,6 @@

Dodging

-

Magical Combat Factors

@@ -133,78 +112,77 @@

Magical Combat Factors

-

Stealth and Perception

- -
Stealth
- - + +
+ +
+ +
+ +
- -
Perception
- - + +
+ +
+ +
+ +
- -
+ +

Armour

-
Shield
-
- Type + Type
-
- -
- -
- Armour Factor +
+ + +
+
Sword
- +
+
+

Ranged Combat Summary

Ranged Attack
-
- -

Profession Abilities

-
Skills Known @@ -460,668 +439,684 @@

Profession Abilities

- -
- - - -

Barbarian Profession Abilities

-
-
- Track - -
- Roll Track -
-
-
-
-
- Berserk - -
- Defence Penalty -
- Attack Bonus -
-
-
-
-
+
+ +
+ +
- Bloodrage - -
- -
-
-
- -
+

Barbarian Profession Abilities

- Iron Will - -
- Activate against the following spells: Command, Curse, Transfix, Enslave, Enthrall, Benight, Turncoat, Pacify, Dark Thoughts, Winds of Change, and Witch Steed. - + Track + +
+ Roll Track
-
+ +
+
+
+ Berserk + +
+ Defence Penalty +
+ Attack Bonus +
+
+
- Intimidating - -
- Roll Intimidate + Bloodrage + +
+
-
-
- -
- Knight Profession Abilities -
-
- Track - -
- Roll Track -
-
-
-
-
- Weaponskill - - -
- Weaponskill -
- - -
- Weaponskill -
- - -
- Weaponskill + +
+
+
+ Iron Will + +
+ Activate against the following spells: Command, Curse, Transfix, Enslave, Enthrall, Benight, Turncoat, Pacify, Dark Thoughts, Winds of Change, and Witch Steed. + +
+
- -
-
-
-
- Main Gauche - -
- +
+
+ Intimidating + +
+ Roll Intimidate +
+
+
-
+ +
- Disarm Technique - -
- Roll Disarm -
-
-
- -
+

Knight Profession Abilities

+
+
+ Track + +
+ Roll Track +
+
+
- Iron Will - -
- Activate against the following spells: Command, Curse, Transfix, Enslave, Enthrall, Benight, Turncoat, Pacify, Dark Thoughts, Winds of Change, and Witch Steed. - +
+ Weaponskill +
+ + +
+ Weaponskill +
+ + +
+ Weaponskill +
+ +
+
+
+
+ Main Gauche + +
+
-
+
- Intimidating - -
- Roll Intimidate + Disarm Technique + +
+ Roll Disarm
-
-
- -
-

Warlock Profession Abilities

-
-
-
- Selected Weapon Groups -
- Weapon Group 1: -
- - -
-
- Weapon Group 2: -
- - -
+ +
+
+
+ Iron Will + +
+ Activate against the following spells: Command, Curse, Transfix, Enslave, Enthrall, Benight, Turncoat, Pacify, Dark Thoughts, Winds of Change, and Witch Steed. + +
+
+
+
+
+ Intimidating + +
+ Roll Intimidate +
+
-
-
-
-
- Appraise Enemy - -
- Activate
-
- -
-

Assassin Profession Abilities

-
-
- Shock Attack - -
- Roll Shock Attack result: -
-
-
-
+ +
- Inner Sense - -
- GM rolls +

Warlock Profession Abilities

+
+
+
+ Selected Weapon Groups +
+ Weapon Group 1: +
+ + +
+
+ Weapon Group 2: +
+ + +
+
+
+
+
+
+ Appraise Enemy + +
+ Activate
+
+
-
+ +
- Memorize - -
- GM rolls +

Assassin Profession Abilities

+
+
+ Shock Attack + +
+ Roll Shock Attack result: +
+
-
-
-
-
- Disguise - -
- Roll Disguise +
+
+ Inner Sense + +
+ GM rolls +
+
-
-
-
-
- Pilfer - - -
- Roll Pilfer +
+
+ Memorize + +
+ GM rolls +
+
-
-
-
-
- Pick Lock - - -
- GM rolls for possibility of success - Roll Pick Lock +
+
+ Disguise + +
+ Roll Disguise +
+
-
-
-
-
- Track - -
- Roll Track +
+
+ Pilfer + + +
+ Roll Pilfer +
+
+
+
+
+ Pick Lock + + +
+ GM rolls for possibility of success + Roll Pick Lock +
+
+
+
+
+ Track + +
+ Roll Track +
+
+
+
+
+ Deathvow + +
+ Activate + +
+
-
-
- Deathvow - -
- Activate - -
-
-
-
- -
-

Mystic Profession Abilities

-
-
- Spell Mastery - Current Mastered Spell -
-
-
-
- ESP - -
- ESP Chance % - Roll ESP -
-
-
-
-
- Premonition - -
- Premonition Chance % - Roll Premonition -
-
-
-
- -
-

Hunter Profession Abilities

-
-
- Favoured Weapon - -
- Weapon type -
-
-
-
-
- Favoured Terrain - -
- Terrain Type -
-
-
- - -
-
- Precise Shot - -
- Defence Penalty -
- Attack Bonus -
-
-
- -
-
- Stillness - -
- Defence Penalty -
- Stealth Bonus -
- Apply favoured terrain bonus - -
-
-
- -
-
- Penetrating Shot - -
- Activate when firing at short range - -
-
-
- -
+ +
- Hunter's Mind - -
- Activate when in the wilderness and wearing at most padded armour - -
-
+

Mystic Profession Abilities

+
+
+ Spell Mastery + Current Mastered Spell +
+
+
+
+ ESP + +
+ ESP Chance % + Roll ESP +
+
+
+
+
+ Premonition + +
+ Premonition Chance % + Roll Premonition +
+
- -
-
- Fast Shot - -
- Check if second shot is possible -
- Roll second attack at end of round -
-
-
- -
-
- Forage - -
- Roll Forage -
-
-
-
- -
-

Knave Profession Abilities

-
-
- Favoured Language - -
- Add +1 to Perception and +1 to Looks when communicating with humans in that language. -
-
+ +
- Human Intuition - -
- -
-
-
-
-
- Disguise - -
- Roll Disguise +

Hunter Profession Abilities

+
+
+ Favoured Weapon + +
+ Weapon type +
+
-
-
-
-
- Pilfer - -
- Roll Pilfer +
+
+ Favoured Terrain + +
+ Terrain Type +
+
-
-
-
-
- Distract - -
- Roll Distract + +
+
+ Precise Shot + +
+ Defence Penalty +
+ Attack Bonus +
+
-
-
-
-
- Bodyguard - -
- Use the Bodyguard to Intimidate + +
+
+ Stillness + +
+ Defence Penalty +
+ Stealth Bonus +
+ Apply favoured terrain bonus + +
+
-
-
-
-
- Gossip - -
- Roll Gossip -
-
+ +
+
+ Penetrating Shot + +
+ Activate when firing at short range + +
+
-
-
- Presence - -
- Roll Presence + +
+
+ Hunter's Mind + +
+ Activate when in the wilderness and wearing at most padded armour + +
+
-
+
+
+ Fast Shot + +
+ Check if second shot is possible +
+ Roll second attack at end of round +
+
+
+
+
+ Forage + +
+ Roll Forage +
+
+
+ +
+ +
+
+

Knave Profession Abilities

+
+
+ Favoured Language + +
+ Add +1 to Perception and +1 to Looks when communicating with humans in that language. + +
+
+
+
+ Human Intuition + +
+ +
+
-
+
- Sense Falsehood - -
- Roll Sense Falsehood + Disguise + +
+ Roll Disguise
-
-
- Hypnotic Suggestion - -
- Roll Hypnotic Suggestion +
+
+ Pilfer + +
+ Roll Pilfer
-
+
- Network - -
- Roll Network + Distract + +
+ Roll Distract
-
+
- Words are Power - -
- Roll Words are Power + Bodyguard + +
+ Use the Bodyguard to Intimidate
-
- -
- Elementalist Profession Abilities -
-
- Raw Power - - -
- -
- Attack with Raw Power: +
+
+ Gossip + +
+ Roll Gossip
- -
- Attack with Raw Power (alternate): +
+
+
+
+ Presence + +
+ Roll Presence
+
-
-
-
-
- Elemental Resistance - -
- +
+
+ Sense Falsehood + +
+ Roll Sense Falsehood +
+
-
-
-
- -
- Priest Profession Abilities
- Linguist - -
- Roll Linguist -
-
-
-
-
- Exorcism - -
- Roll Exorcism -
-
-
-
-
- Sermon - -
- Roll Sermon -
-
-
-
-
- Remove Curse - -
- Roll Remove Curse -
-
-
-
-
- Remove Madness - -
- Roll Remove Madness + Hypnotic Suggestion + +
+ Roll Hypnotic Suggestion +
+
-
-
-
- -
- Demonologist Profession Abilities -
-
- Demonology - - -
- Roll Demonology +
+
+ Network + +
+ Roll Network +
+
+
+
+ Words are Power + +
+ Roll Words are Power +
+
+
-
-
+
+ +
- The Ritual of Summoning - -
- Perform The Ritual of Summoning -
+

Elementalist Profession Abilities

+
+
+ Raw Power + + +
+ +
+ Attack with Raw Power: +
+ +
+ Attack with Raw Power (alternate): +
+
+
+
+
+
+ Elemental Resistance + +
+ +
+
+
-
+ +
- Banishing a Demon - -
- Roll to Banish a Demon -
-
+

Priest Profession Abilities

+
+
+ Linguist + +
+ Roll Linguist +
+
+
+
+
+ Exorcism + +
+ Roll Exorcism +
+
+
+
+
+ Sermon + +
+ Roll Sermon +
+
+
+
+
+ Remove Curse + +
+ Roll Remove Curse +
+
+
+
+
+ Remove Madness + +
+ Roll Remove Madness +
+
+
+
-
+ +
- The Pact of the Dark Companion - -
- Roll to summon the Dark Companion -
+

Demonologist Profession Abilities

+
+
+ Demonology + + +
+ Roll Demonology +
+
+
+
+
+ The Ritual of Summoning + +
+ Perform The Ritual of Summoning +
+
+
+
+
+ Banishing a Demon + +
+ Roll to Banish a Demon +
+
+
+
+
+ The Pact of the Dark Companion + +
+ Roll to summon the Dark Companion +
+
+
+ +
+ No Magic Attributes +
- -
- No Magic Attributes -
-
-

Profession Magic and Guards

@@ -2116,11 +2111,11 @@

Secondary Element

-
+
Scroll
-
+
Mystic Spells of Rank One
@@ -2727,8 +2722,7 @@

Secondary Element

-
- +
Sorcerer Spells of Rank One
@@ -3120,7 +3114,7 @@

Secondary Element

- +
Sorcerer Spells of Level Five @@ -3790,7 +3784,7 @@

Secondary Element

-
+
Warlock Spells of Level One
@@ -4589,7 +4583,7 @@

Secondary Element

-
+
@@ -5753,7 +5747,6 @@

Secondary Element

-
Level 2
@@ -5767,7 +5760,6 @@

Secondary Element

-
Level 3
@@ -5802,7 +5794,6 @@

Secondary Element

-
Level 4
@@ -5816,7 +5807,6 @@

Secondary Element

-
Level 5
@@ -5833,7 +5823,6 @@

Secondary Element

-
Level 6
@@ -5849,7 +5838,6 @@

Secondary Element

-
Level 7
@@ -5878,6 +5866,7 @@

Secondary Element

Geas: Every time the Darkness Elementalist casts this spell, he must resist becoming a creature of the shadows, an insubstantial Wraith (see p. 253). Roll a magical attack of 2d8 +1 against the character’s magical defence.

+
Dark Rebirth
@@ -5892,7 +5881,6 @@

Secondary Element

-
Level 8
@@ -5905,7 +5893,6 @@

Secondary Element

-
Level 9
@@ -5918,7 +5905,6 @@

Secondary Element

-
Level 10
@@ -5930,7 +5916,7 @@

Secondary Element

Geas: Summoning Balor results in death to the caster and everyone within a 20m radius.

- +
Karach
Range: Touch
@@ -5945,8 +5931,219 @@

Secondary Element

-
-
+
+ Custom Spells of Darkness +
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+ +
+
+ + +
+
+ Demonologist Spells of Rank One +
+
Demonic Vitality
+
Range: Self
+
Duration: Instant
+
+ Description

This spell leeches the vigour from a small animal or bird to cure the caster. The caster sacrifices the animal with a dark incantation and regains 1d4 Health Points. The spell also removes minor blemishes and scars from the caster’s skin, and subtly changes their appearance over time to appear better-looking but slightly crueller. Demonologists who have used this spell for years tend to look beautiful, but their inner cruelty is clearly painted on their faces. Due to this, there is no increase in Looks score.

+
+
+ Demonic Vitality HP Roll: +
+
+
+
Vice
+
Range: 10m
+
Duration: Instant
+
+ Description

All of mankind’s sins are laid bare in the deepest pits of hell. This spell summons forth an infernal servant that whispers the target’s greatest vice in the Demonologist’s ear. The infernal servant lies about the vice 5% of the time. It is a wise man who does not wholly trust his servants.

+
+
+ Vice Spell - chance the demon is lying +
+
+
+
Gleam of Malevolence
+
Range: Self
+
Duration: Spell Expiry Roll applies
+
+ Description

The caster welcomes dark powers into his own body, giving him a taste of powers to come. Others can sense this fell power, and while this spell is in effect normal animals will not approach the caster or attack him. Humans instinctively flinch from the caster and take a -1 to penalty to attack him.

+
+
+
+
Festering Blow
+
Range: Touch
+
Duration: One Attack
+
+ Description

This spell infuses a single attack made by the caster with hellish power. The caster attacks as normal—including making an armour bypass roll—and inflicts normal damage +2 on a successful strike (for example, a sword would inflict 6 Health Points). If the blow misses then the spell is lost. The wound thus inflicted will not heal naturally, festering and rotting until some magical means of healing is applied. Demonologists have been known to use this spell to disfigure those who cross them.

+
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Sorcerer Spells of Rank One +
+
Dragonbreath
+
Range: 20m
+
+ Description:

Range: 20m This spell creates a narrow jet of flame which can be directed at a single target. If the target fails to dodgethe flame (match the spell’s speed of 12 against the target’s evasion) he takes 1d6 +6 Health Points damage. This damage roll is reduced by the target’s Armour Factor, however, so a character in plate armour would lose only 1d6 +1 HP.

+
+
+ Dragonbreath Spell Attack Roll: +
+
+
+
Image
+
Range: 20m
+
Duration: see below
+
+ Description

The caster can create a visual image of no greater than man-size; this is nearly perfect, and has only a 10% chance of being recognized to be an illusion. The Image is a kind of hologram, and cannot be made to move around. It will last until touched or Dispelled.

+
+
+
+
Lesser Healing
+
Range: touch
+
+ Description

This spell restores 2 Health Points to a wounded character. It will not increase his Health Point score above its normal (unwounded) level, of course. Lesser Healing cannot bring a character back from the dead—such a feat is possible in the Dragon Warriors world, but more potent sorcery than this is needed!.

+
+
+
+
Moonglow
+
Duration: lasts for ten minutes
+
+ Description:

A circle of light 5m in radius surrounds the caster, who can dim the intensity to zero or brighten it to about the level of the full moon’s light, at will. Unlike torchlight, the illumination provided by this spell is sufficiently diffuse that it may not alert monsters lurking nearby. A party of characters using no other light source but Moonglow have a chance (the usual 1 in 6) of surprising any monster they meet.

+
+
+
+
Portal
+
Range: touch
+
Duration: see below
+
+ Description

This spell may be used in either of two ways. Open Portal will thrust open any door which could normally be forced by a character of Strength 16. The second mode of the spell, Close Portal, shuts andlocks a door magically. This form of the spell is durational, and will stay in effect until Dispelled or broken by physical force.

+
+
+
+
Weaken
+
Range: 20m
+
Duration: Spell Expiry Roll applies
+
+ Description:

Match the caster’s magical attack vs target’s magical defence. The character on whom this spell takes effects will be weakened. He temporarily loses 2 attack points and inflicts 1 less point of damage than usual when striking in combat.

+
+
+ Weaken Spell Attack Roll: +
+
+ +
+
Witchbane
+
Range: 10m
+
Duration: Instant
+
Origin: Algandy
+
Rarity: Common in Algandy, uncommon elsewhere
+
Replaces: Dragonbreath for Algandish Sorcerers
+
+ Description:

A stream of emerald flame bursts from the Sorcerer’s fingertips to engulf a single target. This spell works on all manner of supernatural entities but has no effect on a normal human – even one trained in the black arts. If a normal human is targeted the flame washes about him leaving him unharmed, though likely terrified. If the spell hits a supernatural being (Speed 12 versus the targets Evasion), the target suffers 1d6+6 damage reduced by its Armour Factor. This spell prevents a Sorcerer from being a threat to a knightly warrior while making them an excellent tool for rooting out “evil beings”.

+
+
+ Witchbane Spell Attack Roll: +
+
+ +
+
Bedevil
+
Range: 10m
+
Duration: Permanent
+
Origin: Algandy
+
Rarity: Common throughout Legend
+
+ Description

The Sorcerer casts this spell on a single tool, weapon, or implement. The target can be no larger than a small cart or plough. The spell causes the item to attempt to thwart any action a user tries to undertake with it. For example, a compass will give false readings, a hammer might strike a thumb, and a saddle might become undone. The spell rarely causes serious injuries but, for example, using a bedevilled rope to climb a mountain can be suicidal. The spell remains until the Sorcerer removes the spell or a Dispel Magic spell is cast on the item. Any Sorcerer who knows this spell can cast a “counter curse” on a bedevilled item.

+
+
+
+
+ Demonologist Spells of Rank Two +
+
Torment of the Pit
+
Range: 10m
+
Duration: Spell Expiry Applies
+
+ Description

This spell inflicts a taste of eternal torment on the target. The target takes a 3 point penalty to all rolls as they writhe in agony. This spell is used as both a means of punishment and as a method of crippling powerful opponents in battle.

+
+
+ Torment of the Pit Attack Roll: +
+
+
+
Vanity
+
Range: Self
+
Duration: 2 hours
+
+ Description

Folk forget that the masters of the pit were once Gods and angelic beings. This spell boosts the caster’s Looks to 16, or if it were already 16 or higher, it becomes 19—truly angelic. Once the spell duration lapses, the caster’s Looks score drops to 3 for the next 8 hours as the darker aspects of the pit take over. The demonologist can cast the spell again and again while under the penalty, but if he does so the remaining penalty time is “banked” and must be paid off after the last spell ends, with an extra 8 hours for each successive Vanity spell cast. Vain demonologists who cast this spell often frequently find themselves facing a long time of looking like a monster.

+
+
+ Activate Vanity Spell + +
+
+
+
Eye for an Eye
+
Range: 10m
+
Duration: Instant
+
+ Description

This spell can be cast on any target that hurt the caster in the last 5 rounds. The spell causes the caster to suffer 1d6 Health Points damage and heals the caster of an equal amount of damage. The spell only works on living beings, and has no effect on undead, golems, or their ilk.

+
+
+ Eye for an Eye Attack Roll: +
+
+
+
Dark Divination
+
Range: 20m
+
Duration: Instant
+
+ Description

The caster makes a minor sacrifice to the dark powers and specifies a target. Demonic spies whisper the target’s darkest secret to the caster. There is a 10% chance that the demons lie to the caster out of spite. This chance increases to 50% if the caster has cast the spell already today... the forces of hell do not like to be called upon lightly. This spell can be used to gain incredible leverage over a person, but more than one Demonologist has had his throat cut for daring to blackmail the wrong nobleman.

+
+
+ Dark Divination Spell - chance the demon is lying +
+
+
+
Name
Range @@ -5958,13 +6155,658 @@

Secondary Element

- + +
+ +
+ Sorcerer Spells of Level Two +
+
Detect Aura
+
Duration: Spell Expiry Roll applies
+
+ Description

This spell enables the caster (or another on whom he casts the spell) to see the supernatural aura which surrounds enchanted beings and objects.

-
-
-
-
- +
+
+
Hold Off the Dead
+
Duration: Spell Expiry Roll applies
+
+ Description

This spell creates a zone around the caster, 2m in radius, which affects Undead whose rank-equivalent does not exceed the caster’s rank. If such Undead enter the zone, they are immediately subject to a magical attack (match the caster’s magical attack against the Undead’s magical defence). If successful, the spell prevents them from approaching the caster as long as the enchantment lasts.

+
+
+ Hold Off the Dead Spell Effect Roll: (roll when an Undead attempts to enter the area of effect) +
+
+
+
Inflict Wound
+
Range: 3m
+
+ Description:

Match the caster’s magical attack against the target’s magical defence. If successful, this inflicts a wound of 5 Health Points on the victim. Armour provides no protection against this damage.

+
+
+ Inflict Wound Spell Attack Roll: +
+
+
+
Peer
+
Range: 20m
+
Duration: Spell Expiry Roll applies, and see below
+
+ Description:

When this spell is cast, the Sorcerer specifies any point within the spell’s range (e.g. “14m due north of me”, “5m straight down”, etc.). He is then able to see anything that is happening within 3m of the specified point as though he were standing there. The spell is not hampered by intervening walls or floors unless these are made of metal; more than 2cm thickness of metal will block a Peer spell. The spell will expire immediately if the caster moves around while it is operating.

+
+
+
+
Tangleroots
+
Range: 15m
+
Duration: Spell Expiry Roll applies
+
+ Description

This spell affects one target, causing a tangle of magical creepers to sprout out of the ground and ensnare his legs. If the target fails to leap clear (match spell’s speed of 14 vs target’s evasion) then he is caught and immobilized. With an edged weapon it is possible to cut oneself free within 2–8 Combat Rounds (roll 2d4); beings of great strength (Strength 16 or more) will be able to pull free of the roots in only 1–3 rounds, and animals such as Wolves will take 2–12 rounds to claw and chew through the roots. This spell is commonly used either to hold any enemy while trying to escape from him or to prevent him evading a more devastating follow-up spell.

+
+
+ Tangleroots Spell Attack Roll +
+
+
+
Warding
+
Duration: Spell Expiry Roll applies
+
+ Description:

Warding enhances the Sorcerer’s luck in combat. Any character attempting a Hit Roll against him, whether in mêlée or with a missile weapon, must add 2 to the d20 score.

+
+
+ +
+
Echoes of Spyte
+
Range: 20m
+
Duration: Spell Expiry Roll applies
+
Origin: Krarth
+
Rarity: Uncommon in Krarth and rare outside of that foul land
+
+ Description:

When cast, the Sorcerer must pick a point anywhere within 20m of where he stands. Until the spell expires or is cancelled, the Sorcerer hears everything as if he were standing at that point. This spell was used by the Krarth Magi of old to spy upon their rivals and enemies. Following the Blasting of Spyte, the remaining apprentices carried this spell out of the ruins, teaching it to their followers and spies as needed.

+
+
+ +
+ Demonologist Spells of Rank Three +
+
Wrath
+
Range: 10m
+
Duration: Spell Expiry Applies
+
+ Description

The Demonologist casts this spell on a friendly target to infuse them with the essence of wrath. The target feels hellish fury, gaining +3 to Attack, +1 to armour bypass rolls, and +1 to damage until the spell ends. The target also suffers a -5 penalty to Defence during this time.

+
+
+
+
Glutton’s Curse
+
Range: 10m
+
Duration: Spell Expiry Applies
+
+ Description

The target of this spell suffers from a terrible hunger that lasts until the spell expires. The target eats and drinks as fast as they can; if no food is present the target tries to eat any living being, and failing that even tears into their own flesh for sustenance.

+
+
+ Glutton’s Curse Attack Roll: +
+
+
+
Lord of Lies
+
Range: Self
+
Duration: Spell Expiry Applies
+
+ Description

The next lie the caster tells before the spell’s expiry will be believed by everyone hearing it. Once the spell expires, those affected will no-longer believe the caster and may turn on him. The Demonologist can only state “facts” and not force others reactions/attitudes; for example the caster can state “I am the world’s greatest lover” or “I am the king” not “You find me incredibly attractive”. Use of this spell can be quite addictive and dangerous.

+
+
+
+
Scent of the Fallen
+
Range: Self
+
Duration: Spell Expiry Applies
+
+ Description

Through use of this spell the demonologist can smell corruption and lies. A lie will be plain as a breath of sweet air from the liar’s mouth. Corrupt people will have a sweet smell commensurate with their level of corruption; an innocent child will stink, while a brutal killer will smell like a summer meadow. This is a fine example of a spell intended to rework how the Demonologist sees the world.

+
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Sorcerer Spells of Level Three +
+
Banquet
+
+ Description:

Enough food and drink is created to provide one meal for five people. The food is nourishing but—despite the spell’s appetising name—rather bland. Few would care to eat it if they had a choice; but when adventurers are starving they will fall upon Banquet fare enthusiastically enough!

+
+
+
+
Beacon
+
Range: 15m
+
Duration: Spell Expiry Roll applies
+
+ Description:

If any invisible object or being is within range when Beacon is cast, the spell causes a glowing ball of green light to appear just above it. This light will move as the invisible object/being moves, thus marking out its location.

+
+
+
+
Command
+
Range: 5m
+
Duration: Spell Expiry Roll applies
+
+ Description:

A successful casting of this spell (match caster’s magical attack vs target’s magical defence) brings the victim (who must be of 1st–3rd rank) under the Sorcerer’s control. He will then do whatever the caster tells him to do. Commanded beings do not become mindless slaves; they retain their normal intelligence and ability to reason, and are thus capable of following quite complex orders. Language barriers may be a problem—if the victim cannot understand what his ‘master’ is saying to him then he will simply act in what he believes to be his master’s best interests.

+
+
+ Command Spell Attack Roll: +
+
+
+
Greater Healing
+
Range: 5m
+
+ Description:

A more powerful version of Lesser Healing. It restores 7 Health Points to the recipient, with the same provisos as for the level-one spell (p. 80).

+
+
+
+
Illusion
+
Range: 20m
+
Duration: Spell Expiry Roll applies
+
+ Description

This spell creates an illusion no greater than two cubic metres in volume. This differs from an Image in two ways; the Illusion will move as the caster wishes, and it fools not just sight but the other natural senses as well. There is thus very little chance of distinguishing an Illusion from the real thing; even a rigorous examination gives only a 5% chance of this. If he wishes, the Sorcerer can cast Illusion over a character (himself included) in order to provide a near-perfect disguise. When overlapped in this way, the Illusion must be equal in at least one linear dimension to the thing it is covering. A man could thus be covered by the Illusion of a 2m-long snake, but not by the Illusion of a gnat. It is important to remember that Illusions exist only in the minds of those who behold them. An Illusion could not cast a spell, inflict a wound, carry treasure, open doors, or in any other way affect the real world.

+
+
+
+
Wolfcall
+
Duration: Spell Expiry Roll applies
+
+ Description

This spell is usable only out-of-doors—in moorland, woods, and dense forest, the wild places where Wolves hunt. It summons one Wolf (see p. 253) to the caster’s side to fight for him. The Wolf will arrive 2–12 Combat Rounds after the spell is cast and will then remain until the spell wears off. The Sorcerer does not start making Spell Expiry Rolls until the Wolf turns up. (A note for the literal-minded: there does not actually have to be a Wolf nearby for Wolfcall to work. The Wolf may in fact be brought across miles of countryside in barely a minute, by the working of the Sorcerer’s magic.)

+
+
+ Wolfcall Time to Arrival: +
+ Wolf Stats +
    +
  • Attack: 15
  • +
  • Weapon: Fangs (d4, 5 points)
  • +
  • Defence: 3
  • +
  • Armour Factor: 0
  • +
  • Evasion: 3
  • +
  • Magical Defence: 1
  • +
  • Health Points: 1d6+4
  • +
  • Movement: 12m (25m)
  • +
  • Stealth: 16
  • +
  • Perception: 11
  • +
+
+
+
+ +
+
Summon Lesser Djinn
+
Duration: Spell Expiry Roll
+
Origin: Ta’ashim lands
+
Rarity: Common in Ta’ashim lands, rare elsewhere
+
+ Description

The Sorcerer calls upon the power of the seven great Djinn sultans to summon one of their lesser servants; a whirling cloud of sand about half the size of a man. This lesser Djinn can do anything a normal human can, such as serving food, opening doors, carrying, and lifting. The Djinn cannot attack and, being a cloud of sand and air, is immune to non-magical damage. A few northerners have managed to learn the secrets of this spell and it can be found from time to time in the hands of well-travelled Sorcerers. Those who frequently abuse the sultan’s servants (for example by getting them to open obviously trapped doors all the time) may feel the wrath of the Djinn lords.

+
+
+
+
+ Demonologist Spells of Rank Four +
+
Witch Steed
+
Range: Touch
+
Duration: One night
+
+ Description

This spell twists the mind of a pig, goat, or human so that it serves as a mount for the caster for a single night. The target cannot do anything except serve as a mount. Any attempt to attack or harm the target will dispel the spell instantly. The target is spurred on by the forces of hell itself and moves as fast as a normal horse. The spell ends at dawn the following morning, and the target takes 1d8 Health Points damage from cuts, bruises, and total exhaustion. It is not uncommon for a mere mortal to be struck dead by this effect. The spell can only be cast at night and requires a bridle (decorated with silver stolen from a church and worth 200F) be flung over the target. The target remembers the night as a vivid nightmare.

+
+
+ Witch Steed Attack Roll: +
+
+
+
Phylactery
+
Range: Touch
+
Duration: Special (see text)
+
+ Description

This spell infuses 2 of the caster’s Health Points into a bloodstone ring (costing 50F) worn on his finger. The lost Health Points reduces the caster’s maximum Health Points by 2, which are restored when the spell ends. As a standard action, the caster can call upon the power of the ring to heal 8 Health Points damage to himself, at which point the ring melts and the caster’s maximum Health Points return to normal. An enemy can attack the ring directly by taking a -8 to their Attack. This destroys the ring and ends the spell.

+
+
+ Activate Phylactery Spell Effect + +
+
+
+
Hellsbreath
+
Range: 10m
+
Duration: Instant
+
Attack: Speed Vs Target’s Evasion
+
+ Description +

The caster exhales a poisonous fume that affects 1d4 targets in front of themself. The spell has a Speed of 14 and causes 2d6 Health Points of damage to affected targets. This damage is not reduced by armour factor.

+
+
+ Hellsbreath Spell Number of Targets + Hellsbreath Spell Attack Roll: +
+
+
+
Indulgence
+
Range: 20m
+
Duration: Spell Expiry Applies
+
Attack: Magical Attack Vs Target’s Magical Defence
+
+ Description +

This spell is cast on a single target, forcing them to indulge their greatest vice as soon as physically possible. No thought is given to propriety or stealth, the target simply indulges as soon as possible, ignoring all social conventions. Use of this spell can destroy reputations and start wars.

+
+
+ Indulgence Spell Attack Roll: + +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Sorcerer Spells of Level Four +
+
Antidote
+
Range: 5m
+
+ Description

This reduces the potency of poisons or drugs in a character’s bloodstream. A poison which normally requires a 3d6 roll compared to the character’s Strength (see p. 122 in Chapter 11) is reduced to one which requires a 2d6 roll, etc. The spell must be applied within one Combat Round (six seconds) of the character being poisoned. It does not reverse any damage or other effects already caused by the poison.

+
+
+
+
Curse
+
Range: 15m
+
+ Description

This spell affects up to four beings (roll 1d4), cursing them with bad luck if it is successful (match caster’s magical attack vs target’s magical defence). Cursed beings must adjust all their die rolls by 2 so as to make them less favourable—i.e., +2 to the die score when making a Hit Roll, –2 when making an Armour Bypass Roll, etc.

+
+
+ Curse Number of Targets: + Curse Spell Attack Roll: +
+
+
+
Disease
+
Range: 15m
+
Duration: lasts until Dispelled
+
+ Description

A single living being may be afflicted with a rotting disease (match caster’s magical attack vs target’s magical defence). The victim loses 2 Health Points every Combat Round until cured or dead.

+
+ Disease Spell Attack Roll: +
+
+
Oracle
+
Duration: lasts for one minute
+
+ Description

The Sorcerer attunes himself to the spirit world and is able to ask up to three questions. The questions must be phrased in such a way that they can be answered by a yes or a no. The spirits have a 75% chance of knowing the answer to any question they are asked. (The GamesMaster rolls d100. On 01–75 they know the answer; on rolls of 76–00 they don’t.) If they do not know the answer to a question, or if the question is worded vaguely, the spirits will give a random answer (roll d6: 1–3 = yes, 4–6 = no), and they will then stick to that answer if asked the same question again. The spirits can speak only of events concerning the past and present. They cannot see into the future, nor answer questions which concern a character’s thoughts and motives.

+
+
+ Spirit Knowledge Effect Roll: +
+
+
+
Shadowbolt
+
Range: 20m
+
+ Description

Causes an ebon bolt of energy to shoot from the caster’s hand to strike a single being. If the bolt hits (match spell’s speed of 14 vs target’s evasion), it does 2d6+10 HP damage. The damage roll is reduced by a number equal to the target’s Armour Factor, if any (see the Dragonbreath spell on p. 89).

+
+
+ Shadowbolt Spell Attack Roll: +
+
+
+
Wall of Magic
+
Range: Touch
+
Duration: Spell Expiry Roll applies, and see below
+
+ Description

The caster—or another on whom he casts the spell—is surrounded by a protective zone that will block enemy spells. The caster may expend as many points as he likes when casting the Wall of Magic (down to a minimum of 4 MP), and this is the number of Magic Points the Wall will absorb from spells cast into it. Once it has absorbed its Magic Point limit, the Wall collapses. Wall of Magic blocks only direct-attack spells, however—i.e. those that involve a magical attack vs magical defence roll. Indirect-attack spells such as Shadowbolt are unaffected. If the Wall collapses without having absorbed all the Magic Points from an incoming spell, the spell still has a chance of taking effect but the attacking Sorcerer or Mystic must adjust his attack die roll by the difference between the number of MPs left in the spell and the spell’s level.

+
+
+ +
+
Udjat
+
Range: Self
+
Duration: Spell Expiry Roll
+
Origin: Kaikuhuru
+
Rarity: Rare everywhere due to its obviously pagan effect.
+
+ Description

Upon casting this spell, a golden, glowing, eye-shaped glyph appears on the Sorcerer’s forehead. The spell increases the Sorcerer’s Psychic Talent and Intelligence to 16 or raises a score of 16-17 to 18. The Sorcerer gains all the associated bonuses for having these characteristics.

+
+
+ Activate Udjat Spell: + +
+
+
+
+ Demonologist Spells of Rank Five +
+
Ritual of Binding
+
+

Binding eliminates the necessity of bargaining with a demon but it has its drawbacks in that attempting to bind a demon without its consent will certainly enrage it.

+

Match the caster’s magical attack with the target demon’s magical defence. If the character succeeds then the demon is bound in his service. Instead of vanishing after a few hours, it remains on this plane until killed or banished. A bound demon cannot directly harm the one who bound it, nor can it deliberately kill itself in order to escape from this plane. The binder can give it one command of up to thirteen words, and the demon will obey this command literally. Commands such as ‘Obey all my future commands’ or ‘Serve me loyally’ are not effective, and immediately free the demon if tried. That is, the command must specify particular services and actions rather than establishing conditions or attitudes for future behaviour.

+

A character cannot have more than seven demons bound on this plane at one time; if he tries to bind an eighth, all are freed. Some demons have a special resistance to binding, which increases their magical defence solely against this spell.

+

Binding can in some cases be to the demon’s advantage. It may want permanent residence on this plane. Demon lords invariably desire to return to their realms as soon as possible, but some of the lesser demons lead a difficult existence in their own world and would prefer being bound to this plane. The problem is one of trust—there is nothing to prevent a summoner from agreeing to bind a demon ‘as a favour’ and then giving it any order he likes. There is thus only about a 1% chance of a demon asking to be bound—if you then actually keep your word and bind it without giving it a command, you will have that demon’s eternal gratitude.

+
+
+ Ritual of Binding Spell Attack +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Demonologist Spells of Rank Six +
+
Possession by Eldyr
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

The possession spells are a group of enchantments for possessing people (usually the caster’s companions) with the spirit-essence of a demon lord. The demon is not summoned by the spell. Unlike most normal spells, Possession by Eldyr takes five Combat Rounds to cast. To cast the Possession by Eldyr spell one must also have the talisman appropriate to the demon lord invoked—this may be a mask, wand, bell, gong, censer or one of several other items. The caster must prepare talismans for any demon lords he wishes to invoke, at a construction cost of 3d6F each. Alternatively, he can buy or otherwise obtain talismans prepared by another demonologist. The character must make a Demonology roll to see whether he has properly prepared a particular demonic talisman—a Possession by Eldyr spell will always fail (still with an expenditure of Magic Points) if the talisman used is defective.

+

Up to three people are affected by a single casting of Possession by Eldyr. To be affected they must be conscious but passive—the spell cannot be applied to a character in combat. Possession can be directed at subdued or magically charmed enemies of the caster, but he must match his magical attack against their magical defence for the spell to take effect. Also, Possession by Eldyr does not give the caster control over the spell’s recipients—the possessed characters retain their own normal aims and motives. However, they cannot under any circumstances harm the caster so long as he carries the proper talisman. Note that two different Possession by... spells cannot be combined. Possessed characters are also unaffected by the following spells: Enslave, Enthrall, and Pacify.

+

The possessed characters have magically charming voices and demeanours. Any characters of 3rd Rank or below who listen to them speak for one Combat Round or more will be affected by the possessed characters as though they had cast a Command spell (see Dragon Warriors, p. 82). Looks scores are raised to 19.

+
+
+ Possession by Eldyr Demonology Roll + + Possession by Eldyr Spell Attack Roll: +
+
+
+
Possession by Kesh
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters have an aura of terror about them. If anyone attempts to come within 5m of one of them, he pits his Magical Attack against the Magical Defence of the approacher. If he succeeds, the possessed character is so terrifying that the victim may not approach any closer, and may not attack the possessed character by any means.

+
+
+ Possession by Kesh Demonology Roll + + Possession by Kesh Spell Attack Roll: +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Demonologist Spells of Rank Seven +
+
Possession by Tsienra
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +2 to Attack and +1 to Defence, and have their Reflexes scores raised to 19.

+
+
+ Possession by Tsienra Demonology Roll + + Possession by Tsienra Spell Attack Roll: +
+
+
+
Possession by Kojuro
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +2 to Attack and +2 to Defence, and gain a +1 bonus to Damage and to all armour bypass rolls in mêlée combat.

+
+
+ Possession by Kojuro Demonology Roll + + Possession by Kojuro Spell Attack Roll: +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Demonologist Spells of Rank Eight +
+
Possession by Akresh
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +2 to Defence, a +1 bonus to any armour worn (or natural armour 2 if no armour is worn) and an increase of +2d6 Health Points. Damage is removed from the bonus Health Points first.

+
+
+ Possession by Akresh Demonology Roll + + Possession by Akresh Spell Attack Roll: + +
+
+
+
Possession by Hragahl
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +2 to Magical Attack and +2 to Magical Defence, and have their Psychic Talent scores raised to 19.

+
+
+ Possession by Hragahl Demonology Roll + + Possession by Hragahl Spell Attack Roll: +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Demonologist Spells of Rank Nine +
+
Possession by Engala
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters have their Strength scores raised to 19, and gain an increase of +3d6 Health Points. Damage is removed from the bonus Health Points first.

+
+
+ Possession by Engala Demonology Roll + + Possession by Engala Spell Attack Roll: +
+
+
+
Possession by Sarasathsa
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +6 to Magical Defence, are immune to Fright Attacks, and have their Intelligence scores raised to 19. Sarasatha’s possession is double-edged, in that the recipient could become sunk into lethargy and pensive introspection (roll Psychic Talent or less on 2d10 when coming out of possession to avoid this). A lethargic character will be unwilling to take any action that involves effort. He may attempt another Psychic Talent roll after every hour of lethargy to throw off the effects.

+
+
+ Possession by Sarasathsa Demonology Roll + + Possession by Sarasathsa Spell Attack Roll: +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+ Demonologist Spells of Rank Ten +
+
Possession by Kyrax
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: The possessed characters gain +4 to Stealth and Perception.

+
+
+ Possession by Kyrax Demonology Roll + + Possession by Kyrax Spell Attack Roll: +
+
+
+
Possession by Umalu
+
Range: 1m
+
Duration: Spell Expiry Roll applies
+
+ Description +

As per Possession by Eldyr, except the following applies instead of the final paragraph: Roll 1d20 for each possessed character:

+
    +
  • 1. Grows 2 extra arms; may wield either two two-handed weapons, or two shields and two one-handed weapons, attacking or defending with all (this will allow a character to make 2 attacks, and potentially attempt 2 shield parries, per combat round).
  • +
  • 2. Thick, armoured plates all over. The character gains an Armour Factor of 6 (not cumulative with other armour). Furthermore, any attack that does penetrate his armour does 1 point less damage than usual.
  • +
  • 3. Catlike quickness. The character’s Reflexes increases to 19, his movement is increased by half as much again, his Evasion increases by +2, and his Attack and Defence increase by +2.
  • +
  • 4. Venomed claws, horns, or other natural weapons. The character may make an unarmed attack that is d10, 5, and inflicts a strong poison attack on the target.
  • +
  • 5. Huge pincers, or club-like arm, or similar. The character may make a d12, 7 unarmed attack.
  • +
  • 6. Terrifying appearance. The character gains a Gaze Attack (see Dragon Warriors, p. 123). He matches his Magical Attack against the targets’ Magical Defence. If he succeeds, they are paralysed with terror for 1d6 Combat Rounds, unable to move or perform any actions.
  • +
  • 7. Wings. The character’s movement doubles, and he may fly, with all that that entails.
  • +
  • 8. Chameleonic skin. The character’s stealth increases by +6, and defence by +4.
  • +
  • 9. Flaming flesh. Anyone who is in mêlée combat with the character suffers an automatic hit each combat round, with d6 armour penetration and doing 4 damage.
  • +
  • 10. Flaming breath. The character may breathe flame each round, with a range of 20m, doing 5d6 damage to anyone who cannot evade its speed of 15 (armour worn reduces the damage by 2, regardless of type).
  • +
  • 11. Acid blood. Anyone who successfully wounds the character in mêlée combat must dodge a speed 16 attack, or suffer 6d6 damage (armour does not offer any protection, and indeed has a 25% chance of being melted and rendered useless).
  • +
  • 12. Death touch. The character’s right hand becomes cold and lifeless, imbued with necromantic energy. If he manages to touch an opponent in combat (normal attack versus defence roll applies), the victim suffers 1d6 damage (armour does not protect) and must roll equal to or less than his Strength on 2d10 or die on the spot.
  • +
  • 13. Living shadow. The character becomes immune to damage from non-magical weapons, which simply pass through him without harm. His own attacks ignore non-magical armour.
  • +
  • 14. Giantism. The character’s Strength increases to 19, and he gains an increase of +5d6 Health Points. Damage is removed from the bonus Health Points first.
  • +
  • 15. Webbed feet, withered legs, or tentacles instead of legs; movement is halved, and the character has a –2 penalty to stealth.
  • +
  • 16. One arm (determined randomly) withers away, or is replaced by a non-functional claw or other appendage. The character may not use a shield or 2-handed weapon.
  • +
  • 17. The character’s sight is interfered with, perhaps with the eyes being replaced with insectoid eyes, or perhaps with a flap of skin hanging over them. –2 penalty to Perception, Defence, and Attack.
  • +
  • 18. The character’s whole face is hideously warped and disfigured. Looks score is reduced to 1.
  • +
  • 19. The character’s bones become brittle and thin; all damage he suffers in combat is increased by +1.
  • +
  • 20. The character’s brain becomes soft and mushy, or is exposed to the air by part of the skull drawing back to reveal it. His Intelligence and Psychic Talent scores are each reduced by –6 (to a minimum of 1).
  • +
+
+
+ Possession by Umalu Demonology Roll + + Possession by Umalu Spell Attack Roll: + +
+
+
+
The Curse of Asterion
+
Range: Touch
+
Duration: Permanent
+
+ Description +

Also called the Curse of Binding Energy, this is a technique for dispelling a particular demon for all time. It is usable only once in a character’s lifetime (for reasons which will become obvious), and in fact only two cases of its use are recorded—once when the noble Asterion employed it to save his daughter’s life, the other when the lunatic mage Athat turned it against a demon lord in a moment of arrogant pique.

+

A fairly short phrase, the Curse is only effective if the character follows through the complex logical arguments associated with it as he speaks the words of the Curse; this is represented by the demonologist rolling under his Intelligence score on three six-sided dice.

+

The procedure is as follows: the character must touch and grapple with the demon (represented by a successful attack against its defence) as he (or she) activates the Curse of Asterion. If successful, both the demon and the character disappear forever from this world. Are they both disintegrated by the power of the magic? Or transported to a dimension of their own where they battle on together throughout Eternity? The truth is unknowable.

+
+
+ The Curse of Asterion Intelligence Roll:
+ The Curse of Asterion Grapple Attack Roll: +
+
+
+
+ Name +
+ Range +
+ Duration +
+ Description +
+ + +
+
+
+
+
+
@@ -5998,9 +6840,12 @@

Ranged Weapons

- Weapon name - Weapon type - Magic Bonus + Weapon name
+ Weapon type
+ +
+ Magic Bonus +
Armour Bypass Roll Damage
@@ -6018,8 +6863,8 @@

Ammunition

- Ammunition Name - Ammunition Type + Ammunition Name
+ Ammunition Type
Quantity Magic Bonus
@@ -6054,29 +6899,29 @@

Armour

Non-Proficiency Penalties

- Attack
- Defence
- Stealth + Attack
+ Defence
+ Stealth
Helmed Skull
- +
- Shield Equipped?
- Magic Bonus - -
-
- Roll on -
-
- -
-
+ Shield +
+ +
+ Roll on + + Magic Bonus +
@@ -6137,7 +6982,8 @@

Encumbrance

-

Assassin Profession Skills

+
+

Assassin Profession Skills

@@ -6599,9 +7445,11 @@

Assassin Profession Skills

+
-

Knight Profession Skills

+
+

Knight Profession Skills

@@ -6972,10 +7820,12 @@

Knight Profession Skills

-
+
+
-

Barbarian Profession Skills

+
+

Barbarian Profession Skills

@@ -7138,9 +7988,11 @@

Barbarian Profession Skills

+
-

Sorcerer Profession Skills

+
+

Sorcerer Profession Skills

Special Abilities of a Sorcerer
@@ -7235,9 +8087,11 @@

Sorcerer Profession Skills

+
-

Mystic Profession Skills

+
+

Mystic Profession Skills

The Special Abilities of a Mystic
@@ -7255,7 +8109,7 @@

Mystic Profession Skills

- +
@@ -7351,234 +8205,249 @@

Mystic Profession Skills

+
-

Elementalist Profession Skills

- -
-
-
- Raw Power - - -
- -
-
- - -
-
-
-
-
- Raw Power (alternate version) - - -
- -
-
- - -
-
-
-
-
- Elemental Essence - - -
- - -
-
-
-
-
- Elemental Resistance - -
- - -
-
-
-
-
-
-

Warlock Profession Skills

-
- -
- Special Abilities of a Warlock: -
- Max: - - - Selected: - +
+

Elementalist Profession Skills

+ + +
+
+ Raw Power + +
+
+ Attack with Raw Power: +
+
+
+ + +
+
-
-
- - -
-
- Select Weapon Groups -
- Weapon Group 1: - - - Weapon Group 2: - + + +
+
+ Raw Power (alternate version) + + +
+ +
+ Attack with Raw Power (alternate): +
+
+
+ + +
+
-
-
- -
-
- Special Abilities of a Warlock -
-
- Appraise Enemy - -
- -
-
- - + +
+
+ Elemental Essence + + +
+ + +
+
+
+
+
+ Elemental Resistance + +
+ + +
+
+
+
+
+ +
+
+

Warlock Profession Skills

+
+ +
+ Special Abilities of a Warlock: +
+ Max: + + + Selected: +
-
+
-
+ + +
- Arrow Cutting - -
- - + Select Weapon Groups +
+ Weapon Group 1: + + + Weapon Group 2: +
-
+ +
- Fight Blind - -
- - + Special Abilities of a Warlock +
+
+ Appraise Enemy + +
+ +
+
+ + +
+
-
-
-
-
- Unarmed Combat - -
- - +
+
+ Arrow Cutting + +
+ + +
+
-
-
-
-
- Minor Enchantment (Weapons) - -
- - +
+
+ Fight Blind + +
+ + +
+
-
-
-
-
- Minor Enchantment (Armour) - -
- - +
+
+ Unarmed Combat + +
+ + +
+
-
-
-
-
- Major Enchantment (Weapons) - -
- - +
+
+ Minor Enchantment (Weapons) + +
+ + +
+
-
-
-
-
- Major Enchantment (Armour) - -
- - +
+
+ Minor Enchantment (Armour) + +
+ + +
+
-
-
-
-
- Ride Warhorse - -
- - +
+
+ Major Enchantment (Weapons) + +
+ + +
+
+
+
+
+ Major Enchantment (Armour) + +
+ + +
+
+
+
+
+ Ride Warhorse + +
+ + +
+
-
- +
+ +
-

Knave Profession Skills

+
+

Knave Profession Skills

@@ -7849,9 +8718,11 @@

Knave Profession Skills

+
-

Hunter Profession Skills

+
+

Hunter Profession Skills

@@ -8086,9 +8957,11 @@

Hunter Profession Skills

+
-

Priest Profession Skills

+
+

Priest Profession Skills

@@ -8263,10 +9136,12 @@

Priest Profession Skills

- + +
-

Special Abilities of a Demonologist

+
+

Demonologist Profession Skills

Special Abilities of a Demonologist
@@ -8365,9 +9240,11 @@

Special Abilities of a Demonologist

+
-

Custom Special Abilities

+
+

Custom Special Abilities

Customised Abilities of the
@@ -8381,10 +9258,11 @@

Custom Special Abilities

Description
- +
+
@@ -8398,7 +9276,7 @@

Custom Special Abilities

Description
- +
@@ -8420,13 +9298,12 @@

Custom Special Abilities


- +
- - +
Modern Languages @@ -8553,35 +9430,39 @@

Settings

+ Stealth and Perception Dice Type: + Allow Ranged Weapons to be Magical: Elementalist Raw Power Combat Guards The Supremacy of the Sword Paths Secondary Skills Players Guide Spells -

Known Issues

-
    -
  • Demonologist Spells not yet implemented
  • -

Documentation

This character sheet includes material based on the Dragon Warriors setting, created by Dave Morris and Oliver Johnson, and used under the Serpent King Games Fan Policy. We are not permitted to charge for access to this content. This character sheet is not published, endorsed, or officially approved by Serpent King Games. For more information about Dragon Warriors products and Serpent King Games, please visit www.serpentking.com.

@@ -8598,6 +9479,20 @@

Documentation

And most certainly not least, the brave group of adventurers who have been my primary playtesters: Gille, Hariot, Cador, Randos, Ulfthak, Argane, Ivon, and Kallister.

Release Notes +

Ver 2.01

+
    +
  • Demonologist Spells have been implemented
  • +
  • Fixed errors in layout for Custom Classes - skills and abilities sections
  • +
  • Removed "readonly" from Secondary Skills and Paths textboxes to allow for custom edits
  • +
  • The Ammunition Repeating section event listner has been made more specific so that it does not overwrite custom data unless the Ammo type is changed
  • +
  • Multiple buttons beside Stealth and Perception were confusing some users. I have made a toggle option, switching which button is visible, on the settings page.
  • +
  • Armour penalties (from non-profession) were not being included in their relevent calculations, added the Javascript to support it properly
  • +
  • Many of the AF3 armour options were incorrectly classified as AF4, this has now been fixed.
  • +
  • Custom classes were not able to see spell lists, this has been corrected.
  • +
  • Rearranged the front character sheet so that the most commonly used items are at the top - please send feedback, I can always change it back if nobody likes it
  • +
  • Renamed the first two tabs to better reflect their purpose
  • +
  • The level advancement math was totally wrong! I have adjusted the math so that it should be working properly now - please report any math errors (this is NOT my strong point).
  • +

Ver 2.0

  • Killed the 'Click to Update!' Button. The sheet now updates on change (Fair Warning: this may add lag to the sheet functions,this is the price of having a responsive sheet).
  • @@ -9185,88 +10080,87 @@

    Documentation

    let perceptionIncrease = 0; if (profession === "Assassin") { - attackIncrease = rank; - defenceIncrease = Math.floor((rank - 2) / 2); - magicalDefenceIncrease = rank; - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = rank; - perceptionIncrease = rank; + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, Math.floor((rank -1) / 2)); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, rank - 1); + perceptionIncrease = Math.max(0, rank - 1); } else if (profession === "Barbarian") { - attackIncrease = rank; - defenceIncrease = rank; - magicalDefenceIncrease = rank; - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 2) / 2); - perceptionIncrease = Math.floor((rank - 2) / 2); + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, rank - 1); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank -1) / 2)); + perceptionIncrease = Math.max(0, Math.floor((rank -1) / 2)); } else if (profession === "Knight") { - attackIncrease = rank; - defenceIncrease = rank; - magicalDefenceIncrease = rank; - evasionIncrease = Math.floor((rank - 4) / 4); - perceptionIncrease = Math.floor((rank - 2) / 2); - stealthIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, rank - 1); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + perceptionIncrease = Math.max(0, Math.floor((rank -1) / 2)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); } else if (profession === "Elementalist") { - attackIncrease = Math.floor((rank - 3) / 3); - defenceIncrease = Math.floor((rank - 3) / 3); - magicalAttackIncrease = rank + Math.floor((rank - 6) / 6); - magicalDefenceIncrease = rank + Math.floor((rank - 6) / 6); - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + magicalAttackIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + magicalDefenceIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, Math.floor((rank - 1) / 3)); } else if (profession === "Mystic") { - attackIncrease = Math.floor((rank - 2) / 2); - defenceIncrease = Math.floor((rank - 2) / 2); - magicalAttackIncrease = rank + Math.floor((rank - 6) / 6); - magicalDefenceIncrease = rank + Math.floor((rank - 6) / 6) + Math.floor((rank - 12) / 12); - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = rank; + attackIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + magicalAttackIncrease = Math.max(0, rank - 1); + magicalDefenceIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, rank - 1); } else if (profession === "Sorcerer") { - attackIncrease = Math.floor((rank - 3) / 3); - defenceIncrease = Math.floor((rank - 3) / 3); - magicalAttackIncrease = rank + Math.floor((rank - 6) / 6); - magicalDefenceIncrease = rank + Math.floor((rank - 6) / 6); - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + magicalAttackIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + magicalDefenceIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, Math.floor((rank - 1) / 3)); } else if (profession === "Warlock") { - attackIncrease = rank; - defenceIncrease = rank; - magicalAttackIncrease = rank; - magicalDefenceIncrease = rank; - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, rank - 1); + magicalAttackIncrease = Math.max(0, rank - 1); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, Math.floor((rank - 1) / 3)); } else if (profession === "Knave") { - attackIncrease = rank; - defenceIncrease = Math.floor((rank - 2) / 2); - magicalDefenceIncrease = rank; - evasionIncrease = rank; - stealthIncrease = rank; - perceptionIncrease = rank; + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, rank - 1); + perceptionIncrease = Math.max(0, rank - 1); } else if (profession === "Hunter") { - attackIncrease = rank; - defenceIncrease = rank; - magicalDefenceIncrease = rank; - evasionIncrease = rank; - stealthIncrease = rank; - perceptionIncrease = rank; + attackIncrease = Math.max(0, rank - 1); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, rank - 1); + perceptionIncrease = Math.max(0, rank - 1); } else if (profession === "Priest") { - attackIncrease = Math.floor((rank - 2) / 2); - defenceIncrease = Math.floor((rank - 2) / 2); - magicalAttackIncrease = Math.floor((rank - 4) / 4); - magicalDefenceIncrease = rank + Math.floor((rank - 6) / 6); - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 2)); + magicalDefenceIncrease = Math.max(0, rank - 1) + Math.min(1, Math.max(0, Math.floor(rank / 7))) + Math.min(1, Math.max(0, Math.floor(rank / 12))); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, rank - 1);; } else if (profession === "Demonologist") { - attackIncrease = rank; - defenceIncrease = Math.floor((rank - 2) / 2); - magicalAttackIncrease = rank; - magicalDefenceIncrease = rank; - evasionIncrease = Math.floor((rank - 4) / 4); - stealthIncrease = Math.floor((rank - 3) / 3); - perceptionIncrease = Math.floor((rank - 3) / 3); + attackIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + defenceIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + magicalAttackIncrease = Math.max(0, rank - 1); + magicalDefenceIncrease = Math.max(0, rank - 1); + evasionIncrease = Math.max(0, Math.floor((rank - 1) / 4)); + stealthIncrease = Math.max(0, Math.floor((rank - 1) / 3)); + perceptionIncrease = Math.max(0, Math.floor((rank - 1) / 3)); } // Calculate final values @@ -9938,7 +10832,7 @@

    Documentation

    }); }); -on('change:repeating_ammo change:profession', function(event) { +on('change:repeating_ammo:ammotype change:profession', function(event) { if (event.sourceType === 'sheetworker') return; const id = (event.sourceAttribute.split('_')[2] || '').toLowerCase(); @@ -10709,11 +11603,12 @@

    Documentation

    }); }); -on("change:stealth change:miscstealth change:perception change:miscperception change:reflexes change:psychic_talent change:humanintuitionselect change:stillnesspos change:rank change:huntersmindactivate change:baseaf change:favoured_language", function() { +on("change:armourstealthpenalty change:stealth change:miscstealth change:perception change:miscperception change:reflexes change:psychic_talent change:humanintuitionselect change:stillnesspos change:rank change:huntersmindactivate change:baseaf change:favoured_language", function() { getAttrs([ 'stealth', 'miscstealth', 'perception', 'miscperception', 'reflexes', 'psychic_talent', 'humanintuitionselect', - 'stillnesspos', 'rank', 'huntersmindactivate', 'baseaf', 'favoured_language' + 'stillnesspos', 'rank', 'huntersmindactivate', 'baseaf', 'favoured_language', + 'armourstealthpenalty' ], function(values) { let stealth = parseInt(values.stealth) || 0; let miscStealth = parseInt(values.miscstealth) || 0; @@ -10727,7 +11622,7 @@

    Documentation

    let huntersMindActive = values.huntersmindactivate === "1"; let baseAF = parseInt(values.baseaf) || 0; let favoured_language = values.favoured_language === "1"; - + let armourstealthpenalty = parseInt(values.armourstealthpenalty) || 0; // Initial final scores calculation let finalStealth = stealth + miscStealth + stillnessPos; let finalPerception = perception + miscPerception; @@ -10763,6 +11658,10 @@

    Documentation

    finalPerception += huntersMindBonus; } + if (armourstealthpenalty < 0) { + finalStealth += armourstealthpenalty; // Adding a negative value effectively subtracts + } + // Update attributes with final scores setAttrs({ 'finalstealth': finalStealth, @@ -10771,7 +11670,7 @@

    Documentation

    }); }); -on('change:finalstrength change:humanintuitionselect change:finalreflexes change:attack change:defence change:evasion change:miscattackmelee change:miscdefencemelee change:miscattackranged change:miscdefenceranged change:miscevasion change:berserkneg change:berserkpos change:berserktoranged change:bloodrageselect change:main_gauche_active change:maingauchedefencebonus change:shield change:magicshield change:equippedmeleeweaponmagicbonus change:magicrangedweaponbonus change:equippedammomagicbonus change:mattackmoda change:mdefencemoda change:rattackmoda change:rdefencemoda change:nonprofranged change:nonprofmelee change:deathvowselect change:preciseneg change:stillnessneg change:equippedammoattackmod change:intelligence change:elemental_resistance_select change:song_of_battle_toggle', function() { +on('change:armourattackpenalty change:armourdefencepenalty change:finalstrength change:humanintuitionselect change:finalreflexes change:attack change:defence change:evasion change:miscattackmelee change:miscdefencemelee change:miscattackranged change:miscdefenceranged change:miscevasion change:berserkneg change:berserkpos change:berserktoranged change:bloodrageselect change:main_gauche_active change:maingauchedefencebonus change:shield change:magicshield change:equippedmeleeweaponmagicbonus change:magicrangedweaponbonus change:equippedammomagicbonus change:mattackmoda change:mdefencemoda change:rattackmoda change:rdefencemoda change:nonprofranged change:nonprofmelee change:deathvowselect change:preciseneg change:stillnessneg change:equippedammoattackmod change:intelligence change:elemental_resistance_select change:song_of_battle_toggle', function() { getAttrs([ 'finalstrength', 'finalreflexes', 'attack', 'defence', 'evasion', @@ -10779,7 +11678,8 @@

    Documentation

    'berserkpos', 'berserkneg', 'berserktoranged', 'bloodrageselect', 'main_gauche_active', 'maingauchedefencebonus', 'shield', 'magicshield', 'equippedmeleeweaponmagicbonus', 'magicrangedweaponbonus', 'equippedammomagicbonus', 'song_of_battle_toggle', 'mattackmoda', 'mdefencemoda', 'rattackmoda', 'rdefencemoda', 'nonprofranged', 'nonprofmelee', 'humanintuitionselect', - 'deathvowselect', 'preciseneg', 'stillnessneg', 'equippedammoattackmod', 'intelligence', 'elemental_resistance_select' + 'deathvowselect', 'preciseneg', 'stillnessneg', 'equippedammoattackmod', 'intelligence', 'elemental_resistance_select', + 'armourattackpenalty', 'armourdefencepenalty' ], function(values) { // Retrieve base values @@ -10799,6 +11699,10 @@

    Documentation

    let miscRangedDefence = parseInt(values['miscdefenceranged']) || 0; let miscEvasion = parseInt(values['miscevasion']) || 0; + //Retrieve non-proficient Armour Penalties + let armourattackpenalty = parseInt(values['armourattackpenalty']) || 0; + let armourdefencepenalty = parseInt(values['armourdefencepenalty']) || 0; + // Retrieve special ammo modifiers let specialAmmoAttack = parseInt(values['equippedammoattackmod']) || 0; @@ -10983,6 +11887,17 @@

    Documentation

    finalMeleeDefence += magicShieldBonus; finalRangedDefence += magicShieldBonus; } + + // Apply non-proficient armour penalties to attack and defence + if (armourattackpenalty < 0) { + finalMeleeAttack += armourattackpenalty; // Adding a negative value effectively subtracts + finalRangedAttack += armourattackpenalty; + } + + if (armourdefencepenalty < 0) { + finalMeleeDefence += armourdefencepenalty; + finalRangedDefence += armourdefencepenalty; + } // Apply Death Vow Select Effect if (deathvowSelect === 1) { diff --git a/Dragon Warriors/sheet.json b/Dragon Warriors/sheet.json index 551d560da143..e7bc9c8e64b2 100644 --- a/Dragon Warriors/sheet.json +++ b/Dragon Warriors/sheet.json @@ -5,5 +5,6 @@ "roll20userid": "630718", "preview": "Example - clean.png", "instructions": "", - "legacy": false + "legacy": false, + "printable": true } \ No newline at end of file