Home Fallout 3 Arena Quest Tutorial

Download Area

Make a donation

Guild Poll 1

Can you feel the spirit of my old Respawn site returning ?

Search

Mod Quiz Results

Mod Poll Results

I see the Brotherhood of steel idea took a lead at one point but was quickly by passed by the city upgrade idea after I posted a few blogs about it. I am leaning in that direction since its all achievable ideas whilst we wait for the next Fallout game to be released.

Live Stats

JoomlaWatch 1.2.12 - Joomla Monitor and Live Stats by Matej Koval
Fallout 3: Arena Quest Tutorial PDF 
Written by The Guild Master   
Sunday, 03 May 2009 22:56

Updated 13 September 2009: Fixed a "setting up the dialog error" so the condition says 0.0 instead of 1.0. Thanks to Julie for spotting this mistake. 

Introduction.

In an interview on the Prisoners, No Mercy pod cast, it was suggested that making a working Arena for Fallout 3 was beyond then hosts capabilities. I disagreed and decided prove it, so here we are. A brand new tutorial to allow noobies to make Arena mods for Fallout 3.

In this tutorial I will walk through the process of making a working arena and will try and keep it as simple as possible so anybody can do it. I will provide you with the scripts needed to make it work and talk you through the process of making it your self. At the end of this tutorial you will notice ways to improve it further that will make your arena totally unlike anybody else's. The system I have chosen to use for this tutorial is more work but is less complicated. It also gives the player a choice of opponents which you can customize to be completely different from each other and allows you enter a really cool and unique intro for each of them in the dialog :)

Optional Reading: Competitor placement problems, some things to consider.

Some of you might think there is 1 way to do this but that is not the case, in most cases any quest can be created hundreds of different ways and we face problems no matter which way we do this so lets look at the problems the two main methods cause.

Method 1: Known Reference NPCS placed in the arena.

This is the best and cleanest way of adding NPCs for the player to fight because these NPCs can be disabled after the fight to clean up the arena because we know their reference names in advance. But these NPCs work best in quests that work once and then never work again because they take 4 days to respawn usually and when ever you deal with AIs and respawning, things rarely work exactly as you would expect after the first time. This method needs a system to control it which automatically makes it more complicated as time goes by.

Method 2: Unknown NPCs placed in the arena.

The hardest way is to place an unnamed NPCs using a script command, in to the arena. It is only hard for the scripter, e.g. me, because we have to account for every NPC we add to the arena and every NPC that dies in the area or we get save game bloating. So we have to account for every NPC we add using this method and make sure it also dies. The problem with this method is the bodies cannot be disabled later because their reference name is not known, so we will have bodies laying around for up to 4 days after the battle. Which is actually more realistic if a little untidy. Even so this method allows us to make repeatable quests easily so this is the method we must use here.

Making your arena.

When naming your doors and cells, name them exactly as written below because the scripts will be expecting you to use these names. If you change the names, you will have to edit the names in the scripts too. Which this is not hard to do, I would not recommend it whilst you are learning how to make an Arena. Have a fiddle with this later on.

I am not going to tell you how to design your arena, I intend to let you do that. I will simply tell you what we need for the arena and explain how best to make it. You can design your arena around these requirements as you see fit.

First make 2 new empty cells in GECK by selecting an existing cell, right clicking and duplicating it, then delete all its contents and the navmesh (warning Geck crashes out a lot when working on Navmeshes so safe often). Give one cell an ID of "MyArenaLobby" and the other cell and ID of "MyMainArena", you can change the NAME the cell displays in the game to anything you want by right clicking on it and selecting edit then going to Interior Data changing the name in there.

Add a doorway to the MyArenaLobby and a door way to MyMainArena and link the two up in the normal way.

To do this go to the MyArenaLobby and select the door, double clicking on it to edit it and then select the teleport tick box but leave the window open. Then go to the MyMainArena cell, go back to the doors edit window and click "select object in render window", then select the target door in your arena cell and okay it. This will allow the player to enter the arena via that door. You just need to adjust the spawn points where the player appears after using the door and you are done (select them and hold the right mouse button down whilst moving the mouse etc etc, also use Y Z X too, have a play around, you will get the idea).

Go back to the MyArenaLobby cell and select the door again by double clicking on it to bring up its edit window.

You will see Reference Editor ID box, enter myarenadoorref as its name.

Now you may decorator your lobby and arena as you see fit, making them as grand or basic as you like. We only need an space to fight and the doors in the main arena, the lobby is just SAFE cell to accept the quest in and can in fact be anywhere. Every thing else is eye candy so go mad, knock your self out. You can have a small room as an arena if you wish or something the size of Megaton.

Making your NPCs.

For this tutorial we will have 1 NPC offering fights in the Arena with an ID of "MyArenaGuy" and 4 competitors to fight in the arena with IDs called "MyArenaCompetitor01", "MyArenaCompetitor02", "MyArenaCompetitor03" and "MyArenaCompetitor04". You can edit the NAME box to say anything you want, the name box is the name shown in the game and will not effect this tutorial but you must use the IDs provided or the quest will not work. So pick some good names like "Bone Crusher" and "Gut Ripper Jones" or something.

Before we start, lets make some things we need.

Item 1: Duplicating an existing NPC for use in our Arena mod.

Find an NPC in GECK that appears to be roughly what you want for the Quest guy and the competitors, 5 in all. Double click on them one at a time and edit them. Open them up, change the ID name to one of the names mentioned above (eg "MyArenaGuy", "MyArenaCompetitor01", "MyArenaCompetitor02", "MyArenaCompetitor03" and "MyArenaCompetitor04"), remove any scripts, factions and AI packages it might use. Untick "no low level processing", "quest item", "Essential", Respawn", "no knockdowns, "no vats melee". Then okay them and say yes to the create new reference question. These will be our basic NPCs but we will need to edit it further later.

Item 2: AI Packages.

Go the character menu and select Packages. In the AI packages window right click and select new. In the new Package window enter the ID name MyArenaGuyPackage and set the Package Type to Wander. In the wander location box, under Near Editor location, you will find Radius, Enter 512 so our quest guy will walk around a small area randomly. Untick eating and sleeping from the Allowed Behaviour and okay the package window.

Now find your MyArenaGuy NPC and add the new package to its AI package window by dragging it from the package window in to the NPCs own AI package window. It should be the only one there unless you added some of your own.

Now find your new Package called "MyArenaQuestGuyPackage" and double click to open it up again, this time change the ID to "MyArenaCompetitorPackage", increase the radius 4000 (this is the area it will wander around in, for really big arenas you might have to increase this further and smaller arenas you might need to lower it, but if unsure, leave it at 4000) and untick conversation, idle markers, furniture and just leave wandering ticked and then go to flags. Tick Weapon Drawn so it starts with its weapon already in its hands and okay it, saying yes to the question "create new form".

Now add this new package to all our MyArenaCompetitor NPCS, it should be the only one there unless you added some of your own.

Item 3: Creating 2 Factions.

Go to the Character menu in Geck and select Factions, when the faction window opens, right click in the factions list and select new. Create 2 new factions.

MyArenaFactionEnemy

MyArenaFactionFriend

In the MyArenaFactionFriend faction right click Interfaction Relations and select new, then find the player and select him. Under Combat Group Reaction, tick Neutral and set the Disposition Modifier to 100.

In the MyArenaFactionEnemy faction right click Interfaction Relations and select new, then find the player and select him. Under Combat Group Reaction, tick Enemy and set the Disposition Modifier to -100.

Now drag the MyArenaFactionFriend faction from the faction window in to the MyArenaGuy NPC Faction window and drop it there so it appears in the NPCS faction list. Next drag and drop the MyArenaFactionEnemy in to the MyArenaCompetitor NPCs Faction list.

These set up the MyArenaGuy NPC as friendly and the MyArenaCompetitor NPCs as unfriendly but we have more to do here before its finished.

Optional: If you add the SmokerFaction to any NPC, that NPC will appear to smoke a cig in the game.

Fine Tuning your NPCS.

Select your MyArenaGuy NPC and double click to open its edit window. Select "AI Data" and go to AI attributes and set Aggression to "Unaggressive", Mood to "neutral", Confidence to "Average", Energy to 50, Responsibility to "50" and Assistance to "Helps Nobody".

Select your MyArenaCompetitor NPCs one at a time and double click to open its edit window. Select "AI Data" and go to AI attributes and set Aggression to "very aggressive", Mood to "angry", Confidence to "foolhardy", Energy to 100, Responsibility to "10" and Assistance to "Helps Friends and Allies".

This makes the MyArenaGuy cowardly and unwilling to fight and the MyArenaCompetitor pyschotic killing matchings. We will be adding a script to these later to finish them off.

NOTES:

You can make your MyArenaCompetitor NPCS anything you want, give them any weapon, any armour, its entirely up to you. But I recommend you always go to stats and and PC Level Multi and tick it. Then select level multi and set it to at least 2. Finally doubling what ever the base health and fatigue say.

Adding a Script to the Competitors.

In order to accurately inform the quest that the player has beaten their opponent we need to use a script that runs when the competitor dies. So click go to the Gameplay Menu, select Edit scripts then go to NEW in the script window and cut and paste this in to the window.

scn MycompetitorcounterScript

begin OnDeath
set MyArenaQuest.competitor to 2
end

Then save the script and close the window.

Now go to "MyArenaCompetitor01", "MyArenaCompetitor02", "MyArenaCompetitor03" and "MyArenaCompetitor04" and click on them to edit them. Go to the script box and find the script called "MycompetitorcounterScript" and add it to those NPCs. Do not add it to the NPC that gives you the quest, this is strictly for the competitors.

Adding the missing parts.

We have a few more things to add before we can start on the quest so go to the Object window, scroll down to static and select it, then in the filter box type "XMarkerHeading" (without the quotes) and then drag one in to your arena where you want the Competitor that will fight the player to stand. Once your done, select it and give it the ID "MyArenaSpawnMarkerref" (without the quotes).

Next go to your MyArenaLobby cell and select the door that leads to MyMainArena cell, double click on it to edit it and make sure the door is LOCKED and Needs a key by going to the doors Lock Tab and setting it up that way. We only want this to open when the player accepts an Arena fight.

Making our Arena Quest

Warning Brain Abort Request WAAAHHOOOO......Relax it is not that hard, its just time consuming :)

Time to make the quest for our arena, the hard work is actually done, this is just standard dialog and variables now and requires you to go all over the editor to set things up. So just let me walk you through it and you will have a working arena in no time.

Go the Object Window, scroll down to Quests which should be near the top then select quests and right click in the right hand window and select NEW. Give your new quest an ID and Name, nobody will be seeing this name because this is a repeatable quest and as such operates differently from normal one shot quests.

Note: To get around the lack of any messages in these type of quests, I usually add a note to the players inventory about a quest but this is not needed here. I am just mentioning it so you know it can be done.

Set the Priority to 30 and tick start game enabled.

Then select the 3 dots to the right of the script box and when the window opens, select new and paste this in to the window and set the Script Type to Quest.

Scriptname MyArenaQuestScript

short competitor
short addmytopics

Begin GameMode

if addmytopics == 0
addtopic MyArenaQuestInfo
addtopic Myarenareward
addtopic Myfight01
addtopic Myfight02
addtopic Myfight03
addtopic Myfight04
set addmytopics to 1
endif

if (MyArenaQuest.competitor == 1) && (player.GetInCell MyMainArena == 1)
myarenadoorref.Lock 255
endif

if (MyArenaQuest.competitor == 2) && (player.GetInCell MyMainArena == 1)
myarenadoorref.Unlock
endif

End

Save the script and close the window and the quest window too.

Now go back to the object window, find quests again, then find your quest in the quest list and reopen it. Go to the script box and using the pull down arrow find the "MyArenaQuestScript" script and select it.

Setting up the Dialog.

You can get detailed help on how to create dialog from my Fallout 3: Dialog Tutorial so I will only not go in to too much detail here about it and will instead focus on the mechanics of this quest leaving you to decide what to say, record the lines etc etc. I will explain how to set up the topics and everything, so you literally only need to read about voice recording in that tutorial above. But I do recommend waiting until the end of this section before you attempt to record any dialog because the line that assigns the dialog to an NPC is amongst the last things I set up here.

First go to the Topics tab in quests and add then right click in the white area under Editor ID and select Add Topic. In the select Topic box right click again and select NEW. Then add the following topics to your topic list one at a time.

MyArenaQuestInfo
Myarenareward
Myfight01
Myfight02
Myfight03
Myfight04

NOTE: If you look at the script you will see these topics are mentioned in it, the script declares them as available to use basically and they must be added using the Addtopic command before they will appear in the game.

Now select MyArenaQuestInfo and change the Topic name to "About the Arena" or something similar. This is where you tell the player how the arena works.

Under "Info" right click and select new, then type out a line explaining the arena to the player, try and end with a full stop when making these lines since it makes it play back better when the lines are recorded. If you need more room for more instructions. Select the line you just typed out, then go to the response text box and right click and select new and add as many additional lines as you need.

Finally go to "Conditions" and right click and select NEW.

Then set the following

Condition Function to GetIsID
Comparision to ==
Value to 1.000

And in Function Parameters, click on it and select ObjectID and scroll down until you find our MyArenaGuy NPC and select him (pressing M jumps to the Ms). Then Okay the windows so the condition appears in the Topics condition box. We will cut and past this later in to the other topics to save time but first we need to add some text to them.

Select Myarenareward topic next and change the Topic text to something like "Collect Reward", anything will do. Now right click in Info and enter a "well done message" in exactly the same way as you did for the topic above but mention the reward is 500 caps (read the optional part below to change this) somewhere in the message and when you are done, scroll down to the Result Script (End) box and cut and past this in to it.

myarenadoorref.Lock 255
set myarenaquest.competitor to 0
player.additem Caps001 500

Optional Part.

If you do not want to give the player 500 caps, you can change it by editing the last player.additem line to give him any amount of caps you like but remember to change the greeting to match. You can give the player any other item as a reward, you just have to enter the name used in the editor where the word Caps001 appears and change the 500 to the number of those items you want to give. For example if I wanted to give the player an Assault Rifle as a reward then it that above would look like this instead and I would just have to change the reward line to match.

Optional Part changes.

myarenadoorref.Lock 255
set myarenaquest.competitor to 0
player.additem WeapAssaultRifle 1

Note: The "myarenadoorref.Lock 255" part locks the door so nothing will open it, the "set myarenaquest.competitor to 0" controls the whole quest, whist it is zero the game knows no arena quest is active, once it is set to 1, the game knows an arena quest is active, when it is set to 2, the game knows an arena quest has been finished but the reward has not been collected yet. The reward sets it back to zero and thus allows the player to do this quest over and over again. We use it as a condition too so it auto hides topics for us.

Now we add the Topics that spawn the MyArenaCompetitors

Select MyFight01 and change the topic to something that describes your first competitor eg "Fight Mr Big Hard Man", then enter some dialog just as you did before about it and finally make sure the player knows where to go for the fight. Usually I just say, enter that door over there when ready. Something simple like that will work fine.

In the Result Script (End) box and cut and past this.

myarenadoorref.Unlock
set myarenaquest.competitor to 1
MyArenaSpawnMarkerref.PlaceAtMe MyArenaCompetitor01, 1, 0, 1

Select MyFight02 and change the topic to something that describes your second competitor eg "Fight the Rampant Rabbit", then enter some dialog just as you did before about it and finally make sure the player knows where to go for the fight. Etc etc etc

In the Result Script (End) box and cut and past this.

myarenadoorref.Unlock
set myarenaquest.competitor to 1
MyArenaSpawnMarkerref.PlaceAtMe MyArenaCompetitor02, 1, 0, 1

Select MyFight03 and change the topic to something that describes your third competitor eg "Fight the Mighty Mole", then enter some dialog just as you did before about it and finally make sure the player knows where to go for the fight. Etc etc etc

In the Result Script (End) box and cut and past this.

myarenadoorref.Unlock
set myarenaquest.competitor to 1
MyArenaSpawnMarkerref.PlaceAtMe MyArenaCompetitor03, 1, 0, 1

Select MyFight04 and change the topic to something that describes your forth competitor eg "Fight the Wimpy Wussy", then enter some dialog just as you did before about it and finally make sure the player knows where to go for the fight. Etc etc etc

In the Result Script (End) box and cut and past this.

myarenadoorref.Unlock
set myarenaquest.competitor to 1
MyArenaSpawnMarkerref.PlaceAtMe MyArenaCompetitor04, 1, 0, 1

Now we add the conditions to the remaining topics.

First lets make sure the right NPC says the lines, go back to the MyArenaQuestInfo topic and select the condition GetIsID and right click and select copy condition. Now select each of the other topics, one at a time, select their condition box and right click and then select "paste conditions". The GetIsID condtion from the MyArenaQuestInfo should now appear in the condition box of all our topics.

Now go to Myarenareward, select the condition box, right click and select new, then set up the following.

Condition Function to GetQuestVariable
Comparision to ==
Value to 2.000

And in Function Parameters select your quest and the variable "competitor" and ok it to add the new condition to the reward topic.

Note: As explained earlier the competitor var controls everything but is it actually named in the script as "short competitor" near the topic, any "short XXXX" item is a variable declaration, "short" basically declares it as a var and the XXXX is the name of the var. Once done that var can be used by Geck in many ways. In C programming they use the command DECLARE to do exactly the same thing. So you will find this declaration of vars at the top of a script VERY common when modding other games so remember it because you will see it again. The command may change but the job it does remains the same.

Now you have set the competitor condition, lets copy it, right click and select the condition you just added, it will be the one that starts GetQuestVariable. With it selected, right click and select "copy condition". Now select the "MyFight01" topic and go to the conditions and paste it in as you did before. Only this time, when you have done so, double click on it to edit the condition and change the Value from 2.0 to 0.0.

Then select the condition again in the "MyFight01" topic, which should now have a value of 1 and copy it again, then past it "AS IS" in the remaining 3 MyFight topics.

So all the topics below have the same GetQuestVariable == 0.0 condition and the Myarenareward has GetQuestVariable == 2.0.

MyFight01
MyFight02
MyFight03
MyFight04

And that is it, you have a working Arena quest, all you have to do now is record the dialog and you can do that using the Dialog Tutorial mentioned at the start of the quest section above.

Additional Reading: Turning this in to an Assassination Quest Tutorial

If you want to make an Assassination mod, just remove or ignore all references to the doors in your area. This is the arena script without the door locking code. Replace your arena script with this and put the spawn marker where you want to spawn your assassination victims and you have an assassination mod instead of an arena mod.

Scriptname MyArenaQuestScript

short competitor
short addmytopics

Begin GameMode

if addmytopics == 0
addtopic MyArenaQuestInfo
addtopic Myarenareward
addtopic Myfight01
addtopic Myfight02
addtopic Myfight03
addtopic Myfight04
set addmytopics to 1
endif

End

The only other thing you really need to change is the number of markers for spawning but the system above supports using a different marker per target so you can place 1 marker per target if you like. I used the marker called MyArenaSpawnMarkerref, see the "Adding the missing parts" section and the parts of the tutorial above that explain the Result Box (End) stuff for how to change this.

Here is the entry for competitor 3 from the result box.

myarenadoorref.Unlock
set myarenaquest.competitor to 1
MyArenaSpawnMarkerref.PlaceAtMe MyArenaCompetitor03, 1, 0, 1

The name of marker it uses is "MyArenaSpawnMarkerref". So just place a new marker some place, give it a new reference name as explained in "adding the missing parts" and your Arena competitor suddenly becomes an assassins victim somewhere out there in the wilderness.

I hope you are seeing how a little Wax on, Wax Off trick has taught you how to do more than make arenas :D

Enjoy.

Last Updated on Saturday, 15 May 2010 19:33