| Home Page | Recent Changes | Preferences

SuperApe

SuperApe

Who dat?

SuperApe is another UnrealWiki user with interests in map design and bot AI.

Short bio:

Previous experience map making includes Doom I & II, Quake I & II, Duke Nukem,

and Interstate '76. (<– yes, map making for a vehicle combat game) A few of

those maps got published. And they're probably still on cdrom.com

("bludsprt.wad" is a Doom2 map that comes to mind.)

I have an (old) Dreamcast and the two First Person Shooters I play most often

are Quake III Arena and Unreal Tournament. (Actually, UT kicks butt over Q3A

on the Dreamcast, it's no contest.)

So, when I got my nice new machine at home, I decided to splurge with a

new First Person Shooter. It was April 2003 and UT2k3 was hot. I looked at

the screenshots and was considering it. Then, I saw that it *came* with the

editor and I was sold.

It didn't take long to realize how good the engine is. (With the possible

exception of the use of Projectors as opposed to Dynamic Lighting, it's great.)

And it took less time to find UnrealWiki. What a fine resource. And now, comes

the time when I feel I have things to contribute. To give back to this, my

sole resource, really.

What am I interested in doing with the Unreal Engine (UT2k3, specifically)?

  • I make maps with good playability design.

This is a great editor compared to most map editors I've used. I've got my first

map done (whew!). It's been posted on NaliCity as "Base Ick". It's meant to

address most of the design problems I'm interested in.

  • I have been interested in bot AI since they got good.

(that means, ReaperBots for Q2. Of which the Unreal bots are not-so-distant

cousins; I contacted the ReaperBot author once and found he was working on bot AI

"for a new game called Unreal". That was a while ago.)

This means I tweak pathnodes and spectate a lot of bot only games. Sounds

weird to most people.

  • I did high-end effects animation for feature animated films.

The unreal engine allows many of the same particle systems, physics emulations,

etc. that I'm used to in Maya. So, I'm interested in exploring more of that in

my maps.

  • I had a hankerin' to make a GameTypeTrigger of sorts.

One that checks the gametype and modifies the map accordingly. It would trigger

modifications to paths and move CTF flags, Dom Points or Bomb Spawns into place just

before the game starts. This would make "All-Purpose" maps that could just be renamed

from "DM-foo" to "BR-foo", "DOM-foo", and "CTF-foo".

A large discussion followed on this GameTypeTrigger with Tarquin and Foxpaw and

others. It led to a tangent idea to force player spawning according to

Team Number during Team Deathmatch games. The following code was the result:

//=============================================================================
// GameTypeTrigger.
//=============================================================================
class GameTypeTrigger extends Actor
    placeable;

struct RecognizedGameType
{
  var() class<GameInfo>  GameType;
  var() name             Event;
};

var(GameTypeTrigger) bool bForceTeamSpawn;
var(GameTypeTrigger) array<RecognizedGameType> RecognizedGameTypes;

simulated function PreBeginPlay()
{
  Super.PreBeginPlay();

  if ( Level != None && Level.Game != None && Level.Game.IsA( 'TeamGame' ) )
    TeamGame( Level.Game ).bSpawnInTeamArea = bForceTeamSpawn;
}

simulated function PostBeginPlay()
{
  local int i;

  if ( Level != None && Level.Game != None )
    for (i=0;i<RecognizedGameTypes.length;i++)
      if ( Level.Game.Class == RecognizedGameTypes[i].Gametype )
        TriggerEvent( RecognizedGameTypes[i].Event, None, None );

  Super.PostBeginPlay();
  Destroy();
}

defaultproperties
{
  bForceTeamSpawn=true

  // For example only, there shouldn't be any entries here, they get specified in the editor with a fancy drop-down box and everything!
  RecognizedGameTypes(0)=(Gametype=class'xCTF',Event='CTF')
  RecognizedGameTypes(1)=(Gametype=class'xDoubleDom',Event='DDOM')
}

What am I interested in doing with UnrealWiki?

  • Help out with little holes and repair.
  • Add a bit to the design tutorials and discussions.
  • Ask a bunch of questions. :)
  • Get together with some of the people here to work on those things listed above.

Why "SuperApe"?

  • Well, I ain't SuperMan! :p
  • My deathmatch style is a bit aggressive; to the point of recklessness.
  • It's a name from a song/album I like.

Gameplay Favorites

TeamDeathmatch, Skilled, Auto-adjust skill on

Fraglimit 0, Timelimit 0, MaxLives 9

No weapon stay, Allow weapon throwing

Gamespeed 100%, FriendlyFire 100%, Map Bot Count

Mutators: Delayed Spawn, Slow Motion Corpses

Alternate #1: No Translocators

Alternate #2: No Adrenaline Mutator

Alternate #3: Maximum Player Count

Alternate #4: Gamespeed=33% (slomo 0.33)

Contact Info

Base Ick

This place hasn't seen a maintenance crew since somebody smuggled in a Redeemer. The old geothermal power plants are a little unstable now and the ventalation is shot, but you're welcome to use it. Sorry about the smell.

Concept

I submitted four maps to NaliCity: [BR-Base Ick], [CTF-Base Ick], [DM-Base Ick] and [DOM-Base Ick]. (This is in lieu of a working All-Purpose map, as descibed above.) The maps are virtually identical, except for the GameObjective and other game type-specific pieces.

The idea was to design a map capable of many different bot play styles, based solely on the rules of the game type played. Also since this was my first map, I needed to succesfully create several basic map elements like lifts, triggers, ladders, particles, dynamic lighting, etc.

"Base Ick", obviously comes from the map's original function and scope, which is pretty basic. But, the name Base Ick gave me the idea for a theme of an old, out-of-fashion place with serious health and safety issues. Conveniently, that would allow for rather simple design that would still be in keeping with the theme.

Design

As an All-Purpose map (in training), it needed two sides of equal strength; a symetrical map seemed the obvious choice. A requirement of BombingRun is a third area equally reachable from both sides. The map started with three large rooms.

Q: Why large? Don't you know that you'll ruin your framerate?

A: Yes, I'm aware of how painful it is to see a beautiful panoramic view of a massive firefight, but only at 6 fps. My reasons for large sized spaces within a map are based on the game engine itself. I think about how far you can launch weapons like the Bio-Rifle or a Grenade. I think about how far a player can fall without taking sizeable damage. I think about the size of the explosion of the Redeemer. But, I also consider the variety of gameplay a wider space offers; few things are as satisfying as having to work for that LightningGun headshot with full zoom. Don't worry, I'll try to keep the fps as high as possible.

While on the subject of spacial relationships, I'd like to point out a few things in Base Ick that take advantage of the game engine space. The distance from the floor of either the Blue or Red room to the catwalk opening nearest the Lightning Gun is about the maximum vertical distance a standing player can shoot the translocator. (about 1536 units) The distance from the floor of the catwalk opening nearest the Power Plant to the top of the small mound nearest the JumpPad is the maximum distance a standing player can fall without taking damage. (about 368 units. I can only do it right half the time by walking off the ledge, but bots do it consistenly.) A player at the lowest catwalk opening, standing near the wall closest to the Lower Tunnels, can Dodge (Forward) all the way to the Shock Rifle. (A similar Dodge spot from atop a large mount in the Center Hall will allow you to reach the 'funnel' hole to the Lower Tunnels.) A crouching player can still shoot over the barriers in the Center Hall. (about 48 units) (A discussion on this subject has started on General Scale And Dimensions; Some things that might be handy to know.)

The next element I consider in maps is flow. To help understand good map design flow, I get Zen and kinda Feng Shui with it. While playtesting a map, I'll be looking at the spaces I'm in and thinking about good entrances and exits. The idea is to have more than one "way in" and one "way out" for each spot in the map. That may sound way too simple, but I find it prevents situations like a perfect sniper spot or a dead end. It makes sure that if you know where your opponent is, you'll be able to choose between a frontal assault or a sneaky back way (or more) no matter where he is in the map. Suprise attacks abound in maps like this.

Variety is a designer's best friend. So, I knew that I wanted small spaces, long straights, twisty tunnels or mazes to go along with my large rooms. And because it makes sense with many GameObjectives I also wanted a couple dead ends. (They usually kill map flow, but with proper risk/reward balance they should be challenging instead of frustrating.)

Everybody talks about the Z-Axis but I hear very little said on the subject, if you get my drift. Here's my take. You remember Star Trek II: The Wrath of Khan? (Of couse, you do.) You remember when Khan had the enterprise on the run and they ducked into this space cloud that interferred with their sensors, effectively blinding both ships? (Uh-huh.) You remember Spock's solution to their dilemma?

"His pattern of movement suggests a two-dimensional mode of thinking." –Spock

They stop, lift up a bit, sneak in close behind Khan and blammo! But, I digress.

Unfortunately, that is how I see players play (like Khan), that is how I see mappers map; most of the time. I believe this can be overcome by allowing the variety in your map to include the Z-Axis. Let's say, you're playtesting and you decide, "This area needs a way out". Go ahead and consider the cardinal directions (North, South,...), but don't forget to "look up", or down as in the case of a good escape route. When considering cover (like walls, columns, barriers, etc.), remember to think about players dodging vertical fire as well. Example: A platform suspended in a room not only provides a base to stand on and collect goodies, it also serves as a barrier from enemy fire down below; players can shoot down and dodge. (and vice versa) And with vertical cover, you can even hide from players who don't "look up".

The Z-Axis considerations can also be drawn from basic combat theory. The player above is the one with the advantage, if for no other reason than he can jump down to meet an opponent but his opponent can not jump up. (translocator notwithstanding) So I consider higher places harder to reach, but more desirable places to be in combat.

There were other design considerations I let the game engine dictate. The default sound levels of weapons, footsteps, etc. gave me good benchmarks for setting levels on my own ambient and triggered sounds. The pure satisfaction that can be found from the Karma Ragdoll physics led to strategic placement of railings, beams and spaces between platforms. (I love to play this game with the 'Slow Motion Corpses' mutator on.)

Of course, the nature and tactics used with each weapon helped determine their placement (like placing the Flak Cannon in twisting hallways for good bank shots, or the LightningGun near a couple decent sniper spots), however I was not afraid to place weapons in an unconventional area (like the Bio-Rifle in an open area). I figure part of the fun of this game is learning to use the variety of weapons/fire modes in all the variety of combat situations, so while you might want to use the Bio-Rifle in a tighter space to take advantage of the splash effect, you'll have to duck into the lower tunnels to do it on this map. Maybe then you realize there's another way to use the Bio-Rifle, or you get more accurrate, or you use another weapon, or you just run. I like that it could force players to think a little.

Game type-specific design considerations were suprisingly few and far between. A BombingRun touchdown traditionally results in the death of the scorer, so why not have them just jump into lava? I notice bots will 'punt' a BombingRun ball when they are distressed and near any ShootSpot, I ended up using that in placing ShootSpots for suprisingly interesting results. A Capture the Flag game is the only one where bots need a return AssaultPath, I added a Straight one through the Center Hall. I had best results working on the Deathmatch map, then copying it to BR,DOM and CTF and adding in the unique elements. BombingRun took the longest; more elements, some BSP changes. Capture the Flag was the easiest; just add flags, almost. After that I'd set the GameObjectiveTags for the AssaultPaths. That's about it.

Construction

Those design elements in mind, I connect the two "end" rooms with long corridors, I connect the long corridors with a small network of twisting tunnels. (the lower tunnels) I add passages that lead around these large "end" rooms, acending from the bottom (the lower tunnels) to the top height of the map (the catwalks). I connect the catwalks directly to the "end" room they surround at three points around the room. The third large room sat above the lower tunnels and I connect them. I connect the third room directly to the "end" rooms. I add a dead end space to the back wall of each "end" room. (the bases)

Big (vast) empty spaces need to be filled with usable space. I place suspended platforms in the three large rooms. I add usable cover to the floor of the large rooms as well in the form of mounds and barriers.

The two "end" rooms become the Red Room and Blue Room, with their respective bases and catwalks. The third room becomes the Center Hall.

Although I add a few zone portals at this stage, I leave most of the other zoning work until the end, when I can truely find the bad spots in the map (in terms of fps).

Yep, all those custom meshes were originally BSP. (Can you believe I was actually playtesting with all that as BSP?) Although a painful lesson to learn (Don't make your meshes in Ued.), I did see the difference between BSP and meshes, first hand. And I was able to keep some elements BSP, if it didn't hurt framerate or it looked horrible lighting-wise when I tried it as mesh.

Texturing, what texturing? Although it took me long enough, let's face it: it ain't pretty. My main concern from the start was to use standard textures to avoid installation problems for end users. Other than keeping the texture scale reasonable, I let the lighting and shadow do most of the talking, so to speak.

Lighting was fun. Simple red and blue saturated lights (notoriously taboo, but who cares?) delineate the "end" rooms and a yellowish indoor lighting fill the Center Hall. Simple local white lights fill the tunnels and catwalks. Overall distance fog helped make the place look stuffy and humid from poor ventalation. (However, I was disappointed to see how bright it made all the little holes in the creases of BSP work. Could be used to find holes to fix, though.)

The dynamic lighting was kind of a pipe dream for a while. I was very disappointed with the lack of BSP light occlusion with dynamic lighting. But, I knew I needed the big effect for the map to be true to the theme. I love the end result. And the "lava lamp" globe lights are a nice bonus.

Sounds were the most fun. I use the music from BR-Slaughter because it was the only one that helped make the place "smell bad", if you get me. All the other songs were way too clean and bombastic for this run-down stink hole. The sounds helped all the platforms feel old and rickety. It made some of the tunnels creak and I hope someone is listening intently for their foe when one of these creaks catches them by suprise. Finally, the sounds needed to help give clues to the map's secrets. They needed to consistently point to a reasonable structure for the big effect and the other secrets in the map. I feel I was subtle, but successful.

I was used to using particles like these and I had fun making really cool effects that ate fps like there was no tomorrow. In the end, I managed to balance it pretty well. The JumpPads, for example, needed enough particles to look like a quick puff of steam, but I needed it to be able to trigger repeatedly and rapidly without running out of particles. (Play Invasion and retreat via JumpPads and you'll see why when the monsters jump after you in rapid succession.)

The trigger systems were a source of some frustration, when it came to my trigger door lock. The solution was as simple as a triggered door trigger that is placed at the door itself. (...simple, right?)

The big effect also needed a custom TriggerJumpPad. Tarquin and Foxpaw came to my aid and the result is nice. (Thanks, folks!) :)

Foxpaw and Tarquin also helped me to make a TeamSpawn actor. It forces players of Team Deathmatch games to spawn only at PlayerStarts that match their Team Number. (That actually came about from the GameTypeTrigger discussion; they do kinda go hand-in-hand, as Foxpaw points out.)

I left decorations like the rattling fans until the end, and I didn't use very many as I tried to keep framerate high and filesize low.

Bot AI

I tested to see how far apart PathNodes could be before the paths broke. I used that as a guide for the initial placement to keep the numbers down. As I went on, I would replace PathNodes with other nodes.

JumpSpots were originally placed to give bots safe places to land from great heights, they ended up being great places to translocate to as well. Translocator JumpSpots took a while to work out and I'm still only 90% happy with them. Lower skill bots still have problems translocating due to poor aim and a wide variety of angles to the JumpSpots. (Bots seem to have no problem reaching it from above but miss a lot from below, for example) AssaultPaths came last, as I saw a suprising amount of positive combat behavior without them. (to be elaborated in Problems and Solutions, "Did that bot just psyche me out?")

Starting from a central point (for good Squad grouping), I use four paths to the opposing GameObjective: Straight ahead, to the Left, death from Above and the Back way. These all converge to a single node in front of the opponent's base. Playing around with AssaultPath→Priority and the order in which the PathTags list, I came up with something I'm very happy with.

I wrestled with the idea of giving bots the ability to get the Redeemer. But, I wanted it to be a true secret. (Bots always give away secrets, you know; just follow them around.) Not only are bots notoriously bad about using the Redeemer effectively, but I also had minor problems getting the bots to work my trigger systems. That tore it. My official line on the subject is this:

"Most people don't know how Gorge smuggled the Redeemer in that day. And I'm not telling."

(See Spoiler section below for full disclosure.)

BTW, there was just no way I was gonna make bots activate the big effects.

Problems And Solutions

  • Dead Men Tell Tales

I worked for a time to give the bots a way to the Redeemer. As mentioned, I finally decided not to give them the power to do so on their own. This was decided in part due to the bots tenacious nature. Their ability to go from the most powerful powerup in the map to the biggest gun to the supershield, no matter how hidden or secret it is. Just follow bots around in an unfamiliar map and you'll pick up all the secrets and fruitful routes in no time. Bots give away secrets.

But there's another problem that proves to be a bigger secret killer to Base Ick. When a player or bot is killed and Karma takes over, the Pawn's collision changes with respect to movers. You've probably seen it more than a few times: a bot you mowed down flies back through one of the sticky doors in Flux2, or falls through a lift it was just riding on. It's annoying to see such a big bug in an otherwise neato Engine.

This problem proves devastating to Base Ick. The Redeemer access is supposed to be secret. Even to spectators who can normally fly through doors and lifts, the Redeemer can remain a secret because it is tucked out of the way. But on several occasions during testing, a bot had me cornered near the power plants and I responded in force, only to watch the lifeless body fly through the access hatch, indicating to me and anyone else watching (or dying) where the Redeemer is. At times, the bodies even triggered the emergency hatch release and opened the door for me. Argh!

  • That's too much occlusion!

While working on optimizing the map, I had the opportunity to take each part of the map and optimize step-by-step to see how much each helped framerate during testing. This included taking large BSP decoration and coverting it to the imbedded mesh work. As expected, conversion from even simple BSP objects to meshes significantly increased the speed of the map (like 60%) while decreasing file size (like 30%). However one piece didn't look good at all after Ued's conversion to mesh: the large circular platforms in the bases. I decided to leave this piece as BSP. To help with the framerates, I tried creating an anti-portal, just like the ones used in the Center Hall platforms. It did occlude some of the BSP faces of the spherical room, but to my suprise, it actually lowered the frame rates. I removed the anti-portals and left the bases as BSP. The rooms are simple enough that they only slightly impact framerate as BSP.

  • If Jesus were my developer...

The "big effect" would just be the beginning. With repeated abuse, the power plants would be unable to restart. And without power from those plants, the geothermal forces that drive the base go unchecked and unregulated. What results would be an overflow of the underground magma chambers from the bases, through the main rooms and into the large pits. Lava would rise, crawl and flow in the bases and main rooms until reaching the level just below the lower tunnels. Only the mounds would be sticking up from the floor of the main room; cutting off access to the base for an extended period of time; when the lava would receed and drain. The entire base would become a steamy oven. Older pieces of the base could break off, fall to the floor and crush.

  • Did that bot just psyche me out?

While working on the PathNodes, I had forgotten to place nodes that would help bots escape from a crawlspace under the small platform in the bases. While testing, I saw a bot get caught there and I made a note to fix that on the next pass. I ignored that bot and continued to test; I believe I was playing DoubleDomination. An enemy bot came to that base and cut me down. As soon as the enemy bot touched the DomPoint, I saw from my DeathCam the "caught" bot jump out from the crawlspace and reduce the enemy to ground meat, graceful as could be. This interesting behavior made me decide to keep the crawlspace clear of paths, until I saw bot behavior that actually warranted fixing. But I expected to see that behavior shortly.

Several test games later, playing Capture the Flag, I saw another bot who was in the crawlspace under the platform. I didn't actually see this bot until I had boldly charged into the enemy base, gibbed all defenders, grabbed the flag and was heading out the base. At that moment, a little low on health but feeling good with the flag, that bot sniped me in the back. It was hidden from sight, crouching under the platform. And once again from my DeathCam, I saw the bot merrily crawl out, leap up and return the flag without a hitch.

I saw bots use the crawlspace a dozen or more times. I saw suprising behavior that just flat outweighed any problems with "sticky" bots. That particular pathing bug is now officially a feature.

Other behavior I was happy to see bots doing on their own included intelligent use of all sniper positions and ducking to use cover provided by mounds and barriers. I also expected many more friendly fire deaths when squads are in the longer lower tunnels, but these bots do pretty well.

Final Notes

Man, I love UnrealWiki. I couldn't have finished this map without it. I hope I can contribute as much as I've taken from it, but I kinda doubt anyone could do so.

Gushing aside, thanks to anyone to helped, whether you knew it or not. ;)

I hope the map's secrets aren't kept secret for too long. After all, isn't a perfect secret just something that never happened? (Luckily, someone has finally spoiled the "big effect" in a comment on NaliCity, [DM-Base Ick]. Although, the commenter may not have realized that the DM map was really made for TeamDeathmatch, so it appears to them as more of a novelty instead of a chance to cripple the other Team for a short time.)

Spoiler Section

The following section spoils the two secrets of Base Ick:

1) The smuggled Redeemer can be found inside each power plant. Sounds made by the plants suggest something is wrong; turns out they are running at half power. The right side chamber is not running, due to the Redeemer spawn device stuck inside. (The Tournament roadies have almost a third of the base powered from their own genereators.) By "swiping" the power plant's center control panel, or running into it at a 45° angle left to right, you should be able to hack into the otherwise inaccessible power plant controls and release the door lock to the right side chamber for a few seconds. Open that door and retrieve the Redeemer. (If caught inside the chamber, an emergency release can be reached by double jumping.)

The control panel button is a mover with a very small collision radius; so small that the recessed control panel almost makes it inaccessible. I wanted a button you really had to work on to trigger, so that players are standing in a vulnerable spot (with their backs to the action) for a while in order to get to the Redeemer. (risk vs reward) It also allows causal collision with the panel without unlocking the door.

2) The power plants are still unstable from previous Redeemer explosions; this old base was never designed for such high power weaponry. Power can be knocked out to nearly half the base with a Redeemer hit to a power plant's control panel. This will not only shut off lights in the catwalks and the main globe lights in the big rooms, but the jump pads are also disabled until the Tournament roadies can bring the working half of the power plant back online. (This is the "big effect".)

The disabled jump pads change the game flow in all Base Ick maps. Without a translocator, the Keg o' Health is inaccessible, as are quick routes to the Center Hall and the ammo cache near the power plant. Even a Redeemer inside the disabled plant is inaccessible until power is restored. The team with the disabled power plant is temporarily crippled.

Discussion

Happy fun discussion thread. :D

SuperApe: I've done some major cleaning on the Wiki today. I've just uploaded my maps to NaliCity and I'm feeling a bit giddy. Pass the egg nog. [WebTender.com] :cool:

Dragonmaw: Welcome to the wiki super ape!

SuperApe: Many thanks to all.


Category Personal Page

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