.float ccnt;
.float bomdir;
void() GrenadeExplode;
void() BecomeExplosion;
void() GroundBombKaboom =
{
local entity e;
if(pointcontents(self.origin) == CONTENT_SOLID || self.cnt >= self.ccnt || !walkmove(self.bomdir, 50))
{
GrenadeExplode();
return;
}
if(pointcontents(self.origin) == CONTENT_SKY)
remove(self);
self.cnt = self.cnt + 1;
sound(self, CHAN_WEAPON, "weapons/r_exp3.wav", 1, ATTN_NORM);
self.nextthink = time + 0.2;
self.think = GroundBombKaboom;
T_RadiusDamage (self, self.owner, self.dmg, self.owner);
WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
WriteByte (MSG_BROADCAST, TE_EXPLOSION);
WriteCoord (MSG_BROADCAST, self.origin_x);
WriteCoord (MSG_BROADCAST, self.origin_y);
WriteCoord (MSG_BROADCAST, self.origin_z);
e = spawn();
setorigin(e, self.origin);
e.think = BecomeExplosion;
e.nextthink = time + 0.01;
};
void(vector org, float dir) groundcrasher =
{
newmis = spawn();
newmis.solid = SOLID_NOT;
newmis.takedamage = DAMAGE_NO;
newmis.movetype = MOVETYPE_STEP;
setorigin(newmis, org);
setsize(newmis, VEC_ORIGIN, VEC_ORIGIN);
newmis.bomdir = dir;
newmis.owner = self;
newmis.ccnt = 10;
newmis.dmg = 90;
newmis.classname = "groundbomb";
newmis.touch = SUB_Null;
newmis.think = GroundBombKaboom;
newmis.nextthink = time + 0.2;
};