[nexuiz-commits] r8223 - in branches/nexuiz-2.0: . Docs data data/gfx/menu/silver data/models data/qcsrc/client data/qcsrc/common data/qcsrc/menu/nexuiz data/qcsrc/server data/qcsrc/server/monsters data/qcsrc/server/tturrets/include data/qcsrc/server/tturrets/system data/qcsrc/server/tturrets/units data/qcsrc/server/vehicles data/textures/common
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Nov 7 12:17:43 EST 2009
Author: div0
Date: 2009-11-07 12:17:43 -0500 (Sat, 07 Nov 2009)
New Revision: 8223
Added:
branches/nexuiz-2.0/data/models/monsters/
branches/nexuiz-2.0/data/models/vehicles/
branches/nexuiz-2.0/data/qcsrc/server/monsters/monster_zombie.qc
branches/nexuiz-2.0/data/textures/common/caulk.tga
branches/nexuiz-2.0/data/textures/common/clip.tga
branches/nexuiz-2.0/data/textures/common/donotenter.tga
branches/nexuiz-2.0/data/textures/common/full_clip.tga
branches/nexuiz-2.0/data/textures/common/hint.tga
branches/nexuiz-2.0/data/textures/common/nodraw.tga
branches/nexuiz-2.0/data/textures/common/origin.tga
branches/nexuiz-2.0/data/textures/common/trigger.tga
Removed:
branches/nexuiz-2.0/data/models/racers/
branches/nexuiz-2.0/data/models/spiderbot/
branches/nexuiz-2.0/data/qcsrc/server/server.cbp
Modified:
branches/nexuiz-2.0/.patchsets
branches/nexuiz-2.0/Docs/eventlog.txt
branches/nexuiz-2.0/data/ctfscoring-div0.cfg
branches/nexuiz-2.0/data/gfx/menu/silver/skinvalues.txt
branches/nexuiz-2.0/data/gfx/menu/silver/tooltip.tga
branches/nexuiz-2.0/data/qcsrc/client/View.qc
branches/nexuiz-2.0/data/qcsrc/common/constants.qh
branches/nexuiz-2.0/data/qcsrc/common/util.qc
branches/nexuiz-2.0/data/qcsrc/common/util.qh
branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/credits.c
branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/slider_decibels.c
branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
branches/nexuiz-2.0/data/qcsrc/server/defs.qh
branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
branches/nexuiz-2.0/data/qcsrc/server/ipban.qc
branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
branches/nexuiz-2.0/data/qcsrc/server/movelib.qc
branches/nexuiz-2.0/data/qcsrc/server/progs.src
branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc
branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc
branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh
branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
branches/nexuiz-2.0/data/qcsrc/server/w_fireball.qc
branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
branches/nexuiz-2.0/data/textures/common/antiportal.tga
branches/nexuiz-2.0/data/textures/common/forcecaulk.tga
branches/nexuiz-2.0/data/textures/common/invisible.tga
branches/nexuiz-2.0/data/vehicle_racer.cfg
branches/nexuiz-2.0/data/vehicle_spiderbot.cfg
Log:
r8202 | m0rfar | 2009-11-01 15:33:53 -0500 (Sun, 01 Nov 2009) | 1 line
silver menuskin tweak
r8203 | div0 | 2009-11-03 15:39:30 -0500 (Tue, 03 Nov 2009) | 2 lines
fix a pseudo leak
r8204 | tzork | 2009-11-04 08:03:02 -0500 (Wed, 04 Nov 2009) | 1 line
New DEATH_'s
r8205 | tzork | 2009-11-04 08:06:55 -0500 (Wed, 04 Nov 2009) | 1 line
Vehicle updates.
r8206 | tzork | 2009-11-04 08:17:39 -0500 (Wed, 04 Nov 2009) | 1 line
Minor turret tweaks.
r8207 | tzork | 2009-11-04 08:27:14 -0500 (Wed, 04 Nov 2009) | 1 line
lib updates
r8208 | tzork | 2009-11-04 08:32:25 -0500 (Wed, 04 Nov 2009) | 1 line
Remove code::blocks project file, its never in sync.
r8209 | tzork | 2009-11-04 08:37:21 -0500 (Wed, 04 Nov 2009) | 1 line
monster_zombie (not enabled by default, -DMONSTES_ENABLED to enable)
r8210 | tzork | 2009-11-04 08:42:20 -0500 (Wed, 04 Nov 2009) | 1 line
New editor images for some common/* shaders
r8211 | div0 | 2009-11-04 10:20:03 -0500 (Wed, 04 Nov 2009) | 2 lines
updated div0 scorign
r8212 | samual | 2009-11-04 11:24:20 -0500 (Wed, 04 Nov 2009) | 1 line
Remove the dark background of the listbox with the credits dialog (It doesn't look right with it)
r8213 | div0 | 2009-11-05 14:21:31 -0500 (Thu, 05 Nov 2009) | 2 lines
add a fteqcc bug test case
r8214 | div0 | 2009-11-05 15:25:46 -0500 (Thu, 05 Nov 2009) | 2 lines
don't guide rockets when holding secondary
r8215 | div0 | 2009-11-05 15:31:36 -0500 (Thu, 05 Nov 2009) | 2 lines
do not do laserplay stuff if damage is <= 0
r8216 | tzork | 2009-11-05 19:58:47 -0500 (Thu, 05 Nov 2009) | 1 line
VEHICLES_ENABLED not supposed to be #defined by default (yet).
r8217 | div0 | 2009-11-06 14:12:57 -0500 (Fri, 06 Nov 2009) | 2 lines
use glowmod for nexuiz 2.6 and above (checked using gameversion cvar)
r8218 | div0 | 2009-11-06 14:44:36 -0500 (Fri, 06 Nov 2009) | 2 lines
speed up exp function ;)
r8219 | div0 | 2009-11-06 14:56:01 -0500 (Fri, 06 Nov 2009) | 2 lines
float2range11 :P
Modified: branches/nexuiz-2.0/.patchsets
===================================================================
--- branches/nexuiz-2.0/.patchsets 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/.patchsets 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,2 +1,2 @@
master = svn://svn.icculus.org/nexuiz/trunk
-revisions_applied = 1-7945,7948-7948,7951-8199
+revisions_applied = 1-7945,7948-7948,7951-8219
Modified: branches/nexuiz-2.0/Docs/eventlog.txt
===================================================================
--- branches/nexuiz-2.0/Docs/eventlog.txt 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/Docs/eventlog.txt 2009-11-07 17:17:43 UTC (rev 8223)
@@ -148,6 +148,10 @@
10014 = mirror damage
10015 = g_touchexplode
10100 = turret
+ 10150 = spiderbot miniguns
+ 10151 = spiderbot rocket
+ 10152 = spiderbot, cushed by
+ 10300 = custom deathmessage
weapon death flags are:
256 = secondary fire
Modified: branches/nexuiz-2.0/data/ctfscoring-div0.cfg
===================================================================
--- branches/nexuiz-2.0/data/ctfscoring-div0.cfg 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/ctfscoring-div0.cfg 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,38 +1,38 @@
set g_ctf_flagscore_pickup_base 0
-set g_ctf_flagscore_pickup_dropped_early 3
-set g_ctf_flagscore_pickup_dropped_late 3
+set g_ctf_flagscore_pickup_dropped_early 1
+set g_ctf_flagscore_pickup_dropped_late 1
set g_ctf_flagscore_capture 25
-set g_ctf_flagscore_kill 2
-set g_ctf_flagpenalty_drop 5
-set g_ctf_flagpenalty_suicidedrop 5
-set g_ctf_flagpenalty_returned 2
-set g_ctf_flagscore_return 3
+set g_ctf_flagscore_kill 3
+set g_ctf_flagpenalty_drop 2
+set g_ctf_flagpenalty_suicidedrop 2
+set g_ctf_flagpenalty_returned 1
+set g_ctf_flagscore_return 5 // not adjusted as this would suck for team game
set g_ctf_flagscore_return_rogue 10
-set g_ctf_flagscore_return_by_killer 3
+set g_ctf_flagscore_return_by_killer 5
set g_ctf_flagscore_return_rogue_by_killer 10
// succeeded capture (pickup capture) 25 (0 for enemy)
-// failed capture (pickup kill drop return) -7 (5 for enemy)
-// failed (shot into void) (pickup kill drop) -5 (2 for enemy)
-// capture retry (kill drop pickup) -2 (2 for enemy)
-// suicide, then retake (suicidedrop pickup) 0 (0 for enemy)
+// failed capture (pickup kill drop return) -3 (8 for enemy)
+// failed (shot into void) (pickup kill drop) -2 (3 for enemy)
+// capture retry (kill drop pickup) -1 (3 for enemy)
+// suicide, then retake (suicidedrop pickup) -1 (0 for enemy)
set g_ctf_personalscore_pickup_base 0
-set g_ctf_personalscore_pickup_dropped_early 3
-set g_ctf_personalscore_pickup_dropped_late 3
+set g_ctf_personalscore_pickup_dropped_early 1
+set g_ctf_personalscore_pickup_dropped_late 1
set g_ctf_personalscore_capture 25
-set g_ctf_personalscore_kill 2
-set g_ctf_personalpenalty_drop 5
-set g_ctf_personalpenalty_suicidedrop 5
-set g_ctf_personalpenalty_returned 2
-set g_ctf_personalscore_return 3
+set g_ctf_personalscore_kill 3
+set g_ctf_personalpenalty_drop 2
+set g_ctf_personalpenalty_suicidedrop 2
+set g_ctf_personalpenalty_returned 1
+set g_ctf_personalscore_return 2 // lowered so it's better if the killer does the return
set g_ctf_personalscore_return_rogue 10
-set g_ctf_personalscore_return_by_killer 3
+set g_ctf_personalscore_return_by_killer 5
set g_ctf_personalscore_return_rogue_by_killer 10
// AWIN = 25
-// AFAIL = -7
-// AFAILVOID = -5
-// DWIN = 5
-// ARETRY = -2
-// DRETRY = 2
+// AFAIL = -3
+// AFAILVOID = -2
+// DWIN = 8 (5 if someone else returned)
+// ARETRY = -1
+// DRETRY = 3
// ATAKE = 0
Modified: branches/nexuiz-2.0/data/gfx/menu/silver/skinvalues.txt
===================================================================
--- branches/nexuiz-2.0/data/gfx/menu/silver/skinvalues.txt 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/gfx/menu/silver/skinvalues.txt 2009-11-07 17:17:43 UTC (rev 8223)
@@ -135,8 +135,8 @@
ALPHA_LISTBOX_SELECTED 0.4
COLOR_LISTBOX_WAITING '1 0 0'
ALPHA_LISTBOX_WAITING 0.5
-COLOR_LISTBOX_BACKGROUND '0 0 0'
-ALPHA_LISTBOX_BACKGROUND 0
+COLOR_LISTBOX_BACKGROUND '0 0 0'
+ALPHA_LISTBOX_BACKGROUND 0.20
// item: map list
COLOR_MAPLIST_TITLE '1 1 1'
Modified: branches/nexuiz-2.0/data/gfx/menu/silver/tooltip.tga
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/models/monsters (from rev 8219, trunk/data/models/monsters)
Copied: branches/nexuiz-2.0/data/models/vehicles (from rev 8219, trunk/data/models/vehicles)
Modified: branches/nexuiz-2.0/data/qcsrc/client/View.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/client/View.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/client/View.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -5,6 +5,8 @@
#define rld_size_x 256
#define rld_size_y 16
+void CSQC_WAKIZASHI_HUD();
+
entity porto;
vector polyline[16];
float trace_dphitcontents;
@@ -588,13 +590,10 @@
hud = getstati(STAT_HUD);
if(hud == HUD_SPIDERBOT)
{
- vector sz;
CSQC_spider_HUD();
- sz = drawgetimagesize(SPIDER_CROSS);
- sz_x *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
- sz_y *= cvar_or("cl_vehicle_spiderbot_cross_size",1);
- drawpic('0.5 0 0' * (vid_conwidth - sz_x) + '0 0.5 0' * (vid_conheight - sz_y), SPIDER_CROSS, sz, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
}
+ else if(hud == HUD_WAKIZASHI)
+ CSQC_WAKIZASHI_HUD();
else
{
if(cvar("r_letterbox") == 0)
@@ -850,12 +849,17 @@
float rockets,reload,heat,hp,shield,i;
vector p,pp;
- rockets = getstati(STAT_SPIDERBOT_ROCKETS);
- heat = min(getstatf(STAT_SPIDERBOT_HEAT),1);
- reload = min(getstatf(STAT_SPIDERBOT_RELOAD),1);
- hp = min(getstatf(STAT_SPIDERBOT_HEALTH),1);
- shield = min(getstatf(STAT_SPIDERBOT_SHIELD),1);
+ p = drawgetimagesize(SPIDER_CROSS);
+ p_x *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+ p_y *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+ drawpic('0.5 0 0' * (vid_conwidth - p_x) + '0 0.5 0' * (vid_conheight - p_y), SPIDER_CROSS, p, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
+ hp = bound(0,getstatf(STAT_VEHICLESTAT_HEALTH), 1);
+ shield = bound(0,getstatf(STAT_VEHICLESTAT_SHIELD), 1);
+ heat = min(getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
+ rockets = getstati(STAT_VEHICLESTAT_AMMO2);
+ reload = min(getstatf(STAT_VEHICLESTAT_RELOAD2), 1);
+
// Draw health bar
p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
p = p + '0 1 0' * vid_conheight - '0 32 0';
@@ -906,6 +910,84 @@
}
}
+
+void CSQC_WAKIZASHI_HUD()
+{
+ // 0--1 floats. 1 = 100%, 0.6 = 50%.
+ float health, shield, energy, rockets;
+
+ float i;
+ vector p, pp;
+
+ p = drawgetimagesize(SPIDER_CROSS);
+ p_x *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+ p_y *= cvar_or("cl_vehicle_spiderbot_cross_size", 1);
+ drawpic('0.5 0 0' * (vid_conwidth - p_x) + '0 0.5 0' * (vid_conheight - p_y), SPIDER_CROSS, p, '1 1 1', cvar_or("cl_vehicle_spiderbot_cross_alpha",0.6), DRAWFLAG_NORMAL);
+
+/*
+const float STAT_VEHICLESTAT_HEALTH = 60;
+const float STAT_VEHICLESTAT_SHIELD = 61;
+const float STAT_VEHICLESTAT_ENERGY = 62;
+const float STAT_VEHICLESTAT_AMMO1 = 63;
+const float STAT_VEHICLESTAT_RELAOD1 = 64;
+const float STAT_VEHICLESTAT_AMMO2 = 65;
+const float STAT_VEHICLESTAT_RELOAD2 = 66;
+*/
+ health = min(getstatf(STAT_VEHICLESTAT_HEALTH), 1);
+ shield = min(getstatf(STAT_VEHICLESTAT_SHIELD), 1);
+ energy = min(getstatf(STAT_VEHICLESTAT_ENERGY), 1);
+ rockets = bound(0,getstatf(STAT_VEHICLESTAT_RELOAD1), 1);
+
+
+ p = '0.5 0 0' * (vid_conwidth - (rkt_size * 8));
+ p = p + '0 1 0' * vid_conheight - '0 32 0';
+
+ // Draw health bar
+ p_y += 8;
+ drawfill(p, '256 0 0' * health + '0 8 0' , '0 0.7 0', 0.75, DRAWFLAG_NORMAL);
+ p_x += 256 * health;
+ drawfill(p, '256 0 0' * (1 - health) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
+
+ // Draw shiled bar
+ p_x -= 256 * health;
+ p_y += 4;
+ drawfill(p, '256 0 0' * shield + '0 4 0' , '0.25 0.25 1', 0.5, DRAWFLAG_NORMAL);
+
+ // Draw energy
+ //p_x -= 256 * health;
+ p_y -= 8;
+ drawfill(p, '256 0 0' * energy + '0 4 0' , '1 1 1', 0.75, DRAWFLAG_NORMAL);
+
+ // Draw rockets bar
+ p_y += 12;
+ drawfill(p, '256 0 0' * rockets + '0 4 0' , '1 0 0', 0.75, DRAWFLAG_NORMAL);
+
+
+ /*
+ // Draw energy bar
+ p = '0.5 0 0' * (vid_conwidth - 256);
+ p = p + '0 1 0' * vid_conheight - '0 34 0';
+ drawfill(p, '256 0 0' * (1 - energy) + '0 2 0' ,'0 0 1', 0.5, DRAWFLAG_NORMAL);
+ p_x += 256 * (1 - energy);
+ drawfill(p, '256 0 0' * energy + '0 2 0' , '1 0 0', 0.5, DRAWFLAG_NORMAL);
+
+ // Draw rockets bar
+ p_y += 8;
+ drawfill(p, '256 0 0' * rockets + '0 8 0' , '1 0 0', 0.75, DRAWFLAG_NORMAL);
+ p_x += 256 * health;
+ drawfill(p, '256 0 0' * (1 - rockets) + '0 8 0' , '0 0 0', 0.75, DRAWFLAG_NORMAL);
+ */
+
+
+ if (sb_showscores)
+ {
+ Sbar_DrawScoreboard();
+ Sbar_DrawCenterPrint();
+ }
+
+}
+
+
void CSQC_common_hud(void)
{
// Sbar_SortFrags(); done in Sbar_Draw
@@ -922,6 +1004,10 @@
case HUD_SPIDERBOT:
CSQC_spider_HUD();
break;
+
+ case HUD_WAKIZASHI:
+ CSQC_WAKIZASHI_HUD();
+ break;
}
}
Modified: branches/nexuiz-2.0/data/qcsrc/common/constants.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/constants.qh 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/common/constants.qh 2009-11-07 17:17:43 UTC (rev 8223)
@@ -272,16 +272,17 @@
const float STAT_HUD = 50;
const float HUD_NORMAL = 0;
const float HUD_SPIDERBOT = 10;
+const float HUD_WAKIZASHI = 11;
-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_VEHICLESTAT_HEALTH = 60;
+const float STAT_VEHICLESTAT_SHIELD = 61;
+const float STAT_VEHICLESTAT_ENERGY = 62;
+const float STAT_VEHICLESTAT_AMMO1 = 63;
+const float STAT_VEHICLESTAT_RELOAD1 = 64;
+const float STAT_VEHICLESTAT_AMMO2 = 65;
+const float STAT_VEHICLESTAT_RELOAD2 = 66;
//const float STAT_SPIDERBOT_AIM 53 // compressShotOrigin
-
//const float STAT_SPIDERBOT_TARGET 54 // compressShotOrigin
@@ -441,8 +442,20 @@
float DEATH_TOUCHEXPLODE = 10015;
float DEATH_CHEAT = 10016;
float DEATH_FIRE = 10017;
-float DEATH_TURRET = 10100;
+float DEATH_TURRET = 10020;
+float DEATH_SBMINIGUN = 10030;
+float DEATH_SBROCKET = 10031;
+float DEATH_SBCRUSH = 10032;
+float DEATH_SBBLOWUP = 10033;
+
+float DEATH_WAKIGUN = 10040;
+float DEATH_WAKIROCKET = 10041;
+float DEATH_WAKIBLOWUP = 10042;
+
+float DEATH_CUSTOM = 10300;
+
+
float DEATH_WEAPONMASK = 0xFF;
float DEATH_HITTYPEMASK = 0x1F00; // which is WAY below 10000 used for normal deaths
float HITTYPE_SECONDARY = 0x100;
Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1651,11 +1651,14 @@
#endif
#endif
+float float2range11(float f)
+{
+ // continuous function mapping all reals into -1..1
+ return f / (fabs(f) + 1);
+}
+
float float2range01(float f)
{
// continuous function mapping all reals into 0..1
- if(f >= 0)
- return 1.0 - 0.5 / (1.0 + f);
- else
- return 0.0 + 0.5 / (1.0 - f);
+ return 0.5 + 0.5 * float2range11(f);
}
Modified: branches/nexuiz-2.0/data/qcsrc/common/util.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/common/util.qh 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/common/util.qh 2009-11-07 17:17:43 UTC (rev 8223)
@@ -198,4 +198,5 @@
// the NULL function
const var void func_null(void);
const var string string_null;
+float float2range11(float f);
float float2range01(float f);
Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/credits.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/credits.c 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/credits.c 2009-11-07 17:17:43 UTC (rev 8223)
@@ -12,6 +12,8 @@
ATTRIB(NexuizCreditsList, realUpperMargin, float, 0)
ATTRIB(NexuizCreditsList, bufferIndex, float, 0)
ATTRIB(NexuizCreditsList, scrolling, float, 0)
+
+ ATTRIB(NexuizListBox, alphaBG, float, 0)
ENDCLASS(NexuizCreditsList)
entity makeNexuizCreditsList();
#endif
Modified: branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/slider_decibels.c
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/slider_decibels.c 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/menu/nexuiz/slider_decibels.c 2009-11-07 17:17:43 UTC (rev 8223)
@@ -11,6 +11,9 @@
float exp(float x)
{
+ return pow(2.718281828459045, x);
+
+ /* wtf did I do here?
float i;
float t, s;
@@ -24,6 +27,7 @@
}
return s;
+ */
}
float ln(float x)
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -2404,7 +2404,11 @@
}
if(frametime)
+ {
+ if(cvar("gameversion") >= 20600) // only do this for 2.6 and above FIXME remove this check when making 2.6
+ self.glowmod = colormapPaletteColor(self.clientcolors & 0x0F, TRUE) * 2;
player_powerups();
+ }
if (self.deadflag != DEAD_NO)
{
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_physics.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -547,7 +547,11 @@
float buttons_prev;
float not_allowed_to_move;
string c;
-
+
+ if(self.PlayerPhysplug)
+ if(self.PlayerPhysplug())
+ return;
+
if(g_race || g_cts)
{
// if record times matter
@@ -631,10 +635,6 @@
}
else if(self.specialcommand_pos && (c != substring(specialcommand, self.specialcommand_pos - 1, 1)))
self.specialcommand_pos = 0;
-
- if(self.PlayerPhysplug)
- if(self.PlayerPhysplug())
- return;
if(!sv_maxidle_spectatorsareidle || self.movetype == MOVETYPE_WALK)
{
Modified: branches/nexuiz-2.0/data/qcsrc/server/defs.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/defs.qh 2009-11-07 17:17:43 UTC (rev 8223)
@@ -622,3 +622,5 @@
.entity clientdata;
.entity personal;
+
+string deathmessage;
Modified: branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/g_damage.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -236,6 +236,7 @@
s = "A corpse";
else
s = targ.netname;
+
a = attacker.netname;
if (targ == attacker)
@@ -376,7 +377,7 @@
if((cvar("sv_fragmessage_information_typefrag")) && (targ.BUTTON_CHAT)) {
centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, blood_message, "^1You typefragged ^7", s, GetAdvancedDeathReports(targ)));
centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, victim_message, "^1You were typefragged by ^7", a, GetAdvancedDeathReports(attacker)));
- } else {
+ } else {
centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, blood_message, "^4You fragged ^7", s, GetAdvancedDeathReports(targ)));
centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, victim_message, "^1You were fragged by ^7", a, GetAdvancedDeathReports(attacker)));
}
@@ -420,6 +421,22 @@
else
bprint("^1", s, "^1 ", substring(inflictor.message2, 0, p), a, "^1", substring(inflictor.message2, p+1, strlen(inflictor.message2) - (p+1)), "\n");
}
+ else if(deathtype == DEATH_SBCRUSH)
+ bprint ("^1",s, "^1 was crushed by ^1", a, "\n");
+ else if(deathtype == DEATH_SBMINIGUN)
+ bprint ("^1",s, "^1 got shredded by ^1", a, "\n");
+ else if(deathtype == DEATH_SBROCKET)
+ bprint ("^1",s, "^1 was blased to bits by ^1", a, "\n");
+ else if(deathtype == DEATH_SBBLOWUP)
+ bprint ("^1",s, "^1 got cought in the destruction of ^1", a, "'s vehicle\n");
+
+ else if(deathtype == DEATH_WAKIGUN)
+ bprint ("^1",s, "^1 was bolted down by ^1", a, "\n");
+ else if(deathtype == DEATH_WAKIROCKET)
+ bprint ("^1",s, "^1 could find no shelter from ^1", a, "'s rockets\n");
+ else if(deathtype == DEATH_WAKIBLOWUP)
+ bprint ("^1",s, "^1 dies when ^1", a, "'s wakizashi dies.\n");
+
else if(deathtype == DEATH_TURRET)
bprint ("^1",s, "^1 was pushed into the line of fire by ^1", a, "\n");
else if(deathtype == DEATH_TOUCHEXPLODE)
@@ -427,7 +444,9 @@
else if(deathtype == DEATH_CHEAT)
bprint ("^1",s, "^1 was unfairly eliminated by ^1", a, "\n");
else if (deathtype == DEATH_FIRE)
- bprint ("^1",s, "^1 was burnt to death by ^1", a, "\n");
+ bprint ("^1",s, "^1 was burnt to death by ^1", a, "\n");
+ else if (deathtype == DEATH_CUSTOM)
+ bprint ("^1",s, "^1 ", deathmessage, " by ^1", a, "\n");
else
bprint ("^1",s, "^1 was fragged by ", a, "\n");
}
@@ -555,6 +574,8 @@
bprint ("^1",s, "^1 is now conserved for centuries to come\n");
else if(deathtype == DEATH_TURRET)
bprint ("^1",s, "^1 was mowed down by a turret \n");
+ else if (deathtype == DEATH_CUSTOM)
+ bprint ("^1",s, "^1 ", deathmessage, "\n");
else if(deathtype == DEATH_TOUCHEXPLODE)
bprint ("^1",s, "^1 died in an accident\n");
else if(deathtype == DEATH_CHEAT)
@@ -582,9 +603,11 @@
LogDeath("accident", deathtype, targ, targ);
}
+
targ.death_origin = targ.origin;
if(targ != attacker)
targ.killer_origin = attacker.origin;
+
// FIXME: this should go in PutClientInServer
if (targ.killcount)
targ.killcount = 0;
Modified: branches/nexuiz-2.0/data/qcsrc/server/ipban.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/ipban.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/ipban.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -180,12 +180,12 @@
float i, n;
if(cvar_string("g_ban_sync_uri") == "")
- return;
+ goto killme;
if(cvar("g_ban_sync_interval") == 0) // < 0 is okay, it means "sync on level start only"
- return;
+ goto killme;
argc = tokenize_console(cvar_string("g_ban_sync_trusted_servers"));
if(argc == 0)
- return;
+ goto killme;
if(OnlineBanList_Servers)
strunzone(OnlineBanList_Servers);
@@ -212,6 +212,12 @@
if(cvar("g_ban_sync_interval") > 0)
self.nextthink = time + max(60, cvar("g_ban_sync_interval") * 60);
+ else
+ goto killme;
+ return;
+
+:killme
+ remove(self);
}
#define BAN_MAX 64
Modified: branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,3 +1,5 @@
+#message I can spam the compiler output too - and fteqcc sucks and always cuts off the last character
+
#define FOR_EACH_KH_KEY(v) for(v = kh_worldkeylist; v; v = v.kh_worldkeynext )
// #define KH_PLAYER_USE_ATTACHMENT
Copied: branches/nexuiz-2.0/data/qcsrc/server/monsters/monster_zombie.qc (from rev 8219, trunk/data/qcsrc/server/monsters/monster_zombie.qc)
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/monsters/monster_zombie.qc (rev 0)
+++ branches/nexuiz-2.0/data/qcsrc/server/monsters/monster_zombie.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -0,0 +1,555 @@
+//#define MONSTES_ENABLED
+#ifdef MONSTES_ENABLED
+
+#define zombie_anim_attackleap 0
+#define zombie_anim_attackrun1 1
+#define zombie_anim_attackrun2 2
+#define zombie_anim_attackrun3 3
+#define zombie_anim_attackstanding1 4
+#define zombie_anim_attackstanding2 5
+#define zombie_anim_attackstanding3 6
+#define zombie_anim_blockend 7
+#define zombie_anim_blockstart 8
+#define zombie_anim_deathback1 9
+#define zombie_anim_deathback2 10
+#define zombie_anim_deathback3 11
+#define zombie_anim_deathfront1 12
+#define zombie_anim_deathfront2 13
+#define zombie_anim_deathfront3 14
+#define zombie_anim_deathleft1 15
+#define zombie_anim_deathleft2 16
+#define zombie_anim_deathright1 17
+#define zombie_anim_deathright2 18
+#define zombie_anim_idle 19
+#define zombie_anim_painback1 20
+#define zombie_anim_painback2 21
+#define zombie_anim_painfront1 22
+#define zombie_anim_painfront2 23
+#define zombie_anim_runbackwards 24
+#define zombie_anim_runbackwardsleft 25
+#define zombie_anim_runbackwardsright 26
+#define zombie_anim_runforward 27
+#define zombie_anim_runforwardleft 28
+#define zombie_anim_runforwardright 29
+#define zombie_anim_spawn 30
+
+#define ZOMBIE_MIN '-18 -18 -25'
+#define ZOMBIE_MAX '18 18 47'
+
+#define ZV_IDLE 10
+
+#define ZV_PATH 100
+#define ZV_HUNT 200
+
+#define ZV_ATTACK_FIND 10
+#define ZV_ATTACK_RUN 20
+#define ZV_ATTACK_STAND 30
+
+#define ZV_PATH2 10000
+
+//.entity verbs_idle;
+//.entity verbs_attack;
+//.entity verbs_move;
+
+//.float state_timeout;
+//.void() monster_state;
+#define MONSTERFLAG_NORESPAWN 2
+
+void zombie_spawn();
+
+float zombie_scoretarget(entity trg)
+{
+ float tmp;
+ vector ang1;
+
+ if (trg.takedamage == DAMAGE_AIM)
+ if not (trg.flags & FL_NOTARGET)
+ if (trg.deadflag == DEAD_NO)
+ if (trg.team != self.team)
+ {
+ if((self.origin_z - trg.origin_z) < 128)
+ {
+ ang1 = normalize(self.origin - trg.origin);
+ tmp = vlen(ang1 - v_forward);
+ if(tmp > 1.5)
+ {
+ traceline(self.origin + '0 0 47',trg.origin + '0 0 32',MOVE_NORMAL,self);
+ if(trace_ent != trg)
+ return 0;
+
+ return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;
+ }
+ else if(self.enemy == trg)
+ return (cvar("g_monster_zombie_targetrange") - vlen(self.origin - trg.origin)) * tmp;
+ }
+ }
+
+ return 0;
+}
+
+void zombie_corpse_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ //dprint("zombie_corpse_damage\n");
+ Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
+
+ self.health -= damage;
+
+ if(self.health < 0)
+ {
+ Violence_GibSplash(self, 1, 1, attacker);
+ remove(self);
+ }
+}
+
+void zombie_die(vector dir)
+{
+ vector v;
+ float f;
+
+ entity dummy;
+
+ dummy = spawn();
+ setmodel(dummy,"models/monsters/zombie.dpm");
+ setorigin(dummy, self.origin);
+ dummy.velocity = self.velocity;
+ dummy.movetype = MOVETYPE_BOUNCE;
+ dummy.think = SUB_Remove;
+ dummy.nextthink = time + 3;
+ dummy.health = 50;
+ dummy.takedamage = DAMAGE_YES;
+ dummy.event_damage = zombie_corpse_damage;
+ dummy.solid = SOLID_CORPSE;
+ setsize(dummy,self.mins,self.maxs);
+
+ SUB_SetFade(dummy,time + 5,2);
+
+
+ v = normalize(self.origin - dir);
+ f = vlen(v_forward - v) - 1;
+ if(f > 0.5)
+ dummy.frame = zombie_anim_deathfront1 + rint(random() * 2);
+ else if(f < 0.5)
+ dummy.frame = zombie_anim_deathback1 + rint(random() * 2);
+ else
+ {
+ f = vlen(v_right - v) - 1;
+ if(f > 0.5)
+ dummy.frame = zombie_anim_deathright1 + rint(random() * 2);
+ else if(f < 0.5)
+ dummy.frame = zombie_anim_deathleft1 + rint(random() * 2);
+ }
+
+
+ if(self.spawnflags & MONSTERFLAG_NORESPAWN)
+ {
+ self.think = SUB_Remove;
+ self.nextthink = time;
+ return;
+ }
+
+ setmodel(self,"");
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.event_damage = SUB_Null;
+ self.enemy = world;
+ self.think = zombie_spawn;
+ self.nextthink = time + cvar("g_monster_zombie_respawntime");
+ self.pain_finished = self.nextthink;
+}
+
+void zombie_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+
+ vector v;
+ float f;
+
+ v = normalize(self.origin - hitloc);
+ f = vlen(v_forward - v) - 1;
+
+
+ self.health -= damage;
+ self.velocity = self.velocity + force;
+ if(self.health <= 0)
+ {
+ zombie_die(hitloc);
+ return;
+ }
+
+ Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
+
+ if (damage > 50)
+ Violence_GibSplash_At(hitloc, force * -0.1, 3, 1, self, attacker);
+ if (damage > 100)
+ Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, self, attacker);
+
+ if (time > self.pain_finished)
+ {
+ if(f < 0.5)
+ {
+ if(random() < 0.5)
+ self.frame = zombie_anim_painback1;
+ else
+ self.frame = zombie_anim_painback2;
+ }
+ else
+ {
+ if(random() < 0.5)
+ self.frame = zombie_anim_painfront1;
+ else
+ self.frame = zombie_anim_painfront2;
+ }
+
+ self.pain_finished = time + 0.36;
+ }
+}
+
+.vector bvec;
+.float bvec_time;
+
+void zombie_move()
+{
+ vector real_angle;
+ float vz, tdiff, tspeed;
+
+ tdiff = time - self.zoomstate;
+ tspeed = tdiff * cvar("g_monster_zombie_turnspeed");
+ vz = self.velocity_z;
+ self.zoomstate = time;
+
+ if(self.bvec_time < time)
+ {
+ self.bvec_time = time + 0.2;
+ self.bvec = steerlib_beamsteer(steerlib_attract2(self.moveto,0.5,500,0.95),512,32,34,64);
+ }
+
+ if(self.enemy)
+ self.moveto = self.enemy.origin;
+ else
+ self.moveto = self.origin + v_forward;
+
+ self.steerto = normalize(steerlib_attract2(self.moveto,0.5,500,0.95) + self.bvec);
+
+ self.angles_y = safeangle(self.angles_y);
+ real_angle = vectoangles(self.steerto) - self.angles;
+ self.angles_y += bound(-10, real_angle_y, 10);
+
+ if(vlen(self.origin - self.moveto) > 64)
+ {
+ movelib_move_simple(v_forward ,cvar("g_monster_zombie_movespeed"),0.6);
+ if(time > self.pain_finished)
+ if(self.attack_finished_single < time)
+ self.frame = zombie_anim_runforward;
+ }
+ else
+ {
+ movelib_beak_simple(cvar("g_monster_zombie_stopspeed"));
+ if(time > self.pain_finished)
+ if(self.attack_finished_single < time)
+ self.frame = zombie_anim_idle;
+ }
+
+ self.velocity_z = vz;
+ self.steerto = self.origin;
+}
+
+float zombie_verb_idle_roam(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+
+ if(self.enemy)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+
+ self.moveto = v_forward * 128;
+ self.steerto = v_forward; //steerlib_beamsteer(v_forward,512,32,34,64);
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_idle_stand(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+
+ if(self.enemy)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+
+ self.moveto = self.origin;
+ self.frame = zombie_anim_idle;
+ self.velocity = '0 0 0';
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_idle(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+
+ if(self.enemy)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+ float t;
+
+ t = cvar("g_monster_zombie_idle_timer_max") - cvar("g_monster_zombie_idle_timer_min");
+ t = cvar("g_monster_zombie_idle_timer_min") + (random() * t);
+
+ if(random() < 0.5)
+ verbstack_push(self.verbs_idle, zombie_verb_idle_roam, ZV_IDLE + 1, t, self);
+ else
+ verbstack_push(self.verbs_idle, zombie_verb_idle_stand, ZV_IDLE + 1, 0.1, self);
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+float zombie_verb_attack_findtarget(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+ if(self.enemy)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+
+ entity trg, best_trg;
+ float trg_score, best_trg_score;
+
+ trg = findradius(self.origin,cvar("g_monster_zombie_targetrange"));
+ while(trg)
+ {
+ trg_score = zombie_scoretarget(trg);
+ if(trg_score > best_trg_score)
+ {
+ best_trg = trg;
+ best_trg_score = trg_score;
+ }
+
+ trg = trg.chain;
+ }
+
+ if(best_trg)
+ {
+ self.enemy = best_trg;
+ dprint("Selected: ",best_trg.netname, " as target.\n");
+ }
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+void zombie_runattack_damage()
+{
+ entity oldself;
+ oldself = self;
+ self = self.owner;
+
+ if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_hitrange"))
+ return;
+
+ if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)
+ return;
+
+ Damage(self.enemy, self, self, cvar("g_monster_zombie_attack_run_damage"), DEATH_TURRET, self.enemy.origin, normalize(self.enemy.origin - self.origin) * cvar("g_monster_zombie_attack_run_force"));
+
+ self = oldself;
+ self.think = SUB_Remove;
+ self.nextthink = time;
+}
+
+float zombie_verb_attack_run(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+ if not (self.enemy)
+ return VS_CALL_NO;
+
+ if(self.attack_finished_single > time)
+ return VS_CALL_NO;
+
+ if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_run_range"))
+ return VS_CALL_NO;
+
+ if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.6)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+ entity pain;
+ pain = spawn();
+ pain.owner = self;
+ pain.think = zombie_runattack_damage;
+ pain.nextthink = time + cvar("g_monster_zombie_attack_run_delay");
+
+ self.attack_finished_single = time + 0.7;
+ self.frame = zombie_anim_attackrun1 + rint(random() * 2);
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+void zombie_standattack_damage()
+{
+ //entity oldself;
+ //oldself = self;
+ //self = self.owner;
+
+ setorigin(self,self.owner.origin + v_forward * 32);
+ RadiusDamage(self, self.owner, cvar("g_monster_zombie_attack_stand_damage"),cvar("g_monster_zombie_attack_stand_damage"),16,self, cvar("g_monster_zombie_attack_stand_force"),DEATH_TURRET,world);
+ //float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity)
+
+
+ //self = oldself;
+ self.think = SUB_Remove;
+ self.nextthink = time;
+}
+
+float zombie_verb_attack_stand(float eval)
+{
+ switch (eval)
+ {
+ case VCM_EVAL:
+ if not (self.enemy)
+ return VS_CALL_NO;
+
+ if(self.attack_finished_single > time)
+ return VS_CALL_NO;
+
+ if(vlen(self.origin - self.enemy.origin) > cvar("g_monster_zombie_attack_stand_range"))
+ return VS_CALL_NO;
+
+ if(vlen(normalize(self.origin - self.enemy.origin) - v_forward) < 1.8)
+ return VS_CALL_NO;
+
+ return verb.verb_static_value;
+
+ case VCM_DO:
+ entity pain;
+ pain = spawn();
+ pain.owner = self;
+ pain.think = zombie_runattack_damage;
+ pain.nextthink = time + cvar("g_monster_zombie_attack_stand_delay");
+
+ self.attack_finished_single = time + 0.7;
+ self.frame = zombie_anim_attackstanding1 + rint(random() * 1);
+ dprint("frame:",ftos(self.frame),"\n");
+
+ return VS_CALL_YES_DOING;
+ }
+
+ return VS_CALL_YES_DONE;
+}
+
+void zombie_think()
+{
+ self.angles_x *= -1;
+ makevectors(self.angles);
+ self.angles_x *= -1;
+
+ if (zombie_scoretarget(self.enemy) == 0)
+ self.enemy = world;
+
+ verbstack_pop(self.verbs_attack);
+ //verbstack_pop(self.verbs_move);
+
+ if not (self.enemy)
+ verbstack_pop(self.verbs_idle);
+
+ zombie_move();
+
+ if(self.enemy)
+ self.nextthink = time;
+ else
+ self.nextthink = time + 0.2;
+}
+
+void zombie_spawn()
+{
+ setmodel(self,"models/monsters/zombie.dpm");
+
+ self.solid = SOLID_BBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.event_damage = zombie_damage;
+ self.enemy = world;
+ self.frame = zombie_anim_spawn;
+ self.think = zombie_think;
+ self.nextthink = time + 2.1;
+ self.pain_finished = self.nextthink;
+ self.movetype = MOVETYPE_WALK;
+ self.health = cvar("g_monster_zombie_health");
+ self.velocity = '0 0 0';
+ self.angles = self.pos2;
+ self.moveto = self.origin;
+ self.flags = FL_MONSTER;
+
+ setorigin(self,self.pos1);
+ setsize(self,ZOMBIE_MIN,ZOMBIE_MAX);
+}
+
+
+void spawnfunc_monster_zombie()
+{
+ if not(cvar("g_monsters"))
+ {
+ remove(self);
+ return;
+ }
+
+ precache_model("models/monsters/zombie.dpm");
+
+
+ self.verbs_idle = spawn();
+ self.verbs_attack = spawn();
+
+ self.verbs_idle.owner = self;
+ self.verbs_attack.owner = self;
+
+ self.think = zombie_spawn;
+ self.nextthink = time + 2;
+
+ traceline(self.origin + '0 0 10', self.origin - '0 0 32', MOVE_WORLDONLY, self);
+
+ self.pos1 = trace_endpos;
+ self.pos2 = self.angles;
+ self.team = MAX_SHOT_DISTANCE -1;
+
+ verbstack_push(self.verbs_idle, zombie_verb_idle, ZV_IDLE,0 , self);
+
+ verbstack_push(self.verbs_attack, zombie_verb_attack_findtarget, ZV_ATTACK_FIND,0 , self);
+ verbstack_push(self.verbs_attack, zombie_verb_attack_run, ZV_ATTACK_RUN,0 , self);
+ verbstack_push(self.verbs_attack, zombie_verb_attack_stand, ZV_ATTACK_STAND,0 , self);
+
+}
+
+#endif // MONSTES_ENABLED
Modified: branches/nexuiz-2.0/data/qcsrc/server/movelib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/movelib.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/movelib.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -2,7 +2,7 @@
/**
Simulate drag
- self.velocity = movelib_vdrag(self.velocity,0.02,0.5);
+ self.velocity = movelib_dragvec(self.velocity,0.02,0.5);
**/
vector movelib_dragvec(float drag, float exp)
{
@@ -18,7 +18,7 @@
/**
Simulate drag
- self.velocity = movelib_vdrag(somespeed,0.01,0.7);
+ self.velocity *= movelib_dragflt(somespeed,0.01,0.7);
**/
float movelib_dragflt(float fspeed,float drag,float exp)
{
@@ -34,7 +34,7 @@
/**
Do a inertia simulation based on velocity.
Basicaly, this allows you to simulate loss of steering with higher speed.
- self.velocity = movelib_inertia_fromspeed(self.velocity,newvel,1000,0.1,0.9);
+ self.velocity = movelib_inertmove_byspeed(self.velocity,newvel,1000,0.1,0.9);
**/
vector movelib_inertmove_byspeed(vector vel_new, float vel_max,float newmin,float oldmax)
{
@@ -102,7 +102,7 @@
}
/*
-.float theMass;
+.float mass;
.float side_friction;
.float ground_friction;
.float air_friction;
@@ -137,9 +137,9 @@
old_speed = vlen(self.velocity);
old_dir = normalize(self.velocity);
- //ggravity = (sv_gravity / self.theMass) * '0 0 100';
- acceleration = (force / self.theMass) * dir;
- //acceleration -= old_dir * (old_speed / self.theMass);
+ //ggravity = (sv_gravity / self.mass) * '0 0 100';
+ acceleration = (force / self.mass) * dir;
+ //acceleration -= old_dir * (old_speed / self.mass);
acceleration -= ggravity;
if(self.waterlevel > 1)
@@ -165,6 +165,7 @@
{
self.velocity = self.velocity * (1 - blendrate) + (newdir * blendrate) * velo;
}
+
void movelib_beak_simple(float force)
{
float mspeed;
@@ -178,18 +179,21 @@
self.velocity_z = vz;
}
-
-void movelib_groundalign4point(float spring_length,float spring_up,float blendrate)
+/**
+Pitches and rolls the entity to match the gound.
+Yed need to set v_up and v_forward (generally by calling makevectors) before calling this.
+**/
+void movelib_groundalign4point(float spring_length, float spring_up, float blendrate)
{
- vector a,b,c,d,e,r,push_angle, ahead,side;
+ vector a, b, c, d, e, r, push_angle, ahead, side;
push_angle_y = 0;
r = (self.absmax + self.absmin) * 0.5 + (v_up * spring_up);
e = v_up * spring_length;
// Put springs slightly inside bbox
- ahead = v_forward * (self.maxs_x * 0.85);
- side = v_right * (self.maxs_y * 0.85);
+ ahead = v_forward * (self.maxs_x * 0.8);
+ side = v_right * (self.maxs_y * 0.8);
a = r + ahead + side;
b = r + ahead - side;
Modified: branches/nexuiz-2.0/data/qcsrc/server/progs.src
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/progs.src 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/progs.src 2009-11-07 17:17:43 UTC (rev 8223)
@@ -165,5 +165,5 @@
monsters/fight.qc
monsters/ai.qc
monsters/m_monsters.qc
-
+monsters/monster_zombie.qc
csqcprojectile.qc
Deleted: branches/nexuiz-2.0/data/qcsrc/server/server.cbp
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/server.cbp 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/server.cbp 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="server" />
- <Option pch_mode="2" />
- <Option compiler="quakec" />
- <Build>
- <Target title="Standard">
- <Option output="bin\Debug\server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="quakec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Extensions>
- <code_completion />
- <envvars />
- <debugger />
- <lib_finder disable_auto="1" />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
Modified: branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/steerlib.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -11,11 +11,13 @@
/**
Uniform push from a point
**/
+#define steerlib_push(point) normalize(self.origin - point)
+/*
vector steerlib_push(vector point)
{
return normalize(self.origin - point);
}
-
+*/
/**
Pull toward a point, The further away, the stronger the pull.
**/
@@ -156,6 +158,8 @@
float distance;
distance = max(vlen(self.origin - point),min_distance);
+ if (min_distance < distance)
+ return '0 0 0';
return dodge_dir * (min_distance/distance);
}
@@ -187,6 +191,36 @@
}
/**
+ flocking by .flock_id
+ Group will move towards the unified direction while keeping close to eachother.
+ xy only version (for ground movers).
+**/
+vector steerlib_flock2d(float radius, float standoff,float separation_force,float flock_force)
+{
+ entity flock_member;
+ vector push,pull;
+ float ccount;
+
+ flock_member = findradius(self.origin,radius);
+ while(flock_member)
+ {
+ if(flock_member != self)
+ if(flock_member.flock_id == self.flock_id)
+ {
+ ++ccount;
+ push = push + (steerlib_repell(flock_member.origin, standoff) * separation_force);
+ pull = pull + (steerlib_arrive(flock_member.origin + flock_member.velocity, radius) * flock_force);
+ }
+ flock_member = flock_member.chain;
+ }
+
+ push_z = 0;
+ pull_z = 0;
+
+ return push + (pull * (1 / ccount));
+}
+
+/**
All members want to be in the center, and keep away from eachother.
The furtehr form the center the more they want to be there.
@@ -220,6 +254,7 @@
/**
Steer towards the direction least obstructed.
Run four tracelines in a forward funnel, bias each diretion negative if something is found there.
+ You need to call makevectors() (or equivalent) before this function to set v_forward and v_right
**/
vector steerlib_traceavoid(float pitch,float length)
{
@@ -228,6 +263,7 @@
vector upwish,downwish,leftwish,rightwish;
vector v_left,v_down;
+
v_left = v_right * -1;
v_down = v_up * -1;
@@ -254,7 +290,6 @@
fdown_right = trace_fraction;
//te_lightning1(world,self.origin, trace_endpos);
-
upwish = v_up * (fup_left + fup_right);
downwish = v_down * (fdown_left + fdown_right);
leftwish = v_left * (fup_left + fdown_left);
@@ -266,7 +301,7 @@
/**
Steer towards the direction least obstructed.
- Run two tracelines in a forward trident, bias each diretion negative if something is found there.
+ Run tracelines in a forward trident, bias each direction negative if something is found there.
**/
vector steerlib_traceavoid_flat(float pitch, float length, vector vofs)
{
@@ -339,6 +374,7 @@
return 1;
}
+//#define BEAMSTEER_VISUAL
float beamsweep(vector from, vector dir,float length, float step,float step_up, float step_down)
{
float i;
@@ -369,10 +405,10 @@
if(beamsweep_badpoint(trace_endpos,0))
return i / length;
-
- //te_lightning1(world,a+u,b+u);
- //te_lightning1(world,b+u,b-d);
-
+#ifdef BEAMSTEER_VISUAL
+ te_lightning1(world,a+u,b+u);
+ te_lightning1(world,b+u,b-d);
+#endif
a = trace_endpos;
}
@@ -386,8 +422,18 @@
dir_z *= 0.15;
vr = vectoangles(dir);
- vr_x *= -1;
+ //vr_x *= -1;
+ tracebox(self.origin , self.mins,self.maxs,self.origin + (dir * length) ,MOVE_NOMONSTERS,self);
+ if(trace_fraction == 1.0)
+ {
+ //te_lightning1(self,self.origin,self.origin + (dir * length));
+ return dir;
+ }
+
+
+
+
makevectors(vr);
bm_forward = beamsweep(self.origin, v_forward, length, step, step_up, step_down);
Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/include/turrets_early.qh 2009-11-07 17:17:43 UTC (rev 8223)
@@ -5,6 +5,8 @@
#message "with tZork turrets"
+float turret_count;
+
vector real_origin(entity ent);
/// Map time control over pain inflicted
Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_main.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -927,11 +927,11 @@
* (unless you have a very good reason not to)
* if the return value is 0, the turret should be removed.
*/
-float turret_count;
float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head)
{
entity e,ee;
+
e = find(world, classname, "turret_manager");
if not (e)
{
@@ -960,7 +960,6 @@
if (self.spawnflags & TSF_TERRAINBASE)
{
entity tb;
- //precache_model("models/turrets/terrainbase.md3");
tb = spawn();
setmodel(tb,"models/turrets/terrainbase.md3");
setorigin(tb,self.origin);
@@ -1295,7 +1294,8 @@
self.think = turret_think;
++turret_count;
- self.nextthink = time + self.ticrate + (turret_count * sys_ticrate);
+ self.nextthink = time + 1;
+ self.nextthink += turret_count * sys_ticrate;
self.tur_head.team = self.team;
self.view_ofs = '0 0 0';
Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/system/system_misc.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,16 +1,19 @@
//--// Some support routines //--//
#define anglemodss(a) (a - floor(a / 360) * 360)
+
float(float v) anglemods =
{
v = v - 360 * floor(v / 360);
return v;
-};
+}
+
float safeangle(float a)
{
- if((a > -361) && (a < 361))
+ if((a >= -360) && (a <= 360))
return a;
+
a -= (360 * floor(a / 360));
return a;
Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_ewheel.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -168,7 +168,7 @@
movelib_move_simple(v_forward,cvar("g_turrets_unit_ewheel_speed_slower"),0.4);
}
}
- else if (self.tur_dist_enemy < self.target_range_optimal - 10)
+ else if (self.tur_dist_enemy < self.target_range_optimal * 0.5)
{
self.frame = ewheel_amin_bck_slow;
movelib_move_simple(v_forward * -1,cvar("g_turrets_unit_ewheel_speed_slow"),0.4);
Modified: branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/tturrets/units/unit_walker.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -866,7 +866,7 @@
vector vtmp;
entity e;
- self.origin = self.wkr_spawn.origin;
+ setorigin(self,self.wkr_spawn.origin);
self.angles = self.wkr_spawn.angles;
vtmp = self.wkr_spawn.origin;
@@ -891,6 +891,7 @@
}
}
}
+
void walker_diehook()
{
turret_trowgib2(self.origin,self.velocity + v_up * 200,'-0.6 -0.2 -02',self,time + random() * 1);
Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/racer.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,99 +1,276 @@
-#define RACER_MIN '-40 -40 0'
-#define RACER_MAX '40 40 44'
+#define RACER_MIN '-80 -80 -40'
+#define RACER_MAX '80 80 40'
void racer_exit(float eject);
void racer_enter();
+float racer_power_air;
+float racer_power_solid;
+float racer_power_min;
+float racer_anglestabilizer;
+float racer_springlength;
+
+float racer_healthmax;
+float racer_shieldmax;
+float racer_energymax;
+
float jetfromtag_power;
float jetfromtag_normpower;
-float jetfromtag_nosolid;
vector jetfromtag_origin;
+float jetfromtag_groundcontact;
-vector jetfromtag(string tagname,float jet_length,float air_power,float solid_power)
+.entity ccamera;
+
+void racer_loadsettings()
{
+ racer_power_min = cvar("g_vehicle_racer_power_min");
+ racer_power_air = cvar("g_vehicle_racer_power_air");
+ racer_power_solid = cvar("g_vehicle_racer_power_solid");
+ racer_springlength = cvar("g_vehicle_racer_springlength");
+ racer_anglestabilizer = cvar("g_vehicle_racer_anglestabilizer");
+
+ racer_healthmax = cvar("g_vehicle_racer_health");
+ racer_shieldmax = cvar("g_vehicle_racer_shield");
+ racer_energymax = cvar("g_vehicle_racer_energy_max");
+
+}
+
+vector racer_jetfromtag(string tagname)
+{
vector force_dir;
float air_frac, solid_frac, air_pwr, solid_pwr;
jetfromtag_origin = gettaginfo(self,gettagindex(self,tagname));
- v_forward = normalize(v_forward);
+ v_forward = normalize(v_forward) * -1;
- force_dir = jetfromtag_origin - v_forward * jet_length;
+ force_dir = jetfromtag_origin - (v_forward * racer_springlength);
traceline(jetfromtag_origin, force_dir, MOVE_NORMAL, self);
+ //te_lightning1(world,jetfromtag_origin, force_dir);
+ trace_fraction *= trace_fraction;
+
solid_frac = 1 - trace_fraction;
- air_frac = trace_fraction;
+ air_frac = trace_fraction;
- if(solid_frac < 0.1)
- jetfromtag_nosolid += 1;
+ if (trace_fraction != 1.0)
+ jetfromtag_groundcontact = 1;
- solid_pwr = solid_frac * solid_power;
- air_pwr = air_frac * air_power;
+ solid_pwr = solid_frac * racer_power_solid;
+ air_pwr = air_frac * racer_power_air;
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"));
+ jetfromtag_normpower = jetfromtag_power / (racer_power_air + racer_power_solid);
+
+ return v_forward * max(jetfromtag_power, racer_power_min);
}
-void racer_align4point(float spring_length,float spring_up,float blendrate)
+void racer_align4point()
{
- vector fl_org,fl_force,fr_org,fr_force,bl_org,bl_force,br_org,br_force;
- vector push_vector,align;
+ vector push_vector;
float fl_push, fr_push, bl_push, br_push;
- jetfromtag_nosolid = 0;
+ jetfromtag_groundcontact = 0;
- 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;
+ push_vector = racer_jetfromtag("tag_engine_fr");
+ fr_push = jetfromtag_normpower;
+ traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
+ if(trace_fraction != 1)
+ self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
- 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;
+ push_vector += racer_jetfromtag("tag_engine_fl");
+ fl_push = jetfromtag_normpower;
+ traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
+ if(trace_fraction != 1)
+ self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
- 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;
+ push_vector += racer_jetfromtag("tag_engine_br");
+ br_push = jetfromtag_normpower;
+ traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
+ if(trace_fraction != 1)
+ self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
- 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 += racer_jetfromtag("tag_engine_bl");
+ bl_push = jetfromtag_normpower;
+ traceline(jetfromtag_origin, jetfromtag_origin + self.velocity * frametime, MOVE_NORMAL,self);
+ if(trace_fraction != 1)
+ self.velocity += normalize(self.origin - trace_endpos) * (vlen(self.velocity) * 1.25);
- push_vector = fr_force + fl_force + br_force + bl_force;
+ self.velocity = self.velocity + (push_vector * frametime);
+ self.velocity_z -= sv_gravity * frametime;
- align = align;
+ push_vector_x = (fl_push - bl_push);
+ push_vector_x += (fr_push - br_push);
+ push_vector_x *= 360;
- align_x = (fl_push - bl_push);
- align_x += (fr_push - br_push);
- align_x *= 360;
+ push_vector_z = (fr_push - fl_push);
+ push_vector_z += (br_push - bl_push);
+ push_vector_z *= 360;
- align_z = (fl_push - fr_push);
- align_z += (bl_push - br_push);
- align_z *= 360;
+ if(!push_vector_z)
+ if(self.angles_z > 0)
+ self.angles_z = max(0, self.angles_z - (racer_anglestabilizer * frametime));
+ else
+ self.angles_z = min(0, self.angles_z + (racer_anglestabilizer * frametime));
+ else
+ self.angles_z += push_vector_z * frametime;
- self.angles_x *= 0.96;
- self.angles_z *= 0.96;
+ if(!push_vector_x)
+ if(self.angles_x > 0)
+ self.angles_x = max(0, self.angles_x - (racer_anglestabilizer * frametime));
+ else
+ self.angles_x = min(0, self.angles_x + (racer_anglestabilizer * frametime));
+ else
+ self.angles_x += push_vector_x * frametime;
+}
- self.angles_x += align_x * frametime;
- self.angles_z += align_z * frametime;
- self.velocity = self.velocity + (push_vector * frametime);
- self.velocity_z -= sv_gravity * frametime;
+void racer_bolt_explode()
+{
+ vector org2;
+
+ org2 = findbetterlocation (self.origin, 8);
+ pointparticles(particleeffectnum("laser_impact"), org2, trace_plane_normal * 1000, 1);
+ RadiusDamage (self, self.realowner, cvar("g_vehicle_racer_laser_damage"), 0, cvar("g_vehicle_racer_laser_radius"), world, 150, DEATH_WAKIGUN, world);
+ sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+
+ remove (self);
}
-void racer_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void racer_rocket_explode()
{
- self.velocity += force;
+ vector org2;
+
+ //if not(self.owner)
+ // self.owner = self.realowner;
+
+ 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);
+ RadiusDamage (self, self.realowner ,cvar("g_vehicle_racer_rocket_damage"), 0, cvar("g_vehicle_racer_rocket_radius"), world, 150, DEATH_WAKIROCKET, world);
+
+ remove (self);
}
+void racer_fire_cannon(string tagname)
+{
+ entity bolt;
+
+ bolt = spawn();
+ bolt.solid = SOLID_BBOX;
+ bolt.movetype = MOVETYPE_FLYMISSILE;
+ bolt.flags = FL_PROJECTILE | FL_NOTARGET;
+ bolt.owner = self;
+ bolt.realowner = self.owner;
+ bolt.touch = racer_bolt_explode;
+ bolt.think = racer_bolt_explode;
+ bolt.nextthink = time + 9;
+ bolt.bot_dodge = TRUE;
+ bolt.bot_dodgerating = cvar("g_vehicle_racer_laser_damage");
+ setorigin(bolt, gettaginfo(self,gettagindex(self,tagname)));
+ bolt.velocity = v_forward * cvar("g_vehicle_racer_laser_speed");
+
+ CSQCProjectile(bolt, TRUE, PROJECTILE_LASER, TRUE);
+}
+
+void racer_rocket_think()
+{
+ vector newdir,olddir;
+
+ self.nextthink = time;
+
+ if ((self.owner.deadflag != DEAD_NO) || (self.cnt < time))
+ {
+ racer_rocket_explode();
+ return;
+ }
+
+ if not (self.realowner.vehicle)
+ {
+ UpdateCSQCProjectile(self);
+ return;
+ }
+
+ self.solid = SOLID_BBOX;
+ self.touch = racer_rocket_explode;
+
+ olddir = normalize(self.velocity);
+ newdir = normalize((0.5 * (self.enemy.absmin + self.enemy.absmax)) - self.origin);
+
+ self.velocity = normalize(olddir + newdir * cvar("g_vehicle_spiderbot_rocket_turnrate")) * cvar("g_vehicle_racer_rocket_speed");
+
+ UpdateCSQCProjectile(self);
+}
+
+void racer_fire_rocket(string tagname)
+{
+ entity rocket;
+ dprint("self.owner=",self.owner.netname,"\n");
+
+ rocket = spawn();
+ setsize (rocket, '-1 -1 -1', '1 1 1');
+ rocket.solid = SOLID_BBOX;
+ rocket.movetype = MOVETYPE_FLYMISSILE;
+ rocket.flags = FL_PROJECTILE;
+ rocket.owner = self;
+ rocket.realowner = self.owner;
+ rocket.touch = racer_rocket_explode;
+ rocket.bot_dodge = TRUE;
+ rocket.bot_dodgerating = cvar("g_vehicle_racer_rocket_damage");
+ setorigin(rocket, gettaginfo(self,gettagindex(self,tagname)));
+
+ if( (self.tur_head.gun1) && (self.tur_head.cnt > time))
+ rocket.enemy = self.tur_head.gun1;
+
+ if(rocket.enemy)
+ {
+ rocket.cnt = time + 9;
+ rocket.velocity = v_forward * cvar("g_vehicle_racer_rocket_speed");
+ rocket.think = racer_rocket_think;
+ rocket.nextthink = time;
+ CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+ //dprint("Tracking...", rocket.enemy.netname, " (", rocket.enemy.classname, ")\n");
+ }
+ else
+ {
+ rocket.velocity = v_forward * cvar("g_vehicle_racer_rocket_speed");
+ rocket.think = racer_rocket_explode;
+ rocket.nextthink = time + 9;
+ CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET, TRUE);
+ }
+}
+
+float racer_customizeentityforclient()
+{
+
+ if(self.deadflag == DEAD_DEAD)
+ return FALSE;
+
+ /*
+ if(other == self.owner)
+ self.alpha = -1;
+ else
+ self.alpha = 1;
+ */
+
+ return TRUE;
+}
+
float racer_pplug()
{
- entity player,racer;
- float ftmp,ftmp2;
+ entity player, racer;
+ float ftmp, ftmp2;
+ vector df;
- player = self;
- racer = self.vehicle;
- player.fixangle = FALSE;
+ if(cvar("g_vehicle_racer_reload"))
+ {
+ racer_loadsettings();
+ cvar_set("g_vehicle_racer_reload","0");
+ }
+ player = self;
+ racer = self.vehicle;
+
player.BUTTON_ZOOM = 0;
player.BUTTON_CROUCH = 0;
@@ -107,72 +284,134 @@
return 0;
}
+ if(racer.deadflag != DEAD_NO)
+ {
+ self = player;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ return 1;
+ }
+
+ racer_align4point();
+
racer.angles_x *= -1;
makevectors(racer.angles);
- racer.angles_x *= -1;
- // Turn Body
- ftmp = cvar("g_vehicle_racer_turnspeed") / server_fps;
+ // Rotate Body
+ ftmp = cvar("g_vehicle_racer_turnspeed") * sys_ticrate;
ftmp2 = ftmp * -1;
ftmp = bound(ftmp2,shortangle_f(player.v_angle_y - racer.angles_y,racer.angles_y),ftmp);
+ ftmp2 = safeangle(racer.angles_y + ftmp);
+ // Roll
+ ftmp = bound(-90,shortangle_f(player.v_angle_z + ((racer.angles_y - ftmp2) * cvar("g_vehicle_racer_turnroll")), racer.angles_z),90);
+ ftmp = safeangle(racer.angles_z + ftmp);
+ racer.angles_z = ftmp;
+
+ // Turn
+ racer.angles_y = ftmp2;
+
+ // Pitch Body
+ ftmp = cvar("g_vehicle_racer_pitchspeed") * sys_ticrate;
+ ftmp2 = ftmp * -1;
+
+ ftmp = bound(ftmp2,shortangle_f(player.v_angle_x - racer.angles_x,racer.angles_x),ftmp);
+ racer.angles_x = safeangle(racer.angles_x + ftmp);
+ racer.angles_x *= -1;
+
+
+ if(player.movement_x != 0)
{
- racer.angles_y = safeangle(racer.angles_y + ftmp);
- if(player.BUTTON_JUMP)
+ if(player.movement_x > 0)
+ df += v_forward * cvar("g_vehicle_racer_speed_forward");
+ else if(player.movement_x < 0)
+ df -= v_forward * cvar("g_vehicle_racer_speed_forward");
+ }
+
+ if(player.movement_y != 0)
+ {
+ if(player.movement_y < 0)
+ df -= v_right * cvar("g_vehicle_racer_speed_strafe");
+ else if(player.movement_y > 0)
+ df += v_right * cvar("g_vehicle_racer_speed_strafe");
+ }
+
+ // limit _z to avoid flying on normal thrust
+ if(df_z > 0)
+ df_z = min(df_z,700);
+
+ // Afterburn
+
+ //if (jetfromtag_groundcontact)
+ if (player.BUTTON_JUMP)
+ if(racer.vehicle_energy >= (cvar("g_vehicle_racer_speed_afterburn_cost")* frametime))
+ {
+ racer.wait = time + cvar("g_vehicle_racer_energy_usepause");
+ racer.vehicle_energy -= cvar("g_vehicle_racer_speed_afterburn_cost") * frametime;
+ df += (v_forward * cvar("g_vehicle_racer_speed_afterburn"));
+ }
+
+ racer.velocity += df * frametime;
+
+ df = (vlen(racer.velocity) * cvar("g_vehicle_racer_downforce") * v_up) * frametime;
+ racer.velocity = racer.velocity - df;
+ player.movement = racer.velocity;
+
+ if(cvar("g_vehicle_racer_drag"))
+ racer.velocity = movelib_dragvec(cvar("g_vehicle_racer_drag"), cvar("g_vehicle_racer_dragexp"));
+
+ if(self.owner.cursor_trace_ent)
+ {
+ //dprint("Lock: ", self.owner.cursor_trace_ent.classname, "\n");
+ //if not (self.tur_head.enemy)
+ // bprint(self.owner,"Locked: ",
+ self.tur_head.gun1 = self.owner.cursor_trace_ent;
+ self.tur_head.cnt = time + 1;
+ }
+
+ if(player.BUTTON_ATCK)
+ if(time > racer.attack_finished_single)
+ if(racer.vehicle_energy >= cvar("g_vehicle_racer_laser_cost"))
+ {
+ racer.vehicle_energy -= cvar("g_vehicle_racer_laser_cost");
+ racer.wait = time + cvar("g_vehicle_racer_energy_usepause");
+
+ if(racer.cnt)
{
- player.BUTTON_JUMP = 0;
- racer.velocity = racer.velocity + v_forward * 250 + v_up * 600;
+ racer_fire_cannon("tag_fire1");
+ racer.cnt = 0;
}
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
- {
+ racer_fire_cannon("tag_fire2");
+ racer.cnt = 1;
+ }
+ racer.attack_finished_single = time + cvar("g_vehicle_racer_laser_refire");
+ }
- 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.BUTTON_ATCK2)
+ if(time > racer.delay)
+ {
+ racer_fire_rocket("tag_rocket_r");
+ racer_fire_rocket("tag_rocket_l");
+ racer.delay = time + cvar("g_vehicle_racer_rocket_refire");
+ racer.lip = time;
- 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;
+ player.vehicle_reload1 = (time - racer.lip) / (racer.delay-racer.lip);
+ //player.vehicle_energy = racer.vehicle_energy;
- self = racer;
+ vehicle_stdproc_shiledregen(CCVAR("_shield"), frametime);
+ vehicle_stdproc_healthregen(CCVAR("_health"), frametime);
- 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 (racer.wait < time)
+ vehicle_stdproc_energyregen(CCVAR("_energy"), frametime);
+ else
+ player.vehicle_energy = (racer.vehicle_energy / CCVAR("_energy"));
- if(cvar("g_vehicle_racer_drag"))
- self.velocity = movelib_dragvec(cvar("g_vehicle_racer_drag"),cvar("g_vehicle_racer_dragexp"));
+ self = player;
- self = player;
player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
setorigin(player,racer.origin + '0 0 32');
player.velocity = racer.velocity;
@@ -190,59 +429,65 @@
void racer_enter()
{
self.owner = other;
- self.owner.angles = self.angles;
- //setattachment(other,self,"");
+
self.nextthink = 0;
- self.think = SUB_Null;
+ self.flags = 0;
+ self.vehicle_hudmodel.viewmodelforclient = self.owner;
+ self.colormap = self.owner.colormap;
+
+ self.owner.PlayerPhysplug = racer_pplug;
self.owner.takedamage = DAMAGE_NO;
+ self.owner.event_damage = SUB_Null;
+ self.owner.vehicle = self;
+ self.owner.angles = self.angles;
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"));
+ self.owner.hud = HUD_WAKIZASHI;
+ self.owner.effects |= EF_NODRAW;
+ self.owner.view_ofs = '0 0 0';
- //setorigin(self.owner,self.origin);
- //setattachment(self.owner,self,"");
- //setorigin(self.owner,'0 0 0');
+ self.owner.vehicle_health = (self.vehicle_health / cvar("g_vehicle_racer_health"));
+ self.owner.vehicle_shield = (self.vehicle_shield / cvar("g_vehicle_racer_shield"));
+ setorigin(other,self.origin + '0 0 32');
+ other.velocity = self.velocity;
+
+ other.flags &~= FL_ONGROUND;
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
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES); // 10 = SVC_SETVIEWANGLES
+ WriteAngle(MSG_ONE, self.angles_x * -1); // 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.colormap = 1024;
+ self.flags = FL_NOTARGET;
self.velocity = '0 0 0';
+ if not (self.owner)
+ return;
+
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
+ 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;
+ if (self.deadflag == DEAD_NO)
+ {
+ self.think = racer_think;
+ self.nextthink = time;
+ }
self.owner.takedamage = DAMAGE_AIM;
self.owner.solid = SOLID_SLIDEBOX;
@@ -250,19 +495,17 @@
setsize(self.owner,PL_MIN,PL_MAX);
+ self.owner.effects &~= EF_NODRAW;
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.owner.hud = HUD_NORMAL;
+ //self.owner.exteriormodeltoclient = self;
- self.colormap = 1024;
- //self.tur_head.colormap = 1024;
- //self.vehicle_hudmodel.viewmodelforclient = self;
- //self.tur_head.nodrawtoclient = self;
- setattachment(self.owner,world,"");
+ self.vehicle_hudmodel.viewmodelforclient = self;
if(eject)
{
@@ -271,12 +514,34 @@
self.owner.velocity = (v_up + v_forward * 0.25) * 750;
}
else
- setorigin(self.owner,self.origin + '0 0 64' - v_forward * 200);
+ {
+ self.owner.velocity = (v_forward) * -150;
+ setorigin(self.owner,self.origin - v_forward * 128);
+ }
self.owner = world;
}
+void racer_entercap()
+{
+ entity oldself;
+ entity oldother;
+ oldself = self;
+ oldother = other;
+
+ other = self.enemy;
+ self = self.owner;
+
+ racer_enter();
+
+ other = oldother;
+ self = oldself;
+
+ self.think = SUB_Remove;
+ self.nextthink = time;
+}
+
void racer_touch()
{
if(self.owner)
@@ -303,6 +568,15 @@
if(other.vehicle != world)
return;
+ /*
+ entity entercap;
+ entercap = spawn();
+ entercap.enemy = other;
+ entercap.owner = self;
+ entercap.think = racer_entercap;
+ entercap.nextthink = time;
+ */
+
racer_enter();
}
@@ -316,114 +590,160 @@
}
*/
-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.flags = FL_NOTARGET;
+ self.effects = 0;
+
+ self.vehicle_health = CCVAR("_health");
+ self.vehicle_shield = CCVAR("_shield");
+
+ self.event_damage = vehicle_stdproc_damage;
+ self.touch = racer_touch;
+
+ 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.takedamage = DAMAGE_AIM;
+
self.alpha = 1;
- //self.tur_head.angles = '0 0 0';
- //self.colormap = 1024;
- //self.tur_head.colormap = 1024;
+ self.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);
+
+ self.vehicle_energy = 1;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+
+ setorigin(self, self.pos1);
+ self.angles = self.pos2;
+
+ setsize(self,RACER_MIN * 0.5,RACER_MAX * 0.5);
pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+ self.delay = time;
}
+
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);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '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.deadflag = DEAD_DEAD;
+ self.vehicle_exit(VHEF_NORMAL);
+ RadiusDamage (self, self, 250, 15, 250, world, 250, DEATH_WAKIBLOWUP, world);
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+ self.alpha = -1;
self.nextthink = time + 10;
- self.think = spiderbot_spawn;
+ self.think = racer_spawn;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
- setorigin(self,self.tur_aimpos);
- */
+ self.avelocity_z = 0;
+ self.colormod = '0 0 0';
+
+ setorigin(self,self.pos1);
}
+void racer_dietouch()
+{
+ if(self.wait > time)
+ return;
+
+ self.wait = time + 0.75;
+
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+}
+
void racer_die()
{
+ self.health = 0;
+ self.event_damage = SUB_Null;
+ self.iscreature = FALSE;
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.touch = racer_dietouch;
+ self.deadflag = DEAD_DYING;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.wait = time;
- /*
- 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;
- */
+ pointparticles(particleeffectnum("rocket_explode"), findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+ self.velocity += '0 0 128';
+
+ if(random() < 0.5)
+ self.avelocity_z = 16;
+ else
+ self.avelocity_z = -16;
+
+ self.colormod = '-0.5 -0.5 -0.5';
+
+ self.think = racer_blowup;
+ self.nextthink = time + 3;
}
void racer_dinit()
{
- server_fps = (1 / sys_ticrate);
+ if (self.netname == "")
+ self.netname = "Race PoD";
- /*
- 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);
- */
+ self.cvar_basename = "g_vehicle_racer";
- if (self.netname == "") self.netname = "Race PoD";
+ self.vehicle_viewport = spawn();
+ self.vehicle_hudmodel = spawn();
+ //self.ccamera = spawn();
- 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";
+ setorigin(self, self.origin);
- setmodel (self.vehicle_viewport, "models/null.md3");
- setmodel(self,"models/racers/waka.dpm");
+ setmodel(self,"models/vehicles/wakizashi.dpm");
+ setmodel(self.vehicle_hudmodel, "models/vehicles/wakizashi_cockpit.dpm");
+ setmodel (self.vehicle_viewport, "null");
- setattachment(self.vehicle_viewport,self,"");
- //self.tur_head.customizeentityforclient = spiderbot_customizeentityforclient;
+ setattachment(self.vehicle_hudmodel, self, "");
+ setattachment(self.vehicle_viewport, self, "tag_viewport");
- setorigin(self.vehicle_viewport,'-400 0 40');
- self.tur_aimpos = self.origin;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+ self.customizeentityforclient = racer_customizeentityforclient;
+
+ self.tur_head = spawn();
+
+ self.pos1 = self.origin;
+ self.pos2 = self.angles;
+ self.angles = '0 0 0';
+ self.angles = self.pos1;
+
+ self.vehicle_die = racer_die;
+ self.vehicle_exit = racer_exit;
+
+ addstat(STAT_HUD, AS_INT, hud);
+ addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
+ addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
+ addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
+
+ addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
+ addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
+
+ addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
+ addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
+
racer_spawn();
-
- //self.vehicle_die = spiderbot_die;
- //self.vehicle_exit = spiderbot_exit;
}
-void spawnfunc_racer()
+void spawnfunc_vehicle_racer()
{
g_turrets_common_precash();
+ racer_loadsettings();
- precache_model ( "models/racers/waka.dpm");
+ self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN;
+ precache_model ("models/vehicles/wakizashi.dpm");
+ precache_model ("models/vehicles/wakizashi_cockpit.dpm");
+ precache_model ("models/rocket.md3");
self.think = racer_dinit;
- self.nextthink = time + 0.5;
+ self.nextthink = time + 1;
}
Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/spiderbot.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,137 +1,7 @@
-#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'
+#define spiderbot_MIN '-75 -75 0'
+#define spiderbot_MAX '75 75 100'
#define spiderbot_spawnpnt wkr_spawn
-/*
-.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();
@@ -156,10 +26,10 @@
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);
+ 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_SBROCKET, world);
remove (self);
}
@@ -199,16 +69,26 @@
self.solid = SOLID_BBOX;
self.touch = spiderbot_rocket_touch;
olddir = normalize(self.velocity);
- newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
+ //newdir = normalize(self.owner.cursor_trace_endpos - self.origin);
+ newdir = normalize(self.pos1 - 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_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+ self.health -= damage;
+ self.velocity += force;
+ if(self.health < 1)
+ spiderbot_rocket_explode();
+}
+
+
void spiderbot_rocket_do()
{
- entity missile;
+ entity rocket;
if(self.gun2.cnt > time)
return;
@@ -228,24 +108,29 @@
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);
+ rocket = spawn ();
+ setsize (rocket, '-1 -1 -1', '1 1 1'); // give it some size so it can be shot
+ setorigin(rocket,gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")));
+ te_explosion (rocket.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;
+ rocket.classname = "spiderbot_rocket";
+ rocket.bot_dodge = TRUE;
+ rocket.bot_dodgerating = cvar("g_vehicle_spiderbot_rocket_damage");
+ rocket.cnt = time + cvar("g_vehicle_spiderbot_rocket_lifetime");
+ rocket.health = cvar("g_vehicle_spiderbot_rocket_health");
+ rocket.takedamage = DAMAGE_AIM;
+ rocket.event_damage = spiderbot_rocket_damage;
+ rocket.owner = self.owner;
+ rocket.nextthink = time;
+ rocket.movetype = MOVETYPE_FLYMISSILE;
+ rocket.velocity = normalize(v_forward + (v_up * 0.5) + randomvec() * 0.25) * cvar("g_vehicle_spiderbot_rocket_speed");
+ rocket.angles = vectoangles(rocket.velocity);
+ rocket.think = spiderbot_rocket_think;
+ rocket.flags = FL_PROJECTILE;
+ rocket.solid = SOLID_NOT;
+ rocket.pos1 = self.owner.cursor_trace_endpos;
- CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
+ CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
}
void spiderbot_minigun_fire_Flash_Go() {
@@ -257,6 +142,7 @@
self.frame = self.frame + 2;
self.alpha = self.alpha - 0.2;
+ self.scale -= 0.01;
self.nextthink = time + 0.02;
}
@@ -271,90 +157,91 @@
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);
+ cvar("g_vehicle_spiderbot_minigun_spread"), DEATH_SBMINIGUN, 0);
if not (gun.enemy)
{
gun.enemy = spawn();
setattachment(gun.enemy , gun, "barrels");
- setorigin(gun.enemy ,gun.enemy.origin + '48 0 0');
+ setorigin(gun.enemy ,gun.enemy.origin + '52 0 0');
}
- flash = gun.enemy; //spawn();
- setmodel(flash, "models/uziflash.md3"); // precision set below
+ flash = gun.enemy;
+ setmodel(flash, "models/uziflash.md3");
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;
+ flash.scale = 1;
+
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))
+ float ftmp;
+
+ if((self.vehicle_reload1 == 1) || (!self.owner.BUTTON_ATCK))
{
- self.gun1.angles_z += 36;
- self.gun2.angles_z -= 36;
+ ftmp = 1 / cvar("g_vehicle_spiderbot_minigun_cooldown") * sys_ticrate;
+ self.owner.vehicle_reload1 = max(self.owner.vehicle_reload1 - ftmp, 0);
+ if(self.owner.vehicle_reload1 <= 0)
+ self.vehicle_reload1 = 0;
+
+ return ;
+ }
+
+ if (self.owner.BUTTON_ATCK)
+ {
+
+ // Animate miniguns
+ self.gun1.angles_z += (1440 * sys_ticrate);
+ self.gun2.angles_z -= (1440 * sys_ticrate);
if(self.gun1.angles_z >= 360)
{
self.gun1.angles_z = 0;
self.gun2.angles_z = 360;
}
- self = self.owner;
- if(self.uzi_bulletcounter == 1)
+ if (self.tur_head.attack_finished_single < time)
{
- 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)
+ // Fire bullets, alternating trails left<->right
+ self = self.owner;
+ if(self.uzi_bulletcounter == 1)
{
- self.vehicle_heat = 0;
- self.owner.vehicle_heat = 0;
+ spiderbot_minigun_fire(self.vehicle.gun1, 0);
+ spiderbot_minigun_fire(self.vehicle.gun2, 1);
+ self.uzi_bulletcounter = 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;
+ spiderbot_minigun_fire(self.vehicle.gun1, 1);
+ spiderbot_minigun_fire(self.vehicle.gun2, 0);
+ self.uzi_bulletcounter += 1;
}
+
+ self = self.vehicle;
+
+ ftmp = cvar("g_vehicle_spiderbot_minigun_refire") / cvar("g_vehicle_spiderbot_minigun_heat");
+ self.owner.vehicle_reload1 += ftmp;
+
+ if(self.owner.vehicle_reload1 >= 1)
+ {
+ self.vehicle_reload1 = 1;
+ self.owner.vehicle_reload1 = 1;
+ self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_cooldown") + time;
+ }
+ else
+ self.tur_head.attack_finished_single = cvar("g_vehicle_spiderbot_minigun_refire") + time;
}
- else
- self.owner.vehicle_heat = max(self.owner.vehicle_heat - cvar("g_vehicle_spiderbot_minigun_cooldown"),0);
+ self = self.owner;
+ return;
+ }
}
#define SBS_IDLE 0
#define SBS_JUMP 1
@@ -391,7 +278,6 @@
player.BUTTON_CROUCH = 0;
player.switchweapon = 0;
-
if(player.BUTTON_USE)
{
self = spider;
@@ -404,20 +290,18 @@
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;
+ ftmp = cvar("g_vehicle_spiderbot_head_turnspeed") * sys_ticrate;
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;
+ ftmp = cvar("g_vehicle_spiderbot_head_pitchspeed") * sys_ticrate;
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"));
@@ -427,7 +311,7 @@
//player.angles_x *= -1;
// Turn Body
- ftmp = cvar("g_vehicle_spiderbot_turnspeed") / server_fps;
+ ftmp = cvar("g_vehicle_spiderbot_turnspeed") * sys_ticrate;
ftmp2 = ftmp * -1;
ftmp = bound(ftmp2,spider.tur_head.angles_y,ftmp);
@@ -438,8 +322,6 @@
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;
spider.state = SBS_JUMP;
spider.frame = 4;
@@ -464,16 +346,12 @@
if(player.movement_x > 0)
{
player.movement_x = 1;
- spider.anim_start = MODEL_SPIDERBOT_FORWARD_START;
- spider.anim_end = MODEL_SPIDERBOT_FORWARD_END;
spider.state = SBS_WALK;
spider.frame = 0;
}
else if(player.movement_x < 0)
{
player.movement_x = -1;
- spider.anim_start = MODEL_SPIDERBOT_BACKWARDS_START;
- spider.anim_end = MODEL_SPIDERBOT_BACKWARDS_END;
spider.state = SBS_BACK;
spider.frame = 1;
}
@@ -485,16 +363,12 @@
if(player.movement_y < 0)
{
player.movement_y = -1;
- spider.anim_start = MODEL_SPIDERBOT_LEFT_START;
- spider.anim_end = MODEL_SPIDERBOT_LEFT_END;
spider.state = SBS_LEFT;
spider.frame = 2;
}
else if(player.movement_y > 0)
{
player.movement_y = 1;
- spider.anim_start = MODEL_SPIDERBOT_RIGHT_START;
- spider.anim_end = MODEL_SPIDERBOT_RIGHT_END;
spider.state = SBS_RIGHT;
spider.frame = 3;
}
@@ -506,24 +380,25 @@
movelib_groundalign4point(300,100,0.25);
}
- //anim_do();
spiderbot_miniguns_do();
spiderbot_rocket_do();
- vehicle_stdproc_regen();
+ vehicle_stdproc_shiledregen(CCVAR("_shield"), frametime);
+ vehicle_stdproc_healthregen(CCVAR("_health"), frametime);
player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- player.rockets = spider.tur_head.frame;
+ player.vehicle_ammo2 = spider.tur_head.frame;
if(spider.gun2.cnt <= time)
- player.rockets_reload = 1;
+ player.vehicle_reload2 = 1;
else
- player.rockets_reload = 1 - ((spider.gun2.cnt - time) /spider.attack_finished_single);
+ player.vehicle_reload2 = 1 - ((spider.gun2.cnt - time) / spider.attack_finished_single);
- self = player;
-
+ //setorigin(spider,spider.origin);
setorigin(player,spider.origin + '0 0 64');
player.velocity = spider.velocity;
+ self = player;
+
return 1;
}
@@ -541,7 +416,7 @@
void spiderbot_enter()
{
// Remove this when bots know how to use the spiderbot
- if not (clienttype(other) == CLIENTTYPE_REAL)
+ if (clienttype(other) != CLIENTTYPE_REAL)
return;
self.colormod = self.tur_head.colormod = '0 0 0';
@@ -558,7 +433,7 @@
self.colormap = self.owner.colormap;
self.tur_head.colormap = self.owner.colormap;
self.vehicle_hudmodel.viewmodelforclient = self.owner;
- self.nextthink = 0;
+ self.nextthink = 0;
self.owner.angles = self.angles;
self.owner.takedamage = DAMAGE_NO;
self.owner.solid = SOLID_NOT;
@@ -570,12 +445,21 @@
self.owner.hud = HUD_SPIDERBOT;
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;
+ self.owner.view_ofs = '0 0 0';
+ self.owner.vehicle_ammo1 = self.vehicle_ammo1;
+ self.owner.vehicle_ammo2 = self.vehicle_ammo2;
+ self.owner.vehicle_reload1 = self.vehicle_reload1;
+ self.owner.vehicle_reload2 = self.vehicle_reload2;
- //setorigin(self.owner,self.origin);
- //setattachment(self.owner,self,"");
- //setorigin(self.owner,'0 0 0');
+ //if(other.flags & FL_ONGROUND)
+ other.flags &~= FL_ONGROUND;
+ //if(self.flags & FL_ONGROUND)
+ self.flags &~= FL_ONGROUND;
+
+ self.team = self.owner.team;
+ self.flags -= FL_NOTARGET;
+
if(clienttype(other) == CLIENTTYPE_REAL)
{
msg_entity = other;
@@ -587,16 +471,15 @@
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;
self.frame = 5;
+
+ self.flags |= FL_NOTARGET;
+
e = findchain(classname,"spiderbot_rocket");
while(e)
{
@@ -604,9 +487,6 @@
{
e.realowner = self.owner;
e.owner = world;
- //e.solid = SOLID_BBOX;
- //e.think = SUB_Null;
- //e.nextthink = -1;
}
e = e.chain;
}
@@ -626,7 +506,6 @@
WriteAngle(MSG_ONE, 0); // roll
}
- //setattachment(self.owner,world,"");
self.think = spiderbot_think;
self.nextthink = time;
self.owner.takedamage = DAMAGE_AIM;
@@ -672,6 +551,20 @@
self.owner = world;
}
+float spiderbot_crushable(entity e)
+{
+ if(e.classname == "corpse")
+ return 1;
+
+ if(e.classname == "player")
+ return 1;
+
+ if(e.classname == "monster_zombie")
+ return 1;
+
+ return 0;
+}
+
void spiderbot_touch()
{
if(self.owner)
@@ -679,12 +572,12 @@
if(vlen(self.velocity) == 0)
return;
- if(other.classname != "player")
+ if not (spiderbot_crushable(other))
return;
- //todo: add check for velocity here (so we dont cush players runing onto us from behind)
+ //todo: add check for velocity/angle 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") );
+ Damage(other,self,self.owner,cvar("g_vehicle_spiderbot_crush_dmg"),DEATH_SBCRUSH,'0 0 0', normalize(other.origin - self.origin) * cvar("g_vehicle_spiderbot_crush_force") );
return;
}
@@ -715,6 +608,7 @@
self.think = spiderbot_think;
self.nextthink = time;
+ self.velocity = '0 0 -2000';
self.vehicle_health = CCVAR("_health");
self.vehicle_shield = CCVAR("_shield");
self.event_damage = vehicle_stdproc_damage;
@@ -729,7 +623,7 @@
self.tur_head.colormap = 1024;
self.deadflag = DEAD_NO;
self.bot_attack = TRUE;
-
+ self.flags |= FL_NOTARGET;
setsize(self,spiderbot_MIN,spiderbot_MAX);
setorigin(self,self.spiderbot_spawnpnt.origin);
@@ -756,10 +650,11 @@
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.nextthink = time + cvar("g_vehicle_spiderbot_respawntime");
self.think = spiderbot_spawn;
+ self.movetype = MOVETYPE_NONE;
- setorigin(self,self.tur_aimpos);
+ setorigin(self, self.tur_aimpos);
}
void spiderbot_die()
@@ -795,44 +690,46 @@
else
self.spiderbot_spawnpnt.team = self.team;
- 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);
+ addstat(STAT_VEHICLESTAT_HEALTH, AS_FLOAT, vehicle_health);
+ addstat(STAT_VEHICLESTAT_SHIELD, AS_FLOAT, vehicle_shield);
+ addstat(STAT_VEHICLESTAT_ENERGY, AS_FLOAT, vehicle_energy);
+ addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
+ addstat(STAT_VEHICLESTAT_RELOAD1, AS_FLOAT, vehicle_reload1);
+ addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
+ addstat(STAT_VEHICLESTAT_RELOAD2, AS_FLOAT, vehicle_reload2);
- if (self.netname == "") self.netname = "spiderbot";
+ 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";
+ self.tur_head = spawn();
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+ self.vehicle_viewport = spawn();
+ self.vehicle_hudmodel = spawn();
+ self.vehicle_flags = VHF_HASSHIELD | VHF_SHIELDREGEN | VHF_HEALTHREGEN | VHF_DEATHEJECT;
+ self.cvar_basename = "g_vehicle_spiderbot";
+ self.gravity = 2;
- setmodel (self.vehicle_hudmodel, "models/spiderbot/cp.md3");
- setmodel (self.vehicle_viewport, "null");
- 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");
+ setmodel(self, "models/vehicles/spiderbot.dpm");
+ setmodel(self.tur_head, "models/vehicles/spiderbot_top.dpm");
+ setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
+ setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
+ setmodel(self.vehicle_hudmodel, "models/vehicles/spiderbot_cockpit.dpm");
+ setmodel(self.vehicle_viewport, "null");
- 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");
+ setattachment(self.tur_head, self, "tag_head");
+ setattachment(self.vehicle_hudmodel, self.tur_head, "tag_hud");
+ 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;
@@ -841,13 +738,12 @@
void spawnfunc_vehicle_spiderbot()
{
- // g_turrets_common_precash();
-
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/vehicles/spiderbot.dpm");
+ precache_model ( "models/vehicles/spiderbot_top.dpm");
+ precache_model ( "models/vehicles/spiderbot_barrels.dpm");
+ precache_model ( "models/vehicles/spiderbot_cockpit.dpm");
+ precache_model ( "models/uziflash.md3");
precache_model ( "models/turrets/rocket.md3");
precache_sound ( "weapons/rocket_impact.wav" );
Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -6,48 +6,54 @@
{
}
-void vehicle_stdproc_regen()
+void vehicle_stdproc_shiledregen(float rmax, float dt)
{
- 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.vehicle_shield < rmax)
if(self.dmg_time + CCVAR("_shield_regen_dmgpause") < time)
{
- self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") / server_fps,smax);
+ self.vehicle_shield = min(self.vehicle_shield + CCVAR("_shield_regen") * dt, rmax);
if(self.owner)
- self.owner.vehicle_shield = self.vehicle_shield / cvar(strcat(self.cvar_basename,"_shield"));
+ self.owner.vehicle_shield = self.vehicle_shield / rmax;
}
+}
- if(self.vehicle_flags & VHF_HEALTHREGEN)
+void vehicle_stdproc_healthregen(float rmax, float dt)
+{
+
if(self.dmg_time + CCVAR("_health_regen_dmgpause") < time)
- if(self.vehicle_health < hmax)
+ if(self.vehicle_health < rmax)
{
- self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") / server_fps,hmax);
+ self.vehicle_health = min(self.vehicle_health + CCVAR("_health_regen") * dt, rmax);
if(self.owner)
- self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
+ self.owner.vehicle_health = self.vehicle_health / rmax;
}
}
-void shieldhit_think()
+void vehicle_stdproc_energyregen(float rmax, float dt)
{
- self.alpha = self.alpha - 0.125;
- if not(self.alpha <= 0)
+ if(self.vehicle_energy < rmax)
{
- self.nextthink = time;
+ self.vehicle_energy = min(self.vehicle_energy + CCVAR("_energy_regen") * dt, rmax);
+
+ if(self.owner)
+ self.owner.vehicle_energy = self.vehicle_energy / rmax;
}
- else
+}
+
+void shieldhit_think()
+{
+ self.alpha = self.alpha - 0.2;
+ if (self.alpha <= 0)
{
setmodel(self,"");
self.alpha = -1;
}
- //self.think = SUB_Remove;
+ else
+ {
+ self.nextthink = time + 0.1;
+ }
}
void vehicle_stdproc_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -59,40 +65,36 @@
if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
{
+
if not (self.tur_head.enemy)
+ {
self.tur_head.enemy = spawn();
+ self.tur_head.enemy.effects = EF_LOWPRECISION;
+ }
- entity sh;
+ setmodel(self.tur_head.enemy,"models/vhshield.md3");
+ setattachment(self.tur_head.enemy,self,"");
- 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;
+ self.tur_head.enemy.colormod = '1 1 1';
+ self.tur_head.enemy.alpha = 0.45;
+ self.tur_head.enemy.scale = (256 / vlen(self.maxs - self.mins));
+ self.tur_head.enemy.angles = vectoangles(normalize(hitloc - self.origin)) - self.angles;
+ self.tur_head.enemy.think = shieldhit_think;
+ self.tur_head.enemy.nextthink = time;
- 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';
+ self.tur_head.enemy.colormod = '10 0 -1';
ddmg_take = fabs(self.vehicle_shield);
self.vehicle_shield = 0;
-
+ self.tur_head.enemy.alpha = 0.75;
self.vehicle_health -= ddmg_take;
}
}
else
self.vehicle_health -= damage;
-
if(self.owner)
{
self.owner.vehicle_health = self.vehicle_health / CCVAR("_health");
@@ -105,7 +107,8 @@
if(self.vehicle_health <= 0)
{
if(self.owner)
- self.vehicle_exit(VHEF_EJECT);
+ if(self.vehicle_flags & VHF_DEATHEJECT)
+ self.vehicle_exit(VHEF_EJECT);
self.vehicle_die();
}
@@ -119,5 +122,5 @@
self.vehicle_enter = self.vehicle_exit;
self.vehicle_die = self.vehicle_exit;
self.vehicle_spawn = self.vehicle_exit;
- self.vehicle_message = self.vehicle_exit;
+ //self.vehicle_message = self.vehicle_exit;
}
Modified: branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/vehicles/vehicles.qh 2009-11-07 17:17:43 UTC (rev 8223)
@@ -11,20 +11,27 @@
//.string cvar_basename;
.float vehicle_flags;
-#define VHF_HASSHIELD 2
+#define VHF_HASSHIELD 2
#define VHF_SHIELDREGEN 4
#define VHF_HEALTHREGEN 8
+#define VHF_DEATHEJECT 16
+#define VHF_ENERGYREGEN 32
.float hud;
-.float rockets;
-.float rockets_reload;
+
.entity gun1;
.entity gun2;
.float vehicle_health;
.float vehicle_shield;
-.float vehicle_heat;
+.float vehicle_energy;
+.float vehicle_ammo1;
+.float vehicle_reload1;
+
+.float vehicle_ammo2;
+.float vehicle_reload2;
+
.entity vehicle;
.entity vehicle_viewport;
.entity vehicle_hudmodel;
@@ -34,16 +41,14 @@
.float dmg_time;
-float server_fps;
-
#define VHEF_NORMAL 0
#define VHEF_EJECT 1
-.void(float exit_flags) vehicle_exit;
-.void() vehicle_enter;
-.void() vehicle_die;
-.void() vehicle_spawn;
-.float(float message) vehicle_message;
+var .void(float exit_flags) vehicle_exit;
+var .void() vehicle_enter;
+var .void() vehicle_die;
+var .void() vehicle_spawn;
+//var .float(float message) vehicle_message;
#include "vehicles.qc"
#include "spiderbot.qc"
Modified: branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/verbstack.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -2,9 +2,12 @@
.entity verbs_idle;
.entity verbs_attack;
.entity verbs_move;
+//.entity vchain;
/// This global gets set to the verb in question each time the stack manager calls verb_call
entity verb;
+//.entity current_verb;
+//.float verb_done;
/// Execure this verb
#define VCM_DO 0
@@ -31,6 +34,54 @@
/// verb_call(VCM_DO) returns this when a verb should be deleted by the stack manager
#define VS_CALL_REMOVE -3
+/*
+void verbstack_updatechain(entity stack)
+{
+ entity vrb, v;
+ if not (stack)
+ return;
+
+ dprint("verbstack_updatechain\n");
+
+ vrb = findchainentity(verbstack, stack);
+ if not (vrb)
+ {
+ stack.vchain = world;
+ return;
+ }
+
+ stack.vchain = vrb;
+ v = vrb;
+
+ while(vrb)
+ {
+ vrb = vrb.chain;
+
+
+ }
+}
+
+void verbstack_remove(entity vverb)
+{
+ entity vstack;
+ dprint("verbstack_remove\n");
+
+ vstack = verb.verbstack;
+ remove(vverb);
+ vverb.verbstack = world;
+ verbstack_updatechain(vstack);
+
+ //vverb.think = SUB_Remove;
+ //vverb.nextthink = time;
+}
+
+void verbstack_thinkremove()
+{
+ dprint("verbstack_thinkremove\n");
+ verbstack_remove(self);
+}
+*/
+
/**
Push a new verb onto the specified stack. Set vrb_life to make it time-limited.
**/
@@ -50,12 +101,18 @@
vrb.verb_call = vrb_call;
vrb.verb_static_value = val_static;
+ vrb.classname = "verb";
+ stack.classname = "verbstack";
+
if(vrb_life)
{
+ //vrb.think = verbstack_thinkremove;
vrb.think = SUB_Remove;
vrb.nextthink = time + vrb_life;
}
+ //verbstack_updatechain(stack);
+
return vrb;
}
@@ -71,8 +128,11 @@
oldself = self;
vrb = findchainentity(verbstack,stack);
+ //vrb = stack.vchain;
+ //dprint("owner:", stack.owner.classname, " vsn:", stack.classname,"\n");
while(vrb)
{
+ //dprint("vn:", vrb.classname,"\n");
verb = vrb;
vrb = vrb.chain;
self = verb.owner;
@@ -151,7 +211,7 @@
vrb = vrb.chain;
value = verb.verb_call(VCM_EVAL);
- if(value > 0)
+ if(value < 0)
{
if(value == VS_CALL_REMOVE)
remove(verb);
@@ -197,4 +257,18 @@
}
self = oldself;
+
+ //stack.vchain = world;
}
+
+void verbstack_doverb(entity vrb)
+{
+ float value;
+
+ verb = vrb;
+ self = verb.owner;
+ value = verb.verb_call(VCM_DO);
+
+ if(value == VS_CALL_REMOVE)
+ remove(vrb);
+}
Modified: branches/nexuiz-2.0/data/qcsrc/server/w_fireball.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_fireball.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_fireball.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -61,6 +61,9 @@
float d;
vector p;
+ if(damage <= 0)
+ return;
+
RandomSelection_Init();
for(e = findradius(self.origin, dist); e; e = e.chain)
if(e != self.owner) if(e.takedamage == DAMAGE_AIM) if(e.classname != "player" || !self.owner || IsDifferentTeam(e, self))
Modified: branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/qcsrc/server/w_rocketlauncher.qc 2009-11-07 17:17:43 UTC (rev 8223)
@@ -210,7 +210,8 @@
else
{
if(self == self.owner.lastrocket)
- if(!self.owner.rl_release)
+ if not(self.owner.rl_release)
+ if not(self.BUTTON_ATCK2)
if(cvar("g_balance_rocketlauncher_guiderate"))
if(time > self.pushltime)
if(self.owner.deadflag == DEAD_NO)
Modified: branches/nexuiz-2.0/data/textures/common/antiportal.tga
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/caulk.tga (from rev 8219, trunk/data/textures/common/caulk.tga)
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/clip.tga (from rev 8219, trunk/data/textures/common/clip.tga)
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/donotenter.tga (from rev 8219, trunk/data/textures/common/donotenter.tga)
===================================================================
(Binary files differ)
Modified: branches/nexuiz-2.0/data/textures/common/forcecaulk.tga
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/full_clip.tga (from rev 8219, trunk/data/textures/common/full_clip.tga)
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/hint.tga (from rev 8219, trunk/data/textures/common/hint.tga)
===================================================================
(Binary files differ)
Modified: branches/nexuiz-2.0/data/textures/common/invisible.tga
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/nodraw.tga (from rev 8219, trunk/data/textures/common/nodraw.tga)
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/origin.tga (from rev 8219, trunk/data/textures/common/origin.tga)
===================================================================
(Binary files differ)
Copied: branches/nexuiz-2.0/data/textures/common/trigger.tga (from rev 8219, trunk/data/textures/common/trigger.tga)
===================================================================
(Binary files differ)
Modified: branches/nexuiz-2.0/data/vehicle_racer.cfg
===================================================================
--- branches/nexuiz-2.0/data/vehicle_racer.cfg 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/vehicle_racer.cfg 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,15 +1,50 @@
-set g_vehicle_racer_health 250
-set g_vehicle_racer_turnspeed 360
-set g_vehicle_racer_speed_stop 0.1
-set g_vehicle_racer_speed_forward 2000
-set g_vehicle_racer_speed_strafe 1000
-set g_vehicle_racer_movement_inertia 0.15
+set g_vehicle_racer_reload 1
+
+set g_vehicle_racer_health 250
+
+set g_vehicle_racer_shield 100
+set g_vehicle_racer_shield_block 1
+set g_vehicle_racer_shield_regen 50
+set g_vehicle_racer_shield_regen_dmgpause 0.25
+set g_vehicle_racer_shield_regen_energyrate 2
+
+set g_vehicle_racer_energy 150
+set g_vehicle_racer_energy_regen 50
+set g_vehicle_racer_energy_usepause 1
+
+set g_vehicle_racer_speed_stop 2000
+set g_vehicle_racer_speed_forward 1600
+set g_vehicle_racer_speed_strafe 750
+
+set g_vehicle_racer_speed_afterburn 3500
+set g_vehicle_racer_speed_afterburn_emin 25
+set g_vehicle_racer_speed_afterburn_cost 100
+
set g_vehicle_racer_power_air 0
-set g_vehicle_racer_power_solid 5000
+set g_vehicle_racer_power_solid 1000
+
set g_vehicle_racer_drag 0.25
-set g_vehicle_racer_dragexp 0.75
-set g_vehicle_racer_downforce 0.05
-set g_vehicle_racer_springlength 200
-set g_vehicle_racer_inert 0.25
-set g_vehicle_racer_drag2 0.01
-set g_vehicle_racer_drag2exp 0.85
+set g_vehicle_racer_dragexp 0.9
+
+set g_vehicle_racer_downforce 0.01
+
+set g_vehicle_racer_springlength 150
+set g_vehicle_racer_anglestabilizer 18
+
+set g_vehicle_racer_turnspeed 180
+set g_vehicle_racer_pitchspeed 360
+set g_vehicle_racer_maxpitch 25
+set g_vehicle_racer_turnroll 0.3
+
+set g_vehicle_racer_laser_speed 18000
+set g_vehicle_racer_laser_damage 20
+set g_vehicle_racer_laser_radius 100
+set g_vehicle_racer_laser_refire 0.05
+set g_vehicle_racer_laser_cost 2
+
+set g_vehicle_racer_rocket_speed 1500
+set g_vehicle_racer_rocket_damage 200
+set g_vehicle_racer_rocket_radius 100
+set g_vehicle_racer_rocket_refire 5
+set g_vehicle_racer_rocket_cost 0
+
Modified: branches/nexuiz-2.0/data/vehicle_spiderbot.cfg
===================================================================
--- branches/nexuiz-2.0/data/vehicle_spiderbot.cfg 2009-11-07 17:16:16 UTC (rev 8222)
+++ branches/nexuiz-2.0/data/vehicle_spiderbot.cfg 2009-11-07 17:17:43 UTC (rev 8223)
@@ -1,17 +1,17 @@
-set g_vehicle_spiderbot_respawntime 30
-set g_vehicle_spiderbot_health 875
-set g_vehicle_spiderbot_health_regen 10
-set g_vehicle_spiderbot_health_regen_dmgpause 10
+set g_vehicle_spiderbot_respawntime 30
+set g_vehicle_spiderbot_health 875
+set g_vehicle_spiderbot_health_regen 10
+set g_vehicle_spiderbot_health_regen_dmgpause 10
-set g_vehicle_spiderbot_shield 125
-set g_vehicle_spiderbot_shield_block 1
-set g_vehicle_spiderbot_shield_regen 25
+set g_vehicle_spiderbot_shield 125
+set g_vehicle_spiderbot_shield_block 1
+set g_vehicle_spiderbot_shield_regen 25
set g_vehicle_spiderbot_shield_regen_dmgpause 0.25
-set g_vehicle_spiderbot_turnspeed 90
-set g_vehicle_spiderbot_head_turnspeed 120
-set g_vehicle_spiderbot_head_turnlimit 120
-set g_vehicle_spiderbot_head_pitchspeed 60
+set g_vehicle_spiderbot_turnspeed 90
+set g_vehicle_spiderbot_head_turnspeed 120
+set g_vehicle_spiderbot_head_turnlimit 120
+set g_vehicle_spiderbot_head_pitchspeed 60
set g_vehicle_spiderbot_head_pitchlimit_up 8
set g_vehicle_spiderbot_head_pitchlimit_down -24
@@ -20,14 +20,14 @@
set g_vehicle_spiderbot_speed_strafe 300
set g_vehicle_spiderbot_movement_inertia 0.25
-set g_vehicle_spiderbot_minigun_bulletconstant 200
-set g_vehicle_spiderbot_minigun_damage 20
+set g_vehicle_spiderbot_minigun_damage 25
set g_vehicle_spiderbot_minigun_spread 0.015
set g_vehicle_spiderbot_minigun_speed 50000
-set g_vehicle_spiderbot_minigun_refire 0.025
-set g_vehicle_spiderbot_minigun_heat 0.015
-set g_vehicle_spiderbot_minigun_cooldown 0.015
+set g_vehicle_spiderbot_minigun_refire 0.05
+set g_vehicle_spiderbot_minigun_heat 10
+set g_vehicle_spiderbot_minigun_cooldown 10
+
set g_vehicle_spiderbot_rocket_health 100
set g_vehicle_spiderbot_rocket_damage 75
set g_vehicle_spiderbot_rocket_edgedamage 15
@@ -44,4 +44,4 @@
set g_vehicle_spiderbot_crush_force 50
set cl_vehicle_spiderbot_cross_alpha 0.4
-set cl_vehicle_spiderbot_cross_size 1
+set cl_vehicle_spiderbot_cross_size 1
More information about the nexuiz-commits
mailing list