r5113 - in trunk/data: qcsrc/server scripts
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Nov 27 03:06:36 EST 2008
Author: div0
Date: 2008-11-27 03:06:32 -0500 (Thu, 27 Nov 2008)
New Revision: 5113
Modified:
trunk/data/qcsrc/server/arena.qc
trunk/data/qcsrc/server/assault.qc
trunk/data/qcsrc/server/func_breakable.qc
trunk/data/qcsrc/server/g_damage.qc
trunk/data/qcsrc/server/g_triggers.qc
trunk/data/qcsrc/server/w_seeker.qc
trunk/data/scripts/entities.def
Log:
breakable: add support for causing damage, and playing a sound
seeker: allow following func_breakable
assault: fixes
Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/arena.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -126,19 +126,22 @@
{
target_assault_roundend_reset();
}
- else if(self.classname == "target_assault_roundstart")
- {
- self.use();
- }
}
- // Waypoints come LAST (keyhunt keys reference them)
+ // Waypoints and assault start come LAST
for(self = world; (self = nextent(self)); )
+ if(clienttype(self) == CLIENTTYPE_NOTACLIENT)
+ {
if(self.classname == "sprite_waypoint")
{
if(self.health | g_keyhunt)
WaypointSprite_Kill(self);
}
+ else if(self.classname == "target_assault_roundstart")
+ {
+ self.use();
+ }
+ }
// Moving the player reset code here since the player-reset depends
// on spawnpoint entities which have to be reset first --blub
Modified: trunk/data/qcsrc/server/assault.qc
===================================================================
--- trunk/data/qcsrc/server/assault.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/assault.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -1,7 +1,7 @@
void spawnfunc_func_breakable();
void target_objective_decrease_activate();
.entity assault_decreaser;
-.entity sprite;
+.entity assault_sprite;
void spawnfunc_info_player_attacker() {
if(!g_assault)
@@ -64,8 +64,10 @@
return;
}
- if(other.sprite.classname == "assault_decreaser_sprite")
- WaypointSprite_Disown(other.sprite, waypointsprite_deadlifetime);
+ if(other.assault_sprite.classname == "assault_decreaser_sprite")
+ WaypointSprite_Disown(other.assault_sprite, waypointsprite_deadlifetime);
+ else
+ return; // already activated! cannot activate again!
if(self.enemy.health < ASSAULT_VALUE_INACTIVE)
{
@@ -129,10 +131,10 @@
self.owner = world;
for(ent = world; (ent = find(ent, target, self.targetname)); )
{
- if(ent.sprite != world)
- WaypointSprite_Disown(ent.sprite, waypointsprite_deadlifetime);
+ if(ent.assault_sprite != world)
+ WaypointSprite_Disown(ent.assault_sprite, waypointsprite_deadlifetime);
- spr = WaypointSprite_SpawnFixed("<placeholder>", 0.5 * (ent.absmin + ent.absmax), ent, sprite);
+ spr = WaypointSprite_SpawnFixed("<placeholder>", 0.5 * (ent.absmin + ent.absmax), ent, assault_sprite);
spr.assault_decreaser = self;
spr.waypointsprite_visible_for_player = assault_decreaser_sprite_visible;
spr.classname = "assault_decreaser_sprite";
@@ -156,10 +158,6 @@
self.classname = "target_objective_decrease";
- precache_model("models/sprites/defend.sp2");
- precache_model("models/sprites/destroy.sp2");
- precache_model("models/sprites/push.sp2");
-
if(!self.dmg) {
self.dmg = 101;
}
Modified: trunk/data/qcsrc/server/func_breakable.qc
===================================================================
--- trunk/data/qcsrc/server/func_breakable.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/func_breakable.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -1,6 +1,9 @@
.entity sprite;
-// TODO add the fields this uses to the entities.def when done
+.float dmg;
+.float dmg_edge;
+.float dmg_radius;
+.float dmg_force;
.string mdl_dead; // or "" to hide when broken
.string debris; // space separated list of debris models
@@ -117,8 +120,16 @@
void func_breakable_destroy() {
float n, i;
+ activator = self.owner;
+
func_breakable_destroyed();
+ if(self.noise)
+ sound (self, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NORM);
+
+ if(self.dmg)
+ RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world);
+
// now throw around the debris
n = tokenize_sane(self.debris);
for(i = 0; i < n; ++i)
@@ -140,12 +151,10 @@
if(self.sprite)
WaypointSprite_Ping(self.sprite);
self.health = self.health - damage;
+ func_breakable_colormod();
+
if(self.health < 0)
- {
- activator = attacker;
- func_breakable_destroy();
- }
- func_breakable_colormod();
+ W_PrepareExplosionByDamage(attacker, func_breakable_destroy);
}
void func_breakable_reset()
@@ -169,6 +178,15 @@
if(self.count == 0)
self.count = 1;
+ if(!self.message)
+ self.message = "got too close to an explosion";
+ if(!self.message2)
+ self.message2 = "was pushed into an explosion by";
+ if(!self.dmg_radius)
+ self.dmg_radius = 150;
+ if(!self.dmg_force)
+ self.dmg_force = 200;
+
self.mdl = self.model;
SetBrushEntityModel();
self.mins_save = self.mins;
@@ -182,6 +200,8 @@
n = tokenize_sane(self.debris);
for(i = 0; i < n; ++i)
precache_model(argv(i));
+ if(self.noise)
+ precache_sound(self.noise);
func_breakable_reset();
}
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/g_damage.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -432,8 +432,8 @@
else
{
centerprint(targ, "^1Watch your step!\n\n\n");
- if (deathtype == DEATH_HURTTRIGGER && attacker.message != "")
- bprint ("^1",s, "^1 ", attacker.message, "\n");
+ if (deathtype == DEATH_HURTTRIGGER && inflictor.message != "")
+ bprint ("^1",s, "^1 ", inflictor.message, "\n");
else if (deathtype == DEATH_DROWN)
if(sv_gentle)
bprint ("^1",s, "^1 was in the water for too long\n");
Modified: trunk/data/qcsrc/server/g_triggers.qc
===================================================================
--- trunk/data/qcsrc/server/g_triggers.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/g_triggers.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -86,16 +86,17 @@
switch(i)
{
default:
- case 0: s = self.target; break;
- case 1: s = self.target2; break;
- case 2: s = self.target3; break;
- case 3: s = self.target4; break;
+ case 0: s = stemp.target; break;
+ case 1: s = stemp.target2; break;
+ case 2: s = stemp.target3; break;
+ case 3: s = stemp.target4; break;
}
if (s != "")
{
for(t = world; (t = find(t, targetname, s)); )
if(t.use)
{
+ print(stemp.classname, " ", stemp.targetname, " -> ", t.classname, " ", t.targetname, "\n");
self = t;
other = stemp;
activator = act;
Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/qcsrc/server/w_seeker.qc 2008-11-27 08:06:32 UTC (rev 5113)
@@ -33,7 +33,7 @@
void Seeker_Missile_Think()
{
entity e;
- vector desireddir, olddir, newdir;
+ vector desireddir, olddir, newdir, eorg;
float turnrate;
float dist;
@@ -56,10 +56,11 @@
if (self.enemy != world)
{
e = self.enemy;
+ eorg = 0.5 * (e.absmin + e.absmax);
turnrate = cvar("g_balance_seeker_missile_turnrate"); // how fast to turn
- desireddir = normalize(e.origin - self.origin);
+ desireddir = normalize(eorg - self.origin);
olddir = normalize(self.velocity); // get my current direction
- dist = vlen(e.origin - self.origin);
+ dist = vlen(eorg - self.origin);
// Do evasive maneuvers for world objects? ( this should be a cpu hog. :P )
if (cvar("g_balance_seeker_missile_smart") && (dist > cvar("g_balance_seeker_missile_smart_mindist")))
@@ -68,7 +69,7 @@
if ( vlen(self.origin + olddir * self.wait) < dist)
traceline(self.origin, self.origin + olddir * self.wait, FALSE, self);
else
- traceline(self.origin, self.enemy.origin, FALSE, self);
+ traceline(self.origin, eorg, FALSE, self);
// Setup adaptive tracelength
self.wait = vlen(self.origin - trace_endpos);
Modified: trunk/data/scripts/entities.def
===================================================================
--- trunk/data/scripts/entities.def 2008-11-26 20:46:31 UTC (rev 5112)
+++ trunk/data/scripts/entities.def 2008-11-27 08:06:32 UTC (rev 5113)
@@ -1165,6 +1165,13 @@
count: particle effect multiplier
mdl_dead: optional replacement model to show when destroyed
debris: names of debris models to show when destroyed, separated by spaces
+noise: sound to play when destroyed
+dmg: damage to deal to the environment when destroyed
+dmg_edge: edge damage to deal to the environment when destroyed
+dmg_radius: damage radius
+dmg_force: damage force
+message: death message when a player gets hit by the explosion
+message2: death message when someone gets pushed into this (default: "was pushed into an explosion by"). The # character is replaced by the attacker name if present (and it instead does not get appended to the end)
-------- SPAWNFLAGS --------
DISABLED: do not allow damaging this until it is first activated
INDICATE: indicate amount of damage already taken by coloring
More information about the nexuiz-commits
mailing list