My program doesn't have bugs. It just develops random features.

Legacy:Mod Authoring/Adding A HUD

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

Notice the GameInfo (UT) variable HUDType. This is used to specify the type of HUD (UT) the player will be given if they play your game. DeathMatchPlus uses a HUDType of Botpack.ChallengeHUD. The ChallengeHUD class is the primary HUD for Unreal Tournament. Let's take a look at adding custom HUD elements.

First, create a subclass of ChallengeHUD. Lets call it MyHUD:

class MyHUD extends ChallengeHUD;

Now add MyHUD to your gametype's HUDType. In the defaultproperties set MyHUD equal to class'MyPackage.MyHUD' Remember, you can't see defaultproperties if you are editing UnrealScript from UnrealEd. Make sure you've exported the source classes and are editing using your own text editor like CoolEdit or MS Dev Studio.

A HUD does all of its drawing in the PostRender function. PostRender is called after the world has been drawn and all the models in the world have been drawn. The function passes you a canvas, which is an object that is used as an interface to the player's screen. Add a PostRender function to MyHUD:

function PostRender(canvas C)
{
	Super.PostRender(C);
}

What does the Super call do? It calls the parent class version of PostRender. MyHUD's parent class is ChallengeHUD, so that version of PostRender is called. If you add your custom code after the call to Super.PostRender, you'll be able to add elements to the HUD that will draw on top of all the other HUD elements. If you don't call Super.PostRender all of the basic HUD elements like weapon readouts and so forth will not be drawn.

The Canvas class is defined in the Engine package. You might want to open it up and get a look at its member functions. The ChallengeHUD class is full of good examples on how to draw stuff to the HUD. As an example, lets just draw the player's name on the HUD:

function PostRender(canvas C)
{
	Super.PostRender(C);
	C.SetPos( 0, C.ClipY/2 );
	C.DrawColor.R = 255;
	C.DrawColor.G = 0;
	C.DrawColor.B = 0;
	C.Font = MyFonts.GetBigFont( C.ClipX );
	C.DrawText( PlayerOwner.PlayerReplicationInfo.PlayerName, False );
}

This code sets the canvas drawing position to halfway down the screen and all the way to the left. Next, it sets the drawing color to be a deep red. It then asks MyFonts (the ChallengeHUD font info object) to return an appropriate big font. The font size returned depends on the screen's resolution, so we have to tell the FontInfo class what the X length of the screen is. Finally, we draw the player's name.

Your HUD can be much more complex... adding scrolling features and new types of information readouts. You'll want to look over ChallengeHUD's PostRender function and see how it gets information about the world from PlayerOwner and other related objects. Skillfully changing the HUD can add a whole new look and feel to your modification.


Prev Page: Legacy:Mod Authoring/A First Look At GameInfoSection 11 of 12 – Next Page: Legacy:Mod Authoring/Adding A Scoreboard