//----------------------------------------------------------------------------- // // $Logfile:: /Quake 2 Engine/Sin/code/game/thrall.h $ // $Revision:: 6 $ // $Author:: Aldie $ // $Date:: 11/08/98 8:30p $ // // Copyright (C) 1998 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/thrall.h $ // // 6 11/08/98 8:30p Aldie // Added gibfest for thrall // // 5 10/27/98 10:17p Jimdose // better aiming by walls // more damage from pulse // precached models // // 4 10/27/98 5:56a Jimdose // added Chatter // // 3 10/27/98 3:52a Jimdose // got pulse weapon working // // 2 10/23/98 5:37a Jimdose // Created file // // 1 10/22/98 10:19p Jimdose // // DESCRIPTION: // ThrallMaster // #ifndef __THRALLMASTER_H__ #define __THRALLMASTER_H__ #include "g_local.h" #include "actor.h" #include "specialfx.h" class EXPORT_FROM_DLL ThrallMaster : public Actor { protected: weaponmode_t weaponmode; str gunbone; public: CLASS_PROTOTYPE( ThrallMaster ); ThrallMaster(); virtual Vector GunPosition( void ); virtual qboolean CanShootFrom( Vector pos, Entity *ent, qboolean usecurrentangles ); virtual void Chatter( const char *sound, float chance = 10, float volume = 1.0f, int channel = CHAN_VOICE ); virtual void WeaponUse( Event *ev ); virtual void FirePulse( Event *ev ); virtual void FireRockets( Event *ev ); virtual void GibFest( Event *ev ); virtual void Archive( Archiver &arc ); virtual void Unarchive( Archiver &arc ); }; inline EXPORT_FROM_DLL void ThrallMaster::Archive ( Archiver &arc ) { Actor::Archive( arc ); arc.WriteInteger( weaponmode ); arc.WriteString( gunbone ); } inline EXPORT_FROM_DLL void ThrallMaster::Unarchive ( Archiver &arc ) { Actor::Unarchive( arc ); weaponmode = ( weaponmode_t )arc.ReadInteger(); arc.ReadString( &gunbone ); } class EXPORT_FROM_DLL ThrallGun : public Weapon { public: CLASS_PROTOTYPE( ThrallGun ); ThrallGun(); virtual void Shoot( Event *ev ); virtual void SecondaryUse( Event *ev ); }; class EXPORT_FROM_DLL DrunkMissile : public Projectile { private: EntityPtr target; public: CLASS_PROTOTYPE( DrunkMissile ); float AdjustAngle( float maxadjust, float currangle, float targetangle ); void Explode( Event *ev ); float ResolveMinimumDistance( Entity *potential_target, float currmin ); void HeatSeek( Event *ev); void Prethink( void ); void Setup( Entity *owner, Vector pos, Vector dir ); virtual void Archive( Archiver &arc ); virtual void Unarchive( Archiver &arc ); }; inline EXPORT_FROM_DLL void DrunkMissile::Archive ( Archiver &arc ) { Projectile::Archive( arc ); arc.WriteSafePointer( target ); } inline EXPORT_FROM_DLL void DrunkMissile::Unarchive ( Archiver &arc ) { Projectile::Unarchive( arc ); arc.ReadSafePointer( &target ); } class EXPORT_FROM_DLL ThrallPulse : public Projectile { public: CLASS_PROTOTYPE( ThrallPulse ); void Explode( Event *ev ); void Setup( Entity *owner, Vector pos, Vector dir ); }; class EXPORT_FROM_DLL ThrallPulseDebris : public Projectile { private: float size; float spawntime; float nexttouch; public: CLASS_PROTOTYPE( ThrallPulseDebris ); void Touch( Event *ev ); void Prethink( void ); void Setup( Entity *owner, Vector pos, float size ); virtual void Archive( Archiver &arc ); virtual void Unarchive( Archiver &arc ); }; inline EXPORT_FROM_DLL void ThrallPulseDebris::Archive ( Archiver &arc ) { Projectile::Archive( arc ); arc.WriteFloat( size ); arc.WriteFloat( spawntime ); arc.WriteFloat( nexttouch ); } inline EXPORT_FROM_DLL void ThrallPulseDebris::Unarchive ( Archiver &arc ) { Projectile::Unarchive( arc ); arc.ReadFloat( &size ); arc.ReadFloat( &spawntime ); arc.ReadFloat( &nexttouch ); } #endif /* thrall.h */