//- VERSION //- ============================= input(name='attr_version' type='hidden' value='1.02') //- MIXINS include src/pug/_mixins.pug - const imageSrc = `https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Outbreak/src/img`; .container input(name='attr_tab' type='hidden' value='main') .main.tab .column .grid.playerinfo.box each val in ['Name', 'Player', 'Campaign'] -const name = val.toLowerCase(); h2(data-i18n=`${val}`) #{val} input(name=`attr_character_${name}` placeholder=val title=`@{character_${name}}` type='text' value='') .spewbox.box h1.green-header(data-i18n='S.P.E.W Attributes') S.P.E.W Attributes .grid.dicetypes each val in ['Strength', 'Perception', 'Empathy', 'Willpower'] -const name = val.toLowerCase(); .grid.attributes img(alt=`${val}` src=`${imageSrc}/OU_Attributes_${val}_40x40.png`) h3(data-i18n=val) #{val} .grid input(name=`attr_${name}` type='hidden' value=`[[(@{${name}_bonus}*10)+@{${name}_base}]]`) label input(name=`attr_${name}_bonus` title=`@{${name}_bonus}` type='text' value='0') label input(name=`attr_${name}_base` title=`@{${name}_base}` type='text' value=`0`) h2(data-i18n='Character Resources') Character Resources .grid.points each val in ['Survival', 'Gestalt', 'Competance'] -const name = val === 'Gestalt' ? `${val.toLowerCase()}_level` : `${val.toLowerCase()}_points` ; if val === 'Gestalt' h3.yellow-header(data-i18n=`${val} Level:`) #{val} Level: else h3.green-header(data-i18n=`${val} Points:`) #{val} Points: label input.points(name=`attr_${name}` title=`@{${name}}` value='0' type='text') .grid.skills h1.yellow-header(data-i18n='Skills') Skills h2(data-i18n='Basic Skills') Basic Skills .skill-column .grid.header h3(data-i18n='Adv') h3(data-i18n='Tot') each val, key in {'Balance':['perception', 'willpower'], 'Brawl': ['strength', 'perception'], 'Climb':['strength','willpower'], 'Composure':['willpower', 'empathy'], 'Dodge':['perception', 'strength'], 'Endurance':['strength', 'willpower'], 'Expression':['empathy','perception'], 'Grapple':['strength', 'willpower']} +skillList(key, val[0], val[1]) .skill-column .grid.header h3(data-i18n='Adv') h3(data-i18n='Tot') each val, key in {'Hold':['willpower','perception'], 'Jump/Leap':['strength','perception'], 'Lift/Pull':['strength','willpower'], 'Resist Pain':['willpower','strength'], 'Search':['perception','willpower'], 'Spot/Listen':['perception','willpower'], 'Stealth':['perception','willpower']} +skillList(key, val[0], val[1]) h2(data-i18n='Trained Skills') Trained Skills .skill-column each val,key in {'Bow':['perception', 'strength'], 'Calm Other':['empathy', 'willpower'], 'Persuade':['empathy', 'willpower'], 'Barter':['empathy', 'willpower'], 'Command':['empathy', 'willpower'], 'Detect Motives':['empathy', 'willpower'], 'Intimidate':['empathy', 'willpower'], 'Digital Systems':['perception', 'willpower']} +skillList(key, val[0], val[1]) .skill-column each val,key in {'Long Gun':['perception', 'willpower'], 'Pistol':['perception', 'willpower'], 'First Aid':['perception', 'willpower'], 'Blunt':['strength', 'willpower'], 'Pierce':['strength', 'willpower'], 'Slash':['strength', 'willpower'], 'Navigation':['perception', 'willpower'], 'Swim':['strength', 'willpower'], 'Throw':['perception', 'strength']} +skillList(key, val[0], val[1]) h2(data-i18n='Expert Skills') Expert Skills .skill-column each val, key in {'Adv Medicine':['perception', 'willpower'], 'Construct Engineer':['perception', 'willpower'], 'Martial Arts':['strength', 'perception'], 'Pilot':['perception', 'willpower']} +expertSkillList(key, val[0], val[1]) .skill-column each val, key in {'Ride': ['empathy', 'willpower'], 'Science':['perception', 'willpower'], 'Survival':['perception', 'willpower'], 'Toughness':['strength', 'willpower']} +expertSkillList(key, val[0], val[1]) .grid.repeating-container each val in ['Specalizations', 'Attr', 'Bonus', 'Adv', 'Skill', 'Roll',] h3(data-i18n=val) #{val} fieldset(class='repeating_skills') input(name=`attr_button_base` type='hidden' value=`[[(?{Gear Or Kit| None, 0 | Archery, @{archery_gear}|Athletic Gear, @{athletic_gear}|Bludgeon, @{bludgeoning}|Climbing Gear, @{climbing_gear}|Command Apparatus, @{command_app}|Firefighting, @{firefighting}|First Aid Kit, @{first_aid_kits}|Long Gun, @{long_gun}|Martial Arts, @{martial_arts}|Medical Gear, @{medical_gear}|Piercing, @{piercing}|Pistol, @{pistol}|Recon Gear, @{recon_gear}|Slashing, @{slashing}|Survival Kit, @{survival_kit}|Swimming/Diving, @{swimming_diving}|Throwing, @{throwing}|Tools, @{tools}|Value, @{value}|Vehicles, @{vehicles}})*?{Multiplier|1|2|3|4|5}]]`) input(name=`attr_total` type='hidden' value=`(@{skill} [Skill]+@{button_base} [Kit])`) input(name=`attr_skill_name` type='text' value=``) select(name='attr_attribute_base' value='@{perception_bonus}') option(value='@{strength_bonus}') strength option(value='@{perception_bonus}' selected) perception option(value='@{empathy_bonus}') empathy option(value='@{willpower_bonus}') willpower select(name='attr_attribute_bonus' value='@{willpower_bonus}') option(value='@{strength_bonus}') strength option(value='@{perception_bonus}') perception option(value='@{empathy_bonus}') empathy option(value='@{willpower_bonus}' selected) willpower label input.center(name=`attr_advancement` type='number' value='0') label input.center(name=`attr_skill` type='hidden' value=`0`) span(name=`attr_skill`) button.dicefontd10(name=`roll_name` type='roll' value!=`&{template:ou} {{name=@{character_name}}} {{roll_name=@{skill_name}}} {{attr=@{skill}}} {{Target1=[[@{total}]]}} {{Target2=[[@{total}+1]]}} {{skill=VS.}} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_dice}}} {{DieDep=@{depletion_die}}} {{result=[[1d100+@{difficulty_dice} [Diff]]]}} {{dos1=[[@{total}-19]]}} {{dos2a=[[@{total}-20]]}} {{dos2b=[[@{total}-29]]}} {{dos3a=[[@{total}-30]]}} {{dos3b=[[@{total}-39]]}} {{dos4a=[[@{total}-40]]}} {{dos4b=[[@{total}-49]]}} {{dof1=[[@{total}+19]]}} {{dof2a=[[@{total}+20]]}} {{dof2b=[[@{total}+29]]}} {{dof3a=[[@{total}+30]]}} {{dof3b=[[@{total}+39]]}} {{dof4a=[[@{total}+40]]}} {{dof4b=[[@{total}+49]]}}`) t .equipment.grid.box h1.green-header.center(data-i18n='Equipment') Equipment textarea(data-i18n-placeholder='Equipment' name='attr_equipment' placeholder='Equipment' value='') .column .grid.box.logo img(alt='Outbreak Character Sheet', src=`${imageSrc}/OU_Logo_340pxWx90pxH.png`) .grid.box.dice-box button(data-i18n='Dice Pool' name='roll_Pool' type='roll' value='&{template:ou-small} {{Diff=@{difficulty_dice}}} {{Spd1=@{speed_dice}}} {{Dmg=@{damage_dice}}} {{Deplet=@{depletion_dice}}} {{DieDif=@{difficulty_die}}} {{DieSpd=@{speed_die}}} {{DieDmg=@{damage_dice}}} {{DieDep=@{depletion_die}}}') .die img(alt='difficulty dice' src=`${imageSrc}/HuntersIcon_difficulty_16pxW_x16pxH.jpg` title='Difficult Dice') select(name='attr_difficulty_dice') - let n = 0; while n < 6 option(data-i18n=n value=`[[${n}d6!pcs>6cf<0]]`) #{n} - n++ .die img(alt=`speed dice` src=`${imageSrc}/HuntersIcon_speed_16pxW_x16pxH.jpg`) +diceSelect(`speed`) .die img(alt=`damage dice` src=`${imageSrc}/HuntersIcon_damage_16pxW_x16pxH.jpg`) select(name=`attr_damage_dice`) option(data-i18n='0' value='[[0d6]]') option(data-i18n='1' value=`[[1d6!pcs>6cf<0]]`) option(data-i18n='2' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='3' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='4' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='5' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='6' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='7' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='8' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) option(data-i18n='9' value=`[[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]] [[1d6!pcs>6cf<0]]`) .die img(alt=`depletion dice` src=`${imageSrc}/HuntersIcon_depletion_16pxW_x16pxH.jpg`) +diceSelect(`depletion`) each val in ['difficulty', 'speed', 'damage', 'depletion'] .die +dieRadios(val) .grid.box.health .grid.vitality h1.green-header(data-i18n='Vitality') Vitality .grid.header h2(data-i18n='Injuries') Injuries h2(data-i18n='Damage Threshold') Damage Threshold .grid.body h3(data-i18n='Health Points') .grid.injuries - let i = 0; while i < 5 - i++ input(name=`attr_injury_${i}` type='checkbox') input(name=`attr_injury_${i}_details` type='text' value='') .grid.damage-threshold .row h3(data-i18n='Sb + Wb') Sb + Wb input(name='attr_damage_treshold_base' type='number' value='(@{strength_bonus}+@{willpower_bonus})' disabled='true') .row h3(data-i18n='Bonus') Bonus input(name='attr_damage_threshold_bonus' type='number' value='0') .row h3(data-i18n='Total') Total input(name='attr_damage_threshold' type='number' value='(@{strength_bonus}+@{willpower_bonus}+@{damage_threshold_bonus})' disabled='true') .grid.viral h1.yellow-header(data-i18n='Viral') Viral .virus-checkboxes - let v = 0; while v < 10 - v++ input(name=`attr_viral_${v}` value=v type='checkbox') span h2(data-i18n='Symptoms') Symptoms textarea(name='attr_symptoms') .grid.pysche h1.yellow-header(data-i18n='Psyche') Psyche h2(data-i18n='Wb + Eb') Wb + Eb h2(data-i18n='Bonus') Bonus h2(data-i18n='Total') Total h2(data-i18n='Morale') Morale input(name='attr_morale_base' type='number' value='(@{willpower_bonus}+@{empathy_bonus})' disabled='true') span + input(name='attr_morale_bonus' type='number' value='0') span = input(name='attr_morale' type='number' value='(@{morale_base}+@{morale_bonus})' disabled='true') h2(data-i18n='Coping Mechanisms') Coping Mechanisms textarea(name='attr_coping_mechanisms') .grid.box.training-value h1.green-header(data-i18n='Training Value Bonus') Training Value Bonus .grid.red-kits each val in ['Archery Gear', 'Long Gun', 'Bludgeoning', 'Pistol', 'Piercing', 'Throwing', 'Slashing', 'Martial Arts'] -const name = val.replace(' ', '_').toLowerCase(); .kits h2(data-i18n=`${val}`) #{val} img(alt='' src=`${imageSrc}/KitIcons_${val.replace(' ', '')}_30x30.png`) if (val === 'Long Gun' || val === 'Pistol') input(name=`attr_${name}_tv` type='number' value='') else input(name=`attr_${name}` type='number' value='') .grid.green-kits each val in ['Athletic Gear', 'First Aid Kits', 'Swimming/Diving', 'Climbing Gear', 'Medical Gear', 'Tools', 'Command App', 'Recon Gear', 'Value', 'Firefighting', 'Survival Kit', 'Vehicles'] -const name = val.replace(/ /g, '_').replace('/', '_').toLowerCase(); .kits h2(data-i18n=`${val}`) #{val} img(alt='' src=`${imageSrc}/KitIcons_${val.replace(/ /g, '').replace('/', '')}_30x30.png`) input(name=`attr_${name}` type='number' value='') //- ROLL TEMPLATE include src/pug/rolltemplate.html //- SCRIPTS script(type='text/worker') include src/js/scripts.js