FYOP/Scenario Chamber/HowToUpdate: Difference between revisions

From FembotWiki
Jump to navigation Jump to search
(Created page with "This is a guide for anyone interested in editing or contributing to "Scenario Chamber" FYOP. I've had a few requests from others interested in adding their own content / chambers - if you're one of these people, this page should get you started. This is also very much a WIP and not intended for public consumption - so if you've stumbled on to the page, avert your eyes! Or DM me if you have any questions, I'm long_time_lurker on Discord. <big><big>Getting Started With T...")
 
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
This is a guide for anyone interested in editing or contributing to "Scenario Chamber" FYOP. I've had a few requests from others interested in adding their own content / chambers - if you're one of these people, this page should get you started.
This is a guide for anyone interested in editing or contributing to "Scenario Chamber" FYOP. I've had a few requests from others interested in adding their own content / chambers - if you're one of these people, this page should get you started.


This is also very much a WIP and not intended for public consumption - so if you've stumbled on to the page, avert your eyes! Or DM me if you have any questions, I'm long_time_lurker on Discord.
This is also very much a WIP and not intended for public consumption - so if you've stumbled on to the page, avert your eyes! Or DM me if you have any questions, I'm long_time_lurker on Discord. Also, the formatting is atrocious, I need to figure out how to clean this up :P


<big><big>Getting Started With Twine</big></big>
== Getting Started With Twine ==


Scenario Chamber is written in [https://www.motoslave.net/sugarcube/2/docs/ SugarCube], a language / story format for [https://twinery.org/ Twine]. If you're unfamiliar with Twine, [https://opensource.com/article/18/2/twine-gaming this tutorial] seems like a good place to start!
Scenario Chamber is written in [https://www.motoslave.net/sugarcube/2/docs/ SugarCube], a language / story format for [https://twinery.org/ Twine]. If you're unfamiliar with Twine, [https://opensource.com/article/18/2/twine-gaming this tutorial] seems like a good place to start!


<big><big>Editing Scenario Chamber</big></big>
== Editing Scenario Chamber ==


Next, you'll want a copy of the [[FYOP/Scenario_Chamber|Scenario Chamber]] html file. Opening this in Twine will give you a view of the sprawling mess!
Next, you'll want a copy of the [[FYOP/Scenario_Chamber|Scenario Chamber]] html file. Opening this in Twine will give you a view of the sprawling mess!


<big>Adding Your Chamber</big>
== Adding Your Chamber ==


Use Twine's ''Story->Find and Replace'' feature to locate '''Hub/Chambers''' (Twine will highlight any passage with this title, as well as any passages that link to it - there will be 3 in all, all located in the top left corner).
Use Twine's ''Story->Find and Replace'' feature to locate '''Hub/Chambers''' (Twine will highlight any passage with this title, as well as any passages that link to it - there will be 3 in all, all located in the top left corner).
Line 17: Line 17:
Opening up the Hub/Chambers passage, you'll see a list of objects being set, e.g:
Opening up the Hub/Chambers passage, you'll see a list of objects being set, e.g:


<nowiki>
<code>
<<set $girlNextDoor = { "name" : "girl next door", "prefix" : "Girl", }>>\
<<set $girlNextDoor = { "name" : "girl next door", "prefix" : "Girl", }>>\
</nowiki>
</code>


This defines how the chamber is shown to the player (in this case, "girl next door") and how to find the corresponding confirmation page (here, it would be "Confirm/Girl") as well as the chamber's starting page (and whether or not the player has visited the chamber).
This defines how the chamber is shown to the player (in this case, "girl next door") and how to find the corresponding confirmation page (here, it would be "Confirm/Girl") as well as the chamber's starting page (and whether or not the player has visited the chamber).
Line 25: Line 25:
You'll want to add your own object with a name and prefix for your chamber, and also add it to the $chambers list of available chambers.
You'll want to add your own object with a name and prefix for your chamber, and also add it to the $chambers list of available chambers.


<nowiki>
<code>
<<set $chambers = [$girlNextDoor, $witch, $opera, $hero, $class, $hike]>>\
<<set $chambers = [$girlNextDoor, $witch, $opera, $hero, $class, $hike]>>\
</nowiki>
</code>


Next, you'll want to have a confirmation page - make a passage entitled '''<nowiki>Confirm/<your prefix></nowiki>''', e.g. '''Confirm/Girl''' for 'girl next door'.
=== Confirmation Page ===
Make a passage entitled '''<nowiki>Confirm/<your prefix></nowiki>''', e.g. '''Confirm/Girl''' for 'girl next door'.
 
For the body if this page (if you're staying consistent with Scenario Chamber) you'll want to give a sneak-peak of any bots the player might encounter, plus a Y/N confirmation. Open up the any of the ___/Confirm pages to see an example, and note that the 'Y' option should link to a ___/Start page.
 
''Note'' - you'll want to find a patch of real-estate in twine so you can keep your story elements clustered. The amount Twine makes available will grow as you continue to add passages.
 
=== Initialize Chamber Variable ===
Finally, you'll want to include a line initializing your scenario chamber variable within the '''StoryInit''' passage. e.g. <code><<set $girlnextdoor to false>></code> (TODO - Why do I do this?!)
 
Once complete, any player should be able to visit your chamber. Now it's just a matter of adding content!
 
== Adding Bots ==
 
Find the '''StoryInit''' passage and crack that open - inside, you'll see a list of bot variables being assigned, one for each bot the player can obtain a core from.
 
Taking 'Amber' for example:
<code style="display: block; white-space: pre-wrap;"><<set $amber =
{
"name" : "Amber",
"contentment" : 10,
"desc" : "The titular &quot;Girl Next Door&quot; from the scenario of the same name.",
"loc" : "Girl Next Door",
"coreReact" : "We always had trouble with her malfunctioning if the customer chose her mother instead of her.",
}>>
</code>
 
Breaking each of these down:
* name: The name that appears in the player's 'history / inventory'
* contentment: How 'satisfied' the bot is - more on this later!
* desc: The inventory / history description of the bot
* loc: The initial location / chamber where the bot was encountered
* coreReact: What Leta might say when you hand her this bot's core
 
''Note'' - You need to encode any double-quotes using <code>&quot;</code> for any of these fields
 
=== Contentment ===
 
Whenever I get around to writing the finale, the 'contentment' is meant to influence the final outcome. A higher 'contentment' is meant to indicate the player satisfied the bot in some way, lower indicating the player likely broke the bot in a way she found 'unfulfilling'. In general the score is 1-10, but I've gone as high as 12 for when the player really 'pushes the right buttons'.
 
You'll want to set the contentment prior to the player collecting the core or asking the bot to wait at the entrance with something like the following code.
 
<code><<set $amber.contentment to 7>></code>
 
Right now this has no bearing on the player's experience, but someday... _some_day!
 
=== Scenario Chamber Macros ===
 
Macros are defined in the story's JavaScript (accessible buy selecting *Story* and then *{} JavaScript*. Take special care when making any edits in here!
 
==== addToCores ====
 
Use this with the bot variable for any passage where the player extracts a bot's core. This will make the core visible in the inventory / history. When the player returns the core to Leta, she will react according to the 'coreReact' variable (picking one at random if the player returns with multiple cores). 
 
<code><<addToCores $amber>></code>
 
==== sendToEntrance ====
 
As above, but this one sends an intact, mostly-functional bot to wait at the entrance. Again, currently this has no bearing on the player's experience.
 
<code><<sendToEntrance> $amber>></code>
 
=== Returning to the Hub ===
 
When you're ready for the protagonist to end their experience in your chamber, you can bring them back to the terminal by sending them to.
 
<code>[[Exit->Return to hub]]</code>
 
This is a regular passage link and the text for 'Exit' can be whatever you'd like. Right now the Return to hub passage just directs the player back to the hub, but I foresee the need to do some maintenance for the endgame with each scenario chamber 'completion', so I wanted to have a common passage to route them all through.
 
== Versioning ==
 
This is the tricky part. Fortunately, I don't have a LOT of people asking to make updates to the file, so hopefully manually merging changes will be simple enough. Hopefully these words don't come back to bite me!

Latest revision as of 15:30, 18 June 2024

This is a guide for anyone interested in editing or contributing to "Scenario Chamber" FYOP. I've had a few requests from others interested in adding their own content / chambers - if you're one of these people, this page should get you started.

This is also very much a WIP and not intended for public consumption - so if you've stumbled on to the page, avert your eyes! Or DM me if you have any questions, I'm long_time_lurker on Discord. Also, the formatting is atrocious, I need to figure out how to clean this up :P

Getting Started With Twine

Scenario Chamber is written in SugarCube, a language / story format for Twine. If you're unfamiliar with Twine, this tutorial seems like a good place to start!

Editing Scenario Chamber

Next, you'll want a copy of the Scenario Chamber html file. Opening this in Twine will give you a view of the sprawling mess!

Adding Your Chamber

Use Twine's Story->Find and Replace feature to locate Hub/Chambers (Twine will highlight any passage with this title, as well as any passages that link to it - there will be 3 in all, all located in the top left corner).

Opening up the Hub/Chambers passage, you'll see a list of objects being set, e.g:

<<set $girlNextDoor = { "name" : "girl next door", "prefix" : "Girl", }>>\

This defines how the chamber is shown to the player (in this case, "girl next door") and how to find the corresponding confirmation page (here, it would be "Confirm/Girl") as well as the chamber's starting page (and whether or not the player has visited the chamber).

You'll want to add your own object with a name and prefix for your chamber, and also add it to the $chambers list of available chambers.

<<set $chambers = [$girlNextDoor, $witch, $opera, $hero, $class, $hike]>>\

Confirmation Page

Make a passage entitled Confirm/<your prefix>, e.g. Confirm/Girl for 'girl next door'.

For the body if this page (if you're staying consistent with Scenario Chamber) you'll want to give a sneak-peak of any bots the player might encounter, plus a Y/N confirmation. Open up the any of the ___/Confirm pages to see an example, and note that the 'Y' option should link to a ___/Start page.

Note - you'll want to find a patch of real-estate in twine so you can keep your story elements clustered. The amount Twine makes available will grow as you continue to add passages.

Initialize Chamber Variable

Finally, you'll want to include a line initializing your scenario chamber variable within the StoryInit passage. e.g. <<set $girlnextdoor to false>> (TODO - Why do I do this?!)

Once complete, any player should be able to visit your chamber. Now it's just a matter of adding content!

Adding Bots

Find the StoryInit passage and crack that open - inside, you'll see a list of bot variables being assigned, one for each bot the player can obtain a core from.

Taking 'Amber' for example: <<set $amber = { "name" : "Amber", "contentment" : 10, "desc" : "The titular "Girl Next Door" from the scenario of the same name.", "loc" : "Girl Next Door", "coreReact" : "We always had trouble with her malfunctioning if the customer chose her mother instead of her.", }>>

Breaking each of these down:

  • name: The name that appears in the player's 'history / inventory'
  • contentment: How 'satisfied' the bot is - more on this later!
  • desc: The inventory / history description of the bot
  • loc: The initial location / chamber where the bot was encountered
  • coreReact: What Leta might say when you hand her this bot's core

Note - You need to encode any double-quotes using " for any of these fields

Contentment

Whenever I get around to writing the finale, the 'contentment' is meant to influence the final outcome. A higher 'contentment' is meant to indicate the player satisfied the bot in some way, lower indicating the player likely broke the bot in a way she found 'unfulfilling'. In general the score is 1-10, but I've gone as high as 12 for when the player really 'pushes the right buttons'.

You'll want to set the contentment prior to the player collecting the core or asking the bot to wait at the entrance with something like the following code.

<<set $amber.contentment to 7>>

Right now this has no bearing on the player's experience, but someday... _some_day!

Scenario Chamber Macros

Macros are defined in the story's JavaScript (accessible buy selecting *Story* and then *{} JavaScript*. Take special care when making any edits in here!

addToCores

Use this with the bot variable for any passage where the player extracts a bot's core. This will make the core visible in the inventory / history. When the player returns the core to Leta, she will react according to the 'coreReact' variable (picking one at random if the player returns with multiple cores).

<<addToCores $amber>>

sendToEntrance

As above, but this one sends an intact, mostly-functional bot to wait at the entrance. Again, currently this has no bearing on the player's experience.

<<sendToEntrance> $amber>>

Returning to the Hub

When you're ready for the protagonist to end their experience in your chamber, you can bring them back to the terminal by sending them to.

[[Exit->Return to hub]]

This is a regular passage link and the text for 'Exit' can be whatever you'd like. Right now the Return to hub passage just directs the player back to the hub, but I foresee the need to do some maintenance for the endgame with each scenario chamber 'completion', so I wanted to have a common passage to route them all through.

Versioning

This is the tricky part. Fortunately, I don't have a LOT of people asking to make updates to the file, so hopefully manually merging changes will be simple enough. Hopefully these words don't come back to bite me!