]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/monsters.qc
e0fa128505ed7efcea2e5b65dd6d443bad5dfffa
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / monsters.qc
1 .vector glowmod;
2 void monster_changeteam()
3 {
4         self.glowmod = Team_ColorRGB(self.team - 1);
5         self.teamradar_color = Team_ColorRGB(self.team - 1);
6         
7         if(self.team)
8                 self.colormap = 1024 + (self.team - 1) * 17;
9         else
10                 self.colormap = 1024;
11 }
12
13 void monster_die()
14 {
15         MON_ACTION(self.monsterid, MR_DEATH);
16                 
17         self.solid = SOLID_CORPSE;
18 }
19
20 void monster_draw()
21 {        
22         float dt;
23             
24         dt = time - self.move_time;
25         self.move_time = time;
26         if(dt <= 0)
27                 return;
28     
29         fixedmakevectors(self.angles);
30         //movelib_groundalign4point(50, 25, 0.25, 45);
31         setorigin(self, self.origin + self.velocity * dt);
32         self.angles_y = self.move_angles_y;
33 }
34
35 void monster_construct()
36 {
37         vector min_s, max_s;
38         entity mon = get_monsterinfo(self.monsterid);
39         
40         min_s = mon.mins;
41         max_s = mon.maxs;
42         
43         self.netname = M_NAME(self.monsterid);
44
45         setorigin(self, self.origin);
46         setmodel(self, mon.model);
47         setsize(self, min_s, max_s);
48         
49         self.move_movetype      = MOVETYPE_BOUNCE;
50         self.health                     = 255;
51         self.solid                      = SOLID_BBOX;
52         self.movetype           = MOVETYPE_BOUNCE; 
53         self.move_origin        = self.origin;
54         self.move_time          = time;
55         self.drawmask           = MASK_NORMAL;  
56         self.alpha                      = 1;
57         self.draw                       = monster_draw;
58 }
59
60 void ent_monster()
61 {
62         float sf;
63         sf = ReadByte();
64
65         if(sf & MSF_SETUP)
66         {
67                 self.monsterid = ReadByte();
68                                 
69                 self.origin_x = ReadCoord();
70                 self.origin_y = ReadCoord();
71                 self.origin_z = ReadCoord();
72                 setorigin(self, self.origin);
73                 
74                 self.angles_x = ReadAngle();
75                 self.angles_y = ReadAngle();
76                 
77                 self.skin = ReadByte();
78                 self.team = ReadByte();
79                 self.scale = ReadByte();
80                 
81                 monster_construct();
82                 monster_changeteam();
83         }
84         
85         if(sf & MSF_ANG)
86         {
87                 self.move_angles_x = ReadShort();
88                 self.move_angles_y = ReadShort();
89                 self.angles = self.move_angles;
90         }
91         
92         if(sf & MSF_MOVE)
93         {
94                 self.origin_x = ReadShort();
95                 self.origin_y = ReadShort();
96                 self.origin_z = ReadShort();
97                 setorigin(self, self.origin);
98                 
99                 self.velocity_x = ReadShort();
100                 self.velocity_y = ReadShort();
101                 self.velocity_z = ReadShort();
102                 
103                 self.move_angles_y = ReadShort();
104                         
105                 self.move_time   = time;
106                 self.move_velocity = self.velocity;
107                 self.move_origin   = self.origin;
108         }
109         
110         if(sf & MSF_ANIM)
111         {
112                 self.frame1time = ReadCoord();
113                 self.frame        = ReadByte();
114         }
115
116         if(sf & MSF_STATUS)
117         {
118                 self.skin = ReadByte();
119         
120                 float _tmp;
121                 _tmp = ReadByte();
122                 if(_tmp != self.team)
123                 {                       
124                         self.team = _tmp;                               
125                         monster_changeteam();
126                 }
127                 
128                 _tmp = ReadByte();
129                 if(_tmp == 4) // respawning
130                         setmodel(self, "null");
131                 
132                 _tmp = ReadByte();
133                 
134                 if(_tmp == 0 && self.health != 0)
135                         monster_die();
136
137                 self.health = _tmp;
138         }
139 }