DCUG Developer’s Journal #3

Welcome back Freedom Fans!  Today’s journal covers some more testing, but it also has a teaser for something that is just starting to come together!

I have been working on testing the final expansion JLA mission (other than the JSA conclusion missions), #17.  This features the conclusion of the Injustice Gang storyline, with the League ambushing the Gang in their headquarters, much to their surprise!  I drew heavily on the excellent JL:TAS two-parter, “Injustice for All” for inspiration for this story.  Like the second episode of that arc, we begin with Batman captured and with the League rushing to his rescue.  However, Luthor has an ace up his sleeve, and the villains have backup in the form of the deadly dangerous Amazo!

I thought hard about putting Amazo into his own arc also based on JL, but I figured that I needed to concentrate my storytelling in this campaign in order to get the most bang for my buck because of how much time and effort it takes to create a single mission.  I can plot out endless stories, but there are only so many hours in the day to actually make them.  Thus, I have a less than optimal setup, but I think it makes for a nicely dramatic mission.

Anyway, because of my stacking the deck against my players, I decided to give them a way out in case they found Amazo too much to handle in addition to the other villains.  Using a setup I’ve used often before for turrets and other defenses, I gave Amazo a “kill switch” of sorts.  I created Amazo with a custom encounter, giving him a custom name so I can deal with him between encounters, but I also created a switch in that encounter, which, when flipped, triggers a CS that kills Amazo (bob).  To give the players a hint, I put in a time-delay CS to tip them off.  Check it out here:

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

Encounter: Meanbot1
Type: Custom
Actions: switches exist, villains fight heroes
Villains: amazo named bob
Secondary Objective: “Disable Luthor’s new weapon” for 2500 prestige
Switches: ff_science_equipment
Marker: warehouse2
Next: None

Start Cutscene:
Wait for 240 seconds
Hero says, “Look! If we can get to Luthor’s equipment, we might be able to disable the android!”
Red Arrow on warehouse2_object1

All Switches Turned Off Cutscene:
Camera on bob
Play effect effect_electricalburst at bob
bob says, “Nooo! I had only begun…to live…!”
bob is killed
Play music music_05_fort_ft

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

The mission itself was, once again, a bit of a mess at first, but fortunately, it was mostly an easy fix.  I had mixed my metaphors again in the main CS where the heroes confront the villains, using ‘real’ names (black_manta, cheetah, etc) instead of the substitution names I had given those characters so I could manipulate them between encounters (wet, cat, etc).  That kept the CS from playing.  You see, I had split the villains into two encounters, with Luthor in one and the rest of the Gang in another.  I did this because I had to get clever to work around Luthor’s Energy Shield interrogation bug, which I described in the first journal entry.  I had a devil of a time coming up with a workaround.

The simple thing would be to just use a Cutscene encounter with a new Lex after the defeat of the first, but this would mean you wouldn’t have to defeat the entire team to win.  I tried using that strategy, but starting the CS with a “Starts When” condition, triggered once the other encounters are finished, but those are always temperamental.  It didn’t work, so I tried a LOT of other things before settling on an unorthodox solution.

I made the final encounter a custom one, with conditions to turn off Lex’s AI and the “Allies Want to Chat” condition, meaning he’s interrogatable, without having to be defeated first.  This means that you won’t be able to talk to Lex until there are no enemies near by.  It’s not a perfect solution, but it gets us much closer.  Now, chances are, players will finish off everyone else before trying to talk to Lex.  Unfortunately, the Chat encounters have never really worked, but I got around this too.  I made the CS the End Cutscene for the encounter, so even though a Chat CS won’t work, as soon as the players click on Lex, the End CS plays, which has the same function.  And, viola, we’ve got a functional mission that even has some neat features.

With those intermediary missions finished, I’m on to the new JSA missions!

First, however, I haven’t just been working on testing.  No, I’ve been hard at work updating and tweaking other parts of the DCUG as well, and with the help of our riduclously talented and awesome community, I have a few new additions to show off.

There are a ton of really fantastic meshes, skins, and skopes out there for my favorite hero, Aquaman.  However, as you might imagine, I’m a tad picky about him, seeing as he is my favorite.  So, with the help of the community, and especially Detourne_me, I got an all-star team of mesh, skope, skin, and keys to create my ideal Aquaman for FF.  I also tweaked his powers and abilities, and he’s now more awesome than ever.  I even changed up his aquatic telepathy to use the ‘doot-doot-doot’ sound effect from the classic cartoon!



This awesome Aquaman deserved equally awesome villains, so asked Deanjo2000 to customize some new versions of Black Manta and Ocean Master.  The results are just plain stunning!  Dean really did an exceptional job on both, but his Orm is especially great because he was able to take my vague, unhelpful requests, and turn them into a really nice version of the New 52 look for the character that also incorporates some classic elements as well.



And finally, Detourne_me came through once more, providing me with something I expected to be quite tough, and doing it in record time as well!  Feast your eyes on a classic piece of DC war-comic history….the Haunted Tank!

These are only the beginning, too!  I’ve got several more skopes/skins from Dean and from others that I’m going to be using to update and expand the mod in the days to come.  I’ll post some teases for such updates in these journals from time to time!

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.