-
Notifications
You must be signed in to change notification settings - Fork 47
Quote Packs
Quote packs pick which character is narrating a test chamber. They mainly consist a set of voice lines that are randomly selected from, but also define things like appearance on monitors.
All instances in quote pack definitions are relative to instances/bee2/
.
Quote packs are package objects, so they have a definition in info.txt
:
"QuotePack"
{
"id" "QUOTE_ID"
"name" "Fancy Quotes"
"characters" "Cave, Wheatley, G-Man"
"caveSkin" "0"
"config" "path/to/config/file.cfg"
"monitor"
{
"studio" "50s/fancy_quote/mon_studio.vmf"
"studio_actor" "@cave"
"interrupt_chance" "75"
"cam_loc" "38 -27 64"
"cam_angles" "15 85 0"
"TurretShoot" "0"
}
}
-
name
, etc: Quote packs show up in selector windows, so they have the Standard set of options. -
characters
: A comma-separated list of characters present in the pack, mainly for informational purposes. -
caveSkin
: If this pack features Cave, this enables Cave portraits in various corridors and observation rooms, with the specified skin.
The monitor block, if present controls how monitor screens interact with the character.
-
studio
: Required, specifies an instance to place with the character present inside. This should be sealed with brushes as appropriate. -
studio_actor
: Specifies the entity name for the NPC present inside the studio. If the studio is present this will suppress creation of a generic entity for them, so that the choreo scenes can animate the character. -
interrupt_chance
: If greater than zero, this is the percentage chance to swap to show the character whenever cameras switch. If zero they will only be visible if no cameras are on. -
cam_loc
,cam_angles
: The local location/orientation that thepoint_camera
should be positioned at in the instance. -
TurretShoot
: If enabled, turrets will attempt to shoot at monitor screens when the character is visible on them.
Most of the options are contained in a seperate config file:
"Quotes"
{
"base" "50s/fancy_quote/base.vmf"
"quote_loc" "-2048 512 8192"
"use_dings" "0"
"useMicrophones" "1"
"bullseye" ""
"group"
{
...
}
"Midchamber"
{
...
}
"QuoteEvents"
{
"Event"
{
...
}
}
"CoopResponses"
{
...
}
}
-
quote_loc
: The location to place the quote logic. By default it is placed at-10 000, 0, 0
, well away from anything else. -
base
: If the pack is selected, this instance is placed into the map at thequote_loc
location. This usually contains NPC actors andlogic_relay
s to trigger lines. Entities should be within a 256³ cube - if a studio monitor is used it will also be placed here and will seal them in, otherwise a nodraw box will be generated instead. -
use_dings
: If enabled, all quote lines will have the 'ding' sounds added to the start/end, as used by GLaDOS. -
UseMicrophones
: Some characters like core Wheatley and Cave play lines from a position, giving them limited range. This option bypasses this by addingenv_microphone
s, so lines are re-broadcast from the player's location. -
bullseye
: If set, an NPC actor is created with this entity name. These can be specified individually for each quote, but this is more convenient if every line uses the same character.
Groups are the main section of the config file. They define a list of potential quotes, for some point in the level like entering/exiting the chamber, or elevators. When the map is compiled, one random applicable quote is picked for each group.
"Group"
{
"choreo_name" "@fancy_begin"
"id" "BEGINNING"
"name" "Chamber Start"
"desc" "Lines play at the start."
"use_dings" "0"
"choreo_loc" "512 -2892 68"
"Quote"
{
...
}
}
-
choreo_name
: Defines the entity name used for the generated entity.FireUser1
is bound to start/play this entity, using whichever method is required. -
id
: Identifies this group for this voice pack, to allow enabling/disabling it. -
name
: Display name for the group. -
desc
: A short description to explain when the group is triggered. -
use_dings
: If disabled, overrides the global ding setting for this group. -
choreo_loc
: If set, overrides the global location set for entities.
Midchamber lines are a special group. Instead of picking a single quote, each quote is defined for some specific situation, like fizzling a companion cube. All quotes are added, and get triggered if their situation occurs. Since each quote is independent, their lines must override every name.
Quotes define a category of lines appropriate for some situation. If the quote is enabled, one of its lines is selected to be played.
To allow determining if a quote should be enabled, in addition to the options defined below, any Condition Test can be included, that does not need to execute on a specific instance.
"Name" "Very Important Instructions"
"Priority" "5"
"Line_sp_human"
{
...
}
-
name
: Display name for the quote sequence. -
priority
: If voiceline priorities are enabled, successful quotes will be sorted, then the one with the lowest priority will be picked. Otherwise, this is ignored and a random valid quote is used.
Lines take many forms, depending on how they should be implemented. First, the block name can any number of several suffixes, determining whether the line is included:
-
chell
,bendy
,atlas
,pbody
: Included if this is one of the players, taking into account the selected model for SP. -
sp
,coop
: Included if this game mode is selected. -
human
: Included if the player is Bendy/Chell. -
robot
: Included if the player is ATLAS or P-Body.
Lines are configured as follows:
"Line"
{
"id" "important_generic_5"
"name" "Generic But Important"
"onlyonce" "1"
"atomic" "0"
"trans"
{
"" "Cave: Hello."
"" "Wheatley: Hi!"
}
"cc_emit" "cavejohnson.cave_laugh04"
"setstylevar" "important_chosen"
"snd" "cavejohnson.cave_laugh03"
"bullseye" "@cave_laugh"
"file" "50s/fancy_quote/laughter.vmf"
// These two options apply to the subsequent "choreo" block.
"choreo_name" "@fancy_begin_important"
"endcommand"
{
"target" "@fancy_important_done"
"input" "SetValue"
"parm" "1"
"delay" "0.5"
"only_once" "0"
"times" "5"
}
"choreo"
{
"" "scenes/npc/cavejohnson/another_laugh_01.vcd"
"" "scenes/npc/cavejohnson/another_laugh_02.vcd"
}
}
-
id
: Identifier for this line within the quote, used to enable/disable it. -
name
: Display name for the line. -
onlyonce
: If set, the line'sFireUser1
output is set to only be triggerable once. -
atomic
: If enabled, when any ent in this line starts it will kill all other variants genetated for this line. This is mainly useful when choreo scenes have name overrides set - the first triggered then prevents the others from playing. -
setstylevar
: If this line is chosen, this stylevar name is enabled. This allows conditions in the map to change things to match the choreo line. -
bullseye
: Eachbullseye
option causes the specified entity name to be placed as a bullseye, to provide actors for the choreo scene. -
file
: Eachfile
option simply places the specified instance in the quote line room. This allows arbitary custom logic to be added. -
snd
: This creates anambient_generic
entity, configured to trigger when the quote is. Multiple can be defined, but this is of limited use since they will all play simultaneously. -
choreo_name
/quote_name
/target
: Overrides the entity name used for the next choreo block. -
endcommand
: Causes an I/O command to be added to be triggered when the next choreo block completes. -
choreo
: Choreo blocks specify one or more choreo files, which are all placed and then chained to play one after the other.
Multiple groups of choreo_name
+ endcommand
+ choreo
can be defined, but the options only affect the choreo block found directly after them.
Some styles/items may have situations where it would make sense for characters to play lines before something occurs. Event blocks allow specifying the lines to play in such a situation, but allows using a default instance if none are present. Events must be enabled by the QuoteEvent
condition to be added to the map.
"Event"
{
"id" "UNLOCK_DOORS"
"file" "50s/fancy_quote/unlock_door.vmf"
}
-
id
: The unique ID the condition must provide to enable this event. -
file
: The instance to use for this event.
In Coop, several hooks are provided by the game to allow characters to react to things like players dying or gesturing. This block allows picking lines to use. Each line may only be played once, and the 'generic' versions will be chosen if no specific line is available. Currently only choreo scenes can be used.
"CoopResponses"
{
"use_dings" "0"
"death_generic"
{
"choreo"
{
"" "scenes/npc/glados/death_taunt_45.vcd"
}
}
}
-
use_dings
overrides the global 'dings' setting.
Each block may be one of several response types:
-
death_goo
: Player was killed byRADIATION
damage. -
death_turret
: Player was killed byBULLET
damage. Skipped if theturret
voice attribute is missing. -
death_crush
: Player was killed byCRUSH
damage. Skipped if thecrusher
voice attribute is missing. -
death_laserfield
: Player was killed bySHOCK
damage. Skipped if thelaserfield
voice attribute is missing. -
death_generic
: Used when a player dies and no other line is available. -
gesture_camera
: A player does a gesture near a security camera, triggering the camera view effect. -
gesture_generic
: A player does a gesture.