mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 11:42:29 +00:00
508 lines
17 KiB
HTML
508 lines
17 KiB
HTML
<!--
|
|
Basic Fantasy Role-Playing Game Character Sheet
|
|
-->
|
|
|
|
<div class=bfrpgsheet>
|
|
|
|
<div class='floater'>
|
|
<label>Name</label>
|
|
<input type=text width=50 class='wide' name="attr_name" />
|
|
<br>
|
|
<label>Race</label>
|
|
<input type=text width=20 class='wide' name="attr_race" />
|
|
<br>
|
|
<label>Class</label>
|
|
<input type=text width=20 class='medium' name="attr_class" />
|
|
<label>Level</label>
|
|
<input type=number width=5 name="attr_level" />
|
|
</div>
|
|
|
|
<div class='floater'>
|
|
<label class='medium'>Gender</label>
|
|
<input type=text width=10 class='narrow' name="attr_gender" />
|
|
<label class='basic'>Age</label>
|
|
<input type=number width=10 class=shortnum name="attr_age" />
|
|
<br>
|
|
<label class='medium'>Height</label>
|
|
<input type=text width=10 class=medium name="attr_height" />
|
|
<br>
|
|
<label class='medium'>Weight</label>
|
|
<input type=text width=10 class=medium name="attr_weight" />
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class='floater'>
|
|
<div class='attrgrid'>
|
|
|
|
<div>
|
|
<label>Attribute</label>
|
|
</div>
|
|
<div>
|
|
<label>Value</label>
|
|
</div>
|
|
<div>
|
|
<label>Bonus</label>
|
|
</div>
|
|
|
|
<div>
|
|
<label>Strength</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_STR" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_STRbonus" />
|
|
</div>
|
|
|
|
<div>
|
|
<label>Intelligence</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_INT" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_INTbonus" />
|
|
</div>
|
|
|
|
<div>
|
|
<label>Wisdom</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_WIS" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_WISbonus" />
|
|
</div>
|
|
|
|
<div>
|
|
<label>Dexterity</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_DEX" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_DEXbonus" />
|
|
</div>
|
|
|
|
<div>
|
|
<label>Constitution</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_CON" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_CONbonus" />
|
|
</div>
|
|
|
|
<div>
|
|
<label>Charisma</label>
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_CHA" class=shortnum />
|
|
</div>
|
|
<div>
|
|
<input type=number width=5 class=fillbox name="attr_CHAbonus" />
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class='floater'>
|
|
|
|
<label>Combat</label><br>
|
|
|
|
<label>AC</label>
|
|
<input name="attr_ac" style="width: 14em;" type="text"><br>
|
|
|
|
<label>HP</label>
|
|
<input name="attr_hp_max" style="width: 7em;" type="text">
|
|
<input name="attr_hp" style="width: 6em;" type="text"><br>
|
|
|
|
<label>AB</label>
|
|
<input name="attr_ab_normal" style="width: 14em;" type="text"><br>
|
|
|
|
<label>Melee</label>
|
|
<input name="attr_ab_melee" class="narrow" type="number" />
|
|
<button type=roll value="/roll 1d20+@{ab_melee}+@{combat_adjust}"></button>
|
|
+<input name="attr_combat_adjust" class="narrow" type="number"><br>
|
|
|
|
<label>Missile</label>
|
|
<input name="attr_ab_missile" class="narrow" type="number" />
|
|
<button type=roll value="/roll 1d20+@{ab_missile}+@{combat_adjust}"></button><br>
|
|
|
|
<label>Move</label>
|
|
<input name="attr_movement" class="medium" type="text">
|
|
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class=weapons>
|
|
<label>Weapons</label>
|
|
<div class=weaponsblock>
|
|
<span><label>Name</label></span>
|
|
<span><label>Total AB</label></span>
|
|
<span><label>Damage</label></span>
|
|
<span><label>Range</label></span>
|
|
<span><label>Notes</label></span>
|
|
</div>
|
|
<fieldset class=repeating_weapons>
|
|
<div class=weaponsblock>
|
|
<span><input type=text name=attr_weaponname /></td></span>
|
|
<span>
|
|
<input type=text name=attr_weaponab class=weaponab />
|
|
<button type=roll value="/roll 1d20+@{weaponab}+@{combat_adjust}"></button>
|
|
</span>
|
|
<span>
|
|
<input type=text name=attr_weapondamage class=weaponab />
|
|
<button type=roll value="/roll @{weapondamage}"></button>
|
|
</span>
|
|
<span><input type=text name=attr_weaponrange /></span>
|
|
<span><input type=text name=attr_weaponnotes /></span>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class='floater'>
|
|
|
|
<div>
|
|
<label>Equipment</label>
|
|
<br>
|
|
<textarea name="attr_equipment"></textarea>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class='floater'>
|
|
|
|
<div>
|
|
<label>Money</label>
|
|
<br>
|
|
<textarea name="attr_money"></textarea>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div class='floater'>
|
|
|
|
<div>
|
|
<label class=wide>Experience</label>
|
|
<br>
|
|
<label class=wide>Current XP</label>
|
|
<input name="attr_currentxp" type="text" class=medium>
|
|
<br>
|
|
<label class=wide>XP for Next Level</label>
|
|
<input name="attr_xpnextlevel" type="text" class=medium>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div>
|
|
<label class=wide>Thief Abilities</label>
|
|
<input type=checkbox name="attr_showthiefabilities" class=showthiefabilities value=1 />
|
|
<br>
|
|
<div class=thiefabilitiesblock>
|
|
<label class=wide>Open Locks</label>
|
|
<input name="attr_openlocks" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{openlocks}"></button>
|
|
<br>
|
|
<label class=wide>Remove Traps</label>
|
|
<input name="attr_removetraps" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{removetraps}"></button>
|
|
<br>
|
|
<label class=wide>Pick Pockets</label>
|
|
<input name="attr_pickpockets" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{pickpockets}"></button>
|
|
<br>
|
|
<label class=wide>Move Silently</label>
|
|
<input name="attr_movesilently" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{movesilently}"></button>
|
|
<br>
|
|
<label class=wide>Climb Walls</label>
|
|
<input name="attr_climbwalls" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{climbwalls}"></button>
|
|
<br>
|
|
<label class=wide>Hide</label>
|
|
<input name="attr_hide" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{hide}"></button>
|
|
<br>
|
|
<label class=wide>Listen</label>
|
|
<input name="attr_listen" type="text" class=narrow>
|
|
<button type=roll value="/roll 1d100<@{listen}"></button>
|
|
</div>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div>
|
|
<label>Spells</label>
|
|
<input type=checkbox name="attr_showspells" class=showspells value=1 />
|
|
<br>
|
|
<div class=spellsblock>
|
|
<label>Level</label>
|
|
<span class=spellcolumn><label class=basic>1</label></span>
|
|
<span class=spellcolumn><label class=basic>2</label></span>
|
|
<span class=spellcolumn><label class=basic>3</label></span>
|
|
<span class=spellcolumn><label class=basic>4</label></span>
|
|
<span class=spellcolumn><label class=basic>5</label></span>
|
|
<span class=spellcolumn><label class=basic>6</label></span>
|
|
<br>
|
|
|
|
<label>Number</label>
|
|
<span class=spellcolumn><input type="number" name="attr_level1spells" class='shortnum'></span>
|
|
<span class=spellcolumn><input type="number" name="attr_level2spells" class='shortnum spellcolumn'></span>
|
|
<span class=spellcolumn><input type="number" name="attr_level3spells" class='shortnum spellcolumn'></span>
|
|
<span class=spellcolumn><input type="number" name="attr_level4spells" class='shortnum spellcolumn'></span>
|
|
<span class=spellcolumn><input type="number" name="attr_level5spells" class='shortnum spellcolumn'></span>
|
|
<span class=spellcolumn><input type="number" name="attr_level6spells" class='shortnum spellcolumn'></span>
|
|
<br>
|
|
|
|
<textarea name="attr_spells"></textarea>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class='floater'>
|
|
|
|
<div>
|
|
<label class=extrawide>Saving Throws</label>
|
|
<br>
|
|
<label class=extrawide>Death Ray or Poison</label>
|
|
<input name="attr_deathrayorpoison" type="number" class=narrow>
|
|
<button type=roll value="/roll 1d20>@{deathrayorpoison}"></button>
|
|
<br>
|
|
<label class=extrawide>Magic Wands</label>
|
|
<input name="attr_magicwands" type="number" class=narrow>
|
|
<button type=roll value="/roll 1d20>@{magicwands}"></button>
|
|
<br>
|
|
<label class=extrawide>Paralysis or Petrification</label>
|
|
<input name="attr_paralysispetrification" type="number" class=narrow>
|
|
<button type=roll value="/roll 1d20>@{paralysispetrification}"></button>
|
|
<br>
|
|
<label class=extrawide>Dragon Breath</label>
|
|
<input name="attr_dragonbreath" type="number" class=narrow>
|
|
<button type=roll value="/roll 1d20>@{dragonbreath}"></button>
|
|
<br>
|
|
<label class=extrawide>Rods, Staves, and Spells</label>
|
|
<input name="attr_rodsstavesspells" type="number" class=narrow>
|
|
<button type=roll value="/roll 1d20>@{rodsstavesspells}"></button>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div>
|
|
<label class=extrawide>Turn Undead</label>
|
|
<input type=checkbox name="attr_showturnundead" class=showturnundead value=1 />
|
|
<div class=turnundeadblock>
|
|
<label class=extrawide>Skeleton</label>
|
|
<input name="attr_turnskeleton" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnskeleton}"></button>
|
|
<br>
|
|
<label class=extrawide>Zombie</label>
|
|
<input name="attr_turnzombie" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnzombie}"></button>
|
|
<br>
|
|
<label class=extrawide>Ghoul</label>
|
|
<input name="attr_turnghoul" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnghoul}"></button>
|
|
<br>
|
|
<label class=extrawide>Wight</label>
|
|
<input name="attr_turnwight" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnwight}"></button>
|
|
<br>
|
|
<label class=extrawide>Wraith</label>
|
|
<input name="attr_turnwraith" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnwraith}"></button>
|
|
<br>
|
|
<label class=extrawide>Mummy</label>
|
|
<input name="attr_turnmummy" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnmummy}"></button>
|
|
<br>
|
|
<label class=extrawide>Spectre</label>
|
|
<input name="attr_turnspectre" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnspectre}"></button>
|
|
<br>
|
|
<label class=extrawide>Vampire</label>
|
|
<input name="attr_turnvampire" type="number" class=narrow />
|
|
<button type=roll value="/roll 1d20>@{turnvampire}"></button>
|
|
</div>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<div>
|
|
<label class=wide>Notes</label>
|
|
<br>
|
|
<textarea name="attr_notes"></textarea>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<b>Basic Fantasy RPG Character Sheet for Roll20</b> Release 3
|
|
|
|
</div>
|
|
|
|
<script type="text/worker">
|
|
|
|
// following two data structures are specifically for importing data from the expanded character sheet.
|
|
// this is necessarily an incomplete process but should get the most important bits, sadly excluding
|
|
// equipment and treasure.
|
|
|
|
var newfields = [
|
|
"charisma", "charisma_mod", "constitution", "constitution_mod", "dexterity",
|
|
"dexterity_mod", "intelligence", "intelligence_mod", "strength", "strength_mod",
|
|
"wisdom", "wisdom_mod", "ab", "AC", "age", "class", "CWskill_rank",
|
|
"current_xp", "save_death_ray", "save_dragons_breath", "height", "Hskill_rank",
|
|
"HP", "HP_max", "level", "spell_slots_l1", "spell_slots_l2", "spell_slots_l3",
|
|
"spell_slots_l4", "spell_slots_l5", "spell_slots_l6", "Lskill_rank",
|
|
"save_magic_wand", "move_encounter", "MSskill_rank", "character_name",
|
|
"OL_skill_rank", "save_paralysis", "PPskill_rank", "race", "RTskill_rank",
|
|
"save_spell", "turnghoulvalue", "turnmummyvalue", "turnskeletonvalue",
|
|
"turnspectrevalue", "turnvampirevalue", "turnwightvalue", "turnwraithvalue",
|
|
"turnzombievalue", "weight", "xp_next_level"
|
|
];
|
|
|
|
fieldmap = {
|
|
"CHA": "charisma",
|
|
"CHAbonus": "charisma_mod",
|
|
"CON": "constitution",
|
|
"CONbonus": "constitution_mod",
|
|
"DEX": "dexterity",
|
|
"DEXbonus": "dexterity_mod",
|
|
"INT": "intelligence",
|
|
"INTbonus": "intelligence_mod",
|
|
"STR": "strength",
|
|
"STRbonus": "strength_mod",
|
|
"WIS": "wisdom",
|
|
"WISbonus": "wisdom_mod",
|
|
"ab_normal": "ab",
|
|
"ac": "AC",
|
|
"age": "age",
|
|
"class": "class",
|
|
"climbwalls": "CWskill_rank",
|
|
"currentxp": "current_xp",
|
|
"deathrayorpoison": "save_death_ray",
|
|
"dragonbreath": "save_dragons_breath",
|
|
"height": "height",
|
|
"hide": "Hskill_rank",
|
|
"hp": "HP",
|
|
"hp_max": "HP_max",
|
|
"level": "level",
|
|
"level1spells": "spell_slots_l1",
|
|
"level2spells": "spell_slots_l2",
|
|
"level3spells": "spell_slots_l3",
|
|
"level4spells": "spell_slots_l4",
|
|
"level5spells": "spell_slots_l5",
|
|
"level6spells": "spell_slots_l6",
|
|
"listen": "Lskill_rank",
|
|
"magicwands": "save_magic_wand",
|
|
"movement": "move_encounter",
|
|
"movesilently": "MSskill_rank",
|
|
"name": "character_name",
|
|
"openlocks": "OL_skill_rank",
|
|
"paralysispetrification": "save_paralysis",
|
|
"pickpockets": "PPskill_rank",
|
|
"race": "race",
|
|
"removetraps": "RTskill_rank",
|
|
"rodsstavesspells": "save_spell",
|
|
"turnghoul": "turnghoulvalue",
|
|
"turnmummy": "turnmummyvalue",
|
|
"turnskeleton": "turnskeletonvalue",
|
|
"turnspectre": "turnspectrevalue",
|
|
"turnvampire": "turnvampirevalue",
|
|
"turnwight": "turnwightvalue",
|
|
"turnwraith": "turnwraithvalue",
|
|
"turnzombie": "turnzombievalue",
|
|
"weight": "weight",
|
|
"xpnextlevel": "xp_next_level"
|
|
};
|
|
|
|
const ability_table = {
|
|
3: "-3",
|
|
4: "-2",
|
|
5: "-2",
|
|
6: "-1",
|
|
7: "-1",
|
|
8: "-1",
|
|
9: "+0",
|
|
10: "+0",
|
|
11: "+0",
|
|
12: "+0",
|
|
13: "+1",
|
|
14: "+1",
|
|
15: "+1",
|
|
16: "+2",
|
|
17: "+2",
|
|
18: "+3"
|
|
};
|
|
|
|
// getting "unexpanded" here to check for expanded sheet conversion
|
|
const scores = [ "unexpanded", "STR", "INT", "WIS", "DEX", "CON", "CHA" ];
|
|
|
|
var updatesheet = function() {
|
|
getAttrs([ "STRbonus", "DEXbonus", "ab_normal" ], function(values) {
|
|
var AB = parseInt(values["ab_normal"]);
|
|
updates = {
|
|
"ab_melee": parseInt(values["STRbonus"]) + AB,
|
|
"ab_missile": parseInt(values["DEXbonus"]) + AB
|
|
};
|
|
setAttrs(updates, "silent");
|
|
});
|
|
}
|
|
|
|
on("sheet:opened", function () {
|
|
var updates = {};
|
|
getAttrs(scores, function(values) {
|
|
if(values["unexpanded"] != '1') {
|
|
// need to update from expanded sheet
|
|
getAttrs(newfields, function(values) {
|
|
var updates = { "unexpanded": "1" };
|
|
for(k of Object.keys(fieldmap)) {
|
|
var v = values[fieldmap[k]];
|
|
if(v != undefined && (v+"") != "") {
|
|
updates[k] = values[fieldmap[k]] + "";
|
|
}
|
|
}
|
|
setAttrs(updates);
|
|
});
|
|
|
|
} else {
|
|
for(score in values) {
|
|
var bonus = score + "bonus";
|
|
var value = ability_table[parseInt(values[score])];
|
|
updates[bonus] = parseInt(value);
|
|
}
|
|
setAttrs(updates, "silent");
|
|
updatesheet();
|
|
}
|
|
});
|
|
});
|
|
|
|
on("change:STR change:INT change:WIS change:DEX change:CON change:CHA", function(ev) {
|
|
var score = ev.sourceAttribute.toUpperCase();
|
|
var bonus = score + "bonus";
|
|
var updates = {};
|
|
getAttrs([ score ], function(values) {
|
|
updates[bonus] = parseInt(ability_table[parseInt(values[score])]);
|
|
setAttrs(updates, "silent");
|
|
updatesheet();
|
|
});
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
<!-- end of sheet -->
|
|
|
|
|
|
|
|
|