sin-sdk/misc.h

649 lines
14 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/misc.h $
// $Revision:: 71 $
// $Author:: Jimdose $
// $Date:: 11/11/98 10:02p $
//
// 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/misc.h $
//
// 71 11/11/98 10:02p Jimdose
// added ClipBox
//
// 70 10/17/98 8:12p Jimdose
// Changed Damage to DamgeEvent
//
// 69 10/14/98 12:13a Aldie
// Proto for intermission
//
// 68 10/09/98 4:34p Aldie
// Added OnSameTeam
//
// 67 10/07/98 11:53p Jimdose
// Added BloodSplat
//
// 66 10/06/98 10:52p Aldie
// Created an oxygenator
//
// 65 10/05/98 11:23p Markd
// Added MadeBreakingSound
//
// 64 9/28/98 9:12p Markd
// Put in archive and unarchive functions
//
// 63 9/18/98 8:14p Markd
// rewrote surface system so that surfaces are now damaged by surface name
// instead of by surfinfo
//
// 62 8/29/98 5:27p Markd
// added specialfx, replaced misc with specialfx where appropriate
//
// 61 8/29/98 2:53p Aldie
// Updated printing of location based damage
//
// 60 8/29/98 12:59p Markd
// Fixed func_explodingwall stuff
//
// 59 8/24/98 5:44p Aldie
// Added fov to projectiles
//
// 58 8/19/98 8:50p Aldie
// Added randomparticles
//
// 57 8/17/98 4:35p Markd
// Added SendOverlay
//
// 56 8/08/98 8:51p Aldie
// Added func_spawnchain and changed spawns to entities
//
// 55 8/08/98 6:24p Aldie
// Added spawnoutofsight
//
// 54 8/04/98 5:56p Markd
// Added FuncRemove
//
// 53 7/21/98 4:23p Aldie
// Make icons work for locks
//
// 52 7/17/98 6:08p Aldie
// Added spawntargetname to func_spawn
//
// 51 7/15/98 6:18p Markd
// re-ordered SpawnTempDlight arguments
//
// 50 7/13/98 5:01p Aldie
// Added dead player bodies with gibbing
//
// 49 7/11/98 2:49p Markd
// Added SendDialog event
//
// 48 7/10/98 4:11p Markd
// Revamped func_explodingwall
//
// 47 7/08/98 3:12p Aldie
// Added func_respawn
//
// 46 7/02/98 7:57p Markd
// Redid func_explodingwall and func_glass
//
// 45 6/30/98 4:37p Markd
// Added noise to func_glass and func_shatter
//
// 44 6/24/98 4:51p Aldie
// Updated func_spawn
//
// 43 6/24/98 12:38p Markd
// SpawnParticles conflicted with the entity function of the same name
//
// 42 6/24/98 12:23p Markd
// Added SpawnParticles
//
// 41 6/18/98 2:00p Markd
// rewrote tesselation code
//
// 40 6/15/98 12:25p Aldie
// Updated pulse beam parms
//
// 39 6/15/98 10:39a Aldie
// Added SpawnPulseBeam
//
// 38 6/08/98 7:23p Aldie
// Added DamageSurfaceByName
//
// 37 5/28/98 1:26p Aldie
// Added rocket explosion particles
//
// 36 5/27/98 4:54p Markd
// Changed Smoke Setup method
//
// 35 5/26/98 9:27p Aldie
// Typo
//
// 34 5/26/98 9:26p Aldie
// Added func_spawn
//
// 33 5/25/98 12:22p Aldie
// Added func_electrocute
//
// 32 5/25/98 7:15p Markd
// Changed TempModel stuff
//
// 31 5/25/98 5:42p Markd
// Added SpawnDlight and fixed other stuff
//
// 30 5/23/98 10:38p Markd
// Added TempModel call
//
// 29 5/20/98 1:32p Markd
// changed func_shatter a bit
//
// 28 5/13/98 6:22p Markd
// Added BurnWall
//
// 27 5/05/98 8:38p Aldie
// Added virtual setup to Projectile.
//
// 26 5/05/98 5:35p Aldie
// Updated damage surfaces
//
// 25 5/03/98 8:12p Markd
// Added SpawnSparks call
//
// 24 4/18/98 2:32p Jimdose
// Added ExplodingWall, Shatter, and Glass
//
// 23 4/07/98 11:55p Jimdose
// SetBeam now accepts r, g, b, and alpha for color
//
// 22 4/04/98 6:13p Jimdose
// Added Bubble, Smoke, and Projectile
//
// 21 3/30/98 2:39p Jimdose
// Made teleporters handle non-clients
//
// 20 3/29/98 9:39p Jimdose
// Changed killed to a damage event
//
// 19 3/28/98 6:37p Jimdose
// Made teleporters work
//
// 18 3/23/98 1:33p Jimdose
// Revamped event and command system
//
// 17 3/11/98 2:23p Jimdose
// Moved AreaPortals to areaportal.cpp
//
// 16 3/05/98 3:49p Aldie
// More support for damage surfaces.
//
// 15 3/04/98 8:00p Aldie
// More support for damage surfaces.
//
// 14 3/02/98 8:49p Jimdose
// Changed CLASS_PROTOTYPE to only take the classname
//
// 13 3/02/98 5:42p Jimdose
// Moved light entities to light.cpp
//
// 12 2/27/98 12:50p Jimdose
// Added Light, LightRamp, and TriggerLightStyle
//
// 11 2/21/98 1:07p Jimdose
// Added Beam class
//
// 10 2/06/98 5:43p Jimdose
// Added Teleporter and AreaPortal.
// Added constructor to Detail
//
// 8 2/03/98 10:43a Jimdose
// Updated to work with Quake 2 engine
//
// 6 10/31/97 4:26p Jimdose
// Removed owner from HackThinker since it was already defined in Entity
//
// 5 10/28/97 8:20p Jimdose
// added Bubble
//
// 4 10/27/97 2:59p Jimdose
// Removed dependency on quakedef.h
//
// 3 10/01/97 11:25a Markd
// moved viewthing to its own file
//
// 2 9/26/97 6:14p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// Basically the big stew pot of the DLLs, or maybe a garbage bin, whichever
// metaphore you prefer. This really should be cleaned up. Anyway, this
// should contain utility functions that could be used by any entity.
// Right now it contains everything from entities that could be in their
// own file to my mother pot roast recipes.
//
#ifndef __MISC_H__
#define __MISC_H__
#include "g_local.h"
#include "entity.h"
#include "trigger.h"
#include "queue.h"
void SendOverlay
(
Entity *ent,
str overlayname
);
void SendIntermission
(
Entity *ent,
str intermissionname
);
void SendDialog
(
const char *icon_name,
const char *dialog_text
);
const char *ExpandLocation
(
const char *location
);
void MadeBreakingSound
(
Vector pos,
Entity * activator
);
qboolean OnSameTeam
(
Entity *ent1,
Entity *ent2
);
class EXPORT_FROM_DLL InfoNull : public Entity
{
public:
CLASS_PROTOTYPE( InfoNull );
InfoNull();
};
class EXPORT_FROM_DLL FuncRemove : public Entity
{
public:
CLASS_PROTOTYPE( FuncRemove );
FuncRemove();
};
class EXPORT_FROM_DLL InfoNotNull : public Entity
{
public:
CLASS_PROTOTYPE( InfoNotNull );
};
class EXPORT_FROM_DLL Wall : public Entity
{
private:
public:
CLASS_PROTOTYPE( Wall );
Wall();
};
class EXPORT_FROM_DLL IllusionaryWall : public Entity
{
private:
public:
CLASS_PROTOTYPE( IllusionaryWall );
IllusionaryWall();
};
class EXPORT_FROM_DLL BreakawayWall : public TriggerOnce
{
private:
public:
CLASS_PROTOTYPE( BreakawayWall );
void BreakWall( Event *ev );
void Setup( Event *ev );
BreakawayWall();
};
class EXPORT_FROM_DLL ExplodingWall : public Trigger
{
protected:
int dmg;
int explosions;
float attack_finished;
Vector land_angles;
float land_radius;
float angle_speed;
int state;
Vector orig_mins, orig_maxs;
qboolean on_ground;
public:
CLASS_PROTOTYPE( ExplodingWall );
ExplodingWall();
virtual void SetupSecondStage( void );
virtual void Explode( Event *ev );
virtual void DamageEvent( Event *ev );
virtual void GroundDamage( Event *ev );
virtual void TouchFunc( Event *ev );
virtual void StopRotating( Event *ev );
virtual void CheckOnGround( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void ExplodingWall::Archive
(
Archiver &arc
)
{
Trigger::Archive( arc );
arc.WriteInteger( dmg );
arc.WriteInteger( explosions );
arc.WriteFloat( attack_finished );
arc.WriteVector( land_angles );
arc.WriteFloat( land_radius );
arc.WriteFloat( angle_speed );
arc.WriteInteger( state );
arc.WriteVector( orig_mins );
arc.WriteVector( orig_maxs );
arc.WriteBoolean( on_ground );
}
inline EXPORT_FROM_DLL void ExplodingWall::Unarchive
(
Archiver &arc
)
{
Trigger::Unarchive( arc );
arc.ReadInteger( &dmg );
arc.ReadInteger( &explosions );
arc.ReadFloat( &attack_finished );
arc.ReadVector( &land_angles );
arc.ReadFloat( &land_radius );
arc.ReadFloat( &angle_speed );
arc.ReadInteger( &state );
arc.ReadVector( &orig_mins );
arc.ReadVector( &orig_maxs );
arc.ReadBoolean( &on_ground );
}
class EXPORT_FROM_DLL Electrocute : public Trigger
{
private:
float radius;
public:
CLASS_PROTOTYPE( Electrocute );
Electrocute();
virtual void KillSight( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Electrocute::Archive
(
Archiver &arc
)
{
Trigger::Archive( arc );
arc.WriteFloat( radius );
}
inline EXPORT_FROM_DLL void Electrocute::Unarchive
(
Archiver &arc
)
{
Trigger::Unarchive( arc );
arc.ReadFloat( &radius );
}
class EXPORT_FROM_DLL Detail : public Wall
{
public:
CLASS_PROTOTYPE( Detail );
Detail();
};
class EXPORT_FROM_DLL Teleporter : public Trigger
{
public:
CLASS_PROTOTYPE( Teleporter );
Teleporter();
virtual void Teleport( Event *ev );
};
class EXPORT_FROM_DLL TeleporterDestination : public Entity
{
public:
Vector movedir;
CLASS_PROTOTYPE( TeleporterDestination );
TeleporterDestination();
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void TeleporterDestination::Archive
(
Archiver &arc
)
{
Entity::Archive( arc );
arc.WriteVector( movedir );
}
inline EXPORT_FROM_DLL void TeleporterDestination::Unarchive
(
Archiver &arc
)
{
Entity::Unarchive( arc );
arc.ReadVector( &movedir );
}
class EXPORT_FROM_DLL Waypoint : public Entity
{
public:
CLASS_PROTOTYPE( Waypoint );
};
class EXPORT_FROM_DLL Shatter : public DamageThreshold
{
protected:
qboolean threshold;
str noise;
public:
CLASS_PROTOTYPE( Shatter );
virtual void DamageEvent( Event *ev );
virtual void DoShatter( Event *ev );
Shatter();
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Shatter::Archive
(
Archiver &arc
)
{
DamageThreshold::Archive( arc );
arc.WriteBoolean( threshold );
arc.WriteString( noise );
}
inline EXPORT_FROM_DLL void Shatter::Unarchive
(
Archiver &arc
)
{
DamageThreshold::Unarchive( arc );
arc.ReadBoolean( &threshold );
arc.ReadString( &noise );
}
class EXPORT_FROM_DLL Glass : public Shatter
{
public:
CLASS_PROTOTYPE( Glass );
Glass();
};
class EXPORT_FROM_DLL Spawn : public Entity
{
protected:
str modelname;
str spawntargetname;
int attackmode;
public:
CLASS_PROTOTYPE( Spawn );
virtual void DoSpawn( Event *ev );
Spawn();
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Spawn::Archive
(
Archiver &arc
)
{
Entity::Archive( arc );
arc.WriteString( modelname );
arc.WriteString( spawntargetname );
arc.WriteInteger( attackmode );
}
inline EXPORT_FROM_DLL void Spawn::Unarchive
(
Archiver &arc
)
{
Entity::Unarchive( arc );
arc.ReadString( &modelname );
arc.ReadString( &spawntargetname );
arc.ReadInteger( &attackmode );
}
class EXPORT_FROM_DLL ReSpawn : public Spawn
{
public:
CLASS_PROTOTYPE( ReSpawn );
virtual void DoSpawn( Event *ev );
};
class EXPORT_FROM_DLL SpawnOutOfSight : public Spawn
{
public:
CLASS_PROTOTYPE( SpawnOutOfSight );
virtual void DoSpawn( Event *ev );
};
class EXPORT_FROM_DLL SpawnChain : public Spawn
{
public:
CLASS_PROTOTYPE( SpawnChain );
virtual void DoSpawn( Event *ev );
};
class EXPORT_FROM_DLL Oxygenator : public Trigger
{
private:
float time;
public:
CLASS_PROTOTYPE( Oxygenator );
Oxygenator();
virtual void Oxygenate( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Oxygenator::Archive
(
Archiver &arc
)
{
Trigger::Archive( arc );
arc.WriteFloat( time );
}
inline EXPORT_FROM_DLL void Oxygenator::Unarchive
(
Archiver &arc
)
{
Trigger::Unarchive( arc );
arc.ReadFloat( &time );
}
class EXPORT_FROM_DLL BloodSplat : public Entity
{
private:
// No archive function is declared since the class automaintains itself.
// Just spawning and freeing maintains the queue.
static int numBloodSplats;
static Queue queueBloodSplats;
public:
CLASS_PROTOTYPE( BloodSplat );
BloodSplat( Vector pos = "0 0 0", Vector ang = "0 0 0", float scale = 1 );
~BloodSplat();
};
class EXPORT_FROM_DLL ClipBox : public Entity
{
public:
CLASS_PROTOTYPE( ClipBox );
ClipBox();
};
#endif /* misc.h */