Mitt verktyg som urspringligen bara handlade om att slumpa tabeller och kort har nu utvecklats med input. Innan jag beskriver vad som pågår ska jag lista en testkörning:
* Ett kort med spelarstatistik
* Två tärningar (t3 och t6)
* En kortlek med tre monsterkort
* En interaktiv graf för att välja handling i strid (attack, flee)
* En graf för att pendla mellan spelare och monster under strid
* En graf för att gå vidare i grottan (just nu med enbart två rum - korridor och rum med monster)
Fortfarande finns inget webbinterface, men jag vill lägga till det OCH möjligheten att spela flera stycken samtidigt.
Jag listar hela XML-filen här, även om den är 125 rader lång...
Exemplet ovan består av:Monster battle! In a dungeon!
Name of player: Olle
--- Player stats ---
Name: Olle
Attack: 6
Hit-points: 8
--------------------
Hit enter to enter dungeon...
Corridor leading south
Room with monster - prepare for battle!
You meet a orc.
Player Olle attacks
1. Attack
2. Flee
Choose your action (1-2): 1
Olle attacks! 6 damage to orc.
Hitpoints left: -1
The monster is defeated
Corridor leading south
Corridor leading south
Room with monster - prepare for battle!
You meet a tiny troll.
Player Olle attacks
1. Attack
2. Flee
Choose your action (1-2): 2
Player flees!
You're out of the dungeon!
* Ett kort med spelarstatistik
* Två tärningar (t3 och t6)
* En kortlek med tre monsterkort
* En interaktiv graf för att välja handling i strid (attack, flee)
* En graf för att pendla mellan spelare och monster under strid
* En graf för att gå vidare i grottan (just nu med enbart två rum - korridor och rum med monster)
Fortfarande finns inget webbinterface, men jag vill lägga till det OCH möjligheten att spela flera stycken samtidigt.
Jag listar hela XML-filen här, även om den är 125 rader lång...
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<story newline="print">
<print>Monster battle! In a dungeon!</print>
<!-- We use two dice in this game -->
<dice name="d6" sides="6" />
<dice name="d3" sides="3" />
<!-- Command-line input -->
<input name="name" label="Name of player: " validation="[a-zA-Z]+" />
<!-- Randomize player statistics -->
<card name="player">
<name>{name}</name>
<attack>{%d6 + %d6}</attack>
<hitpoints>{%d6 + %d6}</hitpoints>
</card>
<!-- Show the stats -->
<print>--- Player stats ---</print>
<print>Name: {player.name}</print>
<print>Attack: {player.attack}</print>
<print>Hit-points: {player.hitpoints}</print>
<print>--------------------</print>
<!-- Define the monster deck -->
<deck name="monsterdeck">
<card>
<name>tiny troll</name>
<attack>{%d3}</attack>
<hitpoints>{%d3}</hitpoints>
</card>
<card>
<name>troll</name>
<attack>{%d3}</attack>
<hitpoints>{%d6}</hitpoints>
</card>
<card>
<name>orc</name>
<attack>{%d3}</attack>
<hitpoints>{%d6 + %d3}</hitpoints>
</card>
</deck>
<!-- Attack flow with three nodes: Choose action, attack and flee -->
<!-- Assumes card "player" is set -->
<!-- Assumes card "monster" is set -->
<!-- Assumes variable "path" is set to 0 -->
<variable name="path" value="0" />
<graph name="player_attack" start="0">
<node id="0" connections="{path}">
<print>1. Attack</print>
<print>2. Flee</print>
<input name="path" label="Choose your action (1-2): " validation="^[1-2]$"/>
</node>
<node id="1" connections="0">
<!-- Player attacks the monster -->
<print>{player.name} attacks! {player.attack} damage to {monster.name}.</print>
<set card="monster" field="hitpoints" value="{monster.hitpoints - player.attack}" />
<print>Hitpoints left: {monster.hitpoints}</print>
</node>
<node id="2" connections="0">
<print>Player flees!</print>
<setFlag name="endbattle" />
</node>
</graph>
<!-- Battle flow with three nodes: Start, player attack and monster attack-->
<!-- Assumes card "player" is set -->
<!-- Assumes card "monster" is set -->
<graph name="battle" start="0">
<node id="0" connections="1">/start/</node>
<node id="1" connections="2">
<print>Player {player.name} attacks</print>
<!-- Always reset path to 0 before starting player attack graph. -->
<set variable="path" value="0" />
<!-- Run attack graph twice - once for choice input and once for executing the choice -->
<print>{@player_attack}</print>
<print>{@player_attack}</print>
<!-- Check if monster died - if yes, end battle -->
<if content="{monster.hitpoints}" lessThan="1">
<print>The monster is defeated</print>
<setFlag name="endbattle" />
</if>
</node>
<node id="2" connections="1">
<print>The monster attacks</print>
<set card="player" field="hitpoints" value="{player.hitpoints - monster.attack}" />
<print>Player has {player.hitpoints} hitpoints left</print>
<if content="{player.hitpoints}" lessThan="1">
<print>Player DED</print>
<setFlag name="endbattle" />
</if>
</node>
</graph>
<!-- Dungone flow with three nodes: start, corridor and room with monster -->
<graph name="dungeon" start="0">
<node id="0" connections="1">/start/</node>
<node id="1" connections="1,2">
<print>Corridor leading south</print>
</node>
<node id="2" connections="1">
<print>Room with monster - prepare for battle!</print>
<!-- Pick a card from monsterdeck and put it in slot "monster" -->
<pick from="monsterdeck" into="monster"/>
<print>You meet a {monster.name}.</print>
<clear type="flag" name="endbattle" />
<loop until="endbattle">
<print>{@battle}</print>
</loop>
<!-- Always start from player attack at next battle -->
<reset type="graph" name="battle" />
</node>
</graph>
<input name="hitenter" label="Hit enter to enter dungeon..." validation=""/>
<!-- Loop dungeon 10 times (TODO: until gameover?) -->
<loop times="5">
<print>{@dungeon}</print>
<sleep time="1"/>
</loop>
<print>You're out of the dungeon!</print>
</story>