Now its time to set up Unreal Tournament to build your project. First things first, you need to understand how UnrealScript uses packages.
Packages are collections of game resources. The resources can be anything, Textures, sounds, music, or compiled game code. The package format is the same for all resources and multiple resource types can be mixed in a package. For the sake of sanity, Unreal Tournament splits up packages into resources. The textures directory contains packages with textures, the sounds directory contains packages with sounds and so forth. Even though these packages have different suffixes (.utx, .uax, etc) they are still the same kind of file.
You are going to be dealing with .u files, or code packages. Code packages primarily contain compiled UnrealScript, but may also contain textures and sounds that the code depends on.
UnrealScript is an object oriented language. If you aren't familiar with OOP, now is a good time to take a detour and read my guide to object oriented programming. Here is the link: http://www.orangesmoothie.org/tuts/GM-OOtutorial.html. This document is fairly old, but still a good resource.
Since UnrealScript is object oriented, you won't be editing any of the original source. This is different from Quake, where you edit the original source and then distribute a new DLL. In UnrealScript, you will subclass the classes that shipped with Unreal Tournament, modifying them to suit your needs.
So lets make a package. I'm going to refer to our test package as
MyPackage but you will want to call it the name of your mod. Where I say
MyPackage you'll want to replace with your own package name. Make a directory in your Unreal Tournament directory called MyPackage. Underneath this directory, make a directory called Classes. The UnrealScript compiler looks in the Classes directory for source files to build.
Now, edit UnrealTournament.ini and search for
EditPackages=. You'll see a list of all the Unreal Tournament packages. Add your package to the list:
EditPackages=Core EditPackages=Engine EditPackages=Editor EditPackages=UWindow EditPackages=Fire EditPackages=IpDrv EditPackages=UWeb EditPackages=UBrowser EditPackages=UnrealShare EditPackages=UnrealI EditPackages=UMenu EditPackages=IpServer EditPackages=Botpack EditPackages=UTServerAdmin EditPackages=UTMenu EditPackages=UTBrowser EditPackages=MyPackage
Lets take a break and figure out what all those packages are for!
- contains fundamental unrealscript classes. You won't need to look at the stuff in here much at all. Notice that Core, like many .u files, has a related DLL. The DLL contains the C++ part of the package.
- is where things get interesting. You'll soon become very familiar with the classes in engine. It contains the core definitions of many classes that will be central to your mod. GameInfo describes basic game rules. PlayerPawn describes basic player behavior. Actor describes the basic behavior of UnrealScript objects.
- contains classes relevant to the editor. You'll never need to mess with this, unless you become a totally elite hacker.
- contains the basic classes relevant to the Unreal Tournament windowing system. This is a good place to research how the system works if you want to add complex windows and menus to your mod.
- contains the UnrealScript interface to the "Fire Engine." The fire engine is the code that makes all the cool water and fire effects in UT.
- contains classes for putting a UDP or TCP interface into your mod. We use this for the IRC interface in the game, among other things.
- contains classes for remote web administration.
- contains the core classes for the in game server browser.
- contains all the code from the shareware version of Unreal. Nalis galore!
- contains all the code from the full version of Unreal. UnrealShare and UnrealI are included in UT because some UT code is based on classes in these packages. There is a LOT of content here you could use for your mod.
- contains any menus for UT that don't depend on Botpack.
- contains the GameSpy querying interface.
- is the soul of the new machine. It contains all of the game logic for Unreal Tournament. There are tons of kick ass toys to play with. This is where a lot of your research time will be spent.
- contains Unreal Tournamnt specific web admin code.
- contains UT menus that require content from Botpack.
- contains browser code that requires content from Botpack.
Notice that the order matters here. This is the order in which the compiler will load the packages. TournamentGameInfo in Botpack is a GameInfo (UT), so in order for the compiler to build that code, it needs to have Engine loaded. Your mod should go at the end of the list to benefit from all the code in the previous packages.