Jump to content

[Student Thread] Treeaza - Matthiaswagg

Recommended Posts

Alrighty, I'm going to post something on the things that weren't covered when you made this quest, since they simply weren't included.

Wrap-up Lesson for Quests

Just went ahead and did this, read whenever you are ready and tell me when done

This will be your last official lesson on quests, covering:

Forcegreets, scenes, radiant aliases (loc and ref), create object IN aliases, story manager, globals used in objectives (x/4) and text replacement

Each of these headings is a link to something with more info.


A forcegreet is a type of package that will make an NPC initiate the conversation. However, unlike blocking topics, you don't even have to speak to them for them to initiate it. Using normal forcegreets, they'll simply begin speaking to you when you're near enough, or just walk up to you and start talking (again, if you're near enough - though with some tricky AI stuff you can get them to travel to you and then talk to you all in one package, or just use stages so they'll do a travel package, use the Completion fragment for the package to set a new stage, and with that stage, forcegreet). A forcegreet is used with that one dude-who-sells-fake-stuff-in-Riften who tried to recruit you for the TG. An NPC will continue to attempt to forcegreet you provided that A) the forcegreet package is viable and B) the conditions on the topic that the forcegreet is starting are viable.

With a forcegreet, you have to have the topic set up as needed, and then the forcegreet will forcegreet with the specified topic - and no, it doesn't have to be the starting topic, though usually it will be. 

Scenes: <-- Great link

A scene allows for dialogue, actions, and more between one or more NPCs. They've got a lot of uses, not just limited to cutscenes, reunion scenes, or whatever may spring to mind when you think of them. For example, you could use a scene to have multiple NPCs get to a particular spot, without having to condition a bunch of different packages to "is the stage 60?". You could just Start() the scene from a quest stage or dialogue, and all the NPCs would go, provided the scene is set up correctly. 

Learning scenes will take time, a decent amount of irritation, and some tutorials. They can often be buggy or a bit clunky, so I'll link some tutorials and provide a few tips.



- Don't be afraid to use EvaluatePackage OFTEN during scenes, or just at the beginning, to make sure it looks more fluid

- If a phase isn't starting for some reason, you can try conditioning the start of the phase to start once a certain action is complete (http://www.creationkit.com/IsSceneActionComplete). For example, if the only thing in the prior phase is a travel package, but even when done the next phase won't start, try starting the next scene (start on conditions) if that action number is complete. It often works, because the package IS complete but scenes are stupid

- Make sure you've got Fuz Ro D-oh/VA and an SEQ recently generated before testing scenes, they're often the cause of issues

- Scenes involving "ambient dialogue" (two people talking) involves 4 aliases, and you should take a look at vanilla scenes to see how they work - it's so that, not only does it fill the right NPCs to talk, but IF the NPCs talking AREN'T those they should be, the quest just won't work (not all aliases fill)


Radiance isn't actually all that it's worked up to be. It's really very simple, and it involves the creation of your aliases. Rather than choosing a specific location, NPC, or item, you would have the radiant system pick one for you, based on conditions. For locations, you would simply make a Loc Alias that fills from "Find Matching Location" (not from event), and then specify conditions that need to apply to the location in order for it to fill the alias. For example, I could add the condition LocationHasKeyword LocSetCave == 1.0 Run On Subject && LocationHasRefType Boss == 1.0 Run On Subject &&. This will choose any location that has the LocSetCave keyword (is a cave) and has a boss in it. Those keywords and ref types are set by the location makers (interior and dungeon departments), and there are a WHOLE HOST of other ones we can reference as well as a few custom CYR/BS ones like that for Ayleid Ruins.

Radiance for Ref Aliases is similar. You check the "Find Matching Reference" box, and then add conditions. It will choose a reference that fits those conditions. You can also fill a Ref Alias with a RefType from a location - like filling Alias1 with the Boss in LocAlias1. However, make sure that your RefAlias is BELOW the alias it is being filled from. 

The From Event part allows you to fill an alias with a parameter sent from the Story Manager (NEXT). For example, you could start a quest once you kill someone, and then fill an alias in the quest with the person who you killed. Or fill a location alias with the location you just walked into, starting the quest when you change locations.

Story Manager

The story manager is a system that allows you to start quests based on certain events - when you level up, when you enter a new location, kill someone, craft an item, etc. You can conditionalize it to check WHAT level, WHICH location you left/entered, WHO you killed, WHAT you made and only start the quest then. Or only start a quest if you kill someone and haven't completed X quest, or have done Y thing. It also allows you to fill aliases in your quest based on parameters (data sent with the event). You can also send your own events via script, along with information. I use this method with my mod Simple Taxes, sending a script event and checking if a global value is set before starting the tax collection quest (global being - is it time to collect? can you collect?). As I mentioned before, like filling an alias in a quest with the person you killed that ended up starting the quest. It's a bit complicated to learn, but with time, you'll learn it. Highly recommend reading the link, and the following:



http://www.creationkit.com/Bendu_and_S_M_Nodes< this uses the Bethesda tutorial quest as a base, but just reading it should give you some indication of how the SM works

Create IN/ON Ref Aliases

This type of alias allows you to place another alias into another alias, creating it AT or IN the other alias. For example, I can create a note and place it IN the boss chest in a location alias that has a ref type of a boss chest. Or a more familiar example, placing Meridia's Beacon IN the Boss Chest of a loc alias that has a ref type of a boss chest (always want to check that one actually exists before placing something essential in/at/as it). For At, you'll usually be using a marker. So you could create an NPC at the CenterLocationMarker of a cell (for random encounters, used with an SM node which will place the NPC at the CenterLocationMarker of the area the PC is Change-Locationing into, provided the random encounter conditions are met), or At the Captive-Marker of a cell (captive marker is placed in a jail area of a cell, if there is one, so you can spawn in a captive - like the captive Boethiah-worshipper in that Haunted House quest in Markarth).

Globals Used in Objectives

You may have seen things where you've been gathering ingredients, and the objective will go from "Get some stuff for some lady (1/10)" to "Get some stuff for some lady (2/10)" when you've picked something up. Exact examples can be found in the quest FreeformIvarstead03, Grin and Bear It (see alias and quest script as well as the quest stages), but it uses Text Replacement and UpdateCurrentInstanceGlobal. First, you have to make a non-constant global that will track the 1 part (x/10), with the global tracking x. Then you have to add the global to Text Display Globals in the Quest Data tab - you MUST do this or it won't show properly. Then, in your objective, you put:

"Get some stuff for some lady (<Global=YourGlobalID>/10)" without the quotes

And whenever you pick up ingredients (OnItemAdded on the player alias), you'd call a function that you defined in the quest script that you also call in the first stage when you get the mission:

http://pastebin.com/ZdCuCPXs< made this for someone else, but it applies - for dar'taq'to "find me 10 bear pelts" quest

Again, look at Grin and Bear It for more info, but that would update your global.

Text Replacement

This allows your quest journal entries, objectives (see above), dialogue, and quest-related texts (you can make books/notes have a quest as their parent quest, allowing for text replacement, by making an alias for the book/note and checking the boxes Stores Text and Uses Stored Text). There may also be a bit more to it than that for text, I'll look into it and get back to you as I don't recall.

Anyway, to replace the text, you simply use the tag from the above link as the example shows. Super easy and really useful. Used for things like books saying the player name, journal entries listing locations by names when it's really a radiant loc ref. Dialogue can use it for topic text and I believe responses too, but responses shouldn't use it (because voice acting can't account for changing).

VM quest variables

They're properties just like any other kind, but you can access them using a condition as well, GetVMQuestVariable. You can set them as well, through Advanced Properties 2 Methods (I usually recommend the casting method for quests dialogue fragments and quest stage fragments - GetOwningQuest() as scriptName for example). In order to use them, you have to declare them in a script and add the Conditional tag to the end of the property. You also must add teh Conditional tag after the scriptname declaration of the quest script (must be on a quest script). Then close and reopen your quest, and you can check the value of your property from any quest using GetVMQuestVariable, specifying the quest your quest script containing the property was on, and then choosing the property. Really good when you can't/won't use a stage, for example if you don't want to advance the stage of a quest since it would screw up dialogue but still want to know if the player asked for extra evidence from someone.

Share this post

Link to post
Share on other sites

Information has been read.

wonderful. I'm going to link one more thing and then you'll be done. :D 

I found these guy's tutorials a while back, and they're really fantastic. I'd recommend you watch most/all of them, but at least take a look at this one (you can skip the adding dialogue part):


It'll teach you custom packages, which I didn't, as well as an example of making a scene, which I didn't show you.

Note that custom packages are not something you will use all that often. Usually, you'll be able to use an already done package (Add) - like DefaultSandboxEditorLocation, OR, you can make a new package, but based off of a template (like Forcegreet). However, it's important to know how to do so you can do something more complex without chaining together a bunch of templated packages with conditions.

Share this post

Link to post
Share on other sites

Done!  You're right, that was quite helpful with the whole custom package thing, before I didn't completely understand what AI packages even were.

Great. Is there anything else you have any questions about before we wrap up? :) Before completing your 'course', I usually will give you one other small quest to do entirely on your own. However, for Bruma release, the only quests we have left are all 'major' quests (side quests, largish vs. misc tasks, which show up in Miscellaneous and are usually very short). I'm happy to give you one, but I don't think that I should hold off on you graduating because of it. 

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now