Skip to main content

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)

note

This power comes from Birdsong and needs Simple Voice Chat on the server.

Fields

FieldTypeDefaultDescription
modifierAttribute ModifieroptionalA single modifier applied to the holder's broadcast distance.
modifiersArray of Attribute ModifiersoptionalSeveral modifiers applied to the holder's broadcast distance.
normalBooleantrueWhether it applies to ordinary speech.
whisperBooleantrueWhether it applies to whispering.
bientity_conditionBi-entity Condition TypeoptionalDecides for each listener whether this power applies, with the holder as the actor and the listener as the target.

What the base value is

ChannelBase
SpeakingThe server's max_voice_distance, 48 blocks by default.
WhisperingThe 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_condition costs 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_range powers stack, in the order the modifiers sort, with unconditional ones first and then the ones with a bientity_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.