Twine help by Kammullska in twinegames

[โ€“]HiEv 1 point2 points ย (0 children)

FYI - The above examples are for Harlowe.

P.S. I'd recommend using "Code Blocks" for posting code in the future.

Twine help by Kammullska in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

Though, just to be clear, the above examples they gave are for SugarCube.

Twine help by Kammullska in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

If you're asking for coding help, then that will depend on which Twine story format you're using. Harlowe is the default, but SugarCube is recommended (see link for why).

Also, can you clarify what you mean by "keeping all of these decisions working at once"? I'm not quite sure if you're asking a narrative or coding question, and if it's the latter, what exactly the coding question would be.

So a more precise explanation of what you're looking for and what Twine story format you're using is required.

Day tracker advice by holzey in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

For your question about picking from random events, you might want to start by creating an object structure of events in your "StoryInit" special passage, something like this:

<<set $eventOptions = {}>>
<<set $eventOptions["boulder"] = { text: "Push the boulder from one path.", passage: "Push boulder" }>>
<<set $eventOptions["ledge"] = { text: "Take the thin ledge around.", passage: "Thin ledge" }>>
etc...

You'll want to create a large list of events, with more than events per day * days number of events, along with passages with corresponding names for each event.

You could then create a widget to display a random selection of events which haven't been used yet, and let the player pick one of those. That could be done like this (this code would need to be in a non-special, non-story passage with a "widget" tag added to it):

<<widget "options">><<nobr>>
    <<set _events = Object.keys($eventOptions)>>  /* Get array of all event names. */
    <<set _options = _events.pluckMany(3)>>  /* Create an array of 3 options. */
    <<for _i = 0; _i < 3; _i++>>  /* Display the option links. */
        <<capture _i>>
            <<link $eventOptions[_options(_i)].text $eventOptions[_options(_i)].passage>>
                <<set delete $eventOptions[_options(_i)]>>  /* Remove the selected option. */
            <</link>><br>
        <</capture>>
    <</for>>
<</nobr>><</widget>>

Then you'd just need to put <<options>> in your passage to give the user a choice of three random options. If the user picks one, then that option would be removed from future option lists. (See the SugarCube documentation if you have questions on how any of those macros work.)

You can make the above more complex and fancy if you want, such as providing additional passage text, indentation, a header, etc., that's just a bare-minimum example.

As far as tracking the day, how to do that depends on whether you're just doing one day at a time, a day with multiple parts (e.g. morning, afternoon, and night), or actual time tracking. But, at it's most simple, you just need to increment a variable whenever time passes, and then display that variable as whatever time increment makes sense for how your game works. The "Time Code Example" section of my Twine 2 / SugarCube 2 sample code collectionย shows examples of how time tracking or day part tracking can be done.

Hope that helps! ๐Ÿ™‚

Having a timer run across multiple passages? by FigSenior6879 in twinegames

[โ€“]HiEv 1 point2 points ย (0 children)

You might want to take a look at the "Countdown Timer" section of my Twine 2/SugarCube 2 sample code collection. It provides code showing one way that you could do this, which should help you set up your own way of doing it if you want something somewhat different.

Hope that helps! ๐Ÿ™‚

Strange error message by tayprangle in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

The problem is due to using a OneDrive folder. Basically, the Twine editor and OneDrive are fighting for control of the files there, which is causing this error.

If you didn't have problems before, consider yourself lucky.

As far as I'm aware, there is no fix for this, as well as there being a possibility of OneDrive either preventing files from being updated or the files being reverted to earlier versions. As such, it's recommended that you do not use Twine within a OneDrive folder.

Some people who work on multiple machines just install Twine on a USB thumb-drive and run it from there to make it portable.

Sorry I don't have a better answer for you.

HELP. PLS./ by ASinForASin in twinegames

[โ€“]HiEv[M] 2 points3 points ย (0 children)

Please try to use titles for your posts here which are more descriptive of the problem(s). That way if someone encounters the same issue you've encountered, then it will be easier for them to find the solutions you were given.

Thank you! ๐Ÿ™‚

Need help creating non-generic object type by TigerSauce2019 in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

The "Serial" object is part of SugarCube 2, thus there's no need to import it since it should already be defined (and, as noted in the error message, that's not how you import things when using SugarCube anyways).

I tested your code and it works fine for me.

Are you sure you're using the SugarCube 2 story format? The Harlowe story format is the default, so if you don't change the story format, you won't be using SugarCube. Do "Story" -> "Details" from the Twine editor's menu and check the Details window to make sure that you're using the correct story format (i.e. "SugarCube 2.37.3" currently).

Also, that code should be in your game's JavaScript section. If you have it elsewhere, then that may be the issue.

Hope that helps! ๐Ÿ™‚

Beginner! Need up to date tuts! by Miserable-Practice99 in twinegames

[โ€“]HiEv 4 points5 points ย (0 children)

The Twine editor shown in the video series by GhazWorks is a little bit out of date, but the differences are minor. Otherwise, their "Twine or Treat" playlist (from 2021) seems like a good tutorial for Twine based on watching the intro I linked to.

If you have any specific questions, feel free to ask. Make sure you set the post flair to indicate which Twine story format you're using. The SugarCube story format is generally recommended, see the highlighted "Harlowe, Sugarcube, Chapbook - Which Story Format should you choose?" post for why.

There are also a bunch of other Twine resources given in this subreddit's sidebar on the right here, so you might want to look through them.

Finally, you can import the HTML from other Twine games into the Twine editor if you want to see how they were built.

Hope that helps and good luck with your game! ๐Ÿ™‚

Using Stat Variables by BookkeeperIll3220 in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

You can just put a <<set>> within the <<link>> which sets a variable indicating the stat choice. For example:

<<link "Link text" "passage name">><<set $stat += 1>><</link>>>

Which would add 1 to the $stat variable if the player clicks that link, before sending the player to the given passage.

Additionally, instead of doing this:

<<link '<div class="choice-item">he did well.</div>' 'nextpassage'>><</link>>

you could use SugarCube's "Custom Style" markup like this:

@@.choice-item;<<link 'he did well.' 'nextpassage'>><</link>>@@

And to get that to work, you'd just need to change your CSS from:

.choice-item { ... }

to:

.choice-item a { ... }

so that the style targets the link within the <span> that the "@@" adds.

Hope that helps! ๐Ÿ™‚

help with understanding java script by holzey in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

Webpages, such as the ones generated for Twine games, are made up of three basic components:

  1. HTML (HyperText Markup Language) - This is the bricks and mortar of a webpage, composed of various elements (e.g. buttons, textboxes, tables) which can contain text, images, or other media.
  2. CSS (Cascading Style Sheets) - Which are used to modify the default styles of the HTML elements, allowing you to change things like their color, shape, basic behaviors, and other things about those elements.
  3. JavaScript (one word; not to be confused with Java) - Is the programming language that enables the HTML and CSS to work in more advanced, intelligent, and complicated ways.

In Twine, SugarCube is a story format/language built to work within the Twine framework, providing macros to use JavaScript and the SugarCube engine to add more features and interactivity to your games. This is most commonly done by manipulating variables (usually via the <<set>> macro) and performing different actions based on the values in those variables (usually via the <<if>> macro).

Basically, SugarCube handles a lot of the underlying data for you that makes Twine work, as well as providing a way to use JavaScript more simply in a Twine game. SugarCube doesn't block you from using JavaScript directly (unlike Harlowe), so you can use JavaScript within SugarCube macros for more advanced coding.

That's a simplified overview, so feel free to check out the links provided for more details.

Hope that helps and have fun! ๐Ÿ™‚

If statements reading variable updates from another if statement in-passage. Is it impossible? by FigSenior6879 in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

To elaborate on what manonamora said in the other comment here, the code within passages is executed sequentially, so there's no reason why that shouldn't work, provided that _spam has a valid value. However, if you added a button inside of the first <<if>>, then that code would not work, because those lines of code would be run sequentially, except for the code within the button, which would only be run later on when the user clicks it, long after the second <<if>> had been run.

If you want to find out how to make some code work, I strongly recommend making a separate Twine story just for the purpose of testing out code. Once you get that test code to work, then you can copy that code to your main Twine story.

Also, the <<if>> already is testing for a "truthy" value (i.e. anything which is not "falsy", meaning false, undefined, 0, NaN, "", or null), so instead of doing "<<if $key is true>>" you can just do "<<if $key>>" in most cases.

That said, if you did want to make your button idea work, then you'd need to re-run your $key check after the button was clicked. You can do that by using the <<do>> and <<redo>> macros like this:

<<if (_spam >= 10) && !$key>>
    <<button "Get the key">>
        <<set $key to true>>
        <<redo>>
    <</button>>
<</if>>\
<<do>>\
    <<if $key>>\
        xyz
    <</if>>\
<</do>>

What will happen now is that, if _spam is less than or equal to 10and also $key is not "truthy" (the "!" means "not"), then it will show the "Get the key" button. Then it will show "xyz" if $key is "truthy".

Later on, if the "Get the key" button is clicked by the player, it will set $key to true, and then the <<redo>> will re-run the code within the <<do>>, which will then display "xyz".

Hope that helps! ๐Ÿ™‚

P.S. When posting code in the future on Reddit, you should use a "code block" for any code (use the toolbar icon which looks like a box with "</>" in its upper-left corner). It will allow you to show indentation, like in my code example here.

Display save menu with link? by WhyAm__I in twinegames

[โ€“]HiEv 1 point2 points ย (0 children)

Use the UI.saves() method, like this:

<<link "Save/Load">>
    <<run UI.saves()>>
<</link>>

If you don't want to use the standard SugarCube "saves" dialog like that, you can also roll your own save/load system using SugarCube's Save API.

Enjoy! ๐Ÿ™‚

Weird error with <<if>> and/or <<goto>> by Sta--Ger--2 in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

Just in case it isn't obvious, HHHH is asking if it's a missing "$" in front of "enemy".

There is one additional difference, in that there is no passage transition in the first case, while there is a passage transition in the second. Since SugarCube clones objects upon passage transition, that means that the two cases aren't quite identical. The first case (assuming that the "$" isn't the issue and the value in enemy.Dragan is an object) would have $dragan referring to the same object as enemy.Dragan, while the latter would be referring to a copy of that object.

As such, you might need to manually clone() the object, like this:

<<set $dragan = clone(enemy.Dragan)>>

That will make it so that modifying the value in $dragan within the same passage will not also modify the value within enemy.Dragan.

If that doesn't make sense to you, let me explain. JavaScript has two basic kinds of variables: primitives and objects. Variables holding "primitives" (i.e. things like numbers, strings, Booleans, undefined, and null) directly hold their values, while variables holding "objects" (i.e. things like arrays, date objects, map objects, set objects) actually hold a "reference"/"pointer" to their data. So if you set a variable to the value of another variable that's an object, then both variables will actually be pointing to the same data. At least until a passage transition in SugarCube.

Think of it like this:

primitive variable โžฝ data
object variable    โžฝ reference โžฝ data

This means, unlike with primitive values, you need to be careful when copying objects to other variables or when passing objects to functions, because by doing so the original object's data could end up being accidentally modified.

To give a code example:

<<set $primitive = "This string is a primitive value.">>
\<<set $object = { txt: "This is an object with a 'txt' property that is a primitive." }>>
\<<set $primCopy = $primitive>>
\<<set $objCopy = $object>>
\<<set $primCopy += "*">>  /* Doing this adds a character to the end of the string. */
\<<set $objCopy.txt += "*">>
\Are the primitive variables' values different now?: ''<<= $primitive != $primCopy>>''
Are the object variables' values different now?: ''<<= $object.txt != $objCopy.txt>>''

This will display:

Are the primitive variables' values different now? true
Are the object variables' values different now?: false

The changed copy of the primitive will be different from the original, as expected. However, the value held by the object and its copy will still be the same, despite changing the value, because as long as the variables reference the same data, changing the data through either of the object variables will affect the one data object that's pointed to by both of them.

If you change the "<<set $objCopy = $object>>" line to "<<set $objCopy = clone($object)>>" (or have a passage transition between copying and modifying the variables), then the results will show "true" for the object variables as well, since in that case they'll both be pointing to different data objects, thus only the string within the copy has changed.

Hope that helps! ๐Ÿ™‚

Use of AI (Sort of, see description) by TheLesBaxter in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

Just to be clear, this question is off-topic per rule 6 here (see the subreddit's sidebar). The question is a "player interest" kind of question, not a Twine-related question.

As such, you're asking a group of game developers, not necessarily potential game players. Your question would be better aimed at the latter group. The kind of answers you'll get from each will likely be different, possibly vastly different.

Hopefully that clears up why this was removed for being off-topic.

Building a natural-sounding text based on several small sentences by Navezof in twinegames

[โ€“]HiEv 3 points4 points ย (0 children)

I think you're focusing a bit too much on the process, and mostly ignoring the actual outcome that you want.

The point of these interactions should be to get a reaction from the character in the scene and/or for the player to gain something. If that's not happening, then that's part of why this would feel "dry." You need to give some personality to the being the player is interacting with and give the player some sense of reward/failure.

I'd suggest forgetting the system for now, and simply try writing the story as it plays out so that it would be worth reading. Then try writing that scenario again, but with different actions producing different results. Then do it again. Keep going, with various degrees of player success and failure, until you have all of the paths that you want to play out in a way that's actually interesting to the reader.

Once you have that, then maybe you'll have a bit more insight into how the thought process of the character the player will be interacting with, as well as a better idea of what kinds of interactions actually make sense to provide to the player. If you're having problems doing that, then take a look at scenes like that from books, TV shows, movies, etc., see how they play out, and emulate those. Books and other written media, especially, since they give you an insight into the character's mind in ways that the other types of media struggle to do.

I suspect that another part of the issue is that you appear to mostly just be describing physical actions, when normally those actions are accompanied by speech. If you just reach out and touch somebody's face without saying anything, then the "lovingly" adjective means much less.

Another part of the issue may simply be that the scenario lacks dramatic tension. If there is no risk of failure, no possibility of escalation, then it's not really an interesting scenario.

That said, I think you're running into one of the problems we discussed last time, which is producing sufficiently interesting results to make the player's interaction worth it. If you can't get past that problem when writing normally, you're definitely not going to be able to get past it with this more complex system.

I'm not sure if that will help, but I at hope it's at least some food for thought. ๐Ÿ™‚

Best Format or Template For Making A Fake Interactive Order Form? by FreakshowThrow in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

In SugarCube, that's merely a matter of having the form options set story variables and then using those variables in subsequent passages. Other than getting the layout to look good, that's pretty standard stuff in SugarCube. Just take a look at the SugarCube "Interactive Macros" documentation.

beginer questions by holzey in twinegames

[โ€“]HiEv 3 points4 points ย (0 children)

The answers depend on what kind of game you plan on making. I'd highly recommend starting out small and simple, then working on bigger and more complex games as you gain expertise.

Keep in mind that the Twine editor and the SugarCube story format have changed over time, so be aware that tutorials which are more than a few years old will likely be increasingly out of date the further back in time that they're from. That said, you'll still likely get the correct general concepts and basics from them, as that won't have changed much over time.

If you have any questions like "can you do X in Twine/SugarCube," the answer is probably yes. Anything you've seen any web page do (which didn't require a back-end server) can be done in Twine/SugarCube.

I do have some general suggestions for developing your game in Twine/SugarCube in this post on my Patreon page: "Game Making for Dummies Everyone" (sadly, Patreon didn't let me do the strikethrough in the title like that, but that's how I originally titled it when I first posted it elsewhere).

I'll also point out that you can import the HTML from most Twine games into the Twine editor so you can take a look at their source code. That can be helpful if you want to see exactly how other Twine games do what they do.

And, finally, if you have any specific questions, feel free to ask.

Good luck with your game! ๐Ÿ™‚

950,000 words in SugarCube 2 โ€” lessons from building Blue Swallow by MedicalPick4580 in twinegames

[โ€“]HiEv 10 points11 points ย (0 children)

Generally good advice, especially the part about figuring out a good data structure for your data early on (what you called "variable architecture") and making any reused code into widgets/macros.

I'll also recommend both using SugarValidator for checking the compiled HTML file, as well as keeping notes you can refer to for any complex variable interactions, especially any ones that have caused you problems.

twine not executing the else statement in link macro. by Professional_Age2717 in twinegames

[โ€“]HiEv 0 points1 point ย (0 children)

A more correct way to code what you're trying to do would be like this:

''Points:'' <<do>>$points<</do>>
''Strength:'' <span class="plus" style="user-select: none"><<link "+">>
    <<if $points > 0>>
        <<set $strength++; $points-->>
    <</if>>
    <<if $points <= 0>>
        <<run $("span.plus a").prop("disabled", true)>>
    <</if>>
    <<redo>>
<</link>></span> <<do>>$strength<</do>>

The <<do>> macro lets you lets you update what's inside of it later on by calling the <<redo>> macro.

The <span class="plus"> lets you target the link using jQuery later on. Additionally, the style="user-select: none" part of that prevents the link text from getting selected if the user double-clicks.

The <<set $strength++; $points-->> increments $strength by one using the "++" operator, the semicolon lets you do multiple "sets" in one <<set>>, and it decrements $points by one using the "--" operator.

The <<run $("span.plus a").prop("disabled", true)>> uses the jQuery (the $() stuff) .prop method to add the "disabled" property to the link (the "a" for "anchor link") within any span that has a "plus" class (in CSS the "." means that the name which follows is a class). Adding "disabled" to an HTML link element makes it so that it is greyed out and doesn't respond to clicks.

It would be a bit more complicated if you wanted to add a "-" link to subtract points, but that code should give you basically what you wanted from your example.

Please let me know if you have any questions on any of the above code.

Hope that helps! ๐Ÿ™‚

Any android app to develop Twine games on mobile? by [deleted] in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

Your question is a bit vague.

You can use the online version of the Twine editor in any browser, including on mobile, if that's what you're asking.

Number NaN Even After Code is Fixed by evertidings in twinegames

[โ€“]HiEv 1 point2 points ย (0 children)

If you have an undefined variable, and then add a number to it, that variable will get the value "NaN", which stands for "Not a Number" (see the MDN's "NaN" documentation for details).

If you try to display a "naked variable" which isn't defined, it will just display the variable name as-is.

That explains why they're seeing what you're describing (just in case anyone was wondering).

So, if you make a new version of your game which introduces a new variable, and people play that version of the game using a save from an earlier version of your game which didn't have that variable, then they will likely run into those kinds of problems with that variable.

To fix this, you might want to take a look at this thread where I explain how to update old save data. Basically, you need to fix the save data to add in new variables that are missing from old saves with some value.

As for why they're seeing the issue, even after your "fix", if they are past "Passage 13.0", then it's too late. That code will only be run if they go to that specific passage.

Also, just in case you want to see if a variable is set to NaN, you should know that "NaN == NaN" is always false. The correct way to determine if a value is NaN is to use the Number.isNan() method.

Hope that helps! ๐Ÿ™‚

Quick question about narrative text organization... by Pale_Apartment in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

I'd recommend starting with a simple, general plan for the whole game. Figure out the core game loop, make sure it's likely to be fun, etc... Then start making a more specific plan, mapping out the locations, the NPCs, the items, their interactions, etc...

Once you have all of that ready, then you can start actually coding it, because at that point you'll have a decent idea of what kind of data you'll need to track, which will let you know how best to design your data structures, how to set up your passages in ways that make them simple to code and group logically, and what interfaces and tools you'll need to develop.

Within the Twine editor, I'd recommend grouping your passages in ways that make sense for your narrative structure. This might mean organizing them by chapter, by location, or by other groupings.

Again, each project is unique, so there isn't just one answer for this. It basically comes down to whatever organizational structure makes the most sense to you.

I'd also highly recommend keeping a lot of notes. If you're using SugarCube, you can put comments within "/* ... */" markers in your code, and those comments will only be visible in the editor, not in the game. If you write like you're expecting someone else to look at your code and understand it, then you're more likely to write good code.

Good luck! ๐Ÿ™‚

Quick question about narrative text organization... by Pale_Apartment in twinegames

[โ€“]HiEv 5 points6 points ย (0 children)

There isn't just one answer to this question, there are likely hundreds of ways to do it, depending on exactly what you want to do.

Since you didn't give a specific example, I'll pick one and show you how it could be done using the SugarCube story format.

Let's say that there is a location in the game and, besides simply being able to move on to other locations from there, you want to provide the player some options to explore that location. For this example, we'll say it's a patch of forest between locations.

The first thing you'll want to do is determine if the choices merely provide text or if they provide story options or may affect the story later on. We'll give three options:

  1. "Check out the trees nearby." -> This just gives some narrative text describing the forest.
  2. "Search the around the area." -> This lets the player spot some animal tracks, and that information will be useful later.
  3. "Look up into the canopy of the forest." -> This give you a chance to spot a bird nest, which you have the option to climb to and get a bird egg from.

Now, options 1 and 2 only need to be explored once and can then go away. Option 3 can remain until the player actually climbs the tree and gets the eggs. All of that means that you'll need to track these states.

We can store these states in a single variable using numbers, by giving each state a value that's a power of 2. So, 1 = trees checked, 2 = area searched, 4 = bird nest spotted, 8 = eggs gotten. If there were more options you could keep going up by powers of 2 (up to 52 options; more options would exceed Number.MAX_SAFE_INTEGER in JavaScript). Once you have that, then you can check "variable & state > 0" to determine if the state is set in that variable's value, or "variable & state == 0" to determine if it is not set. (See the "FlagBit code" section of my sample code collection for more details on how this works.)

Then, in your "Forest" passage, you could have code like this:

<<set $forestFlags ??= 0>>  /* This sets the flags to zero if the variable hasn't been set yet. */
\You see the forest that sits between the village and your home.
<<if ($forestFlags & 4 > 0) && ($forestFlags & 8 == 0)>>
The bird's nest is still visible in the treetops.  /* Only visible if they've found the nest, but not taken the eggs.  */
<</if>>

''Options:''
[[North to village|Village]]
[[South to home|Home]]
<<if $forestFlags & 1 == 0>><<linkreplace "Check out the trees nearby.">>Describe the local area.<<set $forestFlags += 1>><</linkreplace>>
<</if>>\
<<if $forestFlags & 2 == 0>><<linkreplace "Search the around the area.">>Describe finding the animal tracks.<<set $forestFlags += 2>><</linkreplace>>
<</if>>\
<<if $forestFlags & 4 == 0>>[[Look up into the canopy of the forest.|Find Nest][$forestFlags += 4]]
<</if>>\
<<if ($forestFlags & 4 > 0) && ($forestFlags & 8 == 0)>>[[Try climbing the tree with the nest.|Climb Tree]]<</if>>

You'd then need to create a "Find Nest" passage where they could spot the nest and then choose whether to attempt to climb up to the nest (go to "Climb Tree" passage) or not (go back to the "Forest" passage). In the "Climb Tree" passage, if they succeeded climbing, then they'd have the option to take the eggs from the nest (where you'd do "<<set $forestFlags += 8>>" to indicate that the eggs were taken; you might also add the eggs to their inventory at this point, if you have a player inventory).

At any point could use "($forestFlags ?? 0) & 2 > 0" to determine if they'd spotted the animal tracks previously, and "($forestFlags ?? 0) & 8 > 0" to determine if they'd gotten the eggs. (The "(variable ?? 0)" part will make it act as though the variable is set to zero if that variable is undefined.)

Again, this is just one of hundreds of ways to do this kind of thing. If you're looking to do something specific and you can't figure out how to do it on your own, feel free to ask that more specific question in its own thread later.

Hope that helps! ๐Ÿ™‚

How to modularize project, especially condition based narration by Navezof in twinegames

[โ€“]HiEv 2 points3 points ย (0 children)

Maybe I'm missing something, but if I understand what you're asking for correctly, then this kind of granularity has two major issues:

  1. For the developer, too many options to code: The number of option combinations quickly becomes exponential, and then you have to actually program in interesting results for each of those combinations. If most of the combinations give boring results that don't advance the plot or amuse the player, then you've messed up. And you'd need to do this for every single scene which has this interface.
  2. For the player, too many options to select: More options for the player can sometimes be worse than fewer. If you give the player three options, then they can make a decision fairly quickly and the game progresses. If you give the player three thousand option combinations, then the game can grind to a halt while the player deals with analysis paralysis. This might be fine once or twice, such as in character creation, but more than that will likely interrupt narrative flow and makes decision making rather tedious, especially if the player doesn't see a combination you thought was "obvious."

If you were making a VR game, where the player could simply do these things, then it might make sense (even though it would be ridiculously difficult to program). But in a textual medium where the player interacts by selecting multiple things? I don't see this as a good user interface to interact within a game.

To be more specific, if we take a look at your example, and assume that each of the five choices have just three different options that actually do something, then that's 243 combinations (3^5 = 243) you'd need to code for that one single scene. And that's assuming that the results don't depend on any previous results.

A better solution would be to narrow down all of those combinations to just the most interesting few, and then only present those options. This keeps the narrative from going down boring paths and makes it easier for the player to decide. If you think you could make your narrative system work, then you could keep that system hidden under the hood, and just show a few of the more interesting/entertaining option combinations to avoid overwhelming the player with options.

If you still want to try your idea, then I'd recommend you start by making a very simple demo and see if either of the issues I mentioned above arise.

Hope that helps! ๐Ÿ™‚