Difference between revisions of "Advanced Quest Tutorial"

9,883 bytes added ,  14:36, 6 August 2007
m
applying template
imported>ShadowDancer
(adding additional explaination that I didnt put in last night)
imported>Qazaaq
m (applying template)
 
(14 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Unfinished}}
This tutorial is designed to pick up and add onto where the [[Quest Tutorial]] left off.  It will also provide some alternative ideas and values compared to those used in the first '''Quest Tutorial'''.  It should also be noted that this tutorial will assume that the individual already has the skills needed to duplicate items, create worldspaces, and exteriors without causing unnecessary changes to existing objects already in Oblivion.
This tutorial is designed to pick up and add onto where the [[Quest Tutorial]] left off.  It will also provide some alternative ideas and values compared to those used in the first '''Quest Tutorial'''.  It should also be noted that this tutorial will assume that the individual already has the skills needed to duplicate items, create worldspaces, and exteriors without causing unnecessary changes to existing objects already in Oblivion.


Line 21: Line 23:


'''Note:'''
'''Note:'''
*The first thing to be aware of is that ''Quest Conditions'' are 2nd party to the Player and first party to the Actors involved in the quest.  What this means is that any time you are running conditions dealing with the Player or objects the Player possesses (which we will be doing with the key), the ''Run On Target'' box needs to be checked.  Anything that runs on an Actor involved in the quest (such as ''Topics'' for the Actor) '''does not''' have the ''Run on Target'' box checked.
*The first thing to be aware of is that ''Quest Conditions'' are 2nd party to the Player in almost every instance and first party to the Actors involved in the quest.  What this means is that most of the time when you are running conditions dealing with the Player or objects the Player possesses (which we will be doing with the key), the ''Run On Target'' box needs to be checked.  Anything that runs on an Actor involved in the quest (such as ''Topics'' for that Actor) '''does not''' have the ''Run on Target'' box checked.  ''Quest Targets'' are an exception to this since the Player is considered the Actor seeking the ''Quest Target''.


For the ''Quest Conditions'' on the ''Quest Data'' tab I chose the following two conditions:
For the ''Quest Conditions'' on the ''Quest Data'' tab I chose the following two conditions:
Line 211: Line 213:


These additional conditions are there so that the NPC will only give the Player the direction that the last known Shadow Mage went if she likes the Player.  The ''Info Refusal'' being checked results in the '''SCShadowMages''' topic staying gold until the NPC likes the Player enough to tell the rest of the information about the last known Shadow Mage.
These additional conditions are there so that the NPC will only give the Player the direction that the last known Shadow Mage went if she likes the Player.  The ''Info Refusal'' being checked results in the '''SCShadowMages''' topic staying gold until the NPC likes the Player enough to tell the rest of the information about the last known Shadow Mage.
==Quest Targets==
My quest starts out with the player not knowing anything about the key that was found.  Since the player doesn't have a clue about the key, there was no target set up for stage 10 on the ''Quest Target'' tab.  Now that the player can get a direction to travel from the NPC, its time to set up a ''Quest Target'' so that the player knows where to head in order to continue on the quest.
For this part of the quest I chose to create a new ''DeadSkeleton'' the same way that I created a new key.  I decided to drop the skeleton behind a rock at the end of the road by ''DragonClawRockExterior'' since it is the only major road heading towards Skyrim (like the player is told by the NPC), put ''FasrielsSkeleton'' in the ''Reference Editor ID'' box, and check the ''Initially Disabled'' checkbox so it isn't found too early.  When you initially place the skeleton, it is upright even though the skeleton is dead.  Running the ''Havok Sim'' for a couple of seconds takes care of this nicely by letting the skeleton fall down.  Any adjustments can be made at this point if the skeleton parts do something you don't want like sliding down the terrain and into the open.  I also placed an ''XMarkerHeading'' at the end of the road with an added ''Reference Editor ID'' of ''FasrielGhostMarker'' where it disappears into the terrain.  Once the skeleton and XMarkerHeading are placed, its time to go to the ''Quest Target'' tab of your quest.
Since I am going to use the ''FasrielGhostMarker'' as the quest target, the easiest way to select it is to click the ''Select in Render Window'' button and then double-click on the ''FasrielGhostMarker''.  Now its time to add some conditions so that this target only shows up when the quest is in stage 20 and the Player is at a distance greater than 150.  For this to occur I added the conditions:
{|border="1" cellpadding="5" cellspacing="0"
|-
! style="background:#efefef;" colspan=1 | Target
! style="background:#efefef;" | Function Name
! style="background:#efefef;" | Function Info
! style="background:#efefef;" | Comp
! style="background:#efefef;" | Value
! style="background:#efefef;" |
|-
|no
|GetStage
|Quest: 'ShadowMages'
|==
|20
|AND
|-
|no
|GetDistance
|Reference: 'FasrielGhostMarker'
|>
|150
|AND
|-
|}
'''Note:'''
*As stated above, the Player is considered to be the Actor for conditions on the ''Quest Targets'' tab.
==Expanding the Quest==
Now it is time to add another NPC, some creatures, and some more scripting to the quest.  I decided that this would make a good location for a small battle with some undead creatures.  First I duplicated Hannibal Traven the same way that I duplicated the other NPC to create a ghost of Fasriel.  Since I don't want anything to happen before the Player shows up, I also check the ''Initially Disabled'' checkbox and place the ghost in front of the stone that his body is hidden behind.  Then I duplicated the ''LL1UndeadLvl100'' LeveledCreature list by changing the ''ID'' to ''SC1UndeadLvl100'', checking the ''Initially Disable'' checkbox, and removed the skeletons and zombies.  I placed five of these to each side of Fasriel's ghost with the the ''Reference Editor ID'' being ''UndeadX'' where X is a number from 1 through 10.  With Fasriel's ghost and the ''SC1UndeadLvl100'' markers placed, its time to move on to the scripting part of this expansion of the quest.
Going back into the main script for the quest, I add three ''Short'' variables named ''Counter'', ''DoOnce'' and ''EnableRef'' as well as the additional scripting just before the ''End'' of the ''GameMode'' block:
<pre>
  If Player.GetDistance FasrielGhostMarker > 500 && GetStage ShadowMages == 20 && EnableRef == 0
      Return
  ElseIf Player.GetDistance FasrielGhostMarker < 500 && GetStage ShadowMages == 20 && EnableRef == 0
      Messagebox "An eerie chill runs up your spine as if some unseen force is watching you."
      Set EnableRef to 1
      SetEssential SCGhostFasriel 1
      SCGhostFasrielRef.Enable
      SCGhostFasrielRef.SetActorAlpha 0.5
      Undead1.Enable
      Undead2.Enable
  EndIf
  If SCGhostFasrielRef.GetDisabled == 0
      If SCGhostFasrielRef.IsInCombat == 1 && DoOnce == 0
        Set DoOnce to 1
        If Counter == 0
            Undead1.Disable
            Undead2.Disable
        ElseIf Counter == 1
            Undead3.Disable
            Undead4.Disable
        ElseIf Counter == 2
            Undead5.Disable
            Undead6.Disable
        ElseIf Counter == 3
            Undead7.Disable
            Undead8.Disable
        ElseIf Counter == 4
            Undead9.Disable
            Undead10.Disable
        EndIf
        Set Counter to Counter + 1
      EndIf
      If SCGhostFasrielRef.IsInCombat == 0 && DoOnce == 1 && Counter < 5
        If Counter == 1
            Undead3.Enable
            Undead4.Enable
        ElseIf Counter == 2
            Undead5.Enable
            Undead6.Enable
        ElseIf Counter == 3
            Undead7.Enable
            Undead8.Enable
        ElseIf Counter == 4
            Undead9.Enable
            Undead10.Enable
        EndIf
        Set DoOnce to 0
      EndIf
  EndIf
  If SCGhostFasrielRef.IsInCombat == 0 && Counter == 5
      SCGhostFasrielRef.SetGhost 1
      Set Counter to 6
      SCGhostFasrielRef.StartConversation Player
  EndIf
</pre>
This additional script initiates and runs the battle as soon as the Player shows up at the ''FasrielGhostMarker'' activating and deactivating two of the ''SC1UndeadLvl100'' leveled lists at a time until all ten have been activated and deactivated.  It also makes Fasriel's Ghost come up to the Player afterwards and initiate a conversation.  Fasriel's Ghost is set to ghost state so that the Player can't pickpocket the ghost (who ever heard of pickpocketing a ghost?).  Now its time to add some more ''Topics'' for Fasriel's Ghost so that we can find out more about the quest.
==Fasriel's Topics==
Since the ''Topics'' of '''SCShadowMages''' and '''SCJagarTharn''' have already been added to the Player from talking to the first NPC, I decided to reuse them for the conversation with Fasriel's Ghost.  The five new ''Topics'' I added are as follows:
*SCBody
*SCGhostNo
*SCGhostYes
*SCLocation
*SCShadowfall
My ''Topics'' items look like this:
{|border="1" cellpadding="5" cellspacing="0"
|-
! style="background:#efefef;" colspan=1 | EditorID
! style="background:#efefef;" | Topic Text
! style="background:#efefef;" | Info/Response Details
! style="background:#efefef;" | Emotion
! style="background:#efefef;" | Result Scripts
! style="background:#efefef;" | Add Topics
! style="background:#efefef;" | Choices
! style="background:#efefef;" | Checkboxes
|-
|SCBody
|Where is your body?
|Before I can tell you where my body lies, you must swear to use the knowledge within Shadowfall to further the ends of the Empire.
Do you so swear?
|Neutral (50)
|None
|None
|SCGhostYes
SCGhostNo
|None
|-
|SCGhostNo
|No, not at this time.
|Then I can not tell you where my body lies.
|Sad (70)
|None
|None
|None
|Goodbye
|-
|SCGhostYes
|Yes, I swear.
|My body lies to the north of the boulder at the end of the road you followed here.
|Happy (70)
|SetStage ShadowMages 30
Player.SetFactionRank ShadowMageFaction 0
FasrielsSkeleton.Enable
|None
|None
|None
|-
|SCJagarTharn
|Jagar Tharn
|Jagar Tharn sought the key to Shadowfall in order to gain access to it.
|Neutral (50)
|None
|SCShadowfall
|None
|None
|-
|SCLocation
|Where is Shadowfall?
|Shadowfall Manor is located on an island to the south of the Imperial City.
|Neutral (50)
|None
|None
|None
|Info Refusal
|-
|SCLocation
|Where is Shadowfall?
|You will need the amulet that is on my physical body.  When you wear the amulet, the location of Shadowfall shall become known to you.
|Neutral (50)
|None
|SCBody
|None
|None
|-
|SCShadowfall
|Shadowfall
|Shadowfall is the manor that we used for the studies and research that was not to be known by the Mages Guild.
It was hidden with spells and enchantments so that only the Shadow Mages could find it.
|Neutral (50)
|None
|SCLocation
|None
|None
|-
|SCShadowMages
|The Shadow Mages
|The Shadow Mages were a secret group of mages who only answered to the Emperor himself.
|Neutral (50)
|None
|None
|None
|None
|-
|}
Each of the above items also has a condition consisting of:
{|border="1" cellpadding="5" cellspacing="0"
|-
! style="background:#efefef;" colspan=1 | Target
! style="background:#efefef;" | Function Name
! style="background:#efefef;" | Function Info
! style="background:#efefef;" | Comp
! style="background:#efefef;" | Value
! style="background:#efefef;" |
|-
|no
|GetIsID
|NPC: 'SCGhostFasriel'
|==
|1.00
|AND
|-
|}
This is so only Fasriel's Ghost can give this information to the Player.  The two '''SCLocation''' topics also have additional conditions like the '''SCShadowMages''' topics earlier.  The '''SCLocation''' topic with the ''Info Refusal'' checkbox checked has:
{|border="1" cellpadding="5" cellspacing="0"
|-
! style="background:#efefef;" colspan=1 | Target
! style="background:#efefef;" | Function Name
! style="background:#efefef;" | Function Info
! style="background:#efefef;" | Comp
! style="background:#efefef;" | Value
! style="background:#efefef;" |
|-
|no
|GetDisposition
|[ TARGET ]
|<
|75.00
|AND
|-
|}
The other '''SCLocation''' topic has an additional condition of:
{|border="1" cellpadding="5" cellspacing="0"
|-
! style="background:#efefef;" colspan=1 | Target
! style="background:#efefef;" | Function Name
! style="background:#efefef;" | Function Info
! style="background:#efefef;" | Comp
! style="background:#efefef;" | Value
! style="background:#efefef;" |
|-
|no
|GetDisposition
|[ TARGET ]
|>=
|75.00
|AND
|-
|}


                               (*to be continued*)
                               (*to be continued*)
Anonymous user