diff --git a/WFRP2E-Havoc/README.md b/WFRP2E-Havoc/README.md new file mode 100644 index 0000000000..5534514bb0 --- /dev/null +++ b/WFRP2E-Havoc/README.md @@ -0,0 +1,21 @@ +# Warhammer Fantasy Roleplay 2e Character Sheet +version 0.1-Havoc + +Complete rewrite by Paul "Havoc" Stein! + +## API Scripting Required + +If you are a player, you enjoy the benefits of your GM's Pro account. If your GM does not have a Pro account, consider gifting him/her one. + +### Installing API scripts +As a Pro, do the following: +1. From the My Campaigns, select View Details. +2. From the View Details page, select API Scripts +3. For each script listed below, copy and paste the contents into a New Script window. + +Scripts +1. wfrp2e-api.js +2. splitArgs.js + +Please submit bugs and feature requests to https://github.com/timothystone/roll20-character-sheets. Pull requests are +welcome. diff --git a/WFRP2E-Havoc/sheet.json b/WFRP2E-Havoc/sheet.json new file mode 100644 index 0000000000..7243728e2b --- /dev/null +++ b/WFRP2E-Havoc/sheet.json @@ -0,0 +1,8 @@ +{ + "html": "wfrp2e-sheet.html", + "css": "wfrp2e-sheet.css", + "authors": "Paul \"Havoc\" Stein", + "roll20userid": "55273", + "preview": "wfrp2e-preview-v0.1-havoc.png", + "instructions": "A WFRP2E Character Sheet by Paul Stein. Requires the the wfrp2e-api script (available under the System Toolbox subsection in the Roll20 API Script Library)." +} diff --git a/WFRP2E-Havoc/splitArgs.js b/WFRP2E-Havoc/splitArgs.js new file mode 100644 index 0000000000..f9ba5e6d0f --- /dev/null +++ b/WFRP2E-Havoc/splitArgs.js @@ -0,0 +1,56 @@ +var bshields = bshields || {}; +bshields.splitArgs = (function() { + 'use strict'; + + var version = 1.1; + + function splitArgs(input, separator) { + var singleQuoteOpen = false, + doubleQuoteOpen = false, + tokenBuffer = [], + ret = [], + arr = input.split(''), + element, i, matches; + separator = separator || /\s/g; + + for (i = 0; i < arr.length; i++) { + element = arr[i]; + matches = element.match(separator); + if (element === '\'') { + if (!doubleQuoteOpen) { + singleQuoteOpen = !singleQuoteOpen; + continue; + } + } else if (element === '"') { + if (!singleQuoteOpen) { + doubleQuoteOpen = !doubleQuoteOpen; + continue; + } + } + + if (!singleQuoteOpen && !doubleQuoteOpen) { + if (matches) { + if (tokenBuffer && tokenBuffer.length > 0) { + ret.push(tokenBuffer.join('')); + tokenBuffer = []; + } + } else { + tokenBuffer.push(element); + } + } else if (singleQuoteOpen || doubleQuoteOpen) { + tokenBuffer.push(element); + } + } + if (tokenBuffer && tokenBuffer.length > 0) { + ret.push(tokenBuffer.join('')); + } + + return ret; + } + + return splitArgs; +}()); + +String.prototype.splitArgs = String.prototype.splitArgs || function(separator) { + return bshields.splitArgs(this, separator); +}; \ No newline at end of file diff --git a/WFRP2E-Havoc/wfrp2e-api.js b/WFRP2E-Havoc/wfrp2e-api.js new file mode 100644 index 0000000000..d24a7dfa8b --- /dev/null +++ b/WFRP2E-Havoc/wfrp2e-api.js @@ -0,0 +1,1633 @@ +//Properties + +var skillBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; +var parryBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; +var magicBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; +var combatBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; +var parryBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; +var initBackgroundImage = "http://i.imgur.com/Vqi7PFt.png"; + +var skillLineImage = "http://i.imgur.com/M0MBhn2.png"; +var parryLineImage = "http://i.imgur.com/M0MBhn2.png"; +var magicLineImage = "http://i.imgur.com/M0MBhn2.png"; +var combatLineImage = "http://i.imgur.com/M0MBhn2.png"; +var parryLineImage = "http://i.imgur.com/M0MBhn2.png"; +var initLineImage = "http://i.imgur.com/M0MBhn2.png"; + +var critSucCombat = 1; //set to 0 to turn off crit success +var critFailCombat = 96; //set to 101 to turn off crit failure + +var attackSymbol = "http://i.imgur.com/ncLRrhy.png"; +var shootSymbol = "http://i.imgur.com/fhnbmUs.png"; +var ulfricSymbol = "http://i.imgur.com/Sbr3wLn.png"; + +var critSucParry = 1; //set to 0 to turn off crit success +var critFailParry = 96; //set to 101 to turn off crit failure +var parrySymbol = "http://i.imgur.com/cdUERe3.png"; + +var critSucSkill = 1; //set to 0 to turn off crit success +var critFailSkill = 96; //set to 101 to turn off crit failure +var skillSymbol = "http://i.imgur.com/yDOLx2R.png"; + +var magicSymbol = "http://i.imgur.com/pusXx1U.png"; + +var initSymbol = "http://i.imgur.com/wQRmIcp.png"; + +var fortunePointBackground = "http://i.imgur.com/B8isZnB.png"; + +/// Templates + +var warhammerCombatTableTemplate = "
| Attack Test< | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +''
+ +' | '
+ +''
+ +'
| Stat : < | '
+ +'|
| Attack : < | '
+ +'|
| Ulfric's Fury Fortune Point | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +'|
| '
+ +' | '
+ +'|
| Stat : < | '
+ +'|
| Crit Confirm : < | '
+ +'|
| Parry Test< | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +'|
| '
+ +' | '
+ +'|
| Stat : < | '
+ +'|
| Roll : < | '
+ +'|
| Simple Test< | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +'|
| '
+ +' | '
+ +'|
| Stat : < | '
+ +'|
| Roll : < | '
+ +'|
| Casting Roll | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +'|
| '
+ +' | '
+ +'|
| Casting Number : < | '
+ +'|
| Magic Characteristic : < | '
+ +'|
| Magic Used : < | '
+ +'|
| Channel Used : < | '
+ +'|
| Additional Dice : < | '
+ +'|
| Modifier to Total : < | '
+ +'|
| Modifier to Dice : < | '
+ +'|
| Penalty for Armor : < | '
+ +'|
| Chaos Dice : < | '
+ +'|
| Using Dhar : < | '
+ +'|
| '
+ +' | '
+ +'|
| Roll | " + +'|
| < | "
+ +'|
| '
+ +' | '
+ +'|
| Casting Number : < | '
+ +'|
| Total : < | '
+ +'|
| With Component (+< | '
+ +'|
| Initiative Roll | |
|---|---|
| '
+ +' | '
+ +'|
| < | '
+ +'|
| '
+ +' | '
+ +'|
| Agility : < | '
+ +'|
| Additional Dice : < | '
+ +'|
| Modifier : < | '
+ +'|
| Roll : < | '
+ +'|
| '
+ +' | '
+ +'|
| Total : < | '
+ +'|
+ | + | + |
| + | + |
+ | + | Weapon Skill | +Ballistic Skill | +Strength | +Toughness | +Agility | +Intelligence | +Willpower | +Fellowship | +
Main |
+ WS | +BS | +S | +T | +Ag | +Int | +WP | +Fel | +
| Base: | ++ | + | + | + | + | + | + | + |
| Advance: | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | +
| Taken: | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | +
| Temp.: | ++ | + | + | + | + | + | + | + |
| Current: | ++ | + | + | + | + | + | + | + |
| + | + | + | + | + | + | + | + | + |
| + | +||||||||
| + | Attacks | +Wounds | +Strength Bonus | +Toughness Bonus | +Movement | +Magic | +Insanity Points | +Fate Points | +
Sec. |
+ A | +W | +SB | +TB | +M | +Mag | +IP | +FP | +
| Base: | ++ | + | + | + | + | + | + | + |
| Advance: | ++ | ++ | ++ | + | + | ++ | ++ | + |
| Taken: | ++ | ++ | ++ | + | + | ++ | ++ | + |
| Temp.: | ++ | + | + | + | + | + | + | + |
| Current: | ++ | + | + | + | + | + | + | + |
| + | Weapon Skill | +Ballistic Skill | +Strength | +Toughness | +Agility | +Intelligence | +Willpower | +Fellowship | +Attacks | +Wounds | +Strength Bonus | +Toughness Bonus | +Movement | +Magic | +Insanity Points | +Fate Points | +
| + | WS | +BS | +S | +T | +Ag | +Int | +WP | +Fel | +A | +W | +SB | +TB | +M | +Mag | +IP | +FP | +
| Temp.: | ++ | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + |
| Current: | ++ | + | + | + | + | + | + | + | + | + | + | + | + | + | + | + |
| + | + | + | + | + | + | + | + | + | + |
+
+ Current Wounds:+ |
+ ||||||
M |
+ Armoured M |
+ Move/ Disengage |
+ Charge Attack |
+ Run |
+ Running Leap |
+ Standing Leap |
+ Flying |
+
| + | + | + | + | + | + | + | + |
| + | + | M x 2 |
+ M x 4 |
+ M x 6 |
+ M x SB |
+ (M+SB)/2 |
+ + |
| Armour Type | +Locations | +Enc. | +AP | +
| + | + | + | + |
| + | + | + | + |
| + | + | + | + |
| + | + | + | + |
| + | + | + | + |
| + | + | + | + |
| + | Primary | +Secondary | +||||||||||
| + | Weapon Skill | +Ballistic Skill | +Strength | +Toughness | +Agility | +Intelligence | +Willpower | +Fellowship | +Attacks | +Wounds | +Movement | +Magic | +
| + | WS | +BS | +S | +T | +Ag | +Int | +WP | +Fel | +A | +W | +M | +Mag | +
| Current Advances: | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | +
| Taken Advances: | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | ++ | +
| {{name}} | |||||
|---|---|---|---|---|---|
+
+ |
+ Stat : | +{{Stat}} % | + + + {{#Roll}} +|||
| Roll : | +{{Roll}} | +||||
| Failure | + {{/rollGreater() Roll Stat}} + {{#rollLess() Roll Stat}} +Success! | + {{/rollLess() Roll Stat}} + {{#rollTotal() Roll Stat}} +Success! | + {{/rollTotal() Roll Stat}} + {{/Roll}} +|||
| {{name}} | |||
|---|---|---|---|
+
+ |
+ Stat : | +{{Stat}} % | + + + {{#Roll}} +|
| Roll : | +{{Roll}} | +||
| Success! | +|||
| Damage : | +{{Damage}} | + {{#DamageTwo}} +||
| Impact : | +{{DamageTwo}} | + {{/DamageTwo}} + {{#^rollWasCrit() DamageTwo}} + {{#rollWasCrit() Damage}} +||
| Urlic's Fury! | +|||
| Urlic's Fury! | +|||
| Urlic's Fury! | +|||
| Urlic's Fury! | +|||
| Crit Check Roll : | +{{CritConfirm}} | +||
| Crit Damage : | ++{{Crit}} | + {{/rollBetween() CritConfirm 1 Stat}} + {{/rollWasCrit() Damage}} + {{/^rollWasCrit() DamageTwo}} + + {{#rollWasCrit() DamageTwo}} + {{#^rollWasCrit() Damage}} +Crit Check Roll : | +{{CritConfirm}} | +
| Crit Damage : | ++{{Crit}} | + {{/rollBetween() CritConfirm 1 Stat}} + {{/^rollWasCrit() Damage}} + {{/rollWasCrit() DamageTwo}} + + {{#rollWasCrit() DamageTwo}} + {{#rollWasCrit() Damage}} +Crit Check Roll : | +{{CritConfirm}} | +
| Crit Damage : | ++{{Crit}} | + {{/rollBetween() CritConfirm 1 Stat}} + {{/rollWasCrit() Damage}} + {{/rollWasCrit() DamageTwo}} + + {{#rollTotal() DamageOne 1}} + {{#rollWasCrit() Damage}} +Crit Check Roll : | +{{CritConfirm}} | +
| Crit Damage : | ++{{Crit}} | + {{/rollBetween() CritConfirm 1 Stat}} + {{/rollWasCrit() Damage}} + {{/rollTotal() DamageOne 1}} + {{/CritConfirm}} +||
| Qualities | +|||
| {{Qualities}} | + +|||