CAI_BaseNPC* CASW_Harvester::SpawnAlien() { if (asw_harverter_suppress_children.GetBool()) return NULL; CBaseEntity *pEntity = CreateEntityByName( "asw_parasite_defanged" ); CAI_BaseNPC *pNPC = dynamic_cast<CAI_BaseNPC*>(pEntity); if ( !pNPC ) { Warning("NULL Ent in CASW_Harvester!\n"); return NULL; } pNPC->AddSpawnFlags( SF_NPC_FALL_TO_GROUND ); pNPC->SetAbsOrigin( GetAbsOrigin() + Vector( 0, 0, asw_harvester_spawn_height.GetFloat() ) ); // Strip pitch and roll from the spawner's angles. Pass only yaw to the spawned NPC. QAngle angles = GetAbsAngles(); angles.x = 0.0; angles.z = 0.0; pNPC->SetAbsAngles( angles ); IASW_Spawnable_NPC* pSpawnable = dynamic_cast<IASW_Spawnable_NPC*>(pNPC); ASSERT(pSpawnable); if ( !pSpawnable ) { Warning("NULL Spawnable Ent in CASW_Harvester!\n"); UTIL_Remove(pNPC); return NULL; } DispatchSpawn( pNPC ); pNPC->SetOwnerEntity( this ); pNPC->Activate(); CASW_Parasite *pParasite = dynamic_cast<CASW_Parasite*>(pNPC); if (pParasite) { m_iCrittersAlive++; pParasite->SetMother(this); } return pNPC; }
void CNPC_CombineDropship::SpawnTroops( void ) { int i; // char szAttachmentName[ 32 ]; Vector vecLocation; QAngle vecAngles; QAngle vecSpawnAngles; // memset( szAttachmentName, 0, 32 ); vecSpawnAngles = GetLocalAngles(); vecSpawnAngles.y = UTIL_AngleMod( vecSpawnAngles.y - 180 ); vecSpawnAngles.x = 0; vecSpawnAngles.z = 0; for( i = 1 ; i <= m_soldiersToDrop ; i++ ) { // Q_snprintf( szAttachmentName,sizeof(szAttachmentName), "spot%d", i ); // GetAttachment( szAttachmentName, vecLocation, vecAngles ); vecLocation = GetAbsOrigin(); vecAngles = GetAbsAngles(); // troops spawn behind vehicle at all times Vector shipDir, shipLeft; AngleVectors( vecAngles, &shipDir, &shipLeft, NULL ); vecLocation -= shipDir * 250; // set spawn position for spawning in formation switch( i ) { case 1: vecLocation -= shipLeft * DROPSHIP_TROOP_GRID; break; case 3: vecLocation += shipLeft * DROPSHIP_TROOP_GRID; break; case 4: vecLocation -= shipDir * DROPSHIP_TROOP_GRID - shipLeft * DROPSHIP_TROOP_GRID; break; case 5: vecLocation -= shipDir * DROPSHIP_TROOP_GRID; break; case 6: vecLocation -= shipDir * DROPSHIP_TROOP_GRID + shipLeft * DROPSHIP_TROOP_GRID; } // spawn based upon template CAI_BaseNPC *pEnt = NULL; CBaseEntity *pEntity = NULL; MapEntity_ParseEntity( pEntity, STRING(m_sNPCTemplateData), NULL ); if ( pEntity != NULL ) { pEnt = (CAI_BaseNPC *)pEntity; } else { Warning("Dropship could not create template NPC\n" ); return; } pEnt->SetLocalOrigin( vecLocation ); pEnt->SetLocalAngles( vecSpawnAngles ); DispatchSpawn( pEnt ); pEnt->m_NPCState = NPC_STATE_IDLE; pEnt->SetOwnerEntity( this ); pEnt->Activate(); } }