diff --git a/src/dlls/explode.cpp b/src/dlls/explode.cpp index 63125d3..dcc5cd6 100755 --- a/src/dlls/explode.cpp +++ b/src/dlls/explode.cpp @@ -87,6 +87,7 @@ public: void Spawn( ); void EXPORT Smoke ( void ); void KeyValue( KeyValueData *pkvd ); + void DelayUse( void ); void Use( CMBaseEntity *pActivator, CMBaseEntity *pCaller, USE_TYPE useType, float value ); int m_iMagnitude;// how large is the fireball? how much damage? @@ -135,6 +136,11 @@ void CMEnvExplosion::Spawn( void ) pev->classname = MAKE_STRING( "_env_explosion" ); } +void CMEnvExplosion::DelayUse( void ) +{ + Use( NULL, NULL, USE_TOGGLE, 0 ); +} + void CMEnvExplosion::Use( CMBaseEntity *pActivator, CMBaseEntity *pCaller, USE_TYPE useType, float value ) { TraceResult tr; @@ -274,18 +280,20 @@ void ExplosionCreate( const Vector ¢er, const Vector &angles, edict_t *pOwne pExplosion->pev->owner = pOwner; pExplosion->pev->spawnflags |= flags; + UTIL_SetOrigin( pExplosion->pev, center ); + pExplosion->pev->angles = angles; + // This is a temporary entity, filter out the flag pExplosion->pev->spawnflags &= ~SF_ENVEXPLOSION_REPEATABLE; + pExplosion->Spawn(); if ( delay > 0.0f ) { - pExplosion->SetThink( &CMBaseEntity::SUB_CallUseToggle ); + //pExplosion->SetThink( &CMBaseEntity::SUB_CallUseToggle ); // i don't trust you + pExplosion->SetThink( &CMEnvExplosion::DelayUse ); pExplosion->pev->nextthink = gpGlobals->time + delay; } - - pExplosion->Spawn(); - - if ( delay <= 0.0f ) + else { pExplosion->Use( NULL, NULL, USE_TOGGLE, 0 ); } diff --git a/src/dlls/gargantua.cpp b/src/dlls/gargantua.cpp index 4b5d726..f14a59f 100755 --- a/src/dlls/gargantua.cpp +++ b/src/dlls/gargantua.cpp @@ -796,7 +796,7 @@ void CMGargantua::DeathEffect( void ) { int i; UTIL_MakeVectors(pev->angles); - Vector deathPos = pev->origin + gpGlobals->v_forward * 100; + Vector deathPos = pev->origin + gpGlobals->v_up * 100; // Create a spiral of streaks CSpiral::Create( deathPos, (pev->absmax.z - pev->absmin.z) * 0.6, 125, 1.5 ); @@ -810,6 +810,8 @@ void CMGargantua::DeathEffect( void ) } CMBaseEntity *pSmoker = CreateClassPtr((CSmoker *)NULL); // CMBaseEntity::Create( "env_smoker", pev->origin, g_vecZero, NULL ); + UTIL_SetOrigin( pSmoker->pev, pev->origin ); + pSmoker->Spawn(); pSmoker->pev->health = 1; // 1 smoke balls pSmoker->pev->scale = 46; // 4.6X normal size pSmoker->pev->dmg = 0; // 0 radial distribution @@ -1199,7 +1201,7 @@ CSpiral *CSpiral::Create( const Vector &origin, float height, float radius, floa { if ( duration <= 0 ) return NULL; - + CSpiral *pSpiral = CreateClassPtr( (CSpiral *)NULL ); pSpiral->Spawn(); pSpiral->pev->dmgtime = pSpiral->pev->nextthink;