Files
roll20-character-sheets-tester/PokemonTabletopAdventures_v3/PTA3.html
T
Ian Merryweather da471fa608 feature: Adds total damage bonus field
* Adds new readonly field - populated with a sheet worker - to the move section
* Re-arranges the second info header of moves so that critical threshold is next to accuracy modifier, and the damage bonus fields are together
* Updates the Readme
* Updates the previews... again.
2020-10-25 22:10:12 +00:00

1037 lines
56 KiB
HTML

<!-- Background coloring strategy inspired by the GURPS sheet -->
<input type="checkbox" name="attr_style-bug" class="hidden-setting color-setting-bug"></input>
<input type="checkbox" name="attr_style-dark" class="hidden-setting color-setting-dark"></input>
<input type="checkbox" name="attr_style-dragon" class="hidden-setting color-setting-dragon"></input>
<input type="checkbox" name="attr_style-electric" class="hidden-setting color-setting-electric"></input>
<input type="checkbox" name="attr_style-fairy" class="hidden-setting color-setting-fairy"></input>
<input type="checkbox" name="attr_style-fighting" class="hidden-setting color-setting-fighting"></input>
<input type="checkbox" name="attr_style-fire" class="hidden-setting color-setting-fire"></input>
<input type="checkbox" name="attr_style-flying" class="hidden-setting color-setting-flying"></input>
<input type="checkbox" name="attr_style-ghost" class="hidden-setting color-setting-ghost"></input>
<input type="checkbox" name="attr_style-grass" class="hidden-setting color-setting-grass"></input>
<input type="checkbox" name="attr_style-ground" class="hidden-setting color-setting-ground"></input>
<input type="checkbox" name="attr_style-ice" class="hidden-setting color-setting-ice"></input>
<input type="checkbox" name="attr_style-normal" class="hidden-setting color-setting-normal"></input>
<input type="checkbox" name="attr_style-poison" class="hidden-setting color-setting-poison"></input>
<input type="checkbox" name="attr_style-psychic" class="hidden-setting color-setting-psychic"></input>
<input type="checkbox" name="attr_style-rock" class="hidden-setting color-setting-rock"></input>
<input type="checkbox" name="attr_style-steel" class="hidden-setting color-setting-steel"></input>
<input type="checkbox" name="attr_style-water" class="hidden-setting color-setting-water"></input>
<div class="wrapper color-background">
<input type="radio" name="attr_tab" class="tab select-trainer" value="1" title="Trainer" checked="checked" />
<span class="tab select-trainer">Trainer</span>
<input type="radio" name="attr_tab" class="tab select-pokemon" value="2" title="Pokemon" />
<span class="tab select-pokemon">Pokémon</span>
<input type="radio" name="attr_tab" class="tab select-hybrid" value="3" title="Hybrid" />
<span class="tab select-hybrid">Hybrid</span>
<p class="logo">
<img
src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/PokemonTabletopAdventures_v3/images/PTA3SmallLogo.png" />
</p>
<div class="tab-trainer">
<div class="2col-centered">
<div class="character-name-grid">
<b>Name</b><input type="text" spellcheck="false" name="attr_character_name" class="top-information" />
<b>Origin</b><input type="text" spellcheck="false" name="attr_origin" class="top-information" />
<b>Honors</b><input type="number" name="attr_honor_count" class="top-information" />
<b>Credits</b><input type="number" name="attr_credits" class="top-information long-number" />
</div>
<div class="character-class-grid">
<b>Class</b><input type="text" spellcheck="false" name="attr_class1" class="top-information" />
<b>Level</b><input type="number" name="attr_level1" class="top-information" />
<b>Class</b><input type="text" spellcheck="false" name="attr_class2" class="top-information" />
<b>Level</b><input type="number" name="attr_level2" class="top-information" />
<b>Class</b><input type="text" spellcheck="false" name="attr_class3" class="top-information" />
<b>Level</b><input type="number" name="attr_level3" class="top-information" />
<b>Class</b><input type="text" spellcheck="false" name="attr_class4" class="top-information" />
<b>Level</b><input type="number" name="attr_level4" class="top-information" />
</div>
</div>
</div>
<div class="tab-pokemon">
<div class="2col-centered">
<div class="character-name-grid">
<b>Name</b><input type="text" spellcheck="false" name="attr_character_name" class="top-information" />
<b>Species</b><input type="text" spellcheck="false" name="attr_species" class="top-information" />
<b>Type</b>
<!-- Formatting note: These inputs should have no whitespace between them -->
<span><select name="attr_type1" class="half-text top-information">
<option value="bug">Bug</option>
<option value="dark">Dark</option>
<option value="dragon">Dragon</option>
<option value="electric">Electric</option>
<option value="fairy">Fairy</option>
<option value="fighting">Fighting</option>
<option value="fire">Fire</option>
<option value="flying">Flying</option>
<option value="ghost">Ghost</option>
<option value="grass">Grass</option>
<option value="ground">Ground</option>
<option value="ice">Ice</option>
<option value="normal" selected>Normal</option>
<option value="poison">Poison</option>
<option value="psychic">Psychic</option>
<option value="rock">Rock</option>
<option value="steel">Steel</option>
<option value="water">Water</option>
</select><select name="attr_type2" class="half-text top-information">
<option value=""></option>
<option value="bug">Bug</option>
<option value="dark">Dark</option>
<option value="dragon">Dragon</option>
<option value="electric">Electric</option>
<option value="fairy">Fairy</option>
<option value="fighting">Fighting</option>
<option value="fire">Fire</option>
<option value="flying">Flying</option>
<option value="ghost">Ghost</option>
<option value="grass">Grass</option>
<option value="ground">Ground</option>
<option value="ice">Ice</option>
<option value="normal">Normal</option>
<option value="poison">Poison</option>
<option value="psychic">Psychic</option>
<option value="rock">Rock</option>
<option value="steel">Steel</option>
<option value="water">Water</option>
</select></span>
<b>Nature</b><select name="attr_nature" class="top-information top-select">
<option value=""></option>
<option value="lonely">Lonely (+Atk, -Def)</option>
<option value="brave">Brave (+Atk, -Spd)</option>
<option value="adamant">Adamant (+Atk, -SpAtk)</option>
<option value="naughty">Naughty (+Atk, -SpDef)</option>
<option value="bold">Bold (+Def, -Atk)</option>
<option value="relaxed">Relaxed (+Def, -Spd)</option>
<option value="impish">Impish (+Def, -SpAtk)</option>
<option value="lax">Lax (+Def, -SpDef)</option>
<option value="timid">Timid (+Spd, -Atk)</option>
<option value="hasty">Hasty (+Spd, -Def)</option>
<option value="jolly">Jolly (+Spd, -SpAtk)</option>
<option value="naive">Naive (+Spd, -SpDef)</option>
<option value="modest">Modest (+SpAtk, -Atk)</option>
<option value="mild">Mild (+SpAtk, -Def)</option>
<option value="quiet">Quiet (+SpAtk, -Spd)</option>
<option value="rash">Rash (+SpAtk, -SpDef)</option>
<option value="calm">Calm (+SpDef, -Atk)</option>
<option value="gentle">Gentle (+SpDef, -Def)</option>
<option value="sassy">Sassy (+SpDef, -Spd)</option>
<option value="careful">Careful (+SpDef, -SpAtk)</option>
<option value="hardy">Hardy</option>
<option value="docile">Docile</option>
<option value="serious">Serious</option>
<option value="bashful">Bashful</option>
<option value="quirky">Quirky</option>
<option value="other">Other</option>
</select>
<b>Held Item</b><input type="text" spellcheck="false" name="attr_item" class="top-information" />
</div>
<div class="character-name-grid">
<b>Size</b><input type="text" spellcheck="false" name="attr_size" class="top-information" />
<b>Weight</b><input type="text" spellcheck="false" name="attr_weight" class="top-information" />
<b>Sex</b><input type="text" spellcheck="false" name="attr_pokemon_sex" class="top-information" />
<b>Egg Group</b><input type="text" spellcheck="false" name="attr_egg_group" class="top-information" />
<b>Diet</b><input type="text" spellcheck="false" name="attr_diet" class="top-information" />
</div>
</div>
</div>
<div class="tab-hybrid">
<div class="2col-centered">
<div class="character-name-grid">
<b>Name</b><input type="text" spellcheck="false" name="attr_character_name" class="top-information" />
<b>Species</b><input type="text" spellcheck="false" name="attr_species" class="top-information" />
<b>Nature</b><input type="text" spellcheck="false" name="attr_nature" class="top-information" />
<b>Origin</b><input type="text" spellcheck="false" name="attr_origin" class="top-information" />
<b>Honors</b><input type="number" name="attr_honor_count" class="top-information" />
<b>Credits</b><input type="number" name="attr_credits" class="top-information long-number" />
</div>
<div class="character-name-grid">
<b>Type</b>
<!-- Formatting note: These inputs should have no whitespace between them -->
<span><select name="attr_type1" class="half-text top-information">
<option value="bug">Bug</option>
<option value="dark">Dark</option>
<option value="dragon">Dragon</option>
<option value="electric">Electric</option>
<option value="fairy">Fairy</option>
<option value="fighting">Fighting</option>
<option value="fire">Fire</option>
<option value="flying">Flying</option>
<option value="ghost">Ghost</option>
<option value="grass">Grass</option>
<option value="ground">Ground</option>
<option value="ice">Ice</option>
<option value="normal" selected>Normal</option>
<option value="poison">Poison</option>
<option value="psychic">Psychic</option>
<option value="rock">Rock</option>
<option value="steel">Steel</option>
<option value="water">Water</option>
</select><select name="attr_type2" class="half-text top-information">
<option value=""></option>
<option value="bug">Bug</option>
<option value="dark">Dark</option>
<option value="dragon">Dragon</option>
<option value="electric">Electric</option>
<option value="fairy">Fairy</option>
<option value="fighting">Fighting</option>
<option value="fire">Fire</option>
<option value="flying">Flying</option>
<option value="ghost">Ghost</option>
<option value="grass">Grass</option>
<option value="ground">Ground</option>
<option value="ice">Ice</option>
<option value="normal">Normal</option>
<option value="poison">Poison</option>
<option value="psychic">Psychic</option>
<option value="rock">Rock</option>
<option value="steel">Steel</option>
<option value="water">Water</option>
</select></span>
<b>Size / Weight</b>
<!-- Formatting note: These inputs should have no whitespace between them -->
<span><input type="text" spellcheck="false" name="attr_size" class="half-text top-information" /><input
type="text" spellcheck="false" name="attr_weight" class="half-text top-information" /></span>
<b>Sex</b><input type="text" spellcheck="false" name="attr_pokemon_sex" class="top-information" />
<b>Egg Group</b><input type="text" spellcheck="false" name="attr_egg_group" class="top-information" />
<b>Diet</b><input type="text" spellcheck="false" name="attr_diet" class="top-information" />
<b>Held Item</b><input type="text" spellcheck="false" name="attr_item" class="top-information" />
</div>
</div>
</div>
<br />
<div class="tab-trainer tab-hybrid">
<div class="character-stat-grid">
<div class="ball hp-ball">
<b>Current HP</b><br />
<input type="number" name="attr_HP" class="stat-ball-color" /><br />
<input type="number" name="attr_HP_max" class="stat-ball-color" /><br />
<p>Max HP</p>
</div>
<div class="ball atk-ball">
<b>Attack</b><br />
<input type="number" name="attr_ATK" class="stat-ball-color" /><br />
<input type="number" name="attr_ATKMOD" readonly class="stat-read-ball-color" /><br />
<p>ATK mod</p>
</div>
<div class="ball def-ball">
<b>Defense</b><br />
<input type="number" name="attr_DEF" class="stat-ball-color" /><br />
<input type="number" name="attr_DEFMOD" readonly
class="stat-read-ball-color tab-pokemon tab-hybrid" /><br />
<p>DEF mod</p>
</div>
<div class="ball spatk-ball">
<b>Special Attack</b><br />
<input type="number" name="attr_SPATK" class="stat-ball-color" /><br />
<input type="number" name="attr_SPATKMOD" readonly class="stat-read-ball-color" /><br />
<p>SPATK mod</p>
</div>
<div class="ball spdef-ball">
<b>Special Defense</b><br />
<input type="number" name="attr_SPDEF" class="stat-ball-color" /><br />
<input type="number" name="attr_SPDEFMOD" readonly class="stat-read-ball-color" /><br />
<p>SPDEF mod</p>
</div>
<div class="ball spd-ball">
<b>Speed</b><br />
<input type="number" name="attr_SPD" class="stat-ball-color" /><br />
<input type="number" name="attr_SPDMOD" readonly class="stat-read-ball-color" /><br />
<p>SPD mod</p>
</div>
</div>
</div>
<div class="tab-pokemon">
<div class="character-stat-grid">
<div class="ball hp-ball">
<b>Current HP</b><br />
<input type="number" name="attr_HP" class="stat-ball-color" /><br />
<input type="number" name="attr_HP_max" class="stat-ball-color" /><br />
<p>Max HP</p>
</div>
<div class="ball atk-ball">
<b>Attack</b><br />
<input type="number" name="attr_ATK" class="stat-ball-color" /><br />
<input type="number" name="attr_ATKMOD" readonly class="stat-read-ball-color" /><br />
<p>ATK mod</p>
</div>
<div class="ball def-ball">
<b>Defense</b><br />
<input type="number" name="attr_DEF" class="stat-ball-color" /><br />
</div>
<div class="ball spatk-ball">
<b>Special Attack</b><br />
<input type="number" name="attr_SPATK" class="stat-ball-color" /><br />
<input type="number" name="attr_SPATKMOD" readonly class="stat-read-ball-color" /><br />
<p>SPATK mod</p>
</div>
<div class="ball spdef-ball">
<b>Special Defense</b><br />
<input type="number" name="attr_SPDEF" class="stat-ball-color" />
</div>
<div class="ball spd-ball">
<b>Speed</b><br />
<input type="number" name="attr_SPD" class="stat-ball-color" /><br />
<input type="number" name="attr_SPDMOD" readonly class="stat-read-ball-color" /><br />
<p>SPD mod</p>
</div>
</div>
</div>
<div class="tab-pokemon tab-hybrid">
<div class="pokemon-extra-stats-grid">
<p></p>
<p></p>
<p></p>
<p></p>
<b>Movement</b>
<span>
<input type="number" name="attr_movement" readonly class="speed-read-color" />
<b>ft</b>
</span>
<b>Temporary Bonuses</b>
<b>Attack</b>
<b>Defense</b>
<b>Special Attack</b>
<b>Special Defense</b>
<b>Speed</b>
<b></b>
<input type="number" name="attr_atkbonus" class="attack-color" />
<input type="number" name="attr_defbonus" class="defense-color" />
<input type="number" name="attr_spatkbonus" class="spatk-color" />
<input type="number" name="attr_spdefbonus" class="spdef-color" />
<input type="number" name="attr_spdbonus" class="speed-color" />
<b>Contest Stats</b>
<b>Cool</b>
<b>Tough</b>
<b>Beauty</b>
<b>Clever</b>
<b>Cute</b>
<b></b>
<input type="number" name="attr_cool" class="attack-color" />
<input type="number" name="attr_tough" class="defense-color" />
<input type="number" name="attr_beauty" class="spatk-color" />
<input type="number" name="attr_clever" class="spdef-color" />
<input type="number" name="attr_cute" class="speed-color" />
</div>
</div>
<div class="tab-trainer tab-hybrid">
<br />
<div class="character-skill-labels">
<p></p>
<b>Stat</b>
<b>Skill Name</b>
<b>+2</b>
<b>+5</b>
<b>Bonus</b>
<b>Inventory</b>
</div>
<div class="2col-centered">
<div class="character-skills">
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spd}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Acrobatics}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDMOD} + @{acrobaticstalent1} + @{acrobaticstalent2} + @{acrobatics} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_acrobaticscheck'></button>
<input type="number" readonly name="attr_SPDMOD" class="speed-read-color" />
<b>Acrobatics (SPD)</b>
<input type="checkbox" name="attr_acrobaticstalent1" value="2" />
<input type="checkbox" name="attr_acrobaticstalent2" value="3" />
<input type="number" name="attr_acrobatics" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=atk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Athletics}} {{skill-roll=[[ 1d20!kh2 + [[ @{ATKMOD} + @{athleticstalent1} + @{athleticstalent2} + @{athletics} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_athleticscheck'></button>
<input type="number" readonly name="attr_ATKMOD" class="attack-read-color" />
<b>Athletics (ATK)</b>
<input type="checkbox" name="attr_athleticstalent1" value="2" />
<input type="checkbox" name="attr_athleticstalent2" value="3" />
<input type="number" name="attr_athletics" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Bluff/Deception}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{blufftalent1} + @{blufftalent2} + @{bluff} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_bluffcheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Bluff/Deception (SPDEF)</b>
<input type="checkbox" name="attr_blufftalent1" value="2" />
<input type="checkbox" name="attr_blufftalent2" value="3" />
<input type="number" name="attr_bluff" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=def}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Concentration}} {{skill-roll=[[ 1d20!kh2 + [[ @{DEFMOD} + @{concentrationtalent1} + @{concentrationtalent2} + @{concentration} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_concentrationcheck'></button>
<input type="number" readonly name="attr_DEFMOD" class="defense-read-color" />
<b>Concentration (DEF)</b>
<input type="checkbox" name="attr_concentrationtalent1" value="2" />
<input type="checkbox" name="attr_concentrationtalent2" value="3" />
<input type="number" name="attr_concentration" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=def}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Constitution}} {{skill-roll=[[ 1d20!kh2 + [[ @{DEFMOD} + @{constitutiontalent1} + @{constitutiontalent2} + @{constitution} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_constitutioncheck'></button>
<input type="number" readonly name="attr_DEFMOD" class="defense-read-color" />
<b>Constitution (DEF)</b>
<input type="checkbox" name="attr_constitutiontalent1" value="2" />
<input type="checkbox" name="attr_constitutiontalent2" value="3" />
<input type="number" name="attr_constitution" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Diplomacy/Persuasion}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{diplomacytalent1} + @{diplomacytalent2} + @{diplomacy} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_diplomacycheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Diplomacy/Persuasion (SPDEF)</b>
<input type="checkbox" name="attr_diplomacytalent1" value="2" />
<input type="checkbox" name="attr_diplomacytalent2" value="3" />
<input type="number" name="attr_diplomacy" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Engineering/Operation}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{engineeringtalent1} + @{engineeringtalent2} + @{engineering} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_engineeringcheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>Engineering/Operation (SPATK)</b>
<input type="checkbox" name="attr_engineeringtalent1" value="2" />
<input type="checkbox" name="attr_engineeringtalent2" value="3" />
<input type="number" name="attr_engineering" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=History}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{historytalent1} + @{historytalent2} + @{history} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_historycheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>History (SPATK)</b>
<input type="checkbox" name="attr_historytalent1" value="2" />
<input type="checkbox" name="attr_historytalent2" value="3" />
<input type="number" name="attr_history" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Insight}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{insighttalent1} + @{insighttalent2} + @{insight} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_insightcheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Insight (SPDEF)</b>
<input type="checkbox" name="attr_insighttalent1" value="2" />
<input type="checkbox" name="attr_insighttalent2" value="3" />
<input type="number" name="attr_insight" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Investigate}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{investigatetalent1} + @{investigatetalent2} + @{investigate} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_investigatecheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>Investigate (SPATK)</b>
<input type="checkbox" name="attr_investigatetalent1" value="2" />
<input type="checkbox" name="attr_investigatetalent2" value="3" />
<input type="number" name="attr_investigate" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Medicine}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{medicinetalent1} + @{medicinetalent2} + @{medicine} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_medicinecheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>Medicine (SPATK)</b>
<input type="checkbox" name="attr_medicinetalent1" value="2" />
<input type="checkbox" name="attr_medicinetalent2" value="3" />
<input type="number" name="attr_medicine" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Nature}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{naturetalent1} + @{naturetalent2} + @{nature} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_naturecheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>Nature (SPATK)</b>
<input type="checkbox" name="attr_naturetalent1" value="2" />
<input type="checkbox" name="attr_naturetalent2" value="3" />
<input type="number" name="attr_nature" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Perception}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{perceptiontalent1} + @{perceptiontalent2} + @{perception} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_perceptioncheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Perception (SPDEF)</b>
<input type="checkbox" name="attr_perceptiontalent1" value="2" />
<input type="checkbox" name="attr_perceptiontalent2" value="3" />
<input type="number" name="attr_perception" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Perform}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{performtalent1} + @{performtalent2} + @{perform} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_performcheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Perform (SPDEF)</b>
<input type="checkbox" name="attr_performtalent1" value="2" />
<input type="checkbox" name="attr_performtalent2" value="3" />
<input type="number" name="attr_perform" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spdef}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Pokemon Handling}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDEFMOD} + @{handlingtalent1} + @{handlingtalent2} + @{handling} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_handlingcheck'></button>
<input type="number" readonly name="attr_SPDEFMOD" class="spdef-read-color" />
<b>Pokémon Handling (SPDEF)</b>
<input type="checkbox" name="attr_handlingtalent1" value="2" />
<input type="checkbox" name="attr_handlingtalent2" value="3" />
<input type="number" name="attr_handling" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spatk}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Programming}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPATKMOD} + @{programmingtalent1} + @{programmingtalent2} + @{programming} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_programmingcheck'></button>
<input type="number" readonly name="attr_SPATKMOD" class="spatk-read-color" />
<b>Programming (SPATK)</b>
<input type="checkbox" name="attr_programmingtalent1" value="2" />
<input type="checkbox" name="attr_programmingtalent2" value="3" />
<input type="number" name="attr_programming" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spd}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Sleight of Hand}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDMOD} + @{sleightofhandtalent1} + @{sleightofhandtalent2} + @{sleightofhand} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_sleightofhandcheck'></button>
<input type="number" readonly name="attr_SPDMOD" class="speed-read-color" />
<b>Sleight of Hand (SPD)</b>
<input type="checkbox" name="attr_sleightofhandtalent1" value="2" />
<input type="checkbox" name="attr_sleightofhandtalent2" value="3" />
<input type="number" name="attr_sleightofhand" value="0" />
<button type='roll'
value='&{template:skill-roll} {{base-attribute=spd}} {{character-id=@{character_id}}} {{character-name=@{character_name}}} {{skill-name=Stealth}} {{skill-roll=[[ 1d20!kh2 + [[ @{SPDMOD} + @{stealthtalent1} + @{stealthtalent2} + @{stealth} + ?{Temporary Bonus|0} ]] ]]}}'
name='roll_stealthcheck'></button>
<input type="number" readonly name="attr_SPDMOD" class="speed-read-color" />
<b>Stealth (SPD)</b>
<input type="checkbox" name="attr_stealthtalent1" value="2" />
<input type="checkbox" name="attr_stealthtalent2" value="3" />
<input type="number" name="attr_stealth" value="0" />
</div>
<textarea spellcheck="false" name="attr_inventory" class="inventory"
placeholder="Pokéballs, Berries, Medicine, Accessories, etc."></textarea>
</div>
<br />
<b>Origin Feature</b>
<div>
<div class="pokemon-move-info-header">
<input type="text" spellcheck="false" name="attr_originfeaturename" placeholder="Feature Name" />
<span><b>Feature Usage</b>
<input type="number" name="attr_origin_usage" value="0" />
<button name="act_incrementoriginusage" type="action">+</button>
<button name="act_resetoriginusage" type="action">Reset</button>
</span>
</div>
<textarea spellcheck="false" name="attr_originfeaturedesc" class="3row-textarea"
placeholder="Feature Description"></textarea>
</div>
<b>Class Features</b>
<fieldset class="repeating_features">
<div class="pokemon-move-info-header">
<input type="text" spellcheck="false" name="attr_classfeaturename" placeholder="Feature Name" />
<span><b>Feature Usage</b>
<input type="number" name="attr_feature_usage" value="0" />
<button name="act_incrementfeatureusage" type="action">+</button>
<button name="act_resetfeatureusage" type="action">Reset</button>
</span>
</div>
<textarea spellcheck="false" name="attr_classfeaturedesc" class="3row-textarea"
placeholder="Feature Description"></textarea>
</fieldset>
<b>Honors</b>
<textarea spellcheck="false" name="attr_honors"
placeholder="Gym Badges, Contest Ribbons, Recognitions, etc."></textarea>
</div>
<div class="tab-trainer">
<b>Owned Pokémon</b>
<textarea spellcheck="false" name="attr_ownedpokemon"
placeholder="All Pokémon owned by this Trainer"></textarea>
</div>
<div class="tab-pokemon tab-hybrid">
<b>Skills</b>
<textarea spellcheck="false" name="attr_pokemonskills" class="3row-textarea"
placeholder="Capabilities to be used both in and out of battle, such as Firestarter, Invisibility, and Telekinetic"></textarea>
<b>Stat Passives</b>
<textarea spellcheck="false" name="attr_statpassives" class="3row-textarea"
placeholder="Passives that affect Pokémon stats, such as Nasty Plot and Play Nice"></textarea>
<b>Other Passives</b>
<textarea spellcheck="false" name="attr_otherpassives" class="4row-textarea"
placeholder="Passives that do not affect stats, such as Cute Charm and Static"></textarea>
</div>
<b>Moves</b>
<fieldset class="repeating_moves">
<input type="text" name="attr_move_category_defense" class="hidden-setting"></input>
<input type="checkbox" name="attr_style-bug-move" class="hidden-setting color-setting-bug-move"></input>
<input type="checkbox" name="attr_style-dark-move" class="hidden-setting color-setting-dark-move"></input>
<input type="checkbox" name="attr_style-dragon-move" class="hidden-setting color-setting-dragon-move"></input>
<input type="checkbox" name="attr_style-electric-move" class="hidden-setting color-setting-electric-move"></input>
<input type="checkbox" name="attr_style-fairy-move" class="hidden-setting color-setting-fairy-move"></input>
<input type="checkbox" name="attr_style-fighting-move" class="hidden-setting color-setting-fighting-move"></input>
<input type="checkbox" name="attr_style-fire-move" class="hidden-setting color-setting-fire-move"></input>
<input type="checkbox" name="attr_style-flying-move" class="hidden-setting color-setting-flying-move"></input>
<input type="checkbox" name="attr_style-ghost-move" class="hidden-setting color-setting-ghost-move"></input>
<input type="checkbox" name="attr_style-grass-move" class="hidden-setting color-setting-grass-move"></input>
<input type="checkbox" name="attr_style-ground-move" class="hidden-setting color-setting-ground-move"></input>
<input type="checkbox" name="attr_style-ice-move" class="hidden-setting color-setting-ice-move"></input>
<input type="checkbox" name="attr_style-normal-move" class="hidden-setting color-setting-normal-move"></input>
<input type="checkbox" name="attr_style-poison-move" class="hidden-setting color-setting-poison-move"></input>
<input type="checkbox" name="attr_style-psychic-move" class="hidden-setting color-setting-psychic-move"></input>
<input type="checkbox" name="attr_style-rock-move" class="hidden-setting color-setting-rock-move"></input>
<input type="checkbox" name="attr_style-steel-move" class="hidden-setting color-setting-steel-move"></input>
<input type="checkbox" name="attr_style-water-move" class="hidden-setting color-setting-water-move"></input>
<div class="pokemon-move">
<div class="pokemon-move-info-header">
<input type="text" spellcheck="false" name="attr_move_name" placeholder="Move" />
<span><b>Move Usage</b>
<input type="number" name="attr_move_usage" value="0" />
<button name="act_incrementmoveusage" type="action">+</button>
<button name="act_resetmoveusage" type="action">Reset</button>
</span>
</div>
<div class="pokemon-move-info-grid-1">
<input type="text" spellcheck="false" name="attr_move_range" placeholder="Range"
class="move-text" />
<select name="attr_move_type" class="move-text">
<option value="bug">Bug</option>
<option value="dark">Dark</option>
<option value="dragon">Dragon</option>
<option value="electric">Electric</option>
<option value="fairy">Fairy</option>
<option value="fighting">Fighting</option>
<option value="fire">Fire</option>
<option value="flying">Flying</option>
<option value="ghost">Ghost</option>
<option value="grass">Grass</option>
<option value="ground">Ground</option>
<option value="ice">Ice</option>
<option value="normal" selected>Normal</option>
<option value="poison">Poison</option>
<option value="psychic">Psychic</option>
<option value="rock">Rock</option>
<option value="steel">Steel</option>
<option value="water">Water</option>
</select>
<select name="attr_move_category" class="move-text">
<option value="0">Category</option>
<option value="1">Attack</option>
<option value="2">Special Attack</option>
<option value="3">Effect</option>
</select>
<select name="attr_move_frequency" class="move-text">
<option value="">Frequency</option>
<option value="atwill">At-Will</option>
<!-- 1day and 3day are switched, I know, but if we fix it we mess up existing sheets -->
<option value="1day">3/day</option>
<option value="3day">1/day</option>
<option value="1combat">1/combat</option>
</select>
<span><b>Damage</b><input type="number" name="attr_move_dicenumber"
class="top-information damage-dice-count" value="0" /><select name="attr_damage_dice"
class="damage-dice">
<option value="4">d4</option>
<option value="6">d6</option>
<option value="8">d8</option>
<option value="10">d10</option>
<option value="12">d12</option>
<option value="20">d20</option>
</select></span>
</div>
<div class="pokemon-move-info-grid-2">
<span>
<b>Accuracy Modifier</b><input type="number" name="attr_move_acmod" class="top-information thin-number" value="0" />
</span>
<span>
<b>Critical Threshold</b><input type="number" name="attr_move_critthreshold" class="top-information thin-number" value="20" />
</span>
<span>
<b>STAB Damage</b><input type="number" name="attr_move_stabbonus" class="top-information thin-number" value="0" />
</span>
<span>
<b>Extra Damage</b><input type="number" name="attr_move_damagebonus" class="top-information thin-number" value="0" />
</span>
<span class="readonly-field">
<b>Total Damage:</b><input type="number" name="attr_move_totaldamage" readonly class="top-information thin-number" value="0" />
</span>
</div>
<div class="move-notes-roller">
<textarea spellcheck="false" name="attr_move_effect" placeholder="Additional Effects" class="3row-textarea"></textarea>
<button type='roll' value='&{template:move-roll} {{move-type=@{move_type}}} {{character-name=@{character_name}}} {{character-id=@{character_id}}} {{move-name=@{move_name}}} {{accuracy=[[ d20cs>@{move_critthreshold} + [[ [[ @{ATKMOD} * {{@{move_category}, 0}=1} + @{SPATKMOD} * {{@{move_category}, 0}=2} + @{SPDMOD} * {{@{move_category}, 0}=3} ]] + @{move_acmod} + ?{Temp Accuracy Bonus|0} ]] ]]}} {{target=@{move_category_defense}}} {{effectiveness=?{Effectiveness|Neutral, 0|Super Effective, 1|Extremely Effective, 2|Resisted, -1|Shielded, -2}}} {{effectiveness-roll=[[ 1d1 + 1 + ?{Effectiveness} ]]}} {{critical-damage=[[ ([[ @{move_dicenumber} + ?{Effectiveness} ]]) * @{damage_dice} + [[ @{move_totaldamage} + ?{Temp Damage Bonus|0} ]] ]]}} {{damage=[[ ([[@{move_dicenumber} + ?{Effectiveness}]])d@{damage_dice} + [[ @{move_totaldamage} + ?{Temp Damage Bonus}]] ]]}} {{notes=@{move_effect}}}'
name='roll-movetemplate' class='move-roller'>T</button>
</div>
</div>
</fieldset>
<b>Notes</b>
<textarea spellcheck="false" name="attr_notes"></textarea>
</div>
<!-- ROLL TEMPLATES -->
<div class="rolltemplates">
<rolltemplate class="sheet-rolltemplate-move-roll">
<div class="container sheet-rolltemplate-color-setting-{{move-type}}-move">
<table class="move-template">
<tr>
<th colspan="2">{{move-name}}</th>
</tr>
<tr>
<td colspan="2" class="subhead">[{{character-name}}](https://journal.roll20.net/character/{{character-id}}" name="name-link")</td>
</tr>
<!-- Accuracy Check -->
<tr>
<td class="label"><span>Accuracy Check:</span></td>
<td class="accuracy-roll">
{{accuracy}}
{{#target}}
<span class="targeted-defense">vs {{target}}</span>
{{/target}}
</td>
</tr>
<!-- Effectiveness -->
{{#^rollTotal() effectiveness-roll 2}}
<tr>
<!--<td class="label"><span>Effect:</span></td>-->
<td class="effectiveness-text" colspan="2">
<span>
<!-- Shielded -->
{{#rollTotal() effectiveness-roll 0}}
It was *really* ineffective...
{{/rollTotal() effectiveness-roll 0}}
<!-- Resisted -->
{{#rollTotal() effectiveness-roll 1}}
It wasn't very effective...
{{/rollTotal() effectiveness-roll 1}}
<!-- Super -->
{{#rollTotal() effectiveness-roll 3}}
The attack was super effective!
{{/rollTotal() effectiveness-roll 3}}
<!-- Extreme -->
{{#rollTotal() effectiveness-roll 4}}
The attack was extremely effective!
{{/rollTotal() effectiveness-roll 4}}
</span>
</td>
</tr>
{{/^rollTotal() effectiveness-roll 2}}
<!-- Damage Roll -->
<tr>
<td class="label"><span>{{move-type}} Damage:</span></td>
<td>
<span class="damage-roll {{effectiveness}}-effectiveness-color">
{{#rollWasCrit() accuracy}}
{{critical-damage}}
<span class="crit-damage-text {{effectiveness}}-effectiveness-text-color">
Critical Hit!
</span>
{{/rollWasCrit() accuracy}}
{{#^rollWasCrit() accuracy}}
{{damage}}
{{/^rollWasCrit() accuracy}}
</span>
</td>
</tr>
<!-- Additional Notes - if there are any -->
{{#notes}}
<tr>
<td class="notes-text" colspan="2"><span>{{notes}}</span></td>
</tr>
{{/notes}}
</table>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-skill-roll">
<div class="container sheet-rolltemplate-color-setting-{{base-attribute}}-skill">
<table class="skill-template">
<tr>
<th colspan="2">{{skill-name}}</th>
</tr>
<tr>
<td colspan="2" class="subhead">[{{character-name}}](https://journal.roll20.net/character/{{character-id}}" name="name-link")</td>
</tr>
<!-- Skill Check -->
<tr>
<td class="label"><span>Skill Check:</span></td>
<td class="skill-roll">{{skill-roll}}</td>
</tr>
</table>
</div>
</rolltemplate>
</div>
<!-- SCRIPTS -->
<script type="text/worker">
on("change:ATK sheet:opened", function() {
getAttrs(["ATK"], function(values) {
let atk = parseInt(values.ATK)||0;
let atkmod = Math.floor(atk/2);
setAttrs({
"ATKMOD": atkmod
});
});
});
on("change:DEF sheet:opened", function() {
getAttrs(["DEF"], function(values) {
let def = parseInt(values.DEF)||0;
let defmod = Math.floor(def/2);
setAttrs({
"DEFMOD": defmod
});
});
});
on("change:SPATK sheet:opened", function() {
getAttrs(["SPATK"], function(values) {
let spatk = parseInt(values.SPATK)||0;
let spatkmod = Math.floor(spatk/2);
setAttrs({
"SPATKMOD": spatkmod
});
});
});
on("change:SPDEF sheet:opened", function() {
getAttrs(["SPDEF"], function(values) {
let spdef = parseInt(values.SPDEF)||0;
let spdefmod = Math.floor(spdef/2);
setAttrs({
"SPDEFMOD": spdefmod
});
});
});
on("change:SPD sheet:opened", function() {
getAttrs(["SPD"], function(values) {
let spd = parseInt(values.SPD)||0;
let spdmod = Math.floor(spd/2);
let move = spd*5;
setAttrs({
"SPDMOD": spdmod,
"movement": move
});
});
});
types=["bug", "dark", "dragon", "electric", "fairy", "fighting", "fire", "flying", "ghost", "grass", "ground", "ice", "normal", "poison", "psychic", "rock", "steel", "water"]
on("change:type1 sheet:opened", function(event) {
getAttrs(["type1"] ,function(values) {
var typeAttrs = {};
var selectedType = values.type1;
types.forEach((type) => {
if(type == selectedType){
typeAttrs["style-"+type]="on";
} else {
typeAttrs["style-"+type]="off";
}
})
setAttrs(typeAttrs);
});
});
on("change:repeating_moves:move_type", function(event) {
getAttrs(["repeating_moves_move_type"] ,function(values) {
var typeAttrs = {};
var selectedType = values.repeating_moves_move_type;
types.forEach((type) => {
if(type == selectedType){
typeAttrs["repeating_moves_style-"+type+"-move"]="on";
} else {
typeAttrs["repeating_moves_style-"+type+"-move"]="off";
}
})
setAttrs(typeAttrs);
});
});
defenses=["", "Defense", "Special Defense", "Speed"];
on("sheet:opened", function (eventInfo) {
getSectionIDs("repeating_moves", function (idArray) {
const categories = idArray.map(id => `repeating_moves_${id}_move_category`);
getAttrs([...categories], function (values) {
const rows = categories.reduce((obj, rowName) => {
const cat = parseInt(values[rowName]) || 0;
const defense = defenses[cat];
obj[rowName + '_defense'] = defense;
return obj;
}, {});
if (rows) setAttrs(rows);
});
});
});
on("change:repeating_moves:move_category", function(event) {
getAttrs(["repeating_moves_move_name", "repeating_moves_move_category"], function(values) {
var attrs = {};
let cat = parseInt(values.repeating_moves_move_category) || 0;
attrs["repeating_moves_move_category_defense"] = defenses[cat];
setAttrs(attrs);
});
});
on("clicked:repeating_moves:incrementmoveusage", function() {
getAttrs(["repeating_moves_move_usage"], function(values) {
const currentusage = +values.repeating_moves_move_usage || 0;
const newusage = currentusage +1;
setAttrs({
repeating_moves_move_usage: newusage
});
});
});
on("clicked:repeating_moves:resetmoveusage", function() {
getAttrs(["repeating_moves_move_usage"], function(values) {
setAttrs({
repeating_moves_move_usage: 0
});
});
});
on("clicked:incrementoriginusage", function() {
getAttrs(["origin_usage"], function(values) {
const currentusage = +values.origin_usage || 0;
const newusage = currentusage +1;
setAttrs({
origin_usage: newusage
});
});
});
on("clicked:resetoriginusage", function() {
getAttrs(["origin_usage"], function(values) {
setAttrs({
origin_usage: 0
});
});
});
on("clicked:repeating_features:incrementfeatureusage", function() {
getAttrs(["repeating_features_feature_usage"], function(values) {
const currentusage = +values.repeating_features_feature_usage || 0;
const newusage = currentusage +1;
setAttrs({
repeating_features_feature_usage: newusage
});
});
});
on("clicked:repeating_features:resetfeatureusage", function() {
getAttrs(["repeating_features_feature_usage"], function(values) {
setAttrs({
repeating_features_feature_usage: 0
});
});
});
// Calculating the Move Damage Bonus
categoryDamageModifiers = ["", "ATKMOD", "SPATKMOD", ""];
on("change:ATK change:SPATK sheet:opened", function (eventInfo) {
// Get all the section IDs for each move
getSectionIDs("repeating_moves", function (idArray) {
// Get all the section IDs mapped into an array including the repeating_moves_ prefix, so we can read and set attributes correctly
const rowNames = idArray.map(id => `repeating_moves_${id}`);
// Create arrays of all the Category, Extra Bonus, and STAB Bonus attribute names of each move
const categories = idArray.map(id => `repeating_moves_${id}_move_category`);
const extraBonuses = idArray.map(id => `repeating_moves_${id}_move_damagebonus`);
const stabBonuses = idArray.map(id => `repeating_moves_${id}_move_stabbonus`);
// Get the ATK and SPATK modifier attributes, as well the values for each moves category, extra bonus, and stab bonus.
getAttrs([`ATKMOD`, `SPATKMOD`, ...categories, ...extraBonuses, ...stabBonuses], function (values) {
const rows = rowNames.reduce((obj, rowName) => {
// For each move, get the value of its relevant attributes stored as a local var - default to 0 for easier maths
const category = parseInt(values[rowName + `_move_category`]) || 0;
const extra = parseInt(values[rowName + '_move_damagebonus']) || 0;
const stab = parseInt(values[rowName + '_move_stabbonus']) || 0;
// Get the modifier for the category selected
const categoryModifier = parseInt(values[`${categoryDamageModifiers[category]}`]) || 0;
const total = categoryModifier + extra + stab;
// Assign the calculated damage bonus to the relevant move's total damage bonus attribute
obj[rowName + '_move_totaldamage'] = total;
return obj;
}, {});
if (rows) setAttrs(rows);
});
});
});
on("change:repeating_moves:move_category change:repeating_moves:move_damagebonus change:repeating_moves:move_stabbonus", function(eventInfo) {
getAttrs(["ATKMOD", "SPATKMOD", "repeating_moves_move_category", "repeating_moves_move_damagebonus", "repeating_moves_move_stabbonus"], function(values) {
const category = parseInt(values.repeating_moves_move_category) || 0;
const extra = parseInt(values.repeating_moves_move_damagebonus) || 0;
const stab = parseInt(values.repeating_moves_move_stabbonus) || 0;
const categoryModifier = parseInt(values[`${categoryDamageModifiers[category]}`]) || 0;
const total = categoryModifier + extra + stab;
setAttrs({
'repeating_moves_move_total_damage_bonus': total
});
});
});
</script>