Modify Speaking Range (Power Type)
Changes how far the holder's own voice carries over Simple Voice Chat proximity audio. It works on the speaker's side, as the counterpart of apoli:modify_hearing_range: it changes what everyone else hears from the holder, and leaves what the holder hears alone.
Type ID: birdsong:modify_speaking_range (alias apoli:modify_speaking_range)
This power comes from Birdsong and needs Simple Voice Chat on the server.
Fields
| Field | Type | Default | Description |
|---|---|---|---|
modifier | Attribute Modifier | optional | A single modifier applied to the holder's broadcast distance. |
modifiers | Array of Attribute Modifiers | optional | Several modifiers applied to the holder's broadcast distance. |
normal | Boolean | true | Whether it applies to ordinary speech. |
whisper | Boolean | true | Whether it applies to whispering. |
bientity_condition | Bi-entity Condition Type | optional | Decides for each listener whether this power applies, with the holder as the actor and the listener as the target. |
What the base value is
| Channel | Base |
|---|---|
| Speaking | The server's max_voice_distance, 48 blocks by default. |
| Whispering | The server's whisper_distance, 24 blocks by default. |
A result of 0 or less silences the holder for everyone in proximity chat. There is no upper limit.
Speaking to some people further than others
Without bientity_condition, the power changes one number: how far the holder's voice carries for everybody. With one, the range is worked out for each listener separately, with the holder as the actor and the listener as the target, and only listeners who pass get the modified range. Everyone else hears the holder at whatever the unconditional powers leave.
Unconditional powers are applied first and conditional ones on top of them, so the two combine into an audience. The first power below mutes the holder, and the second gives their voice back, at full range, to everyone in the example:audience entity set:
{
"type": "birdsong:modify_speaking_range",
"modifier": {
"operation": "set_total",
"value": 0
}
}{
"type": "birdsong:modify_speaking_range",
"bientity_condition": {
"type": "apoli:in_entity_set",
"set": "example:audience"
},
"modifier": {
"operation": "set_total",
"value": 48
}
}Fill the set however the pack likes. This apoli:raycast adds everyone in a 60° cone in front of the holder for 30 seconds, so if you run it from a key press, whoever you point at can hear you:
{
"type": "apoli:raycast",
"distance": 16,
"block": false,
"cone_angle": 30,
"pierce_entities": true,
"bientity_action": {
"type": "apoli:add_to_entity_set",
"set": "example:audience",
"time_limit": 600
}
}Muting always wins over a listener's own hearing. If the range for a listener comes out at 0 or less, an apoli:modify_hearing_range on that listener can't bring the holder's voice back.
Examples
{
"type": "birdsong:modify_speaking_range",
"modifier": {
"operation": "multiply_total",
"value": 2
}
}This gives the holder a booming voice that carries three times as far, whispers included.
{
"type": "birdsong:modify_speaking_range",
"modifier": {
"operation": "set_total",
"value": 0
}
}This mutes the holder, so nobody nearby hears them at all.
{
"type": "birdsong:modify_speaking_range",
"normal": false,
"modifier": {
"operation": "set_total",
"value": 48
}
}Here whispers travel as far as ordinary speech, and speaking is unchanged.
The modifier's value accepts an Expression, so a voice can fade with a resource: "value": "example:breath / 2".
Notes
- The speaking range is resolved first, then each listener's hearing range is applied on top of it, so the two powers combine: a quiet speaker heard by a keen listener lands somewhere between the two.
- Ranges for each listener are worked out once a tick, and only while the holder is talking, so a
bientity_conditioncosts nothing while they are quiet. - Only proximity voice audio is affected. Group chat is a separate channel and is always audible to its members.
- Several active
modify_speaking_rangepowers stack, in the order the modifiers sort, with unconditional ones first and then the ones with abientity_condition. - Everything is decided on the server, so it works for vanilla clients and can't be tampered with.
- It needs Simple Voice Chat installed. Without it, this power loads and does nothing.