How to make a ForceGreet. Game: TES V: Skyrim This one is going to teach how to make an NPC ForceGreet the player. What this means is the player (us) is greeted by an NPC. And when this NPC greets us, it pauses our ability to do anything else but answer the NPC's question, fulfill the NPC's demand, or whatever. Think of when we first enter Dragonsreach, and Irilith stalks up to us, blade in hand. "What's the meaning of this interruption?" she demands. And our ability to do almost anything else is temporarily disabled. Our options at that point are to continue the conversation, or back out of it entirely, and go back to whatever we were doing.
Note that
only the Player-Character can be greeted in such a way. An NPC cannot forcegreet another NPC, they can only play part of one of Skyrim's scripted Scenes.
So, this assumes an NPC has already been made, because it's best to test this kind of stuff on our own custom-made people first. Make sure the NPC has a
Voice Type which is supported (see the list below), and place him or her into a cell or worldspace.
MaleEvenTonedAccented
FemaleSultry
MaleDrunk
FemaleDarkElf
MaleDarkEfl
MaleNord
FemaleCommander
MaleBrute
MaleArgonian
MaleKhajiit
FemaleOrc
FemaleCondescending
MaleEvenToned
FemaleEvenToned
MaleYoungEager
FemaleYoungEager
I have found the best place to test this sort of item is in QASMoke, which is similar to the Testing Hall cell found in Oblivion.
Here is a list of cells which might be safe to test.
RENDER window 1a). If the NPC being used for the ForceGreet is being added into the game (in other words, is not a vanilla NPC) double left-click on him or her in the Render window. Click on the Persist Location tab, and find the cell he or she is located, in the Persistence Location scroll-bar. Click OK.
If we don't do that, sometimes NPCs have a habit of disappearing once we add the package to them.
OBJECT window > Character > Quest1b). Make a quest, and give it an ID. I am calling this quest aaaForceGreetQuest.
Priority can be 60. Start Game Enabled and Run Once should be on. Use the Type scroll-bar to choose a type of quest. I am choosing Side Quests.
Note: --This quest going to be a very short example, which does not show in the Quest Journal once we're back in the game. So Quest Name is not necessary.
2). Click OK, closing the Quest window.
Save. Reopen the quest.
3). In the Quest Stages tab, make three stages: 0, 1, and 2. Right-click into the Log Entry window for each of these so all three say EMPTY.
Stage 0 should have Start Up Stage toggled. This is the pre-stage, and the NPC will greet us during this stage, once we get near enough to him or her. "Do I know you? You look familiar" is what is in my game. After he or she says this, the quest bumps to 1.
Stage 1 "Afraid not," we answer. "Oh my mistake," the NPC says, and walks away, bumping the quest to 2. Note that in many cases, ForceGreets will automatically make an NPC Sandbox (walk away, sit down, eat, etc.) once the conversation ends.
Stage 2 should have Shut Down Stage toggled, as well as Complete Quest.
4). Click on the Dialogue Views or Player Dialogue tab. I am going to describe how this is done in Dialogue Views.
5). Right-click into the Editor ID window and choose New. Type a unique ID.
6a). Highlight the ID, and right-click > Create Branch in the larger window. Give the Branch an ID, Click OK, and OK again, closing the Quest window.
Save.
6b). Reopen the quest. Now, open the same dialog window. Right-click into the gray box and select Edit Topic. The Topic panel pops up.
7a). Give the Topic a unique ID. And very important:
Change the Priority slot from 50.00 to 100.00, if the ForceGreet is definitely supposed to happen.
7b) Type something into the Topic Text slot, which is what our character will say to the NPC
after being greeted. I wrote "Afraid not" up above, and you can type whatever is desired.
7c). Change the Subtype scroll-bar from Custom to ForceGreet.
Click OK, and click OK again (closing the panel).
--Note also that so far, this dialog-making process seems backwards. Why didn't we type the NPC's greeting first?
![unsure.gif](style_emoticons/sinders/unsure.gif)
We'll see why in a few.
8a). Reopen the Topic panel, and right-click > New into the huge window area. Okay, now follow all the typical methods for making dialog. For those who have never made dialog in Skyrim (or have forgotten how) scroll down to step 5h
of this post. This is the part where the NPC says "Oh, my mistake" in my example above.
Don't forget to make a recording. The process can be found in step 11n
of this post, and we don't have to actually record any voice to make the dialog work once we are back in the game.
8b). Toggle Has LIP File, Say Once, and Force Subtitle on, if you are like me, and do not use actual voice recordings.
![smile.gif](style_emoticons/sinders/smile.gif)
For those who do use voice, only Has LIP File and Say Once are needed. I think.
9). There should be two conditions:
GetIsID aaaYourNPC == 1.00
GetStage aaaForceGreetQuest == 1.00Copy All both of them.
10). Type
GetOwningQuest().SetStage (2) into the End: Papyrus Fragment box.
11). Click OK, click OK again (closing the Quest window) and
Save.
12). Reopen the quest, but this time click on the Misc tab. Right-click > New into the white Editor ID (tall, vertical window) and find Hello in the scroll-bar which is over this window.
13). Now's the time to make the dialog which will be our forcegreet. "Do I know you? You look familiar." Follow all steps for recording.
14). Paste the two conditions into the Conditions window, but change the GetStage to
GetStage aaaForceGreetQuest < 1.00. And also add IsInDialogueWithPlayer.
Overall, the conditions should look like this...
GetStage aaaForceGreetQuest < 1.00 AND
GetIsID aaaNPC == 1.00 AND
IsInDialogueWithPlayer == 1.0015). Type
GetOwningQuest().SetStage (1) into the End: Papyrus Fragment box. Click OK, and OK again, and
Save.
OBJECT window > Character > Package16). Make a new package. Give it an ID.
17). Change the Package Template scroll-bar to ForceGreet. There are also ForceGreetFromSitting and ForceGreetWaitSitting, if the NPC is to greet us while sitting (for example, a Jarl on a throne). With ForceGreet, the NPC can walk toward us before saying their greeting if we choose for this to happen. With ForceGreetWhileSitting, they will simply continue to sit.
Do NOT touch the Owner Quest scroll-bar. Leave it at NONE or whatever. Changing this only works if other things get set up in advance, otherwise the package will not work if this has a quest's ID name here.
Package Tab In the Public Package Data window there are a bunch of datas we have the option to manipulate: Topic, NPC Wait Location, Trigger Location, and so on.
-- Topic: click on this. By default this is set to [HELLO], and we are going to leave it there. This is obviously so the game engine picks up on the HELLO we just wrote.
-- NPC Wait Location is, of course, where the NPC will stay until we get near enough for him or her to start the ForceGreet package. Left click on this choice, and then select the button which says 'Near package wait location, radius 150'. The Location panel pops up. There are a bunch of options where the NPC can stay while waiting for us. For convenience, choose Near Self if we don't need a specific place for them to stay. Or, a referenced marker (such as an XMarkerHeading) can be chosen. For now, just leave this alone.
-- Trigger Location can be left at 'Near package start location, radius 500', or it can be increased. This is the area which causes the ForceGreet package to activate. The package activates, and begins processing so that the NPC gets ready to walk to us. Trigger Location can be changed larger than 500: Irilith, the NPC who accosts us as we first enter Dragonsreach for instance, has a Trigger Location of 3000, which is why she is already moving toward us to say the "jarl will not be receiving visitors" way before we even notice her.
-- Forcegreet Distance is the distance (in Bethesda units) of how far away the NPC will greet. Leave this on PlayerRef, of course. Radius is 300, but can be also changed larger or smaller. Don't make Radius too small though, or the NPC won't be able to greet properly.
--- Player must be detected. By default this is False. If this is set to True, it means the NPC will give their Hello only if they see our character. Oddly, I have found this quest works best while it stays False. If it stays False, all that matters is the Trigger Location and Forcegreet Distance. They don't have to physically see our character at all.
Flags tab
-- Toggle Preferred Speed on, and change this to Walk, Fast Walk, Jog, or Run.
-- It helps to toggle everything else off: all the "Fallout" stuff EXCEPT for Hellos to Player. Make sure Hellos to Player stays toggled, since we'll need the Hello written before to trigger the ForceGreet package.
-- Must Complete can also be tried, but only if the package seems not to be working.
Conditions tab-- Set these as per whatever conditions are required. I am putting GetStage aaaForceGreetQuest < 1.00.
18). Click OK, closing the Package window. If OK cannot be seen, click on the package's ID name, and press ENTER or RETURN on the keyboard.
19). Open up the NPC from the Object or Render windows. Now we can either drag the new package into his or her AI Package window, or right-click > Add the package in there.
Go into the game and make sure everything works.
Final notes: It is also possible to use the Quest window's Quest Alias tab, add the NPC as Unique Actor, and attach the package into the lower right window. Bethesda does it this way, rather than attaching the package to the NPC itself. I got this to work ONCE, but have been unsuccessful at seeing it happen again.
![mad.gif](style_emoticons/sinders/mad.gif)
The reason we might want the package to work this way is it's a little smoother, and there is less lag between the NPC walking toward us, and finally greeting.
Below is a script which also promises to make forcegreets happen, although I have not tried it yet.
Quest Property YourQuest Auto
Actor Property NPC Auto
Event OnTriggerEnter(ObjectReference AkActivator)
If(game.getPlayer()==AkActivator && YourQuest.GetStage() == 40)
YourQuest.SetStage(50)
NPC.EvaluatePackage()
Endif
EndEvent
This post has been edited by Renee: May 10 2023, 02:12 AM