- t = game.get_thing(game.sessions[connection_id], False)
- game.io.send('CHAT ' + quote(t.nickname + ': ' + msg))
+ speaker = game.get_thing(game.sessions[connection_id])
+ largest_audible_distance = 20
+ dijkstra_map = DijkstraMap(game.maps, speaker.position,
+ largest_audible_distance, game.get_map)
+ for c_id in game.sessions:
+ listener = game.get_thing(game.sessions[c_id])
+ target_yx = dijkstra_map.target_yx(*listener.position, True)
+ if not target_yx:
+ continue
+ listener_distance = dijkstra_map[target_yx]
+ if listener_distance > largest_audible_distance:
+ continue
+ volume = 1 / max(1, listener_distance)
+ lowered_msg = lower_msg_by_volume(msg, volume, largest_audible_distance)
+ lowered_nick = lower_msg_by_volume(speaker.name, volume,
+ largest_audible_distance)
+ game.io.send('CHAT ' +
+ quote('(volume: %.2f) %s: %s' % (volume, lowered_nick,
+ lowered_msg)),
+ c_id)