Difference between revisions of "Arcane University:Implementation Scribe Assignment"

The Beyond Skyrim Wiki — Hosted by UESP
Jump to: navigation, search
(Scripting and Conditions)
Line 23: Line 23:
 
* Generally avoid using Game.GetPlayer(). It won't matter too much here but it may become a bad habit and when it is used in a piece of code that is executed repeatedly, the peformance overhead may become noticeable. Either use an Actor property (calling it "PlayerRef" will make it auto-fill) or put the player in an alias using the "Player" fill type, and then use the automatic Alias_ property.
 
* Generally avoid using Game.GetPlayer(). It won't matter too much here but it may become a bad habit and when it is used in a piece of code that is executed repeatedly, the peformance overhead may become noticeable. Either use an Actor property (calling it "PlayerRef" will make it auto-fill) or put the player in an alias using the "Player" fill type, and then use the automatic Alias_ property.
 
* Don't know how to check whether the player has talked to Jarl Siddgeir? Check the [https://ck.uesp.net/wiki/Condition_Functions Condition Functions] page on the CK wiki for a list of conditions to use on the dialogue, and search for possible terms that could be in the condition function you need! Hint: try "talk"...
 
* Don't know how to check whether the player has talked to Jarl Siddgeir? Check the [https://ck.uesp.net/wiki/Condition_Functions Condition Functions] page on the CK wiki for a list of conditions to use on the dialogue, and search for possible terms that could be in the condition function you need! Hint: try "talk"...
* How to check if Siddgeir is still the Jarl? This would require digging into vanilla content to see how things are implemented there, and figuring out a simple and foolproof way of doing this check. If you're on a project and need to account for content in that project, your implementation lead might be able to give you pointers. In this case, we'll just tell you: use the condition [https://ck.uesp.net/wiki/GetIsAliasRefParam GetIsAliasRefParam] on Siddgeir and the alias XXX from quest YYY.
+
* How to check if Siddgeir is still the Jarl? This would require digging into vanilla content to see how things are implemented there, and figuring out a simple and foolproof way of doing this check. If you're on a project and need to account for content in that project, your implementation lead might be able to give you pointers. In this case, we'll just tell you: use the condition [https://ck.uesp.net/wiki/GetIsAliasRef GetIsAliasRef] on Siddgeir and the alias XXX from quest YYY.
 +
 
 
===Final Words===
 
===Final Words===
 
* For the post-quest reward by courier, here are some pointers: the [https://ck.uesp.net/wiki/RegisterForSingleUpdateGameTime_-_Form RegisterForSingleUpdateGameTime] event, and [https://ck.uesp.net/wiki/Using_the_Vanilla_Courier Using the Vanilla Courier]. If this is too much right now, then just leave this part unimplemented and consider it extra credit.
 
* For the post-quest reward by courier, here are some pointers: the [https://ck.uesp.net/wiki/RegisterForSingleUpdateGameTime_-_Form RegisterForSingleUpdateGameTime] event, and [https://ck.uesp.net/wiki/Using_the_Vanilla_Courier Using the Vanilla Courier]. If this is too much right now, then just leave this part unimplemented and consider it extra credit.
 
* When testing, remember to COC from main menu every time to avoid interference from your previous testing session, as many aspects of the quest are baked into a saved game immediately.
 
* When testing, remember to COC from main menu every time to avoid interference from your previous testing session, as many aspects of the quest are baked into a saved game immediately.
 
* When you're done and everything works on your end, gather up your .esp and your scripts (both .pex and .psc in the appropriate folder structure), combine everything into a .zip and post it for us to see.
 
* When you're done and everything works on your end, gather up your .esp and your scripts (both .pex and .psc in the appropriate folder structure), combine everything into a .zip and post it for us to see.

Revision as of 15:39, 6 August 2023

< Arcane University:Implementation

This assignment is for arcane students who have had their first introduction to quest implementation using Bethesda's "Bendu Olo" Quest Design Fundamentals Tutorial. In order to attain the rank of Arcane Scribe, you will implement another quest with a similar level of complexity, but this time, it will be presented to you in the format used by the writers at the Arcane University and some partnered projects. This will get you used to taking pieces of writing and translating them into the systems of implementation that the game will understand.

The assignment quest is titled "Put a Ring on It" and can be found here: [1]

In the Bendu Olo tutorial, you started out implementing things the "wrong" way, i.e. without aliases, for pedagogical reasons. Then in Chapter 6, you retroactively added them in. In this assignment, you'll be doing things the optimal way from the beginning, using aliases, ensuring that your quest is properly encapsulated, meaning there are as few loose parts as possible that are used by your quest but aren't contained in it.

This document will not give step-by-step instructions in order to let you work through the quest on your own, figuring things out as you go (but do ask questions if you're stuck!), though we provide some general pointers that will help.

Getting Started

  • Pick a prefix of three or four letters that you will include in the EditorID of any form that is part of this quest (one possibility: "AUS", for Arcane University Scribe). In the Creation Kit preferences, go to the Papyrus tab and set this prefix as the prefix for fragment scripts.
  • As one of the first things you'll do, create all the aliases you think you'll need (it is not necessary to use the prefix in alias names). That means the NPCs (preferably with the "Unique Actor" fill type), any quest items (with the "create reference to item" fill type if possible), any containers (chests etc.) if applicable. Location aliases won't be useful yet in this quest.
  • Like you did in the Bendu Olo tutorial, create the quest stages that you think you'll need. You will have more or less the same structure as in that quest. Take care to have a stage for when the player refuses the quest.

Dialogue

  • If you see [orange text between square brackets], these are directions for the voice actors, and you must paste them into the "script notes" field in the Response Form when implementing the line. You can leave the square brackets out.
  • If you see [purple text between square brackets], these are implementation directions for you. A note like [Go to STORY] means that the dialogue continues normally to the section marked [STORY], and is merely broken up in the document for formatting reasons. [back to options] means that you must link to the same topics that were shown in the previous dialogue.
  • The quest provides several lines for Ruta to mutter to herself. This sounds like it corresponds with a dialogue type called "idle" dialogue, and needs to be implemented in the Misc Tab in a topic with the subtype "Idle". Gavril's combat barks need to be in the Combat Tab in a topic with subtype "Taunt". Note that, even though these NPCs are in aliases, it is still safer and preferred to use the GetIsID condition on the dialogue and not GetIsAliasRef.
  • When the player first talks to Ruta, they won't have the opportunity to select a dialogue option, and instead, Ruta will speak a line immediately. This will therefore have to be a Blocking Branch. A ForceGreet would work too but is worse for gameplay as it would force the player into a conversation for no reason, and the quest document doesn't call for this.
  • Every dialogue option for the player will need its own Topic.
  • When the NPC has several lines one after the other with no player dialogue or implementation note in-between, then these are almost always implemented as a group of Responses in the same Topic Info.

Scripting and Conditions

  • Try to put as much of the scripting as possible through the stage fragment scripts. Try to have only SetStage() commands in dialogue fragments and do the rest in the stages. This makes the quest easier to understand for another implementer, or for yourself if you haven't worked on it for a while. Add properties to the stage fragment script as needed, but if you need to do something to NPCs or items that are contained in aliases, use the alias properties that the Creation Kit automatically added, by doing Alias_Name.GetReference().
  • Generally avoid using Game.GetPlayer(). It won't matter too much here but it may become a bad habit and when it is used in a piece of code that is executed repeatedly, the peformance overhead may become noticeable. Either use an Actor property (calling it "PlayerRef" will make it auto-fill) or put the player in an alias using the "Player" fill type, and then use the automatic Alias_ property.
  • Don't know how to check whether the player has talked to Jarl Siddgeir? Check the Condition Functions page on the CK wiki for a list of conditions to use on the dialogue, and search for possible terms that could be in the condition function you need! Hint: try "talk"...
  • How to check if Siddgeir is still the Jarl? This would require digging into vanilla content to see how things are implemented there, and figuring out a simple and foolproof way of doing this check. If you're on a project and need to account for content in that project, your implementation lead might be able to give you pointers. In this case, we'll just tell you: use the condition GetIsAliasRef on Siddgeir and the alias XXX from quest YYY.

Final Words

  • For the post-quest reward by courier, here are some pointers: the RegisterForSingleUpdateGameTime event, and Using the Vanilla Courier. If this is too much right now, then just leave this part unimplemented and consider it extra credit.
  • When testing, remember to COC from main menu every time to avoid interference from your previous testing session, as many aspects of the quest are baked into a saved game immediately.
  • When you're done and everything works on your end, gather up your .esp and your scripts (both .pex and .psc in the appropriate folder structure), combine everything into a .zip and post it for us to see.