Legacy:MonsterController - Unreal Wiki

# Legacy:MonsterController

### From Unreal Wiki, The Unreal Engine Documentation Site

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

- Monster
- Controller Overview
- Artificial Intelligence - Super topic for all AI (bots, Monsters, NPCs, etc)
  - Monster Support

## Discussion

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

Category:Legacy Class (UT2003)

Category:Legacy Class (UT2004)

Category:Legacy To Do – Finish state definitions.

Categories: Legacy Class (UT2003) | Legacy Class (UT2004) | Legacy To Do

##### Views

- Legacy
- Discussion
- Current revision

##### Search