| Home Page | Recent Changes | Preferences

Compiler Errors

The warnings and errors described on this page are generated only by the compiler. If you need information about logged in-game warnings see Log Warnings.

The Ucc Make commandlet outputs warning and critical error messages in the form

 <path and filename>(line number) : error message

Usually the problem can be found by opening the specified file and looking at the specified line number. Exceptions are missing declarations or braces further up in the file or missing declarations in a superclass (if it's part of your code). The Wiki recommends the UMake compiling tool :D.

Warnings

Warning, 'variable name' obscures 'variable name' defined in base class
You declared a class variable with the same name as a class variable of a superclass. This will obscure the variable in the superclass so you can't access it in the code of your class anymore.
Warning, 'variable name' - unreferenced local variable
A function declares a local variable but doesn't use it beyond that – you may as well remove it if Wiki logo YouArentGonnaNeedIt
Warning, function name - Missing return value
The function is declared as returning a value, but there's no return statement in the function. The default value of that variable type will be returned (e.g. false, 0, "", None; also see Variable Syntax)
ExecWarning, Reference to deprecated property 'variable name'
You are using a variable marked as deprecated in your code.
Warning, Class names shouldn't end in a digit
This warning appears harmless enough. Classes with names ending in a digit (IE BloodFX2) seem to work fine.

Syntax Errors

General Structure

Bad class definition 'class name'
In UT2003, the most common cause for this error is that you accidentally used "expands" instead of "extends." The old keyword "expands" is not supported anymore. (It has been considered deprecated for a long while already.)
Superclass class name of class other class name not found
The superclass of one of your classes couldn't be found. Check the class header of the second class for typos. If the superclass is in the same package also check its class header, if not check the Game Ini File's EditPackages lines for missing packages.
Unexpected end of file at end of class
This is usually caused by one or more missing "}". This error can be quite annoying in large classes. Most of it is prevented by proper code indentation and (what experienced coders frequently do) writing both the opening and the closing brace at the same time and then filling in code between them.
Unexpected 'defaultproperties'
The default properties block can only be used outside of UnrealEd. Within UnrealEd, they have to be set from the Actor Classes Browser interface; hidden variables (not declared to show up in any of the property groups) can have their defaults set via the UnrealEd console. Use UCC Make instead of UnrealEd to compile your classes if you want to use this feature.
Unexpected '} or identifier'
This is caused by one or more missing "{" or too many "}". See suggestions above.
Call to 'function': Type mismatch in parameter number
One of the parameters in your function call doesn't have the right type and can't be automatically casted to it. Look up the original declaration of the function (in the original UnrealScript source code or here on the Wiki) and double-check against the types of the values you're actually using.
Internal fixup error 0
This error occurs when using break in an if statement inside a case block.
'Else': Bad command or expression
Make sure there is an If right before the mentioned else. If that If block executes more that one line of code, make sure the block is enclosed in braces. See Flow Syntax.
'Else If' is not allowed here
'Else' is not allowed here
Most likely you have the wrong number of braces after an If statement.
'class' is not allowed here
Generally caused by having your class statement in the wrong place. However, I got this error as well in a switch statement by putting something after default, like so:
switch( CameraMode )
{
  case CAM_FocusFollowLOS:
//  ... lots of stuff skipped here
  default:
  case CAM_Still:
    break;
}
Bad variable or function 'name' in replication definition
The variable or function isn't declared in this class. Check for spelling errors and make sure the specified variable or function isn't already declared in a superclass.
Error, 'class': Limitor 'name' is not a class name
The class name in class<class name> does not point to an existing class. Make sure that the specified class is loaded at the time the script is compiled.
Can't find Class 'class name'
This error can also occur for Textures, Sounds, Meshes, etc. Make sure the specified class is loaded at compile time by either adding its package to the EditPackages above your package's entry or using an #exec OBJ LOAD line.
Package1.ClassName's superclass must be Package1.SuperClassName, not Package2.SuperClassName
I got this weird error message when compiling two packages with similar class structures. Package1 contained a class ClassName with the superclass SuperClassName (both in Package1) and Package2 contained the same classes. Package2 was compiled before Package1 and the error occured during parsing of ClassName in Package1.
Always change the class names when copying them from one project to another. It's fine as long as you compile them seperately, but as soon as you need both of them problems like this start occuring.
Unterminated string constant
This error occurs, when the closing double quotation marks for a string are missing. Note that while strings may contain line breaks, they may not span several lines in your code. Use the Chr function to generate the line break characters if you need them.
BEGIN OBJECT: name objectname redefined.
This error occures if two or more objects declared in the default properties of the same class have the same name. The objects must have unique names.
redundant data: defaultproperty declaration
You get this error when you redefine the default value of a property in the same class, like:
defaultproperties
{
  somearray(0)="this will be reported by the compiler"
  somearray(0)="this won't be reported"
}

Foxpaw: I accidentally did something similar, but the second variable was reported, not the first. However, since the variable in your example is an array, it may be treated differently. My code was (trimmed down a bit):

defaultproperties
{
  Skins(0)=Texture'PlayerSkins.JuggMaleABodyA'
  Skins(1)=Texture'PlayerSkins.JuggMaleAHeadA'
  CollisionRadius=+00050.000000
  CollisionHeight=+00050.000000

  CollisionRadius=+00034.000000
  CollisionHeight=+00078.000000
}

In this code it reported that the 34 and 78 were the redundant data.

Missing '(' in 'Remove(...)'
A dynamic array's Remove method expects the index of the first element and the number of elements to be removed in parentheses, like "Remove(2,4)".
Error, ArrayCount argument is not an array
The syntax ArrayCount(arrayname) only applies to static arrays. Use arrayname.Length for dynamic arrays instead.
Map are not supported in UnrealScript yet
You felt like experimenting, huh? :) The map variable type isn't supported in UnrealScript.
FScriptCompiler
:CompileSecondPass : There's actually quite a string that acoompanies this, but this part should signal you that this is what you've got. You did something that the compiler can't handle but Epic never imagined you'd try. I got this error from trying to use an unconditional replication. I wanted this function to be replicated to the other party regardless of which machine it originated on, so I tried: reliable AddAction,RemoveAction; This will generate the above error. You MUST use the if part of the replication statement even if it will always be true. There isn't any way to know exactly what is causing this error in your code, but by looking at the ucc.log, you can at least determine which class the unexpected error was encountered (it will be the last class listed prior to the stack trace).

Functions

Redefinition of 'function name' differs from original
When overriding functions you are not allowed to change the return type, the number or type of parameters or some of the function modifiers, e.g. static functions must stay static, public functions can't become protected. (E.g. simulated or native functions can become non-simulated or non-native in subclasses though, because those keywords only apply to the actual implementation in that single class.)
Functions can't be overloaded in UnrealScript.
'function name': too many parameters
In UnrealScript functions can have a maximum of 16 parameters. If you need more parameters you will have to put them in a struct or array and pass that to the function.
Function 'function name' specifiers differ from original
This error occurs when you try to override a final function or try to override a public function with a protected or private one or a protected function with a private or public one. (see Function Syntax)
'identifier' conflicts with 'other identifier'
You can have only one function of the same name within the same state of a class, and you can't have variables and functions with the same name in the same class at all. Rename or remove one of the conflicting identifiers.
Can't call instance functions from within static functions
Static functions can only call other static functions. Check if your function really needs to be static or whether you forgot to declare the other function as static.
You can also get this error when trying to call a non-static function via the class'SomeClass'.static.FunctionName() syntax.
Bad preoperator definition
Your declaration of a preoperator is invalid. This is most often caused by attempting to set a priority for a preoperator, as preoperators and postoperators do not take a priority value. See Scripting Operators for the proper declaration.
Bad postoperator definition
This is the same as "Bad preoperator definition," but for postoperators.
Unknown Function 'function name' in 'Class Package1.ClassName'
This error comes up when your code attempts to call a function that does not exist. You may have forgot the parenthesis when using the super keyword to call a function that have no parameters. This can also be caused by forgetting the cast on an object reference. Sometimes it is also caused by a misspelled function name.
Function name mismatches delegate delegate name
You tried to assign a function to a delegate property, but the function's parameters and/or return value don't match the delegate's parameters and/or return value.
Delegate assignment failed
You tried to assign a function to a delegate property, but the function's parameters and/or return value don't match the delegate's parameters and/or return value.

Variables

Can't assign Const variables
You are not allowed to assign class variables declared with the const modifier. (See Variable Syntax.) Instead find a native function which can set this variable. (e.g. SetDrawScale() for the DrawScale property)
Error, Missing '>' in 'class limitor'

I got this problem with the following code:

var array<class<WeaponFire>> WFCs;

which was easily fixed by changing it to the following:

var array<class<WeaponFire> > WFCs;

Presumably, it parses ">>" as an operator and then can't find the closing ">".

Can't save class: Graph is linked to external private object object
One of your classes is making a reference to an object in another package without the RF_Public flag set. This is not permitted in Unreal Packages. Check your class for references to private or protected variables in other classes or to other object constants. This error can also occur if you reference a protected variable in a superclass *if* your derived class resides in a different package from the class where the protected member is declared (even though this is technically supposed to work).
Enums can only be declared in class or struct scope
Like the message says. Enums can't be declared in functions or operators.
Variable declaration: 'variable name' already defined
You tried to declare two variables with the same name in the same function.
Expression has no effect
Expressions like Int1 + Int2; have no effect, i.e. they don't change anything when not assigned to a variable. This error can also be caused by using an incorrect syntax for assigning values to array elements like anArray(0) = anything; (the correct syntax is anArray[0] = anything;)
Unrecognized member 'variable name' in class 'class name'
You're attempting to use a variable name that is not defined as a global variable in class class name. This usually occurs when you've typecasted a class variable, such as PlayerPawn(P) where P was defined as a Pawn. In this situation, at the line this error mentions, you've probably forgotten to typecast your P variable.
Unrecognized type 'variable type'
The class, enum or struct you wanted to use is not declared or not visible from this point. Also check for typos.
Type mismatch in 'operator'
The variable type you specified doesn't match the type the operatore requires and can't be automatically casted to the required type.
Type mismatch in 'If'
Similar to the type mismatch in operator. The condition must be a boolean value, it will not be typecasted automatically. Often the use of = instead of == causes this error.
Unrecognized variable 'variable name' name in replication definition
You tried to replicate a variable or function which was not declared in this class. Check for typos.
Bool arrays are not allowed
Well, they are not allowed. :) Use byte arrays instead.
Can only assign individual booleans, not boolean arrays
You tried to assign a static array to another static array. This message always says "boolean" although you can't even declare boolean arrays. ArrayOne = ArrayTwo is only allowed for dynamic arrays. Instead use a loop and assign element by element.
Variable is too large (x bytes, 255 max)
I got this message while compiling the following line: "BanList.Bans[0].Used = True;", Bans[] is an array with 50 entries of type BanRecord, a structure I defined with some simple members like "string Nick;" and "bool Used;". Does anyone know exactly what this means and what to do about it? Just to be clear, the struct works just fine when accessed from within the BanList object itself. (see discussion on bottom of page).
Arrays within arrays not supported.
You can't use declarations like "array< array<string> >", otherwise the compiler throws this error. You could however create a struct with an array as the only element and create an array of this struct.
ObjectProperty 'Property Name' : unresolved reference to 'Some Texture or Something'
This is usually caused by having a reference to a texture or other resource that is spelled incorrectly, you forgot to create, or something similar. However, this can also have an interesting cause: If the texture/whatever package contains a resource of a type that is not in a package above this one. (IE you made a custom Material class and the package has a material of that class in it, and the code for that Material class hasn't been compiled yet) then the entire package will fail to load.
Variable declaration variable name: Bad or missing array size
You have to specify a numeric value as the size of a static array. It seems in UT the compiler doesn't recognize constants as the array size, but this works in UT2003. Also remember that you have to specify an integer value as the array size and the largest positive integer number UnrealScript knows is 2147483647. (Use the constant MaxInt if you can't remember this value, but why the heck would you create a static array this large?)

Foxpaw: It wouldn't let me use even 65536 elements in a static array. I needed the former number because I wanted to make something like a trig table, only for coordinate rotation instead of regular trig.

Wormbo: Try 65535 (maximum unsigned short) or 32767 (maximum signed short). What about using a dynamic array instead?

Foxpaw: I considered that, but then I figured that a dynamic array that large probrably would not be allocated a contiguous block of memory (unless it was a static array) and so there would be a lot of skipping around.

Variable 'variable name' already has a replication definition
The variable appears more than once in the replication block. You can specify only one replication statement per variable.
'struct': Expecting 'Var', got 'identifier'
Structs have to be declared in a certain way and all delcarations within the struct have to begin with var. See also Variable Syntax.
Invalid property or function call on a dynamic array
Dynamic arrays only have three properties and methods: Length, Insert() and Remove(). See Variable Syntax for details. The most common cause of this error is attempting to do something to an element in an array and forgetting the array index delimiter. For example, doing something like MyArray.bDeleteMe instead of MyArray[i].bDeleteMe .

Typecasting

Cast from 'class name' to 'other class name' will always fail
You're attempting to perform a typecast which will always fail because the class you're casting to is not a subclass of the variable's class. (That's the case, for instance, if you try to cast a variable of type class<Something> to an object of a different class.)
Cast from 'class name' to 'other class name' is unneccessary
other class name is either the same class as class name or a superclass of it. This kind of typecasting is not neccessary.
No need to cast 'property type' to itself
When a property already is of e.g. type int there is no need to cast it to int again when using it. This error also occurs when you work with a "subclass" of a struct (e.g. plane extends vector) and try to cast it to its "superclass" (e.g. vector(aPlaneStuct)).
Can't convert 'property type' to 'other property type'
This error occurs when you try to typecast between incompatible variable types like e.g. ObjectInt ("ObjectProperty to IntProperty") or vectorfloat ("StructProperty to FloatProperty").

Exec Warnings

ExecWarning, Import Texture name from filename failed
ExecWarning, Failed factoring: NEW SOUND FILE=filename PACKAGE=packagename NAME=name
Usually these errors are caused by missing files or typos. Check the spelling of the file name and make sure the file really is where filename points to. Remember that the UT\MyMod directory is the base for specifying file names in #exec lines.
Failed loading package: Can't find file 'filename'
The package you specified in an #exec obj load line could not be found. Check the spelling of the file name.
ExecWarning, Bad MESH LODPARAMS
ExecWarning, Bad MESH ORIGIN
ExecWarning, Bad MESH SEQUENCE
ExecWarning, Missing meshmap
ExecWarning, Missing meshmap, texture, or num (MESHMAP=meshmap name NUM=number TEXTURE=texture name)
All these errors can be caused by a missing file for the mesh. Check for typos and check the log for details about which file is missing.
The last error can also be caused by a missing texture. Make sure the texture is either imported or the texture's package is loaded before assigning it to a mesh.
Texture dimensions are not powers of two
Can't find file 'texture file' for import
path and filename of class file(line number) : ExecWarning, Import texture texture name from texture file failed
These errors always show up together. They are caused, like the message says, when your textures are not sized in a power of two (i.e 32x32, 64x128, etc.).
Unknown property in defaults: the line in defaultproperties
Mostly the variable is not declared or there are spaces around the "=". Also see Default Properties.
Warning: Failed to load 'package': Can't find file for package 'package'
Warning: Failed to load 'texture package': Can't find file for package 'package'
Warning: Failed loading package: Can't find file for package 'package'
Pingz: I'm getting these warnings from a single #exec statement in my project which intends to load a texture package. The package does exist and the url is correct. As a test i deleted the texture package file and the warning changed to the correct Can't find file 'texture package' message. Anyone got a clue as to what this means? Please replace my comment here with some sort of explanation.

Bizarre Compiler Errors

Compiler Hangs/Freezes
This is obviously a difficult type of error to troubleshoot. Simply put, the compiler simply ceases compiling, generally as soon as opening your package or while it is "Analysing..." I'm not certain what causes this, generally I remove classes from the package until eventually it stops doing it, then see which classes it hangs with and which it does not to help isolate the problem. I've found that sometimes I'll accidentally make my classes extend themselves or extend their own subclasses (a result of not paying attention) and this will cause this type of problem. Any further information on what specific conditions can cause this would certainately be appreciated.
Compiler suddenly drops back to DOS prompt/whatever
This is a weird one. It compiles as normal, and while in the "Parsing" section, simply stops. No error message, nothing. Just drops back to the DOS prompt. UCC.log ends mid-comment. The problem turned out to be a struct that I was using – which contained an array of that same struct. The compiler is capable of warping its head around that notion but if you try to actually declare a variable of that struct it doesn't know what to do – kind of like infinite recursion.

Related Topics

Discussion

Tenative answer here... gurus feel free to confirm or deny this:

Variable is too large (xxx bytes, 255 max)
These occur when you try to access a data structure that is greater then 255 bytes from another object.You might only be trying to access a little bool but if that bool is part of an array of structs whose total size is bigger than 255 bytes then you're not going to be able to code stuff like:

bMyvar = otheractor.bigarray[i].bTheirVar ;

Without the compiler choking and giving that "context: variable is too large" error.

To work round this you can code a method into the object that contains the large structure that returns the element you're after (or, if the object is part of a package you can't recompile, then make a subclass and impliment the method there) like this:

// this is in the actor that contains the large array you need to access

function bool checktheirvar(int index)
{
  return(bigarray[index].bTheirVar);
}

// and this goes in the other object that's trying to access that data

bMyvar=otheractor.Checktheirvar(i);

El Muerte TDS: afaik the variable too large only happens with static arrays and structs, so when you use dynamic arrays it won't happen. With dynamic arrays only a pointer it passed, while with static arrays and structs the whole array/struct will be passed. Yes dynamic arrays are slower, but with a big array it doesn't matter much.

Mychaeel: "Dynamic arrays are slower"? Only if you count adding and removing elements, but that's plain impossible with static arrays. Accessing existing array elements is just as fast as with static arrays.

JoeDark: Accessing existing array elements in a dynamic array is only as fast as a static array if they are handled like Vectors in Java where it is actually a static array disguised as a dynamic array. If it's done as a linked list then access is O(n) compared to the static array's O(1) access time so static access is obviously faster, though unless your dealing with a large n not that much faster.

Foxpaw: Well, there's more than just two possible implementations of the dynamic arrays. The Unreal engine is chock full of caching schemes, tables, and other methods of storing and retrieving data that are far more complex than what one would generally assume of the implementation, and render speculation about the number of operations required for a given operation shaky at best. I wouldn't be surprised if static arrays and dynamic arrays are both stored in a relational database and looked up that way. The only way to really tell which is faster is to time them, but even that wouldn't really be accurate, because there's other stuff to consider.

For instance, if the implementation is as you suggested, (block of memory for array, linked list for dynamic arrays) then you would be doing a great number of operations on the stack. Anyways, I don't know how dynamic arrays or even static arrays are implemented in the Unreal Engine, but I'd question the notion that dynamic arrays are a linked list - because when you pass one to a function you get a duplicate array, not a pointer into an array.

JoeDark: Fair enough, esp. because uscript is an interpreted language arrays might be implemented any number of ways, including relational databases ;)


So why don't try

var array<mystruct> bigarray;

Zedsquared: ok, thanks, cool for UT2003, but UT dosen't properly support dynamic arrays does it? Anyone know any other way around this in UT classic?

Mychaeel: Other than an accessor method, no.

Foxpaw: There is a way around this and it is very graceful, iffin you ask me. It uses a little thing called a linked list which is detailed elsewhere on the Wiki.

Script serialization mismatch

This is an Error I'm getting while trying to compile with UMake, using the standard directories stated in the compiling with UCC page. I'm basically using the Bulldog scripts as REF.. changing the Tex, Models, and classes names..

Parsing WarthogHeadlight

Script serialization mismatch: Got 0, expected -2147483612

History: UStruct::Serialize <- (Class WHSkins.TexAlignerPlanar0) <- UState::Serialize <- UClass::Serialize
 <- (Class WHSkins.TexAlignerPlanar0) <- LoadObject
 <- (Class WHSkins.TexAlignerPlanar0 5595020==5595020/5939846 5594999 16) 
<- ULinkerLoad::Preload <- PreLoadObjects <- UObject::EndLoad <- UObject::LoadPackage <- UEditorEngine::SafeExec 
<- (LOAD FILE=WHSkins.utx) <- UEditorEngine::SafeExec <- (OBJ LOAD FILE=WHSkins.utx) 
<- FScriptCompiler::ProcessCompilerDirective <- Directive <- FScriptCompiler::CompileDeclaration 
<- FScriptCompiler::CompileStatement <- FirstPass <- TryCompile <- FScriptCompiler::CompileScript 
<- (Class Halo.WarthogHeadlight, Pass 0, Line 1) <- MakeScript <- MakeScript <- MakeScript <- MakeScript 
<- MakeScript <- DoScripts <- UEditorEngine::MakeScripts <- UMakeCommandlet::Main

Exiting due to error

Wormbo: The error message itself doesn't help solving the problem. At least the WarthogHeadlight class' code should be posted, too.

Adam1972: Actually, I've been hammering away at finding the answer... When I posted the problem I couldn't make

sense of what was happening... This is what I have so far.. I have a texture file called WHSkins.utx, and a mesh file

called WHMeshes.usx That I've created to replace the Bulldog textures and also A Warthog mesh from Halo to replace the

Warthog... So I assume I should be able to basically plug in the diffrences, at least to get it to go. When You look at

the Bulldog.uc ....

#exec OBJ LOAD FILE=..\staticmeshes\BulldogMeshes.usx
#exec OBJ LOAD FILE=..\sounds\WeaponSounds.uax
#exec OBJ LOAD FILE=..\textures\VehicleFX.utx

Adam1972: Then comparing it to my Warthog.uc:

#exec OBJ LOAD FILE=..\staticmeshes\WHMeshes.usx
#exec OBJ LOAD FILE=..\sounds\WeaponSounds.uax
#exec OBJ LOAD FILE=..\textures\WHSkins.utx

Adam1972: You'll see I only changed the filename.. I followed the Instructions on compiling with UCC and figure that the directories inside the project should match what is listed in the UCC compiling page.. so I made a Halo directory and placed a Class, Textures, and Models folder inside. Umake begins to parse the files and when it hits the WarthogHeadlight.uc file which looks like this:

#exec OBJ LOAD FILE=WHSkins.utx

class WarthogHeadlight extends DynamicProjector;

// Empty tick here - do detach/attach in Warthog tick
function Tick(float Delta)
{

}

It returns a WHSkins.utx not found. This script is exactly like the original BulldogHeadlight.uc script. I get the same

with the scripts calling on the WHMeshes.usx.

If I change it to #exec OBJ LOAD FILE=..\textures\WHSkins.utx it still does not find the files. If I place those same 2

files into the UT2003 folder in their respective folders.. Well that's when I get the "Script serialization mismatch"

error. I get no errors associated with the script itself, the only problem I found with that was the "defaultproperties"

that all the decompiled originals have.. my warthog ones seemed to cause errors until I deleted those "defaultproperties".

I'm stumped.... Please help :S

Foxpaw: I don't have UT2003 but I have found something that I think may be the problem. It doesn't surprise me that neither FILE=WHSkins.utx nor FILE=..\textures\WHSkins.utx finds the headlight. The former will look in the base directory of your class, the "Halo" directory, and the second goes up a step then looks in the base directory of your UT2003 install to find a package called "textures." Remember it starts from "Halo," not "Halo\classes." ".." means up one directory. What you need to put to reference "Halo\textures" is "FILE=.\textures\WHSkins.utx." Scratch the last dot, that's just for correct punctuation. ".." means go up one directory, "." means look in this directory. It's basically the same as writing "FILE=\textures\WHSkins.utx" except that the compiler won't accept that, so the single dot is used to denote a subdirectory of the one it starts in.

Languard: Minor correction: UT2003 does accept "FILE=\textures\ect" I don't think having the current directory dot will hurt, but it isn't needed. Not on XP at least, it might be different for the other OS's. As a side note, I'm not sure why they load the object files with exec statments, since it is not needed. I know this because for my sword attachment class, I use an animated mesh that I've placed in the Animations directory, but I do not have any exec statments to load it, and it works fine. The only thing I can think of is maybe it is for performance reasons.

Languard: Correction to previous satement, you do need the load statments. My misconception was due to some really bad coding on my part, and I forgot about this one load statement I had in a wierd spot. Yet another reason why you should always code neatly, even if it is throwaway code.

Foxpaw: Yes, I don't think you need the dots, the problem with the code that was listed was that it had a double dot and was going up one directory isntead of going fromt he current directory. You actually don't need the load statements if you have the thing you were going to load already in another package, so long as you refer to that package at compile-time. I never use load statements and it works fine for me.


Category Troubleshooting
Refactor Me

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

Mapping Topics

Mapping Lessons

UnrealEd Interface

Questions&Answers

Scripting Topics

Scripting Lessons

Making Mods

Class Tree

Questions&Answers

Modeling Topics

Questions&Answers

Log In