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