input(name='attr_version' type='hidden' value='3.02') //- CHARACTER SHETE 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 .pc .tabs img(alt='Shadowrun black and metallic logo' src='https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Shadowrun5thEdition/images/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='core') 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_${val[0]}`+'_${x}'; 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=`${repeatingSection}_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=`${repeatingSection}_attribute}`) +attributeSelect(val[1]) select.limit-select(name='attr_limit' value='physical_limit' title=`${repeatingSection}_limit}`) +limitSelect(val[2]) +repeatingSectionFlags() .settings if key === 'active' select.skill-select(name='attr_skill' value='Close Combat Group' title=`${repeatingSection}_skill}`) include src/html/skillselect.html else label(data-i18n-title='skill' title='skill') input(name='attr_skill' placeholder=key type='text' title=`${repeatingSection}_skill}`) label(data-i18n-title='rating' title='rating') input(name='attr_rating' min='0' placeholder='0' type='number' title=`${repeatingSection}_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=`${repeatingSection}_rating_modifier}`) label(data-i18n-title='specialization' title='specialization') span(data-i18n='specialization') specialization input(name='attr_specialization}' placeholder='Specalizations' type='text' title=`${repeatingSection}_specialization}`) label(data-i18n-title='notes' title='notes') span(data-i18n='notes') Notes textarea(name='attr_notes' value='' placeholder='Notes' title=`${repeatingSection}_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_spec' title=`@{${repeatingRitualSection}_spec}` 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='complexform') 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, key in {'Complex Form': 'complexform','Target':'target', 'Duration': 'duration', 'Fade': 'fade'} h2(data-i18n=val) #{key} fieldset(class=`repeating_forms`) input(name='attr_dicepool' type='hidden' value='0') +displayRollButton(pcComplexFormButton, true) each val in ['target', 'duration', 'fade'] 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 - const i18n = val.toLowerCase(); option(data-i18n=i18n value=val) #{val} select(name=`attr_duration` title=`${formsrepeatingSection}_duration}` value='Instant') each val in formDurations - const i18n = val.toLowerCase(); option(data-i18n=i18n value=val) #{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') 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 include src/footer.html //- ROLL TEMPLATES include src/rolltemplates.html //- HIDDEN include src/html/hidden.html //- SCRIPTS include src/js/scripts.js //- CHUMMER IMPORTER include src/html/importer.html include src/js/importer.js