Saturday, January 27, 2024

Twine - Development issues

 Starting the Adventure game in Twine I use the first couple of cells (for lack of a better word) as exposition to set the scene for the player and gently coax the player into the world they're entering before making the first major choice.

My cycle of discovering a problem with what I'm hoping to achieve and researching a possible solution to then come across another problem started to occur with the first major choice where the player is picking which possible members to add to their party.

The initial idea was for the player to have a 7 individuals within the tavern where they start the game and having the option to listen to what they have to say or not and then choose whether to add them to the party or not with every choice made taking them back to the cell with all the available NPC's but having the one they had picked removed for player cohesion and to not break continuity and thus immersion.

I started by adding statements once a character was chosen to add a score to that character and that would have enabled me to have a statement within the original available NPC cell where if a character has a score then  they would not be present within the list. However when it came to having more than one character with a score it would try adding the scores together which wasn't necessary or a function I wanted and would break the game so removed the scores for true/false Boolean statements.

(if: $batswoop is 1)(display: "partymemberchoice2.1")
(if: $sudisturd is 1)(display: "partymemberchoice2.2")
(if: $rustyguilder is 1)(display: "partymemberchoice2.3")
(if: $ulfgarfireforge is 1)(display: "partymemberchoice2.4")
(if: $rinn is 1)(display: "partymemberchoice2.5")
(if: $thokkpresley is 1)(display: "partymemberchoice2.6")
(if: $unnamed is 1)(display: "partymemberchoice2.7")

Here are the statements made for the first set of choices to show how if a character has a score a certain choice after would be displayed however after a first choice making a second would create faults and try adding scores together.

(if:$batswoop is 1 and $sudisturd is 1)[
(display:"partymemberchoice 3.1")]

So I went to the true and false statements where scores wouldn't be added.

(if: $batswoop is true)(display: "partymemberchoice2.1")
(if: $sudisturd is true)(display: "partymemberchoice2.2")
(if: $rustyguilder is true)(display: "partymemberchoice2.3")
(if: $ulfgarfireforge is true)(display: "partymemberchoice2.4")
(if: $rinn is true)(display: "partymemberchoice2.5")
(if: $thokkpresley is true)(display: "partymemberchoice2.6")
(if: $unnamed is true)(display: "partymemberchoice2.7")

However if multiple characters were set as true instead of showing the "partymemberchoice" for two characters being true it would also show the choices for them as individuals set to true as well. With the below statement made all three of the following choice cells would be displayed.

(if:$batswoop is true and $sudisturd is true)[
(display:"partymemberchoice 3.1")]

You have 4 spaces left in the team.

Who do you go to next?

[[The Warforged|Rusty Guilder]]
[[The Dwarf|Ulfgar Fireforge]]
[[The Wood Elf|Rinn of the Greyhawk]]
[[The Half-Orc|Thokk Presley]]
[[The Changeling|Unnamed]]


You have 5 spaces left in the team.

Who do you go to next?

[[The Lizardfolk|Sudisturd]]
[[The Warforged|Rusty Guilder]]
[[The Dwarf|Ulfgar Fireforge]]
[[The Wood Elf|Rinn of the Greyhawk]]
[[The Half-Orc|Thokk Presley]]
[[The Changeling|Unnamed]]


You have 5 spaces left in the team.

Who do you go to next?

[[The Kenku|Bat Swoop]]
[[The Warforged|Rusty Guilder]]
[[The Dwarf|Ulfgar Fireforge]]
[[The Wood Elf|Rinn of the Greyhawk]]
[[The Half-Orc|Thokk Presley]]
[[The Changeling|Unnamed]]

This would then require us to set characters to false once set as true so it wouldn't present individual partymemberchoice cells and just show the choice if multiple characters were set to true originally.
So the below statement would result in the following partymemberchoice screen for the player.

(if:$batswoop is true and $sudisturd is true)[
(set:$batswoop to false)
(set:$sudisturd to false)
(display:"partymemberchoice 3.1")]

You have 4 spaces left in the team.

Who do you go to next?

[[The Warforged|Rusty Guilder]]
[[The Dwarf|Ulfgar Fireforge]]
[[The Wood Elf|Rinn of the Greyhawk]]
[[The Half-Orc|Thokk Presley]]
[[The Changeling|Unnamed]]


However this would break once getting to choosing a third character using the following statement.

(if:$batswoop is true and $sudisturd is true and $rustyguilder is true)[
(set:$batswoop to false)
(set:$sudisturd to false)
(set:$rustyguilder to false)
(display:"partymemberchoice 4.1")]

Having the player already reduced characters to false when making a second choice the above statement can never exist as there will never be three characters with the true statement after setting some to false or if I did have them all set to true they would be displaying multiple choice screens again. This leads to two alternative options for a solution one elegant and one simple.


The elegant option is that when i reduce NPC's statements to false I create a new statement to true that combines their names and thus that statement plus a third character being set as true could exist and would look something like this flow of statements.

(if:$batswoop is true and $sudisturd is true)[
(set:$batswoop to false)
(set:$sudisturd to false)
(set:$batswoopsudisturd to true)
(display:"partymemberchoice 3.1")]

then 

(if:$batswoopsudisturd is true and $rustyguilder is true)[
(set:$batswoopsudisturd to false)
(set:$rustyguilder to false)
(set: $batswoopsudisturdrustyguilder to true)
(display:"partymemberchoice 4.1")]

However as well as this works from the designers side of the game for some reason having a single cell with so much information that the players cycles through repeatedly with true and false statements being set ends up messing with the format of the display on the players side of the game leaving huge blank spaces that they have to scroll through to get to the actual choice they can make so the simpler alternative is what I'm going ahead with.


The player no longer chooses NPC's one at a time to join the party but simply makes one choice of which NPC will not be part of the party and then they can continue on with the adventure. I can still set a score for the NPC who is left behind so that a later event can occur so players get the consequences to their actions and choices later on and understand how their choices impact the fantasy world around them.  This way I am starting impart the knowledge of how important having conversations with these NPC's will be as the player progresses through the game though I am still looking into ways to develop the telegraph for this in as natural a way as possible.

No comments:

Post a Comment

Singing Praise for Scavengers Reign

During my summer break and time to reflect between modules (DE4404 Experimental Practice and DE4405 Specialist Practice respectively), I fou...