Reminder - in all my tutorials, green text can be skipped by modding vets, and red text can be skipped by beginners. These are side notes meant to clarify something I imagine certain readers will have questions on, and if they are not targeted at your skill level, you can skip them or ignore them if they are over your head or seem obvious.
In this guide, we'll be going over several systems that become available during the main quest of Chapter 3 and how you can inject additional characters or groups into them.
This guide assumes you are fairly familiar with setting up quests and dialogue, while not absolutely necessary for all of these systems, it will make for a better player experience if you have some dialogue scenes included. If you would like to learn about more about quests and dialogue, check out the Bethesda Mod School series, focusing on the Quest Making and Dialogue portions of the playlist.
You will also need to know how to set up an up a basic Addon pack, which is fairly simple - for that you can check out this guide.
Warning heavy spoilers for Chapter 3 story moments!
Chapter 3 is about uniting the Commonwealth under a new banner to fight back a common threat. During the questline, the player forms a new faction they get to customize in a variety of ways - this includes things like naming the faction, deciding what sort of values the faction holds, and who their allies will be.
We're going to cover three major ways you can introduce new characters and factions into the mix: Envoys/Alliances, Advisors, and Battle Allies. These are all roughly tied together, and you can use any of these systems alone, or in combination.
Note this documentation is based on changes introduced in the 3.1.0 patch (scheduled for release November 2023). If you are not on that version or later yet, some of the explanations in this guide will not match what you see.
For the sake of this walk-through tutorial, we'll be creating a brand new NPC to inject into these systems. You can take what you've learned from this and apply it to existing NPCs in the base game, DLCs, your own mod, or another mod!
Be sure you have bAllowMultipleMasterLoads enabled for the Creation Kit. If you don't, or are unsure what that means, check out this guide under the Creation Kit section which will tell you how to set up the ini file.
- Load the Creation Kit and load SS2_XPAC_Chapter3.esm.
- Click Save and create yourself a new plugin.
- In the Object Window, select the category Actors > Actor, and filter for Sheffield.
- Right-click Sheffield's record and click Duplicate.
- Double-click your duplicated record.
- Change the ID to **yourPrefix_**Leftfield.
- Change the name to Leftfield.
- Go to the AI Packages tab and delete all of the entries under AI Package List (otherwise he'll go try and sit on top of Sheffield).
- Click OK, and when prompted to Create New Object, answer No. You will then be given a Rename Confirmation, which you'll answer Yes to.
- Place Leftfield in the world somewhere. It can be in a random interior cell, Diamond City, a random location - your choice. Just be sure the Cell you choose has a name, putting NPCs in places without Location records set (ie. the Cells with the name Wilderness) can be problematic for quests being able to fetch them later.
- Double-click the Render window reference of Leftfield to bring up properties. Go to the Persist Location tab and make sure the location record of the cell you placed them in is set in the dropdown.
To place an NPC in the world, go to the Cell View window, find the cell you want to put them in and double-click it. After the cell loads, go to the Render Window and find where you want the NPC to stand. Place the Object Window in a spot you can see it and the Render Window at the same time and drag the Leftfield record into the render window and let go.
Several of the mechanics make use of a GlobalVariable we use to track whether or not you have an alliance with someone.
- In an Object Window, select the category Miscellaneous > Global, then right-click on the right half of the window and select New.
- Enter an ID for your global. For example, yourPrefix_Ally_Leftfield.
- Click OK to save the global.
- Setup your Addon pack as described in this guide. You won't have anything to add to the MyItems step yet, but you will after this tutorial! (For those of you addending an existing addon, you can use the same registration misc!)
Now that you have these records set up, we're ready to go through the next steps to actually integrate!
The first feature for injecting into the C3 story we'll talk about sort of leads into the other two.
During the story, a quest called Under One Banner starts. The quest has very little dialogue, and is primarily holding an objective telling the player to help their allies to gain alliances - this prompt is effectively SS2 telling the player to wrap up all other questlines as its time for the big conclusion.
Any time after that quest starts, the player can receive notices from their HQ that an envoy is waiting to speak with them. These envoys will have an Alliance conversation, inviting the player to make their group an Ally to the player's new faction.
Let's add Leftfield as an envoy and have him offer an alliance!
- In an Object Window, select the category Items > MiscItem, and filter for SS2C3_AllyAliasNameHolder_Wise.
- Right-click that template record and select Duplicate. Then double-click the duplicate to open the new record.
- Change the ID field to something unique, for example yourPrefix_AllyAliasNameHolder_Leftfield.
- Change the name field to "Leftfield" without the quotes. (This is used to finish a message to the player: "You've formed an alliance with X." where X is the text of this name field, if you are repeating these steps for a faction, you might want to put "the" in your name, for example "the Brotherhood of Steel" to ensure the sentence reads correctly).
- Click OK to close the record, answering No to creating a new record, and Yes to renaming it.
- In an Object Window, select the category Character > Quest, and filter for SS2C3_SQ03AllyMeetingQuest_Template.
- Right-click that quest and select Duplicate. Then double-click the duplicate to open this new record.
- Change the ID field to something unique. Example: yourPrefix_SQ03AllyMeetingQuest_Leftfield.
- Go to the Aliases tab, double-click the SpokespersonAlias (this screen is slow, be patient with the ol girl!).
- In the Reference Alias window that popped up, dot in the Fill Type option called Unique Actor. This will enable a dropdown where you can select Leftfield.
- Click OK to close the Alias screen.
- Go to the Scripts tab and double-click the script attached to the quest, which will bring up the Script Properties and fill out things as indicated below - note that many are optional and are explained here for future reference after the tutorial.
a. AdditionalRequirements: [Optional] This allows you to set up a variety of requirements as to when this ally should be available, things like quest stages and globals can be checked. This uses an SS2 Usage Requirements object.
b. AllyGlobal: [Optional] Point this at the global you created in the Creating an Ally Global section.
c. AllyNameHolderForm: Point this at the MiscItem you created at the start of this section.
d. AutoTriggerStages: [Optional] Setting these up will tell SS2 to monitor any quest stages you set here and when all of them are complete, it will automatically fire up this quest. If AdditionalRequirements is also set, it will wait until that passes as well. If you choose not to use this, you'll need to start the ally quest from one of your mod's quests or some other mechanism as it won't be auto-run by SS2 without this field. Or you can just start the quest enabled, and this envoy will be available in the first round of meetings like the Nightingales.
e. FactionForm: Normally, you'd point this at the faction of your group, but in our case with Leftfield, he doesn't have his own faction, so we can leave this blank. This field is used to ensure that faction is set as a Friend to the player's faction.
f. Participants: This field allows for setting up the various NPCs that should show up at the envoy meeting. Your initial participant is set up automatically. To add additional, you'd want to set up additional Aliases for your NPCs and at some of the various meeting markers found in the SS2C2HQMain cell, you can quickly find them by right-clicking the layer "SS2C3_SQ03AllyMeetingMarkers" in the Layers window and choosing Hide All Other Layer. Below is some information about the data you can enter for each Participant.
f-i. AppearanceRequirements: This allows for setting up an SS2 Usage Requirements object to determine whether or not this particular person should show up.
f-ii. bDisableNPCOnNextUnloadAfterMeeting: If checked, this NPC will be disabled when they unload next. This is useful if you have a copy of an NPC just for the sake of this meeting that you don't want to have to manage later.
f-iii. bReturnToEditorLocationOnNextUnloadAfterMeeting: If checked, after they next unload, this NPC will be returned to whereever they are at the start of a new game, or where they were spawned.
f-iv. MeetingRoomPosition: This points to an alias holding the marker in the SS2C2HQMain cell the NPC should use.
f-v. NPCToMeet: This points to an alias holding the NPC to show up at the meeting. Note that the default SpokespersonAlias is set up to provide an AI package that will have them automatically stand or idle/sit at the furniture marker provided. It does so via a linked reference to the corresponding Meeting Marker alias in the Linked Aliases section of the alias window, if you want to set up multiple participants, its easiest to copy the Spokesperson and SpokespersonMeetingMarker aliases and adjust your copies to point to each other. For example, your first Spokesperson copy should change the Linked Alias on the keyword SS2_LinkCustom_Other_01 to point at the first SpokespersonMeetingMarker copy, etc.
f-vi. ReturnToPosition: This is an alternative to using bReturnToEditorLocationOnNextUnloadAfterMeeting, if you point this to an alias, the NPC will be moved to the position of the reference in that alias after the meeting is over. If this is blank and bReturnToEditorLocationOnNextUnloadAfterMeeting isn't set, they will instead be placed just outside GNN where there normal AI packages can take over.
g. SS2C3_SQ03: This can be autofilled, or double-click it and select the only option available.
h. PluginVersion: Point this at your addons global as you would have set up during the Additional Steps section above.
i. PlayerRef: This can be autofilled.
- Click OK to save the script properties.
- Since we opted not to set up AutoTriggerStages for this tutorial, let's go to the Quest Data tab and check in Start Game Enabled. If you are setting up your own ally, this is not recommended - having lots of scripted quests Start Game Enabled can lead to start-up problems for players.
- Click OK to save the quest.
We're now set up so that Leftfield will appear as an envoy after the quest "Under One Banner" starts!
Though currently, he has nothing to say. Let's set up a quick example dialogue scene to handle the necessary stage setting to pull off an alliance meeting.
- Open the quest again and go to the Scenes tab.
- In the upper left empty box on this screen, right-click and select New.
- You will be prompted to enter a unique ID for the scene - it will start with ID of the quest in that box, so generally I will just go to the end and add something like _01_AllyScene. Click OK to create the scene.
- Highlight the scene you created, then move your attention to the largest empty box to the right of the scene list, right-click here and choose Add Phase at End.
- Right-click again in that area and choose New Actor, a box will pop-up listing your quest's aliases and Player Default. Select the SpokepersonAlias from the list, and select OK.
- Near the top of the quest window, you should see a series of Check boxes, cleck in the one labeled Player Dialogue. This should add a new Start Phase to the scene.
- In the Start Phase, there is a grey box labeled Start Greeting - double-click the area just below the label "Start Greeting".
- You will be prompted to create a New greeting topic ID, much like the scene ID you were prompted to create in step 3, this will start with the quest ID, you can simply go to the end and add Greetings to the ID, then click OK.
- This will bring up a New Response window, for the Response Text enter "Hey there, it's me Lefty!", and click OK.
- You should now have a Topic Info window, go to the Conditions section, right-click and choose New.
- In the Condition Item pop-up, select the following:
a. Condition Function dropdown: Select GetIsAliasRef
b. In the box just to the right of that dropdown, make sure it says Alias: SpokepersonAlias, if not click that box and update it to point at that alias.
c. Comparison dropdown: ==
d. Value: 1.0000
- Click OK to save the Condition, then OK again to save the Topic Info, and a third time to save the Topic. You should now see your text below Start Greeting on the scene.
- Right-click in the empty area to the right of Start Greeting and below Phase 1, choose New Action > Dialogue.
- In the Dialogue Action 1 prompt, right click in the large empty area near the bottom and select New. This will create an * EMPTY entry.
- Double-click the * EMPTY entry to bring up the New Response dialogue.
- Enter "What do you think about me joining your team?" as the Response Text, and click OK.
- Click OK again on the Topic Info screen and once again on the Dialogue Action 1 screen to return to the scene.
- Right-click in the blank area to the right of your last phase and choose Add Phase at End.
- Underneath Phase 2 in the large blank area, right-click and choose New Action > Player Dialogue.
- The first window that pops-up after selecting Player Dialogue is the Topic Info for the player's positive option, for that let's enter under Prompt "Accept Alliance".
- Double click the EMPTY under Response Text, and enter what the player should say when this prompt is selected. Generally, you'd want to use a tool like Voice File Reference Tool to find an actual existing line, but for the sake of this tutorial, we're just focusing on the necessary elements for making this meeting functional, so we'll just make something up, enter "You've got a deal.", and click OK.
- Still on that first Topic Info screen, towards the bottom there's a section titled scripts, in the right-half of that section are three radial options, check in "Set parent quest stage", and then select "20 - accepted" from the dropdown. This will tell SS2 to flag this faction as a friend and to set the Ally global to 1.
- Click OK to save this Topic Info. You will now be on a large window which has the player's 4 choices on the left, and the the NPCs reactions on the right.
- Double-click the * EMPTY on the top right, this will be the NPC's response to the player accepting the alliance.
- For NPC lines, we don't need to fill the Prompt field, and can skip to just double-clicking EMPTY and entering in the Response Text. For this Response Text, let's enter "Oh boy, you won't regret this for nothin!", and click OK, then OK again to close the Topic Info.
- Back on the Player Dialogue choice interface, double-click * EMPTY under Negative Response on the player side.
- For Prompt enter "Reject Alliance", then double-click the EMPTY under Response Text and enter "No, I think I'll pass." as the Response Text and click OK.
- We'll once again set the "Set parent quest stage" as we did before, but this time select "30 - rejected" as the stage, and click OK.
- Double-click the * EMPTY on the NPCs side for Negative Response, skipping the Prompt again, double-click the EMPTY under Response Text, and enter "Aw man, I thought for sure this was my chance!" as the Response Text. Click ok on this screen and the Topic Info screen.
- Normally, you'd set up the Neutral and Question responses, but we're going to skip those for now as the goal of this tutorial isn't to teach you full dialogue flow (if you'd like to learn more about dialogue and scenes, check out my Bethesda Mod School series!), so click OK to close the Player Dialogue action.
- Right-click to the right of Phase 3 and select Add Phase at End.
- Right-click in the large blank area below Phase 3 and choose New Action > Dialogue.
- In the large blank section near the bottom of the dialogue pop-up, right-click and select New.
- Double-click the * EMPTY entry you just created, and enter "Thanks for taking the time to hear my pitch!" as the response text, and click OK.
- In the Topic Info window, we're going to set a quest stage again, this time "50 - meeting complete", this will tell SS2 the meeting is complete and it can run clean-up.
- Click OK to the Topic Info, and OK on the quest to save the scene.
You're now ready to test your first envoy! If you have an SS2 save that is far enough along to have scene Advisor meetings, you can use that, otherwise, you can use the Cheat section of SS2's City Manager holotape to skip ahead to the Under One Banner quest, which will trigger the meetings.
Now that you've introduced your faction and the player has accepted your alliance, is time to inject your faction's presence.
Advisors are part of a system where a member of your group can be present when the player makes major decisions about the direction of their faction. When the player is looking to make what we call "Ideology Choices", whereby they define how their faction feels about a particular morale issue - such as how to treat enemy combatants, they will call an Advisor Meeting.
You can inject characters to be present at these meetings and comment on the player's decisions based on how your characters feel about it, similar to the companions commenting on player actions in game.
There are three parts to setting this up, the Advisor Definition record, the quest holding dialogue lines for the NPC to speak, and the Advisor Reactions record, which maps the dialogue to how the character feels about various issues.
First we'll need to set up some dialogue which can be referenced by the other records.
In order to be an Advisor, you'll need at least 7 lines for your character, one for each reaction level, though you can use the randomization feature in the game engine's dialogue system to allow for multiple alternate reactions at each level. (For SS2's characters, we settled on 3 variations of each reaction level, for a total of 21 lines per character for this system).
The lines represent feelings towards players policy decisions, they should have three levels of positive reactions, one neutral, three levels of negative. Below are some details on the types of lines you'll need, with the level being a technical thing we use for conditioning later:
Positive Reactions
Absolute Conviction (Major) - Level 3
Deep Belief (Middle) - Level 2
Endorse (Minor) - Level 1
Neutral Reactions
Neutral (They have no strong feelings about this) - Level 0
Negative Reactions
Firmly Against (Minor) - Level -1
Direct Opposition (Middle) - Level -2
Outright Hatred (Major) - Level -3
You can check out the SS2C3_AdvisorResponseDialogue to see the dialogue we used for each category. Then write down or type up some lines for each reaction level as you'll need them for some upcoming steps!
We found it safest for the Advisor system to generally use clone NPCs for the Advisor NPCs, that way you don't have to worry about an Advisor Meeting breaking your quests by moving your actual character around. In addition, your clone can be set up in a way that they won't have any AI packages that conflict with the meetings, or faction problems that might cause them to pick a fight with someone else there.
It's not a requirement through, you can use the actual actor if you prefer, in which case skip this subsection!
For SS2, we left the companion advisors as using the original NPCs so that if the player changed their gear, they wouldn't suddenly show up in their original clothing.
- In the Object Window, go to Actors > Actor, and filter for Leftfield.
- Right-click Leftfield's record and choose Duplicate.
- Open the duplicated record, and update the ID field to something like yourPrefix_Advisor_Leftfield.
- Go to the Templates tab, wait for the screen to fully load before trying anything to avoid crashing the CK.
- Select Leftfield's original record from the Default Template drop-down.
- Check the boxes next to the following, pausing after each check to allow the CK to catch up: Use Traits, Use Stats, Use Base Data. This will ensure the NPC looks the same as your base and has the same SPECIAL stats if the player decides to scan them with the Vitomatic.
- Check in Use AI Packages, but now you're going to change which character that's templated from - in the dropdown next to that checkbox, select SS2C3_AdvisorTemplate_AI. This is a dummy NPC we set up with AI packages that will make the advisor stay in the meeting calmly.
- Go to the Factions tab and remove any entries here, as well as set the Assigned Crime Faction dropdown to None.
- Go to the AI Data tab and set the following:
a. Aggression: Unaggressive
b. Assistance: Helps Nobody
c. Morality: No Crime
d. Ensure Aggro Radius Behavior is NOT checked.
- Click OK answering No to create new record, and yes to renaming.
- In the Cell View window, switch the Worldspace dropdown to Interiors, and switch to SS2C3CharacterHoldingCell.
- Drag your Leftfield Advisor clone on to one of the platforms in this cell.
- Double-click the reference you just created and go to the Persist Location tab, make sure it is set to SS2_HoldingCellsLocation.
You are welcome to put your Advisor clone in any cell, just be certain they have the Persist Location set, or they won't work as an Alias for dialogue.
If you already have a dialogue quest to hold dialogue for your character, you can skip this subsection and set up your scenes on that.
- In an Object Window, go to Character > Quest. Right-click on the right half and select New.
- Enter a unique ID for your quest, such as yourPrefix_DialogueQuest_AdvisorLines_Leftfield.
- Set the Priority to 45.
- Check in Start Game Enabled. (Since we won't be adding a script to this quest and it will be used exclusively for dialogue, Start Game Enabled isn't a big deal -so you can ignore my previous warning against the same thing)
- Uncheck Run Once.
- Click OK to save the quest, then open it again.
- Go to the Quest Aliases tab.
- Right click in the large empty area and select New Reference Alias. (The Alias screen can take a bit to open, so be patient with the old girl).
- For the Alias Name, enter Leftfield.
- Check in Optional and Allow Disabled.
- Select the radial option Unique Actor and choose your Advisor copy of Leftfield created in the previous subsection.
- Click OK to save the Alias.
- Click OK again to save the quest.
Now that we have a quest to hold the dialogue, you're ready to set up the actual lines.
There are infinite ways you can set up dialogue, I'm going to show you how I wished I'd have set it up in SS2. So don't be alarmed if you find this doesn't exactly match what you find in the Chapter 3 configuration - what I'm going to show you will work identically - it's just cleaner.
- Open your dialogue quest and go to the Scenes tab.
- Right-click the upper left blank area and choose New to add a new scene and give it a unique ID. (we're going to start with the worst reaction scene and move towards the best) For example, yourPrefix_Leftfield_1_OutrightHatred (The 1 is so that that it will appear first in the scene list and will make it much easier to fill out a script property later if all the scenes are easily in order with you having to memorize the order later).
- Select your scene and then in the large empty area to the right, right-click and choose Add Phase at End.
- Right-click the large empty area again and choose Add Actor, select your Advisor and click OK to add them to the scene.
- At the top of the window check in Player Dialogue. We're not actually going to set up a greeting this time, we simply want this to count as Player dialogue as it ensures the dialogue camera can jump from character to character smoothly.
- Next we're going to set up a fake dialogue entry that will trigger the NPC to look at the player and the camera to point at them.
a. In the first phase, rigth-click and choose New Action > Timer.
b. Double-click the Yellow action to open it, then set the Max seconds to 0.1 and click OK.
c. In the first phase, right click and choose New Action > Dialogue.
d. Check in Headtrack Player and Keep Target on Action End.
e. Right-click the large empty area near the bottom of the Dialogue Action screen and choose New. Then double-click the Empty entry that was added.
f. For the Response Text enter "...", and then click Sound File box to the right of where you entered the Response Text.
g. In the Select Form dialogue, filter for XXXPlaceHolderSilenceDesc, select it, and click OK. The OK to save the response text.
h. In the lower right portion of the Topic Info screen, click the Add button and search up the script SimSettlementsV2:TopicInfo:StartDialogueCamera and add it.
i. In the script properties, double-click bStartCameraOnBegin and uncheck it.
j. Click OK to close the script properties screen and again on the Topic Info screen.
- Right-click in the empty area to the right of Phase 1 and choose Add Phase at End.
- Under Phase 2, right-click and choose New Action > Dialogue.
- Check in Headtrack Player and Keep Target on Action End.
- In the large empty area towards the bottom of this screen, right-click and choose Make Info Group, then double-click the [GROUP] entry that appears.
- In the Info Group window, right-click in the large empty area towards the top and select New.
- Enter the dialogue for the first Outright Hatred line as the Response Text and click OK. Then OK again to close the Topic Info window as well.
- If you have multiple Outright Hatred lines, right-click your first line and choose Copy, then double-click your copy and change the Response Text to your next line.
a. Repeat for each additional Outright Hatred line.
- Once you've entered all of this reaction type lines, check in the Force All Children Random check box.
- Click OK to close the Info group, and Ok again to close the Dialogue Action.
- Right-click the scene you just finished in the top-left panel and select Duplicate.
- Select the duplicated scene, then update the ID field at the top to change 1_OutrightHatredCOPY000 to 2_DirectOpposition.
- Under Phase 2, you can double-click the lines directly to bring up their Topic Infos, and then double-click the Response Text to edit it and update it to the text of your equivalent Direct Opposition line.
- Repeat updating all lines for this scene.
a. If you have a different number of lines for this scene than the previous, double-click the action itself to bring up the Dialogue Action screen, then double-click the group to bring up the Info Group screen where you can select extraneous lines and delete them, or add additional entries. Be sure to confirm Force All Children Random remains checked if you edit things from the Info Group screen, sometimes it will uncheck itself.
- Repeat steps 16 through 19 for the remaining 5 types. Your scenes should end up with the endings: 3_FirmlyAgainst, 4_Neutral, 5_Endorse, 6_DeepBelief, 7_AbsoluteConviction.
Once you've finished setting up all scenes, you're now technically ready to set up their Advisor Definitions, but there's one helpful thing we can do here to repurpose those lines you just set up for another use-case.
The player has an option in game to disable everyone automatically sharing their thoughts (for players with a large number of allies it can become quite exhausting to list to dozens of people chime in), so players need an alternate way to hear what your character things about their most recent decision. For this we make use of Shared Info, Greetings, and a special condition to repurpose the lines you set up for the Scenes to also allow the player to walk up and talk to your character to get their opinion.
Let's start by making all the lines you just set up a type called SharedInfo, which allows them to be used in mulitple places without requiring multiple copies of the same file.
- Open the Outright Hatred scene from the previous section.
- Double-click the Action under Phase 2.
- Right-click the first line and choose Make Shared Info, you'll be prompted to give the line a unique ID, for example yourPrefix_Leftfield_OutrightHatred01.
- Repeat for all of your lines under all of the scenes so that each is easily identifiable by the unique ID.
- Go to the Misc tab, in the center column, right-click and choose New Topic.
- Select Greeting from the list and click OK.
- Select Greeting from the center column, then in the large empty area to the right, right-click and choose Make Info Group.
- Double-click the new [GROUP] you just created.
- In the Info Group window, right-click in the large empty area at the top and choose New.
- When the New Response window comes up, click Cancel, which should put you on a Topic Info window.
- From the Share Response Data From Info dropdown, select the first Outright Hatred line.
- Click OK to return to the Info Group screen.
- Right-click that first entry and choose Copy, then double-click the copy.
- Select the next Outright Hatred line from the dropdown, then click OK.
- Repeat the previous 2 steps for each Outright Hatred line.
- Check in Force All Children Random and Force All Children Player Activate Only.
- Right click in the empty area in the center of the screen where it mentions Conditions and click New.
- Select GetIsAliasRef from the Condition Function dropdown, and make sure the box to the right of that is pointing at your advisor alias.
- Click OK.
- Add another condition from the right-click menu.
- Select GetValue from the Condition Function dropdown.
- Click on the box that says INVALID and select SS2_AdvisorReactionToLastChoice from the dropdown, then click OK.
- Leave the Comparison as ==, and set the Value to the appropriate Level listed for that group in the Dialogue Setup section above (for example, Outright Hatred is -3).
- Click ok to save the condition.
- Add another condition from the right-click menu.
- Select GetVMQuestVariable from the Condition Function dropdown.
- Click the box to the right of this to bring up the Select Function Parameters screen.
- Under Parameter 1, select the quest SS2C3_AdvisorManager.
- Under Parameter 2, select ::bIdeologyChoiceRecentlyMade_var.
- Click OK to close the Select Function Parameters Screen, again to close the condition screen, and once more to close the Info Group screen.
- Right-click your completed group and choose Copy.
- Double-click your copied group to open it.
- Double-click each line in the top section and select the corresponding line from the next group of dialogue (for example Direct Opposition).
a. If this group has less lines than the previous, delete the extras, if more, right-click one of the other lines and copy it, and then edit the copy to point to the next line for this group.
- Double-click the GetValue condition, and change the value field to the appropriate Level listed for this group (for example, Direct Opposition is -2).
- Repeat the previous 4 steps for each of the other dialogue groups.
You've now got all of your lines set up and are ready for the final bits to tie it all together!
For clarity in the steps, this portion will use the character "Leftfield" from the Envoy/Alliance section above as the example, feel free to use your own character instead.
- In an Object Window, go to Items > MiscItem, and filter for SS2C3_AdvisorDefinition_Template.
- Right-click the template record and choose Duplicate.
- Open the duplicated record and update the ID to something unique. Example, yourPrefix_AdvisorDefinition_LeftField.
- Change the name field to be the name of the person that will be speaking.
- In the Scripts section, double-click the script there to bring up the properties window.
- If you set up an Advisor clone in the previous sections, double-click the AdvisorVersion heading to expand it.
a. Double-click the AdvisorVersion_ActorBaseForm and point it at your advisor record.
b. The iFormID and sPluginName fields are optional fields that mods can used to reference NPCs from other mods - this is a way for people to make patches without dependencies and should be very rare you'd need to ever fill these out.
- Fillout the remaining properties as described below:
a. AllyQuest: [Optional] Point this to the quest you created in the Envoy/Alliance section (In order for your quest to be registered with SS2, you must set it here or on an MQBattleAlly record which we'll talk about in the next major section)
b. AvailabilityRequirements: [Optional] SS2 Usage Requirements object that determines if this Advisor should show up. (In SS2, we use this for factions where the player's actions determine who the leader ends up so that only the person the player sided with appears.)
c. gAllyStatus: Point this at the Ally global you set up way back in the Preparing Records section.
d. gAvailableForMeetings: [Technically Optional] This can be a global you can make use of to turn your Advisors availability on and off on the fly. For example, if your character is off on a mission, or doing something temporarily where it would be unimmersive for them to appear at an advisor meeting, you can simply have your quest set this global to 0 while they are busy, and back to 1 to make them available again. If you don't set up a global for this, they will be considered always available unless they are dead or disabled.
e. IdleChatterToggle: [Optional] If set, this global will be set to 0 during meetings, and back to 1 when the meeting is over. This is useful for conditioning your character's idle lines to only be eligible when this global's value is 1 so they don't spam the player with unrelated chatter during what is supposed to be an important meeting.
f. OriginalNPC_ActorBaseForm: Point this at the original actor form, not the advisor clone. This is used to check if the original actor is dead or disabled as an indication that the advisor shouldn't be available for the meeting. Also, if you don't set an Advisor NPC, this entry is used instead. The iFormID and sPluginName fields are optional fields that mods can used to reference NPCs from other mods - this is a way for people to make patches without dependencies and should be very rare you'd need to ever fill these out.
g. ReactionScenes: Add the 7 dialogue scenes you created in the Setting up Scenes subsection previously. They should be in the exact order: Outright Hatred, Direct Opposition, Firmly Against, Neutral, Endorse, Deep Belief, Absolute Conviction. (This is where the scene names come in handy, since I had you number them 1 through 7 in the IDs, after you find the first one - you can click that entry in the property window and click duplicate, click on the duplicate and the next appropriate entry will be the next one down in the dropdown list, repeat for all).
- Click OK to close the script properties.
- Click OK to close the Advisor Definition answering No to creating a new one, and yes to renaming.
- In an Object Window, go to Miscellaneous > Formlist and filter for SS2_C3_AdvisorDefinitions_AddonTemplate, right click it and choose Duplicate.
- Open the duplicate and give it a unique ID. Example, yourPrefix_AdvisorDefinitions.
- Drag this window off to the side so you can reach it in a moment, then go back to an Object window and select the category Items > MiscItem and search up your Advisor Definition.
- Drag your Advisor Definition into the formlist below the default SS2_FLID_C3_AdvisorDefinitions entry.
- Click OK to close the formlist.
- Add this formlist to the MyItems of your AddonConfig record. If you haven't created an addon config yet, now's the time!
You can add additional Advisor Definitions to that same formlist if you are definining multiple for this plugin.
The final part of setting up an Advisor is creating an Advisor Reactions record to tell SS2 what your character feels about the various choices available to the player.
The reason this is separated from Advisor Definitions is so that as we introduce additional Ideology choices in the future, or other mods add new Ideology choices, it will be possible to inject the feelings various characters will have on those new choices. It means other addons can incorporate your characters, without anyone needing to make a patch to support the new options!
- In an Object Window, go to Items > MiscItem and filter for SS2C3_AdvisorReactions_Template.
- Right-click this template and choose Duplicate.
- Open your duplicate and give it a unique ID. Example, yourPrefix_AdvisorReactions_Leftfield.
- Set the name field to the name of your Advisor NPC.
- Double-click the script under the Scripts section to open the script properties.
- Fill out the script properties as follows.
a. AdvisorDefinitionForm: Select MiscObject as the Form Type, after the CK catches up, another dropdown will appear that you can point at your Advisor Defintion form. (Alternatively if this is for someone else's definition, you can expand the ExternalMod section and fill those fields out instead)
b. CustomReactionScenes: [Optional] This allows for having specific scenes targeted at specific choices. For example, if your character/faction would have a specific reaction to a choice regarding Prisoners of War, you might want a custom scene where the character addresses the policy precisely, rather than just playing generic lines about liking/disliking a decision. To use this field, you'll need exactly one entry per entry you add to the IdeologicalChoiceSettings property, where the index column of the script property for the scene matches the index column of the script property of the IdeologicalChoiceSettings. For example, if the scene should play when the player makes the choice defined as the 3rd entry in your IdeologicalChoiceSettings property, that scene should be should be the 3rd entry here. For any entries you want to use the default reactions, just enter those as None.
c. IdeologicalChoiceSettings: This is already set up for you to cover the Ideology options included with SS2 at the time of this writing. Though so you can add support for future new Ideology options, I'll explain how its setup: Each entry consists of two fields to fill out, GlobalForm which should point at one of the Ideology globals, and fValue which represents what the player chose for that Ideology. To find a list of potential values for any given ideology global, you'd look at the IdeologyChoice record, which is a Misc item. You can open the script properties on those MiscItems, and look at the ChoiceMessages property to see what the player was presented, and the OverrideIdeologyGlobalValue to see the corresponding value for each of those choices (if the OverrideIdeologyGlobalValue property isn't set, it means the values are just 1 through X up through the number of different choices, ie. choice 1 = 1, choice 2 = 2, etc.). You need one entry in IdeologicalChoiceSettings for each possible value of each Ideology choice - that may seem like a lot, but generally each Ideology choice only has 3 or 4 options.
d. iReactionLevel: This starts out as all 0s and has an entry for each of the default Ideology options SS2 offers at the time of this writing. You should update this to be a number from -3 to positive 3, based on how they feel about the corresponding IdeologicalChoiceSetting entry. For example, the first IdeologicalChoiceSetting is Civil Defense Expectations is set to 0, which means the player doesn't expect civilians to help defend settlements, so the first entry in iReactionLevel is how your character would react to that decision based on the levels defined in the Dialogue Setup section (ie. -3 = outright hatred, etc). So you don't have to bounce around trying to figure out what each entry represents, see the chart at the bottom of this subsection.
- Click OK to close the properties.
- Click OK to save the Advisor Reactions, answering No to create new, and yes to rename.
- In an Object Window, go to Miscellaneous > Formlist and filter for SS2_C3_AdvisorReactions_AddonTemplate, right click it and choose Duplicate.
- Open the duplicate and give it a unique ID. Example, yourPrefix_AdvisorReactions.
- Drag this window off to the side so you can reach it in a moment, then go back to an Object window and select the category Items > MiscItem and search up your Advisor Reactions.
- Drag your Advisor Reactions into the formlist below the default SS2_FLID_C3_AdvisorReactions entry.
- Click OK to close the formlist.
- Add this formlist to the MyItems of your AddonConfig record. If you haven't created an addon config yet, now's the time!
Below is a chart of the Ideological choices in the order they are set up in the template at the time of this writing to help speed up setting up the iReactionLevel property. Note that some of these Ideological decisions are not yet available to players and will be patched in with a future update, but you can still add support for them now.
Index |
Question (summarized) |
Choice |
0 |
Should Civilians defend? |
Civilians Flee |
1 |
Should Civilians defend? |
Civilians Fight |
2 |
Enemy Civilian Treatment |
Allowed to Flee |
3 |
Enemy Civilian Treatment |
Captured |
4 |
Enemy Civilian Treatment |
Killed |
5 |
Enemy Soldier Treatment |
Killed |
6 |
Enemy Soldier Treatment |
Captured |
7 |
Enemy Soldier Treatment |
Allowed to Flee |
8 |
Vassal Citizens Relationship |
Friendly (Player is offering protection) |
9 |
Vassal Citizens Relationship |
Hostile (Player is demanding tribute) |
10 |
Medical Treatment Priority |
Soldiers First |
11 |
Medical Treatment Priority |
Civilians First |
12 |
Medical Treatment Priority |
First Come, First Serve |
13 |
Stealing Resources from Civilian Settlements |
Anti (Player will fight those who are for this) |
14 |
Stealing Resources from Civilian Settlements |
Neutral (Player will ignore the behavior) |
15 |
Stealing Resources from Civilian Settlements |
Pro (Player will engage in this) |
16 |
Stealing Resources from Vassals |
Anti (Player will fight those who are for this) |
17 |
Stealing Resources from Vassals |
Neutral (Player will ignore the behavior) |
18 |
Stealing Resources from Vassals |
Pro (Player will engage in this) |
19 |
Medical Treatment of POWs |
Treat and Release |
20 |
Medical Treatment of POWs |
Don't Keep POWs at All |
21 |
Medical Treatment of POWs |
Provide Treatment |
22 |
Medical Treatment of POWs |
No Treatment |
23 |
Slavery |
Anti (Player will fight those who are for this) |
24 |
Slavery |
Neutral (Player will ignore the behavior) |
25 |
Slavery |
Pro (Player will engage in this) |
At the climax for the Chapter 3 portion of SS2's story, the player gathers their allies for a final large conflict with the Gunners. This involves the player choosing which of their allies will fill a variety of roles throughout the battle.
This battle, and the lead-up planning, can be injected into so that any group and partake! This will allow for defining things like which characters appear at the planning meetings, who will show up in the field to fight, and there are even opportunities to inject dialogue if you're comfortable enough to write a little script!
In the future, we may expand this system to inject allies into the stories mid-point battle with the Gunners at GNN as well, so keep an eye out for updates to this page. If we add that support it will involve fields on the same records you're filling out for the Battle of Quincy support!
The first thing you'll want to do is consider how your faction would do at each role. If you've not played through the Chapter 3 story and the Battle of Quincy yet, I highly recommend you do, or at least watch a playthrough video so you understand roughly what I'm describing here.
During the planning phase, players will have to assign an Ally to each of 7 roles during the battle:
Strike Team - They'll handle a distraction force that's meant to lure away a large amount of the Gunner forces from Quincy - they need to be able to handle heavy combat.
Defense Team - They'll clear the road between HQ and Quincy and prevent counterattacks - they need to be able to handle heavy combat.
Tech Team - They'll provide robotic support and help deal with enemy turrets. They'll need a strong technical background.
Infiltration Team - They'll manage a stealth team that sneaks in behind enemy lines to help clear the way for the player to make it to their targets. They'll need to have a strong background in espionage.
Mission Support - They'll handle comms and coordination of the other groups. They'll need strong logistical and communications skills.
Air Support - They'll handle Vertibirds for keeping enemy air support away from the main battle. They'll need capable pilots.
Ranged Support - They'll handle Artillery for keeping the pressure up on Gunner forces. They'll need a strong explosives background.
For each of these teams, you'll need to think about how your group would do. For each, you've got to give them a rating of 1 to 5, with 1 being Specialist (ie. absolutely fantastic at the job) and 5 being Inept (ie. being a terrible choice). Depending on their rating, if they are chosen for that job a variety of events will occur, with more positive outcomes occurring for higher rated teams.
Your goal should not be to rate your group as a 1 on all teams, you should think about how your player perceives your group in relation to many of the base game factions, and rank them accordingly so that when they try to make an educated guess about which Ally should fill out each team, they are rewarded for their forethought. It it starts to feel like every group is a master of every team, it will ruin the purpose of choice, so try and give your group a mix.
If you are creating a record for an individual, rather than a faction, imagine them as a commander leading some of the player's forces and score their ratings based on how they would improve or worsen things. We consider the players forces (listed as HQ in-game) to be slightly above average at all roles, ie. rating 2 when planning out our commander type characters - so imagine if your character could push any of them to a Specialist rating, or if they are inept enough to drag the group down in a particular discipline.
For the Allies SS2 included, we tended to give more powerful groups 1 Specialist rating and 1 Inept rating, with the other ratings being somewhere in between. Whereas tiny factions might have no Specialist ratings at all. Feel free to check out the BattleOfQuincy_Proficiencies section of the script properties for existing MQBattleAlly records to get an idea of how we have other factions set up to help you make your decisions.
There are an extraordinairy amount of fields in the object I'm about to show you how to create, you don't need to fill them all out for your group! There are fallback defaults for everything, and in some cases, it makes no sense to fill them out depending on where you landed for your factions specialties.
- In an Object Window, go to Items > MiscItem and filter for SS2C3_MQBattleAlly_Template.
- Right-click the template and choose duplicate, then open the duplicate.
- Give the record a unique ID, such as yourPrefix_MQBattleAlly_Leftfield.
- Change the name to the name of your Ally, whether it be an indivudal character like Leftfield, or the name of your faction.
- Double-click the script on the object to open the script properties.
- In reality, you only have to fill out your group's proficiencies, and point a couple properties to some existing things you created in previous sections, so let's start there.
a. iRank_As<TeamName>: These are where you'll enter in those 1 to 5 ratings you came up with for your ally.
b. AllyQuest: This is the ally quest you created in the Envoy/Alliance section - if you already registered this with your AdvisorDefinition, you can skip it here.
c. gAllyStatus: This is the ally global you created near the start of this guide. If it's set to 1 at the time of the battle, the ally will be an option for the player to choose from. If you'd like more fine-tune control over availability, you can also use the AvailabilityRequirements field to override the ally state - this will allow you to arrange situations where they remain an Ally to the player after the battle, but aren't present for it specifically.
d. The remainder are optional! Due to the complexity of information associated with some of the other script properties, I'm separating the remaining ones to their own section after these steps which will give me more freedom to use the markup available in this wiki software. So skip ahead if you want to fill out more now, or finish the steps ahead then come back and fill out more script properties after.
- Click OK to close the properties.
- Click OK to save the MQ Battle Ally record, answering No to create new, and yes to rename.
- In an Object Window, go to Miscellaneous > Formlist and filter for SS2_MQBattleAllies_AddonTemplate, right click it and choose Duplicate.
- Open the duplicate and give it a unique ID. Example, yourPrefix_MQBattleAllies.
- Drag this window off to the side so you can reach it in a moment, then go back to an Object window and select the category Items > MiscItem and search up your MQ Battle Ally record.
- Drag your MQ Battle Ally record into the formlist below the default SS2_FLID_MQBattleAllies entry.
- Click OK to close the formlist.
- Add this formlist to the MyItems of your AddonConfig record. If you haven't created an addon config yet, now's the time!
This first batch can be found under BattleOfQuincy_Actors - and represents some checkboxes you can set to override some default behavior.
bMakeInfiltrateAgentsAppearFromStealh: If your iRank for Infiltration team is 1 or 2, you can check this in. Doing so makes the agents configured under the InfiltrationAgents property appear as if they just used Stealthboys.
bNoTechFollowerBot: If checked, the player will not be given a temporary robot follower. This is useful if you don't want any bot at all, perhaps your faction isn't good enough to handle a bot or dislikes robots.
bNoTechWarriorBots: If checked, and your iRank for the Tech team is 1, 2, or 3, but you still don't want a set of bots to march into Quincy after the player approaches the Tech Team - this could be useful if perhaps you've scripted some alternate way for them to help that doesn't involve bots.
bUnitsPlayTeleportationEffectOnAppearance: If checked, anytime new units appear during the battle from your group, the Institute teleport effect will play.
The next batch are NPCs that can be set up either as specific unique NPCs with references pointing directly to them, or by pointing to Aliases that will be filled with the appropriate NPC. You should fill out one or the other for each, not both.
The Alias version is especially useful for Commander type characters where you want to give them a squad of the player's soldiers. For that particular style, you can use SS2C3_MQBattleAlly_Wise to copy-paste some alias sets that will be filled at the start of the battle with character's from the player's HQ and army.
To copy-paste a script property, simply open the script properties on the object you want copy an entry from, right click on that property and choose Copy Value, then on the same property of another object, right click it's property and choose Paste Value.
Some of them also have Requirement settings available which can use an SS2 Usage Requirements object to determine whether or not they should show up at all.
Below are the various actor records you can set up:
Defense Lead
Defense Lead is generally someone the player will recognize from your faction. They will be at the tent meeting just before actual fighting begins representing your group, they will then march with the Defense Team and the player towards Quincy.
Actor Ref Property: DefenseLeadActor
Alias Version Property: DefenseLeadActor_AliasVersion
Requirements Property: DefenseLeadActorRequirement
DefenseSquadLeader
This should be a human Male NPC. The actor will attend the Tent meeting outside GNN before the battle, and then travel with during the Defense sequence. This actor will have their voice type overwritten and has dialogue lines SS2 provides during the scene, we generally name these "<Faction Name> Squad Leader", for example "Brotherhood Squad Leader" or "Minutemen Squad Leader", etc.
As an alternative to setting this up, you can instead create or use an Outfit record that well represents your group and fill it out under DefenseSquadLeaderOutfit which will take a generic NPC SS2 provides and equip him with this outfit to act as this role.
Actor Ref Property: DefenseSquadLeaderActor
Alias Version Property: DefenseSquadLeaderActor_AliasVersion
Requirements Property: N/A
Defense Troops
There are three sets of properties for defense troops, all of these properties are used to form the initial squad of troops that travel with DefenseLead and DefenseSquadLeader at the start of the battle. Depending on which set each is in will determine where they stop and hold position.
None of these roles are speaking, so they can any race, character, or creature you'd like, even named NPCs.
Actor Ref Properties: DefenseTroopActors_CheckPoint01 (Up to 2 entries), DefenseTroopActors_CheckPoint02 (Up to 2 entries), DefenseTroopActors_FullMarch (Up to 8 entries)
Alias Version Property: DefenseTroopActors_CheckPoint01_AliasVersion (Up to 2 entries), DefenseTroopActors_CheckPoint02_AliasVersion (Up to 2 entries), DefenseTroopActors_FullMarch_AliasVersion (Up to 8 entries)
Requirements Property: N/A
If you are creating a commander ally, this is a great set to make use of the player's army with, as suggested earlier in the document, copy-paste the AliasVersion of these settings from Wise to get access to some of the player's HQ staff and soldiers.
Infiltrate Agents
If your group's rating in Infiltration is 1 or 2, you can provide Infiltration Agents that appear as part of a cutscene of sorts to make it seem as if they just finished their job and are heading off to do more work.
These are non-speaking roles, so they can any race, character, or creature you'd like, even named NPCs.
This is an optional set even if your group is skilled at Infiltration, simply leave this blank if you don't wish to have any agents appear.
Actor Ref Property: InfiltrateAgents (Up to 2 entries)
Alias Version Property: InfiltrateAgents_AliasVersion (Up to 2 entries)
Requirements Property: N/A
Meeting Representative
During the quest leading up to Battle of Quincy, the player will have a meeting that looks very similar to an Advisor Meeting, where the player's department heads will explain the battle plan with many of their Allies having representatives in the room. This allows you to include a representative in that meeting.
It's not required, but it will give you an opportunity to have your NPC speak up when chosen for a team. There is a set of properties to configure a custom scene to be played in reaction to your Ally being chosen for particular teams. They can be found under the BattleOfQuincy_Advanced section of the properties, there is one entry for each team, you can make use of as many or as few as you like. For example, if you have MeetingReactionSceneOverride_ChosenForAirSupportTeam set up and your ally is chosen for Air Support, that scene will be played. If they are instead chosen to be Defense Team and you don't have that MeetingReactionSceneOverride set, the SS2 characters will simply continue on without a hitch.
It does not have to be someone you used as Advisor or during your Envoy meeting (all three can be completely different people if you like!).
Actor Ref Property: MeetingRepresentative
Alias Version Property: MeetingRepresentative_AliasVersion
Requirements Property: MeetingRepresentativeRequirement
Alternate Rep
This person can replace Meeting Representative if MeetingRepresentative isn't available. SS2 makes use of this for faction's where the player's choices impact the leadership of a group to swap who shows up for the meeting.
Actor Ref Property: AlternateRep (Found under BattleOfQuincy_ActorsAdvanced)
Alias Version Property: AlternateRep_AliasVersion
Requirements Property: AlternateRepRequirement
Mission Support
Mission Support will have a character seated at a radio near the command tent in front of HQ throughout the battle. This character's appearance is just for flavor - they have no spoken role nor do they fight, so this can be anyone you like - preferably a Human or Ghoul (other races don't have the animation sets available to sit at the furniture).
Actor Ref Property: MissionSupportActor
Alias Version Property: MissionSupportActor_AliasVersion
Requirements Property: MissionSupportActorRequirement
If this is a commander character, and you don't want to put them in that radio position, we have an HQMissionSupport set up on the quest SS2C3_QBattle_HQWorkerAliases which will be filled with a random Logistics unique NPC at the player's HQ, you could use this alias to fill MissionSupportActor_AliasVersion.
Strike Lead
If your ally is rank 1 as Strike team, this character can show up later in the battle as if the Strike team was so effective they took out all of the enemy forces they were meant to keep busy and had time to make it to the center of Quincy to assist with the next phase of the fight.
This would generally be a named combat effective character the player would recognize from your group.
Actor Ref Property: StrikeLeadActor
Alias Version Property: StrikeLeadActor_AliasVersion
Requirements Property: StrikeLeadActorRequirement
Strike Troop Actors
If your ally is rank 1 as Strike team, up to three additional troops can join Strike Lead in appearing later in the battle representing how efficient they were at their job.
These are non-speaking roles, so they can any race, character, or creature you'd like, even named NPCs.
Actor Ref Property: StrikeTroopActors (Up to 3 entries)
Alias Version Property: StrikeTroopActors_AliasVersion (Up to 3 entries)
Requirements Property: N/A
If this is a commander character, this could be a good place to use some of the player squad aliases, you can either copy them from Wise's DefenseTroopActors property, or copy the StrikeTroopActors_AliasVersion property from Berman's MQBattleAlly record.
Tech Follower Bot
When the player reaches the Tech Team, they will be offered support from Robots. At bare minimum they will be offered a single bot to move in with them through the front gates and try to help lure some of the heat off the player. You can set this to specify which bot is sent for your group, it's non-spoken so can be a named Bot (technically doesn't even have to be a bot - but the Tech Lead is going to talk about sending in a bot).
You don't have to fill this in, a generic bot will be sent that is more powerful the higher your groups ranking for Tech Team is. If you'd rather no Follower Bot is sent, check in bNoTechFollowerBot.
Actor Ref Property: TechFollowerBot
Alias Version Property: TechFollowerBot_AliasVersion
Requirements Property: N/A
If this is a commander character, we have an HQTechFollowerBot set up on the quest SS2C3_QBattle_HQWorkerAliases which will be filled with a random robot from the player's HQ, you could use this alias to fill TechFollowerBot_AliasVersion.
Tech Guest Actor
When the player reaches the Tech Lead, they can also find a guest actor with them. This would generally be someone the player associates with being clever with science or technology and is purely a flavor role - they won't speak or be involved in the battle. (If you know how to setup reaction events to when a quest reaches a certain stage, you could have your character fire a scene in reaction to SS2C3_MQ_QBattle_03_TechQuest reaching stage 35).
Actor Ref Property: TechGuestActor
Alias Version Property: TechGuestActor_AliasVersion
Requirements Property: TechGuestActorRequirement
If this is a commander character, we have an HQTechGuest set up on the quest SS2C3_QBattle_HQWorkerAliases which will be filled with a random Science or Engineering unique NPC at the player's HQ, you could use this alias to fill TechGuestActor_AliasVersion.
Tech Warrior Bots
If your ally is rank 1, 2, or 3 as Tech team, up to four additional bots can be sent in along with the Tech Follower Bot to help the player make it through the front gate.
Actor Ref Property: TechWarriorBots (Up to 4 entries)
Alias Version Property: TechWarriorBots_AliasVersion
Requirements Property: N/A
If this is a commander character, this could be a good place to use some of the player squad aliases, you can copy them from Wise's TechWarriorBots_AliasVersion property.
There are several generic characters with speaking roles that you can't replace, but can replace their outfits to make them appear to be a member of your group.
InfiltrationLeaderOutfit: Worn by a Male NPC that will be found in the Super Duper Mart portion when he informs the player what the group has found out about the situation and what they've accomplished so far.
TechLeaderOutfit: Worn by a Female NPC just before entering the main gate of Quincy that will brief the player on how well they dealt with Gunner tech and what robotic support the group is providing the player as an escort to get through the front.
The remaining properties didn't fit under a particular grouping.
Availability Requirements: An SS2 Usage Requirements object that determines whether this group should be available for the Battle of Quincy. This can be used if there are circumstances where they shouldn't be an option sometimes, but could still be an ally to the player. For example, in SS2 we use this with the NLTC so that if the player chooses not to pay their Mercenary fee, they won't show up for the battle, even though they are still an ally.
This setting is under BattleOfQuincy_Advanced.
VictoryLapInjector: After the Battle of Quincy wraps, a quest called Victory Lap starts, where the player is encouraged to check in with all of their allies - even those that didn't participate in the battle - and hear how things went. This objective can be injected into to put a point on one of your characters so the player can come check in with them.
We have a template quest called SS2C3_Template_VictoryLapCheckinQuest you can duplicate and use in this property to allow your group to participate in the Victory Lap portion.
I'm not going to go into how to set up your dialogue for this quest, but I will show you some of the configuration that make it quick to get this set up.
Aliases
- CheckInActor: This should point to your primary speaking actor that should get the quest marker on them.
- CheckInActorWaitAtMarker: Place an XMarker heading, Idle marker, or furniture marker (with ignored by sandbox checked in) somewhere in Quincy, outside GNN, or somewhere between the two locations and place it in this alias. Your Check In actor will wait there for the player.
Optionally you can give them buddies to wait with them by filling in the CheckInActorBuddy01/02 and giving them wait markers as well. You could even create more alias sets like this, just be sure to add them to the script properties if you do.
Script Properties
On the quest is a script which is almost entirely filled out for you by default, you just need to point the PluginVersion to your addons version global.
Dialogue Conditions
There's no requirement for how you set up your dialogue or what you have them say, can be a whole quest's worth of dialogue if you like. There are some useful things set up to allow you to condition based on how things went and what role your group was assigned to. That way you can create a variety of lines based on how things went and condition them accordingly to get a nice custom reaction scene for the player.
- Using the condition GetVMQuestVariable ::iBattleRole_var:: will be set to one of the following values you can check for: -1 = Wasn't assigned to any role, 0 = Strike Team, 1 = Defense Team, 2 = Tech Team, 3 = Ranged Support, 4 = Infiltration Team, 5 = Air Support, 6 = Mission Support. This can let you comment on what your group's role was during the battle.
- The globals SS2C3_MQ_QBattle_<Team>Status will be set to a value between 1 and 5, which represents how good the team that was assigned to a particular role was (1 being Specialist, 5 being Inept). So you could use this to comment on how well the battle went for a certain team, perhaps suggest things would have went better if they were in a role by checking if the corresponding global is lower than their expected value.
- The battle system will actually let the player assign one group to multiple teams if they like, doing so reduces their rank at each of those by 1. You could use this information to your advantage, combined with the previous two checks, if you know that your team is in a role, and the Status is lower than what you know their rank was for that, it tells you your team was double-assigned and they could comment on being able to do better if they weren't overburdened with so many things to do.
Wrapping Up
After your check in conversation is complete, simply arrange for stage 100 to be set on your quest, and it will automatically clear the character from the objectives on Victory Lap.
A great way to incorporate your faction into SS2's gameplay loop, outside of the story moments in Chapter 3, is to make use of the Unlock System.
You can use the AllyGlobal you had set by the envoy meeting as the requirement needed to fire off Unlocks. If you did the work to get a Battle Ally record set up, you can easily rig up some of your soldier types and gear to work as Unit/Loadouts/Uniforms the player can incorporate into their general army as well.
If you want to investigate other systems in SS2, you can also unlock things like new projects for HQ, new flags, new buildings/skins for plots - almost any of the systems in SS2 can be injected and would be a great way for you to inject more of your content as a reward for allying with your group!