210 lines
4.9 KiB
C++
210 lines
4.9 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Quake 2 Engine/Sin/code/game/explosion.h $
|
|
// $Revision:: 14 $
|
|
// $Author:: Aldie $
|
|
// $Date:: 10/02/98 7:20p $
|
|
//
|
|
// Copyright (C) 1997 by Ritual Entertainment, Inc.
|
|
// All rights reserved.
|
|
//
|
|
// This source is may not be distributed and/or modified without
|
|
// expressly written permission by Ritual Entertainment, Inc.
|
|
//
|
|
// $Log:: /Quake 2 Engine/Sin/code/game/explosion.h $
|
|
//
|
|
// 14 10/02/98 7:20p Aldie
|
|
// Added flashplayers to do blinding flashes
|
|
//
|
|
// 13 9/28/98 9:12p Markd
|
|
// Put in archive and unarchive functions
|
|
//
|
|
// 12 9/05/98 12:13p Aldie
|
|
// externed RadiusDamage
|
|
//
|
|
// 11 9/01/98 3:05p Markd
|
|
// Rewrote explosion code
|
|
//
|
|
// 10 6/15/98 10:39a Aldie
|
|
// Updated explosion
|
|
//
|
|
// 9 5/25/98 7:08p Markd
|
|
// commented out some stuff
|
|
//
|
|
// 8 4/05/98 6:42p Jimdose
|
|
// Added Exploders and MultiExploders
|
|
//
|
|
// 7 3/23/98 1:33p Jimdose
|
|
// Revamped event and command system
|
|
//
|
|
// 6 3/18/98 2:27p Jimdose
|
|
// Converted to work with new sin
|
|
//
|
|
// 4 12/06/97 4:48p Markd
|
|
// Added interpretCommands.
|
|
// Added GetArgs as commands for future processing
|
|
// Removed dmg,attentuatioin and volume, moved these to Trigger
|
|
//
|
|
// 3 10/27/97 2:59p Jimdose
|
|
// Removed dependency on quakedef.h
|
|
//
|
|
// 2 9/26/97 5:23p Jimdose
|
|
// Added standard Ritual headers
|
|
//
|
|
// DESCRIPTION:
|
|
// Standard explosion object that is spawned by other entites and not map designers.
|
|
// Explosion is used by many of the weapons for the blast effect, but is also used
|
|
// by the Exploder and MultiExploder triggers. These triggers create one or more
|
|
// explosions each time they are activated.
|
|
//
|
|
|
|
#ifndef __EXPLOSION_H__
|
|
#define __EXPLOSION_H__
|
|
|
|
#include "g_local.h"
|
|
#include "entity.h"
|
|
#include "trigger.h"
|
|
|
|
class EXPORT_FROM_DLL Exploder : public Trigger
|
|
{
|
|
private:
|
|
int damage;
|
|
float attenuation;
|
|
float volume;
|
|
|
|
virtual void MakeExplosion( Event *ev );
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Exploder )
|
|
|
|
Exploder();
|
|
virtual void Archive( Archiver &arc );
|
|
virtual void Unarchive( Archiver &arc );
|
|
};
|
|
|
|
inline EXPORT_FROM_DLL void Exploder::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Archive( arc );
|
|
|
|
arc.WriteInteger( damage );
|
|
arc.WriteFloat( attenuation );
|
|
arc.WriteFloat( volume );
|
|
}
|
|
|
|
inline EXPORT_FROM_DLL void Exploder::Unarchive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Unarchive( arc );
|
|
|
|
arc.ReadInteger( &damage );
|
|
arc.ReadFloat( &attenuation );
|
|
arc.ReadFloat( &volume );
|
|
}
|
|
|
|
|
|
class EXPORT_FROM_DLL MultiExploder : public Trigger
|
|
{
|
|
private:
|
|
float explodewait;
|
|
float explode_time;
|
|
float duration;
|
|
int damage;
|
|
float attenuation;
|
|
float volume;
|
|
float randomness;
|
|
|
|
virtual void MakeExplosion( Event *ev );
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( MultiExploder );
|
|
|
|
MultiExploder();
|
|
virtual void Archive( Archiver &arc );
|
|
virtual void Unarchive( Archiver &arc );
|
|
};
|
|
|
|
inline EXPORT_FROM_DLL void MultiExploder::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Archive( arc );
|
|
|
|
arc.WriteFloat( explodewait );
|
|
arc.WriteFloat( explode_time );
|
|
arc.WriteFloat( duration );
|
|
arc.WriteInteger( damage );
|
|
arc.WriteFloat( attenuation );
|
|
arc.WriteFloat( volume );
|
|
arc.WriteFloat( randomness );
|
|
}
|
|
|
|
inline EXPORT_FROM_DLL void MultiExploder::Unarchive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Unarchive( arc );
|
|
|
|
arc.ReadFloat( &explodewait );
|
|
arc.ReadFloat( &explode_time );
|
|
arc.ReadFloat( &duration );
|
|
arc.ReadInteger( &damage );
|
|
arc.ReadFloat( &attenuation );
|
|
arc.ReadFloat( &volume );
|
|
arc.ReadFloat( &randomness );
|
|
}
|
|
|
|
void CreateExplosion
|
|
(
|
|
Vector pos,
|
|
float damage = 120,
|
|
float scale = 1.0f,
|
|
qboolean bigexplosion = true,
|
|
Entity *inflictor = NULL,
|
|
Entity *attacker = NULL,
|
|
Entity *ignore = NULL,
|
|
//### added variable MOD and falloff rate
|
|
int mod = MOD_ROCKETSPLASH,
|
|
float falloff_rate = 0.5,
|
|
//###
|
|
float volume = 1.0f,
|
|
float attenuation = ATTN_NORM,
|
|
float r = 1.0f,
|
|
float g = 0.2f,
|
|
float b = 0.0f,
|
|
float light_radius = 240,
|
|
float life = 1,
|
|
float decay = 0.95
|
|
);
|
|
|
|
void RadiusDamage
|
|
(
|
|
Entity *inflictorent,
|
|
Entity *attackerent,
|
|
int damage,
|
|
Entity *ignoreent,
|
|
//### added variable MOD and falloff rate
|
|
int mod = MOD_ROCKETSPLASH,
|
|
float falloff_rate = 0.5
|
|
//###
|
|
);
|
|
|
|
void FlashPlayers
|
|
(
|
|
Vector org,
|
|
float r,
|
|
float g,
|
|
float b,
|
|
float a,
|
|
float rad
|
|
);
|
|
|
|
void FlashGogglesPlayers (Vector org, float rad); //###
|
|
|
|
#endif /* explosion.h */
|