From Unreal Wiki, The Unreal Engine Documentation Site
Jump to navigation Jump to search

Invasion is a team based gametype which comes standard with UT2004 and with UT2003 via bonus packs. This gametype uses Deathmatch maps as its map list.


Alongside the other players, you must hold out as long as possible against the waves of attacking monsters.

Invasion Gameplay

Invasion is a Team Game, but not in the conventional style. Every player is on the same team (red) whose goal is to survive waves of attacking Monsters. You are given a radar map to help you see the locations of your teammates and the Monsters. The game starts with a small delay before Wave 1, so that your are able to obtain weapons. After this period a 10 second countdown beigns, after which hostile Monsters will spawn at Player Starts. You must destroy these Monsters for a given length of time to complete the wave. Then the 10 second countdown will begin for Wave 2. Rinse and Repeat ;).

If you die during a wave, you are OUT for the remainder of that wave and you will have to scramble for weapons at the beginning of the next wave. If at any stage All players are OUT, the game is over and you have lost the match. If at least one player survives each wave, after a configurable amount of waves (maximum and default 16), you will win the match.

Sounds easy? Not quite, as each wave is harder, introducing greater numbers of more difficult Monsters.

Mods for Invasion

Invasion in its raw form is much less popular than highly modified versions of the Gametype.

Many UT2004 servers operate with one or more of the following modifications:

Also worthy of mention is Fraghouse Invasion, a complete rework of the invasion gametype by the Fraghouse mod Team. This Mod offers support for vehicles and a complete new set of weapons for your enjoyment.

Invasion Class Details

UT2004 :: Actor >> Info >> GameInfo >> DeathMatch >> TeamGame >> xTeamGame >> Invasion (Package: SkaarjPack)

This package (SkaarjPack.u) contains all classes relevant to the Invasion gametype, the Monsters in it, the weapon Damage Types and Projectiles they utilize, but excludes the GUI classes.



<uscript> struct WaveInfo { var() int WaveMask; // bit fields for which monsterclasses var() byte WaveMaxMonsters; var() byte WaveDuration; var() float WaveDifficulty; }; </uscript>


Magic Numbers

INVPROPNUM = 8 (const) 
Used in InvasionPropText and InvasionDescTest.


WaveInfo Waves[16] (config) 
TODO Add support for structs & arrays to PlayInfo


class<Monster> MonsterClass[16] 
class<Monster> WaveMonsterClass[16] 
class<Monster> LastKilledMonsterClass 
class<Monster> FallbackMonster 
float NextMonsterTime 
float WaveEndTime 
string WaveConfigMenu (config) 
string FallbackMonsterClass 
int InitialWave 
int FinalWave 
string InvasionPropText[INVPROPNUM] (localized) 
string InvasionDescText[INVPROPNUM] (localized) 
int NumMonsters 
int MaxMonsters 
int WaveNum 
int WaveNumClasses 
int WaveMonsters 
int SecondBot 
int WaveCountDown 
bool bWaveInProgress 
string InvasionBotNames[9] 
sound NewRoundSound 
sound InvasionEndSound[6] 
name InvasionEnd[6] 


PrecacheGameTextures( LevelInfo myLevel ) (static) 
PrecacheGameAnnouncements( AnnouncerVoice V, bool bRewardSounds ) (static) 
UpdateAnnouncements() (simulated) 
EMPTY OBSOLETE UpdateAnnouncements() - preload all announcer phrases used by this actor
bool CanSpectate( PlayerController Viewer, bool bOnlySpectator, Actor ViewTarget ) 
Sets InitialBots = Min(InitialBots,2).
bool CheckEndGame( PlayerReplicationInfo Winner, string Reason ) 
bool CheckMaxLives( PlayerReplicationInfo Scorer ) 
Checks if all other players are out
ScoreKill( Controller Killer, Controller Other ) 
NotifyKilled( Controller Killer, Controller Killed, Pawn KilledPawn ) 
RestartPlayer( Controller aPlayer ) 
Unless aPlayer.PlayerReplicationInfo.bOutOfLives, calls Super(GameInfo).RestartPlayer(aPlayer).
UnrealTeamInfo GetBotTeam( optional int TeamBots ) 
Returns Teams[0].
byte PickTeam( byte num, Controller C ) 
Returns 0.
Bot SpawnBot( optional string botName ) 
Spawn and initialize a bot.
int ReduceDamage( int Damage, Pawn injured, Pawn instigatedBy, vector HitLocation, out vector Momentum, class<DamageType> DamageType ) 
Killed( Controller Killer, Controller Killed, Pawn KilledPawn, class<DamageType> damageType ) 
float RatePlayerStart( NavigationPoint N, byte Team, Controller Player ) 
Rate whether player/monster should choose this NavigationPoint as its start.
ReplenishWeapons( Pawn P ) 
GetServerDetails( out ServerResponseLine ServerState ) 
Adds Server Details, InitialWave and FinalWave for menu configuration.
FillPlayInfo(PlayInfo PI) (static) 
Sets up the configuration meny for Invasion, including InitialWave, FinalWave and Waves.


InitGame( string Options, out string Error ) 
If no FallbackMonster, sets it to ElireKrall (see Krall). Sets MaxLives = 1. Sets bForceRespawn = true.
Sets WaveNum = InitialWave. Sets InvasionGameReplicationInfo and GameReplicationInfo properties.
PlayerController Login ( string Portal, string Options, out string Error ) 
string GetDisplayText( string PropName ) (static) 
Display label text for configuration menu.
string GetDescriptionText(string PropName) (static) 
Display description text for configuration menu.
bool AcceptPlayInfoProperty(string PropertyName) (static) 




While bWaveInProgress, handles Monster spawning. Else, performs countdown and next wave setup.
Sets WaveNum = InitialWave and InvasionGameReplicationInfo(GameReplicationInfo).WaveNumber = WaveNum.

Related Topics


Nick89: 10 pages requesting! Not anymore ;) I thought i might help out :) Still very much a work in progress, feel free to rewrite everything ;)

SuperApe: Thanks. You da man. Yeah, I've probably been the one "requesting" this page in regards to Monsters, etc. We really should have more Gametype pages for DM map games, but LastManStanding is actually a class name for the old UT GameInfo version. Not sure what to do about that one.

Nick89: Nice edits :) Just a question, do you use some sort of program to parse these files and to create the API's that you put here? Or do you do it manually?

SuperApe: Manually. I even do HTML manually. :D But, I know I've seen mention of some kind of Wikifier somewhere around here. (Class Wikifier) After a while, you just get to know the pages that need linking to, what words need [['s and such.