Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View victorysoftworks's full-sized avatar

Victory Softworks victorysoftworks

View GitHub Profile
@victorysoftworks
victorysoftworks / crafting-tough-decisions.md
Last active January 18, 2021 02:26
Crafting Tough Decisions

Crafting Tough Decisions

At their core, adventure games are a series of difficult decisions the players must make with limited information, resources, and time. Whether you're designing an open-ended social adventure or a straight-up dungeon crawl, tough decisions are one of your best tools to inject drama, uncertainty, and challenge.

Tough decisions push players to thoughtfully manage they resources they're provided and engage with the details of your game world. Smart assessments lead your players to success with a minimum of loss, while poor assessments over time diminish your players' resources and ultimately lead to their demise.

In this lesson

  1. Why decisions are important for adventure design
  2. Types of decisions to include in your adventure
const test = 'This is a test'
test.attachComponent()
class CorrodableComponent extends Component {
constructor(durability) {
super(Priority.Normal)
this.durability = {
max: durability,
current: durability
}
}
<entity>
<component type="Name" name="steel ring" />
<component type="Corrodible" durability="20" corrodeMessage="The %e corrodes" destroyMessage="The %e crumbles to a pile of rust" />
<!-- Other components ... -->
</entity>
<entity>
<component type="Name" name="steel ring" />
<component type="CorrosionResistance" resistMessage="The magic jelly protects the %e from being rusted" />
<component type="Corrodible" durability="20" corrodeMessage="The %e corrodes" destroyMessage="The %e crumbles to a pile of rust" />
<!-- Other components ... -->
</entity>
<entity>
<component type="Name" name="cloud of corrosive gas" />
<component type="SameSquareEffect" once="false">
<effect type="Corrode" amount="2" corrodeMessage="Corrosive gas clouds surround the %t" />
</component>
<!-- Other components ... -->
</entity>
<entity>
<component type="Name" name="pool of acid" />
<component type="SameSquareEffect" once="false">
<effect type="Conditional" condition="target:not:flying">
<effect type="Corrode" amount="5" corrodeMessage="Corrosive acid splashes all over the %t" />
</effect>
</component>
<!-- Other components ... -->
</entity>
<entity>
<component type="Name" name="idol of corrosion" />
<component type="AuraEffect" range="3" once="false">
<effect type="Corrode" amount="2" corrodeMessage="The %s emits a cloud of corrosive gas" />
</component>
<!-- Other components ... -->
</entity>
<entity>
<component type="NamePrefix" prefix="slime-covered" />
<component type="Name" name="pillar" />
<component type="Solid">
<!-- Capital %S only retrieves the source entity's base name, such as "pillar" -->
<effect type="Corrode" amount="2" corrodeMessage="The corrosive slime covering the %S sticks to the %t" />
</component>
<!-- Other components ... -->
</entity>