r4303 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Sep 2 17:22:16 EDT 2008
Author: avirox
Date: 2008-09-02 17:22:16 -0400 (Tue, 02 Sep 2008)
New Revision: 4303
Modified:
trunk/data/qcsrc/server/miscfunctions.qc
Log:
- Added new entity: "func_breakable"; functions the same way func_assault_destructible does, but it's for general gameplay use (IE destructible glass, crates, etc.)
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2008-09-02 21:16:56 UTC (rev 4302)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2008-09-02 21:22:16 UTC (rev 4303)
@@ -1303,3 +1303,97 @@
else
return 0;
}
+
+//
+// func_breakable
+// - basically func_assault_destructible for general gameplay use
+//
+float () crandom;
+void () SUB_UseTargets, assault_destructible_use, SUB_Remove, SUB_Null;
+void LaunchDebris (string debrisname) =
+{
+ local entity dbr;
+
+ if (debrisname == "" || !debrisname)
+ return;
+
+ dbr = spawn();
+ dbr.origin = self.origin;
+ setmodel (dbr, debrisname );
+ setsize (dbr, '0 0 0', '0 0 0');
+ dbr.velocity_x = 70 * crandom();
+ dbr.velocity_y = 70 * crandom();
+ dbr.velocity_z = 140 + 70 * random();
+ dbr.movetype = MOVETYPE_BOUNCE;
+ dbr.solid = SOLID_BBOX;
+ dbr.avelocity_x = random()*600;
+ dbr.avelocity_y = random()*600;
+ dbr.avelocity_z = random()*600;
+ dbr.think = SUB_Remove;
+ dbr.nextthink = time + 13 + random()*10;
+};
+
+.string debris1, debris2, debris3;
+.string mdl_dead;
+void func_breakable_destroy() {
+ if (self.mdl_dead)
+ setmodel(self, self.mdl_dead);
+ else {
+ self.model = "";
+ self.solid = SOLID_NOT;
+ }
+ self.takedamage = DAMAGE_NO;
+
+ // now throw around the debris
+ LaunchDebris(self.debris1);
+ LaunchDebris(self.debris2);
+ LaunchDebris(self.debris3);
+
+ SUB_UseTargets();
+
+ self.event_damage = SUB_Null;
+}
+
+void func_breakable_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) {
+
+ if(self.cnt > 0) {
+ self.health = self.health - damage;
+ // add pain effects?
+ }
+
+ if(self.health < 0) {
+ activator = attacker;
+ func_breakable_destroy();
+ }
+}
+
+// destructible walls that can be used to trigger target_objective_decrease
+void spawnfunc_func_breakable() {
+ if(!self.health)
+ self.health = 100;
+
+ self.max_health = self.health;
+
+ //self.cnt = 0; // not yet activated
+
+
+
+ self.classname = "func_breakable";
+ self.mdl = self.model;
+ setmodel(self, self.mdl);
+
+ self.solid = SOLID_BSP;
+
+ // precache all the models
+ if (self.mdl_dead)
+ precache_model(self.mdl_dead);
+ if (self.debris1)
+ precache_model(self.debris1);
+ if (self.debris2)
+ precache_model(self.debris2);
+ if (self.debris3)
+ precache_model(self.debris3);
+
+ self.use = assault_destructible_use; // shared use function, b/c they woudl do the same thing anyways
+ self.event_damage = func_breakable_damage;
+}
\ No newline at end of file
More information about the nexuiz-commits
mailing list