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.

 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!


EZScript Script-Off Winner!

It’s decision time, my friends!  Well…actually, it was decision time earlier this week, but that’s the way things go.  Either way, I’ve played each of our two submissions a few times, and I’m ready to announce a winner.  I had hoped to see more people participate, but I was still really happy to at least see some interest.  I’ll review each entry, and then announce the winner.

Reich Around the Clock by Yellow Lantern:  This was a fun mission, with the Blitz fighting Nazis and running over hill and dale to punch the soldiers of the Reich.

Nazi Punching can quickly become an addiction

You jump right into the action, with civilians that need rescuing from a blazing fire.  We don’t get much set-up, which isn’t necessarily a bad thing, but knowing next to nothing about the character, I wouldn’t have minded a bit of context or character building.  There is a nice variety of encounters, going from that fire rescue to stopping the Nazis from tearing down some homes.  Then you’re fighting in earnest, first just soldiers, but then a pretty challenging encounter with a pair of tanks!

Something about this doesn’t seem quite right…

I found this the highlight of the mission, because you’ve only got one attack that can really hurt these behemoths, and it was tricky to maneuver around them long enough to build up the charge necessary to toast them. I thought that the mission was going to end after this encounter, especially considering how banged up I was, but imagine my surprise when I went from the frying pan into the fire. I just managed to defeat the tanks, and all of a sudden, the sky is filled with Eyes of the Reich…and The Blitz without a decent ranged attack to his name!

Alright, this hardly seems fair….

This is where the mission takes a turn for the impossible. I tried a couple times, but couldn’t get past the Eyes. With a little creative cheating, though, I managed to get through to the final encounter where I faced…Blitzkrieg himself! ‘Ol big brain is guarding a bomb that kills non-aryans, which I thought was a nice touch, and you face a pretty desperate fight against him and a passel (gaggle, flock, herd…what’s the term for a group of these guys?) of Killarillas.

Tanks and flying brains weren’t enough, now I have to be pummeled by monkeys?!

All in all, this was a fun, creative mission with a bit of witty dialog and some challenging things to do, but it is also one that becomes downright impossible by the end. The Blitz himself was fun to play, and he had a nice variety of powers. The difficulty and lack of context do hurt it a bit, but the overall effect was still pretty good. I give this one four unconscious Ratzis out of five.

The Test, by John Jr.: Here we have a Superman adventure in which the Man of Steel finds Metropolis under siege by mysterious forces. JJ gives us some simple but enjoyable bits of characterization as Supes uncovers the alien menace in their midst.

Man these guys are ugly!

It turns out that these diabolical spacefarers are testing weapons on the people of Earth because they are similar to the great enemy of their race. I thought that was a pretty neat motivation for the bad guys to have, and JJ makes good use of the built in FF aliens. Of course, Supes doesn’t take that too kindly, and he starts to hunt the invaders down.

Yeah, you’d better run!

The mission ends with a showdown against Praetor, who proves admirably resistant to a Super-thumping. However, these aliens are, in general, fairly ineffective against the Man of Steel. Their shields may stop his heat vision, and they may be resistant to crushing damage, but it still only takes him a few shots to drop them. More importantly, their weapons just aren’t much of a threat to Supes.

Let’s see your shield stop THIS!

That isn’t much of an issue in the first part of the mission, where the real danger is to the civilians you are saving, rather than to Superman himself. It is pretty challenging to get to the aliens and take them out before they can blow the citizens of Metropolis to kingdom come, but when you go after the alien’s leader, there isn’t really much tension to the encounter. This mission had some good characterization, but it needed a bit more in the way of challenge. Still, this was a fun mission, and after having slaved over DC characters for so long, it was something of a breath of fresh air to play a nice, simple adventure like this. There is something rather zen about hurling a car at an evil alien. I give it three and a half hurtling automotive missiles out of five.

The winner by a nose is Yellow Lantern! I want to stress how close this was, as these missions were, in some ways, mirror images of one another. Where YL’s entry was too tough, JJ’s was a bit too easy. Where the first didn’t have enough context, JJ’s had a nice bit of characterization. It was a pretty close call. I hope that y’all enjoyed this contest, I know that I did! I’ll be putting up a page for YL’s entry sometime this week, and I’ll come up with something for JJ too, as a consolation prize. Thanks for playing guys, and I hope you’ll have more company next time!

Elementary My Dear Watson….

You know, Holmes never actually says that….anyway, I’ve been plugging away on project number three today, and I was wondering if anyone out there has figured me out.  I thought it might be fun to see what people think I’m doing (those that care, at any rate).  If you’re curious and you’d like to take a guess, then please feel free.  I’ll point out whoever was closest to the truth when I get to release day.  I’ll give you a hint, I’ve talked about two of the three already on this blog.  So, feel free to comment and make a guess as to the list of projects that I’ve been working on!  I’m really curious to see if anyone has any inkling of this third project, which I haven’t breathed a word about.  In addition, which, if any, of the ideas I’ve mentioned would y’all LIKE to see developed?  You never know, if there is a lot of interest (unlikely considering how many people are reading this, I know) I might be persuaded to take something up that I hadn’t seriously considered before.

Doing More with EZScript

We’ve talked a bit about how to do fairly simple things with EZScript, so I thought I’d take some time tonight to talk about getting just a bit more fancy.  There are a few fairly common types of missions whose creation in EZScript may seem a little difficult to figure out when you’re just beginning.  One of the things that I wanted to do when I was first getting started on the DCUG was figure out how to create a mission where success or failure depended largely on the player’s ability to be stealthy.  Do y’all remember the stealth mission from the original FF campaign, the one where Minute Man had to sneak past a bunch of thugs who would trigger an alarm if they saw him?  Well, that gave me the idea, and since I was working on a Batman campaign, it seemed like a perfect fit!

But, how should I go about it?  Well, thanks to M25’s pointers, I finally worked out what I needed to do, and it is a system I’ve used for several missions since then.  To illustrate it, I’ll create part of  a Ninja Turtles mission in which the Heroes in a Half Shell have to slip past the police without being seen, while at the same time searching the city for clues.  We begin with a simple cutscene, and take advantage of the “Next:” field to spawn several encounters at the same time.


Encounter: Intro1
Type: Cutscene
Next: Punk1, Punk2, Punk3, Guard1, Guard2, Guard3

Start Cutscene:
narrator says, “After rescuing a plucky reporter from a gang of thugs out to ‘send her a message,’ the Turtles joined April O’Neil in pursuit of a story that would prove that they had not been behind a number of recent robberies around New York.”
narrator says, “While the boys stopped for a pizza, April continued her investigation, following her nose right into a trap!”
Cinematic camera on leonardo to raphael
leonardo says, “April’s disappeared, dudes!”
raphael turns to leonardo
raphael says, “Don’t worry Leo, she’s a big girl. I’m sure she can take care of herself.”
Camera on donatello
donatello says, “I’m not so sure guys. I mean, those creeps are probably still looking for her. What if they found her again?”
Cinematic camera on micaelangelo to leonardo
michaelangelo plays animation melee
michaelangelo says, “Well dudes, we gave those losers a pounding once, we can do it again!”
leonardo says, “Right Mikey, let’s hit the streets and see if any of the local riff-raff know anything. But remember, let’s act like ninjas and stay out of sight!”


Now, there are two things I want to point out about this.  First, you’ll see that I’m calling for six encounters to begin, but they are all encounters that won’t actually start RUNNING until you move characters close to them.  The characters in them will spawn, but they won’t take up too much juice just sitting there.  Something like this gets a lot more demanding when you are triggering encounters that start immediately, and that is something to keep in mind if your machine is a little on the older side.  Second, I forgot to talk about the difference between “Camera on” and “Cinematic camera on” commands in my last EZScript post.  Camera on points the camera more or less straight down at a single character, at a moderate height that will include a good deal of background.  Cinematic gets you in a little closer, and can be good for dramatic moments.  It is also good for FOLLOWING moving characters.  I tend to alternate the two, so there aren’t any jerky camera transitions.  Also, you can tell the game to stretch a shot from one character to another with the Cinematic camera, and that can be good for creating the illusion of a conversation or a face-off.

What’s next?  Well, the three encounters where the Turtles are looking for clues are all just variations on the same theme, stop a mugging, catch a thief, etc.  I’m going to make one of them an interrogation, though, so that our heroes can get some information pointing them to the final encounter.  I COULD make this clue encounter both an interrogation AND something else using a Custom Encounter, but we’ll talk about those another day.  Punks 1-3 won’t have a marker specified, so they’ll be random.  The player will have to search for them.  Guard 1-3, however, have to be tied to a specific location if we want them to look right.  Let me show you what I mean:


Encounter: Guard1
Type: Flee The Scene
Villains: cop, cop
Marker: post1
Next: If All Escaped: Alarm1
Next: If Some Escaped: Alarm1
Next: If None Escaped: None

Alert Cutscene:
Camera on leonardo
leonardo turns to Villain1
leonardo says, “Uh-oh brothers, we’d better stick to the shadows. We can’t afford to be seen, but I’d really rather not hurt innocent policemen.”

Start Cutscene:
Cinematic camera on raphael
raphael says, “They’ve spotted us! Let’s take ’em!”
donatello says, “But…they’re the good guys!”
raphael says, “Better that they wake up with a headache than we end up in a lab somewhere!”

Villains Escapes Cutscene:
Camera on donatello
donatello says, “This can’t be good…”

None Escaped Cutscene:
leonardo says, “That was too close…we must be more careful. Remember the lessons Master Splinter has taught us.”


You see, the base for this kind of stealth mission is simply a “Flee the Scene” encounter, and you could technically do that without calling for a marker, but if you want it to look like that Minute Man mission, where your flunkies trigger an alarm, you’ll need to do a little extra work.  See, having a specific marker, in this case “post1” allows you to place another marker “post1_end1” which will tell the villains where to run.  That may not really seem that helpful, but if you were to place the alarm bell from the Nazi base map over that marker, then you’d see these cops run for that alarm, rather than for a particular edge of the map.  Now, you’ve got a few options as to what to do once the alarm is tripped.  If you want stealth to be absolutely vital to the mission, you can simply put “lose” after the next entries for characters getting away.  What I like to do, however, is force the player to face a boatload of reinforcements if they can’t slip past the guards.  The next step is the key, though, as getting the right look is only part of the issue.


Encounter: Alarm1
Type: Hunt
Villains: cop
Minions: cop
Marker: post4

Start Cutscene:
michaelangelo says, “Look out, here comes the cavalry!”


You now have to tell the game to summon reinforcements for the shocked cops.  Here, we place a “post4” marker next to a doorway nearby, and use a hunt encounter so that these policemen will chase after the Turtles.  Thus, if the alarm is tripped, it will seem like the cops have called for backup.  You can even add in more dialog to indicate exactly what is going on.

And there you have it.  It is really simple in the execution, but it took me quite a while to figure out.  I like to think that the result in game is actually pretty neat, and a nice variation from the standard fare of “punch this guy.”  I hope that was useful to someone out there!

The Anatomy of an EZScript Adventure

Well, I’ve been debating how best to illustrate the composition of an EZScript mission, and I thought that it might be useful to y’all to actually watch one get written, in a way, so, if that interests you, join me as I put together a relatively simple adventure for a favorite character of mine:

The DCUG includes a campaign that alternates between The Atom and Hawkman and Hawkgirl, and as I was debating what I wanted to do for this post, it occurred to me that I had plans for several missions that would be pretty simple.  So, I’ll open up EZScript Edit, and instead of using my previous scripts as models, I’ll compose from scratch so you can see the whole process.

I’ve got my heroes, but who should my villain be?  Well, I’m in luck there, as I have a fairly extensive backlog of stories that I haven’t had time to get to you.  Reaching into my notes more or less at random (with an eye towards the beginning of my overall story arc with the Hawks), I come up with The Fadeaway Man!  I’ve said before that the DCUG is the home to obscure characters.  Anyway, the next step is to figure out what I actually want to happen in this mission.  Since Fadeaway Man is more or less just a thief, we’ll start with a jewel heist.  I can choose a couple different encounter types to simulate this, for example, I could chose a straight up “Fight” encounter and just create the illusion of a heist via dialog.  I could also use a “Save Civilian” encounter, implying that our villain would be going THROUGH some hapless civilian to get his trinket.  Instead, I think I’ll use an “Interrogation” encounter, which will allow our villain to have a conversation with our heroes at the end of the encounter.  So, I double click on “Interrogation,” and I receive this:

Story: 05hawkman


Type: Interrogation

Alert Cutscene:

Start Cutscene:

Interrogation Cutscene:

End Cutscene:


You’ll notice that I’ve named my mission (something simple and easy to remember), and that I’ve added “#—-” to help me separate various encounters, and to make my scripts a little neater and easier to follow.  Now we need to fill in the blanks.  We’ll name the encounter “Jewel1,” which is a nice simple name I can recognize quickly, and use as part of something else if I ever feel so inclined.  It is important that you never name your encounters with parts of characters names, terms that show up in encounter types, or marker names. Any of those things can cause EZScript to get confused.  That’s why simple naming is such a good idea.  Next, we identify the cast.  We’ll have the Hawks as part of our team going into this mission, so we don’t need to worry about them.  The villain is, of course, fadeaway_man, and he won’t have any minions in this encounter, so I’ll remove that line.  Now all we need to do is decide which cutscenes, if any, we want.  Remember, you can use as many or as few of these as you like.  However, in encounters like this that don’t simply end when all of the bad guys are down, an End  CS can be a good litmus test to make sure everything is working properly.  For our purposes, we’ll provide an Alert, Start, and Interrogation CS.  The finished encounter looks like this:


Encounter: Jewel1
Type: Interrogation
Villains: fadeaway_man
Primary Objective: “Stop the robbery and catch the mysterious thief” for 50 prestige
Next: Jewel2
Marker: store1

Alert Cutscene:
Cinematic camera on hawkman to hawkgirl
hawkman says, “I suppose since we’re going to be staying here, we may as well try to make ourselves useful,Shayera.”
hawkgirl says, “Shall we patrol the city? It will be just like our joint shifts back on Thanagar.”
hawkman says, “An excellent idea, I…”
hawkgirl turns to store1
hawkgirl says, “Wait! Do you hear that?”
hawkman turns to store1
hawkman plays animation melee
hawkman says, “Yes…yes I do…just on the edge of my hearing…it sounds like…”
hawkgirl says, “A siren! Fantastic, let’s go!”
hawkgirl moves to store1
hawkman says, “This night is getting interesting already!”
Red Arrow on fadeaway_man

Start Cutscene:
Remove Arrow on fadeaway_man
Cinematic camera on fadeaway_man
hawkman says, “It’s Professor Lamont…but what in the world is he doing?”
fadeaway_man turns to hawkman
fadeaway_man plays animation melee
fadeaway_man says, “No! I just needed a few more minutes to muster the concentration needed to teleport these diamonds away…stay back aliens!”
Camera on hawkgirl
hawkgirl says, “What do you think you’re doing, pal? Don’t you want to reconsider. You can’t get away from us.”
Cinematic camera on hawkman
hawkman says, “And if you try, it’s going to hurt.”
hawkman turns to hawkgirl
hawkman says, “He must have stolen that cloak from the museum…he used us Shayera!”
Camera on fadeaway_man
fadeaway_man says, “I don’t know how you flying fools found me, but leave now or face the power of the Cloak of Cagliostro!”

Interrogation Cutscene:
Camera on fadeaway_man
fadeaway_man says, “You’ve caught me…but…the question is….can you hold me!?”
Fade for 2 seconds
hawkman says, “What are you talking abo….wait, where’d he go?”
fadeaway_man teleports to spot1
Unfade for 3 seconds


I’ve added my dialog, pointed the camera at what I wanted, and got just the slightest bit fancy at the end.  To make the story a bit more dramatic, I teleport our villain out of the way before we get the game rolling again.  Now we won’t be stuck looking at him until the game removes him.  You may also notice that I’ve called a few specific markers.  That’s fine as long as I place them on the map.  Without them, this encounter won’t work at all, or at least won’t work properly.  I’ve also added an objective which will show up and help the player figure out what to do.  So, what next?  Well, now we have to hunt down our escaped villain, searching for him in the city.  To make this really effective, I’m not going to call a specific marker, so that he’ll show up at a random spot each time you play.  We’ll make it a simple “Fight” encounter, which will keep him from looking for us.


Encounter: Jewel2
Type: Fight
Villains: fadeaway_man
Minions: thug_with_gun
Primary Objective: “Track the thief down and stop his escape” for 150 prestige
Next: Win

Alert Cutscene:
Camera on hawkman
hawkman says, “How’d he vanish like that?”
hawkgirl says, “It has to be something to do with that cloak…he claimed it had some kind of power.”
hawkman says, “Well, I suppose we’ll find out when we take it away from him. Come on, let’s see if we can’t track him down!”

Start Cutscene:
Cinematic camera on hawkman
hawkman turns to fadeaway_man
hawkman says, “Alright magician, you’ve pulled your last vanishing act!”
Camera on fadeaway_man
fadeaway_man says, “It’s Fadeaway Man to you, bird brain! We’ll see about that!”

End Cutscene:
Camera on hawkgirl
hawkgirl says, “Let’s get this thief into a cell and this cloak back to the museum.”


Well, that tells a complete story, so we could really stop here, but I like to try and provide a bit more for the player to do, so let’s flesh this adventure out with a few secondary objectives.  Since the Hawks are just getting started in Midway City, it’s only natural that they’d run into the organized criminal element sooner or later, right?  Well, we’ll scatter a few different types of encounters with mob types to spice things up a bit.


Encounter: Mug1
Type: Building Rampage
Villains: thug_with_gun, thug_with_grenade, thug_with_grenade, thug_with_gun, thug_with_grenade
Allies: civilian_male
Next: If Ally Survives: None
Next: If Ally Lost: None

Start Cutscene:
Camera on Villain1
Villain1 says, “Sorry pal, but you was told that if you didn’t buy our ‘insurance’ bad things might happen to you. You shoulda’ listened. Now we gotta’ smash this place up a bit…”
Cinematic camera on hawkman
hawkman says, “No…I think that you’re the one that should listen, because I’m only going to say this once. Put down your weapons while you can still move your arms.”


Encounter: Mug2
Type: Heist
Villains: thug_with_gun, thug_with_bat, thug_with_gun, thug_with_bat
Item: crate
Next: If Item Recovered: None
Next: If Item Lost: None

Start Cutscene:
Camera on Villain1
Villain1 says, “Grab the loot, sooner we get it to the fence, sooner we can split the money.”
Cinematic camera on hawkgirl
hawkgirl says, “I don’t think so boys. Why don’t you hand it over now and save us all a lot of trouble.”
Villain1 says, “Look out, it’s the fuzz…and they got wings!”


Encounter: Mug3
Type: Save Civilian
Villains: thug_with_gun, thug_with_bat, thug_with_gun, thug_with_bat, thug_with_gun, thug_with_gun
Allies: civilian_female
Next: If Ally Survives: None
Next: If Ally Lost: None

Start Cutscene:
Cinematic camera on Villain1 to Ally1
Villain1 says, “Alright girlie, I imagine your rich daddy will pay well to get you back in one piece.”
Ally1 says, “No…please….just let me go….”
Villain1 says, “Now, come along quietly girlie, or things are going to get ugly.”
Cinematic camera on hawkman
hawkman turns to Villain1
hawkman says, “I know things are pretty different here, but I’m fairly certain that kidnapping people is just as unlawful here as it is where we’re from…”

Ally Thanks Hero Cutscene:
Camera on Ally1
Ally1 says, “Thanks Hawkman! Thanks Hawkgirl!”
Cinematic camera on hawkgirl
hawkgirl says, “Girl? Not again! This is going to catch on if I don’t put a stop to it.”
hawkman says, “Later darling, we’ve got bigger game to catch!”

Ally Lost Cutscene:
Camera on hawkgirl
hawkgirl says, “No…she was counting on us!”


So, these are all simple, and they are all marked as having “None” following them.  Important, any time you use encounters out of sequence, you need to specify what follows them. For example, if I didn’t specify that nothing follows Mug1, after you finished it, the game would go ahead and start a SECOND Mug2.  Now we’ll add an extra treat (punishment?) for those completists who explore the entire map and do all of these encounters.


Encounter: Mug4
Type: Hunt
Villains: warlord, mafioso, mafioso
Minions: thug_with_gun, thug_with_bat, thug_with_gun, mafioso
Starts When: Mug1 at End, Mug2 at End, Mug3 at End

Start Cutscene:
Camera on Villain1
Villain1 says, “Hey, birdboy! You’ve been interfering in our business…and that ain’t wise…that ain’t wise at all. We got a message for ya’, and it’s spelled in lead!”

End Cutscene:
Cinematic camera on hawkman
hawkman says, “Well, we certainly seem to be making an impression…”


There you have it, total time for this mission, right around 45 minutes.  I hope that was helpful, and perhaps even interesting to a few of you.  Please post if you have any questions!

The Ease of EZScript

In honor of the EZScript Script-Off, I thought I’d take tonight’s post and talk a bit about how to get started with a mission and also post an example script.  For those of you following my “Projects from the Ether” series, don’t worry, it’ll be back soon.  EZScript was, as I said in yesterday’s announcement, a great tool before the advent of the Editor, but now that we have that as well, it is really surprisingly easy to use.  To get started, I’d advise you to read the excellent manual that comes with any download of FFX3.  You’ll find a specific folder for EZScript, and there is tons of great info in those documents.  However, I can give you a crash course here to help you get the hang of it.

  1. First off, decide what you want to do.  I know this may sound like common sense, but it really does help to have a clear idea going into a project.  Decide which characters you are going to use, and make sure that you give them names that won’t cause EZScript problems.  If you’re using herofiles, avoid apostrophes or anything other than letters.  Also, keeping names lowercase is generally a good idea.
  2. If you want to use a map already set-up to work with EZS, (meaning all of the events in your mission will occur at a random spot on the map) you can simply open up the editor and start writing, but if you want to dictate where things will happen, you’ll need to place “markers” on the map you want.  You’ll want to read the Manual to get a good idea of what goes into making EZS maps, but I’ll go ahead and tell you the basic types of markers any adventure needs.
    1. hero1, 2, 3, and 4 (assuming you’re using 4 characters)
    2. encounter1, 2, 4, etc.  You don’t NEED more than a few of these if you’re going to use specific markers, but it’s usually a good idea to have a dozen or so in case someone else wants to use the map.  All encounters that aren’t tied to a specific marker will randomly appear and one of these.
    3. skirmishspawn (very important and often forgotten)
  3. Next, you start writing your actual mission in the editor.  The easiest way to do this is simply to use someone else’s as a base.  I constantly reuse my own work, especially the stuff I KNOW works, and it saves me time and cuts down on careless errors.  You can also start a mission from scratch with the editor.  The first thing to do is to click on the “Panels” menu at the top of the program, and navigate to whichever directory you’re working in.  Doing this will let the editor recognize all of your characters, special objects, even your herofiles!
  4. Now you’re ready to pick from various different types of encounters to create the ACTION of your adventure.  If you’ll look at the big white box on the top right, you’ll see a drop down menu where you can select different types of encounters, objects, characters, and basically all of the elements you need to create your script.
  5. If you want, say, Spider-Man to stop a mugging, then chose the Save Civilian encounter, and you’ll be webbing street punks in no time!  Just chose whichever encounters you like, fill in the blanks, and you’re all set.  Missions will run straight from one encounter to the next, unless you specify something different, and as soon as the last encounter is finished, the mission will end.  Also, if you want to make sure you didn’t make any typos (my nemesis!), then click on the “Tools” menu at the top, and select the analyze option.  EZScript Editor will actually point out all of your mistakes in red!

So, just how easy to use is EZScript?  Well, I put the following simple mission together in under five minutes.  Assuming you have herofiles or built-in characters named “ninja” and “deadpool,” you can drop this in your “stories” directory and play it on any EZScript enabled map.:

Story: Ninjageddon

#Sample EZScript adventure

Encounter: Opening
Type: Cutscene
Allies: civilian_female

Start Cutscene:
Cinematic camera on deadpool
deadpool says, “Something clever involving the army of ninjas I’m about to kill.”
Ally moves to deadpool
Ally says, “Help, ninjas!”


Encounter: Badguy1
Type: Hunt
Minions: ninja

Start Cutscene:
Cinematic camera on Minion
Minion says, “Kill deadpool!”
Camera on deadpool
deadpool plays animation melee
deadpool says, “Something clever…again.”

End Cutscene:
Cinematic camera on deadpool
deadpool says, “I need to stop these ninjas from blowing up a bus full of children…or some such.”


Encounter: Explosion1
Type: Disarm Bomb
Villains: master_ninja
Minions: ninja
Bomb: ger_crate_ammo
Time: 160
Next: If Bomb Disarmed: Win
Next: If Bomb Exploded: Lose

Start Cutscene:
Cinematic camera on master_ninja
master_ninja says, “You have come to me to die!”
Camera on deadpool
deadpool says, “Blah, blah, blah, clever clever.”

Disarm Bomb Cutscene:
Cinematic camera on deadpool
deadpool says, “Was it the red wire, or the blue one?”

Bomb Exploding Cutscene:
deadpool says, “Ouch!”

Bomb Disarmed Cutscene:
deadpool says, “That got it!”

Bomb Exploded Cutscene:
deadpool says, “Ouch!”

EZScript Script-Off!

Welcome to Freedom Reborn’s first, but hopefully not last, EZScript competition!  I’ve been a big proponent of M25’s nearly miraculous scripting tool, and have only been able to create mods for Freedom Force thanks to him.  I’ve said many times that EZScript is extremely easy to use, and have shown that you can actually create an adventure in about five minutes, provided you aren’t trying to be too fancy.  When you’re doing more complex stuff, like a massive, five-campaign mod called the DCUG, it tends to become equivalently challenging.  However, with the advent of the EZScript Editor, there is an almost fool-proof way to create adventures for Freedom Force.  I want to call on the FF community, especially those who have never attempted modding before, to take a crack at creating a short mission.

We all have a favorite character, or a favorite group of characters, and as likely as not, your particular favorite hasn’t received quite as much attention as you think they deserve.  Now’s your chance to tell a story all your own.  Anyone who wants to participate should choose their favorite character, or handful of characters, and write a simple one mission script for them.  If you want to tell a story about Thor, then do it!  If you want to see an adventure starring the Blue Beetle, create it!  Any character or setting is fair game, and most already likely have some assets available for them.  Take advantage of the vast amounts of content available for this game, because we are lucky enough to still be playing it when even some of the most obscure characters have been skinned, meshed, or skoped.  You don’t need to create a whole mod, just a simple rumble room mission, although you are welcome to do more if you feel so inclined.  I also encourage you to simply use maps that are already EZScript enabled, but if you want to create or modify a map, then feel free to do that as well.

If this is a contest, there has to be a winner, right?  I’m afraid you’re stuck with me as a judge, but the winner will receive a page here on my blog to showcase their mission, and any others they want to make.  If any of the more talented members of our community want to contribute something else in way of a prize, I’d be quite alright with that.

If you’re interested in trying your hand at this contest, then sign up here or at FR, listing your character and, if applicable, your setting/era.  I’m going to allow a week for sign-ups, and a week for production (although you only really need an afternoon for something relatively easy).  All submissions must be in by Sunday the 31st of January.  Submissions should include an EZScript mission file, a map (if you’re using a custom one), and herofiles/meshes/skins for necessary characters.  I encourage you to pack everything up and upload it to Mediafire or a similar service.

I’ll also be posting one or two EZScripting advice columns in the next week, for those of you who might be a bit nervous about this undertaking.  I’ll also be posting some example scripts, which you are all free to chop up and use any way you like.

So, whether you are a skinner, mesher, skoper, modder, or even a lurker, I challenge you to tell your own story, and tell it well!