… | |
… | |
39 | /** |
39 | /** |
40 | * Maximum distance a player may hear a sound from. |
40 | * Maximum distance a player may hear a sound from. |
41 | * This is only used for new client/server sound. If the sound source |
41 | * This is only used for new client/server sound. If the sound source |
42 | * on the map is farther away than this, we don't sent it to the client. |
42 | * on the map is farther away than this, we don't sent it to the client. |
43 | */ |
43 | */ |
44 | #define MAX_SOUND_DISTANCE 10 |
44 | #define MAX_SOUND_DISTANCE 16 |
45 | |
45 | |
46 | // the hashtable |
46 | // the hashtable |
47 | typedef std::tr1::unordered_map |
47 | typedef std::tr1::unordered_map |
48 | < |
48 | < |
49 | const char *, |
49 | const char *, |
… | |
… | |
87 | client::play_sound (faceidx sound, int dx, int dy) |
87 | client::play_sound (faceidx sound, int dx, int dy) |
88 | { |
88 | { |
89 | if (!sound) |
89 | if (!sound) |
90 | return; |
90 | return; |
91 | |
91 | |
|
|
92 | if (dx < -MAX_SOUND_DISTANCE || dx > MAX_SOUND_DISTANCE) return; |
|
|
93 | if (dy < -MAX_SOUND_DISTANCE || dy > MAX_SOUND_DISTANCE) return; |
|
|
94 | |
92 | if (fx_want [FT_SOUND]) |
95 | if (fx_want [FT_SOUND]) |
93 | { |
96 | { |
94 | // cfplus |
97 | // cfplus |
95 | send_face (sound); |
98 | send_face (sound); |
96 | flush_fx (); |
99 | flush_fx (); |
|
|
100 | |
|
|
101 | uint8 vol = clamp (255 - idistance (dx, dy) * 361 / MAX_SOUND_DISTANCE, 0, 255); |
|
|
102 | |
|
|
103 | // cut off volume here |
|
|
104 | if (vol < 8) |
|
|
105 | return; |
97 | |
106 | |
98 | packet sl ("sc"); |
107 | packet sl ("sc"); |
99 | |
108 | |
100 | uint8 *len = sl.cur; |
109 | uint8 *len = sl.cur; |
101 | |
110 | |
102 | sl << uint8 (0) // group length |
111 | sl << uint8 (0) // group length |
103 | << uint8 (0) // type == one-time effect |
112 | << uint8 (0) // type == one-time effect |
104 | << ber32 (sound) |
113 | << ber32 (sound) |
105 | << sint8 (dx) |
114 | << sint8 (dx) |
106 | << sint8 (dy); |
115 | << sint8 (dy) |
|
|
116 | << uint8 (vol); // 0 == silent, 255 max |
107 | |
117 | |
108 | *len = sl.cur - len; // patch in group length |
118 | *len = sl.cur - len; // patch in group length |
109 | |
119 | |
110 | send_packet (sl); |
120 | send_packet (sl); |
111 | } |
121 | } |