Sniper's Paradise!
Portal HUD
class PortalsHUD extends UnrealHUD;
// This is a subclass of UnrealHUD which adds portals to your view, // you could also subclass UT's ChallengeHUD to add the portals in UT.
function PostRender(canvas Canvas) { // A function called DrawPortal will be used four times to create // four extra views. DrawPortal is a function of the Canvas. Here // is the function definition: // Canvas.DrawPortal(int X, int Y, int Width, int Height, actor CamActor, // vector CamLocation, rotator CamRotation, // optional int FOV, optional bool ClearZ); // // Note: (this is for Unreal 224- the problems may be fixed in later verisons) // // - Sprites are reflected from the right side of the screen to the left, and // from the bottom of the screen to the top, so it is best to use DrawPortal // at the top-left corner, or taking up the whole top or whole left of the // screen. // // - The player's mesh won't display unless the player's bBehindView is True // (you can type "behindview 1" and "behindview 0" in the console to turn // the behindview on and off) // // - The sound is only calculated for the player's main camera and not for the // extra views. // // - The CamActor parameter currently doesn't do anything, but you need to put // in a valid actor there so that the script compiles. // // - ClearZ specifies whether the Z-buffer should be cleared or not- this doesn't // seem to make any difference. // // - The portals do not resize and reposition themselves when you adjust // the screen-size using + and -. // // - Parts of the portals which are not part of the world are not visible // (instead of being black) to see this in action, move into walls // while watching the "facing player cam" portal.
local Projectile projectile1, proj; local Pawn pawn1, p; local rotator CirclingRotation;
projectile1 = None;
// Pick the last found projectile (the newest one) foreach AllActors(class'projectile', proj) projectile1 = proj;
pawn1 = None; foreach AllActors(class'Pawn', p) // If the pawn is not the player and is not a HorseFly // (portals using individual FlockPawns such as HorseFlies crash // Unreal for some reason). if (p != owner && !p.IsA('FlockPawn')) // pick the last found pawn (the newest one) pawn1 = p;
// Setup the font Canvas.Reset(); Canvas.Font = Canvas.MedFont; Canvas.DrawColor.r = 255; Canvas.DrawColor.g = 255; Canvas.DrawColor.b = 255;
// Projectile cam if (projectile1 != None) { // Portal's starting X // (the number of pixels from the left side of the screen) Canvas.DrawPortal(0,
// Portal's starting Y // (the number of pixels from the top of the screen) 0,
// height of the portal (30% of the total screen width) Canvas.SizeX*0.3,
// width of the portal (30% of the total screen height) Canvas.SizeY*0.3,
// the camera actor // it doesn't seem to make any difference what you put here, // as long as it is a valid actor self,
// the location of the camera (40 units behind the projectile) projectile1.Location -40 * vector(projectile1.Rotation),
// the rotation of the camera projectile1.Rotation,
// the field of view angle of the camera (optional) 90);
// Display the title for the portal Canvas.SetPos(Canvas.SizeX*0.02, Canvas.SizeY*0.05); Canvas.DrawText("Projectile Cam");
// Display the name of the projectile Canvas.SetPos(Canvas.SizeX*0.02, Canvas.SizeY*0.25); Canvas.DrawText(projectile1.name); }
// pawn cam if (pawn1 != None) { Canvas.DrawPortal(Canvas.SizeX*0.7, 0, Canvas.SizeX*0.3, Canvas.SizeY*0.3, self, pawn1.Location, pawn1.Rotation);
// Display the title for the portal Canvas.SetPos(Canvas.SizeX*0.72, Canvas.SizeY*0.05); Canvas.DrawText("Pawn Cam");
// Display the name of the projectile Canvas.SetPos(Canvas.SizeX*0.72, Canvas.SizeY*0.25); Canvas.DrawText(pawn1.name); }
// facing player cam // these two portals turn on if behindview is on if (PlayerPawn(owner).bBehindView) { Canvas.DrawPortal(0, Canvas.SizeY*0.7, Canvas.SizeX*0.3, Canvas.SizeY*0.3, self,
// Start at the player's location and move 100 units // in the direction in which they are facing. owner.Location + 100*vector(owner.Rotation),
// Make the camera have the opposite rotation to the player // by converting the rotation to a vector, inverting the vector, // and converting the vector to a rotation. rotator(-vector(owner.Rotation)));
// Display the title for the portal Canvas.SetPos(Canvas.SizeX*0.02, Canvas.SizeY*0.75); Canvas.DrawText("Facing Player Cam");
// Circling player camera // Begin with the player's rotation, CirclingRotation = owner.Rotation;
// look down, CirclingRotation.Pitch -= 8000;
// and rotate every 10 seconds. CirclingRotation.Yaw = (Level.TimeSeconds*65536) / 10;
Canvas.DrawPortal(Canvas.SizeX*0.7, Canvas.SizeY*0.7, Canvas.SizeX*0.3, Canvas.SizeY*0.3, self,
// Start at the player's location and go backwards 60 units // in the direction of the circling rotation. owner.Location - 60*vector(CirclingRotation),
// Give the camera the circling rotation CirclingRotation);
// display the title for the portal Canvas.SetPos(Canvas.SizeX*0.72, Canvas.SizeY*0.75); Canvas.DrawText("Circling Player Cam"); }
// Draw the menu and UnrealHUD on top by calling the PostRender // function in our parent class. Super.PostRender(Canvas); }
class PortalsGameInfo extends UnrealGameInfo;
// In order to have players use the new HUD with portals just make // a new gametype, and set the HUDType variable to the new HUD class.
defaultproperties { HUDType=PortalsHUD }
All logos and trademarks are properties of their respective owners.
Unreal™ is a registered trademark of Epic Games Inc.
Privacy Policy
Website by Softly
Powered by RUSH