135 lines
3.6 KiB
C++
135 lines
3.6 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Quake 2 Engine/Sin/code/game/deadbody.cpp $
|
|
// $Revision:: 13 $
|
|
// $Author:: Jimdose $
|
|
// $Date:: 11/19/98 9:28p $
|
|
//
|
|
// 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/deadbody.cpp $
|
|
//
|
|
// 13 11/19/98 9:28p Jimdose
|
|
// made deadbodies copy the gravaxis
|
|
//
|
|
// 12 11/11/98 11:11p Aldie
|
|
// Make deadbodies do blood and gib properly
|
|
//
|
|
// 11 11/10/98 7:20p Aldie
|
|
// Fix for deadbodies not displaying death properly
|
|
//
|
|
// 10 10/17/98 9:40p Markd
|
|
// dead body queue won't initialize unless in deathmatch or coop
|
|
//
|
|
// 9 10/10/98 1:26a Jimdose
|
|
// InitializeBodyQueue is disabled while loading savegames
|
|
//
|
|
// 8 9/22/98 5:19p Markd
|
|
// Put in new consolidated gib function
|
|
//
|
|
// 7 9/22/98 3:21p Markd
|
|
// put in parentmode lockout for blood and gibs
|
|
//
|
|
// 6 9/19/98 6:09p Markd
|
|
// changed linkentity to link() call
|
|
//
|
|
// 5 8/29/98 9:40p Jimdose
|
|
// Moved bodyque to deadbody
|
|
//
|
|
// 4 7/29/98 2:31p Aldie
|
|
// Changed health to a float
|
|
//
|
|
// 3 7/23/98 6:17p Aldie
|
|
// Updated damage system and fixed some damage related bugs. Also put tracers
|
|
// back to the way they were, and added gib event to funcscriptmodels
|
|
//
|
|
// 2 7/13/98 4:59p Aldie
|
|
// Added dead player bodies with gibbing
|
|
//
|
|
// DESCRIPTION:
|
|
// Dead body
|
|
|
|
#include "deadbody.h"
|
|
#include "gibs.h"
|
|
|
|
CLASS_DECLARATION( Sentient, Deadbody, "deadbody" );
|
|
|
|
ResponseDef Deadbody::Responses[] =
|
|
{
|
|
{ &EV_Gib, ( Response )Deadbody::GibEvent },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
void Deadbody::GibEvent
|
|
(
|
|
Event *ev
|
|
)
|
|
|
|
{
|
|
takedamage = DAMAGE_NO;
|
|
|
|
if ( sv_gibs->value && !parentmode->value )
|
|
{
|
|
setSolidType( SOLID_NOT );
|
|
hideModel();
|
|
|
|
CreateGibs( this, health, 1.0f, 3 );
|
|
}
|
|
}
|
|
|
|
void CopyToBodyQueue
|
|
(
|
|
edict_t *ent
|
|
)
|
|
|
|
{
|
|
edict_t *body;
|
|
|
|
// grab a body from the queue and cycle to the next one
|
|
body = &g_edicts[ ( int )maxclients->value + level.body_queue + 1 ];
|
|
level.body_queue = ( level.body_queue + 1 ) % BODY_QUEUE_SIZE;
|
|
|
|
gi.unlinkentity( ent );
|
|
gi.unlinkentity( body );
|
|
|
|
body->s = ent->s;
|
|
body->s.number = body - g_edicts;
|
|
body->svflags = ent->svflags;
|
|
body->solid = ent->solid;
|
|
body->clipmask = ent->clipmask;
|
|
body->owner = ent->owner;
|
|
body->entity->movetype = ent->entity->movetype;
|
|
body->entity->takedamage = DAMAGE_YES;
|
|
body->entity->deadflag = DEAD_DEAD;
|
|
body->s.renderfx &= ~RF_DONTDRAW;
|
|
body->entity->origin = ent->entity->worldorigin;
|
|
body->entity->setSize(ent->mins,ent->maxs);
|
|
body->entity->link();
|
|
body->entity->SetGravityAxis( ent->entity->gravaxis );
|
|
}
|
|
|
|
void InitializeBodyQueue
|
|
(
|
|
void
|
|
)
|
|
|
|
{
|
|
int i;
|
|
Deadbody *body;
|
|
|
|
if ( ( !LoadingSavegame ) && ( deathmatch->value || coop->value ) )
|
|
{
|
|
level.body_queue = 0;
|
|
for ( i=0; i<BODY_QUEUE_SIZE ; i++ )
|
|
{
|
|
body = new Deadbody;
|
|
body->edict->owner = NULL;
|
|
body->edict->s.skinnum = -1;
|
|
body->flags |= (FL_DIE_GIBS|FL_BLOOD);
|
|
}
|
|
}
|
|
}
|