

Comments about The Last Fortress, that ridiculous map made by Lord Waffnuffly for the UnrealSP.org 6-week Speedmapping Contest Thing


WARNING: Contains LOTS of spoilers. Don't read this until you've played the map once or twice!


Oh boy. Where to begin. Well, for starters, when this contest first popped up, I decided that since I only had six weeks, I wanted to do something fairly unconventional design-wise, yet still straightforward play-wise. Eventually I got the idea to make a bigass castle, but I decided that I didn't really want to make any interiors. That and there wasn't a lot of time to make a huge castle with interiors. So I made my map gimmick "all outdoors!" Yeah yeah not very exciting really to start with, but the idea started becoming much more interesting as I went on.

I also knew at the beginning that I wanted to make something big, very big, and something jam-packed with action. I don't like to spend a lot of time making a map if it only takes 20 minutes to play. I was going to spend six weeks on this fucker; it better take at LEAST an hour for a first-time run, maybe more on harder difficulties. So I built the most defensive-oriented castle I could think of, and then I stuffed monsters EVERYWHERE. I added literally hundreds of Skaarj to the map, but you don't actually fight quite that many. See, one critical piece of the gameplay pie was the uncertainty I wanted: I didn't want veterans of this map to have any easier of a time than newbies (because I'm such a huge jerk of course). So I gave almost all the monsters an OddsOfAppearing value less than 1.0. What does this mean? This means that you can NEVER, EVER for certain know exactly what kind of force you're up against, and you can never be sure exactly where enemies are hiding out. You might always remember that the windows lining the main trench are full of snipers, but WHICH windows? And which snipers have Eightballs, which have Stingers, and which have the dreaded Rifle? Who knows! That's the joy of programming randomness into the map!

I stuck to that design philosophy for the whole map, save for a few scripted things. But I had a challenge to overcome: the sheer SCALE of the map was bad for gameplay in some ways unless I did things right. See, Unreal's weapons fire ridiculously slow projectiles--pretty much all of them. You're either shooting insta-hit bullets or flying snails with Unreal's arsenal, and I had to take this into account with the huge game space. Then I had a brilliant idea: screw that shit! I'll make my own damn weapons! I built a Biorifle replacement weapon and called it the SK-6 Rocket Artillery Cannon. The SK-6 is an indirect fire, long-range artillery cannon. You can puree almost anything in the map with one shot, and with an incredibly generous splash radius (not including the shrapnel chunks that spew out), it's quite common for you to hit multiple enemies at once. The best part? Incredibly high-speed, long-range rockets. You can literally fire a rocket from the lowest part of the map to the highest and score a direct hit (with proper aim). However, long reload times, a low ammo capacity, and the inherent self-damage hazard are certainly deterrents to using the SK-6 recklessly. No, you need to be REALLY choosy about who gets to eat your fun rockets in this map, because there isn't a lot of ammo around, and what ammo does exist is sorely needed for bigger threats.

I also decided to give a few select enemies SK-6s to make players shit their pants. You see, when you're used to snail-paced Stinger shards or lazy Eightball rockets gradually coming your way from miles off, it kinda shakes things up when a very large, very tough brute starts spamming FAST, MASSIVE EXPLOSION ROCKETS all over the place. If you aren't careful, even the misses can kill you from the sheer amount of shrapnel spraying all over. So that was one big change I added, but I didn't overdo it. There's only a handful of enemies with SK-6s. I also gave some Skaarj Gunners actual SK-6s to use (not just brutes with rockets), but never allowed them to fire directly at the player the first time they see you. See, the SK-6 has such a stupidly high splash radius and such great accuracy that it would be next to impossible to survive a proper SK-6 ambush. To combat this, I just gave the SK-6 gunners absolutely brain-dead accuracy for their first (scripted) shot, giving the player plenty of time to 1) locate the source of the rocket and 2) send one of their own rockets back to prevent further deliveries from the enemy. The end result is a great sense of "HOLY SHIT" combined with a sense of "wow, this actually ISN'T impossible to survive," which is always nice. And it's oh so satisfying to send an enemy's gibs soaring through the skies with the same weapon they just tried to use against you, isn't it?


That about covers gameplay. Technically, I thought for sure I wouldn't have many problems with this map. Oh how wrong I was.

First there was The Leaking Zone. The Leaking Zone (water, too) refused to stop leaking. It took me HOURS to fucking fix this son of a bitch piece of shit zone, and then, after fixing it AT LAST, it would COME BACK AGAIN LATER like the little insufferable shitfucker it was. This zone leaked so many times I am quite certain it has cost me a few months of my life from the sheer rage it spawned in me. Anyway, I finally DID fix it permanently (knock on wood) once I located some rather nasty, yet very subtle geometry problems near it. What caused these little problems?

I've been working with this engine for about half of my life now (scary thought), and yet, it still manages to surprise me with new and exciting bugs, flaws, technical limitations, and outright bizarre crazy shit. One of my greatest sources of grie--ENTERTAINMENT was what I later discovered to be caused by Vertex Editing Mode (thanks a lot, jerkass): not-quite-snapped vertices. Somehow, while vertex editing multiple brushes at once, the vertices became just BARELY unsnapped from the grid (we're talking like 0.001 units here), creating unstable geometry all over the place. The thing is, you couldn't even see this unless you were zoomed ALL THE WAY IN, and even THEN it was hard to be sure. I still have a number of brushes affected by this, but managed to contain the worst issues. Moral of the story? Manually move vertices one by one if you want to ensure they don't get broken for some dumb reason and come back to bite you in the ass later.

Then there was the Node Limit. The dreaded Node Limit. See, this engine is a decade old. It's just not up to the task for some things. I found this out the hard way about three weeks through the contest. The horrible, terrible, awful node limit reared its ugly head and TOOK A HUGE CRAP all over my map, forcing me to aggressively optimize all sorts of stuff. I did not realize that going over 40,000 nodes was so terrible, but now I know: once your map is at *58,000* nodes, you will be lucky if you can even rebuild it anymore. So off I went to optimization land for a few hours one day, and I brought it back down to around 42k after some sacrifices in detail. That was quite an adventure, but again, also a good learning experience. And to think: what if I had planned to do INTERIORS too? I'd have been right FUCKED, that's what. Next time I do a big map, I'm going to plan out its details MUCH more carefully.

But all things said, I DID manage to conquer the BSP faults and get the map into an acceptable state. There are still some nasty flickering HOMs, but nothing anywhere near as bad as before. Thank the shit for that. I also saved my own ass a few times with Autosave and backups. NEVER, EVER FORGET TO KEEP BACKUPS! FOR ANYTHING! One day something WILL go to hell and you WILL save your own ass with a backup, I fucking promise. Computers are god damned evil machines designed to destroy your soul and you need to protect yourself from their horrible, terrible nastiness.

One of the final technical hurdles I encountered was the very last scripted sequence. That big ugly experimental ion cannon has to rotate to four different positions and pause each time. The thing is, you can't just do this with one mover because 1) movers cannot pause at keyframes and 2) you can't HAVE MORE THAN SEVEN KEYFRAMES. SEVEN. That's IT. So if I wanted them to pause for multiple keyframes' worth of time, I was fucked. If I only used 6 keyframes for three rotations, everything was fine--but the goddamn cannon rotated at an absolutely GLACIAL pace (slightly faster than a Razorblade). What to do, what to do! Oh, I know, I'll ask my great buddy UArchitect!

And lo and behold, he showed me the way (yet again). By daisy-chaining movers attached to movers, you could simply have three separate movers do the rotating. Mover 1 rotates 90 degrees, Mover 2 rotates 90 degrees, and so does mover 3. To my credit, I DID have this idea and try it out, but I had the first mover attached to all three at once instead of having A attached to B attached to C attached to D like UA did. Once he showed me what was what, bam, perfect Ion Cannon rotation. I was very pleased. UArchitect has also helped me with countless Unreal Engine things, small and large, from mapping issues to coding issues to Photoshop to 3DS Max to... hell all sorts of stuff. The guy is a certified genius, and I wouldn't have gotten anywhere near as far in this engine without his wisdom and instruction over the years. Thanks again, Bawss.


Near the end of the contest, once the map was mostly getting wrapped up, I knew I needed a compelling plot. So I made one. I decided that I was going to have this set on Na Pali many years past the original events in Unreal, where the Skaarj have established a massive presence all over the planet. Nali freedom fighters (and a few humans) are all but wiped out, with few small cells hiding out in mountain enclaves, just waiting to be overrun. Most of the Sky Islands have been completely assimilated, much like Outpost 3J but on a much larger scale. They are now studded with shield emitters and artillery, both offensive and defensive. The human military is pissed that the Skaarj are doing this (and that the Skaarj knocked on humanity's door), so they have returned in force. But Na Pali is so heavily garrisoned that they can't break through the atmosphere without having their ships torn to flaming bits by anti-starship batteries. So what happens?

I decided to cast the player as some lone human castaway from a crash site (science cruiser shot down by Skaarj years ago). The player's character, presumably, ends up living with the Nali for a while with other survivors--that is, until recently, when the Skaarj have rounded up what few free Nali remained and enslaved them, humans included. As the player progresses, he starts finding logs left by a certain Dr. Morgan - as it turns out, this is one of your colleagues from the ship that crashed a while back. Dr. Morgan writes about the assimilation of the fortress, how it was originally built, and how it was intended to be a final safe place from the Skaarj (but obviously that didn't work out). He befriends one captured Nali, Nak'tcha, and finds out that this guy is nothing short of an ultra-badass Nali Commando sort of guy. Nak'tcha purposefully allowed himself to be captured so he would be brought to the island, intending to later take over the place himself and free his comrades. Nice idea buddy, but there's a few too many Skaarj now even for you.

Anyway, Dr. Morgan is forced to work on building an experimental tarydium-powered "ion cannon" (an ionizing radiation emitter, to be technical; it doesn't spew ions--it fires an intense beam of radioactive particles that ionize the target material, causing devastating damage Anyway!) in the fortress. At first he is reluctant to do so, but it becomes clear that he isn't going to stick around long if he doesn't cooperate. Surprisingly, when he does cooperate, so do the Skaarj. They actually let him do his thing pretty much undisturbed for the most part--very uncharacteristic of Skaarj. Why? Because the Skaarj are busy, VERY busy. You see, those humans outside, they want in, and the Skaarj want them to stay out. So to prevent them from slipping through the skies, the Skaarj have to patch up ALL their weak spots--including this one fortress. And, as you might have figured out already, this one fortress is in fact a sky island, too--something the first-timer might not realize until they have gotten far enough into the map to notice the skybox, and that's when the whole scenario starts becoming much clearer.

Anyway, Dr. Morgan realizes that the ion cannon they want him to work on is located in a very conspicuous location: the top of the highest tower of the fortress, with a clear view of four enemy sky islands. He and Nak'tcha hatch a plan to get the Nali Commando Badass off the island, down to the surface, and up a mountain (but hey he can do it, he's a fucking machine), where he will deploy a target painter. Meanwhile, Dr. Morgan secretly installs a backdoor function to let the experimental cannon gather targeting data from the target painter (once deployed). He intends to use it to destroy the enemy islands' obelisks, effectively sinking them. Once Nak'tcha escapes the island, his little scheme is discovered and locked out. That's when you, one of Dr. Morgan's friends, come into the picture. Your job is to finish what they started, and that's just what you do.

Once the enemy sky islands are destroyed, in comes the huge fucking doomsday assault fleet from orbit, tearing Skaarj shit up all over the place now that they have a big patch of emptiness to fly through without getting shot up. I didn't have time to script that into the map, but it's pretty obvious that that comes next. So that's about it! You are a big hero and stuff. Yay!

I think that covers it. If you read all this, for serious, mad props to you. I didn't expect to write this much commentary, but hey, I spent six weeks on this gatdam map, so I figure I might as well explain the heck out of it! Yeah! Anyway the map is more fun than this file so go play that again I guess


THE END
