/* ============== UTIL_PlayerDecalTrace A player is trying to apply his custom decal for the spray can. Tell connected clients to display it, or use the default spray can decal if the custom can't be loaded. ============== */ void UTIL_PlayerDecalTrace( TraceResult *pTrace, int playernum, int decalNumber, const bool bIsCustom ) { int index; if (!bIsCustom) { if ( decalNumber < 0 ) return; index = gDecals[ decalNumber ].index; if ( index < 0 ) return; } else index = decalNumber; if (pTrace->flFraction == 1.0) return; MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_PLAYERDECAL ); WRITE_BYTE ( playernum ); WRITE_COORD( pTrace->vecEndPos.x ); WRITE_COORD( pTrace->vecEndPos.y ); WRITE_COORD( pTrace->vecEndPos.z ); WRITE_SHORT( (short)ENTINDEX(pTrace->pHit) ); WRITE_BYTE( index ); MESSAGE_END(); }
void CHostage::SendHostagePositionMsg(void) { CBaseEntity *pEntity = NULL; while ((pEntity = UTIL_FindEntityByClassname(pEntity, "player")) != NULL) { if (FNullEnt(pEntity->edict())) break; if (!pEntity->IsPlayer()) continue; if (pEntity->pev->flags == FL_DORMANT) continue; CBasePlayer *pPlayer = GetClassPtr((CBasePlayer *)pEntity->pev); if (pPlayer->pev->deadflag == DEAD_NO && pPlayer->m_iTeam == TEAM_CT) { MESSAGE_BEGIN(MSG_ONE, gmsgHostagePos, NULL, pPlayer->pev); WRITE_BYTE(0); WRITE_BYTE(m_iHostageIndex); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); MESSAGE_END(); } } }
void CEnvExplosion::RealUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { pev->model = iStringNull;//invisible pev->solid = SOLID_NOT;// intangible pev->origin = pev->origin + Vector(0,0,12); // do damage if ( !( pev->spawnflags & SF_ENVEXPLOSION_NODAMAGE ) ) RadiusDamage ( pev, pev, m_iMagnitude, CLASS_NONE, DMG_BLAST ); MESSAGE_BEGIN( MSG_ALL, gmsgWorldExp ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( m_spriteScale ); WRITE_BYTE( (pev->spawnflags & SF_ENVEXPLOSION_NOSMOKE)?0:1 ); WRITE_BYTE( (pev->spawnflags & SF_ENVEXPLOSION_NOSPARKS)?0:1 ); WRITE_BYTE( (pev->spawnflags & SF_ENVEXPLOSION_NOFIREBALL)?0:1 ); WRITE_BYTE( (pev->spawnflags & SF_ENVEXPLOSION_NORING)?0:1 ); WRITE_BYTE( (pev->spawnflags & SF_ENVEXPLOSION_NODECAL)?0:1 ); MESSAGE_END(); if ( !(pev->spawnflags & SF_ENVEXPLOSION_REPEATABLE) ) UTIL_Remove( this ); }
void CControllerHeadBall :: Crawl( void ) { Vector vecAim = Vector( RANDOM_FLOAT( -1, 1 ), RANDOM_FLOAT( -1, 1 ), RANDOM_FLOAT( -1, 1 ) ).Normalize( ); Vector vecPnt = pev->origin + pev->velocity * 0.3 + vecAim * 64; MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_BEAMENTPOINT ); WRITE_SHORT( entindex() ); WRITE_COORD( vecPnt.x); WRITE_COORD( vecPnt.y); WRITE_COORD( vecPnt.z); WRITE_SHORT( g_sModelIndexLaser ); WRITE_BYTE( 0 ); // frame start WRITE_BYTE( 10 ); // framerate WRITE_BYTE( 3 ); // life WRITE_BYTE( 20 ); // width WRITE_BYTE( 0 ); // noise WRITE_BYTE( 255 ); // r, g, b WRITE_BYTE( 255 ); // r, g, b WRITE_BYTE( 255 ); // r, g, b WRITE_BYTE( 255 ); // brightness WRITE_BYTE( 10 ); // speed MESSAGE_END(); }
void CNihilanthHVR :: DissipateThink( void ) { pev->nextthink = gpGlobals->time + 0.1; if (pev->scale > 5.0) UTIL_Remove( this ); pev->renderamt -= 2; pev->scale += 0.1; if (m_hTargetEnt != NULL) { CircleTarget( m_hTargetEnt->pev->origin + Vector( 0, 0, 4096 ) ); } else { UTIL_Remove( this ); } MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_ELIGHT ); WRITE_SHORT( entindex( ) ); // entity, attachment WRITE_COORD( pev->origin.x ); // origin WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_COORD( pev->renderamt ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 192 ); // G WRITE_BYTE( 64 ); // B WRITE_BYTE( 2 ); // life * 10 WRITE_COORD( 0 ); // decay MESSAGE_END(); }
//========================================================= // IdleSound //========================================================= void CISlave::IdleSound(void) { if(RANDOM_LONG(0, 2) == 0) { SENTENCEG_PlayRndSz(ENT(pev), "SLV_IDLE", 0.85, ATTN_NORM, 0, m_voicePitch); } #if 0 int side = RANDOM_LONG( 0, 1 ) * 2 - 1; ClearBeams( ); ArmBeam( side ); UTIL_MakeAimVectors( pev->angles ); Vector vecSrc = pev->origin + gpGlobals->v_right * 2 * side; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSrc ); WRITE_BYTE(TE_DLIGHT); WRITE_COORD(vecSrc.x); // X WRITE_COORD(vecSrc.y); // Y WRITE_COORD(vecSrc.z); // Z WRITE_BYTE( 8 ); // radius * 0.1 WRITE_BYTE( 255 ); // r WRITE_BYTE( 180 ); // g WRITE_BYTE( 96 ); // b WRITE_BYTE( 10 ); // time * 10 WRITE_BYTE( 0 ); // decay * 0.1 MESSAGE_END( ); EMIT_SOUND_DYN( ENT(pev), CHAN_WEAPON, "debris/zap1.wav", 1, ATTN_NORM, 0, 100 ); #endif }
void CWreckage::Think( void ) { StudioFrameAdvance( ); pev->nextthink = gpGlobals->time + 0.2; if (pev->dmgtime) { if (pev->dmgtime < gpGlobals->time) { UTIL_Remove( this ); return; } else if (RANDOM_FLOAT( 0, pev->dmgtime - m_flStartTime ) > pev->dmgtime - gpGlobals->time) { return; } } Vector VecSrc; VecSrc.x = RANDOM_FLOAT( pev->absmin.x, pev->absmax.x ); VecSrc.y = RANDOM_FLOAT( pev->absmin.y, pev->absmax.y ); VecSrc.z = RANDOM_FLOAT( pev->absmin.z, pev->absmax.z ); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, VecSrc ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( VecSrc.x ); WRITE_COORD( VecSrc.y ); WRITE_COORD( VecSrc.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( RANDOM_LONG(0,49) + 50 ); // scale * 10 WRITE_BYTE( RANDOM_LONG(0, 3) + 8 ); // framerate MESSAGE_END(); }
void UTIL_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount ) { if ( !UTIL_ShouldShowBlood( color ) ) return; if ( color == DONT_BLEED || amount == 0 ) return; if ( g_Language == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED ) color = 0; if ( g_pGameRules->IsMultiplayer() ) { // scale up blood effect in multiplayer for better visibility amount *= 2; } if ( amount > 255 ) amount = 255; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, origin ); WRITE_BYTE( TE_BLOODSPRITE ); WRITE_COORD( origin.x); // pos WRITE_COORD( origin.y); WRITE_COORD( origin.z); WRITE_SHORT( g_sModelIndexBloodSpray ); // initial sprite model WRITE_SHORT( g_sModelIndexBloodDrop ); // droplet sprite models WRITE_BYTE( color ); // color index into host_basepal WRITE_BYTE( min( max( 3, amount / 10 ), 16 ) ); // size MESSAGE_END(); }
//========================================================= // BarneyFirePistol - shoots one round from the pistol at // the enemy barney is facing. //========================================================= void CFriend :: BarneyFirePistol ( void ) { Vector vecShootOrigin; UTIL_MakeVectors(pev->angles); vecShootOrigin = pev->origin + Vector( 0, 0, 55 ); Vector vecShootDir = ShootAtEnemy( vecShootOrigin ); Vector angDir = UTIL_VecToAngles( vecShootDir ); SetBlending( 0, angDir.x ); pev->effects = EF_MUZZLEFLASH; if (pev->frags) { FireBullets(8, vecShootOrigin, vecShootDir, VECTOR_CONE_10DEGREES, 1024, BULLET_PLAYER_BUCKSHOT);//357 EMIT_SOUND( ENT(pev), CHAN_WEAPON, "weapons/shotgun/sbarrel1.wav", 1, ATTN_NORM ); } else { FireBullets(1, vecShootOrigin, vecShootDir, VECTOR_CONE_2DEGREES, 1024, BULLET_MONSTER_9MM ); int pitchShift = RANDOM_LONG( 0, 20 ); // Only shift about half the time if ( pitchShift > 10 ) pitchShift = 0; else pitchShift -= 5; EMIT_SOUND( ENT(pev), CHAN_WEAPON, "weapons/m16/m16_fire-1.wav", 1, ATTN_NORM ); } CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin, 384, 0.3 ); // UNDONE: Reload? m_cAmmoLoaded--;// take away a bullet! // Teh_Freak: World Lighting! MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD( vecShootOrigin.x ); // origin WRITE_COORD( vecShootOrigin.y ); WRITE_COORD( vecShootOrigin.z ); WRITE_BYTE( 16 ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 128 ); // B WRITE_BYTE( 0 ); // life * 10 WRITE_BYTE( 0 ); // decay MESSAGE_END(); // Teh_Freak: World Lighting! CBaseEntity *pPlayer = UTIL_PlayerByIndex( 1 ); if (pPlayer->m_fSlowMotionOn) CBullet::Shoot( pev, vecShootOrigin, vecShootDir * 500 ); }
void UTIL_DecalTrace( TraceResult *pTrace, int decalNumber ) { short entityIndex; int index; int message; if ( decalNumber < 0 ) return; index = gDecals[ decalNumber ].index; if ( index < 0 ) return; if (pTrace->flFraction == 1.0) return; // Only decal BSP models if ( pTrace->pHit ) { CBaseEntity *pEntity = CBaseEntity::Instance( pTrace->pHit ); if ( pEntity && !pEntity->IsBSPModel() ) return; entityIndex = ENTINDEX( pTrace->pHit ); } else entityIndex = 0; message = TE_DECAL; if ( entityIndex != 0 ) { if ( index > 255 ) { message = TE_DECALHIGH; index -= 256; } } else { message = TE_WORLDDECAL; if ( index > 255 ) { message = TE_WORLDDECALHIGH; index -= 256; } } MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( message ); WRITE_COORD( pTrace->vecEndPos.x ); WRITE_COORD( pTrace->vecEndPos.y ); WRITE_COORD( pTrace->vecEndPos.z ); WRITE_BYTE( index ); if ( entityIndex ) WRITE_SHORT( entityIndex ); MESSAGE_END(); }
void UTIL_Sparks( const Vector &position ) { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position ); WRITE_BYTE( TE_SPARKS ); WRITE_COORD( position.x ); WRITE_COORD( position.y ); WRITE_COORD( position.z ); MESSAGE_END(); }
void CM3::PrimaryAttack() { if (m_iClip <= 0) { PlayEmptySound(); m_flNextPrimaryAttack = 0.15; return; } SendWeaponAnim( M3_SHOOT1 ); m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON,"weapons/m3-1.wav", 1.0, ATTN_NORM, 0, 100 ); m_iClip -= 1; Vector vecSrc( m_pPlayer->GetGunPosition() ); Vector vecAim( m_pPlayer->GetAutoaimVector( AUTOAIM_2DEGREES ) ); Vector vecAcc( 0.08716, 0.04362, 0.00 ); Vector vecDir; vecDir = m_pPlayer->FireBulletsPlayer( 9, vecSrc, vecAim, vecAcc, 8192,0, 0, 20, m_pPlayer->pev, m_pPlayer->random_seed ); #ifndef CLIENT_DLL MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSrc ); WRITE_BYTE( TE_DLIGHT ); WRITE_COORD( vecSrc.x ); WRITE_COORD( vecSrc.y ); WRITE_COORD( vecSrc.z ); WRITE_BYTE( 30 ); WRITE_BYTE( 210 ); WRITE_BYTE( 200 ); WRITE_BYTE( 60 ); WRITE_BYTE( 1 ); WRITE_BYTE( 1 ); MESSAGE_END(); #endif if( !LeftSpread ) LeftSpread = 1; m_pPlayer->pev->punchangle.x -= 5; PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_event, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, (m_iClip ? 0 : 1), 0 ); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.875; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat(m_pPlayer->random_seed, 1.085,2.085); }
void UTIL_Ricochet( const Vector &position, float scale ) { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position ); WRITE_BYTE( TE_ARMOR_RICOCHET ); WRITE_COORD( position.x ); WRITE_COORD( position.y ); WRITE_COORD( position.z ); WRITE_BYTE( (int)(scale*10) ); MESSAGE_END(); }
void CMGargantua :: FlameUpdate( void ) { int i; static float offset[2] = { 60, -60 }; TraceResult trace; Vector vecStart, angleGun; BOOL streaks = FALSE; for ( i = 0; i < 2; i++ ) { if ( m_pFlame[i] ) { Vector vecAim = pev->angles; vecAim.x += m_flameX; vecAim.y += m_flameY; UTIL_MakeVectors( vecAim ); GetAttachment( i+1, vecStart, angleGun ); Vector vecEnd = vecStart + (gpGlobals->v_forward * GARG_FLAME_LENGTH); // - offset[i] * gpGlobals->v_right; UTIL_TraceLine( vecStart, vecEnd, dont_ignore_monsters, edict(), &trace ); m_pFlame[i]->SetStartPos( trace.vecEndPos ); m_pFlame[i+2]->SetStartPos( (vecStart * 0.6) + (trace.vecEndPos * 0.4) ); if ( trace.flFraction != 1.0 && gpGlobals->time > m_streakTime ) { StreakSplash( trace.vecEndPos, trace.vecPlaneNormal, 6, 20, 50, 400 ); streaks = TRUE; UTIL_DecalTrace( &trace, DECAL_SMALLSCORCH1 + RANDOM_LONG(0,2) ); } RadiusDamage( trace.vecEndPos, pev, pev, gSkillData.gargantuaDmgFire, CLASS_ALIEN_MONSTER, DMG_BURN ); FlameDamage( vecStart, trace.vecEndPos, pev, pev, gSkillData.gargantuaDmgFire, CLASS_ALIEN_MONSTER, DMG_BURN ); MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_ELIGHT ); WRITE_SHORT( entindex( ) + 0x1000 * (i + 2) ); // entity, attachment WRITE_COORD( vecStart.x ); // origin WRITE_COORD( vecStart.y ); WRITE_COORD( vecStart.z ); WRITE_COORD( RANDOM_FLOAT( 32, 48 ) ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 255 ); // B WRITE_BYTE( 2 ); // life * 10 WRITE_COORD( 0 ); // decay MESSAGE_END(); } } if ( streaks ) m_streakTime = gpGlobals->time; }
// UNDONE: This is no longer used? void ExplodeModel( const Vector &vecOrigin, float speed, int model, int count ) { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecOrigin ); WRITE_BYTE ( TE_EXPLODEMODEL ); WRITE_COORD( vecOrigin.x ); WRITE_COORD( vecOrigin.y ); WRITE_COORD( vecOrigin.z ); WRITE_COORD( speed ); WRITE_SHORT( model ); WRITE_SHORT( count ); WRITE_BYTE ( 15 );// 1.5 seconds MESSAGE_END(); }
void CFuncShine :: Think( void ) { // ALERT(at_console, "Think shine\n"); MESSAGE_BEGIN(MSG_BROADCAST, gmsgAddShine, NULL); WRITE_BYTE(pev->scale); WRITE_BYTE(pev->renderamt); WRITE_COORD(pev->absmin.x + 2); // take off 2: mins values are padded, but we just want to hug the surface WRITE_COORD(pev->absmax.x - 2); WRITE_COORD(pev->absmin.y + 2); WRITE_COORD(pev->absmax.y - 2); WRITE_COORD(pev->absmin.z + 2); WRITE_STRING(STRING(pev->message)); MESSAGE_END(); }
void CFuncMachinegun::UpdateClientData( CBasePlayer *client ) { if (m_iShouldUpdate) { Vector vecPoint = pev->origin + Vector(0, 0, m_flPointHeight); float coneHor = GetControllerBound( 0 ); float coneVer = GetControllerBound( 1 ); MESSAGE_BEGIN( MSG_ONE, gmsgSpecTank, NULL, client->pev ); WRITE_BYTE( 1 ); // tank is on WRITE_COORD(vecPoint.x); WRITE_COORD(vecPoint.y); WRITE_COORD(vecPoint.z); WRITE_COORD(pev->angles.y); // write default yaw WRITE_COORD(coneHor); // write cone WRITE_COORD(coneVer); // WRITE_COORD(m_flDistFwd); WRITE_COORD(m_flDistUp); WRITE_LONG(m_iAmmo); WRITE_BYTE( m_spread ); MESSAGE_END(); m_iShouldUpdate = 0; } }
void UTIL_BubbleTrail( Vector from, Vector to, int count ) { float flHeight = UTIL_WaterLevel( from, from.z, from.z + 256 ); flHeight = flHeight - from.z; if (flHeight < 8) { flHeight = UTIL_WaterLevel( to, to.z, to.z + 256 ); flHeight = flHeight - to.z; if (flHeight < 8) return; // UNDONE: do a ploink sound flHeight = flHeight + to.z - from.z; } if (count > 255) count = 255; MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_BUBBLETRAIL ); WRITE_COORD( from.x ); // mins WRITE_COORD( from.y ); WRITE_COORD( from.z ); WRITE_COORD( to.x ); // maxz WRITE_COORD( to.y ); WRITE_COORD( to.z ); WRITE_COORD( flHeight ); // height WRITE_SHORT( g_sModelIndexBubbles ); WRITE_BYTE( count ); // count WRITE_COORD( 8 ); // speed MESSAGE_END(); }
void UTIL_BombLed(edict_t* ed, Vector& v) { #ifndef NDEBUG MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY); WRITE_BYTE(TE_GLOWSPRITE); WRITE_COORD(v.x); WRITE_COORD(v.y); WRITE_COORD(v.z); WRITE_SHORT(g_sModelIndexLedglow); WRITE_BYTE(1); WRITE_BYTE(3); WRITE_BYTE(255); MESSAGE_END(); #endif }
void CRadiomsg :: Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { CBaseEntity *pPlayer = UTIL_FindEntityByClassname ( NULL,"player" ); char txt [256]; sprintf ( txt, STRING(m_iszText)); int len = strlen ( txt ); MESSAGE_BEGIN( MSG_ONE, gmsgRadioMsg, NULL, pPlayer->pev ); WRITE_COORD ( gpGlobals->time ); WRITE_LONG ( m_iHead ); WRITE_LONG ( len ); for ( int i=0; i<180; i++ ) { WRITE_BYTE ( txt[i] ); } MESSAGE_END(); if ( FStringNull ( m_iszSentence ) ) return; // EMIT_SOUND_SUIT(pPlayer->edict(), STRING(m_iszSentence) ); EMIT_SOUND_DYN(pPlayer->edict(), CHAN_STATIC, STRING(m_iszSentence), 1.0, ATTN_NORM, 0, 100); }
void RadioKillBoom( edict_t *pEntity ) { // Delete the radio int i = 1; char *pClassname; edict_t *frontEnt; for (i; i < 1025; i++) { frontEnt = INDEXENT ( i ); if (frontEnt) { pClassname = (char *)STRING(frontEnt->v.classname); if (FStrEq("building_radio", pClassname)) { if (frontEnt->v.euser4 == pEntity) { // Delete this radio frontEnt->v.flags |= FL_KILLME; // Boom MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, frontEnt->v.origin ); WRITE_BYTE( TE_EXPLOSION ); // This makes a dynamic light and the explosion sprites/sound WRITE_COORD( frontEnt->v.origin.x ); // Send to PAS because of the sound WRITE_COORD( frontEnt->v.origin.y ); WRITE_COORD( frontEnt->v.origin.z ); WRITE_SHORT( g_sModelIndexFireball2 ); WRITE_BYTE( 30 ); // scale * 10 WRITE_BYTE( 15 ); // framerate WRITE_BYTE( 0 ); MESSAGE_END(); char songname[80]; RadioGetSong( frontEnt->v.iuser3, songname); UTIL_EmitAmbientSound(frontEnt, frontEnt->v.origin, songname, 0, 0, SND_STOP, 0); } } } } }
void CFuncLight :: Die( void ) { // lamp is random choose die style if( m_iState == STATE_OFF ) { pev->frame = 1; // light texture is off LIGHT_STYLE( m_iStyle, "a" ); DontThink(); } else { // simple randomization m_iFlickerMode = RANDOM_LONG( 1, 2 ); SetThink( Flicker ); SetNextThink( 0.1f + RANDOM_LONG( 0.1f, 0.2f )); } m_iState = STATE_DEAD; pev->health = 0; pev->takedamage = DAMAGE_NO; UTIL_FireTargets( pev->target, this, this, USE_OFF ); switch( RANDOM_LONG( 0, 1 )) { case 0: EMIT_SOUND( edict(), CHAN_VOICE, "debris/bustglass1.wav", 0.7, ATTN_IDLE ); break; case 1: EMIT_SOUND( edict(), CHAN_VOICE, "debris/bustglass2.wav", 0.8, ATTN_IDLE ); break; } Vector vecSpot = GetAbsOrigin() + (pev->mins + pev->maxs) * 0.5f; MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecSpot ); WRITE_BYTE( TE_BREAKMODEL ); WRITE_COORD( vecSpot.x ); WRITE_COORD( vecSpot.y ); WRITE_COORD( vecSpot.z ); WRITE_COORD( pev->size.x ); WRITE_COORD( pev->size.y ); WRITE_COORD( pev->size.z ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_BYTE( 10 ); WRITE_SHORT( m_idShard ); WRITE_BYTE( 0 ); WRITE_BYTE( 25 ); WRITE_BYTE( BREAK_GLASS ); MESSAGE_END(); }
//========================================================= // RunAI //========================================================= void CController :: RunAI( void ) { CBaseMonster :: RunAI(); Vector vecStart, angleGun; if ( HasMemory( bits_MEMORY_KILLED ) ) return; for (int i = 0; i < 2; i++) { if (m_pBall[i] == NULL) { m_pBall[i] = CSprite::SpriteCreate( "sprites/xspark4.spr", pev->origin, TRUE ); m_pBall[i]->SetTransparency( kRenderGlow, 255, 255, 255, 255, kRenderFxNoDissipation ); m_pBall[i]->SetAttachment( edict(), (i + 3) ); m_pBall[i]->SetScale( 1.0 ); } float t = m_iBallTime[i] - gpGlobals->time; if (t > 0.1) t = 0.1 / t; else t = 1.0; m_iBallCurrent[i] += (m_iBall[i] - m_iBallCurrent[i]) * t; m_pBall[i]->SetBrightness( m_iBallCurrent[i] ); GetAttachment( i + 2, vecStart, angleGun ); UTIL_SetOrigin( m_pBall[i], vecStart ); MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_ELIGHT ); WRITE_SHORT( entindex( ) + 0x1000 * (i + 3) ); // entity, attachment WRITE_COORD( vecStart.x ); // origin WRITE_COORD( vecStart.y ); WRITE_COORD( vecStart.z ); WRITE_COORD( m_iBallCurrent[i] / 8 ); // radius WRITE_BYTE( 255 ); // R WRITE_BYTE( 192 ); // G WRITE_BYTE( 64 ); // B WRITE_BYTE( 5 ); // life * 10 WRITE_COORD( 0 ); // decay MESSAGE_END(); } }
void CApache :: ShowDamage( void ) { if (m_iDoSmokePuff > 0 || RANDOM_LONG(0,99) > pev->health) { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z - 32 ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( RANDOM_LONG(0,9) + 20 ); // scale * 10 WRITE_BYTE( 12 ); // framerate MESSAGE_END(); } if (m_iDoSmokePuff > 0) m_iDoSmokePuff--; }
void CNihilanthHVR::TeleportThink( void ) { pev->nextthink = gpGlobals->time + 0.1; // check world boundaries //TODO: use constants - Solokiller if( m_hEnemy == NULL || !m_hEnemy->IsAlive() || pev->origin.x < -4096 || pev->origin.x > 4096 || pev->origin.y < -4096 || pev->origin.y > 4096 || pev->origin.z < -4096 || pev->origin.z > 4096 ) { STOP_SOUND( edict(), CHAN_WEAPON, "x/x_teleattack1.wav" ); UTIL_Remove( this ); return; } if( ( m_hEnemy->Center() - pev->origin ).Length() < 128 ) { STOP_SOUND( edict(), CHAN_WEAPON, "x/x_teleattack1.wav" ); UTIL_Remove( this ); if( m_hTargetEnt != NULL ) m_hTargetEnt->Use( m_hEnemy, m_hEnemy, USE_ON, 1.0 ); if( m_hTouch != NULL && m_hEnemy != NULL ) m_hTouch->Touch( m_hEnemy ); } else { MovetoTarget( m_hEnemy->Center() ); } MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY ); WRITE_BYTE( TE_ELIGHT ); WRITE_SHORT( entindex() ); // entity, attachment WRITE_COORD( pev->origin.x ); // origin WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_COORD( 256 ); // radius WRITE_BYTE( 0 ); // R WRITE_BYTE( 255 ); // G WRITE_BYTE( 0 ); // B WRITE_BYTE( 10 ); // life * 10 WRITE_COORD( 256 ); // decay MESSAGE_END(); pev->frame = ( int ) ( pev->frame + 1 ) % 20; }
void CMSmoker::Think( void ) { // lots of smoke MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x + RANDOM_FLOAT( -pev->dmg, pev->dmg )); WRITE_COORD( pev->origin.y + RANDOM_FLOAT( -pev->dmg, pev->dmg )); WRITE_COORD( pev->origin.z); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( RANDOM_LONG(pev->scale, pev->scale * 1.1) ); WRITE_BYTE( RANDOM_LONG(8,14) ); // framerate MESSAGE_END(); pev->health--; if ( pev->health > 0 ) pev->nextthink = gpGlobals->time + RANDOM_FLOAT(0.1, 0.2); else UTIL_Remove( this->edict() ); }
void CGrenade::Smoke3_A(void) { if (UTIL_PointContents(pev->origin) != CONTENTS_WATER) { MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SMOKE); WRITE_COORD(pev->origin.x + RANDOM_FLOAT(-128, 128)); WRITE_COORD(pev->origin.y + RANDOM_FLOAT(-128, 128)); WRITE_COORD(pev->origin.z + RANDOM_FLOAT(-10, 10)); WRITE_SHORT(g_sModelIndexSmoke); WRITE_BYTE(15 + RANDOM_FLOAT(0, 10)); WRITE_BYTE(12); MESSAGE_END(); } else UTIL_Bubbles(pev->origin - Vector(64, 64, 64), pev->origin + Vector(64, 64, 64), 100); UTIL_Remove(this); }
void CGrenade::Smoke(void) { if (UTIL_PointContents(pev->origin) != CONTENTS_WATER) { MESSAGE_BEGIN(MSG_PVS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SMOKE); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); WRITE_SHORT(g_sModelIndexSmoke); WRITE_BYTE(25); WRITE_BYTE(6); MESSAGE_END(); } else UTIL_Bubbles(pev->origin - Vector(64, 64, 64), pev->origin + Vector(64, 64, 64), 100); UTIL_Remove(this); }
/* <7f1e1> ../cstrike/dlls/explode.cpp:235 */ void CEnvExplosion::Smoke(void) { if (!(pev->spawnflags & SF_ENVEXPLOSION_NOSMOKE)) { MESSAGE_BEGIN(MSG_PAS, SVC_TEMPENTITY, pev->origin); WRITE_BYTE(TE_SMOKE); WRITE_COORD(pev->origin.x); WRITE_COORD(pev->origin.y); WRITE_COORD(pev->origin.z); WRITE_SHORT(g_sModelIndexSmoke); WRITE_BYTE((byte)m_spriteScale); // scale * 10 WRITE_BYTE(12); // framerate MESSAGE_END(); } if (!(pev->spawnflags & SF_ENVEXPLOSION_REPEATABLE)) { UTIL_Remove(this); } }
void CGrenade::Smoke( void ) { if (UTIL_PointContents ( pev->origin ) == CONTENTS_WATER) { UTIL_Bubbles( pev->origin - Vector( 64, 64, 64 ), pev->origin + Vector( 64, 64, 64 ), 100 ); } else { MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin ); WRITE_BYTE( TE_SMOKE ); WRITE_COORD( pev->origin.x ); WRITE_COORD( pev->origin.y ); WRITE_COORD( pev->origin.z ); WRITE_SHORT( g_sModelIndexSmoke ); WRITE_BYTE( (pev->dmg - 50) * 0.80 ); // scale * 10 WRITE_BYTE( 12 ); // framerate MESSAGE_END(); } UTIL_Remove( this ); }