@@ -10,7 +10,7 @@
|
||||
"node": ">= 0.10.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.5",
|
||||
"grunt": "~1.5.2",
|
||||
"grunt-cli": "~0.1.13",
|
||||
"grunt-contrib-watch": "~0.6.1",
|
||||
"grunt-include-replace": "~2.0.0",
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
{
|
||||
"Conflicted": "En conflicte",
|
||||
"Negative": "Negativa",
|
||||
"Positive": "Positive",
|
||||
"Positive": "Positiu",
|
||||
"ac-u": "AC",
|
||||
"action": "Action",
|
||||
"assassin": "Assassin",
|
||||
"at-will": "At-Will",
|
||||
"attack": "Attack",
|
||||
"backgrounds": "Backgrounds",
|
||||
"base-ac-from-class": "Base AC from class",
|
||||
"base-hp-from-class": "Base HP from class",
|
||||
"base-md-from-class": "Base MD from class",
|
||||
"base-pd-from-class": "Base PD from class",
|
||||
"battle-cry": "Battle Cry",
|
||||
"action": "Acció",
|
||||
"assassin": "Assassí\n",
|
||||
"at-will": "A voluntat\n",
|
||||
"attack": "Atacar",
|
||||
"backgrounds": "Fons",
|
||||
"base-ac-from-class": "AC base de classe",
|
||||
"base-hp-from-class": "HP base de classe",
|
||||
"base-md-from-class": "MD base de classe",
|
||||
"base-pd-from-class": "PD base de classe",
|
||||
"battle-cry": "Batalla Plorar",
|
||||
"bck-u": "BCK",
|
||||
"cha-u": "CHA",
|
||||
"charisma": "Charisma",
|
||||
"charisma-based": "Charisma based",
|
||||
"class": "Class",
|
||||
"charisma": "Carisma",
|
||||
"charisma-based": "Basat en la carisma",
|
||||
"class": "Classe",
|
||||
"con-u": "CON",
|
||||
"constitution": "Constitution",
|
||||
"constitution-based": "Constitution based",
|
||||
"copyright": "2015 Pelgrane Press Ltd. Published by Pelgrane Press Ltd. under license from Fire Opal Media. The 13th Age is a trademarks of Fire Opal Media, Inc.",
|
||||
"critical-success-u": "CRITICAL SUCCESS",
|
||||
"current-hp": "Current HP",
|
||||
"custom": "Custom",
|
||||
"custom-1": "Custom 1",
|
||||
"custom-2": "Custom 2",
|
||||
"custom-3": "Custom 3",
|
||||
"daily": "Daily",
|
||||
"damage-on-melee-miss": "Damage on Melee Miss",
|
||||
"damage-on-ranged-miss": "Damage on Ranged Miss",
|
||||
"death-save": "Death Save",
|
||||
"death-save-u": "DEATH SAVE",
|
||||
"details": "Details",
|
||||
"constitution": "Constitució",
|
||||
"constitution-based": "Basat en la constitució\n",
|
||||
"copyright": "2015 Pelgrane Press Ltd. Publicat per Pelgrane Press Ltd. sota llicència de Fire Opal Media. The 13th Age és una marca comercial de Fire Opal Media, Inc.",
|
||||
"critical-success-u": "ÈXIT CRÍTIC\n",
|
||||
"current-hp": "HP actual",
|
||||
"custom": "Personalitzat",
|
||||
"custom-1": "Personalitzat 1",
|
||||
"custom-2": "Personalitzat 2",
|
||||
"custom-3": "Personalitzat 3",
|
||||
"daily": "Diàriament",
|
||||
"damage-on-melee-miss": "Danys si falles cos a cos",
|
||||
"damage-on-ranged-miss": "Dany en fallada a distància",
|
||||
"death-save": "Salvació contra Mort\n",
|
||||
"death-save-u": "SALVACIÓ CONTRA MORT\n",
|
||||
"details": "Detalls",
|
||||
"dex-u": "DEX",
|
||||
"dexterity": "Dexterity",
|
||||
"dice-u": "DICE",
|
||||
"domain": "Domain",
|
||||
"easy-6": "Easy (6+)",
|
||||
"effect": "Effect",
|
||||
"encounter": "Encounter",
|
||||
"engaged": "Engaged",
|
||||
"equipment": "Equipment",
|
||||
"escalation-die": "Escalation Die",
|
||||
"failure-u": "FAILURE",
|
||||
"far-away": "Far Away",
|
||||
"feature": "Feature",
|
||||
"dexterity": "Destresa",
|
||||
"dice-u": "DAU",
|
||||
"domain": "Domini",
|
||||
"easy-6": "Fàcil (6+)\n",
|
||||
"effect": "Efecte",
|
||||
"encounter": "Trobada",
|
||||
"engaged": "Interacció",
|
||||
"equipment": "Equipament",
|
||||
"escalation-die": "Dau d'Increment\n",
|
||||
"failure-u": "FALLADA",
|
||||
"far-away": "Molt lluny\n",
|
||||
"feature": "Proesa",
|
||||
"final-verse": "Final-Verse",
|
||||
"flat-hp-mod-from-magic-items": "Flat HP Mod from Magic Items",
|
||||
"flat-initiative-mod": "Flat Initiative Mod",
|
||||
|
||||
@@ -50,23 +50,23 @@
|
||||
"final-verse": "Verso-final",
|
||||
"flat-hp-mod-from-magic-items": "Mod PV plano de objetos mágicos",
|
||||
"flat-initiative-mod": "Mod Iniciativa plana",
|
||||
"flat-recovery-mod": "Flat Recovery Mod",
|
||||
"flexible-action": "Flexible Action",
|
||||
"free-action": "Free Action",
|
||||
"flat-recovery-mod": "Mod de recuperación plana",
|
||||
"flexible-action": "Acción Flexible\n",
|
||||
"free-action": "Acción libre",
|
||||
"hard-16": "Difícil (16+)",
|
||||
"help-options": "These are base numbers necessary for the automatic calculations below to work. After you've input these numbers you're encouraged to click on the gear icon in the upper right hand corner to hide this section.",
|
||||
"hit": "Hit",
|
||||
"icon-relationships": "Icon Relationships",
|
||||
"improved": "Improved",
|
||||
"initiative": "Initiative",
|
||||
"initiative-u": "INITIATIVE",
|
||||
"help-options": "Estos son números básicos necesarios para que funcionen los cálculos automáticos que se indican a continuación. Una vez que haya ingresado estos números, le recomendamos que haga clic en el ícono de ajustes en la esquina superior derecha para ocultar esta sección.",
|
||||
"hit": "Pegar",
|
||||
"icon-relationships": "Relaciones de iconos",
|
||||
"improved": "Mejorada",
|
||||
"initiative": "Iniciativa",
|
||||
"initiative-u": "INICIATIVA",
|
||||
"int-u": "INT",
|
||||
"intelligence": "Intelligence",
|
||||
"intelligence-based": "Intelligence based",
|
||||
"intercepting": "Intercepting",
|
||||
"level": "Level",
|
||||
"line-of-sight": "Line of Sight",
|
||||
"lvl-u": "LVL",
|
||||
"intelligence": "Inteligencia",
|
||||
"intelligence-based": "Basado en inteligencia",
|
||||
"intercepting": "Interceptando",
|
||||
"level": "Nivel",
|
||||
"line-of-sight": "Línea de visión",
|
||||
"lvl-u": "NIV",
|
||||
"magic-item": "Magic Item",
|
||||
"max": "Max",
|
||||
"max-hp": "Max HP",
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name-u": "IMIĘ",
|
||||
"nation-u": "NARÓD",
|
||||
"player-u": "GRACZ",
|
||||
"religion-u": "RELIGIA\nReligi-i",
|
||||
"religion-u": "Religia",
|
||||
"wounds": "Rany",
|
||||
"dramatic-wounds": "Dramatyczne rany",
|
||||
"traits-skills": "Cechy i umiejętności",
|
||||
@@ -12,7 +12,7 @@
|
||||
"ship": "Statek",
|
||||
"all": "Wszystko",
|
||||
"traits": "Cechy",
|
||||
"brawn": "Mięśnie",
|
||||
"brawn": "Krzepa",
|
||||
"finesse": "Finezja",
|
||||
"resolve": "Determinacja",
|
||||
"wits": "Spryt",
|
||||
@@ -50,7 +50,7 @@
|
||||
"background": "Tło",
|
||||
"arcana": "Arkana",
|
||||
"virtue": "Cnoty",
|
||||
"hubris": "arogancja",
|
||||
"hubris": "Pycha",
|
||||
"reputation": "Reputacja",
|
||||
"reputation-rating": "Poziom reputacji",
|
||||
"cost": "Koszt",
|
||||
|
||||
@@ -1,72 +1,72 @@
|
||||
{
|
||||
"up_to_half_the_range": "Up to half the Range",
|
||||
"past_half_the_range": "Past Half the Range",
|
||||
"+roll": "+Roll",
|
||||
"up_to_half_the_range": "Fins a la meitat del rang\n",
|
||||
"past_half_the_range": "Més enllà de la meitat del rang\n",
|
||||
"+roll": "+ Rotlla",
|
||||
"k": "k",
|
||||
"weapon": "Weapon",
|
||||
"knack_rating": "Knack Rating",
|
||||
"name": "Name",
|
||||
"player": "Player",
|
||||
"nationality": "Nationality",
|
||||
"memberships": "Memberships",
|
||||
"experience": "Experience",
|
||||
"profession": "Profession",
|
||||
"skills": "Skills",
|
||||
"mastery": "Mastery",
|
||||
"basic": "Basic",
|
||||
"weapon": "Arma",
|
||||
"knack_rating": "Valoració de talent",
|
||||
"name": "Nom",
|
||||
"player": "Jugador",
|
||||
"nationality": "Nacionalitat",
|
||||
"memberships": "Membres",
|
||||
"experience": "Experiència",
|
||||
"profession": "Professió",
|
||||
"skills": "Habilitats",
|
||||
"mastery": "Mestratge",
|
||||
"basic": "Bàsic",
|
||||
"combat": "Combat",
|
||||
"equipment": "Equipment",
|
||||
"equipment": "Equipament",
|
||||
"notes": "Notes",
|
||||
"old_skills": "Old Skills",
|
||||
"character_information": "Character Information",
|
||||
"traits": "Traits",
|
||||
"old_skills": "Velles Habilitats",
|
||||
"character_information": "Informació del personatge",
|
||||
"traits": "Trets",
|
||||
"brawn": "Brawn",
|
||||
"finesse": "Finesse",
|
||||
"wits": "Wits",
|
||||
"resolve": "Resolve",
|
||||
"finesse": "Finesa",
|
||||
"wits": "Enginy",
|
||||
"resolve": "Resol",
|
||||
"panache": "Panache",
|
||||
"background": "Background",
|
||||
"advantages": "Advantages",
|
||||
"reputation": "Reputation",
|
||||
"sorcerous_heritages": "Sorcerous Heritages",
|
||||
"trait": "Trait",
|
||||
"knack_name": "Knack Name",
|
||||
"rating": "Rating",
|
||||
"background": "Fons",
|
||||
"advantages": "Avantatges",
|
||||
"reputation": "Reputació",
|
||||
"sorcerous_heritages": "Patrimonis bruixots",
|
||||
"trait": "Tret",
|
||||
"knack_name": "Nom de l'atac",
|
||||
"rating": "Rang",
|
||||
"cast!": "Cast!",
|
||||
"en_garde": "En Garde!",
|
||||
"static": "Static",
|
||||
"crippled": "Crippled",
|
||||
"on_guard": "On Guard",
|
||||
"skilled": "Skilled",
|
||||
"swordsman_schools": "Swordsman Schools",
|
||||
"special_abilities": "Special Abilities",
|
||||
"type": "Type",
|
||||
"damage": "Damage",
|
||||
"dice": "Dice",
|
||||
"static_bonus": "Static Bonus",
|
||||
"keep": "Keep",
|
||||
"attack": "Attack",
|
||||
"range": "Range",
|
||||
"short": "Short",
|
||||
"long": "Long",
|
||||
"reload": "Reload",
|
||||
"melee": "Melee",
|
||||
"yes": "Yes",
|
||||
"static": "Estàtica",
|
||||
"crippled": "Cossat",
|
||||
"on_guard": "En guàrdia",
|
||||
"skilled": "Hàbil",
|
||||
"swordsman_schools": "Escoles d'espadatins",
|
||||
"special_abilities": "Habilitats especials",
|
||||
"type": "Tipus",
|
||||
"damage": "Danys",
|
||||
"dice": "Daus\n",
|
||||
"static_bonus": "Bonificació estàtica",
|
||||
"keep": "Mantenir",
|
||||
"attack": "Atacar",
|
||||
"range": "Interval",
|
||||
"short": "Curt",
|
||||
"long": "Llarg",
|
||||
"reload": "Recarregar",
|
||||
"melee": "cos a cos",
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"defend!": "Defend!",
|
||||
"active": "Active",
|
||||
"passive": "Passive",
|
||||
"wounds": "Wounds",
|
||||
"dramatic_wounds": "Dramatic Wounds",
|
||||
"flesh_wounds": "Flesh Wounds",
|
||||
"roll": "Roll",
|
||||
"knocked_out": "Knocked Out",
|
||||
"defence_knacks": "Defence Knacks",
|
||||
"first": "First",
|
||||
"second": "Second",
|
||||
"third": "Third",
|
||||
"fourth": "Fourth",
|
||||
"fifth": "Fifth",
|
||||
"sixth": "Sixth",
|
||||
"seventh": "Seventh"
|
||||
"defend!": "Defensa!",
|
||||
"active": "Actiu",
|
||||
"passive": "Passiva",
|
||||
"wounds": "Ferides",
|
||||
"dramatic_wounds": "Ferides dramàtiques",
|
||||
"flesh_wounds": "Ferides de Carn",
|
||||
"roll": "Rotlla",
|
||||
"knocked_out": "Noquejat",
|
||||
"defence_knacks": "Destreses de defensa",
|
||||
"first": "Primer",
|
||||
"second": "Segon",
|
||||
"third": "Tercer",
|
||||
"fourth": "Quart",
|
||||
"fifth": "Cinquè",
|
||||
"sixth": "Sisè",
|
||||
"seventh": "Setè"
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
<h2 style="color: black;">Changes in <input type="text" name="attr_version" class="sheet-version-large" readonly/></h2>
|
||||
<div class="sheet-announce-items">
|
||||
<ul style="font-style:italic">
|
||||
<li>Fixed 'Reset Spell Slots' button for resetting current level of spells</li>
|
||||
<li>Fixed the Add Priest Spells based on Spheres button</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>
|
||||
@@ -1076,14 +1076,14 @@
|
||||
<td style="width: 1px;">Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="/em attempts a feat of Strength! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Strength}]]">Strength</button></td>
|
||||
<td><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
|
||||
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0(0)"><button type="roll" name="roll_opendoor-check" title="%{opendoor-check}" value="/em attempts to force the door! [[1d20cs<1cf>20-(@{misc-mod})]] ≤ @{opendoor}"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="/em attempts to Bend Bars or Lift Gate! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[(@{bendbar})]]%"></button></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0(0)"><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -1095,7 +1095,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="/em attempts a feat of Dexterity! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Dexterity}]]">Dexterity</button></td>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
|
||||
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1113,11 +1113,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
|
||||
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conshock}]]% Save vs. System Shock"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conres}]]% Save vs Resurrection Survival"></button></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/w gm &{template:2Echeck} {{checkvs=Resurrection Survival Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conres}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_conpoisonsave" title="@{conpoisonsave}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_conregen" title="@{conregen}" class="sheet-length" value="0"/></td>
|
||||
<td><input type="text" name="attr_connotes" title="@{connotes}"></td>
|
||||
@@ -1133,11 +1133,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="/em attempts a feat of Intelligence! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intelligence}]]">Intelligence</button></td>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
|
||||
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/em attempts to learn ?{Name of Spell?|Spell name}! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{intchance}]]%"></button></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_intimm1st" title="@{intimm1st}" placeholder="1" class="sheet-small"><input type="text" name="attr_intimm2nd" title="@{intimm2nd}" placeholder="2" class="sheet-small"><input type="text" name="attr_intimm3rd" title="@{intimm3rd}" placeholder="3" class="sheet-small"><input type="text" name="attr_intimm4th" title="@{intimm4th}" placeholder="4" class="sheet-small"><input type="text" name="attr_intimm5th" title="@{intimm5th}" placeholder="5" class="sheet-small"><input type="text" name="attr_intimm6th" title="@{intimm6th}" placeholder="6" class="sheet-small"><input type="text" name="attr_intimm7th" title="@{intimm7th}" placeholder="7" class="sheet-small"></td>
|
||||
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
|
||||
@@ -1152,11 +1152,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="/em attempts a feat of Wisdom! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Wisdom}]]">Wisdom</button></td>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
|
||||
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus" title="@{wisbonus}"/></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="/em attempts to wield holy power and cast a spell! [[1d100cs<1cf>100-(@{misc-mod})]]% ≥ [[@{wisfail}]]%"></button></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisimm" title="@{wisimm}" class="sheet-spell-immune"/></td>
|
||||
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
|
||||
</tr>
|
||||
@@ -1169,7 +1169,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="/em attempts a feat of Charisma! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Charisma}]]">Charisma</button></td>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
|
||||
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1192,7 +1192,7 @@
|
||||
<fieldset name="repeating_customattr" class="repeating_customattr">
|
||||
<table class="sheet-default-header-first-column sheet-default-header-odd-row" style='width:100%;'>
|
||||
<tr>
|
||||
<td style="width: 1px;"><button style="visibility: hidden" type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td style="width: 1px;"><button style="visibility: hidden" type="roll">Constitution</button></td>
|
||||
<td>Ability<br>Score</td>
|
||||
<td><input type="text" name="attr_metric1" title="@{repeating_customattr_$X_metric1}" class="sheet-attr" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_metric2" title="@{repeating_customattr_$X_metric2}" class="sheet-attr"/></td>
|
||||
@@ -1202,7 +1202,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="attr_customname" title="@{repeating_customattr_$X_customname}" placeholder="Attribute" class="sheet-table-dynamic90"></td>
|
||||
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="/me attempts a feat of @{customname}! [[d20+(@{misc-mod})]] ≤ [[@{customscore}]]"></button></td>
|
||||
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="&{template:2Echeck} {{checkvs=@{customname} Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{customscore}]]}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_custommetric1" title="@{repeating_customattr_$X_custommetric1}" class="sheet-attr"/><button type="roll" name="roll_custom-metric1" title="%{repeating_customattr_$X_custom-metric1}" value="@{custommetric1}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_custommetric2" title="@{repeating_customattr_$X_custommetric2}" class="sheet-attr"/><button type="roll" name="roll_custom-metric2" title="%{repeating_customattr_$X_custom-metric2}" value="@{custommetric2}"></button></td>
|
||||
<td><input type="text" name="attr_custommetric3" title="@{repeating_customattr_$X_custommetric3}" class="sheet-attr"/><button type="roll" name="roll_custom-metric3" title="%{repeating_customattr_$X_custom-metric3}" value="@{custommetric3}"></button></td>
|
||||
@@ -1216,7 +1216,7 @@
|
||||
<div class="sheet-tab-content sheet-section-attributes-player-option">
|
||||
<table class="sheet-default-header-first-column sheet-default-header-every-third-row sheet-table-white" style='width:100%;'>
|
||||
<tr>
|
||||
<td style="width: 1px;"><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="/em attempts a feat of Strength! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Strength}]]">Strength</button></td>
|
||||
<td style="width: 1px;"><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
|
||||
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"></td>
|
||||
<td>Hit<br>Probability</td>
|
||||
<td>Damage<br>Adjustment</td>
|
||||
@@ -1227,7 +1227,7 @@
|
||||
<td style="width: 1px;">Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Stamina-check" title="%{Stamina-check}" value="/em attempts a feat of Stamina! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Stamina}]]"><em>Stamina</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Stamina-check" title="%{Stamina-check}" value="&{template:2Echeck} {{checkvs=Stamina Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Stamina}]]}} {{color=blue}}"><em>Stamina</em></button></td>
|
||||
<td><input type="text" name="attr_Stamina" title="@{Stamina}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1235,18 +1235,18 @@
|
||||
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Muscle-check" title="%{Muscle-check}" value="/em attempts a feat of Muscle! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Muscle}]]"><em>Muscle</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Muscle-check" title="%{Muscle-check}" value="&{template:2Echeck} {{checkvs=Muscle Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Muscle}]]}} {{color=blue}}"><em>Muscle</em></button></td>
|
||||
<td><input type="text" name="attr_Muscle" title="@{Muscle}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0[0]"/><button type="roll" name="roll_opendoor-check" title="%{opendoor-check}" value="/em attempts to force the door! [[1d20cs<1cf>20-(@{misc-mod})]] ≤ @{opendoor}"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="/em attempts to Bend Bars or Lift Gate! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{bendbar}]]%"></button></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0[0]"/><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_str2notes" title="@{str2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="/em attempts a feat of Dexterity! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Dexterity}]]">Dexterity</button></td>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
|
||||
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"></td>
|
||||
<td colspan="2">Reaction<br>Adjustment</td>
|
||||
<td colspan="2">Missile Attack<br>Adjustment</td>
|
||||
@@ -1254,7 +1254,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Aim-check" title="%{Aim-check}" value="/em attempts a feat of Aim! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Aim}]]"><em>Aim</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Aim-check" title="%{Aim-check}" value="&{template:2Echeck} {{checkvs=Aim Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Aim}]]}} {{color=blue}}"><em>Aim</em></button></td>
|
||||
<td><input type="text" name="attr_Aim" title="@{Aim}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1262,7 +1262,7 @@
|
||||
<td><input type="text" name="attr_dexnotes" title="@{dexnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Balance-check" title="%{Balance-check}" value="/em attempts a feat of Balance! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Balance}]]"><em>Balance</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Balance-check" title="%{Balance-check}" value="&{template:2Echeck} {{checkvs=Balance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Balance}]]}} {{color=blue}}"><em>Balance</em></button></td>
|
||||
<td><input type="text" name="attr_Balance" title="@{Balance}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"></td>
|
||||
@@ -1270,7 +1270,7 @@
|
||||
<td><input type="text" name="attr_dex2notes" title="@{dex2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
|
||||
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Hit Point<br>Adjustment</td>
|
||||
<td>System<br>Shock</td>
|
||||
@@ -1280,26 +1280,26 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Health-check" title="%{Health-check}" value="/em attempts a feat of Health! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Health}]]">Health</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Health-check" title="%{Health-check}" value="&{template:2Echeck} {{checkvs=Health Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Health}]]}} {{color=blue}}">Health</button></td>
|
||||
<td><input type="text" name="attr_Health" title="@{Health}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conshock}]]% Save vs. System Shock"></button></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conpoisonsave" title="@{conpoisonsave}" value="0" class="sheet-shortish"/></td>
|
||||
<td colspan="2" rowspan="2"><input type="text" name="attr_conregen" title="@{conregen}" class="sheet-length" value="0"/></td>
|
||||
<td><input type="text" name="attr_connotes" title="@{connotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Fitness-check" title="%{Fitness-check}" value="/em attempts a feat of Fitness! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Fitness}]]">Fitness</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Fitness-check" title="%{Fitness-check}" value="&{template:2Echeck} {{checkvs=Fitness Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Fitness}]]}} {{color=blue}}">Fitness</button></td>
|
||||
<td><input type="text" name="attr_Fitness" title="@{Fitness}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conres}]]% Save vs Resurrection Survival"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/w gm &{template:2Echeck} {{checkvs=Resurrection Survival Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conres}]]%}} {{color=blue}}"></button></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_con2notes" title="@{con2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="/em attempts a feat of Intelligence! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intelligence}]]">Intelligence</button></td>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
|
||||
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Number of<br>Languages</td>
|
||||
<td>Maximum<br>Spell Level</td>
|
||||
@@ -1309,7 +1309,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Reason-check" title="%{Reason-check}" value="/em attempts a feat of Reason! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Reason}]]">Reason</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Reason-check" title="%{Reason-check}" value="&{template:2Echeck} {{checkvs=Reason Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Reason}]]}} {{color=blue}}">Reason</button></td>
|
||||
<td><input type="text" name="attr_Reason" title="@{Reason}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1319,17 +1319,17 @@
|
||||
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Knowledge-check" title="%{Knowledge-check}" value="/em attempts a feat of Knowledge! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Knowledge}]]">Knowledge</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Knowledge-check" title="%{Knowledge-check}" value="&{template:2Echeck} {{checkvs=Knowledge Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Knowledge}]]}} {{color=blue}}">Knowledge</button></td>
|
||||
<td><input type="text" name="attr_Knowledge" title="@{Knowledge}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/em attempts to learn ?{Name of Spell?|Spell name}! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{intchance}]]%"></button>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button>
|
||||
<td></td>
|
||||
<td colspan="2"></td>
|
||||
<td><input type="text" name="attr_int2notes" title="@{int2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="/em attempts a feat of Wisdom! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Wisdom}]]">Wisdom</button></td>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
|
||||
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Magical Def<br>Adjustment</td>
|
||||
<td colspan="2">Bonus<br>Priest Spells</td>
|
||||
@@ -1338,16 +1338,16 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Intuition-check" title="%{Intuition-check}" value="/em attempts a feat of Intuition! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intuition}]]">Intuition</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Intuition-check" title="%{Intuition-check}" value="&{template:2Echeck} {{checkvs=Intuition Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intuition}]]}} {{color=blue}}">Intuition</button></td>
|
||||
<td><input type="text" name="attr_Intuition" title="@{Intuition}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus-prime" title="@{wisbonus-prime}"/></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="/em attempts to wield holy power and cast a spell! [[1d100cs<1cf>100-(@{misc-mod})]]% ≥ [[@{wisfail}]]%"></button></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisimm1" title="@{wisimm1}" class="sheet-spell-immune"/></td>
|
||||
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Willpower-check" title="%{Willpower-check}" value="/em attempts a feat of Willpower! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Willpower}]]">Willpower</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Willpower-check" title="%{Willpower-check}" value="&{template:2Echeck} {{checkvs=Willpower Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Willpower}]]}} {{color=blue}}">Willpower</button></td>
|
||||
<td><input type="text" name="attr_Willpower" title="@{Willpower}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus-extra" title="@{wisbonus-extra}"/></td>
|
||||
@@ -1356,7 +1356,7 @@
|
||||
<td><input type="text" name="attr_wis2notes" title="@{wis2notes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="/em attempts a feat of Charisma! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Charisma}]]">Charisma</button></td>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
|
||||
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2">Maximum Number<br>of Henchmen</td>
|
||||
<td colspan="2">Loyalty<br>Base</td>
|
||||
@@ -1364,7 +1364,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Leadership-check" title="%{Leadership-check}" value="/em attempts a feat of Leadership! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Leadership}]]">Leadership</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Leadership-check" title="%{Leadership-check}" value="&{template:2Echeck} {{checkvs=Leadership Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Leadership}]]}} {{color=blue}}">Leadership</button></td>
|
||||
<td><input type="text" name="attr_Leadership" title="@{Leadership}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -1372,7 +1372,7 @@
|
||||
<td><input type="text" name="attr_chanotes" title="@{chanotes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Appearance-check" title="%{Appearance-check}" value="/em attempts a feat of Appearance! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Appearance}]]">Appearance</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Appearance-check" title="%{Appearance-check}" value="&{template:2Echeck} {{checkvs=Appearance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Appearance}]]}} {{color=blue}}">Appearance</button></td>
|
||||
<td><input type="text" name="attr_Appearance" title="@{Appearance}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td colspan="2"></td>
|
||||
@@ -22219,22 +22219,22 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sheet-check-c2">{{checkroll}}</td>
|
||||
<td class="sheet-check-c2">≤</td>
|
||||
<td class="sheet-check-c2">></td>
|
||||
<td class="sheet-check-c2">{{checktarget}}</td>
|
||||
</tr>
|
||||
{{#rollTotal() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="2">Fail!</td>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
|
||||
</tr>
|
||||
{{/rollTotal() checkroll checktarget}}
|
||||
{{#rollLess() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="2">Fail!</td>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
|
||||
</tr>
|
||||
{{/rollLess() checkroll checktarget}}
|
||||
{{#rollGreater() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-success" colspan="2">Success!</td>
|
||||
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
|
||||
</tr>
|
||||
{{/rollGreater() checkroll checktarget}}
|
||||
</table>
|
||||
@@ -44363,6 +44363,11 @@ const extractRollResult = async function(rollExpression) {
|
||||
return roll.result;
|
||||
};
|
||||
|
||||
const printRoll = async function(rollExpression) {
|
||||
let roll = await startRoll(rollExpression);
|
||||
finishRoll(roll.rollId);
|
||||
}
|
||||
|
||||
const isRollValid = function (rollExpression, field) {
|
||||
let expression = rollExpression.trim();
|
||||
if (!expression)
|
||||
@@ -44947,6 +44952,22 @@ on('change:charisma change:leadership change:appearance', function() {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
on('clicked:opendoor-check', function (eventInfo){
|
||||
getAttrs(['opendoor'], async function (values){
|
||||
let match = values.opendoor.match(/(\d+)\((\d+)\)/);
|
||||
let rollTemplate = "&{template:2Echeck} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20]]}} {{color=blue}}"
|
||||
if (!match) {
|
||||
return printRoll(rollTemplate + "{{checkvs=Open Doors Check}} {{checktarget=[[@{opendoor}]]}}");
|
||||
}
|
||||
let target = await extractQueryResult(`?{What kind of door?|Normal door,${match[1]}|Locked / Barred / Magical door,${match[2]}}`);
|
||||
rollTemplate += ` {{checktarget=[[${target}]]}}`;
|
||||
rollTemplate += target === match[1]
|
||||
? ` {{checkvs=Open Normal Doors Check}}`
|
||||
: ` {{checkvs=Open Locked/Barred/Magical Doors Check}}`;
|
||||
return printRoll(rollTemplate);
|
||||
});
|
||||
});
|
||||
//#endregion
|
||||
|
||||
//#region Wizard and Priest Spells slot counting
|
||||
@@ -45340,6 +45361,9 @@ priestSpellLevelsSections.forEach(spellLevel => {
|
||||
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
|
||||
if (isNewSpellSection(lastSection)) {
|
||||
setupAutoFillSpellInfo(lastSection, priestSpells, priestDisplayLevel, SPHERE_FIELDS);
|
||||
if (lastSection !== 'priq') {
|
||||
setupAddPriestSpell(lastSection);
|
||||
}
|
||||
}
|
||||
});
|
||||
setupAutoFillSpellInfo("primonster", priestSpells, priestDisplayLevel, SPHERE_FIELDS);
|
||||
@@ -45873,7 +45897,7 @@ on(BOOK_FIELDS.map(b => `change:${b}`).join(' '), function (eventInfo) {
|
||||
// --- Version change start --- //
|
||||
|
||||
const SHEET_NAME = 'AD&D 2E Revised';
|
||||
const SHEET_VERSION = '4.8.1';
|
||||
const SHEET_VERSION = '4.9.1';
|
||||
|
||||
on('sheet:opened', function(){
|
||||
getAttrs(['character_sheet'],function(attrs){
|
||||
|
||||
@@ -869,6 +869,10 @@ button {
|
||||
.sheet-rolltemplate-2Esave table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sheet-rolltemplate-darkmode .inlinerollresult {
|
||||
color: rgb(255, 171, 0);
|
||||
}
|
||||
/*#endregion */
|
||||
|
||||
/*#region Styles common to all 2E Template Headers */
|
||||
@@ -1378,16 +1382,16 @@ button {
|
||||
.sheet-rolltemplate-2Egrenademiss .sheet-miss-text {
|
||||
font-size: 8pt;
|
||||
}
|
||||
/*#endregion*/
|
||||
|
||||
/*/ Overwrite inline roll styling /*/
|
||||
.sheet-rolltemplate-2Egrenademiss .sheet-ignore-inlineroll .inlinerollresult {
|
||||
background-color: inherit;
|
||||
border: inherit;
|
||||
color: #000000;
|
||||
padding: 0;
|
||||
font-weight: inherit;
|
||||
font-size: inherit;
|
||||
}
|
||||
/*#endregion*/
|
||||
|
||||
.sheet-inline {
|
||||
display: inline-block;
|
||||
@@ -1610,6 +1614,19 @@ input.sheet-show-toast-error:checked ~ .sheet-error
|
||||
display: block;
|
||||
}
|
||||
|
||||
.sheet-action-button,
|
||||
.sheet-action-button-roll {
|
||||
height: 19px;
|
||||
font-size: 1.3em;
|
||||
padding: 2px 3px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
.sheet-action-button-roll:before {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
|
||||
/* Announcement styling start */
|
||||
div.sheet-announcement {
|
||||
width: 95%;
|
||||
|
||||
@@ -846,15 +846,6 @@ button {
|
||||
|
||||
insert_rolltemplates.css
|
||||
|
||||
/*/ Overwrite inline roll styling /*/
|
||||
.sheet-rolltemplate-2Egrenademiss .sheet-ignore-inlineroll .inlinerollresult {
|
||||
background-color: inherit;
|
||||
border: inherit;
|
||||
padding: 0;
|
||||
font-weight: inherit;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
.sheet-inline {
|
||||
display: inline-block;
|
||||
}
|
||||
@@ -1076,6 +1067,19 @@ input.sheet-show-toast-error:checked ~ .sheet-error
|
||||
display: block;
|
||||
}
|
||||
|
||||
.sheet-action-button,
|
||||
.sheet-action-button-roll {
|
||||
height: 19px;
|
||||
font-size: 1.3em;
|
||||
padding: 2px 3px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
.sheet-action-button-roll:before {
|
||||
font-family: "dicefontd20";
|
||||
content: "t";
|
||||
}
|
||||
|
||||
/* Announcement styling start */
|
||||
div.sheet-announcement {
|
||||
width: 95%;
|
||||
|
||||
@@ -23,6 +23,10 @@
|
||||
.sheet-rolltemplate-2Esave table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.sheet-rolltemplate-darkmode .inlinerollresult {
|
||||
color: rgb(255, 171, 0);
|
||||
}
|
||||
/*#endregion */
|
||||
|
||||
/*#region Styles common to all 2E Template Headers */
|
||||
@@ -532,4 +536,13 @@
|
||||
.sheet-rolltemplate-2Egrenademiss .sheet-miss-text {
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
||||
.sheet-rolltemplate-2Egrenademiss .sheet-ignore-inlineroll .inlinerollresult {
|
||||
background-color: inherit;
|
||||
border: inherit;
|
||||
color: #000000;
|
||||
padding: 0;
|
||||
font-weight: inherit;
|
||||
font-size: inherit;
|
||||
}
|
||||
/*#endregion*/
|
||||
@@ -4,7 +4,7 @@
|
||||
<h2 style="color: black;">Changes in <input type="text" name="attr_version" class="sheet-version-large" readonly/></h2>
|
||||
<div class="sheet-announce-items">
|
||||
<ul style="font-style:italic">
|
||||
<li>Fixed 'Reset Spell Slots' button for resetting current level of spells</li>
|
||||
<li>Fixed the Add Priest Spells based on Spheres button</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>
|
||||
|
||||
@@ -847,22 +847,22 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="sheet-check-c2">{{checkroll}}</td>
|
||||
<td class="sheet-check-c2">≤</td>
|
||||
<td class="sheet-check-c2">></td>
|
||||
<td class="sheet-check-c2">{{checktarget}}</td>
|
||||
</tr>
|
||||
{{#rollTotal() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="2">Fail!</td>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
|
||||
</tr>
|
||||
{{/rollTotal() checkroll checktarget}}
|
||||
{{#rollLess() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="2">Fail!</td>
|
||||
<td class="sheet-template-result sheet-template-failure" colspan="3">Fail!</td>
|
||||
</tr>
|
||||
{{/rollLess() checkroll checktarget}}
|
||||
{{#rollGreater() checkroll checktarget}}
|
||||
<tr>
|
||||
<td class="sheet-template-result sheet-template-success" colspan="2">Success!</td>
|
||||
<td class="sheet-template-result sheet-template-success" colspan="3">Success!</td>
|
||||
</tr>
|
||||
{{/rollGreater() checkroll checktarget}}
|
||||
</table>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="sheet-tab-content sheet-section-attributes-player-option">
|
||||
<table class="sheet-default-header-first-column sheet-default-header-every-third-row sheet-table-white" style='width:100%;'>
|
||||
<tr>
|
||||
<td style="width: 1px;"><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="/em attempts a feat of Strength! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Strength}]]">Strength</button></td>
|
||||
<td style="width: 1px;"><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
|
||||
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"></td>
|
||||
<td>Hit<br>Probability</td>
|
||||
<td>Damage<br>Adjustment</td>
|
||||
@@ -12,7 +12,7 @@
|
||||
<td style="width: 1px;">Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Stamina-check" title="%{Stamina-check}" value="/em attempts a feat of Stamina! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Stamina}]]"><em>Stamina</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Stamina-check" title="%{Stamina-check}" value="&{template:2Echeck} {{checkvs=Stamina Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Stamina}]]}} {{color=blue}}"><em>Stamina</em></button></td>
|
||||
<td><input type="text" name="attr_Stamina" title="@{Stamina}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -20,18 +20,18 @@
|
||||
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Muscle-check" title="%{Muscle-check}" value="/em attempts a feat of Muscle! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Muscle}]]"><em>Muscle</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Muscle-check" title="%{Muscle-check}" value="&{template:2Echeck} {{checkvs=Muscle Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Muscle}]]}} {{color=blue}}"><em>Muscle</em></button></td>
|
||||
<td><input type="text" name="attr_Muscle" title="@{Muscle}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0[0]"/><button type="roll" name="roll_opendoor-check" title="%{opendoor-check}" value="/em attempts to force the door! [[1d20cs<1cf>20-(@{misc-mod})]] ≤ @{opendoor}"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="/em attempts to Bend Bars or Lift Gate! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{bendbar}]]%"></button></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0[0]"/><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_str2notes" title="@{str2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="/em attempts a feat of Dexterity! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Dexterity}]]">Dexterity</button></td>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
|
||||
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"></td>
|
||||
<td colspan="2">Reaction<br>Adjustment</td>
|
||||
<td colspan="2">Missile Attack<br>Adjustment</td>
|
||||
@@ -39,7 +39,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Aim-check" title="%{Aim-check}" value="/em attempts a feat of Aim! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Aim}]]"><em>Aim</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Aim-check" title="%{Aim-check}" value="&{template:2Echeck} {{checkvs=Aim Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Aim}]]}} {{color=blue}}"><em>Aim</em></button></td>
|
||||
<td><input type="text" name="attr_Aim" title="@{Aim}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -47,7 +47,7 @@
|
||||
<td><input type="text" name="attr_dexnotes" title="@{dexnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Balance-check" title="%{Balance-check}" value="/em attempts a feat of Balance! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Balance}]]"><em>Balance</em></button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Balance-check" title="%{Balance-check}" value="&{template:2Echeck} {{checkvs=Balance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Balance}]]}} {{color=blue}}"><em>Balance</em></button></td>
|
||||
<td><input type="text" name="attr_Balance" title="@{Balance}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"></td>
|
||||
@@ -55,7 +55,7 @@
|
||||
<td><input type="text" name="attr_dex2notes" title="@{dex2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
|
||||
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Hit Point<br>Adjustment</td>
|
||||
<td>System<br>Shock</td>
|
||||
@@ -65,26 +65,26 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Health-check" title="%{Health-check}" value="/em attempts a feat of Health! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Health}]]">Health</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Health-check" title="%{Health-check}" value="&{template:2Echeck} {{checkvs=Health Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Health}]]}} {{color=blue}}">Health</button></td>
|
||||
<td><input type="text" name="attr_Health" title="@{Health}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conshock}]]% Save vs. System Shock"></button></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conpoisonsave" title="@{conpoisonsave}" value="0" class="sheet-shortish"/></td>
|
||||
<td colspan="2" rowspan="2"><input type="text" name="attr_conregen" title="@{conregen}" class="sheet-length" value="0"/></td>
|
||||
<td><input type="text" name="attr_connotes" title="@{connotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Fitness-check" title="%{Fitness-check}" value="/em attempts a feat of Fitness! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Fitness}]]">Fitness</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Fitness-check" title="%{Fitness-check}" value="&{template:2Echeck} {{checkvs=Fitness Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Fitness}]]}} {{color=blue}}">Fitness</button></td>
|
||||
<td><input type="text" name="attr_Fitness" title="@{Fitness}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conres}]]% Save vs Resurrection Survival"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0"/>%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/w gm &{template:2Echeck} {{checkvs=Resurrection Survival Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conres}]]%}} {{color=blue}}"></button></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_con2notes" title="@{con2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="/em attempts a feat of Intelligence! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intelligence}]]">Intelligence</button></td>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
|
||||
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Number of<br>Languages</td>
|
||||
<td>Maximum<br>Spell Level</td>
|
||||
@@ -94,7 +94,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Reason-check" title="%{Reason-check}" value="/em attempts a feat of Reason! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Reason}]]">Reason</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Reason-check" title="%{Reason-check}" value="&{template:2Echeck} {{checkvs=Reason Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Reason}]]}} {{color=blue}}">Reason</button></td>
|
||||
<td><input type="text" name="attr_Reason" title="@{Reason}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -104,17 +104,17 @@
|
||||
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Knowledge-check" title="%{Knowledge-check}" value="/em attempts a feat of Knowledge! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Knowledge}]]">Knowledge</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Knowledge-check" title="%{Knowledge-check}" value="&{template:2Echeck} {{checkvs=Knowledge Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Knowledge}]]}} {{color=blue}}">Knowledge</button></td>
|
||||
<td><input type="text" name="attr_Knowledge" title="@{Knowledge}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
|
||||
<td></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/em attempts to learn ?{Name of Spell?|Spell name}! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{intchance}]]%"></button>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button>
|
||||
<td></td>
|
||||
<td colspan="2"></td>
|
||||
<td><input type="text" name="attr_int2notes" title="@{int2notes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="/em attempts a feat of Wisdom! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Wisdom}]]">Wisdom</button></td>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
|
||||
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td>Magical Def<br>Adjustment</td>
|
||||
<td colspan="2">Bonus<br>Priest Spells</td>
|
||||
@@ -123,16 +123,16 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Intuition-check" title="%{Intuition-check}" value="/em attempts a feat of Intuition! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intuition}]]">Intuition</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Intuition-check" title="%{Intuition-check}" value="&{template:2Echeck} {{checkvs=Intuition Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intuition}]]}} {{color=blue}}">Intuition</button></td>
|
||||
<td><input type="text" name="attr_Intuition" title="@{Intuition}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus-prime" title="@{wisbonus-prime}"/></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="/em attempts to wield holy power and cast a spell! [[1d100cs<1cf>100-(@{misc-mod})]]% ≥ [[@{wisfail}]]%"></button></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisimm1" title="@{wisimm1}" class="sheet-spell-immune"/></td>
|
||||
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Willpower-check" title="%{Willpower-check}" value="/em attempts a feat of Willpower! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Willpower}]]">Willpower</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Willpower-check" title="%{Willpower-check}" value="&{template:2Echeck} {{checkvs=Willpower Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Willpower}]]}} {{color=blue}}">Willpower</button></td>
|
||||
<td><input type="text" name="attr_Willpower" title="@{Willpower}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus-extra" title="@{wisbonus-extra}"/></td>
|
||||
@@ -141,7 +141,7 @@
|
||||
<td><input type="text" name="attr_wis2notes" title="@{wis2notes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="/em attempts a feat of Charisma! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Charisma}]]">Charisma</button></td>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
|
||||
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2">Maximum Number<br>of Henchmen</td>
|
||||
<td colspan="2">Loyalty<br>Base</td>
|
||||
@@ -149,7 +149,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Leadership-check" title="%{Leadership-check}" value="/em attempts a feat of Leadership! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Leadership}]]">Leadership</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Leadership-check" title="%{Leadership-check}" value="&{template:2Echeck} {{checkvs=Leadership Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Leadership}]]}} {{color=blue}}">Leadership</button></td>
|
||||
<td><input type="text" name="attr_Leadership" title="@{Leadership}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -157,7 +157,7 @@
|
||||
<td><input type="text" name="attr_chanotes" title="@{chanotes}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Appearance-check" title="%{Appearance-check}" value="/em attempts a feat of Appearance! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Appearance}]]">Appearance</button></td>
|
||||
<td><button style="margin-left: 10px;" type="roll" name="roll_Appearance-check" title="%{Appearance-check}" value="&{template:2Echeck} {{checkvs=Appearance Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Appearance}]]}} {{color=blue}}">Appearance</button></td>
|
||||
<td><input type="text" name="attr_Appearance" title="@{Appearance}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"></td>
|
||||
<td colspan="2"></td>
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
<td style="width: 1px;">Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="/em attempts a feat of Strength! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Strength}]]">Strength</button></td>
|
||||
<td><button type="roll" name="roll_Strength-check" title="%{Strength-check}" value="&{template:2Echeck} {{checkvs=Strength Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Strength}]]}} {{color=blue}}">Strength</button></td>
|
||||
<td><input type="text" name="attr_Strength" title="@{Strength}" class="sheet-shortish" placeholder="18[67]"/></td>
|
||||
<td><input type="text" name="attr_strengthhit" title="@{strengthhit}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_strengthdmg" title="@{strengthdmg}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_carryweight" title="@{carryweight}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_maxpress" title="@{maxpress}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0(0)"><button type="roll" name="roll_opendoor-check" title="%{opendoor-check}" value="/em attempts to force the door! [[1d20cs<1cf>20-(@{misc-mod})]] ≤ @{opendoor}"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="/em attempts to Bend Bars or Lift Gate! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[(@{bendbar})]]%"></button></td>
|
||||
<td><input type="text" name="attr_opendoor" title="@{opendoor}" class="sheet-shortish" value="0(0)"><button type="action" name="act_opendoor-check" title="%{opendoor-check}" class="btn sheet-action-button-roll"></button></td>
|
||||
<td><input type="text" name="attr_bendbar" title="@{bendbar}" class="sheet-shortish" value="0">%<button type="roll" name="roll_bendbar-check" title="%{bendbar-check}" value="&{template:2Echeck} {{checkvs=Bend Bars / Lift Gate Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{bendbar}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_strnotes" title="@{strnotes}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -31,7 +31,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="/em attempts a feat of Dexterity! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Dexterity}]]">Dexterity</button></td>
|
||||
<td><button type="roll" name="roll_Dexterity-check" title="%{Dexterity-check}" value="&{template:2Echeck} {{checkvs=Dexterity Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Dexterity}]]}} {{color=blue}}">Dexterity</button></td>
|
||||
<td><input type="text" name="attr_Dexterity" title="@{Dexterity}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexreact" title="@{dexreact}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_dexmissile" title="@{dexmissile}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -49,11 +49,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td><button type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="&{template:2Echeck} {{checkvs=Constitution Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Constitution}]]}} {{color=blue}}">Constitution</button></td>
|
||||
<td><input type="text" name="attr_Constitution" title="@{Constitution}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_conadj" title="@{conadj}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conshock}]]% Save vs. System Shock"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/gmroll [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{conres}]]% Save vs Resurrection Survival"></button></td>
|
||||
<td><input type="text" name="attr_conshock" title="@{conshock}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conshock-check" title="%{conshock-check}" value="/w gm &{template:2Echeck} {{checkvs=System Shock Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conshock}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_conres" title="@{conres}" class="sheet-shortish" value="0">%<button type="roll" name="roll_conres-check" title="%{conres-check}" value="/w gm &{template:2Echeck} {{checkvs=Resurrection Survival Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{conres}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_conpoisonsave" title="@{conpoisonsave}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_conregen" title="@{conregen}" class="sheet-length" value="0"/></td>
|
||||
<td><input type="text" name="attr_connotes" title="@{connotes}"></td>
|
||||
@@ -69,11 +69,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="/em attempts a feat of Intelligence! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Intelligence}]]">Intelligence</button></td>
|
||||
<td><button type="roll" name="roll_Intelligence-check" title="%{Intelligence-check}" value="&{template:2Echeck} {{checkvs=Intelligence Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Intelligence}]]}} {{color=blue}}">Intelligence</button></td>
|
||||
<td><input type="text" name="attr_Intelligence" title="@{Intelligence}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_intlang" title="@{intlang}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_intlvl" title="@{intlvl}" class="sheet-shortish" value="0"/></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/em attempts to learn ?{Name of Spell?|Spell name}! [[1d100cs<1cf>100-(@{misc-mod})]]% ≤ [[@{intchance}]]%"></button></td>
|
||||
<td><input type="text" name="attr_intchance" title="@{intchance}" class="sheet-shortish" value="0">%<button type="roll" name="roll_learnspell" title="%{learnspell}" value="/w gm &{template:2Echeck} {{checkvs=Learn *?{Name of Spell?|Spell name}* Check}} {{character=@{character_name}}} {{checkroll=[[1d100cs1cf100-(@{misc-mod})]]%}} {{checktarget=[[@{intchance}]]%}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_intmax" title="@{intmax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_intimm1st" title="@{intimm1st}" placeholder="1" class="sheet-small"><input type="text" name="attr_intimm2nd" title="@{intimm2nd}" placeholder="2" class="sheet-small"><input type="text" name="attr_intimm3rd" title="@{intimm3rd}" placeholder="3" class="sheet-small"><input type="text" name="attr_intimm4th" title="@{intimm4th}" placeholder="4" class="sheet-small"><input type="text" name="attr_intimm5th" title="@{intimm5th}" placeholder="5" class="sheet-small"><input type="text" name="attr_intimm6th" title="@{intimm6th}" placeholder="6" class="sheet-small"><input type="text" name="attr_intimm7th" title="@{intimm7th}" placeholder="7" class="sheet-small"></td>
|
||||
<td><input type="text" name="attr_intnotes" title="@{intnotes}"></td>
|
||||
@@ -88,11 +88,11 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="/em attempts a feat of Wisdom! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Wisdom}]]">Wisdom</button></td>
|
||||
<td><button type="roll" name="roll_Wisdom-check" title="%{Wisdom-check}" value="&{template:2Echeck} {{checkvs=Wisdom Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Wisdom}]]}} {{color=blue}}">Wisdom</button></td>
|
||||
<td><input type="text" name="attr_Wisdom" title="@{Wisdom}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td><input type="text" name="attr_wisdef" title="@{wisdef}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisbonus" title="@{wisbonus}"/></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="/em attempts to wield holy power and cast a spell! [[1d100cs<1cf>100-(@{misc-mod})]]% ≥ [[@{wisfail}]]%"></button></td>
|
||||
<td><input type="text" name="attr_wisfail" title="@{wisfail}" class="sheet-shortish" value="0">%<button type="roll" name="roll_spellfail" title="%{spellfail}" value="&{template:2Einversecheck} {{checkvs=Spell Failure Check}} {{character=@{character_name}}} {{checkroll=[[1d100+(@{misc-mod})]]%}} {{checktarget=[[@{wisfail}]]%}} {{color=blue}}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_wisimm" title="@{wisimm}" class="sheet-spell-immune"/></td>
|
||||
<td><input type="text" name="attr_wisnotes" title="@{wisnotes}"/></td>
|
||||
</tr>
|
||||
@@ -105,7 +105,7 @@
|
||||
<td>Notes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="/em attempts a feat of Charisma! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Charisma}]]">Charisma</button></td>
|
||||
<td><button type="roll" name="roll_Charisma-check" title="%{Charisma-check}" value="&{template:2Echeck} {{checkvs=Charisma Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{Charisma}]]}} {{color=blue}}">Charisma</button></td>
|
||||
<td><input type="text" name="attr_Charisma" title="@{Charisma}" class="sheet-shortish" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chamax" title="@{chamax}" class="sheet-shortish" value="0"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_chaloy" title="@{chaloy}" class="sheet-shortish" value="0"/></td>
|
||||
@@ -128,7 +128,7 @@
|
||||
<fieldset name="repeating_customattr" class="repeating_customattr">
|
||||
<table class="sheet-default-header-first-column sheet-default-header-odd-row" style='width:100%;'>
|
||||
<tr>
|
||||
<td style="width: 1px;"><button style="visibility: hidden" type="roll" name="roll_Constitution-check" title="%{Constitution-check}" value="/em attempts a feat of Constitution! [[1d20cs<1cf>20-(@{misc-mod})]]≤[[@{Constitution}]]">Constitution</button></td>
|
||||
<td style="width: 1px;"><button style="visibility: hidden" type="roll">Constitution</button></td>
|
||||
<td>Ability<br>Score</td>
|
||||
<td><input type="text" name="attr_metric1" title="@{repeating_customattr_$X_metric1}" class="sheet-attr" placeholder="18"/></td>
|
||||
<td colspan="2"><input type="text" name="attr_metric2" title="@{repeating_customattr_$X_metric2}" class="sheet-attr"/></td>
|
||||
@@ -138,7 +138,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input type="text" name="attr_customname" title="@{repeating_customattr_$X_customname}" placeholder="Attribute" class="sheet-table-dynamic90"></td>
|
||||
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="/me attempts a feat of @{customname}! [[d20+(@{misc-mod})]] ≤ [[@{customscore}]]"></button></td>
|
||||
<td><input type="text" name="attr_customscore" title="@{repeating_customattr_$X_customscore}" class="sheet-shortish"/><button type="roll" name="roll_customstat" title="%{repeating_customattr_$X_customstat}" value="&{template:2Echeck} {{checkvs=@{customname} Check}} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20-(@{misc-mod})]]}} {{checktarget=[[@{customscore}]]}} {{color=blue}}"></button></td>
|
||||
<td><input type="text" name="attr_custommetric1" title="@{repeating_customattr_$X_custommetric1}" class="sheet-attr"/><button type="roll" name="roll_custom-metric1" title="%{repeating_customattr_$X_custom-metric1}" value="@{custommetric1}"></button></td>
|
||||
<td colspan="2"><input type="text" name="attr_custommetric2" title="@{repeating_customattr_$X_custommetric2}" class="sheet-attr"/><button type="roll" name="roll_custom-metric2" title="%{repeating_customattr_$X_custom-metric2}" value="@{custommetric2}"></button></td>
|
||||
<td><input type="text" name="attr_custommetric3" title="@{repeating_customattr_$X_custommetric3}" class="sheet-attr"/><button type="roll" name="roll_custom-metric3" title="%{repeating_customattr_$X_custom-metric3}" value="@{custommetric3}"></button></td>
|
||||
|
||||
@@ -91,6 +91,11 @@ const extractRollResult = async function(rollExpression) {
|
||||
return roll.result;
|
||||
};
|
||||
|
||||
const printRoll = async function(rollExpression) {
|
||||
let roll = await startRoll(rollExpression);
|
||||
finishRoll(roll.rollId);
|
||||
}
|
||||
|
||||
const isRollValid = function (rollExpression, field) {
|
||||
let expression = rollExpression.trim();
|
||||
if (!expression)
|
||||
@@ -675,6 +680,22 @@ on('change:charisma change:leadership change:appearance', function() {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
on('clicked:opendoor-check', function (eventInfo){
|
||||
getAttrs(['opendoor'], async function (values){
|
||||
let match = values.opendoor.match(/(\d+)\((\d+)\)/);
|
||||
let rollTemplate = "&{template:2Echeck} {{character=@{character_name}}} {{checkroll=[[1d20cs1cf20]]}} {{color=blue}}"
|
||||
if (!match) {
|
||||
return printRoll(rollTemplate + "{{checkvs=Open Doors Check}} {{checktarget=[[@{opendoor}]]}}");
|
||||
}
|
||||
let target = await extractQueryResult(`?{What kind of door?|Normal door,${match[1]}|Locked / Barred / Magical door,${match[2]}}`);
|
||||
rollTemplate += ` {{checktarget=[[${target}]]}}`;
|
||||
rollTemplate += target === match[1]
|
||||
? ` {{checkvs=Open Normal Doors Check}}`
|
||||
: ` {{checkvs=Open Locked/Barred/Magical Doors Check}}`;
|
||||
return printRoll(rollTemplate);
|
||||
});
|
||||
});
|
||||
//#endregion
|
||||
|
||||
//#region Wizard and Priest Spells slot counting
|
||||
@@ -1068,6 +1089,9 @@ priestSpellLevelsSections.forEach(spellLevel => {
|
||||
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
|
||||
if (isNewSpellSection(lastSection)) {
|
||||
setupAutoFillSpellInfo(lastSection, priestSpells, priestDisplayLevel, SPHERE_FIELDS);
|
||||
if (lastSection !== 'priq') {
|
||||
setupAddPriestSpell(lastSection);
|
||||
}
|
||||
}
|
||||
});
|
||||
setupAutoFillSpellInfo("primonster", priestSpells, priestDisplayLevel, SPHERE_FIELDS);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// --- Version change start --- //
|
||||
|
||||
const SHEET_NAME = 'AD&D 2E Revised';
|
||||
const SHEET_VERSION = '4.8.1';
|
||||
const SHEET_VERSION = '4.9.1';
|
||||
|
||||
on('sheet:opened', function(){
|
||||
getAttrs(['character_sheet'],function(attrs){
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"arcana/psychic-u": "ARCANE/PSYCHIQUE",
|
||||
"whisper-u": "CHUCHOTER",
|
||||
"aim-u": "VISER",
|
||||
"stunts2-u": "2 Stunts",
|
||||
"stunts2-u": "2 cascades",
|
||||
"char-name-u": "NOM DU PERSONNAGE",
|
||||
"mage": "Mage",
|
||||
"rogue": "Roublard",
|
||||
@@ -101,7 +101,7 @@
|
||||
"cp-u": "PC",
|
||||
"sp-u": "PA",
|
||||
"gp-u": "PO",
|
||||
"import-to-currency-u": "IMPORT TO CURRENCY",
|
||||
"import-to-currency-u": "IMPORTER DANS LA MONNAIE",
|
||||
"currency-u": "DEVISE",
|
||||
"eye-u": "YEUX",
|
||||
"skin-u": "PEAU",
|
||||
@@ -187,7 +187,7 @@
|
||||
"show": "Afficher",
|
||||
"hide": "Masquer",
|
||||
"apply-armor-penalty-to-dexterity-rolls": "Appliquer la pénalité d'armure aux jets de Dextérité",
|
||||
"add-tiebreaker-to-initiative-rolls": "Add Tiebreaker to Initiative rolls",
|
||||
"add-tiebreaker-to-initiative-rolls": "Ajouter un séparateur d'égalité aux jets d'initiative",
|
||||
"no": "Non",
|
||||
"yes": "Oui",
|
||||
"options-u": "OPTIONS",
|
||||
@@ -195,9 +195,9 @@
|
||||
"never-use-aim": "Ne jamais viser",
|
||||
"toggle": "Bascule",
|
||||
"always-use-aim": "Toujours utiliser la visée",
|
||||
"never-use-2-stunts": "Never use 2 Stunts",
|
||||
"prompt-for-2-stunts": "Prompt for 2 Stunts",
|
||||
"always-use-2-stunts": "Always use 2 Stunts",
|
||||
"never-use-2-stunts": "Ne jamais utiliser 2 cascades",
|
||||
"prompt-for-2-stunts": "Demander pour 2 cascades",
|
||||
"always-use-2-stunts": "Toujours utiliser 2 cascades",
|
||||
"aim-value-a-value-must-be-entered-here": "Value du visé (un nombre DOIT être entré ici)",
|
||||
"sections-u": "SECTIONS",
|
||||
"show-the-power-list": "Afficher la liste des pouvoirs dans l’onglet personnage",
|
||||
@@ -251,45 +251,45 @@
|
||||
"main-roll-button-title": "C'est le constructeur de jets. Vous pouvez cliquer dessus, répondre à quatre questions, puis il lancera les dés pour vous.",
|
||||
"damage": "Dégâts",
|
||||
"total": "Total",
|
||||
"target_number": "Target Number",
|
||||
"stunt_points": "Stunt Points",
|
||||
"stunt_die": "Stunt Die",
|
||||
"target_number": "Seuil de Réussite",
|
||||
"stunt_points": "Points de cascade",
|
||||
"stunt_die": "Dé de cascade",
|
||||
"ability": "Ability",
|
||||
"ability_value": "Ability Value (field 1 of 4)",
|
||||
"focus_value": "Focus (field 2 of 4)",
|
||||
"additional_modifier": "Additional modifier (field 3 of 4)",
|
||||
"additional_modifier2": "Additional modifier",
|
||||
"additional_modifier": "Modificateur supplémentaire (champ 3 sur 4)",
|
||||
"additional_modifier2": "Modificateur supplémentaire",
|
||||
"ability_score": "Ability Score",
|
||||
"roll_description": "Roll description (field 4 of 4, optional)",
|
||||
"die_roll": "Die Roll",
|
||||
"focus": "Focus",
|
||||
"cunning": "Cunning",
|
||||
"magic": "Magic",
|
||||
"spellcasting_ability": "Spellcasting Ability",
|
||||
"psychic_ability": "Psychic Ability",
|
||||
"cunning": "Ruse",
|
||||
"magic": "Magie",
|
||||
"spellcasting_ability": "Capacité de lancement de sorts",
|
||||
"psychic_ability": "Capacité psychique",
|
||||
"ability_focus": "Ability Focus",
|
||||
"arcana_focus": "Arcana Focus",
|
||||
"psychic_focus": "Psychic Focus",
|
||||
"fatigue_check_for": "Fatigue Check for",
|
||||
"each_fatiguing_spell": "Each Fatiguing spell this Encounter",
|
||||
"fear_label": "Fear",
|
||||
"fear_label": "Peur",
|
||||
"armor_penalty": "Armor Penalty",
|
||||
"initiative_adjustment": "Initiative Adjustment",
|
||||
"initiative": "Initiative",
|
||||
"resources": "Resources",
|
||||
"income_label": "Income",
|
||||
"attack_bonus_label": "Attack Bonus",
|
||||
"resources": "Ressources",
|
||||
"income_label": "Revenu",
|
||||
"attack_bonus_label": "Bonus d’attaque",
|
||||
"magic_arcana_focus": "Magic Arcana Focus",
|
||||
"spellpower_label": "Spellpower",
|
||||
"fatigue_tn_label": "Fatigue TN",
|
||||
"kanna_cost_label": "Kanna Cost",
|
||||
"power_cost_label": "Power Cost",
|
||||
"plus_one_tn": "+1 TN",
|
||||
"weapon_groups": "Weapon Groups",
|
||||
"power_talent_spec_name": "Power, Talent or Specialization name",
|
||||
"focus_bonus_title": "Focus bonus (0, 2, 3, etc.) MUST have a value for the buttons to work.",
|
||||
"description": "Description",
|
||||
"whisper": "Whisper",
|
||||
"whisper_roll": "Whisper Roll",
|
||||
"public_roll": "Public Roll"
|
||||
"weapon_groups": "Groupe d'armes",
|
||||
"power_talent_spec_name": "Nom du pouvoir, du talent ou de la spécialisation",
|
||||
"focus_bonus_title": "Le bonus de focus (0, 2, 3, etc.) DOIT avoir une valeur pour que les boutons fonctionnent.",
|
||||
"description": "Description ",
|
||||
"whisper": "Murmurer",
|
||||
"whisper_roll": "Murmurer le jet",
|
||||
"public_roll": "Jet Public"
|
||||
}
|
||||
|
||||
@@ -57,12 +57,17 @@
|
||||
|
||||
<div class = "character">
|
||||
<div class = "grid">
|
||||
<div class = "abilities">
|
||||
<h1>ABILITIES</h1>
|
||||
|
||||
<div class = "abilities_header">
|
||||
<div>
|
||||
<h1>ABILITIES</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Abilities-->
|
||||
<div class = "abilities_grid">
|
||||
<input type="checkbox" class="toggle-show-2e" name = "attr_2e" value = "1"/><span>Use 2nd Edition Abilities</span>
|
||||
|
||||
<!--Abilities 1st Edition-->
|
||||
<div class = "abilities_1e">
|
||||
<div>
|
||||
<label class = "ability_label_large">STR</label>
|
||||
</div>
|
||||
@@ -154,6 +159,147 @@
|
||||
<textarea name = "attr_fame_category" class = "fame_category"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!--Abilities 2nd Edition-->
|
||||
<div class = "abilities_2e">
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_str" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">STR</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_str"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Damage Modifier</label>
|
||||
<input type = "text" name = "attr_str_mod2"/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class = "small_label">Feat of Strength</label>
|
||||
<input type = "text" name = "attr_str_feat"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_int" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">INT</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_int"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Accuracy Modifier</label>
|
||||
<input type = "text" name = "attr_int_mod2"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_wis" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">WIS</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_wis"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Speed Modifier</label>
|
||||
<input type = "text" name = "attr_wis_mod2"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_dex" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">DEX</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_dex"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Speed Modifier</label>
|
||||
<input type = "text" name = "attr_dex_mod1"/>
|
||||
</div>
|
||||
<div>
|
||||
<label class = "small_label">Accuracy Modifier</label>
|
||||
<input type = "text" name = "attr_dex_mod2"/>
|
||||
</div>
|
||||
<div>
|
||||
<label class = "small_label">Feat of Agility</label>
|
||||
<input type = "text" name = "attr_dex_mod3"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_con" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">CON</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_con"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Healing Adj</label>
|
||||
<input type = "text" name = "attr_con_mod2"/>
|
||||
</div>
|
||||
</div>
|
||||
<div></div>
|
||||
<!--<input type="checkbox" class="toggle-show-mods" name = "attr_show_lks" value = "1"/>-->
|
||||
<div>
|
||||
<label class = "ability_label_large">LKS</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_lks"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_cha" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">CHA</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_cha"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Maximum Compatriots</label>
|
||||
<input type = "text" name = "attr_cha_mod2"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_rep" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">REP</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_rep"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Rep. Cat.</label>
|
||||
<input type = "text" name = "attr_rep_points2" class = "fame_rep_category"/>
|
||||
</div>
|
||||
</div>
|
||||
<input type="checkbox" class="toggle-show-mods" name = "attr_show_fame" value = "1"/>
|
||||
<div>
|
||||
<label class = "ability_label_large">FAME</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type = "text" name = "attr_fame2"/>
|
||||
</div>
|
||||
<div></div>
|
||||
<div class = "mod_line">
|
||||
<div>
|
||||
<label class = "small_label">Fame Cat.</label>
|
||||
<input type = "text" name = "attr_fame_category2" class = "fame_rep_category"></input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!--Hit Points-->
|
||||
<div class = "HP_grid">
|
||||
@@ -207,7 +353,10 @@
|
||||
<textarea name = "attr_items" id = "itemsInput"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<textarea class = "big_box" name = "attr_random_stuff"></textarea>
|
||||
<div class = "other_notes">
|
||||
<h1>OTHER NOTES</h1>
|
||||
<textarea class = "big_box" name = "attr_random_stuff"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class = "weapons">
|
||||
@@ -229,7 +378,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div><label class = "grid_header">ACCURACY</label></div>
|
||||
<div><input class = "speed_acc_total_input" type = "number" name = "attr_acc"></div>
|
||||
<div><input class = "speed_acc_total_input" type = "number" name = "attr_acc" value = "@{accmods_0}"></div>
|
||||
<input type="checkbox" class="toggle-show-acc"/>
|
||||
<div>
|
||||
<span>Show Accuracy Modifiers</span>
|
||||
@@ -637,6 +786,7 @@
|
||||
|
||||
<div class = "horses">
|
||||
<fieldset class = "repeating_horse">
|
||||
<hr>
|
||||
<div class = "bio">
|
||||
<div class = "name">
|
||||
<label>Name</label><input type = "text" name = "attr_horse_name"/>
|
||||
@@ -680,8 +830,10 @@
|
||||
</div>
|
||||
|
||||
<div class = "horse_stats">
|
||||
<h1 class = "header">STATS</h1>
|
||||
<h1>NOTES/TACK</h1>
|
||||
<div class = "horse_headers_flex">
|
||||
<h1 class = "header">STATS</h1>
|
||||
<h1>NOTES/TACK</h1>
|
||||
</div>
|
||||
<div class = "horse_grid">
|
||||
<div class = "horse_stats_grid">
|
||||
<div>
|
||||
@@ -732,7 +884,6 @@
|
||||
<div>
|
||||
<textarea class = "horse_tack"></textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
@@ -91,6 +91,7 @@ hr {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/*General Charactersheet*/
|
||||
.charsheet{
|
||||
background: white;
|
||||
}
|
||||
@@ -110,21 +111,14 @@ h1{
|
||||
|
||||
.sheet-grid{
|
||||
display: grid;
|
||||
grid-template-columns: 256px 180px 400px;
|
||||
grid-template-rows: 40px 50px 80px 95px 195px;
|
||||
grid-template-columns: 56px 200px 180px 400px;
|
||||
grid-template-rows: 50px 50px 80px auto 195px;
|
||||
column-gap: 0px;
|
||||
}
|
||||
|
||||
.sheet-abilities_grid{
|
||||
grid-row: 2/ span 4;
|
||||
grid-col: 1;
|
||||
display: grid;
|
||||
grid-template-columns: 70px 60px 116px;
|
||||
grid-template-rows: 40px 40px 40px 40px 40px 40px 40px 40px 40px;
|
||||
column-gap: 3px;
|
||||
row-gap: 5px;
|
||||
justify-items: center;
|
||||
align-items:center;
|
||||
/*Abilities (General)*/
|
||||
.sheet-abilities_header{
|
||||
grid-column: 1 / span 2;
|
||||
}
|
||||
|
||||
.sheet-ability_label_large{
|
||||
@@ -136,19 +130,6 @@ h1{
|
||||
justify-self: center;
|
||||
}
|
||||
|
||||
.sheet-abilities_grid label + input{
|
||||
height: 20px;
|
||||
width: 116px;
|
||||
}
|
||||
|
||||
.sheet-abilities_grid input{
|
||||
height: 30px;
|
||||
width: 50px !important;
|
||||
align-self: start;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.sheet-small_label{
|
||||
font-size: 13px;
|
||||
margin-bottom: 1px;
|
||||
@@ -159,6 +140,27 @@ h1{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*Abilites 1e*/
|
||||
.sheet-abilities_1e{
|
||||
grid-row: 2/ span 4;
|
||||
grid-column: 1 / span 2;
|
||||
display: grid;
|
||||
grid-template-columns: 70px 60px 116px;
|
||||
grid-template-rows: 40px 40px 40px 40px 40px 40px 40px 40px 40px;
|
||||
column-gap: 3px;
|
||||
row-gap: 5px;
|
||||
justify-items: center;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
.sheet-abilities_1e input{
|
||||
height: 30px;
|
||||
width: 50px !important;
|
||||
align-self: start;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.sheet-mod_grid{
|
||||
display: grid;
|
||||
grid-template-columns: 116px;
|
||||
@@ -174,6 +176,88 @@ h1{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*Abilities 2e*/
|
||||
.sheet-abilities_2e{
|
||||
grid-row: 2/ span 4;
|
||||
grid-column: 1 / span 2;
|
||||
display: grid;
|
||||
grid-template-columns: 28px 60px 60px 98px;
|
||||
column-gap: 3px;
|
||||
row-gap: 5px;
|
||||
justify-items: center;
|
||||
align-items:center;
|
||||
}
|
||||
|
||||
.sheet-abilities_2e input{
|
||||
height: 30px;
|
||||
width: 50px !important;
|
||||
text-align: left;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.sheet-mod_line{
|
||||
grid-column: 1 / span 4;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: left;
|
||||
width: 246px;
|
||||
}
|
||||
|
||||
.sheet-mod_line div{
|
||||
display: flex;
|
||||
padding-left: 20px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.sheet-mod_line div input{
|
||||
margin-left: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sheet-abilities_2e .sheet-fame_rep_category{
|
||||
width: 140px !important;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.sheet-abilities_2e .sheet-toggle-show-mods{
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
input.sheet-toggle-show-mods:checked + div + div + div + div.sheet-mod_line{
|
||||
display: flex
|
||||
}
|
||||
|
||||
input.sheet-toggle-show-mods:not(:checked) + div + div + div + div.sheet-mod_line{
|
||||
display: none;
|
||||
}
|
||||
|
||||
/*Second Edition Toggling*/
|
||||
div input.sheet-toggle-show-2e:checked ~ div.sheet-abilities_1e {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div input.sheet-toggle-show-2e:not(:checked) ~ div.sheet-abilities_2e {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sheet-toggle-show-2e{
|
||||
width: 30px;
|
||||
margin-top: 13px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.sheet-toggle-show-2e ~ span{
|
||||
font-size: 17px;
|
||||
padding-top: 7px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.sheet-abilities_1e label + input, .sheet-abilities_2e label + input{
|
||||
height: 20px;
|
||||
width: 116px;
|
||||
}
|
||||
|
||||
/*HP*/
|
||||
.sheet-HP_header label{
|
||||
margin-top: 7px;
|
||||
}
|
||||
@@ -201,6 +285,7 @@ h1{
|
||||
grid-col: 2;
|
||||
}
|
||||
|
||||
/*Money*/
|
||||
.sheet-money_grid input{
|
||||
font-size: 21px;
|
||||
width: 180px;
|
||||
@@ -212,6 +297,7 @@ h1{
|
||||
grid-col: 2;
|
||||
}
|
||||
|
||||
/*Skills*/
|
||||
.sheet-skills_grid{
|
||||
grid-col: 3;
|
||||
grid-row: 1 / span 5;
|
||||
@@ -261,6 +347,7 @@ h1{
|
||||
width: 70px;
|
||||
}
|
||||
|
||||
/*Items*/
|
||||
.sheet-items_grid{
|
||||
grid-col: 2;
|
||||
grid-row: 4 / span 2;
|
||||
@@ -272,8 +359,22 @@ h1{
|
||||
width: 180px;
|
||||
}
|
||||
|
||||
/*Weapons*/
|
||||
.sheet-other_notes{
|
||||
width: 430px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.sheet-big_box{
|
||||
margin-top: 10px;
|
||||
width: 430px;
|
||||
}
|
||||
|
||||
textarea{
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
/*Weapons*/
|
||||
input.sheet-toggle-show:not(:checked) ~ div div.sheet-speed_mods{
|
||||
display: none;
|
||||
}
|
||||
@@ -288,7 +389,6 @@ input.sheet-toggle-show-acc:not(:checked) ~ div div.sheet-acc_mods{
|
||||
margin-top: 13px;
|
||||
}
|
||||
|
||||
|
||||
.sheet-toggle-calc{
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
@@ -353,15 +453,6 @@ input.sheet-toggle-show-acc:not(:checked) ~ div div.sheet-acc_mods{
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.sheet-big_box{
|
||||
margin-top: 10px;
|
||||
width: 430px;
|
||||
}
|
||||
|
||||
textarea{
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.sheet-repeating_weapons{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
@@ -433,6 +524,7 @@ button.sheet-weapons_button:before{
|
||||
content: "" !important;
|
||||
}
|
||||
|
||||
/*Bio Page*/
|
||||
.sheet-bio2_grid{
|
||||
display: grid;
|
||||
grid-template-columns: 220px 130px 110px 370px;
|
||||
@@ -537,6 +629,8 @@ button.sheet-weapons_button:before{
|
||||
grid-column: 1 / span 3;
|
||||
}
|
||||
|
||||
/*Horses*/
|
||||
|
||||
.sheet-breed input, .sheet-personality input{
|
||||
width: 130px;
|
||||
}
|
||||
@@ -559,11 +653,15 @@ button.sheet-weapons_button:before{
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.sheet-horse_headers_flex{
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
}
|
||||
.sheet-horse_stats h1{
|
||||
text-align: left;
|
||||
/*text-align: left;
|
||||
margin-left: 130px;
|
||||
display: inline;
|
||||
margin-right: 130px;
|
||||
margin-right: 130px;*/
|
||||
}
|
||||
|
||||
.sheet-horse_stats_grid{
|
||||
@@ -591,6 +689,7 @@ button.sheet-weapons_button:before{
|
||||
display: grid;
|
||||
grid-template-columns: 450px 285px;
|
||||
grid-template-rows: 120px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.sheet-horse_tack{
|
||||
@@ -598,6 +697,11 @@ button.sheet-weapons_button:before{
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.sheet-horses .sheet-bio{
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/*Roll Templates*/
|
||||
.sheet-rolltemplate-skills, .sheet-rolltemplate-attack{
|
||||
background: url(https://github.com/lelajcorson/Aces-and-Eights-Character-Sheet/blob/skills-rolltemplate/roll_border.png?raw=true) top left;
|
||||
background-size: 195px 104px;
|
||||
|
||||
@@ -1,162 +1,162 @@
|
||||
{
|
||||
"character": "Character",
|
||||
"ship": "Ship",
|
||||
"character": "Personaje",
|
||||
"ship": "Nave",
|
||||
"xeno": "Xeno",
|
||||
"hostile": "Hostile",
|
||||
"personal-agenda-u": "Personal Agenda",
|
||||
"personal-agenda-place": "Personal Agenda",
|
||||
"character-name-u": "Character Name",
|
||||
"character-name-place": "Character Name",
|
||||
"talents-u": "Talents",
|
||||
"talent-one-name.place": "Talent one name",
|
||||
"talent-one-description.place": "Talent one description",
|
||||
"talent-two-name.place": "Talent two name",
|
||||
"talent-two-description.place": "Talent two description",
|
||||
"talent-three-name.place": "Talent three name",
|
||||
"talent-three-description.place": "Talent three description",
|
||||
"talent-four-name.place": "Talent four name",
|
||||
"talent-four-description.place": "Talent four description",
|
||||
"talent-five-name.place": "Talent five name",
|
||||
"talent-five-description.place": "Talent five description",
|
||||
"talent-six-name.place": "Talent six name",
|
||||
"talent-six-description.place": "Talent six description",
|
||||
"talent-seven-name.place": "Talent seven name",
|
||||
"talent-seven-description.place": "Talent seven description",
|
||||
"talent-eight-name.place": "Talent eight name",
|
||||
"talent-eight-description.place": "Talent eight description",
|
||||
"career-u": "Career",
|
||||
"career-place": "Career",
|
||||
"relationships-u": "Relationships",
|
||||
"buddy-u": "Buddy: ",
|
||||
"hostile": "Hostil",
|
||||
"personal-agenda-u": "Motivación",
|
||||
"personal-agenda-place": "Motivación",
|
||||
"character-name-u": "Nombre del personaje",
|
||||
"character-name-place": "Nombre del personaje",
|
||||
"talents-u": "Talentos",
|
||||
"talent-one-name.place": "Nombre talento 1",
|
||||
"talent-one-description.place": "Descripción talento 1",
|
||||
"talent-two-name.place": "Nombre talento 2",
|
||||
"talent-two-description.place": "Descripción talento 2",
|
||||
"talent-three-name.place": "Nombre talento 3",
|
||||
"talent-three-description.place": "Descripción talento 3",
|
||||
"talent-four-name.place": "Nombre talento 4",
|
||||
"talent-four-description.place": "Descripción talento 4",
|
||||
"talent-five-name.place": "Nombre talento 5",
|
||||
"talent-five-description.place": "Descripción talento 5",
|
||||
"talent-six-name.place": "Nombre talento 6",
|
||||
"talent-six-description.place": "Descripción talento 6",
|
||||
"talent-seven-name.place": "Nombre talento 7",
|
||||
"talent-seven-description.place": "Descripción talento 7",
|
||||
"talent-eight-name.place": "Nombre talento 8",
|
||||
"talent-eight-description.place": "Descripción talento 8",
|
||||
"career-u": "Profesión",
|
||||
"career-place": "Profesión",
|
||||
"relationships-u": "Relaciones",
|
||||
"buddy-u": "Colega: ",
|
||||
"rival-u": "Rival: ",
|
||||
"roll-buttons-u": "Roll Buttons",
|
||||
"roll-buttons-u": "Botones para tiradas",
|
||||
"1d3-u": "1d3",
|
||||
"1d6-u": "1d6",
|
||||
"12d6d3-u": "2d6",
|
||||
"3d6-u": "3d6",
|
||||
"d66-u": "d66",
|
||||
"panic-u": "Panic",
|
||||
"panic-desc": "Tension that grows too strong can explode into a wild panic; Panic roll is a D6 plus your current Stress level. Read results from the table in the Player manual.",
|
||||
"initiative-card-u": "Initiative: Card",
|
||||
"initiative-card-desc": "Initiative: Card button to enter your drawn intitiative card. Make sure you select your token before rolling to automatically assign the initivative.",
|
||||
"initiative-dice-u": "Initiative: Dice",
|
||||
"initiative-dice-desc": "Initiative: Dice button to roll for your initiative, the GM may ask you to change the dice rolled in the configuraiton tab. Make sure you select your token before rolling to automatically assign the initivative.",
|
||||
"base-dice-u": "Base Dice",
|
||||
"base": "Base",
|
||||
"stress-dice-u": "Stress Dice",
|
||||
"stress-level-u": "Stress Level",
|
||||
"close-combat-u": "Close Combat",
|
||||
"experience-points-u": "Experience Points",
|
||||
"health-u": "Health",
|
||||
"heavy-machinery-u": "Heavy Machinery",
|
||||
"strength-u": "Strength",
|
||||
"stamina-u": "Stamina",
|
||||
"make-roll-secret-u": "Make Roll Secret",
|
||||
"story-points-u": "Story Points",
|
||||
"radiation-u": "Radiation",
|
||||
"ranged-combat-u": "Ranged Combat",
|
||||
"observation-u": "Observation",
|
||||
"tiny-items-u": "Tiny Items",
|
||||
"odds-and-ends-place": "odds and ends",
|
||||
"mobility-u": "Mobility",
|
||||
"skill-xeno-desc": "Skill rolls for Hostiles uses only the skill level,\nplease ensure that the Character tab attributes\nare all set to 0 for Hostiles.",
|
||||
"agility-u": "Agility",
|
||||
"attributes-u": "Attributes",
|
||||
"wits-u": "Wits",
|
||||
"survival-u": "Survival",
|
||||
"critical-injuries-u": "Critical Injuries",
|
||||
"critical-injuries-place": "Critical Injuries",
|
||||
"piloting-u": "Piloting",
|
||||
"comtech-u": "Comtech",
|
||||
"Comtech-u": "Comtech",
|
||||
"signature-item-u": "Signature Item",
|
||||
"signature-item-place": "Signature Item",
|
||||
"command-u": "Command",
|
||||
"empathy-u": "Empathy",
|
||||
"medical-aid-u": "Medical Aid",
|
||||
"gear-u": "Gear",
|
||||
"item-place": "Item",
|
||||
"item-1-place": "Item 1",
|
||||
"item-2-place": "Item 2",
|
||||
"item-3-place": "Item 3",
|
||||
"item-4-place": "Item 4",
|
||||
"item-5-place": "Item 5",
|
||||
"item-6-place": "Item 6",
|
||||
"item-7-place": "Item 7",
|
||||
"item-8-place": "Item 8",
|
||||
"conditions-u": "Conditions",
|
||||
"starving-u": "Starving",
|
||||
"dehydrated-u": "Dehydrated",
|
||||
"exhausted-u": "Exhausted",
|
||||
"freezing-u": "Freezing",
|
||||
"manipulation-u": "Manipulation",
|
||||
"armor-u": "Armor",
|
||||
"encumbrance-u": "Encumbrance",
|
||||
"weapons-u": "Weapons",
|
||||
"weapon-one-name-place": "Weapon one name",
|
||||
"weapon-two-name-place": "Weapon two name",
|
||||
"weapon-three-name-place": "Weapon three name",
|
||||
"weapon-four-name-place": "Weapon four name",
|
||||
"weapon-five-name-place": "Weapon five name",
|
||||
"weapon-six-name-place": "Weapon six name",
|
||||
"attack-u": "Attack",
|
||||
"bonus-u": "Bonus",
|
||||
"damage-u": "Damage",
|
||||
"engaged-u": "Engaged",
|
||||
"short-u": "Short",
|
||||
"medium-u": "Medium",
|
||||
"long-u": "Long",
|
||||
"extreme-u": "Extreme",
|
||||
"range-u": "Range",
|
||||
"use-close-combat-title": "Close combat",
|
||||
"panic-u": "Pánico",
|
||||
"panic-desc": "Si la Tensión se vuelve insoportable, podrías estallar y sufrir un ataque de pánico. Tira un D6, súmale tu NIVEL DE TENSIÓN actual y consulta el resultado en la tabla que aparece en el reglamento.",
|
||||
"initiative-card-u": "Iniciativa: Carta",
|
||||
"initiative-card-desc": "Iniciativa: Botón para introducir tu carta de iniciativa robada. Asegúrate de seleccionar tu ficha (token) antes de tirar para asignar automáticamente la iniciativa.",
|
||||
"initiative-dice-u": "Iniciativa: Dados",
|
||||
"initiative-dice-desc": "Iniciativa: Botón para tirar por tu iniciativa. La DM puede pedirte que cambies los dados tirados en la pestaña de configuración. Asegúrate de seleccionar tu ficha (token) antes de tirar para asignar automáticamente la iniciativa.",
|
||||
"base-dice-u": "Dados Básicos",
|
||||
"base": "Básicos",
|
||||
"stress-dice-u": "Dados de Tensión",
|
||||
"stress-level-u": "Nivel de Tensión",
|
||||
"close-combat-u": "Combate cuerpo a cuerpo",
|
||||
"experience-points-u": "Puntos de experiencia",
|
||||
"health-u": "Vitalidad",
|
||||
"heavy-machinery-u": "Maquinaria pesada",
|
||||
"strength-u": "Fortaleza",
|
||||
"stamina-u": "Aguante",
|
||||
"make-roll-secret-u": "Tirada secreta",
|
||||
"story-points-u": "Puntos de trama",
|
||||
"radiation-u": "Radiación",
|
||||
"ranged-combat-u": "Combate a distancia",
|
||||
"observation-u": "Observación",
|
||||
"tiny-items-u": "Objetos diminutos",
|
||||
"odds-and-ends-place": "Chismes",
|
||||
"mobility-u": "Movilidad",
|
||||
"skill-xeno-desc": "Las tiradas de habilidad de los Hostiles utilizan sólo el nivel de habilidad,\npor favor, asegúrate de que los atributos de la pestaña Personaje\nestén todos a 0 para los Hostiles.",
|
||||
"agility-u": "Agilidad",
|
||||
"attributes-u": "Atributos",
|
||||
"wits-u": "Intelecto",
|
||||
"survival-u": "Supervivencia",
|
||||
"critical-injuries-u": "Heridas críticas",
|
||||
"critical-injuries-place": "Heridas críticas",
|
||||
"piloting-u": "Pilotar",
|
||||
"comtech-u": "Computadoras",
|
||||
"Comtech-u": "Computadoras",
|
||||
"signature-item-u": "Objeto personal",
|
||||
"signature-item-place": "Objeto personal",
|
||||
"command-u": "Mando",
|
||||
"empathy-u": "Empatía",
|
||||
"medical-aid-u": "Medicina",
|
||||
"gear-u": "Equipo",
|
||||
"item-place": "Objeto",
|
||||
"item-1-place": "Objeto 1",
|
||||
"item-2-place": "Objeto 2",
|
||||
"item-3-place": "Objeto 3",
|
||||
"item-4-place": "Objeto 4",
|
||||
"item-5-place": "Objeto 5",
|
||||
"item-6-place": "Objeto 6",
|
||||
"item-7-place": "Objeto 7",
|
||||
"item-8-place": "Objeto 8",
|
||||
"conditions-u": "Estados",
|
||||
"starving-u": "Hambriento",
|
||||
"dehydrated-u": "Deshidratado",
|
||||
"exhausted-u": "Exhausto",
|
||||
"freezing-u": "Congelado",
|
||||
"manipulation-u": "Manipulación",
|
||||
"armor-u": "Blindaje",
|
||||
"encumbrance-u": "Capacidad de carga",
|
||||
"weapons-u": "Armas",
|
||||
"weapon-one-name-place": "Nombre arma 1",
|
||||
"weapon-two-name-place": "Nombre arma 2",
|
||||
"weapon-three-name-place": "Nombre arma 3",
|
||||
"weapon-four-name-place": "Nombre arma 4",
|
||||
"weapon-five-name-place": "Nombre arma 5",
|
||||
"weapon-six-name-place": "Nombre arma 6",
|
||||
"attack-u": "Ataque",
|
||||
"bonus-u": "Bonificación",
|
||||
"damage-u": "Daño",
|
||||
"engaged-u": "Interacción",
|
||||
"short-u": "Corto",
|
||||
"medium-u": "Medio",
|
||||
"long-u": "Largo",
|
||||
"extreme-u": "Extremo",
|
||||
"range-u": "Alcance",
|
||||
"use-close-combat-title": "Combate cuerpo a cuerpo",
|
||||
"cc-title": "CC",
|
||||
"use-ranged-combat-title": "Ranged combat",
|
||||
"rc-title": "RC",
|
||||
"comment-desc-notes-place": "Comment/description/notes...",
|
||||
"consumables-u": "Consumables",
|
||||
"air-u": "Air",
|
||||
"food-u": "Food",
|
||||
"power-u": "Power",
|
||||
"water-u": "Water",
|
||||
"building-betterworlds-u": "\"Building Better Worlds\"",
|
||||
"template-bonus-u": "Bonus: ",
|
||||
"template-dice-u": "Dice: ",
|
||||
"template-damage-u": "Damage: ",
|
||||
"none-place": "None",
|
||||
"weight-u": "Weight",
|
||||
"use-ranged-combat-title": "Combate a distancia",
|
||||
"rc-title": "CD",
|
||||
"comment-desc-notes-place": "Comentario/descripción/notas...",
|
||||
"consumables-u": "Suministros",
|
||||
"air-u": "Aire",
|
||||
"food-u": "Comida",
|
||||
"power-u": "Energía",
|
||||
"water-u": "Agua",
|
||||
"building-betterworlds-u": "\"Construimos mundos mejores\"",
|
||||
"template-bonus-u": "Bonificación: ",
|
||||
"template-dice-u": "Dados: ",
|
||||
"template-damage-u": "Daño: ",
|
||||
"none-place": "Ninguno",
|
||||
"weight-u": "Peso",
|
||||
"pack-mule-u": "Pack mule",
|
||||
"overencumbered-u": "Over-encumbered",
|
||||
"overencumbered-title": "You can temporarily carry up to twice your normal encumbrance limit, i.e. STRENGTH x 4 items. If over-encumbered, you must make a MOBILITY roll when you want to run or crawl in a Round of combat (see page 89). If you fail, you must either drop what you are carrying, or stay put.",
|
||||
"overloaded-u": "Overloaded",
|
||||
"overloaded-title": "If you carry more that twice your normal encumbrance limit, you are overloaded and cannot move. ",
|
||||
"internal-modules-u": "INTERNAL MODULES",
|
||||
"ship-name-u": "Name",
|
||||
"ship-manufacturer-u": "Manufacturer",
|
||||
"ship-ai-u": "AI",
|
||||
"ship-crew-u": "Crew",
|
||||
"ship-passengers-u": "Passengers",
|
||||
"ship-length-u": "Length",
|
||||
"ship-ftl-rating-u": "FTL Rating",
|
||||
"ship-signature-u": "Signature",
|
||||
"ship-thrusters-u": "Thrusters",
|
||||
"ship-hull-u": "Hull",
|
||||
"ship-armor-u": "Armor",
|
||||
"clear": "Clear",
|
||||
"hullpoints-missing": "No hull points entered",
|
||||
"ships-log-u": "SHIP'S LOG",
|
||||
"date": "Date",
|
||||
"location": "Location",
|
||||
"min-comp-dmg-u": "MINOR COMPONENT DAMAGE",
|
||||
"effect-u": "EFFECT",
|
||||
"maj-comp-dmg-u": "MAJOR COMPONENT DAMAGE",
|
||||
"upgrades-u": "UPGRADES",
|
||||
"armaments-u": "ARMAMENTS",
|
||||
"armament1-name-place": "Armament I name",
|
||||
"armament2-name-place": "Armament II name",
|
||||
"armament3-name-place": "Armament III name",
|
||||
"armament4-name-place": "Armament IV name",
|
||||
"armament5-name-place": "Armament V name",
|
||||
"armament6-name-place": "Armament VI name",
|
||||
"internal-modules-u": "MÓDULOS INTERNOS",
|
||||
"ship-name-u": "Nombre",
|
||||
"ship-manufacturer-u": "Fabricante",
|
||||
"ship-ai-u": "IA",
|
||||
"ship-crew-u": "Tripulación",
|
||||
"ship-passengers-u": "Pasajeros",
|
||||
"ship-length-u": "Eslora",
|
||||
"ship-ftl-rating-u": "Factor MRL",
|
||||
"ship-signature-u": "Señal",
|
||||
"ship-thrusters-u": "Propulsión",
|
||||
"ship-hull-u": "Casco",
|
||||
"ship-armor-u": "Blindaje",
|
||||
"clear": "Limpiar",
|
||||
"hullpoints-missing": "No se han introducido puntos de casco",
|
||||
"ships-log-u": "REGISTRO DE VUELO",
|
||||
"date": "Fecha",
|
||||
"location": "Ubicación",
|
||||
"min-comp-dmg-u": "DAÑOS LEVES EN COMPONENTES",
|
||||
"effect-u": "EFECTO",
|
||||
"maj-comp-dmg-u": "DAÑOS GRAVES EN COMPONENTES",
|
||||
"upgrades-u": "MEJORAS",
|
||||
"armaments-u": "ARMAMENTO",
|
||||
"armament1-name-place": "Nombre armamento I",
|
||||
"armament2-name-place": "Nombre armamento II",
|
||||
"armament3-name-place": "Nombre armamento III",
|
||||
"armament4-name-place": "Nombre armamento IV",
|
||||
"armament5-name-place": "Nombre armamento V",
|
||||
"armament6-name-place": "Nombre armamento VI",
|
||||
"max-range-u": "Max Range",
|
||||
"range-contact-u": "Contact",
|
||||
"ranged-combat-abbr-u": "RC",
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
<td></td>
|
||||
<td data-i18n="initiative">Iniciativa</td>
|
||||
<td><input disabled="disabled" name="attr_ini" type="number" value="[@{agi}]" /></td>
|
||||
<td><button type="roll" name="roll_iniciativa" value="&{template:aquelarre} {{character_name=@{character_name}}} {{character_id=@{character_id}}} {{name=^{initiative}}} {{Resultado=[[@{agi}+1d10]]}} &{tracker}" />
|
||||
<td><button type="roll" name="roll_iniciativa" value="&{template:aquelarre} {{character_name=@{character_name}}} {{character_id=@{character_id}}} {{name=^{initiative}}} {{Resultado=[[@{agi}+1d10 &{tracker} ]]}}" />
|
||||
</td>
|
||||
<td><input style="width: 55px;" name="attr_Damage-Bonus" type="text" readonly /><span data-i18n="damage-bonus">Bonificador Daño</span>
|
||||
</td>
|
||||
@@ -934,4 +934,4 @@
|
||||
<div><span data-i18n="damage">Damage</span>: <strong></strong>{{damage}}</strong></div>
|
||||
{{/damage}}
|
||||
|
||||
</rolltemplate>
|
||||
</rolltemplate>
|
||||
|
||||
@@ -9,17 +9,17 @@
|
||||
"fathers-profession": "father's profession",
|
||||
"character-traits-pride-and-shame": "Character traits, pride and shame",
|
||||
"main-characteristics": "Main characteristics",
|
||||
"STRength": "STRength",
|
||||
"AGIlity": "AGIlity",
|
||||
"STAmina": "STAmina",
|
||||
"RESistance": "RESistance",
|
||||
"PERception": "PERception",
|
||||
"COMunication": "COMunication",
|
||||
"CULture": "CULture",
|
||||
"APPearance": "APPearance",
|
||||
"STRength": "STR",
|
||||
"AGIlity": "AGI",
|
||||
"STAmina": "DEX",
|
||||
"RESistance": "RES",
|
||||
"PERception": "PER",
|
||||
"COMunication": "COM",
|
||||
"CULture": "CUL",
|
||||
"APPearance": "APP",
|
||||
"strength-short": "STR",
|
||||
"agility-short": "AGI",
|
||||
"stamina-short": "STA",
|
||||
"stamina-short": "DEX",
|
||||
"resistance-short": "RES",
|
||||
"perception-short": "PER",
|
||||
"communication-short": "COM",
|
||||
@@ -28,9 +28,9 @@
|
||||
"secondary-characteristics": "Secondary characteristics",
|
||||
"luck": "Luck",
|
||||
"willpower": "Willpower",
|
||||
"rationality": "Rationality",
|
||||
"irrationality": "Irrationality",
|
||||
"faith-points": "Faith points",
|
||||
"rationality": "RR",
|
||||
"irrationality": "IRR",
|
||||
"faith-points": "IRR",
|
||||
"spell-points": "Spell points",
|
||||
"initiative": "Initiative",
|
||||
"damage-bonus": "Damage bonus",
|
||||
@@ -39,7 +39,7 @@
|
||||
"life-points": "Life points",
|
||||
"condition": "Condition",
|
||||
"armor": "Armor",
|
||||
"localization": "Localization",
|
||||
"localization": "Location",
|
||||
"protection": "Protection",
|
||||
"head": "Head",
|
||||
"right-arm": "Right arm",
|
||||
@@ -51,49 +51,49 @@
|
||||
"shield": "Shield",
|
||||
"abilities": "Abilities",
|
||||
"alchemy": "Alchemy",
|
||||
"artisanry": "Artisanry",
|
||||
"artisanry": "Craft",
|
||||
"astrology": "Astrology",
|
||||
"riding": "Riding",
|
||||
"singing": "Singing",
|
||||
"singing": "Sing",
|
||||
"commerce": "Commerce",
|
||||
"driving": "Driving",
|
||||
"driving": "Drive",
|
||||
"animal-knowledge": "Animal knowledge",
|
||||
"area-knowledge": "Area knowledge",
|
||||
"magical-knowledge": "Magical knowledge",
|
||||
"mineral-knowledge": "Mineral knowledge",
|
||||
"plant-knowledge": "Plant knowledge",
|
||||
"running": "Running",
|
||||
"running": "Run",
|
||||
"court": "Court",
|
||||
"tasting": "Tasting",
|
||||
"tasting": "Taste",
|
||||
"discovering": "Discovering",
|
||||
"dressing-up": "Dressing up",
|
||||
"eloquence": "Eloquence",
|
||||
"empathy": "Empathy",
|
||||
"teaching": "Teaching",
|
||||
"sleight-of-hand": "Sleight of hand",
|
||||
"listening": "Listening",
|
||||
"listening": "Listen",
|
||||
"dodging": "Dodging",
|
||||
"forcing-mechanisms": "Forcing mechanisms",
|
||||
"language": "Language",
|
||||
"gaming": "Gaming",
|
||||
"throwing": "Throwing",
|
||||
"reading-and-writing": "Reading & writing",
|
||||
"gaming": "Game",
|
||||
"throwing": "Throw",
|
||||
"reading-and-writing": "Read & write",
|
||||
"legends": "Legends",
|
||||
"commanding": "Commanding",
|
||||
"commanding": "Command",
|
||||
"medicine": "Medicine",
|
||||
"memory": "Memory",
|
||||
"music": "Music",
|
||||
"swimming": "Swimming",
|
||||
"swimming": "Swim",
|
||||
"navigation": "Navigation",
|
||||
"hiding": "Hiding",
|
||||
"tracking": "Tracking",
|
||||
"jumping": "Jumping",
|
||||
"healing": "Healing",
|
||||
"hiding": "Hide",
|
||||
"tracking": "Track",
|
||||
"jumping": "Jump",
|
||||
"healing": "Heal",
|
||||
"seduction": "Seduction",
|
||||
"stealth": "Stealth",
|
||||
"theology": "Theology",
|
||||
"torture": "Torture",
|
||||
"climbing": "Climbing",
|
||||
"climbing": "Climb",
|
||||
"bows": "Bows",
|
||||
"crossbows": "Crossbows",
|
||||
"knives": "Knives",
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<div class="row padt padb"><h3 class="col-1 center border"><span>Sheet Options</span></h3></div>
|
||||
<div class="row center padb">
|
||||
<div class="col-1-5 padr"><h4 class="center border"><span>Sheet Version
|
||||
<input type="text" class="center" name="attr_version" value="1.8.1" readonly />
|
||||
<input type="text" class="center" name="attr_version" value="1.8.4" readonly />
|
||||
<input type="hidden" name="attr_global_version" value="0.0.0" readonly />
|
||||
</span></h4></div>
|
||||
<div class="col-1-5 padr"><h4 class="center border"><span>Sheet Type
|
||||
@@ -2993,7 +2993,7 @@
|
||||
<input type="hidden" name="attr_customizations" readonly />
|
||||
<input type="hidden" name="attr_group" value=0 readonly />
|
||||
<input type="hidden" name="attr_source" value="" readonly />
|
||||
<input type="hidden" name="attr_new" value=1 readonly />
|
||||
<!--<input type="hidden" name="attr_new" value=1 readonly />-->
|
||||
|
||||
<div class="flex-1-13 flex-center">
|
||||
<input type="checkbox" class="border lock" name="attr_lock" value="1" /><span></span>
|
||||
@@ -7844,6 +7844,16 @@
|
||||
return (!str || str.length === 0);
|
||||
}
|
||||
|
||||
function isFalsey(v) {
|
||||
const testFalsey =
|
||||
parseInt(v) === 0 ? true :
|
||||
v === '' ? true :
|
||||
v === null ? true :
|
||||
v === undefined ? true :
|
||||
false;
|
||||
return testFalsey;
|
||||
}
|
||||
|
||||
function clog(debug, timer, text, data = '', title = '', type = 'event') {
|
||||
//types = 'info', 'event'
|
||||
//debug = 0:off, 1:info, 2:event, 3:performance
|
||||
@@ -7893,6 +7903,11 @@
|
||||
if (isLesserThan180) {
|
||||
upgradeTo_1_8_0(sizetemplateIDs, value, sheetdb, setObj);
|
||||
}
|
||||
const isLesserThan183 = major_global_version <= 1 && minor_global_version < 8.3 ?
|
||||
true : false;
|
||||
if (isLesserThan183) {
|
||||
upgradeTo_1_8_3(value, setObj);
|
||||
}
|
||||
setObj.global_version = sheet_version;
|
||||
}
|
||||
|
||||
@@ -7980,6 +7995,21 @@
|
||||
clog(2, {}, 'upgraded to 1.8.0');
|
||||
}
|
||||
|
||||
function upgradeTo_1_8_3(value, setObj) {
|
||||
const statValues = [
|
||||
parseInt(value.static_stat_base_body) || 0,
|
||||
parseInt(value.static_stat_base_mind) || 0,
|
||||
parseInt(value.static_stat_base_soul) || 0
|
||||
];
|
||||
clog(2, {}, 'statValues:', statValues, 'upgradeTo_1_8_3()');
|
||||
_.each(statValues, (s, i) => {
|
||||
const cost = getStatCost(2, {}, s);
|
||||
clog(2, {}, 's =', s);
|
||||
setObj[`stat_cost_${allaspects_stats_array[i]}`] = cost;
|
||||
});
|
||||
clog(2, {}, 'upgraded to 1.8.3');
|
||||
}
|
||||
|
||||
/** Build UI Functions **/
|
||||
|
||||
function getSuperStrengthLift(debug, timer, level) {
|
||||
@@ -7992,18 +8022,18 @@
|
||||
|
||||
function setTotalLift(debug, timer, attrdb, value, setObj) {
|
||||
const size = value.static_template_size_name;
|
||||
const rank = parseInt(value.static_template_size_rank);
|
||||
const rank = parseInt(value.static_template_size_rank) || 0;
|
||||
clog(debug, timer, 'size =', size, 'setTotalLift()');
|
||||
const liftMultiplier = size === 'Medium' ? 1 :
|
||||
rank < 0 ? parseFloat(value.static_template_size_lift) :
|
||||
parseInt(value.static_template_size_lift);
|
||||
parseInt(value.static_template_size_lift) || 0;
|
||||
clog(debug, timer, 'liftMultiplier =', liftMultiplier);
|
||||
const ssdb = attrdb.superstrength;
|
||||
const hasSuperStrength = ssdb === undefined ? false :
|
||||
_.chain(ssdb).pluck('level').reduce((p,c) => { return p + c; }, 0).value();
|
||||
clog(debug, timer, 'hasSuperStrength =', hasSuperStrength);
|
||||
const strValue = isNaN(parseInt(setObj.stat_total_str)) ?
|
||||
parseInt(value.stat_total_str) : parseInt(setObj.stat_total_str);
|
||||
parseInt(value.stat_total_str) || 0 : parseInt(setObj.stat_total_str);
|
||||
const lift = hasSuperStrength ? parseInt(getSuperStrengthLift(debug, timer, hasSuperStrength)) :
|
||||
strValue * 25;
|
||||
clog(debug, timer, 'lift =', lift);
|
||||
@@ -8198,7 +8228,7 @@
|
||||
'limiterassignments',
|
||||
'lock',
|
||||
'name',
|
||||
'new',
|
||||
//'new',
|
||||
'object',
|
||||
'objects',
|
||||
'options',
|
||||
@@ -8307,22 +8337,20 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
function getStatCost(debug, timer, level) {
|
||||
let cost = 0;
|
||||
for(let i = 1; i <= level; i++) {
|
||||
if(i < 13) { cost += 4 } else { cost += 8 }
|
||||
}
|
||||
clog(debug, timer, 'cost =', cost, 'getStatCost()');
|
||||
return cost;
|
||||
}
|
||||
|
||||
function setStatCost(debug, timer, eventInfo, value, setObj, sourceAttr) {
|
||||
const newValue = parseInt(eventInfo.newValue) || 0;
|
||||
const previousValue = parseInt(eventInfo.previousValue) || 0;
|
||||
const diffValue = newValue - previousValue;
|
||||
const statCost =
|
||||
newValue > 12 && previousValue > 12 ?
|
||||
diffValue * 8 :
|
||||
newValue <= 12 && previousValue <= 12 ?
|
||||
diffValue * 4 :
|
||||
newValue > 12 && previousValue <= 12 ?
|
||||
(((newValue - 12) * 8) + 48) - (previousValue * 4) :
|
||||
newValue <= 12 && previousValue > 12 ?
|
||||
(newValue * 4) - (((previousValue - 12) * 8) + 48) : 0;
|
||||
//setObj[`stat_cost_${sourceAttr}`] = statCost;
|
||||
const level = parseInt(eventInfo.newValue) || 0
|
||||
const statCost = getStatCost(debug, timer, level);
|
||||
writeValues(debug, timer, value, `stat_cost_${sourceAttr}`, statCost, setObj);
|
||||
clog(debug, timer, 'statCost =', statCost, 'setStatCost()');
|
||||
clog(debug, timer, 'sourceAttr =', sourceAttr, 'setStatCost()');
|
||||
}
|
||||
|
||||
function getDefectPointsByCategory(value, rowID, defect){
|
||||
@@ -8339,20 +8367,16 @@
|
||||
const groupid = getGroupID(value, 'attr');
|
||||
const groupType = value[`static_attrgroup_${groupid}_type`] || 'Standard';
|
||||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||||
//const isPowerFlux = /flux/i.test(groupType);
|
||||
const isPowerFlux = groupType.toLowerCase().indexOf('flux') !== -1 ? true : false;
|
||||
const fluxcost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||||
//const aggregateAttrGroupCost = getAggregateAttrGroupCost(debug, timer, attrIDs, value, sectionName, rowID, setObj);
|
||||
//const aggregateAttrGroupCost = parseInt(value[`static_attrgroup_${groupid}_groupcost`]);
|
||||
const fluxcost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]) || 0;
|
||||
const standardgroupcost = getStandardGroupCost(debug, timer, attrIDs, value, rowID, false, groupid, setObj);
|
||||
const groupIsActive = groupSourceID !== false ?
|
||||
parseInt(value[`repeating_attr_${groupSourceID}_activate`]) :
|
||||
parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0 :
|
||||
false;
|
||||
const aggregateAttrGroupCost =
|
||||
isPowerFlux && groupIsActive ?
|
||||
getPowerFluxGroupCost(debug, timer, value, groupSourceID) :
|
||||
standardgroupcost;
|
||||
|
||||
const aggregateDefectPoints = getAggregateGroupDefectPoints(debug, timer, attrdb, value);
|
||||
const groupcost = isPowerFlux ?
|
||||
fluxcost + aggregateDefectPoints :
|
||||
@@ -8393,7 +8417,7 @@
|
||||
const result =
|
||||
!isFlux ?
|
||||
false : //not flux group, keep running
|
||||
groupSourceID == rowID ?
|
||||
groupSourceID === rowID ?
|
||||
false : //flux group source, keep running
|
||||
isGroupActive ?
|
||||
false : //flux group is active, keep running
|
||||
@@ -8408,18 +8432,18 @@
|
||||
//const isPowerVariation = /variation/i.test(groupType);
|
||||
const isPowerVariation = groupType.toLowerCase().indexOf('variation') !== -1 ? true : false;
|
||||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]);
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0;
|
||||
clog(debug, timer, 'isPowerVariation =', isPowerVariation, 'setPoolCostIfGroupIsVariation()');
|
||||
if(!isPowerVariation || !groupIsActive){
|
||||
clog(debug, timer, 'groupIsActive =', groupIsActive);
|
||||
return;
|
||||
}
|
||||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]) || 0;
|
||||
const defect = value[`repeating_attr_${rowID}_attribute`];
|
||||
const isDefect = defect.indexOf(defect) !== -1 ? true : false;
|
||||
const attrcost = groupSourceID == rowID ? 0 :
|
||||
isDefect ? 0 :
|
||||
parseInt(value[`repeating_attr_${rowID}_totalcost`]);
|
||||
parseInt(value[`repeating_attr_${rowID}_totalcost`]) || 0;
|
||||
const aggregateAttrCost =
|
||||
getAggregateAttrGroupCost(debug, timer, attrIDs, value, 'attr', rowID, setObj);
|
||||
const poolcost = aggregateAttrCost - groupCost;
|
||||
@@ -8436,7 +8460,7 @@
|
||||
if(!isPowerFlux) return;
|
||||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||||
clog(debug, timer, 'groupSourceID =', groupSourceID);
|
||||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]);
|
||||
const groupCost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]) || 0;
|
||||
clog(debug, timer, 'groupCost =', groupCost);
|
||||
const fluxactive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0;
|
||||
clog(debug, timer, 'fluxactive =', fluxactive);
|
||||
@@ -8445,7 +8469,7 @@
|
||||
clog(debug, timer, 'isDefect =', isDefect);
|
||||
const attrcost = groupSourceID == rowID ? 0 :
|
||||
isDefect ? 0 :
|
||||
parseInt(value[`repeating_attr_${rowID}_totalcost`]);
|
||||
parseInt(value[`repeating_attr_${rowID}_totalcost`]) || 0;
|
||||
clog(debug, timer, 'attrcost =', attrcost);
|
||||
const isFluxActive = isPowerFlux && fluxactive ? true : false;
|
||||
clog(debug, timer, 'isFluxActive =', isFluxActive);
|
||||
@@ -8466,7 +8490,7 @@
|
||||
2 : 1;
|
||||
const result =
|
||||
Math.round((getAttrCostPerLevel(debug, timer, value, rowID) *
|
||||
parseInt(value[`repeating_attr_${rowID}_level`])) / isAltmunition);
|
||||
(parseInt(value[`repeating_attr_${rowID}_level`])) || 0) / isAltmunition);
|
||||
clog(debug, timer, `repeating_attr_${rowID}_totalcost =`, result, 'setAttrCost()');
|
||||
clog(debug, timer, `isWeapon =`, isWeapon);
|
||||
clog(debug, timer, `isAltmunition =`, isAltmunition);
|
||||
@@ -8487,7 +8511,7 @@
|
||||
const groupSourceID = isPowerFlux || isPowerVariation ?
|
||||
value[`static_attrgroup_${groupid}_source`] : false;
|
||||
const groupIsActive = groupSourceID !== false ?
|
||||
parseInt(value[`repeating_attr_${groupSourceID}_activate`]) :
|
||||
parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0 :
|
||||
false;
|
||||
const isVariationPool = isPowerVariation && groupIsActive ? true : false;
|
||||
const standardgroupcost = getStandardGroupCost(debug, timer, attrIDs, value, rowID, isLevelChange, groupid, setObj, isVariationPool);
|
||||
@@ -8499,7 +8523,7 @@
|
||||
standardgroupcost;
|
||||
const poolspent =
|
||||
isPowerFlux && groupIsActive ?
|
||||
parseInt(value[`static_attrgroup_${groupid}_spent`]) :
|
||||
parseInt(value[`static_attrgroup_${groupid}_spent`]) || 0 :
|
||||
isPowerVariation && groupIsActive ?
|
||||
getPowerVariationPoolCost(debug, timer, value, standardgroupcost, groupSourceID, groupid, setObj) :
|
||||
0;
|
||||
@@ -8518,7 +8542,7 @@
|
||||
}
|
||||
|
||||
function setAttrGroupPoolSpentByActivation(debug, timer, isActive, attrIDs, value, rowID, setObj) {
|
||||
const groupid = parseInt(value[`repeating_attr_${rowID}_group`]); //getGroupID(value, 'attr');
|
||||
const groupid = parseInt(value[`repeating_attr_${rowID}_group`]) || 0; //getGroupID(value, 'attr');
|
||||
clog(debug, timer, 'groupid =', groupid, 'setAttrGroupPoolSpentByActivation()');
|
||||
const groupType =
|
||||
value[`static_attrgroup_${groupid}_type`] || 'Standard';
|
||||
@@ -8532,7 +8556,7 @@
|
||||
true : false;
|
||||
clog(debug, timer, 'isPowerVariation =', isPowerVariation);
|
||||
if (isPowerFlux || isPowerVariation) {
|
||||
const poolmax = parseInt(value[`static_attrgroup_${groupid}_groupmax`]);
|
||||
const poolmax = parseInt(value[`static_attrgroup_${groupid}_groupmax`]) || 0;
|
||||
clog(debug, timer, 'poolmax =', poolmax);
|
||||
const poolspent =
|
||||
isPowerFlux ?
|
||||
@@ -8550,7 +8574,7 @@
|
||||
_.chain(attrIDs)
|
||||
.map(id=>{
|
||||
const attribute = value[`repeating_attr_${id}_attribute`];
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
const isGroupMember = group === groupid;
|
||||
if (!isGroupMember) return 0;
|
||||
const isDefect = attribute === 'defect' ? true : false;
|
||||
@@ -8561,8 +8585,8 @@
|
||||
2 : 1;
|
||||
const isCurrAttr = id === rowID ? true : false;
|
||||
const attrcost = isCurrAttr && isLevelChange ?
|
||||
parseInt(setObj[`repeating_attr_${id}_totalcost`]) * isAltmunition :
|
||||
parseInt(value[`repeating_attr_${id}_totalcost`]) * isAltmunition;
|
||||
(parseInt(setObj[`repeating_attr_${id}_totalcost`]) || 0) * isAltmunition :
|
||||
(parseInt(value[`repeating_attr_${id}_totalcost`]) || 0) * isAltmunition;
|
||||
return attrcost;
|
||||
})
|
||||
.reduce((memo, num)=>{ return memo + num; }, 0)
|
||||
@@ -8587,11 +8611,11 @@
|
||||
function getPowerFluxPoolSpent(debug, timer, isActive, attrIDs, value, rowID, groupid, setObj) {
|
||||
clog(debug, timer, 'groupid =', groupid, 'getPowerFluxPoolSpent()');
|
||||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]);
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0;
|
||||
const result = !groupIsActive ? 0 :
|
||||
_.chain(attrIDs)
|
||||
.map(id=>{
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
const isGroupMember = group === groupid;
|
||||
if (!isGroupMember) return 0;
|
||||
|
||||
@@ -8616,12 +8640,12 @@
|
||||
isCurrAttr ?
|
||||
isActive :
|
||||
isNaN(parseInt(setObj[`repeating_attr_${id}_activate`])) ?
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) > 0 ? true : false :
|
||||
(parseInt(value[`repeating_attr_${id}_activate`]) || 0) > 0 ? true : false :
|
||||
parseInt(setObj[`repeating_attr_${id}_activate`]) > 0 ? true : false;
|
||||
clog(debug, timer, 'isActivated =', isActivated);
|
||||
if (!isActivated) return 0;
|
||||
|
||||
const attrcost = parseInt(value[`repeating_attr_${id}_totalcost`]) * isAltmunition;
|
||||
const attrcost = (parseInt(value[`repeating_attr_${id}_totalcost`]) || 0) * isAltmunition;
|
||||
clog(debug, timer, 'attrcost =', attrcost);
|
||||
return attrcost;
|
||||
})
|
||||
@@ -8634,12 +8658,12 @@
|
||||
|
||||
function getPowerVariationPoolCost(debug, timer, isActive, attrIDs, value, rowID, groupid, setObj) {
|
||||
const groupSourceID = value[`static_attrgroup_${groupid}_source`];
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]);
|
||||
const groupIsActive = parseInt(value[`repeating_attr_${groupSourceID}_activate`]) || 0;
|
||||
clog(debug, timer, 'groupid =', groupid, 'getPowerVariationPoolCost()');
|
||||
const result = !groupIsActive ? 0 :
|
||||
_.chain(attrIDs)
|
||||
.map(id=>{
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
const isGroupMember = group === groupid;
|
||||
if (!isGroupMember) return 0;
|
||||
|
||||
@@ -8664,12 +8688,12 @@
|
||||
isCurrAttr ?
|
||||
isActive :
|
||||
isNaN(parseInt(setObj[`repeating_attr_${id}_activate`])) ?
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) > 0 ? true : false :
|
||||
(parseInt(value[`repeating_attr_${id}_activate`]) || 0) > 0 ? true : false :
|
||||
parseInt(setObj[`repeating_attr_${id}_activate`]) > 0 ? true : false;
|
||||
clog(debug, timer, 'isActive =', isActive);
|
||||
if (!isActivated) return 0;
|
||||
|
||||
const attrcost = parseInt(value[`repeating_attr_${id}_totalcost`]) * isAltmunition;
|
||||
const attrcost = (parseInt(value[`repeating_attr_${id}_totalcost`]) || 0) * isAltmunition;
|
||||
clog(debug, timer, 'attrcost =', attrcost);
|
||||
return attrcost;
|
||||
})
|
||||
@@ -8764,8 +8788,8 @@
|
||||
const id = o.source;
|
||||
const defect = o.name;
|
||||
const defectcategory = getDefectPointsByCategory(value, id, defect);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const defectpoints = parseInt(value[`repeating_attr_${id}_rank`]) * defectcategory;
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
const defectpoints = (parseInt(value[`repeating_attr_${id}_rank`]) || 0) * defectcategory;
|
||||
const appliedPoints = group == groupid ?
|
||||
defectpoints : 0;
|
||||
return appliedPoints;
|
||||
@@ -8784,7 +8808,7 @@
|
||||
const aggregatePoolCost = _.chain(ids)
|
||||
.map(id=>{
|
||||
const isGroupMember =
|
||||
parseInt(value[`repeating_${sectionName}_${id}_group`]) == groupid ?
|
||||
(parseInt(value[`repeating_${sectionName}_${id}_group`]) || 0) == groupid ?
|
||||
true : false;
|
||||
const isDefect =
|
||||
value[`repeating_attr_${id}_attribute`] === 'defect' ?
|
||||
@@ -8797,11 +8821,11 @@
|
||||
true : false;
|
||||
const isActivated = sectionName == 'skill' ? 1 :
|
||||
isNaN(parseInt(setObj[`repeating_attr_${id}_activate`])) ?
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) :
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) || 0 :
|
||||
parseInt(setObj[`repeating_attr_${id}_activate`]);
|
||||
const attrcost = id == rowID ?
|
||||
parseInt(eventInfo.newValue) * getAttrCostPerLevel(debug, timer, value, rowID) :
|
||||
parseInt(value[`repeating_${sectionName}_${id}_totalcost`]);
|
||||
parseInt(value[`repeating_${sectionName}_${id}_totalcost`]) || 0;
|
||||
const appliedCost = isGroupMember ?
|
||||
isDefect ? 0 :
|
||||
isStandardGroup ? 0 :
|
||||
@@ -8827,13 +8851,13 @@
|
||||
const attribute = value[`repeating_attr_${id}_attribute`];
|
||||
clog(debug, timer, 'attribute =', attribute);
|
||||
clog(debug, timer, 'isCurrAttr =', isCurrAttr);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
clog(debug, timer, 'group =', group);
|
||||
const activated =
|
||||
parseInt(setObj[`repeating_attr_${id}_activate`]) ||
|
||||
parseInt(value[`repeating_attr_${id}_activate`]);
|
||||
parseInt(setObj[`repeating_attr_${id}_activate`]) ||
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) || 0;
|
||||
clog(debug, timer, 'activated =', activated);
|
||||
const attrcost = parseInt(value[`repeating_attr_${id}_totalcost`]);
|
||||
const attrcost = parseInt(value[`repeating_attr_${id}_totalcost`]) || 0;
|
||||
clog(debug, timer, 'attrcost =', attrcost);
|
||||
const isGroupMember = group == groupid ? true : false;
|
||||
clog(debug, timer, 'isGroupMember =', isGroupMember);
|
||||
@@ -8868,9 +8892,9 @@
|
||||
function getAggregateSkillGroupCost(debug, timer, skillIDs, value, rowID, groupID, setObj){
|
||||
const result = _.chain(skillIDs)
|
||||
.map(id => {
|
||||
const group = parseInt(value[`repeating_skill_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_skill_${id}_group`]) || 0;
|
||||
const totalcost = isNaN(parseInt(setObj[`repeating_skill_${id}_totalcost`])) ?
|
||||
parseInt(value[`repeating_skill_${id}_totalcost`]) :
|
||||
parseInt(value[`repeating_skill_${id}_totalcost`]) || 0 :
|
||||
parseInt(setObj[`repeating_skill_${id}_totalcost`]);
|
||||
const appliedCost = group == groupID ?
|
||||
id == rowID ? 0 :
|
||||
@@ -8896,7 +8920,7 @@
|
||||
const skillcost = getSkillCost(debug, timer, value, skillname);
|
||||
clog(debug, timer, 'skillcost =', skillcost);
|
||||
const skillrank = isNaN(parseInt(setObj[`repeating_skill_${rowID}_level`])) ?
|
||||
parseInt(value[`repeating_skill_${rowID}_level`]) :
|
||||
parseInt(value[`repeating_skill_${rowID}_level`]) || 0 :
|
||||
parseInt(setObj[`repeating_skill_${rowID}_level`]);
|
||||
clog(debug, timer, 'skillrank =', skillrank);
|
||||
const totalcost = (skillcost * skillrank) + specilizationscost;
|
||||
@@ -8925,7 +8949,7 @@
|
||||
const poolSpent = aggregatePoolCost;
|
||||
|
||||
const standardcost = aggregateAttrCost + aggregateDefectPoints + attrcost;
|
||||
const variationcost = parseInt(value[`static_attrgroup_${groupid}_groupcost`]);
|
||||
const variationcost = parseInt(value[`static_attrgroup_${groupid}_groupcost`]) || 0;
|
||||
const fluxcost = parseInt(value[`repeating_attr_${groupSourceID}_totalcost`]) || 0;
|
||||
const groupCost =
|
||||
isPowerFlux && isGroupActive ? fluxcost :
|
||||
@@ -8962,7 +8986,7 @@
|
||||
const aggregateRank = _.chain(defectdb)
|
||||
.map(defect => {
|
||||
const result = defect.name == 'shortcoming' ? defect.aspect == stat ?
|
||||
parseInt(value[`repeating_attr_${defect.source}_activate`]) > 0 ?
|
||||
(parseInt(value[`repeating_attr_${defect.source}_activate`]) || 0) > 0 ?
|
||||
defect.rank : 0 : 0 : 0;
|
||||
return result;
|
||||
})
|
||||
@@ -9008,7 +9032,6 @@
|
||||
const augmented = getSumOfActiveAttrLevels(attrdb, 'augmented', stat) || 0;
|
||||
const shortcoming = getShortcomingRank(debug, timer, attrdb, value, stat);
|
||||
const result = newValue + augmented - shortcoming;
|
||||
//setObj[`stat_total_${stat}`] = result;
|
||||
writeValues(debug, timer, value, `stat_total_${stat}`, result, setObj);
|
||||
clog(debug, timer, 'result =', result, 'setAllAspectStats()');
|
||||
setStatCost(debug, timer, eventInfo, value, setObj, stat);
|
||||
@@ -9090,7 +9113,7 @@
|
||||
const result = _.chain(defectdb)
|
||||
.map(defect => {
|
||||
const isActive = isNaN(parseInt(setObj[`repeating_attr_${defect.source}_activate`])) ?
|
||||
parseInt(value[`repeating_attr_${defect.source}_activate`]) :
|
||||
parseInt(value[`repeating_attr_${defect.source}_activate`]) || 0 :
|
||||
parseInt(setObj[`repeating_attr_${defect.source}_activate`]);
|
||||
const rank = defect.name == 'shortcoming' ?
|
||||
major_stats_regex.test(defect.aspect) ?
|
||||
@@ -9227,7 +9250,7 @@
|
||||
function setAttrVisibilityByGroup(value, eventInfo, attrIDs, setObj, sectionName) {
|
||||
const section = sectionName.substring(0, sectionName.length - 5);
|
||||
_.each(attrIDs, (id) => {
|
||||
const group = parseInt(value[`repeating_${section}_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_${section}_${id}_group`]) || 0;
|
||||
const currGroup = eventInfo.newValue.substring(sectionName.length);
|
||||
const visible = group == currGroup ? 0 : 1;
|
||||
setObj[`repeating_${section}_${id}_visible`] = visible;
|
||||
@@ -9343,7 +9366,7 @@
|
||||
}
|
||||
|
||||
function removePoolCpFromGroupCost(value, source, setObj) {
|
||||
let type = parseInt(value[`${source}_type`]);
|
||||
let type = parseInt(value[`${source}_type`]) || 0;
|
||||
if (type < 3) {
|
||||
let groupcost = setObj[`${source}_groupcost`] - setObj[`${source}_poolcp`];
|
||||
setObj[`${source}_groupcost`] = groupcost;
|
||||
@@ -9379,7 +9402,7 @@
|
||||
type == 2 ?
|
||||
(newlevel - poolenhancement) * 5 :
|
||||
type == 3 ?
|
||||
parseInt(value[`${source}_groupmax`]) :
|
||||
parseInt(value[`${source}_groupmax`]) || 0 :
|
||||
isSkill ? newlevel * 10 : 0;
|
||||
setLevelElevation(eventInfo, `${source}`, `poollevelelevation`, setObj);
|
||||
const newgroupcost =
|
||||
@@ -9430,13 +9453,13 @@
|
||||
clog(debug, timer, 'currGroup =', currGroup);
|
||||
//setObj[`${source}_new`] = 0;
|
||||
//setObj[`${source}_group`] = currGroup;
|
||||
writeValues(debug, timer, value, `${source}_new`, 0, setObj);
|
||||
//writeValues(debug, timer, value, `${source}_new`, 0, setObj);
|
||||
writeValues(debug, timer, value, `${source}_group`, currGroup, setObj);
|
||||
}
|
||||
|
||||
function resetOnActive(debug, timer, eventInfo, value, match, rowID, setObj) {
|
||||
let activate = parseInt(value[`repeating_attr_${rowID}_activate`]),
|
||||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
const activate = parseInt(value[`repeating_attr_${rowID}_activate`]) || 0;
|
||||
const reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
if (activate) {
|
||||
clog(debug, timer, 'attribute is active, exiting', '', 'resetOnActive()');
|
||||
setObj[`${match}`] = reset;
|
||||
@@ -9448,8 +9471,8 @@
|
||||
}
|
||||
|
||||
function resetOnLocked(debug, timer, eventInfo, value, match, rowID, setObj) {
|
||||
const locked = parseInt(value[`repeating_attr_${rowID}_lock`]),
|
||||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
const locked = parseInt(value[`repeating_attr_${rowID}_lock`]) || 0;
|
||||
const reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
if (locked) {
|
||||
clog(debug, timer, 'attribute is locked, exiting', '', 'resetOnLocked()');
|
||||
setObj[`${match}`] = reset;
|
||||
@@ -9461,15 +9484,15 @@
|
||||
}
|
||||
|
||||
function getIsLocked(debug, timer, value, rowID, sourceAttr) {
|
||||
const result = parseInt(value[`repeating_attr_${rowID}_lock`]) ? true : false;
|
||||
const result = (parseInt(value[`repeating_attr_${rowID}_lock`]) || 0) ? true : false;
|
||||
clog(debug, timer, 'result =', result, 'getIsLocked()');
|
||||
return result;
|
||||
}
|
||||
|
||||
function resetOnLevelNotZero(debug, timer, eventInfo, value, match, rowID, setObj) {
|
||||
let level = parseInt(value[`repeating_attr_${rowID}_level`]),
|
||||
elevel = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]),
|
||||
reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
const level = parseInt(value[`repeating_attr_${rowID}_level`]) || 0;
|
||||
const elevel = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||||
const reset = (eventInfo.previousValue == eventInfo.newValue) ? 0 : eventInfo.previousValue;
|
||||
if (level || elevel) {
|
||||
clog(debug, timer, 'can‘t change Attribute when Level or Effective Level is greater than 0, exiting', '', 'resetOnLevelNotZero()');
|
||||
setObj[`${match}`] = reset;
|
||||
@@ -9597,7 +9620,7 @@
|
||||
const attribute = value[`repeating_attr_${rowID}_attribute`];
|
||||
const obj = {
|
||||
"absorption": 5,
|
||||
"alternateform": 4,
|
||||
"alternate form": 4,
|
||||
"alternate identity": 1,
|
||||
"armor": 2,
|
||||
"attack mastery": 1,
|
||||
@@ -10117,8 +10140,10 @@
|
||||
}
|
||||
|
||||
function getCharacteristicByAttr(debug, timer, value, rowID, attribute, setObj) {
|
||||
const level = parseInt(setObj[`repeating_attr_${rowID}_effectivelevel`]) || parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0,
|
||||
chardb = {
|
||||
const level =
|
||||
parseInt(setObj[`repeating_attr_${rowID}_effectivelevel`]) ||
|
||||
parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||||
const chardb = {
|
||||
"capacity": {
|
||||
0: {
|
||||
1: "200 kg",
|
||||
@@ -10937,7 +10962,7 @@
|
||||
const layer = attr == `armor` ?
|
||||
parseInt(value[`repeating_attr_${rowID}_armorlayer`]) || 1 : '';
|
||||
const type = (attr == `absorption` || attr == `conversion`) ?
|
||||
parseInt(value[`repeating_attr_${rowID}_collectiontype`]) : '';
|
||||
parseInt(value[`repeating_attr_${rowID}_collectiontype`]) || 0 : '';
|
||||
const attrstate =
|
||||
parseInt(value[`protection_${attr}${layer}${type}_state`]) || 0;
|
||||
const source =
|
||||
@@ -11138,7 +11163,7 @@
|
||||
clog(debug, timer, 'rowID =', rowID, 'getIsTargetedActive()');
|
||||
const isTargeted = getIsTargeted(debug, timer, value, rowID, setObj);
|
||||
if (!isTargeted) return '';
|
||||
const activeID = parseInt(value[`repeating_attr_${rowID}_activate`]) === 1 ?
|
||||
const activeID = (parseInt(value[`repeating_attr_${rowID}_activate`]) || 0) === 1 ?
|
||||
rowID : '';
|
||||
clog(debug, timer, 'activeID =', activeID);
|
||||
clog(debug, timer, 'activate =', value[`repeating_attr_${rowID}_activate`]);
|
||||
@@ -11452,7 +11477,7 @@
|
||||
clog(debug, timer, 'result =', result, 'getIsMelee()');
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
function getAttackMod(debug, timer, value, attrIDs, wpnclass, sourceAttr) {
|
||||
var result = 0,
|
||||
ismelee = getIsMelee(debug, timer, wpnclass);
|
||||
@@ -11467,7 +11492,7 @@
|
||||
clog(debug, timer, 'result =', result, 'getAttackMod()');
|
||||
return result;
|
||||
}
|
||||
|
||||
*/
|
||||
function getSumOfActiveAttrLevels(attrdb, attribute, focus = '') {
|
||||
var result = 0;
|
||||
_.each(attrdb[`${attribute}`], (o) => {
|
||||
@@ -11508,7 +11533,7 @@
|
||||
|
||||
function updateWeaponStates(debug, timer, attrdb, extraarmIDs, value, source, sourceAttr, setObj){
|
||||
const handsource = getHandSource(debug, timer, extraarmIDs, source);
|
||||
const state = parseInt(value[`${handsource}_state`]);
|
||||
const state = parseInt(value[`${handsource}_state`]) || 0;
|
||||
clog(debug, timer, 'state =', state, 'updateWeaponStates()');
|
||||
if(state > 0) {
|
||||
setWeaponStates(debug, timer, extraarmIDs, value, handsource, setObj);
|
||||
@@ -11761,7 +11786,7 @@
|
||||
|
||||
function setAttrEffects(debug, timer, isActive, value, attrdb, extraarmIDs, attrIDs, skillIDs, sectionName, rowID, sourceAttr, setObj) {
|
||||
const attribute = removeWhiteSpace(value[`repeating_attr_${rowID}_attribute`]);
|
||||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]);
|
||||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||||
switch (attribute) {
|
||||
case "absorption":
|
||||
case "armor":
|
||||
@@ -11910,11 +11935,11 @@
|
||||
|
||||
function setSwarmCritters(isActive, debug, timer, value, attrdb, rowID, setObj){
|
||||
const debugtext = '[setSwarmCritters()]';
|
||||
const body = parseInt(value.stat_total_body);
|
||||
const soul = parseInt(value.stat_total_soul);
|
||||
const body = parseInt(value.stat_total_body) || 0;
|
||||
const soul = parseInt(value.stat_total_soul) || 0;
|
||||
const health = (body+soul)*5;
|
||||
const wounds = parseInt(value.static_stat_total_wounds) || 0;
|
||||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]);
|
||||
const level = parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0;
|
||||
const critters = isActive ? health * level : 0;
|
||||
let swarmobj = _.find(attrdb.swarm, o => {
|
||||
if(o.source == rowID) return true;
|
||||
@@ -11983,15 +12008,15 @@
|
||||
const groupCost = _.chain(attrIDs)
|
||||
.map(id=>{
|
||||
id = id.toLowerCase();
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_attr_${id}_group`]) || 0;
|
||||
const activated = parseInt(setObj[`repeating_attr_${id}_activate`]) ||
|
||||
parseInt(value[`repeating_attr_${id}_activate`]);
|
||||
parseInt(value[`repeating_attr_${id}_activate`]) || 0;
|
||||
const attribute = value[`repeating_attr_${id}_attribute`];
|
||||
const isWeapon = attribute === 'weapon' ? true : false;
|
||||
const isAltmunition = isWeapon &&
|
||||
getCustomizationExists('altmunition', value[`repeating_attr_${id}_customizations`]) ?
|
||||
2 : 1;
|
||||
const totalcost = parseInt(value[`repeating_attr_${id}_totalcost`]) * isAltmunition;
|
||||
const totalcost = (parseInt(value[`repeating_attr_${id}_totalcost`]) || 0) * isAltmunition;
|
||||
const appliedCost = group == groupid ?
|
||||
id == rowID ? 0 :
|
||||
///flux/i.test(groupType) ? activated ? totalcost : 0 :
|
||||
@@ -12003,7 +12028,7 @@
|
||||
.value();
|
||||
const max = //isActive ? /flux/i.test(groupType) ?
|
||||
isActive && groupType.toLowerCase().indexOf('flux') !== -1 ?
|
||||
parseInt(value[`repeating_${sectionName}_${rowID}_effectivelevel`]) * 5 :
|
||||
(parseInt(value[`repeating_${sectionName}_${rowID}_effectivelevel`]) || 0) * 5 :
|
||||
///variation/i.test(groupType) ? groupCost : 0 : 0;
|
||||
isActive && groupType.toLowerCase().indexOf('variation') !== -1 ?
|
||||
groupCost : 0;
|
||||
@@ -12014,13 +12039,13 @@
|
||||
function convertAttrGroupCost(isActive, debug, timer, value, sectionName, attrIDs, rowID, setObj){
|
||||
const groupid = getGroupID(value, sectionName);
|
||||
const groupType = value[`static_${sectionName}group_${groupid}_type`];
|
||||
const dynamicGroupCost = parseInt(value[`repeating_${sectionName}_${rowID}_totalcost`]);
|
||||
const dynamicGroupCost = parseInt(value[`repeating_${sectionName}_${rowID}_totalcost`]) || 0;
|
||||
const aggregateAttrCost = _.chain(attrIDs)
|
||||
.map(id=>{
|
||||
const group = parseInt(value[`repeating_${sectionName}_${id}_group`]);
|
||||
const group = parseInt(value[`repeating_${sectionName}_${id}_group`]) || 0;
|
||||
const activated = parseInt(setObj[`repeating_${sectionName}_${id}_activate`]) ||
|
||||
parseInt(value[`repeating_${sectionName}_${id}_activate`]);
|
||||
const totalcost = parseInt(value[`repeating_${sectionName}_${id}_totalcost`]);
|
||||
parseInt(value[`repeating_${sectionName}_${id}_activate`]) || 0;
|
||||
const totalcost = parseInt(value[`repeating_${sectionName}_${id}_totalcost`]) || 0;
|
||||
const appliedCost = //group == groupid ?
|
||||
///flux/i.test(groupType) ?
|
||||
group == groupid && groupType.toLowerCase().indexOf('flux') !== -1 ?
|
||||
@@ -12074,9 +12099,9 @@
|
||||
function setSkillGroupMaxByLevelChange(isActive, timer, debug, value, rowID, setObj){
|
||||
const isSkillAttr = attribute => attribute=='skill' ? true: false;
|
||||
if(isSkillAttr(value[`repeating_attr_${rowID}_attribute`])==false) return;
|
||||
const groupid = parseInt(value[`repeating_attr_${rowID}_skillgroup`]);
|
||||
const groupid = parseInt(value[`repeating_attr_${rowID}_skillgroup`]) || 0;
|
||||
const skillpointmax = isActive ?
|
||||
parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) * 10 : 0;
|
||||
(parseInt(value[`repeating_attr_${rowID}_effectivelevel`]) || 0) * 10 : 0;
|
||||
setObj[`static_skillgroup_${groupid}_groupmax`] = skillpointmax;
|
||||
clog(debug, timer, 'groupid =', groupid, 'setSkillGroupMaxByLevelChange()');
|
||||
clog(debug, timer, 'skillpointmax =', skillpointmax);
|
||||
@@ -12282,11 +12307,11 @@
|
||||
const state =
|
||||
(type == 'acv') ?
|
||||
isNaN(parseInt(setObj.static_button_targeted_attack)) ?
|
||||
parseInt(value.static_button_targeted_attack) :
|
||||
parseInt(value.static_button_targeted_attack) || 0 :
|
||||
parseInt(setObj.static_button_targeted_attack) :
|
||||
(type == 'dcv') ?
|
||||
isNaN(parseInt(setObj.static_button_targeted_defense)) ?
|
||||
parseInt(value.static_button_targeted_defense) :
|
||||
parseInt(value.static_button_targeted_defense) || 0 :
|
||||
parseInt(setObj.static_button_targeted_defense) :
|
||||
0;
|
||||
clog(debug, timer, 'state =', state);
|
||||
@@ -12312,8 +12337,8 @@
|
||||
const cv =
|
||||
Math.round((parseInt(setObj.stat_total_body) + parseInt(setObj.stat_total_mind) +
|
||||
parseInt(setObj.stat_total_soul)) / 3) ||
|
||||
Math.round((parseInt(value.stat_total_body) + parseInt(value.stat_total_mind) +
|
||||
parseInt(value.stat_total_soul)) / 3) ||
|
||||
Math.round(((parseInt(value.stat_total_body) || 0) + (parseInt(value.stat_total_mind) || 0) +
|
||||
(parseInt(value.stat_total_soul) || 0)) / 3) ||
|
||||
0;
|
||||
clog(debug, timer, 'cv =', cv);
|
||||
const result =
|
||||
@@ -12445,8 +12470,8 @@
|
||||
|
||||
function setWeaponReload(debug, timer, attrdb, value, setObj) {
|
||||
const rowID = value.active_weapon;
|
||||
const capacity = parseInt(value[`repeating_attr_${rowID}_capacity`]);
|
||||
let ammostate = parseInt(value.weapon_ammo_reloads);
|
||||
const capacity = parseInt(value[`repeating_attr_${rowID}_capacity`]) || 0;
|
||||
let ammostate = parseInt(value.weapon_ammo_reloads) || 0;
|
||||
const reloadcapacity = ammostate > 0 ? capacity : 0;
|
||||
const reloadammo = ammostate > 0 ? ammostate -= 1 : 0;
|
||||
writeValues(debug, timer, value, 'weapon_ammo_reloads', reloadammo, setObj);
|
||||
@@ -12459,8 +12484,8 @@
|
||||
const state = setObj[`${handsource}_state`];
|
||||
const rowID = value[`${handsource}_source`];
|
||||
const type = value[`repeating_attr_${rowID}_attribute`];
|
||||
const ammostate = parseInt(value.weapon_ammo_reloads);
|
||||
const capacitystate = parseInt(value.weapon_ammo_capacity);
|
||||
const ammostate = parseInt(value.weapon_ammo_reloads) || 0;
|
||||
const capacitystate = parseInt(value.weapon_ammo_capacity) || 0;
|
||||
clog(debug, timer, 'ammostate =', ammostate, 'setWeaponAmmo()');
|
||||
clog(debug, timer, 'capacitystate =', capacitystate);
|
||||
if (rowID !== setObj.previous_weapon && _.isString(setObj.previous_weapon)) {
|
||||
@@ -12481,17 +12506,15 @@
|
||||
if (!getIsObject(customization)) return;
|
||||
const ammo = isNaN(parseInt(value[`repeating_attr_${rowID}_ammostate`])) ?
|
||||
getAmmoMax(debug, timer, customization.rank) :
|
||||
parseInt(value[`repeating_attr_${rowID}_ammostate`]);
|
||||
parseInt(value[`repeating_attr_${rowID}_ammostate`]) || 0;
|
||||
const capacity = isNaN(parseInt(value[`repeating_attr_${rowID}_capacitystate`])) ?
|
||||
0 :
|
||||
parseInt(value[`repeating_attr_${rowID}_capacitystate`]);
|
||||
parseInt(value[`repeating_attr_${rowID}_capacitystate`]) || 0;
|
||||
writeValues(debug, timer, value, 'weapon_ammo_reloads', ammo, setObj);
|
||||
writeValues(debug, timer, value, 'weapon_ammo_capacity', capacity, setObj);
|
||||
clog(debug, timer, 'ammo =', ammo, 'setWeaponAmmo()');
|
||||
clog(debug, timer, 'capacity =', capacity);
|
||||
} else if (rowID.length === 20) {//weapon unarmed, save ammo state
|
||||
//const ammostate = parseInt(value.weapon_ammo_reloads);
|
||||
//const capacitystate = parseInt(value.weapon_ammo_capacity);
|
||||
clog(debug, timer, 'weapon unarmed, save ammo state', '');
|
||||
writeValues(debug, timer, value, `repeating_attr_${rowID}_ammostate`, ammostate, setObj);
|
||||
writeValues(debug, timer, value, `repeating_attr_${rowID}_capacitystate`, capacitystate, setObj);
|
||||
@@ -13057,7 +13080,7 @@
|
||||
targetedmdState ? targetedmdLevel : 0;
|
||||
const rushattackState =
|
||||
isNaN(parseInt(setObj.static_button_targeted_rushdamage)) ?
|
||||
parseInt(value.static_button_targeted_rushdamage) :
|
||||
parseInt(value.static_button_targeted_rushdamage) || 0 :
|
||||
parseInt(setObj.static_button_targeted_rushdamage);
|
||||
const rushattackLevel =
|
||||
//getRushAttack(debug, attrdb);
|
||||
@@ -13143,7 +13166,7 @@
|
||||
break;
|
||||
case 'autofire':
|
||||
const firemode = parseInt(setObj[`static_weapon_autofire_selection`]) ||
|
||||
parseInt(value[`static_weapon_autofire_selection`]);
|
||||
parseInt(value[`static_weapon_autofire_selection`]) || 1;
|
||||
const numhits = firemode == 1 ?
|
||||
`{{hits2=1}} {{hits3=1}} {{hits4=1}} {{hits5=1}} {{hits6=1}} {{hits7=1}} {{hits8=1}} {{hits9=1}} {{hits10=1}} {{hits11=1}} {{hits12=1}}` :
|
||||
firemode == 3 ?
|
||||
@@ -13260,7 +13283,7 @@
|
||||
result = `${result} {{${customization.name}=${customization.rank}}} {{range=${range}}}`;
|
||||
break;
|
||||
case 'stoppable':
|
||||
const stopdamage = parseInt(value[`repeating_attr_${rowID}_level`]) * 10;
|
||||
const stopdamage = (parseInt(value[`repeating_attr_${rowID}_level`]) || 0) * 10;
|
||||
const timetostop = customization.rank > 3 ? '1 hour' :
|
||||
customization.rank > 2 ? '1 minute' :
|
||||
customization.rank > 1 ? '5 rounds' :
|
||||
@@ -13367,7 +13390,7 @@
|
||||
setObj.weapon_ammo = 0;
|
||||
setObj.weapon_autofire = 0;
|
||||
const state = parseInt(setObj[`repeating_attr_${rowID}_activate`]) ||
|
||||
parseInt(value[`repeating_attr_${rowID}_activate`]);
|
||||
parseInt(value[`repeating_attr_${rowID}_activate`]) || 0;
|
||||
clog(debug, timer, 'state =', state, 'disableActiveWeapon()');
|
||||
clog(debug, timer, 'activeweapon =', activeweapon);
|
||||
if (!state) return;
|
||||
@@ -13377,7 +13400,7 @@
|
||||
}
|
||||
|
||||
function setButtonState(debug, timer, value, source, rowID, sourceAttr, setObj) {
|
||||
const theme = parseInt(value.theme);
|
||||
const theme = parseInt(value.theme) || 1;
|
||||
const attribute = sourceAttr;
|
||||
const setstate = value[`${source}_${attribute}`] || 0;
|
||||
const state = setstate == 0 ? 1 : 0;
|
||||
@@ -13428,7 +13451,7 @@
|
||||
const handsStateArray =
|
||||
_.map(handsArray, hand => {
|
||||
const source = setObj[`${hand}_source`] || value[`${hand}_source`];
|
||||
const state = parseInt(setObj[`${hand}_state`]) || parseInt(value[`${hand}_state`]);
|
||||
const state = parseInt(setObj[`${hand}_state`]) || parseInt(value[`${hand}_state`]) || 0;
|
||||
const isExtraArm = extraarmIDs.indexOf(hand) !== -1 ? true : false;
|
||||
const extraArmType = parseInt(value[`${hand}_type`]) || false;
|
||||
const isWeaponMount = isExtraArm && extraArmType === 0 ? true : false;
|
||||
@@ -13467,7 +13490,7 @@
|
||||
}
|
||||
|
||||
function setDepleteRules(debug, timer, value, attrIDs, setObj) {
|
||||
const state = parseInt(value.static_rules_deplete_alt) == 1 ?
|
||||
const state = (parseInt(value.static_rules_deplete_alt) || 0) == 1 ?
|
||||
1 : 0;
|
||||
if (_.isArray(attrIDs)) {
|
||||
_.each(attrIDs, id => {
|
||||
@@ -13481,7 +13504,7 @@
|
||||
|
||||
function setDepleteResurvation(debug, timer, attrdb, value, rowID, setObj) {
|
||||
const depleteRank = getCustomizationValue(debug, timer, value, rowID, 'rank', 'deplete');
|
||||
const useDepleteAltRules = parseInt(value.static_rules_deplete_alt);
|
||||
const useDepleteAltRules = (parseInt(value.static_rules_deplete_alt) || 0);
|
||||
if (!depleteRank && !useDepleteAltRules) return;
|
||||
const totalDepete = _.chain(all_attributes_array)
|
||||
.map( a => {
|
||||
@@ -13649,7 +13672,7 @@
|
||||
const skillStatButtonState = button =>
|
||||
allaspects_stats_array.indexOf(button) !== -1 ||
|
||||
major_stats_array.indexOf(button) !== -1 ?
|
||||
parseInt(value[`${match}state`]) > 0 ?
|
||||
(parseInt(value[`${match}state`]) || 0) > 0 ?
|
||||
setObj[`${match}state`] = 0 :
|
||||
setObj[`${match}state`] = 1 :
|
||||
false;
|
||||
@@ -13663,7 +13686,7 @@
|
||||
sourceAttr;
|
||||
const setButtonState = button => button == 'stat' || button == 'type' ||
|
||||
button.length == 20 ?
|
||||
parseInt(value[`${source}state`]) > 0 ?
|
||||
(parseInt(value[`${source}state`]) || 0) > 0 ?
|
||||
setObj[`${source}state`] = 0 :
|
||||
setObj[`${source}state`] = 1 :
|
||||
false;
|
||||
@@ -13684,7 +13707,7 @@
|
||||
(specilizations.match(/,/g) || []).length;
|
||||
const skillname = value[`repeating_skill_${rowID}_name`];
|
||||
const skillcost = getSkillCost(debug, timer, value, skillname);
|
||||
const skillrank = parseInt(value[`repeating_skill_${rowID}_level`]);
|
||||
const skillrank = parseInt(value[`repeating_skill_${rowID}_level`]) || 0;
|
||||
const totalcost = (skillcost * skillrank) + specilizationscost;
|
||||
const groupid = getGroupID(value, 'skill');
|
||||
const spent = getAggregateSkillGroupCost(debug, timer, skillIDs, value, rowID, groupid, setObj);
|
||||
@@ -13694,7 +13717,7 @@
|
||||
|
||||
function setSkillGroupCost(value, sectionName, cost, setObj){
|
||||
const groupID = getGroupID(value, sectionName);
|
||||
const groupcost = parseInt(value[`static_skillgroup_${groupID}_groupcost`]);
|
||||
const groupcost = parseInt(value[`static_skillgroup_${groupID}_groupcost`]) || 0;
|
||||
setObj[`static_skillgroup_${groupID}_groupcost`] = groupcost + cost;
|
||||
}
|
||||
|
||||
@@ -13725,7 +13748,7 @@
|
||||
const stats = type.major==1 ? statmajor: statallaspect;
|
||||
const sum = _.chain(stats)
|
||||
.map(stat=>{
|
||||
return parseInt(value[`stat_total_${stat}`]);
|
||||
return parseInt(value[`stat_total_${stat}`]) || 0;
|
||||
})
|
||||
.reduce((memo,stat)=>{
|
||||
return memo + stat;
|
||||
@@ -13963,7 +13986,8 @@
|
||||
sheetdb.extraarmIDs = extraarmIDs;
|
||||
|
||||
_.each(getAttrsString, o => {
|
||||
if(value[o] !== undefined) sheetdb[o] = value[o];
|
||||
//if(value[o] !== undefined) sheetdb[o] = value[o];
|
||||
if(!isFalsey(value[o])) sheetdb[o] = value[o];
|
||||
});
|
||||
clog(3, timer, 'value:', value);
|
||||
|
||||
@@ -14110,8 +14134,10 @@
|
||||
|
||||
switch (sectionName) {
|
||||
case `attr`:
|
||||
const isNew = parseInt(value[`${source}_new`]) === 0 ? false : true;
|
||||
clog(debug, timer, `${source}_new =`, value[`${source}_new`], 'Attribute is new?');
|
||||
//const isNew = parseInt(value[`${source}_new`]) === 0 ? false : true;
|
||||
const group = parseInt(value[`${source}_group`]) || 0;
|
||||
const isNew = group !== 0 ? false : true;
|
||||
clog(debug, timer, `isNew =`, isNew, 'Attribute is new?');
|
||||
if(isNew) {
|
||||
setGroupMembership(debug, timer, value, setObj, source, sectionName);
|
||||
attrIDs.indexOf(rowID) === -1 ? attrIDs.push(rowID) : false;
|
||||
@@ -14119,13 +14145,6 @@
|
||||
}
|
||||
if(getIsSheetworker(eventInfo.sourceType)) return;
|
||||
switch (sourceAttr) {
|
||||
/*
|
||||
case `options`:
|
||||
if (resetOnLocked(debug, timer, eventInfo, value, match, rowID, setObj)) return;
|
||||
const state = parseInt(value[`${source}_${sourceAttr}`]) > 0 ? 0: 1;
|
||||
setObj[`${source}_${sourceAttr}`] = state;
|
||||
break;
|
||||
*/
|
||||
case `attribute`:
|
||||
if (resetOnLocked(debug, timer, eventInfo, value, match, rowID, setObj)) return;
|
||||
if (resetOnLevelNotZero(debug, timer, eventInfo, value, match, rowID, setObj)) return;
|
||||
@@ -14154,7 +14173,7 @@
|
||||
if (getFluxGroupIsNotActive(debug, timer, value, rowID)) return;
|
||||
const isActive = setButtonState(debug, timer, value, source, rowID, sourceAttr, setObj);
|
||||
const handsource = getHandSource(debug, timer, extraarmIDs, value[`repeating_attr_${rowID}_source`]);
|
||||
const handstate = handsource !== false ? parseInt(value[`${handsource}_state`]) : false;
|
||||
const handstate = handsource !== false ? parseInt(value[`${handsource}_state`]) || 0 : false;
|
||||
setAttrEffects(debug, timer, isActive, value, attrdb, extraarmIDs, attrIDs, skillIDs, sectionName, rowID, sourceAttr, setObj);
|
||||
//setPoolCostIfGroupIsFlux(debug, timer, attrIDs, value, rowID, setObj);
|
||||
setAttrGroupPoolSpentByActivation(debug, timer, isActive, attrIDs, value, rowID, setObj);
|
||||
@@ -14222,8 +14241,7 @@
|
||||
break;
|
||||
case 'statselection':
|
||||
case 'option':
|
||||
const state = parseInt(value[`${source}_${sourceAttr}`]) > 0 ? 0: 1;
|
||||
//setObj[`${source}_${sourceAttr}`] = state;
|
||||
const state = (parseInt(value[`${source}_${sourceAttr}`]) || 0) > 0 ? 0 : 1;
|
||||
writeValues(debug, timer, value, `${source}_${sourceAttr}`, state, setObj);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -624,7 +624,7 @@
|
||||
"playbook_ability_a_void_in_the_echo_description": "You are invisible to spirits and may not be harmed by them. Take 2 stress to cause living things to avert their gaze and fail to observe you for a few moments.",
|
||||
"playbook_ability_alchemist": "Alchemist",
|
||||
"playbook_ability_alchemist_description": "When you invent or craft a creation with alchemical features, take +1 result level to your roll. You begin with one special formula already known.",
|
||||
"playbook_ability_ambitious": "Ambitious",
|
||||
"playbook_ability_ambitious": "Ambiciós",
|
||||
"playbook_ability_ambitious_description": "You gain an additional xp trigger: You defended your turf or tried to expand it. If your crew followed your lead, also mark crew xp.",
|
||||
"playbook_ability_ambush": "Ambush",
|
||||
"playbook_ability_ambush_description": "When you attack from hiding or spring a trap, you get +1d.",
|
||||
@@ -666,7 +666,7 @@
|
||||
"playbook_ability_expertise_description": "Choose one of your action ratings. When you lead a group action using that action, you can suffer only 1 stress at most regardless of the number of failed rolls.",
|
||||
"playbook_ability_eye_for_weakness": "Eye for Weakness",
|
||||
"playbook_ability_eye_for_weakness_description": "When you gather information about someone’s vulnerabilities, you get +1 effect. If you use this information to help plan a score, you also get +1d to the engagement roll for that operation.",
|
||||
"playbook_ability_focused": "Focused",
|
||||
"playbook_ability_focused": "Centrat",
|
||||
"playbook_ability_focused_description": "You may expend your special armor to resist a consequence of surprise or mental harm (fear, confusion, losing track of someone) or to push yourself for ranged combat or tracking.",
|
||||
"playbook_ability_foresight": "Foresight",
|
||||
"playbook_ability_foresight_description": "Two times per score you can assist a teammate without paying stress. Tell us how you prepared for this.",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"add_contacts": "Añadir contactos",
|
||||
"add_friends": "Añadir amigos",
|
||||
"add_items": "Añadir objetos",
|
||||
"add_type": "Add Type: 2",
|
||||
"add_type": "Añadir tipo: 2",
|
||||
"add_upgrades": "Añadir mejoras",
|
||||
"adepts": "Adeptos",
|
||||
"alcahest": "Alkahest",
|
||||
|
||||
|
After Width: | Height: | Size: 428 KiB |
@@ -0,0 +1,97 @@
|
||||
include src/pug/components/components
|
||||
include src/pug/abstracts/variables
|
||||
include src/pug/abstracts/hiddenvariables
|
||||
|
||||
.compendium-drop-target.monsters
|
||||
input.npc_toggle(name="attr_npc", type="hidden", value="0")
|
||||
input.npcspellcastingflag(name="attr_npcspellcastingflag", type="hidden")
|
||||
input.toggleflag(name="attr_rtype", type="hidden")
|
||||
input.toggleflag(name="attr_confirm", type="hidden")
|
||||
input.toggleflag(name="attr_cancel", type="hidden")
|
||||
|
||||
each val in ['Category', 'Name', 'data', 'Content']
|
||||
input(accept=val, name=`attr_drop_${val.toLowerCase()}`, type="hidden")
|
||||
|
||||
|
||||
// Drag and Drop Warning
|
||||
input.monster_confirm_flag(name='attr_monster_confirm_flag' type='hidden')
|
||||
.dialog.dialog--confirmnpc
|
||||
.dialog__wrapper
|
||||
.dialog__explain
|
||||
span(data-i18n="replace-sheet-with")
|
||||
span.dialog__newname(name="attr_drop_name")
|
||||
.dialog__buttonrow
|
||||
button.dialog__button(
|
||||
data-i18n="Confirm",
|
||||
name="act_confirm_npc",
|
||||
type="action"
|
||||
)
|
||||
button.dialog__button(
|
||||
data-i18n="Reject",
|
||||
name="act_reject_npc",
|
||||
type="action"
|
||||
)
|
||||
|
||||
.dialog.dialog--warning
|
||||
.dialog__wrapper
|
||||
.dialog__explain(data-i18n="accept-compendium-drop")
|
||||
|
||||
//- NPC
|
||||
.container.npc
|
||||
include src/pug/npc.pug
|
||||
|
||||
//- PC
|
||||
.container.pc
|
||||
include src/pug/layouts/headers/header
|
||||
|
||||
include src/pug/layouts/utility/navigation
|
||||
|
||||
input.page__switch(name="attr_tab", type="hidden", value="core")
|
||||
|
||||
.page.core
|
||||
include src/pug/layouts/tabs/core
|
||||
|
||||
.page.spellmoves
|
||||
include src/pug/layouts/tabs/spells
|
||||
|
||||
.page.bio
|
||||
include src/pug/layouts/tabs/bio
|
||||
|
||||
.page.settings
|
||||
include src/pug/layouts/tabs/settings
|
||||
|
||||
//- .compendium_warning
|
||||
//- span(data-i18n="accepting-drop-u") ACCEPTING DROP FROM COMPENDIUM
|
||||
|
||||
//- include src/pug/layouts/utility/dialogs
|
||||
|
||||
//- ROLL TEMPLATES
|
||||
.rolltemplates
|
||||
include src/html/attack.html
|
||||
include src/html/attackdamage.html
|
||||
include src/html/damage.html
|
||||
include src/html/description.html
|
||||
include src/html/dmgaction.html
|
||||
include src/html/npc.html
|
||||
include src/html/npcaction.html
|
||||
include src/html/npcattack.html
|
||||
include src/html/npcdmg.html
|
||||
include src/html/npcfullatk.html
|
||||
include src/html/simple.html
|
||||
include src/html/simple3d.html
|
||||
include src/html/skill.html
|
||||
include src/html/spell.html
|
||||
include src/html/spelloutput.html
|
||||
include src/html/traits.html
|
||||
|
||||
//- SHEET WORKERS
|
||||
script(type="text/worker")
|
||||
include src/js/classes/SheetUtils/SheetUtils.js
|
||||
include src/js/classes/FlagManager/FlagManager.js
|
||||
|
||||
include src/js/helperFunctions.js
|
||||
include src/js/sheetworkers.js
|
||||
|
||||
include src/js/classes/DropClasses/DropClasses.js
|
||||
include src/js/dragndrop/dropFunctions.js
|
||||
include src/js/dragndrop/DragAndDrop.js
|
||||
@@ -0,0 +1,183 @@
|
||||
@import url("https://fonts.googleapis.com/css?family=Playfair+Display:400|Playfair+Display+SC:400|Libre+Baskerville:400:700|Dancing+Script:400|Quintessential:400&display=swap");
|
||||
|
||||
$externalImgsPath: "https://app.roll20.net/images/dndstyling/";
|
||||
$imgParameters: "";
|
||||
|
||||
/* SANITIZATION CHANGE FIXES
|
||||
============================= */
|
||||
@import "src/scss/external/sanitization-fixes";
|
||||
|
||||
/* GENERIC STYLES
|
||||
============================= */
|
||||
@import "src/scss/generic";
|
||||
|
||||
/* PLACEHOLDER STYLES
|
||||
============================= */
|
||||
@import "src/scss/abstracts/placeholders";
|
||||
|
||||
/* ROLLTEMPLATES STYLES
|
||||
============================= */
|
||||
@import "src/scss/rolltemplate";
|
||||
|
||||
/* Refactor
|
||||
============================= */
|
||||
|
||||
.container {
|
||||
@import "src/scss/generics/gridsystem";
|
||||
@import "src/scss/generics/options";
|
||||
@import "src/scss/generics/hiddenflag";
|
||||
@import "src/scss/generics/RollButton";
|
||||
@import "src/scss/generics/StandardInput";
|
||||
|
||||
&.pc {
|
||||
@import "src/scss/pc/Header";
|
||||
@import "src/scss/pc/Navigation";
|
||||
|
||||
@import "src/scss/pc/AbilityScore";
|
||||
@import "src/scss/pc/Coins";
|
||||
@import "src/scss/pc/DeathSaves";
|
||||
@import "src/scss/pc/Features";
|
||||
@import "src/scss/pc/InsProf";
|
||||
@import "src/scss/pc/Moves";
|
||||
@import "src/scss/pc/SavingThrows";
|
||||
@import "src/scss/pc/Shields";
|
||||
@import "src/scss/pc/Skills";
|
||||
@import "src/scss/pc/Spells";
|
||||
@import "src/scss/pc/SpellStats";
|
||||
@import "src/scss/pc/ToolsProficiencies";
|
||||
@import "src/scss/pc/OtherProficiencies";
|
||||
@import "src/scss/pc/Vitals";
|
||||
@import "src/scss/pc/AttacksSpellcasting";
|
||||
@import "src/scss/pc/Bio";
|
||||
@import "src/scss/pc/Exhaustion";
|
||||
@import "src/scss/pc/Equipment";
|
||||
}
|
||||
|
||||
&.npc {
|
||||
@import "src/scss/npc/npc";
|
||||
|
||||
* {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
max-width: 800px;
|
||||
}
|
||||
|
||||
button[type="roll"][type="roll"] {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
line-height: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
.charsheet {
|
||||
|
||||
input[type="number"],
|
||||
input[type="text"],
|
||||
textarea,
|
||||
select {
|
||||
width: 100%;
|
||||
color: #c00;
|
||||
}
|
||||
|
||||
input[type="number"] {
|
||||
font-family: "Dancing Script", serif;
|
||||
|
||||
-moz-appearance: textfield;
|
||||
&::-webkit-outer-spin-button,
|
||||
&::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
}
|
||||
|
||||
input[type="text"] {
|
||||
font-family: "Quintessential", serif;
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.pc,
|
||||
.npc {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.npc_toggle[value="0"] ~ .pc,
|
||||
.npc_toggle[value="1"] ~ .npc {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.page.core,
|
||||
.page.bio,
|
||||
.page.spellmoves,
|
||||
.page.settings {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.page__switch[value="core"] ~ .page.core,
|
||||
.page__switch[value="bio"] ~ .page.bio,
|
||||
.page__switch[value="spells"] ~ .page.spellmoves,
|
||||
.page__switch[value="settings"] ~ .page.settings {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.charsheet .repcontrol {
|
||||
min-height: 2rem;
|
||||
margin-top: 0.5rem;
|
||||
padding: 0 1rem;
|
||||
|
||||
button {
|
||||
min-height: 2rem;
|
||||
max-height: 2rem;
|
||||
min-width: 2rem;
|
||||
max-width: 2rem;
|
||||
padding: 0;
|
||||
|
||||
border: 1px solid rgba(black, 0.5);
|
||||
border-radius: 0.3rem;
|
||||
|
||||
background: none;
|
||||
|
||||
font-size: 0;
|
||||
|
||||
&.repcontrol_add:before,
|
||||
&.repcontrol_edit:before {
|
||||
display: block;
|
||||
|
||||
font-family: Pictos;
|
||||
font-size: 10pt;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&.repcontrol_add:before {
|
||||
padding-top: 0.1rem;
|
||||
content: "&";
|
||||
}
|
||||
|
||||
&.repcontrol_edit:before {
|
||||
padding-top: 0.2rem;
|
||||
content: "(";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.charsheet .pictos {
|
||||
font-family: Pictos;
|
||||
}
|
||||
|
||||
.charsheet * {
|
||||
font-family: "Quintessential", "Baskerville", serif;
|
||||
font-size: 1.4rem;
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
.charsheet button[type="roll"]:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 119 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 488 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 307 KiB |
|
After Width: | Height: | Size: 293 KiB |
|
After Width: | Height: | Size: 281 KiB |
|
After Width: | Height: | Size: 270 KiB |
|
After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 245 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 516 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "brancalonia",
|
||||
"version": "1.0.0",
|
||||
"description": "A character sheet for the Brancalonia RPG for use on Roll20",
|
||||
"main": " ",
|
||||
"scripts": {
|
||||
"start": "run-p compile:*",
|
||||
"compile:sass": "npx sass Brancalonia.scss ./Brancalonia.css --watch --no-source-map",
|
||||
"compile:pug": "npx pug Brancalonia.pug -o ./ -w -P"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@prettier/plugin-pug": "^1.13.5",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^2.2.1",
|
||||
"pug": "^3.0.2",
|
||||
"pug-cli": "^1.0.0-alpha6",
|
||||
"sass": "^1.32.8"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
{
|
||||
"html": "Brancalonia.html",
|
||||
"css": "Brancalonia.css",
|
||||
"authors": "Acheron Books, Nic Bradley",
|
||||
"roll20userid": "",
|
||||
"preview": "Brancalonia.png",
|
||||
"compendium": "dnd5e",
|
||||
"instructions": "Compatible for use with Acheron Books' Brancalonia. \n\n* Drag and Drop compatible with the [Roll20 Compendium](https://app.roll20.net/compendium/dnd5e/BookIndex). Instantly import spells, items, and NPCs into your game.\n* Auto calculations and workers help remove bookkeeping and speed up your game.\n* Built in roll buttons and templates make using your abilities easy and the results pop.\n* Customizable skills, attacks, and spells.\n* Settings for advantage, GM whispered rolls, easy damage output, simple inventory and much more.\n* NPC Sheet with traits and rollable actions.",
|
||||
"useroptions": [
|
||||
{
|
||||
"attribute": "npc",
|
||||
"displayname": "NPC",
|
||||
"displaytranslationkey": "npc-u",
|
||||
"type": "checkbox",
|
||||
"value": "1",
|
||||
"description": "The NPC option sets new characters to default to the NPC card style sheet. Useful if the player characters have already been created and all new character sheets added to the game will likely represent none player characters.",
|
||||
"descriptiontranslationkey": "npc-info"
|
||||
},
|
||||
{
|
||||
"attribute": "rtype",
|
||||
"displayname": "Roll Queries",
|
||||
"displaytranslationkey": "roll-queries:-u",
|
||||
"type": "select",
|
||||
"options": [
|
||||
"Always Roll Advantage|{{always=1}} {{r2=[[1d20",
|
||||
"Advantage Toggle|@{advantagetoggle}",
|
||||
"Query Advantage|{{query=1}} ?{Advantage?|Normal Roll,{{normal=1}} {{r2=[[0d20|Advantage,{{advantage=1}} {{r2=[[1d20|Disadvantage,{{disadvantage=1}} {{r2=[[1d20}",
|
||||
"Never Roll Advantage|{{normal=1}} {{r2=[[0d20"
|
||||
],
|
||||
"optiontranslationkeys": [
|
||||
"always-roll-adv",
|
||||
"toggle-roll-adv",
|
||||
"query-roll-adv",
|
||||
"never-roll-adv"
|
||||
],
|
||||
"default": "{{always=1}} {{r2=[[1d20",
|
||||
"description": "D20 Rolls output according to this option. Always Roll Advantage is the default setting and will roll two D20 on every roll in case of advantage. The expectation is that if there is no advantage or disadvantage you use the left most result. The Advantage Toggle option adds three new buttons to the top of the sheet so that you can toggle advantage on a case by case basis. Query Advantage gives you a prompt every roll asking if the roll has advantage. Never Roll Advantage always rolls a single D20 on any given roll, expecting the player to roll a second time in case of advantage or disadvantage.",
|
||||
"descriptiontranslationkey": "roll-queries-info"
|
||||
},
|
||||
{
|
||||
"attribute": "wtype",
|
||||
"displayname": "Whisper Rolls to GM",
|
||||
"displaytranslationkey": "whisp-rolls-gm:-u",
|
||||
"type": "select",
|
||||
"options": [
|
||||
"Never Whisper Rolls|",
|
||||
"Whisper Toggle|@{whispertoggle}",
|
||||
"Query Whisper|?{Whisper?|Public Roll,|Whisper Roll,/w gm }",
|
||||
"Always Whisper Rolls|/w gm "
|
||||
],
|
||||
"optiontranslationkeys": [
|
||||
"never-whisper-roll",
|
||||
"toggle-roll-whisper",
|
||||
"query-whisper-roll",
|
||||
"always-whisper-roll"
|
||||
],
|
||||
"default": "",
|
||||
"description": "All sheet rolls are sent to all players in chat by default. Whisper Toggle gives a set of buttons to quick select your preference on the fly. Query Whisper option gives you a prompt with each roll of whether or not the roll should be sent privately only to yourself and the GM. Always Whisper Rolls will send all rolls only to yourself and the GM.",
|
||||
"descriptiontranslationkey": "whisp-rolls-gm-info"
|
||||
},
|
||||
{
|
||||
"attribute": "dtype",
|
||||
"displayname": "Auto Damage Roll",
|
||||
"displaytranslationkey": "auto-dmg-roll:-u",
|
||||
"type": "select",
|
||||
"options": [
|
||||
"Don't Auto Roll Damage|pick",
|
||||
"Auto Roll Damage & Crit|full"
|
||||
],
|
||||
"optiontranslationkeys": [
|
||||
"never-roll-dmg",
|
||||
"always-roll-dmg"
|
||||
],
|
||||
"default": "pick",
|
||||
"description": "By default, attack damage rolls are not rolled until the hit is confirmed. Damage is rolled from the chat roll template by clicking on the name of the attack in the right hand bar, which then displays the damage. The default method is compatible with 3D dice. Optionally, you can choose to have the Auto Roll Damage & Crit option which will roll damage and critical hit dice at the same time of the attack, presenting all possible outcomes at the time of the attack.",
|
||||
"descriptiontranslationkey": "auto-dmg-roll-info"
|
||||
},
|
||||
{
|
||||
"attribute": "init_tiebreaker",
|
||||
"displayname": "ADD DEX TIEBREAKER TO INITIATIVE",
|
||||
"displaytranslationkey": "add-dex-tiebreaker-u",
|
||||
"type": "checkbox",
|
||||
"value": "@{dexterity}/100",
|
||||
"description": "Adds the character's dexterity score as a decimal to the end of the initiative bonus for purposes of breaking ties.",
|
||||
"descriptiontranslationkey": "init-tiebreaker-info"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar1_v",
|
||||
"displayname": "BAR 1 VALUE:",
|
||||
"displaytranslationkey": "cd-bar1-value:-u",
|
||||
"type": "text",
|
||||
"default": "hp_max",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 1's value to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar1-value-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar1_m",
|
||||
"displayname": "BAR 1 MAX:",
|
||||
"displaytranslationkey": "cd-bar1-max:-u",
|
||||
"type": "text",
|
||||
"default": "hp_max",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 1's max to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar1-max-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar1_l",
|
||||
"displayname": "BAR 1 LINK:",
|
||||
"displaytranslationkey": "cd-bar1-link:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, link the Bar 1's value to this attribute. If set this will override all other bar settings.",
|
||||
"descriptiontranslationkey": "cd-bar1-link-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar2_v",
|
||||
"displayname": "BAR 2 VALUE:",
|
||||
"displaytranslationkey": "cd-bar2-value:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 2's value to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar2-value-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar2_m",
|
||||
"displayname": "BAR 2 MAX:",
|
||||
"displaytranslationkey": "cd-bar2-max:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 2's max to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar2-max-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar2_l",
|
||||
"displayname": "BAR 2 LINK:",
|
||||
"displaytranslationkey": "cd-bar2-link:-u",
|
||||
"type": "text",
|
||||
"default": "npc_ac",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, link the Bar 2's value to this attribute. If set this will override all other bar settings.",
|
||||
"descriptiontranslationkey": "cd-bar2-link-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar3_v",
|
||||
"displayname": "BAR 3 VALUE:",
|
||||
"displaytranslationkey": "cd-bar3-value:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 3's value to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar3-value-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar3_m",
|
||||
"displayname": "BAR 3 MAX:",
|
||||
"displaytranslationkey": "cd-bar3-max:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, set the Bar 3's max to this attribute.",
|
||||
"descriptiontranslationkey": "cd-bar3-max-desc:-u"
|
||||
},
|
||||
{
|
||||
"attribute": "cd_bar3_l",
|
||||
"displayname": "BAR 3 LINK:",
|
||||
"displaytranslationkey": "cd-bar3-link:-u",
|
||||
"type": "text",
|
||||
"description": "On Default Tokens created by doing a Compendium drop onto the virtual table top, link the Bar 3's value to this attribute. If set this will override all other bar settings.",
|
||||
"descriptiontranslationkey": "cd-bar3-link-desc:-u"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<rolltemplate class="sheet-rolltemplate-atk">
|
||||
<div class="container">
|
||||
<div class="result">
|
||||
{{#always}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/always}}
|
||||
{{#normal}}
|
||||
<div class="solo">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/normal}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{#range}}
|
||||
<div class="sublabel">
|
||||
<span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
<div class="label">
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}
|
||||
{{#^rollWasCrit() r1}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span>{{rnamec}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollLess() r1 r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollLess() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}} <span>({{mod}})</span></span>{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
{{#spelldesc_link}}
|
||||
<div class="spelldesc-link">
|
||||
<span>{{spelldesc_link}}</span>
|
||||
</div>
|
||||
{{/spelldesc_link}}
|
||||
</div>
|
||||
{{#desc}}
|
||||
<div class="desc info">
|
||||
<span>
|
||||
<span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
|
||||
</span>
|
||||
</div>
|
||||
{{/desc}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,373 @@
|
||||
<rolltemplate class="sheet-rolltemplate-atkdmg">
|
||||
{{#attack}}
|
||||
<div class="container atk">
|
||||
<div class="result">
|
||||
{{#always}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/always}}
|
||||
{{#normal}}
|
||||
<div class="solo">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/normal}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#globalattack}} + {{globalattack}}{{/globalattack}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{#range}}
|
||||
<div class="sublabel">
|
||||
<span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
<div class="label">
|
||||
<span>{{rname}}{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}{{#attack}} <span>({{mod}})</span>{{/attack}}</span>
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
{{#spelldesc_link}}
|
||||
<div class="spelldesc-link">
|
||||
<span>{{spelldesc_link}}</span>
|
||||
</div>
|
||||
{{/spelldesc_link}}
|
||||
</div>
|
||||
{{/attack}}
|
||||
{{#save}}
|
||||
{{#attack}}
|
||||
<div class="container save">
|
||||
{{/attack}}
|
||||
{{^attack}}
|
||||
<div class="container atk save">
|
||||
{{/attack}}
|
||||
<div class="savedc">
|
||||
<span class="rolltemplate-inline" data-i18n="difficulty-class-abv">DC</span><span class="rolltemplate-inline">{{savedc}}</span>
|
||||
</div>
|
||||
{{#savedesc}}
|
||||
<div class="sublabel">
|
||||
<span>{{savedesc}}</span>
|
||||
</div>
|
||||
{{/savedesc}}
|
||||
<div class="label">
|
||||
<span class="rolltemplate-inline">{{saveattr}}</span> <span class="rolltemplate-inline" data-i18n="save">Save</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/save}}
|
||||
{{#desc}}
|
||||
<div class="desc info">
|
||||
<span>
|
||||
<span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
|
||||
</span>
|
||||
</div>
|
||||
{{/desc}}
|
||||
{{#globaldamage}}
|
||||
{{#^rollTotal() globaldamage 0}}
|
||||
<div class="desc">
|
||||
<span>
|
||||
{{globaldamage}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/^rollTotal() globaldamage 0}}
|
||||
{{#rollTotal() globaldamage 0}}
|
||||
{{#^rollTotal() globaldamagecrit 0}}
|
||||
{{#rollWasCrit() r1}}
|
||||
<div class="desc">
|
||||
<span>
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/rollWasCrit() r1}}
|
||||
{{#rollWasCrit() r2}}
|
||||
{{#^rollWasCrit() r1}}
|
||||
<div class="desc">
|
||||
<span>
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{globaldamagecrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{globaldamagecrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/^rollWasCrit() r1}}
|
||||
{{/rollWasCrit() r2}}
|
||||
{{/^rollTotal() globaldamagecrit 0}}
|
||||
{{/rollTotal() globaldamage 0}}
|
||||
{{/globaldamage}}
|
||||
{{#hldmg}}
|
||||
{{#^rollTotal() hldmg 0}}
|
||||
<div class="hldmg">
|
||||
<span>
|
||||
{{hldmg}}
|
||||
<!-- {{#hldmgcrit}} + {{hldmgcrit}}{{/hldmgcrit}} -->
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="plus"> + </span>{{hldmgcrit}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<div class="label">
|
||||
<span data-i18n="higher-lvl-cast">Higher Level Cast</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/^rollTotal() hldmg 0}}
|
||||
{{/hldmg}}
|
||||
{{#damage}}
|
||||
<div class="container damagetemplate">
|
||||
<div class="result">
|
||||
{{#dmg1flag}}
|
||||
{{^dmg2flag}}
|
||||
<div class="solo">
|
||||
<span class="damage">
|
||||
{{dmg1}}
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{dmg1type}}</span>
|
||||
</div>
|
||||
{{/dmg2flag}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{^dmg1flag}}
|
||||
<div class="solo">
|
||||
<span class="damage">
|
||||
{{dmg2}}
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{dmg2type}}</span>
|
||||
</div>
|
||||
{{/dmg1flag}}
|
||||
{{/dmg2flag}}
|
||||
{{#dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
<div class="adv">
|
||||
<span class="damage">
|
||||
{{dmg1}}
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{dmg1type}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>
|
||||
{{dmg2}}
|
||||
{{#attack}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}+ {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}+ {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{/attack}}
|
||||
</span>
|
||||
<span class="damagetype">{{dmg2type}}</span>
|
||||
</div>
|
||||
{{/dmg2flag}}
|
||||
{{/dmg1flag}}
|
||||
</div>
|
||||
{{^attack}}
|
||||
{{#range}}
|
||||
<div class="sublabel">
|
||||
<span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
<div class="label">
|
||||
<span>{{rname}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
{{#spelldesc_link}}
|
||||
<div class="spelldesc-link">
|
||||
<span>{{spelldesc_link}}</span>
|
||||
</div>
|
||||
{{/spelldesc_link}}
|
||||
{{/attack}}
|
||||
</div>
|
||||
{{/damage}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,127 @@
|
||||
<rolltemplate class="sheet-rolltemplate-dmg">
|
||||
{{#save}}
|
||||
{{#attack}}
|
||||
<div class="save">
|
||||
{{/attack}}
|
||||
{{^attack}}
|
||||
<div class="atk save">
|
||||
{{/attack}}
|
||||
<div class="savedc">
|
||||
<span class="rolltemplate-inline" data-i18n="difficulty-class-abv">DC</span>
|
||||
<span class="rolltemplate-inline">{{savedc}}</span>
|
||||
</div>
|
||||
{{#savedesc}}
|
||||
<div class="sublabel">
|
||||
<span>{{savedesc}}</span>
|
||||
</div>
|
||||
{{/savedesc}}
|
||||
<div class="label">
|
||||
<span class="rolltemplate-inline">{{saveattr}}</span>
|
||||
<span class="rolltemplate-inline" data-i18n="save">Save</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/save}}
|
||||
{{^attack}}
|
||||
{{#desc}}
|
||||
<div class="desc info">
|
||||
<span>
|
||||
<span class="top"></span><span class="middle">{{desc}}</span><span class="bottom"></span>
|
||||
</span>
|
||||
</div>
|
||||
{{/desc}}
|
||||
{{/attack}}
|
||||
{{#globaldamage}}
|
||||
{{#^rollTotal() globaldamage 0}}
|
||||
<div class="desc">
|
||||
<span>{{globaldamage}}{{#globaldamagecrit}}{{#^rollTotal() globaldamagecrit 0}}<span class="plus"> + </span>{{globaldamagecrit}}{{/^rollTotal() globaldamagecrit 0}}{{/globaldamagecrit}}</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/^rollTotal() globaldamage 0}}
|
||||
{{/globaldamage}}
|
||||
{{#globaldamage}}
|
||||
{{#rollTotal() globaldamage 0}}
|
||||
{{#globaldamagecrit}}
|
||||
{{#^rollTotal() globaldamagecrit 0}}
|
||||
<div class="desc">
|
||||
<span>{{globaldamagecrit}}</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/^rollTotal() globaldamagecrit 0}}
|
||||
{{/globaldamagecrit}}
|
||||
{{/rollTotal() globaldamage 0}}
|
||||
{{/globaldamage}}
|
||||
{{^globaldamage}}
|
||||
{{#globaldamagecrit}}
|
||||
{{#^rollTotal() globaldamagecrit 0}}
|
||||
<div class="desc">
|
||||
<span>{{globaldamagecrit}}</span>
|
||||
<span class="damagetype">{{globaldamagetype}}</span>
|
||||
</div>
|
||||
{{/^rollTotal() globaldamagecrit 0}}
|
||||
{{/globaldamagecrit}}
|
||||
{{/globaldamage}}
|
||||
{{#hldmg}}
|
||||
{{#^rollTotal() hldmg 0}}
|
||||
<div class="desc">
|
||||
<span>{{hldmg}}{{#hldmgcrit}}<span class="plus"> + </span>{{hldmgcrit}}{{/hldmgcrit}}</span>
|
||||
<span class="damagetype">{{dmg1type}}</span>
|
||||
<div class="label">
|
||||
<span data-i18n="higher-lvl-cast">Higher Level Cast</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/^rollTotal() hldmg 0}}
|
||||
{{/hldmg}}
|
||||
<div class="container damagetemplate">
|
||||
<div class="result">
|
||||
{{#dmg1flag}}
|
||||
{{^dmg2flag}}
|
||||
<div class="solo">
|
||||
<span class="damage">{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}</span>
|
||||
<span class="damagetype">{{dmg1type}}</span>
|
||||
</div>
|
||||
{{/dmg2flag}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{^dmg1flag}}
|
||||
<div class="solo">
|
||||
<span class="damage">{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}</span>
|
||||
<span class="damagetype">{{dmg2type}}</span>
|
||||
</div>
|
||||
{{/dmg1flag}}
|
||||
{{/dmg2flag}}
|
||||
{{#dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
<div class="adv">
|
||||
<span class="damage">{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}</span>
|
||||
<span class="damagetype">{{dmg1type}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="damage">{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}</span>
|
||||
<span class="damagetype">{{dmg2type}}</span>
|
||||
</div>
|
||||
{{/dmg2flag}}
|
||||
{{/dmg1flag}}
|
||||
</div>
|
||||
{{^attack}}
|
||||
{{#range}}
|
||||
<div class="sublabel" style="color: black;">
|
||||
<span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
<div class="label">
|
||||
<span>{{rname}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
{{#spelldesc_link}}
|
||||
<div class="spelldesc-link">
|
||||
<span>{{spelldesc_link}}</span>
|
||||
</div>
|
||||
{{/spelldesc_link}}
|
||||
{{/attack}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,9 @@
|
||||
<rolltemplate class="sheet-rolltemplate-desc">
|
||||
<div class="desc info">
|
||||
<span>
|
||||
<span class="top"></span>
|
||||
<span class="middle">{{desc}}</span>
|
||||
<span class="bottom"></span>
|
||||
</span>
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,28 @@
|
||||
<rolltemplate class="sheet-rolltemplate-dmgaction">
|
||||
<div class="container dmgcontainer damagetemplate">
|
||||
<div class="row header">
|
||||
<span>{{rname}}</span>
|
||||
</div>
|
||||
{{#name}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{name}}</span>
|
||||
</div>
|
||||
{{/name}}
|
||||
<div class="arrow-right"></div>
|
||||
<span class="italics translated" data-i18n="dmg:-u">Damage: </span>
|
||||
<span>
|
||||
{{#dmg1flag}}
|
||||
{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}{{dmg1type}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}{{dmg2type}}
|
||||
{{/dmg2flag}}
|
||||
</span>
|
||||
</div>
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="desc">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,41 @@
|
||||
<rolltemplate class="sheet-rolltemplate-npc">
|
||||
<div class="row header">
|
||||
<span>{{rname}}</span>
|
||||
</div>
|
||||
{{#name}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{name}}</span>
|
||||
</div>
|
||||
{{/name}}
|
||||
<div class="arrow-right"></div>
|
||||
<div class="row">
|
||||
{{#normal}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span>
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics">{{type}}: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,96 @@
|
||||
<rolltemplate class="sheet-rolltemplate-npcaction">
|
||||
<div class="container">
|
||||
<div class="row header">
|
||||
<span>{{rname}}</span>
|
||||
</div>
|
||||
{{#name}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{name}}</span>
|
||||
</div>
|
||||
{{/name}}
|
||||
<div class="arrow-right"></div>
|
||||
{{#attack}}
|
||||
<div class="row">
|
||||
{{#normal}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span>
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{/attack}}
|
||||
{{#description}}
|
||||
<span class="desc">{{description}}</span>
|
||||
{{/description}}
|
||||
</div>
|
||||
{{#damage}}
|
||||
<div class="container dmgcontainer damagetemplate">
|
||||
<span class="italics sheet-translated" data-i18n="dmg:-u">Damage: </span>
|
||||
<span>
|
||||
{{#dmg1flag}}
|
||||
{{dmg1}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{dmg1type}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{dmg2}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{dmg2type}}
|
||||
{{/dmg2flag}}
|
||||
</span>
|
||||
</div>
|
||||
{{/damage}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,93 @@
|
||||
<rolltemplate class="sheet-rolltemplate-npcatk">
|
||||
<div class="row header">
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}
|
||||
{{#^rollWasCrit() r1}}{{rname}}{{/^rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{rnamec}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}{{rname}}{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}{{rnamec}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}{{rname}}{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}{{rname}}{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r1}}{{rnamec}}{{/rollWasCrit() r1}}{{/rollLess() r1 r2}}
|
||||
{{#rollLess() r1 r2}}{{#^rollWasCrit() r1}}{{rname}}{{/^rollWasCrit() r1}}{{/rollLess() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r2}}{{rnamec}}{{/rollWasCrit() r2}}{{/rollGreater() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#^rollWasCrit() r2}}{{rname}}{{/^rollWasCrit() r2}}{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{#name}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{name}}</span>
|
||||
</div>
|
||||
{{/name}}
|
||||
<div class="arrow-right"></div>
|
||||
<div class="row">
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}
|
||||
{{#^rollWasCrit() r1}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}}<span class="italics sheet-translated">[{{typec}}: </span>{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{#^rollWasCrit() r1}}{{#^rollWasCrit() r2}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r2}}{{/^rollWasCrit() r1}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#^rollWasCrit() r1}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r1}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r1}}{{/rollLess() r1 r2}}
|
||||
{{#rollLess() r1 r2}}{{#^rollWasCrit() r1}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r1}}{{/rollLess() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r2}}<span class="italics sheet-translated">{{typec}}: </span>{{/rollWasCrit() r2}}{{/rollGreater() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#^rollWasCrit() r2}}<span class="italics sheet-translated">{{type}}: </span>{{/^rollWasCrit() r2}}{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{#normal}}
|
||||
<span>{{r1}}</span>
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="desc">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,19 @@
|
||||
<rolltemplate class="sheet-rolltemplate-npcdmg">
|
||||
<div class="container dmgcontainer damagetemplate">
|
||||
<span class="italics translated" data-i18n="dmg:-u">Damage: </span>
|
||||
<span>
|
||||
{{#dmg1flag}}
|
||||
{{dmg1}}{{#crit}} + {{crit1}}{{/crit}}{{dmg1type}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{dmg2}}{{#crit}} + {{crit2}}{{/crit}}{{dmg2type}}
|
||||
{{/dmg2flag}}
|
||||
</span>
|
||||
</div>
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="desc">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,98 @@
|
||||
<rolltemplate class="sheet-rolltemplate-npcfullatk">
|
||||
<div class="container">
|
||||
<div class="row header">
|
||||
<span>{{rname}}</span>
|
||||
</div>
|
||||
{{#name}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{name}}</span>
|
||||
</div>
|
||||
{{/name}}
|
||||
<div class="arrow-right"></div>
|
||||
{{#attack}}
|
||||
<div class="row">
|
||||
{{#normal}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span>
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span class="grey">{{r2}}</span>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span>{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<span class="italics sheet-translated" data-i18n="attack:-u">Attack: </span><span class="grey">{{r1}}</span><span> | </span><span>{{r2}}</span>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
{{/attack}}
|
||||
</div>
|
||||
<div class="container dmgcontainer damagetemplate">
|
||||
<span class="italics sheet-translated" data-i18n="dmg:-u">Damage: </span>
|
||||
{{#damage}}
|
||||
<span>
|
||||
{{#dmg1flag}}
|
||||
{{dmg1}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit1}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit1}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{dmg1type}}
|
||||
{{/dmg1flag}}
|
||||
{{#dmg1flag}}{{#dmg2flag}}+{{/dmg2flag}}{{/dmg1flag}}
|
||||
{{#dmg2flag}}
|
||||
{{dmg2}}
|
||||
{{#normal}}
|
||||
{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}
|
||||
{{/normal}}
|
||||
{{#always}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/always}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}{{#rollWasCrit() r2}} + {{crit2}}{{/rollWasCrit() r2}}{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollTotal() r1 r2}}{{#rollWasCrit() r1}} + {{crit2}}{{/rollWasCrit() r1}}{{/rollTotal() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
{{dmg2type}}
|
||||
{{/dmg2flag}}
|
||||
</span>
|
||||
{{/damage}}
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="desc">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,91 @@
|
||||
<rolltemplate class="sheet-rolltemplate-simple">
|
||||
<div class="container">
|
||||
<div class="result">
|
||||
{{#always}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/always}}
|
||||
{{#normal}}
|
||||
<div class="solo">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/normal}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{#imposed}}
|
||||
<div class="label">
|
||||
<span style="color: red">{{imposed}}</span>
|
||||
</div>
|
||||
{{/imposed}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
<div class="label">
|
||||
<span>{{rname}}{{#mod}} <span>({{mod}})</span>{{/mod}}</span>
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,91 @@
|
||||
<rolltemplate class="sheet-rolltemplate-simple3D">
|
||||
<div class="container">
|
||||
<div class="result">
|
||||
{{#always}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/always}}
|
||||
{{#normal}}
|
||||
<div class="solo">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/normal}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span class="grey">{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="adv">
|
||||
<span>{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="adv">
|
||||
<span class="grey">{{r1}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="advspacer"></div>
|
||||
<div class="adv">
|
||||
<span>{{r2}}{{r3}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{#imposed}}
|
||||
<div class="label">
|
||||
<span style="color: red">{{imposed}}</span>
|
||||
</div>
|
||||
{{/imposed}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
<div class="label">
|
||||
<span>{{rname}}{{#mod}} <span>({{mod}})</span>{{/mod}}</span>
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,125 @@
|
||||
<rolltemplate class="sheet-rolltemplate-skill">
|
||||
<div class="container">
|
||||
<div class="result">
|
||||
{{#always}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r1 reliableroll}}
|
||||
{{#rollLess() r2 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r2 reliableroll}}
|
||||
{{/rollLess() r1 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/always}}
|
||||
{{#normal}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r1 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/normal}}
|
||||
{{#advantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="roll">
|
||||
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r1 reliableroll}}
|
||||
{{#rollLess() r2 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r2 reliableroll}}
|
||||
{{/rollLess() r1 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/advantage}}
|
||||
{{#disadvantage}}
|
||||
{{#rollLess() r1 r2}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span class="grey">{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r1 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/rollLess() r1 r2}}
|
||||
{{#rollTotal() r1 r2}}
|
||||
<div class="roll">
|
||||
<span>{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r1 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r1 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/rollTotal() r1 r2}}
|
||||
{{#rollGreater() r1 r2}}
|
||||
<div class="roll">
|
||||
<span class="grey">{{r1}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
<div class="roll">
|
||||
<span>{{r2}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{#rollGreater() reliablecheck 0}}
|
||||
{{#rollLess() r2 reliableroll}}
|
||||
<div class="roll reliableroll">
|
||||
<span class=>{{reliableroll}}{{#global}} + {{global}}{{/global}}</span>
|
||||
</div>
|
||||
{{/rollLess() r2 reliableroll}}
|
||||
{{/rollGreater() reliablecheck 0}}
|
||||
{{/rollGreater() r1 r2}}
|
||||
{{/disadvantage}}
|
||||
</div>
|
||||
<div class="label">
|
||||
<span>{{rname}}{{#mod}} <span>({{mod}})</span>{{/mod}}</span>
|
||||
</div>
|
||||
{{#charname}}
|
||||
<div class="charname">
|
||||
<span>{{charname}}</span>
|
||||
</div>
|
||||
{{/charname}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,56 @@
|
||||
<rolltemplate class="sheet-rolltemplate-spell">
|
||||
<div class="container">
|
||||
<div class="title row">
|
||||
<span>{{name}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
|
||||
</div>
|
||||
<div class="italics row">
|
||||
{{#level}}<span class="level">{{level}} </span>{{/level}}
|
||||
{{#ritual}} (<span data-i18n="ritual-l"></span>){{/ritual}}
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
{{#castingtime}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="casting-time:">Casting Time:</span> <span>{{castingtime}}</span>
|
||||
</div>
|
||||
{{/castingtime}}
|
||||
{{#range}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="range:">Range:</span> <span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
{{#target}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="target:">Target:</span> <span>{{target}}</span>
|
||||
</div>
|
||||
{{/target}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="components:">Components:</span>
|
||||
<span>
|
||||
{{#v}}V{{#s}}, {{/s}}{{^s}}{{#m}}, {{/m}}{{/s}}{{/v}}
|
||||
{{#s}}S{{#m}}, {{/m}}{{/s}}
|
||||
{{#m}}M {{#material}}({{material}}){{/material}}{{/m}}
|
||||
</span>
|
||||
</div>
|
||||
{{#duration}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="duration:">Duration:</span> <span>{{#concentration}}<span data-i18n="concentration">Concentration</span> {{/concentration}}{{duration}}</span>
|
||||
</div>
|
||||
{{/duration}}
|
||||
<div class="spacer"></div>
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="description">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
{{#athigherlevels}}
|
||||
<div class="row">
|
||||
<span class="bold italics" data-i18n="at-higher-lvl">At Higher Levels</span>. <span class="description">{{athigherlevels}}</span>
|
||||
</div>
|
||||
{{/athigherlevels}}
|
||||
{{#savedc}}
|
||||
<div class="row spellsavedc">
|
||||
<span class="sheet-label" data-i18n="spell-save-dc-u">SPELL SAVE DC</span><span>: {{savedc}}</span>
|
||||
</div>
|
||||
{{/savedc}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,59 @@
|
||||
<rolltemplate class="sheet-rolltemplate-spelloutput">
|
||||
<div class="container">
|
||||
<div class="title desconly row">
|
||||
<span data-i18n="desconly">For Description Only</span>
|
||||
</div>
|
||||
<div class="title row">
|
||||
<span>{{name}}</span>{{#innate}}<span class="grey">, {{innate}}</span>{{/innate}}
|
||||
</div>
|
||||
<div class="italics row">
|
||||
{{#level}}<span class="level">{{level}} </span>{{/level}}
|
||||
{{#ritual}} (<span data-i18n="ritual-l"></span>){{/ritual}}
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
{{#castingtime}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="casting-time:">Casting Time:</span> <span>{{castingtime}}</span>
|
||||
</div>
|
||||
{{/castingtime}}
|
||||
{{#range}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="range:">Range:</span> <span>{{range}}</span>
|
||||
</div>
|
||||
{{/range}}
|
||||
{{#target}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="target:">Target:</span> <span>{{target}}</span>
|
||||
</div>
|
||||
{{/target}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="components:">Components:</span>
|
||||
<span>
|
||||
{{#v}}V{{#s}}, {{/s}}{{^s}}{{#m}}, {{/m}}{{/s}}{{/v}}
|
||||
{{#s}}S{{#m}}, {{/m}}{{/s}}
|
||||
{{#m}}M {{#material}}({{material}}){{/material}}{{/m}}
|
||||
</span>
|
||||
</div>
|
||||
{{#duration}}
|
||||
<div class="row">
|
||||
<span class="bold" data-i18n="duration:">Duration:</span> <span>{{#concentration}}<span data-i18n="concentration">Concentration</span> {{/concentration}}{{duration}}</span>
|
||||
</div>
|
||||
{{/duration}}
|
||||
<div class="spacer"></div>
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="description">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
{{#athigherlevels}}
|
||||
<div class="row">
|
||||
<span class="bold italics" data-i18n="at-higher-lvl">At Higher Levels</span>. <span class="description">{{athigherlevels}}</span>
|
||||
</div>
|
||||
{{/athigherlevels}}
|
||||
{{#savedc}}
|
||||
<div class="row spellsavedc">
|
||||
<span class="sheet-label" data-i18n="spell-save-dc-u">SPELL SAVE DC</span><span>: {{savedc}}</span>
|
||||
</div>
|
||||
{{/savedc}}
|
||||
</div>
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,15 @@
|
||||
<rolltemplate class="sheet-rolltemplate-traits">
|
||||
<div class="row header">
|
||||
<span>{{name}}</span>
|
||||
</div>
|
||||
{{#source}}
|
||||
<div class="row subheader">
|
||||
<span class="italics">{{#charname}}{{charname}} {{/charname}}{{source}}</span>
|
||||
</div>
|
||||
{{/source}}
|
||||
{{#description}}
|
||||
<div class="row">
|
||||
<span class="desc">{{description}}</span>
|
||||
</div>
|
||||
{{/description}}
|
||||
</rolltemplate>
|
||||
@@ -0,0 +1,488 @@
|
||||
class RepeatingFieldset {
|
||||
constructor(groupname, id) {
|
||||
this.groupname = groupname;
|
||||
this.reprowid = id || generateRowID();
|
||||
}
|
||||
|
||||
buildRowName() {
|
||||
return `repeating_${this.groupname}_${this.reprowid}`
|
||||
}
|
||||
|
||||
addAttribute(attributesibuteName) {
|
||||
return `${this.buildRowName()}_${attributesibuteName}`
|
||||
}
|
||||
}
|
||||
|
||||
class Attack extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('attack', id)
|
||||
this.attributes = {
|
||||
atkname: name,
|
||||
atkbonus: '', //Part of button display
|
||||
atkdmgtype: '', //Part of button display
|
||||
atkflag: '{{attack=1}}',
|
||||
atkattr_base: '@{strength_mod}',
|
||||
atkrange: '',
|
||||
atkmagic: '',
|
||||
atkcritrange: 20,
|
||||
dmgflag: '{{damage=1}} {{dmg1flag=1}}',
|
||||
dmgbase: '',
|
||||
dmgattr: '@{strength_mod}',
|
||||
dmgmod: '',
|
||||
dmgtype: '',
|
||||
dmgcustcrit: '',
|
||||
dmg2flag: 0,
|
||||
dmg2base: '',
|
||||
dmg2attr: 0,
|
||||
dmg2mod: '',
|
||||
dmg2type: '',
|
||||
dmg2custcrit: '',
|
||||
saveflag: 0,
|
||||
saveattr: 'Strength',
|
||||
savedc: '(@{spell_save_dc})',
|
||||
saveflat: '',
|
||||
saveeffect: '',
|
||||
atk_desc: '',
|
||||
"options-flag": 0,
|
||||
}
|
||||
}
|
||||
|
||||
addSaveFlag() {
|
||||
this.attributes.saveflag = '{{save=1}} {{saveattr=@{saveattr}}} {{savedesc=@{saveeffect}}} {{savedc=[[[[@{savedc}]][SAVE]]]}}'
|
||||
}
|
||||
|
||||
checkFinesse(strenght, dexterity) {
|
||||
const strengthGreaterThanDex = strenght > dexterity;
|
||||
this.attributes.dmgattr = strengthGreaterThanDex ? '@{strength_mod}' : '@{dexterity_mod}'
|
||||
this.attributes.atkattr_base = strengthGreaterThanDex ? '@{strength_mod}' : '@{dexterity_mod}'
|
||||
}
|
||||
}
|
||||
|
||||
class GlobalACMod extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('acmod', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
global_ac_name: name,
|
||||
global_ac_val: '',
|
||||
global_ac_active_flag: 0,
|
||||
"options-flag": 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GlobalDamage extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('damagemod', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
global_damage_name: name,
|
||||
global_damage_damage: '',
|
||||
global_damage_type: '',
|
||||
global_damage_active_flag: 0,
|
||||
"options-flag": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GlobalSave extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('savemod', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
global_save_name: name,
|
||||
global_save_roll: '',
|
||||
global_save_active_flag: 0,
|
||||
"options-flag": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class GlobalAttack extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('tohitmod', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
global_attack_name: name,
|
||||
global_attack_roll: '',
|
||||
global_attack_rollstring: '',
|
||||
global_attack_active_flag: 0,
|
||||
"options-flag": 0
|
||||
}
|
||||
}
|
||||
|
||||
addRoll(roll) {
|
||||
this.attributes.global_attack_roll = roll;
|
||||
}
|
||||
}
|
||||
|
||||
class HPMod extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('hpmod', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
mod: '',
|
||||
source: '',
|
||||
levels: 'total'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Item extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('inventory', id);
|
||||
name,
|
||||
this.attributes = {
|
||||
itemname: name,
|
||||
itemcount: 1,
|
||||
itemproperties: '',
|
||||
itemweight: 0,
|
||||
itemcontent: '',
|
||||
itemmodifiers: '',
|
||||
hasattack: 0,
|
||||
useasresource: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Proficiency extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('proficiencies', id);
|
||||
this.attributes = {
|
||||
name,
|
||||
prof_type: 'OTHER',
|
||||
'options-flag': 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Resource extends RepeatingFieldset {
|
||||
constructor(name, id, side) {
|
||||
super('resource', id);
|
||||
this.side = side || 'left',
|
||||
this.attributes = {
|
||||
[`resource_${this.side}`]: '',
|
||||
[`resource_${this.side}_name`]: name,
|
||||
[`resource_${this.side}_max`]: '',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Spell extends RepeatingFieldset {
|
||||
constructor(name, section, id) {
|
||||
super(section, id);
|
||||
this.attributes = {
|
||||
'details-flag': 0,
|
||||
'options-flag': 0,
|
||||
rollcontent: '',
|
||||
spell_ability: 'spell',
|
||||
innate: '',
|
||||
spell_damage_progression: '',
|
||||
spellathigherlevels: '',
|
||||
spellattack: '',
|
||||
spellcastingtime: '',
|
||||
spellclass: '',
|
||||
spellcomp_m: 0,
|
||||
spellcomp_materials: '',
|
||||
spellcomp_s: 0,
|
||||
spellcomp_v: 0,
|
||||
spellconcentration: '',
|
||||
spelldamage2: '',
|
||||
spelldamage: '',
|
||||
spelldamagetype2: '',
|
||||
spelldamagetype: '',
|
||||
spelldescription: '',
|
||||
spelldmgmod: '',
|
||||
spellduration: '',
|
||||
spellhealing: '',
|
||||
spellhlbonus: '',
|
||||
spellhldie: '',
|
||||
spellhldietype: '',
|
||||
spelllevel: 'cantrip',
|
||||
spellname: name,
|
||||
spelloutput: 'SPELLCARD',
|
||||
spellrange: '',
|
||||
spellritual: '',
|
||||
spellsave: '',
|
||||
spellsavesuccess: '',
|
||||
spellschool: 'abjuration',
|
||||
spellsource: '',
|
||||
spelltarget: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Trait extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('traits', id);
|
||||
this.attributes = {
|
||||
name,
|
||||
description: '',
|
||||
source_type: '',
|
||||
source: '',
|
||||
edit: "0",
|
||||
display_flag: 'on'
|
||||
};
|
||||
}
|
||||
|
||||
determineSource(category) {
|
||||
switch (category) {
|
||||
case "Backgrounds":
|
||||
case "Feats":
|
||||
return category.slice(0, -1)
|
||||
break;
|
||||
case "Races":
|
||||
case "Subraces":
|
||||
return "Racial"
|
||||
break;
|
||||
case "Classes":
|
||||
case "Subclasses":
|
||||
return "Class"
|
||||
break;
|
||||
default:
|
||||
return "Other"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ToolProficiency extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('tool', id);
|
||||
this.attributes = {
|
||||
toolname: name,
|
||||
toolbonus_base: '(@{pb})',
|
||||
toolattr_base: '?{Attribute?|Strength,@{strength_mod}|Dexterity,@{dexterity_mod}|Constitution,@{constitution_mod}|Intelligence,@{intelligence_mod}|Wisdom,@{wisdom_mod}|Charisma,@{charisma_mod}}',
|
||||
'options-flag': 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//========== Non-Repeating
|
||||
|
||||
class Class {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
class: this.validateClassName(name) ? name : '',
|
||||
base_level: 1,
|
||||
hit_dice_max: 1,
|
||||
hit_dice: 1,
|
||||
hitdietype: 4,
|
||||
spellcasting_ability: '0*'
|
||||
}
|
||||
}
|
||||
|
||||
validateClassName(name) {
|
||||
return globalAttributesByCategory.classes.includes(name.toLowerCase()) ? true : false;
|
||||
}
|
||||
|
||||
buildSpellcastingAbility(attributeName) {
|
||||
return `@{${attributeName}_mod}+`
|
||||
}
|
||||
}
|
||||
|
||||
class CustomAC {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
custom_ac_flag: 1,
|
||||
custom_ac_base: 10,
|
||||
custom_ac_part1: 'none',
|
||||
custom_ac_part2: 'none',
|
||||
custom_ac_shield: 'yes'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Race {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
race: name,
|
||||
speed: 30,
|
||||
size: 'Medium',
|
||||
halflingluck_flag: this.checkHalfling(name) ? 1 : 0
|
||||
}
|
||||
}
|
||||
|
||||
checkHalfling(name) {
|
||||
return name === 'Halfling' ? true : false
|
||||
}
|
||||
}
|
||||
|
||||
class Subrace {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
subrace: name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SavingThrow {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
[`${this.attributesName(name)}_save_prof`]: `(@{pb})`
|
||||
}
|
||||
}
|
||||
|
||||
attributesName(name) {
|
||||
return name.toLowerCase()
|
||||
}
|
||||
}
|
||||
|
||||
class Skill {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
[`${this.attributesName(name)}_prof`]: `(@{pb}*@{${this.attributesName(name)}_type})`
|
||||
}
|
||||
}
|
||||
|
||||
attributesName(name) {
|
||||
return name.toLowerCase().replace(/ /g, '_')
|
||||
}
|
||||
}
|
||||
|
||||
class Subclass {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
subclass: name,
|
||||
arcane_fighter: 0,
|
||||
arcane_rogue: 0
|
||||
}
|
||||
}
|
||||
|
||||
checkArcane(className) {
|
||||
return className === 'fighter' || className === 'rogue' ? true : false
|
||||
}
|
||||
|
||||
buildSpellcastingAbility(attributeName) {
|
||||
return `@{${attributeName}_mod}+`
|
||||
}
|
||||
}
|
||||
|
||||
//========== NPC AKA MONSTERS
|
||||
|
||||
class Npc {
|
||||
constructor(name) {
|
||||
name,
|
||||
this.attributes = {
|
||||
npc_name: name,
|
||||
strength_base: 10,
|
||||
dexterity_base: 10,
|
||||
constitution_base: 10,
|
||||
intelligence_base: 10,
|
||||
wisdom_base: 10,
|
||||
charisma_base: 10,
|
||||
npc_condition_immunities: '',
|
||||
npc_immunities: '',
|
||||
npc_resistances: '',
|
||||
npc_languages: '',
|
||||
npc_speed: '',
|
||||
token_size: 1,
|
||||
npc_vulnerabilities: '',
|
||||
npc_challenge: '',
|
||||
npc_senses: '',
|
||||
npc_type: '',
|
||||
npc_ac: '',
|
||||
npc_actype: '',
|
||||
hp_max: '',
|
||||
npc_hpformula: '',
|
||||
npc_xp: '',
|
||||
npc_legendary_actions: 0,
|
||||
npc_legendary_actions_desc: '',
|
||||
npc_mythic_actions: 0,
|
||||
npc_mythic_actions_desc: '',
|
||||
npc: 1,
|
||||
'npc_options-flag': 0,
|
||||
npcreactionsflag: 0,
|
||||
npcspellcastingflag: 0,
|
||||
spellcasting_ability: '0*',
|
||||
globalmagicmod: 0,
|
||||
caster_level: 0,
|
||||
spell_dc_mod: 0
|
||||
}
|
||||
}
|
||||
|
||||
addSkills(list) {
|
||||
list.forEach(value => this.attributes[`npc_${value.replace(/ /g, '_')}_base`] = "")
|
||||
}
|
||||
|
||||
addSaves(list) {
|
||||
list.forEach(value => this.attributes[`npc_${value.slice(0, 3)}_save_base`] = "")
|
||||
}
|
||||
|
||||
addSpellcaster(ability, casterLevels) {
|
||||
const spellcastrAttributes = {
|
||||
npcspellcastingflag: 1,
|
||||
base_level: casterLevels || 1,
|
||||
caster_level: casterLevels || 1,
|
||||
class: 'Wizard',
|
||||
level: casterLevels || 1,
|
||||
spellcasting_ability: ability
|
||||
}
|
||||
|
||||
Object.assign(this.attributes, spellcastrAttributes);
|
||||
}
|
||||
|
||||
addInnateCaster() {
|
||||
this.attributes.npcspellcastingflag = 1
|
||||
}
|
||||
}
|
||||
|
||||
class NpcAction extends RepeatingFieldset {
|
||||
constructor(name, section, id) {
|
||||
super(section, id);
|
||||
name,
|
||||
this.attributes = {
|
||||
name,
|
||||
description: '',
|
||||
edit: "0",
|
||||
}
|
||||
}
|
||||
|
||||
addAttack() {
|
||||
const attackAttributes = {
|
||||
attack_flag: 'on',
|
||||
attack_display_flag: '{{attack=1}}',
|
||||
attack_options: '{{attack=1}}',
|
||||
attack_type: '',
|
||||
attack_target: 'one target',
|
||||
attack_range: '5 ft',
|
||||
attack_tohit: '',
|
||||
attack_damage: '',
|
||||
attack_damagetype: '',
|
||||
attack_damage2: '',
|
||||
attack_damagetype2: ''
|
||||
}
|
||||
|
||||
Object.assign(this.attributes, attackAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
class NpcReaction extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('npcreaction', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
name,
|
||||
edit: "0",
|
||||
description: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NpcTraits extends RepeatingFieldset {
|
||||
constructor(name, id) {
|
||||
super('npctrait', id)
|
||||
name,
|
||||
this.attributes = {
|
||||
name,
|
||||
edit_trait: "0",
|
||||
description: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
class RefereceSet extends Set {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
}
|
||||
toggle(value) {
|
||||
const toggleLookup = {
|
||||
true: 'delete',
|
||||
false: 'add'
|
||||
};
|
||||
const hasValue = this.has(value);
|
||||
return this[toggleLookup[hasValue]](value);
|
||||
}
|
||||
}
|
||||
class FlagManager {
|
||||
constructor(reference) {
|
||||
this._reference = reference;
|
||||
this._delimiter = ' ';
|
||||
this._delimiterSafe = '_';
|
||||
}
|
||||
async getFlags() {
|
||||
const entries = await this._getReferenceSet();
|
||||
return entries;
|
||||
}
|
||||
async hasFlag(flag) {
|
||||
const entries = await this._getReferenceSet();
|
||||
return entries.has(flag);
|
||||
}
|
||||
async addFlag(flag) {
|
||||
const updatedReference = await this._updateReference(flag, 'add');
|
||||
return updatedReference;
|
||||
}
|
||||
async deleteFlag(flag) {
|
||||
const updatedReference = await this._updateReference(flag, 'delete');
|
||||
return updatedReference;
|
||||
}
|
||||
async toggleFlag(flag) {
|
||||
const updatedReference = await this._updateReference(flag, 'toggle');
|
||||
return updatedReference;
|
||||
}
|
||||
async _updateReference(flag, method) {
|
||||
const sanitizedFlag = this._sanitizeFlag(flag);
|
||||
const updatedReference = await this._setReference(sanitizedFlag, method);
|
||||
return updatedReference;
|
||||
}
|
||||
async syncFlagsWithRepeatingSection(section) {
|
||||
const flags = await this._syncFlagsWithRepeatingSection(section);
|
||||
return flags;
|
||||
}
|
||||
_syncFlagsWithRepeatingSection(section) {
|
||||
return new Promise(resolve => {
|
||||
SheetUtils.getSectionOrder(section, order => {
|
||||
getAttrs([this._reference], attributes => {
|
||||
let values = "";
|
||||
Object.keys(attributes).some(() => {
|
||||
values += attributes[this._reference];
|
||||
return true;
|
||||
});
|
||||
const flags = (values) ? values.split(' ') : [];
|
||||
const sectionName = `repeating_${section}`;
|
||||
const filteredArray = Array.from(flags).filter(flag => flag.includes(sectionName)).filter(flag => order.includes(SheetUtils.getUID(flag).toLowerCase()));
|
||||
filteredArray.forEach((flag, index) => {
|
||||
const newIndex = order.indexOf(SheetUtils.getUID(flag).toLowerCase());
|
||||
filteredArray[index] = flag.replace(this._getFlagIndex(flag), `_${newIndex}_`);
|
||||
});
|
||||
const updatedSet = Array.from(flags).filter(flag => !flag.includes(sectionName)).concat(filteredArray);
|
||||
let update = {};
|
||||
update[this._reference] = updatedSet.join(' ');
|
||||
setAttrs(update, () => {
|
||||
return resolve(new Set(updatedSet));
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
_getFlagIndex(flag) {
|
||||
const regexp = /_[0-9]+_/g;
|
||||
const valueAsString = String(flag);
|
||||
const match = valueAsString.match(regexp);
|
||||
return (match) ? match.join() : "";
|
||||
}
|
||||
_getReferenceSet() {
|
||||
return new Promise(resolve => {
|
||||
getAttrs([this._reference], attributes => {
|
||||
let values = "";
|
||||
Object.keys(attributes).some(() => {
|
||||
values += attributes[this._reference];
|
||||
return true;
|
||||
});
|
||||
const flags = values.split(this._delimiter).filter(e => {return e});
|
||||
return resolve(new RefereceSet(flags));
|
||||
});
|
||||
});
|
||||
}
|
||||
_setReference(sanitizedFlag, method) {
|
||||
return new Promise(resolve => {
|
||||
getAttrs([this._reference], attributes => {
|
||||
let values = "";
|
||||
Object.keys(attributes).some(() => {
|
||||
values += attributes[this._reference];
|
||||
return true;
|
||||
});
|
||||
const flags = new RefereceSet(values.split(this._delimiter).filter(e => {return e}));
|
||||
flags[method](sanitizedFlag);
|
||||
const flagAsString = Array.from(flags).join(this._delimiter);
|
||||
let update = {};
|
||||
update[this._reference] = flagAsString;
|
||||
setAttrs(update, () => {
|
||||
return resolve(flags);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
_sanitizeFlag(flag) {
|
||||
const regex = new RegExp(`${this._delimiter}`, 'g');
|
||||
const sanitizedFlag = flag.replace(regex, this._delimiterSafe);
|
||||
return sanitizedFlag;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>FlagManager Component</title>
|
||||
<script src="mocks.js"></script>
|
||||
<script src="../FlagManager.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
|
||||
<style>
|
||||
.lorem {
|
||||
display: none;
|
||||
}
|
||||
label:after {
|
||||
content: attr(class);
|
||||
}
|
||||
input.sheet-toggler {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
border-radius: 20px;
|
||||
border: 0;
|
||||
background-color: #888;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAJZJREFUeNqsk8sNg0AMRN/6jJQWuKYFClia2y6oghRAC7RBBPfJxSslkfLB8CRfVp7R2honSbyRgR7ogKu/zcAEjMDtpVtSrVZSkbTqM6v3tFX3LB70P0M1qQZF+ynVIP/49rdxsvnCGvbTAL35tqN0SdICXIIGd+Mg5iGJMpsnLMpkHs8tIN6A8ZQgnRLl8DGlo+f8GABcQbtK9MWRHwAAAABJRU5ErkJggg==);
|
||||
background-repeat: no-repeat;
|
||||
background-position: top 3px left 3px;
|
||||
cursor: pointer;
|
||||
color: transparent;
|
||||
font-size: 0;
|
||||
outline: 0;
|
||||
}
|
||||
input.sheet-toggler:valid {
|
||||
background-color: #49a9e4;
|
||||
background-position: top 3px right 3px;
|
||||
}
|
||||
input.sheet-toggler:valid~.lorem {
|
||||
display:block;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<label class="something"></label>
|
||||
<input type="text" name="attr_flags">
|
||||
<div>
|
||||
<input type="text" name="attr_flags" class="sheet-toggler" pattern=".*toggler_list1.*" required="required">
|
||||
<div class="lorem">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris hendrerit cursus ex. Pellentesque pulvinar nulla justo, finibus hendrerit magna aliquam vitae.</div>
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" name="attr_flags" class="sheet-toggler" pattern=".*toggler_list2.*" required="required">
|
||||
<div class="lorem">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris hendrerit cursus ex. Pellentesque pulvinar nulla justo, finibus hendrerit magna aliquam vitae.</div>
|
||||
</div>
|
||||
<script>
|
||||
maxAsyncDelay = 100;
|
||||
var uiFlagsManager = new UIFlagsManager('flags');
|
||||
jQuery('input.sheet-toggler').click(b => {
|
||||
let button = jQuery(b.target);
|
||||
uiFlagsManager.toggleFlag(button.attr('pattern').replace(/\.\*/g,''));
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>FlagManager Tests</title>
|
||||
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
|
||||
<script src="../../Mocks/Mocks.js"></script>
|
||||
<script src="../../SheetUtils/SheetUtils.js"></script>
|
||||
<script src="../FlagManager.js"></script>
|
||||
<script src="./tests.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,117 @@
|
||||
QUnit.module('Basic Tests', {
|
||||
before: function() {
|
||||
maxAsyncDelay = 100; //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms.
|
||||
},
|
||||
beforeEach: function() {
|
||||
//Resets attributes before each test
|
||||
attributes = {};
|
||||
sectionIDS = {};
|
||||
this.flagManager = new FlagManager('ui_flags');
|
||||
}
|
||||
});
|
||||
QUnit.test('Flag Manager was initiated with zero entries', function( assert ) {
|
||||
var done = assert.async();
|
||||
this.flagManager.getFlags().then(flags => {
|
||||
assert.equal(flags.size, 0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('One flag added to Flag Manager', function( assert ) {
|
||||
var done = assert.async();
|
||||
this.flagManager.addFlag('show_traits').then(flags => {
|
||||
assert.equal(flags.size, 1);
|
||||
assert.equal(flags.has('show_traits'), true);
|
||||
assert.strictEqual(attributes.ui_flags, 'show_traits');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Two flags added to Flag Manager', function( assert ) {
|
||||
var done = assert.async();
|
||||
this.flagManager.addFlag('show_traits').then(() => {
|
||||
this.flagManager.addFlag('show_spells').then(flags => {
|
||||
assert.equal(flags.size, 2);
|
||||
assert.equal(flags.has('show_traits'), true);
|
||||
assert.equal(flags.has('show_spells'), true);
|
||||
assert.strictEqual(attributes.ui_flags, 'show_traits show_spells');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Flag Deleted from Flag Manager', function( assert ) {
|
||||
//Faking some attributes
|
||||
attributes['ui_flags'] = 'show_traits show_spells show_skills';
|
||||
|
||||
var done = assert.async();
|
||||
this.flagManager.deleteFlag('show_spells').then(flags => {
|
||||
assert.equal(flags.size, 2);
|
||||
assert.equal(flags.has('show_traits'), true);
|
||||
assert.equal(flags.has('show_spells'), false);
|
||||
assert.equal(flags.has('show_skills'), true);
|
||||
assert.strictEqual(attributes.ui_flags, 'show_traits show_skills');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Flags correctly detected in Flag Manager', function( assert ) {
|
||||
//Faking some attributes
|
||||
attributes['ui_flags'] = 'show_traits show_spells show_skills';
|
||||
|
||||
var done1 = assert.async();
|
||||
var done2 = assert.async();
|
||||
this.flagManager.hasFlag('show_spells').then(hasFlag => {
|
||||
assert.equal(hasFlag, true);
|
||||
done1();
|
||||
});
|
||||
this.flagManager.hasFlag('non_existing_flag').then(hasFlag => {
|
||||
assert.equal(hasFlag, false);
|
||||
done2();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Flags cant be added more than once', function( assert ) {
|
||||
//Faking some attributes
|
||||
attributes['ui_flags'] = 'show_traits show_spells show_skills';
|
||||
|
||||
var done = assert.async();
|
||||
this.flagManager.addFlag('show_skills').then(flags => {
|
||||
assert.equal(flags.size, 3);
|
||||
assert.strictEqual(attributes.ui_flags, 'show_traits show_spells show_skills');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Order of stored flags are synced with source repeating section', function(assert) {
|
||||
attributes['ui_flags'] = 'a_flag another_flag repeating_traits_0_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_1_name_-MzbTrhcIwpDwRZxfvEn';
|
||||
attributes['_reporder_repeating_traits'] = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn';
|
||||
sectionIDS['repeating_traits'] = ['-LzbTrhcIwpDwRZxfvEn', '-MzbTrhcIwpDwRZxfvEn'];
|
||||
var done = assert.async();
|
||||
this.flagManager.syncFlagsWithRepeatingSection('traits').then(flags => {
|
||||
var expectedTags = new Set([
|
||||
'a_flag',
|
||||
'another_flag',
|
||||
'repeating_traits_1_name_-LzbTrhcIwpDwRZxfvEn',
|
||||
'repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn'
|
||||
]);
|
||||
assert.equal(Array.from(flags).join(' '), Array.from(expectedTags).join(' '));
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Deleted flags are synced with source repeating section', function(assert) {
|
||||
attributes = {};
|
||||
attributes['ui_flags'] = 'a_flag another_flag repeating_traits_1_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn';
|
||||
sectionIDS['repeating_traits'] = ['-MzbTrhcIwpDwRZxfvEn'];
|
||||
var done = assert.async();
|
||||
this.flagManager.syncFlagsWithRepeatingSection('traits').then(flags => {
|
||||
var expectedTags = new Set([
|
||||
'a_flag',
|
||||
'another_flag',
|
||||
'repeating_traits_0_name_-MzbTrhcIwpDwRZxfvEn'
|
||||
]);
|
||||
assert.equal(Array.from(flags).join(' '), Array.from(expectedTags).join(' '));
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,82 @@
|
||||
class SheetUtils {
|
||||
static getUID(value) {
|
||||
const regexp = /-.{19}(?=_)|-.{19}$/g;
|
||||
const valueAsString = String(value);
|
||||
const match = valueAsString.match(regexp);
|
||||
return (match) ? match.join() : "";
|
||||
}
|
||||
static aOrAn(value) {
|
||||
if(['a','e','i','o','u'].indexOf(value.toLowerCase()[0]) > -1) return `an ${value}`;
|
||||
return `a ${value}`;
|
||||
}
|
||||
static toLowerCase(value) {
|
||||
if(Array.isArray(value)) {
|
||||
const lowerCaseArray = value.map(item => { return item.toLowerCase(); });
|
||||
return lowerCaseArray;
|
||||
}
|
||||
return String(value).toLowerCase();
|
||||
}
|
||||
static toCapitalCase(value) {
|
||||
if(Array.isArray(value)) {
|
||||
const capitalCaseArray = value.map(item => { return item[0].toUpperCase() + item.toLowerCase().slice(1); });
|
||||
return capitalCaseArray;
|
||||
}
|
||||
return String(value)[0].toUpperCase() + String(value).toLowerCase().slice(1);
|
||||
}
|
||||
static getSectionOrder(section, callback) {
|
||||
const sectionName = `repeating_${section}`;
|
||||
const attributeName = `_reporder_${sectionName}`;
|
||||
getAttrs([attributeName], attributes => {
|
||||
let values = new Array();
|
||||
Object.keys(attributes).some(() => {
|
||||
let results = SheetUtils.toLowerCase(attributes[attributeName].replace(/ /g, '').split(','));
|
||||
values = values.concat(results);
|
||||
return true;
|
||||
});
|
||||
getSectionIDs(sectionName, ids => {
|
||||
const filteredOrder = new Set();
|
||||
const order = values.concat(SheetUtils.toLowerCase(ids)).filter(entry => { return SheetUtils.toLowerCase(ids).indexOf(entry) > -1; });
|
||||
order.forEach(item => {
|
||||
filteredOrder.add(item);
|
||||
});
|
||||
callback(Array.from(filteredOrder));
|
||||
});
|
||||
});
|
||||
}
|
||||
static deepReadAttribute(attr, callback, defaultValue) {
|
||||
if(/^(@{).+}$/.test(String(attr)) === true) {
|
||||
const regExp = /@\{([^@\{\}]+)\}/;
|
||||
const reference = regExp.exec(attr)[1];
|
||||
var self = this;
|
||||
getAttrs([reference], function(v) {
|
||||
if(!v[reference]) {
|
||||
callback(defaultValue);
|
||||
} else {
|
||||
self.deepReadAttribute(v[reference], callback, defaultValue);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
callback(attr);
|
||||
}
|
||||
}
|
||||
static sanitizeXP(value) {
|
||||
const trimmedValue = value.trim();
|
||||
if(!trimmedValue) return [];
|
||||
const valueWithDecimalsRemoved = trimmedValue.replace(/,|\.| +/g, '');
|
||||
const regex = /[0-9]+/g;
|
||||
let xp = valueWithDecimalsRemoved.match(regex);
|
||||
if(Array.isArray(xp)) xp = xp.map(entry => { return parseInt(entry) });
|
||||
return xp;
|
||||
}
|
||||
static checkPath(obj, path, returnFalseOnEmpty = false) {
|
||||
const sanitizedPath = path.replace(/\]\[|[\[,\]]/g, '.').replace(/\.+/g, '.').replace(/[",',]|\.$|^\./g, '');
|
||||
const properties = sanitizedPath.split('.');
|
||||
let level = obj;
|
||||
for(let property = 0; property < properties.length; property++) {
|
||||
if((returnFalseOnEmpty && !level[properties[property]]) || (!returnFalseOnEmpty && !(properties[property] in level))) return false;
|
||||
level = level[properties[property]];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>SheetUtils Tests</title>
|
||||
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
|
||||
<script src="../../Mocks/Mocks.js"></script>
|
||||
<script src="../SheetUtils.js"></script>
|
||||
<script src="tests.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,173 @@
|
||||
QUnit.module('Basic Tests', {
|
||||
before: function() {
|
||||
maxAsyncDelay = 100; //Sets the mock delay for getAttrs and setAttrs to a maximum of 1000ms.
|
||||
},
|
||||
beforeEach: function() {
|
||||
//Resets attributes before each test
|
||||
attributes = {};
|
||||
sectionIDS = {};
|
||||
}
|
||||
});
|
||||
QUnit.test('Sheet Utils returns correct UID', function( assert ) {
|
||||
assert.equal(SheetUtils.getUID('repeating_npcreaction_-LzbTrhcIwpDwRZxfvEn_name'), '-LzbTrhcIwpDwRZxfvEn');
|
||||
assert.equal(SheetUtils.getUID('attr_wisdom'), '');
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils returns a blank string when an invalid parameter is used', function( assert ) {
|
||||
assert.equal(SheetUtils.getUID(12345), '');
|
||||
assert.equal(SheetUtils.getUID(null), '');
|
||||
assert.equal(SheetUtils.getUID(undefined), '');
|
||||
assert.equal(SheetUtils.getUID({}), '');
|
||||
assert.equal(SheetUtils.getUID(), '');
|
||||
assert.equal(SheetUtils.getUID([]), '');
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils return the order a repeating section.', function(assert) {
|
||||
attributes['_reporder_repeating_section'] = "-LzbTrhcIwpDwRZxfvEn,-MzbTrhcIwpDwRZxfvEn";
|
||||
sectionIDS['repeating_section'] = ['-MzbTrhcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn'];
|
||||
var done = assert.async();
|
||||
SheetUtils.getSectionOrder('section', ids => {
|
||||
assert.equal(ids.join(','), attributes['_reporder_repeating_section'].toLowerCase());
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils section IDs when no ordering is found', function(assert) {
|
||||
sectionIDS['repeating_section'] = ['-MzbTrhcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn'];
|
||||
var done = assert.async();
|
||||
SheetUtils.getSectionOrder('section', ids => {
|
||||
assert.equal(ids.join(','), sectionIDS['repeating_section'].join(',').toLowerCase());
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils returns correct lowered case array', function( assert ) {
|
||||
assert.equal(SheetUtils.toLowerCase(['Something', 'SOMETHINGELSE']).join(' '), 'something somethingelse');
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils returns correct capitalized case array', function( assert ) {
|
||||
assert.equal(SheetUtils.toCapitalCase(['something', 'SOMETHINGELSE']).join(' '), 'Something Somethingelse');
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils returns correct deep read attributes', function( assert ) {
|
||||
attributes['hitdie_1'] = '6';
|
||||
attributes['hitdie_2'] = '@{hitdie_2A}';
|
||||
attributes['hitdie_2A'] = '8';
|
||||
attributes['hitdie_3'] = 3;
|
||||
attributes['hitdie_4'] = '["something"]';
|
||||
attributes['hitdie_6'] = '6';
|
||||
var done_1 = assert.async();
|
||||
var done_2 = assert.async();
|
||||
var done_3 = assert.async();
|
||||
var done_4 = assert.async();
|
||||
var done_5 = assert.async();
|
||||
var done_6 = assert.async();
|
||||
var done_7 = assert.async();
|
||||
var done_8 = assert.async();
|
||||
SheetUtils.deepReadAttribute('@{hitdie_1}', value => {
|
||||
assert.equal(value, '6');
|
||||
done_1();
|
||||
}, '2');
|
||||
SheetUtils.deepReadAttribute('@{hitdie_2}', value => {
|
||||
assert.equal(value, '8');
|
||||
done_2();
|
||||
}, '2');
|
||||
SheetUtils.deepReadAttribute('@{hitdie_3}', value => {
|
||||
assert.equal(value, '3');
|
||||
done_3();
|
||||
}, '2');
|
||||
SheetUtils.deepReadAttribute('@{hitdie_4}', value => {
|
||||
assert.equal(value, '["something"]');
|
||||
done_4();
|
||||
}, '2');
|
||||
SheetUtils.deepReadAttribute('@{hitdie_5}', value => {
|
||||
assert.equal(value, '2');
|
||||
done_5();
|
||||
}, '2');
|
||||
SheetUtils.deepReadAttribute('@{hitdie_5}', value => {
|
||||
assert.equal(value, undefined);
|
||||
done_6();
|
||||
});
|
||||
SheetUtils.deepReadAttribute('{hitdie_6}', value => {
|
||||
assert.equal(value, '{hitdie_6}');
|
||||
done_7();
|
||||
});
|
||||
SheetUtils.deepReadAttribute('something@{hitdie_6}', value => {
|
||||
assert.equal(value, 'something@{hitdie_6}');
|
||||
done_8();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.test('Invalid ordered itens are removed from result', function(assert) {
|
||||
attributes['ui_flags'] = 'a_flag another_flag repeating_traits_0_name_-LzbTrhcIwpDwRZxfvEn repeating_traits_1_name_-MzbTrhcIwpDwRZxfvEn';
|
||||
attributes['_reporder_repeating_traits'] = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn,-InvalidIwpDwRZxfvEn';
|
||||
sectionIDS['repeating_traits'] = ['-FirsThcIwpDwRZxfvEn', '-LzbTrhcIwpDwRZxfvEn', '-MzbTrhcIwpDwRZxfvEn'];
|
||||
var done = assert.async();
|
||||
SheetUtils.getSectionOrder('traits', order => {
|
||||
console.log(order);
|
||||
var expected = '-MzbTrhcIwpDwRZxfvEn,-LzbTrhcIwpDwRZxfvEn,-FirsThcIwpDwRZxfvEn';
|
||||
assert.equal(order.join(','), SheetUtils.toLowerCase(expected));
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
QUnit.only('utils return valid experience points', function(assert) {
|
||||
var xp_char_1 = '10000';
|
||||
var xp_char_2 = '10,000';
|
||||
var xp_char_3 = '10.000';
|
||||
var xp_char_4 = '10000 / 30000';
|
||||
var xp_char_5 = '10,000 /30.000';
|
||||
var xp_char_6 = '10.000\\30.000';
|
||||
var xp_char_7 = '10,000 |30.000';
|
||||
var xp_char_8 = '10,000 : 30.000';
|
||||
var xp_char_9 = '1.010,000-2.030.000';
|
||||
var xp_char_10 = '1 010 000- 2.030.000';
|
||||
var xp_char_11 = '1 010 000 2.030.000';
|
||||
var xp_char_12 = 'abcde 10000 / 30000sdse';
|
||||
var invalidXP = 'abcdef';
|
||||
var blankXPField = '';
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_1)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_2)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_3)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_4)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_4)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_5)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_5)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_6)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_6)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_7)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_7)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_8)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_8)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_9)[0], 1010000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_9)[1], 2030000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_10)[0], 1010000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_10)[1], 2030000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_11)[0], 10100002030000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_12)[0], 10000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(xp_char_12)[1], 30000);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(invalidXP), null);
|
||||
assert.strictEqual(SheetUtils.sanitizeXP(blankXPField).length, 0);
|
||||
});
|
||||
|
||||
QUnit.test('Sheet Utils checks object path', function( assert ) {
|
||||
var my_obj = {
|
||||
["teste teste"]: {
|
||||
another: {
|
||||
empty: ""
|
||||
}
|
||||
}
|
||||
};
|
||||
var path_1 = "['teste teste']['another']['empty']";
|
||||
var path_2 = "['teste teste'].another.empty";
|
||||
var path_3 = "['teste teste'].another['empty']";
|
||||
var path_4 = "['teste teste'].noexisting['empty']";
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_1), true);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_1, true), false);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_2), true);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_2, true), false);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_3), true);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_3, true), false);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_4), false);
|
||||
assert.equal(SheetUtils.checkPath(my_obj, path_4, true), false);
|
||||
});
|
||||
@@ -0,0 +1,268 @@
|
||||
const dropFunctions = {
|
||||
validateCantripScaling: scaling => scaling === 'dice' || scaling === 'beam' ? true : false,
|
||||
buildCantripScaling: scaling => `Cantrip ${scaling.charAt(0).toUpperCase()}${scaling.slice(1)}`,
|
||||
|
||||
buildDamage: (page, currentData, alternateDamage) => {
|
||||
try {
|
||||
const modifiers = dropFunctions.inferAbilityModifier(page.data["Item Type"], page.data["Properties"], currentData)
|
||||
let damage = alternateDamage ? alternateDamage : page.data[`Damage`];
|
||||
damage += modifiers && modifiers != 0 ? `+${modifiers}` : ""
|
||||
damage += page.data["Modifiers"] ? dropFunctions.inferModifier(page.data["Modifiers"], 'damage') : ""
|
||||
|
||||
return damage
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
buildItemModString: page => {
|
||||
try {
|
||||
let mods = `Item Type: ${page.data["Item Type"] || page.data["Category"]}`;
|
||||
|
||||
//Items with ac or attack related bonuses
|
||||
["AC", "Damage", "Damage Type", "Secondary Damage", "Secondary Damage Type", "Alternate Damage", "Alternate Damage Type", "Alternate Secondary Damage", "Alternate Secondary Damage Type", "Critical Range", "Range"].forEach(attr => {
|
||||
mods += page.data[`${attr}`] && page.data[`${attr}`] != "" ? `, ${attr}: ${page.data[`${attr}`]}` : "";
|
||||
});
|
||||
|
||||
//Items with modifiers such as Cloak of Protection
|
||||
mods += page.data["Modifiers"] && page.data["Modifiers"] != "" ? `, ${page.data["Modifiers"]}` : "";
|
||||
|
||||
return mods
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
buildSpellQuery: spellLevel => {
|
||||
try {
|
||||
let spellQuery = ""
|
||||
for(i = 0; i < 10-spellLevel; i++) {
|
||||
const sum = (parseInt(i, 10) + parseInt(spellLevel, 10))
|
||||
spellQuery += `|Level ${sum},${sum}`
|
||||
};
|
||||
|
||||
return `@{wtype}&{template:spell} {{level=@{spellschool} ?{Cast at what level?${spellQuery}}}} {{name=@{spellname}}} {{castingtime=@{spellcastingtime}}} {{range=@{spellrange}}} {{target=@{spelltarget}}} @{spellcomp_v} @{spellcomp_s} @{spellcomp_m} {{material=@{spellcomp_materials}}} {{duration=@{spellduration}}} {{description=@{spelldescription}}} {{athigherlevels=@{spellathigherlevels}}} @{spellritual} {{innate=@{innate}}} @{spellconcentration} @{charname_output}`
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
},
|
||||
|
||||
buildToHit: (page, currentData) => {
|
||||
try {
|
||||
let hit = dropFunctions.inferAbilityModifier(page.data["Item Type"], page.data["Properties"], currentData);
|
||||
hit += page.data["Modifiers"] ? dropFunctions.inferModifier(page.data["Modifiers"], 'attacks') : "";
|
||||
return hit
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
buildSenses: (senses, passivePerception) => {
|
||||
try {
|
||||
return senses ? `${senses}, passive Perception ${passivePerception}` : `passive Perception ${passivePerception}`;
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
buildSpellList: spells => {
|
||||
try {
|
||||
let spellList = []
|
||||
//Create an array of spells to get from the Comepndium
|
||||
const spellTypes = ["spells", "innate"]
|
||||
spellTypes.forEach(type => {
|
||||
const spellObject = dropFunctions.jsonParse(spells)[type]
|
||||
if (spellObject) {
|
||||
for (let [key, value] of Object.entries(spellObject)) {
|
||||
value.forEach(spell => spellList.push(spell))
|
||||
}
|
||||
}
|
||||
})
|
||||
return spellList
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
},
|
||||
|
||||
buildType: (size, type, aligment) => {
|
||||
let string = size || "";
|
||||
type ? string += ` ${type}` : false;
|
||||
aligment ? string += `, ${aligment}`: false;
|
||||
return string
|
||||
},
|
||||
|
||||
confirmFinesse: properties => properties.toLowerCase().includes("finesse") ? true : false,
|
||||
confirmRanged: itemType => itemType.toLowerCase().includes("ranged") ? true : false,
|
||||
confirmDexGreaterThanStr: (dex, str) => dex > str ? true : false,
|
||||
|
||||
convertAbbreviationToAttribute: threeLetterString => {
|
||||
switch(threeLetterString.toLowerCase()) {
|
||||
case "str":
|
||||
return "@{strength_mod}";
|
||||
break;
|
||||
case "dex":
|
||||
return "@{dexterity_mod}";
|
||||
break;
|
||||
case "con":
|
||||
return "@{constitution_mod}";
|
||||
break;
|
||||
case "wis":
|
||||
return "@{wisdom_mod}";
|
||||
break;
|
||||
case "int":
|
||||
return "@{intelligence_mod}";
|
||||
break;
|
||||
case "cha":
|
||||
return "@{charisma_mod}";
|
||||
break;
|
||||
default:
|
||||
errorMessage("convertAbbreviationToAttribute", `${threeLetterString} did not match one of the expected types str, dex, con, wis, int, cha`)
|
||||
return false
|
||||
}
|
||||
},
|
||||
|
||||
determineComponent: (componentList, component) => componentList.toLowerCase().includes(component) ? `{{${component}=1}}` : false,
|
||||
|
||||
inferAbilityModifier: (type, properties, currentData) => {
|
||||
try {
|
||||
const ranged = type ? dropFunctions.confirmRanged(type) : false;
|
||||
const finesse = properties ? dropFunctions.confirmFinesse(properties) : false;
|
||||
const dexGreaterThanStr = dropFunctions.confirmDexGreaterThanStr(currentData.dexterity_mod, currentData.strength_mod);
|
||||
|
||||
return ranged || (finesse && dexGreaterThanStr) ? currentData.dexterity_mod : currentData.strength_mod
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
},
|
||||
|
||||
inferBaseAttribute: attribute => attribute.includes('(') ? attribute.split(" (")[0] : attribute,
|
||||
|
||||
inferCasterLevel: description => parseInt(description.substring(description.indexOf("-level")-4, description.indexOf("-level")-2).trim(), 10) || 1,
|
||||
|
||||
inferFormulaAttribute: attribute => attribute.includes('(') ? attribute.split(" (")[1].slice(0, -1) : "",
|
||||
|
||||
inferModifier: (modifiers, type) => {
|
||||
try {
|
||||
let modifier = "";
|
||||
modifiers = modifiers.split(',');
|
||||
modifiers.forEach(value => {
|
||||
modifier += value.toLowerCase().includes(type) ? value.split(' ').pop() : ""
|
||||
});
|
||||
return modifier
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
return ''
|
||||
}
|
||||
},
|
||||
|
||||
inferSpellcastingAbility: description => {
|
||||
let ability = description.match(/casting ability is (.*?) /);
|
||||
ability = ability && ability.length > 1 ? ability[1] : false;
|
||||
ability = ability ? `@{${ability.toLowerCase()}_mod}+` : "0*";
|
||||
return ability
|
||||
},
|
||||
|
||||
inferSavingThrows: saves => {
|
||||
try {
|
||||
let object = {};
|
||||
if (saves) {
|
||||
saves = saves.includes(', ') ? saves.split(", ") : [saves]
|
||||
saves.forEach(saveValue => {
|
||||
const split = saveValue.includes(' ') ? saveValue.split(' ') : errorMessage(`inferSavingThrows`, `${saveValue} does no include a space`)
|
||||
const abbreviation = split[0].toLowerCase();
|
||||
object[`npc_${abbreviation}_save_base`] = split.pop();
|
||||
});
|
||||
}
|
||||
return object
|
||||
} catch (error) {
|
||||
errorMessage('inferSavingThrows', error)
|
||||
}
|
||||
},
|
||||
|
||||
inferSkills: skills => {
|
||||
try {
|
||||
let object = {};
|
||||
if (skills) {
|
||||
skills = skills.includes(', ') ? skills.split(", ") : [skills]
|
||||
skills.forEach(skillValue => {
|
||||
const split = skillValue.includes(' ') ? skillValue.split(' ') : errorMessage(`inferSkills`, `${skillValue} does no include a space`)
|
||||
const value = split.pop();
|
||||
const name = split.length > 2 ? split.join("_").toLowerCase() : split.shift().toLowerCase();
|
||||
object[`npc_${name}_base`] = value;
|
||||
});
|
||||
}
|
||||
return object
|
||||
} catch (error) {
|
||||
errorMessage('inferSkills', error)
|
||||
}
|
||||
},
|
||||
|
||||
jsonParse: (data, defaultValue) => {
|
||||
let result = null;
|
||||
try {
|
||||
result = JSON.parse(data);
|
||||
} catch (error) {
|
||||
switch(typeof defaultValue) {
|
||||
case 'boolean':
|
||||
case 'number':
|
||||
case 'string':
|
||||
case 'function':
|
||||
result = (typeof data === typeof defaultValue) ? data : defaultValue;
|
||||
break;
|
||||
case 'object':
|
||||
result = (typeof data === typeof defaultValue && data.constructor.name === defaultValue.constructor.name) ? data : defaultValue;
|
||||
break;
|
||||
default:
|
||||
errorMessage('Invalid JSON', error);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
updateSheetAttributes: newObjectForSheet => {
|
||||
try {
|
||||
let update = {};
|
||||
|
||||
for (let [key, value] of Object.entries(newObjectForSheet.attributes)) {
|
||||
//If repeating section, update key needs the repeating information
|
||||
const updateKey = newObjectForSheet.reprowid ? newObjectForSheet.addAttribute(key) : key;
|
||||
|
||||
//This 'update' will be handed to a setAttrs function
|
||||
update[updateKey] = newObjectForSheet.attributes[key];
|
||||
}
|
||||
|
||||
return update
|
||||
} catch (error) {
|
||||
errorMessage(`updateSheetAttributes`, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//These functions handle 'repeating' parameter of processDrop
|
||||
const dropHelpers = {
|
||||
findToolId: (repeatingTools, toolName) => {
|
||||
let id = false
|
||||
for(let [key, value] of Object.entries(repeatingTools)) {
|
||||
value.toolname === toolName.toLowerCase() ? id = key : false;
|
||||
}
|
||||
return id
|
||||
},
|
||||
updateRepeatingTools: (newTool, existingTool) => {
|
||||
existingTool.id = newTool.reprowid
|
||||
existingTool.toolname = newTool.attributes.toolname.toLowerCase()
|
||||
existingTool.base = newTool.attributes.toolbonus_base
|
||||
return existingTool
|
||||
},
|
||||
updateRepeatingTraits: (newTrait, existingTrait) => {
|
||||
existingTrait.id = newTrait.reprowid;
|
||||
existingTrait.name = newTrait.attributes.name;
|
||||
existingTrait.source = newTrait.attributes.source;
|
||||
existingTrait.type = newTrait.attributes.source_type;
|
||||
|
||||
return existingTrait
|
||||
}
|
||||
}
|
||||