"Space Exploration" (in SugarCube 2.0)
This //Space Exploration// example borrows heavily from games like //FTL// (2012) where randomly generated obstacles prevent the player from her goal.
!!!Narrative Premise
Your ship has taken damage while in a hazardous area of space. With the navigation system broken, you know that it will take 15 hyperspace jumps to make it out of the area and back into safety.
!!!Game Rules
Each hyperspace jump takes 1 unit of fuel.
Because the navigation system is broken, each jump will land you in a random system of 1-4 planets. Those marked in RED are high-risk, high-reward. Those marked in GREEN are low-risk, low-reward. (The chance of RED or GREEN is 50%.)
Starting with 20 health and 2 units of fuel for your ship, explore space, planets you find, and try to make your way across the hazardous area of space.
[[Programming the rules]]
<<set $health to 20>>
<<set $fuel to 2>>
<<set $system to [] >>
<<set $numberOfJumpsLeft to 15>>
[[Explore Space 1]]<<link "Hyperjump">>
<<set $fuel to $fuel - 1>>
<<set $numberOfJumpsLeft to $numberOfJumpsLeft - 1>>
<<goto "Explore Space 2">>
<</link>>
<div id="HUD">
<<include "HUD">>
</div>
<<include "Generate System">>
<<include "Display System">><<link "Hyperjump">>
<<set $fuel to $fuel - 1>>
<<set $numberOfJumpsLeft to $numberOfJumpsLeft - 1>>
<<goto "Explore Space 1">>
<</link>>
<div id="HUD">
<<include "HUD">>
</div>
<<include "Generate System">>
<<include "Display System">><<silently>>
<<set _planets to random(1, 4) >>
<<set $system to new Array(_planets) >>
<<for _i to 0; _i lt _planets; _i++>>
<<set $system[_i] to either("RED", "GREEN") >>
<</for>>
<</silently>>
<<nobr>>
<<for _i to 0; _i lt $system.length; _i++>>
<<if $system[_i] eq "RED">>
<<linkreplace $system[_i]>>
<<include "Show Outcome - Red">>
<</linkreplace>>
<</if>>
<<if $system[_i] eq "GREEN">>
<<linkreplace $system[_i]>>
<<include "Show Outcome - Green">>
<</linkreplace>>
<</if>>
<br>
<</for>>
<</nobr>>
<<nobr>>
<<set _percentage to random(1, 10) >>
<<if _percentage gte 6>>
<<set _foundHealth to random( 1, 5) >>
<<set _foundFuel to random( 1, 3) >>
The hostile environment damaged the ship, but extra fuel was found. (-_foundHealth to health and +_foundFuel to fuel)
<<set $health to $health - _foundHealth >>
<<set $fuel to $fuel + _foundFuel >>
<<elseif _percentage lte 3>>
<<set _foundHealth to random(2, 7) >>
A hostile ship attacked. (-_foundHealth to health)
<<set $health to $health - _foundHealth >>
<<else>>
Nothing happened.
<</if>>
<<replace "#HUD">>
<<include "HUD">>
<</replace>>
<</nobr>>
<<nobr>>
<<set _percentage to random(1, 10)>>
<<if _percentage eq 1>>
<<set _foundFuel to random( 1, 2)>>
Fuel was found in some wreckage. (+_foundFuel to fuel)
<<set $fuel to $fuel + _foundFuel>>
<<elseif _percentage gte 6>>
<<set _foundHealth to random( 1, 3) >>
During a brief pause, the ship was able to be repaired. (+_foundHealth to health)
<<set $health to $health + _foundHealth>>
<<else>>
Nothing happened.
<</if>>
<<replace "#HUD">>
<<include "HUD">>
<</replace>>
<</nobr>>Health: $health
Fuel: $fuel
Number of Jumps Left: $numberOfJumpsLeft
<<include "Check Status">>The ship exploded in flight.
!!!Game Over.Without fuel, the ship tumbled and spun in the endless black.
!!!Game OverAfter 15 hyperjumps, the ship left the hazardous area and called for help.
!!!Success!<<nobr>>
<<if $health lte 0>>
<<goto "Destroyed">>
<</if>>
<<if $fuel lte 0>>
<<goto "Lost in space">>
<</if>>
<<if $numberOfJumpsLeft lte 0>>
<<goto "Safe">>
<</if>>
<</nobr>>