codemp/game/NPC_AI_Jedi.c File Reference

#include "b_local.h"
#include "g_nav.h"
#include "anims.h"
#include "w_saber.h"
#include "../namespace_begin.h"
#include "../namespace_end.h"

Go to the source code of this file.

Defines

#define MAX_VIEW_DIST   2048
#define MAX_VIEW_SPEED   100
#define JEDI_MAX_LIGHT_INTENSITY   64
#define JEDI_MIN_LIGHT_THRESHOLD   10
#define JEDI_MAX_LIGHT_THRESHOLD   50
#define DISTANCE_SCALE   0.25f
#define SPEED_SCALE   0.25f
#define FOV_SCALE   0.5f
#define LIGHT_SCALE   0.25f
#define REALIZE_THRESHOLD   0.6f
#define CAUTIOUS_THRESHOLD   ( REALIZE_THRESHOLD * 0.3 )
#define MAX_CHECK_THRESHOLD   1
#define APEX_HEIGHT   200.0f
#define PARA_WIDTH   (sqrt(APEX_HEIGHT)+sqrt(APEX_HEIGHT))
#define JUMP_SPEED   200.0f

Enumerations

enum  { LSTATE_NONE = 0, LSTATE_UNDERFIRE, LSTATE_INVESTIGATE }

Functions

qboolean BG_SabersOff (playerState_t *ps)
void CG_DrawAlert (vec3_t origin, float rating)
void G_AddVoiceEvent (gentity_t *self, int event, int speakDebounceTime)
void ForceJump (gentity_t *self, usercmd_t *ucmd)
void G_StartMatrixEffect (gentity_t *ent)
void NPC_ClearLookTarget (gentity_t *self)
void NPC_SetLookTarget (gentity_t *self, int entNum, int clearTime)
void NPC_TempLookTarget (gentity_t *self, int lookEntNum, int minLookTime, int maxLookTime)
qboolean G_ExpandPointToBBox (vec3_t point, const vec3_t mins, const vec3_t maxs, int ignore, int clipmask)
qboolean NPC_CheckEnemyStealth (void)
void G_SoundOnEnt (gentity_t *ent, soundChannel_t channel, const char *soundPath)
gitem_tBG_FindItemForAmmo (ammo_t ammo)
void ForceThrow (gentity_t *self, qboolean pull)
void ForceLightning (gentity_t *self)
void ForceHeal (gentity_t *self)
void ForceRage (gentity_t *self)
void ForceProtect (gentity_t *self)
void ForceAbsorb (gentity_t *self)
int WP_MissileBlockForBlock (int saberBlock)
qboolean G_GetHitLocFromSurfName (gentity_t *ent, const char *surfName, int *hitLoc, vec3_t point, vec3_t dir, vec3_t bladeDir, int mod)
qboolean WP_ForcePowerUsable (gentity_t *self, forcePowers_t forcePower, int overrideAmt)
qboolean WP_ForcePowerAvailable (gentity_t *self, forcePowers_t forcePower, int overrideAmt)
void WP_ForcePowerStop (gentity_t *self, forcePowers_t forcePower)
void WP_DeactivateSaber (gentity_t *self, qboolean clearLength)
void WP_ActivateSaber (gentity_t *self)
qboolean PM_SaberInStart (int move)
qboolean BG_SaberInSpecialAttack (int anim)
qboolean BG_SaberInAttack (int move)
qboolean PM_SaberInBounce (int move)
qboolean PM_SaberInParry (int move)
qboolean PM_SaberInKnockaway (int move)
qboolean PM_SaberInBrokenParry (int move)
qboolean PM_SaberInDeflect (int move)
qboolean BG_SpinningSaberAnim (int anim)
qboolean BG_FlippingAnim (int anim)
qboolean PM_RollingAnim (int anim)
qboolean PM_InKnockDown (playerState_t *ps)
qboolean BG_InRoll (playerState_t *ps, int anim)
qboolean BG_CrouchAnim (int anim)
qboolean NPC_SomeoneLookingAtMe (gentity_t *ent)
int WP_GetVelocityForForceJump (gentity_t *self, vec3_t jumpVel, usercmd_t *ucmd)
void G_TestLine (vec3_t start, vec3_t end, int color, int time)
qboolean Jedi_WaitingAmbush (gentity_t *self)
void NPC_ShadowTrooper_Precache (void)
void Jedi_ClearTimers (gentity_t *ent)
void Jedi_PlayBlockedPushSound (gentity_t *self)
void Jedi_PlayDeflectSound (gentity_t *self)
void NPC_Jedi_PlayConfusionSound (gentity_t *self)
void Boba_Precache (void)
void G_CreateG2AttachedWeaponModel (gentity_t *ent, const char *weaponModel, int boltNum, int weaponNum)
void ChangeWeapon (gentity_t *ent, int newWeapon)
void Boba_ChangeWeapon (int wp)
void WP_ResistForcePush (gentity_t *self, gentity_t *pusher, qboolean noPenalty)
qboolean Boba_StopKnockdown (gentity_t *self, gentity_t *pusher, vec3_t pushDir, qboolean forceKnockdown)
void Boba_FlyStart (gentity_t *self)
void Boba_FlyStop (gentity_t *self)
qboolean Boba_Flying (gentity_t *self)
void Boba_FireFlameThrower (gentity_t *self)
void Boba_StartFlameThrower (gentity_t *self)
void Boba_DoFlameThrower (gentity_t *self)
void Boba_FireDecide (void)
void Jedi_Cloak (gentity_t *self)
void Jedi_Decloak (gentity_t *self)
void Jedi_CheckCloak (void)
void NPC_Jedi_RateNewEnemy (gentity_t *self, gentity_t *enemy)
void Jedi_RageStop (gentity_t *self)
qboolean NPC_MoveDirClear (int forwardmove, int rightmove, qboolean reset)
evasionType_t Jedi_CheckFlipEvasions (gentity_t *self, float rightdot, float zdiff)
int Jedi_ReCalcParryTime (gentity_t *self, evasionType_t evasionType)
qboolean Jedi_QuickReactions (gentity_t *self)
qboolean Jedi_SaberBusy (gentity_t *self)
qboolean G_FindClosestPointOnLineSegment (const vec3_t start, const vec3_t end, const vec3_t from, vec3_t result)
evasionType_t Jedi_SaberBlockGo (gentity_t *self, usercmd_t *cmd, vec3_t pHitloc, vec3_t phitDir, gentity_t *incoming, float dist)
float ShortestLineSegBewteen2LineSegs (vec3_t start1, vec3_t end1, vec3_t start2, vec3_t end2, vec3_t close_pnt1, vec3_t close_pnt2)
int WPDEBUG_SaberColor (saber_colors_t saberColor)
gentity_tJedi_FindEnemyInCone (gentity_t *self, gentity_t *fallback, float minDot)
float WP_SpeedOfMissileForWeapon (int wp, qboolean alt_fire)
void G_UcmdMoveForDir (gentity_t *self, usercmd_t *cmd, vec3_t dir)
void NPC_Jedi_Pain (gentity_t *self, gentity_t *attacker, int damage)
qboolean Jedi_CheckDanger (void)
qboolean Jedi_CheckAmbushPlayer (void)
void Jedi_Ambush (gentity_t *self)
qboolean Jedi_CanPullBackSaber (gentity_t *self)
void NPC_BSJedi_FollowLeader (void)
void NPC_BSST_Patrol (void)
void NPC_BSSniper_Default (void)
void NPC_BSJedi_Default (void)

Variables

vmCvar_t g_saberRealisticCombat
vmCvar_t d_slowmodeath
int bg_parryDebounce []


Define Documentation

#define APEX_HEIGHT   200.0f
 

Definition at line 4469 of file NPC_AI_Jedi.c.

Referenced by NPC_BSJump().

#define CAUTIOUS_THRESHOLD   ( REALIZE_THRESHOLD * 0.3 )
 

Definition at line 34 of file NPC_AI_Jedi.c.

#define DISTANCE_SCALE   0.25f
 

Definition at line 27 of file NPC_AI_Jedi.c.

#define FOV_SCALE   0.5f
 

Definition at line 30 of file NPC_AI_Jedi.c.

#define JEDI_MAX_LIGHT_INTENSITY   64
 

Definition at line 23 of file NPC_AI_Jedi.c.

#define JEDI_MAX_LIGHT_THRESHOLD   50
 

Definition at line 25 of file NPC_AI_Jedi.c.

#define JEDI_MIN_LIGHT_THRESHOLD   10
 

Definition at line 24 of file NPC_AI_Jedi.c.

#define JUMP_SPEED   200.0f
 

Definition at line 4471 of file NPC_AI_Jedi.c.

#define LIGHT_SCALE   0.25f
 

Definition at line 31 of file NPC_AI_Jedi.c.

#define MAX_CHECK_THRESHOLD   1
 

Definition at line 36 of file NPC_AI_Jedi.c.

#define MAX_VIEW_DIST   2048
 

Definition at line 21 of file NPC_AI_Jedi.c.

#define MAX_VIEW_SPEED   100
 

Definition at line 22 of file NPC_AI_Jedi.c.

#define PARA_WIDTH   (sqrt(APEX_HEIGHT)+sqrt(APEX_HEIGHT))
 

Definition at line 4470 of file NPC_AI_Jedi.c.

#define REALIZE_THRESHOLD   0.6f
 

Definition at line 33 of file NPC_AI_Jedi.c.

#define SPEED_SCALE   0.25f
 

Definition at line 29 of file NPC_AI_Jedi.c.


Enumeration Type Documentation

anonymous enum
 

Enumeration values:
LSTATE_NONE 
LSTATE_UNDERFIRE 
LSTATE_INVESTIGATE 

Definition at line 96 of file NPC_AI_Jedi.c.

00097 {
00098         LSTATE_NONE = 0,
00099         LSTATE_UNDERFIRE,
00100         LSTATE_INVESTIGATE,
00101 };


Function Documentation

qboolean BG_CrouchAnim int  anim  ) 
 

Definition at line 49 of file bg_panimate.c.

00050 {
00051         switch ( anim )
00052         {
00053         case BOTH_SIT1:                         //# Normal chair sit.
00054         case BOTH_SIT2:                         //# Lotus position.
00055         case BOTH_SIT3:                         //# Sitting in tired position: elbows on knees
00056         case BOTH_CROUCH1:                      //# Transition from standing to crouch
00057         case BOTH_CROUCH1IDLE:          //# Crouching idle
00058         case BOTH_CROUCH1WALK:          //# Walking while crouched
00059         case BOTH_CROUCH1WALKBACK:      //# Walking while crouched
00060         case BOTH_CROUCH2TOSTAND1:      //# going from crouch2 to stand1
00061         case BOTH_CROUCH3:                      //# Desann crouching down to Kyle (cin 9)
00062         case BOTH_KNEES1:                       //# Tavion on her knees
00063         case BOTH_CROUCHATTACKBACK1://FIXME: not if in middle of anim?
00064         case BOTH_ROLL_STAB:
00065                 return qtrue;
00066                 break;
00067         }
00068         return qfalse;
00069 }

gitem_t* BG_FindItemForAmmo ammo_t  ammo  ) 
 

Definition at line 1941 of file bg_misc.c.

01941                                            {
01942         gitem_t *it;
01943         
01944         for ( it = bg_itemlist + 1 ; it->classname ; it++) {
01945                 if ( it->giType == IT_AMMO && it->giTag == ammo ) {
01946                         return it;
01947                 }
01948         }
01949 
01950         Com_Error( ERR_DROP, "Couldn't find item for ammo %i", ammo);
01951         return NULL;
01952 }

qboolean BG_FlippingAnim int  anim  ) 
 

Definition at line 433 of file bg_panimate.c.

00434 {
00435         switch ( anim )
00436         {
00437         case BOTH_FLIP_F:                       //# Flip forward
00438         case BOTH_FLIP_B:                       //# Flip backwards
00439         case BOTH_FLIP_L:                       //# Flip left
00440         case BOTH_FLIP_R:                       //# Flip right
00441         case BOTH_WALL_RUN_RIGHT_FLIP:
00442         case BOTH_WALL_RUN_LEFT_FLIP:
00443         case BOTH_WALL_FLIP_RIGHT:
00444         case BOTH_WALL_FLIP_LEFT:
00445         case BOTH_FLIP_BACK1:
00446         case BOTH_FLIP_BACK2:
00447         case BOTH_FLIP_BACK3:
00448         case BOTH_WALL_FLIP_BACK1:
00449         //Not really flips, but...
00450         case BOTH_WALL_RUN_RIGHT:
00451         case BOTH_WALL_RUN_LEFT:
00452         case BOTH_WALL_RUN_RIGHT_STOP:
00453         case BOTH_WALL_RUN_LEFT_STOP:
00454         case BOTH_BUTTERFLY_LEFT:
00455         case BOTH_BUTTERFLY_RIGHT:
00456         case BOTH_BUTTERFLY_FL1:
00457         case BOTH_BUTTERFLY_FR1:
00458         //
00459         case BOTH_ARIAL_LEFT:
00460         case BOTH_ARIAL_RIGHT:
00461         case BOTH_ARIAL_F1:
00462         case BOTH_CARTWHEEL_LEFT:
00463         case BOTH_CARTWHEEL_RIGHT:
00464         case BOTH_JUMPFLIPSLASHDOWN1:
00465         case BOTH_JUMPFLIPSTABDOWN:
00466         case BOTH_JUMPATTACK6:
00467         case BOTH_JUMPATTACK7:
00468         //JKA
00469         case BOTH_FORCEWALLRUNFLIP_END:
00470         case BOTH_FORCEWALLRUNFLIP_ALT:
00471         case BOTH_FLIP_ATTACK7:
00472         case BOTH_A7_SOULCAL:
00473                 return qtrue;
00474                 break;
00475         }
00476         return qfalse;
00477 }

qboolean BG_InRoll playerState_t ps,
int  anim
 

Definition at line 789 of file bg_panimate.c.

References BOTH_GETUP_BROLL_B, BOTH_GETUP_BROLL_F, BOTH_GETUP_BROLL_L, BOTH_GETUP_BROLL_R, BOTH_GETUP_FROLL_B, BOTH_GETUP_FROLL_F, BOTH_GETUP_FROLL_L, BOTH_GETUP_FROLL_R, BOTH_ROLL_B, BOTH_ROLL_F, BOTH_ROLL_L, BOTH_ROLL_R, playerState_s::legsTimer, playerState_t, qboolean, qfalse, and qtrue.

Referenced by BG_AdjustClientSpeed(), Jedi_CheckFlipEvasions(), Jedi_SaberBlockGo(), PM_ForceLegsAnim(), PM_SetSaberMove(), PM_WeaponLightsaber(), PmoveSingle(), and WP_SabersCheckLock().

00790 {
00791         switch ( (anim) )
00792         {
00793         case BOTH_GETUP_BROLL_B:
00794         case BOTH_GETUP_BROLL_F:
00795         case BOTH_GETUP_BROLL_L:
00796         case BOTH_GETUP_BROLL_R:
00797         case BOTH_GETUP_FROLL_B:
00798         case BOTH_GETUP_FROLL_F:
00799         case BOTH_GETUP_FROLL_L:
00800         case BOTH_GETUP_FROLL_R:
00801         case BOTH_ROLL_F:
00802         case BOTH_ROLL_B:
00803         case BOTH_ROLL_R:
00804         case BOTH_ROLL_L:
00805                 if ( ps->legsTimer > 0 )
00806                 {
00807                         return qtrue;
00808                 }
00809                 break;
00810         }
00811         return qfalse;
00812 }

qboolean BG_SaberInAttack int  move  ) 
 

Definition at line 227 of file bg_panimate.c.

References LS_A1_SPECIAL, LS_A2_SPECIAL, LS_A3_SPECIAL, LS_A_BACK, LS_A_BACK_CR, LS_A_BACKFLIP_ATK, LS_A_BACKSTAB, LS_A_FLIP_SLASH, LS_A_FLIP_STAB, LS_A_JUMP_T__B_, LS_A_LUNGE, LS_A_T2B, LS_A_TL2BR, LS_BUTTERFLY_LEFT, LS_BUTTERFLY_RIGHT, LS_DUAL_FB, LS_DUAL_LR, LS_DUAL_SPIN_PROTECT, LS_HILT_BASH, LS_JUMPATTACK_ARIAL_LEFT, LS_JUMPATTACK_ARIAL_RIGHT, LS_JUMPATTACK_CART_LEFT, LS_JUMPATTACK_CART_RIGHT, LS_JUMPATTACK_DUAL, LS_JUMPATTACK_STAFF_LEFT, LS_JUMPATTACK_STAFF_RIGHT, LS_KICK_B, LS_KICK_B_AIR, LS_KICK_BF, LS_KICK_F, LS_KICK_F_AIR, LS_KICK_L, LS_KICK_L_AIR, LS_KICK_R, LS_KICK_R_AIR, LS_KICK_RL, LS_KICK_S, LS_LEAP_ATTACK, LS_PULL_ATTACK_STAB, LS_PULL_ATTACK_SWING, LS_ROLL_STAB, LS_SPINATTACK, LS_SPINATTACK_ALORA, LS_SPINATTACK_DUAL, LS_STABDOWN, LS_STABDOWN_DUAL, LS_STABDOWN_STAFF, LS_STAFF_SOULCAL, LS_SWOOP_ATTACK_LEFT, LS_SWOOP_ATTACK_RIGHT, LS_TAUNTAUN_ATTACK_LEFT, LS_TAUNTAUN_ATTACK_RIGHT, LS_UPSIDE_DOWN_ATTACK, qboolean, qfalse, and qtrue.

Referenced by BG_AdjustClientSpeed(), CG_AddSaberBlade(), ClientThink_real(), G_SPSaberDamageTraceLerped(), Jedi_CheckFlipEvasions(), Jedi_SaberBlockGo(), Jedi_SaberBusy(), PM_SaberAttackForMovement(), PM_SetSaberMove(), PM_WeaponLightsaber(), WP_SaberCanBlock(), WP_SaberPositionUpdate(), and WP_SaberStartMissileBlockCheck().

00228 {
00229         if ( move >= LS_A_TL2BR && move <= LS_A_T2B )
00230         {
00231                 return qtrue;
00232         }
00233         switch ( move )
00234         {
00235         case LS_A_BACK:
00236         case LS_A_BACK_CR:
00237         case LS_A_BACKSTAB:
00238         case LS_ROLL_STAB:
00239         case LS_A_LUNGE:
00240         case LS_A_JUMP_T__B_:
00241         case LS_A_FLIP_STAB:
00242         case LS_A_FLIP_SLASH:
00243         case LS_JUMPATTACK_DUAL:
00244         case LS_JUMPATTACK_ARIAL_LEFT:
00245         case LS_JUMPATTACK_ARIAL_RIGHT:
00246         case LS_JUMPATTACK_CART_LEFT:
00247         case LS_JUMPATTACK_CART_RIGHT:
00248         case LS_JUMPATTACK_STAFF_LEFT:
00249         case LS_JUMPATTACK_STAFF_RIGHT:
00250         case LS_BUTTERFLY_LEFT:
00251         case LS_BUTTERFLY_RIGHT:
00252         case LS_A_BACKFLIP_ATK:
00253         case LS_SPINATTACK_DUAL:
00254         case LS_SPINATTACK:
00255         case LS_LEAP_ATTACK:
00256         case LS_SWOOP_ATTACK_RIGHT:
00257         case LS_SWOOP_ATTACK_LEFT:
00258         case LS_TAUNTAUN_ATTACK_RIGHT:
00259         case LS_TAUNTAUN_ATTACK_LEFT:
00260         case LS_KICK_F:
00261         case LS_KICK_B:
00262         case LS_KICK_R:
00263         case LS_KICK_L:
00264         case LS_KICK_S:
00265         case LS_KICK_BF:
00266         case LS_KICK_RL:
00267         case LS_KICK_F_AIR:
00268         case LS_KICK_B_AIR:
00269         case LS_KICK_R_AIR:
00270         case LS_KICK_L_AIR:
00271         case LS_STABDOWN:
00272         case LS_STABDOWN_STAFF:
00273         case LS_STABDOWN_DUAL:
00274         case LS_DUAL_SPIN_PROTECT:
00275         case LS_STAFF_SOULCAL:
00276         case LS_A1_SPECIAL:
00277         case LS_A2_SPECIAL:
00278         case LS_A3_SPECIAL:
00279         case LS_UPSIDE_DOWN_ATTACK:
00280         case LS_PULL_ATTACK_STAB:
00281         case LS_PULL_ATTACK_SWING:
00282         case LS_SPINATTACK_ALORA:
00283         case LS_DUAL_FB:
00284         case LS_DUAL_LR:
00285         case LS_HILT_BASH:
00286                 return qtrue;
00287                 break;
00288         }
00289         return qfalse;
00290 }

qboolean BG_SaberInSpecialAttack int  anim  ) 
 

Definition at line 587 of file bg_panimate.c.

00588 {
00589         switch ( anim )
00590         {
00591         case BOTH_A2_STABBACK1:
00592         case BOTH_ATTACK_BACK:
00593         case BOTH_CROUCHATTACKBACK1:
00594         case BOTH_ROLL_STAB:
00595         case BOTH_BUTTERFLY_LEFT:
00596         case BOTH_BUTTERFLY_RIGHT:
00597         case BOTH_BUTTERFLY_FL1:
00598         case BOTH_BUTTERFLY_FR1:
00599         case BOTH_FJSS_TR_BL:
00600         case BOTH_FJSS_TL_BR:
00601         case BOTH_LUNGE2_B__T_:
00602         case BOTH_FORCELEAP2_T__B_:
00603         case BOTH_JUMPFLIPSLASHDOWN1://#
00604         case BOTH_JUMPFLIPSTABDOWN://#
00605         case BOTH_JUMPATTACK6:
00606         case BOTH_JUMPATTACK7:
00607         case BOTH_SPINATTACK6:
00608         case BOTH_SPINATTACK7:
00609         case BOTH_FORCELONGLEAP_ATTACK:
00610         case BOTH_VS_ATR_S:
00611         case BOTH_VS_ATL_S:
00612         case BOTH_VT_ATR_S:
00613         case BOTH_VT_ATL_S:
00614         case BOTH_A7_KICK_F:
00615         case BOTH_A7_KICK_B:
00616         case BOTH_A7_KICK_R:
00617         case BOTH_A7_KICK_L:
00618         case BOTH_A7_KICK_S:
00619         case BOTH_A7_KICK_BF:
00620         case BOTH_A7_KICK_RL:
00621         case BOTH_A7_KICK_F_AIR:
00622         case BOTH_A7_KICK_B_AIR:
00623         case BOTH_A7_KICK_R_AIR:
00624         case BOTH_A7_KICK_L_AIR:
00625         case BOTH_STABDOWN:
00626         case BOTH_STABDOWN_STAFF:
00627         case BOTH_STABDOWN_DUAL:
00628         case BOTH_A6_SABERPROTECT:
00629         case BOTH_A7_SOULCAL:
00630         case BOTH_A1_SPECIAL:
00631         case BOTH_A2_SPECIAL:
00632         case BOTH_A3_SPECIAL:
00633         case BOTH_FLIP_ATTACK7:
00634         case BOTH_PULL_IMPALE_STAB:
00635         case BOTH_PULL_IMPALE_SWING:
00636         case BOTH_ALORA_SPIN_SLASH:
00637         case BOTH_A6_FB:
00638         case BOTH_A6_LR:        
00639         case BOTH_A7_HILT:
00640                 return qtrue;
00641         }
00642         return qfalse;
00643 }

qboolean BG_SabersOff playerState_t ps  ) 
 

Definition at line 201 of file bg_pmove.c.

00202 {
00203         if ( !ps->saberHolstered )
00204         {
00205                 return qfalse;
00206         }
00207         if ( ps->fd.saberAnimLevelBase == SS_DUAL
00208                 || ps->fd.saberAnimLevelBase == SS_STAFF )
00209         {
00210                 if ( ps->saberHolstered < 2 )
00211                 {
00212                         return qfalse;
00213                 }
00214         }
00215         return qtrue;
00216 }

qboolean BG_SpinningSaberAnim int  anim  ) 
 

Definition at line 479 of file bg_panimate.c.

References BOTH_ATTACK_BACK, BOTH_BUTTERFLY_LEFT, BOTH_BUTTERFLY_RIGHT, BOTH_CROUCHATTACKBACK1, BOTH_FJSS_TL_BR, BOTH_FJSS_TR_BL, BOTH_JUMPFLIPSLASHDOWN1, BOTH_JUMPFLIPSTABDOWN, BOTH_T1__L__R, BOTH_T1__L_BR, BOTH_T1__R__L, BOTH_T1__R_BL, BOTH_T1_BL__R, BOTH_T1_BL_BR, BOTH_T1_BL_TR, BOTH_T1_BR__L, BOTH_T1_BR_BL, BOTH_T1_BR_TL, BOTH_T1_TL_BR, BOTH_T1_TR_BL, BOTH_T2__L_BR, BOTH_T2__R_BL, BOTH_T2_BL__R, BOTH_T2_BL_BR, BOTH_T2_BR__L, BOTH_T2_BR_BL, BOTH_T3__L_BR, BOTH_T3__R_BL, BOTH_T3_BL__R, BOTH_T3_BL_BR, BOTH_T3_BR__L, BOTH_T3_BR_BL, BOTH_T4__L_BR, BOTH_T4__R_BL, BOTH_T4_BL__R, BOTH_T4_BL_BR, BOTH_T4_BR__L, BOTH_T4_BR_BL, BOTH_T5__L__R, BOTH_T5__L_BR, BOTH_T5__R__L, BOTH_T5__R_BL, BOTH_T5_BL__R, BOTH_T5_BL_BR, BOTH_T5_BL_TR, BOTH_T5_BR__L, BOTH_T5_BR_BL, BOTH_T5_BR_TL, BOTH_T5_TL_BR, BOTH_T5_TR_BL, BOTH_T6__L__R, BOTH_T6__L_BR, BOTH_T6__L_T_, BOTH_T6__L_TR, BOTH_T6__R__L, BOTH_T6__R_BL, BOTH_T6__R_TL, BOTH_T6_BL__R, BOTH_T6_BL_BR, BOTH_T6_BL_T_, BOTH_T6_BL_TR, BOTH_T6_BR__L, BOTH_T6_BR_BL, BOTH_T6_BR_TL, BOTH_T6_T__BL, BOTH_T6_T__TL, BOTH_T6_TL__R, BOTH_T6_TL_BR, BOTH_T6_TL_TR, BOTH_T6_TR__L, BOTH_T6_TR_BL, BOTH_T6_TR_TL, BOTH_T7__L__R, BOTH_T7__L_BR, BOTH_T7__L_TR, BOTH_T7__R__L, BOTH_T7__R_BL, BOTH_T7_BL__R, BOTH_T7_BL_BR, BOTH_T7_BL_TR, BOTH_T7_BR__L, BOTH_T7_BR_BL, BOTH_T7_BR_TL, BOTH_T7_T___R, BOTH_T7_T__BR, BOTH_T7_TL_BR, BOTH_T7_TL_TR, BOTH_T7_TR__L, BOTH_V7_BL_S7, qboolean, qfalse, and qtrue.

Referenced by BG_AdjustClientSpeed(), G_SPSaberDamageTraceLerped(), Jedi_SaberBlockGo(), Jedi_SaberBusy(), PM_SetSaberMove(), PM_SpinningAnim(), PmoveSingle(), and WP_ResistForcePush().

00480 {
00481         switch ( anim )
00482         {
00483         //level 1 - FIXME: level 1 will have *no* spins
00484         case BOTH_T1_BR_BL:
00485         case BOTH_T1__R__L:
00486         case BOTH_T1__R_BL:
00487         case BOTH_T1_TR_BL:
00488         case BOTH_T1_BR_TL:
00489         case BOTH_T1_BR__L:
00490         case BOTH_T1_TL_BR:
00491         case BOTH_T1__L_BR:
00492         case BOTH_T1__L__R:
00493         case BOTH_T1_BL_BR:
00494         case BOTH_T1_BL__R:
00495         case BOTH_T1_BL_TR:
00496         //level 2
00497         case BOTH_T2_BR__L:
00498         case BOTH_T2_BR_BL:
00499         case BOTH_T2__R_BL:
00500         case BOTH_T2__L_BR:
00501         case BOTH_T2_BL_BR:
00502         case BOTH_T2_BL__R:
00503         //level 3
00504         case BOTH_T3_BR__L:
00505         case BOTH_T3_BR_BL:
00506         case BOTH_T3__R_BL:
00507         case BOTH_T3__L_BR:
00508         case BOTH_T3_BL_BR:
00509         case BOTH_T3_BL__R:
00510         //level 4
00511         case BOTH_T4_BR__L:
00512         case BOTH_T4_BR_BL:
00513         case BOTH_T4__R_BL:
00514         case BOTH_T4__L_BR:
00515         case BOTH_T4_BL_BR:
00516         case BOTH_T4_BL__R:
00517         //level 5
00518         case BOTH_T5_BR_BL:
00519         case BOTH_T5__R__L:
00520         case BOTH_T5__R_BL:
00521         case BOTH_T5_TR_BL:
00522         case BOTH_T5_BR_TL:
00523         case BOTH_T5_BR__L:
00524         case BOTH_T5_TL_BR:
00525         case BOTH_T5__L_BR:
00526         case BOTH_T5__L__R:
00527         case BOTH_T5_BL_BR:
00528         case BOTH_T5_BL__R:
00529         case BOTH_T5_BL_TR:
00530         //level 6
00531         case BOTH_T6_BR_TL:
00532         case BOTH_T6__R_TL:
00533         case BOTH_T6__R__L:
00534         case BOTH_T6__R_BL:
00535         case BOTH_T6_TR_TL:
00536         case BOTH_T6_TR__L:
00537         case BOTH_T6_TR_BL:
00538         case BOTH_T6_T__TL:
00539         case BOTH_T6_T__BL:
00540         case BOTH_T6_TL_BR:
00541         case BOTH_T6__L_BR:
00542         case BOTH_T6__L__R:
00543         case BOTH_T6_TL__R:
00544         case BOTH_T6_TL_TR:
00545         case BOTH_T6__L_TR:
00546         case BOTH_T6__L_T_:
00547         case BOTH_T6_BL_T_:
00548         case BOTH_T6_BR__L:
00549         case BOTH_T6_BR_BL:
00550         case BOTH_T6_BL_BR:
00551         case BOTH_T6_BL__R:
00552         case BOTH_T6_BL_TR:
00553         //level 7
00554         case BOTH_T7_BR_TL:
00555         case BOTH_T7_BR__L:
00556         case BOTH_T7_BR_BL:
00557         case BOTH_T7__R__L:
00558         case BOTH_T7__R_BL:
00559         case BOTH_T7_TR__L:
00560         case BOTH_T7_T___R:
00561         case BOTH_T7_TL_BR:
00562         case BOTH_T7__L_BR:
00563         case BOTH_T7__L__R:
00564         case BOTH_T7_BL_BR:
00565         case BOTH_T7_BL__R:
00566         case BOTH_T7_BL_TR:
00567         case BOTH_T7_TL_TR:
00568         case BOTH_T7_T__BR:
00569         case BOTH_T7__L_TR:
00570         case BOTH_V7_BL_S7:
00571         //special
00572         //case BOTH_A2_STABBACK1:
00573         case BOTH_ATTACK_BACK:
00574         case BOTH_CROUCHATTACKBACK1:
00575         case BOTH_BUTTERFLY_LEFT:
00576         case BOTH_BUTTERFLY_RIGHT:
00577         case BOTH_FJSS_TR_BL:
00578         case BOTH_FJSS_TL_BR:
00579         case BOTH_JUMPFLIPSLASHDOWN1:
00580         case BOTH_JUMPFLIPSTABDOWN:
00581                 return qtrue;
00582                 break;
00583         }
00584         return qfalse;
00585 }

void Boba_ChangeWeapon int  wp  ) 
 

Definition at line 193 of file NPC_AI_Jedi.c.

References EV_GENERAL_SOUND, G_AddEvent(), G_SoundIndex(), NPC, NPC_ChangeWeapon(), gentity_s::s, and entityState_s::weapon.

Referenced by Boba_FireDecide(), and NPC_BSJedi_Default().

00194 {
00195         if ( NPC->s.weapon == wp )
00196         {
00197                 return;
00198         }
00199         NPC_ChangeWeapon( wp );
00200         G_AddEvent( NPC, EV_GENERAL_SOUND, G_SoundIndex( "sound/weapons/change.wav" ));
00201 }

void Boba_DoFlameThrower gentity_t self  ) 
 

Definition at line 471 of file NPC_AI_Jedi.c.

References Boba_FireFlameThrower(), Boba_StartFlameThrower(), BOTH_FORCELIGHTNING_HOLD, gentity_t, NPC_SetAnim(), SETANIM_FLAG_HOLD, SETANIM_FLAG_OVERRIDE, SETANIM_TORSO, and TIMER_Done().

Referenced by Boba_FireDecide().

00472 {
00473         NPC_SetAnim( self, SETANIM_TORSO, BOTH_FORCELIGHTNING_HOLD, SETANIM_FLAG_OVERRIDE|SETANIM_FLAG_HOLD );
00474         if ( TIMER_Done( self, "nextAttackDelay" ) && TIMER_Done( self, "flameTime" ) )
00475         {
00476                 Boba_StartFlameThrower( self );
00477         }
00478         Boba_FireFlameThrower( self );
00479 }

void Boba_FireDecide void   ) 
 

TIMER_Done( NPC, "stick" ) ||

Definition at line 481 of file NPC_AI_Jedi.c.

References AngleVectors(), BG_FlippingAnim(), Boba_ChangeWeapon(), Boba_DoFlameThrower(), Boba_FlyStart(), gNPC_t::burstMax, gNPC_t::burstMean, gNPC_t::burstMin, gNPC_t::burstSpacing, BUTTON_ALT_ATTACK, BUTTON_ATTACK, usercmd_s::buttons, CalcEntitySpot(), gentity_s::client, entityShared_t::currentOrigin, gNPC_t::desiredPitch, gNPC_t::desiredYaw, DotProduct, trace_t::endpos, gentity_s::enemy, enemyDist, gNPC_t::enemyLastSeenLocation, gNPC_t::enemyLastSeenTime, gclient_s::enemyTeam, ENTITYNUM_NONE, playerState_s::fd, forcedata_s::forceJumpZStart, g_entities, gentity_t, playerState_s::groundEntityNum, gNPC_t::group, gentity_s::health, AIGroupInfo_s::lastSeenEnemyTime, playerState_s::legsAnim, level, MASK_SHOT, clientPersistant_t::maxHealth, MIN_ROCKET_DIST_SQUARED, NPC, NPC_ChangeWeapon(), NPC_ClearLOS4(), NPC_ShotEntity(), NPC_UpdateAngles(), NPCInfo, NULL, entityState_s::number, gclient_s::pers, PITCH, gclient_s::playerTeam, gclient_s::ps, Q_irand(), qboolean, qfalse, qtrue, gentity_s::r, gentity_s::s, SCF_ALT_FIRE, SCF_FIRE_WEAPON, gNPC_t::scriptFlags, SPOT_HEAD, SVF_GLASS_BRUSH, entityShared_t::svFlags, gentity_s::takedamage, level_locals_t::time, TIMER_Done(), TIMER_Set(), trap_InPVS(), trap_Trace(), ucmd, vec3_origin, vec3_t, vectoangles(), VectorClear, VectorCopy, VectorMA, VectorNormalize(), VectorSubtract, playerState_s::viewangles, entityState_s::weapon, playerState_s::weapon, WeaponThink(), playerState_s::weaponTime, WP_BLASTER, WP_DET_PACK, WP_DISRUPTOR, WP_EMPLACED_GUN, WP_FLECHETTE, WP_NONE, WP_REPEATER, WP_ROCKET_LAUNCHER, WP_SABER, WP_THERMAL, WP_TRIP_MINE, and YAW.

Referenced by NPC_BSSeeker_Default().

00482 {
00483         qboolean enemyLOS = qfalse;
00484         qboolean enemyCS = qfalse;
00485         qboolean enemyInFOV = qfalse;
00486         //qboolean move = qtrue;
00487         qboolean faceEnemy = qfalse;
00488         qboolean shoot = qfalse;
00489         qboolean hitAlly = qfalse;
00490         vec3_t  impactPos;
00491         float   enemyDist;
00492         float   dot;
00493         vec3_t  enemyDir, shootDir;
00494 
00495         if ( NPC->client->ps.groundEntityNum == ENTITYNUM_NONE 
00496                 && NPC->client->ps.fd.forceJumpZStart
00497                 && !BG_FlippingAnim( NPC->client->ps.legsAnim )
00498                 && !Q_irand( 0, 10 ) )
00499         {//take off
00500                 Boba_FlyStart( NPC );
00501         }
00502 
00503         if ( !NPC->enemy )
00504         {
00505                 return;
00506         }
00507 
00508         /*
00509         if ( NPC->enemy->enemy != NPC && NPC->health == NPC->client->pers.maxHealth )
00510         {
00511                 NPCInfo->scriptFlags |= SCF_ALT_FIRE;
00512                 Boba_ChangeWeapon( WP_DISRUPTOR );
00513         }
00514         else */if ( NPC->enemy->s.weapon == WP_SABER )
00515         {
00516                 NPCInfo->scriptFlags &= ~SCF_ALT_FIRE;
00517                 Boba_ChangeWeapon( WP_ROCKET_LAUNCHER );
00518         }
00519         else
00520         {
00521                 if ( NPC->health < NPC->client->pers.maxHealth*0.5f )
00522                 {
00523                         NPCInfo->scriptFlags |= SCF_ALT_FIRE;
00524                         Boba_ChangeWeapon( WP_BLASTER );
00525                         NPCInfo->burstMin = 3;
00526                         NPCInfo->burstMean = 12;
00527                         NPCInfo->burstMax = 20;
00528                         NPCInfo->burstSpacing = Q_irand( 300, 750 );//attack debounce
00529                 }
00530                 else
00531                 {
00532                         NPCInfo->scriptFlags &= ~SCF_ALT_FIRE;
00533                         Boba_ChangeWeapon( WP_BLASTER );
00534                 }
00535         }
00536 
00537         VectorClear( impactPos );
00538         enemyDist = DistanceSquared( NPC->r.currentOrigin, NPC->enemy->r.currentOrigin );
00539 
00540         VectorSubtract( NPC->enemy->r.currentOrigin, NPC->r.currentOrigin, enemyDir );
00541         VectorNormalize( enemyDir );
00542         AngleVectors( NPC->client->ps.viewangles, shootDir, NULL, NULL );
00543         dot = DotProduct( enemyDir, shootDir );
00544         if ( dot > 0.5f ||( enemyDist * (1.0f-dot)) < 10000 )
00545         {//enemy is in front of me or they're very close and not behind me
00546                 enemyInFOV = qtrue;
00547         }
00548 
00549         if ( (enemyDist < (128*128)&&enemyInFOV) || !TIMER_Done( NPC, "flameTime" ) )
00550         {//flamethrower
00551                 Boba_DoFlameThrower( NPC );
00552                 enemyCS = qfalse;
00553                 shoot = qfalse;
00554                 NPCInfo->enemyLastSeenTime = level.time;
00555                 faceEnemy = qtrue;
00556                 ucmd.buttons &= ~(BUTTON_ATTACK|BUTTON_ALT_ATTACK);
00557         }
00558         else if ( enemyDist < MIN_ROCKET_DIST_SQUARED )//128
00559         {//enemy within 128
00560                 if ( (NPC->client->ps.weapon == WP_FLECHETTE || NPC->client->ps.weapon == WP_REPEATER) && 
00561                         (NPCInfo->scriptFlags & SCF_ALT_FIRE) )
00562                 {//shooting an explosive, but enemy too close, switch to primary fire
00563                         NPCInfo->scriptFlags &= ~SCF_ALT_FIRE;
00564                         //FIXME: we can never go back to alt-fire this way since, after this, we don't know if we were initially supposed to use alt-fire or not...
00565                 }
00566         }
00567         else if ( enemyDist > 65536 )//256 squared
00568         {
00569                 if ( NPC->client->ps.weapon == WP_DISRUPTOR )
00570                 {//sniping... should be assumed
00571                         if ( !(NPCInfo->scriptFlags&SCF_ALT_FIRE) )
00572                         {//use primary fire
00573                                 NPCInfo->scriptFlags |= SCF_ALT_FIRE;
00574                                 //reset fire-timing variables
00575                                 NPC_ChangeWeapon( WP_DISRUPTOR );
00576                                 NPC_UpdateAngles( qtrue, qtrue );
00577                                 return;
00578                         }
00579                 }
00580         }
00581 
00582         //can we see our target?
00583         if ( TIMER_Done( NPC, "nextAttackDelay" ) && TIMER_Done( NPC, "flameTime" ) )
00584         {
00585                 if ( NPC_ClearLOS4( NPC->enemy ) )
00586                 {
00587                         NPCInfo->enemyLastSeenTime = level.time;
00588                         enemyLOS = qtrue;
00589 
00590                         if ( NPC->client->ps.weapon == WP_NONE )
00591                         {
00592                                 enemyCS = qfalse;//not true, but should stop us from firing
00593                         }
00594                         else
00595                         {//can we shoot our target?
00596                                 if ( (