Choice Scripting and Clean Coding

Just want to put this out here, possibly for people to reference when developing their own games and to get some tips from those with veteran choice script skills.

if Yes they are escapable: But You still can’t escape *else which can be annoying. I don’t understand why this is different than a *if, and thus can’t be escaped but ¯_(ツ)_/¯ break statement please!
You’re able to do this!

You walk into the dimly lit bar, walking over to the counter.

*if sight > 10
  You catch a glimpse of a few men with overcoats siting in the corner.

"Why hello there." The bartender says.

image: Through my quick scroll of the game development section of this forum, I’ve seen very little use of the *image command. How valued is this? Wouldn’t this be nice for, say, a map of the game world, or possibly images of what has happened to more clearly explain a scene than a bunch of words? Same with *sound, but I guess that’s a bit different.

Clean Coding: I’ve only done a bit of choice scripting (without *script), but I’ve come to dislike the general look of choice script. The everlong nesting of *choice and *if (Back to no break :angry:), is quite appalling especially to a clean C++ and Java programmer such as myself. Is there ways to clean up the language a bit to make it more manageable (like possibly with more labels or various scenes? Or would more scenes make it less intuitive what the player is doing?)

UPDATE so you don’t have to search the replies :wink:

face_choice Is, in most cases a great alternative to choice. It’s escapable and can preform many of the majority of the same actions choice can (Not goto but it does allow gosub! Check the wiki for more info on fake_choice http://choicescriptdev.wikia.com/wiki/ChoiceScript_Wiki). You can also do something like this credit Minnow:

*choice color shape
  #red
    #square
      *goto next
    #circle
      *goto next
  #blue
    #square
      *goto next
    #circle
      *goto next

Which allows multiple semi-independent choices on a single page so the player can select all of them at once! Try it out!

Thanks! And goodluck to everyone who is developing! I myself and currently working on a pretty ambitious project… :smirk:

But “if” statements are escapable without needing a “goto”, it’s only when you have an “if … elseif…else” combo that you need to use labels
You could have:

*if (gender="male")
	Blah blah
*if (gender!="male")
	Bleh bleh
And so on...

instead of:

*if (gender="male")
	Blah blah
	*goto andsoon
*else
	Bleh bleh
	*goto andsoon
*label andsoon
And so on...
1 Like

*if is escapable (So long as you only use *if)! (Ah, ninja’ed)

*if male
  Wears suit
*if female
  Wears dress
*if g_neutral
  Wears outfit

*image is fairly indeed fairly low value. For Choice of Games the only real common use is with chapter headers. Remember, it needs to look good on mobile, desktop and tablets.

As for clean coding, I’m not sure what you mean by asking for more labels and scenes? You can stick labels and links to other scenes just about anywhere. (Personally I virtually never nest one *choice inside another.) So long as you don’t add a paragraph break before your *goto it just jumps from one spot to the next, and if you use *goto_scene (rather than *finish) it jumps from one scene to the next without a page break.

1 Like

You can also do it like this:

*if (gender = "male")
    "I think you're cute,"
    *goto after
"Sorry, I'm gay,"
*label after
he says.
1 Like

I get you. I’m a stickler for proofreading, so as I learned ChoiceScript coding hygiene I hoarded it. Some of this may go without saying for you; CS is my first coding language, besides some dabbling in html and Basic.

  1. *selectable_if commands need to go on the same line as the choice they’re modifying. if commands, however, are recommended to be on their own line nested above the choice.
  2. Only use blank lines when breaking a paragraph of text; remember to indent when needed.
  3. Lowercase variables and scene names, always; only capitalize names saved in text strings. Standardize naming conventions for scenes, variables, spacing; consider making chronological scenes numbered or alphabetical.
  4. Whenever you get about three indents in, send a goto to a new label. This resets the spacing to zero. Alternately, find ways to handle some functions with a subroutine and send a *gosub.

I might be back if I think of more, but those have all saved on file size without sacrificing function, or have just made everything simpler and more organized.

6 Likes

Personally I’ve been making lots of use of the *image command from the first day I started dabbling with ChoiceScript. Of course it is easy for me to generate images for my game and they fit with it organically.

I might like the *sound if it could be triggered instantly by player actions, I suppose. If a player opens a spooky door it ought to creak; if a player triggers a fire alarm it ought to blare. The single ambient sound track seems like something that will be rarely used.

1 Like

While we’re at it, I recommend using *fake_choice for fun and profit! As an editor I don’t like to see a *choice + *gotos and a new *label when all the options resolve to the same label. Save yourself the code: use a *fake_choice–it doesn’t mean the choice is meaningless, it just means it is code-wise.

12 Likes

In my toying with choicescript I aways make use of fake choice since my labels are generally triggered by stats check and not with *goto commands.

I like this way so every *fake_choice can be used as a mean to *set my variables accordingly with the players action. So the story flux can be only stats oriented and the end you get and the patch you take still vary from play to play…

How much point is there in using *choice rather than *fake_choice at any point? I appear to have managed having a *goto in a *fake_choice that worked, so what really is the difference?

1 Like

I can vaguely recall reading that in certain situations *choice would work correctly while *fake_choice would throw an error, though I’ve never run into those situations myself and can’t remember the details I read.

I do know one use of *choice where *fake_choice can’t stand in — putting multiple semi-independent choices on a single page, so the player can select all of them at once. For example, choosing your MC’s hair color, hair length, and hair style. I believe @Fiogan is using one in The Beastie Watch to set the MC’s philosophy and outlook on life. The code itself is a little complicated, and ends up looking something like this:

*choice color shape
  #red
    #square
      *goto next
    #circle
      *goto next
  #blue
    #square
      *goto next
    #circle
      *goto next

When run, this will appear to produce two separate choices. Before the first, it will say *"Select a (first word following choice, “color” in this example)," then it will display a choice between red and blue. Before the second, it will say *"Select a (second word following choice, in this case “shape”)," then it will display a choice between square and circle.

There are a lot of tricks to making it function — those words that follow *choice are mandatory, and you can only use one word per tier of choices. Every deeper tier of #options must be completely and exactly copied under each higher-tier #option. Variables you *set must only be set under the final tier of #options, right above your *goto commands. There are probably some other tricks I’m forgetting at the moment.

It gets messy. It gets messy frighteningly quickly.

I suspect it’s close to the exact opposite of clean coding.

As an example, several months ago I wrote, purely for practice, a three-tier *choice for choosing a character’s hair length, color, and texture all on the same page. It worked! And from a play perspective was beautifully simple. And it could only be done with *choice, not *fake_choice.

But with six hair lengths (bald, very short, etc,) five colors (blonde, red, etc,) four textures (straight, wavy, etc,) and a variable for each thing to be chosen, the whole abomination ended up as nearly 640 lines of code.

If you really want to see that mess I wrote to style an MC's hair, it looks like this...
*choice length color texture
  #bald
    #blonde
      #straight
        *set hair_length "bald"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "bald"
        *set hair_color "blonde"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "bald"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "bald"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "bald"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "bald"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "bald"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "bald"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "bald"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "bald"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "bald"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "bald"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "bald"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "bald"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "bald"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "bald"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "bald"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "bald"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "bald"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "bald"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes
  #very short
    #blonde
      #straight
        *set hair_length "very short"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *goto eyes
        *set hair_length "very short"
        *set hair_color "blonde"
        *set hair_texture "wavy"
      #curly
        *set hair_length "very short"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very short"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "very short"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very short"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very short"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very short"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "very short"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very short"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very short"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very short"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "very short"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very short"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very short"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very short"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "very short"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very short"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very short"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very short"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes
  #short
    #blonde
      #straight
        *set hair_length "short"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "short"
        *set hair_color "blonde"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "short"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "short"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "short"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "short"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "short"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "short"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "short"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "short"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "short"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "short"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "short"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "short"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "short"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "short"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "short"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "short"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "short"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "short"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes
  #medium
    #blonde
      #straight
        *set hair_length "medium"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "medium"
        *set hair_color "blonde"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "medium"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "medium"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "medium"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "medium"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "medium"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "medium"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "medium"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "medium"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "medium"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "medium"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "medium"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "medium"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "medium"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "medium"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "medium"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "medium"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "medium"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "medium"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes
  #long
    #blonde
      #straight
        *set hair_length "long"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "long"
        *set hair_color "blonde"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "long"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "long"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "long"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "long"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "long"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "long"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "long"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "long"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "long"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "long"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "long"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "long"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "long"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "long"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "long"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "long"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "long"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "long"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes
  #very long
    #blonde
      #straight
        *set hair_length "very long"
        *set hair_color "blonde"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very long"
        *set hair_color "blonde"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very long"
        *set hair_color "blonde"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very long"
        *set hair_color "blonde"
        *set hair_texture "kinky"
        *goto eyes
    #red
      #straight
        *set hair_length "very long"
        *set hair_color "red"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very long"
        *set hair_color "red"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very long"
        *set hair_color "red"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very long"
        *set hair_color "red"
        *set hair_texture "kinky"
        *goto eyes
    #auburn
      #straight
        *set hair_length "very long"
        *set hair_color "auburn"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very long"
        *set hair_color "auburn"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very long"
        *set hair_color "auburn"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very long"
        *set hair_color "auburn"
        *set hair_texture "kinky"
        *goto eyes
    #brown
      #straight
        *set hair_length "very long"
        *set hair_color "brown"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very long"
        *set hair_color "brown"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very long"
        *set hair_color "brown"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very long"
        *set hair_color "brown"
        *set hair_texture "kinky"
        *goto eyes
    #black
      #straight
        *set hair_length "very long"
        *set hair_color "black"
        *set hair_texture "straight"
        *goto eyes
      #wavy
        *set hair_length "very long"
        *set hair_color "black"
        *set hair_texture "wavy"
        *goto eyes
      #curly
        *set hair_length "very long"
        *set hair_color "black"
        *set hair_texture "curly"
        *goto eyes
      #kinky
        *set hair_length "very long"
        *set hair_color "black"
        *set hair_texture "kinky"
        *goto eyes

Edit on 04 Dec. 2016:
I should have included a screenshot of how that hair-selection code looks when implemented. Omitting that was a mistake.

Here's a correction for that mistake.

Also, probably I should have linked to The Beastie Watch’s discussion topic, rather than directly to the game itself. That should be corrected as well now.

2 Likes

This:

*fake_choice
#Option
#Option
#Option

More text.

is shorter than and easier to read (i.e., edit) than this:

*choice
#Option
*goto same_label
#Option
*goto same_label
#Option
*goto same_label

*label same_label
*comment nowhere else in the game directs the player to the label same_label, it’s only for this choice and the subsequent gotos

More text.

1 Like

Because you can easily *goto within fake choices as well as regular choices, what benefit is there to using a regular choice at all? I thought regular choices were desired by CoG in every chapter, but why couldn’t an author simply treat a *fake_choice as a *choice in regards to branching? Other than a circumstance such as @Minnow mentions. I’m basically asking the same question as @TSSL. It’s easy to insert small branches (a few lines, essentially less than a page) under each option in a fake choice without creating a label for each, and then reconverging into the same text. Or simply *fake_choicing and using *goto if necessary to reach another imbedded choice. So why use *choice at all?

1 Like

You guys are not considering the case I’m referring to.

When you are not branching you can avoid extra unnecessary code and labels by simply using *fake_choice.

No, I’m considering it entirely.

What I mean is, if you -do- branch, you can avoid unnecessary code by using *fake_choice. As one example, let’s say you make a choice where one of your choices branches the story, and two choices lead to the same path with some stat difference. If you use *fake_choice, you can still branch using a *goto under one option, but avoid using *goto and let the story continue with the other two options.

1 Like

Meh, I care less about that for some reason. You could do that, you could use goto and label because you’re significantly branching the story and it’s actually easier for me as an editor to CTRL+F to follow a path…those lines of code annoy me far less. But in the first instance you’re not using the right tool for the job.

1 Like

So I think what you’re saying is that *choice has a practical use from an -editorial- standpoint. First I’ve heard of CTRL+F. So it makes sense to me in that light, if editorial tools create a difference between *choice and *fake_choice. From a scripting point of view, *fake_choice is superior in nearly all ways because it automatically falls out into consecutive story, which is a lot easier to script much of the time. When you say ‘not using the right tool for the job’, I read ‘making it harder to properly edit’. We authors come at it from a different angle, I think, not using quite the same toolset. For us, *fake_choice is superior for writing and scripting, to *choice. This does not account for things that may be happening during the editing process, and I think the confusion of a lot of authors who have not published with CoG comes from that not having been communicated. Ie, why CoG wants anyone to use *choice when for a coder, *fake_choice functions better. For example, if CoG uses an editorial program where *choice creates a branch marker, and *fake_choice does not, that makes a difference for editing… but isn’t something known to a writer writing, who sees *fake_choice as doing everything *choice does, and more.

1 Like

I think we’ve had this discussion elsewhere on the forum. My internet’s broken though so I can’t search for the appropriate thread.

It’s something that’s bothered me too, the question of why we’d ever need to use choice when fake_choice seems better.

I think I read somewhere that choice is better at catching errors than fake_choice is.

In so much as if you forget to put a goto in a choice statement you’ll get alerted to it. If you forget to put a needed goto in a fake_choice then it’s trickier to pick up the error.

I seem to recall there’s also been a few weird bugs showing up on fake choice that don’t appear with choices.

4 Likes

Ah, good to know! Though these still seem to be a matter of editing, and preventing weird things in game-flow. Makes sense in quickly knowing these types of errors aren’t in the story rather than hunting them down manually and possibly missing some even through editing. Aye, okay, it makes sense why *choice would be a better option at times. And it does coax a style of scripting that’s somewhat easier to read to use *choice and *goto and *labels more frequently (something I’ve learned personally). I can imagine the difference in my head of trying to proofread both styles, and there is a certain cleanness in labels, without so much imbedded script.

IF ARE ESCAPABLE IF YOU ONLY USE IFS?

Pardon the caps, but you just changed my life.

EDIT: Going back through and cleaning up my code is going to me the most wonderful thing imaginable. Too me until the latter half before I realized fake choices were an option…

EDIT on the EDIT:

Does that mean I can use something like:

Paragraph describing stuff

*if cape
  Bit about how cool your cape flutters in the wind

The paragraph continues...

Or do I need to have two variables for it to work? One ‘cape’ and one ‘nocape’

2 Likes

Nope, the code as is should work fine. Assuming you’ve got a cape variable which is able to be set true/false.