0 votes
by (8.8k points)

Merry Boxing Day everybody!

So I'd like to generate a set of related traits for my NPCs.  Here's how I'm doing it right now:

<<set $npc to {}>>

<<set _jobRoll to random (1, 4)>>

<<if _jobRoll == 1>>
  <<set $npc.job to "rat catcher",
        $npc.socialClass to "low",
        $npc.equipment to "rat trap">>

  <<elseif _jobRoll == 2>>
  <<set $npc.job to "witch finder",
        $npc.socialClass to "medium",
        $npc.equipment to "pointy hat">>

  <<elseif _jobRoll == 3>>
  <<set $npc.job to "peasant",
        $npc.socialClass to "low",
        $npc.equipment to "mud">>

  <<elseif _jobRoll == 4>>
  <<set $npc.job to "priest",
        $npc.socialClass to "high",
        $npc.equipment to "holy book">>

This works, but I feel like I'm doing it inefficiently.  Is there a way to do this without the _jobRoll bit?  What I'd like to do is something like:

<<set $npc to {}>>

<<set setup.jobs to [
  Job title: 'Rat catcher' Social class: 'low' Equipment: "rat trap",
  Job title: 'Witch finder' Social class: 'medium' Equipment: "pointy hat"]>>

<<set $npc.job to setup.jobs.random()>>

Is that possible?

2 Answers

+1 vote
by (156k points)
selected by
Best answer

Is that possible?

Yes, if you define each element of your setup.jobs Array as a Generic Object.

<<set $npc to {}>>

<<set setup.jobs to [
  {"Job title": 'Rat catcher', "Social class": 'low', "Equipment": "rat trap"},
  {"Job title": 'Witch finder', "Social class": 'medium', "Equipment": "pointy hat"}

<<set $npc.job to setup.jobs.random()>>

Job title: <<= $npc.job["Job title"]>>
Social class: <<= $npc.job["Social class"]>>
Equipment: <<= $npc.job["Equipment"]>>


by (8.8k points)
Perfect, thank you Greyelf.
+1 vote
by (2.2k points)

You probably want to take a look at Improv, which is procedural text generator based on world model. There was even dedicated SugarCube plugin somewhere IIRC.

by (8.8k points)
Very interesting!  Thanks, NK.
Welcome to Twine Q&A, where you can ask questions and receive answers from other members of the community.

You can also find hints and information on Twine on the official wiki and the old forums archive.

See a spam question? Flag it instead of downvoting. A question flagged enough times will automatically be hidden while moderators review it.