1 //***********************
\r
3 //***********************
\r
5 float LGATE_START_OFF = 1;
\r
6 float LGATE_TOGGLE = 2;
\r
7 float LGATE_ADDITIVE_BLEND = 4;
\r
8 float LGATE_INSTANT_KILL = 8; // fixme: not done yet
\r
9 float LGATE_FULLBRIGHT = 16;
\r
11 //float STATE_ACTIVE;
\r
12 //float STATE_INACTIVE;
\r
14 void PlayerLasergatePreThink ()
\r
16 // player is starting his movement code.
\r
17 // set owner of all friendly lasergates to player so he can pass through them.
\r
23 e = find(e, classname, "func_lasergate");
\r
26 if(e.team_no && e.team_no == self.team_no)
\r
28 //bprint("found a lasergate\n");
\r
35 void PlayerLasergatePostThink ()
\r
37 // player is starting his movement code.
\r
38 // set owner of all friendly lasergates to player so he can pass through them.
\r
44 e = find(e, classname, "func_lasergate");
\r
50 void lasergate_touch()
\r
52 //if(self.state != STATE_ACTIVE)
\r
53 // return; // lasergate is inactive
\r
55 //bprint("touch\n");
\r
56 if(other == self.owner)
\r
57 return; // don't hurt the guy that's moving at the moment
\r
59 //bprint("not owner\n");
\r
60 if(self.team_no && other.team_no == self.team_no)
\r
61 return; // don't hurt teammates if it does touch them somehow
\r
63 //bprint("not team\n");
\r
65 return; // no damage to deal
\r
67 //bprint("have damage\n");
\r
68 if(self.respawntime > time)
\r
69 return; // don't damage every frame
\r
71 //bprint("hurt player!\n");
\r
72 self.respawntime = time + self.attack_finished;
\r
75 Damage (other, self, self, self.dmg, DEATH_LASERGATE, 0.5*(self.absmin+self.absmax), '0 0 0');
\r
78 void lasergate_activate()
\r
82 // bprint("lasergate_activate\n");
\r
84 setorigin(self, self.origin);
\r
85 setmodel(self, self.mdl);
\r
86 setsize (self, self.mins , self.maxs);
\r
87 self.touch = lasergate_touch;
\r
90 void lasergate_deactivate()
\r
94 // bprint("lasergate_deactivate\n");
\r
97 self.touch = SUB_Null;
\r
100 void lasergate_use()
\r
102 if(self.spawnflags & LGATE_TOGGLE)
\r
105 lasergate_deactivate();
\r
107 lasergate_activate();
\r
111 if(self.spawnflags & LGATE_START_OFF)
\r
113 lasergate_activate();
\r
114 self.think = lasergate_deactivate;
\r
115 self.nextthink = self.ltime + self.wait;
\r
119 lasergate_deactivate();
\r
120 self.think = lasergate_activate;
\r
121 self.nextthink = self.ltime + self.wait;
\r
125 void func_lasergate()
\r
127 self.solid = SOLID_BSP;
\r
128 self.movetype = MOVETYPE_PUSH;
\r
130 self.use = lasergate_use;
\r
131 self.mdl = self.model;
\r
136 if(!self.attack_finished)
\r
137 self.attack_finished = 1;
\r
141 self.message = " tried to cross a lasergate";
\r
143 if(self.spawnflags & LGATE_ADDITIVE_BLEND)
\r
144 self.effects = self.effects | EF_ADDITIVE;
\r
146 if(self.spawnflags & LGATE_FULLBRIGHT)
\r
147 self.effects = self.effects | EF_FULLBRIGHT;
\r
149 if(self.spawnflags & LGATE_START_OFF)
\r
150 lasergate_deactivate();
\r
152 lasergate_activate();
\r
161 void trigger_gravity_use() =
\r
163 if(activator.classname != "player")
\r
167 activator.gravity = self.gravity;
\r
168 else if(self.speed)
\r
170 activator.gravity = self.speed / cvar("sv_gravity");
\r
174 void trigger_gravity_touch() =
\r
176 if (other.classname != "player")
\r
184 void trigger_gravity() =
\r
186 if(!self.gravity && !self.speed)
\r
187 self.gravity = 0.5;
\r
189 self.use = trigger_gravity_use;
\r
190 self.touch = trigger_gravity_touch;
\r