Goonstation 13 - Modules - Types

code/modules/speech/say_channels/_say_channel_parent.dm

/datum/say_channelSay channel datums govern the dissemination of messages to registered listen input module datums. In its simplest form, this involves a say message datum being passed from an output module to a channel, and the channel then performing shared input formatting before passing the say message to registered listen modules. Say channels also determine whether a message should be affected by output and input modifiers, and whether the sender should display a speech bubble and play a speech sound.
/datum/say_channel/global_channelGlobal say channel datums act as optional parters to delimited say channels, with the delimited channel passing all messages sent over it, irrespective of subchannel or range, to the global channel. In turn, any message sent to the global channel will be sent to all listeners on the delimited channel, irrespective of subchannel or range.
/datum/say_channel/delimitedDelimited say channel datums, by some criteria, restrict the number of listeners that a say message is passed to. This typically manifests as only sending messages to listeners within a range of the speaker, or only sending messages to listeners registered to a specific subchannel. A global say channel datum may be associated with a delimited channel, which will receive all messages sent over the delimited channel and in turn may send messages to all listeners. See /datum/say_channel/global_channel.
/datum/say_channel/delimited/localLocal say channels are a form of delimited channel that restrict the number of listeners that a say message is passed to on the basis of range. How this range is calculated may be altered by overriding GetAtomListeners().
/datum/say_channel/delimited/bundledBundled say channels are a form of delimited channel that restrict the number of listeners that a say message is passed to on the basis of which subchannel a listener is registered to. Unlike say channel IDs, subchannel IDs may be defined arbitrarily at runtime; subchannel IDs are commonly BYOND atom references to some shared datum among listeners.