Spectre
Content warning: Contains various spooky/horror elements. Click to reveal detailed content warnings (contains spoilers).
Spectre is a plugin by Galla and Zichqec which is said to “enhance [the user's] SSP experience”. The exact effects of the plugin are kept mysterious and are for the user to discover. It is recommended to use the balloon Ghost Balloon with this plugin.
Click to reveal spoiler content.
Please note that further spoiler content in this article will not be obscured.
User information
Progression
When Spectre is first installed, the plugin menu will show nothing except for some basic settings, and an on/off toggle for the plugin's effects.
Discovering Spectre
Spectre is unaware of the user's presence at first, and the first thing the user must see before progression can begin is a random dialogue from Spectre. Dialogues at this stage, stage 0, will be generally confused, scared, and lonely. Some of them will have strange text effects, such as text that grows or shrinks, words scattered across the balloon, etc. The others will be displayed in grayed-out text, clearly differentiating them from the dialogue of most ghosts.
If using the balloon Ghost Balloon, the ghost silhouette in the corner will be filled in with white to indicate that this dialogue has come from the plugin. Additionally, all dialogues from the plugin will have SSTP text stating their origin.
In order to progress, the user must see at least 1 dialogue from Spectre. Upon opening the menu again, there will be an option labelled “Is someone else here?”. Clicking this option will start a conversation with Spectre, and upon successful completement of this conversation, the plugin will progress to stage 1. Note that it is possible for this conversation to be interrupted, time out, or be ignored after it begins. If this happens, Spectre's dialogues will change to wondering where the user went. To progress to stage 1, the user will have to begin the conversation in the menu again, although this time the label will be changed to “Hello? Are you still there?”.
Early stage
Once the user has reached stage 1, Spectre's dialogues will change to a completely different pool, with no more special text effects. Dialogues will be speculation on where Spectre is at and what's happening to them, etc.
If using the balloon Ghost Balloon, the ghost in the corner of the balloon will show Spectre's expressions as they talk.
Spectre will also occasionally ask questions relating to their situation, or the user will have the opportunity to give input on something Spectre said. In order to progress through this stage and the next, the user must answer these questions sufficiently.
Questions are asked once per every 8 dialogues, roughly once every 2 hours when set to the default talkrate of 15 minutes. Note that these are not asked every 8th dialogue, but rather, every set of 8 dialogues will have one question dialogue at a random position in the set. This means the questions are asked at random times, but will still occur fairly regularly. This system does not reset when the plugin loads/unloads, so closing SSP will not affect the time until the next question.
Middle stage
Once the user has answered all 3 required questions with sufficient answers, Spectre will progress to stage 2. They now have an idea of what their situation is, and their dialogue pool for this stage is more frustrated.
If the ghost Spectre is speaking through has been calibrated, Spectre's expressions will now be reflected in that ghost's shell as they talk, in addition to the expressions being seen in Ghost Balloon.
Spectre will speculate on exactly what happened to them and how they ended up this way, and will have 2 more questions that the user must answer before progressing to stage 3.
Final stage
At this stage, Spectre has begun to come to terms with what has happened to them, and is more accepting of their situation. Spectre may occasionally ask questions of the user at this stage, but they are not tied to any sort of progression.
This stage has multiple possible dialogue pools, each reflecting a different mood, which are picked semi-randomly whenever the plugin loads. The same pool will not be picked twice in a row, but otherwise they are chosen at random.
The dialogue pools are as follows:
- Dissociated
- Miserable
- Cheerful
- Cheerful 2
In the “Dissociated” dialogue pool, Spectre will be less coherent than usual, and appear to be very upset and suffering. Note that this pool shares some dialogues from the stage 0 pool, in particular the dialogues with spooky text effects.
In the “Miserable” dialogue pool, Spectre will claim to be having a bad day, and their dialogue will be more despondent and sad.
In the “Cheerful” and “Cheerful 2” dialogue pools, Spectre will be more chipper and relaxed. These two pools do not share any dialogues except for the greeting dialogues.
Reaching out
When Spectre boots into the “dissociated” pool (and after they've spoken to the user at least once in that session), the user will have an option in the menu to reach out to them with an option initially labelled “Hey, can you hear me?”. Clicking this option will prompt a response from Spectre with a text effect.
Each time the option is clicked, the label of it will change, cycling through this list in order:
- “Hey, can you hear me?”
- “It's okay now. Everything is fine.”
- “You'll get through this. It's not forever.”
- “Try to breathe, nice and slowly.”
- “Take as long as you need. I'll be here.”
Each time, the text effect on Spectre's response will lessen, until the last time when Spectre will snap out of it, and have a unique dialogue. For the rest of the session, Spectre will be in the “miserable” pool instead.
Note that at any point before the end of this sequence, if the user stops interacting for at least 5 minutes, it will reset back to the beginning.
Greetings
After the user has Discovered Spectre, greeting options will become available in future sessions.
The second time the plugin is run is a special case, and Spectre will use a small pool of dialogue wondering where the user went and expressing a desire to not be alone. The user must greet Spectre through the menu, with an option labelled “Hello?”.
After this point, greetings may come from either the user or Spectre. Spectre's first dialogue each session will be a greeting dialogue, acknowledging the user's presence before going into the normal dialogue pool for the day.
If the user opens the plugin's menu before this greeting dialogue occurs, they will have the opportunity to greet Spectre first, with the option “Hello? Are you there?”. This produces different responses than if Spectre greets the user first.
Settings
Calibration
Each individual ghost should be calibrated to work properly with Spectre. Ghosts that have had custom calibration created by their developer may work without completing the calibration step, but for full functionality they should have this step completed.
When opening the plugin menu with a ghost that has not been calibrated, there will be an option on the main menu prompting the user to calibrate this ghost. Any ghost that has already been calibrated may be recalibrated in the settings menu.
For ghosts with custom calibration provided by the developer, opening Spectre's menu through that ghost will automatially complete the calibration step. Clicking the recalibrate option in the settings menu will perform the custom calibration again, and will state to the user that calibration has been set by this ghost's developer. It is not possible to manually calibrate a ghost with custom calibration.
For ghosts without custom calibration provided, the user will be prompted to perform a manual calibration. Manual calibration follows the recommended expressions from Ukadoc, as well as offering alternative expressions that match those found in the GT Ghost Template, and will work best with ghosts that follow those expressions. Note that because of the alternative expressions, only ghosts with custom calibration can make use of all of Spectre's expressions.
During a manual calibration, the user will first be asked if the ghost has any facial expressions at all. If the user answers no, calibration will immediately complete. Note that this is still a worthwhile step for ghosts without expressions - this kind of calibration will make a difference in some of the plugin's dialogues.
If the user answers that the ghost does have facial expressions, they will be shown various surfaces and asked to evaluate if they match a given expression name. This displays surfaces 0-9 in order, and the user can choose yes or no for each. Surface 8 offers the user the alternative “thoughtful / thinking / confused” expression, and surface 9 offers the user the alternative “unamused / bored” expression.
Any surfaces that the user chooses “yes” or one of the alternates to can then be used by Spectre (provided the user has progressed sufficiently). Any expressions the user chose “no” to will be omitted, to avoid conflicting expressions.
Depending on how many expressions are available to use, Spectre may occasionally comment on how much control they have over this particular ghost. For this reason, omitting expressions that do not fit and calibrating even ghosts without facial expressions is encouraged, as it benefits the experience of the plugin.
If some expressions are omitted, the plugin will make note for ghost developers that they may be able to increase compatibility by adding custom calibration for their ghost, linking to a text file with more details.
Exclusion list
The exclusion list is an option that may help in environments where more than one ghost is running. This list can be used to control which ghosts Spectre will speak through, in case the user wishes to limit output to a specific ghost, or if they want to omit specific ghosts for any reason. This option is always available, even before the user has met Spectre.
When Spectre speaks, it will pick a random ghost that is not excluded from the list to speak through. Note that if all currently open ghosts are excluded from the list, Spectre will ignore the list and speak through any random ghost.
All currently open ghosts will be listed in this menu. Names in normal text are included ghosts, and names that are grayed out are excluded ghosts. Clicking a name toggles it between these two states.
Talkrate
This setting allows the user to adjust how often Spectre talks. It mimics the talkrate found in most ghosts, albeit with much longer times. This option only appears if the user has progressed to stage 1.
The default talkrate is 15 minutes. Other available talkrates are 20 minutes, 30 minutes, 45 minutes, and 60 minutes.
Developer information
Custom calibration
Custom calibration may be added by a ghost's developer to increase compatibility with Spectre, and to take the effort of the calibration process off of the user. To add custom calibration for a ghost, that ghost must respond to specific events sent by Spectre.
OnSpectrePlugin.ConfirmCalibration
The event OnSpectrePlugin.ConfirmCalibration
is necessary to complete a handshake with the plugin that confirms the calibration, and specifies which surfaces are available for the plugin to use. This event should return a specific sakurascript command and nothing else.
The sakurascript command to be returned is: \![raiseplugin,Spectre,OnCustomCalibrationConfirm]
References are used to send expression information to the plugin.
If the ghost has no facial expressions, then it should send __NO_EXPRESSIONS__
as reference0, and nothing else.
If the ghost has facial expressions, the developer should refer to the following list of expression names:
"normal" "embarrassed" "surprised" "anxious" "discouraged" "smile" "relieved" (content / closed eyes smile) "angry" "sweat" (sweat smile / cold smile) "indignant" (embarrassed & angry) "thinking" "unamused" (bored)
By default, the plugin will assume that it can use all expressions except for the ones that are listed as references. This means that the developer should only list expressions that the ghost cannot make. This is ideal for ghosts that can make most of the expressions.
If the ghost can only make a few of the expressions, an option is provided to reverse this behavior and reduce the amount of typing required. By specifying –option=include
as one of the references, then only the expressions sent in the command will be recognized by the plugin.
For example:
\![raiseplugin,Spectre,OnCustomCalibrationConfirm,discouraged,sweat,thinking]
with this tag, the plugin will recognize all expressions on list above except for “discouraged”, “sweat”, and “thinking”.
\![raiseplugin,Spectre,OnCustomCalibrationConfirm,–option=include,discouraged,sweat,thinking]
with this tag, the plugin will only recognize the expressions “discouraged”, “sweat”, and “thinking”.
OnSpectrePlugin.Surface
The event OnSpectrePlugin.Surface
is called whenever Spectre changes expressions, unless the expression it is changing to cannot be made by the ghost. Note that this event is called via an embed tag, and as such, is considered to originate from the ghost rather than from the plugin itself.
This event sends the requested expression via Reference0, and the ghost is expected to check the reference and return the desired expression with any combination of \s[]
, \i[]
, or other related tags as necessary. Please refer to the list in the previous section for the possible expression names.
An example implementation in YAYA:
OnSpectrePlugin.Surface { if reference0 == "normal"; "\s[0]" elseif reference0 == "embarrassed"; "\s[14]" elseif reference0 == "surprised"; "\s[11]" elseif reference0 == "anxious"; "\s[2]" elseif reference0 == "discouraged"; "\s[3]" elseif reference0 == "smile"; "\s[1]" elseif reference0 == "relieved"; "\s[4]" elseif reference0 == "angry"; "\s[3]\i[6]" elseif reference0 == "sweat"; "\s[9]" elseif reference0 == "indignant"; "\s[3]\i[6]" elseif reference0 == "thinking"; "\s[7]" elseif reference0 == "unamused"; "\s[3]\i[6]" }
Reacting to possession
The ghost's developer may also add the event OnSpectrePlugin.Possession
if they would like their ghost to react to having been possessed by Spectre. Note that this event is caused by a \![timerraise]
tag placed at the end of the plugin's dialogues, and as such, is considered to originate from the ghost rather than the plugin.
Since version 1.0.3, reference0 contains the current “mood” of Spectre, which may be one of the following values:
"dissociated" "miserable" "cheerful"
These reflect the moods seen in the final stage of progression. Note that “dissociated” is also used for stage 0 before the user has greeted Spectre, and “miserable” is also used for stages 1 and 2. “cheerful” is used for both cheerful pools.
Reference1 indicates whether the script that was played was a “spookytext” dialogue or not. These dialogues are the ones with text effects to make the dialogue unsettling. The value is 1 for spookytext dialogues, and 0 otherwise. Note that these dialogues are currently only played in situations where reference0 is “dissociated”.
The event is raised 15 seconds after a dialogue ends.
See also
- Spectre: What, Why, and How - Article for the 伺か・伺的 [第1会場] Advent Calendar 2024