356 lines
16 KiB
HTML
356 lines
16 KiB
HTML
<!--
|
|
EDITED by Gorthian
|
|
Version 1.0
|
|
Letzte Änderung 2022-05-0
|
|
|
|
GitHub https://github.com/Gorthian/Roll20_Space1889_CharacterSheet
|
|
Wiki https://github.com/Gorthian/Roll20_Space1889_CharacterSheet/wiki
|
|
Bugs & Issues https://github.com/Gorthian/Roll20_Space1889_CharacterSheet/issues
|
|
//-->
|
|
|
|
<!-- Sheet //-->
|
|
<div class="sheet-wrapper sheet-space1889">
|
|
<div class="sheet-content">
|
|
<div class="sheet-basics sheet-box">
|
|
<p><span class="sheet-label" data-i18n="name"></span><input type="text" name="attr_character_name" /></p>
|
|
<p><span class="sheet-label" data-i18n="archetype"></span><input type="text" name="attr_archetype" /></p>
|
|
<p><span class="sheet-label" data-i18n="motivation"></span><input type="text" name="attr_motivation" /></p>
|
|
</div>
|
|
<div class="sheet-primary-attributes sheet-box">
|
|
<h1><span data-i18n="primary-attributes"></h1>
|
|
<p><span class="sheet-label" data-i18n="constitution"></span><input type="number" name="attr_constitution" /><button type="roll" value="&{template:default} {{name=^{constitution} (@{character_name}) }} {{^{successes}=[[{(@{constitution}+@{constitution}+?{Mod|0})d6}>3]]}}" name="roll_constitution"></button></p>
|
|
<p><span class="sheet-label" data-i18n="dexterity"></span><input type="number" name="attr_dexterity" /><button type="roll" value="&{template:default} {{name=^{dexterity} (@{character_name}) }} {{^{successes}=[[{(@{dexterity}+@{dexterity}+?{Mod|0})d6}>3]]}}" name="roll_dexterity"></button></p>
|
|
<p><span class="sheet-label" data-i18n="strength"></span><input type="number" name="attr_strength" /><button type="roll" value="&{template:default} {{name=^{strength} (@{character_name}) }} {{^{successes}=[[{(@{strength}+@{strength}+?{Mod|0})d6}>3]]}}" name="roll_strength"></button></p>
|
|
<p><span class="sheet-label" data-i18n="charisma"></span><input type="number" name="attr_charisma" /><button type="roll" value="&{template:default} {{name=^{charisma} (@{character_name}) }} {{^{successes}=[[{(@{charisma}+@{charisma}+?{Mod|0})d6}>3]]}}" name="roll_charisma"></button></p>
|
|
<p><span class="sheet-label" data-i18n="intelligence"></span><input type="number" name="attr_intelligence" /><button type="roll" value="&{template:default} {{name=^{intelligence} (@{character_name}) }} {{^{successes}=[[{(@{intelligence}+@{intelligence}+?{Mod|0})d6}>3]]}}" name="roll_intelligence"></button></p>
|
|
<p><span class="sheet-label" data-i18n="willpower"></span><input type="number" name="attr_willpower" /><button type="roll" value="&{template:default} {{name=^{willpower} (@{character_name}) }} {{^{successes}=[[{(@{willpower}+@{willpower}+?{Mod|0})d6}>3]]}}" name="roll_willpower"></button></p>
|
|
</div>
|
|
<div class="sheet-secondary-attributes sheet-box">
|
|
<h1><span data-i18n="secondary-attributes"></h1>
|
|
<p><span class="sheet-label" data-i18n="size"></span><input type="number" name="attr_size-calc" readonly/><input type="number" name="attr_size-mod" /><input type="number" name="attr_size-sum" readonly/></p>
|
|
<p><span class="sheet-label" data-i18n="movement"></span><input type="number" name="attr_movement-calc" readonly/><input type="number" name="attr_movement-mod" /><input type="number" name="attr_movement-sum" readonly/></p>
|
|
<p><span class="sheet-label" data-i18n="perception"></span><input type="number" name="attr_perception-calc" readonly/><input type="number" name="attr_perception-mod" /><input type="number" name="attr_perception-sum" readonly/><button type="roll" value="&{template:default} {{name=^{perception} (@{character_name}) }} {{^{successes}=[[{(@{perception-sum}+?{Mod|0})d6}>3]]}}" name="roll_perception"></button></p>
|
|
<p><span class="sheet-label" data-i18n="initiative"></span><input type="number" name="attr_initiative-calc" readonly/><input type="number" name="attr_initiative-mod" /><input type="number" name="attr_initiative-sum" readonly/><button type="roll" value="&{template:default} {{name=^{initiative} (@{character_name}) }} {{^{successes}=[[{(@{initiative-sum}+?{Mod|0})d6}>3]]}}" name="roll_initiative"></button></p>
|
|
<p><span class="sheet-label" data-i18n="defense"></span><input type="number" name="attr_defense-calc" readonly/><input type="number" name="attr_defense-mod" /><input type="number" name="attr_defense-sum" readonly/><button type="roll" value="&{template:default} {{name=^{defense} (@{character_name}) }} {{^{successes}=[[{(@{defense-sum}+?{Mod|0})d6}>3]]}}" name="roll_defense"></button></p>
|
|
<p><span class="sheet-label" data-i18n="stunned"></span><input type="number" name="attr_stunned-calc" readonly/><input type="number" name="attr_stunned-mod" /><input type="number" name="attr_stunned-sum" readonly/></p>
|
|
</div>
|
|
<div class="sheet-style sheet-box">
|
|
<h1><span data-i18n="style"></h1>
|
|
<p><input type="number" name="attr_style" /></p>
|
|
</div>
|
|
<div class="sheet-health sheet-box">
|
|
<h1><span data-i18n="health"></h1>
|
|
<p><input type="number" name="attr_health_current" /> / <input type="number" name="attr_health_max" readonly/></p>
|
|
</div>
|
|
<div class="sheet-skills sheet-box">
|
|
<h1><span data-i18n="skills"></h1>
|
|
<fieldset class="repeating_skills">
|
|
<div class="sheet-skillentry">
|
|
<input type="text" name="attr_skill-name" value="" />
|
|
<select name="attr_skill-attribute">
|
|
<option value="constitution" data-i18n="constitution-short"></option>
|
|
<option value="dexterity" data-i18n="dexterity-short"></option>
|
|
<option value="strength" data-i18n="strength-short"></option>
|
|
<option value="charisma" data-i18n="charisma-short"></option>
|
|
<option value="intelligence" data-i18n="intelligence-short"></option>
|
|
<option value="willpower" data-i18n="willpower-short"></option>
|
|
</select>
|
|
+<input type="number" name="attr_skill-level" value="" />
|
|
=<input type="number" name="attr_skill-value" value="" readonly/>
|
|
(<input type="number" name="attr_skill-average" value="" readonly/>)
|
|
<button type="roll" value="&{template:default} {{name=@{skill-name} (@{character_name}) }} {{^{successes}=[[{(@{skill-value}+?{Mod|0})d6}>3]]}}" name="roll_skill"></button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-combat">
|
|
<h1><span data-i18n="combat"></h1>
|
|
<fieldset class="repeating_weapons">
|
|
<div class="sheet-weaponentry sheet-box">
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="weapon"></span><input type="text" name="attr_weapon-name" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="damage"></span>
|
|
<select name="attr_weapon-damage">
|
|
<option value="lethal" data-i18n="lethal"></option>
|
|
<option value="nonlethal" data-i18n="nonlethal"></option>
|
|
</select>
|
|
</div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="modifier"></span><input type="number" name="attr_weapon-modifier" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="attack"></span><input type="number" name="attr_weapon-attack" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="average"></span><input type="number" name="attr_weapon-average" value"" readonly/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="range"></span><input type="number" name="attr_weapon-range" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="capacity"></span><input type="number" name="attr_weapon-capacity" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="firerate"></span><input type="number" name="attr_weapon-firerate" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="speed"></span><input type="number" name="attr_weapon-speed" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="weight"></span><input type="number" name="attr_weapon-weight" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="ammo"></span><input type="number" name="attr_weapon-ammo" value""/></div>
|
|
<div class="sheet-weaponattribute"><span class="sheet-label" data-i18n="note"></span><input type="text" name="attr_weapon-note" value=""></div>
|
|
<button type="roll" value="&{template:default} {{name=@{weapon-name} (@{character_name})}} {{^{successes}=[[{(@{weapon-attack}+@{weapon-modifier}+?{Mod|0})d6}>3]]}} {{^{damage}=^{@{weapon-damage}}}}" name="roll_skill"></button>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-misc">
|
|
<div class="sheet-box">
|
|
<h2><span data-i18n="talents"></span></h2>
|
|
<fieldset class="repeating_talents">
|
|
<input type="text" name="attr_talent-name" value="">
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-box">
|
|
<h2><span data-i18n="ressources"></span></h2>
|
|
<fieldset class="repeating_ressources">
|
|
<input type="text" name="attr_ressources-name" value="">
|
|
</fieldset>
|
|
</div>
|
|
<div class="sheet-box">
|
|
<h2><span data-i18n="weaknesses"></span></h2>
|
|
<fieldset class="repeating_weaknesses">
|
|
<input type="text" name="attr_weakness-name" value="">
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sheet-footer">
|
|
Created by Gorthian
|
|
<br/>More Infos: https://github.com/Gorthian/Roll20_Space1889_CharacterSheet
|
|
</div>
|
|
</div>
|
|
|
|
<!-- SheetWorker //-->
|
|
<script type="text/worker">
|
|
/* Globale Variablen -- Start */
|
|
const aAttributes = ["constitution","dexterity","strength","charisma","intelligence","wilpower"];
|
|
const aSecondaryAttributes = ["size","movement","perception","initiative","defense","stunned"];
|
|
|
|
/* Event-Listener -- Start */
|
|
on("sheet:opened", function () {
|
|
recalcValues();
|
|
});
|
|
|
|
/* Änderungen an Attributen */
|
|
aAttributes.forEach(sAttribute => {
|
|
on(`change:${sAttribute}`, function() {
|
|
console.log("[CHANGE] " + sAttribute);
|
|
changedAttribute(sAttribute);
|
|
});
|
|
});
|
|
|
|
/* Änderungen an sekundären Attributen */
|
|
aSecondaryAttributes.forEach(sAttribute => {
|
|
on(`change:${sAttribute}-mod`, function() {
|
|
console.log("[CHANGE] " + sAttribute);
|
|
changedAttribute(sAttribute);
|
|
});
|
|
});
|
|
|
|
/* Änderungen an Talenten */
|
|
on("change:repeating_skills:skill-attribute change:repeating_skills:skill-level", function() {
|
|
console.log("[CHANGE] Skill");
|
|
changedSkill();
|
|
});
|
|
|
|
/* Änderungen an Waffenwerten */
|
|
on("change:repeating_weapons:weapon-attack", function() {
|
|
console.log("[CHANGE] Weapon");
|
|
changedWeapon();
|
|
});
|
|
|
|
/* Event-Listener -- Ende */
|
|
|
|
/* Funktionen -- Start */
|
|
function recalcValues() {
|
|
console.log("[recalcValues]");
|
|
aAttributes.forEach(sAttribute => {
|
|
changedAttribute(sAttribute);
|
|
});
|
|
};
|
|
|
|
function changedSkill() {
|
|
console.log("[changedSkill]");
|
|
|
|
getAttrs(["repeating_skills_skill-attribute","repeating_skills_skill-level"], function(values) {
|
|
let sAttribute = values["repeating_skills_skill-attribute"];
|
|
let iSkillLevel = parseInt(values["repeating_skills_skill-level"]||0);
|
|
|
|
getAttrs([sAttribute], function(values) {
|
|
let iAttributeValue = parseInt(values[sAttribute]||0);
|
|
let iSkillSum = iAttributeValue + iSkillLevel;
|
|
let iSkillAverage = Math.floor(iSkillSum/2);
|
|
|
|
aAttributes["repeating_skills_skill-value"] = iSkillSum;
|
|
aAttributes["repeating_skills_skill-average"] = iSkillAverage;
|
|
setAttrs(aAttributes);
|
|
});
|
|
});
|
|
}
|
|
|
|
function changedWeapon() {
|
|
console.log("[changedWeapon]");
|
|
|
|
getAttrs(["repeating_weapons_weapon-attack"], function(values) {
|
|
let iAttack = parseInt(values["repeating_weapons_weapon-attack"]||0);
|
|
let iAttackAverage = Math.floor(iAttack/2);
|
|
|
|
aAttributes["repeating_weapons_weapon-average"] = iAttackAverage;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function changedAttribute(sAttribute) {
|
|
console.log("[changedAttribute] " + sAttribute);
|
|
|
|
getAttrs([sAttribute], function (values){
|
|
let iAttribute = parseInt(values[sAttribute]);
|
|
let aAttributes = {};
|
|
|
|
aAttributes[sAttribute] = iAttribute;
|
|
setAttrs(aAttributes);
|
|
|
|
switch (sAttribute) {
|
|
case "constitution":
|
|
recalcDefense();
|
|
recalcStunned();
|
|
recalcHealth();
|
|
break;
|
|
case "dexterity":
|
|
recalcMovement();
|
|
recalcInitiative();
|
|
recalcDefense();
|
|
break;
|
|
case "strength":
|
|
recalcMovement();
|
|
break;
|
|
case "charisma":
|
|
break;
|
|
case "intelligence":
|
|
recalcPerception();
|
|
recalcInitiative();
|
|
break;
|
|
case "willpower":
|
|
recalcPerception();
|
|
recalcHealth();
|
|
break;
|
|
case "size":
|
|
recalcSize();
|
|
recalcDefense();
|
|
recalcHealth();
|
|
break;
|
|
case "movement":
|
|
recalcMovement();
|
|
break;
|
|
case "perception":
|
|
recalcPerception();
|
|
break;
|
|
case "initiative":
|
|
recalcInitiative();
|
|
break;
|
|
case "defense":
|
|
recalcDefense();
|
|
break;
|
|
case "stunned":
|
|
recalcStunned();
|
|
break;
|
|
default:
|
|
}
|
|
});
|
|
}
|
|
|
|
function recalcSize() {
|
|
console.log("[recalcSize]");
|
|
getAttrs(["size-mod"], function (values){
|
|
let iSizeMod = parseInt(values["size-mod"]||0);
|
|
let iSizeSum = iSizeMod;
|
|
|
|
aAttributes["size-sum"] = iSizeSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcMovement() {
|
|
console.log("[recalcMovement]");
|
|
getAttrs(["strength","dexterity","movement-mod"], function (values){
|
|
let iStrength = parseInt(values["strength"]||0);
|
|
let iDexterity = parseInt(values["dexterity"]||0);
|
|
let iMovementMod = parseInt(values["movement-mod"]||0);
|
|
let iMovementCalc = iStrength + iDexterity;
|
|
let iMovementSum = iMovementCalc + iMovementMod;
|
|
|
|
aAttributes["movement-calc"] = iMovementCalc;
|
|
aAttributes["movement-sum"] = iMovementSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcPerception() {
|
|
console.log("[recalcPerception]");
|
|
getAttrs(["intelligence","willpower","perception-mod"], function (values){
|
|
let iIntelligence = parseInt(values["intelligence"]||0);
|
|
let iWillpower = parseInt(values["willpower"]||0);
|
|
let iPerceptionMod = parseInt(values["perception-mod"]||0);
|
|
let iPerceptionCalc = iIntelligence + iWillpower;
|
|
let iPerceptionSum = iPerceptionCalc + iPerceptionMod;
|
|
|
|
aAttributes["perception-calc"] = iPerceptionCalc;
|
|
aAttributes["perception-sum"] = iPerceptionSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcInitiative() {
|
|
console.log("[recalcInitiative]");
|
|
getAttrs(["intelligence","dexterity","initiative-mod"], function (values){
|
|
let iIntelligence = parseInt(values["intelligence"]||0);
|
|
let iDexterity = parseInt(values["dexterity"]||0);
|
|
let iInitiativeMod = parseInt(values["initiative-mod"]||0);
|
|
let iInitiativeCalc = iIntelligence + iDexterity;
|
|
let iInitiativeSum = iInitiativeCalc + iInitiativeMod;
|
|
|
|
aAttributes["initiative-calc"] = iInitiativeCalc;
|
|
aAttributes["initiative-sum"] = iInitiativeSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcDefense() {
|
|
console.log("[recalcDefense]");
|
|
getAttrs(["constitution","dexterity","size-sum","defense-mod"], function (values){
|
|
let iConstitution = parseInt(values["constitution"]||0);
|
|
let iDexterity = parseInt(values["dexterity"]||0);
|
|
let iSize = parseInt(values["size-sum"]||0);
|
|
let iDefenseMod = parseInt(values["defense-mod"]||0);
|
|
let iDefenseCalc = iConstitution + iDexterity - iSize;
|
|
let iDefenseSum = iDefenseCalc + iDefenseMod;
|
|
|
|
aAttributes["defense-calc"] = iDefenseCalc;
|
|
aAttributes["defense-sum"] = iDefenseSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcStunned() {
|
|
console.log("[recalcStunned]");
|
|
getAttrs(["constitution","stunned-mod"], function (values){
|
|
let iConstitution = parseInt(values["constitution"]||0);
|
|
let iStunnedMod = parseInt(values["stunned-mod"]||0);
|
|
let iStunnedCalc = iConstitution;
|
|
let iStunnedSum = iStunnedCalc + iStunnedMod;
|
|
|
|
aAttributes["stunned-calc"] = iStunnedCalc;
|
|
aAttributes["stunned-sum"] = iStunnedSum;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
function recalcHealth() {
|
|
console.log("[recalcHealth]");
|
|
getAttrs(["constitution","willpower","size-sum"], function (values){
|
|
let iConstitution = parseInt(values["constitution"]||0);
|
|
let iWillpower = parseInt(values["willpower"]||0);
|
|
let iSize = parseInt(values["size-sum"]||0);
|
|
let iHealth = iConstitution + iWillpower + iSize;
|
|
|
|
aAttributes["health_max"] = iHealth;
|
|
setAttrs(aAttributes);
|
|
});
|
|
}
|
|
|
|
/* Funktionen -- Ende */
|
|
</script> |