| Home Page | Recent Changes

MonsterController

UT2003 :: Object >> Actor >> Controller >> AIController >> ScriptedController >> MonsterController (Package: SkaarjPack)

Simple AI that always hunts down players as enemies.

// note ut2004 monster controller code is just about identical

// but ut2004 has a problem a serious one the monsters jump though states too fast

// and will crash the entire game by calling the find new enemy function untill the recursions exceed 10000

Properties

All MonsterController properties are hidden.

Magic numbers

(from remark in code) "Distance based, so scale to bot speed/weapon range"

MAXSTAKEOUTDIST = 2000 (const)
ENEMYLOCATIONFUZZ = 1200 (const)
TACTICALHEIGHTADVANTAGE = 320 (const)
MINSTRAFEDIST = 200 (const)
MINVIEWDIST = 200 (const)

Flags

bool bCanFire
Used by TacticalMove and Charging states
bool bStrafeDir
bool bLeadTarget
Lead target with projectile attack
bool bChangeDir
Tactical move boolean
bool bEnemyIsVisible
bool bMustCharge
bool bJustLanded
bool bRecommendFastMove
bool bHasFired
bool bForcedDirection

Advanced AI

float AcquireTime
Time at which current enemy was acquired
float LoseEnemyCheckTime
Not implemented.
float StartTacticalTime
vector HidingSpot
float ChallengeTime

Modifiable AI

float Accuracy
-1 to 1 (0 is default, higher is more accurate)
float StrafingAbility
-1 to 1 (higher uses strafing more)
float CombatStyle
-1 to 1 = low means tends to stay off and snipe, high means tends to charge and melee
float ReactionTime

Team AI

string GoalString
For debugging - used to show what bot is thinking (with 'ShowDebug')
string SoakString
For debugging - shows problem when soaking

Used in ChooseAttackMode() State

int ChoosingAttackLevel
float ChooseAttackTime
int ChooseAttackCounter
float EnemyVisibilityTime
Pawn VisibleEnemy
Pawn OldEnemy
float StopStartTime
float LastRespawnTime
float FailedHuntTime
Pawn FailedHuntEnemy

Miscellaneous

int NumRandomJumps
Attempts to free monster from being stuck

Functions

(incomplete)

Trigger( Actor Other, Pawn EventInstigator )
If Other is a Pawn and Pawn.Health >= 0, calls SetEnemy( EventInstigator, true ).
FightEnemy( bool bCanCharge )
Decides how to attack: Hunt, StakeOut, Melee, Ranged, etc. Also performs a "teleport" (SetLocation() to a PlayerStart), if the FailedHuntTime is reached and the controlled Pawn not currently seen by the enemy.
ChooseAttackMode()
Handles tactical attacking state selection - choose which type of attack to do from here.
bool FindBestPathToward( Actor A, bool bCheckedReach, bool bAllowDetour )
Assumes the desired destination is not directly reachable. It tries to set Destination to the location of the best waypoint, and returns true if successful.
bool NearWall( float walldist )
Returns true if there is a nearby barrier at eyeheight, and changes FocalPoint to a suggested place to look.
rotator AdjustAim( FireProperties? FiredAmmunition, vector projStart, int aimerror )
Returns a rotation which is the direction the bot should aim - after introducing the appropriate aiming error.
bool Formation()
Returns false.
DoStakeOut()
Switches to state StakeOut.
DoCharge()
If in WaterVolume and bCanSwim is false or if bCanFly and bCanWalk are false, calls DoTacticalMove(). Otherwise, switches to state Charging.
DoTacticalMove()
Switches to state TacticalMove.
bool DefendMelee( float Dist )
Return true if defending against melee attack.
bool IsStrafing()
Returns false.
bool IsHunting()
Returns false.
bool Stopped()
Returns bPreparingMove.
GameHasEnded()
EMPTY

States

NoGoal

EMPTY

RestFormation

Ignores EnemyNotVisible(). Calls WaitForLanding().

Functions

CancelCampFor( Controller C )
Calls DirectedWander(Normal(Pawn.Location - C.Pawn.Location)).
bool Formation()
Returns true.
Timer()
Calls and enables NotifyBump.
PickDestination()
If TestDirection(VRand(),Destination), return. Otherwise, call TestDirection(VRand(),Destination).
BeginState()
Sets Enemy = None, Pawn.bCanJump = false, Pawn.bAvoidLedges = true, Pawn.bStopAtLedges = true, calls Pawn.SetWalking(true) and sets MinHitWall += 0.15.
EndState()
Sets MonitoredPawn = None and MinHitWall -= 0.15. If Pawn != None, sets Pawn.bStopAtLedges = false and Pawn.bAvoidLedges = false, calls Pawn.SetWalking(false) and if Pawn.JumpZ > 0, sets Pawn.bCanJump = true.

Events

MonitoredPawnAlert()
Calls WhatToDoNext(6).
Begin
Calls WaitForLanding(); ...
Camping
Sets Pawn.Acceleration = vect(0,0,0), Focus = None, FocalPoint = VRand(). Calls NearWall(MINVIEWDIST), FinishRotation() and Sleep(3 + FRand()) ...
Moving
Calls WaitForLanding() and PickDestination() ...
WaitForAnim
If Monster(Pawn).bShotAnim, calls Sleep(0.5) and goes to WaitForAnim. Calls MoveTo(Destination,,true). If Pawn.bCanFly and Physics == PHYS_Walking, calls SetPhysics(PHYS_Flying). Calls WhatToDoNext(8). Goes to Begin.

MoveToGoal

MoveToGoalNoEnemy extends MoveToGoal

EMPTY

MoveToGoalWithEnemy extends MoveToGoal

When Timer() is called, calls TimedFireWeaponAtEnemy().

Roaming extends MoveToGoalNoEnemy

Ignores EnemyNotVisible.

Begin
Calls SwitchToBestWeapon(), WaitForLanding() and MoveToward(MoveTarget,FaceActor(1),,ShouldStrafeTo(MoveTarget)).
DoneRoaming

Charging extends MoveToGoalWithEnemy

Ignores SeePlayer and HearNoise.

Begin
WaitForAnim
Moving

TacticalMove

Ignores SeePlayer and HearNoise.

TacticalTick
Begin
DoMove
WaitForAnim
DoStrafeMove
RecoverEnemy
FinishedStrafe

Hunting extends MoveToGoalWithEnemy

Ignores EnemyNotVisible.

AdjustFromWall
Begin
WaitForAnim
SpecialNavig

StakeOut

Ignores EnemyNotVisible.

Begin

RangedAttack

Ignores SeePlayer, HearNoise and Bump.

Begin

WaitForAnim

Ignores SeePlayer, HearNoise, KilledBy, NotifyBump, HitWall, NotifyPhysicsVolumeChange, NotifyHeadVolumeChange, Falling, TakeDamage and ReceiveWarning.

Events

AnimEnd( int Channel )
Calls Pawn.AnimEnd(Channel). If !Monster(Pawn).bShotAnim, calls WhatToDoNext(99).

WaitingForLanding

Functions

bool DoWaitForLanding()
bool NotifyLanded( vector HitNormal )
Timer()
If Focus == Enemy, call TimedFireWeaponAtEnemy(), else call SetCombatTimer().
BeginState()
Set bJustLanded = false. If MoveTarget != None and Enemy == None or Focus != Enemy, set FaceActor(1.5). If Enemy == None or Focus != Enemy, call StopFiring().

Related Topics

Discussion

SuperApe: Created. Could use brief definitions of each state. Rest of functions need to be added.


Category Class (UT2003)

Category Class (UT2004)

Category To Do – Finish state definitions.

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

FAQs

Help Desk

Mapping Topics

Mapping Lessons

UnrealEd Interface

UnrealScript Topics

UnrealScript Lessons

Making Mods

Class Tree

Modeling Topics

Chongqing Page

Log In