DCUG Developer’s Diary #6

Howdy folks, and welcome to another DCUG Developer’s Diary! I promised more news before too long, and I am pleased to deliver. It has been an incredibly productive few weeks. I have gotten so much done, conducted so many experiments and tried so many different approaches to modding problems, that I’ll be hard pressed to remember and record a tithe of it, but I’ll try to hit the highlights for y’all! I’ve been hard at work on my Aquaman campaign, and most of the progress I’ve made has been on that part of the project. I’ve finished the next two missions, which were very work intensive and demanding, both in terms of modding and in terms of writing.

I’ve really been digging into FF modding, trying all sorts of things in order to bring this story about my favorite character to life in as high a quality as I can manage. I’ve done a lot of innovating, and I’ve tried to bring a high level of detail to everything about the campaign, from maps to characters, to effects, to plots. I’m quite happy with how it is all turning out, but I am also perpetually frustrated that I can’t quite bring what’s in my imagination to the screen as perfectly as I’d like. I’ll tell y’all a little about all of the different parts of the process I’ve gone through to bring this adventure to life.

Creating an Undersea World:

In my last DD, I walked y’all through some of the steps I went through to try to create an interesting and attractive underwater map for my second mission, and although I was pretty happy with the results of my labors, I wasn’t completely content. Considering how much of Aquaman’s story is going to be set beneath the waves, I had a good reason to keep trying to improve things. I had a number of different ideas about how I could enhance the look of my underwater maps, and I’ve been hard at work trying to figure out how to implement them. Tweaking map textures looks okay and is important, but I had bigger dreams.

I had always thought that it would be great to be able to put a ‘water’ filter over the ‘camera’ of FF. Unfortunately, there’s no way to do that, or at least none I could discover…but I couldn’t shake the idea. As I often do when I am trying to get inspiration for a mod, I spent some time going back and playing through FF1 and 2, and this reminded me of something that might provide me another way to accomplish a similar result and set me to digging into FF’s game files and documentation to figure out how to bring a bit more atmosphere to my undersea settings. This lead me on a journey that had me experimenting with Python scripting in new ways that were both exciting and more than a little scary, because I was very much out of my depth! But, that’s how you learn when you’re modding. In fact, constantly stretching to accomplish something that seems out of reach is the only reason I’m a modder in the first place!

The (mostly) finished product with several new features

Dream Wave Effect

As you may remember if you’re a veteran of FF2, the second game began with a rather unusual mission, which was actually a nightmare of one of the Freedom Force members. At the end of the mission, the player’s vision of the map was distorted by this blurry, wavy, dream-vision effect that covered the map. It occurred to me that, if I could figure out how to create this, and if it could be customized, such an effect might actually be a pretty perfect device for giving a submarine map an underwater “feel.” So, I opened up the script for the first mission and started digging. Now, I’ve been teaching myself about real Python scripting, but I am still beyond a neophyte, so I wasn’t entirely sure what I was looking for or what to make of it when I found it. Fortunately, Irrational helpfully labelled their scripts, and it was all clear enough for me to find the pertinent sections, even if I didn’t yet know how to interpret. them.

So, I started reading through the FFscripting document, hoping to find explanations of this code. The documentation did have a section on the Dream Wave effect, though it was a little hard for me to understand. Eventually, I copied the code that, to my best guess, was what I needed and just started experimenting with it. Unfortunately, my first efforts either simply didn’t work or even crashed the game! Finally, I hit on this combination. Here’s the code you can use to create an EZScripted mission that uses the Dream Wave.

Misminimod_storyfile = 'mission'

import m25minimod
from m25minimod import *

def OnPreRendererCreate():
	ff.RENDER_WARP = 1

#---------------------------------------------------------------------
#
# Important Callbacks
#
#---------------------------------------------------------------------	

def OnPostInit():
	m25minimod.OnPostInit(campaign=1)
	ff.RENDER_WARP = 1
	Mission_StartDreamWave(5,-1,0)
	Mission_FadeDreamSinParams(1, .01, .25, 1)

The first lines on each side are just the usual setup for EZScript missions. At first I was just using the two obvious lines, Mission_StartDreamWave and Mission_FadeDreamSinParams, but the effect wasn’t actually beginning. That’s when I noticed that the FF2 mission script actually had those PreRenderer and ff.RENDER commands, so I added those too, and I found myself with a nice, trippy warp effect! Then it was just a matter of tweaking it. The documentation explained that the first two commands I started with are what actually controls how the Wave appears.

The Start command has three points of customization (how long it fades in, how long it lasts, and how long it fades out). You’ll notice that the duration control is set to -1, meaning it will run forever, and thus I’ve got a 0 in the last slot, because it doesn’t need to fade away. You could tweak these settings to create short-lived effects and do other kinds of clever moves with it.

The Fade command sets the degree and strength of the effect, and it’s also got various customizations: (Frequency, or how often waves of the warping effect are created / Amplitude, or how big the waves are / Speed, or how quickly they move across the screen / and Fade Time, or how quickly they fade away) The default values in the mission were “(1, .03, .35, 1)”, so you can see that I didn’t change them drastically. I tried a few various permutations, but I eventually settled on the lowest amplitude and a slower speed. I think the final product looks pretty good, and you can check out a video of the effect in action on a mission here below. It looks pretty good in action, but it can be a little disconcerting, even on the lowest setting, so I’ll include a set of non-warped mission files for the campaign for those who are prone to motion-sickness or the like.

Sunlight Settings

So, the maps certainly looked a bit more striking and ‘watery’ with the Dream Wave effect turned on, but they were still missing something. Several folks on FR had suggested that if I could change the light color on the map to make it more sea-toned, that could help, so I had planned to mess with the lighting settings of the maps. However, before I could do that, I had to discover what actually controlled these settings! At first I thought this might be controlled through the map files, like the layout or extents texts, but after examining some of them, I realized that wasn’t the case. There were almost certainly nice, clear tutorials that covered this kind of thing once upon a time, but if they existed they’ve been lost to the ages, so I had to poke around in the forum archives for mentions of the subject. I eventually found some of our great former mappers discussing these settings, which it turns out were located in the python files of a map. Thus, I was once again delving into unfamiliar depths! With that post as a guide, I was able to find this section of the python document:

Mission_GetSunlight()

rotation: Sun rotation angle from north in degrees: +ve is east
tilt: Sun tilt from horizontal in degrees: +ve is down
brightness: Intensity of sunlight (0=none to 1=full)
ambient: Intensity of ambient light (0=none to 1=full)
Color: 3-tuple, red, green, blue values (all are 0 to 1)

Then I dug around in missions and custom maps and found those that seemed to have nice, bright, clear light, and used that as a starting point. I then played with the color values, changing out what colors were strongest, until I found a nice, ocean-y color palette which was, as you might imagine, heavily blue and green. Here’s the code I ended up using (just right below the code for the Wave effect).

	Mission_SetSunlight(-40,30,1,1.0,(0.4,0.8,1))
	Mission_SetShadows(-40,30,(0.2,0.3,0.3))
	Mission_SetProjShadowBackground((1,1,1))
	Mission_SetProjShadowColor((.8,.7,.7,1))

You’ll notice there are some other commands there too, each with their own settings. I just copied those from another mission, but you could add further customizaiton with those settings for shadows. However, we’re concenred with the sunlight settings. I’ve got brightness and ambient light both turned all the way up, and I’ve got the blue light at max and the green pretty close. The combination creates a nice, watery feel for the maps and everything on them, including my characters and props.

Creating a Sky Sphere

You may notice in my screenshots and videos that there’s another feature these maps have that help create their atmosphere, and that is a background that replaces the blank black void that is the default for FF maps. Here, as with most everything I’ve done, I’m just standing on the shoulders of FR community giants. What you see in these images is called a “sky sphere”, which is pretty much exactly what it says on the tin. It’s a big spherical object that sits around your map and provides a lovely backdrop for your adventures. The way that our mapping masters had used these in the past was to make them character templates, but that can create problems in modding, both because of this creating ‘phantom characters’ that mess up the complex “branding” function of the FFX Control Center, and because campaign missions don’t seem to like such characters being on a map. Thus, I tried making these into regular generic objects, and that seems to have worked just fine. I tried adding them directly to the map nif, but when I did, the top of the sphere was registered as the ‘ground’ and all the characters were shunted to the outside!

So, how do you use a sky sphere? Well, it’s actually super easy. They’re included with the map pack, so you can find the actual object and their textures in that wonderful resource. You’ll find the spheres in the pack’s art/library/characters directory. Once you get them, you can copy the settings they have in the map pack, but just change their template type to “generic.” Now, because they’ll be objects and not characters, their textures need to be in with the rest of your map’s textures. Once you’ve done that, you can place them on your maps by placing a marker, then changing it to be the sphere. Once you’ve done that, you’re good to go! The spheres come with several really nice textures, but you can also just name your own textures in the same pattern and use them on your maps for a variety of different effects! Check out my ‘water sphere’ on my Atlantis map!

Atlantean Chic – Decorating My Aquatic World:

Speaking of Atlantis, my story called for a visit to the fabled lost city by the Aquatic Ace, and thanks to folks vastly more talented than me, I had great starting places for both the Atlantean Palace and the city itself. However, as always seems the case, I wanted a bit more. So, as I worked on the various maps, I started cobbling together new props to decorate them. I did this by the usual method of just using replacement textures in a map’s folder, but I also literally built props using Nifskope, which is a huge blessing for modders. Nifskope allows you to combine and manipulate meshes, so I was able to take parts or whole meshes, both character and object, and use them to create various new props. This is exceedingly easy to do these days. For example, I created a throne as a centerpiece for my Atlantean throne room by combining the chair object from the FF1 Robot Factory maps, the TNT crates from the warehouse maps, a dolphin RandomDays had imported for me, and a little shell from Tomato’s Aquagirl skope. The result looked like a lot more than the sum of its parts.

Adding a refl and a glow texture to the mesh pieces, as well as tweaking the color settings of the meshes themselves, allowed me to make the whole thing look shiny and impressive. I did the same type of thing to create some nice underwater foliage for my city map. I started with a thin tree object, the ger_tree_poplar, but I wanted to make it look like a piece of a kelp forest, so I copied over ger_weed, and then placed several copies of it all up and down the tree, rotating and enlarging them here and there so that the whole thing had a nice, ragged, wavy appearance. I created a number of items like these, and I rounded out my decorations by adding textures I found online to existing meshes to create artistic accents, making bronze statues, golden images, and paintings. The paintings used art from the Atlantis Chronicles, which a seemed fitting place to find images of Atlantean history.

Populating Atlantis:

While I’ve been hard at work designing maps and writing missions, other incredibly talented members of our community have been contributing some wonderful stuff to other facets of my project. Tomato has continued to help me out with a number of contributions, big and small. RandomDays has imported a ton of incredibly useful objects for me and has in general pitched in innumerable ways, and Deanjo2000 has been churning out some incredibly gorgeous skins and skopes! In fact, between RD and Dean, we’ve got an amazing vessel for Aquaman’s nemesis, Black Manta. Dean has contributed a lot of great DC characters to the mod since my last update, and he was kind enough to create the Aquaman supporting cast member Murk, from the modern books, who Jeff Parker did such excellent work with. This gave me a really useful character to play with in my development of my Aqua-adventure, and it’s also just fun beating the snot out of this thinly-veiled pastiche of the hook-handed Aqua-jerk of the 90s! In general, I’ve seen a fantastic amount of support from the community lately, which has been really encouraging and energizing. Look for even more great art assets coming soon!

Telling the Story:

Of course, all of the work described above has been in service of a story that I’ve been dying to tell for years and years. My Aquaman campaign is one that I mapped out in broad strokes back when I was first working on the DCUG, over a decade ago. The story has evolved and changed a good deal since then, and I have been more than a little influenced by the fantastic work done by Jeff Parker and Dan Abnet in the New 52 Aquaman series. Still, I’m quite excited to finally get the chance to tell it, especially because it is such an ambitious project, and one that I have often despaired of ever having the chance to do justice. With the support of the FF community, diminished but still full of talented, I have been able to make a good start on it. As I’ve made maps and props and a thousand and one little tweaks and enhancements, I’ve also been hard at work on the campaign.

I’ve finished missions #3 and #4, which included some of the most challenging writing of the entire narrative. I had to introduce Atlantis, supporting characters, and an absolute mountain of plot, all in a very small amount of narrative space, as I only had a few missions and base scenes in which to do it. I could probably have spread this over more missions, but considering how much time and effort it takes to successfully write, script, and create a mission, I’ve tried to be conservative with my campaign design, which is not a strength of mine, as my project catalog can attest! So, I’ve slaved over the writing of these missions and base scenes, and while I’m not 100% happy with it (I never am), I am content. The missions themselves I think are a neat mix of ideas, and I hope they’ll prove fun to play. The players will be hit with a lot of information and a lot of my original Aquaman mythos in these missions, but I’ve tried to make them exciting and entertaining, as well as (hopefully) full of intriguing glimpses of story and mystery. As an extra treat, each mission has a custom cover created by Unkoman for their loading screens. Some are snappy tweaks of classic Aquaman covers, and some are much more elaborate creations, but they are all awesome, and Unko has put a lot of time and effort into them, crafting these custom loading screens that really make the campaign feel polished and complete.

#3 “Torn Between Two Worlds”

I won’t give away too much of my plot in these features. Instead, I’ll tease a bit about the missions and talk about how I made them. This first one up presented some design problems, in multiple ways. First, I had to skope custom keys for various characters that I already had in the DCUG, but for whom I didn’t have underwater versions. Then I had to create new powers and builds for each of them. When writing the mission itself, I knew I wanted a showdown with some of Black Manta’s minions, but I wasn’t really sure what to do to make it interesting and provide some variety. I came up with a couple of different encounter types so that the mission wasn’t simply a straight fight, and I designed it so that Aquaman was accompanied by some Atlantean allies. My scripting challenges arose from two sources. First, I needed to get the allies into the mission immediately so that the opening cutscene could include them and set up what was going on. Second, I needed my villain to get defeated but still get away, and I wanted to make sure that he didn’t show up until the player had cleared out all of his henchmen.

To solve my first challenge, I made my starting encounter an Alliance encounter, which allows you to create long-term allies for the mission, and I simply had its starting cutscene be my intro CS. However, as is often the case, solving one problem created another one, and this one was quite the mystery to me for a while. I would play through the entire mission, and everything would work, only for all of the starting encounters to respawn as I was playing through the last encounter. It was maddening! Not only did it look super messy and confusing, the mission wouldn’t end because the event chain had restarted! I finally, just yesterday, figured out what the issue was, after seeing no clear reason why this would happen and trying dozens of different things to fix it. The problem all came down to the fact that I was using my Alliance encounter to start my mission, and it was also being used to launch those opening encounters. It’s super obvious in hindsight! You see, the CS would play, and the encounter would ‘end’, spawning the next ones…but it wasn’t ACTUALLY over until all of the allies died. Most of the would get taken out in the mission, but your main ally, Murk, was made of sterner stuff, and he’d usually stick around until the end, where he was knocked out by another encounter….which would then start the whole thing over again! Simply using a different encounter to spawn the others solved the problem very nicely.

The second problem proved much more easily solved, though it also gave me some trouble. EZScript has an option for Custom Encounters that allows you to set one up where a villain will stop fighting at certain health thresholds. This is meant to simulate a common mission element from the FF campaigns, and it would be a very useful mission component. The trouble is, it’s never worked quite right, and I have trouble with it every time I try to use it. I decided to give it another look, and sure enough, it gave me fits. Either Manta wouldn’t stop and would get knocked out, or he’d stop and just get stuck, so the rest of the mission didn’t play. Finally I gave up and just used a simple Interrogation, which worked like a charm. However, this left me with the difficulty of getting my villain away. I’ve gotten around this in the past by having the screen fade and just having dialog advance the plot and narrate what’s happening. Obviously, that’s not the most elegant of solutions, and I wanted a bit more out of this, especially because I didn’t plan on this actually being the end of the mission. The trouble is that, once in an interrogation state, a character is locked into their stun animation and can’t move. So, I decided to cheat a bit. I used some camera work and fades to extricate Manta, then gave him an animation command to bring him out of the stun state. He still couldn’t move, but he LOOKED normal, and that made the CS work reasonably well. In the, the mission proved to be more challenging to create than I anticipated, especially since it was originally conceived as just a fight, but the final product should prove interesting, I hope!

#4 “Caverns of Death”

Bizarrely, mission #4, although much more ambitious in terms of scripting, as I was trying something I’d never done before, proved much easier. In fact, the most complicated and fanciest bits worked right out of the gate, while the simple stuff, as is often the case, tripped me up. This one involved the newly recruited Aqualad joining Aquaman as they fought their way through a cave full of monsters, and made some interesting discoveries about the history of Atlantis along the way, as well as some hints of the overarching plot! I decided to get clever, because once again I was struggling to find a way to provide some variety to how my story idea made it into mission form. The monsters our Aquatic Aces faced were a fairly straight-forward threat, but I came up with the idea of having the heroes encounter eggs that could hatch at random intervals, spawning more of the monsters. If the heroes can destroy the eggs early, they won’t have to worry about reinforcements, but if they don’t, they might get overwhelmed! I did this by creating two sets of encounters. The first was just a custom Destroy Object encounter with a Countdown condition to provide a ticking clock. The second, which is only triggered if the object isn’t destroyed before the clock runs out, spawns a monster in a Hunt encounter. I added some FX to make it look a little smoother, and it all worked pretty well. Here’s the EZScript encounters in question:

Encounter: Brood1
Type: Custom
Actions: countdown, heroes destroy objects
Objects: trench_egg named bob
Time: 215
Marker: shell1
Next: If Timer Still Going: None
Next: If Timer Expired: Birth1

End Cutscene:
bob is destroyed

#--------------------------------------------------

Encounter: Birth1
Type: Hunt
Villains: trenchs
Marker: scrack1
Next: None

Alert Cutscene:
Play effect effect_ffx_transmute at scrack1

Interestingly, I’ve recently discovered that the brilliant M25, who created EZScript, was even more brilliant than I had given him credit for, and he included the ability to name objects (like ‘bob’ up there) as well as characters so that you manipulate them directly through your scripts.

Alright folks, well that should give y’all a nice peak behind the curtain at what I’ve been up to. Now that I’m past these challenging missions and maps, I’m hoping I can move a bit more quickly in the coming weeks, but we’ll see. I know that I promised some information about my GLC campaign in this diary, but I think it’s already long (probably overlong!) enough, so I’ll get to that next time. I hope that this has been interesting and useful. Please feel free to ask questions or post comments, especially if you’re interested in getting into modding yourself or are just looking to get involved in the fantastic FF community!

DCUG Developer’s Journal #2

Hoo-boy, things have certainly not gone more smoothly since my first journal entry.  This campaign has given me even more troubles.  I encountered a whole set of problems I’d never seen before and just about gave up hope for the finale of the whole darn arc I’m working on.  In the process, I learned a whole lot about maps and objects that I never knew, though I still couldn’t solve my problems.  The good news is that this story has a happy ending, even if it was really in doubt there for a while.

So, when last I left you, I had just finished up mission #14 and had it basically working, so I got started on testing #15.  As with the previous mission, I had already written, scripted, and mapped this one, so testing was all that was left.  It proved to be just as temperamental as its predecessor, but the script problems were magnified by a map problem.  In this mission, the gathered heroes from #14, Green Arrow, Green Lantern, Flash, and Superman, with Batman as an ally, had to rescue the remaining Leaguers, who were once again scattered across different diskworlds.

Fortunately, I had learned from the previous problems, and I anticipated some of the issues in this mission.  I started all of the encounters off at once to avoid the non-completing encounter bug.  Still, I had problems with the custom encounters for MM and GL.  WW’s encounter worked pretty well, but I discovered that I hadn’t created a animportrait (talking head) entry for the Amazons that provided her opponents.  Interestingly, sometimes a missing head.nif or entry will crash the game, sometimes it will just show a dialog balloon with a blank space.  I’m not sure what causes the different reactions.

This instance only resulted in the latter, thankfully.  I was able to fix MM’s encounter by doing the same thing I had one with Flash, using two different encounters with two different MMs, to get both the rescue and the alliance.  This one provided an extra challenge, though, as with so many more characters in play, it isn’t as easy to make the substitution and teleportation as seamless and unnoticeable.  Complicating the matter further, the encounter in question is a ‘Rescue Fire,’ which means the diskworld is sort of a hot place, and my players aren’t going to want to hang around there!  I’ll have teleport my new Jonn to the old one and hope for the best.  Here’s the pertinent script.

#———————————-

Encounter: Burn1
Type: Rescue Fire
Allies: martian_man named jonn
Marker: desert5
Primary Objective: “Save the Martian Manhunter from his fiery prison” for 1000 prestige
Next: If All Congregated: Burn4
Next: If None Congregated: Final2

Ally Congregates Cutscene:
Camera on jonn
jonn says, “Thank you my friends, once again, I owe you my life. I would not have lasted long in this fiery world. these flame creatures seem to be everywhere, and the ground burns constantly.”
flash says, “Don’t worry about it, J’onn, that’s what we do. Now let’s get out of here!”
green_arrow says, “Right, just one more little lost lamb and we’ll have the whole set. Maybe then I can go home!”
Fade for 1 seconds

#———————————-

Encounter: Burn4
Type: Custom
Actions: allies become controllable, allies fight villains, allies follow heroes, allies remain after encounter ends
Allies: martian_man named bob
Marker: bottom2
Next: None

Alert Cutscene:
bob teleports to jonn
jonn teleports to bottom1
jonn is killed
jonn is destroyed
Unfade for 1 seconds

#———————————-

It was here that I really ran into problems, the first of many in this batch of testing, unfortunately.  The GL encounter was only partially working, but the real problem was that my heroes teleported onto the center of the map…and then couldn’t get off of it!  They teleported into the middle of a number of turrets, which were on the edges of the disk, and the team literally could not move to them or reach the Lantern to free him.  There was some type of issue with this particular diskworld that made its edges impassable.  I tried tweaking it in Nifksope, but no luck.  I really don’t know enough about meshes OR maps to figure this out.

So, I had to adjust my story, throwing out that entire encounter or reworking it to fit somewhere else.  I chose the latter, moving his encounter to the final disk, a Timemaster-flavored world, and I switched up the plot slightly.  I’m fairly happy with the results, but it gave me a bad moment or two.

Of course, that was nothing compared to what happened when I went on to #16.  You see, that problem I had with the outskirts of that one diskworld, in the final Timemaster map I was using for the grand showdown with the Key, the ENTIRE map was impassable.  My heroes couldn’t go anywhere, and if I teleported them around with console commands, they would slowly slide back to where they came from.

Once again, I examined the terrain.nif, but I couldn’t make heads or tails of what I was seeing.  I posted on FR, and fortunately, the ever-awesome Detourne_me came to my rescue.  He didn’t know how to solve the problem, but he got me looking in the right directions.  He pointed out that the actual play area of the map was a giant game object, not part of the map itself.  I checked the object attributes of the “cog_massive”, digging through FFEdit’s manual to make sure that it had all the necessary attributes, but no luck.  It’s worth mentioning that there are explanations for each of the mysteries (to me at least) template attributes in the manual.  If you’re ever tying to figure them out, you can check objattributes for a complete listing.

(One of the stages of my frantic attempts to save the map made the cog disappear entirely!)

I checked the terrain itself, which DM had suggested might be the culprit.  Its bottom surface, far below the giant spinning cog, was composed of two levels, and each had an “AREA_UNPASSABLE” label.  DM posited that this might cause problems to anything over such an area, so I tried renaming them.  Progress!  Unfortunately, this only got me one step closer.  Now my characters could move…on the very bottom level of the map, as they would fall through the cog any time I teleported them up there.  I fought and fought with this thing before I hit on a solution.  I finally just copied the cog object directly onto the terrain.nif.  It took a few tries, but I got it right, and I finally had a workable map!  Now I only had to get the script working!

Fortunately, despite the fact that the big finale encounter only partially functioned, it was a very easy fix.  It features a showdown with the Key, where he is invulnerable until you destroy an object.  The CSes weren’t playing, and the object wasn’t showing up.  Turns out, I had misspelled the object name (d’oh!0 and mixed my metaphors, so to speak, in naming the Key.  You see, FF doesn’t like it when you refer to a character in two different ways.  You can use generic terms (like Villain1) OR specific names, like the_key, but you CANNOT use both, or it will choke.  So, easy fixes, and now the mission is playing quite nicely.

That wraps up this journal entry.  Please let me know if this is interesting to y’all, and if there is anything you’d like to hear more/less about, or if you’d like me to illustrate other parts of the process.

DCUG Developer’s Journal #1

Okay, let’s try this out.  There will be some spoilers for the campaign stories, so read at your own peril.

So, while traveling this summer, I had a really helpful email correspondence with Unkoman, who helped me plot several new campaigns and expansions for existing ones.  The centerpiece of my DCUG 2.0 update/expansion is a finished/polished JLA campaign that also provides a significant expansion in the form of half a dozen new missions featuring Green Arrow’s recruitment to the team, the first encounters with the Injustice Gang, and the first battles with the Key.  I created a really fun but, of course, overly ambitious outline.  I wrote it all up, added new materials to the mod, set up the maps, and got it all ready to test weeks ago.  Since then I’ve been very busy, and of course, only able to test and troubleshoot occasionally.  Of course, my attempts to get fancy have led to tons of bugs and lots of frustration.  I had a little time recently and got back to it.

I’ve been working on level 14 of the JLA campaign, where Green Arrow is jumping from pocket universe to pocket universe to rescue the JLA who have been scattered through the multiverse by the Key.  I’m using the ‘disk worlds’ maps from the finale of  :ff:, which makes for a really cool level.  Unfortunately, the maps have some issues.  More unfortunately, my scripts had issues!  I think every single encounter had bugs, and I eventually had to create workarounds for certain parts of it.

The mission was designed with GA encountering four heroes, Batman, Flash, Aquaman, and Superman, each imprisoned on their own diskworld, which was a threat specifically for them.  GA could teleport between them, recruiting each hero as he rescued them.  First I discovered that the individual encounters were not ending properly, meaning the mission never progressed past the first one.  This seems to be a result of using custom encounters that had an ally join your team.

I fixed that by just starting all the encounters at once.  Then, inexplicably, the Flash would somehow join your team twice, meaning there was no room for poor Aquaman….again.  I had to split that up into two encounters, one where you rescue Flash, one where that Flash is destroyed and a different one joins the team.  After I finally solved that I discovered that the diskworld he is on has pathing issues.

Here’s a truncated version of my scripting work-around.  You’ll notice that I name the two Flashes different so the game doesn’t get confused, and I wait to tidy up my extra Flash until we reach the second encounter, that way his being wiped out of existence, Anti-Monitor style, won’t screw up that first encounter.  By fading the camera between encounters, hopefully my players won’t even notice the substitution.:

#———————————-

Encounter: Chill1
Type: Rescue Frozen
Allies: flash named bob
Villains: shurale named harry
Minions: shurale, snow_man, snow_man, snow_man, snow_man
Marker: snow1
Primary Objective: “Free Flash from his frozen prison” for 1000 prestige
Next: If All allies freed: Chill2
Next: If No allies freed: Final2

End Cutscene:
Fade for 1 seconds
bob teleports to bottom1

#———————————-

Encounter: Chill2
Type: Custom
Actions: allies become controllable, allies fight villains, allies follow heroes, allies remain after encounter ends
Allies: flash named jim
Marker: snow2
Next: None

Alert Cutscene:
jim teleports to green_arrow
bob is killed
bob is destroyed
Unfade for 1 seconds

#————–

I’ve got an idea about that, but I haven’t tried it yet.  Finally, Aquaman’s wasn’t properly rescueable in his custom encounter, so I had to change it up too.  I’ve finally got this mission mostly sorted out…and now I face another one in mission 15, where you save the rest of the team.  I honestly don’t know that I’ve ever had a mission with so many problems per-capita!

Let this be a lesson to you, future modders: don’t get fancy!

The good news is I’m still making progress, and the campaign is coming together well.  I’m also really happy with a lot of how I’ve designed these missions and the base scenes.  I know SO much more about modding these days than I did when I made the DCUG in the first place, and it’s nice to be able to bring a little higher production value to the stories I’m telling.  I’m still often limited by EZScript and the available maps, but I’ve been able to find some fun ways to change things up.  I hope y’all will agree with me when you get a chance to play these missions!

I also just got a small pile of new and updated skins/skopes from Deanjo2000, and they look fantastic!

Finally, I posted an add for a map maker on ModDB.  Since it’s just an unpaid position working on a decade old game, chances are nothing will come of it, but it would be really fantastic if I could get some help with map creation.  That could open up so many possibilities and free up an incredible amount of time for me.  So, cross your fingers, gang!

Completed script:

Story: 14jla

#
# New JLA mission pitting the team agains the Key
#
Starting Encounters: Knight1, Chill1, Red1, Dry1, Dry2, Dry3
#———————————-

Encounter: Knight1
Type: Custom
Actions: allies become controllable, allies fight villains, allies follow heroes, allies remain after encounter ends
Villains: duplicate_male1, duplicate_fem1, duplicate_male1, duplicate_fem1, duplicate_male1, duplicate_fem1, duplicate_male1, duplicate_fem1
Minions: duplicate_male1, duplicate_fem1
Allies: batman
Marker: city1
Primary Objective: “Help Batman defeat the strange civilians” for 1000 prestige
Next: If Ally Survives: None
Next: If Ally Lost: Final2

Alert Cutscene:
Set Lighting to Night
Cinematic camera on green_arrow
Unfade for 2 seconds
Play music music_pandemonium
green_arrow says, “Well…this doesn’t look that bad. Looks a bit like home, actually…though it’s strangely quiet…”
Cinematic camera on batman
batman says, “Green Arrow? How in the world did you get here?”
green_arrow says, “Hiya Bats, I just caught a lift through…”
batman says, “Nevermind! There’s no time! Watch out! There’s something wrong with the people of this world!”
green_arrow says, “What do you mean…?”
Camera on Minion1
Minion1 says, “Hsssss…fresh meat! kill them! rend their flesh!”
batman says, “I think you get the picture. It’s the Key’s idea of a joke. I have dedicated my life to protecting the people of my city…so he sent me to a world where they’re out for my blood..though it seems any will do.”
green_arrow says, “But how…?”
batman says, “Later! Now, just concentrate on survival!”

Ally Lost Cutscene:
green_arrow says, “Nooo!”

End Cutscene:
batman is revived
Cinematic camera on green_arrow
green_arrow turns to batman
batman moves to green_arrow
batman says, “Best as I can tell, this world suffered some type of plague or contamination, and its inhabitants seem to be mad. we should keep our eyes open for more infected civilians.”
batman says, “so, how did you end up here?”
green_arrow says, “You’re welcome….”
batman says, “Yes. thank you.”
green_arrow says, “For saving your….?”
batman says, “don’t push it.”
green_arrow says, “Fine. I had just teleported to the Watchtower when the Key grabbed all of you. I followed him through his portal before it closed. I found myself in a crazy place, glowing, under a neon sky…”
green_arrow says, “there were a bunch of other portals. I crossed my fingers and jumped through, found myself here.”
batman says, “Hmm…disappointing. I hoped you’d have some way to get back.”
green_arrow moves to spot1
green_arrow says, “Yeah, I didn’t really think this through…unfortunatley, these things don’t come with instruction manuals.”
batman turns to spot1
batman plays animation ranged
batman says, “Wait! The portal…it’s open again!”
green_arrow says, “How? Did you do something?”
batman says, “No…I wonder…the Key talked about absorbing dimensional energies in his travels…it’s possible that you absorbed enough as you jumped between worlds to activate his gateways.”
green_arrow says, “Well, there’s only one way to find out. You coming?”
batman says, “It would be tempting fate to say ‘anywhere is better than here,’ but I suppose I’ll take my chances.”

#———————————-

Encounter: Chill1
Type: Rescue Frozen
Allies: flash named bob
Villains: shurale named harry
Minions: shurale, snow_man, snow_man, snow_man, snow_man
Marker: snow1
Primary Objective: “Free Flash from his frozen prison” for 1000 prestige
Next: If All allies freed: Chill2
Next: If No allies freed: Final2

Start Cutscene:
Fade for 1 seconds
Set Lighting to Day
Camera on snow1
Unfade for 1 seconds
batman says, “It looks like this world is frozen over. some second ice age, or perhaps nuclear winter.”
green_arrow says, “Brrr! You’re telling me. I wish I’d have packed my thermal costume…”
Camera on bob
green_arrow says, “Look! It’s the Flash, frozen like a TV dinner! and we thought we were cold…”
Camera on harry
batman says, “And it looks like he’s not alone. We’d better free him, but tread carefully.”
harry says, “Raarraggghhhh!”
green_arrow says, “A little late for that!”

End Cutscene:
Cinematic camera on bob
batman moves to bob
green_arrow moves to bob
bob says, “thththththannnnks….gggguys…this entire world…is so cold…even I couldn’t…keep my molecules moving.”
batman says, “we must have been protected by residual dimensional energy. hopefully there’s still enough left to get out of here.”
green_arrow says, “No kidding. I snow as much as the next guy, but this place over does it!”
bob says, “whhhwhhwhat’s going on?”
batman says, “Explanations can wait. We need to find the rest of the League. Let’s hope our next stop is warmer.”
Fade for 1 seconds
bob teleports to bottom1

#———————————-

Encounter: Chill2
Type: Custom
Actions: allies become controllable, allies fight villains, allies follow heroes, allies remain after encounter ends
Allies: flash named jim
Marker: snow2
Next: None

Alert Cutscene:
jim teleports to green_arrow
bob is killed
bob is destroyed
Unfade for 1 seconds

#———————————-

Encounter: Chill3
Type: Fight
Villains: shurale named harry
Minions: shurale, snow_man, snow_man, snow_man, snow_man
Marker: snow1
Next: None

#———————————-

Encounter: Dry1
Type: Custom
Actions: allies become controllable, allies fight villains, allies remain after encounter ends, allies can be freed, allies move when freed, allies in cages, allies do not move, allies thank heroes
Villains: fire_elemental, fire_elemental, fire_elemental, fire_elemental
Minions: fire_elemental1
Allies: aquaman_classic
Marker: desert1
Primary Objective: “Rescue Aquaman from the burning desert” for 1000 prestige
Next: If Ally Survives: None
Next: If Ally Lost: Final2

Start Cutscene:
Camera on desert1
green_arrow says, “Some kind of desert world…well, at least it’s warmer.”
batman says, “very warm. we’d better be careful. we could easily dehydrate here, and there’s no water in sight.”
jim says, “dry or not, I’ll take this over that frozen…”
Camera on aquaman_classic
jim says, “Hey, there’s Aquaman! It looks like there’s something wrong with him…”
green_arrow says, “hopefully it’s not whatever was wrong with those folks on the first world…”
batman says, “no, don’t you see? he’s an amphibian. this place is killing him! we’ve got to get him out of here, quick.”
Camera on Villain1
jim says, “Ohh yeah? I wonder what they’ll have to say about that…”
green_arrow says, “what the heck are they?”
jim says, “They look like some kind of…living flame…sort of the opposite of the things on the snow world.”
green_arrow says, “well, they don’t look any more friendly!”

Ally Thanks Hero Cutscene:
Camera on aquaman_classic
aquaman_classic says, “th…thank you all…I wouldn’t have…lasted much longer…”
jim says, “we’ll find you a nice ocean as soon as we can, aqua-buddy. can you make it?”
aquaman_classic says, “Yes…I’ll be alright, once we get out of this heat…”
green_arrow says, “Then it’s onward and upward!”
jim says, “do you realize what this place means, guys? these different versions of earth…this is the multiverse that physicists have theorized about for years!”
jim says, “scientists have posited that there are infinite variations to our universe, each in its own dimension, and each differing in key ways from our own. it looks liek they were right!”
batman says, “Yes, but unfortunately that multiverse is currently trying to kill us.”
green_arrow says, “Hey, you wonder if there are alternate versions of us out there anywhere?”

#———————————-

Encounter: Dry2
Type: Destroy Object
Villains: fire_elemental
Objects: ro_generator
Primary Objective: “Sabotage the automated factory” for 1000 prestige
Marker: desert2
Next: None

Start Cutscene:
batman says, “These fire beings seem to be coming from that portal…maybe we can destabalize if we hit it hard enough…”
Red Arrow on desert2

End Cutscene:
jim says, “That’s done it!”

#———————————-

Encounter: Dry3
Type: Hunt
Villains: fire_elemental
Marker: desert3
Starts When: Dry2 not at End
Next: Dry4

#———————————-

Encounter: Dry4
Type: Wait
Minimum Time: 30
Maximum Time: 35
Next: Dry5

#———————————-

Encounter: Dry5
Type: Hunt
Villains: fire_elemental
Marker: desert4
Starts When: Dry2 not at End
Next: Dry3

#———————————-

Encounter: Red1
Type: Rescue Caged
Villains: darkman_blue, darkman_blue, darkman_blue, darkman_purple, darkman_blue, darkman_blue, darkman_blue, darkman_purple, darkman_blue, darkman_blue, darkman_blue, darkman_purple
Minions: darkman_blue, darkman_blue, darkman_blue, darkman_purple
Allies: superman
Marker: ruin1
Primary Objective: “Save Superman from the ruined world” for 1000 prestige
Next: If Ally Survives: Final1
Next: If Ally Lost: Final2

Start Cutscene:
Fade for 1 seconds
Camera on ruin1
Set Lighting to red alert
Unfade for 1 seconds
green_arrow says, “Whoa, this place has seen better days. It looks worse than Gotham.”
green_arrow turns to batman
green_arrow says, “Err…sorry Bats.”
batman says, “It looks like this world has suffered some type of catastrophe…and look…the light.”
jim says, “Red…is that the natural sun color of this world, or is it linked to whatever happened here.”
batman says, “No way to tell…but if this place is under a red sun….I can guess who the Key imprisoned here.”
aquaman_classic says, “Superman…but where…”
Camera on superman
jim says, “there he is!”
green_arrow says, “Well, the good news is, this place looks dead. Hopefully we don’t have to worry about any unfriendly natives.”
Camera on Minion
Minion says, “Outsiders! Maybe they have food! Maybe they WILL be food! Get them!”
jim says, “Arrow! Don’t you know better? You NEVER tempt fate like that!”

Ally Thanks Hero Cutscene:
Camera on superman
superman says, “Thanks, guys…I’ve been robbed of my powers under this red sun. I’ve been staying just ahead of these poor creatures. they’ve been hunting me since I arrived.”
superman says, “It looks like there was a nuclear war here…and the survivors were changed…mutated…it’s not a pretty sight…but the worst part is…all I could think about was…I wasn’t there to stop it.”
superman says, “We’ve got to get home. I won’t let the same thing happen to our world.”
superman says, “Now, someone tell me, what in the name of Krypton happened to us?”
batman says, “I’ll explain, but first, we still have a few Leaguers to find.”

#——————————————————————————-

Encounter: Final1
Type: Cutscene
Next: Win

Start Cutscene:
Play Transition

#——————————————————————————-

Encounter: Final2
Type: Cutscene
Next: Lose

Start Cutscene:
Play Transition

#——————————————————————————-

 

Modding with EZScript: An Outline

Howdy folks!  Some time back, in the process of trying to help a new modder in the FF community, I wrote a rather lengthy post on Freedom Reborn about the step by step process of creating a mod.  It occurred to me that this information, all gathered in one place, might prove helpful to other newcomers and folks who want to try their hands at modding.  So, I’m adapting that gargantuan post to a how-to-outline that I’ll share here.  So, without further ado, I give you a crash course in modding!

Let’s start at the beginning.  Make sure you have all of the necessary tools.  To mod successfully and without undue headache, one needs the following:

  • FF2 Mod Tools (FFEdit, Character Tool)
  • M25’s Mod Tools (EZScript Editor, Language File Generator, and more)
  • FFX (an amazing expansion to the core game mechanics that adds tons of new attributes and functionality)

So, install all of the various tools, and if you’re running a version of Windows newer than XP, as I imagine most folks are these days, it is probably a good idea to run all of these things in compatibility mode for XP SP3.  I’d also run them as an Administrator, just to be on the safe side.

Now, on to business!  Here is a rough, step-by-step outline that can give you a sense about what all goes into modding.

1) First, decide what you want to call your mod.  Then, copy the newest version of FFX (3.3 I think), and rename it to whatever you want your mod to be called.  The title should be simple, because you’ll have to use it a few different times, and you don’t want to be having to type out a forever-long name dozens of times.  Also, and this is something you’ll see me say a few times, make sure you don’t have any unusual characters in the name.  Limit it to letters and numbers, as FF has a tendency to freak out over anything else.  Next, make sure FFEdit is pointing in the right direction.  Do so by opening it up and directing the primary data path towards your newly created mod folder.  Make sure you leave the secondary data path alone.

2) Now, decide which characters you want/need in your mission.  Create herofiles for them.  Give them simple, lower case names without any special characters and punctuation marks.  Test and balance in the Rumble Room until satisfied.

3) Quit, rename your FFX3 folder to something different, FFX3a is what I use.  Now, rename your mod folder to FFX3. (This step isn’t absolutely necessary, but FFX Edit2 sometimes has something of a hard time with mods other than FFX.)

4) Run FFX Edit2.  Save.  This “Brands” all of the characters in that mod, giving each a unique “Complex” number, which helps FFX and EZScript tell them apart.  This is necessary to get stuff to run smoothly.  Once you’re done, don’t forget to change both folder names back.

5) Next, launch your mod, open the Rumble Room, and choose M25’s Add to Dat as your gametype.  Put your newly created herofiles into the roster, use the “———–” blank entry if you need to, and then run it.  It should only take a moment.  Now, quit, open FFEdit, check on the characters and make sure everything was added nicely.

6) Now, open up your EZScript Editor.  Go to “Panels,” “Config,” and set the Dat directory to your mods folder.  You can set the other directories or not, it won’t be super important for a simple project.  Now, I recommend working on top of an existing EZScript mission.  One of the example missions or one of mine would serve as a fine base.  Either way, compose your mission.  I STRONGLY recommend using:

#————————————–

to differentiate your encounters, to make it easier for you to read and for folks who help you with troubleshooting.  Avoid capitalization in composing your missions, except when writing encounter names, which are okay to capitalize, just make sure you are being consistent.  One of the biggest pieces of advice I can give you is, keep it simple.  Keep your naming schemes simple, keep your layouts simple, keep your plans simple.  The more complex you get, the more chances you’ll mess something up, and the less chance you’ll be able to find it easily.

7) Next, click “Tools,” “Analyze,” and look at the report it gives you.  This should catch MANY of the careless errors and plain ‘ol mistakes that tend to creep in to this type of work.

8) After that (or really before if you want), you can create your map, adding in any encounter markers you need.  Make sure all encounter names match what your mission calls for EXACTLY.  You can point your EZScript Editor to this newly edited map to double check that.  Unless you are designing the FIRST mission of a campaign, do NOT put any heroes on a map you create if you are using EZScript.  The first mission needs for the heroes to be placed already, otherwise check out my tutorials on what markers are necessary to get everything to play nicely.

9)
 Open your mod folder and copy your mission’s .txt file into the mod’s Story directory.  If it doesn’t have one, just create a folder named Stories in your mod’s main directory.  If you have multiple missions, you can put them all in there, but make sure to rename the copies so you don’t just overwrite them in the Stories folder.  Now, run your mod again.  Go to the RR again, for game type, select M25 Generate Language Files (or something like that).  Just use the ———- character, that will work fine.  Run it, then quit.  You’ve just added all of your missions dialog to your mod’s caption.txt.  However, the game itself can’t read txt files, so we need to get this into your captions.dat.  Now, open M25’s Language File Generator that you downloaded before we got started, and run it, pointing it at your mod director.  This updates your Lang files.  Also, before you start this process, make sure you’ve got CLEAN language files.  If you’ve already been poking around in them, I strongly recommend you get your language files from a clean install or clean version of FFX3.

11) Open up FFEdit and click on the “Campaign” tab.  Now, you’ll see the default FF missions there, and I recommend you leave them be for the moment.  You can delete them all, but in general things work better when you just leave them alone.  They won’t affect anything.  Add your own missions in, set the required characters and and unavailable characters, and move your missions to the top of the order.  Save and exit.

11a) For your first mission ONLY, you’ll need to place your starting heroes on your map through the editor.  Don’t forget to do this, as otherwise your mission won’t start.  The game spawns no heroes for the first mission.

12) Now your mod should be ready to play!  Open up FF and click “New Campaign” and give it a test.  Chances are you’ll run into some troubles, but stay patient and try to eliminate factors.  Always double check the obvious!  I can’t tell you how many hours I’ve spent troubleshooting missions with inexplicable problems, only to realize that I misspelled “encounter” or forgot to do something equally basic.  Also, when in doubt, feel free to ask for help!  I’m always happy to help new modders, and the FF community is amazing!

DC Defenders

Historyofthedcu

Hello Freedom Forcers!  This is my first post in quite some time, but I assure you I have not been idle in the intervening months…and months…and months….*ahem*  Well, I haven’t been too idle.  I have been hard at work on more than a few projects, and I am just now finishing up my Pulp Adventures mod, featuring the likes of The Shadow, Doc Savage, and The Green Hornet, plus many more!  Be on the lookout for the release of this love letter to the classic pulp heroes in the next few months.  Once I finish that project, I’ll be revisiting a few previous undertakings, including the DC Universe According to Grey!  What follows are some ruminations and some little bits of fun on the subject of my sprawling version of the DC Universe.

I have recently been reading through a number of DC books, including classic issues of Detective Comics, Adventures Comics, The Brave and the Bold, and others.  All of this four-color goodness has really set my mind on fire to get back to my DC Universe mod and start telling stories set in my all-time favorite comic setting.  To that end, I’ve been toying with the hundreds of story ideas and half-finished plots that are lying around my hard drive in various stages of completion, and after hearing something interesting on The Who’s Who Podcast, of Aquaman Shrine and Firestorm Fan fame (say that three times fast!), I decided to play around with an old concept that didn’t make it into the first release of the DCUG.

One of the hosts of the show, the Irredeemable Shag, mentioned his ideal superhero team, and I was pleasantly surprised to discover that it was, in large part, note for note the same team that I had created for a campaign in the DCUG.  I’ve got a few missions written, but nothing was finished when I released the mod.  However, it is on my list of campaigns that I want to finish when I return to my sprawling pet project.  You see, years ago I watched the JLU episode “Wake the Dead.”  In it, the Timmverse presented a DC version of the classic Marvel team, the Defenders, who took on a mystical threat.  The team included my personal favorite hero, Aquaman, and I found the idea of a DC team that including the Sea King and dealt with mystical threats to be pretty intriguing.  Now, I know what a few of you mega-DC fans are saying, ‘that team already exists, and it’s called Shadowpact!’  Well, I have to admit that I know next to nothing about them as a team, and even less of them as individual characters.  I’m afraid they don’t interest me much in any event.

On the other hand, given Aquaman’s connection to Atlantis, it makes sense for him to be involved in sword and sorcery type tales occasionally.  So, I created my own version of the team featuring a number of second string character for whom I had a soft spot, and I penned a story arc for them that promises to be great fun.  The team featured:

As I started to think about these stories once again, I got an itch to throw part of the team into the Rumble Room and see how they played together.  I took some screenshots, and I’ll share them with y’all now:

picture010

I began by choosing a subset of my nascent mystical team.  So many choices!  It’s getting hard to find anything among the huge roster of the DCUG these days!  I’m pitting my team against a semi-random assortment of villains on a fantasy-style map.

picture016Heroes assembled!

picture018

Matchstick is undaunted in the face of evil!

picture019

The heroes move out in search of some villains to vanquish.

picture020

And the villains find them!  Yes, that’s obscure Hawkman villain I.Q.!  Will his technological marvels be enough to stop our stalwarts?

picture025

He uses one of his hi-tech devices on Blue Devil…  picture028But it isn’t enough!  Ouch, that’s going to hurt!

picture023

But I.Q. has distracted the heroes while the rest of the villains arrive, led by the powerful sorcerer Wotan!

picture033Zatanna finds herself surrounded!  Which spell to use, which spell to use…

picture037The Mistress of Magic drives them back with a burst of dinw…errr, wind!

picture035Aquaman uses his telepathy on Wotan, hoping to stun him and disable his defenses.

picture039Zatanna prepares to finish off the Trickster, but Wotan prepares another spell!

picture042The Shade enters the scene, stunning the Nuclear Man!

picture045Meanwhile, Aquaman squares off with his half-brother…

picture047And Firestorm is airborne again!  Perhaps a little creative transmutation might be in order…

picture052The Battle rages on!

picture053Aquaman corners The Shade!  Let’s see that nightstick save him now!

picture063And Firestorm provides the coup de grace!

The heroes won the day, though Zatanna fell to the villains.  I think I’ve got the beginning of a good team here, and I am looking forward to completing their campaign over the summer when I return to the DCU!  I hope that y’all enjoyed this little bit of silliness as much as I did!

Marvel Adventures Released!

Ross_Marvel_Universe_1970s_Canvas

It’s done!  Welcome to Adventure in the Marvel Universe!   This is a gigantic mod that encompasses large swaths of the Marvel comics universe.  It attempts to capture the classic feel of a large assortment of characters with new stories set during the heyday of such icons as Captain America, Thor, the X-Men, the Avengers, and the Fantastic Four, as well as a bevy of villains and guest stars.

This mod gives you control over some of your favorite superheroes and lets you fight for justice in four color glory!  Included you will find a total of seven campaigns for a wide variety of characters and teams.  You can face the villainous Hellfire Club as the X-Men, or struggle to save all of the nine realms as Thor and his allies.

Check out the Marvel Adventures Album HERE!

Campaigns:

So, what are you waiting for? Join the fight!

Download Marvel Adventures now!

This mod is akin to my massive DC Universe According to Grey, though on a much smaller scale.  I have not tried to capture the entire width and breadth of the Marvel Universe, just my favorite corners thereof.  You’ll still find a very large mod here, with most of the classic heroes and many of the classic villains of the Marvel Universe.  On the other hand, this mod embraces a similar design philosophy to the DCUG, not trying to completely capture any interpretation of the Marvel U., instead trying to create an idealized version, something of the best of all worlds, in my opinion.  It is most closely based on the Bronze Age, but I took liberties to clean up continuity or for the sake of the story I wanted to tell.

Keep in mind, not all of the campaigns tell complete stories, and all of these are intended to be expanded and continued.  In the future I’ll add a Spider-Man campaign, Dr. Strange, perhaps Captain Marvel, and others.

Ghostbusters: Trick or Terror!

Howdy folks, and a happy belated Halloween!  I was struck with the desire to throw together a quick, one-shot Ghostbusters mod for Halloween, and it took me just a bit longer than I had thought it would.  Still, it’s done now, and I hope y’all will enjoy Ghostbusters: Trick or Terror!

Follow our four intrepid heroes as they try to save New York from a Halloween gone terribly wrong!

Download it here!

And a small patch to fix a portrait issues


Help the Ghostbusters face a very strange Halloween night!

Challenge the restless dead and make New York safe for her citizens!

Strap on a proton pack and make use of the Ghostbusters’ arsenal of gadgets!

Help Pete, Egon, Ray, and Winston fight back an incursion from the spirit world, and save Halloween!

Turtles Fight With Honor!

Howdy folks!  I just finished a full version of my Teenage Mutant Ninja Turtle mod.  I had previously released a mini-mod of sorts, but this release will have almost the entire first story arc included, along with a whole passel of TMNT characters, including fan favorites (and personal favorites) Bebop and Rocksteady, but also including Krang and the Fly!

This mod has 9, count them, 9 missions, which will take our half-shelled-heroes from their first encounter with the Foot Clan up to their discovery of a strange and sinister secret hidden below the streets of New York!  Along the way you’ll take command of the green teens as they battle the deadly Foot Clan, face the mechanical menace of Baxter Stockman’s Mousers, struggle against the mutated might of Bebop and Rocksteady, and even cross blades with the mysterious Shredder!

Krang and Baxter aren’t featured as opponents in the campaign itself yet, but they are both included, and you can play as or against them in the Dangeroom if you want to test their metal!

This mod also features the first contribution to the FF community by newcomer Adam Winters.  He has really increased the quality and comprehensiveness of this mod by creating three new voice packs with samples pulled from the original Turtles cartoon.  He’s created packs for Splinter, April, and Shredder, bringing the memorable and excellent voice work of that classic show to life in Freedom Force, and bringing a lot more personality to their respective characters within the game.

We are also lucky enough to get some custom mission music from the multi-talented ow_tiobe_sb!  Now we have some music made especially for the levels of this mod.

So, what are you waiting for?  Take a walk down memory lane, and see if you can keep from smiling when you load this mod and hear a familiar song on the main menu.  Take some time to remember why you loved the Turtles way back when, and why you should definitely still love them now!

Download Now!

Here’s a quick PATCH for some missing textures and an FX.  Just drop this folder into your FFvTTR directory and overwrite all.  (You only needed this if you downloaded the mod before 08/30/11.)

Or you can Check out the Readme!

Look for more Ninja Turtles action coming soon!  The next installment will take the Turtles into the Technodrome to face the cruel alien warlord Krang!  With any luck (and with YOUR help!), it will also see the introduction of a host of new characters, including the Punk Frogs, the Rat King, Metalhead, Leatherhead, and others!

Shell-Tastic Preview Part II

Welcome to the second night of shell-tastic previews Turtle fans!  Tonight we’re skipping ahead to mission #5, where the Turtles meet a foe who needs no introduction. To match action to word,  I will get straight to the good stuff!  Below you’ll find another set of preview shots to whet your appetite for the full release!


Before we get started, why not Visit the scenic sewers, with a stop in at the Turtles’ Lair?

Our mission opens with the Turtles hot on the trail of the mysterious Foot Clan!

Leonardo is anxious to cut them down to size!

But the Turtles find more than they bargained for!

This is no mere robot, but a ninja master!

But the Turtles aren’t without skills of their own

The Shredder strikes and the battle rages!

Uh-oh…this doesn’t look too good for our heroes on the half-shell!

I hope you enjoyed this latest preview!  Stay tuned for even more Turtle action!

Shell-Tastic Previews

Howdy folks!  We’ve had a pretty quiet few weeks here on the Greylands, but I have not been idle.  I’ve been hard at work on Marvel Adventures, but with the new semester starting and several missions and a good deal of work still to do, I decided that it was time to change tacks, which brought me to the TMNT mod sitting almost finished on my hard-drive.  I just recently got a beautiful and shiny new Splinter skin from the ever talented Daglob, who deserves a lot of our gratitude for everything he’s contributed to this mod!  Receiving this skin gave me pretty much everything I needed to release the finished set of seven missions that I’ve been sitting on for quite some time.  However, a new development has convinced me to add two more to that number, which will bring us almost up to the end of the first story arc.  That even, for those who have been following, was the multi-talented Cmdrkoeing agreeing to make, and then making with lightning speed, a skope of the Technodrome!

So, to make a long story short, I decided that I’d use my limited time to go ahead and get a project ready for release, and the good news for you Turtle fans is that the TMNT mod was already pretty close, so it made the cut!  Look for a full release coming soon, and in the meantime I thought I’d do a series of previews, teasing a few of the upcoming missions!

Below you’ll find some snapshots from the third mission of the campaign, where Raphael meets a personal favorite of mine, Casey Jones!

These two get off to a somewhat inauspicious beginning…

Okay, very inauspicious.

What, you’ve never seen a four foot tall humanoid turtle who knows ninjitsu?

However, it isn’t long before these two are brought together by their mutual love of senseless violence…erm, justice, I mean justice!

These punks have no idea what they’re in for…

Casey’s at the bat!

Well folks, I hope you enjoyed this brief preview.  Keep checking back throughout this week to see more, and look out for the full release sometime at the end of the week!