FYOP/Scenario Chamber/HowToUpdate: Difference between revisions
(3 intermediate revisions by the same user not shown) | |||
Line 46: | Line 46: | ||
Taking 'Amber' for example: | Taking 'Amber' for example: | ||
<code> | <code style="display: block; white-space: pre-wrap;"><<set $amber = | ||
<<set $amber = | |||
{ | { | ||
"name" : "Amber", | "name" : "Amber", | ||
Line 62: | Line 61: | ||
* desc: The inventory / history description of the bot | * desc: The inventory / history description of the bot | ||
* loc: The initial location / chamber where the bot was encountered | * loc: The initial location / chamber where the bot was encountered | ||
* coreReact: What | * coreReact: What Leta might say when you hand her this bot's core | ||
''Note'' - You need to encode any double-quotes using <code>"</code> for any of these fields | ''Note'' - You need to encode any double-quotes using <code>"</code> for any of these fields | ||
Line 80: | Line 79: | ||
Macros are defined in the story's JavaScript (accessible buy selecting *Story* and then *{} JavaScript*. Take special care when making any edits in here! | 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). | 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). | ||
Line 86: | Line 85: | ||
<code><<addToCores $amber>></code> | <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. | 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> | <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!