void NPC_BehaviorSet_Stormtrooper( int bState ) { switch( bState ) { case BS_STAND_GUARD: case BS_PATROL: case BS_STAND_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_DEFAULT: NPC_BSST_Default(); break; case BS_INVESTIGATE: NPC_BSST_Investigate(); break; case BS_SLEEP: NPC_BSST_Sleep(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_Scavenger( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: NPC_BSScav_Attack(); break; case BS_IDLE: NPC_BSScav_Idle(); break; case BS_INVESTIGATE: NPC_BSScav_Investigate(); break; case BS_PATROL: NPC_BSScav_Patrol(); break; case BS_SLEEP: NPC_BSScav_Sleep(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
/* ------------------------- NPC_BehaviorSet_Mark1 ------------------------- */ void NPC_BehaviorSet_Mark1( int bState ) { switch( bState ) { case BS_DEFAULT: case BS_STAND_GUARD: case BS_PATROL: NPC_BSMark1_Default(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_Vohrsoth( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: NPC_BSVohrsoth_Attack(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_HeadBot( int bState ) { switch( bState ) { case BS_RUN: case BS_NOCLIP: NPC_BSHeadBot_Run(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
/* ------------------------- NPC_BehaviorSet_ATST ------------------------- */ void NPC_BehaviorSet_ATST( int bState ) { switch( bState ) { case BS_DEFAULT: case BS_PATROL: case BS_STAND_AND_SHOOT: case BS_HUNT_AND_KILL: NPC_BSATST_Default(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
/* ------------------------- NPC_BehaviorSet_Rancor ------------------------- */ void NPC_BehaviorSet_Rancor( int bState ) { switch( bState ) { case BS_STAND_GUARD: case BS_PATROL: case BS_STAND_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_DEFAULT: NPC_BSRancor_Default(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
/* ------------------------- NPC_BehaviorSet_ImperialProbe ------------------------- */ void NPC_BehaviorSet_ImperialProbe( int bState ) { switch( bState ) { case BS_STAND_GUARD: case BS_PATROL: case BS_STAND_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_DEFAULT: NPC_BSImperialProbe_Default(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_Hirogen_Alpha( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: NPC_BSHirogenAlpha_Attack(); break; case BS_IDLE: NPC_BSHirogenAlpha_Idle(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_ScoutBot( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_PATROL: NPC_BSScout_Attack(); break; case BS_IDLE: NPC_BSScout_Idle(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_HunterSeeker( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_PATROL: NPC_BSHunterSeeker_Attack(); break; case BS_IDLE: NPC_BSHunterSeeker_Idle(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_Jedi( int bState ) { switch( bState ) { case BS_STAND_GUARD: case BS_PATROL: case BS_STAND_AND_SHOOT: case BS_HUNT_AND_KILL: case BS_DEFAULT: NPC_BSJedi_Default(); break; case BS_FOLLOW_LEADER: NPC_BSJedi_FollowLeader(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BehaviorSet_Borg( int bState ) { switch( bState ) { case BS_RUN_AND_SHOOT: case BS_HUNT_AND_KILL: NPC_BSBorg_Attack(); break; case BS_IDLE: NPC_BSBorg_Idle(); break; case BS_STAND_AND_SHOOT: NPC_BSBorg_StandAndShoot(); break; default: NPC_BehaviorSet_Default( bState ); break; } }
void NPC_BSCivilian_Default( int bState ) { if ( NPC->enemy && NPC->s.weapon == WP_NONE && NPC_CheckSurrender() ) {//surrendering, do nothing } else if ( NPC->enemy && NPC->s.weapon == WP_NONE && bState != BS_HUNT_AND_KILL && !Q3_TaskIDPending( NPC, TID_MOVE_NAV ) ) {//if in battle and have no weapon, run away, fixme: when in BS_HUNT_AND_KILL, they just stand there if ( !NPCInfo->goalEntity || bState != BS_FLEE //not fleeing || ( NPC_BSFlee()//have reached our flee goal && NPC->enemy//still have enemy (NPC_BSFlee checks enemy and can clear it) && DistanceSquared( NPC->currentOrigin, NPC->enemy->currentOrigin ) < 16384 )//enemy within 128 ) {//run away! NPC_StartFlee( NPC->enemy, NPC->enemy->currentOrigin, AEL_DANGER_GREAT, 5000, 10000 ); } } else {//not surrendering //FIXME: if unarmed and a jawa/ugnuaght, constantly look for enemies/players to run away from? //FIXME: if we have a weapon and an enemy, set out playerTeam to the opposite of our enemy..??? NPC_BehaviorSet_Default(bState); } if ( !VectorCompare( NPC->client->ps.moveDir, vec3_origin ) ) {//moving if ( NPC->client->ps.legsAnim == BOTH_COWER1 ) {//stop cowering anim on legs NPC->client->ps.legsAnimTimer = 0; } } }
void NPC_RunBehavior( int team, int bState ) { qboolean dontSetAim = qfalse; if (NPC->s.NPC_class == CLASS_VEHICLE && NPC->m_pVehicle) { //vehicles don't do AI! return; } if ( bState == BS_CINEMATIC ) { NPC_BSCinematic(); } else if ( NPC->client->ps.weapon == WP_EMPLACED_GUN ) { NPC_BSEmplaced(); NPC_CheckCharmed(); return; } else if ( NPC->client->ps.weapon == WP_SABER ) {//jedi NPC_BehaviorSet_Jedi( bState ); dontSetAim = qtrue; } else if ( NPC->client->NPC_class == CLASS_WAMPA ) {//wampa NPC_BSWampa_Default(); } else if ( NPC->client->NPC_class == CLASS_RANCOR ) {//rancor NPC_BehaviorSet_Rancor( bState ); } else if ( NPC->client->NPC_class == CLASS_REMOTE ) { NPC_BehaviorSet_Remote( bState ); } else if ( NPC->client->NPC_class == CLASS_SEEKER ) { NPC_BehaviorSet_Seeker( bState ); } else if ( NPC->client->NPC_class == CLASS_BOBAFETT ) {//bounty hunter if ( Boba_Flying( NPC ) ) { NPC_BehaviorSet_Seeker(bState); } else { NPC_BehaviorSet_Jedi( bState ); } dontSetAim = qtrue; } else if ( NPCInfo->scriptFlags & SCF_FORCED_MARCH ) {//being forced to march NPC_BSDefault(); } else { switch( team ) { // case NPCTEAM_SCAVENGERS: // case NPCTEAM_IMPERIAL: // case NPCTEAM_KLINGON: // case NPCTEAM_HIROGEN: // case NPCTEAM_MALON: // not sure if TEAM_ENEMY is appropriate here, I think I should be using NPC_class to check for behavior - dmv case NPCTEAM_ENEMY: // special cases for enemy droids switch( NPC->client->NPC_class) { case CLASS_ATST: NPC_BehaviorSet_ATST( bState ); return; case CLASS_PROBE: NPC_BehaviorSet_ImperialProbe(bState); return; case CLASS_REMOTE: NPC_BehaviorSet_Remote( bState ); return; case CLASS_SENTRY: NPC_BehaviorSet_Sentry(bState); return; case CLASS_INTERROGATOR: NPC_BehaviorSet_Interrogator( bState ); return; case CLASS_MINEMONSTER: NPC_BehaviorSet_MineMonster( bState ); return; case CLASS_HOWLER: NPC_BehaviorSet_Howler( bState ); return; case CLASS_MARK1: NPC_BehaviorSet_Mark1( bState ); return; case CLASS_MARK2: NPC_BehaviorSet_Mark2( bState ); return; case CLASS_GALAKMECH: NPC_BSGM_Default(); return; default: break; } if ( NPC->enemy && NPC->s.weapon == WP_NONE && bState != BS_HUNT_AND_KILL && !trap->ICARUS_TaskIDPending( (sharedEntity_t *)NPC, TID_MOVE_NAV ) ) {//if in battle and have no weapon, run away, fixme: when in BS_HUNT_AND_KILL, they just stand there if ( bState != BS_FLEE ) { NPC_StartFlee( NPC->enemy, &NPC->enemy->r.currentOrigin, AEL_DANGER_GREAT, 5000, 10000 ); } else { NPC_BSFlee(); } return; } if ( NPC->client->ps.weapon == WP_SABER ) {//special melee exception NPC_BehaviorSet_Default( bState ); return; } if ( NPC->client->ps.weapon == WP_DISRUPTOR && (NPCInfo->scriptFlags & SCF_ALT_FIRE) ) {//a sniper NPC_BehaviorSet_Sniper( bState ); return; } if ( NPC->client->ps.weapon == WP_THERMAL || NPC->client->ps.weapon == WP_STUN_BATON )//FIXME: separate AI for melee fighters {//a grenadier NPC_BehaviorSet_Grenadier( bState ); return; } if ( NPC_CheckSurrender() ) { return; } NPC_BehaviorSet_Stormtrooper( bState ); break; case NPCTEAM_NEUTRAL: // special cases for enemy droids if ( NPC->client->NPC_class == CLASS_PROTOCOL || NPC->client->NPC_class == CLASS_UGNAUGHT || NPC->client->NPC_class == CLASS_JAWA) { NPC_BehaviorSet_Default(bState); } else if ( NPC->client->NPC_class == CLASS_VEHICLE ) { // TODO: Add vehicle behaviors here. NPC_UpdateAngles( qtrue, qtrue );//just face our spawn angles for now } else { // Just one of the average droids NPC_BehaviorSet_Droid( bState ); } break; default: if ( NPC->client->NPC_class == CLASS_SEEKER ) { NPC_BehaviorSet_Seeker(bState); } else { if ( NPCInfo->charmedTime > level.time ) { NPC_BehaviorSet_Charmed( bState ); } else { NPC_BehaviorSet_Default( bState ); } NPC_CheckCharmed(); dontSetAim = qtrue; } break; } } }
void NPC_RunBehavior( int team, int bState ) { qboolean dontSetAim = qfalse; switch( team ) { case TEAM_SCAVENGERS: case TEAM_IMPERIAL: case TEAM_KLINGON: case TEAM_HIROGEN: case TEAM_MALON: if ( !Q_stricmp( NPC->NPC_type, "hirogenalpha" ) ) { NPC_BehaviorSet_Hirogen_Alpha( bState ); return; } if ( NPC->client->ps.weapon == WP_KLINGON_BLADE || NPC->client->ps.weapon == WP_IMPERIAL_BLADE ) {//special melee exception NPC_BehaviorSet_Default( bState ); return; } if ( Q_stricmp( "satan", NPC->NPC_type ) == 0 ) {//very special case NPC_BehaviorSet_Default( bState ); return; } NPC_BehaviorSet_Scavenger( bState ); break; case TEAM_BOTS: if ( ( !Q_stricmp( NPC->NPC_type, "warriorbot" ) ) || ( !Q_stricmp( NPC->NPC_type, "warriorbot_boss" ) ) ) { NPC_BehaviorSet_WarriorBot( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "scoutbot" ) ) { NPC_BehaviorSet_ScoutBot( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "hunterseeker" ) ) { NPC_BehaviorSet_HunterSeeker( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "headbot" ) ) { NPC_BehaviorSet_HeadBot( bState ); return; } break; case TEAM_FORGE: if ( !Q_stricmp( NPC->NPC_type, "harvester" ) || !Q_stricmp( NPC->NPC_type, "biohulk" ) ) { NPC_BehaviorSet_Harvester( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "reaver" ) ) { NPC_BehaviorSet_Reaver( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "avatar" ) ) { NPC_BehaviorSet_Avatar( bState ); return; } if ( !Q_stricmp( NPC->NPC_type, "vohrsoth" ) ) { NPC_BehaviorSet_Vohrsoth( bState ); return; } //FIXME: call forge boss AI NPC_BehaviorSet_Default( bState ); return; break; case TEAM_8472: NPC_BehaviorSet_Species( bState ); return; break; case TEAM_STASIS: NPC_BehaviorSet_Etherian( bState ); return; break; case TEAM_PARASITE: NPC_BehaviorSet_Parasite( bState ); return; break; case TEAM_BORG: NPC_BehaviorSet_Borg( bState ); return; break; default: NPC_BehaviorSet_Default( bState ); dontSetAim = qtrue; break; } if ( !dontSetAim ) { if ( NPC->enemy ) { NPCInfo->lookMode = LT_AIMSWING; } else { if ( NPCInfo->lookMode == LT_AIMSWING ) { NPCInfo->lookMode = LT_NONE; } } } }