Non repeatable strings (code example here)

That makes my head spin.

Here’s how I would make random non-repeatable events:

*create event0 false
*create event1 false
*create event2 false
*create event3 false
*create event4 false
*create random_event 0

...

*label new_event

*rand random_event 0 4

*if (random_event = 0)
  *if (event0 = false)
    *set event0 true
    *gosub_scene event0
    *finish
  *else
    *goto new_event

*if (random_event = 1)
  *if (event1 = false)
    *set event1 true
    *gosub_scene event1
    *finish
  *else
    *goto new_event

*if (random_event = 2)
  *if (event2 = false)
    *set event2 true
    *gosub_scene event2
    *finish
  *else
    *goto new_event

*if (random_event = 3)
  *if (event3 = false)
    *set event3 true
    *gosub_scene event3
    *finish
  *else
    *goto new_event

*if (random_event = 4)
  *if (event4 = false)
    *set event4 true
    *gosub_scene event4
    *finish
  *else
    *goto new_event

It’s super boring, but it’s pretty clear what’s happening!

(by the way, it’d crash if you do it six times, so I would also probably include an *if statement for if all the events have already triggered, as well).

Another way I can think of, not sure if it would actually work:

*create cards 0
*create opponent_cards 0
*create card_name ""
*create opponent_card_name ""
...

*label new_game
*rand cards 0 53
*gosub assign_cards

You've just drawn the ${card_name}! Do you think you have a higher card than your opponent?

*choice
  # Yes!
    *if (cards > opponent_cards)
      You win!
      *goto play_again
    *else
      Eat shit! Your opponent drew the ${opponent_card_name}!
      *goto play_again
  # No! Fold!
    You get nothing.
    *goto play_again

*label play_again
Play again?
*choice
  # Yes.
    *goto new_game
  # No.
    *finish

*label assign_cards
*rand opponent_cards 0 53
*if (cards = opponent_cards)
  *goto assign_cards
*if cards = 0
  *set card_name "Ace of Spades"
...
*if opponent_cards = 0
  *set opponent_card_name "Ace of Spades"
...
*return

A bit laborious to do all the card name strings, but you’d have to do that for your version as well. Mine’s just a simple check of whether the two cards drawn are the same. I think trying to code more complex games like poker or crazy eights or whatever is probably a bad idea in ChoiceScript.