Files
roll20-character-sheets-tester/Space1889/space1889.html
T
Gorthian 4033bf6f55 V1
Version1
2022-05-08 14:55:00 +02:00

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>