Exemple #1
0
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;
	}
}
Exemple #2
0
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;
	}
}
Exemple #3
0
/*
-------------------------
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;
	}
}
Exemple #4
0
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;
	}
}
Exemple #5
0
void NPC_BehaviorSet_HeadBot( int bState )
{
	switch( bState )
	{
	case BS_RUN:
	case BS_NOCLIP:
		NPC_BSHeadBot_Run();
		break;

	default:
		NPC_BehaviorSet_Default( bState );
		break;
	}
}
Exemple #6
0
/*
-------------------------
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;
	}
}
Exemple #7
0
/*
-------------------------
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;
	}
}
Exemple #8
0
/*
-------------------------
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;
	}
}
Exemple #9
0
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;
	}
}
Exemple #10
0
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;
	}
}
Exemple #11
0
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;
	}
}
Exemple #12
0
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;
	}
}
Exemple #13
0
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;
	}
}
Exemple #14
0
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;
		}
	}
}
Exemple #15
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;
		}
	}
}
Exemple #16
0
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;
			}
		}
	}

}