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