[nexuiz-commits] r7132 - in trunk/data/qcsrc: client common server server/tturrets/system server/vehicles
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Jun 30 10:41:34 EDT 2009
Author: div0
Date: 2009-06-30 10:41:34 -0400 (Tue, 30 Jun 2009)
New Revision: 7132
Modified:
trunk/data/qcsrc/client/miscfunctions.qc
trunk/data/qcsrc/client/sbar.qc
trunk/data/qcsrc/common/constants.qh
trunk/data/qcsrc/server/havocbot_ctf.qc
trunk/data/qcsrc/server/tturrets/system/system_damage.qc
trunk/data/qcsrc/server/vehicles/racer.qc
trunk/data/qcsrc/server/vehicles/spiderbot.qc
trunk/data/qcsrc/server/vehicles/vehicles.qc
Log:
eof fixes for all qc, qh, c filesd
Modified: trunk/data/qcsrc/client/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/client/miscfunctions.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/client/miscfunctions.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -11,9 +11,9 @@
if (!spectatee_status) //do cprint only for players
centerprint("^1Begin!");
- sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE);
- //reset maptime announcers now as well
- announcer_5min = announcer_1min = FALSE;
+ sound(self, CHAN_VOICE, "announcer/robotic/begin.wav", VOL_BASEVOICE, ATTN_NONE);
+ //reset maptime announcers now as well
+ announcer_5min = announcer_1min = FALSE;
remove(self);
return;
@@ -28,46 +28,46 @@
self.nextthink = getstatf(STAT_GAMESTARTTIME) - (countdown - 1);
}
-}
-
-/**
- * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it
- */
-void maptimeAnnouncer() {
- float timelimit;
- timelimit = getstatf(STAT_TIMELIMIT);
- float timeleft;
- timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
-
- //5 minute check
- if (cvar("cl_sound_maptime_warning") >= 2) {
- //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
- if (!announcer_5min && timelimit > 0 && timeleft < 300 && timeleft > 299) {
- announcer_5min = TRUE;
- //dprint("i will play the sound, I promise!\n");
- sound(self, CHAN_VOICE, "announcer/robotic/5minutesremain.wav", VOL_BASEVOICE, ATTN_NONE);
- }
-
- }
-
- //1 minute check
- if (cvar("cl_sound_maptime_warning") == 1 || cvar("cl_sound_maptime_warning") == 3) {
- if (!announcer_1min && timelimit > 0 && timeleft < 60) {
- announcer_1min = TRUE;
- sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE);
- }
- }
-}
-
-/**
- * Add all future announcer sounds precaches here.
- * TODO: make all announcer sound() calls client-side in the end, to allow queues etc.
- */
-void Announcer_Precache () {
- precache_sound ("announcer/robotic/1minuteremains.wav");
- precache_sound ("announcer/robotic/5minutesremain.wav");
}
+/**
+ * Plays the 1minute or 5 minutes (of maptime) remaining sound, if client wants it
+ */
+void maptimeAnnouncer() {
+ float timelimit;
+ timelimit = getstatf(STAT_TIMELIMIT);
+ float timeleft;
+ timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
+
+ //5 minute check
+ if (cvar("cl_sound_maptime_warning") >= 2) {
+ //make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
+ if (!announcer_5min && timelimit > 0 && timeleft < 300 && timeleft > 299) {
+ announcer_5min = TRUE;
+ //dprint("i will play the sound, I promise!\n");
+ sound(self, CHAN_VOICE, "announcer/robotic/5minutesremain.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+
+ }
+
+ //1 minute check
+ if (cvar("cl_sound_maptime_warning") == 1 || cvar("cl_sound_maptime_warning") == 3) {
+ if (!announcer_1min && timelimit > 0 && timeleft < 60) {
+ announcer_1min = TRUE;
+ sound(self, CHAN_VOICE, "announcer/robotic/1minuteremains.wav", VOL_BASEVOICE, ATTN_NONE);
+ }
+ }
+}
+
+/**
+ * Add all future announcer sounds precaches here.
+ * TODO: make all announcer sound() calls client-side in the end, to allow queues etc.
+ */
+void Announcer_Precache () {
+ precache_sound ("announcer/robotic/1minuteremains.wav");
+ precache_sound ("announcer/robotic/5minutesremain.wav");
+}
+
void AuditLists()
{
entity e;
Property changes on: trunk/data/qcsrc/client/miscfunctions.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/client/sbar.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1180,7 +1180,7 @@
float timelimit, minutes, seconds, timeleft, minutesLeft, secondsLeft, distribution, myplace, score, desiredPlayerId;
vector sbar_save, place, timer_color, offset;
entity tm, pl, me;
- sbar_save = sbar;
+ sbar_save = sbar;
vector bottomright;
bottomright_x = vid_conwidth;
@@ -1191,15 +1191,15 @@
topright_x = vid_conwidth;
topright_y = 0;
topright_z = 0;
-
- //get the ID (could be "me", or the player I'm spectating)
- desiredPlayerId = player_localentnum - 1;
- if (spectatee_status) {
- if (spectatee_status != -1) {
- desiredPlayerId = spectatee_status - 1;
- }
+
+ //get the ID (could be "me", or the player I'm spectating)
+ desiredPlayerId = player_localentnum - 1;
+ if (spectatee_status) {
+ if (spectatee_status != -1) {
+ desiredPlayerId = spectatee_status - 1;
+ }
}
-
+
sbar_y = vid_conheight - (32+12);
sbar_x -= margin;
Property changes on: trunk/data/qcsrc/client/sbar.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/common/constants.qh 2009-06-30 14:41:34 UTC (rev 7132)
@@ -77,9 +77,9 @@
const float ENT_CLIENT_MAPVOTE = 17;
const float ENT_CLIENT_CLIENTDATA = 18;
const float ENT_CLIENT_RANDOMSEED = 19;
-const float ENT_CLIENT_WALL = 20;
-const float ENT_CLIENT_SPIDERBOT = 21;
-
+const float ENT_CLIENT_WALL = 20;
+const float ENT_CLIENT_SPIDERBOT = 21;
+
const float ENT_CLIENT_TURRET = 40;
const float SPRITERULE_DEFAULT = 0;
@@ -260,25 +260,25 @@
const float CTF_STATE_ATTACK = 1;
const float CTF_STATE_DEFEND = 2;
const float CTF_STATE_COMMANDER = 3;
-
-const float STAT_HUD = 50;
-const float HUD_NORMAL = 0;
-const float HUD_SPIDEBOT = 10;
-
-const float STAT_SPIDERBOT_HEALTH = 60;
-const float STAT_SPIDERBOT_ROCKETS = 61;
-const float STAT_SPIDERBOT_HEAT = 62;
-const float STAT_SPIDERBOT_RELOAD = 63;
-const float STAT_SPIDERBOT_ENERGY = 64;
-const float STAT_SPIDERBOT_SHIELD = 65;
-
-//const float STAT_SPIDERBOT_AIM 53 // compressShotOrigin
-
-//const float STAT_SPIDERBOT_TARGET 54 // compressShotOrigin
-
-
-
+const float STAT_HUD = 50;
+const float HUD_NORMAL = 0;
+const float HUD_SPIDEBOT = 10;
+
+const float STAT_SPIDERBOT_HEALTH = 60;
+const float STAT_SPIDERBOT_ROCKETS = 61;
+const float STAT_SPIDERBOT_HEAT = 62;
+const float STAT_SPIDERBOT_RELOAD = 63;
+const float STAT_SPIDERBOT_ENERGY = 64;
+const float STAT_SPIDERBOT_SHIELD = 65;
+
+//const float STAT_SPIDERBOT_AIM 53 // compressShotOrigin
+
+//const float STAT_SPIDERBOT_TARGET 54 // compressShotOrigin
+
+
+
+
// moved that here so the client knows the max.
// # of maps, I'll use arrays for them :P
#define MAPVOTE_COUNT 10
Property changes on: trunk/data/qcsrc/common/constants.qh
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/server/havocbot_ctf.qc
===================================================================
--- trunk/data/qcsrc/server/havocbot_ctf.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/server/havocbot_ctf.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1,10 +1,10 @@
-#define HAVOCBOT_CTF_ROLE_NONE 0
-#define HAVOCBOT_CTF_ROLE_DEFENSE 2
-#define HAVOCBOT_CTF_ROLE_MIDDLE 4
-#define HAVOCBOT_CTF_ROLE_OFFENSE 8
-#define HAVOCBOT_CTF_ROLE_CARRIER 16
-#define HAVOCBOT_CTF_ROLE_RETRIEVER 32
-#define HAVOCBOT_CTF_ROLE_ESCORT 64
+#define HAVOCBOT_CTF_ROLE_NONE 0
+#define HAVOCBOT_CTF_ROLE_DEFENSE 2
+#define HAVOCBOT_CTF_ROLE_MIDDLE 4
+#define HAVOCBOT_CTF_ROLE_OFFENSE 8
+#define HAVOCBOT_CTF_ROLE_CARRIER 16
+#define HAVOCBOT_CTF_ROLE_RETRIEVER 32
+#define HAVOCBOT_CTF_ROLE_ESCORT 64
.void() havocbot_role;
.void() havocbot_previous_role;
@@ -53,27 +53,27 @@
}
return world;
};
-
-float havocbot_ctf_teamcount(entity bot, vector org, float radius)
-{
- if not(teams_matter)
- return 0;
-
- float c;
- entity head;
-
- FOR_EACH_PLAYER(head)
- {
- if(head.team!=bot.team || head.deadflag != DEAD_NO || head == bot)
- continue;
-
- if(vlen(head.origin - org) < radius)
- ++c;
- }
-
- return c;
-};
+float havocbot_ctf_teamcount(entity bot, vector org, float radius)
+{
+ if not(teams_matter)
+ return 0;
+
+ float c;
+ entity head;
+
+ FOR_EACH_PLAYER(head)
+ {
+ if(head.team!=bot.team || head.deadflag != DEAD_NO || head == bot)
+ continue;
+
+ if(vlen(head.origin - org) < radius)
+ ++c;
+ }
+
+ return c;
+};
+
void havocbot_goalrating_ctf_ourflag(float ratingscale)
{
local entity head;
@@ -216,183 +216,183 @@
head = head.chain;
}
};
-
-void havocbot_role_ctf_setrole(entity bot, float role)
-{
- dprint(strcat(bot.netname," switched to "));
- switch(role)
- {
- case HAVOCBOT_CTF_ROLE_CARRIER:
- dprint("carrier");
- bot.havocbot_role = havocbot_role_ctf_carrier;
- bot.havocbot_role_timeout = 0;
- bot.havocbot_cantfindflag = time + 10;
- break;
- case HAVOCBOT_CTF_ROLE_DEFENSE:
- dprint("defense");
- bot.havocbot_role = havocbot_role_ctf_defense;
- bot.havocbot_role_timeout = 0;
- break;
- case HAVOCBOT_CTF_ROLE_MIDDLE:
- dprint("middle");
- bot.havocbot_role = havocbot_role_ctf_middle;
- bot.havocbot_role_timeout = 0;
- break;
- case HAVOCBOT_CTF_ROLE_OFFENSE:
- dprint("offense");
- bot.havocbot_role = havocbot_role_ctf_offense;
- bot.havocbot_role_timeout = 0;
- break;
- case HAVOCBOT_CTF_ROLE_RETRIEVER:
+
+void havocbot_role_ctf_setrole(entity bot, float role)
+{
+ dprint(strcat(bot.netname," switched to "));
+ switch(role)
+ {
+ case HAVOCBOT_CTF_ROLE_CARRIER:
+ dprint("carrier");
+ bot.havocbot_role = havocbot_role_ctf_carrier;
+ bot.havocbot_role_timeout = 0;
+ bot.havocbot_cantfindflag = time + 10;
+ break;
+ case HAVOCBOT_CTF_ROLE_DEFENSE:
+ dprint("defense");
+ bot.havocbot_role = havocbot_role_ctf_defense;
+ bot.havocbot_role_timeout = 0;
+ break;
+ case HAVOCBOT_CTF_ROLE_MIDDLE:
+ dprint("middle");
+ bot.havocbot_role = havocbot_role_ctf_middle;
+ bot.havocbot_role_timeout = 0;
+ break;
+ case HAVOCBOT_CTF_ROLE_OFFENSE:
+ dprint("offense");
+ bot.havocbot_role = havocbot_role_ctf_offense;
+ bot.havocbot_role_timeout = 0;
+ break;
+ case HAVOCBOT_CTF_ROLE_RETRIEVER:
dprint("retriever");
- bot.havocbot_previous_role = bot.havocbot_role;
- bot.havocbot_role = havocbot_role_ctf_retriever;
- bot.havocbot_role_timeout = time + 10;
- break;
- case HAVOCBOT_CTF_ROLE_ESCORT:
+ bot.havocbot_previous_role = bot.havocbot_role;
+ bot.havocbot_role = havocbot_role_ctf_retriever;
+ bot.havocbot_role_timeout = time + 10;
+ break;
+ case HAVOCBOT_CTF_ROLE_ESCORT:
dprint("escort");
- bot.havocbot_previous_role = bot.havocbot_role;
- bot.havocbot_role = havocbot_role_ctf_escort;
- bot.havocbot_role_timeout = time + 30;
- break;
- }
- dprint("\n");
-};
-
-void havocbot_role_ctf_carrier()
-{
+ bot.havocbot_previous_role = bot.havocbot_role;
+ bot.havocbot_role = havocbot_role_ctf_escort;
+ bot.havocbot_role_timeout = time + 30;
+ break;
+ }
+ dprint("\n");
+};
+
+void havocbot_role_ctf_carrier()
+{
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried == world)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.bot_strategytime < time)
- {
- self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
-
- navigation_goalrating_start();
- havocbot_goalrating_ctf_ourbase(50000);
-
- if(self.health<100)
- havocbot_goalrating_ctf_carrieritems(1000, self.origin, 1000);
-
- navigation_goalrating_end();
-
- if (self.navigation_hasgoals)
- self.havocbot_cantfindflag = time + 10;
- else if (time > self.havocbot_cantfindflag)
- {
- // Can't navigate to my own base, suicide!
- // TODO: drop it and wander around
- Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
- return;
- }
- }
-};
-
-void havocbot_role_ctf_escort()
-{
- local entity mf, ef;
-
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.flagcarried == world)
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.bot_strategytime < time)
+ {
+ self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+
+ navigation_goalrating_start();
+ havocbot_goalrating_ctf_ourbase(50000);
+
+ if(self.health<100)
+ havocbot_goalrating_ctf_carrieritems(1000, self.origin, 1000);
+
+ navigation_goalrating_end();
+
+ if (self.navigation_hasgoals)
+ self.havocbot_cantfindflag = time + 10;
+ else if (time > self.havocbot_cantfindflag)
+ {
+ // Can't navigate to my own base, suicide!
+ // TODO: drop it and wander around
+ Damage(self, self, self, 100000, DEATH_KILL, self.origin, '0 0 0');
+ return;
+ }
+ }
+};
+
+void havocbot_role_ctf_escort()
+{
+ local entity mf, ef;
+
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
- return;
- }
-
- // If enemy flag is back on the base switch to previous role
- ef = havocbot_ctf_find_enemy_flag(self);
- if(ef.cnt==FLAG_BASE)
- {
- self.havocbot_role = self.havocbot_previous_role;
- self.havocbot_role_timeout = 0;
- return;
- }
-
- // If the flag carrier reached the base switch to defense
- mf = havocbot_ctf_find_flag(self);
- if(mf.cnt!=FLAG_BASE)
- if(vlen(ef.origin - mf.dropped_origin) < 300)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_DEFENSE);
- return;
- }
-
- // Set the role timeout if necessary
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.flagcarried)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+ return;
+ }
+
+ // If enemy flag is back on the base switch to previous role
+ ef = havocbot_ctf_find_enemy_flag(self);
+ if(ef.cnt==FLAG_BASE)
+ {
+ self.havocbot_role = self.havocbot_previous_role;
+ self.havocbot_role_timeout = 0;
+ return;
+ }
+
+ // If the flag carrier reached the base switch to defense
+ mf = havocbot_ctf_find_flag(self);
+ if(mf.cnt!=FLAG_BASE)
+ if(vlen(ef.origin - mf.dropped_origin) < 300)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_DEFENSE);
+ return;
+ }
+
+ // Set the role timeout if necessary
if (!self.havocbot_role_timeout)
- {
+ {
self.havocbot_role_timeout = time + random() * 30 + 60;
- }
-
- // If nothing happened just switch to previous role
- if (time > self.havocbot_role_timeout)
- {
- self.havocbot_role = self.havocbot_previous_role;
- self.havocbot_role_timeout = 0;
- return;
- }
-
- // Chase the flag carrier
- if (self.bot_strategytime < time)
- {
- self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
- navigation_goalrating_start();
- havocbot_goalrating_ctf_enemyflag(30000);
- havocbot_goalrating_ctf_ourstolenflag(40000);
- havocbot_goalrating_items(10000, self.origin, 10000);
- navigation_goalrating_end();
- }
-};
-
-void havocbot_role_ctf_offense()
-{
+ }
+
+ // If nothing happened just switch to previous role
+ if (time > self.havocbot_role_timeout)
+ {
+ self.havocbot_role = self.havocbot_previous_role;
+ self.havocbot_role_timeout = 0;
+ return;
+ }
+
+ // Chase the flag carrier
+ if (self.bot_strategytime < time)
+ {
+ self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+ navigation_goalrating_start();
+ havocbot_goalrating_ctf_enemyflag(30000);
+ havocbot_goalrating_ctf_ourstolenflag(40000);
+ havocbot_goalrating_items(10000, self.origin, 10000);
+ navigation_goalrating_end();
+ }
+};
+
+void havocbot_role_ctf_offense()
+{
local entity mf, ef;
- local vector pos;
-
+ local vector pos;
+
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
- return;
- }
-
- // Check flags
- mf = havocbot_ctf_find_flag(self);
- ef = havocbot_ctf_find_enemy_flag(self);
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+ if (self.flagcarried)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+ return;
+ }
+
+ // Check flags
+ mf = havocbot_ctf_find_flag(self);
+ ef = havocbot_ctf_find_enemy_flag(self);
+
// Own flag stolen
- if(mf.cnt!=FLAG_BASE)
- {
+ if(mf.cnt!=FLAG_BASE)
+ {
if(mf.tag_entity)
pos = mf.tag_entity.origin;
else
pos = mf.origin;
-
+
// Try to get it if closer than the enemy base
- if(vlen(self.origin-ef.dropped_origin)>vlen(self.origin-pos))
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
- return;
- }
- }
+ if(vlen(self.origin-ef.dropped_origin)>vlen(self.origin-pos))
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+ return;
+ }
+ }
// Escort flag carrier
if(ef.cnt!=FLAG_BASE)
@@ -402,66 +402,66 @@
else
pos = ef.origin;
- if(vlen(pos-mf.dropped_origin)>700)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_ESCORT);
- return;
- }
+ if(vlen(pos-mf.dropped_origin)>700)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_ESCORT);
+ return;
+ }
}
-
- // About to fail, switch to middlefield
- if(self.health<50)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_MIDDLE);
- return;
- }
-
- // Set the role timeout if necessary
- if (!self.havocbot_role_timeout)
- self.havocbot_role_timeout = time + 120;
-
- if (time > self.havocbot_role_timeout)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.bot_strategytime < time)
- {
- self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
- navigation_goalrating_start();
- havocbot_goalrating_ctf_ourstolenflag(50000);
- havocbot_goalrating_ctf_enemybase(20000);
+
+ // About to fail, switch to middlefield
+ if(self.health<50)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_MIDDLE);
+ return;
+ }
+
+ // Set the role timeout if necessary
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + 120;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.bot_strategytime < time)
+ {
+ self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+ navigation_goalrating_start();
+ havocbot_goalrating_ctf_ourstolenflag(50000);
+ havocbot_goalrating_ctf_enemybase(20000);
havocbot_goalrating_items(5000, self.origin, 1000);
- havocbot_goalrating_items(1000, self.origin, 10000);
- navigation_goalrating_end();
- }
-};
-
-// Retriever (temporary role):
-void havocbot_role_ctf_retriever()
-{
- local entity mf;
-
+ havocbot_goalrating_items(1000, self.origin, 10000);
+ navigation_goalrating_end();
+ }
+};
+
+// Retriever (temporary role):
+void havocbot_role_ctf_retriever()
+{
+ local entity mf;
+
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
- return;
- }
-
- // If flag is back on the base switch to previous role
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.flagcarried)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+ return;
+ }
+
+ // If flag is back on the base switch to previous role
mf = havocbot_ctf_find_flag(self);
- if(mf.cnt==FLAG_BASE)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
+ if(mf.cnt==FLAG_BASE)
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
if (!self.havocbot_role_timeout)
self.havocbot_role_timeout = time + 20;
@@ -471,114 +471,114 @@
havocbot_ctf_reset_role(self);
return;
}
-
- if (self.bot_strategytime < time)
- {
- local float radius;
- radius = 10000;
-
+
+ if (self.bot_strategytime < time)
+ {
+ local float radius;
+ radius = 10000;
+
self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
navigation_goalrating_start();
havocbot_goalrating_ctf_ourstolenflag(50000);
havocbot_goalrating_ctf_droppedflags(40000, self.origin, radius);
havocbot_goalrating_ctf_enemybase(30000);
- havocbot_goalrating_items(500, self.origin, radius);
+ havocbot_goalrating_items(500, self.origin, radius);
navigation_goalrating_end();
- }
-};
-
-void havocbot_role_ctf_middle()
-{
- local entity mf;
-
+ }
+};
+
+void havocbot_role_ctf_middle()
+{
+ local entity mf;
+
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
- return;
- }
-
- mf = havocbot_ctf_find_flag(self);
- if(mf.cnt!=FLAG_BASE)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
- return;
- }
-
- if (!self.havocbot_role_timeout)
- self.havocbot_role_timeout = time + 10;
-
- if (time > self.havocbot_role_timeout)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.bot_strategytime < time)
{
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.flagcarried)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+ return;
+ }
+
+ mf = havocbot_ctf_find_flag(self);
+ if(mf.cnt!=FLAG_BASE)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+ return;
+ }
+
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + 10;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.bot_strategytime < time)
+ {
local vector org;
org = havocbot_ctf_middlepoint;
org_z = self.origin_z;
-
- self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
- navigation_goalrating_start();
- havocbot_goalrating_ctf_ourstolenflag(50000);
- havocbot_goalrating_ctf_droppedflags(30000, self.origin, 10000);
- havocbot_goalrating_enemyplayers(10000, org, havocbot_ctf_middlepoint_radius * 0.5);
+
+ self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+ navigation_goalrating_start();
+ havocbot_goalrating_ctf_ourstolenflag(50000);
+ havocbot_goalrating_ctf_droppedflags(30000, self.origin, 10000);
+ havocbot_goalrating_enemyplayers(10000, org, havocbot_ctf_middlepoint_radius * 0.5);
havocbot_goalrating_items(5000, org, havocbot_ctf_middlepoint_radius * 0.5);
havocbot_goalrating_items(2500, self.origin, 10000);
havocbot_goalrating_ctf_enemybase(2500);
- navigation_goalrating_end();
- }
-};
-
-void havocbot_role_ctf_defense()
-{
- local entity mf;
-
+ navigation_goalrating_end();
+ }
+};
+
+void havocbot_role_ctf_defense()
+{
+ local entity mf;
+
if(self.deadflag != DEAD_NO)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
-
- if (self.flagcarried)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
- return;
- }
-
- // If own flag was captured
- mf = havocbot_ctf_find_flag(self);
- if(mf.cnt!=FLAG_BASE)
- {
- havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
- return;
- }
-
- if (!self.havocbot_role_timeout)
- self.havocbot_role_timeout = time + 30;
-
- if (time > self.havocbot_role_timeout)
- {
- havocbot_ctf_reset_role(self);
- return;
- }
- if (self.bot_strategytime < time)
- {
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+
+ if (self.flagcarried)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_CARRIER);
+ return;
+ }
+
+ // If own flag was captured
+ mf = havocbot_ctf_find_flag(self);
+ if(mf.cnt!=FLAG_BASE)
+ {
+ havocbot_role_ctf_setrole(self, HAVOCBOT_CTF_ROLE_RETRIEVER);
+ return;
+ }
+
+ if (!self.havocbot_role_timeout)
+ self.havocbot_role_timeout = time + 30;
+
+ if (time > self.havocbot_role_timeout)
+ {
+ havocbot_ctf_reset_role(self);
+ return;
+ }
+ if (self.bot_strategytime < time)
+ {
local float radius;
- local vector org;
-
+ local vector org;
+
org = mf.dropped_origin;
- radius = havocbot_ctf_middlepoint_radius;
-
- self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
+ radius = havocbot_ctf_middlepoint_radius;
+
+ self.bot_strategytime = time + cvar("bot_ai_strategyinterval");
navigation_goalrating_start();
// if enemies are closer to our base, go there
@@ -603,40 +603,40 @@
if(vlen(org - self.origin)>1000)
if(checkpvs(self.origin,closestplayer)||random()<0.5)
havocbot_goalrating_ctf_ourbase(30000);
-
- havocbot_goalrating_ctf_ourstolenflag(20000);
- havocbot_goalrating_ctf_droppedflags(20000, org, radius);
+
+ havocbot_goalrating_ctf_ourstolenflag(20000);
+ havocbot_goalrating_ctf_droppedflags(20000, org, radius);
havocbot_goalrating_enemyplayers(15000, org, radius);
havocbot_goalrating_items(10000, org, radius);
- havocbot_goalrating_items(5000, self.origin, 10000);
- navigation_goalrating_end();
- }
-};
-
-void havocbot_calculate_middlepoint()
-{
- entity f;
- vector p1, p2;
-
- f = ctf_worldflaglist;
- while (f)
- {
- if(p1)
- p2 = f.origin;
- else
- p1 = f.origin;
+ havocbot_goalrating_items(5000, self.origin, 10000);
+ navigation_goalrating_end();
+ }
+};
- f = f.ctf_worldflagnext;
- }
+void havocbot_calculate_middlepoint()
+{
+ entity f;
+ vector p1, p2;
+
+ f = ctf_worldflaglist;
+ while (f)
+ {
+ if(p1)
+ p2 = f.origin;
+ else
+ p1 = f.origin;
+
+ f = f.ctf_worldflagnext;
+ }
havocbot_ctf_middlepoint = p1 + ((p2-p1) * 0.5);
- havocbot_ctf_middlepoint_radius = vlen(p2-p1) * 0.5;
-};
-
-void havocbot_ctf_reset_role(entity bot)
-{
- local float cdefense, cmiddle, coffense;
+ havocbot_ctf_middlepoint_radius = vlen(p2-p1) * 0.5;
+};
+
+void havocbot_ctf_reset_role(entity bot)
+{
+ local float cdefense, cmiddle, coffense;
local entity mf, ef, head;
- local float c;
+ local float c;
if(bot.deadflag != DEAD_NO)
return;
@@ -644,30 +644,30 @@
if(vlen(havocbot_ctf_middlepoint)==0)
havocbot_calculate_middlepoint();
- // Check ctf flags
+ // Check ctf flags
if (bot.flagcarried)
{
havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_CARRIER);
return;
}
- mf = havocbot_ctf_find_flag(bot);
- ef = havocbot_ctf_find_enemy_flag(bot);
-
- // Retrieve stolen flag
- if(mf.cnt!=FLAG_BASE)
- {
- havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_RETRIEVER);
- return;
- }
-
- // If enemy flag is taken go to the middle to intercept pursuers
- if(ef.cnt!=FLAG_BASE)
- {
- havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
- return;
+ mf = havocbot_ctf_find_flag(bot);
+ ef = havocbot_ctf_find_enemy_flag(bot);
+
+ // Retrieve stolen flag
+ if(mf.cnt!=FLAG_BASE)
+ {
+ havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_RETRIEVER);
+ return;
}
+ // If enemy flag is taken go to the middle to intercept pursuers
+ if(ef.cnt!=FLAG_BASE)
+ {
+ havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
+ return;
+ }
+
// if there is only me on the team switch to offense
c = 0;
FOR_EACH_PLAYER(head)
@@ -679,26 +679,26 @@
havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
return;
}
-
- // Evaluate best position to take
- // Count mates on middle position
- cmiddle = havocbot_ctf_teamcount(bot, havocbot_ctf_middlepoint, havocbot_ctf_middlepoint_radius * 0.5);
-
- // Count mates on defense position
- cdefense = havocbot_ctf_teamcount(bot, mf.dropped_origin, havocbot_ctf_middlepoint_radius * 0.5);
-
- // Count mates on offense position
- coffense = havocbot_ctf_teamcount(bot, ef.dropped_origin, havocbot_ctf_middlepoint_radius);
-
- if(cdefense<=coffense)
- havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_DEFENSE);
- else if(coffense<=cmiddle)
- havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
- else
- havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
-};
-
-void havocbot_chooserole_ctf()
-{
- havocbot_ctf_reset_role(self);
+
+ // Evaluate best position to take
+ // Count mates on middle position
+ cmiddle = havocbot_ctf_teamcount(bot, havocbot_ctf_middlepoint, havocbot_ctf_middlepoint_radius * 0.5);
+
+ // Count mates on defense position
+ cdefense = havocbot_ctf_teamcount(bot, mf.dropped_origin, havocbot_ctf_middlepoint_radius * 0.5);
+
+ // Count mates on offense position
+ coffense = havocbot_ctf_teamcount(bot, ef.dropped_origin, havocbot_ctf_middlepoint_radius);
+
+ if(cdefense<=coffense)
+ havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_DEFENSE);
+ else if(coffense<=cmiddle)
+ havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_OFFENSE);
+ else
+ havocbot_role_ctf_setrole(bot, HAVOCBOT_CTF_ROLE_MIDDLE);
};
+
+void havocbot_chooserole_ctf()
+{
+ havocbot_ctf_reset_role(self);
+};
Property changes on: trunk/data/qcsrc/server/havocbot_ctf.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/server/tturrets/system/system_damage.qc
===================================================================
--- trunk/data/qcsrc/server/tturrets/system/system_damage.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/server/tturrets/system/system_damage.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1,343 +1,343 @@
-/*
-* Trow a turret gib
-*/
-void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
- self.velocity += vforce;
-}
-
-void turret_trowgib(
- vector v_from, vector v_to, vector v_colormod,
- string smodel,
- float f_lifetime, float f_fadetime, float b_burn)
-{
- local entity gib;
- local entity burn;
-
- gib = spawn();
-
- gib.classname = "turret_gib";
- setmodel(gib,smodel);
- setorigin(gib,v_from);
- SUB_SetFade(gib,time + f_lifetime,2);
-
- gib.solid = SOLID_BBOX;
-
- gib.movetype = MOVETYPE_BOUNCE;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.colormod = v_colormod;
- gib.velocity = v_to;
-
- if (b_burn)
- {
- burn = spawn();
- burn.effects = EF_LOWPRECISION;//|EF_FLAME;
- setattachment(burn,gib,"");
- setorigin(burn,(gib.mins + gib.maxs) * 0.5);
- SUB_SetFade(burn,time + (f_lifetime * 0.5) ,2);
- }
-}
-
-void turret_gib_boom()
-{
- entity gib;
- float i;
- string s;
-
- for (i = 1; i < 5; i = i +1)
- {
- gib = spawn();
- gib.classname = "turret_gib";
-
- s = strcat("models/turrets/head-gib",ftos(i));
- s = strcat(s,".md3");
- // bprint("s:",s,"\n");
- setmodel(gib,s);
-
- setorigin(gib,self.origin);
-
- SUB_SetFade(gib,time + 5,2);
-
- gib.solid = SOLID_BBOX;
-
- gib.movetype = MOVETYPE_BOUNCE;
- gib.gravity = 0.5;
- gib.damageforcescale = 2;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.velocity = self.velocity + (randomvec() * 700);
- gib.avelocity = randomvec() * 64;
- }
-
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, self.origin_x);
- WriteCoord (MSG_BROADCAST, self.origin_y);
- WriteCoord (MSG_BROADCAST, self.origin_z);
-
- remove(self);
-}
-
-void turret_trowgib2(
- vector v_from, vector v_to, vector v_colormod,
- entity e_mimic, float boomtime)
-{
- entity gib;
-
- gib = spawn();
-
- gib.classname = "turret_gib";
- setmodel(gib,e_mimic.model);
- setorigin(gib,v_from);
-
- gib.solid = SOLID_BBOX;
-
- gib.movetype = MOVETYPE_BOUNCE;
- gib.gravity = 0.75;
- gib.damageforcescale = 2;
- gib.takedamage = DAMAGE_YES;
- gib.event_damage = turret_gib_damage;
- gib.health = -1;
- gib.effects = EF_LOWPRECISION;
- gib.flags = FL_NOTARGET;
- gib.colormod = v_colormod;
- gib.velocity = v_to;
- gib.avelocity = randomvec() * 32;
- gib.think = turret_gib_boom;
- gib.nextthink = boomtime;
- //gib.effects = EF_FLAME;
-
-
-}
-/*
-* Spawn a boom, trow fake bits arround
-* and hide the real ones.
-*/
-void turret_stdproc_die()
-{
- vector org2;
- vector t_dir;
-
- self.deadflag = DEAD_DEAD;
- self.tur_head.deadflag = self.deadflag;
-
- sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = self.origin + '0 0 40';
-
-// Explotion grafix
- WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
- WriteByte (MSG_BROADCAST, 78);
- WriteCoord (MSG_BROADCAST, org2_x);
- WriteCoord (MSG_BROADCAST, org2_y);
- WriteCoord (MSG_BROADCAST, org2_z);
-
-// Unsolidify and hide real parts
- self.solid = SOLID_NOT;
- self.tur_head.solid = self.solid;
-
- self.alpha = -1;
- self.tur_head.alpha = self.alpha;
+/*
+* Trow a turret gib
+*/
+void turret_gib_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+ self.velocity += vforce;
+}
+
+void turret_trowgib(
+ vector v_from, vector v_to, vector v_colormod,
+ string smodel,
+ float f_lifetime, float f_fadetime, float b_burn)
+{
+ local entity gib;
+ local entity burn;
+
+ gib = spawn();
+
+ gib.classname = "turret_gib";
+ setmodel(gib,smodel);
+ setorigin(gib,v_from);
+ SUB_SetFade(gib,time + f_lifetime,2);
+
+ gib.solid = SOLID_BBOX;
+
+ gib.movetype = MOVETYPE_BOUNCE;
+ gib.takedamage = DAMAGE_YES;
+ gib.event_damage = turret_gib_damage;
+ gib.health = -1;
+ gib.effects = EF_LOWPRECISION;
+ gib.flags = FL_NOTARGET;
+ gib.colormod = v_colormod;
+ gib.velocity = v_to;
+
+ if (b_burn)
+ {
+ burn = spawn();
+ burn.effects = EF_LOWPRECISION;//|EF_FLAME;
+ setattachment(burn,gib,"");
+ setorigin(burn,(gib.mins + gib.maxs) * 0.5);
+ SUB_SetFade(burn,time + (f_lifetime * 0.5) ,2);
+ }
+}
+
+void turret_gib_boom()
+{
+ entity gib;
+ float i;
+ string s;
+
+ for (i = 1; i < 5; i = i +1)
+ {
+ gib = spawn();
+ gib.classname = "turret_gib";
+
+ s = strcat("models/turrets/head-gib",ftos(i));
+ s = strcat(s,".md3");
+ // bprint("s:",s,"\n");
+ setmodel(gib,s);
+
+ setorigin(gib,self.origin);
+
+ SUB_SetFade(gib,time + 5,2);
+
+ gib.solid = SOLID_BBOX;
+
+ gib.movetype = MOVETYPE_BOUNCE;
+ gib.gravity = 0.5;
+ gib.damageforcescale = 2;
+ gib.takedamage = DAMAGE_YES;
+ gib.event_damage = turret_gib_damage;
+ gib.health = -1;
+ gib.effects = EF_LOWPRECISION;
+ gib.flags = FL_NOTARGET;
+ gib.velocity = self.velocity + (randomvec() * 700);
+ gib.avelocity = randomvec() * 64;
+ }
+
+ WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+ WriteByte (MSG_BROADCAST, 78);
+ WriteCoord (MSG_BROADCAST, self.origin_x);
+ WriteCoord (MSG_BROADCAST, self.origin_y);
+ WriteCoord (MSG_BROADCAST, self.origin_z);
+
+ remove(self);
+}
+
+void turret_trowgib2(
+ vector v_from, vector v_to, vector v_colormod,
+ entity e_mimic, float boomtime)
+{
+ entity gib;
+
+ gib = spawn();
+
+ gib.classname = "turret_gib";
+ setmodel(gib,e_mimic.model);
+ setorigin(gib,v_from);
+
+ gib.solid = SOLID_BBOX;
+
+ gib.movetype = MOVETYPE_BOUNCE;
+ gib.gravity = 0.75;
+ gib.damageforcescale = 2;
+ gib.takedamage = DAMAGE_YES;
+ gib.event_damage = turret_gib_damage;
+ gib.health = -1;
+ gib.effects = EF_LOWPRECISION;
+ gib.flags = FL_NOTARGET;
+ gib.colormod = v_colormod;
+ gib.velocity = v_to;
+ gib.avelocity = randomvec() * 32;
+ gib.think = turret_gib_boom;
+ gib.nextthink = boomtime;
+ //gib.effects = EF_FLAME;
+
+
+}
+/*
+* Spawn a boom, trow fake bits arround
+* and hide the real ones.
+*/
+void turret_stdproc_die()
+{
+ vector org2;
+ vector t_dir;
+
+ self.deadflag = DEAD_DEAD;
+ self.tur_head.deadflag = self.deadflag;
+
+ sound (self, CHAN_PLAYER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ org2 = self.origin + '0 0 40';
+
+// Explotion grafix
+ WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
+ WriteByte (MSG_BROADCAST, 78);
+ WriteCoord (MSG_BROADCAST, org2_x);
+ WriteCoord (MSG_BROADCAST, org2_y);
+ WriteCoord (MSG_BROADCAST, org2_z);
+
+// Unsolidify and hide real parts
+ self.solid = SOLID_NOT;
+ self.tur_head.solid = self.solid;
+
+ self.alpha = -1;
+ self.tur_head.alpha = self.alpha;
self.customizeentityforclient = SUB_False;
self.tur_head.customizeentityforclient = SUB_False;
-
- self.event_damage = SUB_Null;
- self.tur_head.event_damage = SUB_Null;
- self.takedamage = DAMAGE_NO;
- self.tur_head.takedamage = self.takedamage;
-
- self.effects = 0;
- self.tur_head.effects = self.effects;
- self.health = 0;
-
-// Trow fake parts arround
- // base
- if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
- {
- makevectors(self.angles);
- if (random() > 0.5)
- {
- turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
- t_dir = (v_up * 700) + (randomvec() * 300);
- turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
- t_dir = (v_up * 700) + (randomvec() * 300);
- turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
- }
- else
- {
- turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
- }
-
- // Blow the top part up into the air
- turret_trowgib2( self.origin + (v_up * 50),
- v_up * 150 + randomvec() * 50,
- '0.2 0.2 0.2',
- self.tur_head,time + 0.5 + (random() * 0.5));
- }
-
-// Go boom
- //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
-
- if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
- {
- if (self.turret_diehook)
- self.turret_diehook();
-
- remove(self.tur_head);
- remove(self);
- }
- else
- {
- // Setup respawn
- self.nextthink = time + self.respawntime;
- //self.think = self.turret_spawnfunc;
- self.think = turret_stdproc_respawn;
- if (self.turret_diehook)
- self.turret_diehook();
- }
-
-}
-
-void turret_stdproc_respawn()
-{
- // Make sure all parts belong to the same team since
- // this function doubles as "teamchange" function.
-
- self.tur_head.team = self.team;
-
- /*
- COLOR_TEAM1 = 4; // red
- COLOR_TEAM2 = 13; // blue
- COLOR_TEAM3 = 12; // yellow
- COLOR_TEAM4 = 9; // pink
- */
-
- self.colormod = '0 0 0';
-
- switch(self.team)
- {
- case COLOR_TEAM1: // Red
- self.colormod = '1.4 0.8 0.8';
- break;
-
- case COLOR_TEAM2: // Blue
- self.colormod = '0.8 0.8 1.4';
- break;
-
- case COLOR_TEAM3: // Yellow
- self.colormod = '1.4 1.4 0.6';
- break;
-
- case COLOR_TEAM4: // Pink
- self.colormod = '1.4 0.6 1.4';
- break;
- }
-
- self.deadflag = DEAD_NO;
- self.tur_head.deadflag = self.deadflag;
- self.effects = 0;
- self.tur_head.effects = self.effects;
-
- self.solid = SOLID_BBOX;
- self.tur_head.solid = self.solid;
-
- self.alpha = 1;
+
+ self.event_damage = SUB_Null;
+ self.tur_head.event_damage = SUB_Null;
+ self.takedamage = DAMAGE_NO;
+ self.tur_head.takedamage = self.takedamage;
+
+ self.effects = 0;
+ self.tur_head.effects = self.effects;
+ self.health = 0;
+
+// Trow fake parts arround
+ // base
+ if not(self.damage_flags & TFL_DMG_DEATH_NOGIBS)
+ {
+ makevectors(self.angles);
+ if (random() > 0.5)
+ {
+ turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib2.md3",min(self.respawntime,20),1,1);
+ t_dir = (v_up * 700) + (randomvec() * 300);
+ turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib3.md3",min(self.respawntime,10),1,1);
+ t_dir = (v_up * 700) + (randomvec() * 300);
+ turret_trowgib(self.origin, t_dir,'1 1 1',"models/turrets/base-gib4.md3",min(self.respawntime,10),1,1);
+ }
+ else
+ {
+ turret_trowgib(self.origin, '0 0 0','1 1 1',"models/turrets/base-gib1.md3",min(self.respawntime,20),1,1);
+ }
+
+ // Blow the top part up into the air
+ turret_trowgib2( self.origin + (v_up * 50),
+ v_up * 150 + randomvec() * 50,
+ '0.2 0.2 0.2',
+ self.tur_head,time + 0.5 + (random() * 0.5));
+ }
+
+// Go boom
+ //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
+
+ if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+ {
+ if (self.turret_diehook)
+ self.turret_diehook();
+
+ remove(self.tur_head);
+ remove(self);
+ }
+ else
+ {
+ // Setup respawn
+ self.nextthink = time + self.respawntime;
+ //self.think = self.turret_spawnfunc;
+ self.think = turret_stdproc_respawn;
+ if (self.turret_diehook)
+ self.turret_diehook();
+ }
+
+}
+
+void turret_stdproc_respawn()
+{
+ // Make sure all parts belong to the same team since
+ // this function doubles as "teamchange" function.
+
+ self.tur_head.team = self.team;
+
+ /*
+ COLOR_TEAM1 = 4; // red
+ COLOR_TEAM2 = 13; // blue
+ COLOR_TEAM3 = 12; // yellow
+ COLOR_TEAM4 = 9; // pink
+ */
+
+ self.colormod = '0 0 0';
+
+ switch(self.team)
+ {
+ case COLOR_TEAM1: // Red
+ self.colormod = '1.4 0.8 0.8';
+ break;
+
+ case COLOR_TEAM2: // Blue
+ self.colormod = '0.8 0.8 1.4';
+ break;
+
+ case COLOR_TEAM3: // Yellow
+ self.colormod = '1.4 1.4 0.6';
+ break;
+
+ case COLOR_TEAM4: // Pink
+ self.colormod = '1.4 0.6 1.4';
+ break;
+ }
+
+ self.deadflag = DEAD_NO;
+ self.tur_head.deadflag = self.deadflag;
+ self.effects = 0;
+ self.tur_head.effects = self.effects;
+
+ self.solid = SOLID_BBOX;
+ self.tur_head.solid = self.solid;
+
+ self.alpha = 1;
self.tur_head.alpha = self.alpha;
self.customizeentityforclient = SUB_True;
self.tur_head.customizeentityforclient = SUB_True;
-
-
- self.takedamage = DAMAGE_AIM;
- self.tur_head.takedamage = self.takedamage;
-
- self.event_damage = turret_stdproc_damage;
- self.tur_head.event_damage = self.event_damage;
-
- self.avelocity = '0 0 0';
- self.tur_head.avelocity = self.avelocity;
- self.tur_head.angles = self.idle_aim;
- self.health = self.tur_health;
- self.tur_head.health = self.tur_health;
-
- self.enemy = world;
- self.volly_counter = self.shot_volly;
- self.ammo = self.ammo_max;
-
- self.nextthink = time + self.ticrate;
- self.think = turret_think;
-
- if (self.turret_respawnhook)
- self.turret_respawnhook();
-
-}
-
-/*
-* Standard damage proc.
-*/
-void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
-{
- entity baseent;
-
- if (self.owner)
- baseent = self.owner;
- else
- baseent = self;
-
- // Enougth allready!
- if (self.health <= 0)
- return;
-
- // Inactive turrets take no damage. (hm..)
- if not (baseent.tur_active)
- return;
-
- if (teamplay != 0)
- if (self.team == attacker.team)
- {
- // This does not happen anymore. Re-enable if you fix that.
- //if(attacker.flags & FL_CLIENT)
- if(clienttype(attacker) == CLIENTTYPE_REAL)
- sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
-
- if(cvar("g_friendlyfire"))
- damage = damage * cvar("g_friendlyfire");
- else
- return;
- }
-
- self.health = self.health - damage;
-
- // thorw head slightly off aim when hit?
- if (self.classname == "turret_head")
- if (baseent.damage_flags & TFL_DMG_HEADSHAKE)
- {
- //baseent.tur_aimoff_x += (random() * damage);
- //baseent.tur_aimoff_y += ((random()*0.75) * damage);
- self.angles_x = self.angles_x + (-0.5 + random()) * damage;
- self.angles_y = self.angles_y + (-0.5 + random()) * damage;
- }
-
- if (baseent.turrcaps_flags & TFL_TURRCAPS_MOVE)
- baseent.velocity = baseent.velocity + vforce;
-
- // FIXME: Better damage feedback
- // Start burning when we have 10% or less health left
- //if (self.health < (self.tur_health * 0.1))
- // self.effects = EF_FLAME;
-
- if (self.health <= 0)
- {
- baseent.event_damage = SUB_Null;
- baseent.tur_head.event_damage = SUB_Null;
- baseent.takedamage = DAMAGE_NO;
- baseent.tur_head.takedamage = baseent.takedamage;
- baseent.nextthink = time;
- baseent.think = turret_stdproc_die;
- }
-}
+
+
+ self.takedamage = DAMAGE_AIM;
+ self.tur_head.takedamage = self.takedamage;
+
+ self.event_damage = turret_stdproc_damage;
+ self.tur_head.event_damage = self.event_damage;
+
+ self.avelocity = '0 0 0';
+ self.tur_head.avelocity = self.avelocity;
+ self.tur_head.angles = self.idle_aim;
+ self.health = self.tur_health;
+ self.tur_head.health = self.tur_health;
+
+ self.enemy = world;
+ self.volly_counter = self.shot_volly;
+ self.ammo = self.ammo_max;
+
+ self.nextthink = time + self.ticrate;
+ self.think = turret_think;
+
+ if (self.turret_respawnhook)
+ self.turret_respawnhook();
+
+}
+
+/*
+* Standard damage proc.
+*/
+void turret_stdproc_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+ entity baseent;
+
+ if (self.owner)
+ baseent = self.owner;
+ else
+ baseent = self;
+
+ // Enougth allready!
+ if (self.health <= 0)
+ return;
+
+ // Inactive turrets take no damage. (hm..)
+ if not (baseent.tur_active)
+ return;
+
+ if (teamplay != 0)
+ if (self.team == attacker.team)
+ {
+ // This does not happen anymore. Re-enable if you fix that.
+ //if(attacker.flags & FL_CLIENT)
+ if(clienttype(attacker) == CLIENTTYPE_REAL)
+ sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
+
+ if(cvar("g_friendlyfire"))
+ damage = damage * cvar("g_friendlyfire");
+ else
+ return;
+ }
+
+ self.health = self.health - damage;
+
+ // thorw head slightly off aim when hit?
+ if (self.classname == "turret_head")
+ if (baseent.damage_flags & TFL_DMG_HEADSHAKE)
+ {
+ //baseent.tur_aimoff_x += (random() * damage);
+ //baseent.tur_aimoff_y += ((random()*0.75) * damage);
+ self.angles_x = self.angles_x + (-0.5 + random()) * damage;
+ self.angles_y = self.angles_y + (-0.5 + random()) * damage;
+ }
+
+ if (baseent.turrcaps_flags & TFL_TURRCAPS_MOVE)
+ baseent.velocity = baseent.velocity + vforce;
+
+ // FIXME: Better damage feedback
+ // Start burning when we have 10% or less health left
+ //if (self.health < (self.tur_health * 0.1))
+ // self.effects = EF_FLAME;
+
+ if (self.health <= 0)
+ {
+ baseent.event_damage = SUB_Null;
+ baseent.tur_head.event_damage = SUB_Null;
+ baseent.takedamage = DAMAGE_NO;
+ baseent.tur_head.takedamage = baseent.takedamage;
+ baseent.nextthink = time;
+ baseent.think = turret_stdproc_die;
+ }
+}
Property changes on: trunk/data/qcsrc/server/tturrets/system/system_damage.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/server/vehicles/racer.qc
===================================================================
--- trunk/data/qcsrc/server/vehicles/racer.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/server/vehicles/racer.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1,26 +1,26 @@
-#define RACER_MIN '-40 -40 0'
-#define RACER_MAX '40 40 44'
-
-void racer_exit(float eject);
-void racer_enter();
-
+#define RACER_MIN '-40 -40 0'
+#define RACER_MAX '40 40 44'
+
+void racer_exit(float eject);
+void racer_enter();
+
float jetfromtag_power;
float jetfromtag_normpower;
-float jetfromtag_nosolid;
+float jetfromtag_nosolid;
vector jetfromtag_origin;
-
-vector jetfromtag(string tagname,float jet_length,float air_power,float solid_power)
-{
+
+vector jetfromtag(string tagname,float jet_length,float air_power,float solid_power)
+{
vector force_dir;
- float air_frac, solid_frac, air_pwr, solid_pwr;
-
+ float air_frac, solid_frac, air_pwr, solid_pwr;
+
jetfromtag_origin = gettaginfo(self,gettagindex(self,tagname));
v_forward = normalize(v_forward);
-
- force_dir = jetfromtag_origin - v_forward * jet_length;
- traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
-
- solid_frac = 1 - trace_fraction;
+
+ force_dir = jetfromtag_origin - v_forward * jet_length;
+ traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
+
+ solid_frac = 1 - trace_fraction;
air_frac = trace_fraction;
if(solid_frac < 0.1)
@@ -32,39 +32,39 @@
jetfromtag_power = solid_pwr + air_pwr;
jetfromtag_normpower = jetfromtag_power / (air_power+solid_power);
if(trace_fraction == 1)
- return v_forward;
- else
- return v_forward * (jetfromtag_power + cvar("g_vehicle_racer_power_min"));
-}
-
-void racer_align4point(float spring_length,float spring_up,float blendrate)
-{
+ return v_forward;
+ else
+ return v_forward * (jetfromtag_power + cvar("g_vehicle_racer_power_min"));
+}
+
+void racer_align4point(float spring_length,float spring_up,float blendrate)
+{
vector fl_org,fl_force,fr_org,fr_force,bl_org,bl_force,br_org,br_force;
- vector push_vector,align;
- float fl_push, fr_push, bl_push, br_push;
+ vector push_vector,align;
+ float fl_push, fr_push, bl_push, br_push;
- jetfromtag_nosolid = 0;
+ jetfromtag_nosolid = 0;
- fr_force = jetfromtag("tag_engine_fr",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
+ fr_force = jetfromtag("tag_engine_fr",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
fr_org = jetfromtag_origin; fr_push = jetfromtag_normpower;
-
+
fl_force = jetfromtag("tag_engine_fl",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
fl_org = jetfromtag_origin; fl_push = jetfromtag_normpower;
br_force = jetfromtag("tag_engine_br",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
br_org = jetfromtag_origin; br_push = jetfromtag_normpower;
-
+
bl_force = jetfromtag("tag_engine_bl",spring_length,cvar("g_vehicle_racer_power_air"), cvar("g_vehicle_racer_power_solid"));
bl_org = jetfromtag_origin; bl_push = jetfromtag_normpower;
push_vector = fr_force + fl_force + br_force + bl_force;
- align = align;
-
+ align = align;
+
align_x = (fl_push - bl_push);
align_x += (fr_push - br_push);
align_x *= 360;
-
+
align_z = (fl_push - fr_push);
align_z += (bl_push - br_push);
align_z *= 360;
@@ -76,354 +76,354 @@
self.angles_z += align_z * frametime;
self.velocity = self.velocity + (push_vector * frametime);
- self.velocity_z -= sv_gravity * frametime;
-}
-
-void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
- self.velocity += force;
-}
-
-float racer_pplug()
-{
- entity player,racer;
- float ftmp,ftmp2;
-
-
- player = self;
- racer = self.vehicle;
- player.fixangle = FALSE;
-
- player.BUTTON_ZOOM = 0;
- player.BUTTON_CROUCH = 0;
-
- self = racer;
-
- if(player.BUTTON_USE)
- {
- self = racer;
- racer_exit(0);
- self = player;
- return 0;
- }
-
- racer.angles_x *= -1;
- makevectors(racer.angles);
- racer.angles_x *= -1;
-
- // Turn Body
- ftmp = cvar("g_vehicle_racer_turnspeed") / server_fps;
- ftmp2 = ftmp * -1;
-
- ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
-
- {
- racer.angles_y = safeangle(racer.angles_y + ftmp);
- if(player.BUTTON_JUMP)
- {
- player.BUTTON_JUMP = 0;
- racer.velocity = racer.velocity + v_forward * 250 + v_up * 600;
- }
- else
- {
- if(vlen(player.movement) == 0)
- {
- self = racer;
- ftmp = self.velocity_z;
- self.velocity = self.velocity - self.velocity * cvar("g_vehicle_racer_speed_stop");
- self.velocity_z = ftmp;
- }
- else
- {
-
- if(player.movement_x != 0)
- {
- if(player.movement_x > 0)
- player.movement_x = 1;
- else if(player.movement_x < 0)
- player.movement_x = -1;
- }
-
- if(player.movement_y != 0)
- {
- if(player.movement_y < 0)
- player.movement_y = -1;
- else if(player.movement_y > 0)
- player.movement_y = 1;
- }
-
- self = racer;
- self.velocity = self.velocity + ((v_right * player.movement_y) * cvar("g_vehicle_racer_speed_strafe")) * frametime;
- self.velocity = self.velocity + ((v_forward * player.movement_x) * cvar("g_vehicle_racer_speed_forward")) * frametime;
- }
- }
- self = racer;
+ self.velocity_z -= sv_gravity * frametime;
+}
+
+void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ self.velocity += force;
+}
+
+float racer_pplug()
+{
+ entity player,racer;
+ float ftmp,ftmp2;
+
+
+ player = self;
+ racer = self.vehicle;
+ player.fixangle = FALSE;
+
+ player.BUTTON_ZOOM = 0;
+ player.BUTTON_CROUCH = 0;
+
+ self = racer;
+
+ if(player.BUTTON_USE)
+ {
+ self = racer;
+ racer_exit(0);
+ self = player;
+ return 0;
}
-
- vector df;
-
- self = racer;
+ racer.angles_x *= -1;
+ makevectors(racer.angles);
+ racer.angles_x *= -1;
+
+ // Turn Body
+ ftmp = cvar("g_vehicle_racer_turnspeed") / server_fps;
+ ftmp2 = ftmp * -1;
+
+ ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
+
+ {
+ racer.angles_y = safeangle(racer.angles_y + ftmp);
+ if(player.BUTTON_JUMP)
+ {
+ player.BUTTON_JUMP = 0;
+ racer.velocity = racer.velocity + v_forward * 250 + v_up * 600;
+ }
+ else
+ {
+ if(vlen(player.movement) == 0)
+ {
+ self = racer;
+ ftmp = self.velocity_z;
+ self.velocity = self.velocity - self.velocity * cvar("g_vehicle_racer_speed_stop");
+ self.velocity_z = ftmp;
+ }
+ else
+ {
+
+ if(player.movement_x != 0)
+ {
+ if(player.movement_x > 0)
+ player.movement_x = 1;
+ else if(player.movement_x < 0)
+ player.movement_x = -1;
+ }
+
+ if(player.movement_y != 0)
+ {
+ if(player.movement_y < 0)
+ player.movement_y = -1;
+ else if(player.movement_y > 0)
+ player.movement_y = 1;
+ }
+
+ self = racer;
+ self.velocity = self.velocity + ((v_right * player.movement_y) * cvar("g_vehicle_racer_speed_strafe")) * frametime;
+ self.velocity = self.velocity + ((v_forward * player.movement_x) * cvar("g_vehicle_racer_speed_forward")) * frametime;
+ }
+ }
+ self = racer;
+ }
+
+ vector df;
+
+ self = racer;
+
df = vlen(self.velocity) * cvar("g_vehicle_racer_downforce") * v_up;
- self.velocity = self.velocity - df;
- player.movement = racer.velocity;
- racer_align4point(cvar("g_vehicle_racer_springlength"),100,cvar("g_vehicle_racer_inert"));
-
- if(cvar("g_vehicle_racer_drag"))
+ self.velocity = self.velocity - df;
+ player.movement = racer.velocity;
+ racer_align4point(cvar("g_vehicle_racer_springlength"),100,cvar("g_vehicle_racer_inert"));
+
+ if(cvar("g_vehicle_racer_drag"))
self.velocity = movelib_dragvec(cvar("g_vehicle_racer_drag"),cvar("g_vehicle_racer_dragexp"));
- self = player;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- setorigin(player,racer.origin + '0 0 32');
- player.velocity = racer.velocity;
-
- return 1;
-}
-
-void racer_think()
-{
- movelib_beak_simple(cvar("g_vehicle_racer_speed_stop"));
-
- self.nextthink = time;
-}
-
-void racer_enter()
-{
- self.owner = other;
- self.owner.angles = self.angles;
-
- //setattachment(other,self,"");
- self.nextthink = 0;
- self.think = SUB_Null;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- //setsize(self.owner,spiderbot_MIN,spiderbot_MAX);
- self.owner.alpha = -1;
- self.owner.PlayerPhysplug = racer_pplug;
- self.owner.vehicle = self;
- self.owner.event_damage = SUB_Null;
- //self.event_damage = vehicle_stdproc_damage ;
- self.colormap = self.owner.colormap;
- //self.tur_head.colormap = self.owner.colormap;
- //self.vehicle_hudmodel.viewmodelforclient = self.owner;
- //self.owner.hud = HUD_SPIDEBOT;
- //self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
- //self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
-
- //setorigin(self.owner,self.origin);
- //setattachment(self.owner,self,"");
- //setorigin(self.owner,'0 0 0');
-
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, self.angles_x); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
-
- //self.owner.view_ofs = '0 0 0';
- //self.tur_head.nodrawtoclient = self.owner;
-}
-
-void racer_exit(float eject)
-{
- self.velocity = '0 0 0';
-
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, 0); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
-
- self.think = racer_think;
- self.nextthink = time;
-
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.movetype = MOVETYPE_WALK;
-
- setsize(self.owner,PL_MIN,PL_MAX);
-
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.event_damage = PlayerDamage;
- //self.owner.hud = HUD_NORMAL;
-
- self.colormap = 1024;
- //self.tur_head.colormap = 1024;
-
- //self.vehicle_hudmodel.viewmodelforclient = self;
- //self.tur_head.nodrawtoclient = self;
- setattachment(self.owner,world,"");
-
- if(eject)
- {
- makevectors(self.angles);
- setorigin(self.owner,self.origin + v_forward * 100);
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- }
- else
- setorigin(self.owner,self.origin + '0 0 64' - v_forward * 200);
-
- self.owner = world;
-}
-
-
-void racer_touch()
-{
- if(self.owner)
- {
- if(vlen(self.velocity) == 0)
- return;
-
- if(other.classname != "player")
- return;
-
- vector a;
- a = normalize(other.origin - self.origin);
- a = a - normalize(self.velocity);
-
- return;
- }
-
- if(other.classname != "player")
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- racer_enter();
-}
-
-/*
-float racer_customizeentityforclient()
-{
- if(self.deadflag == DEAD_DEAD)
- return FALSE;
-
- return TRUE;
-}
-*/
-
-void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void racer_spawn()
-{
- self.think = racer_think;
- self.nextthink = time;
-
- //self.vehicle_health = CCVAR("_health");
- //self.vehicle_shield = CCVAR("_shield");
- //self.event_damage = vehicle_stdproc_damage;
- self.event_damage = racer_damage;
- //self.iscreature = TRUE;
- self.scale = 0.5;
- self.movetype = MOVETYPE_FLY;
- self.solid = SOLID_SLIDEBOX;
- //self.takedamage = DAMAGE_AIM;
- self.touch = racer_touch;
- //self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
- self.alpha = 1;
- //self.tur_head.angles = '0 0 0';
- //self.colormap = 1024;
- //self.tur_head.colormap = 1024;
- self.deadflag = DEAD_NO;
- self.bot_attack = TRUE;
- setorigin(self,self.origin + '0 0 128');
- setsize(self,RACER_MIN*0.5,RACER_MAX*0.5);
- setorigin(self,self.tur_aimpos);
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-}
-
-void racer_blowup()
-{
- /*
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
- //RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
- RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
-
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
- self.nextthink = time + 10;
- self.think = spiderbot_spawn;
-
- setorigin(self,self.tur_aimpos);
- */
-}
-
-void racer_die()
-{
-
- /*
- self.health = 0;
- self.event_damage = SUB_Null;
- self.iscreature = FALSE;
- self.solid = SOLID_NOT;
- self.takedamage = DAMAGE_NO;
- self.touch = SUB_Null;
- self.nextthink = time + random() * 2;
- self.think = spiderbot_blowup;
- self.deadflag = DEAD_DEAD;
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.frame = 0;
- self.tur_head.frame = 0;
- */
-}
-
-void racer_dinit()
-{
-
- server_fps = (1 / sys_ticrate);
-
- /*
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
- addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
- addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
- addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
- addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
- */
-
- if (self.netname == "") self.netname = "Race PoD";
-
- self.vehicle_viewport = spawn();
- self.event_damage = racer_damage;
- //self.gravity = 2;
- //self.vehicle_hudmodel = spawn();
- //self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
- //self.cvar_basename = "g_vehicle_spiderbot";
-
- setmodel (self.vehicle_viewport, "models/null.md3");
- setmodel(self,"models/racers/waka.dpm");
-
- setattachment(self.vehicle_viewport,self,"");
- //self.tur_head.customizeentityforclient = spiderbot_customizeentityforclient;
-
- setorigin(self.vehicle_viewport,'-400 0 40');
- self.tur_aimpos = self.origin;
- racer_spawn();
-
- //self.vehicle_die = spiderbot_die;
- //self.vehicle_exit = spiderbot_exit;
-}
-
-void spawnfunc_racer()
-{
- g_turrets_common_precash();
-
- precache_model ( "models/racers/waka.dpm");
-
- self.think = racer_dinit;
- self.nextthink = time + 0.5;
-}
+ self = player;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ setorigin(player,racer.origin + '0 0 32');
+ player.velocity = racer.velocity;
+
+ return 1;
+}
+
+void racer_think()
+{
+ movelib_beak_simple(cvar("g_vehicle_racer_speed_stop"));
+
+ self.nextthink = time;
+}
+
+void racer_enter()
+{
+ self.owner = other;
+ self.owner.angles = self.angles;
+
+ //setattachment(other,self,"");
+ self.nextthink = 0;
+ self.think = SUB_Null;
+ self.owner.takedamage = DAMAGE_NO;
+ self.owner.solid = SOLID_NOT;
+ self.owner.movetype = MOVETYPE_NOCLIP;
+ //setsize(self.owner,spiderbot_MIN,spiderbot_MAX);
+ self.owner.alpha = -1;
+ self.owner.PlayerPhysplug = racer_pplug;
+ self.owner.vehicle = self;
+ self.owner.event_damage = SUB_Null;
+ //self.event_damage = vehicle_stdproc_damage ;
+ self.colormap = self.owner.colormap;
+ //self.tur_head.colormap = self.owner.colormap;
+ //self.vehicle_hudmodel.viewmodelforclient = self.owner;
+ //self.owner.hud = HUD_SPIDEBOT;
+ //self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
+ //self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
+
+ //setorigin(self.owner,self.origin);
+ //setattachment(self.owner,self,"");
+ //setorigin(self.owner,'0 0 0');
+
+ msg_entity = other;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
+ WriteAngle(MSG_ONE, self.angles_x); // tilt
+ WriteAngle(MSG_ONE, self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+
+ //self.owner.view_ofs = '0 0 0';
+ //self.tur_head.nodrawtoclient = self.owner;
+}
+
+void racer_exit(float eject)
+{
+ self.velocity = '0 0 0';
+
+ msg_entity = self.owner;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.owner);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
+ WriteAngle(MSG_ONE, 0); // tilt
+ WriteAngle(MSG_ONE, self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+
+ self.think = racer_think;
+ self.nextthink = time;
+
+ self.owner.takedamage = DAMAGE_AIM;
+ self.owner.solid = SOLID_SLIDEBOX;
+ self.owner.movetype = MOVETYPE_WALK;
+
+ setsize(self.owner,PL_MIN,PL_MAX);
+
+ self.owner.alpha = 1;
+ self.owner.PlayerPhysplug = SUB_Null;
+ self.owner.vehicle = world;
+ self.owner.view_ofs = PL_VIEW_OFS;
+ self.owner.event_damage = PlayerDamage;
+ //self.owner.hud = HUD_NORMAL;
+
+ self.colormap = 1024;
+ //self.tur_head.colormap = 1024;
+
+ //self.vehicle_hudmodel.viewmodelforclient = self;
+ //self.tur_head.nodrawtoclient = self;
+ setattachment(self.owner,world,"");
+
+ if(eject)
+ {
+ makevectors(self.angles);
+ setorigin(self.owner,self.origin + v_forward * 100);
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ }
+ else
+ setorigin(self.owner,self.origin + '0 0 64' - v_forward * 200);
+
+ self.owner = world;
+}
+
+
+void racer_touch()
+{
+ if(self.owner)
+ {
+ if(vlen(self.velocity) == 0)
+ return;
+
+ if(other.classname != "player")
+ return;
+
+ vector a;
+ a = normalize(other.origin - self.origin);
+ a = a - normalize(self.velocity);
+
+ return;
+ }
+
+ if(other.classname != "player")
+ return;
+
+ if(other.deadflag != DEAD_NO)
+ return;
+
+ if(other.vehicle != world)
+ return;
+
+ racer_enter();
+}
+
+/*
+float racer_customizeentityforclient()
+{
+ if(self.deadflag == DEAD_DEAD)
+ return FALSE;
+
+ return TRUE;
+}
+*/
+
+void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+void racer_spawn()
+{
+ self.think = racer_think;
+ self.nextthink = time;
+
+ //self.vehicle_health = CCVAR("_health");
+ //self.vehicle_shield = CCVAR("_shield");
+ //self.event_damage = vehicle_stdproc_damage;
+ self.event_damage = racer_damage;
+ //self.iscreature = TRUE;
+ self.scale = 0.5;
+ self.movetype = MOVETYPE_FLY;
+ self.solid = SOLID_SLIDEBOX;
+ //self.takedamage = DAMAGE_AIM;
+ self.touch = racer_touch;
+ //self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+ self.alpha = 1;
+ //self.tur_head.angles = '0 0 0';
+ //self.colormap = 1024;
+ //self.tur_head.colormap = 1024;
+ self.deadflag = DEAD_NO;
+ self.bot_attack = TRUE;
+ setorigin(self,self.origin + '0 0 128');
+ setsize(self,RACER_MIN*0.5,RACER_MAX*0.5);
+ setorigin(self,self.tur_aimpos);
+ pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+}
+
+void racer_blowup()
+{
+ /*
+ sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+ //RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg * 0.5, self.owner.shot_radius, world, self.owner.shot_force, DEATH_TURRET, world);
+ RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
+
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+ self.nextthink = time + 10;
+ self.think = spiderbot_spawn;
+
+ setorigin(self,self.tur_aimpos);
+ */
+}
+
+void racer_die()
+{
+
+ /*
+ self.health = 0;
+ self.event_damage = SUB_Null;
+ self.iscreature = FALSE;
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.touch = SUB_Null;
+ self.nextthink = time + random() * 2;
+ self.think = spiderbot_blowup;
+ self.deadflag = DEAD_DEAD;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ self.frame = 0;
+ self.tur_head.frame = 0;
+ */
+}
+
+void racer_dinit()
+{
+
+ server_fps = (1 / sys_ticrate);
+
+ /*
+ addstat(STAT_HUD, AS_INT, hud);
+ addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
+ addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
+ addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
+ addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
+ addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
+ */
+
+ if (self.netname == "") self.netname = "Race PoD";
+
+ self.vehicle_viewport = spawn();
+ self.event_damage = racer_damage;
+ //self.gravity = 2;
+ //self.vehicle_hudmodel = spawn();
+ //self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
+ //self.cvar_basename = "g_vehicle_spiderbot";
+
+ setmodel (self.vehicle_viewport, "models/null.md3");
+ setmodel(self,"models/racers/waka.dpm");
+
+ setattachment(self.vehicle_viewport,self,"");
+ //self.tur_head.customizeentityforclient = spiderbot_customizeentityforclient;
+
+ setorigin(self.vehicle_viewport,'-400 0 40');
+ self.tur_aimpos = self.origin;
+ racer_spawn();
+
+ //self.vehicle_die = spiderbot_die;
+ //self.vehicle_exit = spiderbot_exit;
+}
+
+void spawnfunc_racer()
+{
+ g_turrets_common_precash();
+
+ precache_model ( "models/racers/waka.dpm");
+
+ self.think = racer_dinit;
+ self.nextthink = time + 0.5;
+}
Property changes on: trunk/data/qcsrc/server/vehicles/racer.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/server/vehicles/spiderbot.qc
===================================================================
--- trunk/data/qcsrc/server/vehicles/spiderbot.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/server/vehicles/spiderbot.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1,776 +1,776 @@
-#define MODEL_SPIDERBOT_FORWARD_START 1
-#define MODEL_SPIDERBOT_FORWARD_END 31
-#define MODEL_SPIDERBOT_FORWARD_LENGTH 31
-
-#define MODEL_SPIDERBOT_BACKWARDS_START 32
-#define MODEL_SPIDERBOT_BACKWARDS_END 62
-#define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
-
-#define MODEL_SPIDERBOT_LEFT_START 63
-#define MODEL_SPIDERBOT_LEFT_END 93
-#define MODEL_SPIDERBOT_LEFT_LENGTH 31
-
-#define MODEL_SPIDERBOT_RIGHT_START 94
-#define MODEL_SPIDERBOT_RIGHT_END 124
-#define MODEL_SPIDERBOT_RIGHT_LENGTH 31
-
-#define MODEL_SPIDERBOT_JUMP_START 125
-#define MODEL_SPIDERBOT_JUMP_END 155
-#define MODEL_SPIDERBOT_JUMP_LENGTH 31
-
-#define spiderbot_MIN '-75 -75 5'
-#define spiderbot_MAX '75 75 105'
-
-/*
-.void() anim_now;
-.void() anim_next;
-
-void spider_anim_idle()
-{
- movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
- if(self.anim_next != self.anim_now)
- self.anim_now = self.anim_next;
-}
-
-void spider_anim_forward()
-{
- movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
- if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
- self.frame = MODEL_SPIDERBOT_FORWARD_START;
- else
- self.frame += 0.8;
-
- if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
- self.anim_now = self.anim_next;
-}
-
-void spider_anim_backward()
-{
- movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
- if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
- self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
- else
- self.frame += 0.8;
-
- if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
- self.anim_now = self.anim_next;
-}
-
-void spider_anim_strafel()
-{
- movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
- if(self.frame < MODEL_SPIDERBOT_LEFT_START)
- self.frame = MODEL_SPIDERBOT_LEFT_START;
- else
- self.frame += 0.8;
-
- if(self.frame > MODEL_SPIDERBOT_LEFT_END)
- self.anim_now = self.anim_next;
-}
-
-void spider_anim_strafer()
-{
- movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
- if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
- self.frame = MODEL_SPIDERBOT_RIGHT_START;
- else
- self.frame += 0.8;
-
- if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
- self.anim_now = self.anim_next;
-}
-
-void spider_anim_jump()
-{
- //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
-
- if(self.frame < MODEL_SPIDERBOT_JUMP_START)
- self.frame = MODEL_SPIDERBOT_JUMP_START;
- else
- self.frame += 1;
-
- if(self.frame <= 8)
- movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-
- if(self.frame == 9)
- self.velocity = v_forward * 400 + v_up * 400;
-
- if(self.frame >= 19)
- movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
-
- if(self.frame > MODEL_SPIDERBOT_JUMP_END)
- self.anim_now = self.anim_next;
-}
-
-void anim_do()
-{
- if not (self.anim_now)
- self.anim_now = self.anim_next;
-
- self.anim_now();
-}
-
-*/
-
-void anim_do()
-{
- self.frame = self.frame + 0.8;
- if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
- if(self.anim_start == 0)
- {
- self.frame = 0;
- self.anim_end = 0;
- }
- else
- self.frame = self.anim_start;
-}
-
-void spiderbot_exit(float eject);
-void spiderbot_enter();
-
-void spiderbot_rocket_explode()
-{
- vector org2;
-
- if(self.event_damage != SUB_Null)
- {
- self.event_damage = SUB_Null;
- self.think = spiderbot_rocket_explode;
- self.nextthink = time;
- return;
- }
-
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- org2 = findbetterlocation (self.origin, 16);
- pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- w_deathtypestring = "dident escape the rocket barrage";
-
- if(!self.owner)
- self.owner = self.realowner;
-
- RadiusDamage (self, self.owner,
- cvar("g_vehicle_spiderbot_rocket_damage"),
- cvar("g_vehicle_spiderbot_rocket_edgedamage"),
- cvar("g_vehicle_spiderbot_rocket_radius"), world,
- cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
-
- remove (self);
-}
-
-void spiderbot_rocket_touch()
-{
- if(self.owner)
- {
- if(other == self.owner.vehicle)
- return;
-
- if(other == self.owner.vehicle.tur_head)
- return;
- }
-
- PROJECTILE_TOUCH;
- spiderbot_rocket_explode();
-}
-
-void spiderbot_rocket_think()
-{
- vector newdir,olddir;
-
- self.nextthink = time;
- if not(self.owner)
- {
- UpdateCSQCProjectile(self);
- return;
- }
-
- self.solid = SOLID_BBOX;
- self.touch = spiderbot_rocket_touch;
- olddir = normalize(self.velocity);
- newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
- newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
- self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
-
- UpdateCSQCProjectile(self);
-}
-
-void spiderbot_rocket_do()
-{
- entity missile;
-
- if(self.gun2.cnt > time)
- return;
-
- if(self.tur_head.frame > 7)
- self.tur_head.frame = 0;
-
- if not (self.owner.BUTTON_ATCK2)
- return;
-
- self.tur_head.frame += 1;
- if(self.tur_head.frame > 7)
- self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
- else
- self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
-
- self.gun2.cnt = time + self.attack_finished_single;
-
- sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
- missile = spawn ();
- setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
- setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
- te_explosion (missile.origin);
-
- missile.classname = "spiderbot_rocket";
- missile.owner = self.owner;
- missile.bot_dodge = TRUE;
- missile.bot_dodgerating = 75;
- missile.nextthink = time;// + 0.2;
- missile.movetype = MOVETYPE_FLYMISSILE;
- missile.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
- missile.angles = vectoangles(missile.velocity);
- missile.think = spiderbot_rocket_think;
- missile.flags = FL_PROJECTILE;
- missile.solid = SOLID_NOT;
-
- CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
-}
-
-void spiderbot_minigun_fire_Flash_Go() {
- if (self.frame > 10){
+#define MODEL_SPIDERBOT_FORWARD_START 1
+#define MODEL_SPIDERBOT_FORWARD_END 31
+#define MODEL_SPIDERBOT_FORWARD_LENGTH 31
+
+#define MODEL_SPIDERBOT_BACKWARDS_START 32
+#define MODEL_SPIDERBOT_BACKWARDS_END 62
+#define MODEL_SPIDERBOT_BACKWARDS_LENGTH 31
+
+#define MODEL_SPIDERBOT_LEFT_START 63
+#define MODEL_SPIDERBOT_LEFT_END 93
+#define MODEL_SPIDERBOT_LEFT_LENGTH 31
+
+#define MODEL_SPIDERBOT_RIGHT_START 94
+#define MODEL_SPIDERBOT_RIGHT_END 124
+#define MODEL_SPIDERBOT_RIGHT_LENGTH 31
+
+#define MODEL_SPIDERBOT_JUMP_START 125
+#define MODEL_SPIDERBOT_JUMP_END 155
+#define MODEL_SPIDERBOT_JUMP_LENGTH 31
+
+#define spiderbot_MIN '-75 -75 5'
+#define spiderbot_MAX '75 75 105'
+
+/*
+.void() anim_now;
+.void() anim_next;
+
+void spider_anim_idle()
+{
+ movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+ if(self.anim_next != self.anim_now)
+ self.anim_now = self.anim_next;
+}
+
+void spider_anim_forward()
+{
+ movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+ if((self.frame < MODEL_SPIDERBOT_FORWARD_START) || (self.frame > MODEL_SPIDERBOT_FORWARD_END))
+ self.frame = MODEL_SPIDERBOT_FORWARD_START;
+ else
+ self.frame += 0.8;
+
+ if(self.frame > MODEL_SPIDERBOT_FORWARD_END)
+ self.anim_now = self.anim_next;
+}
+
+void spider_anim_backward()
+{
+ movelib_move_simple(normalize(v_forward * -1),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+ if(self.frame < MODEL_SPIDERBOT_BACKWARDS_START)
+ self.frame = MODEL_SPIDERBOT_BACKWARDS_START;
+ else
+ self.frame += 0.8;
+
+ if(self.frame > MODEL_SPIDERBOT_BACKWARDS_END)
+ self.anim_now = self.anim_next;
+}
+
+void spider_anim_strafel()
+{
+ movelib_move_simple(normalize(v_right * -1),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+ if(self.frame < MODEL_SPIDERBOT_LEFT_START)
+ self.frame = MODEL_SPIDERBOT_LEFT_START;
+ else
+ self.frame += 0.8;
+
+ if(self.frame > MODEL_SPIDERBOT_LEFT_END)
+ self.anim_now = self.anim_next;
+}
+
+void spider_anim_strafer()
+{
+ movelib_move_simple(normalize(v_right),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+ if(self.frame < MODEL_SPIDERBOT_RIGHT_START)
+ self.frame = MODEL_SPIDERBOT_RIGHT_START;
+ else
+ self.frame += 0.8;
+
+ if(self.frame > MODEL_SPIDERBOT_RIGHT_END)
+ self.anim_now = self.anim_next;
+}
+
+void spider_anim_jump()
+{
+ //movelib_move_simple(normalize(v_forward),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+
+ if(self.frame < MODEL_SPIDERBOT_JUMP_START)
+ self.frame = MODEL_SPIDERBOT_JUMP_START;
+ else
+ self.frame += 1;
+
+ if(self.frame <= 8)
+ movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+
+ if(self.frame == 9)
+ self.velocity = v_forward * 400 + v_up * 400;
+
+ if(self.frame >= 19)
+ movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+
+ if(self.frame > MODEL_SPIDERBOT_JUMP_END)
+ self.anim_now = self.anim_next;
+}
+
+void anim_do()
+{
+ if not (self.anim_now)
+ self.anim_now = self.anim_next;
+
+ self.anim_now();
+}
+
+*/
+
+void anim_do()
+{
+ self.frame = self.frame + 0.8;
+ if ((self.frame < self.anim_start) || (self.frame > self.anim_end))
+ if(self.anim_start == 0)
+ {
+ self.frame = 0;
+ self.anim_end = 0;
+ }
+ else
+ self.frame = self.anim_start;
+}
+
+void spiderbot_exit(float eject);
+void spiderbot_enter();
+
+void spiderbot_rocket_explode()
+{
+ vector org2;
+
+ if(self.event_damage != SUB_Null)
+ {
+ self.event_damage = SUB_Null;
+ self.think = spiderbot_rocket_explode;
+ self.nextthink = time;
+ return;
+ }
+
+ sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ org2 = findbetterlocation (self.origin, 16);
+ pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
+ w_deathtypestring = "dident escape the rocket barrage";
+
+ if(!self.owner)
+ self.owner = self.realowner;
+
+ RadiusDamage (self, self.owner,
+ cvar("g_vehicle_spiderbot_rocket_damage"),
+ cvar("g_vehicle_spiderbot_rocket_edgedamage"),
+ cvar("g_vehicle_spiderbot_rocket_radius"), world,
+ cvar("g_vehicle_spiderbot_rocket_force"), DEATH_TURRET, world);
+
+ remove (self);
+}
+
+void spiderbot_rocket_touch()
+{
+ if(self.owner)
+ {
+ if(other == self.owner.vehicle)
+ return;
+
+ if(other == self.owner.vehicle.tur_head)
+ return;
+ }
+
+ PROJECTILE_TOUCH;
+ spiderbot_rocket_explode();
+}
+
+void spiderbot_rocket_think()
+{
+ vector newdir,olddir;
+
+ self.nextthink = time;
+ if not(self.owner)
+ {
+ UpdateCSQCProjectile(self);
+ return;
+ }
+
+ self.solid = SOLID_BBOX;
+ self.touch = spiderbot_rocket_touch;
+ olddir = normalize(self.velocity);
+ newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
+ newdir += randomvec() * cvar("g_vehicle_spiderbot_rocket_noise");
+ self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_spiderbot_rocket_speed");
+
+ UpdateCSQCProjectile(self);
+}
+
+void spiderbot_rocket_do()
+{
+ entity missile;
+
+ if(self.gun2.cnt > time)
+ return;
+
+ if(self.tur_head.frame > 7)
+ self.tur_head.frame = 0;
+
+ if not (self.owner.BUTTON_ATCK2)
+ return;
+
+ self.tur_head.frame += 1;
+ if(self.tur_head.frame > 7)
+ self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_reload");
+ else
+ self.attack_finished_single = cvar("g_vehicle_spiderbot_rocket_refire");
+
+ self.gun2.cnt = time + self.attack_finished_single;
+
+ sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM);
+ missile = spawn ();
+ setsize (missile, '-3 -1 -1', '3 1 1'); // give it some size so it can be shot
+ setorigin(missile,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
+ te_explosion (missile.origin);
+
+ missile.classname = "spiderbot_rocket";
+ missile.owner = self.owner;
+ missile.bot_dodge = TRUE;
+ missile.bot_dodgerating = 75;
+ missile.nextthink = time;// + 0.2;
+ missile.movetype = MOVETYPE_FLYMISSILE;
+ missile.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
+ missile.angles = vectoangles(missile.velocity);
+ missile.think = spiderbot_rocket_think;
+ missile.flags = FL_PROJECTILE;
+ missile.solid = SOLID_NOT;
+
+ CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+}
+
+void spiderbot_minigun_fire_Flash_Go() {
+ if (self.frame > 10){
self.alpha = -1;
- setmodel(self,"");
- return;
- }
-
- self.frame = self.frame + 2;
- self.alpha = self.alpha - 0.2;
- self.nextthink = time + 0.02;
-}
-
-void spiderbot_minigun_fire(entity gun,float trail)
-{
-
- entity flash;
- vector v;
- v = gettaginfo(gun,gettagindex(gun,"barrels"));
- v_forward = normalize(v_forward);
-
- sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
-
- fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
- cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
-
- if not (gun.enemy)
- {
- gun.enemy = spawn();
- setattachment(gun.enemy , gun, "barrels");
- setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
- }
-
- flash = gun.enemy; //spawn();
- setmodel(flash, "models/uziflash.md3"); // precision set below
- flash.think = spiderbot_minigun_fire_Flash_Go;
- flash.nextthink = time + 0.02;
- flash.frame = 2;
- flash.angles_z = flash.v_angle_z + random() * 180;
- flash.alpha = 1;
- flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
- if(trail)
- trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
-}
-
-void spiderbot_miniguns_do()
-{
- if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
- {
-
- self.gun1.angles_z += 36;
- self.gun2.angles_z -= 36;
- if(self.gun1.angles_z >= 360)
- {
- self.gun1.angles_z = 0;
- self.gun2.angles_z = 360;
- }
-
- self = self.owner;
- if(self.uzi_bulletcounter == 1)
- {
- spiderbot_minigun_fire(self.vehicle.gun1,0);
- spiderbot_minigun_fire(self.vehicle.gun2,1);
- self.uzi_bulletcounter = 0;
- }
- else
- {
- spiderbot_minigun_fire(self.vehicle.gun1,1);
- spiderbot_minigun_fire(self.vehicle.gun2,0);
- self.uzi_bulletcounter += 1;
- }
-
- self = self.vehicle;
- self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
- if(self.owner.vehicle_heat >= 1)
- {
- self.vehicle_heat = 1;
- self.owner.vehicle_heat = 1;
- self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
- }
- else
- self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
-
- return;
- }
- else
- if(self.vehicle_heat != 0)
- {
- self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
- if(self.tur_head.attack_finished_single < time)
- {
- self.vehicle_heat = 0;
- self.owner.vehicle_heat = 0;
- }
- else
- {
- if(self.tur_head.uzi_bulletcounter < time)
- {
- self.tur_head.uzi_bulletcounter = time + 0.2;
- self.owner.vehicle_heat = self.vehicle_heat;
- }
- else
- self.owner.vehicle_heat = 1;
- }
- }
- else
- self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
-
-}
-
-float spiderbot_pplug()
-{
- vector ad;
- entity player,spider;
- float ftmp,ftmp2;
-
- player = self;
- spider = self.vehicle;
-
-/*
- self.BUTTON_ATCK = 0;
- self.button1 = 0;
- self.BUTTON_JUMP = 0;
- self.BUTTON_ATCK2 = 0;
-
-
- self.BUTTON_HOOK = 0;
- self.BUTTON_INFO = 0;
- self.button8 = 0;
- self.BUTTON_CHAT = 0;
- self.BUTTON_USE = 0;
-*/
-
- player.BUTTON_ZOOM = 0;
- player.BUTTON_CROUCH = 0;
-
-
- if(player.BUTTON_USE)
- {
- self = spider;
- spiderbot_exit(0);
- self = player;
- return 0;
- }
-
- player.exteriormodeltoclient = spider.tur_head;
-
- spider.tur_head.angles_x *= -1;
- spider.angles_x *= -1;
- //player.angles_x *= -1;
- makevectors(spider.angles);
-
- //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
- ad = player.v_angle - (spider.tur_head.angles + spider.angles);
-
- // Rotate head
- ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
- ftmp2 = ftmp * -1;
- spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
- spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
-
- // Pitch head
- ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
- ftmp2 = ftmp * -1;
- spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
- spider.tur_head.angles_x = bound(cvar("g_vehicle_spiderbot_head_pitchlimit_down"),spider.tur_head.angles_x,cvar("g_vehicle_spiderbot_head_pitchlimit_up"));
-
- spider.tur_head.angles_x *= -1;
- spider.angles_x *= -1;
- //player.angles_x *= -1;
-
- // Turn Body
- ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
- ftmp2 = ftmp * -1;
- ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
-
- self = spider;
- if(spider.flags & FL_ONGROUND)
- {
- if(player.BUTTON_JUMP)
- {
- player.BUTTON_JUMP = 0;
- spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
- spider.anim_end = MODEL_SPIDERBOT_JUMP_END;
- spider.velocity = v_forward * 700 + v_up * 600;
- }
- else
- {
- if(vlen(player.movement) == 0)
- {
- movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
- spider.anim_start = 0;
- spider.anim_end = 0;
- }
- else
- {
- spider.angles_y = safeangle(spider.angles_y + ftmp);
- spider.tur_head.angles_y -= ftmp;
-
- if(player.movement_x != 0)
- {
- if(player.movement_x > 0)
- {
- player.movement_x = 1;
- spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
- spider.anim_end = MODEL_SPIDERBOT_FORWARD_END;
- }
- else if(player.movement_x < 0)
- {
- player.movement_x = -1;
- spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
- spider.anim_end = MODEL_SPIDERBOT_BACKWARDS_END;
-
- }
- player.movement_y = 0;
- movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
- }
- else if(player.movement_y != 0)
- {
- if(player.movement_y < 0)
- {
- player.movement_y = -1;
- spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
- spider.anim_end = MODEL_SPIDERBOT_LEFT_END;
- }
- else if(player.movement_y > 0)
- {
- player.movement_y = 1;
- spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
- spider.anim_end = MODEL_SPIDERBOT_RIGHT_END;
- }
- movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
- }
-
- }
- }
- movelib_groundalign4point(300,100,0.25);
- }
-
- anim_do();
- spiderbot_miniguns_do();
- spiderbot_rocket_do();
- vehicle_stdproc_regen();
-
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- player.rockets = spider.tur_head.frame;
-
- if(spider.gun2.cnt <= time)
- player.rockets_reload = 1;
- else
- player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
-
- self = player;
-
- setorigin(player,spider.origin + '0 0 64');
- player.velocity = spider.velocity;
-
- return 1;
-}
-
-void spiderbot_think()
-{
- if(self.flags & FL_ONGROUND)
- {
- movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
- //movelib_groundalign4point(300,100);
- }
-
- self.nextthink = time;
-}
-
-void spiderbot_enter()
-{
- self.owner = other;
-
- self.event_damage = vehicle_stdproc_damage ;
- self.colormap = self.owner.colormap;
- self.tur_head.colormap = self.owner.colormap;
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
- self.nextthink = 0;
- self.owner.angles = self.angles;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- self.owner.alpha = -1;
- self.owner.PlayerPhysplug = spiderbot_pplug;
- self.owner.vehicle = self;
- self.owner.event_damage = SUB_Null;
- self.owner.hud = HUD_SPIDEBOT;
- self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
- self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
- self.team = self.owner.team;
-
- //setorigin(self.owner,self.origin);
- //setattachment(self.owner,self,"");
- //setorigin(self.owner,'0 0 0');
-
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
- WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
- //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z); // roll
-
- //self.owner.view_ofs = '0 0 0';
- //self.tur_head.nodrawtoclient = self.owner;
-}
-
-void spiderbot_exit(float eject)
-{
- entity e;
-
- e = findchain(classname,"spiderbot_rocket");
- while(e)
- {
- if(e.owner == self.owner)
- {
- e.realowner = self.owner;
- e.owner = world;
- //e.solid = SOLID_BBOX;
- //e.think = SUB_Null;
- //e.nextthink = -1;
- }
- e = e.chain;
- }
-
- self.velocity = '0 0 0';
-
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
- WriteAngle(MSG_ONE, 0); // tilt
- WriteAngle(MSG_ONE, self.angles_y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
-
- //setattachment(self.owner,world,"");
- self.think = spiderbot_think;
- self.nextthink = time;
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.movetype = MOVETYPE_WALK;
-
- setsize(self.owner,PL_MIN,PL_MAX);
-
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.hud = HUD_NORMAL;
- self.owner.event_damage = PlayerDamage;
-
- self.colormap = 1024;
- self.tur_head.colormap = 1024;
- self.team = -1;
-
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.tur_head.nodrawtoclient = self;
-
- setattachment(self.owner,world,"");
-
- makevectors(self.angles);
- if(eject)
- {
- setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- }
- else
- setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
-
- self.owner = world;
-}
-
-void spiderbot_touch()
-{
- if(self.owner)
- {
- if(vlen(self.velocity) == 0)
- return;
-
- if(other.classname != "player")
- return;
-
- //todo: add check for velocity here (so we dont cush players runing onto us from behind)
-
- Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_TURRET,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
- return;
- }
-
- if(other.classname != "player")
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- spiderbot_enter();
-}
-
-float spiderbot_customizeentityforclient()
-{
- if(self.deadflag == DEAD_DEAD)
- return FALSE;
-
- return TRUE;
-}
-
-//void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
-void spiderbot_spawn()
-{
- self.think = spiderbot_think;
- self.nextthink = time;
-
- self.vehicle_health = CCVAR("_health");
- self.vehicle_shield = CCVAR("_shield");
- self.event_damage = vehicle_stdproc_damage;
- self.iscreature = TRUE;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
- self.touch = spiderbot_touch;
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
- self.tur_head.angles = '0 0 0';
- self.colormap = 1024;
- self.tur_head.colormap = 1024;
- self.deadflag = DEAD_NO;
- self.bot_attack = TRUE;
-
- setsize(self,spiderbot_MIN,spiderbot_MAX);
- setorigin(self,self.tur_aimpos);
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-}
-
-void spiderbot_blowup()
-{
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
- RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
-
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
- self.nextthink = time + 10;
- self.think = spiderbot_spawn;
-
- setorigin(self,self.tur_aimpos);
-}
-
-void spiderbot_die()
-{
-
- self.health = 0;
- self.event_damage = SUB_Null;
- self.iscreature = FALSE;
- self.solid = SOLID_NOT;
- self.takedamage = DAMAGE_NO;
- self.touch = SUB_Null;
- self.nextthink = time + random() * 2;
- self.think = spiderbot_blowup;
- self.deadflag = DEAD_DEAD;
- self.vehicle_hudmodel.viewmodelforclient = self;
- self.frame = 0;
- self.tur_head.frame = 0;
-
-}
-
-void vewhicle_spiderbot_dinit()
-{
-
- server_fps = (1 / sys_ticrate);
-
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
- addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
- addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
- addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
- addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
-
- if (self.netname == "") self.netname = "spiderbot";
-
- self.tur_head = spawn();
- self.gun1 = spawn();
- self.gun2 = spawn();
- self.vehicle_viewport = spawn();
- self.gravity = 2;
- self.vehicle_hudmodel = spawn();
- self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
- self.cvar_basename = "g_vehicle_spiderbot";
-
- setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
- setmodel (self.vehicle_viewport, "models/null.md3");
- setmodel(self,"models/spiderbot/spiderbot.dpm");
- setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
- setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
- setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
-
- setattachment(self.tur_head,self,"tag_head");
- setattachment(self.vehicle_hudmodel,self.tur_head,"");
- setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
- setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
- setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
-
- self.tur_head.owner = self;
- self.customizeentityforclient = spiderbot_customizeentityforclient;
-
- setorigin(self.vehicle_viewport,'35 0 -14');
- self.tur_aimpos = self.origin;
- spiderbot_spawn();
-
- self.vehicle_die = spiderbot_die;
- self.vehicle_exit = spiderbot_exit;
-}
-
-void spawnfunc_vehicle_spiderbot()
-{
- // g_turrets_common_precash();
-
- precache_model ( "models/spiderbot/cr.md3");
- precache_model ( "models/vhshield.md3");
- precache_model ( "models/spiderbot/cp.md3");
- precache_model ( "models/spiderbot/spiderbot.dpm");
- precache_model ( "models/spiderbot/spiderbot_top.dpm");
- precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
-
- precache_model ( "models/turrets/rocket.md3");
- precache_sound ( "weapons/rocket_impact.wav" );
-
- self.team = -1;
- self.think = vewhicle_spiderbot_dinit;
- self.nextthink = time + 0.5;
-}
+ setmodel(self,"");
+ return;
+ }
+
+ self.frame = self.frame + 2;
+ self.alpha = self.alpha - 0.2;
+ self.nextthink = time + 0.02;
+}
+
+void spiderbot_minigun_fire(entity gun,float trail)
+{
+
+ entity flash;
+ vector v;
+ v = gettaginfo(gun,gettagindex(gun,"barrels"));
+ v_forward = normalize(v_forward);
+
+ sound (gun, CHAN_WEAPON, "weapons/uzi_fire.wav", VOL_BASE, ATTN_NORM);
+
+ fireBullet (v, v_forward, cvar("g_vehicle_spiderbot_minigun_spread"), cvar("g_vehicle_spiderbot_minigun_damage"),
+ cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_TURRET, 0);
+
+ if not (gun.enemy)
+ {
+ gun.enemy = spawn();
+ setattachment(gun.enemy , gun, "barrels");
+ setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
+ }
+
+ flash = gun.enemy; //spawn();
+ setmodel(flash, "models/uziflash.md3"); // precision set below
+ flash.think = spiderbot_minigun_fire_Flash_Go;
+ flash.nextthink = time + 0.02;
+ flash.frame = 2;
+ flash.angles_z = flash.v_angle_z + random() * 180;
+ flash.alpha = 1;
+ flash.effects = EF_ADDITIVE | EF_FULLBRIGHT | EF_LOWPRECISION;
+ if(trail)
+ trailparticles(self, particleeffectnum("EF_MGTURRETTRAIL"), v, trace_endpos);
+}
+
+void spiderbot_miniguns_do()
+{
+ if ((self.owner.BUTTON_ATCK) && (self.owner.vehicle_heat < 1) && (self.tur_head.attack_finished_single < time))
+ {
+
+ self.gun1.angles_z += 36;
+ self.gun2.angles_z -= 36;
+ if(self.gun1.angles_z >= 360)
+ {
+ self.gun1.angles_z = 0;
+ self.gun2.angles_z = 360;
+ }
+
+ self = self.owner;
+ if(self.uzi_bulletcounter == 1)
+ {
+ spiderbot_minigun_fire(self.vehicle.gun1,0);
+ spiderbot_minigun_fire(self.vehicle.gun2,1);
+ self.uzi_bulletcounter = 0;
+ }
+ else
+ {
+ spiderbot_minigun_fire(self.vehicle.gun1,1);
+ spiderbot_minigun_fire(self.vehicle.gun2,0);
+ self.uzi_bulletcounter += 1;
+ }
+
+ self = self.vehicle;
+ self.owner.vehicle_heat += cvar("g_vehicle_spiderbot_minigun_heat");
+ if(self.owner.vehicle_heat >= 1)
+ {
+ self.vehicle_heat = 1;
+ self.owner.vehicle_heat = 1;
+ self.tur_head.attack_finished_single = (1/(cvar("g_vehicle_spiderbot_minigun_cooldown") * server_fps))+time;
+ }
+ else
+ self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
+
+ return;
+ }
+ else
+ if(self.vehicle_heat != 0)
+ {
+ self.vehicle_heat = max(self.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
+ if(self.tur_head.attack_finished_single < time)
+ {
+ self.vehicle_heat = 0;
+ self.owner.vehicle_heat = 0;
+ }
+ else
+ {
+ if(self.tur_head.uzi_bulletcounter < time)
+ {
+ self.tur_head.uzi_bulletcounter = time + 0.2;
+ self.owner.vehicle_heat = self.vehicle_heat;
+ }
+ else
+ self.owner.vehicle_heat = 1;
+ }
+ }
+ else
+ self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
+
+}
+
+float spiderbot_pplug()
+{
+ vector ad;
+ entity player,spider;
+ float ftmp,ftmp2;
+
+ player = self;
+ spider = self.vehicle;
+
+/*
+ self.BUTTON_ATCK = 0;
+ self.button1 = 0;
+ self.BUTTON_JUMP = 0;
+ self.BUTTON_ATCK2 = 0;
+
+
+ self.BUTTON_HOOK = 0;
+ self.BUTTON_INFO = 0;
+ self.button8 = 0;
+ self.BUTTON_CHAT = 0;
+ self.BUTTON_USE = 0;
+*/
+
+ player.BUTTON_ZOOM = 0;
+ player.BUTTON_CROUCH = 0;
+
+
+ if(player.BUTTON_USE)
+ {
+ self = spider;
+ spiderbot_exit(0);
+ self = player;
+ return 0;
+ }
+
+ player.exteriormodeltoclient = spider.tur_head;
+
+ spider.tur_head.angles_x *= -1;
+ spider.angles_x *= -1;
+ //player.angles_x *= -1;
+ makevectors(spider.angles);
+
+ //ad = player.v_angle - (spider.tur_head.angles + spider.angles);
+ ad = player.v_angle - (spider.tur_head.angles + spider.angles);
+
+ // Rotate head
+ ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") / server_fps;
+ ftmp2 = ftmp * -1;
+ spider.tur_head.angles_y += bound(ftmp2,shortangle_f(ad_y,spider.tur_head.angles_y),ftmp);
+ spider.tur_head.angles_y = bound(cvar("g_vehicle_spiderbot_head_turnlimit") * -1,spider.tur_head.angles_y,cvar("g_vehicle_spiderbot_head_turnlimit"));
+
+ // Pitch head
+ ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") / server_fps;
+ ftmp2 = ftmp * -1;
+ spider.tur_head.angles_x += bound(ftmp2,shortangle_f(ad_x,spider.tur_head.angles_x),ftmp);
+ spider.tur_head.angles_x = bound(cvar("g_vehicle_spiderbot_head_pitchlimit_down"),spider.tur_head.angles_x,cvar("g_vehicle_spiderbot_head_pitchlimit_up"));
+
+ spider.tur_head.angles_x *= -1;
+ spider.angles_x *= -1;
+ //player.angles_x *= -1;
+
+ // Turn Body
+ ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
+ ftmp2 = ftmp * -1;
+ ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
+
+ self = spider;
+ if(spider.flags & FL_ONGROUND)
+ {
+ if(player.BUTTON_JUMP)
+ {
+ player.BUTTON_JUMP = 0;
+ spider.anim_start = MODEL_SPIDERBOT_JUMP_START;
+ spider.anim_end = MODEL_SPIDERBOT_JUMP_END;
+ spider.velocity = v_forward * 700 + v_up * 600;
+ }
+ else
+ {
+ if(vlen(player.movement) == 0)
+ {
+ movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+ spider.anim_start = 0;
+ spider.anim_end = 0;
+ }
+ else
+ {
+ spider.angles_y = safeangle(spider.angles_y + ftmp);
+ spider.tur_head.angles_y -= ftmp;
+
+ if(player.movement_x != 0)
+ {
+ if(player.movement_x > 0)
+ {
+ player.movement_x = 1;
+ spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
+ spider.anim_end = MODEL_SPIDERBOT_FORWARD_END;
+ }
+ else if(player.movement_x < 0)
+ {
+ player.movement_x = -1;
+ spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
+ spider.anim_end = MODEL_SPIDERBOT_BACKWARDS_END;
+
+ }
+ player.movement_y = 0;
+ movelib_move_simple(normalize(v_forward * player.movement_x),cvar("g_vehicle_spiderbot_speed_walk"),cvar("g_vehicle_spiderbot_movement_inertia"));
+ }
+ else if(player.movement_y != 0)
+ {
+ if(player.movement_y < 0)
+ {
+ player.movement_y = -1;
+ spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
+ spider.anim_end = MODEL_SPIDERBOT_LEFT_END;
+ }
+ else if(player.movement_y > 0)
+ {
+ player.movement_y = 1;
+ spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
+ spider.anim_end = MODEL_SPIDERBOT_RIGHT_END;
+ }
+ movelib_move_simple(normalize(v_right * player.movement_y),cvar("g_vehicle_spiderbot_speed_strafe"),cvar("g_vehicle_spiderbot_movement_inertia"));
+ }
+
+ }
+ }
+ movelib_groundalign4point(300,100,0.25);
+ }
+
+ anim_do();
+ spiderbot_miniguns_do();
+ spiderbot_rocket_do();
+ vehicle_stdproc_regen();
+
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ player.rockets = spider.tur_head.frame;
+
+ if(spider.gun2.cnt <= time)
+ player.rockets_reload = 1;
+ else
+ player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
+
+ self = player;
+
+ setorigin(player,spider.origin + '0 0 64');
+ player.velocity = spider.velocity;
+
+ return 1;
+}
+
+void spiderbot_think()
+{
+ if(self.flags & FL_ONGROUND)
+ {
+ movelib_beak_simple(cvar("g_vehicle_spiderbot_speed_stop"));
+ //movelib_groundalign4point(300,100);
+ }
+
+ self.nextthink = time;
+}
+
+void spiderbot_enter()
+{
+ self.owner = other;
+
+ self.event_damage = vehicle_stdproc_damage ;
+ self.colormap = self.owner.colormap;
+ self.tur_head.colormap = self.owner.colormap;
+ self.vehicle_hudmodel.viewmodelforclient = self.owner;
+ self.nextthink = 0;
+ self.owner.angles = self.angles;
+ self.owner.takedamage = DAMAGE_NO;
+ self.owner.solid = SOLID_NOT;
+ self.owner.movetype = MOVETYPE_NOCLIP;
+ self.owner.alpha = -1;
+ self.owner.PlayerPhysplug = spiderbot_pplug;
+ self.owner.vehicle = self;
+ self.owner.event_damage = SUB_Null;
+ self.owner.hud = HUD_SPIDEBOT;
+ self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_spiderbot_health"));
+ self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_spiderbot_shield"));
+ self.team = self.owner.team;
+
+ //setorigin(self.owner,self.origin);
+ //setattachment(self.owner,self,"");
+ //setorigin(self.owner,'0 0 0');
+
+ msg_entity = other;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
+ WriteAngle(MSG_ONE, self.tur_head.angles_x + self.angles_x); // tilt
+ WriteAngle(MSG_ONE, self.tur_head.angles_y + self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ //WriteAngle(MSG_ONE, self.tur_head.angles_z + self.angles_z); // roll
+
+ //self.owner.view_ofs = '0 0 0';
+ //self.tur_head.nodrawtoclient = self.owner;
+}
+
+void spiderbot_exit(float eject)
+{
+ entity e;
+
+ e = findchain(classname,"spiderbot_rocket");
+ while(e)
+ {
+ if(e.owner == self.owner)
+ {
+ e.realowner = self.owner;
+ e.owner = world;
+ //e.solid = SOLID_BBOX;
+ //e.think = SUB_Null;
+ //e.nextthink = -1;
+ }
+ e = e.chain;
+ }
+
+ self.velocity = '0 0 0';
+
+ msg_entity = self.owner;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.owner);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
+ WriteAngle(MSG_ONE, 0); // tilt
+ WriteAngle(MSG_ONE, self.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+
+ //setattachment(self.owner,world,"");
+ self.think = spiderbot_think;
+ self.nextthink = time;
+ self.owner.takedamage = DAMAGE_AIM;
+ self.owner.solid = SOLID_SLIDEBOX;
+ self.owner.movetype = MOVETYPE_WALK;
+
+ setsize(self.owner,PL_MIN,PL_MAX);
+
+ self.owner.alpha = 1;
+ self.owner.PlayerPhysplug = SUB_Null;
+ self.owner.vehicle = world;
+ self.owner.view_ofs = PL_VIEW_OFS;
+ self.owner.hud = HUD_NORMAL;
+ self.owner.event_damage = PlayerDamage;
+
+ self.colormap = 1024;
+ self.tur_head.colormap = 1024;
+ self.team = -1;
+
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ self.tur_head.nodrawtoclient = self;
+
+ setattachment(self.owner,world,"");
+
+ makevectors(self.angles);
+ if(eject)
+ {
+ setorigin(self.owner,self.origin + v_forward * 100 + '0 0 64');
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ }
+ else
+ setorigin(self.owner,self.origin - v_forward * 200 + '0 0 64');
+
+ self.owner = world;
+}
+
+void spiderbot_touch()
+{
+ if(self.owner)
+ {
+ if(vlen(self.velocity) == 0)
+ return;
+
+ if(other.classname != "player")
+ return;
+
+ //todo: add check for velocity here (so we dont cush players runing onto us from behind)
+
+ Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_TURRET,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
+ return;
+ }
+
+ if(other.classname != "player")
+ return;
+
+ if(other.deadflag != DEAD_NO)
+ return;
+
+ if(other.vehicle != world)
+ return;
+
+ spiderbot_enter();
+}
+
+float spiderbot_customizeentityforclient()
+{
+ if(self.deadflag == DEAD_DEAD)
+ return FALSE;
+
+ return TRUE;
+}
+
+//void spiderbot_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
+void spiderbot_spawn()
+{
+ self.think = spiderbot_think;
+ self.nextthink = time;
+
+ self.vehicle_health = CCVAR("_health");
+ self.vehicle_shield = CCVAR("_shield");
+ self.event_damage = vehicle_stdproc_damage;
+ self.iscreature = TRUE;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.touch = spiderbot_touch;
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+ self.tur_head.angles = '0 0 0';
+ self.colormap = 1024;
+ self.tur_head.colormap = 1024;
+ self.deadflag = DEAD_NO;
+ self.bot_attack = TRUE;
+
+ setsize(self,spiderbot_MIN,spiderbot_MAX);
+ setorigin(self,self.tur_aimpos);
+ pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+}
+
+void spiderbot_blowup()
+{
+ sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+ RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_TURRET, world);
+
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+ self.nextthink = time + 10;
+ self.think = spiderbot_spawn;
+
+ setorigin(self,self.tur_aimpos);
+}
+
+void spiderbot_die()
+{
+
+ self.health = 0;
+ self.event_damage = SUB_Null;
+ self.iscreature = FALSE;
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.touch = SUB_Null;
+ self.nextthink = time + random() * 2;
+ self.think = spiderbot_blowup;
+ self.deadflag = DEAD_DEAD;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ self.frame = 0;
+ self.tur_head.frame = 0;
+
+}
+
+void vewhicle_spiderbot_dinit()
+{
+
+ server_fps = (1 / sys_ticrate);
+
+ addstat(STAT_HUD, AS_INT, hud);
+ addstat(STAT_SPIDERBOT_ROCKETS, AS_INT, rockets);
+ addstat(STAT_SPIDERBOT_RELOAD, AS_FLOAT, rockets_reload);
+ addstat(STAT_SPIDERBOT_HEAT, AS_FLOAT, vehicle_heat);
+ addstat(STAT_SPIDERBOT_HEALTH, AS_FLOAT, vehicle_health);
+ addstat(STAT_SPIDERBOT_SHIELD, AS_FLOAT, vehicle_shield);
+
+ if (self.netname == "") self.netname = "spiderbot";
+
+ self.tur_head = spawn();
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+ self.vehicle_viewport = spawn();
+ self.gravity = 2;
+ self.vehicle_hudmodel = spawn();
+ self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN;
+ self.cvar_basename = "g_vehicle_spiderbot";
+
+ setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
+ setmodel (self.vehicle_viewport, "models/null.md3");
+ setmodel(self,"models/spiderbot/spiderbot.dpm");
+ setmodel(self.tur_head,"models/spiderbot/spiderbot_top.dpm");
+ setmodel(self.gun1,"models/spiderbot/spiderbot_barrels.dpm");
+ setmodel(self.gun2,"models/spiderbot/spiderbot_barrels.dpm");
+
+ setattachment(self.tur_head,self,"tag_head");
+ setattachment(self.vehicle_hudmodel,self.tur_head,"");
+ setattachment(self.vehicle_viewport,self.vehicle_hudmodel,"");
+ setattachment(self.gun1,self.tur_head,"tag_hardpoint01");
+ setattachment(self.gun2,self.tur_head,"tag_hardpoint02");
+
+ self.tur_head.owner = self;
+ self.customizeentityforclient = spiderbot_customizeentityforclient;
+
+ setorigin(self.vehicle_viewport,'35 0 -14');
+ self.tur_aimpos = self.origin;
+ spiderbot_spawn();
+
+ self.vehicle_die = spiderbot_die;
+ self.vehicle_exit = spiderbot_exit;
+}
+
+void spawnfunc_vehicle_spiderbot()
+{
+ // g_turrets_common_precash();
+
+ precache_model ( "models/spiderbot/cr.md3");
+ precache_model ( "models/vhshield.md3");
+ precache_model ( "models/spiderbot/cp.md3");
+ precache_model ( "models/spiderbot/spiderbot.dpm");
+ precache_model ( "models/spiderbot/spiderbot_top.dpm");
+ precache_model ( "models/spiderbot/spiderbot_barrels.dpm");
+
+ precache_model ( "models/turrets/rocket.md3");
+ precache_sound ( "weapons/rocket_impact.wav" );
+
+ self.team = -1;
+ self.think = vewhicle_spiderbot_dinit;
+ self.nextthink = time + 0.5;
+}
Property changes on: trunk/data/qcsrc/server/vehicles/spiderbot.qc
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/data/qcsrc/server/vehicles/vehicles.qc
===================================================================
--- trunk/data/qcsrc/server/vehicles/vehicles.qc 2009-06-30 14:36:36 UTC (rev 7131)
+++ trunk/data/qcsrc/server/vehicles/vehicles.qc 2009-06-30 14:41:34 UTC (rev 7132)
@@ -1,183 +1,183 @@
-void vehicle_stdproc_enter()
-{
- self.owner = other;
-
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
- WriteAngle(MSG_ONE, self.vehicle_viewport.angles_x + self.angles_x); // tilt
- WriteAngle(MSG_ONE, self.vehicle_viewport.angles_y + self.angles_y); // yaw
- WriteAngle(MSG_ONE, self.vehicle_viewport.angles_z + self.angles_z); // flip
-
- //setattachment(other,self,"");
- self.nextthink = 0;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.alpha = -1;
- //self.owner.PlayerPhysplug = spiderbot_pplug;
- self.owner.vehicle = self;
- self.owner.event_damage = SUB_Null;
- self.owner.vehicle_health = (self.health / cvar("g_vehicle_spiderbot_health"));
- self.owner.hud = HUD_SPIDEBOT;
- self.colormap = self.owner.colormap;
- self.tur_head.colormap = self.owner.colormap;
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
- //self.tur_head.nodrawtoclient = self.owner;
-
-
-}
-
-void vehicle_stdproc_exit(float eject)
-{
- self.velocity = '0 0 0';
-
- msg_entity = self.owner;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, self.owner);
-
- //setattachment(self.owner,world,"");
- //self.think = spiderbot_think;
- //self.nextthink = time;
-
- self.owner.takedamage = DAMAGE_AIM;
- self.owner.solid = SOLID_SLIDEBOX;
- self.owner.alpha = 1;
- self.owner.PlayerPhysplug = SUB_Null;
- self.owner.vehicle = world;
- self.owner.view_ofs = PL_VIEW_OFS;
- self.owner.hud = HUD_NORMAL;
- self.owner.event_damage = PlayerDamage;
- self.colormap = 1024;
- self.tur_head.colormap = 1024;
- self.vehicle_hudmodel.viewmodelforclient = self;
- //self.tur_head.nodrawtoclient = self;
-
- if(eject)
- {
- makevectors(self.angles);
- setorigin(self.owner,self.origin + v_forward * 100);
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- }
- else
- setorigin(self.owner,self.origin - v_forward * 200);
-
- self.owner = world;
-}
-
-void vehicle_stdproc_regen()
-{
- float smax,hmax;
-
- smax = CCVAR("_shield");
- hmax = CCVAR("_health");
-
- if(self.vehicle_flags & VHF_HASSHIELD)
- if(self.vehicle_flags & VHF_SHIELDREGEN)
- if(self.vehicle_shield < smax)
- if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
- {
- self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);
-
- if(self.owner)
- self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
- }
-
- if(self.vehicle_flags & VHF_HEALTHREGEN)
- if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
- if(self.vehicle_health < hmax)
- {
- self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);
-
- if(self.owner)
- self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
- }
-}
-
-void shieldhit_think()
-{
- self.alpha = self.alpha - 0.125;
- if not(self.alpha <= 0)
- {
- self.nextthink = time;
- }
+void vehicle_stdproc_enter()
+{
+ self.owner = other;
+
+ msg_entity = other;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.vehicle_viewport);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ WriteAngle(MSG_ONE, self.vehicle_viewport.angles_x + self.angles_x); // tilt
+ WriteAngle(MSG_ONE, self.vehicle_viewport.angles_y + self.angles_y); // yaw
+ WriteAngle(MSG_ONE, self.vehicle_viewport.angles_z + self.angles_z); // flip
+
+ //setattachment(other,self,"");
+ self.nextthink = 0;
+ self.owner.takedamage = DAMAGE_NO;
+ self.owner.solid = SOLID_NOT;
+ self.owner.alpha = -1;
+ //self.owner.PlayerPhysplug = spiderbot_pplug;
+ self.owner.vehicle = self;
+ self.owner.event_damage = SUB_Null;
+ self.owner.vehicle_health = (self.health / cvar("g_vehicle_spiderbot_health"));
+ self.owner.hud = HUD_SPIDEBOT;
+ self.colormap = self.owner.colormap;
+ self.tur_head.colormap = self.owner.colormap;
+ self.vehicle_hudmodel.viewmodelforclient = self.owner;
+ //self.tur_head.nodrawtoclient = self.owner;
+
+
+}
+
+void vehicle_stdproc_exit(float eject)
+{
+ self.velocity = '0 0 0';
+
+ msg_entity = self.owner;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, self.owner);
+
+ //setattachment(self.owner,world,"");
+ //self.think = spiderbot_think;
+ //self.nextthink = time;
+
+ self.owner.takedamage = DAMAGE_AIM;
+ self.owner.solid = SOLID_SLIDEBOX;
+ self.owner.alpha = 1;
+ self.owner.PlayerPhysplug = SUB_Null;
+ self.owner.vehicle = world;
+ self.owner.view_ofs = PL_VIEW_OFS;
+ self.owner.hud = HUD_NORMAL;
+ self.owner.event_damage = PlayerDamage;
+ self.colormap = 1024;
+ self.tur_head.colormap = 1024;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ //self.tur_head.nodrawtoclient = self;
+
+ if(eject)
+ {
+ makevectors(self.angles);
+ setorigin(self.owner,self.origin + v_forward * 100);
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ }
+ else
+ setorigin(self.owner,self.origin - v_forward * 200);
+
+ self.owner = world;
+}
+
+void vehicle_stdproc_regen()
+{
+ float smax,hmax;
+
+ smax = CCVAR("_shield");
+ hmax = CCVAR("_health");
+
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ if(self.vehicle_shield < smax)
+ if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
+ {
+ self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);
+
+ if(self.owner)
+ self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+ }
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
+ if(self.vehicle_health < hmax)
+ {
+ self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);
+
+ if(self.owner)
+ self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
+ }
+}
+
+void shieldhit_think()
+{
+ self.alpha = self.alpha - 0.125;
+ if not(self.alpha <= 0)
+ {
+ self.nextthink = time;
+ }
else
{
- setmodel(self,"");
- self.alpha = -1;
- }
- //self.think = SUB_Remove;
-}
-
-void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
-{
-
- float ddmg_take;
-
- self.dmg_time = time;
-
- if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
- {
- if not (self.tur_head.enemy)
- self.tur_head.enemy = spawn();
-
- entity sh;
-
- sh = self.tur_head.enemy;
- sh.colormod = '1 1 1';
- sh.alpha = 0.5;
- sh.scale = (128 / vlen(self.maxs - self.mins))*2;
- //sh.scale = 1.25;
-
- sh.effects = EF_LOWPRECISION;
- sh.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
-
- setmodel(sh,"models/vhshield.md3");
- setattachment(sh,self,"");
- sh.think = shieldhit_think;
- sh.nextthink = time;
-
-
- self.vehicle_shield -= damage;
- if(self.vehicle_shield < 0)
- {
- sh.colormod = '10 0 -1';
- ddmg_take = fabs(self.vehicle_shield);
- self.vehicle_shield = 0;
-
- self.vehicle_health -= ddmg_take;
- }
- }
- else
- self.vehicle_health -= damage;
-
-
- if(self.owner)
- {
- self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
-
- if(self.vehicle_flags & VHF_HASSHIELD)
- self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
-
- }
-
- if(self.vehicle_health <= 0)
- {
- if(self.owner)
- self.vehicle_exit(VHEF_EJECT);
-
- self.vehicle_die();
- }
-
-
-}
-
-void bugmenot()
-{
- self.vehicle_exit = self.vehicle_exit;
- self.vehicle_enter = self.vehicle_exit;
- self.vehicle_die = self.vehicle_exit;
- self.vehicle_spawn = self.vehicle_exit;
- self.vehicle_message = self.vehicle_exit;
-}
+ setmodel(self,"");
+ self.alpha = -1;
+ }
+ //self.think = SUB_Remove;
+}
+
+void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+
+ float ddmg_take;
+
+ self.dmg_time = time;
+
+ if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
+ {
+ if not (self.tur_head.enemy)
+ self.tur_head.enemy = spawn();
+
+ entity sh;
+
+ sh = self.tur_head.enemy;
+ sh.colormod = '1 1 1';
+ sh.alpha = 0.5;
+ sh.scale = (128 / vlen(self.maxs - self.mins))*2;
+ //sh.scale = 1.25;
+
+ sh.effects = EF_LOWPRECISION;
+ sh.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
+
+ setmodel(sh,"models/vhshield.md3");
+ setattachment(sh,self,"");
+ sh.think = shieldhit_think;
+ sh.nextthink = time;
+
+
+ self.vehicle_shield -= damage;
+ if(self.vehicle_shield < 0)
+ {
+ sh.colormod = '10 0 -1';
+ ddmg_take = fabs(self.vehicle_shield);
+ self.vehicle_shield = 0;
+
+ self.vehicle_health -= ddmg_take;
+ }
+ }
+ else
+ self.vehicle_health -= damage;
+
+
+ if(self.owner)
+ {
+ self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
+
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+
+ }
+
+ if(self.vehicle_health <= 0)
+ {
+ if(self.owner)
+ self.vehicle_exit(VHEF_EJECT);
+
+ self.vehicle_die();
+ }
+
+
+}
+
+void bugmenot()
+{
+ self.vehicle_exit = self.vehicle_exit;
+ self.vehicle_enter = self.vehicle_exit;
+ self.vehicle_die = self.vehicle_exit;
+ self.vehicle_spawn = self.vehicle_exit;
+ self.vehicle_message = self.vehicle_exit;
+}
Property changes on: trunk/data/qcsrc/server/vehicles/vehicles.qc
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the nexuiz-commits
mailing list