/* <cc943> ../cstrike/dlls/h_cycler.cpp:258 */ void CCyclerSprite::__MAKE_VHOOK(Spawn)() { pev->solid = SOLID_SLIDEBOX; pev->movetype = MOVETYPE_NONE; pev->takedamage = DAMAGE_YES; pev->effects = 0; pev->frame = 0; pev->nextthink = gpGlobals->time + 0.1f; m_animate = 1; m_lastTime = gpGlobals->time; PRECACHE_MODEL((char *)STRING(pev->model)); SET_MODEL(ENT(pev), STRING(pev->model)); m_maxFrame = (float)MODEL_FRAMES(pev->modelindex) - 1; m_renderfx = pev->renderfx; m_rendermode = pev->rendermode; m_renderamt = pev->renderamt; for (int i = 0; i < ARRAYSIZE(pev->rendercolor); ++i) { pev->rendercolor[i] = m_rendercolor[i]; } }
void CGlow::Spawn( void ) { pev->solid = SOLID_NOT; pev->movetype = MOVETYPE_NONE; pev->effects = 0; pev->frame = 0; PRECACHE_MODEL( (char *)STRING(pev->model) ); SET_MODEL( ENT(pev), STRING(pev->model) ); m_maxFrame = (float) MODEL_FRAMES( pev->modelindex ) - 1; if ( m_maxFrame > 1.0 && pev->framerate != 0 ) pev->nextthink = gpGlobals->time + 0.1; m_lastTime = gpGlobals->time; }
void CCyclerSprite::Spawn( void ) { pev->solid = SOLID_SLIDEBOX; pev->movetype = MOVETYPE_NONE; pev->takedamage = DAMAGE_YES; pev->effects = 0; pev->frame = 0; pev->nextthink = gpGlobals->time + 0.1; m_animate = 1; m_lastTime = gpGlobals->time; PRECACHE_MODEL( (char *)STRING(pev->model) ); SET_MODEL( ENT(pev), STRING(pev->model) ); m_maxFrame = (float) MODEL_FRAMES( pev->modelindex ) - 1; }
void CCyclerSprite::Spawn( void ) { SetSolidType( SOLID_SLIDEBOX ); SetMoveType( MOVETYPE_NONE ); SetTakeDamageMode( DAMAGE_YES ); GetEffects().ClearAll(); SetFrame( 0 ); SetNextThink( gpGlobals->time + 0.1 ); m_animate = 1; m_lastTime = gpGlobals->time; PRECACHE_MODEL( GetModelName() ); SetModel( GetModelName() ); m_maxFrame = ( float ) MODEL_FRAMES( GetModelIndex() ) - 1; }
void CSquidSpit:: Spawn( void ) { pev->movetype = MOVETYPE_FLY; pev->classname = MAKE_STRING( "squidspit" ); pev->solid = SOLID_BBOX; pev->rendermode = kRenderTransAlpha; pev->renderamt = 255; SET_MODEL(ENT(pev), "sprites/bigspit.spr"); pev->frame = 0; pev->scale = 0.5; UTIL_SetSize( pev, Vector( 0, 0, 0), Vector(0, 0, 0) ); m_maxFrame = (float) MODEL_FRAMES( pev->modelindex ) - 1; }
// UNDONE: right now this is pretty much a copy of the squid spit with minor changes to the way it does damage void CBMortar:: Spawn( void ) { pev->movetype = MOVETYPE_TOSS; pev->classname = MAKE_STRING( "bmortar" ); pev->solid = SOLID_BBOX; pev->rendermode = kRenderTransAlpha; pev->renderamt = 255; SET_MODEL(ENT(pev), "sprites/mommaspit.spr"); pev->frame = 0; pev->scale = 0.5; UTIL_SetSize( pev, Vector( 0, 0, 0), Vector(0, 0, 0) ); m_maxFrame = (float) MODEL_FRAMES( pev->modelindex ) - 1; pev->dmgtime = gpGlobals->time + 0.4; }
void CGibShooter::Spawn( void ) { Precache(); pev->solid = SOLID_NOT; pev->effects = EF_NODRAW; if ( m_flDelay == 0 ) { m_flDelay = 0.1; } if ( m_flGibLife == 0 ) { m_flGibLife = 25; } SetMovedir ( pev ); pev->body = MODEL_FRAMES( m_iGibModelIndex ); }
void CSprite::Spawn( void ) { pev->solid = SOLID_NOT; pev->movetype = MOVETYPE_NONE; pev->effects = 0; pev->frame = 0; Precache(); SET_MODEL( ENT(pev), STRING(pev->model) ); m_maxFrame = (float) MODEL_FRAMES( pev->modelindex ) - 1; if ( pev->targetname && !(pev->spawnflags & SF_SPRITE_STARTON) ) TurnOff(); else TurnOn(); // Worldcraft only sets y rotation, copy to Z if ( pev->angles.y != 0 && pev->angles.z == 0 ) { pev->angles.z = pev->angles.y; pev->angles.y = 0; } }
//========================================================= // RunTask //========================================================= void CGargantua::RunTask( Task_t *pTask ) { switch ( pTask->iTask ) { case TASK_DIE: if ( gpGlobals->time > m_flWaitFinished ) { pev->renderfx = kRenderFxExplode; pev->rendercolor.x = 255; pev->rendercolor.y = 0; pev->rendercolor.z = 0; StopAnimation(); pev->nextthink = gpGlobals->time + 0.15; SetThink( SUB_Remove ); int i; int parts = MODEL_FRAMES( gGargGibModel ); for ( i = 0; i < 10; i++ ) { CGib *pGib = GetClassPtr( (CGib *)NULL ); pGib->Spawn( GARG_GIB_MODEL ); int bodyPart = 0; if ( parts > 1 ) bodyPart = RANDOM_LONG( 0, pev->body-1 ); pGib->pev->body = bodyPart; pGib->m_bloodColor = BLOOD_COLOR_YELLOW; pGib->m_material = matNone; pGib->SetAbsOrigin( GetAbsOrigin() ); pGib->SetAbsVelocity( UTIL_RandomBloodVector() * RANDOM_FLOAT( 300, 500 )); pGib->SetNextThink( 1.25 ); pGib->SetThink( SUB_FadeOut ); } Vector vecOrigin = GetAbsOrigin(); MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, vecOrigin ); WRITE_BYTE( TE_BREAKMODEL); // position WRITE_COORD( vecOrigin.x ); WRITE_COORD( vecOrigin.y ); WRITE_COORD( vecOrigin.z ); // size WRITE_COORD( 200 ); WRITE_COORD( 200 ); WRITE_COORD( 128 ); // velocity WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); // randomization WRITE_BYTE( 200 ); // Model WRITE_SHORT( gGargGibModel ); //model id# // # of shards WRITE_BYTE( 50 ); // duration WRITE_BYTE( 20 );// 3.0 seconds // flags WRITE_BYTE( BREAK_FLESH ); MESSAGE_END(); return; } else CBaseMonster::RunTask(pTask); break; case TASK_FLAME_SWEEP: if ( gpGlobals->time > m_flWaitFinished ) { FlameDestroy(); TaskComplete(); FlameControls( 0, 0 ); SetBoneController( 0, 0 ); SetBoneController( 1, 0 ); } else { BOOL cancel = FALSE; Vector angles = g_vecZero; FlameUpdate(); CBaseEntity *pEnemy = m_hEnemy; if ( pEnemy ) { Vector org = GetAbsOrigin(); org.z += 64; Vector dir = pEnemy->BodyTarget(org) - org; angles = UTIL_VecToAngles( dir ); angles.y -= GetAbsAngles().y; if ( dir.Length() > 400 ) cancel = TRUE; } if ( fabs(angles.y) > 60 ) cancel = TRUE; if ( cancel ) { m_flWaitFinished -= 0.5; m_flameTime -= 0.5; } // FlameControls( angles.x + 2 * sin(gpGlobals->time*8), angles.y + 28 * sin(gpGlobals->time*8.5) ); FlameControls( angles.x, angles.y ); } break; default: CBaseMonster::RunTask( pTask ); break; } }
void CGargantua::RunTask( const Task_t& task ) { switch ( task.iTask ) { case TASK_DIE: if ( gpGlobals->time > m_flWaitFinished ) { SetRenderFX( kRenderFxExplode ); SetRenderColor( Vector( 255, 0, 0 ) ); StopAnimation(); SetNextThink( gpGlobals->time + 0.15 ); SetThink( &CGargantua::SUB_Remove ); int i; int parts = MODEL_FRAMES( gGargGibModel ); for ( i = 0; i < 10; i++ ) { auto pGib = CGib::GibCreate( GARG_GIB_MODEL ); int bodyPart = 0; if ( parts > 1 ) bodyPart = RANDOM_LONG( 0, GetBody() -1 ); pGib->SetBody( bodyPart ); pGib->m_bloodColor = BLOOD_COLOR_YELLOW; pGib->m_material = matNone; pGib->SetAbsOrigin( GetAbsOrigin() ); pGib->SetAbsVelocity( UTIL_RandomBloodVector() * RANDOM_FLOAT( 300, 500 ) ); pGib->SetNextThink( gpGlobals->time + 1.25 ); pGib->SetThink( &CGib::SUB_FadeOut ); } MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, GetAbsOrigin() ); WRITE_BYTE( TE_BREAKMODEL); // position WRITE_COORD( GetAbsOrigin().x ); WRITE_COORD( GetAbsOrigin().y ); WRITE_COORD( GetAbsOrigin().z ); // size WRITE_COORD( 200 ); WRITE_COORD( 200 ); WRITE_COORD( 128 ); // velocity WRITE_COORD( 0 ); WRITE_COORD( 0 ); WRITE_COORD( 0 ); // randomization WRITE_BYTE( 200 ); // Model WRITE_SHORT( gGargGibModel ); //model id# // # of shards WRITE_BYTE( 50 ); // duration WRITE_BYTE( 20 );// 3.0 seconds // flags WRITE_BYTE( BREAK_FLESH ); MESSAGE_END(); return; } else CBaseMonster::RunTask( task ); break; case TASK_FLAME_SWEEP: if ( gpGlobals->time > m_flWaitFinished ) { FlameDestroy(); TaskComplete(); FlameControls( 0, 0 ); SetBoneController( 0, 0 ); SetBoneController( 1, 0 ); } else { bool cancel = false; Vector angles = g_vecZero; FlameUpdate(); CBaseEntity *pEnemy = m_hEnemy; if ( pEnemy ) { Vector org = GetAbsOrigin(); org.z += 64; Vector dir = pEnemy->BodyTarget(org) - org; angles = UTIL_VecToAngles( dir ); angles.x = -angles.x; angles.y -= GetAbsAngles().y; if ( dir.Length() > 400 ) cancel = true; } if ( fabs(angles.y) > 60 ) cancel = true; if ( cancel ) { m_flWaitFinished -= 0.5; m_flameTime -= 0.5; } // FlameControls( angles.x + 2 * sin(gpGlobals->time*8), angles.y + 28 * sin(gpGlobals->time*8.5) ); FlameControls( angles.x, angles.y ); } break; default: CBaseMonster::RunTask( task ); break; } }