]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/server/target_music.qc
a17cc41805e8626cb0131379635158a3d805f93e
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / target_music.qc
1 .float lifetime;
2 // values:
3 //   volume
4 //   noise
5 //   targetname
6 //   lifetime
7 //   fade_time
8 //   fade_rate
9 // when triggered, the music is overridden for activator until lifetime (or forever, if lifetime is 0)
10 // when targetname is not set, THIS ONE is default
11 void target_music_sendto(float to, float is)
12 {
13         WriteByte(to, TE_CSQC_TARGET_MUSIC);
14         WriteShort(to, num_for_edict(self));
15         WriteByte(to, self.volume * 255.0 * is);
16         WriteByte(to, self.fade_time * 16.0);
17         WriteByte(to, self.fade_rate * 16.0);
18         WriteByte(to, self.lifetime);
19         WriteString(to, self.noise);
20 }
21 void target_music_reset()
22 {
23         if(self.targetname == "")
24                 target_music_sendto(MSG_ALL, 1);
25 }
26 void target_music_use()
27 {
28         if(!activator)
29                 return;
30         msg_entity = activator;
31         target_music_sendto(MSG_ONE, 1);
32 }
33 void spawnfunc_target_music()
34 {
35         self.use = target_music_use;
36         self.reset = target_music_reset;
37         if(!self.volume)
38                 self.volume = 1;
39         if(self.targetname == "")
40                 target_music_sendto(MSG_INIT, 1);
41         else
42                 target_music_sendto(MSG_INIT, 0);
43 }
44 // values:
45 //   volume
46 //   noise
47 //   targetname
48 //   fade_time
49 // spawnflags:
50 //   1 = START_OFF
51 // when triggered, it is disabled/enabled for everyone
52 float trigger_music_SendEntity(entity to, float sf)
53 {
54         WriteByte(MSG_ENTITY, TE_CSQC_TARGET_MUSIC);
55         sf &~= 0x80;
56         if(self.cnt)
57                 sf |= 0x80;
58         WriteByte(MSG_ENTITY, sf);
59         if(sf & 4)
60         {
61                 WriteCoord(MSG_ENTITY, self.origin_x);
62                 WriteCoord(MSG_ENTITY, self.origin_y);
63                 WriteCoord(MSG_ENTITY, self.origin_z);
64         }
65         if(sf & 1)
66         {
67                 if(self.model != "null")
68                 {
69                         WriteShort(MSG_ENTITY, self.modelindex);
70                         WriteCoord(MSG_ENTITY, self.mins_x);
71                         WriteCoord(MSG_ENTITY, self.mins_y);
72                         WriteCoord(MSG_ENTITY, self.mins_z);
73                         WriteCoord(MSG_ENTITY, self.maxs_x);
74                         WriteCoord(MSG_ENTITY, self.maxs_y);
75                         WriteCoord(MSG_ENTITY, self.maxs_z);
76                 }
77                 else
78                 {
79                         WriteShort(MSG_ENTITY, 0);
80                         WriteCoord(MSG_ENTITY, self.maxs_x);
81                         WriteCoord(MSG_ENTITY, self.maxs_y);
82                         WriteCoord(MSG_ENTITY, self.maxs_z);
83                 }
84                 WriteByte(MSG_ENTITY, self.volume * 255.0);
85                 WriteByte(MSG_ENTITY, self.fade_time * 16.0);
86                 WriteByte(MSG_ENTITY, self.fade_rate * 16.0);
87                 WriteString(MSG_ENTITY, self.noise);
88         }
89         return 1;
90 }
91 void trigger_music_reset()
92 {
93         self.cnt = !(self.spawnflags & 1);
94         self.SendFlags |= 0x80;
95 }
96 void trigger_music_use()
97 {
98         self.cnt = !self.cnt;
99         self.SendFlags |= 0x80;
100 }
101 void spawnfunc_trigger_music()
102 {
103         if(self.model != "")
104                 setmodel(self, self.model);
105         if(!self.volume)
106                 self.volume = 1;
107         if(!self.modelindex)
108         {
109                 setorigin(self, self.origin + self.mins);
110                 setsize(self, '0 0 0', self.maxs - self.mins);
111         }
112         trigger_music_reset();
113
114         self.use = trigger_music_use;
115         self.reset = trigger_music_reset;
116
117         Net_LinkEntity(self, FALSE, 0, trigger_music_SendEntity);
118 }