Howdy folks, and welcome to the first developer’s diary after my long hiatus. I am getting back to work on the mod, shaking off the rust, and working out the kinks. I have been super busy the last few weeks, hitting my modding to-do list hard and getting a ton done! With the semester done and things calming down a little bit here at Grey Manor, I have finally been able to catch my breath and get back to my great modding love, the DCUG! I have really had a blast working on it, and I have learned a lot recently. I’ll share the highlights with y’all, as well as a little sneak peek at my Aquaman campaign, which is my current focus. Fair warning, I’m going to talk a fair bit about mapping in the beginning of this post, and I’m going to try to create my long-deferred tutorial video on the subject in a few weeks. If that subject doesn’t interest you, skip on down to screenshots of the new campaigns! And make sure to stay tuned for another developer’s diary entry next week which will provide another peek at the Green Lantern Corps. campaign which I have also been working on!
Map Design Part 1: Creating the Elusive Second Story
To get started with my return, I foolishly tackled something that I knew was going to be difficult and frustrating, and guess what? It was both of those things! When I had to put the mod on hold, I had started to develop custom maps for my Aquaman campaign. I faced a number of hurdles, detailed in my last couple of entries, and there was one, in particular, I had not solved yet and which returned to haunt me when I came back to the mod. You see, thanks to Daglob who modified the crane object from FF 1, I had a nice big oil rig to serve as a setting for the Sea King’s adventures. Unfortunately, while it looked great, characters would fall right through it in the game, meaning it wasn’t much use as, you know, a map.
The main issue is likely that FF just doesn’t do multiple floors, really, and whatever is tagged as the ‘ground,’ is going to be used that way by the game engine. Unfortunately, I don’t know enough about the actual mechanics of the terrain meshes (nifs) and how they are set up to change what the game perceives as ground, and there really isn’t anyone left in the community who could tell me either. So, what to do? Well, the answer is obvious. Cheat!
I tried a thousand different approaches to fix this, mostly centered around trying to create a ‘false floor’ through the use of other objects. I settled on the pier object from FF 1, which gave me a nice, flat object to work with. I tried blowing it up and adding it directly to the nif. Characters still fell through. I tried adding it in the editor. Still fell through. I tried a dozen different sizes and permutations, and no luck. I tried just adding the original, small object, and just covering the rig’s surface with them. That worked! However…it also screwed up the character’s pathing.
Finally, I realized that, when blowing the object up, I had used the scene root and tried to do the whole thing at once. You see, objects in FF2 have to have two pieces to be interactable. There is the object mesh itself, and then there is a bounding box, which tells the game where the mesh starts and ends, spatially. Although Nifskope was telling me it had expanded the bounding box as well, it hadn’t. So, when I did both pieces, both the object and the bounding box, individually, it worked perfectly! Now, I’ve got an oil rig, and all I need to do is add the set dressing!
Map Design Part 2: Textures, UV Maps, and Madness, Oh My!
Of course, my luck being what it is, that was far from the end of my mapping woes. The next hurdle arose when I started remastering the first two missions of my Aquaman campaign, which were all that I had previously finished. I’ve been reworking my whole planned plot for the campaign, and I’m really happy and excited about how it’s coming together, but the changes required me to rework those first two missions. And that meant I needed a new map for mission 2, as the map I had planned on using, one of the incomparable CmdrKeonig’s crackerjack creations, but it was too small to fit in everything I needed. CK’s map was, at its core, a re-texturing or re-skinning of an existing terrain. The way most custom maps work is that, in addition to positioning objects in new and interesting ways, they provide a sub-directory in which an existing map’s terrain mesh can look for the textures it needs. But the mappers replace the vanilla textures with new ones that have the same name. Most of the custom FF maps that accomplish such amazing transformations use this fairly simple device to do it, though skilled mappers like CK also put in a lot of work ‘dressing up’ the map with re-textured and repurposed objects too.
So, what does all of that have to do with my own map troubles? Fortunately, CK’s map was based on one of the FF2’s Cuban missions, which all share the same texture set, and there was another of those missions which had the space and layout I needed. So, I just open the map up in FFEdit and point it’s texture directory to CK’s _textures_underwater folder, and it’s smooth sailing, right? Well, nope; no such luck! The new map featured an airforce base with a big runway, and for some reason, when I gave the map the underwater textures, they displayed differently on the runway area than they did on the rest of the map! This distortion was pretty noticeable, and it really bothered me, so I tried to find a way to fix it. Whew! What a black hole this particular problem was!
Now, I know fairly little about textures (skins), and I know even less about meshes, so I had no idea what was going on here. I guessed that there was something about the terrain.nif, the actual 3d model of the map terrain itself, that was making those spots display the texture differently. So, I had to change it. I started by finding the level_layout.txt file for the map, which tells the game which terrain.nif to use. I copied and renamed it, pointed the map to this new file in the editor. Then I tracked down the terrain.nif, copied and renamed it, and pointed the layout file itself to its folder. The first entry in the layout is always the map’s mesh.
So, now I had a version of the mesh that I could play with and not mess anything up, and play I did. Or more accurately, I beat my head against this particular wall for days! I opened the map in Nifskope and clicked on the various pieces of the terrain, pouring over their entries and trying to figure out what settings controlled how they displayed textures. I compared their entries line by line, looking for whatever was different, and I tried a thousand different things, none of which had ANY positive effect! Finally, the community came to my rescue, and told me that how a texture is displayed is apparently all about something called a UV map. Who knew?!
I suppose that to be a good modder, it really does help to know about all of the different parts of game design. Anyway, I found a tutorial that explained how to edit the UV maps, which it turns out is a rather painstaking process in Nifskope. And that runway area was BIG! But, after a lot of rather maddening work, I finally had the map looking the way I wanted! Then it was just a matter of decorating it! So, I copied CK’s excellent design for his map, scattered a bunch of shrubs and weeds retextured to look like coral and seaweed all over the place, as well as some boulders and such for visual and gameplay interest. Then, because this mission is supposed to be one of the stages on the young Aquaman’s search for Atlantis, I asked superstar skinner Dean2000 to create some extra textures for me so I could add in the traces of a ruined city, using the map’s original textures and layout as a guide. I’m super happy with the finished product!
Map Design Part 3: Getting Clever
With the main map done, I set out to create a base scene to help me advance the plot and set up the mission that was going to take place on it. Now, my Aquaman plot is fairly ambitious. I’ve got a lot of story and a lot of development that I’m trying to cram in, and I struggled figuring out how to get through everything I needed in the base scene, while keeping the cutscenes it featured reasonably interesting to watch. I don’t just want to hit my players with a whole bunch of text with no visual interest! The story called for me to explore the origins of Black Manta and Aquaman, drawing on some of Geoff Johns’ better ideas from his N52 run. I had an excellent FF1 custom map featuring a lighthouse by the sea, but I wanted to portray some of what happened IN the water, and the map just has a flat, ‘painted’ surface for the water. How could I portray a story featuring both land AND sea in one map without looking silly? If I were Dr. Mike of The Strangers mod fame, I could just shift between maps INSIDE the base scene, but I don’t have a clue how he did that, and I probably couldn’t replicate it even if I did! So, once again, I decided to cheat.
I wrote the base scene CSes to focus the camera on a few different spots on the map, all out of sight of each other. Then I added a nice animated “water” object (one of our mappers, I forget who, created this years ago) above the surface of the “water” on the map in two of those spots. In the first spot I added a ship object “floating” in the top water layer, and my swimming Aquaman below it. In the other, I placed two ship objects, partially hidden in ‘floor’ of the map, to make it look like the ship had been sunk. Then, with a little camera work, the whole scene plays out relatively nicely, and the players only see what I want them to see. I’m inordinately pleased with how well it worked out.
Aquaman Campaign Update and Preview
While I was struggling with my various mapping mountains, I also tackled a ton of other, smaller jobs. I spent a lot of time tweaking the art assets for the Aquaman-related characters, especially the Aqua-Family, and that included new skins an skopes for Arthur’s sidekicks, Aqualad and Aquagirl. The tremendously talented Tomato very graciously agreed to make the Prince and Princess of the Sea for me, and they turned out fantastically! I also spent a lot of time skoping the keys of the various aqua-characters and updating their Herofiles to make them more interesting and unique in the game. I did a ton of work on the swimming keys, in particular, creating specially modified versions drawing on a wide range of different animation sets that gave me vastly more options in how I built the various characters. I discovered that the swimming keys were compatible with male_basic keys, and a hovering animation from another MB set would often look quite good as a swimming animation. That really expanded my options!
But the really excited work for me was remastering and reimagining my first two missions, laying in story hooks and plot threads that I can play with throughout the campaign. It’s great to finally be getting started on my Aquaman adventure in earnest, as this was one of the first ideas I conceived when I began working on my DCUG mythology. So, I rewrote the first mission, adding in some new elements to set up things to come, and I completely scrapped and recreated my second mission, starting with that whole new map. The first mission involved Arthur Curry beginning a quest to find Atlantis, and by finding it, to discover what happened to his mother, Atlanna, who was stolen away when he was a boy. During his search, he finds a mysterious island that is home to a research station, which has been besieged by the Marine Marauder!
My second mission saw the rookie Aquaman clash with the forces of Black Manta for the first time, as both men searched for Atlantis! This mission actually takes place underwater, so I have a separate mesh and key-set, essentially for my hero and all of his foes, an entirely separate set of characters, essentially. Everyone gets flight to simulate their ability to move in 3 dimensions, and eventually Aquaman will have the ability to summon his finny friends to aid him! As the mission progresses, Arthur makes a terrible discovery about his future nemesis, and he finds that the sea floor is covered with clues about Altantis! Finally, our hero frees an actual Atlantean warrior from Mantas men, but his welcome from his erstwhile people is not quite what he hoped it would be! Here’s a few glimpses of the mission, and you can see the base scene in action too!
Well, that should give y’all a sense of what I’ve been up to lately, though there are a thousand and one little jobs I’ve been doing as well. I hope that this has proven interesting and informative. Please feel free to ask questions and give feedback! There are some exciting developments on the horizons for the DCUG and for the Aquaman campaign in particular. I hope to have more to share with y’all soon! In the meantime, here’s a little peek at the Green Lantern Corps. campaign mission I finished a while back. Expect to see more about that, as well as about OrWolvie’s Green Arrow campaign, in my next developer’s diary! Until then, keep the Heroic Ideal alive!