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

508 lines
18 KiB
HTML
Raw Permalink 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.
<div class="basics">
<label class="name">
<span>Character name: </span>
<input spellcheck="false" type="text" name="attr_character_name"/>
</label>
<label class="pronouns">
<span>Pronouns: </span>
<input spellcheck="false" type="text" name="attr_pronouns"/>
</label>
<label class="look">
<span>Look: </span>
<input type="text" name="attr_look" />
</label>
</div>
<div class="position-and-role">
<h2>Position and Role</h2>
<div>
<select name="attr_role">
<option>-- Jammer roles --</option>
<option class="jammer-role" value="jammer-star">Star jammer</option>
<option class="jammer-role" value="jammer-power">Power jammer</option>
<option class="jammer-role" value="jammer-drama">Drama queen</option>
<option class="jammer-role" value="jammer-sweet">Sweetheart</option>
<option>-- Blocker roles --</option>
<option class="blocker-role" value="blocker-pivot">Pivot</option>
<option class="blocker-role" value="blocker-hitter">Heavy hitter</option>
<option class="blocker-role" value="blocker-drama">Drama llama</option>
<option class="blocker-role" value="blocker-baby">Baby</option>
<input type='hidden' class='tabstoggle' name='attr_position' value='jammer' />
</select>
</div>
</div>
<h2>Stats</h2>
<div class="stats">
<label>
<span class="stat-name">Agility</span>
<input type="number" name="attr_agility" />
<span class="stat-roll">
<button type="roll"
value="/r (@{agility}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6>4"
name="roll_agility_high"><span>Offense</span></button>
<button type="roll"
value="/r (@{agility}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6<3"
name="roll_agility_low"><span>Defense</span></button>
</span>
</label>
<label>
<span class="stat-name">Power</span>
<input type="number" name="attr_power" />
<span class="stat-roll">
<button type="roll"
value="/r (@{power}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6>4"
name="roll_agility_high"><span>Offense</span></button>
<button type="roll"
value="/r (@{power}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6<3"
name="roll_agility_low"><span>Defense</span></button>
</span>
</label>
<label>
<span class="stat-name">Drama</span>
<input type="number" name="attr_drama" />
<span class="stat-roll">
<button type="roll"
value="/r (@{drama}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6>4"
name="roll_agility_high"><span>Stir up drama</span></button>
<button type="roll"
value="/r (@{drama}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6<3"
name="roll_agility_low"><span>Shut 'em down</span></button>
</span>
</label>
<label>
<span class="stat-name">Heart</span>
<input type="number" name="attr_heart" />
<span class="stat-roll">
<button type="roll"
value="/r (@{heart}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6>4"
name="roll_agility_high"><span>Boost Morale</span></button>
<button type="roll"
value="/r (@{heart}+?{Bonus dice?|0}-?{Disadvantage dice?|0})d6<3"
name="roll_agility_low"><span>Set 'em up</span></button>
</span>
</label>
</div>
<h2>Playbook</h2>
<ol>
<li>
<h3>Play 1</h3>
<div class="moves">
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" name="attr_play1move1move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" class="moveeffect" name="attr_play1move1effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play1move1stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" name="attr_play1move1desc"></textarea>
</div>
</div>
<div class="or">or</div>
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_play1move2move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_play1move2effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play1move2stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_play1move2desc"></textarea>
</div>
</div>
</div>
</li>
<li>
<h3>Play 2</h3>
<div class="moves">
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_play2move1move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_play2move1effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play2move1stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_play2move1desc"></textarea>
</div>
</div>
<div class="or">or</div>
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_play2move2move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_play2move2effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play2move2stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_play2move2desc"></textarea>
</div>
</div>
</div>
</li>
<li>
<h3>Play 3</h3>
<div class="moves">
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_play3move1move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_play3move1effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play3move1stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_play3move1desc"></textarea>
</div>
</div>
<div class="or">or</div>
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_play3move2move" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_play3move2effect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_play3move2stat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_play3move2desc"></textarea>
</div>
</div>
</div>
</li>
<li>
<h3>Nimble</h3>
<div class="moves">
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_nimblemove" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_nimbleeffect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_nimblestat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_nimbledesc"></textarea>
</div>
</div>
</div>
</li>
<li>
<h3>Physical</h3>
<div class="moves">
<div class="move">
<div class="label">Move:</div>
<div class="cell">
<input class="movename" type="text" spellcheck="false" name="attr_physicalmove" />
</div>
<div class="label">Effect:</div>
<div class="cell">
<input type="text" spellcheck="false" class="moveeffect" name="attr_physicaleffect" />
</div>
<div class="label">Stat:</div>
<div class="cell">
<input type="text" class="movestat" name="attr_physicalstat" />
</div>
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" spellcheck="false" name="attr_physicaldesc"></textarea>
</div>
</div>
</div>
</li>
<li>
<h3>Safe</h3>
<div class="moves">
<div class="move">
<div class="label">Description:</div>
<div class="cell">
<textarea type="text" name="attr_safemove2desc">Relieve two stress</textarea>
</div>
</div>
</div>
</li>
</ol>
<h3>Bonds</h3>
<fieldset class="repeating_bonds">
<p><textarea name="attr_bond" spellcheck="false" type="text" spellcheck="false"></textarea></p>
</ul>
<script type="text/worker">
const buttonlist = ["jammer", "blocker"];
buttonlist.forEach(function(button) {
on(`clicked:${button}`, function() {
setAttrs({
"position": button
});
});
});
const moves = {
"Give a whip": {
"move": "Give a whip",
"effect": "Offense",
"stat": "POWER",
"desc": "Grab your jammer's arm and swing her as hard as you can around the track.\n\n1+: Replace up to two of your Team Dice with your successes."
},
"Clear the way": {
"move": "Give a whip",
"effect": "Offense",
"stat": "POWER",
"desc": "You knock an opponent out of your jammer's way.\n\n1+: Replace up to two of your Team Dice with your successes."
},
"Booty block": {
"move": "Booty block",
"effect": "Defense",
"stat": "POWER",
"desc": "You sit your butt right in front of that jammer and refuse to budge.\n\n1+ Replace up to two of your opponent's Team Dice with your successes."
},
"Can-opener": {
"move": "Can-opener",
"effect": "Defense",
"stat": "POWER",
"desc": "Plant your shoulder firmly into your target's chest to lay them flat on the floor.\n\n1+: Replace up to two of your opponent's Team Dice with your successes."
},
"Grab a goat": {
"move": "Grab a goat",
"effect": "Offense",
"stat": "AGILITY",
"desc": "Trap an opposing blocker to slow down the pack and make it easier to score.\n\n1+: Replace up to two of your Team Dice with your successes."
},
"Wall it up": {
"move": "Wall it up",
"effect": "Defense",
"stat": "POWER",
"desc": "Create an impenetrable wall with your teammates through which the jammer cannot pass.\n\n1+: Replace up to two of your opponent's Team Dice with your successes."
},
"Recycle": {
"move": "Recycle",
"effect": "Defense",
"stat": "AGILITY",
"desc": "Knock an opponent out of bounds, then deftly spin around and race backwards to force a track cut.\n\n1+: Replace up to two of your Team Dice with your successes."
},
"Inspire": {
"move": "Inspiration",
"effect": "Set 'em up",
"stat": "HEART",
"desc": "You show off a little to help your teammates relax.\n\n1+ You inspire everyone to do their best. Give advantage.\n2+: Remove stress from any teammate."
},
"Intimidate": {
"move": "Intimidation",
"effect": "Shut 'em down",
"stat": "DRAMA",
"desc": "You get in another players face and release a mighty roar.\n\n1+: Give your opponent disadvantage.\n2+: Your display is disturbing. Give an opponent stress."
},
"Communicate": {
"move": "Communication",
"effect": "Set 'em up",
"stat": "HEART",
"desc": "Help you team know where to go and what to do.\n\n1+ You inspire everyone to do their best. Give advantage.\n2+: Remove stress from any teammate."
},
"Misdirect": {
"move": "Misdirection",
"effect": "Shut 'em down",
"stat": "DRAMA",
"desc": "You leave the inside open for the jammer - then swoop in for the kill.\n\n1+: Give your opponent disadvantage.\n2+: You confuse the opposing team. Give an opponent stress."
},
"Jump the apex": {
"move": "Jump the Apex",
"effect": "Offense",
"stat": "AGILITY",
"desc": "You leap across the out-of-bounds area on the inside of the track. \n\n1+: You lap members of the opposing team! Replace up to two of your Team Dice with your successes."
},
"Juke around": {
"move": "Juke around",
"effect": "Offense",
"stat": "AGILITY",
"desc": "Hop nimbly around the opposing jammers and pirouette past walls. \n\n1+: Replace up to two of your Team Dice with your successes."
},
"Eat the baby": {
"move": "Eat the baby",
"effect": "Defense",
"stat": "POWER",
"desc": "You force the opposing jammer back so your teammates can get in front of them.\n\n1+: Replace up to two of your opponent's Team Dice with your successes."
},
"Take a whip": {
"move": "Wrecking ball",
"effect": "Offense",
"stat": "POWER",
"desc": "You grab onto a teammate and steal all their momentum to drive yourself forward. \n\n1+: Replace up to two of your Team Dice with your successes."
},
"Dogfight": {
"move": "Dogfight",
"effect": "Defense",
"stat": "AGILITY",
"desc": "You take on the opposing jammer one-on-one and leave them in the dust.\n\n1+: Replace up to two of your opponent's Team Dice with your successes."
},
"Fake out": {
"move": "Fake out",
"effect": "Shut 'em down",
"stat": "DRAMA",
"desc": "You fake left and go right, or pretend to be winded then bolt for the inside line.\n\n2+: Give an opponent disadvantage.\n1+: You confuse the opposing team. Give an opponent stress."
}
}
function setMove(play, moveName, setObj) {
let move = moves[moveName];
if (move) {
setObj[`${play}move`] = moveName
setObj[`${play}stat`] = move["stat"];
setObj[`${play}effect`] = move["effect"];
setObj[`${play}desc`] = move["desc"];
} else {
console.log("unable to find move with the name", moveName);
}
}
function setMoves(moveNames) {
let setObj = {}
setMove("play1move1", moveNames[0], setObj);
setMove("play1move2", moveNames[1], setObj);
setMove("play2move1", moveNames[2], setObj);
setMove("play2move2", moveNames[3], setObj);
setMove("play3move1", moveNames[4], setObj);
setMove("play3move2", moveNames[5], setObj);
setMove("nimble", moveNames[6], setObj);
setMove("physical", moveNames[7], setObj);
setAttrs(setObj);
}
let statLines = {
"drama": {
"agility": 1,
"power": 1,
"drama": 3,
"heart": 1
},
"heart": {
"agility": 1,
"power": 1,
"drama": 1,
"heart": 3
},
"agility": {
"agility": 3,
"power": 1,
"drama": 1,
"heart": 1
},
"power": {
"agility": 1,
"power": 3,
"drama": 1,
"heart": 1
}
}
function setStats(highest) {
let statLine = statLines[highest];
if (statLine) {
setAttrs(statLine);
} else {
console.log("unable to find stat line for stat", highest);
}
}
on("change:role", function(eventInfo) {
getAttrs(["role"], function (values) {
let role = values.role || "";
switch (role) {
case "jammer-star":
setMoves(["Inspire", "Jump the apex", "Dogfight", "Fake out", "Take a whip", "Eat the baby", "Juke around", "Wall it up"])
setStats("agility");
break;
case "jammer-power":
setMoves(["Inspire", "Jump the apex", "Dogfight", "Fake out", "Take a whip", "Eat the baby", "Juke around", "Wall it up"])
setStats("power");
break;
case "jammer-drama":
setMoves(["Inspire", "Jump the apex", "Dogfight", "Fake out", "Take a whip", "Eat the baby", "Juke around", "Wall it up"])
setStats("drama");
break;
case "jammer-sweet":
setMoves(["Inspire", "Jump the apex", "Dogfight", "Fake out", "Take a whip", "Eat the baby", "Juke around", "Wall it up"])
setStats("heart");
break;
case "blocker-pivot":
setMoves(["Communicate", "Clear the way", "Can-opener", "Intimidate", "Recycle", "Give a whip", "Grab a goat", "Booty block"])
setStats("agility");
break;
case "blocker-hitter":
setMoves(["Communicate", "Clear the way", "Can-opener", "Intimidate", "Wall it up", "Give a whip", "Grab a goat", "Booty block"])
setStats("power");
break;
case "blocker-drama":
setMoves(["Inspire", "Clear the way", "Can-opener", "Intimidate", "Recycle", "Give a whip", "Grab a goat", "Booty block"])
setStats("drama");
break;
case "blocker-baby":
setMoves(["Communicate", "Clear the way", "Can-opener", "Misdirect", "Recycle", "Give a whip", "Grab a goat", "Booty block"])
setStats("heart");
break;
}
});
})
</script>