//----------------------------------------------------------------------------- // // $Logfile:: /Quake 2 Engine/Sin/code/game/skeet.cpp $ // $Revision:: 24 $ // $Author:: Markd $ // $Date:: 10/24/98 12:42a $ // // 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/skeet.cpp $ // // 24 10/24/98 12:42a Markd // changed origins to worldorigins where appropriate // // 23 10/23/98 9:58p Aldie // Removed setsize // // 22 10/22/98 5:56p Markd // Made a bunch of global sounds local to that entity // // 21 9/23/98 5:19p Markd // Put DAMAGE_NO in killed functions of these classes // // 20 9/21/98 4:57p Markd // Added archive and unarchive functions // // 19 8/18/98 11:08p Markd // Added new Alias System // // 18 6/24/98 12:39p Markd // Added default tesselation percentage // // 17 6/18/98 9:13p Jimdose // Removed posting of uninitialized event from Pigeon::Killed // // 16 6/18/98 2:00p Markd // rewrote tesselation code // // 15 6/15/98 10:38a Aldie // Removed ref to explosion // // 14 5/24/98 4:48p Jimdose // Made char *'s const // // 13 5/24/98 1:04a Jimdose // Added sound events for ai // // 12 5/19/98 4:26p Aldie // Fixed pigeon death // // 11 5/17/98 8:10p Aldie // Fixed origin and sound. // // 10 5/15/98 1:02p Aldie // Moved header to .h // // 9 5/09/98 7:11p Markd // Removed sound parameter from tesselate command // // 8 5/05/98 8:37p Aldie // Removed lights from skeet. // // 7 5/03/98 4:33p Jimdose // Changed Vector class // // 6 5/01/98 11:09a Markd // Added sound to tesselation event // // 5 4/14/98 6:56p Markd // Added thickness to tesselation and removed explosion // // 4 4/06/98 7:10p Aldie // Added zooming for SniperRifle // // 3 4/05/98 11:04p Aldie // Added tesselation. // // 2 4/04/98 4:19p Aldie // First version of skeet mod. // // DESCRIPTION: Skeet Entity // #include "g_local.h" #include "item.h" #include "rocketlauncher.h" #include "worldspawn.h" #include "skeet.h" #include "scriptmaster.h" CLASS_DECLARATION( Object, Pigeon, "pigeon" ); Event EV_Pigeon_Remove( "pigeonremove" ); ResponseDef Pigeon::Responses[] = { { &EV_Touch, ( Response )Pigeon::RemovePigeon }, { &EV_Killed, ( Response )Pigeon::Killed }, { NULL, NULL } }; void Pigeon::RemovePigeon(Event *ev) { setSolidType( SOLID_NOT ); hideModel(); PostEvent( EV_Remove, 0 ); } void Pigeon::Killed(Event *ev) { Entity * attacker; Vector dir; takedamage = DAMAGE_NO; setSolidType( SOLID_NOT ); hideModel(); attacker = ev->GetEntity( 1 ); dir = worldorigin - attacker->worldorigin; TesselateModel ( this, tess_min_size, tess_max_size, dir, ev->GetInteger( 2 ), tess_percentage, tess_thickness, vec3_origin ); ProcessEvent( EV_BreakingSound ); RandomSound("pig_death",1); Director.DeathMessage( name.c_str() ); PostEvent( EV_Remove, 0 ); } void Pigeon::Setup ( Entity *owner, Vector pos, Vector dir, float pspeed, float pgrav, float pduration, const char *pigeon_name ) { Event *ev; this->owner = owner->entnum; edict->owner = owner->edict; name = str( pigeon_name ); setMoveType( MOVETYPE_BOUNCE ); setSolidType( SOLID_BBOX ); edict->clipmask = MASK_SHOT; maxspeed = 500; acceleration = 150; speed = pspeed; velocity = dir * speed; health = 1; gravity = pgrav; takedamage = DAMAGE_YES; ev = new Event( EV_Remove ); ev->AddEntity( world ); PostEvent( ev, pduration ); setModel("skeet.def"); setSize( mins, maxs ); setOrigin( pos ); worldorigin.copyTo(edict->s.old_origin); } CLASS_DECLARATION( Entity, SkeetLauncher, "skeetlauncher" ); Event EV_SkeetLauncher_Launch( "launch" ); Event EV_SkeetLauncher_SetXdir( "setXdir" ); Event EV_SkeetLauncher_SetYdir( "setYdir" ); Event EV_SkeetLauncher_SetZdir( "setZdir" ); Event EV_SkeetLauncher_SetSpeed( "setSpeed" ); Event EV_SkeetLauncher_SetGravity( "setGravity" ); Event EV_SkeetLauncher_SetDuration( "setDuration" ); Event EV_SkeetLauncher_SetSpeedVar( "setSpeedVar" ); Event EV_SkeetLauncher_SetXvar( "setXvar" ); Event EV_SkeetLauncher_SetYvar( "setYvar" ); Event EV_SkeetLauncher_SetZvar( "setZvar" ); ResponseDef SkeetLauncher::Responses[] = { { &EV_SkeetLauncher_Launch, ( Response )SkeetLauncher::Launch }, { &EV_SkeetLauncher_SetXdir, ( Response )SkeetLauncher::SetXdir }, { &EV_SkeetLauncher_SetYdir, ( Response )SkeetLauncher::SetYdir }, { &EV_SkeetLauncher_SetZdir, ( Response )SkeetLauncher::SetZdir }, { &EV_SkeetLauncher_SetSpeed, ( Response )SkeetLauncher::SetSpeed }, { &EV_SkeetLauncher_SetGravity, ( Response )SkeetLauncher::SetGravity }, { &EV_SkeetLauncher_SetDuration, ( Response )SkeetLauncher::SetDuration }, { &EV_SkeetLauncher_SetSpeedVar, ( Response )SkeetLauncher::SetSpeedVar }, { &EV_SkeetLauncher_SetXvar, ( Response )SkeetLauncher::SetXvar }, { &EV_SkeetLauncher_SetYvar, ( Response )SkeetLauncher::SetYvar }, { &EV_SkeetLauncher_SetZvar, ( Response )SkeetLauncher::SetZvar }, { NULL, NULL } }; SkeetLauncher::SkeetLauncher( ) { showModel(); setSolidType( SOLID_BSP ); speed_var = 0; x_var = 0; y_var = 0; z_var = 0; } void SkeetLauncher::SetXdir( Event *ev ) { launchAngle.x = ev->GetFloat( 1 ); } void SkeetLauncher::SetYdir( Event *ev ) { launchAngle.y = ev->GetFloat(1); } void SkeetLauncher::SetZdir( Event *ev ) { launchAngle.z = ev->GetFloat(1); } void SkeetLauncher::SetSpeed( Event *ev ) { pspeed = ev->GetFloat(1); } void SkeetLauncher::SetGravity( Event *ev ) { pgravity = ev->GetFloat(1); } void SkeetLauncher::SetDuration( Event *ev ) { pduration = ev->GetFloat(1); } void SkeetLauncher::SetSpeedVar( Event *ev ) { speed_var = ev->GetFloat(1); } void SkeetLauncher::SetXvar( Event *ev ) { x_var = ev->GetFloat(1); } void SkeetLauncher::SetYvar( Event *ev ) { y_var = ev->GetFloat(1); } void SkeetLauncher::SetZvar( Event *ev ) { z_var = ev->GetFloat(1); } void SkeetLauncher::Launch(Event *ev) { Pigeon *pigeon; Vector start; Vector end; float sp; Vector ang; const char *name; pigeon = new Pigeon; name = ev->GetString(1); ang.x = launchAngle.x + G_CRandom(x_var); ang.y = launchAngle.y + G_CRandom(y_var); ang.z = launchAngle.z + G_CRandom(z_var); sp = pspeed + G_CRandom(speed_var); pigeon->Setup( this, worldorigin, ang.normalize(), sp, pgravity, pduration, name); }