Unreal Developer Network Technical
Welcome to the Unreal Developer Network The Engine Unreal Powered Content Creation Technical Playstation2 Xbox Gamecube Licensee Log In

Technical

Technical home

Documents listed below, but not hyperlinked, are restricted to engine licensees only.

As certain texts become relevant, due to released games using that technology, new documents will be made available. Check back often!
 
Getting Started
   - WhatToReadFirst
   - WhoDoIAskAbout
   General Engine Support
   - UnProg (mailing list)
   - UnProgTraffic (summaries)
   - UnDevIRC (chat)
   - UnDevIRCTraffic (summaries)
   Codedrop-Specific Support
   - NextCodeDropStatus
   - UDNBuildIntro
   - UDNBuildReports
   - CodeDrop2226
   - CodeDrop2110
   - CodeDrop927
   - CodeDrop829
   - Patch777PS2
   - CodeDrop777
   - CodeDrop739
   - CodeDrop697
   HW/SW Support
   - RecommendedHardware
   - RecommendedSoftware
   - AthlonLockups
   - ImmersionForceFeedback
   - BelkinSpeedPad
   Toolchain Support
   - UtraceDebugging
   - VTuneUsage
   - VisualSourceSafe
   - UnrealScriptHighlighting
   - VisualStudioAddIns
   - UnrealToolsAddin
   - UnrealToolsDotNet
   - UnrealDebugging
   - UnDox
   - AutoDiff
   - SearchUCinXP
   - EnhancedPkgCommandlet
   - UnrealScriptDebugger
   - BuildingUnrealOnLinux
   - NoStepInto

Unreal Specifics
   - NewProjectPreparation
   Basics
   - UnrealScriptReference
   - UnrealClasses
   - CollisionHash
   - UnrealStrings
   - MemAlloc
   - ConsoleCommandLineParameters
   - UccCommandlet
   - IniFilesTutorial
   - SaveConfiguration
   - GameRules
   - UmodInstaller br>    - UmodWizard
   - CreatingGameInstallers
   Rendering Architecture
   - RenderingPipeline
   - CameraEffects
   - TypedTextCameraEffect
   Skeletal System
   - UWSkelAnim
   - UWSkelAnim2
   - ExtendingUWSkelAnim
   - SkeletalAttachments
   - SkeletalBlending
   - AdditionalSkelNatives
   - PhysicsBasedAnim
   - AnimNotifies
   - BinaryFormatSpecifications
   Physics
   - PhysicsOverview
   - RootMotionPhysics
   Particle System
   - ParticlesInfo
   - RibbonEmitter
   - ParticleExtensions
   New Particle Editor
   - ParticleSystemEditorCode
   User Interface
   - HeadsUpDisplayTutorial
   - InteractionReference
   - CanvasReference
   Materials
   - MaterialTricks
   Projected Textures
   - ProjectorTricks
   - RenderToTextureShadows
   - RenderToTextureShadows2 br>    UnrealScript
   - UnrealScriptDelegates
   - ScriptQuats
   - ConditionalCompilation
   - AsyncFilePackage
   UnrealEd
   - AnimatedTextureBrowser
   - ViewCorrected3DDrag
   Networking
   - NetworkingTome
   - PlayerReplicationHandout
   Terrain
   - TerrainChanges927
   Other Stuff
   - PathingImprovements
   - GameAndAIHandout
   - SubmitBugReport
   - GraphsAndMemory
   - BumpMapping
   - MakeYourOwnDemoMode
   - ExportGeometryIntoMAX
   - InGameMovies
   - CustomArchives
   - LicenseeCodePool
   - LicenseeFileExtensions

Misc
   - CodeDropSong
   - UptBenchmarks

mathengine.gif
Karma Physics
   - KarmaReference
   - VehiclesInUT2003

Contribute!
You can create a new page, and then you can edit this list to add it to the categories, as well as edit the Technical homepage to tell everyone about it!

Make Requests!
You can also stop by the UdnStaff page to see what we're working on, and edit it to add your own document requests.


Please take note! For mod developers working with Unreal Tournament 2003, this documentation is meant to be a starting point for your own explorations into UT2003, not a definitive guide. There will be differences between the documentation here and the product in your hands, and you may have to figure out quite a bit for yourself. Check out the Unreal Tournament 2003 page in the Unreal Powered area for links to community sites if you're having problems. UDN is a licensee support site, and cannot provide technical support or game-specific assistance to end users.

IniFilesTutorial

Licensees can log in.

Interested in the Unreal engine? Check out the licensing page.

Questions about UDN itself? Contact the UDN Staff.

Configuring the Unreal Warfare Engine

Last updated by Richard 'vajuras' Osborne (UdnStaff), to add more detail about DefaultGame property in Engine.Engine. Original author was Richard 'vajuras' Osborne (UdnStaff).

Quick Note: If anyone finds any major details missing, feel free to add detail.

About the Ini files

The Unreal Engine primarily relies on three ini files (UW.ini, User.ini, and UnrealEd.ini) to dictate how it will function and initialize. Some variables are accessed directly by native code while others can easily be traced to UnrealScript code. Whenever a SaveConfig() or StaticSaveConfig() function is called on an object, the engine saves the variables to the indicated config file.

Variables used by native code in the ini file will normally have a simple title. For instance, the first tag that appears in the UW.ini file is simply named [URL]. However, any variable used by unrealscript code usually has a fully qualified class name which follows the format (package).(classname). For instance, the [Engine.Engine] section in UW.ini indicates the Engine class stored within the Engine package loads the variable. There are some exceptions to this rule, such as WinDrv.WindowsClient, which is a tag loaded by native C++ code.

Also keep in mind UCC (UnrealScript Compiler) uses the UW.ini to determine which packages exist. Unlike the game engine, UCC only uses a small subset of the settings (mainly the Editor.EditorEngine section) to load packages.

The first time the engine is run, certain ini files will most likely be missing (UW.ini and UnrealEd.ini). The default.ini file is loaded and translated into UW.ini while the DefaultUnrealEd.ini is translated into UnrealEd.ini. The default files are no longer used after the actual ini files are generated. However, you'll find that the default files are very useful for reference.

UW.ini file

Used by the engine to load the protocol, default/intro map, entry level, and global information that will apply to all players on the server (such as game rules). This file also stores the settings for the preferred render device, etc.

Okay, let's breakdown the ini by sections:

Section: URL
Class: Engine/Src/UnURL.cpp - Loaded by StaticInit()
Notes: Some of these defaults can be overrided via the command line (such as default map). Other defaults are overrided at other places. Such as the default Name and Class are overrided by the DefaultPlayer tag in DefUser.ini.

[URL]
Protocol=unreal  (Defines the protocol)
ProtocolDescription=Unreal Protocol  (Describes the protocol)
Name=Player
Map=Index.unr   (Default Map the engine should load)
LocalMap=Entry.unr  (Default Entry Level)
Host=
Portal=
MapExt=unr (Default Map Extension)
EXEName=uw.exe  (Name of the exe of the game)
SaveExt=usa
Port=7777   (Default port)
Class=WarClassLight.WarCOGSoldier (Not Used)

Section: FirstRun
Class: Engine/Inc/UnEngineWin.h, - Loaded by InitEngine()
Notes: This variable is used to determine if this is the first time the user is running the game. This can be useful if you wish to display a window to request the user to set his/her video settings and other options.

[FirstRun]
FirstRun=927 (If this variable equals zero, then it is the first time this game has been started)

Section: Engine.Engine
Class: UnrealScript code
Notes: This section configures the render device, audio device, and many defaults. The Console class is a variable you will most likely want to change and instead use a custom Console subclass.

  • DefaultGame is used when the engine initializes if no URL was provided during bootup and the map being loaded doesn't define the DefaultGameType? property.

[Engine.Engine]
RenderDevice=D3DDrv.D3DRenderDevice (preferred render device)
AudioDevice=ALAudio.ALAudioSubsystem (audio system)
NetworkDevice=IpDrv.TcpNetDriver (network protocol)
DemoRecordingDevice=Engine.DemoRecDriver
Console=Engine.Console (default console class)
DefaultPlayerMenu=UDebugMenu.UDebugRootWindow (default menu system)
Language=int
GameEngine=Engine.GameEngine
EditorEngine=Editor.EditorEngine
DefaultGame=WarfareGame.WarfareTeamGame
DefaultServerGame=WarfareGame.WarfareTeamGame
ViewportManager=WinDrv.WindowsClient
Render=Render.Render (not used)
Input=Engine.Input (not really used - referenced by UnCamera.cpp)
Canvas=Engine.Canvas (not really used - referenced by UnCamera.cpp)

Section: Core.System
Class: UnrealScript code
Notes: This section defines all the paths the engine will use to load maps, packages, etc.

  • SavePath is the location where single player games are saved.
  • Paths defines a relative location containing the file extension where a certain file type can be found.

[Core.System]
PurgeCacheDays=30
SavePath=..\Save
CachePath=..\Cache
CacheExt=.uxx
Paths=..\System\*.u
Paths=..\Maps\*.unr
Paths=..\TestMaps\*.unr
Paths=..\Textures\*.utx
Paths=..\Sounds\*.uax
Paths=..\Music\*.umx
Paths=..\StaticMeshes\*.usx
Paths=..\Animations\*.ukx
Suppress=DevLoad
Suppress=DevSave
Suppress=DevNetTraffic
Suppress=DevGarbage
Suppress=DevKill
Suppress=DevReplace
Suppress=DevCompile
Suppress=DevBind
Suppress=DevBsp

Section: Engine.GameEngine
Class: UnrealScript code
Definitions:

  • ServerActors are used by UnLevel.cpp for network server support. These actors are spawned onto the level when the map loads during a network game (on the server).
  • ServerPackages refer to packages that required to run during network gameplay. The unreal warfare engine checks the GUID on the client- ensuring their id matches the server. If not, the client's connection to the server is refused. Any packages that contains classes that replicates data to the client should be listed in this section. For instance, any package that contains an Engine.Weapon subclass should be listed in this section. Format: ServerPackage=(Unreal Package Name)

[Engine.GameEngine]
CacheSizeMegs=32
UseSound=True
ServerActors=IpDrv.UdpBeacon
MasterServerAddress=unreal.epicgames.com MasterServerPort=27900 (not used)
ServerActors=UWeb.WebServer
ServerPackages=AmbientCreatures
ServerPackages=WarEffects
ServerPackages=Decorations
ServerPackages=GamePlay
ServerPackages=UnrealGame
ServerPackages=WarfareGame
ServerPackages=WarClassLight
ServerPackages=WarClassHeavy
ServerPackages=WarClassMisc
ServerPackages=Pickups

Section: WinDrv.WindowsClient
Class: UnEngineWin.h
Notes: This class defines the settings for a windows computer system. These details are normally initialized by an external application (such as UnEngineWin.h code).

[WinDrv.WindowsClient]
WindowedViewportX=640
WindowedViewportY=480
FullscreenViewportX=640
FullscreenViewportY=480
TextureDetail=High
SkinDetail=High
LightmapDetail=High
TextureMinLOD=0
TextureMaxLOD=12
Brightness=0.800000
Contrast=0.700000
Gamma=0.800000
UseJoystick=False    (Joystick Active)
CaptureMouse=True
StartupFullscreen=True   (Full screen)
ScreenFlashes=True
NoLighting=False
DeadZoneXYZ=True
DeadZoneRUV=False
InvertVertical=False
ScaleXYZ=1000.000000
ScaleRUV=2000.000000
MinDesiredFrameRate=10.000000
Decals=True         (Display Decals)
NoDynamicLights=False
NoFractalAnim=False

Section: Engine.Player
Class: UnrealScript code
Notes: This section stores the system's internet connection (LAN, Cable, DSL, Modem, etc).

[Engine.Player]
ConfiguredInternetSpeed=10000
ConfiguredLanSpeed=20000

Section: ALAudio.ALAudioSubsystem
Class: ALAudio -> ALAudioSubsystem.cpp
Notes: This section configures the sound system. The music and sound volume are stored here as well as other options.

[ALAudio.ALAudioSubsystem]
UseEAX=False
CompatibilityMode=False
ReverseStereo=False
OutputRate=44100Hz
Channels=32
MusicVolume=0.8
SoundVolume=1.0
DopplerFactor=1.0
Rolloff=0.5

Section: IpDrv.TcpNetDriver
Class: IpDrv -> UnNetDrv.cpp
Notes: This section configures the unreal network driver for servers (dedicated, listen).

  • AllowDownloads specifies whether files can be downloaded from this server (such as missing packages, maps).
  • ConnectionTimeout specifies how long the server should wait before the connection is terminated (this happens after a bad connection condition has been established). Basically, this can happen during a lagged or errorneous connection.
  • InitialConnectTimeout number of seconds server will wait to establish connection on the initial attempt to connect to the server.
  • MaxClientRate used by UnLevel.cpp to determine the current net speed (however this variable defines the ceiling).
  • RelevantTimeout number of seconds an actor stays relevant to a client (there are many other checks that the engine will check during a network game but this condition could possibly cause actors stay relevant longer than normal). See Engine -> UnLevTic.cpp.
  • SpawnPrioritySeconds is the used by the engine to help compute the actor's relevancy (an actor being spawned is the catalyst of this event).
  • ServerTravelPause is the number of seconds the server should pause before switching to a new level. This is a property of the Level itself (LevelInfo.NextSwitchCountdown).

[IpDrv.TcpNetDriver]
AllowDownloads=True
ConnectionTimeout=15.0
InitialConnectTimeout=500.0
AckTimeout=1.0  (not used)
KeepAliveTime=0.2
MaxClientRate=20000
SimLatency=0 (not used)
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=20
LanServerMaxTickRate=35
DownloadManagers=IpDrv.HTTPDownload
DownloadManagers=Engine.ChannelDownload

Section: Engine.GameReplicationInfo
Class: UnrealScript code
Notes: This section sets the server information.

[Engine.GameReplicationInfo]
ServerName=Another Unreal Server
ShortName=Unreal Server

Section: IpServer.UdpServerQuery

[IpServer.UdpServerQuery]
GameName=ut   (Not Used)

Section: IpDrv.UdpBeacon
Class: UnrealScript code
Notes: This section stores data used to configure the beacon sender and receiver base class.

[IpDrv.UdpBeacon]
DoBeacon=True
BeaconTime=0.50
BeaconTimeout=5.0
BeaconProduct=ut

Section: Editor.EditorEngine
Class: UnrealScript code / Editor -> UnEditor.cpp
Notes: This section is used mostly by UnrealEd and UCC to determine which packages should be loaded. However in the case of UnrealEd, if the UNREALED.UnrealEdEngine section is present (in which it is not by default), it's settings will override this section because UnrealEdEngine unrealscript class overrides the settings.

  • EditPackages defines the package that the editor/UCC should load for editing. Base classes are loaded and then any package that contains classes that uses content from a base class should proceed it. Hence, the order of the packages start with Core then the Engine package is loaded and so forth.
  • LoadEntirePackageWhenSaving is set to false by default. This variable is used by UnrealEd to determine if it should perform incremental compiles. This allows it to compile classes much faster than any external unrealscript editor (Visual C++, etc) because the entire package is not recompiled when a class is edited and compiled within UnrealEd.

[Editor.EditorEngine]
UseSound=True
CacheSizeMegs=32
GridEnabled=True
SnapVertices=False
SnapDistance=10.000000
GridSize=(X=16.000000,Y=16.000000,Z=16.000000)
RotGridEnabled=True
RotGridSize=(Pitch=1024,Yaw=1024,Roll=1024)
GameCommandLine=-log
FovAngleDegrees=90.000000
GodMode=True
AutoSave=True
AutoSaveTimeMinutes=5
AutoSaveIndex=6
UseAxisIndicator=True
MatineeCurveDetail=0.1
LoadEntirePackageWhenSaving=0
EditPackages=Core
EditPackages=Engine
EditPackages=Fire
EditPackages=Editor
EditPackages=UWindow
EditPackages=UnrealEd
EditPackages=IpDrv
EditPackages=UWeb
EditPackages=GamePlay
EditPackages=UnrealGame
EditPackages=WarEffects
EditPackages=Decorations
EditPackages=WarfareGame
EditPackages=IHVDemoContent
EditPackages=Pickups
EditPackages=WarClassLight
EditPackages=WarClassHeavy
EditPackages=WarClassMisc
EditPackages=AmbientCreatures
EditPackages=Vehicles
EditPackages=UDebugMenu
EditPackages=UPreview

Section: Engine.StatLog
Class: UnrealScript code
Notes: This section is used to determine the location of ngStats logging utility (ngStats logs game events such as frags, accuracy, favorite weapon, etc).

[Engine.StatLog]
LocalBatcherURL=../NetGamesUSA.com/ngStats/ngStatsUT.exe
LocalBatcherParams=
LocalStatsURL=../NetGamesUSA.com/ngStats/html/ngStats_Main.html
WorldBatcherURL=../NetGamesUSA.com/ngWorldStats/bin/ngWorldStats.exe
WorldBatcherParams=-d ../NetGamesUSA.com/ngWorldStats/logs -g UT
WorldStatsURL=http://www.netgamesusa.com
LocalLogDir=../Logs
WorldLogDir=../NetGamesUSA.com/ngWorldStats/logs
bWorldBatcherError=False
bBatchLocal=False

Section: Editor.EditorEngine
Class: UnrealScript code / Editor -> UnEditor.cpp
Notes: UnrealEdEngine subclasses the unrealscript Editor.EditorEngine class. Thus, it's properties can automatically override it's parent class when the ini settings are loaded into unrealed.

  • AutoSave is a feature of UnrealEd. The engine calls UnrealEd/Src/Main.cpp every minute (during initialization, unrealed sets up a timer to receive a callback). If this variable is set and the time duration has progresses pass the AutosaveTimeMinutes, unrealed automatically proceeds to perform an autosave.

[UNREALED.UnrealEdEngine]
AutoSaveIndex=7
GridEnabled=True
SnapVertices=False
SnapDistance=10.000000
GridSize=(X=16.000000,Y=16.000000,Z=16.000000)
RotGridEnabled=True
RotGridSize=(Pitch=1024,Yaw=1024,Roll=1024)
UseSizingBox=False
UseAxisIndicator=True
FovAngleDegrees=90.000000
GodMode=True
AutoSave=True
AutosaveTimeMinutes=5
GameCommandLine=-log
AlwaysShowTerrain=False
UseActorRotationGizmo=False
LoadEntirePackageWhenSaving=False
AudioDevice=None
Console=Class'Engine.Console'
DefaultMenu=None
DefaultPlayerMenu=None
NetworkDevice=None
Language=None
CacheSizeMegs=32
UseSound=True
C_WorldBox=(B=107,G=0,R=0,A=255)
C_GroundPlane=(B=63,G=0,R=0,A=255)
C_GroundHighlight=(B=127,G=0,R=0,A=255)
C_BrushWire=(B=63,G=63,R=255,A=255)
C_Pivot=(B=0,G=255,R=0,A=255)
C_Select=(B=127,G=0,R=0,A=255)
C_Current=(B=0,G=0,R=0,A=255)
C_AddWire=(B=255,G=127,R=127,A=255)
C_SubtractWire=(B=63,G=192,R=255,A=255)
C_GreyWire=(B=163,G=163,R=163,A=255)
C_BrushVertex=(B=0,G=0,R=0,A=255)
C_BrushSnap=(B=0,G=0,R=0,A=255)
C_Invalid=(B=163,G=163,R=163,A=255)
C_ActorWire=(B=0,G=63,R=127,A=255)
C_ActorHiWire=(B=0,G=127,R=255,A=255)
C_Black=(B=0,G=0,R=0,A=255)
C_White=(B=255,G=255,R=255,A=255)
C_Mask=(B=0,G=0,R=0,A=255)
C_SemiSolidWire=(B=0,G=255,R=127,A=255)
C_NonSolidWire=(B=32,G=192,R=63,A=255)
C_WireBackground=(B=0,G=0,R=0,A=255)
C_WireGridAxis=(B=119,G=119,R=119,A=255)
C_ActorArrow=(B=0,G=0,R=163,A=255)
C_ScaleBox=(B=11,G=67,R=151,A=255)
C_ScaleBoxHi=(B=157,G=149,R=223,A=255)
C_ZoneWire=(B=0,G=0,R=0,A=255)
C_Mover=(B=255,G=0,R=255,A=255)
C_OrthoBackground=(B=163,G=163,R=163,A=255)
C_StaticMesh=(B=255,G=255,R=0,A=255)
C_VolumeBrush=(B=225,G=196,R=255,A=255)
C_ConstraintLine=(B=0,G=255,R=0,A=255)
C_AnimMesh=(B=28,G=221,R=221,A=255)
C_TerrainWire=(B=255,G=255,R=255,A=255)
EditPackages=Core
EditPackages=Engine
EditPackages=Fire
EditPackages=Editor
EditPackages=UWindow
EditPackages=UnrealEd
EditPackages=IpDrv
EditPackages=UWeb
EditPackages=GamePlay
EditPackages=UnrealGame
EditPackages=WarEffects
EditPackages=Decorations
EditPackages=WarfareGame
EditPackages=IHVDemoContent
EditPackages=Pickups
EditPackages=WarClassLight
EditPackages=WarClassHeavy
EditPackages=WarClassMisc
EditPackages=AmbientCreatures
EditPackages=Vehicles
EditPackages=UDebugMenu
EditPackages=UPreview

DefUser.ini file

Stores permenant user settings such as joystick buttons, key assignments, and options specific to the user (PlayerController).

Section: DefaultPlayer
Class: Engine -> UnController.cpp, UnGame.cpp
Notes: Configures the default player (the player the user starts with).

  • Name is the name of the player/user. This variable is loaded when GetDefaultURL() is called on the controller.

[DefaultPlayer]
Name=Player (Name of the player)
Class=WarClassLight.WarCOGSoldier (Default Player Class)
team=255 (Default Team Assignment)

Section: Engine.Input
Class: Engine -> UnCamera.cpp
Notes: Used to bind keys to specific actions. UnCamera.cpp instantiates the input system when the viewport (UViewport) is created.

  • Aliases provide a simple way to associate a key with a series of variables/functions.

Examine the excerpt below. When the LeftMouse is clicked, the Fire Alias is triggered. This will in turn cause the bFire input variable to be set to true and the Fire exec function in the PlayerController.


[Engine.Input]
Aliases[0]=(Command="Button bFire | Fire",Alias=Fire)
Aliases[12]=(Command="ActivateItem",Alias=InventoryActivate)
LeftMouse=Fire


IniFilesTutorial - r1.12 - 06 Mar 2003 - 16:28 GMT - Copyright © 2001-2003 Epic Games
Unreal Developer Network Content by those crazy Perilith guysSite design and art by 2 design