Room
A Room is a data structure in the Neo World Program. It represents a room that Players can move to.
Attributes
Despite being the basis of the Neo World Program game, Rooms have relatively few attributes. Note that if an attribute is internal, that means it only exists within the Room class. Internal attributes will be given in the “Class attribute” bullet point, preceded by their data type. If an attribute is external, it only exists on the spreadsheet. External attributes will be given in the “Spreadsheet label” bullet point.
Name
- Spreadsheet label: Room Name
- Class attribute: String
this.name
This is the name of the Room. Unlike the name attribute in most other data structures, this must be in all lowercase letters, with no spaces (though hyphens are allowed) or special characters. The reason for this is that the Room name must be exactly the same as the corresponding Discord channel.
Channel
- Class attribute: TextChannel
this.channel
This is an internal attribute. When the Room data is loaded, Alter Ego will attempt to find the channel whose name matches the name of the Room. By making the channel a persistent internal attribute, Alter Ego can perform many operations more easily, such as adding a Player to the Room’s channel. It should be noted that even if a Room’s channel is not part of a room category, Players will still be added to the channel when moving to its associated Room and Narrations will still be sent to the channel, but commands and dialog sent to that channel will not be passed through the commandHandler and dialogHandler modules, respectively.
Tags
This is a comma-separated list of keywords or phrases assigned to a Room that allows that Room, and others with shared tags, to be affected by Events. There are no rules for how tags must be named, and there is no theoretical limit on the number of tags a single Room can have. Some tags have predefined behavior. Here, each predefined tag will be listed, and their behavior will be detailed.
soundproof
- All dialog spoken inside the Room will not be narrated in adjacent Rooms, even if it is shouted or if Players in
adjacent Rooms have the
acute hearingbehavior attribute. - Players in the Room will not hear dialog from adjacent Rooms, regardless of the same circumstances.
audio surveilled
- All non-Whispered dialog sent to the Room will be narrated in all Rooms with the
audio monitoringtag with an indication of which Room the dialog originated in. - While there is no limit to how many Rooms can have this tag, applying it to too many could negatively affect Alter Ego’s performance.
audio monitoring
- All non-Whispered dialog sent to any Room with the
audio surveilledtag will be sent to the Room with an indication of which Room the dialog originated in.- Example:
[break-room] Someone with a crisp voice says "Are you listening to me?".
- Example:
- All shouted dialog sent to Rooms adjacent to a Room with the
audio surveilledtag will be narrated in the Room with theaudio monitoringtag, as long as there is at least one Player in the Room with theaudio surveilledtag.- Example:
[break-room] Someone in a nearby room with an obnoxious voice shouts "SOMEONE HELP!".
- Example:
video surveilled
- All Narrations sent to the Room will be narrated in all Rooms with the
video monitoringtag with an indication of which Room the Narration originated in. - While there is no limit to how many Rooms can have this tag, applying it to too many could negatively affect Alter Ego’s performance.
video monitoring
- All Narrations sent to any Room with the
video surveilledtag will be sent to the Room with an indication of which Room the Narration originated in.- Example:
[break-room] Kyra begins inspecting the DESK.
- Example:
- If the Room also has the
audio monitoringtag, then all non-Whispered dialog spoken in any Room with thevideo surveilledandaudio surveilledtags will appear as a more natural dialog message, with the speaker’s display name and display icon alongside the name of the Room the dialog originated in.
secret
- If the Room also has the
audio surveilledorvideo surveilledtag, then its name will be obscured when dialog and Narrations are transmitted to Rooms with theaudio monitoringorvideo monitoringtags.- Example:
[Intercom] Someone with a crisp voice says "Are you listening to me?". - Example:
[Surveillance feed] Kyra begins inspecting the DESK.
- Example:
Icon URL
- Spreadsheet label: Icon URL
- Class attribute: String
this.iconURL
This is an optional image URL that will accompany a Room’s description. The URL must end in .jpg, .png, or .gif.
Exits
- Spreadsheet labels: Exits, X, Y, Z, Unlocked?, Leads To, From, Room Description
- Class
attribute: Array<Exit>
this.exit
This is a list of Exits in the Room. All Rooms that can be accessed via a given Room’s Exits are considered adjacent to the given Room, meaning a Player can freely travel to them. For more information, see the article on Exits.
Room Description
- Spreadsheet label: Room Description
- Class attribute: String
this.description
This is the default description of a Room. The default description will always be the description for the first Exit in the Room. When a Player enters or inspects a Room, they will receive a parsed version of this string. The Player will not be sent the Room’s description by itself. Instead, they will be sent a Discord Embed containing:
- The name of the Room.
- The Room’s default description, or the description of the Exit they entered from.
- The Room’s occupants, excluding the Player themself.
- The description of the Room’s default drop Object. If the Room doesn’t have one, “You don’t see any items.” will be sent instead.
- The Room’s icon URL. If the Room does not have one, then the default Room icon URL will be used instead. If no default Room icon URL is set, then Alter Ego will use the server icon instead. If the server icon is not set, then no image will be sent in the MessageEmbed.

See the article on writing descriptions for more information.
Row
- Class attribute: Number
this.row
This is an internal attribute, but it can also be found on the spreadsheet. This is the row number of the first Exit in a Room. Alter Ego uses this data to determine which row of the Rooms spreadsheet contains the default description for a Room.
Occupants
This is an internal attribute. It is an array of all Players currently in the Room.
Occupants String
- Class attribute: String
this.occupantsString
This is an internal attribute. It is a string listing all of the Room’s
occupants’ display names in alphabetical order, however any Players with the
hidden behavior attribute are omitted.