Making a Mini-Mod

By M25

 

Decide on the Story

It may sound obvious, but you can’t write a story without having a story in mind. Brainstorm! What sort of mission do you want? Will the agents of Nuclear Winter threaten Patriot City? Will the heroes discover lost empires deep beneath the surface? Will aliens invade the countryside? Or will your hero simply have a throw-down his or her arch-nemesis?

As an example, let’s take the first idea and run with it. Agents of Nuclear Winter are threatening Patriot City – ice troopers are running amok freezing citizens and looking for… something. After the heroes fight off numerous groups, they discover Nuclear Winter himself along with his honor guard just as Nuclear Winter finds what he’s been looking for: a frozen giant buried beneath the city!

A quick warning before we go on – when writing mini-mods, be careful if you are using a word processor. Microsoft Word and likely others, use non-standard quotation marks, and poor EZ script won’t understand them. You may be able to convert your document to text format and get it to work correctly. When in doubt, just use a text editor like Notepad.

 

Create the Actors

When you have a story, you will then have an idea of who is involved in that story. Decide who the major villain or villains will be. What sort of minions (lackeys) do the villains have? What sort of allies will the heroes have? List them out, at least in your head.

There are five major types of characters used in mini-mods. Not every type needs to be in every mini-mod.

For our example we have:

Now, take note of names the game gives to these characters. If they are hero files, then you need to use the name exactly as it is shown in the hero file, with spacing and capitalization intact (‘My Hero’ is not the same as ‘my hero’).

If they are built into the game, then you will need to open up FFEdit and look at the templates tab to see what name the game has given them.

For example, Nuclear Winter is spelled nuclear_winter in FFEdit. Likewise, the Ice Troopers are spelled ice_trooper.

 

Break the Story Down into Encounters

Mini-mods use encounters as the driving force behind a story. That is, each story is made up of one or more encounters. To make a mod in EZ script, take your story idea and think about what encounters you would like.

Each encounter is a set-piece, usually of action, but can also be of dialogue, investigation, or even a race against the clock. You may want to think of an encounter as a scene in the story. The heroes may gather information from an informant in one scene, battle thugs in another scene, and confront a villain in a third scene.

Each encounter in EZ script has a name (or type) associated with it. Here are some common types of encounters used in EZ script:

Let’s go back to the example. Remember our description of the story: “Agents of Nuclear Winter are threatening Patriot City – ice troopers are running amok freezing citizens and looking for… something. After the heroes fight off numerous groups, they discover Nuclear Winter himself along with his honor guard just as Nuclear Winter finds what he’s been looking for: a frozen giant buried beneath the city!

What sort of encounters are in this description?

Now is the time to actually start writing EZ script. Once we know the actors and the encounters, it’s easy to write up the basic story.

 

As always, we start with the name of the story.

Story: Agents of Nuclear Winter

Each encounter has a simple format:

Encounter: Name of Encounter
Type: Type of Encounter (Fight, Interrogate, Save Civilian, Hunt, etc.)
Villains: any villains in the encounter
Minions: any minions in the encounter
Allies: any allies in the encounter
Objects: any objects in the encounter

You always need a name for your encounter and a type, but the others (villains, minions, objects and allies) can be used as needed. So if there are no villains in your encounter, you don’t need a ‘Villains:’ line.

For the encounters with the ice troopers, let’s add a Fight, Interrogate and Save Civilian type of encounter. Remember to use the correct names for each villain, minion or ally in each encounter.

Encounter: Ice Trooper Fight
Type: Fight
Minions: ice_trooper

But wait a second. One Ice Trooper isn’t much of a threat for a full fledged hero, is he? Remember that minions are not unique (unlike villains and allies) – EZ script will add as many minions as it thinks it needs to challenge the heroes. If you bring Minute Man and Liberty Lad into this encounter, you will end up seeing many Ice Troopers.

Encounter: Interrogate Minion
Type: Interrogation
Minions: ice_trooper

The fight and interrogate encounters only need minions to fight against, but also people to save. The people to save are considered allies.

Encounter: Frozen Civilians
Type: Save Civilian
Minions: ice_trooper
Allies: civilian_male, civilian_female

Now, let’s add the encounter with Nuclear Winter. This is also a fight, but it contains villains as well as minions. Nuclear Winter is using a strange machine to raise the Frozen Giant and that goes in the objects line (the name of which is of course taken from the Templates tab of FFEdit).

Encounter: Boss Fight
Type: Interrogation
Villains: nuclear_winter
Minions: ice_queen, snow_man
Objects: nazihq_lab_machine_6

Finally, the climactic fight with the frozen giant itself. We’ll also throw in four cops as allies to spice it up.

Encounter: The Frozen Giant
Type: Fight
Villains: frozen_giant
Minions: ice_trooper
Allies: cop, cop, cop, cop

You might be tempted to try the story out at this stage, but it isn’t quite ready. Next we have to tell EZ script how the story flows.

 

Connect the Encounters

Great, we have a bunch of encounters, but if you try to play it in the game, you will find that you get one encounter after the other. That’s not bad, but it doesn’t quite give the feeling that the entire city is threatened and that the heroes are needed in many places at once. (As a side note: I’m just talking about the feel of the mission here – the actual encounters don’t start until the player gets close to them – so don’t worry about players having to be in multiple places at the same time.)

The connections between encounters show how one encounter flows into the next. Two additions to the encounter format allow us to do that.

Encounter: Name of Encounter
Type: Type of Encounter (Fight, Interrogate, Save Civilian, Hunt, etc.)
Starts when: encounters that have to finish before this one will start
Villains: any villains in the encounter
Minions: any minions in the encounter
Allies: any allies in the encounter
Objects: any objects in the encounter
Next: encounters to start after this encounter is over

Naturally there are several options.

1. One encounter right after the other. In our example, we want to fight Nuclear Winter and then encounter the Frozen Giant. Simply place the encounters one after the other in your text editor.

Encounter: Boss Fight
Type: Interrogation
Villains: nuclear_winter
Minions: ice_queen, snow_man
Objects: nazihq_lab_machine_6

Encounter: The Frozen Giant
Type: Fight
Villains: frozen_giant
Minions: ice_trooper
Allies: cop, cop, cop, cop

 

2. When one encounter completes, several other encounters appear. In our example, we want several groups of ice troopers on the map at once threatening Patriot City. Use the ‘Next:’ line and write out the name of each encounter after it.

Oh no! He’s breaking out the boxes and lines!

Yes, sometimes it is easier to draw a picture of how you want your story to flow. Don’t worry, EZ script doesn’t actually require it.

You’ll notice that I snuck another encounter in there: ‘Starting Cutscene.’ In order to flow into the three ice trooper encounters, we need something to flow from. Having this extra encounter will also let us play a cut scene before all of the action starts.

In EZ script, you write:

Encounter: Starting Cutscene
Type: Cutscene
Next: Ice Trooper Fight, Interrogate Minion, Frozen Civilians

Encounter: Ice Trooper Fight
Type: Fight
Minions: ice_trooper
Next: None

Encounter: Interrogate Minion
Type: Interrogation
Minions: ice_trooper
Next: None

Encounter: Frozen Civilians
Type: Save Civilian
Minions: ice_trooper
Allies: civilian_male, civilian_female
Next: None

The ‘Next: None’ indicates that EZ script shouldn’t try to run ANY encounters after the ice trooper fights finish. Any guesses as to what would happen if you don’t add those lines? Yep, look back a page or two – if you don’t add the ‘Next: None’ EZ script will think they are one encounter after the other, which isn’t quite what we’re going for.

 

3. When a group of encounters complete, one encounter appears. Taking the example further, we want Nuclear Winter to appear after the heroes have dealt with all of the ice trooper encounters. Use the ‘Starts when:’ line and write the name of each encounter that has to finish before the boss fight will start.

In EZ Script you’d write:

Encounter: Boss Fight
Type: Interrogation
Starts when: Ice Trooper Fight at End, Interrogate Minion at End, Frozen Civilians at End
Villains: nuclear_winter
Minions: ice_queen, snow_man
Objects: nazihq_lab_machine_6

There are even more options for connecting encounters in the EZ Script Users’ Guide.

Taking stock, our example mini mod now looks like this.

Story: Agents of Nuclear Winter

Encounter: Starting Cutscene
Type: Cutscene
Next: Ice Trooper Fight, Interrogate Minion, Frozen Civilians

Encounter: Ice Trooper Fight
Type: Fight
Minions: ice_trooper
Next: None

Encounter: Interrogate Minion
Type: Interrogation
Minions: ice_trooper
Next: None

Encounter: Frozen Civilians
Type: Save Civilian
Minions: ice_trooper
Allies: civilian_male, civilian_female
Next: None

Encounter: Boss Fight
Type: Interrogation
Starts when: Ice Trooper Fight at End, Interrogate Minion at End, Frozen Civilians at End
Villains: nuclear_winter
Minions: ice_queen, snow_man
Objects: nazihq_lab_machine_6

Encounter: The Frozen Giant
Type: Fight
Villains: frozen_giant
Minions: ice_trooper
Allies: cop, cop, cop, cop

 

Write the Cut Scenes

Yes, you can play the mod now - all of the encounters are written and the story flows as it should, but something is still missing. That something of course is the cut scenes.

The story really shines through in cut scenes. Without them, all you have is a series of fights, which while enjoyable, don’t really convey what is happening. In cut scenes, villains deliver their diatribes, heroes interrogate minions and arrows point out where the heroes need to go next.

Each cut scene has a name and a list of things you want to happen during the cut scene. Some of the common commands are:

Even more cut scene options can be found in the EZ Script Users’ Guide.

Cut scenes are written as a part of the encounter. Let’s write up the starting cut scene.

Encounter: Starting Cutscene
Type: Cutscene
Next: Ice Trooper Fight, Interrogate Minion, Frozen Civilians

Alert Cutscene:
Set lighting to day
Camera on Hero
Hero says, “Nuclear Winter’s minions are running amok!”
Hero says, “I’ve got to stop them!”

Each cut scene plays when the encounter reaches a specific point. For example:

In the example, the cut scene will play as soon as the mission starts (this being the first encounter). The cut scene sets the lighting on the map, positions the camera on the hero and has the hero say a couple of lines.

Note that when it says Hero, EZ script will substitute an actual hero in the mission. So if you choose Minute Man as your hero, the cutscene will have Minute Man speaking. If you choose Alchemiss as your hero, she will say the lines.

Let’s add cutscenes for more of our encounters.

Encounter: Ice Trooper Fight
Type: Fight
Minions: ice_trooper
Next: None

Alert Cutscene:
Yellow arrow on Minion
Start Cutscene:
Minion says, “Heroes! Stop them!”

When the Ice Trooper Fight encounter gets placed on the map, a yellow arrow will appear that points to the ice troopers. When the hero gets close to the ice troopers, one of them will say, “Heroes! Stop them!”

Cut scenes can be of any length, though you should generally keep them short and to the point to keep the story moving. The Interrogate Minion encounter contains an example of longer cutscenes, including a cutscene that plays when the hero interrogates a minion (Interrogation).

Encounter: Interrogate Minion
Type: Interrogation
Minions: ice_trooper
Next: None

Alert Cutscene:
Yellow arrow on Minion

Start Cutscene:
Cinematic camera on Minion
Minion says, “You will never stop Nuclear Winter from finding it!”
Minion says, “Oops, I shouldn’t have said that.”
Hero1 says, “Tell us what you know, and we’ll go easy on you.”
Minion says, “Never!”
Hero2 says, “Why do they always say that?”

Start Cutscene:
Minion says, “For Nuclear Winter!”

Interrogation Cutscene:
Cinematic Camera on Hero to Minion
Hero says, “It’s going to get a lot colder for you if you don’t tell me what’s going on.”
Minion says, “All I know is Nuclear Winter is searching for something. Something big!”

You can include multiple cut scenes with the same name, and EZ script will pick one at random when you actually play the mission. Use this feature to help make the mission more replayable, or to include cut scenes that play when specific characters are present. Of the two ‘Start’ cut scenes, the first will only play if you bring in two heroes (notice the need for hero1 and hero2 to speak), while the second can play if any number of heroes are involved.

The Frozen Civilians encounter uses additional cutscenes when the allies in the encounter are saved (Ally Thanks Hero) or all ko’d (Ally Lost).

Encounter: Frozen Civilians
Type: Save Civilian
Minions: ice_trooper
Allies: civilian_male, civilian_female
Next: None

Alert Cutscene:
Yellow arrow on Ally

Start Cutscene:
Minion1 turns to Ally1
Minion1 says, “Out of our way!”
Ally1 says, “Help me!”
Ally Thanks Hero Cutscene:
Ally says, “Thank you. Those people are crazy!”

Ally Lost Cutscene:
Hero says, “Nuclear Winter will pay for this!”

Once the three encounters with the ice troopers are complete, the Boss Fight will be set up and the heroes can take on Nuclear Winter himself.

Encounter: Boss Fight
Type: Interrogation
Starts when: Ice Trooper Fight at End, Interrogate Minion at End, Frozen Civilians at End
Villains: nuclear_winter
Minions: ice_queen, ice_sergeant
Objects: nazihq_lab_machine_6

Start Cutscene:
Cinematic camera on Villain to Object
Villain turns to Object
Villain says, “It is nearby. Look at the machine.”
Villain moves to Object
Minion turns to Object
Minion says, “Soon the giant will awaken.”
Villain plays animation area
Villain says, “At last my plans come to fruition. And without the interference of those meddlesome heroes.”
Cinematic camera on Hero to Villain
Hero says, “Not so fast, Winter.”
Cinematic camera on Villain to Hero
Villain turns to Hero
Villain says, “No, they must not stop us! Get them!”

Interrogation Cutscene:
Cinematic camera on Villain
Villain says, “Ha! You are too late, the process is already complete!”
Hero says, “Process? What do you mean?”
Villain says, “The giant arises… you cannot stop it now!”

All of this of course sets up the final battle with the Frozen Giant.

Encounter: The Frozen Giant
Type: Fight
Villains: frozen_giant
Minions: ice_trooper
Allies: cop, cop, cop, cop

Alert Cutscene:
Yellow arrow on frozen_giant

Start Cutscene:
Cinematic camera on Villain
Ally1 says, “Uh, do you think we should call this one in?”
Ally2 says, “Yeah, call in an airstrike!”
Cinematic camera on Hero to Villain
Hero says, “Egads! A giant made entirely of ice! So this is what Nuclear Winter was after.”
Hero moves to Villain
Hero says, “It must be stopped! Innocent lives are at stake!”

End Cutscene:
Camera on Hero
Hero says, “Good work everyone.”
Hero says, “Nuclear Winter’s machinations will trouble Patriot City no longer.”
Fade for 2 seconds

 

Create the Files

Once you’ve created your mini-mod, you need to create the files that will enable it to show up in the game.

First, save your story in the ezscriptbeta\stories directory. Be sure to save it as a text file. If you are following along with the example, call your file frozengiant.txt

Now create the skirmish file. Go into ezscriptbeta\skirmish and copy the MiniMod Spy Games.py file and rename it. For the example, rename it to MiniMod Frozen Giant.py

Using a text editor, open your .py file and change the line that reads:

minimod_storyfile = ‘spygames’

to the name of your story file. For the example change it to

minimod_storyfile = ‘frozengiant’

 

Play It!

Start Freedom Force vs. the Third Reich, go to the Rumble Room and you should see your story listed.