//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void CZombie::Spawn( void ) { Precache(); if( FClassnameIs( this, "npc_zombie" ) ) { m_fIsTorso = false; } else { // This was placed as an npc_zombie_torso m_fIsTorso = true; } m_fIsHeadless = false; #ifdef HL2_EPISODIC SetBloodColor( BLOOD_COLOR_ZOMBIE ); #else SetBloodColor( BLOOD_COLOR_GREEN ); #endif // HL2_EPISODIC m_iHealth = sk_zombie_health.GetFloat(); m_flFieldOfView = 0.2; CapabilitiesClear(); //GetNavigator()->SetRememberStaleNodes( false ); BaseClass::Spawn(); m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 1.0, 4.0 ); }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void CRebelZombie::Spawn( void ) { Precache(); m_fIsHeadless = false; m_iRebelZombieSkin = random->RandomInt(1,4); #ifdef HL2_EPISODIC SetBloodColor( BLOOD_COLOR_ZOMBIE ); #else SetBloodColor( BLOOD_COLOR_GREEN ); #endif // HL2_EPISODIC m_iHealth = sk_rebel_zombie_health.GetFloat(); m_flFieldOfView = 0.2; CapabilitiesClear(); CapabilitiesAdd( bits_CAP_USE_WEAPONS ); CapabilitiesAdd( bits_CAP_MOVE_SHOOT ); //GetNavigator()->SetRememberStaleNodes( false ); BaseClass::Spawn(); m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 1.0, 4.0 ); }
void CNPC_Zombine::Spawn( void ) { Precache(); m_fIsTorso = false; m_fIsHeadless = false; #ifdef HL2_EPISODIC SetBloodColor( BLOOD_COLOR_ZOMBIE ); #else SetBloodColor( BLOOD_COLOR_GREEN ); #endif // HL2_EPISODIC m_iHealth = sk_zombie_soldier_health.GetFloat(); SetMaxHealth( m_iHealth ); m_flFieldOfView = 0.2; CapabilitiesClear(); BaseClass::Spawn(); m_flSprintTime = 0.0f; m_flSprintRestTime = 0.0f; m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 1.0, 4.0 ); g_flZombineGrenadeTimes = gpGlobals->curtime; m_flGrenadePullTime = gpGlobals->curtime; m_iGrenadeCount = ZOMBINE_MAX_GRENADES; }
void CZombie::Spawn( void ) { if(FClassnameIs( this, "npc_zombie_bisou")) { m_iZombieType = ZOMBIE_BISOU; this->m_nSkin = RandomSkin(); } else m_iZombieType = ZOMBIE_EPICE; Precache(); m_fIsTorso = false; m_fIsHeadless = false; SetBloodColor( BLOOD_COLOR_RED ); //La vie initiale du zombie peut varier if(m_iZombieType == ZOMBIE_BISOU) m_iHealth = sk_zombie_bisou_health.GetInt() + sk_zombie_bisou_health.GetInt() * RandomFloat(-0.10f, 0.10f); else m_iHealth = sk_zombie_health.GetInt() + sk_zombie_health.GetInt() * RandomFloat(-0.10f, 0.10f); m_flFieldOfView = 0.2; CapabilitiesClear(); //GetNavigator()->SetRememberStaleNodes( false ); BaseClass::Spawn(); m_flNextMoanSound = gpGlobals->curtime + random->RandomFloat( 1.0, 4.0 ); }
//========================================================= // Spawn() // Crear un nuevo //========================================================= void CNPC_Scient::Spawn() { Precache(); // Modelo y color de sangre. SetModel(MODEL_BASE); SetBloodColor(BLOOD); // Tamaño SetHullType(HULL_WIDE_SHORT); SetHullSizeNormal(); // Navegación, estado físico y opciones extra. SetSolid(SOLID_BBOX); SetNavType(NAV_GROUND); AddSolidFlags(FSOLID_NOT_STANDABLE); SetMoveType(MOVETYPE_STEP); SetRenderColor(255, 255, 255, 255); SetDistLook(SEE_DIST); // Reseteo de variables. // Salud, estado del NPC y vista. m_iHealth = sk_scient_health.GetFloat(); m_NPCState = NPC_STATE_NONE; m_flFieldOfView = FOV; // Capacidades CapabilitiesClear(); CapabilitiesAdd(CAPABILITIES); NPCInit(); BaseClass::Spawn(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_Bug_Warrior::Spawn( void ) { Precache(); SetModel( BUG_WARRIOR_MODEL ); SetHullType(HULL_WIDE_HUMAN);//HULL_WIDE_SHORT; SetHullSizeNormal(); SetDefaultEyeOffset(); SetViewOffset( (WorldAlignMins() + WorldAlignMaxs()) * 0.5 ); // See from my center SetDistLook( 1024.0 ); SetNavType(NAV_GROUND); m_NPCState = NPC_STATE_NONE; SetBloodColor( BLOOD_COLOR_YELLOW ); m_iHealth = npc_bug_warrior_health.GetFloat(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); m_iszPatrolPathName = NULL_STRING; // Only do this if a squadname appears in the entity if ( m_SquadName != NULL_STRING ) { CapabilitiesAdd( bits_CAP_SQUAD ); } CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_INNATE_MELEE_ATTACK1 ); NPCInit(); BaseClass::Spawn(); }
//----------------------------------------------------------------------------- // Purpose: This used to have something to do with bees flying, but // now it only initializes moving furniture in scripted sequences //----------------------------------------------------------------------------- void CNPC_Furniture::Spawn( ) { Precache(); SetModel( STRING(GetModelName()) ); SetMoveType( MOVETYPE_STEP ); SetSolid( SOLID_BBOX ); // Our collision, if needed, will be done through bone followers AddSolidFlags( FSOLID_NOT_SOLID ); SetBloodColor( DONT_BLEED ); m_iHealth = TOO_MUCH_HEALTH_TO_DIE; //wow m_takedamage = DAMAGE_AIM; SetSequence( 0 ); SetCycle( 0 ); SetNavType( NAV_FLY ); AddFlag( FL_FLY ); CapabilitiesAdd( bits_CAP_MOVE_FLY | bits_CAP_TURN_HEAD | bits_CAP_ANIMATEDFACE ); AddEFlags( EFL_NO_MEGAPHYSCANNON_RAGDOLL ); // pev->nextthink += 1.0; // SetThink (WalkMonsterDelay); ResetSequenceInfo( ); SetCycle( 0 ); NPCInit(); // Furniture needs to block LOS SetBlocksLOS( true ); }
//----------------------------------------------------------------------------- // Spawn //----------------------------------------------------------------------------- void CNPC_Eli :: Spawn() { Precache(); BaseClass::Spawn(); SetModel( "models/eli.mdl" ); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = 8; m_flFieldOfView = 0.5;// indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_OPEN_DOORS | bits_CAP_ANIMATEDFACE | bits_CAP_TURN_HEAD ); NPCInit(); Relink(); }
//----------------------------------------------------------------------------- // Purpose: // // //----------------------------------------------------------------------------- void CGoat::Spawn( void ) { Precache(); SetModel( GOAT_MODEL ); SetHullType(HULL_MEDIUM); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = sk_goat_health.GetFloat(); // m_iMaxHealth = m_iHealth; m_flFieldOfView = 0.5; // indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; CapabilitiesClear(); CapabilitiesAdd( bits_CAP_TURN_HEAD | bits_CAP_MOVE_GROUND ); // innate Range attack ( howling / shaking) CapabilitiesAdd( bits_CAP_INNATE_RANGE_ATTACK1 | bits_CAP_INNATE_RANGE_ATTACK2 ); // innate Melee attack ( charge+head attack / bite attack (from fish bite or byte missed with event ) CapabilitiesAdd( bits_CAP_INNATE_MELEE_ATTACK1 | bits_CAP_INNATE_MELEE_ATTACK2 ); BaseClass::Spawn(); }
//========================================================= // Spawn //========================================================= void CNPC_Houndeye::Spawn() { Precache( ); SetModel("models/houndeye.mdl"); SetHullType(HULL_WIDE_SHORT); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_YELLOW ); m_iHealth = sk_Houndeye_health.GetFloat(); m_flFieldOfView = 0.5;// indicates the width of this monster's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; m_fAsleep = false; // everyone spawns awake m_fDontBlink = false; CapabilitiesAdd( bits_CAP_SQUAD ); CapabilitiesAdd( bits_CAP_MOVE_GROUND ); CapabilitiesAdd( bits_CAP_INNATE_RANGE_ATTACK1 ); CapabilitiesAdd( bits_CAP_TURN_HEAD ); m_flNextSecondaryAttack = 0; m_bLoopClockwise = random->RandomInt(0,1) ? true : false; m_pEnergyWave = NULL; m_flEndEnergyWaveTime = 0; SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); NPCInit(); }
void CPhysicsCannister::Spawn( void ) { Precache(); SetModel( STRING(GetModelName()) ); SetBloodColor( DONT_BLEED ); AddSolidFlags( FSOLID_CUSTOMRAYTEST ); m_takedamage = DAMAGE_YES; SetNextThink( TICK_NEVER_THINK ); if ( m_iHealth <= 0 ) m_iHealth = 25; m_flAnimTime = gpGlobals->curtime; m_flPlaybackRate = 0.0; SetCycle( 0 ); m_bFired = false; // not thrusting m_active = false; CreateVPhysics(); if ( !VPhysicsGetObject() ) { // must have a physics object or code will crash later UTIL_Remove(this); } }
//----------------------------------------------------------------------------- // Spawn //----------------------------------------------------------------------------- void CNPC_Kleiner::Spawn() { // Allow custom model usage (mostly for monitors) char *szModel = (char *)STRING( GetModelName() ); if (!szModel || !*szModel) { szModel = "models/kleiner.mdl"; SetModelName( AllocPooledString(szModel) ); } Precache(); SetModel( szModel ); BaseClass::Spawn(); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = 8; m_flFieldOfView = 0.5;// indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_OPEN_DOORS | bits_CAP_ANIMATEDFACE | bits_CAP_TURN_HEAD ); CapabilitiesAdd( bits_CAP_FRIENDLY_DMG_IMMUNE ); AddEFlags( EFL_NO_DISSOLVE | EFL_NO_MEGAPHYSCANNON_RAGDOLL | EFL_NO_PHYSCANNON_INTERACTION ); NPCInit(); }
//----------------------------------------------------------------------------- // Purpose: // // //----------------------------------------------------------------------------- void CNPC_Blob::Spawn( void ) { Precache(); SetModel( NPC_BLOB_MODEL ); SetHullType(HULL_TINY); SetHullSizeNormal(); SetSolid( SOLID_NONE ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = INT_MAX; m_flFieldOfView = -1.0f; m_NPCState = NPC_STATE_NONE; CapabilitiesClear(); CapabilitiesAdd( bits_CAP_MOVE_GROUND ); m_Elements.RemoveAll(); NPCInit(); AddEffects( EF_NODRAW ); m_flMinElementDist = blob_mindist.GetFloat(); }
void CBasePlayer::SharedSpawn() { SetMoveType( MOVETYPE_WALK ); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetFriction( 1.0f ); pl.deadflag = false; m_lifeState = LIFE_ALIVE; m_iHealth = 100; m_takedamage = DAMAGE_YES; m_Local.m_bDrawViewmodel = true; m_Local.m_flStepSize = sv_stepsize.GetFloat(); m_Local.m_bAllowAutoMovement = true; m_nRenderFX = kRenderFxNone; m_flNextAttack = gpGlobals->curtime; m_flMaxspeed = 0.0f; MDLCACHE_CRITICAL_SECTION(); SetSequence( SelectWeightedSequence( ACT_IDLE ) ); if ( GetFlags() & FL_DUCKING ) SetCollisionBounds( VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX ); else SetCollisionBounds( VEC_HULL_MIN, VEC_HULL_MAX ); // dont let uninitialized value here hurt the player m_Local.m_flFallVelocity = 0; SetBloodColor( BLOOD_COLOR_RED ); }
//----------------------------------------------------------------------------- // Purpose: // // //----------------------------------------------------------------------------- void CFastZombie::Spawn( void ) { Precache(); m_fJustJumped = false; m_fIsTorso = m_fIsHeadless = false; SetBloodColor( BLOOD_COLOR_YELLOW ); m_iHealth = 50; m_flFieldOfView = 0.2; CapabilitiesClear(); CapabilitiesAdd( bits_CAP_MOVE_CLIMB | bits_CAP_MOVE_JUMP | bits_CAP_MOVE_GROUND | bits_CAP_INNATE_RANGE_ATTACK1 | /*bits_CAP_INNATE_MELEE_ATTACK1 |*/ bits_CAP_DOORS_GROUP ); m_flNextAttack = gpGlobals->curtime; m_pLayer2 = NULL; m_iClimbCount = 0; m_flTimeUpdateSine = gpGlobals->curtime; m_fSineTrendUp = false; EndNavJump(); m_flDistFactor = 1.0; BaseClass::Spawn(); }
//----------------------------------------------------------------------------- // Spawn //----------------------------------------------------------------------------- void CNPC_GMan::Spawn() { Precache(); BaseClass::Spawn(); SetModel( "models/gman.mdl" ); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = 8; m_flFieldOfView = 0.5;// indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; SetImpactEnergyScale( 0.0f ); // no physics damage on the gman CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_OPEN_DOORS | bits_CAP_ANIMATEDFACE | bits_CAP_TURN_HEAD ); CapabilitiesAdd( bits_CAP_FRIENDLY_DMG_IMMUNE ); AddEFlags( EFL_NO_DISSOLVE | EFL_NO_MEGAPHYSCANNON_RAGDOLL ); NPCInit(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_Monk::Spawn() { Precache(); BaseClass::Spawn(); SetModel( "models/Monk.mdl" ); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = 100; m_flFieldOfView = m_flFieldOfView = -0.707; // 270` m_NPCState = NPC_STATE_NONE; m_HackedGunPos = Vector ( 0, 0, 55 ); CapabilitiesAdd( bits_CAP_TURN_HEAD | bits_CAP_DOORS_GROUP | bits_CAP_MOVE_GROUND ); CapabilitiesAdd( bits_CAP_USE_WEAPONS ); CapabilitiesAdd( bits_CAP_ANIMATEDFACE ); CapabilitiesAdd( bits_CAP_FRIENDLY_DMG_IMMUNE ); CapabilitiesAdd( bits_CAP_AIM_GUN ); CapabilitiesAdd( bits_CAP_MOVE_SHOOT ); NPCInit(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_Bug_Builder::Spawn( void ) { Precache(); SetModel( BUG_BUILDER_MODEL ); SetHullType(HULL_TINY); SetHullSizeNormal(); SetDefaultEyeOffset(); SetViewOffset( (WorldAlignMins() + WorldAlignMaxs()) * 0.5 ); // See from my center SetDistLook( 1024.0 ); m_flNextDawdle = 0; SetNavType(NAV_GROUND); m_NPCState = NPC_STATE_NONE; SetBloodColor( BLOOD_COLOR_YELLOW ); m_iHealth = npc_bug_builder_health.GetFloat(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); CapabilitiesAdd( bits_CAP_MOVE_GROUND ); NPCInit(); BaseClass::Spawn(); }
//========================================================= // Spawn //========================================================= void CGenericActor::Spawn() { Precache(); SetModel( STRING( GetModelName() ) ); /* if ( FStrEq( STRING( GetModelName() ), "models/player.mdl" ) ) UTIL_SetSize(this, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX); else UTIL_SetSize(this, VEC_HULL_MIN, VEC_HULL_MAX); */ if ( FStrEq( STRING( GetModelName() ), "models/player.mdl" ) || FStrEq( STRING( GetModelName() ), "models/holo.mdl" ) || FStrEq( STRING( GetModelName() ), "models/blackout.mdl" ) ) { UTIL_SetSize(this, VEC_HULL_MIN, VEC_HULL_MAX); } else { UTIL_SetSize(this, NAI_Hull::Mins(HULL_HUMAN), NAI_Hull::Maxs(HULL_HUMAN)); } if ( !FStrEq( STRING( GetModelName() ), "models/blackout.mdl" ) ) { SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); } else { SetSolid( SOLID_NONE ); } SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = 8; m_flFieldOfView = 0.5;// indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_OPEN_DOORS ); // remove head turn if no eyes or forward attachment if (LookupAttachment( "eyes" ) > 0 && LookupAttachment( "forward" ) > 0) { CapabilitiesAdd( bits_CAP_TURN_HEAD | bits_CAP_ANIMATEDFACE ); } if (m_strHullName != NULL_STRING) { SetHullType( NAI_Hull::LookupId( STRING( m_strHullName ) ) ); } else { SetHullType( HULL_HUMAN ); } SetHullSizeNormal( ); NPCInit(); }
void CNPC_Hydra::Spawn() { Precache(); BaseClass::Spawn(); SetModel( "models/Hydra.mdl" ); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); ClearEffects(); m_iHealth = 20; m_flFieldOfView = -1.0;// indicates the width of this NPC's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; GetVectors( NULL, NULL, &m_vecOutward ); SetAbsAngles( QAngle( 0, 0, 0 ) ); m_vecChain.Set( 0, GetAbsOrigin( ) - m_vecOutward * 32 ); m_vecChain.Set( 1, GetAbsOrigin( ) + m_vecOutward * 16 ); m_vecHeadGoal = m_vecChain[1] + m_vecOutward * HYDRA_OUTWARD_BIAS; m_vecHeadDir = Vector( 0, 0, 1 ); // init bones HydraBone bone; bone.flActualLength = 0.0f; bone.vecGoalPos = Vector(0.0f, 0.0f, 0.0f); bone.vecPos = GetAbsOrigin( ) - m_vecOutward * HYDRA_INWARD_BIAS; m_body.AddToTail( bone ); bone.vecPos = m_vecChain[1]; m_body.AddToTail( bone ); bone.vecPos = m_vecHeadGoal; m_body.AddToTail( bone ); bone.vecPos = m_vecHeadGoal + m_vecHeadDir; m_body.AddToTail( bone ); m_idealSegmentLength = sv_hydraSegmentLength.GetFloat(); for (int i = 2; i < CHAIN_LINKS; i++) { m_vecChain.Set( i, m_vecChain[i-1] ); } m_seed = random->RandomFloat( 0.0, 2000.0 ); NPCInit(); m_takedamage = DAMAGE_NO; }
//------------------------------------------------------------------------------ // Purpose : Initialize a gibs position and velocity // Input : // Output : //------------------------------------------------------------------------------ void CGib::InitGib( CBaseEntity *pVictim, float fMinVelocity, float fMaxVelocity ) { // ------------------------------------------------------------------------ // If have a pVictim spawn the gib somewhere in the pVictim's bounding volume // ------------------------------------------------------------------------ if ( pVictim ) { // Find a random position within the bounding box (add 1 to Z to get it out of the ground) Vector vecOrigin; pVictim->CollisionProp()->RandomPointInBounds( vec3_origin, Vector( 1, 1, 1 ), &vecOrigin ); vecOrigin.z += 1.0f; SetAbsOrigin( vecOrigin ); // make the gib fly away from the attack vector Vector vecNewVelocity = g_vecAttackDir * -1; // mix in some noise vecNewVelocity.x += random->RandomFloat ( -0.25, 0.25 ); vecNewVelocity.y += random->RandomFloat ( -0.25, 0.25 ); vecNewVelocity.z += random->RandomFloat ( -0.25, 0.25 ); vecNewVelocity *= random->RandomFloat ( fMaxVelocity, fMinVelocity ); QAngle vecNewAngularVelocity = GetLocalAngularVelocity(); vecNewAngularVelocity.x = random->RandomFloat ( 100, 200 ); vecNewAngularVelocity.y = random->RandomFloat ( 100, 300 ); SetLocalAngularVelocity( vecNewAngularVelocity ); // copy owner's blood color SetBloodColor( pVictim->BloodColor() ); AdjustVelocityBasedOnHealth( pVictim->m_iHealth, vecNewVelocity ); // Attempt to be physical if we can if ( VPhysicsInitNormal( SOLID_BBOX, 0, false ) ) { IPhysicsObject *pObj = VPhysicsGetObject(); if ( pObj != NULL ) { AngularImpulse angImpulse = RandomAngularImpulse( -500, 500 ); pObj->AddVelocity( &vecNewVelocity, &angImpulse ); } } else { SetSolid( SOLID_BBOX ); SetCollisionBounds( vec3_origin, vec3_origin ); SetAbsVelocity( vecNewVelocity ); } SetCollisionGroup( COLLISION_GROUP_DEBRIS ); } LimitVelocity(); }
//----------------------------------------------------------------------------- // Purpose: Parse data found from npcData keyValue... //----------------------------------------------------------------------------- void CNPC_Monster::ParseNPCScript( const char *szScript ) { // Get our data and make sure it is not NULL... KeyValues *pkvMyNPCData = pkvNPCData(szScript); if (!pkvMyNPCData) { Warning("NPC_MONSTER linked to %s.txt was removed, no such script exist!\n", szScript); UTIL_Remove(this); return; } // Parse our data: KeyValues *pkvInfoField = pkvMyNPCData->FindKey("Info"); KeyValues *pkvModelField = pkvMyNPCData->FindKey("Model"); KeyValues *pkvRandomModelsField = pkvMyNPCData->FindKey("Models"); bool bRandomModel = false; if (pkvInfoField) { cEntName = MAKE_STRING(ReadAndAllocStringValue(pkvInfoField, "Name")); cSoundScript = MAKE_STRING(ReadAndAllocStringValue(pkvInfoField, "SoundScript")); m_iHealth = pkvInfoField->GetInt("Health", 100); m_iDamage[0] = pkvInfoField->GetInt("DamageOneHand", 10); m_iDamage[1] = pkvInfoField->GetInt("DamageBothHands", 10); m_flAttackRange = pkvInfoField->GetFloat("AttackRange", 70.0f); m_iMaxHealth = m_iHealth; m_bCanOpenDoors = ((pkvInfoField->GetInt("CanOpenDoors") >= 1) ? true : false); } if (pkvModelField) { bRandomModel = (!pkvModelField->FindKey("Path")); if (!bRandomModel) cModel = MAKE_STRING(ReadAndAllocStringValue(pkvModelField, "Path")); m_fIsTorso = ((pkvModelField->GetInt("IsTorso") >= 1) ? true : false); if (!strcmp(pkvModelField->GetString("Skin"), "random")) m_iSkin = random->RandomInt(0, pkvModelField->GetInt("MaxSkins")); else m_iSkin = pkvModelField->GetInt("Skin"); SetBloodColor(pkvModelField->GetInt("BloodType")); } if (pkvRandomModelsField && bRandomModel) cModel = MAKE_STRING(GetRandomModel(pkvRandomModelsField)); Precache(); pkvMyNPCData->deleteThis(); }
//----------------------------------------------------------------------------- // Purpose: // // //----------------------------------------------------------------------------- void CNPC_Assassin::Spawn( void ) { Precache(); SetModel( "models/fassassin.mdl" ); SetHullType(HULL_HUMAN); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_RED ); m_iHealth = sk_assassin_health.GetFloat(); m_flFieldOfView = 0.1; m_NPCState = NPC_STATE_NONE; CapabilitiesClear(); CapabilitiesAdd( bits_CAP_MOVE_CLIMB | bits_CAP_MOVE_GROUND | bits_CAP_MOVE_JUMP ); CapabilitiesAdd( bits_CAP_SQUAD | bits_CAP_USE_WEAPONS | bits_CAP_AIM_GUN | bits_CAP_INNATE_RANGE_ATTACK1 | bits_CAP_INNATE_RANGE_ATTACK2 | bits_CAP_INNATE_MELEE_ATTACK1 ); //Turn on our guns SetBodygroup( 1, 1 ); int attachment = LookupAttachment( "Eye" ); // Start up the eye glow m_pEyeSprite = CSprite::SpriteCreate( "sprites/redglow1.vmt", GetLocalOrigin(), false ); if ( m_pEyeSprite != NULL ) { m_pEyeSprite->SetAttachment( this, attachment ); m_pEyeSprite->SetTransparency( kRenderTransAdd, 255, 255, 255, 200, kRenderFxNone ); m_pEyeSprite->SetScale( 0.25f ); } // Start up the eye trail m_pEyeTrail = CSpriteTrail::SpriteTrailCreate( "sprites/bluelaser1.vmt", GetLocalOrigin(), false ); if ( m_pEyeTrail != NULL ) { m_pEyeTrail->SetAttachment( this, attachment ); m_pEyeTrail->SetTransparency( kRenderTransAdd, 255, 0, 0, 200, kRenderFxNone ); m_pEyeTrail->SetStartWidth( 8.0f ); m_pEyeTrail->SetLifeTime( 0.75f ); } NPCInit(); m_bEvade = false; m_bAggressive = false; }
void CNPC_SO_BaseZombie::Spawn( void ) { m_fIsHeadless = true; // no headcrabs! SetBloodColor( BLOOD_COLOR_RED ); // normal red blood, not that stupid zombie/green blood crap! m_flFieldOfView = 1.0; // zombies see all! BaseClass::Spawn(); // GetTeamNumber() support ChangeTeam( TEAM_ZOMBIES ); }
//----------------------------------------------------------------------------- // Purpose: // Input: // Output: //----------------------------------------------------------------------------- void CASW_Ranger::Spawn( void ) { SetHullType( HULL_MEDIUMBIG ); BaseClass::Spawn(); SetHullType( HULL_MEDIUMBIG ); SetHealthByDifficultyLevel(); SetBloodColor( BLOOD_COLOR_GREEN ); CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_INNATE_MELEE_ATTACK1 | bits_CAP_INNATE_RANGE_ATTACK1 ); SetIdealState( NPC_STATE_ALERT ); m_bNeverRagdoll = true; // // Firing patterns // // 3 shots CASW_AlienVolley volley; volley.m_rounds.SetCount( 3 ); volley.m_rounds[0].m_flTime = 0; volley.m_rounds[0].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[0].m_flStartAngle = 0; volley.m_rounds[0].m_flEndAngle = 0; volley.m_rounds[0].m_nNumShots = 1; volley.m_rounds[0].m_flShotDelay = 0; volley.m_rounds[0].m_flSpeed = 425; volley.m_rounds[0].m_flHorizontalOffset = 0; volley.m_rounds[1].m_flTime = 0.1; volley.m_rounds[1].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[1].m_flStartAngle = -4; volley.m_rounds[1].m_flEndAngle = 0; volley.m_rounds[1].m_nNumShots = 1; volley.m_rounds[1].m_flShotDelay = 0; volley.m_rounds[1].m_flSpeed = 425; volley.m_rounds[1].m_flHorizontalOffset = 0; volley.m_rounds[2].m_flTime = 0.2; volley.m_rounds[2].m_nShot_type = GetShotIndex( "shot1" ); volley.m_rounds[2].m_flStartAngle = 4; volley.m_rounds[2].m_flEndAngle = 0; volley.m_rounds[2].m_nNumShots = 1; volley.m_rounds[2].m_flShotDelay = 0; volley.m_rounds[2].m_flSpeed = 425; volley.m_rounds[2].m_flHorizontalOffset = 0; CreateVolley( "volley1", &volley ); }
//----------------------------------------------------------------------------- // Purpose: // // //----------------------------------------------------------------------------- void CNPC_EnemyFinder::Spawn( void ) { Precache(); SetModel( "models/roller.mdl" ); // This is a dummy model that is never used! UTIL_SetSize(this, vec3_origin, vec3_origin); SetMoveType( MOVETYPE_NONE ); SetBloodColor( DONT_BLEED ); SetGravity( 0.0 ); m_iHealth = 1; AddFlag( FL_NPC ); SetSolid( SOLID_NONE ); m_bEnemyStatus = false; if (m_flFieldOfView < -1.0) { DevMsg("ERROR: EnemyFinder field of view must be between -1.0 and 1.0\n"); m_flFieldOfView = 0.5; } else if (m_flFieldOfView > 1.0) { DevMsg("ERROR: EnemyFinder field of view must be between -1.0 and 1.0\n"); m_flFieldOfView = 1.0; } CapabilitiesAdd ( bits_CAP_SQUAD ); NPCInit(); // Set this after NPCInit() m_takedamage = DAMAGE_NO; AddEffects( EF_NODRAW ); m_NPCState = NPC_STATE_ALERT; // always alert SetViewOffset( vec3_origin ); if ( m_flMaxSearchDist ) { SetDistLook( m_flMaxSearchDist ); } if ( HasSpawnFlags( SF_ENEMY_FINDER_SHORT_MEMORY ) ) { GetEnemies()->SetEnemyDiscardTime( 0.2 ); } }
void CSnark::Spawn( void ) { Precache(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetModel( "models/w_squeak.mdl" ); UTIL_SetSize( this, Vector( -4, -4, 0 ), Vector( 4, 4, 8 ) ); SetBloodColor( BLOOD_COLOR_YELLOW ); SetTouch( &CSnark::SuperBounceTouch ); SetThink( &CSnark::HuntThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flNextHit = gpGlobals->curtime; m_flNextHunt = gpGlobals->curtime + 1E6; m_flNextBounceSoundTime = gpGlobals->curtime; AddFlag( FL_AIMTARGET | FL_NPC ); m_takedamage = DAMAGE_YES; m_iHealth = sk_snark_health.GetFloat(); m_iMaxHealth = m_iHealth; SetGravity( 0.5 ); SetFriction( 0.5 ); SetDamage( sk_snark_dmg_pop.GetFloat() ); m_flDie = gpGlobals->curtime + SQUEEK_DETONATE_DELAY; m_flFieldOfView = 0; // 180 degrees if ( GetOwnerEntity() ) m_hOwner = GetOwnerEntity(); m_flNextBounceSoundTime = gpGlobals->curtime;// reset each time a snark is spawned. SetSequence( WSQUEAK_RUN ); ResetSequenceInfo( ); m_iMyClass = CLASS_NONE; m_posPrev = Vector( 0, 0, 0 ); }
void CSDKPlayer::Spawn() { SetModel( SDK_PLAYER_MODEL ); //Tony; basically, leave this alone ;) unless you're not using classes or teams, then you can change it to whatever. SetBloodColor( BLOOD_COLOR_RED ); SetMoveType( MOVETYPE_WALK ); RemoveSolidFlags( FSOLID_NOT_SOLID ); //Tony; if we're spawning in active state, equip the suit so the hud works. -- Gotta love base code ! if ( State_Get() == STATE_ACTIVE ) { EquipSuit( false ); //Tony; bleh, don't do this here. // GiveDefaultItems(); } m_hRagdoll = NULL; BaseClass::Spawn(); #if defined ( SDK_USE_STAMINA ) || defined ( SDK_USE_SPRINTING ) m_Shared.SetStamina( 100 ); #endif #if defined ( SDK_USE_TEAMS ) m_bTeamChanged = false; #endif #if defined ( SDK_USE_PRONE ) InitProne(); #endif #if defined ( SDK_USE_SPRINTING ) InitSprinting(); #endif // update this counter, used to not interp players when they spawn m_bSpawnInterpCounter = !m_bSpawnInterpCounter; InitSpeeds(); //Tony; initialize player speeds. SetArmorValue(SpawnArmorValue()); SetContextThink( &CSDKPlayer::SDKPushawayThink, gpGlobals->curtime + PUSHAWAY_THINK_INTERVAL, SDK_PUSHAWAY_THINK_CONTEXT ); pl.deadflag = false; }
//----------------------------------------------------------------------------- // Purpose: // Input: // Output: //----------------------------------------------------------------------------- void CASW_Shaman::Spawn( void ) { SetHullType( HULL_MEDIUM ); BaseClass::Spawn(); SetHullType( HULL_MEDIUM ); SetHealthByDifficultyLevel(); SetBloodColor( BLOOD_COLOR_GREEN ); CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_AUTO_DOORS ); AddFactionRelationship( FACTION_MARINES, D_FEAR, 10 ); SetIdealState( NPC_STATE_ALERT ); m_bNeverRagdoll = true; SetCollisionGroup( ASW_COLLISION_GROUP_PARASITE ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CNPC_Launcher::Spawn( void ) { Precache(); // This is a dummy model that is never used! SetModel( "models/player.mdl" ); UTIL_SetSize(this, vec3_origin, vec3_origin); m_takedamage = DAMAGE_NO; if (m_nHomingStrength > 100) { m_nHomingStrength = 100; Warning("WARNING: NPC_Launcher Homing Strength must be between 0 and 100\n"); } SetSolid( SOLID_NONE ); SetMoveType( MOVETYPE_NONE ); SetBloodColor( DONT_BLEED ); AddEffects( EF_NODRAW ); AddFlag( FL_NPC ); CapabilitiesAdd( bits_CAP_SQUAD ); InitRelationshipTable(); if (m_nStartOn) { LauncherTurnOn(); } // ------------------------------------------------------- // If I form squads add me to a squad // ------------------------------------------------------- // @TODO (toml 12-05-02): RECONCILE WITH SAVE/RESTORE if (!m_pSquad) { m_pSquad = g_AI_SquadManager.FindCreateSquad(this, m_SquadName); } }