Files
roll20-character-sheets/Godbound/Godbound.html
T

1596 lines
69 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script type="text/worker">
/* ---- BEGIN: TheAaronSheet.js ---- */
// Github: https://github.com/shdwjk/TheAaronSheet/blob/master/TheAaronSheet.js
// By: The Aaron, Arcane Scriptomancer
// Contact: https://app.roll20.net/users/104025/the-aaron
var TAS = TAS || (function(){
'use strict';
var version = '0.2.4',
lastUpdate = 1457098091,
loggingSettings = {
debug: {
key: 'debug',
title: 'DEBUG',
color: {
bgLabel: '#7732A2',
label: '#F2EF40',
bgText: '#FFFEB7',
text: '#7732A2'
}
},
error: {
key: 'error',
title: 'Error',
color: {
bgLabel: '#C11713',
label: 'white',
bgText: '#C11713',
text: 'white'
}
},
warn: {
key: 'warn',
title: 'Warning',
color: {
bgLabel: '#F29140',
label: 'white',
bgText: '#FFD8B7',
text: 'black'
}
},
info: {
key: 'info',
title: 'Info',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
notice: {
key: 'notice',
title: 'Notice',
color: {
bgLabel: '#33C133',
label: 'white',
bgText: '#ADF1AD',
text: 'black'
}
},
log: {
key: 'log',
title: 'Log',
color: {
bgLabel: '#f2f240',
label: 'black',
bgText: '#ffff90',
text: 'black'
}
},
callstack: {
key: 'TAS',
title: 'function',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#B3B2EB',
text: 'black'
}
},
callstack_async: {
key: 'TAS',
title: 'ASYNC CALL',
color: {
bgLabel: '#413FA9',
label: 'white',
bgText: '#413FA9',
text: 'white'
}
},
TAS: {
key: 'TAS',
title: 'TAS',
color: {
bgLabel: 'grey',
label: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)',
bgText: 'grey',
text: 'black;background:linear-gradient(#304352,#d7d2cc,#d7d2cc,#d7d2cc,#304352)'
}
}
},
config = {
debugMode: false,
logging: {
log: true,
notice: true,
info: true,
warn: true,
error: true,
debug: false
}
},
callstackRegistry = [],
queuedUpdates = {}, //< Used for delaying saves till the last momment.
complexType = function(o){
switch(typeof o){
case 'string':
return 'string';
case 'boolean':
return 'boolean';
case 'number':
return (_.isNaN(o) ? 'NaN' : (o.toString().match(/\./) ? 'decimal' : 'integer'));
case 'function':
return 'function: '+(o.name ? o.name+'()' : '(anonymous)');
case 'object':
return (_.isArray(o) ? 'array' : (_.isArguments(o) ? 'arguments' : ( _.isNull(o) ? 'null' : 'object')));
default:
return typeof o;
}
},
dataLogger = function(primaryLogger,secondaryLogger,data){
_.each(data,function(m){
var type = complexType(m);
switch(type){
case 'string':
primaryLogger(m);
break;
case 'undefined':
case 'null':
case 'NaN':
primaryLogger('['+type+']');
break;
case 'number':
case 'not a number':
case 'integer':
case 'decimal':
case 'boolean':
primaryLogger('['+type+']: '+m);
break;
default:
primaryLogger('['+type+']:=========================================');
secondaryLogger(m);
primaryLogger('=========================================================');
break;
}
});
},
colorLog = function(options){
var coloredLoggerFunction,
key = options.key,
label = options.title || 'TAS',
lBGColor = (options.color && options.color.bgLabel) || 'blue',
lTxtColor = (options.color && options.color.label) || 'white',
mBGColor = (options.color && options.color.bgText) || 'blue',
mTxtColor = (options.color && options.color.text) || 'white';
coloredLoggerFunction = function(message){
console.log(
'%c '+label+': %c '+message + ' ',
'background-color: '+lBGColor+';color: '+lTxtColor+'; font-weight:bold;',
'background-color: '+mBGColor+';color: '+mTxtColor+';'
);
};
return function(){
if('TAS'===key || config.logging[key]){
dataLogger(coloredLoggerFunction,function(m){console.log(m);},_.toArray(arguments));
}
};
},
logDebug = colorLog(loggingSettings.debug),
logError = colorLog(loggingSettings.error),
logWarn = colorLog(loggingSettings.warn),
logInfo = colorLog(loggingSettings.info),
logNotice = colorLog(loggingSettings.notice),
logLog = colorLog(loggingSettings.log),
log = colorLog(loggingSettings.TAS),
logCS = colorLog(loggingSettings.callstack),
logCSA = colorLog(loggingSettings.callstack_async),
registerCallstack = function(callstack,label){
var idx=_.findIndex(callstackRegistry,function(o){
return (_.difference(o.stack,callstack).length === _.difference(callstack,o.stack).length) &&
_.difference(o.stack,callstack).length === 0 &&
o.label === label;
});
if(-1 === idx){
idx=callstackRegistry.length;
callstackRegistry.push({
stack: callstack,
label: label
});
}
return idx;
},
setConfigOption = function(options){
var newconf =_.defaults(options,config);
newconf.logging=_.defaults(
(options && options.logging)||{},
config.logging
);
config=newconf;
},
debugMode = function(){
config.logging.debug=true;
config.debugMode = true;
},
getCallstack = function(){
var e = new Error('dummy'),
stack = _.map(_.rest(e.stack.replace(/^[^\(]+?[\n$]/gm, '')
.replace(/^\s+at\s+/gm, '')
.replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
.split('\n')),function(l){
return l.replace(/\s+.*$/,'');
});
return stack;
},
logCallstackSub = function(cs){
var matches, csa;
_.find(cs,function(line){
matches = line.match(/TAS_CALLSTACK_(\d+)/);
if(matches){
csa=callstackRegistry[matches[1]];
logCSA( '===================='+(csa.label ? '> '+csa.label+' <' : '')+'====================');
logCallstackSub(csa.stack);
return true;
}
logCS(line);
return false;
});
},
logCallstack = function(){
var cs;
if(config.debugMode){
cs = getCallstack();
cs.shift();
log('==============================> CALLSTACK <==============================');
logCallstackSub(cs);
log('=========================================================================');
}
},
wrapCallback = function (label, callback, context){
var callstack;
if('function' === typeof label){
context=callback;
callback=label;
label=undefined;
}
if(!config.debugMode){
return (function(cb,ctx){
return function(){
cb.apply(ctx||{},arguments);
};
}(callback,context));
}
callstack = getCallstack();
callstack.shift();
return (function(cb,ctx,cs,lbl){
var ctxref=registerCallstack(cs,lbl);
/*jshint -W054 */
return new Function('cb','ctx','TASlog',
"return function TAS_CALLSTACK_"+ctxref+"(){"+
"TASlog('Entering: '+(cb.name||'(anonymous function)'));"+
"cb.apply(ctx||{},arguments);"+
"TASlog('Exiting: '+(cb.name||'(anonymous function)'));"+
"};")(cb,ctx,log);
/*jshint +W054 */
}(callback,context,callstack,label));
},
prepareUpdate = function( attribute, value ){
queuedUpdates[attribute]=value;
},
applyQueuedUpdates = function() {
setAttrs(queuedUpdates);
queuedUpdates = {};
},
namesFromArgs = function(args,base){
return _.chain(args)
.reduce(function(memo,attr){
if('string' === typeof attr) {
memo.push(attr);
} else if(_.isArray(args) || _.isArguments(args)){
memo = namesFromArgs(attr,memo);
}
return memo;
},(_.isArray(base) && base) || [])
.uniq()
.value();
},
addId = function(obj,value){
Object.defineProperty(obj,'id',{
value: value,
writeable: false,
enumerable: false
});
},
addProp = function(obj,prop,value,fullname){
(function(){
var pname=(_.contains(['S','F','I','D'],prop) ? '_'+prop : prop),
full_pname = fullname || prop,
pvalue=value;
_.each(['S','I','F'],function(p){
if( !_.has(obj,p)){
Object.defineProperty(obj, p, {
value: {},
enumerable: false,
readonly: true
});
}
});
if( !_.has(obj,'D')){
Object.defineProperty(obj, 'D', {
value: _.reduce(_.range(10),function(m,d){
Object.defineProperty(m, d, {
value: {},
enumerable: true,
readonly: true
});
return m;
},{}),
enumerable: false,
readonly: true
});
}
// Raw value
Object.defineProperty(obj, pname, {
enumerable: true,
set: function(v){
if(v!==pvalue) {
pvalue=v;
prepareUpdate(full_pname,v);
}
},
get: function(){
return pvalue;
}
});
// string value
Object.defineProperty(obj.S, pname, {
enumerable: true,
set: function(v){
var val=v.toString();
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return pvalue.toString();
}
});
// int value
Object.defineProperty(obj.I, pname, {
enumerable: true,
set: function(v){
var val=parseInt(v,10) || 0;
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseInt(pvalue,10) || 0;
}
});
// float value
Object.defineProperty(obj.F, pname, {
enumerable: true,
set: function(v){
var val=parseFloat(v) || 0;
if(val !== pvalue) {
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return parseFloat(pvalue) || 0;
}
});
_.each(_.range(10),function(d){
Object.defineProperty(obj.D[d], pname, {
enumerable: true,
set: function(v){
var val=(parseFloat(v) || 0).toFixed(d);
if(val !== pvalue){
pvalue=val;
prepareUpdate(full_pname,val);
}
},
get: function(){
return (parseFloat(pvalue) || 0).toFixed(d);
}
});
});
}());
},
repeating = function( section ) {
return (function(s){
var sectionName = s,
attrNames = [],
fieldNames = [],
operations = [],
after = [],
repAttrs = function TAS_Repeating_Attrs(){
attrNames = namesFromArgs(arguments,attrNames);
return this;
},
repFields = function TAS_Repeating_Fields(){
fieldNames = namesFromArgs(arguments,fieldNames);
return this;
},
repReduce = function TAS_Repeating_Reduce(func, initial, final, context) {
operations.push({
type: 'reduce',
func: (func && _.isFunction(func) && func) || _.noop,
memo: (_.isUndefined(initial) && 0) || initial,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repMap = function TAS_Repeating_Map(func, final, context) {
operations.push({
type: 'map',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repEach = function TAS_Repeating_Each(func, final, context) {
operations.push({
type: 'each',
func: (func && _.isFunction(func) && func) || _.noop,
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repTap = function TAS_Repeating_Tap(final, context) {
operations.push({
type: 'tap',
final: (final && _.isFunction(final) && final) || _.noop,
context: context || {}
});
return this;
},
repAfter = function TAS_Repeating_After(callback,context) {
after.push({
callback: (callback && _.isFunction(callback) && callback) || _.noop,
context: context || {}
});
return this;
},
repExecute = function TAS_Repeating_Execute(callback,context){
var rowSet = {},
attrSet = {},
fieldIds = [],
fullFieldNames = [];
repAfter(callback,context);
// call each operation per row.
// call each operation's final
getSectionIDs("repeating_"+sectionName,function(ids){
fieldIds = ids;
fullFieldNames = _.reduce(fieldIds,function(memo,id){
return memo.concat(_.map(fieldNames,function(name){
return 'repeating_'+sectionName+'_'+id+'_'+name;
}));
},[]);
getAttrs( _.uniq(attrNames.concat(fullFieldNames)), function(values){
_.each(attrNames,function(aname){
if(values.hasOwnProperty(aname)){
addProp(attrSet,aname,values[aname]);
}
});
rowSet = _.reduce(fieldIds,function(memo,id){
var r={};
addId(r,id);
_.each(fieldNames,function(name){
var fn = 'repeating_'+sectionName+'_'+id+'_'+name;
addProp(r,name,values[fn],fn);
});
memo[id]=r;
return memo;
},{});
_.each(operations,function(op){
var res;
switch(op.type){
case 'tap':
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'each':
_.each(rowSet,function(r){
_.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,rowSet,attrSet)();
break;
case 'map':
res = _.map(rowSet,function(r){
return _.bind(op.func,op.context,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
case 'reduce':
res = op.memo;
_.each(rowSet,function(r){
res = _.bind(op.func,op.context,res,r,attrSet,r.id,rowSet)();
});
_.bind(op.final,op.context,res,rowSet,attrSet)();
break;
}
});
// finalize attrs
applyQueuedUpdates();
_.each(after,function(op){
_.bind(op.callback,op.context)();
});
});
});
};
return {
attrs: repAttrs,
attr: repAttrs,
column: repFields,
columns: repFields,
field: repFields,
fields: repFields,
reduce: repReduce,
inject: repReduce,
foldl: repReduce,
map: repMap,
collect: repMap,
each: repEach,
forEach: repEach,
tap: repTap,
'do': repTap,
after: repAfter,
last: repAfter,
done: repAfter,
execute: repExecute,
go: repExecute,
run: repExecute
};
}(section));
},
repeatingSimpleSum = function(section, field, destination){
repeating(section)
.attr(destination)
.field(field)
.reduce(function(m,r){
return m + (r.F[field]);
},0,function(t,r,a){
a.S[destination]=t;
})
.execute();
};
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ The Aaron Sheet v'+version+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
console.log('%c•.¸¸.•*´¨`*•.¸¸.•*´¨`*•.¸ Last update: '+(new Date(lastUpdate*1000))+' ¸.•*´¨`*•.¸¸.•*´¨`*•.¸¸.•','background: linear-gradient(to right,green,white,white,green); color:black;text-shadow: 0 0 8px white;');
return {
/* Repeating Sections */
repeatingSimpleSum: repeatingSimpleSum,
repeating: repeating,
/* Configuration */
config: setConfigOption,
/* Debugging */
callback: wrapCallback,
callstack: logCallstack,
debugMode: debugMode,
_fn: wrapCallback,
/* Logging */
debug: logDebug,
error: logError,
warn: logWarn,
info: logInfo,
notice: logNotice,
log: logLog
};
}());
/* ---- END: TheAaronSheet.js ---- */
on("change:str change:dex change:int change:con change:wis change:cha", function (eventInfo) {
getAttrs([eventInfo.sourceAttribute], function(values) {
for (key in values) {
// order matters
var val = parseInt(values[key]);
var mod = 0;
if (val <= 3) { mod = -3; }
else if (val <= 5) { mod = -2; }
else if (val <= 8) { mod = -1; }
else if (val <= 12) { mod = 0; }
else if (val <= 15) { mod = 1; }
else if (val <= 17) { mod = 2; }
else if (val <= 18) { mod = 3; }
else if (val <= 19) { mod = 4; }
obj = {};
obj[key + "_mod"] = mod;
obj[key + "_check"] = 21 - val;
setAttrs(obj);
}
});
});
on("change:repeating_words", function (eventInfo) {
TAS.repeatingSimpleSum('words','committed_effort','total_word_committed_effort');
TAS.repeatingSimpleSum('words','cost','word_points_spent');
});
on("change:repeating_gifts", function (eventInfo) {
TAS.repeatingSimpleSum('gifts','committed_effort','total_gift_committed_effort');
TAS.repeatingSimpleSum('gifts','cost','gift_points_spent');
});
on("change:repeating_miracles", function (eventInfo) {
TAS.repeatingSimpleSum('miracles','committed_effort','total_miracle_committed_effort');
});
on("change:repeating_npc-tactics", function(eventInfo) {
TAS.repeating('npc-tactics')
.fields('tactic_description')
.attrs('total_npc_tactics')
.reduce(function(memo, row, attrSet, id, rowSet) {
memo = memo + 1;
return memo;
}, 0, function(memo, rowSet, attrSet) {
setAttrs({total_npc_tactics: memo});
})
.execute();
});
on("change:repeating_npc-effort", function(eventInfo) {
TAS.repeatingSimpleSum('npc-effort', 'npc_effort_cost', 'total_npc_committed_effort');
});
on("change:repeating_faction-problems", function(eventInfo) {
TAS.repeatingSimpleSum('faction-problems', 'faction_problem_cost', 'faction_trouble');
});
on("change:repeating_faction-projects", function(eventInfo) {
TAS.repeatingSimpleSum('faction-projects', 'faction_project_spent', 'faction_dominion_spent');
});
power_map = {
"6": 1,
"8": 2,
"10": 3,
"12": 4,
"20": 5
};
on("change:faction_action_die_sides", function(eventInfo) {
getAttrs([eventInfo.sourceAttribute], function(values) {
for (key in values) {
setAttrs({
faction_action_die: "1d" + values[key],
faction_power: power_map[values[key]],
faction_cohesion: power_map[values[key]]
});
}
});
});
on("change:repeating_projects", function(eventInfo) {
TAS.repeatingSimpleSum('projects', 'project_dominion_spent', 'dominion_spent');
TAS.repeatingSimpleSum('projects', 'project_influence_spent', 'influence_spent');
});
</script>
<div class='sheet-container'>
<input type="radio" class="sheet-tab sheet-character" name="attr_tab" checked="checked" value="1" title="Character" />
<input type="radio" class="sheet-tab sheet-npc" name="attr_tab" value="2" title="NPC" />
<input type="radio" class="sheet-tab sheet-faction" name="attr_tab" value="3" title="Faction" />
<div class="spacer"></div>
<div class="sheet-tab-content sheet-faction">
<div class="sheet-column">
<label for="sheet-info-section" class="sheet-faction sheet-section-title">Info</label>
<div class="sheet-info-section">
<table class="sheet-info-table">
<tbody>
<tr>
<td class='sheet-field-title'>
Name
</td>
<td class='sheet-field-content'>
<input type="text" min="0" name="attr_character_name" class='sheet-faction sheet-input sheet-faction-name' value="" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Action Die
</td>
<td class='sheet-field-content'>
<select name="attr_faction_action_die_sides" class="sheet-dropdown">
<option value="6">1d6</option>
<option value="8">1d8</option>
<option value="10">1d10</option>
<option value="12">1d12</option>
<option value="20">1d20</option>
</select>
<button type="roll" name="roll_faction_action_die" value="&{template:default} {{name=Action Die @{faction_action_die}}} {{roll=[[(@{faction_action_die}) + ?{Modifier|0}]]}}" class='sheet-button'></button>
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Power
</td>
<td class='sheet-field-content'>
<input type="number" min="0" name="attr_faction_power" class='sheet-faction sheet-input' value="1" readonly="true" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Cohesion
</td>
<td class='sheet-field-content'>
<input type="number" min="0" name="attr_faction_cohesion" class='sheet-faction sheet-input sheet-min' value="@{faction_action_die_sides}" />
<span class="sheet-faction sheet-separator">/</span>
<input type="number" min="0" name="attr_faction_cohesion_max" class='sheet-faction sheet-input sheet-max' value="@{faction_power}" disabled="true" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Trouble
</td>
<td class='sheet-field-content'>
<span class="sheet-values">
<input type="number" min="0" name="attr_faction_trouble" class='sheet-faction sheet-input' value="0" readonly="true" />
<span class="sheet-faction sheet-separator">/</span>
<input type="number" min="0" name="attr_faction_trouble_max" class='sheet-faction sheet-input sheet-max' value="@{faction_action_die_sides}" disabled="true" />
</span>
</td>
</tr>
</tbody>
</table>
<div class="sheet-dominion-scores">
<table>
<thead>
<tr>
<th colspan="3">Dominion</th>
</tr>
<tr>
<th>Total</th>
<th>Spent</th>
<th>Free</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="number" name="attr_faction_dominion_total" class='sheet-faction sheet-input' value="0" /></td>
<td><input type="number" name="attr_faction_dominion_spent" class='sheet-faction sheet-input' readonly /></td>
<td><input type="number" name="attr_faction_dominion_free" class='sheet-faction sheet-input' value="(@{faction_dominion_total}) - (@{faction_dominion_spent})" disabled="true"/></td>
</tr>
</tbody>
</table>
</div>
<div class="sheet-interests-section">
<label for="repeating_faction-interests" class="sheet-section-title">Interests</label>
<fieldset class="repeating_faction-interests">
<div class="sheet-interest">
<input type="number" name="attr_faction_interest_score" class='sheet-faction sheet-input .sheet-interest-score' value="0" />
<input type="text" min="0" name="attr_faction_interest_name" class='sheet-faction sheet-input sheet-interest-name' value="" placeholder="Interest name"/>
</div>
</fieldset>
</div>
</div>
</div>
<div class="sheet-column">
<div class="sheet-features-section">
<label for="repeating_faction-features" class="sheet-section-title">Features</label>
<fieldset class="repeating_faction-features">
<div class="sheet-feature">
<textarea name="attr_faction_feature_description" class='sheet-faction sheet-textarea' value="" placeholder="Feature Description"></textarea>
</div>
</fieldset>
</div>
<div class="sheet-problems-section">
<label for="repeating_faction-problems" class="sheet-section-title">Problems</label>
<fieldset class="repeating_faction-problems">
<div class="sheet-problem">
<input type="number" name="attr_faction_problem_cost" class='sheet-faction sheet-input' value="0" />
<textarea name="attr_faction_problem_description" class='sheet-faction sheet-textarea' value="" placeholder="Problem Description"></textarea>
</div>
</fieldset>
</div>
</div>
<div class="sheet-projects-section">
<label for="repeating_faction-projects" class="sheet-section-title">Projects</label>
<div class="sheet-projects">
<fieldset class="repeating_faction-projects">
<div class="sheet-project">
<div class="sheet-project-name-section">
<input type="text" min="0" name="attr_faction_project_name" class='sheet-faction sheet-project-element sheet-input' value="" placeholder="Project name" />
</div>
<div class="sheet-project-details-subsection">
<select name="attr_faction_project_difficulty" class="sheet-dropdown sheet-project-element">
<option value="1">Plausible</option>
<option value="2">Improbable</option>
</select>
<select name="attr_faction_project_scope" class="sheet-dropdown sheet-project-element">
<option value="1">Village</option>
<option value="2">City</option>
<option value="4">Region</option>
<option value="8">Nation</option>
<option value="16">Realm</option>
</select>
</div>
<div class="sheet-project-completed-subsection">
<label for="attr_faction_project_completed" class="sheet-field-title">Completed?</label>
<input type="checkbox" name="attr_faction_project_completed" class="sheet-project-element" />
</div>
<table class="sheet-project-dominion-tally sheet-project-element">
<thead class="sheet-project-dominion-tally-headers">
<tr>
<th class="sheet-field-title" colspan="3">Dominion</th>
</tr>
<tr>
<th class="sheet-field-title" >Spent</th>
<th class="sheet-field-title" >Cost</th>
<th class="sheet-field-title" >Remaining</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input type="number" min="0" name="attr_faction_project_spent" class='sheet-faction sheet-project-element sheet-input sheet-max' value="0" />
</td>
<td>
<input type="number" min="0" name="attr_faction_project_cost" class='sheet-faction sheet-project-element sheet-input sheet-max' value="(@{faction_project_difficulty}) * (@{faction_project_scope})" disabled="true"/>
</td>
<td>
<input type="number" min="0" name="attr_faction_project_remaining" class='sheet-faction sheet-project-element sheet-input sheet-max' value="(@{faction_project_cost}) - (@{faction_project_spent})" disabled="true"/>
</td>
</tr>
</tbody>
</table>
</div>
</fieldset>
</div>
</div>
</div>
<div class="sheet-tab-content sheet-npc">
<label for='info-section' class='sheet-title sheet-title-label'> NPC </label>
<div class="sheet-column">
<label for+"sheet-npc-info" class="sheet-npc-section-title">Info</label>
<table name="sheet-npc-info">
<tbody>
<tr>
<td class='sheet-field-title'>
Name
</td>
<td class='sheet-field-content'>
<input type="text" name="attr_character_name" class='sheet-npc sheet-input' value="" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Move
</td>
<td class='sheet-field-content'>
<input type="number" min="1" name="attr_npc_move" class='sheet-npc sheet-input' value="30" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
HD
</td>
<td class='sheet-field-content'>
<span class="sheet-values">
<input type="number" min="0" name="attr_npc_hd_current" class='sheet-npc sheet-input sheet-min' value="1" />
<span class="sheet-npc sheet-separator">/</span>
<input type="number" min="0" name="attr_npc_hd_max" class='sheet-npc sheet-input sheet-max' value="1"/>
</span>
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Save
</td>
<td class='sheet-field-content'>
<input type="number" min="1" name="attr_npc_save" class='sheet-npc sheet-input' value="15" />
<button type="roll" name="roll_npc_attack" value="&{template:default} {{name=Save by @{character_name}}} {{roll=[[1d20>@{npc_save} + ?{Modifier|0}]]}}" class='sheet-button'></button>
</td>
</tr>
<tr>
<td class='sheet-field-title'>
AC
</td>
<td class='sheet-field-content'>
<input type="number" min="1" name="attr_npc_ac" class='sheet-npc sheet-input' value="9" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Morale
</td>
<td class='sheet-field-content'>
<input type="number" min="1" name="attr_npc_morale" class='sheet-npc sheet-input' value="10" />
<button type="roll" name="roll_npc_attack" value="&{template:default} {{name=Morale Check by @{character_name}}} {{roll=[[1d20>@{npc_morale} + ?{Modifier|0}]]}}" class='sheet-button'></button>
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Damage
</td>
<td class='sheet-field-content'>
<input type="text" name="attr_npc_damage" class='sheet-npc sheet-input' placeholder="1d6" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Type
</td>
<td class='sheet-field-content'>
<select name="attr_npc_damage_type" class="sheet-dropdown">
<option value="">Normal</option>
<option value="Straight">Straight</option>
</select>
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Attack Bonus
</td>
<td class='sheet-field-content'>
<input type="number" name="attr_npc_attack_bonus" class='sheet-npc sheet-input' value="0" />
</td>
</tr>
<tr>
<td class='sheet-field-title'>
Number of Attacks
</td>
<td class='sheet-field-content'>
<input type="number" name="attr_npc_attack_qty" class='sheet-npc sheet-input' value="0" />
<button type="roll" name="roll_npc_attack" value="&{template:default} {{name=Attack by @{character_name}}} {{roll=[[1d20 + @{npc_attack_bonus} + ?{Modifier|0} + ?{Target AC|9}]]}} {{damage=[[@{npc_damage}]] @{npc_damage_type}}}" class='sheet-button'></button>
</td>
</tr>
</tbody>
</table>
</div>
<div class="sheet-column">
<div class="sheet-tactics">
<label for="repeating_npc-tactics" class="sheet-npc-section-title">Tactics</label>
<ol class="sheet-tactics-list">
<fieldset class="repeating_npc-tactics">
<li>
<input type="text" name="attr_tactic_description" class="sheet-input sheet-tactic" value="" placeholder="Tactic description"/>
</li>
</fieldset>
</ol>
<div class='sheet-tactic-chooser'>
<label for="roll_npc_tactic" class='sheet-field-content'>Choose Tactic</label>
<button type="roll" name="roll_npc_tactic" value="/w gm (@{character_name}) uses tactic #([[1d(@{total_npc_tactics})]])" class='sheet-button'></button>
</div>
</div>
<div class="sheet-effort">
<label for="repeating_npc-effort" class="sheet-npc-section-title">Effort</label>
<fieldset class="repeating_npc-effort">
<input type="text" name="attr_npc_effort_description" class="sheet-input sheet-tactic" value="" placeholder="Effort description"/>
<input type="number" name="attr_npc_effort_cost" class="sheet-input sheet-tactic" min="0" value="0" />
</fieldset>
</div>
<table class="sheet-npc-effort-table">
<thead>
<th></th>
<th>Total</th>
<th>Spent</th>
<th>Free</th>
</thead>
<tbody>
<tr>
<td class='sheet-field-title'>
Effort
</td>
<td class='sheet-field-content'>
<input type="number" min="0" name="attr_npc_effort_total" class='sheet-npc sheet-input' value="0" />
</td>
<td class='sheet-field-content'>
<input type="number" min="0" name="attr_npc_effort_spent" class='sheet-npc sheet-input' value="(@{total_npc_committed_effort})" disabled="true"/>
</td>
<td class='sheet-field-content'>
<input type="number" min="0" name="attr_npc_effort_free" class='sheet-npc sheet-input' value="(@{npc_effort_total}) - (@{npc_effort_spent})" disabled="true"/>
</td>
</tr>
</tbody>
</div>
</div>
<div class="sheet-tab-content sheet-character">
<div class='sheet-column'>
<div name='info-section' class='sheet-info'>
<label for='info-section' class='sheet-title sheet-title-label'>
Godbound
</label>
<div class='sheet-name'>
<label for="attr_character_name" class='sheet-field-title'>Name</label>
<input type="text" name="attr_character_name" class='sheet-info sheet-input' value="" />
</div>
<div class='sheet-description'>
<label for="attr_description" class='sheet-field-title'>Description</label>
<textarea name="attr_description" class='sheet-info sheet-input' value=""></textarea>
</div>
<div class='sheet-goal'>
<label for="attr_goal" class='sheet-field-title'>Goal</label>
<textarea name="attr_goal" class='sheet-info sheet-input'></textarea>
</div>
<div class='sheet-core-stats'>
<div class='sheet-level'>
<label for="attr_level" class='sheet-field-title'>Level</label>
<input type="number" min="1" name="attr_level" class='sheet-core sheet-input-thin sheet-input' value="1" />
</div>
<div class='sheet-points'>
<label for="attr_points" class='sheet-field-title'>Points</label>
<input type="number" min="1" name="attr_points" class='sheet-core sheet-input-thin sheet-input' value="6 + 2 * (@{adj_level}) - (@{points_spent})" disabled=true />
</div>
<div class='sheet-XP'>
<label for="attr_xp" class='sheet-field-title'>XP</label>
<span class="sheet-values">
<input type="number" min="0" name="attr_xp_current" class='sheet-core sheet-input sheet-min' value="0" />
<span class="sheet-core sheet-separator">/</span>
<input type="number" min="0" name="attr_xp_max" class='sheet-core sheet-input sheet-max' value="0" />
</span>
</div>
<div class='sheet-HP'>
<label for="attr_hp" class='sheet-field-title'>HP</label>
<span class="sheet-values">
<input type="number" min="0" name="attr_hp_current" class='sheet-core sheet-input sheet-min' value="8" />
<span class="sheet-core sheet-separator">/</span>
<input type="number" min="0" name="attr_hp_max" class='sheet-core sheet-input sheet-max' value="8 + 4*(@{adj_level}) + ceiling((@{adj_level}) * (@{con_mod}) / 2)" disabled=true" />
</span>
</div>
</div>
</div>
<div class='sheet-attributes-section'>
<label for="table-attributes" class='sheet-table-attributes sheet-title-label'>Attributes</label>
<table name="table-attributes" class='sheet-table-attributes'>
<thead>
<tr>
<th></th>
<th class="sheet-header">Score</th>
<th class="sheet-header">Modifier</th>
<th class="sheet-header">Check</th>
</tr>
</thead>
<tbody>
<tr>
<td class='sheet-table-field-title'>Str</td>
<td><input type="number" min="3" max="19" name="attr_str" class='sheet-stats sheet-input' value="10" /></td>
<td>
<button type="roll" name="roll_str_mod" value="&{template:default} {{name=Strength Roll}} {{roll=[[1d20 + @{str_mod} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_str_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_str_check" value="&{template:default} {{name=Strength Check}} {{roll=[[1d20>@{str_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_str_check" readonly />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Dex</td>
<td><input type="number" min="3" max="19" name="attr_dex" class='sheet-stats sheet-input' value="10" /></td>
<td>
<button type="roll" name="roll_dex_mod" value="&{template:default} {{name=Dexterity Roll}} {{roll=[[1d20 + @{dex_mod} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_dex_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_dex_check" value="&{template:default} {{name=Dexterity Check}} {{roll=[[1d20>@{dex_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_dex_check" readonly />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Con</td>
<td><input type="number" min="3" max="19" name="attr_con" class='sheet-stats sheet-input' value="10" /></td>
<td>
<button type="roll" name="roll_con_mod" value="&{template:default} {{name=Constitution Roll}} {{roll=[[1d20 + @{con_mod} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_con_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_con_check" value="&{template:default} {{name=Constitution Check}} {{roll=[[1d20>@{con_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_con_check" readonly />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Wis</td>
<td><input type="number" min="3" max="19" name="attr_wis" class='sheet-input sheet-stats' value="10" /></td>
<td>
<button type="roll" name="roll_wis_mod" value="&{template:default} {{name=Wisdom Roll}} {{roll=[[1d20 + @{wis_mod} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_wis_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_wis_check" value="&{template:default} {{name=Wisdom Check}} {{roll=[[1d20>@{wis_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_wis_check" readonly />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Int</td>
<td><input type="number" min="3" max="19" name="attr_int" class='sheet-input sheet-stats' value="10" /></td>
<td>
<button type="roll" name="roll_int_mod" value="&{template:default} {{name=Intelligence Roll}} {{roll=[[1d20 + @{int_mod} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_int_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_int_check" value="&{template:default} {{name=Intelligence Check}} {{roll=[[1d20>@{int_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_int_check" readonly />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Cha</td>
<td><input type="number" min="3" max="19" name="attr_cha" class='sheet-stats sheet-input' value="10" /></td>
<td>
<button type="roll" name="roll_cha_mod" value="&{template:default} {{name=Charisma Roll}} {{roll=[[1d20 + @{cha_mod}] + ?{Modifier|0}]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_cha_mod" readonly />
</button>
</td>
<td>
<button type="roll" name="roll_cha_check" value="&{template:default} {{name=Charisma Check}} {{roll=[[1d20>@{cha_check} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-stats" name="attr_cha_check" readonly />
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class='sheet-saves-section'>
<label for="table-saves" class="sheet-table-saves sheet-title-label">Saves</label>
<table name="table-saves" class="sheet-table-saves">
<thead>
<tr>
<th></th>
<th>Base</th>
<th>Modifier</th>
<th>Penalty</th>
<th>Final Save</th>
</tr>
</thead>
<tbody>
<tr>
<td class='sheet-table-field-title'>Hardiness</td>
<td><input type="number" name="attr_save_hardiness_base" class='sheet-input sheet-saves' value="((15 - ((@{str_mod}) + (@{con_mod}) + (abs( (@{str_mod}) - (@{con_mod}) ))) / 2) - (@{adj_level}))" disabled="true" /></td>
<td><input type="number" name="attr_save_hardiness_mod" class='sheet-input sheet-saves' value="0" /></td>
<td><input type="number" name="attr_hardiness_penalty" class='sheet-input sheet-saves' readonly /></td>
<td>
<button type="roll" name="roll_hardiness_save" value="&{template:default} {{name=Hardiness Check}} {{roll=[[1d20>@{save_hardiness_final} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-saves" name="attr_save_hardiness_final" value="(@{save_hardiness_base})+(@{save_hardiness_mod})-(@{hardiness_penalty})" disabled=true />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Evasion</td>
<td><input type="number" name="attr_save_evasion_base" class='sheet-input sheet-saves' value="((15 - ((@{dex_mod}) + (@{int_mod}) + (abs( (@{dex_mod}) - (@{int_mod}) ))) / 2) - (@{adj_level}))" disabled=true /></td>
<td><input type="number" name="attr_save_evasion_mod" class='sheet-input sheet-saves' value="0" /></td>
<td><input type="number" name="attr_evasion_penalty" class='sheet-input sheet-saves' readonly /></td>
<td>
<button type="roll" name="roll_evasion_save" value="&{template:default} {{name=Evasion Check}} {{roll=[[1d20>@{save_evasion_final} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-saves" name="attr_save_evasion_final" value="(@{save_evasion_base})+(@{save_evasion_mod})-(@{evasion_penalty})" disabled=true />
</button>
</td>
</tr>
<tr>
<td class='sheet-table-field-title'>Spirit</td>
<td><input type="number" name="attr_save_spirit_base" class='sheet-input sheet-saves' value="((15 - ((@{wis_mod}) + (@{cha_mod}) + (abs( (@{wis_mod}) - (@{cha_mod}) ))) / 2) - (@{adj_level}))" disabled=true /></td>
<td><input type="number" name="attr_save_spirit_mod" class='sheet-input sheet-saves' value="0" /></td>
<td><input type="number" name="attr_spirit_penalty" class='sheet-input sheet-saves' readonly /></td>
<td>
<button type="roll" name="roll_spirit_save" value="&{template:default} {{name=Spirit Check}} {{roll=[[1d20>@{save_spirit_final} + ?{Modifier|0}]]}}" class="sheet-blank-roll-button sheet-button">
<input type="number" class="sheet-input sheet-rollable-value sheet-saves" name="attr_save_spirit_final" value="(@{save_spirit_base})+(@{save_spirit_mod})-(@{spirit_penalty})" disabled=true />
</button>
</td>
</tr>
</tbody>
</table>
</div>
<div class='sheet-resources'>
<label for="table-resources" class="sheet-title-label" >Resources</label>
<table name="table-resources" class="sheet-resources-table">
<thead>
<th></th>
<th>Total</th>
<th>Spent</th>
<th>Free</th>
<th>Earned</th>
</thead>
<tbody>
<tr>
<td class="sheet-resources-table-element">Effort</td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_effort_total" class='sheet-resources sheet-input' value="((@{adj_level}) + 2)" disabled=true /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_effort_spent" class='sheet-resources sheet-input' disabled="true" value="((@{total_word_committed_effort}) + (@{total_gift_committed_effort}) + (@{total_miracle_committed_effort}))" /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_effort_free" class='sheet-resources sheet-input' disabled="true" value="((@{effort_total}) - (@{effort_spent}))" /></td>
<td class="sheet-resources-table-element"></td>
</tr>
<tr>
<td class="sheet-resources-table-element">Influence</td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_influence_total" class='sheet-resources sheet-input' value="((@{adj_level}) + 2)" disabled=true /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_influence_spent" class='sheet-resources sheet-input' readonly /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_influence_free" class='sheet-resources sheet-input' disabled="true" value="((@{influence_total}) - (@{influence_spent}))" /></td>
<td class="sheet-resources-table-element"></td>
</tr>
<tr>
<td class="sheet-resources-table-element">Dominion</td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_dominion_total" class='sheet-resources sheet-input' value="0" /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_dominion_spent" class='sheet-resources sheet-input' readonly /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_dominion_free" class='sheet-resources sheet-input' disabled="true" value="((@{dominion_total}) - (@{dominion_spent}))" /></td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_dominion_earned" class='sheet-resources sheet-input' value="0" /></td>
</tr>
<tr>
<td class="sheet-resources-table-element">Wealth</td>
<td class="sheet-resources-table-element"><input type="number" min="0" name="attr_wealth_total" class='sheet-resources sheet-input' value="0" /></td>
<td colspan='3'></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class='sheet-column sheet-center-column'>
<div class='sheet-armor'>
<label for="sheet-armor" class="sheet-title-label">Armor</label>
<div class="sheet-armor" name="sheet-armor">
<div class="sheet-armor-ac">
<label for="attr_armor_ac" class='sheet-field-title'>AC</label>
<input type="number" name="attr_armor_ac" class="sheet-input sheet-armor sheet-armor-ac-value" value="9" max="9" />
</div>
<div class="sheet-armor-type">
<label for="attr_armor_type" class='sheet-field-title'>Type</label>
<input type="text" name="attr_armor_type" class="sheet-input sheet-armor sheet-armor-type" value="" />
</div>
<div class="sheet-armor-shield">
<label for="attr_armor_shield" class='sheet-field-title'>Shield</label>
<input type="number" name="attr_armor_shield" class="sheet-input sheet-armor sheet-armor-shield" value="0" />
</div>
<div class="sheet-armor-net">
<label for="attr_armor_net" class='sheet-field-title'>Total AC</label>
<input type="number" name="attr_armor_net" class="sheet-input sheet-armor sheet-armor-net" value="((@{armor_ac}) + (@{armor_shield}) - (@{dex_mod}))" disabled="true" />
</div>
<div class="sheet-armor-description">
<label for="attr_armor-description" class='sheet-field-title'>Description</label>
<textarea name="attr_armor_description" class="sheet-input sheet-armor sheet-armor-description" placeholder="None"></textarea>
</div>
<div class="sheet-armor-saving-throw-penalty">
<label for="attr_armor_saving_throw_penalty" class='sheet-saving-throw-penalty-element sheet-field-title'>Penalties</label>
<div class="sheet-armor-saving-throw-penalty-choices">
<div class="sheet-armor-saving-throw-penalty-choice">
<label for="attr_hardiness_penalty" class='sheet-saving-throw-penalty-element sheet-small-title-label'>Hardiness</label>
<input type="checkbox" name="attr_hardiness_penalty" class='sheet-saving-throw-penalty-element sheet-input sheet-penalty sheet-hardiness-penalty' value="-4" />
</div>
<div class="sheet-armor-saving-throw-penalty-choice">
<label for="attr_evasion_penalty" class='sheet-saving-throw-penalty-element sheet-small-title-label'>Evasion</label>
<input type="checkbox" name="attr_evasion_penalty" class='sheet-saving-throw-penalty-element sheet-input sheet-penalty sheet-evasion-penalty' value="-4" />
</div>
<div class="sheet-armor-saving-throw-penalty-choice">
<label for="attr_spirit_penalty" class='sheet-saving-throw-penalty-element sheet-small-title-label'>Spirit</label>
<input type="checkbox" name="attr_spirit_penalty" class='sheet-saving-throw-penalty-element sheet-input sheet-penalty sheet-spirit-penalty' value="-4" />
</div>
</div>
</div>
</div>
</div>
<div class='sheet-weapons' name="sheet-weapons">
<label for="sheet-weapons" class="sheet-title-label">Weapons</label>
<div class="sheet-weapons-ab">
<label for="attr_weapons_base_ab" class="sheet-field-label sheet-weapons-ab">Base Attack Bonus</label>
<input type="number" value="(@{adj_level})" disabled=true name="attr_weapon_base_ab" class='sheet-input sheet-weapons-ab' />
</div>
<div class="sheet-weapons-list">
<div name="table-weapons" class="sheet-table-weapons">
<fieldset class="repeating_weapons">
<div class='sheet-weapon'>
<div class='sheet-weapon-name'>
<input type="text" name="attr_weapon_name" class="sheet-input sheet-weapon-name" value="" placeholder="Name"/>
</div>
<div class="sheet-weapon-info">
<span class='sheet-weapon-info-attribute sheet-weapon-info-element'>
<select name="attr_weapon_attribute" class="sheet-dropdown">
<option value="@{str_mod}">STR</option>
<option value="@{dex_mod}">DEX</option>
<option value="@{con_mod}">CON</option>
<option value="@{wis_mod}">WIS</option>
<option value="@{int_mod}">INT</option>
<option value="@{cha_mod}">CHA</option>
</select>
</span>
<span class='sheet-weapon-info-ab sheet-weapon-info-element'>
<input type="number" name="attr_weapon_ab" class="sheet-input sheet-weapon-info-ab" placeholder="AB" />
</span>
<span class='sheet-weapon-info-damage sheet-weapon-info-element'>
<input type="text" name="attr_weapon_damage" class="sheet-input sheet-weapon-info-damage" placeholder="1d6" />
</span>
<span class='sheet-weapon-info-roll sheet-weapon-info-element'>
<button type="roll" name="roll_weapon" class="sheet-button sheet-weapon-info-roll" value="&{template:default} {{attack=[[1d20 + (@{weapon_base_ab}) + (@{weapon_ab}) + (@{weapon_attribute}) + ?{Attack Modifier|0} + (?{Target AC|9})>20]]}} {{damage=Roll @{weapon_damage} with a @{weapon_attribute} modifier available}} {{name=Attack with @{weapon_name}}}" />
</span>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<div class='sheet-fray sheet-2colrow'>
<div class="sheet-col sheet-fray-die">
<label for="attr_fray_die" class="sheet-title-label">Fray Die</label>
<input type="text" value="1d8" class="sheet-input sheet-fray-die" name="attr_fray_die" />
<button type="roll" name="roll_fray" class="sheet-button sheet-weapon_damage" value="&{template:default} {{fray=[[(@{fray_die})]]}} {{name=Attack with Fray Die}}" />
</div>
<div class="sheet-col sheet-damage-chart">
<label for="table-damage-chart" class="sheet-title-label">Damage Chart</label>
<table name="table-damage-chart" class="sheet-damage-chart">
<thead>
<th> Roll (per die) </th>
<th> Damage </th>
</thead>
<tbody>
<tr>
<td> 1 or less </td>
<td> 0 </td>
</tr>
<tr>
<td> 2-5 </td>
<td> 1 </td>
</tr>
<tr>
<td> 6-9 </td>
<td> 2 </td>
</tr>
<tr>
<td> 10 or more </td>
<td> 3 </td>
</tr>
</tbody>
</table>
</div>
</div>
<label for="sheet-facts" class="sheet-title-label">Facts</label>
<div class='sheet-facts' name='sheet-facts'>
<div class='sheet-origin'>
<label for="attr_fact_origin" class='sheet-field-title'>Origin</label>
<textarea name="attr_fact_origin" class='sheet-input sheet-facts' value=""></textarea>
</div>
<div class='sheet-career'>
<label for="attr_fact_career" class='sheet-field-title'>Career</label>
<textarea name="attr_fact_career" class='sheet-input sheet-facts' value=""></textarea>
</div>
<div class='sheet-relationship'>
<label for="attr_fact_relationship" class='sheet-field-title'>Relationship</label>
<textarea name="attr_fact_relationship" class='sheet-input sheet-facts' value=""></textarea>
</div>
<fieldset class="repeating_facts">
<div class='sheet-fact'>
<label for="attr_fact_relationship" class='sheet-field-title'>Fact</label>
<textarea name="attr_fact_relationship" class='sheet-input sheet-facts' placeholder="Fact about your adventure"></textarea>
</div>
</fieldset>
</div>
</div>
<div class='sheet-column'>
<div class='sheet-words'>
<label for="table-words" class="sheet-title-label">Words</label>
<div name="table-words" class="sheet-table-words">
<div class='sheet-table-row sheet-table-header-row'>
<span class="sheet-table-header sheet-table-cell sheet-power-name">Word</span>
<span class="sheet-table-header sheet-table-cell sheet-power-cost">Cost</span>
<span class="sheet-table-header sheet-table-cell sheet-power-effort">Effort</span>
</div>
<fieldset class="repeating_words">
<div class='sheet-table-row'>
<input type="text" name="attr_name" value="" class='sheet-input sheet-word-name sheet-power-name'/>
<input type="number" name="attr_cost" value="0" class='sheet-input sheet-word sheet-cost sheet-power-cost' min="0"/>
<input type="number" name="attr_committed_effort" value="0" class='sheet-input sheet-word sheet-committed-effort sheet-power-effort' min="0"/>
</div>
</fieldset>
</div>
</div>
<div class='sheet-gifts'>
<label for="table-gifts" class="sheet-title-label">Gifts</label>
<div name="table-gifts" class="sheet-table-gifts">
<div class='sheet-table-row sheet-table-header-row'>
<span class="sheet-table-header sheet-table-cell sheet-power-name">Gift</span>
<span class="sheet-table-header sheet-table-cell sheet-power-cost">Cost</span>
<span class="sheet-table-header sheet-table-cell sheet-power-effort">Effort</span>
</div>
<fieldset class="repeating_gifts">
<div class='sheet-table-row'>
<input type="text" name="attr_name" class='sheet-input sheet-gift-name sheet-power-name' value=""/>
<input type="number" name="attr_cost" class='sheet-input sheet-gift sheet-power-cost sheet-cost' value="0" min="0"/>
<input type="number" name="attr_committed_effort" class='sheet-input sheet-gift sheet-power-effort sheet-committed-effort'value="0" min="0"/>
</div>
</fieldset>
</div>
</div>
<div class='sheet-miracles'>
<label for="table-miracles" class="sheet-title-label">Miracles</label>
<div name="table-miracles" class="sheet-table-miracles">
<div class='sheet-table-row sheet-table-header-row'>
<span class="sheet-table-header sheet-table-cell sheet-power-name">Miracle</span>
<span class="sheet-table-header sheet-table-cell sheet-power-effort">Effort</span>
</div>
<fieldset class="repeating_miracles">
<div class='sheet-table-row'>
<input type="text" name="attr_name" class='sheet-input sheet-miracle-name sheet-power-name' value=""/>
<input type="number" name="attr_committed_effort" class='sheet-input sheet-miracle sheet-committed-effort sheet-power-effort'value="0" min="0"/>
</div>
</fieldset>
</div>
</div>
</div>
<div class="sheet-projects-section">
<label for="repeating_projects" class="sheet-title-label">Projects</label>
<div class="sheet-projects">
<fieldset class="repeating_projects">
<div class="sheet-project">
<div class="sheet-project-name-section">
<input type="text" min="0" name="attr_project_name" class='sheet-project-element sheet-input' value="" placeholder="Project name" />
</div>
<div class="sheet-project-details-subsection">
<select name="attr_project_difficulty" class="sheet-dropdown sheet-project-element">
<option value="1">Plausible</option>
<option value="2">Improbable</option>
<option value="4">Impossible</option>
</select>
<select name="attr_project_scope" class="sheet-dropdown sheet-project-element">
<option value="1">Village</option>
<option value="2">City</option>
<option value="4">Region</option>
<option value="8">Nation</option>
<option value="16">Realm</option>
</select>
</div>
<div class="sheet-project-completed-subsection">
<label for="attr_project_completed" class="sheet-field-title">Completed?</label>
<input type="checkbox" name="attr_project_completed" class="sheet-project-element" />
</div>
<table class="sheet-project-dominion-tally sheet-project-element">
<thead class="sheet-project-dominion-tally-headers">
<tr>
<th class="sheet-project-field-title" colspan="4">Dominion</th>
</tr>
<tr>
<th class="sheet-project-field-title" >Dominion</th>
<th class="sheet-project-field-title" >Influence</th>
<th class="sheet-project-field-title" >Cost</th>
<th class="sheet-project-field-title" >Remaining</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<input type="number" min="0" name="attr_project_dominion_spent" class='sheet-project-element sheet-input sheet-max' value="0" />
</td>
<td>
<input type="number" min="0" name="attr_project_influence_spent" class='sheet-project-element sheet-input sheet-max' value="0" />
</td>
<td>
<input type="number" min="0" name="attr_project_cost" class='sheet-project-element sheet-input sheet-max' value="(@{project_difficulty}) * (@{project_scope})" disabled="true"/>
</td>
<td>
<input type="number" min="0" name="attr_project_remaining" class='sheet-project-element sheet-input sheet-max' value="(@{project_cost}) - ((@{project_dominion_spent}) + (@{project_influence_spent}))" disabled="true"/>
</td>
</tr>
</tbody>
</table>
</div>
</fieldset>
</div>
</div>
</div>
<div style="display: none">
<input type="number" name="attr_total_word_committed_effort" readonly/>
<input type="number" name="attr_total_gift_committed_effort" readonly/>
<input type="number" name="attr_total_miracle_committed_effort" readonly/>
<input type="number" name="attr_word_points_spent" readonly/>
<input type="number" name="attr_gift_points_spent" readonly/>
<input type="number" name="attr_adj_level" value="(@{level}) - 1" disabled="true"/>
<input type="number" name="attr_points_spent" value="((@{word_points_spent}) + (@{gift_points_spent}))" disabled="true"/>
<input type="number" name="attr_total_npc_tactics" readonly/>
<input type="number" name="attr_total_npc_committed_effort" readonly/>
</div>
<div class='sheet-version-container'>
<span class='sheet-version'>v1.1.0</span>
</div>
</div>