Files
2024-06-03 13:15:14 -04:00

209 lines
9.7 KiB
HTML

<div class="charsheet">
<div class="2colrow sheet-rounded-corners">
<div class="col">
<label>Hero Name:</label><input type="text" name="attr_hero_name" /> <br />
<label>Total Points:</label> <input type="number" class="sheet-short" name="attr_points" />
<button type='action' name='act_xp'><span style="font-family: 'Pictos'">r</span></button>
</div>
<div class="col">
<label>Real Name:</label><input type="text" name="attr_real_name" /> <br />
<label>XP:</label> <input type="number" class="sheet-short" name="attr_xp" />
</div>
</div>
<div class="2colrow sheet-rounded-corners">
<div class="col">
<label>DEX</label> <input type="number" name="attr_dex" />
<button type='roll' name='roll_dex'
value='&{template:default} {{name=@{character_name}}} {{DEX Roll=[[3d6]]}} {{Versus= @{dex}}}'></button>
<button type='roll' name='roll_dex_attack'
value='&{template:default} {{name=@{character_name}}} {{Hits Defender DEX=[[11 + @{dex} - 3d6]]}}'>Attack</button>
<br />
<label>INT</label> <input type="number" name="attr_int" />
<button type='roll' name='roll_int'
value='&{template:default} {{name=@{character_name}}} {{INT Roll=[[3d6]]}} {{Versus= @{int}}}'></button><br />
<label>EGO</label> <input type="number" name="attr_ego" />
<button type='roll' name='roll_ego'
value='&{template:default} {{name=@{character_name}}} {{EGO Roll=[[3d6]]}} {{Versus= @{ego}}} '></button>
<button type='roll' name='roll_ego_attack'
value='&{template:default} {{name=@{character_name}}} {{Hits Defender EGO=[[11 + @{ego} - 3d6]]}}'>Attack</button>
<br />
<label>SPD</label> <input type="number" name="attr_spd" /> <input type="hidden" name="attr_phases" />
<button type='roll' class='blank-roll-button' name='quote_front'
value='&{template:default} {{name=@{character_name}}} {{DEX=@{dex}}} {{EGO=@{ego}}} {{SPD=@{spd}}} {{Phases=@{phases}}}'>
<span style="font-family: 'Pictos'">w</span>
</button> <br />
<label>STR</label> <input type="number" name="attr_str" />
<button type='roll' name='roll_str'
value='&{template:default} {{name=@{character_name}}} {{STR Effect=[[@{str}d6]]}} {{Knockback=[[1d6]]}}'></button><br />
<label>PRE</label> <input type="number" name="attr_pre" />
<button type='roll' name='roll_pre'
value='&{template:default} {{name=@{character_name}}} {{PRE Effect=[[@{pre}d6]]}} {{Knockback=[[1d6]]}}'></button><br />
</div>
<div class="col">
<label>DEF</label> <input type="number" name="attr_def" /> / <input type="number" name="attr_rdef" />r<br />
<label>BODY</label> <input type="number" name="attr_body" /> / <input type="number"
name="attr_body_max" /><br />
<label>REC</label> <input type="number" name="attr_rec" readonly="true" /> <button type='action' name='act_recover'>Recover</button> <br />
<label>STUN</label> <input type="number" name="attr_stun" readonly="true" /><br />
<label>KO</label> <input type="number" name="attr_ko" /> / <input type="number" name="attr_ko_max"
readonly="true" /><br />
<label>END</label> <input type="number" name="attr_end" /> / <input type="number" name="attr_end_max"
readonly="true" /><br />
</div>
</div>
<hr />
<button type='roll' name='roll_1'
value='&{template:default} {{name=@{character_name}}} {{1d6 Effect=[[1d6]]}} {{Knockback=[[1d6]]}}'>1</button>
<button type='roll' name='roll_2'
value='&{template:default} {{name=@{character_name}}} {{2d6 Effect=[[2d6]]}} {{Knockback=[[1d6]]}}'>2</button>
<button type='roll' name='roll_3'
value='&{template:default} {{name=@{character_name}}} {{3d6 Effect=[[3d6]]}} {{Knockback=[[1d6]]}}'>3</button>
<button type='roll' name='roll_4'
value='&{template:default} {{name=@{character_name}}} {{4d6 Effect=[[4d6]]}} {{Knockback=[[1d6]]}}'>4</button>
<button type='roll' name='roll_5'
value='&{template:default} {{name=@{character_name}}} {{5d6 Effect=[[5d6]]}} {{Knockback=[[1d6]]}}'>5</button>
<button type='roll' name='roll_6'
value='&{template:default} {{name=@{character_name}}} {{6d6 Effect=[[6d6]]}} {{Knockback=[[1d6]]}}'>6</button>
<button type='roll' name='roll_7'
value='&{template:default} {{name=@{character_name}}} {{7d6 Effect=[[7d6]]}} {{Knockback=[[1d6]]}}'>7</button>
<button type='roll' name='roll_8'
value='&{template:default} {{name=@{character_name}}} {{8d6 Effect=[[8d6]]}} {{Knockback=[[1d6]]}}'>8</button>
<button type='roll' name='roll_9'
value='&{template:default} {{name=@{character_name}}} {{9d6 Effect=[[9d6]]}} {{Knockback=[[1d6]]}}'>9</button>
<button type='roll' name='roll_10'
value='&{template:default} {{name=@{character_name}}} {{10d6 Effect=[[10d6]]}} {{Knockback=[[1d6]]}}'>10</button>
<button type='roll' name='roll_11'
value='&{template:default} {{name=@{character_name}}} {{11d6 Effect=[[11d6]]}} {{Knockback=[[1d6]]}}'>11</button>
<button type='roll' name='roll_12'
value='&{template:default} {{name=@{character_name}}} {{12d6 Effect=[[12d6]]}} {{Knockback=[[1d6]]}}'>12</button>
<button type='roll' name='roll_other'
value='&{template:default} {{name=@{character_name}}} {{?{Number of Dice}d6 Effect=[[?{Number of Dice}d6]]}} {{Knockback=[[1d6]]}}'>Ask</button>
<hr />
<div class="sheet-rounded-corners">
<h2>Powers and Skills</h2>
<fieldset class="repeating_powers">
<input type="number" name="attr_cost" />
<input type="text" class="sheet-long" name="attr_power" />
<input type="number" name="attr_end" /> <button type='action' name='act_end'>END</button>
</fieldset>
</div>
<div class="sheet-rounded-corners">
<h2>Situations</h2>
<fieldset class="repeating_disads">
<input type="number" name="attr_cost" />
<input type="text" class="sheet-long" name="attr_disad" />
</fieldset>
</div>
</div>
<script type="text/worker">
function spend_end(amount) {
getAttrs(['end', 'end_max'], (v) => {
const new_end = Math.max(0, parseInt(v['end']) - amount);
setAttrs({
['end']: Math.min(v['end_max'], new_end)
});
});
}
function recover(amount) {
getAttrs(['end', 'end_max', 'ko', 'ko_max'], (v) => {
const new_end = Math.min(parseInt(v['end_max']), Math.max(0, parseInt(v['end']) + amount));
const new_ko = Math.min(parseInt(v['ko_max']), Math.max(0, parseInt(v['ko']) + amount));
setAttrs({
['end']: new_end,
['ko']: new_ko
});
});
}
on('change:spd', () => {
getAttrs(['spd'], (v) => {
const speedChart = [
'4',
'3, 5',
'2, 4, 6',
'1, 3, 5, 6',
'1, 2, 4, 5, 6',
'1, 2, 3, 4, 5, 6'
];
setAttrs({
'phases': speedChart[parseInt(v['spd']) - 1] || "SPD must be between 1-6"
});
})
})
on('change:body_max', () => {
getAttrs(['body_max'], (v) => {
const body = v.body_max
setAttrs({
'rec': body,
'stun': body,
'ko_max': body * 2,
'end_max': body * 3
})
})
});
on('clicked:recover', (eventInfo) => {
getAttrs(['rec'], (v) => {
recover(parseInt(v['rec']))
})
});
on('clicked:repeating_powers:end', (eventInfo) => {
const source = (eventInfo.sourceAttribute).slice(0, -4);
getAttrs([`${source}_end`], (v) => {
spend_end(v[`${source}_end`]);
});
});
on('clicked:xp', () => {
// Costs are given as [cost per point, base value]
const costmap = {
"dex": [10, 11],
"int": [10, 11],
"ego": [10, 11],
"spd": [10, 1],
"str": [5, 2],
"pre": [5, 2],
"def": [1, 10],
"rdef": [4, 0],
"body_max": [10, 10]
}
let attrs = ["dex", "int", "ego", "spd", "str", "pre", "def", "rdef", "body_max"];
getSectionIDs("powers", (ids) => {
attrs = attrs.concat(ids.map(id => `repeating_powers_${id}_cost`));
getSectionIDs("disads", (ids) => {
attrs = attrs.concat(ids.map(id => `repeating_disads_${id}_cost`));
getAttrs(attrs, (v) => {
let totalcost = 0;
for(let i = 0; i < attrs.length; i++) {
let attrname = attrs[i];
let attrvalue = parseInt(v[attrname]) || 0;
let attrcostmap = costmap[attrname] || [1, 0];
let attrcost = (parseInt(attrvalue) - attrcostmap[1]) * attrcostmap[0];
if (attrname.startsWith('repeating_disads_')) {
attrcost = -Math.abs(attrcost);
}
console.log(`Attribute: ${attrname} Cost: ${attrcost}`);
totalcost = totalcost + attrcost;
}
setAttrs({
points: totalcost
});
})
});
});
})
</script>