aboutsummaryrefslogtreecommitdiffstats
path: root/qw-qc/spectate.qc
diff options
context:
space:
mode:
Diffstat (limited to 'qw-qc/spectate.qc')
-rw-r--r--qw-qc/spectate.qc111
1 files changed, 111 insertions, 0 deletions
diff --git a/qw-qc/spectate.qc b/qw-qc/spectate.qc
new file mode 100644
index 0000000..aebc9ec
--- /dev/null
+++ b/qw-qc/spectate.qc
@@ -0,0 +1,111 @@
+/*
+ spectate.qc
+
+ spectator functions
+
+ PURPOSE
+
+ Copyright (C) 1996-1997 Id Software, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to:
+
+ Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330
+ Boston, MA 02111-1307, USA
+
+*/
+// Added Aug11'97 by Zoid <zoid@idsoftware.com>
+//
+// These functions are called from the server if they exist.
+// Note that Spectators only have one think since they movement code doesn't
+// track them much. Impulse commands work as usual, but don't call
+// the regular ImpulseCommand handler in weapons.qc since Spectators don't
+// have any weapons and things can explode.
+//
+// --- Zoid.
+
+/*
+===========
+SpectatorConnect
+
+called when a spectator connects to a server
+============
+*/
+void() SpectatorConnect =
+{
+ bprint (PRINT_MEDIUM, "Spectator ");
+ bprint (PRINT_MEDIUM, self.netname);
+ bprint (PRINT_MEDIUM, " entered the game\n");
+
+ self.goalentity = world; // used for impulse 1 below
+};
+
+/*
+===========
+SpectatorDisconnect
+
+called when a spectator disconnects from a server
+============
+*/
+void() SpectatorDisconnect =
+{
+ bprint (PRINT_MEDIUM, "Spectator ");
+ bprint (PRINT_MEDIUM, self.netname);
+ bprint (PRINT_MEDIUM, " left the game\n");
+};
+
+/*
+================
+SpectatorImpulseCommand
+
+Called by SpectatorThink if the spectator entered an impulse
+================
+*/
+void() SpectatorImpulseCommand =
+{
+ if (self.impulse == 1) {
+ // teleport the spectator to the next spawn point
+ // note that if the spectator is tracking, this doesn't do
+ // much
+ self.goalentity = find(self.goalentity, classname, "info_player_deathmatch");
+ if (self.goalentity == world)
+ self.goalentity = find(self.goalentity, classname, "info_player_deathmatch");
+ if (self.goalentity != world) {
+ setorigin(self, self.goalentity.origin);
+ self.angles = self.goalentity.angles;
+ self.fixangle = TRUE; // turn this way immediately
+ }
+ }
+
+ self.impulse = 0;
+};
+
+/*
+================
+SpectatorThink
+
+Called every frame after physics are run
+================
+*/
+void() SpectatorThink =
+{
+ // self.origin, etc contains spectator position, so you could
+ // do some neat stuff here
+
+ if (self.impulse)
+ SpectatorImpulseCommand();
+};
+
+