I had a look through this... like you say there's certainly no obvious
reason for it not to work.

Just one thing though, you don't show that youv'e precached the sprite... I
know you probably have if not it wouldn't compile, but just try changing....
WRITE_SHORT( m_iSpriteTexture );
to this:
WRITE_SHORT( g_sModelIndexFireball );

As a temporary measure to make sure the sprite is getting called properly.

Mike.
----- Original Message -----
From: "_Phantom_" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, November 14, 2001 10:47 PM
Subject: [hlcoders] [hlcoders]Temp entity problem


> lo ppl
>
> Here the basic problem, we have an EMP Gren in our mod and when it goes
off
> we dont want the normal bang and flash, instead we want the same effect
the
> houndeye does when it fires it's sonic attack (the nice circles).
>
> Now, in theory this is easy, the Emp Gren is a contact gren, however
instead
> of looking like the MP5 contact gren is looks like a standard HE gren
> (pending a model change). It throw alright using a modified
ShootContact(..)
> function, it set the model correct, apon contact with something the
explode
> routine works (its a copy of the ExplodeTouch(..) function with the damage
> type changed to DMG_EMPBLAST so I can find it later).
>
> the EMP Gren is throw using this call -- CGrenade::ShootContactEMP(
> m_pPlayer->pev, vecSrc, vecThrow, m_iSpriteTexture ); (in Precache
> m_iSpriteTexutre is the result of a loadmodel)
>
> which calls this is CGrenade :
>
> CGrenade * CGrenade:: ShootContactEMP( entvars_t *pevOwner, Vector
vecStart,
> Vector vecVelocity, int SpriteTexture)
> {
>  CGrenade *pGrenade = GetClassPtr( (CGrenade *)NULL );
>  pGrenade->Spawn();
>  // contact grenades arc lower
>  // below commented out coz it's a normal gren
> // pGrenade->pev->gravity = 0.5;// lower gravity since grenade is
> aerodynamic and engine doesn't know it.
>  UTIL_SetOrigin( pGrenade->pev, vecStart );
>  pGrenade->pev->velocity = vecVelocity;
>  pGrenade->pev->angles = UTIL_VecToAngles (pGrenade->pev->velocity);
>  pGrenade->pev->owner = ENT(pevOwner);
>
>  // make monsters afaid of it while in the air
>  pGrenade->SetThink( DangerSoundThink );
>  pGrenade->pev->nextthink = gpGlobals->time;
>
>  // Tumble in air
>  pGrenade->pev->avelocity.x = RANDOM_FLOAT ( -100, -500 );
>
>  // Explode on contact
>  pGrenade->SetTouch( ExplodeEMPTouch );
>
>  SET_MODEL(ENT(pGrenade->pev), "models/w_grenade.mdl");
>  pGrenade->pev->dmg = 0;
>
>  // grab the SpriteTexture passed to me
>  pGrenade->m_iSpriteTexture = SpriteTexture;
>
>  return pGrenade;
> }
>
> -----
> The modified explode function looks like this :
> -----
> void CGrenade::Explode( TraceResult *pTrace, int bitsDamageType )
> {
>  float  flRndSound;// sound randomizer
>
>  pev->model = iStringNull;//invisible
>  pev->solid = SOLID_NOT;// intangible
>
>  pev->takedamage = DAMAGE_NO;
>
>  // Pull out of the wall a bit
>  if ( pTrace->flFraction != 1.0 )
>  {
>   pev->origin = pTrace->vecEndPos + (pTrace->vecPlaneNormal * (pev->dmg -
> 24) * 0.6);
>  }
>
>  int iContents = UTIL_PointContents ( pev->origin );
>  if (bitsDamageType == DMG_EMPBLAST)
>  {
>   // emp gren has gone off so do the EMP effect
>   ALERT(at_console, "EMP Burst!!\n");        // code to check we are
fireing
> this event!
>   MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pev->origin );
>    WRITE_BYTE( TE_BEAMCYLINDER );
>    WRITE_COORD( pev->origin.x);
>    WRITE_COORD( pev->origin.y);
>    WRITE_COORD( pev->origin.z + 32);
>    WRITE_COORD( pev->origin.x);
>    WRITE_COORD( pev->origin.y);
>    WRITE_COORD( pev->origin.z + 32 + 320 / .4); // reach damage radius
over
> .3 seconds (replaced houndeye constand with 320)
>    WRITE_SHORT( m_iSpriteTexture );
>    WRITE_BYTE( 0 ); // startframe
>    WRITE_BYTE( 0 ); // framerate
>    WRITE_BYTE( 4 ); // life
>    WRITE_BYTE( 16 );  // width
>    WRITE_BYTE( 0 );   // noise
>
>    WRITE_BYTE(0);
>    WRITE_BYTE(255); // bright green
>    WRITE_BYTE(0);
>
>    WRITE_BYTE( 255 ); //brightness
>    WRITE_BYTE( 0 );  // speed
>   MESSAGE_END();
>
>   MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pev->origin );
>    WRITE_BYTE( TE_BEAMCYLINDER );
>    WRITE_COORD( pev->origin.x);
>    WRITE_COORD( pev->origin.y);
>    WRITE_COORD( pev->origin.z + 32);
>    WRITE_COORD( pev->origin.x);
>    WRITE_COORD( pev->origin.y);
>    WRITE_COORD( pev->origin.z + 32 + ( 320 / 2 ) / .4); // reach damage
> radius over .3 seconds (replaced houndeye constand with 320)
>    WRITE_SHORT( m_iSpriteTexture );
>    WRITE_BYTE( 0 ); // startframe
>    WRITE_BYTE( 0 ); // framerate
>    WRITE_BYTE( 4 ); // life
>    WRITE_BYTE( 16 );  // width
>    WRITE_BYTE( 0 );   // noise
>
>    WRITE_BYTE(0);
>    WRITE_BYTE(255); // bright green
>    WRITE_BYTE(0);
>
>    WRITE_BYTE( 255 ); //brightness
>    WRITE_BYTE( 0 );  // speed
>   MESSAGE_END();
>
>   CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin,
> NORMAL_EXPLOSION_VOLUME, 3.0 ); // TODO : replace this sound
>  }
>  else
>  {
>   // normal gren effects
>
>   MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, pev->origin );
>    WRITE_BYTE( TE_EXPLOSION );  // This makes a dynamic light and the
> explosion sprites/sound
>    WRITE_COORD( pev->origin.x ); // Send to PAS because of the sound
>    WRITE_COORD( pev->origin.y );
>    WRITE_COORD( pev->origin.z );
>    if (iContents != CONTENTS_WATER)
>    {
>     WRITE_SHORT( g_sModelIndexFireball );
>    }
>    else
>    {
>     WRITE_SHORT( g_sModelIndexWExplosion );
>    }
>    WRITE_BYTE( (pev->dmg - 50) * .60  ); // scale * 10
>    WRITE_BYTE( 15  ); // framerate
>    WRITE_BYTE( TE_EXPLFLAG_NONE );
>   MESSAGE_END();
>   CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin,
> NORMAL_EXPLOSION_VOLUME, 3.0 );
>  }
>
>
> // nuffin changed below here
> ...
> ....
> ...
>  }
> }
>
> Now, the problem is, when you throw the EMP Gren, it hits say the floor,
it
> prints the message that the EMP effect has happened, it don't explode like
> an HE gren, however the green circles dont appear. However, I've found a
few
> instantance when it will make the effect happen, at the spawn point there
> are some barriers, throwing the gren so it hit either the top or the
bottom
> one causes the effect to appear, also some garage doors also cause the
> effect to happen.
> At first I thought it might work coz it was off the ground.. however
> throwing the gren so it strikes a wall a few feet up fails to make it
> happen.
>
> Any one shead any light on this problem as I'm baffled now.
> Applogise for the amount of code as well, but I thought I'd better give as
> much info as I could..
>
> Cheers,
> Rob
>
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list archives,
please visit:
> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>
>


_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to