Post news Report RSS Developer's Diary #2: More Mission Madness

This is a summary/overview of the progress of the mod. It is also meant to serve as a guide to modding, full of helpful tips if you're interested in getting into FF modding. Mostly, it's a way to show off what I'm working on and gripe about troublesome missions. In this diary, I do battle with the recalcitrant map and script for mission #15 and #16.

Posted by on

Time for my second Dev Journal as I continue working on updating and expanding my massive DCU mod. This one covers missions 15-16 of my JLA campaign (one of many!). If you're a DC fan, fond of superheroes, or just love great games, I invite you to join along with me while I work with the greatest superhero game of all time, the wonderfully mod friendly Freedom Force vs. The Third Reich!

Before we get started, here is some basic information:

This mod is created using EZScript, a Python interface designed by M25, a fellow much brighter than me, which simplifies the process of scripting and makes it more accessible. The terminology I use is based on a familiarity with that tool. You can learn about that HERE.

You can learn about the basics of modding in FF HERE.


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 ton about maps and objects that I never knew....though I still couldn't solve my problems. Still, I enjoyed learning new elements of FF modding! 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 Martian Manhunter and Green Lantern. Wonder Woman'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.

Screenshot 20

This instance only resulted in the latter, thankfully. I was able to fix MM's encounter by doing the same thing I had done 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 EZScript, for those that are interested.

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

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.

Screenshot 18

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. Weird, right?

Once again, I examined the terrain.nif, but I couldn't make heads or tails of what I was seeing. I posted on FreedomReborn, the home of the FF community, 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 mysterious (to me at least) template (object) attributes in the manual. If you're ever tying to figure them out, you can check objattributes in the manual for a complete listing.

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

I checked the terrain.nif 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!

Screenshot 17

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 cutscenes weren't playing, and the object in question wasn't showing up. Turns out, I had misspelled the object name (d'oh!) 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 feel welcome to leave comments or questions, especially about anything you'd like to hear more/less about, or if you'd like me to illustrate other parts of the process. Stay tuned for more diaries as I continue building the DCUG!

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: