]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/tturrets.qc
Get rid of TNSF_FAR, short is good enougth. Hide server based turret head from client.
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / tturrets.qc
1 void turrets_precache()
2 {
3     precache_model ("models/turrets/ewheel-base2.md3");
4     precache_model ("models/turrets/ewheel-gun1.md3");
5     precache_model ("models/turrets/base.md3");
6     precache_model ("models/turrets/flac.md3");
7     precache_model ("models/turrets/reactor.md3");
8     precache_model ("models/turrets/hellion.md3");
9     precache_model ("models/turrets/hk.md3");
10     precache_model ("models/turrets/machinegun.md3");
11     precache_model ("models/turrets/mlrs.md3");
12     precache_model ("models/turrets/phaser.md3");
13     precache_model ("models/turrets/phaser_beam.md3");
14     precache_model ("models/turrets/plasma.md3");
15     precache_model ("models/turrets/plasmad.md3");
16     precache_model ("models/turrets/tesla_head.md3");
17     precache_model ("models/turrets/tesla_base.md3");
18     precache_model ("models/turrets/walker_head_minigun.md3");
19     precache_model ("models/turrets/walker_body.md3");
20     precache_model ("models/turrets/walker_props.md3");
21     precache_model ("models/turrets/walker_spawn.md3");
22     precache_model ("models/turrets/rocket.md3");
23     
24     precache_sound ("turrets/phaser.wav");
25     precache_sound ("weapons/rocket_impact.wav");
26     precache_sound ("weapons/uzi_fire.wav");
27 }
28
29 //.entity tur_base;
30 void turret_remove()
31 {
32     entity th;
33     dprint("Removing turret type ", ftos(self.turret_type), "\n");
34     th = self.tur_head;
35     self.tur_head = world;
36     remove(th);
37 }
38
39 void turret_changeteam()
40 {
41         self.colormod = '0 0 0';
42         switch(self.team)
43         {
44         case COLOR_TEAM1: // Red
45             self.colormod = '2 0.5 0.5';
46             break;
47
48         case COLOR_TEAM2: // Blue
49             self.colormod = '0.5 0.5 2';
50             break;
51
52         case COLOR_TEAM3: // Yellow
53             self.colormod = '1.4 1.4 0.6';
54             break;
55
56         case COLOR_TEAM4: // Pink
57             self.colormod = '1.4 0.6 1.4';
58             break;
59         }
60         
61         self.tur_head.colormod = self.colormod;    
62 }
63
64 void turret_head_draw()
65 {    
66     float dt;
67     dt = time - self.move_time;
68     self.move_time = time;
69     if(dt <= 0)
70         return;
71     
72     self.angles += dt * self.move_avelocity;    
73     self.drawmask = MASK_NORMAL;
74 }
75
76 void turret_draw()
77 {
78     //float dt;
79     
80     if (self.health < 127)
81     if(random() < 0.25)
82         te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
83     
84     self.drawmask = MASK_NORMAL;    
85 }
86
87 //void(entity e, entity tagentity, string tagname) setattachment = #443;
88 void turret_construct()
89 {
90     string sbase, shead;
91     vector _min, _max;
92     
93     if(self.tur_head == world)
94         self.tur_head = spawn();
95     
96     sbase = "models/turrets/base.md3";
97     _min = '-32 -32 0';
98     _max = '32 32 64';
99     
100     switch(self.turret_type)
101     {
102         case TID_EWHEEL:
103             sbase = "models/turrets/ewheel-base2.md3";
104             shead = "models/turrets/ewheel-gun1.md3";
105             break;
106         case TID_FLAC:
107             shead = "models/turrets/flac.md3";
108             break;
109         case TID_FUSION:
110             shead = "models/turrets/reactor.md3";
111             _min = '-34 -34 0';
112             _max = '34 34 90';
113             break;
114         case TID_HELLION:
115             shead = "models/turrets/hellion.md3";
116             break;
117         case TID_HK:
118             shead = "models/turrets/hk.md3";
119             break;
120         case TID_MACHINEGUN:
121             shead = "models/turrets/machinegun.md3";
122             break;
123         case TID_MLRS:
124             shead = "models/turrets/mlrs.md3";
125             break;
126         case TID_PHASER:
127             shead = "models/turrets/phaser.md3";
128             break;
129         case TID_PLASMA:
130             shead = "models/turrets/plasma.md3";
131             break;
132         case TID_PLASMA_DUAL:
133             shead = "models/turrets/plasmad.md3";
134             break;
135         case TID_TESLA:
136             sbase = "models/turrets/tesla_base.md3";
137             shead = "models/turrets/tesla_head.md3";
138             _min = '-60 -60 0';
139             _max  ='60 60 128';
140             break;
141         case TID_WALKER:
142             sbase = "models/turrets/walker_body.md3";
143             shead = "models/turrets/walker_head_minigun.md3";
144             _min = '-70 -70 0';
145             _max = '70 70 95';
146             break;
147     }
148     
149     setorigin(self, self.origin);
150         
151     self.tur_head.classname = "turret_head";
152     self.tur_head.owner   = self;
153
154     setmodel(self, sbase);
155     setmodel(self.tur_head, shead);
156     
157     self.tur_head.move_movetype = MOVETYPE_NOCLIP;
158     self.move_movetype = MOVETYPE_NOCLIP;
159     
160     setsize(self, _min, _max);
161     setsize(self.tur_head, '0 0 0', '0 0 0');
162     
163     setorigin(self.tur_head, gettaginfo(self, gettagindex(self, "tag_head")));
164     self.health             = 255;
165     self.solid              = SOLID_BBOX;
166     self.tur_head.solid     = SOLID_NOT;
167     self.movetype           = MOVETYPE_NOCLIP;
168     self.tur_head.movetype  = MOVETYPE_NOCLIP;    
169     self.draw               = turret_draw;
170     self.tur_head.draw      = turret_head_draw;
171     self.entremove          = turret_remove;
172 }
173
174 void ent_turret()
175 {
176     float sf;
177     sf = ReadByte();
178
179         if(sf & TNSF_SETUP)
180         {           
181             self.turret_type = ReadByte();
182             dprint("Constructing turret type ", ftos(self.turret_type), "\n");
183                     
184             self.origin_x = ReadCoord();
185             self.origin_y = ReadCoord();
186             self.origin_z = ReadCoord();
187             
188             self.angles_x = ReadAngle();
189             self.angles_y = ReadAngle();
190             
191             turret_construct();
192     }
193     
194     if(sf & TNSF_ANG)
195     {
196         self.tur_head.move_angles_x = ReadShort();
197         self.tur_head.move_angles_y = ReadShort();
198         self.tur_head.angles = self.angles + self.tur_head.move_angles;
199     }
200     
201     if(sf & TNSF_AVEL)
202     {
203         self.tur_head.move_avelocity_x = ReadShort();
204         self.tur_head.move_avelocity_y = ReadShort();            
205     }
206     
207     if(sf & TNSF_STATUS)
208     {        
209         float _team;
210         _team = ReadByte();
211         _team -= 1; // /&)=(%&#)&%)/#&)=½!!!½!!". thanks.
212         self.health = ReadByte();
213         if(_team != self.team)
214         {
215             self.team = _team;
216             turret_changeteam();        
217         }
218     }
219 }