593 lines
27 KiB
Plaintext
593 lines
27 KiB
Plaintext
input(name='attr_version' type='hidden' value='4.01')
|
|
|
|
//- CHARACTER SHEET PAGE
|
|
input.sheet_type(name='attr_sheet_type' type='hidden' value='pc')
|
|
|
|
//- CHARACTER TYPE (MUNDANE < MAGIC < RESONANCE)
|
|
input.character-type(name='attr_flag_special' type='hidden' value='mundane')
|
|
|
|
//- MIXINS
|
|
include src/pug/_mixins.pug
|
|
|
|
//- VARIABLES
|
|
include src/pug/_variables.pug
|
|
|
|
- const imageSource = 'https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/src/imgs/'
|
|
|
|
.pc
|
|
.tabs
|
|
img(alt='Shadowrun black and metallic logo' src=`${imageSource}/ShadowrunLogo.png`)
|
|
h1(data-i18n='character') Character
|
|
label(data-i18n-title='character name' title='character name')
|
|
input(type='text' name='attr_character_name' placeholder='Character name' title='@{character_name}')
|
|
h1(data-i18n='player') Player
|
|
label(data-i18n-title='player name' title='player name')
|
|
input(type='text' name='attr_player_name' placeholder='Player name' title='@{player_name}')
|
|
h2(data-i18n-title='/w GM') /w GM
|
|
label.switch(data-i18n-title='whisper rolls to gm' title='whisper rolls to gm')
|
|
input.whisper-toggle(name='attr_gm_toggle' type='checkbox' value='/w gm')
|
|
span.slider
|
|
each val, key in {'wounds': '@{wounds}', 'modifiers':'?{Modifiers +/-|0}', 'edge':'@{edge}'}
|
|
h2(data-i18n-title=key) #{key}
|
|
label.switch(data-i18n-title=key title=key)
|
|
input.whisper-toggle(name='attr_'+key+'_toggle' type='checkbox' value=val)
|
|
span.slider
|
|
button(name='d6' title='Roll D6s' type='roll' value!='@{gm_toggle} &{template:rolls}{{header=^{d6}}}{{base=^{d6}}}{{dice=[[(?{d6s|0}d6>5)]]}}') L
|
|
input(name='attr_tab' type='hidden' value='options')
|
|
button.pictos(name='act_tab_options' title='@{tab}' type='action' ) y
|
|
each val in ['core', 'arms', 'augs', 'gear', 'magic', 'matrix', 'social', 'vehicle']
|
|
button(data-i18n=val name='act_tab_'+val type='action' title='@{tab}') #{val}
|
|
|
|
input.options_toggle(name='attr_tab' type='hidden' value='options')
|
|
//- STATIC TAB
|
|
.static.pc-col
|
|
include src/static.html
|
|
//- SKILLS
|
|
.pc-row
|
|
.header
|
|
- const skillTypes = {'Active': 'active', 'Knowledge': 'know', 'Language': 'lang'}
|
|
each val, key in skillTypes
|
|
- const attrName = key.toLowerCase();
|
|
.header.htab
|
|
.triangle
|
|
input.tab-switch(name='attr_skill_toggle' title=key + ' skills' type='radio' value=attrName)
|
|
h1(data-i18n=val) #{val}..
|
|
.right-tri
|
|
.triangle
|
|
h1(data-i18n='skills') Skills
|
|
.border-box.skill-box
|
|
.pc-box.medium-box
|
|
.rows.repeating-container
|
|
.row-long.headers
|
|
each val in ['Skill', 'RTG', 'Attribute', 'Limit']
|
|
- const translationKey = val.toLowerCase();
|
|
h2(data-i18n=translationKey) #{val}
|
|
input.tab-switch(name='attr_skill_toggle' type='hidden' value='active')
|
|
each val, key in {'active': ['active', 'Agility', 'Physical'],'knowledge':['know', 'Logic', 'Mental'], 'language': ['lang', 'Charisma', 'Social']}
|
|
div(class='skills-'+val[0])
|
|
.rows.repeating-container
|
|
if key === 'active'
|
|
.row-long
|
|
input(name='attr_default_display' type='hidden' value='Agility')
|
|
+rollButton('default', '@{default_display}', '@{default_attribute}+-1')
|
|
span.text-align-center -
|
|
select.attribute-select(name='attr_default_attribute' title='Skill attribute')
|
|
+attributeSelect('Agility')
|
|
select.limit-select(name='attr_limit' title='Skill limit')
|
|
+limitSelect('Physical')
|
|
fieldset(class=`repeating_${key}`)
|
|
- const skillsRepeatingSection = `@{repeating_${key}_`+'${x}';
|
|
|
|
input(name='attr_display' type='hidden')
|
|
input(name='attr_display_rating' type='hidden')
|
|
input(name='attr_display_specialization' type='hidden' value='')
|
|
input(name='attr_display_limit' type='hidden' value=val[2])
|
|
input(name='attr_display_attribute' type='hidden' value=val[1])
|
|
input(name='attr_dicepool' type='hidden' value='0')
|
|
|
|
input.settings-flag(name='attr_flag' type='hidden' value='settings' title=`${skillsRepeatingSection}_flag}`)
|
|
.buttons
|
|
//- SKILL BUTTON
|
|
+skillButton(false)
|
|
//- SPECILIZATION BUTTON
|
|
+skillButton(true)
|
|
span.text-align-center(name='attr_display_rating' title=`${skillsRepeatingSection}_display_rating}`)
|
|
select.attribute-select(name='attr_attribute' title=`${skillsRepeatingSection}_attribute}`)
|
|
+attributeSelect(val[1])
|
|
select.limit-select(name='attr_limit' value='physical_limit' title=`${skillsRepeatingSection}_limit}`)
|
|
+limitSelect(val[2])
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
if key === 'active'
|
|
select.skill-select(name='attr_skill' value='Close Combat Group' title=`${skillsRepeatingSection}_skill}`)
|
|
include src/html/skillselect.html
|
|
else
|
|
label(data-i18n-title='skill' title='skill')
|
|
input(name='attr_skill' placeholder=key type='text' title=`${skillsRepeatingSection}_skill}`)
|
|
label(data-i18n-title='rating' title='rating')
|
|
input(name='attr_rating' min='0' placeholder='0' type='number' title=`${skillsRepeatingSection}_rating}`)
|
|
label(data-i18n-title='ratingmodifier' title='Rating Modifier')
|
|
span(data-i18n='ratingmodifier') Rating Modifier
|
|
input(name='attr_rating_modifier' placeholder='0' type='number' title=`${skillsRepeatingSection}_rating_modifier}`)
|
|
label(data-i18n-title='specialization' title='specialization')
|
|
span(data-i18n='specialization') specialization
|
|
input(name='attr_specialization' placeholder='Specalizations' type='text' title=`${skillsRepeatingSection}_specialization}`)
|
|
label(data-i18n-title='notes' title='notes')
|
|
span(data-i18n='notes') Notes
|
|
textarea(name='attr_notes' value='' placeholder='Notes' title=`${skillsRepeatingSection}_notes}`)
|
|
|
|
|
|
//- CORE TAB
|
|
.core.pc-col
|
|
include src/core.html
|
|
.quality-box
|
|
.header.right-header
|
|
.header.htab
|
|
input.tab-switch(input name='attr_quality_toggle' type='radio' value='quality' checked)
|
|
h1(data-i18n='qualities') Qualities
|
|
.right-tri
|
|
.header.htab
|
|
.triangle
|
|
input.tab-switch(input name='attr_quality_toggle' type='radio' value='martial')
|
|
h1(data-i18n='martialarts') Martial Arts
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
input.tab-switch(input name='attr_quality_toggle' type='hidden' value='quality')
|
|
.quality
|
|
.row-long.headers
|
|
each val in ['Quality', 'Type']
|
|
h2(data-i18n=`${val.toLowerCase()}`) #{val}
|
|
.rows.repeating-container
|
|
fieldset(class='repeating_quality')
|
|
span(name="attr_quality")
|
|
span.center(name="attr_type")
|
|
button.pictos(name="quality_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{quality}}}{{desc=@{notes}}}") w
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
input(name="attr_quality" placeholder="quality name" title="@{repeating_quality_${x}_quality}" type="text")
|
|
select(name="attr_type" title="@{repeating_quality_${x}_type}" value='p')
|
|
option(data-i18n="p" value="P" selected) P
|
|
option(data-i18n="n" value="N") N
|
|
+repeatingSectionNotes('quality')
|
|
.martial
|
|
.row-long.headers
|
|
each val in ['Technique', 'Style']
|
|
h2(data-i18n=`${val.toLowerCase()}`) #{val}
|
|
.rows.repeating-container
|
|
fieldset(class='repeating_martial')
|
|
span(name="attr_technique")
|
|
span.center(name="attr_style")
|
|
button.pictos(name="technique_chat" type="roll" value="@{gm_toggle} &{template:rolls}{{header=@{technique}}}{{desc=@{notes}}}") w
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
input(name="attr_technique" placeholder="technique name" title="@{repeating_martial_${x}_technique}" type="text")
|
|
input(name="attr_style" placeholder="style name" title="@{repeating_martial_${x}_style}" type="text")
|
|
+repeatingSectionNotes('martial')
|
|
|
|
|
|
//- ARMS TAB
|
|
.arms.pc-col
|
|
.pc-row.weapons
|
|
.header.right-header
|
|
h1(data-i18n='weapons') Weapons
|
|
.right-tri
|
|
.header.right-header
|
|
.header.htab
|
|
.triangle
|
|
input.tab-switch(name='attr_weapon_type_toggle' type='radio' value='range' checked)
|
|
h1(data-i18n='ranged') Ranged
|
|
.right-tri
|
|
.header.htab
|
|
.triangle
|
|
input.tab-switch(name='attr_weapon_type_toggle' type='radio' value='melee')
|
|
h1(data-i18n='melee') Melee
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
input.tab-switch(name='attr_weapon_type_toggle' type='hidden' value='range')
|
|
.rows.repeating-container.weapon-range
|
|
- const rangeRepeatingSection = '@{repeating_range_${x}';
|
|
+h2Headers(pcRangeWeaponObject)
|
|
fieldset(class='repeating_range')
|
|
input(name='attr_dicepool' type='hidden' value='0')
|
|
input.flag-primary(name='attr_primary' type='hidden' value='')
|
|
+weaponRollButton(pcRangeWeaponButton)
|
|
each val in ['Dam', 'Acc', 'AP', 'Mode', 'RC', 'Ammo']
|
|
- const attrName = val === 'Dam' ? 'damage' : val === 'RC' ? 'recoil' : val.toLowerCase();
|
|
if val === 'Mode'
|
|
select(name='attr_mode' title='@{mode}' value='BF')
|
|
each val in weaponModes
|
|
option(data-i18n=val.toLowerCase() value=val) #{val}
|
|
else
|
|
span.center(name=`attr_${attrName}`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
each val, key in pcRangeWeaponObject
|
|
- const attrName = key === 'Dam' ? 'damage' : key.toLowerCase();
|
|
if key === 'Mode'
|
|
select(name='attr_mode' title='@{mode}' value='BF')
|
|
each val in weaponModes
|
|
option(data-i18n=val.toLowerCase() value=val) #{val}
|
|
else
|
|
label(data-i18n-title=key.toLowerCase() title=key.toLowerCase())
|
|
input(name=`attr_${attrName}` placeholder=val['placeholder'] title=`${rangeRepeatingSection}_${attrName}}` type=val['type'] value='')
|
|
.row
|
|
h3(data-i18n='modeoptions') Mode Options
|
|
label(data-i18n-title='modeoptions' title='Mode Options')
|
|
input(name='attr_mode_options' placeholder='SA/BF/FA' type='text' title=`${rangeRepeatingSection}_mode_options}}`)
|
|
h3(data-i18n='range') range
|
|
label(data-i18n-title='range' title='Range')
|
|
input(name='attr_range' placeholder='25/150/350/550' type='text' title='')
|
|
h3(data-i18n='primary') primary
|
|
label(data-i18n-title='primary' title='Primary')
|
|
input(name='attr_primary' type='checkbox' title=`${rangeRepeatingSection}_primary}` value='primary')
|
|
|
|
.row
|
|
h3(data-i18n='skill') skill
|
|
select(name=`attr_skill` title=`${rangeRepeatingSection}_skill}` value='@{firearms}')
|
|
optgroup(label='Combat Skills' ) Combat Skills
|
|
option(data-i18n='firearms' value='@{firearms}' selected) Firearms Group
|
|
option(data-i18n='automatics' value='@{automatics}') Automatics
|
|
option(data-i18n='archery' value='@{archery}') Archery
|
|
option(data-i18n='exoticrange' value='0') Exotic Range
|
|
option(data-i18n='heavyweapons' value='@{heavyweapons}') Heavy Weapons
|
|
option(data-i18n='longarms' value='@{longarms}') Longarms
|
|
option(data-i18n='pistols' value='@{pistols}') Pistols
|
|
option(data-i18n='throwingweapons' value='@{throwingweapons}') Throwing Weapons
|
|
optgroup(label='Vehicle Skills') Vehicle Skills
|
|
option(data-i18n='gunnery' value='@{gunnery}') Gunnery
|
|
h3(data-i18n='specialization') specialization
|
|
label(data-i18n-title='specialization' title='specialization')
|
|
input(name='attr_spec' value='2' title=`${rangeRepeatingSection}_spec}` type='checkbox')
|
|
h3(data-i18n='modifier') modifier
|
|
label(data-i18n-title='modifier' title='modifier')
|
|
input(name='attr_dicepool_modifier' title=`${rangeRepeatingSection}_dicepool_modifier}` type='number')
|
|
input(name=`attr_skill` type='hidden' value='')
|
|
.exotic-warning
|
|
i(data-i18n='exoticnote') Exotic weapons are not linked to a skill. Use Modifier input to set dicepool.
|
|
+repeatingSectionNotes('range')
|
|
.rows.repeating-container.weapon-melee
|
|
- const meleeRepeatingSection = '@{repeating_melee_${x}';
|
|
+h2Headers(pcMeleeWeaponObject)
|
|
fieldset(class='repeating_melee')
|
|
input(name='attr_dicepool' type='hidden' value='0')
|
|
input.flag-primary(name='attr_primary' type='hidden' value='')
|
|
+weaponRollButton(pcMeleeWeaponButton)
|
|
each val in ['Dam', 'Acc', 'AP', 'Reach']
|
|
- const attrName = val === 'Dam' ? 'damage' : val.toLowerCase();
|
|
span.center(name=`attr_${attrName}`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
each val, key in pcMeleeWeaponObject
|
|
- const attrName = key === 'Dam' ? 'damage' : key.toLowerCase();
|
|
label(data-i18n-title=key.toLowerCase() title=key.toLowerCase())
|
|
input(name=`attr_${attrName}` placeholder=val['placeholder'] title=`${meleeRepeatingSection}_${attrName}}` type=val['type'] value='')
|
|
h3(data-i18n='primary') primary
|
|
label(data-i18n-title='primary' title='Primary')
|
|
input(name='attr_primary' type='checkbox' title=`${meleeRepeatingSection}_primary}` value='primary')
|
|
.row
|
|
h3(data-i18n='skill') skill
|
|
select(name=`attr_skill` title=`${meleeRepeatingSection}_skill}` value='@{closecombat}')
|
|
optgroup(label='Combat Skills' ) Combat Skills
|
|
option(data-i18n='closecombat' value='@{closecombat}' selected) Close Combat Group
|
|
option(data-i18n='blades' value='@{blades}') Blades
|
|
option(data-i18n='clubs' value='@{clubs}') Clubs
|
|
option(data-i18n='exoticmelee' value='0') Blades
|
|
option(data-i18n='unarmedcombat' value='@{unarmedcombat}') Unarmed Combat
|
|
optgroup(label='Vehicle Skills') Vehicle Skills
|
|
option(data-i18n='gunnery' value='@{gunnery}') Gunnery
|
|
h3(data-i18n='specialization') specialization
|
|
label(data-i18n-title='specialization' title='specialization')
|
|
input(name='attr_spec' value='2' title=`${meleeRepeatingSection}_spec}` type='checkbox')
|
|
h3(data-i18n='modifier') modifier
|
|
label(data-i18n-title='modifier' title='modifier')
|
|
input(name='attr_dicepool_modifier' title=`${meleeRepeatingSection}_dicepool_modifier}` type='number')
|
|
input(name=`attr_skill` type='hidden' value='')
|
|
.exotic-warning
|
|
i(data-i18n='exoticnote') Exotic weapons are not linked to a skill. Use Modifier input to set dicepool.
|
|
+repeatingSectionNotes('melee')
|
|
.pc-row.armor
|
|
.header.right-header
|
|
h1(data-i18n='armor') Armor
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
.rows.repeating-container
|
|
- const armorRepeatingSection = '@{repeating_armor_${x}';
|
|
.row-long.headers
|
|
each val in ['Armor', 'Rating', 'Acid', 'Cold', 'Elec', 'Fire', 'Radi']
|
|
h2(data-i18n=`${val.toLowerCase()}`) #{val}
|
|
fieldset(class='repeating_armor')
|
|
input.flag-primary(name='attr_primary' type='hidden' value='')
|
|
button(name=`roll_soak` type='roll' value!=noWoundsRollBegining+'{{header=^{soak}}}{{base=^{body} ♦ ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier})'+noWoundsRollEnding)
|
|
span(name='attr_name')
|
|
button(name=`roll_armor` type='roll' value!=noWoundsRollBegining+'{{header=@{name}}}{{base= ^{armor}}}{{dice=[[((@{rating})'+noWoundsRollEnding)
|
|
span.center(name='attr_rating')
|
|
each val in ['Acid', 'Cold', 'Electrical', 'Fire', 'Radiation']
|
|
- const attrName = val.toLowerCase();
|
|
button(name=`roll_${attrName}` type='roll' value!=noWoundsRollBegining+`{{header=^{${attrName}protection}}}{{base= ^{armor}}}{{dice=[[((@{body}+@{rating}+@{dicepool_modifier}+@{${attrName}_modifier})`+noWoundsRollEnding)
|
|
span.center(name=`attr_${attrName}_modifier`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
each val, key in pcArmorObject
|
|
- const attrName = key === 'Name' || key === 'Rating' ? key.toLowerCase() : `${key.toLowerCase()}_modifier`;
|
|
label(data-i18n-title=key.toLowerCase() title=key.toLowerCase())
|
|
input(name=`attr_${attrName}` placeholder=val['placeholder'] title=`@{repeating_armor_`+'${x}'+`_${attrName}}` type=val['type'] value='')
|
|
.row
|
|
h3(data-i18n='primary') primary
|
|
label(data-i18n-title='primary' title='Primary')
|
|
input(name='attr_primary' type='checkbox' title=`${armorRepeatingSection}_primary}` value='primary')
|
|
h3(data-i18n='modifier') modifier
|
|
label(data-i18n-title='modifier' title='modifier')
|
|
input(name='attr_dicepool_modifier' placeholder='0' title=`${armorRepeatingSection}_dicepool_modifier}` type='number' value='0')
|
|
+repeatingSectionNotes('armor')
|
|
|
|
|
|
//- AUGS TAB
|
|
.augs.pc-col
|
|
.pc-row
|
|
.header.right-header
|
|
h1(data-i18n='augmentations') Augmentations
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
.row-long.headers
|
|
each val in augementations
|
|
h2(data-i18n=`${val.toLowerCase()}`) #{val}
|
|
.rows.repeating-container
|
|
fieldset(class=`repeating_augementations`)
|
|
span(name=`attr_augmentation`)
|
|
span.center(name=`attr_rating`)
|
|
span.center(name=`attr_essence`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
each val in augementations
|
|
- const attrName = val === 'Augmentations' ? 'augmentation' : val.toLowerCase();
|
|
- const type = val === 'Augmentations' ? 'text' : 'number';
|
|
- const placeholder = val === 'Augmentations' ? 'name' : '0';
|
|
label(data-i18n-title=val title=val)
|
|
input(name=`attr_${attrName}` placeholder=placeholder title=`@{repeating_augementations_`+'${x}'+`_${attrName}}` type=type value='')
|
|
+repeatingSectionNotes('augementations')
|
|
|
|
//- GEAR TAB
|
|
.gear.pc-col
|
|
.pc-row
|
|
.header.right-header
|
|
h1(data-i18n='gear') gear
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
.row-long.headers
|
|
each val in ['Item', 'Rating', 'Quantity']
|
|
h2(data-i18n=`${val.toLowerCase()}`) #{val}
|
|
.rows.repeating-container
|
|
fieldset(class=`repeating_items`)
|
|
span(name=`attr_item`)
|
|
span.center(name=`attr_rating`)
|
|
span.center(name=`attr_quantity`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='item' title='item')
|
|
input(name=`attr_item` placeholder='Jammer' title=`@{repeating_items_`+'${x}'+`_item}` type='text' value='')
|
|
label(data-i18n-title='rating' title='rating')
|
|
input(name=`attr_rating` placeholder='3' title=`@{repeating_items_`+'${x}'+`_rating}` type='text' value='')
|
|
label(data-i18n-title='quantity' title='quantity')
|
|
input(name=`attr_quantity` placeholder='x3' title=`@{repeating_items_`+'${x}'+`_quantity}` type='text' value='')
|
|
+repeatingSectionNotes('items')
|
|
|
|
//- MAGIC TAB
|
|
.magic.pc-col
|
|
.pc-row.spell-box
|
|
.header.right-header
|
|
h1(data-i18n='magic') Magic
|
|
.right-tri
|
|
.header.right-header
|
|
.header.htab
|
|
.triangle
|
|
input.magic-toggle(name='attr_magic_toggle' title='@{magic_toggle}' type='radio' value='spells' checked)
|
|
h1(data-i18n='spells') Spells
|
|
.right-tri
|
|
.header.htab
|
|
.triangle
|
|
input.magic-toggle(name='attr_magic_toggle' title='@{magic_toggle}' type='radio' value='preps')
|
|
h1(data-i18n='prep') Prep...
|
|
.right-tri
|
|
.header.htab
|
|
.triangle
|
|
input.magic-toggle(name='attr_magic_toggle' title='@{magic_toggle}' type='radio' value='rituals')
|
|
h1(data-i18n='rituals') Rituals
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
+fadeDrainSection('drain')
|
|
input.magic-toggle(name='attr_magic_toggle' type='hidden' value='spells')
|
|
.row-long.headers
|
|
each val in ['spells', 'type', 'range', 'duration', 'drain']
|
|
h2(data-i18n=val) #{val}
|
|
|
|
.magic-spells.spellsForumlas
|
|
+pcSpells('spell')
|
|
|
|
.magic-preps.spellsForumlas
|
|
+pcSpells('preps')
|
|
|
|
.rows.repeating-container.prepared-preparations
|
|
h2(data-i18n='preperations') preperations
|
|
.row-long.headers
|
|
each val in ['name', 'force', 'potency', 'trigger']
|
|
h3(data-i18n=val) #{val}
|
|
fieldset(class='repeating_preperations')
|
|
+displayRollButton(prepButton, false)
|
|
each val in ['force', 'potency', 'trigger']
|
|
span.center(name=`attr_${val}`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='name' title='name')
|
|
input(name='attr_name' placeholder='Name' title='@{repeating_preperations_${x}_name}' type='text' value='')
|
|
label(data-i18n-title='force' title='force')
|
|
input(name='attr_force' placeholder='1' title='@{repeating_preperations_${x}_force}' type='number' value='')
|
|
label(data-i18n-title='potency' title='potency')
|
|
input(name='attr_potency' placeholder='1' title='@{repeating_preperations_${x}_potency}' type='number' value='')
|
|
select(name='attr_trigger' title='@{repeating_preperations_${x}_trigger}' value='Command')
|
|
optgroup(label='Trigger') Trigger
|
|
option(data-i18n='command' value='Command') command
|
|
option(data-i18n='contact' value='Contact' selected) contact
|
|
option(data-i18n='time' value='Time') time
|
|
option(data-i18n='special' value='Special') special
|
|
+repeatingSectionNotes('preperations')
|
|
|
|
.magic-rituals
|
|
.rows.repeating-container
|
|
fieldset(class=`repeating_ritual`)
|
|
- const repeatingRitualSection = `@{repeating_${type}`+'_${x}';
|
|
input(name='attr_dicepool' type='hidden' value='0')
|
|
+displayRollButton(pcRitualButton, true)
|
|
each val in ['type', 'range', 'duration', 'drain']
|
|
span.center(name='attr_'+val)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='name' title='name')
|
|
input(name='attr_name' placeholder='Curse (MATERIAL LINK, SPELL)' title=`@{${repeatingRitualSection}_name}` type='text')
|
|
.rows
|
|
h3(data-i18n='skill') skill
|
|
select(name='attr_skill' title=`@{${repeatingRitualSection}_skill}`)
|
|
option(data-i18n='sorcerygroup' value='@{sorcery}') Sorcery Group
|
|
option(data-i18n='ritualspellcasting' value='@{ritualspellcasting}' selected) Ritual Spellcasting
|
|
h3(data-i18n='specialization') specialization
|
|
label(data-i18n-title='specialization' title='specialization')
|
|
input(name='attr_specialization' title=`@{${repeatingRitualSection}_specialization}` type='checkbox' value='2')
|
|
h3(data-i18n='modifier') modifier
|
|
label(data-i18n-title='modifier' title='modifier')
|
|
input(name='attr_dicepool_modifier' title=`@{${repeatingRitualSection}_dicepool_modifier}` type='number')
|
|
+repeatingSectionNotes('ritual')
|
|
|
|
.pc-row.powers
|
|
.header.right-header
|
|
h1(data-i18n='adeptpowers') Adept Powers or Other Abilities
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
+fadeDrainSection('drain', true)
|
|
.row-long.headers
|
|
h2(data-i18n='name') Name
|
|
h2.center(data-i18n='rating') Rating
|
|
.rows.repeating-container.powers
|
|
fieldset(class=`repeating_powers`)
|
|
span(name='attr_name')
|
|
span.center(name='attr_rating')
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='name' title='name')
|
|
input(name='attr_name' placeholder='name' title='@{repeating_powers_${x}_name}' type='text' value='')
|
|
label(data-i18n-title='rating' title='rating')
|
|
input(name='attr_rating' placeholder='rating' title='@{repeating_powers_${x}_rating}' type='number' value='')
|
|
+repeatingSectionNotes('powers')
|
|
|
|
//- MATRIX TAB
|
|
.matrix.pc-col
|
|
.pc-row.matrix-box
|
|
.header.right-header
|
|
h1(data-i18n='cyberdeck') Cyberdeck
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
.cyberdeck
|
|
include src/html/matrix.html
|
|
.rows.repeating-container.programs
|
|
h2(data-i18n='programs') Programs
|
|
fieldset(class=`repeating_programs`)
|
|
span(name='attr_program')
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='programs' title='programs')
|
|
input(name='attr_program' placeholder='Program name' title='@{repeating_programs_${x}_program}' type='text' value='')
|
|
+repeatingSectionNotes('programs')
|
|
.pc-row
|
|
.header.right-header
|
|
h1(data-i18n='complex form') Complex Forms
|
|
.right-tri
|
|
.border-box
|
|
.pc-box.medium-box
|
|
+fadeDrainSection('fade')
|
|
.rows.repeating-container.complex-forms
|
|
- const formsrepeatingSection = `@{repeating_forms_` + "${x}";
|
|
.row-long.headers
|
|
each val in complexFormAttributes
|
|
h2.text-capitalize(data-i18n=val)
|
|
fieldset(class=`repeating_forms`)
|
|
input(name='attr_dicepool' type='hidden' value='0')
|
|
+displayRollButton(pcComplexFormButton, true)
|
|
- const complexFormSpans = complexFormAttributes.shift();
|
|
each val in complexFormSpans
|
|
span.center(name=`attr_${val}`)
|
|
+repeatingSectionFlags()
|
|
.settings
|
|
label(data-i18n-title='name' title='name')
|
|
input(name='attr_name' placeholder='name' title=`${formsrepeatingSection}_name}` type='text' value='')
|
|
select(name=`attr_target` title=`${formsrepeatingSection}_target}` value='Device')
|
|
each val in formTargets
|
|
option.text-capitalize(data-i18n=val value=val) #{val}
|
|
select(name=`attr_duration` title=`${formsrepeatingSection}_duration}` value='Instant')
|
|
each val in formDurations
|
|
option.text-capitalize(data-i18n=val value=val)
|
|
label(data-i18n-title='fade' title='fade')
|
|
input(name='attr_fade' placeholder='-1' title=`${formsrepeatingSection}_fade}` type='number' value='')
|
|
.row
|
|
h3(data-i18n='skill') skill
|
|
select(name=`attr_skill` title=`${formsrepeatingSection}_skill}` value='@{software}')
|
|
option(data-i18n='electronicsgroup' value='@{electronics}') Electronics Group
|
|
option(data-i18n='software' value='@{software}' selected) Software
|
|
h3(data-i18n='specialization')
|
|
label(data-i18n-title='specialization' title='specialization')
|
|
input(name='attr_spec' value='2' title=`${formsrepeatingSection}_spec}` type='checkbox')
|
|
h3(data-i18n='modifier') modifier
|
|
label(data-i18n-title='modifier' title='modifier')
|
|
input(name='attr_dicepool_modifier' title=`${formsrepeatingSection}_dicepool_modifier}` type='number')
|
|
+repeatingSectionNotes('forms')
|
|
|
|
//- SOCIAL TAB
|
|
include src/social.html
|
|
|
|
//- VEHICLE TAB
|
|
include src/vehicle.html
|
|
|
|
//- OPTIONS TAB
|
|
include src/options.html
|
|
|
|
//- NPCs
|
|
include src/pug/_npc.pug
|
|
|
|
//- FOOTER
|
|
.footer
|
|
div
|
|
span(data-i18n="copyrightfooter")
|
|
span Version
|
|
span(name="attr_version")
|
|
img(alt='Emerald Productins, LLC' src=`${imageSource}/EProd_Emerald_Gloss.png`)
|
|
|
|
//- ROLL TEMPLATES
|
|
include src/rolltemplates.html
|
|
|
|
//- HIDDEN
|
|
include src/html/hidden.html
|
|
|
|
//- SCRIPTS
|
|
script(type="text/worker")
|
|
|
|
include src/js/attributes.js
|
|
|
|
include src/js/versioning.js
|
|
|
|
include src/js/helpers.js
|
|
|
|
include src/js/eventhandlers.js
|
|
|
|
include src/js/scripts.js
|
|
|
|
include src/js/importer.js
|
|
|
|
include src/js/importerUI.js
|
|
|
|
//- CHUMMER IMPORTER
|
|
include src/html/importer.html |