Repeatable Enemy Raids, Game: Fallout 3I love generic, repeatable quests. We speak to a quest agent who gives us a quest to pwn some enemy boss, we pwn the boss, then return to the agent to get paid. I've made these sort of quests for Oblivion and Skyrim, here's how to do it for Fallout 3.
The process has a lot of similarities to the way it all works in Oblivion, since both games use the Gamebyro engine and similar scripting. But there are enough differences for Fallout that this game deserves its own methods.
First of all, highly recommended to download
Encounter Zone Respawn Control, which makes interior locations (Super Duper Mart, for instance) respawn with enemies, but also loot. This mod requires
Fallout Script Extender, for those who don't have it yet.
Once both of those are in place, the way it works: whenever an interior location is entered, go into the character's ITEMS > Aid menus and select Zone Control. There are options to do Nothing, Enable Respawn, and Disable Respawn. If respawn is enabled, the enemies inside will (guess) return the place after 3 days. Most containers will also be restocked with loot.
Note that this mod works mostly with vanilla locations. Mod-added locations sometimes can have respawn enabled, sometimes not.
I have also come across one vanilla location (Bethesda Offices East) which did not accept the Enable Respawn command. However, Beth's offices are also supposed to be one of the rare interior locations in the gameworld which respawn by default. EDIT: And now I know why the office could not be Enabled. It's because it's not on Bethesda's "non-respawn" list. To further learn more about this list, click the spoiler tag.
So...the way my idea works is: I use Metro tickets to remind me of which location is currently on the roster; i.e., which location we're supposed to be headed to, to take care of its boss. Metro tickets, Messages, and Quest Objectives are how these reminders work. No quest stages. Repeatable quest stages can probably also be used, but I don't know how to do it that way.
Let's say the first location is a place we're all familiar with: Springvale School. I'm going to put the enemy boss into SpringvaleSchool02 (Springvale School Lower Level).
OBJECT window > Items > Misc Item1a). Find and then edit MetroTicket.
ID: aaaSpringvaleSchoolTicket
Name: Kill Boss of Springvale School
See? The ticket states exactly what the latest mission is.
1b). Toggle Quest Item on. Don't worry, the way this works, the ticket won't be in the PC's inventory forever.
It is possible to skip this step, of course. Especially for those who want to do the "pack rat" thing; acquire a stack of tickets to be kept in their home. Personally, I can't do it this way. I'd get confused after forgetting to drop my ticket(s). Wait, is my guy on a mission?
Which one?
1c). Copy the ID name and paste it onto a Text file or Wordpad file.
1d). Click OK, saving as a New Form.
Object window > Actors > NPC2a). Make a new NPC, who's going to be the quest agent. If it's your first time doing so, Bethesda's own GECK page is a good place to start:
LINK.
The guy or gal can be pretty minimal; like my other Quest Agents in other games, he/she only needs to handle and deliver a minimal number of lines. In my game, I made the agent a Regulator, who is part of the Regulator Faction (along with a couple Megaton factions). He lives in his own flat in Megaton, has his own little life and so on. But minimally, it's possible just to add somebody who lives in Moriarty's, if simplicity is desired.
2b). The only things I insisted upon was to make my agent's Alignment as Good (he is a Regulator, which means good guy). I gave him one of the DefaultSandboxEditorLocation packages too, just so he wanders around and stuff. Everything's an option.
2c). Put the agent into whichever location is desired.
Cell View window3). Find the location where the enemy boss will get added. Again, for me this is SpringvaleSchool02, which is the school's basement. I like putting bosses into areas which can possibly be the very
last place we search. Don't put a boss near the entry door, for instance. More fun to have to get through the boss's minions and sanctuary first!
Object window > Actor Data > Quest4a). Start a new quest. This tutorial's assuming those who read this know a lot about the Quest window already.
Quest Name: Generic Wasteland Quests
ID: aaaGenericWastelandQuests
Priority: 30
4b).Start Game Enabled and Script Processing Delay can both be toggled.
4c). Start a script like so...
Scriptname aaaGenericWastelandQuestScript
short DoOnce4d). Make sure the Script Type scroll-bar is set to Quest, not Object.
Save and close the script, click OK (closing the Quest window) and reopen it. Find the script in the scroll-bar, click OK again.
Object window > Actors > NPC5a). Make a new NPC.
ID: aaaSpringvaleSchoolBoss
Name: Springvale Headmaster (I like silly names)
Respawn: ON
5b). Click OK, closing the NPC panel. Save and reopen the NPC.
This next part is an optional step for those who want to skip a lot of the little stuff: adding gear, factions, and so on. These can be done with a quick set of toggles by using a pre-made template. Since Springvale is populated by bandits, it's easy to use a raider template to set the NPC up, with random gear and so on. Those who want to hand-craft their enemy a bit more can skip to step 6a.
5c). Use the ActorBase scroll-bar to select whichever template is most appropriate.
I started to use Raider2GunAAFTEMPLATE but this bothered me, because choosing its Use Traits flag always defaulted to African American Female. And I'm wanting a guy to rule this former school. So, time to make my own template. Again, those who just want to use one of Bethesda's default templates (or make a completely hand-made boss) can skip to 6a.
5d). Still in the NPC section, type Template into the Filter slot. I am editing Raider2GunAAFTEMPLATE, making only the changes stated below.
ID: aaaRaider2GunCAMTEMPLATE
Flags: No low level processing and Respawn both toggled ON.
TRAITS tab
Race: CaucasianRaider
Female: OFF
Voice Type: MaleAdult02*
STATS tab
PC Level Mult: ON
Level Mult: 4.00
FACTIONS tab
I removed the GeneralIdleFaction and MS13CanMez factions. Not needed. Two raider factions remained in this tab's window, and I also left this template's Smoker Faction.
Note that making the NPC's level go 4 levels above the player in the Stats area makes the boss into a bullet sponge. Hey, I like 'em tough. 🤬 Those who don't prefer this can substitute whatever, maybe put the boss into power armor to toughen him/her up and use Auto Calc Stats instead of PC Level Mult, and so on.
*
I used MaleAdult02 as the voice type instead of MaleRaiderGroup because I wanted the guy to be distinct from all the usual raiders, with their toughguy Jersey accents. Click OK.
6a). Reopen the NPC boss started in step 4a, or continued from the last step. Those who wanted to use the template just made can find it in the ActorBase scroll-bar, selecting whichever toggles fit best. Those who don't can continue to hand-craft, skipping to 6b.
I am choosing: Use Traits, Use Stats, Use AI Data, Use AI Packages, Use Factions, and Use Inventory. Therefore, I've always got a random white guy running the school, who's always 4 levels above the PC, is part of all the Raider factions (and smokes), is always mean, sandboxes, and has random raider-type inventory.
Note I did not use Add Script. It's best to give the NPC boss his/her own script. Stuff like this works best when it's kept local (rather than drawn from a template).
--Also, do not choose Use Base Data, as this can also mess up the script stuff. I also like giving each boss a unique name (like Nuka Cola Plant Bottler) while sometimes using templates. By default, the template I made earlier has "Raider" for a name.
6b). Drop the boss into the Render window. If Use Inventory was one of the flags toggled on, the boss will be in underclothes, which is fine. They get suited up once we're in the game.
6c). Give the boss a Reference ID. Copy this ID and paste it somewhere. I just typed aaaSpringvaleSchoolBossRef.
6d).Make sure to toggle Persistent Reference on. Click OK.
6e). Reopen the NPC's Reference and NPC panels from the Render window. Start a script like so...
Scriptname aaaSpringvaleSchoolBossScript
Short Dead6f). Save that script, close the editor, click OK 2x (closing the NPC panels) and reopen them. Find the script in the Script scroll-bar, click OK, and reopen.
Here is the rest of the script, and note that it's exactly the same as what'd be found in an Oblivion script.
Scriptname aaaSpringvaleSchoolBossScript
Short Dead
Begin OnDeath
If (aaaSpringvaleSchoolBoss.dead == 1)
Set aaaSpringvaleSchoolBossRef.dead to 2
Set aaaGenericWastelandQuests.DoOnce to 2
EndIf
End7a). Reopen the quest, and select the Quest Objectives tab. Right-click > New into the top(Objective Index) window. Two objectives are needed for now.
Index: 1
Display Text: Pwn the boss of Springvale Elementary.
Index: 2
Display Text: Return to Quest Agent for Reward.
7b). Go to the Topics tab. Right-click > Add Topic into the left-most window, and find GREETING.
"Hello &PCName;, and how are you today?" the agent greets. "Do you have any interest in tackling a location for the Regulators today?"
Note that typing &PCName; into the Response Text window causes our character's name to get placed automatically. In my game it'll say "Hello Cho Zen Wan, and how are you today?" Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetQuestVariable aaaGenericWastelandQuests, DoOnce == 0.00Copy All both those.
7c). In the Add Topics window, right-click > Add Topic, and then right-click > New into the window which pops up. Select the ID name of the topic. I'm calling it aaaWastelandMissions. Click OK.
Do this again, and add a "No" topic. aaaNo in my game.
7d). Find both these topics in the left-most window. Let's start with the missions topic.
7e). Topic Text: aaaWastelandMissions
Response Text: Well there are several problem areas, always are. Some locations close by, others farther away. Got a list here, hold on.
Prompt: Sure, whatcha got?
Conditions: paste the same conditions from step 7b.
Result Script (End):
Set aaaGenericWastelandQuests.DoOnce to 1Choices: Right-click > Add Topic. I'm adding aaaSpringvaleSchoolBossTopic, and also the aaaNo topic.
7f). Find the new topic just added into Choices (aaaSpringvaleSchoolBossTopic in my GECK) in the left-most window. Change the Topic Text to something in plain wording (Springvale Elementary School) and click OK.
Save. Reopen the quest window. Let's flesh out the No dialog. This is going to be an all-purpose topic + dialog which gets used whenever a "no" answer is needed. It's important to continually offer decisions like this, so that the player isn't railroaded into quests they don't want, and have maximum choice all along.
7g). Topic Text: aaaNo
Response: Damn, you're letting us down, soldier.
...............
Prompt: No, I cannot help at this time.
Priority: Change this from 50.00 to, let's say, 20.00. This makes the "No" topic always show up underneath whatever locational topics get added later on, as long as those topics have higher numbers than 20.
As more locations get added later on, Priority can be attempted to make them show in-game in alphabetical order, even if they aren't alphabetical in the Choices window. However, this doesn't always work correctly. I've had some success making jumps of 10, so that Bethesda Ruins (Priority 100) is at the top of my in-game list, Evergreen Mills (Priority 90) is underneath, Nuka Cola Plant (80) comes next, and so on. This doesn't always work 100% though, and might need to be played with. Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetQuestVariable aaaGenericWastelandQuests, DoOnce < 2.00Toggle Goodbye ON.
Result Script [End]:
Set aaaGenericWastelandQuests.DoOnce to 07h). Compile and click OK.
7i). Reopen the quest window and find the new location topic.
Topic Text: Springvale Elementary School
Response Text: "Springvale School. Once a bastion of PreK to 5th grade learning, now a den full of menacing raiders! - You'd think those *bungholes* would leave such a formerly innocent place alone, but no, they've continued to infest the school."
For this next part, it helps to have the NPC boss in the Render window, so he/she can be easily selected.
Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetQuestVariable aaaGenericWastelandQuests, DoOnce == 1.00 AND
GetScriptVariable aaaSpringvaleSchoolBoss, Dead == 0.00 AND
GetDead aaaSpringvaleSchoolBossRef != 1.00The Reference for the GetDead should have the Run on slot changed from Subject to Reference, and then we can simply select the NPC in the window.
Choices: aaaSpringvaleSchoolBossYes and aaaNo.
7j). Right-click > Add Topic into the vertical window and add aaaSpringvaleSchoolBossYes (or whatever it's named in your GECK).
Topic Text: Leave this just as it is (aaaSpringvaleSchoolBossYes) since Prompt is being used for the clickable topic.
Response Text: Awesome soldier. I think you already know where Springvale is; chances are you've been there before, right? - I'll add a map marker just in case. Here's a ticket to remind you. - Their leader is called the Headmaster. Kill him, and 300 caps are yours. - Make sure to search the entire place, the school's got two levels.
Prompt: Springvale's boss has taught his last lesson.
Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetScriptVariable aaaSpringvaleSchoolBossRef Reference: Dead == 0.00 (Note that the GetDead variable is not needed, it's already established the boss is alive. Same goes for the GetQuestVariable. If we've gotten this far with dialog, it's no longer a factor.)
Result Script [Begin]:
Set aaaSpringvaleSchoolBossRef.dead to 1
Player.AddItem aaaSpringvaleSchoolTicket 1
SetObjectiveDisplayed aaaGenericWastelandQuests 1 1Result Script [End]:
ShowMap SpringvaleElementaryMapMarker7k: Compile that and click OK.
Now, make sure the NPC boss is still in the Render window.
Object window > World Objects > Static8).: Drag an XMarkerHeading into the Render window and give it a Reference ID. I've got aaaSpringvaleSchoolXMarkerHeading. Copy its name and paste this onto the Notepad. This marker is going to be where the NPC gets teleported to, later on via script. So make sure it's in a spot which is clear of rubble / static items.
Note:
Step 8 is especially necessary for Fallout 3, since enemies will often respawn wherever they were killed. If the fight with the boss gets continued outside, or in some other cell, THIS is where he/she will respawn, even if a Sandbox package is supposed to make him/her return to an editor location.
Object window > Miscellaneous > Message9a). Right-click > New.
ID: aaaSpringvaleSchoolDeathMessage (copy/paste this to the Notepad).
Display Time: I've got 18, which means the message stays onscreen for 18 seconds. This can be changed to whatever is desired.
I like for the msg. to stay onscreen for awhile. Thing is, during the heat of combat, sometimes a quick message which flashes on for the default of 2 seconds can easily get missed.Title: Springvale Elementary Death Message
Message Text: The Headmaster of Springvale has been pwned.
Note:
Message Box is chosen by default, and I always toggle this off because when a box pops up in the game, this means all the action stops, until the player clicks OK. Messages are not 100% necessary and some mind even find them unimmersive. But I like this sort of thing because it shows that the quest is working.
9b). Click OK. Save.
10a). Reopen the NPC's script, either from the pencil icon on the main toolbar, or from the enemy itself.
10b). Add this line somewhere between the If and EndIf statements:
SetObjectiveDisplayed aaaGenericWastelandQuests 1 0
ShowMessage aaaSpringvaleSchoolDeathMessage
SetObjectiveDisplayed aaaGenericWastelandQuests 2 1 Note:
"SetObjectiveDisplayed" for the original mission is set to zero. This means this objective will no longer be displayed at the start of the game, or whenever this quest is toggled on. DO NOT use SetObjectiveCompleted. Doing so makes the objective work only once. If the quest is picked up later on (after the boss has been rid) those objectives will no longer show up in-game. Note 2:
Make sure the second SetObjectiveDisplayed (the one which tells the player to return for reward) goes UNDER the ShowMessage. This way, once the NPC boss has been rid, the message shows first, and the reward objective follows this. 10c). Save and close the script, and OK the NPC's panel(s) if needed.
11a). Now return to the quest. Open the first locational topic, which in my game is aaaSpringvaleSchoolBossTopic. Copy All its conditions stack.
11b). Right-click > New into the Info window.
Response Text: Well, good news is the baddies have not returned to Springvale. Yet. Would you like to take a look at the rest of our list?
Conditions: Paste these...
GetIsID aaaQuestAgent == 1.00 AND
GetDead aaaSpringvaleSchoolBossRef == 1.00 Basically, the ScriptVariable is not needed, and change the
!= comparison to
==.
11c). In the Choices window only aaaNo can go in there now. For future additions to the quest agent's list, other locational topics can get added here.
11d). Click OK and reopen the quest's Topics tab. Find GREETING.
Response Text: You are back. How's the latest mission coming along?
Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetQuestVariable aaaGenericWastelandQuests, DoOnce == 1.00Copy All those.
Add Topics: Add aaaWastelandMissions
11e). Find the Missions topic, there should already be a topic here with its own Topic Text and its own prompt. Right-click > New into the Info window.
Response Text: Seems you've got yourself a mission already. - Take a look at the latest ticket in your inventory, it should clue you in.
Prompt: What else you got?
Conditions: Paste the same conditions from the GREETING in 11d.
Toggle Say Once a Day and Goodbye on. Click OK.
12a).: Go back to the GREETING, and make a new one. This is what the agent's going to say when the boss has been put down, and now we're ready to be paid. 💰
Response Text: Ah wonderful, look who's back.
Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetQuestVariable aaaGenericWastelandQuests, DoOnce == 2.00Add Topics: Add aaaRewardTopic.
12b). Add the Reward topic into the leftmost window.
Topic Text: Reward
Response Text: Glad to hear Springvale's Headmaster is in detention. Here are your caps.
Prompt: The Headmaster of Springvale School is no longer in office.
Conditions:
GetIsID aaaQuestAgent == 1.00 AND
GetScriptVariable aaaSpringvaleSchoolBossRef, Dead == 2.00Toggle Goodbye on.
Result Script [Begin]:
Set aaaGenericWastelandQuests to 0
Player.RemoveItem aaaSpringvaleSchoolTicket 1
SetObjectiveDisplayed aaaGenericWastelandQuests 2 0Result Script [End]:
Set aaaSpringvaleSchoolBossRef.Dead to 3
Player.AddItem F 500
RewardXP 1012c). Click OK, closing the quest window, and save. And now to finish up the main script. For anybody who's made one of these repeatable quests for Oblivion, you'll be familiar with the timer script to come.
13a). Here's what the main script looks like so far...
Scriptname aaaGenericWastelandQuestScript
short DoOnceNow add the following, so that overall it'll look like this
----------------------------------------------------
Scriptname aaaGenericWastelandQuestScript
short DoOnce
Short Timer1
Short StartDay1-----------------------------------
13b). Save and close the script. Close and reopen the quest. Here's the entire script.
------------------------------------------------
Scriptname aaaGenericWastelandQuestScript
short DoOnce
short Timer1
short StartDay1
Begin GameMode
;----------------------------------
;This section pertains to the boss of Springvale Elementary
If (Timer1 == 0)
If (aaaSpringvaleSchoolBossBossRef.Dead == 3)
Set StartDay1 to GameDaysPassed
Set Timer1 to 1
EndIf
EndIf
If (Timer1 == 1)
If ((GameDaysPassed - StartDay1) >= 3)
Set Timer1 to 0
Set aaaSpringvaleSchoolBossRef.Dead to 0
aaaSpringvaleSchoolBossRef.MoveTo aaaSpringvaleSchoolXMarkerHeading
EndIf
EndIf
End--------------------------------------------------------
Pretty sure that covers everything.
This post has been edited by Renee: Apr 7 2024, 07:07 PM