mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-03-12 13:31:33 +00:00
Add env_warpball implementation.
This commit is contained in:
parent
90f3911aa7
commit
ac1f6d0f6e
@ -27,6 +27,7 @@
|
|||||||
#define SF_MONSTERMAKER_START_ON 1 // start active ( if has targetname )
|
#define SF_MONSTERMAKER_START_ON 1 // start active ( if has targetname )
|
||||||
#define SF_MONSTERMAKER_CYCLIC 4 // drop one monster every time fired.
|
#define SF_MONSTERMAKER_CYCLIC 4 // drop one monster every time fired.
|
||||||
#define SF_MONSTERMAKER_MONSTERCLIP 8 // Children are blocked by monsterclip
|
#define SF_MONSTERMAKER_MONSTERCLIP 8 // Children are blocked by monsterclip
|
||||||
|
#define SF_MONSTERMAKER_WARPBALL 16
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
// MonsterMaker - this ent creates monsters during the game.
|
// MonsterMaker - this ent creates monsters during the game.
|
||||||
@ -49,29 +50,36 @@ public:
|
|||||||
static TYPEDESCRIPTION m_SaveData[];
|
static TYPEDESCRIPTION m_SaveData[];
|
||||||
|
|
||||||
string_t m_iszMonsterClassname;// classname of the monster(s) that will be created.
|
string_t m_iszMonsterClassname;// classname of the monster(s) that will be created.
|
||||||
|
string_t m_iszWarpTarget;
|
||||||
|
|
||||||
int m_cNumMonsters;// max number of monsters this ent can create
|
int m_cNumMonsters;// max number of monsters this ent can create
|
||||||
|
|
||||||
int m_cLiveChildren;// how many monsters made by this monster maker that are currently alive
|
int m_cLiveChildren;// how many monsters made by this monster maker that are currently alive
|
||||||
int m_iMaxLiveChildren;// max number of monsters that this maker may have out at one time.
|
int m_iMaxLiveChildren;// max number of monsters that this maker may have out at one time.
|
||||||
|
int m_iMonsterSpawnFlags;
|
||||||
|
|
||||||
float m_flGround; // z coord of the ground under me, used to make sure no monsters are under the maker when it drops a new child
|
float m_flGround; // z coord of the ground under me, used to make sure no monsters are under the maker when it drops a new child
|
||||||
|
|
||||||
BOOL m_fActive;
|
BOOL m_fActive;
|
||||||
BOOL m_fFadeChildren;// should we make the children fadeout?
|
BOOL m_fFadeChildren;// should we make the children fadeout?
|
||||||
|
BOOL m_fWarpball;
|
||||||
};
|
};
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( monstermaker, CMonsterMaker )
|
LINK_ENTITY_TO_CLASS( monstermaker, CMonsterMaker )
|
||||||
|
LINK_ENTITY_TO_CLASS( env_warpball, CMonsterMaker )
|
||||||
|
|
||||||
TYPEDESCRIPTION CMonsterMaker::m_SaveData[] =
|
TYPEDESCRIPTION CMonsterMaker::m_SaveData[] =
|
||||||
{
|
{
|
||||||
DEFINE_FIELD( CMonsterMaker, m_iszMonsterClassname, FIELD_STRING ),
|
DEFINE_FIELD( CMonsterMaker, m_iszMonsterClassname, FIELD_STRING ),
|
||||||
|
DEFINE_FIELD( CMonsterMaker, m_iszWarpTarget, FIELD_STRING ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_cNumMonsters, FIELD_INTEGER ),
|
DEFINE_FIELD( CMonsterMaker, m_cNumMonsters, FIELD_INTEGER ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_cLiveChildren, FIELD_INTEGER ),
|
DEFINE_FIELD( CMonsterMaker, m_cLiveChildren, FIELD_INTEGER ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_flGround, FIELD_FLOAT ),
|
DEFINE_FIELD( CMonsterMaker, m_flGround, FIELD_FLOAT ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_iMaxLiveChildren, FIELD_INTEGER ),
|
DEFINE_FIELD( CMonsterMaker, m_iMaxLiveChildren, FIELD_INTEGER ),
|
||||||
|
DEFINE_FIELD( CMonsterMaker, m_iMonsterSpawnFlags, FIELD_INTEGER ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_fActive, FIELD_BOOLEAN ),
|
DEFINE_FIELD( CMonsterMaker, m_fActive, FIELD_BOOLEAN ),
|
||||||
DEFINE_FIELD( CMonsterMaker, m_fFadeChildren, FIELD_BOOLEAN ),
|
DEFINE_FIELD( CMonsterMaker, m_fFadeChildren, FIELD_BOOLEAN ),
|
||||||
|
DEFINE_FIELD( CMonsterMaker, m_fWarpball, FIELD_BOOLEAN ),
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_SAVERESTORE( CMonsterMaker, CBaseMonster )
|
IMPLEMENT_SAVERESTORE( CMonsterMaker, CBaseMonster )
|
||||||
@ -83,16 +91,29 @@ void CMonsterMaker::KeyValue( KeyValueData *pkvd )
|
|||||||
m_cNumMonsters = atoi( pkvd->szValue );
|
m_cNumMonsters = atoi( pkvd->szValue );
|
||||||
pkvd->fHandled = TRUE;
|
pkvd->fHandled = TRUE;
|
||||||
}
|
}
|
||||||
else if( FStrEq( pkvd->szKeyName, "m_imaxlivechildren" ) )
|
else if( FStrEq( pkvd->szKeyName, "m_imaxlivechildren" )
|
||||||
|
|| FStrEq( pkvd->szKeyName, "maxlivechildren" ) )
|
||||||
{
|
{
|
||||||
m_iMaxLiveChildren = atoi( pkvd->szValue );
|
m_iMaxLiveChildren = atoi( pkvd->szValue );
|
||||||
pkvd->fHandled = TRUE;
|
pkvd->fHandled = TRUE;
|
||||||
}
|
}
|
||||||
|
else if( FStrEq( pkvd->szKeyName, "warptarget" )
|
||||||
|
|| FStrEq( pkvd->szKeyName, "makertarget" )
|
||||||
|
|| FStrEq( pkvd->szKeyName, "warp_target" ) )
|
||||||
|
{
|
||||||
|
m_iszWarpTarget = ALLOC_STRING( pkvd->szValue );
|
||||||
|
pkvd->fHandled = TRUE;
|
||||||
|
}
|
||||||
else if( FStrEq( pkvd->szKeyName, "monstertype" ) )
|
else if( FStrEq( pkvd->szKeyName, "monstertype" ) )
|
||||||
{
|
{
|
||||||
m_iszMonsterClassname = ALLOC_STRING( pkvd->szValue );
|
m_iszMonsterClassname = ALLOC_STRING( pkvd->szValue );
|
||||||
pkvd->fHandled = TRUE;
|
pkvd->fHandled = TRUE;
|
||||||
}
|
}
|
||||||
|
else if( FStrEq( pkvd->szKeyName, "monsterspawnflags" ) )
|
||||||
|
{
|
||||||
|
m_iMonsterSpawnFlags = atoi( pkvd->szValue );
|
||||||
|
pkvd->fHandled = TRUE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
CBaseMonster::KeyValue( pkvd );
|
CBaseMonster::KeyValue( pkvd );
|
||||||
}
|
}
|
||||||
@ -100,9 +121,15 @@ void CMonsterMaker::KeyValue( KeyValueData *pkvd )
|
|||||||
void CMonsterMaker::Spawn()
|
void CMonsterMaker::Spawn()
|
||||||
{
|
{
|
||||||
pev->solid = SOLID_NOT;
|
pev->solid = SOLID_NOT;
|
||||||
|
|
||||||
|
m_fWarpball = FClassnameIs( pev, "env_warpball" );
|
||||||
|
|
||||||
m_cLiveChildren = 0;
|
m_cLiveChildren = 0;
|
||||||
Precache();
|
Precache();
|
||||||
|
|
||||||
|
if( m_fWarpball && FBitSet( pev->spawnflags, SF_MONSTERMAKER_START_ON ) )
|
||||||
|
pev->spawnflags |= SF_MONSTERMAKER_WARPBALL;
|
||||||
|
|
||||||
if( !FStringNull( pev->targetname ) )
|
if( !FStringNull( pev->targetname ) )
|
||||||
{
|
{
|
||||||
if( pev->spawnflags & SF_MONSTERMAKER_CYCLIC )
|
if( pev->spawnflags & SF_MONSTERMAKER_CYCLIC )
|
||||||
@ -114,7 +141,7 @@ void CMonsterMaker::Spawn()
|
|||||||
SetUse( &CMonsterMaker::ToggleUse );// so can be turned on/off
|
SetUse( &CMonsterMaker::ToggleUse );// so can be turned on/off
|
||||||
}
|
}
|
||||||
|
|
||||||
if( FBitSet( pev->spawnflags, SF_MONSTERMAKER_START_ON ) )
|
if( !m_fWarpball && FBitSet( pev->spawnflags, SF_MONSTERMAKER_START_ON ) )
|
||||||
{
|
{
|
||||||
// start making monsters as soon as monstermaker spawns
|
// start making monsters as soon as monstermaker spawns
|
||||||
m_fActive = TRUE;
|
m_fActive = TRUE;
|
||||||
@ -151,7 +178,15 @@ void CMonsterMaker::Precache( void )
|
|||||||
{
|
{
|
||||||
CBaseMonster::Precache();
|
CBaseMonster::Precache();
|
||||||
|
|
||||||
UTIL_PrecacheOther( STRING( m_iszMonsterClassname ) );
|
if( m_fWarpball )
|
||||||
|
{
|
||||||
|
m_flDelay = 5.0f;
|
||||||
|
UTIL_PrecacheOther( "effect_warpball" );
|
||||||
|
}
|
||||||
|
if( FStringNull( m_iszMonsterClassname ) )
|
||||||
|
ALERT( at_console, "CMonsterMaker without a children name!\n" );
|
||||||
|
else
|
||||||
|
UTIL_PrecacheOther( STRING( m_iszMonsterClassname ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
@ -194,7 +229,7 @@ void CMonsterMaker::MakeMonster( void )
|
|||||||
|
|
||||||
if( FNullEnt( pent ) )
|
if( FNullEnt( pent ) )
|
||||||
{
|
{
|
||||||
ALERT ( at_console, "NULL Ent in MonsterMaker!\n" );
|
ALERT( at_console, "NULL Ent in MonsterMaker!\n" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,6 +267,11 @@ void CMonsterMaker::MakeMonster( void )
|
|||||||
SetThink( NULL );
|
SetThink( NULL );
|
||||||
SetUse( NULL );
|
SetUse( NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !FBitSet( pev->spawnflags, SF_MONSTERMAKER_CYCLIC ) && FBitSet( pev->spawnflags, SF_MONSTERMAKER_WARPBALL ) )
|
||||||
|
{
|
||||||
|
UTIL_Remove( this );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user