mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-30 03:40:32 +00:00
209 lines
9.7 KiB
HTML
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>
|
|
|
|
|
|
|
|
|