Printable Version of Topic

Click here to view this topic in its original format

Chorrol.com _ Oblivion Mods _ T.I.M.E. (The Interactive Modding Excursion)

Posted by: Renee Feb 25 2018, 01:30 PM

Mod-making thread, basically.

Posted by: Lady Saga Feb 25 2018, 01:35 PM

Tip: For Oblivion, Always use https://www.nexusmods.com/oblivion/mods/16622 when making silent-text dialog. Without this utility, dialog will stay on-screen for just a fraction of a second. Of course, if you're recording your own voice, you won't need this utility. wink.gif


1). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=298641. Game: TES IV: Oblivion.

2). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=298793. Game: TES IV: Oblivion.

3). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=298927, and some advice. Game: TES IV: Oblivion.

4). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=299086 Game: TES IV: Oblivion.

5). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=299282. Game: Fallout 3.

6). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=299491. Game: TES V: Skyrim.

7). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=299767. Game: Fallout 3 (should also work for Oblivion and New Vegas).

8). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=300498. Game: TES IV: Oblivion.

9). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=301151 Game: Fallout 3

10). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=301633. Game: Fallout 3

11). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=302271 Game: TES IV Oblivion or Fallout 3

12). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=303069. Game: TES IV: Oblivion

13). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=305053 Game: Fallout 3

14). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=305505. Game: Fallout 3

15).http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=305756. Game: TES IV: Oblivion

16). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=307172

17). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=307909 Game: TES IV: Oblivion

18). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=308055 Game: TES IV: Oblivion

19). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=308105, Game: TES V: Skyrim

20). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=308798, Game: Fallout 3

21). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=309878, Game: TES: V Skyrim

22). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=310093, Game: TES V Skyrim

23). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=310529, Game TES V Skyrim

24). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=310606 (which gives the PC a horse) WIP at the moment

25).

26). http://chorrol.com/forums/index.php?s=&showtopic=8089&view=findpost&p=315815 Game: Fallout 3

Posted by: Renee Feb 25 2018, 01:51 PM

The Fetch Quest, Game: TES IV: Oblivion.

So this tutorial will be about how to make one of the most basic types of quests we can find in any Bethesda game: the Fetch Quest. We've got an NPC whose valuable item was stolen, and now it's our character's job to fetch it back.

The very first quest I ever wrote, way back in 2016, was a fetch, and it's because it was one of the only quests which included https://www.youtube.com/watch?v=myUnmRU1m4o.* I knew absolutely nothing about using the Oblivion Construction Set folks, absolutely nothing beyond renaming an item, or making a chest not respawn anymore. I mean, I'm a dummy gamer who used to put tape on her TV to simulate the compass being removed. Yet here I was, with this grand idea to start adding content to one of my character's games.

* Note: that video features a "kill" quest, not a fetch quest, but a lot of the same steps still apply. Only real difference is the main script which gets associated with the actor-to-kill, and also the fact that the guy in the vid creates two NPCs instead of one. I will eventually write up a kill quest, for those who want it.


This tutorial assumes you have used the CS before, and have some basic knowledge about how to get around: how to use the Object, Render, and Cell windows, and how Beth has their main toolbar set up. If you've never used the Construction Set before yet want to learn, http://www.youtube.com/watch?v=ipEOrBBB4ig&t=18s. It was made by a teenager, but believe me, this is one of the better ones I've found. https://cs.elderscrolls.com/index.php?title=Category:A_beginner%27s_guide, and there are also classes over at http://tesalliance.org/forums/index.php?/forum/82-esiv-oblivion-school/

So if you've never used the CS before, I encourage you to watch and read those first, because I'm going to just jump right in, here. wink.gif Still, this tutorial does start with a few basic instructions, just because it's the very first one in this thread.

--------------------------------------

1). Open the TES4 Construction Set. Several windows should pop up: the Object window, Cell window and Render window. There is also a main window, which will be beneath all the others, and it's the one with the typical "File", "Edit", "View" (etc.).

Go ahead and organize the Object, Cell, and Render windows to your liking. These three windows can be pulled and stretched this way and that, so that they are nicely laid out side-by-side or above/below each other, while the main toolbar window always stays beneath the others.

Left-click on File and then move your mouse pointer over where it says Data. Left-click on Data. A panel will pop up, listing Oblivion.esm (which is the vanilla game, basically), any DLC you've got, and any mods you've installed in your Data folder. Go ahead and double left-click on Oblivion.esm, and then click OK.

Now, if you've got some mod you're already working with, this process is different. In such case, you're going to double left-click on that mod (so an X shows up next to it), and then move down to the button which allows us to Activate that mod. Once the mod you're working with is Active, click OK. You can also simply double right-click upon that mod. The X should show up, and then you press OK.

It can take awhile for the Construction Set to load up.


2). OBJECT window
First thing we're going to do is make an NPC, a chest, a key, and an object to fetch.

For my first fetch quest, the object to fetch was an amulet. Go ahead and make all of these things. If you need to, you can dance around some of the steps found in either of those videos I linked above, or you can delve into Bethesda's site, also linked above, to get these objects made.

In most cases, you can simply edit something Bethesda has already made, rather than starting from scratch. Editing something pre-made will make sure all the content Bethesda has already added (such as icons, animations, generic dialog, etc.) also gets added to your key, your chest, your NPC, and your object-to-fetch, which means less work for us.

As you make all these objects, editing from stuff already in the game, the CS will ask you if you'd like to save each each object as a New Form? And you'll always click on "Yes." This will create these objects as unique items, rather than overwriting stuff already in the game. You definitely DON'T want to be overwriting things which are already in the game. In a moment, I'm going to go into more details about the items we're going to need.

NOTE: and this is very important. When you edit a Bethesda NPC, you want to make sure to edit one found in the base game, NOT Shivering Isles. Editing a Shivering Isles NPC will confuse the game's engine, making any text you write for that NPC not show up in the game! If there's any confusion about whether an NPC is from the base game or not, go ahead to www.UESP.net and find that NPC. Make sure he or she is not from SI.

... It is also important to edit a named NPC, such as Samuel Bantien, rather generic one, such as a marauder or a bandit. Editing generic people is okay if you're going to make your own generic, but if you're making somebody who is named (and therefore unique) it's less work if you begin with somebody who is named.

You'll want to get rid of any AI, Factions, or scripts associated with your edited NPC. For instance, if you've edited a guy whose everyday life has him walking, sleeping, and eating in the Imperial City, that's exactly what your edited NPC will try to do if you don't get rid of his/her AI. When you find the guy in-game, he'll probably be walking out of the cell you put him in! ...

... So click on your edited NPC's AI button, then right-click on any AI packages you find in the AI Package List. Delete all of these. Also, look at the NPC's Aggression rating. For most ordinary town-dwelling people, this rating is going to be set at 5. If, for some reason, Aggression is set much higher than this, if it is over 40 for instance, you'll want to change this to 5.

... To get rid of Factions, click on the Factions tab (which is right between Stats and Inventory). Right-click and Delete any factions listed. We can also add factions, if we want our NPC to be allowed into certain restricted areas, but that's for another tutorial.

....Getting rid of scripts will be discussed later during step 10b, assuming your object actually has a script. Not all objects do. So if you don't know how to do this yet, I will show you later.

Tip: When making items, NPCs, and so on, it's always a good idea to put "aaa" in front of any name you make, when you're giving these items ID names or Reference ID names. So if you make a key, you can call it aaaDungeonKey. This will cause your key, or any object or quest, to get placed at (or near) the very top of any list in the Construction Set, GECK, or Creation Kit.

For this tutorial, I am making aaaDungeonKey, aaaDungeonChest, aaaLostAmulet, and aaaBob. aaaBob will be my starring NPC quest-giver. You don't have to choose these names exactly, but those are the ID names I am going to use, and you can substitute your own ID names.


2a). CELL + RENDER windows
Place the chest into some dangerous cell, if you like. Or you can opt to choose a non-dangerous cell, if you'd just like to see your quest work, without needing to deal with combat & exploration. Either way, choose a cell in the Cell window's left panel, so that it shows up in the Render window. The cell you've chosen will probably be too far away to see. To get in there, you can double left-click on any item in the right side of the Cell window, a barrel or a wall or whatever, and this should get you closer into that cell.

2b). Left-click anywhere into the Render window, then tap A on your keyboard so you can see!

If you're not sure how to navigate around the Render window, a good description of mouse & keyboard commands https://cs.elderscrolls.com/index.php?title=A_beginner%27s_guide,_lesson_2_-_Creating_a_room, in the box right under "Introduction."

2b). Find a spot where you'd like your chest, then press F so that it falls to the floor, or on some surface you'd like it to be. Though it might seem like this chest is going to be easy to find, since we're the one putting it in some dungeon, oftentimes once we're back in-game you might be surprised how often your own content might take some searching for!

Note: Working in the Render window can take lots of practice. If you're having trouble selecting your chest, rather than a wall or some other dungeon feature, sometimes it helps to get really close to your chest (or any object you'd like to move) with your cursor. Double-click on it until you see its Reference panel pop up. If you've got your chest selected, this panel will list the chest's name in its Base Object slot. Use the mouse wheel to zoom in and out to get closer or farther. If you need to move the entire cell, you can hold down your mouse wheel while moving your mouse. This will to cause the entire dungeon to move, until you can position the cursor where it can grab the chest properly. Once you've got your chest selected, your cursor will turn into a + sign, with pointers on it. Now you can left-click on your chest, hold this button down, and move your chest around by itself.

The set of mouse & key commands I just linked to really helps with object movement; https://cs.elderscrolls.com/index.php?title=A_beginner%27s_guide,_lesson_2_-_Creating_a_room. If you accidentally move something you shouldn't move, clicking ctrl + Z is the way to get it back to where it should be.


Note 2: If you've got any mods in your game which change dungeons, there's always a chance that your mod won't necessarily conflict with the dungeon-changing ones, but you might find some odd things happening once you're back in the game, and in that dungeon. I once modified a cave, added my own enemy into this cave, only to find that enemy was dead by the time we got there. Why? Because a plug-in I've got called Fighters Guild Quests added about fifty mudcrabs into that same cave!


3). Once the chest is in its proper cell, double-click on it in the Render window, or right-click > Edit on it in the Cell window. This will open up the chest's Reference panel. Now click on the Edit Base button, and drag the object to fetch, whether you've chosen an amulet or something else, from the Object window into the chest's inventory window. Make sure the damn thing (the chest) doesn't respawn, by making sure Respawn is not toggled. Click OK.

4). You should be seeing the Reference panel for the chest, again. There are four tabs on this panel: 3D Data, Enable Parent, Ownership, and Lock. Go to the Lock tab, and toggle 'Locked' on. Make the lock's Level whatever you like, from "Very Easy" to "Needs a Key." We can have the NPC we made give us the key we made, and we can make it so that it will fit this chest (optional)*. Toggle the Key bar, and search for the Key that you made, aaaDungeonKey, or whatever. THIS KEY will open this chest.

* All of that key stuff is optional, because sometimes it doesn't make sense for the quest-giver to magically have the very key that opens some chest far away, but we're just learning here, right?


5). CELL window
Place the NPC in a friendly cell, such as Bravil's Silverhome-on-the-Water (which will be called BravilSilverhomeOnTheWater in the Cell window).

> An optional step is to give him or her appropriate AI packages, Faction, Class, etc, https://cs.elderscrolls.com/index.php?title=Basic_NPC_Creation_Tutorial. We don't absolutely need to add AI, but if we don't, the NPC will simply stand wherever he or she was placed, and never go anywhere. This might be okay for our purposes now of course, but in the future, we can add all these things to make our people more dynamic.

Go to the CS's main toolbar and click on the SAVE icon. Keep saving, too. If you're editing Oblivion.esm instead of a mod, the CS will want you to save your work as an .esp file. And the cool thing is, you'll now get to name your own .esp!

6). Click on the Q button (on the Construction Set main toolbar). This is the Quest window where quests get made. We'll be clicking on this button a lot, of course. wink.gif

7a). QUEST DATA tab
Right-click on the Editor box, and give your Quest a unique name, starting with aaa if you want it to show at the top of the list. For this tutorial I am calling my quest aaaFetchQuest1, though you can call yours whatever you'd like. Also, give the quest an actual name in its Quest Name slot. This name is what will appear in the game's quest journals.

7b). Priority can be medium-high. 60 is good for right now, though for other quests this number can vary quite a lot. Toggle "Start Game Enabled" on, if it's not already toggled on.

7c). Now, look toward the center of the Quest Data page, where the Quest Conditions box is. Right-click > New into the main white portion of this box, or click the New button at the bottom-left. By default, the CS will display the GetDisposition function, but we don't need GetDisposition.

7d). Go to the scroll-bar next to the New button, and search for (or type in) GetIsPlayableRace. As you type, the CS will fill in what it thinks you're looking for, so you won't have to type in that whole function.

7e). Ignore Function Parameters, but make sure Comparison is ==, and Value is 1. So altogether, in the Quest Conditions window it will say GetIsPlayableRace NONE == 1. This is what the game uses to make sure only playable races (wood elves, Khajiit, Redguards, etc.) can get this entire quest.

7f). Follow all the steps from 7c to 7e, except this time we're going to add GetPlayerInSEWorld NONE == 0. This function makes sure the player/character is not in Shivering Isles, which the CS refers to as SE World for some reason.

Again, here is what you should see in the Quest Conditions box...

GetPlayerInSEWorld NONE == 0.00 AND
GetIsPlayableRace NONE == 1.00


8a). QUEST STAGES tab.
Right-click in the Index box, and select New. The number 0 will show up, and we're going to just leave it there.

8b). Now right-click > New four more times, but type numbers for each of these four. Altogether, I am choosing 0, 10, 20, 30, and 100. These numbers don't have to be exactly 0, 10, 20, 30, and 100, you can use whatever numbers you'd like, but always make sure there is some numerical space between whatever numbers you add. Don't just put 1, 2, 3, 4, etc.. Doing this makes it impossible to add content in between these stages, if you need to go back later on and add some more, you see? Sometimes you will have a couple stages, but then think of more content which should go between these two stages, see?

Anyway, three of these five indexes will include text which will show up in our Current Quests journal, as the quest updates, making that drum sound. *Doooon!*

8c). We're not going to touch Stage 0 at all. It is more like a pre-stage, which exists as soon as the game starts up.

8d). Click on Stage 10, and right-click > New into the top Log Entry box. Doing so will open up the box below it (which is also called Log Entry) which is where all those nifty quest updates get written. But don't do anything else here. There should be the word EMPTY in the top Log Entry box. Just leave it like this.

> During Stage 10, the NPC greets our character, and will be telling us about his/her missing item, laying it all out there. If the player decides they don't want to hear the NPC's spiel (in other words, if the player backs out of conversation during, or just right after the NPC greets us), it would be silly for the quest to update. We should be able to back out of greetings without quest updates, otherwise it feels like the quest is railroading us. (Better Cities quests are famous for railroading!)

8e). The next stage (20) will be a true quest update that will put information into your in-game Current Quests journal. This update pops up only if the player clicks on the NPC's Lost Item topic though, after we have listened to the NPC's initial greeting, and decided to help him or her. We haven't written this topic yet, but we will. So go ahead and right-click into the top Log Entry box. Now left-click into the central Log Entry box, and start typing your update. "I have met a desperate man who seems to have lost his amulet"... etc.

8f). The next index (30 in this case) will need some text explaining that we've found the lost item. "I have found the item that was stolen from Bob"... etc.

8g). The final Index (100) can have text stating what has happened altogether, now that the entire quest is over. "I have found the magic amulet stolen from Bob, and have returned it to him," or whatever. Make sure to toggle Complete Quest on for this one.

8h). Add a script into Stage 100's Result Script box, which says ...

StopQuest aaaFetchQuest1

If we don't add this, the game's engine will try to read any scripts associated with this quest over and over forever, which causes unnecessary bloat. cake.gif


9a). TOPICS tab.
So we're in the Topics tab, and here is where the bulk of PC/NPC dialog gets written. Right-clik in the Editor ID box and select Add Topic. Look for GREETING, and press OK once you've got it highlighted. The slot for Topic Text will now also say GREETING, and we don't want to change this.

...Notice we skipped over the Quest Targets tab. This is the tab in which we can add targets, which show up green and red on our compass once we're back in game. I rarely use targets, personally, I'd rather search around, and not be hand-held, when it comes to missing items and such. We can also add map markers too, which I use more often, but for now let's skip this tab.

9b). Now, make a second Topic, and we can give this one a unique name, such as aaaLostItem. You'll want to right-click into the Editor ID box, select Add Topic, and then right-click > New into the Select Topic panel. Type in your topic ID name .. aaaLostItem,* or whatever. Click OK.

In the Topic Text slot it will now say whatever you typed, so if you did type aaaLostItem, this is what it will say in the Topic Text slot. Go ahead and change this to plain English: Lost Item instead of aaaLostItem. The reason is, the words in this slot are what we're going to see in-game, alongside other topics such as Bravil, Rumors, etc.

* If you've already called your amulet, or ring, or any other item "aaaLostItem" the CS will inform you that you can't make multiple objects have the same name, and it'll automatically name your topic aaaLostItemDUPLICATE, instead. This is fine. Your topic will still work, its ID name will just be not very aesthetically-pleasing to look at here in the Construction Set.

9c). Click on GREETING in the Editor ID. Now, in the Info box (right beside the Editor ID box), right-click, and select New. A dialog panel will pop up with a bunch of features on it, but we're only going to use the very top box for now, which is called Response Text. This box is where we can type an NPC's dialog. So now's the time to get creative, and add some text. Something like "Hey, you look like a capable adventurer. I need your help to find my missing item," or whatever.

9d). Optional: If you like, you can change the Emotion Type scroll-bar from Neutral to any of six other emotions. And there's also Emotion Value, which defaults on the number 50. This is what changes the look on the NPC's face as he/she is speaking. Zero means there is no real difference from Neutral, while 100 will make his/her face look extremely sad, extremely happy, and so on. Numbers in between 0 and 100 can be chosen so that the NPC looks somewhat happy, sort of fearful, etc.

9e). Click OK. The panel will close, and you should see your text in the central box, which is called Response Text.

>> The cool thing about adding our own words is we can go into as much, or as little, detail as we'd like. We can eventually add our character's name directly into dialog, too. smile.gif If you run out of space to add text, just Click OK, and then right-click > New into the Response Text box (where our first block of text has now been added). An empty Dialogue panel will pop up, so now you can add more dialog.

9f). Look to the middle-right of the Topics page; here you will find the Add Topics box, right above Choices. Right-click into the to the Add Topics box, and find aaaLostItem, or whatever unique ID you added before. Select this, and click OK.

9g). Now we're going to use the Conditions box, located near the bottom of the Topics page. Right-click > New into this. By default, GetDisposition shows up in the Condition Function scroll-bar. Click onto this scroll-bar and search for GetIsID. This is probably the most popular function of all, because it's what the game uses to search out of thousands of people. GetIsID will narrow this search down to just one NPC, so that only your NPC will say the things you want him or her to say.

Click on the Function Parameters button, which currently says INVALID. A panel will pop up. Find the name of the NPC who you created earlier in the scroll-bar. For me, this was the silly name of aaaBob. Click OK.

Comparison should be == and Value should be 1. So altogether, we will wind up with GetIsID "aaaNPCname" == 1, with aaaNPCname being the name of your quest-giver.

9h). Right-click > New into the Conditions box again, follow all the steps in 9g, but this time, search for GetStage in the Condition Function scroll-bar. Clck on the Function Parameters button again, and Look for the ID name of your quest, aaaFetchQuest1, or whatever you called it. Comparison should be < and Value should be 10. We'll need to type in that value of 10. So overall, it will say GetStage "aaaFetchQuest1" < 10.

So again, you should have two conditions now....

GetIsID "aaaNPCName" == 1 AND
GetStage "aaaFetchQuest1" < 10


...and these will ensure that only your quest-giver can deliver the opening greeting, and he/she can ONLY do this if the quest's stage is below 10.

9i). In the Result Script box, we're going to type our second script (yaah fun!). Left-click into this box, then type ...

Player.SetStage aaaFetchQuest1 10

What this means: once our character is greeted by the quest-giver, the game's engine will be commanded to move the entire quest to Stage 10. By doing this, it means our NPC won't keep giving us the same "Hey you look like an adventurer" greeting over and over, every time we initiate a new conversation with him or her.

9j). Go back to the tall, rectangular Editor ID box, and click on GREETING. Let's add a couple more GREETINGS: one which will show up if we go back to this NPC, but don't have his / her lost item yet ("You're back, but where is my amulet?"), and one which will show up after we found this item ("I knew you could do it! Huzzah!"). Both responses should have the same GetIsID as the first GREETING, but the second GREETING should have GetStage "aaaFetchQuest1" == 20, and the third should be GetStage "aaaFetchQuest1" == 30.

The third greeting (when we have found the lost item, and bring it back to the NPC) should also have a Result Script which says ...

player.SetStage aaaFetchQuest1 100

... which is the final stage of our Fetch. Type that into the Result Script box.


9k). Now go to the unique topic you created earlier, highlight it, and then right-click > New into its Info box. We'll type in something like "Yes, I lost my valuable amulet, and I have reason to believe it is in X location..." If you like, you can make sure your NPC looks ultra sad or disgusted when this gets said! mad.gif

9l) In the Result Script box, add Player.SetStage aaaFetchQuest1 20. If we want to have the NPC add that key at this moment, press Enter after adding the SetStage script, and then type player.AddItem aaaDungeonKey 1 right below the SetStage script. This assumes you called your key aaaDungeonKey, of course. If you named it something else, you'll want to type this exactly. The number 1 denotes the number of keys the quest-starter gives to us, so we can add one key, five keys, ten keys.... we only need one though, of course. whitewizardsmile.gif Try not to bloat your game with unnecessary content

9m). Again, the Conditions for aaaLostItem's dialog should be the same GetIsID used before, but also add [b]GetStage "aaaFetchQuest1" == 10.

Tip: In the future to make this process simpler, you can also go back to the very first GREETING, right-click anywhere in its Conditions box, and then select Copy All Conditions. Now go to the aaaLostItem topic, right-click into its Conditions box, and select Paste. All you'll need to do now is make sure to change the GetStage comparison, which is <, to == so we've got GetStage "aaaFetchQuest1" == 10 instead of GetStage "aaaFetchQuest1" < 10.

You can keep pasting those same conditions over and over again, which is mighty convenient. Just make sure to pay attention to which stage you're trying to match dialog for, and make sure Comparison matches up with what you're trying to accomplish. Once you're back in the game, and you KNOW your NPC should say certain things at certain times, but he or she is not saying them, oftentimes it'll be a simple mistake made with Conditions. The dialog will be in the CS for instance, but your NPC is being commanded to say this dialog before Stage 10, when he should say it during Stage 10.

[/b]9n). Now go back to the second GREETING. This is the greeting the NPC says if we return to him or her, without finding his/her amulet, yet. The Conditions here will be

GetIsID "aaaNPCname" == 1 AND
GetStage "aaaFetchQuest1" == 20


If we want our NPC to be extra pissed during this moment, you can make his Emotion Angry or Disgusted. You can also toggle Goodbye on, so that he or she won't even talk to us further, until we've got that stupid amulet back!

9o). Now to the final GREETING, which the NPC says after we have fetched the item, and returned it to him or her. "Oh, you are so wonderful!!!..... bla bla bla." We're going to be at Stage 30 when this happens.

Under Result Script, type Player.SetStage aaaFetchQuest1 100 so that everything moves from Stage 30 to the final stage of 100. You can also add or remove whatever you'd like at this point. An example is: you can add gold, and remove the lost item. To do this, here is what should go in the Result Script box for Stage 30.

Player.SetStage aaaFetchQuest1 100
Player.RemoveItem aaaLostAmulet 1
Player.AddItem Gold001 100


Those scripts will bump the quest to Stage 100, remove the amulet (or other lost item), and award the character with 100 gold. Neat, eh? Another option: those last two scripts (the RemoveItem and AddItem) can instead be placed into the Quest Stages tab's final Stage of 100, in its Result Script box. You can cut those two scripts, and paste them into Stage 100's Result Script box. Doing it this way is actually better, because the item we remove and gold we add will get removed and added after the NPC finishes this final dialog, rather than during this dialog. The whole scene is less distracting this way.

9q). Click OK, closing out the Quest window, and save your work.


...So, we've bumped from Stage 0 to Stage 10 via dialog. We've also bumped from Stage 10 to Stage 20 using the NPC's words, and from 30 to 100. But.... how do we get from Stage 20 (where dialog left off) to Stage 30 (when the NPC gets his treasure back)?


10a). OBJECT window
Find the lost item you made, whether it was an amulet or a ring or whatever. Right-click > Edit on it, so its panel opens up.

10b). Three selections down on the left side of this panel is Script. If you edited an item which does not have a script, it should say NONE in the script's scroll-bar, which is perfect. Go to Step 10d if this is so. If your item has a script, go ahead and move the scroll-bar all the way upwards, so that it says NONE, and continue to 10c, the very next step.

10c). Click OK, so that the item's panel closes. Now reopen your item. Its script should be gone, hopefully.

10d). So now let's have some fun, and add our own script. hubbahubba.gif Click on the [...] button. Literally, this is a button with three dots on it, which is right next to the Script scroll-bar. The script editor will open. Now left-click on Script, and select New.. This opens up the script editor box, which which we can type stuff into. So type in the following...


scriptname aaaFetchQuest1Script

Begin OnAdd

if (player.GetStage aaaFetchQuest1 == 20)
SetStage aaaFetchQuest1 30

Endif

End



From this point, you can either click on the script editor's Save icon, or try to close out your script. If you try to close it out without saving, the CS will then ask Do you want to save your script? .... And of course you'll say Yes.

If you typed everything okay, there should be no problem / the script panel will close. If you did not type everything up, you'll then get some weird message, screaming at you all your mistakes. mad.gif I've been there, zillions of times. If this happens, something in the script is obviously wrong. The script editor will try to point us in the correct direction, by telling us which line has some erroneous data. It's often something very small too, like a missing parenthesis bracket, or a period missing between Player and GetStage. Or a space between Set and Stage. rolleyes.gif Or an If statement, without an EndIf following.

If you want to know more about how Ifs, EndIfs, OnAdds, and zillions of other checks and functions work, the Construction Set wiki linked up above explains all this stuff in great detail, in its gigantic Scripts tutorials.

Anyways, once the script is all saved and ready to go, THIS script is what will wind up toggling the quest from Stage 20 to Stage 30, when we fetch that lost item. You won't be able find your script in the scroll-bar at first though, so here's how to do this.

10e). Click OK so the item's panel closes. Now reopen it. You should be able to find your script in the scroll-bar now. Select the script, open it up with the [...] button, and double-check everything you've written. Close it, if all looks good. Click OK.


We can add one final thing to our Fetch quest, which is entirely optional, and it has to do with our character getting a point of Fame for delivering that amulet. This is a little silly of course, but necessary for learning. And maybe it's not so silly. Maybe Bob tells all his/her friends, half the population of Bravil, about our character's exploits. Sir Bob of Bravil makes our character a little more famous.

Just open up the Quest window again, go to Quest Stages, and in the final stage of 100. Type the following into the Result Script box...

ModPCFame 1

... right above or below the StopQuest script. And there you have it. Altogether, you might be seeing all of these scripts in Stage 100's Result Script box by now, assuming you've removed that lost item, added some gold, and added a point of Fame...

StopQuest aaaFetchQuest1
Player.RemoveItem aaaLostAmulet 1
Player.AddItem Gold001 X
ModPCFame 1


12). Click OK, closing the Quest window, and then close the Construction Set, choosing Yes if it asks you if you want to save.

13). Find your .esp file, and immediately make a copy of it. Put this copy in a safe place, so you've got yourself a backup file.

14). Get in the game, and play! If anything is wrong, just be patient. Get back into the CS, and fix it. You're alpha-testing your own material now, which in my opinion can be the most aggravating part of quest-making. I usually turn my TV all the way down (so that I'm not actually roleplaying anymore) if I begin to get frustrated.

But I almost always figure it out, whatever it is I'm trying to accomplish, and so can you.


Conclusion: You may notice that this fetch quest boils down to maybe a minute or two of actual gameplay in total (not including travel, exploration of lairs, battles with enemies, etc.). And maybe you spent hours designing it with this guide. This may seem like a heck of a lot of work for not much playtime. Eventually though, all of the steps mentioned in this first tutorial will become second-nature to you if you keep at it. You'll be able to fly through these steps much more quickly. goodjob.gif

Posted by: ghastley Feb 25 2018, 04:25 PM

The problem with the YouTube tutorials is that they have a fixed pace - which will always be both too fast in some parts, and too slow in others, and that they are all "watch how I did something specific which will be different from what you want to do."

I much prefer text-based stuff, that I can use as a reference, read in any order at my own pace, and preferably explains why, as well as how.

That's not easy to produce, but hypertext (HTML) makes it easier, as you can put links to the why inside the tutorial that shows how. And vice-versa; a tutorial explaining how something works can link to examples of using the methods.

So thanks for getting this thread started. I'll dig around and see if I have any Oblivion material to add.

Posted by: Renee Feb 25 2018, 05:18 PM

Awesome, ghastley.

QUOTE(ghastley @ Feb 25 2018, 10:25 AM) *

The problem with the YouTube tutorials is that they have a fixed pace - which will always be both too fast in some parts, and too slow in others, and that they are all "watch how I did something specific which will be different from what you want to do."


Not to mention they always get something wrong! Usually something very small, but which will cause an entire portion of the quest not to work. On the positive side, video tutorials can be good to watch just to visually see what the mod-author is clicking on, and typing into.

Anyway, hopefully I got everything up right up above, and did not make any mistakes of my own! I'll be adding one of these tutorials per week, hopefully. This means I'll be fawning over anything I add to this thread, making sure it should all go swell and smoothly, for any green modders out there.

Posted by: SubRosa Feb 25 2018, 05:41 PM

Excellent fetch tutorial Renee! I will probably try this out with my Anchorage Aftermath mod. I always wanted a fetch quest in there to gather up a bunch of holotapes scattered around the area. But I was never able to make it work.

Posted by: Renee Feb 25 2018, 11:40 PM

Thank you. I tend to write up everything I do step-by-step, because otherwise there's no way I'd remember it all!

If you're going to do this for Fallout, there might be a few things different. In fact, I know there are. But that's no problem, I've done this before for Fallout as well. As I'm looking at the fetch quest during the week, I'll see if I can glean what's different from Oblivion to Fallout 3, and then add those differences in the next tutorial.

Posted by: Renee Mar 2 2018, 11:16 PM

The Kill Quest, Map Markers, and X markers. Game: TES IV: Oblivion

This is another simple quest, but it’s very essential to know how to write a Kill, since it’s such a popular quest in any Bethesda game. We’ve got somebody who's either got a bounty on his/her head, or has stolen something valuable, or is just realy mean, or *insert reason here*. Bottom line is, our character gets a quest to hunt this NPC down, and get rid of him or her for good.

Fetch and Kill quests, as simple as they are, are essential to know because sometimes even the most elaborate quests out there will have a fetch or a kill buried in them. When we go to confront Mannimarco during the Main Quest for instance, there are all sorts of variables and other fancy things going on, but what does this portion of the Main Quest really boil down to?

A lot of the steps that are needed (such as making NPCs and items, how to start topics and quest stages) are steps which can also be found in the Fetch quest tutorial above, and other tutorials I've linked to. To save space, I won't repeat myself a whole lot.

The first video I linked to (with the British guy) is also a Kill quest. You can therefore watch that vid if you like, and follow along with a lot of the things I'm going to type here. However, the Brit's quest is extremely simplistic, while my version is going to be more comprehensive. I’m going to show you a few new tricks during my version.

----------------------------------------------------------------------------

1). Start up the TES4 Construction Set, bla bla bla.

This time, you're going to make two NPCs, and that is all we'll need for a basic kill quest. If you've already made an NPC for the Fetch quest, this guy or gal can be your quest-giver again. Or, you can opt to make somebody who's totally new. If you have not made an NPC at all yet, you can follow the Fetch lecture up above, starting with Step 2. You can also have a look at the tutorials I've linked to.

1b). So make that quest-giver, if you haven't already.

TIP: Though we can use Bethesda NPCs to give out quests and rewards and such, sometimes they can be more difficult to work with, since they are not "blank slates," the way anybody we create will be. Sometimes, Beth NPCs have AI which causes them to roam around. Sometimes they’ll have quests and scripts associated with them, causing them to potentially be in places we don’t expect, doing things which conflict with what we’re trying to achieve. Sometimes Bethesda NPCs won't respond to the Priority rating our quest has, and so on.

… In the future (when you get confident and knowledgeable) you can begin to use Beth NPCs. But for now, it's better to work with somebody who is solely focused on whatever we write.

This kill tutorial is going to be focused in Skingrad, and I'm going to hide my NPC-to-kill in Cursed Mine, which is just west of SKingrad. If you've already made a quest-giver for the fetch quest, and placed him or her into Bravil (since this is what I did during the Fetch tutorial), you've now got several options. You can keep this quest-giver in Bravil and make a new one for Skingrad. Or, you can Cut (ctrl + X) the guy/gal you already made, and Paste him or her into some Skingrad cell, such as SkingradWestWealdInn, or SkingradTwoSistersLodge. Or you can just use the Bravil person, who sends you off to Cursed Mine. That final option is my favorite, I think. smile.gif I always like long road trips.

2a). OBJECT window
Now to make the enemy. Since I'm placing my enemy into Cursed Mine, which is full of bandits, the easiest way to do this is to edit a generic NPC who is already a bandit. So in the Object window, click on Actors > NPC, and expand the NPC branch so you can see all the different races.

2b). To find a generic bandit, look into any races that bandits can possibly be in the vanilla game. So, this includes Argonians, Dark Elves, Khajiit, Redguards, and Wood Elves. Pick one of those races so that the Construction Set focuses on only this race.

There are still hundreds of NPCs listed, and to make this process simpler, we'll need to narrow down to only the bandits. In the GECK and Creation Kit, Bethesda got smart and included a search feature, but for the Oblivion Construction Set, there is no search. That is okay though...

2c). At the top of the Object window, you'll notice a bunch of tabs: Editor ID, Count, Users, Name ... and so on. Single left-click on Name.* This will organize all the NPCs listed in alphabetical order, from A to Z, according to their in-game names, or generic names. ... Well, some NPCs won't have a name at all, so you might be seeing a bunch of blank spaces at the top of the Name list. Just scroll downward, and you'll eventually see all the As listed. We'll need the Bs. Keep scrolling down until you start seeing Bs, and finally some Bandits.

* This can be done with any tab. If you single left-click the first time, this will organize all names from A to Z. Single left-click again, and now they'll be organized from Z to A. This can also be done with the Editor ID names, as well.

2d). Right-click > Edit on any generic bandit you'd like. So if you want your kill quest to feature an archer, you can locate one and edit him or her. Make sure to follow all the steps for making an NPC discussed so far in this thread, and in any tutorials I've linked to. Changing ID name is always the first essential step, and saving your NPC as a New Form is always the most important. Go ahead and play with Stats, Magic, Inventory, and so on.

Try to stay away from any generics that are associated with quests, or Shivering Isles. You will notice these because their ID names (not their in-game names) will often have nonsense letters and/or numbers associated with them. You might see something like MS09BanditMissleMale. MS09 is the name of the quest that generic will be associated with. Shivering Isles generics often have SE at the front of their ID names.

I'm not sure if any vanilla bandits are associated with specific quests or Shivering Isles, I'm almost certain some of them are associated with a few specific quests. Don't use these NPCs though, if you find any.


2e). Toggle "No Low Level Processing" off. We don't want that on for our enemy.

No Low Level Processing tells the game's engine to ignore NPCs if we're not in their cell, if it this selection is toggled on. If an NPC is associated with quests, or other specific functions in the gameworld, they'll need to have low level processing off so that the game knows to keep an eye on them, even when we're not around. But the engine doesn't need to know what all the generics are up to when we're not around. As far as the game's engine is concerned, these generics aren't even active until we're in their cell. viking.gif

2f). Click onto your enemy's AI button, and have a look at what is in there. Typically, you'll see a couple of Wander packages: one for Exterior locations, and one for Interiors. These packages cause the enemy to wander randomly around, so you can keep these in there if you'd like, because they won't usually wander too far from where they've been placed. You might also see a Sleep package, or an Eat package. If you don't want your NPC to sleep or eat (which could make for too easy of a kill), go ahead and right-click > Delete these.

If you did edit a bandit, his/her Aggression will often be set to 100, which is fine. Almost all enemies have their Aggression set to 100. viking.gif


3a). CELL + RENDER windows
Locate CursedMine01 and place your enemy in this cell, in the Render window. I tend to prefer putting kill-quest enemies into the very last possible location that I can find. This makes it so that we'll need to search for this enemy, dealing with all the others in front of him or her first. But if you want to just get this Kill quest over quickly, you can put your enemy into an initial room.

There are also CursedMine02 and CursedMine03, two other cells which go deeper underground. For now, just put your enemy into the first cell though. This will make it easier for me to teach you something later on.

3b). Have a look into your enemy's Faction tab. If you edited an actual bandit, he or she should already be in the BanditFaction. Continue to step 5, if so. But I will go ahead and show you how to add the enemy into this faction, if for some reason he/she is not a part of it.


4a). TES Construction Set main window
Make sure your enemy's Factions tab is selected. Now look at the main window, which is the window that's always below the Object, Cell, and Render windows. There's a bunch of choices on its toolbar: File, Edit, View, etc. Look for Character. Select this, and then double left-click on Faction... This will open up the Factions panel. On the left side of this panel are all the possible factions in the vanilla game. Scroll this down until you find the BanditFaction.

4b). Now left-click on BanditFaction and drag this into your enemy's Factions box.

4c). Click OK or Cancel on the Factions panel, and click OK on your NPC's panel, saving your enemy as a New Form, if you haven't done so already. There. Now your enemy is good to go, in any cell featuring other bandits.


5). QUEST window
Click on the main toolbar's Q button. Start a new quest in the Editor ID box. For this tutorial, I am calling it aaaKillQuest1.

6). QUEST DATA tab
All the things we did during the Fetch can be repeated here. So give your quest a name in the Quest Name slot, "A Bandit's Last Day" or whatever. Start Game Enabled stays on. Priority can be 60. GetIsPlayableRace == 1 goes in the Conditions box, along with GetPlayerInSEWorld == 0.

Optional: to add a little flair to your quest when it appears in your journal, click on the Icon button. This will send you into your game's Data > Textures > Menus > Icons folder. If you've got any mods in your game that add icons, you should have some icons and/or folders containing icons. Look for icons that are appropriate for your quest. For instance, since this is a Kill quest, you can use a picture of a weapon if you've got one. Double left-click on this item, so that an icon shows up (hopefully) on the Quest Data page. This icon will now also show up in your quest journals. smile.gif

I have found that for some reason, some icons won't show up at all. If so, don't stress; all of this is optional.


7a). QUEST STAGES tab
I think the Brit in the video used two or three stages for his kill quest. I am going to use a total of six: 0, 5, 10, 20, 50, and 100. And again, you don't have to use 0, 5, 10, 20, 50, and 100, but make sure there is some numerical space between whatever numbers you choose.

> Stage 0 is the pre-stage. Don't need to touch it at all.

>> Stage 5 is when the quest-giver first greets us, which leads to him or her giving an introductory spiel to what he/she wants us to do. Right-click into the top Log Entry box, but don't do anything further. It should say EMPTY in this box. Just leave it like that. By now, the quest-giver's initial greeting is done, and we've got a choice to click on a topic, which we haven't written yet.

>>> Stage 10 is when the quest-giver has told us all his worries (or her worries), leaving that burden on our shoulders. Great. Gee, thanks. Right-click > New into the top Log Entry box, and type something into the central Log Entry Box. "I have just met a person in need of my assistance. He has told me about a dangerous enemy living inside of Cursed Mine, just outside of Skingrad, and would like to know if i can kill this enemy." Something like that.

>>>> Stage 20 occurs after we have entered the proper cell where the enemy is hiding. Right-click > New into the top Log Entry box, and type something like "I am now inside of Cursed Mine. Gong by the smell, this place really is cursed..."

>>>>> Stage 50 occurs after we are I have decimated the enemy, rid him or her from existence. Something like, "I found the bandits' leader inside of Cursed Mine, and now because of me, he is dead. Time to head back to Bob, back in Skingrad. Sir Bobby will be pleased."

>>>>>> Stage 100 is the reward stage. "I have returned to Bob, and have been paid a measly three beers! I don't even like beer. I am never doing another job for Bob again!' ... whatever you'd like. As you can see, you can have some fun, and get creative with quest-writing if you'd like. smile.gif


7b). Make sure Quest Completed is toggled on for that final stage, and in the Result Script box you'll type StopQuest aaaKillQuest1 to keep it from running forever and ever.


8a). RENDER window
Now I am going to show you folks something new: how to add a Map Marker. Again, I don't use quest targets, but I do like map markers. The NPC who gives us the quest can mark our map to let us know where to go. You might already know where Cursed Mine is of course, but we're just learning here.

If the Render window is still open with the cell you in which added your enemy, that's great. If not, search for that cell in the Cell window, which is CursedMine01 if you're strictly following this tutorial.

8b). Click into the Render window, and press A, so you can see better. We need to get outside of this cell, now. This is easiest if the cell only has one zone to get out of. This is why I chose Cursed Mine's first zone to add my enemy into; I want to be able to get out of this zone, so I can include this next trick.

8c). You'll need to find the entrance/exit door to Cursed Mine, or whatever cell you're working with. There are two ways to do this. You can physically click & drag (holding down your mouse wheel as you drag) the entire cell in the Render window, until you find that cell's entry door. Or you can look for any doors in the Cell window, and double left-click on them. Usually, the entry door will have the letters '01' at the end of its name.

Once you find this door, you should be seeing a yellow rectangle with a purple pointer on its top, sitting right next to the door. https://i.imgur.com/oHwaEf2.png?1 This is called a Door Marker. If you don't see this marker, press M on your keyboard. This will cause any markers in the Render window to display.

8d). Now, double left-click on this Door Marker. It will ask you if you want to "View Door reference for this Door Marker?" which is a nerdy way of asking "Do you want to leave this cell?" Click Yes. And wait a moment while the exterior cell loads.

You are outside of Cursed Mine now, seeing an identical Door Marker. If you click on this one and say Yes, voila, you're back inside of Cursed Mine. This is how all Door Markers work.

8e). Zoom your mouse-wheel out. Start looking for any nearby Map Markers. Map Markers are similar to Door Markers, except they are red rectangles with lilac-colored pointers on them. https://i.imgur.com/xbI70a2.png The Map Marker for Cursed Mine should be a few yards away from its entrance, slightly downhill. Most vanilla locations will already have their own map markers. If for some reason you can't find one, you can create your own.

If you see the map marker outside of Cursed Mine, go to Step 10a. If for some reason you can't find it (or just want to learn how to make these), continue to the next step.


9a). OBJECT window + RENDER window
In the Object window, go to the WorldObjects branch, and look for Static. Click on Static. Click on any item in the large right window now. Look for MapMarker. Now, click & drag this MapMarker into the Render window. You should see a red rectangular marker as linked above, which will probably be floating in the middle of space. Move it somewhere near the cell's entry door, and press F so it falls to the ground.

9b). Double left-click on the marker, so its Reference panel opens up. You'll want to give your marker a Reference ID name, such as CursedMineMapMarker or something similar. If there already is a CursedMineMapMarker (and there should be) somewhere nearby, yet you can't find it, the CS will scream at you that this "Form's ID is not unique!" ... Okay, whatever. Just rename your marker, since you can't find the original one.

9c). Click OK.


QUEST window > Quest Targets tab
We skipped this tab before, now I'm going to show you how to use it to make markers show up on the map, once we're back in-game, and doing this quest. We can also use this tab to make actual targets for actual items (such as people or fetchable objects) but I personally find this to be too hand-holdy. I can teach you how to make these sort of targets too, but not now.

10a). Anyway, make sure the Render window still shows that map marker, outside of Cursed Mine. Now, in the Quest Targets page, right-click > New into its top box, which is called Target Ref.

10b). In the central section of this page, which is called Quest Target Data, there is a button which says Select Reference in Render Window. Click on this button. Your mouse pointer will temporarily become an icon which looks like a Celtic cross, a + inside of a O. It will be also be red-colored.

10c). Move the Celtic cross over the map marker in the Render Window. It should turn white. Double left-click on your the Map Marker. The CS will now put the Quest window back on top, and you should be seeing the name of the Cell in which that marker is in, along with the map marker's Reference name. If you selected the official Bethesda Cursed Mine map maker, the Cell and Ref slots will say this..

Cell: CursedMineExterior
Ref: "MapMarker" 'CursedMineMapMarker'

TIP: In the future when working with Map Markers, if your Render window is not open to the actual location of the map marker you're trying to use, you can also search for it by choosing whatever cell the marker is in, and then choosing its Reference ID name. This process is more time-consuming though, since you'll need to remember which cell that marker is in. Exterior locations are tougher to locate than interiors are, which is one of the reasons I started inside of CursedMine01 instead of outside.

10d). We'll want this Map Marker to show up on our map, but only during Stage 10, when the quest-giver lets us know where the enemy can be found. So in the Conditions box, right-click > New (or press the New button) and add GetStage "aaaKillQuest1" == 10 here.


11). TOPICS tab
Now to write some dialog. You will need at least three GREETINGs, and one unique topic. I am calling the unique topic aaaKillTopic. To save space I'm not going into full detail here. If you need a memory-jogger on how to make GREETINGs and Topics, you can follow steps found above in the Fetch quest, starting from step 9a.

For the lessons below, I am calling my quest-giver aaaQuestGiver, though you can change this to whatever ID you actually used. Note that some of the text below is redundant, if you're using the same quest-giver that you used for the Fetch quest. If this NPC already knows our character, you can type in stuff appropriate for this. "Hey, I remember you" instead of "You look like a capable adventurer..." My Kill Quest-giver is a different guy, though.

--------------------
First Greeting = "Hello, you look like a capable adventurer, might you be able to help me with something?"

GetISID "aaaQuestGiver" == 1 AND
GetStage "aaaKillQuest1" < 5


Result Script box: Player.SetStage aaaKillQuest1 5

AddTopic box: add your unique topic here. So I am gping right-click into this box > Add Topic > aaaKillTopic.

-----------------
Second Greeting = "You are back. Have you been to Cursed Mine yet?"

GetIsID "aaaQuestGiver" == 1 AND
GetStage "aaaKillQuest1" == 20


Note: Again, you can make your quest-giver's dialog ultra-snarky, if he/she is not pleased that we have been to Cursed Mine, yet haven't killed that wanted bandit. Toggle Goodbye on, and change their facial expressions appropriately.

--------------

Third Greeting = "You have returned! And due to my magical talisman, I already know the bandit leader is dead! Here, have some beers on me!"

GetIsID "aaaQuestGiver" == 1 AND
GetStage "aaaKillQuest1" == 50


Result Script box: Player.SetStage aaaKillQuest1 100

------------

12). Now, go to your unique topic. This is the one I called aaaKillTopic in my own build.

aaaKillTopic = “Yes, there’s a fellow who’s been causing some trouble here in Skingrad,” bla bla bla “...and I happen to know he’s been living in Cursed Mine. Here, I will mark it on your map. Will you help me?”

GetIsID "aaaQuestGiver" == 1 AND
GetStage "aaaKillQuest1" == 5


Result Script box: Player.SetStage aaaKillQuest1 10

---------------

Click OK, closing the Quest window, and save your work, please.


13). OBJECT window
So… we’ve bumped the quest from 0 to 5 via dialog, and done the same thing from 5 to 10, and 50 to 100. But what about 10 to 20? And 20 to 50?

In the Object window, look for WorldObjects > Static > and look for Xmarker in the Editor ID box. You'll only have to type the letter X, and there it is.

14a). RENDER window
If your Render window is still showing the exterior of Cursed Mine, we'll now need to get back inside. Double left-click on the yellow Door Marker near the place’s entrance, and select Yes.

14b). Back inside of Cursed Mine, where that wanted enemy’s been hiding, that bastard. Move a bit into the cell, by holding your mouse wheel and dragging.

14c). Left-click on the Xmarker in the Object window, and drag it into the cell. This marker will look like a red X once it’s in that cell.

14d). Press F so it falls to the floor. Position this X somewhere onto the cell’s floor, so that it's easy to click on. It doesn’t really matter where it lands. I like putting it where it's easy to click, though. I like putting it where there isn't too much other stuff nearby.

14e). Double left-click on the Xmarker, opening up its Reference panel. Give the Xmarker a Reference ID name. I am calling my Xmarker aaaCursedMineXMarker, and then I am immediately copying (ctrl + C) this name, so I can paste it into a script we're about to write. Copying complicated Reference names so you can paste them later is a good habit to get into, by the way.

... By default, all Xmarkers are also references, and all references can be used by the game's engine to trigger during quests. This is why the Persistent Reference toggle is greyed-out. We don't even have a choice to turn this off.

14f). Click OK.


15a), QUEST window > Quest Data tab
Click Q on the CS’s main toolbar, opening up the Quest window, and select its Quest Data tab if it’s not already selected.

15b
). Time to write a script for the Xmarker. Click on the [...] button, opening up the script editor.

Note: This editor (unlike the editor we used for that Fetch item) has the power to control any object, spell, or quest function in the game, that is associated with this quest. It is like the queen on a chessboard, which often has a greater immediate reach in-game than Object scripts do.

15c). Click on Script > New, and type in the following…

scriptname aaaKillQuest1Script

Begin GameMode

If (Player.GetDistance aaaCursedMineXMarker <= 400)
If (Player.GetStage aaaKillQuest1 == 10)
SetStage aaaKillQuest1 20

EndIF
EndIf

End


-----------------------

This means: when your character enters Cursed Mine, and gets close enough to this Xmarker (less than 400 feet, or at 400 feet), the quest will move from Stage 10 to Stage 20, and we'll get that update saying "I have now entered Cursed Mine....etc." This Xmarker will ONLY do this though, IF the character is at Stage 10 of aaaKillQuest1 (if the character has been given this quest, by speaking to the quest-giver). Without those If and EndIf conditions in place for the quest stage especially, we could go into that cell at any time, and we’d automatically be at Stage 20, for a quest which we did not even begin yet, see?

Tip: You can change the distance that the Xmarker triggers, by changing 400 to 500, or whatever number you’d like. I wouldn’t go too small though, unless you’re putting your marker in an area with a confined entry passage, ensuring that your character will pass near it. The downside is, your character must get near enough for the Xmarker to trigger, otherwise the quest won't update. But this is why it's important to put your Xmarker into an initial area of the cell, and also an area which is not too wide, so that the character will definitely walk near it.

15d). Before saving this script, look at the Script Type scroll-bar. By default, this will be set to Object. There are three choices we can make in this bar though: Object, Quest, and Magic Effect. We’ll want to set it to Quest. This is VERY important.

...If this bar is still set on Object, and you close/save it before changing this to Quest, your script will then disappear into the Construction Set. You will be able to find it, but finding it creates unnecessary steps. If you happen to make this mistake (and don't feel bad, I've made it a bunch of times) you'll need to click on the Pencil icon, on the main window's toolbar. Your script will be somewhere in this huge list of others. Locate it, open it up, and change its Script Type to Quest.


16). Again, you won’t be able to find your script right away if you try to search for it in the scroll-bar, even if it is set to Quest. Click OK on the Quest window (closing it) and save your work. Now, reopen the Quest window. The script should be in the scroll-bar now.

17a). OBJECT window
Now to make sure the quest bumps from 20 to 50. How do we do this? Find your enemy NPC in the Object window, and open his or her information up.

17b). Click on the [...] button, Script > New, and we’re going to type the following.

-------
Scriptname aaaKillBanditScript

Begin OnDeath

If (player.GetStage aaaKillQuest1 == 20)
SetStage aaaKillQuest1 50
EndIf

End

------------------

And that script obviously triggers the script to move from 20 to 50, once your NPC enemy gets killed. viking.gif Now.... it does not matter how the enemy gets killed, whether he falls down a mine shaft, walks into a blade trap, or whatever. But that’s why I recommended Cursed Mine; there aren’t any traps or mine-shafts in Cursed Mine. wink.gif

So there we have it. The entire kill quest has been written up, but oops! We have not rewarded the character yet.


18), QUEST STAGES tab
Go to your final stage. For me this is 100. In the Result Script box there should already be a StopQuest command here if you typed this in earlier. Right above or below this command, you can type

Player.AddItem DrinkBeer X

with X being whatever number you’d like. But again, I was being silly there. You can award your character with whatever item(s) you find in the Object window, basically. I awarded my character three beers during my Kill Quest, just to add a little humor into it. smile.gif Substitute Gold001 instead of DrinkBeer, if you'd like more of a serious reward.

Posted by: Turija Mar 7 2018, 11:58 PM

Great thread. I will have to think about what I can add for Oblivion modding. Most of the modding I have done for Oblivion so far has been patches or add-ons for other mods. One of the best tools for that (besides xEdit) is the https://www.nexusmods.com/oblivion/mods/36370/. With the Construction Set Extender, you can work on mods that have esp files as masters without having to "esmify" them, which makes things a lot easier. The Construction set Extender also fixes a ton of bugs in the CS and adds a number of new features, like color coding changes made by the currently active mod, so you can easily see what's changed. The Consruction Set Extender really makes my time in the CS more enjoyable, so that is my pro-tip for the day.

One caveat. If you are running an ENB (or ENBoost), then the Construction Set Extender won't start, so you have to remove the ENB from the Oblivion directory or rename it before launching the Construction Set through the Construction Set extender. There are several available on Nexus, https://www.nexusmods.com/oblivion/mods/47125 is the one I use. It works pretty well, I just click on it to launch the Construction Set Extender and it automatically renames my ENB and then automatically changes the name back when I exit.

Posted by: Renee Mar 8 2018, 02:53 AM

Sweet Turija! See, I just learned a few new things there. Did not know about Construction Set Extender. Yeah, because the regular CS does have a few rather odd things about it So does the GECK and Creation Kit as well.

Posted by: Renee Mar 13 2018, 02:27 AM

How to repair Hair, Game: TES IV: Oblivion

This one is going to feature Oblivion again, and it'll be a shortie. smile.gif I will get to other games too: Fallout 3 and Skyrim.

Anyways, yes ... hair. After rebuilding my entire Data folder from scratch a few weeks ago, I had a bunch of little problems to then take care of. One of these had to deal with weird-looking hair, or missing hair. I use a couple different mods for hair: Coolsims Hair Pack, and Apachii Wigs. I noticed that RG3 (who has Coolsims), and a variety of NPCs (some of whom have Apachi Wigs), had this jet-black hair, which looked really unnatural. Damn I wish I had a picture to show, as an example.

Anyway, the fixes are really easy, and I'm adding them here for convenience. One fix will work with Apachii, and the other with Coolsims. The Apachii fix assumes you've got Wrye Bash. I think there are ways to fix Apachii hair without Bash, in fact I saw some options for fixing hair without WB. I don't know how to fix without WB, so if you don't have Bash, just know that there are some other options out there.

Anyways, try this for Apachii.

1). Open up https://www.nexusmods.com/oblivion/mods/22368?tab=files.

2). Click on the Saves tab. Find a save, and right-click on it. At the bottom of the list is Repair Hair. Left-click on this.

3). The program will tell you whether or not it was able to repair the hair. It worked for me, hopefully it'll work for you too.


And here is the fix for Coolsims


5). To fix Coolsims hair, start your game up, with whatever save you're using currently.

6). Open the console, type in ShowRaceMenu. Do NOT close the console window.

7). Choose the hair you want for your character, but (again) keep the console window and race/class/birthsign menu open. Do not click 'Done'.

8). Press your Esc key, and make a new save.

9). Load this new save.

10). You can now close the console window, but at no time before finishing those steps should you close it, or the game will change all your character's stats back to default values.

The words below in the spoiler tags are from UESP.net, in case you aren't able to save with the console open...


Posted by: Renee Mar 18 2018, 06:29 PM

How to make an NPC Vendor & Mechanic. Game: Fallout 3

This module is going to show us how to make an NPC, who is also a vendor and repair-person, in the Fallout 3 Garden of Eden Kit (GECK). The process of starting NPCs in this program is slightly different from making one in the Oblivion Construction Set (CS).

I think the reason why I wanted to make an NPC who does all these things in Fallout 3 (before I learned in Elder Scrolls games) is because there are so many areas of the wasteland in which it'd be nice to buy and sell stuff, and get our gear repaired. But nobody nearby offers any of these services. Guns in particular tend to take quite a beating as they're being used, and ammo is always in demand. Sure there are merchant caravans who wander around, but there's never one around when we need one. So I began to think it'd be nice to have some extra merchants in fixed locations.

An example is when Janet, my Talon Company rogue, took up residence inside of Fort Bannister. Nobody in there to buy / sell / repair from, yet doesn't it make sense that there could be? Most of the soldiers in there are deadbeats who only one-line our characters to death! Same thing when Cho, my main quest guy, began spending lots of time in the Citadel. I believe there are some merchants in there, but they weren't specialized enough for what Cho needs from day-to-day.


1). Open up the Fallout 3 GECK. Now, open up Fallout 3.esm, or if you've already got a plug-in you're working with, you can make this active. Everything here is exactly the same as it was in the CS, so far as opening up the main .esm, or any .esps. We're still working with the Object, Cell, and Render windows, while the main window always stays beneath the others.

First, we're going to make an NPC. Like I said, the process is slightly different than it was in the CS.


OBJECT window
You'll notice there are now eight branches in this window (rather than the CS's five). We have Actor Data, Actors, Game Effects, Items, Miscellaneous, Special Effects, World Objects, and All. Bethesda has also provided us with a convenient Filter slot, which allows us to search for specific objects if we need to.

Go ahead and try to narrow down on MoiraBrown, for instance. Make sure "All" is selected in the left side of the Object window, and then type her name into the filter. You might only get as far as Moira before *Bam* there she is, out of thousands of objects.

2). But now, let's make our vendor. Get Moira out of the filter, so the window expands back to All again.

To make an NPC, expand the Actors branch and single-click on NPC. Right-click > New into the larger Editor ID window.

Note: In the CS, it is common to edit pre-made NPCs, and then work with whatever person we've clicked on. When working in the GECK or Skyrim Creation Kit however, we often start from New, instead. This is because these latter programs include a lot of pre-configured features for NPCs, which makes starting somebody new much easier.


3a). Make an NPC as per all the usual steps: start by giving him or her an ID and a Name. Notice how the GECK has a lot of new features on this very first panel, yet there are also some features you might be familiar with, if you've already made an NPC in the Oblivion CS. I'm not going into detail right now, but if you'd like to learn more about all these features, http://geck.bethsoft.com/index.php?title=Category:NPC. There are also dozens of videos out there, too.

3b). Go into your NPC's Traits tab (which should be selected by default), find Class, and select Mechanic in the scroll-bar. Nothing else really matters about this NPC so far as vendoring and repairing goes, so choose whatever Race you want, whether the guy/gal is tall or short, etc.

3c). AI Data tab
We can either toggle Autocalc Services on if we want him or her to just sell random stuff, or we can specifically click on Weapons, Food, Books, whatever we'd like them to buy and sell. I am going to make my guy sort of a low-life drug dealer. He'll sell chems in Moriarty's Saloon, and that is all. ph34r.gif

3d). Inventory tab
We're about to throw our NPC somewhere into the world, but how about we put some clothes on him or her first? wink.gif Right-click into the box where it says Count, Object ID, and so on. Select New.

3e). In the Object scroll-bar are all the possible items in the game. Single-click on this, and type in (or scroll down for) outfit. There's a huge list of generic and specific outfits to choose from. I chose OutfitWasteland02.

Tip: if you want to see what your person looks like with clothes on, move your cursor to the bottom/center of the NPC's panel (where it says Preview) and toggle Full on.


4). CELL + RENDER windows
Find a cell where you'd like your NPC to be, open it up, and put him or her into that cell in the Render window. All of this is exactly the same, compared to the CS. I put my lowlife NPC into MegatonMoriartysSaloon. Since I did this, I also want to officially make him one of Moriarty's buddies. This means adding the guy into Moriarty's faction. Adding NPCs into factions is slightly different, from CS to GECK.


5). Double left-click on the NPC in the Render window, and click on Edit Base.


6). Factions tab
Right-click > New into this box. This will open up all the factions in the game. You can choose as many Factions as you'd like, within reason. My lowlife chem dealer will be a part of MegatonMoriartysFaction and also MegatonResidentFaction. He's got some cred with the people, you see.

Click OK, and OK again (closing both NPC's panels) and save your work.

Now we're going to start a new, very short, quest. Yes, to make an NPC buy and sell, we'll need to have a quest to back this up. This goes for the prostitute (Nova, I think) inside of Moriarty's, and innkeepers in Elder Scrolls games, as well. Making quests is sometimes different in the GECK, and the main difference to start with? No more Q button on the main toolbar. Ugh.


7a). OBJECT Window
Expand the Actor Data branch, and click on Quest. You'll see all the game's quests *POP* up, all colored yellow & black.

7b). Right-click > New into the window, and give your quest a Quest Name and ID. Priority can be 55. Most quests Bethesda writes are at 55. Start Game Enabled should be toggled on, and make sure that "Script Processing Delay" is also toggled on.

One thing which is different though is we don't have to add GetIsPlayableRace into the Quest Conditions box. In fact, Bethesda never seems to use this box, anymore.


8a). TOPICS tab
Right-click > Add Topic into the large, vertical window on the left, and find GREETING. Click OK.

Note:: If you've got Windows 7, XP, or Vista, from here on you should have no problems. Continue to Step 8b. If your computer is Windows 8 or 8.1 though, chances are you won't be able to see the word GREETING in the Editor ID at all. This is because Beth configured the GECK for older systems, unable to see what the future would hold. I have heard Windows 10 is the worst, when it comes to working in the GECK. Since I don't have 10 though (I have Win 8.1) I don't know how to work around this problem with 10.

Working with the GECK's various windows for Windows 8 or 8.1 (such as the Editor ID window, Conditions, etc.) is a pain, and there is no instant cure that I've found, to get text to display properly. You can still work around this problem though. Here is how.


a. Make sure "Top-level only" is toggled off. This toggle can be found near the top-left of the Topics page.

b. Move your cursor to the very top-left corner of the Editor ID window. This box is unnamed, but it's the one in which you just added GREETING, yet GREETING is not showing. As your cursor moves over the top-left area of this window, it should turn into an icon which looks like <-||-> once it's in the correct place. Now, left-click and drag your cursor all the way to the right. You should now be able to see GREETING.

... There. I just saved all the Windows 8 owners at least an hour of frustrating Google searches! hehe.gif

Unfortunately, you'll need to repeat this process over and over again, in order to see text in various windows and boxes. Annoying, but at least possible. The Info and Response Text windows (where we start and type dialog) do not have this problem though, so we won't have to drag anything to start and type some dialog.


8b). Make some sort of GREETING. "What do you want, punk?" or whatever. All of this is done in exactly the same manner as in the CS.

8c). Right-click > New into the Conditions window. Make a GetIsID for your NPC. This is the only condition that's needed.

Again this window will be grayed-out if you've got something from the Windows 8 series (necessitating another drag from left to right), but visible if you've got anything earlier.


8d). Right-click > Add Topic into the Add Topic box, and make a unique topic which deals with vendoring. aaaVendorTopic is an example.

8e). Also add this topic in the tall, vertical window where GREETING is.

Windows 8 users: if you haven't closed the Quest window, you should still be able to see into all the smaller windows. Once you click OK though, you'll need to click & drag again, once you get back in to add things to your quest.


8f). This vendor topic will be whatever we say to get the vendor experience going. Right-click > New into the Info window, and type something our NPC will say. "Sure, I have lots of things to sell. What would you like?" Click OK, and then type something into the Topic Text slot up top. "What do you got?" or whatever. Again, all this is the same from CS to GECK.

8g). Don't forget to copy/paste the GetIsID from GREETING to the vendor topic.

8h). Look to the bottom of the Topics page now. In the Result Script (End) box, type ShowBarterMenu


9a). Conversation tab
In the tall, vertical window (which again, will be grayed-out if you've got Windows 8), right-click > Add Topic, and look for GOODBYE.

The Topic Text which Bethesda added for GOODBYE is "See ya," I think, and it's best to leave it this way. We don't have to add anything further here, no Conditions, no nothing, unless we want our NPC to say something we specifically have added.* If so, just follow all the normal steps with Response Text and Conditions (GetIsId, for instance). Otherwise, the NPC will simply give us a random Bethesda Goodbye when we break conversation.

9b). Make sure the Goodbye and Random toggles are checked on. They should be, by default.

*Note: Sometimes I have encountered glitches when trying to add specific dialog, causing the GECK to not save anything I type. If this happens, make sure there aren't any deleted Topics in either the Topics or Conversations tabs. If there are, press OK, closing out the Quest panel. Save the work done so far, close the GECK, and re-open it. Those deleted topics should be gone, now.


10). CELL window
Make sure "Interiors" is selected in the World Space scroll-bar, and find VendorChestCell. This contains all the possible chest-types in the game. Leave the Render window for this cell open,.


11). OBJECT window > World Objects > Container.

Find VendorChestBuriedClutter and drag this chest into the Render window. It apparently does not matter where this chest ends up (there is no floor) but try to put it somewhere that you can find it easily, if you need to return to this cell for some reason. Set this chest obviously off to the side if you have to, away from all the others.


12a). REFERENCE window.
Double left-click on the chest you just dragged. Click the Edit Base button. Give this chest its own ID (starting with aaa if you want it to show at the top of the list later on) and close its panel by clicking OK, saving the chest as a new form. We do not need to give it a Name, but make sure "Respawns" stays toggled on, otherwise the vendor will eventually run out of salable stuff!

12b). Go back into the chest now, and add whatever we want into its Item List. By default, this chest will have random medical stuff, and "VendorChestCapsSmall," which is going to give this vendor a variable amount of caps to buy stuff with. We probably want to add more stuff in here though, right? Right-click > New into the Item List

Some good things to add in here (if we want inventory to stay as random as possible) are VendorMiscItems, VendorWeaponsAllCommon, VendorAmmoBullets, and VendorArmorCommon. Since my NPC is a lowlife chem dealer, I just chose VendorChestChems.

12c). If we want our vendor to have a larger amount of caps to buy with, we can leave the VendorChestCapsSmall in there for the variable amount of money, but then we can a fixed amount of caps to their Item List as well. There are several choices here. Caps001 is good if we want them to have one guaranteed cap at all times, Caps90 if we want them to have a guaranteed 90 caps at all times, and so on.

We can simply choose Caps001, and then in the Count slot, we can add as much to this as we want. Type 200 in there if you want your vendor to have 200 guaranteed caps, plus whatever random amount VendorChestCapsSmall will also add.

12d). Click OK. Make sure Persistent Reference is clicked ON before clicking OK on the chest's Reference panel. Having this toggled on allows the game's engine to access this chest when we're speaking to our vendor. We do not need to give our vendor chest a Reference ID, though.


13). CELL / RENDER windows
Place the NPC vendor in the world, unless he/she is already out there.*

Tip: *Since your Render window will probably still be in the VendorChestCell, a quick way to get back to your NPC is to find him /her in the Object window, right/click on him/her, and choose Use Info. A panel will pop up with two windows. Double left-click on the text in the bottom window (where it says Interior). It can take up to a minute for the GECK to locate your NPC, but still, this process is easier than always remembering which cell you've put the NPC into.


14). Double-left click your vendor, so the Reference panel pops up. Select the Merchant Container tab. In the Cell scroll-bar, find the VendorChestCell. In the Reference scroll-bar, find the chest you just made. If you put "aaa" at the front of its ID name, yours should be at the very top of the list.


15). Click OK. And there you go.

Now, if we want this NPC to also repair stuff,..


16). QUEST window
Follow all the steps from 8d through 8g, to add dialog, conditions, and such. For step 8d, make a new topic which deals with repairing stuff. Make sure this topic links from the initial NPC's GREETING. So in that Greeting's Add Topics box, you'll now be seeing something like..

aaaRepairTopic
aaaVendorTopic


Now add some dialog into the repair topic. "I can fix whatever you break."


17). The main difference here is in the repair topic's Result Script (End) box, we're going to type ShowRepairMenu.


18). The NPC probably has a low Repair skill by default. If we want this NPC to be really good at repairing stuff, open up his/her information and select the Stats tab. Make sure Auto-calc stats and PC Level Mult are NOT chosen.


19). Click on the Repair skill (so it is highlighted) and press F2 on your keyboard. Now we can make this skill as low or high as we want, by adding some number, and then left-click on Repair to set this number. This number gets added to the NPC's base number. If the NPC's base Repair skill is 20 for instance, and we offset this by 60, their total skill will wind up as 80.

That is all. Close the GECK, save all your work, make yourself a copy of your .esp.

Posted by: Renee Mar 25 2018, 05:20 PM

How to fix "Missing flowchartx32.dll" file. Game: TES V: Skyrim

I was going to post another modding tutorial, except this past weekend I ran into a problem with Skyrim's Creation Kit, and wrote the solution all up with a pretty bow upon it, for any others who can possibly have this problem. So here it is. Missing flowchartx32.dll is one of those things which is pretty obscure, and normally you wouldn't ever have to worry about. Until you do have to worry about it. Then it can occupy ALL of your time trying to find a fix. panic.gif

The solution to this problem was found on https://forums.nexusmods.com/index.php?/topic/560134-could-not-get-flow-chart-class-object/ Note that some folks claimed success using methods found https://forums.nexusmods.com/index.php?/topic/555636-missing-flowchartxdll-creation-kit-error/, going into their PC's Safe Mode. Those solutions did not work for me, however. sad.gif

Basically, the problem is this. When using the Creation Kit, if an error message shows up saying something about a "missing flowchartX32.dll file," especially when trying to use the Dialogue Views tab to write dialog for quests, here is what to do.

Oh, and I have Windows 8.1 on my gaming computer, but this seems to have worked for those who have earlier operating systems.

--------------------

1). Go to the folder where "flowchartX32.dll" is, or should be. This is the same folder where the Skyrim.exe lives. Obviously if you're not seeing this file in your Skyrim folder, you'll need to get it in there pronto, maybe locating it through a google search, perhaps. But if the file is there, yet you're still having this problem, continue onwards to step 2.

2). Right-click into the folder path bar, and select "Copy address as text." (I think those with earlier OS's can simply copy the text found in this bar).

Close the Skyrim folder.

3). Open up any Notepad page, and paste the folder path you just copied, onto this Notepad page so you can see what it looks like. On my gaming computer, the path looks like this...

C:\Modded Skyrim\SteamApps\common\Skyrim

4). For Windows 8 users, swipe the right side of the screen (Windows 7 or earlier can use their Start button). Now in the Search bar, type cmd.

5). An icon saying "Command Prompt" will show up. Right-click on this, and left-click Run as Administrator. A simple box with white-on-black text pops up. It'll have syntax saying C:\windows\system32> or something similar.

6). Type in the following: the letters cd, and then paste the path to your Skyrim folder after cd, by right-clicking the window icon in the top left corner. That should drop down a window menu that includes "Edit," which will have a sub-menu for copy, paste, etc. If there is no icon, the whole title bar may work in later versions.

So altogether, this is what I was seeing in total.

C:\windows\system32> cd C:\Modded Skyrim\SteamApps\common\Skyrim


7). Press Enter (or Return) on your keyboard. If there are any errors, the program will tell you right away. Hopefully there aren't any errors, though, and you'll be seeing this....

C:\Modded Skyrim\SteamApps\common\Skyrim>

8). Now type regsvr32 flowchartx32.dll after the text above...here is what it looked like for me:

C:\Modded Skyrim\SteamApps\common\Skyrim> regsvr32 flowchartx32.dll


9). Press Enter. Hopefully, a small panel will pop up saying "DllRegisterServer in flowchartx32.dll succeeded," or something similar. As long as a word like "succeeded" shows up, instead of something indicating "errors" are present, you're on the right track.

10). Click OK. Close the Command Prompt window.

Start up the Creation Kit. Problem should be solved.

I have heard that this problem has something to do with turning the Start Game Enabled toggle on and off too many times during the same quest, and saving the quest into its corresponding mod with this toggled turned on and off. I have not confirmed this to be true, though.

Posted by: ghastley Mar 26 2018, 03:06 PM

FWIW, you CAN paste into the command prompt window. At least up to Win 7, it works this way:

Right click the window icon in the top left corner. That should drop down a window menu that includes "Edit" which will have a sub-menu for copy, paste, etc. If there is no icon, the whole title bar may work in later versions.

Shortcuts like Ctrl+V won't work. Those key strokes will just get entered where you're typing. However, there is an option to change that, accessible the same way, in the Properties sub-menu. Of course, that then prevents you from entering those key sequences as data.

Posted by: Renee Mar 29 2018, 05:18 PM

Okay thanks, ghastley. I'll see if this works with Windows 8, because you are right, ctrl + v doesn't work.

Posted by: Renee Mar 31 2018, 11:36 PM

How to make a Fetch Quest (with multiple items). Game: Fallout 3

This is going to be another fetch quest, but this time it'll be directed at Fallout 3, rather than Oblivion. Since there are lots of similarities between the Construction Set (CS) and the GECK, there isn't much point in writing a pure fetch-style quest twice. So, in this tutorial I'll be talking about fetching multiple items rather than just one. I'll also try to illuminate any differences between CS and GECK that we come across, okay?

A lot of the things in this post can be used for the CS as well. So if you make a quest which fetches multiple items in the CS, you should be able to follow most of the steps here.


One way to fetch multiple items is to use "ItemCount," which is a variable often used when multiple items are involved. So today you'll be getting your first lesson in variables, perhaps. smile.gif ItemCount, and other variables such as Dead or Timer, can be used to do all sorts of things. Today we are going to be using ItemCount to make our fetch quest bump forward while using a non-linear approach, and also generic (rather than referenced) items. In other words, say we've got three baseballs to find during a quest. We won't have to find these balls in any strict order if we use ItemCount, which frees the Player from following a strict path.

The items also won't need to be "special" (in the sense that they won't need reference IDs), but they will all need to share the same Object Script. So it'll be like picking up three generic baseballs, rather than one baseball specifically referenced (possibly owned) by Three Dog, another specific to Moira Brown, etc.

This lesson assumes you've already studied some of the steps, tips, and notes found in other lessons above, just so I don't repeat myself too much, and save some space. smile.gif It also assumes the GECK is already opened, and you've got a mod you're already working with, or at least an idea for a mod.

-----------------------------------------

1). OBJECT window
Go to Actor Data > Quest. Single left-click on Quest, and all the quests appear in the right window. Right-click > New into this window. Start a new quest.

2a). QUEST DATA
Give your quest a Name, an ID, and Priority of 55. "Start Game Enabled" and "Script Processing Delay" can both be toggled on.

2b). Open up the Script button, which (again) is the button which looks like [...], and type in the following...
---------------
scriptname aaaFetchQuestScript

short ItemCount


-----------
Substitute the words 'FetchQuest' with the name of your quest if you'd like, but the syntax I'll be using today will be "scriptname aaaFetchQuestScript."

We're going to add to that script in a minute, but for now...

2c). Save the script as a Quest in the Script Type scroll-bar. Click OK so the Quest window closes. Save your progress, and then reopen your quest. Make sure your script is in the scroll-bar.

I am going to make this fetch quest a lot more basic than the Oblivion one up above, to save time and space, so I won't go into as much detail about how to create an NPC, how to use the Render window, etc. Study the Vendor NPC post up above, if you need to backtrack.



3a). OBJECT window
You'll need to make an NPC, unless you already made that vendor from the last tutorial, and want to reuse him or her. If this is so, you can use this guy/gal again, and he/she can be today's fetch quest-giver.

If you do it this way, you'll need to change the Priority of your fetch quest to 60 instead of 55, so the game recognizes that your fetch quest needs to get done before the vendor quest's dialog (especially Greetings) kick in again. If your NPC is totally new though, you won't have to change this.

I am going to be using the same low-life chem dealer I put into Moriarty's Saloon. This guy will be the one who wants my character to fetch three stacks of Pre-War Money, and bring them back to him. When he gets his three stacks, he will then give my character some caps, and the game will reward some XP. Ka-ching!, in other words. cool.gif

From here on, you can use PreWarMoney like I am, or you can edit your own item from Bethesda's Object window. PreWarMoney can be found in the Object window > Items > Misc Items > Clutter > PreWarMoney.

3b). Edit PreWarMoney (or whatever item you're going to want fetched), and give it a new ID, saving this item as a New Form.

Note: It is possible to attach scripts to stuff Bethesda has already made without saving these items as New Forms, but it's just better to make our own ID. This way, our script won't wind up getting attached to every generic Pre-War Money stack (or whatever generic item you're fetching) in the game. Try to keep your own material clean from Beth's, if possible.


3c). Now to write that script. Or start it, at least. Open up your item-to-fetch, click on its [...] button, and type in the following.

----------------------------
scriptname aaaItemScript

short ItemCount

--------------------------------

You can substitute whatever words you'd like where "Item" is. aaaBaseballScript or aaaPencilScript. Whatever. In my game, the scriptname is aaaPreWarMoneyScript.

3d). Close the script, save it, and click OK, closing your item's panel.

3e). Now, reopen your item, and look for your script in the scroll-bar. Select this script, and press OK.


4a). CELL + RENDER windows
Place the item and NPC into any cell(s) you like. For convenience, I'm keeping my NPC in MegatonMoriartysSaloon, and placing my stack of edited Pre-War Money into MegatonMensRestroom. My current character is male, you see. Not many NPCs go in restrooms (why should they?), so the money won't get kicked around, yet this cell happens to be a public place, meaning that my character won't have to steal anything. wink.gif

4b). Single left-click on the item in the Render window, and duplicate it (ctrl + D). Now you've got two items, though they're probably sitting in the same space. Drag one of these away from the original, and duplicate it again, so that there are three in total.

If you are putting items into multiple cells, obviously you won't be duplicating. Ctrl + D is a little trick which only works if each item is in the same cell.


Note: if your fetchable items are different from one another, for instance if you've got multiple items, each with its own ID name, this is okay. As long as the same script gets used for all of these, and that script can also be attached to the item, everything should work.

Some items can't have scripts attached directly to them though. Holotapes are an example. For these items, Reference IDs will need to be used, and then the main script can handle collection of these items. That's for another tutorial, though.


5). OBJECT window
Go back to Actor Data and find your quest. Click on the Quest Stages tab. Put seven stages into the Index. I am using the stages 0, 5, 10, 30, 40, 50, and 100.


6a). Topics tab
Right-click > New into the Editor ID window (Windows 8 users: this is the tall vertical window which doesn't have a name). Find and select GREETING.

6b). Make a greeting which the NPC will start with. "Yo, you got a moment?" is what my chem-dealer will say.

6c). Conditions window: make a GetIsID for your NPC, and GetStage Quest: 'aaaFetchQuest' < 5.

6d). In the Result Script (End) box, type Player.SetStage aaaFetchQuest 5

6e). In the Add Topics box, add whatever unique topic name you'd like. For me, this is going to be aaaFetchTopic.

6f). Right-click > New into the Editor ID window, find your unique topic, and click OK.

6g): Highlight the topic you just created, and add some dialog which the NPC will say. "So I gots these three stacks of bills hidden in the men's restroom... and I needs somebody to go get them for me," is what my chem dealer will say. "I can't go in there myself, 'cause I don't want the sheriff to see me goin' in there."

a). One of the differences between the CS and GECK is we can make NPCs move around in specific ways as they speak to us. Before you click OK, click on the Use Emoticon Animation toggle instead, so that it is off.

b). In the Speaker scroll-bar, look for any animation which seems like it'd be appropriate for the moment. There's a HUGE list in this scroll-bar, and not all animations will work (a animation for an ant or a brahmin, for instance, will not work on a human).

But for instance, I am choosing 3rdP1HPShrugs, which will cause my chem-dealer guy to look as though he's trying to be nonchalant.



Now.... another one of the differences between the Oblivion Construction Set and the Fallout 3 GECK is we can either use the Topic Text slot to move dialog forward, or we can use the Prompt slot, which is right below the Info window. Basically, you can use just one Topic for your entire quest, along with that initial GREETING. Instead of potentially making dozens of new topics, you can instead use the Prompt slot to introduce new dialog for us to click on, once we're back in-game.

I hope that made sense. laugh.gif It will eventually, if it doesn't at the moment. Basically, the Prompt slot will save us from having to create a bunch of different Topics.


6h). So I am going to leave Topic Text as "aaaFetchTopic," but I'm going to change Prompt to "What is it? I'm not interested in any of your junk."

6i). Go back to the GREETING's Conditions window, and Copy All Conditions found there. Now go to your unique fetch topic, and Paste these conditions in there, changing GetStage 'aaaFetchQuest' < 5 to GetStage 'aaaFetchQuest' == 5.

Also, type player.SetStage aaaFetchQuest 10 into the Result Script (End) box.

6j). Toggle Say Once on, unless you want the option to have your NPC repeat the same "Go fetch these items" over and over during Stage 5.

6g). Click OK, closing the quest window. Save, and reopen your quest.


7). QUEST window > Quest Stages tab
Notice I am sort of dancing back and forth between Quest Stages and Topics this time, rather than writing up all the Stages, and then writing all the Topics as I did in earlier lessons. I usually dance back and forth like this as I write quests; and once you get good at writing your own, you won't need to follow any strict sort of path yourself.

Anyway, here is what our quest stages are going to look like.

------------------------------------

Stage 0: Right-click > New into the top Log Entry window, and move on. It'll say EMPTY in there. Just leave it like that.

-------------------------------------

Stage 5: Right-click > New into the top Log Entry box, but this time, type whatever you want into the lower Log Entry box.

Note: Unlike the Oblivion CS, the GECK does not use Log Entry Info when quests get bumped. Instead, the GECK uses Quest Objectives for our in-game quest messages. So, whatever you type into the Log Entry box will be strictly for your own reference, and will NOT appear in the game. Therefore, you don't really need to type anything into Log Entry. It helps to add something in there though, just to keep things organized for your own purposes. Just imagine that you've got dozens of stages, and begin to forget what their significances are as you add more!

Anyway, by now the NPC has greeted our character, but has not told him/her what needs to be done yet. You can simply type "NPC has greeted the PC" into Log Entry.

----------------------------------
Stage 10: Right-click > New into the top Log Entry box again. For your own reference, you can type "NPC tells PC about some items that need to be found, and brought back."

In the Result Script box, type SetObjectiveDisplayed aaaFetchQuest 10 1. This command is what will cause one of those creepy messages to appear onscreen, once we've reached this stage in the game. The number "1" at the end is very important; it is what tells the game to flash that message on. Easy to forget that final "1", and then get an error message. rolleyes.gif I've done this soooo many times, folks. panic.gif

----------------------------------

Stages 30 and 40: These two stages are optional, so far as in-game messages go. When the Player finds the first stack of money, the quest bumps from 10 to 30. When he/she finds the second stack, it goes from 30 to 40. Each stage will have its own corresponding message in my game from the Quest Objectives tab, but if you find all these messages distracting you don't absolutely need to add them.

I will simply teach you the most important messages in a moment, which are 10 and 50. If you want to add more on your own, this is certainly possible.

-----------------------------------

Stage 50: Under Log Entry you can type "All items found" into the lower Log Entry box.

Result Script will be....

SetObjectiveCompleted aaaFetchQuest 10 1

SetObjectiveDisplayed aaaFetchQuest 50 1


... and these will cause the game to say the message from Stage 10 has been completed, while the message from 50 has just been assigned to us. We have not created these messages yet, but we will.

-------------------------------------

Stage 100: "Items brought back to NPC" can go under Log Entry. And make sure to toggle Complete Quest on.

-------------------

8a
). Quest Objectives tab
We're going to type those creepy in-game messages now. Right-click > New into the top window, which is called Objective Index.

8b). Change the number in the Index slot from 0 to 10.

8c). Type whatever you'd like into the Display Text slot. This is what we're going to see flash across the screen, after the NPC tells us of the items he/she wants fetched. So I'm going to type "Find three stacks of Pre-War Money" into this slot, and you can substitute your own material here.

8d). Follow the same steps for the objective which will appear for Stage 50. So during Stage 50, "Find three stacks of Pre-War Money" will show up as COMPLETED in my game, and then my character will get assigned its next mission, which (for me) will be "Return to Chem Dealer in Moriarty's Saloon for reward."

Note: Working in the Quest Objectives tab can be notoriously slow as you move from window to window. Just be patient!


9).
Quest Data tab
Time to flesh out the rest of the quest's main script, heh heh. Open it up, and here is what it'll look like in my game ...

scriptname aaaFetchQuestScript

short ItemCount

Begin GameMode

If (aaaFetchQuest.ItemCount == 1)
SetStage aaaFetchQuest 30
EndIf

If (aaaFetchQuest.ItemCount == 2)
SetStage aaaFetchQuest 40
EndIf

If (aaaFetchQuest.ItemCount == 3)
SetStage aaaFetchQuest 50
EndIf

End


----------------------------------------

Not so bad, eh? The quest will bump with each item we find now. However, the game's engine also needs to be able to "see" whenever we pick up one of these items, at the very moment we pick it up.


10). OBJECT window
Find the object you edited earlier. And here is what goes into its script. Again, you can substitute your own words where I currently put aaaFetchQuestScript, if you haven't already done so.

scriptname aaaFetchQuestScript

short ItemCount

Begin OnAdd

If (Player.GetStage aaaFetchQuest == 10)
If (aaaFetchQuest.ItemCount < 1)
Set aaaFetchQuest.ItemCount to 1
SetQuestObject aaaObjectName 1
EndIf
EndIf


If (Player.GetStage aaaFetchQuest == 30)
If (aaaFetchQuest.ItemCount == 1)
Set aaaFetchQuest.ItemCount to 2
EndIf
EndIf


If (Player.GetStage aaaFetchQuest == 40)
If (aaaFetchQuest.ItemCount == 2)
Set aaaFetchQuest.ItemCount to 3
EndIf
EndIf

End

--------------------

Tip: Note in that first If/EndIf block I typed in SetQuestObject aaaObjectName 1. Substitute your own item's name where it says aaaObjectName. What this does is makes your mundane item into a Quest Object, which prevents the player from simply dropping this item twice, and picking it up two more times to bump the quest forward. Although you might not cheat in this manner, this trick will prevent anybody who uses your mod in the future from doing so, and then claiming that your fetch mod is "broken." rolleyes.gif

You can also change the status of a Quest Object back to zero by typing SetQuestObject aaaObjectName -1 anywhere that a Result Script box appears in the GECK.


11a). QUEST window > Topics tab
Open up your quest again, and find GREETING. Add the greeting which the NPC says when we return. "Have you got my things yet?" or whatever. Conditions are....

GetStage aaaFetchQuest == 50 AND
GetIsID aaaNPCName == 1


11b). Click on the topic you created earlier. For me, this was aaaFetchTopic. Make some dialog the NPC will say. "Oh hell yes, you got my things! Here is your reward."

11c). Put something appropriate in the Prompt slot. "I have returned with your things.... bla bla..." Again, this is what your character will say (what you'll click on), once you're back in-game.

11d
). Copy All Conditions from the Stage 50 greeting, and Paste them into your fetch topic.

11e). Result Script (End) should have Player.SetStage aaaFetchQuest 100, and toggle Goodbye on if you'd like the NPC to dismiss your character, without having to click on that awkward "Goodbye" option.


12). Quest Stages tab
Go to your final stage, which is 100 (unless you chose some other number). Make sure Complete Quest is toggled on. And here is what'll go in the Result Script box...

SetObjectiveCompleted aaaFetchQuest 50 1

Player.RemoveItem aaaFetchObject X

Player.AddItem Caps001 X

RewardXP X

StopQuest aaaFetchQuest


Where it says aaaFetchObject, put the ID name of your fetchable object. Where it says X, you can substitute your own numbers. So in my game, 3 Pre-War Bills being removed, 50 caps are given to my character, and just 5 XP are awarded for him, since he didn't have to work very hard at this one. wink.gif


13). There you go. Save your work, close the GECK, and always make sure you make an immediate copy of your .esp, or overwrite one already in your backup folder.

Posted by: Renee Apr 3 2018, 02:56 PM

Each exterior cell is 4096 units by 4096 units or 192 feet by 192 feet or 58.5 meters by 58.5 meters.

There are approximately 86 cells, counting from a bit below Leyawiin all the way up to the invisible border north of Cloud Ruler Temple.

192 x 86 = 16,512 feet. 5,280 feet = 1 mile. 3 miles = 15,840. So, north to south, the game world of Cyrodiil is slightly larger than three miles.

Posted by: ghastley Apr 10 2018, 07:33 PM

At some time in the past I did a tutorial on how to create the conversations between NPC's, which I'd just done for the staff of Gweden. I have all the screenshots of the Construction Set dialogs, but can't track down the text. I'm frantically Googling, trying to see where I might have posted it before. If it turns up, I'll copy it here.

Posted by: Renee Apr 10 2018, 08:15 PM

That'd be great. smile.gif

Posted by: Renee Apr 24 2018, 12:19 AM

Making a weather-changing item. Game: TES IV: Oblivion.

This is going to be a shortie.

I had this idea for Sarah Phimm's game a bunch of months ago to make an item which would change weather, just like that, if she equipped this item. She is a vampire, and as we all know, when vampires get stuck outside in sunlight, things really start to suck for them. But, if the weather is "bad", if it is rainy for instance, vampires won't take the full effect of sun-damage they'd take on a sunny day.

So that was the idea. To make an item for my vampire character, so that if she happened to get caught outside when the sun was coming up, and had nowhere to run & hide, she'd at least be able to equip this magical item. This would keep things very roleplay-ish, without needing to play Weather God with the console.

This magic item was incredibly easy to create. I assumed I'd need to delve into magic scripting, something which I still have not learned yet. But such was not the case. Actually, getting this idea to work was merely as easy as retrieving a console code, and then attaching it to that item via script.


1). Open Construction Set, bla bla...

2). OBJECT window
First, choose an ordinary, non-enchanted piece of jewelry, or any item which is wearable, and not already enchanted. Although I chose an amulet for Sarah's game, this effect should work with any piece of jewelry, clothing, armor, etc.

But since I chose an amulet ...

Items > Clothing > Amulet.

Find any of the non-enchanted amulets, such as JewelryAmulet6Jeweled, right-click and edit this with a new ID and new name.

3). Make sure the item is Playable (duh). And also, make sure it hasn't already got a script attached to it. If it does, get rid of this script, so you can write your own.

4). Click OK, saving as a New Form. Find and reopen the new item.

5). Tap on the script button, which is the one which looks like [...], and then Script > New Script. And check out this incredibly advanced bit of coding, yo.

scriptname aaaItemScript

Begin OnEquip

If IsInInterior == 0

fw 38eef

EndIf

End


"Item Script" can be whatever name you choose. ... and that's it! Note that the weather code there is for fog, and it's the same exact code that we'd use for console commands. "fw" = "force weather," and 38eef is what Bethesda chose for fog in the vanilla game. This code will still work if you've got All Natural installed in your game though.

We can choose any weather codes found on http://en.m.uesp.net/wiki/Oblivion:Console_Command_Tutorial, So to change this to sun, substitute 38eef with 38eee. Rain is 38ef2, and so on.

6). Close Construction Set and bla bla bla...

Posted by: Renee May 13 2018, 07:53 PM

Faction-changing Armor and Clothing

Game: Fallout 3

Good evening. This one is going to focus on making faction changes, which are caused by simply putting on some clothes or armor. This will work best when changing outfits just before going from one cell to another, and is much more RP-friendly than using console commands. wink.gif

I got this to work in Fallout 3 last summer, in Janet Telia's game. I was able to get her into the RaiderFaction by having her put on some specialized raider armor, waiting an hour, and then entering a cell full of raiders. Once inside that cell, these enemies were now her friends. The entire faction of raiders remained friendly to her from that point on, all across the Wasteland, as long as she was wearing her special armor.

This should also work in Oblivion too, although I have not tested if it does, yet.


----------------------------

1).Open up the GECK, bla bla... First thing we're going to do is to make a customized faction.

1a). MAIN toolbar > Characters > Faction
Go ahead and make a custom faction by right-clicking > New into the Editor ID window. I called Janet's special faction aaaRaiderFaction, though you can call yours whatever you'd like.


NOTE: DO NOT just use one of Bethesda's factions (such as RaiderFaction). It is better to make a custom faction, rather than adding the PC to one of the game's premade factions. Before I figured this out, I was using the Bethesda raider faction. When Janet put on her raider-faction armor, she was accepted by raiders just fine. Problem was, she could not 'break' out of this faction just by removing her armor. Even if she shot somebody, they would continue to be her friend. dry.gif Maybe this is a 'friendly fire' sort of function, so that if one raider shoots another, he/she won't just turn around and begin fighting this other raider, when they should be coming after us.

With a custom faction, the results worked just as I wanted them to. smile.gif There were some limits though, and these limits will be discussed toward the bottom-third of this post.


1b). Give this faction a Name. You can toggle Evil on if you want to, which will temporarily influence how Karma works.

1c). Right-click > New into the Interfaction Relations window, and use the Opposing/Affiliated scroll-bar to find the faction you want to modify toward your character's custom faction.

1d). Let's say you chose RaiderFaction in step 1c. For best results, make the Disposition Modifier 100, with Group Combat Reactions toggled to Ally.

You can experiment with numbers lower than 100, and you can also choose 'Friend' or 'Neutral' instead of Ally, if you want to make this faction-change happen with more of a question mark.


1e). Click OK (closing the Factions panel) and SAVE.


2a). OBJECT window
Go into Items. Edit an outfit (a piece of clothing or armor), and give it a unique ID. When asked if we want to save this under a new ID? Click Yes.

2b). Double-left click on the outfit you edited, and go into that outfit's script area. If the outfit already has a script, get rid of it, or choose some other article of clothing (or armor) which does not have a script.

2c). The Script Type scroll-bar can stay as Object. Here is what to write.

------------------------

scriptname aaaFactionChangingArmorScript

Begin OnEquip

Player.SetFactionRank aaaFaction 1

End

Begin OnUnequip

Player.SetFactionRank aaaFaction -1

End


-------------------------------------

Where it says "aaaFaction", you can substitute this term with the name of your actual custom faction. So for me, I'm typing aaaRaiderFaction where it says aaaFaction.

Anyway, this script will make sure the player-character gets added and removed from whatever faction you choose, in a never-ending loop. However, there are limitations to this.

-- You'll need to make sure your character changes clothes in a cell which is separate from any enemies. Once this is done it's best to wait an hour (press the wait button), and then you can enter the cell you're trying to influence. The faction-changing effect works best this way, and it's only realistic that a bunch of enemies won't change their hostile minds, simply because they witness our toon changing into some outfit!

--I tried entering the raider-infested grocery store (the store next to Gold Ribbon Grocery, with all those raiders inside), for instance. Janet entered this store wearing ordinary clothes. The raiders inside were hostile. Then, I had her leave the building, changing into her special Faction Armor. Back inside, the raiders were now friendly. Back outside, change of clothes again, now they're hostile again.

However, after doing this several times, they eventually defaulted to friendly no matter what she was wearing.

...Of course, nobody would do any of this in the game. It's silly to change back and forth like this as we're actually playing. We only need to change into the outfit once before we enter their territory, and maybe change back out of it once, if we're going back into ordinary civilization again. I'm just highlighting that there are some limits, here. These limits won't be found though, until the gamer is doing some heavy experimentation. ph34r.gif


--To break her friends-only status, I tried having her attack a raider. He ignored her attack at first, but eventually fought back. Once this moment was crossed, this guy was now NOT her friend anymore, and attacked every time, even if she ran outside and changed clothes from and to the Faction armor. Thing is, only that one raider attacked her. The others were still friendly to Janet.

Bottom line though: if you're just playing the game normally, change your character's outfit once, wait an hour, and then enter a cell with enemies in it, everything should work. Later, if you want to remove this outfit, maybe your character's going back to Megaton or Rivet City (wearing outlaw armor wouldn't be appropriate) all of that should work too.

Posted by: Renee May 29 2018, 01:25 AM

Making an NPC Follower Game: Fallout 3

Note: this method will work for Oblivion too, however, I also had some unsolvable problems with my OB followers. So for now, this only pertains to FO3. Oblivion has CM Partners, as well as Companion Share & Recruit. Both of these mods are so well done, it's almost pointless to try and top them.

Personally though, I've been dissatisfied with the follower mods I've seen in Fallout so far. Maybe that's why I decided to learn how to make my own.

-------------------------------------

1). Start up the Fallout 3 GECK, yadd yadda....

2). OBJECT window > Actors > NPC
Make a new NPC. Place him or her into the world somewhere. Do the usual: ID, Name, Race, and don't forget to give him or her a Voice Type. Once he or she is in the world, give him/her a Reference ID. Persistent Reference toggled on.

If the follower is going to be combat-oriented, choose an appropriate Class, like "SoldierScout" or "BrotherhoodKnight." Not Doctor, or Drunk.

We also want to give this NPC a reasonably good Disposition Base, so they'll like our character. smile.gif

3). Stats tab:
Change the various settings to make this NPC as you'd like, so they'll be strong, or agile, or proficient with a particular type of weapon, etc. Note that Class tends to change those Skill values around, as well.

4). Factions tab:
Putting the NPC into a particular Faction is good, but the Player Faction is NOT important at all. Do not put them in Player Faction, I have found it can actually cause problems.

AI Data tab
This can vary a lot of course, depending what kind of NPC follower you're going to make. A combat-oriented character (if we want him / her to live) should have Aggression set to Aggressive, Average for Confidence, and Helps Friends and Allies for Assistance. We don't want them too aggressive or confident; this can cause them to do stupid things.

Even with the settings I just suggested, they can still do stupid things. wacko.gif But those are the settings I prefer. If you'd like to know more about setting up an NPC, just http://geck.bethsoft.com/index.php?title=Category:NPC.


5). OBJECT window > Actor Data > Quest
Right-click > New into the Editor ID window. Quest Name is not important, except for your own reference. None of this will appear in-game, except NPC dialog.

Make sure Start Game Enabled is on, and Priority can be 55. Script Processing Delay can be on.


6). We're going to write a script now.... under the main script area, so make sure its type is Quest. Note that this script is ultra-short.
===========

sciptname aaaFollowerScript

short Status

; 0 = Sandbox, 1 = Follow, 2 = Wait


============

Note: The semi-colon to the left of 0 = Sandbox is there to make sure the game's engine won't read the words which come after the semi-colon. The game will not actually read anything after a semi-colon (on that particular line of text, anyway), so you can type whatever you'd like after one, for your own reference.

Save the script and close it. Click OK (closing the Quest window), save, reopen the Quest window, and find your script in the scroll-bar. Click OK again.


7a). Go back into the NPC's AI Packages tab, right-click > New into the AI Package List window, and make a Sandbox AI, by changing the Package Type scroll-bar to Sandbox. Give the package an ID name too.

7b). Click on the the Wander Location button, and change it from Near Editor Location to Near Current Location. Click OK. Make Radius = 1000, or whatever number you choose. Numbers lower than 50 will cause them to wander in almost in a circle. Anything over 500 will give the follower some breadth, causing him or her to move around an entire room or two.

Basically, this Sandbox package will be used whenever we leave the follower in a situation that isn't dangerous. For RP purposes, they should be able to move around and do stuff in their time off, since they're "at ease".

7c). We can toggle as many Allowed Behaviors as we'd like. In the Flags tab, we can also leave Enable Fallout Behavior toggled on, for somebody who's got some dynamic off-time going. Or we can toggle this off, and then click whatever behaviors we'd like the follower to allow.


7d). Conditions tab: right-click > New into the Conditions window. Choose "GetQuestVariable" in the scroll-bar, and choose your Companion quest. Status will have a Variable of == 0. Altogether the condition will read...

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable 'aaaFollowerQuest', Status == 0.00


.... substitute 'aaaFollowerName' with the actual ID name of your NPC.
.... substitute 'aaaFollowerQuest' with whatever ID name you gave your quest.


8a). Now make a Follow AI. Follow all the steps in 7a, except find Follow in the scroll-bar this time.

8b). In the Follow Target area, choose "Specific Reference," and choose Player in the Ref scroll-bar. "Cell" is not important.

8c). "Follow Distance" can be set at 300 for close-quarter action, or much further away if we want a tail rather than a shadow.

8d). Uncheck the "EndLocation" toggle.

8e). Flags tab
We can leave Enable Fallout Behavior on (or turn this off, but choose a few individual flags, like "Reaction to Player Actions"). But make sure to also check the "Continue during Combat" toggle on. "Allow Swimming" and "Allow Falls" can also be checked on.

On the other hand, "Allow Swimming" might be bad in some cases. It really sucks seeing your follower go rushing underwater just to defeat a mirelurk. rolleyes.gif Next thing you know, your stupid follower is drowning.

8f). Under Conditions tab, we can choose our GetIsID, along with GetQuestVariable 'aaaFollowerQuest', Status == 1.00


Now, to make a Wait AI. "Wait here" is going to be used to make an NPC just stand in one place. This is obviously best to use once we're out in the field again. The follower won't go wandering off, and is less likely to attract danger because of this.

9a). Right-click > New into the Editor ID window again. Choose "Guard" for the Package Type.

9b). Under "Reference to Guard" leave the 'Linked Ref' toggle on. "Remain Near Guard Location" can also be on. Press the rectangular button (it should say Near Editor Location by default) and change this to Near Current Location. Guard Location Radius can be 0, for best results.

9c). Flags tab
Most of these should be off, unless we've got ourselves a chatty, undisciplined follower who doesn't stand down very well. sad.gif For best results, of course, just turn all the Fallout Behavior stuff off.

9d). Conditions tab shall be ...

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable 'aaaFollowerQuest', Status == 2.00




12). QUEST window > Topics tab.

We're going to make a total of four GREETINGS, and five dialog Topics. Go ahead and right-click > New a GREETING topic, as well as these five dialog topics: one to do with Following, Waiting, Trading, getting Fired, and a "Goodbye" topic.

12a). The first GREETING should literally be a 'first time' greeting, which will be what the follower says to our character when first met. "Hey, who are you?" or whatever. That's a bad example, but you can get more creative here. Make sure "Say Once" is toggled on. The only Condition will be a GetIsID, for that particular NPC.

Now, in the Add Topic window, we can link from this first GREETING to only the Follow topic.

>>> 12b). The second GREETING assumes we went ahead and got this NPC to start following us. Conditions go....

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable 'aaaFollowerQuest', Status == 1.00


... since this GREETING will be what the follower says when actively following. Dialog for this greeting can be "What's up? Why have we stopped?" or whatever.

In the Add Topics box, right-click > New, and then link this GREETING to the Wait, Trade, You're Fired!, and Goodbye topics. When the NPC is already following us, we'll be able to tell him or her to "Wait here," "Can we trade some things?" and so on.

>>> 12c). The third GREETING is going to be used when the guy has been waiting around in Guard mode (not moving, in other words). "Hey I'm bored. When are we gonna get going again?"... Copy All Conditions from the second GREETING, and paste them into the third. But we're going to change the final number to match what's in the Main Script.

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable 'aaaFollowerQuest', Status == 2.00


In the Add Topics box, add all the topics except the Wait one, since the NPC is already waiting during this greeting (duh).

>>> 12d). The fourth and final GREETING will be used once the NPC has joined us (or we've fired him or her, or he/she hasn't been hired yet), yet still is in Sandbox mode. So the NPC will say "Want me to follow?" for this GREETING, or whatever.

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable: 'aaaFollowerQuest', Status == 0.00
, since this GREETING will be what the follower says when he or she is still sandboxing.

In the Add Topics box, only add the Follow and Goodbye topics. This way, we have the option to have the NPC follow us (breaking Sandbox mode) or simply stay there.



13a). For the NPC following topic. Give the NPC some stuff to say under Response Text ("YES, time to kick some Wasteland ass!") and add some words into the Prompt slot to make some text for us to click on, telling the NPC that we'd like him or her to start following us. "Hey, I could use your help," is fine.

Paste the same Conditions from the GREETING, but this time it will be ...

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable: 'aaaFollowerQuest', Status != 1.00


Note: != means "does not equal one."

13b). In the Result Script (End) box it should say these three things:

Set aaaFollowerQuest.Status to 1
aaaNPCFollwerRef.EVP
SetPlayerTeammate 1


Substitute "aaaNPCFollowerRef" with the actual Reference ID of your follower.

> EVP stands for EValuate Package. It is what the GECK uses to translate stuff, somehow.


*Note that final script: SetPlayerTeammate. This will make sure the follower tends to mirror the pc's behavior. So the follower will sneak if we do. He/she will draw their weapon when we do, and also use up any ammo we give him or her. Ammo which is a default part of their inventory though (from the GECK) will not decrease.


13c). In the Add Topics box, add the Wait, Trade, and Fire topics, so that even after we ask them to follow, we can change our mind, or still trade with them.


14a). Now, the Wait topic. Follow all the steps from the Follow topic, but make sure "Goodbye" is toggled on, if you want a quick exit.

14b). Paste all the same Conditions from before, but this time the quest variable will be....

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable 'aaaFollowerQuest', Status == 1.00


14c). Result Script (End) should be

Set aaaFollowerQuest.Status to 2
aaaNPCFollowerRef.EVP



15). Next is the Dismiss (or Fire) topic. Give this an appropriate Prompt ("Time for us to part ways, pard'ner...") and NPC Response Text ("WHAT? I thought we were buds! You suck!"). "Goodbye" should be checked on.

GetIsID aaaNPCFollower == 1 AND
GetQuestVariable: 'aaaFollowerQuest', Status != 0


The Result Script (End) should say

Set aaaFollowerQuest.Status to 0
aaaNPCFollowerRef.EVP
SetPlayerTeamMate 0


Note that last one, the teammate one. This will cancel any behaviors the NPC was up to before we fired him or her. So if this NPC was sneaking especially, they will go away while not sneaking. sad.gif


16a). Now, Trading topic. Do all the stuff with dialog and Prompts. Set the condition window like this to make sure he only trades while following.

GetIsID aaaFollowerName == 1.00 AND
GetQuestVariable aaaFollowerQuest.Status == 1.00


We can also set it so that he'll trade only while waiting, by changing that 1 to 2. And there's actually also a third option, as seen below...

GetQuestVariable aaaFollowerQuest Status != 0

I actually like this one the best. It allows the NPC to trade while they're following or waiting. Only when sandboxing will we not be able to trade stuff.

16b). We also have a choice of 'hearing' the NPC speak either while his/her inventory is opening, or after it opens. If we put the following in the Result Script (Begin) window, it will make them speak while we are looking at their stuff, the way some merchants speak while we're starting to browse their menus.

OpenTeamMateContainer 1

If we put this into the End box, they will say what they have to say, and then show us their inventory.

The 'Trade" topic does not need anything in the Add Topics box, so leave this box blank.


17). Finally we need a way to get out of conversations. which is the Goodbye topic. We can just make some dialog and Prompt, and choose the Goodbye toggle. We can use the same GetIsId, but we finally won't need a GetQuestVariable, so that we can say Goodbye to this NPC whether or not he /she is following.


18). Now... Priorities. In the upper right hand corner of the Topic panel is a small slot for Priority. Give this Goodbye topic a lower Priority than the others (all of which will be 50 except for GREETING, which is 55). We can give the Goodbye topic 49. What this does is it causes the NPC's topics to appear from top to bottom according to how high each Priority is. "Goodbye" will always appear toward the bottom.

That should be all. smile.gif Note that during actual gameplay, NPC followers sometimes wander off and do their own thing, when they're supposed to be following us. This happens especially when going from one cell to another: indoor to outdoor is most common. This can get frustrating! But even though there are some long pauses when it seems the NPC is nowhere around, they eventually do start following.


19A). Oops, one more thing. We can add a script to the NPC follower which makes them not only heal up, but which will also restore several of their stats, especially once combat is over. Here it is.

--------------------------

scriptname aaaNPCFollowerScript

Begin OnCombatEnd

If (GetPlayerTeammate == 1)


ResetHealth
restoreav PerceptionCondition 100
restoreav EnduranceCondition 100
restoreav LeftAttackConditino 100
restoreav RightAttackCondition 100
restoreav LeftMobilityCondition 100
restoreav RightMobilityCondition 100

EndIf
End

Begin OnDeath
Set aaaFollowerQuest.Status to 0

End


---------------------------------

This script is especially helpful, since followers don't seem to use stimpaks, even if we add these to their inventories. mad.gif Grrr.....

The death script at the bottom is basically a "clean up" function, which turns the entire follower quest off for that particular NPC, once he or she had died. It cancels any running background scripts to keep the game not sending or collecting any information to this dead NPC.

Posted by: Renee Jun 10 2018, 11:53 PM

Timer Scripts. Game: TES IV: Oblivion or Fallout 3

Today's post is going to be another shortie, and shall deal specifically with timers. I use timers a lot, for a bunch of different ideas, so it'll be good to have a timer standalone post.

There are a couple different types of timers Bethesda uses; daily and hourly versions. I've only figured out the daily ones. Timers can be used in all sorts of ways for scripting, for a variety of different functions. In this case, the timer script below will cause a quest stage to advance.



1). Open up the Oblivion Construction Set, or Fallout 3 GECK. File > Data.

2). Find the esp you've been working with and activate it, bla bla bla..

...Let's say a quest is already being written, and there are two quest stages. For now, I'll call them Stage X and Stage Y. Between these two stages is going to be a timer script, which triggers after Stage X begins. And Stage X begins due to some sort of event. This event can be any number of things: Maybe an NPC finishes pontificating a speech. Maybe a door gets unlocked. Maybe an enemy gets pwned. Maybe a certain calendar day gets passed. Whatever it is, the event causes Stage X to occur. Once X is happening, now the timer begins its job. The timer counts down a day, or a certain number of days. Once the timer's job is done, the quest advances from Stage X to Stage Y.

Hope that made sense. rolleyes.gif Basically the process goes: event occurs, quest bumps to Stage X, timer begins, a day (or more) passes, timer ends, quest bumps to Stage Y.

That is just one example of how a timer script can be used. And here is how to set it all up.


3). Go into your quest's Quest Data tab. Open up its main script.

And here is the script necessary to make the timer begin...

-------------------

scriptname aaaQuestnameScript

short Timer
short StartDay

Begin GameMode

If (GetStage aaaQuestname == X)

If (Timer == 0)
Set StartDay to GameDaysPassed
SetTimer to 1

EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >=1)
SetStage aaaQuestname Y
Set Timer to 0

EndIf
EndIf

End


------------------

Notice the "StartDay) >=1" part. The number 1 means at least one day must pass before the quest stage advances from X to Y. The number 1 can be changed to whatever you'd like though: 3... 10 .... 16 whatever you'd like. I'm sure there is some sort of limit here. Not sure what this could be though. I've gone as high as 30.

Let's say Stage X is actually Stage 30, and Stage Y is actually Stage 40. Altogether, this means an event happens which sets Stage 30 (whether an NPC gives us information, a door is opened, the death of an NPC occurs, whatever). Since the quest is at 30, this triggers the timer to begin. After a day (or more) has passed, the timer automatically moves the quest's stage to 40.

During playtesting, the timer might sometimes require more than an actual day before it does its job. We've all been there during certain Bethesda quests, right? laugh.gif We wait and wait for ... whatever the quest is supposed to do next. An example is during Oblivion's Main Quest, when Martin needs time to translate the Mysterium Xarxes. This takes several days, if I remember correctly, during which some gamers can become impatient.

I think it all depends on what hour the timer began. In-game days begin at midnight, just like they do on Earth. I haven't figured out what this means in-game though, pertaining to timer scripts. Does the timer begin counting at the very hour the event occurs? (9 pm, for instance?) or does it start at midnight, since that's the beginning of the next day? .... I haven't figured that out, yet.

To be safe, if you want 10 days to go by, and the quest must get something done within 10 days, you can use the number 9 instead of 10, in the StartDay line. Chances are, 10 days are what will pass.


4). Save the script and close it.

And that is all. As I said, timers can be used to do all sorts of things, not just triggering quest stages. The first time I used a timer, I managed to make a quest advance, but the timer also made two NPCs teleport from two outside cells, into Summitmist Manor. These two NPCs met, had a conversation full of threats and insults, and then began attacking one another.

Here are some other examples: timers can be implemented to make rooms rentable by day, houses rentable by month, quests reset back to their beginning (for Skyrim-type revolving bounty stuff), NPCs can begin to travel from one town to another and so on. All of these ideas will be explained in future posts.

Posted by: Renee Jun 24 2018, 03:37 AM

Making a house for sale or rent. Game: TES IV: Oblivion

(This also works for Fallout 3, but there are enough differences between each game that Fallout will get its own post).

This one is going to explain how to make a house (or flat, or whatever sort of dwelling you'd like) into something we can not only buy, but also rent. And when we rent this space, we'll be able to make it rentable for an entire month.... or however long you'd like.

But why rent, when we can just buy?


Glad you asked. It's because in many cases (if we're keeping things somewhat realistic, as per the vanilla game's policy on housing prices), our character cannot afford the house he or she may want to buy. Not until later on, when lots of money has been accrued. Renting is cheaper, therefore we can get a place earlier. I also like the idea of having something to always spend money on. And it's just fun making this stuff up, and seeing it all work in-game.

We can create a new place to live, or we can use one which is already in the game, it doesn't matter. Here is my personal story on how the idea came about.




1a). CELL + RENDER windows
First thing to do is find the place's interior in the cell window, and then click on its Door Marker so now we're outside. Double left-click on its door. Give this door a Reference ID. I'm going to give this door a Ref ID called aaaFrontDoorRef.

1b). Click on the Lock tab too, and lock that door if it's not already locked. Or, lock that door with a tougher lock than it has. Click OK, closing the door's Reference panel.

1c). OBJECT window > Items > Key. Edit a key, save it as a New Form. If the door already has a key, this key can be used and a key won't need to be created.

1d). Reopen the door's Reference panel > Lock tab. Use the door's Key scroll-bar to find the key you just made. Again, if it already has a key, just keep using that one. Click OK.


2a). OBJECT window
Edit a named NPC. I wanted this NPC to also buy & sell stuff, so for convenience, I edited Velus Hosidius, the guy who runs the Merchants' Inn in the I.C. Market District. Since Velus is already a merchant, this will make setting him up easier. I edited his ID to aaaHouseAgent and changed his Name to Leyawiin House Agent.

Click OK, closing the NPC's panel.

2b). Place the NPC housing agent out in the world and give him or her a Reference ID. This NPC is going to be our agent who we rent the house from, or buy it from. So depending where we put him, we should alter his Faction, his AI, his Inventory, etc.

2c). Class can stay as MerchPublican, unless there's some specific reason to change it.

2d). Whoever you chose to edit, make sure to get rid of all his or her AI. If you want the agent to buy & sell stuff, you can keep any AI that has the "Offers Services" toggle on, just make sure to change the AI package's Cell Location to where the NPC has been placed. You can also add your own AI (making the agent travel or sleep or whatever) though that is optional.

2e). Get rid of any script too, by scrolling the scroll-bar up until it says NONE.

2f). Click OK and use the main tool bar to SAVE.

2g). Now, open up your NPC house agent's panel again. Start a new script. The script's Script Type will stay as Object, and the script itself is incredibly simple, compared to what Velos had.

-------------------------

scriptname aaaHouseAgentScript

short Rent


-----------------------------

2h). Close and save that script. Click OK (closing the house agent's panel) and reopen it. Find the house agent's script. Click OK again. bluewizardsmile.gif And that's all for his script.

It's a good idea to leave the agent on-screen, in the Render window. Later on when conditions are being set up (as the quest is being made), the agent can be clicked upon to quickly set up some stuff that'll be gotten to in a few more steps.


3). QUEST window > Quest Data tab
Press the Q button on the main toolbar, and start a new quest. All the typical things that usually go into the Quest Data page will also be in this one. Start Game Enabled toggled on, GetIsPlayableRace == 1.00 under Quest Conditions, etc. The only difference is we don't have to set Priority very high. Matter of fact, it can be as low as 10, especially since the NPC we're dealing with won't be associated with any other quests.

4). Quest Stages tab:
A minimum of three quest stages go in the Index window. I am choosing 0, 5, and 100.

You can add more stages than this if you'd like to build some sort of story, and make this into an actual quest. But the basic build only requires three stages.


5a). Topics tab
Go ahead and give your NPC a GREETING. He / she will explain that there is a house for rental or purchase in his / her dialog. "How fares thee? My name is X, and I am the official housing agent here in X. Have you come to rent or buy a home today?"

There are three Conditions:

GetIsID aaaHouseAgent == 1.00 AND
GetStage aaaQuestName < 5.00 AND
GetScriptVariable 'aaaHouseAgentRef', Rent == 0


For the GetScriptVariable, when it asks for a reference, just click the "Select Reference in Render Window" button, and then double left-click on the agent. This'll set things up nice and quick.

.... that final Condition (the GetScriptVariable) is one I'd never used before, at the time that I made this mod. What this does is makes sure the agent ONLY says this greeting if we have not rented the place yet. Of course, this is the first time we're meeting the agent, so of course it hasn't been rented yet. But that line of code will show up several times later on, and it's got an ability to make sure certain dialog happens when the agent is spoken to, or does not happen.

Buying the place won't require this variable, because if we can afford to buy it, the entire quest simply ends. But if we rent it, the game needs to know whether or not we've already rented the place, so that the agent's dialog fits what is happening. This variable will also ensure that the game won't keep taking our money, if we accidentally try to rent after the place has already been rented. .

When we speak to this agent for the first time, this will bump the quest into a "middle" stage, which I'm calling Stage 5. This stage does not actually need a Log Entry (it's like if we rent a room from Velus, or any innkeeper; there is no need for a quest stage to appear). But it's important to make this quest move forward via SetStage. This way, we can add dialog which includes the moment that agent is first met, and also after we meet him or her. Dialog will be different in each situation, which adds some realism.

5b). So, in the Result Script add Player.SetStage aaaQuestName 5

Substitute your quest's name where it says "aaaQuestName."


6). Choices box: Add two dialog choices here: one which will lead to renting the space, another which will lead to buying it. aaaRent and aaaBuy.


7a). First, let's discuss renting. In the Editor ID, find the two Choices just added, and add them into this window as well. Now let's choose the Topic which will allow rental dialog.

7b). "How much to rent the place?" we can put under Topic Text. And give the agent a response. "It's your lucky day! The market has been down, and so we're asking for 300 gold per month," or whatever you think is appropriate.

7c). In the Conditions window, we can just copy/paste everything from the GREETING, including the Script Variable. The only difference will be the GetStage Condition, which will reflect that middle stage the quest has bumped to.

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetScriptVariable 'aaaHouseAgentRef', Rent == 0


7d). Now, add two more choices in the Choices box: one which is a "Yes" response (aaaRentYes), and one which is a "No" response (aaaRentNo).

7e). Add these into the Editor ID window, and change the Topic Text for each into plain English. "Yes, I'd like to rent it", and "No, I changed my mind."


First, the aaaRentYes topic: Once we're back in-game, and at the moment when we wish to rent, there has to be some way for the game to know if the character has enough money. If the character can afford to rent it, there'll be a response for this. We'll also need to make a response which the agent will say if we can't afford to rent it. Go ahead and make both of these responses: "Very well, your house has been rented. You'll find its door unlocked for the next 30 days," or "Hmm, seems you haven't enough gold at this time."

8a). Let's say the agent is asking 300 gold a month, and our character can afford this. Here are what will go in the Conditions box for that response...

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetScriptVariable 'aaaHouseAgentRef', Rent == 0.00 AND
GetGold NONE >= 300.00


8b). Toggle "Run on Target" ON for that final condition (the GetGold one). The character needs to have 300 gold or more, to make this response happen, and the game engine needs to be able to look into the character's inventory at this moment. If Run on Target is not toggled on, the game won't be able to "see" how much gold the character has.

8c). In the Result Script box, add the following.

aaaFrontDoorRef.unlock
Player.RemoveItem Gold001 300
Set aaaHouseAgentRef.Rent to 1
SetCellOwnership Cell


> Substitute 'aaaFrontDoorRef' with the Reference ID you gave the door of your rentable space.

> Substitute 'Cell' with whatever cell your character is going to be living in. This assumes (of course) the Player does not already own this cell. So in my game, that final script is SetCellOwnership LeyawiinCingorsHouse


Overall ... when the agent is spoken to, and we tell him or her we'd like to rent the place, what'll happen is the game will automatically unlock the place's door IF our character has 300 gold, or more. The game changes the place's Rent variable from 0 to 1, which causes the agent's dialog to follow a different path if we try to speak to him / her again. And finally, the game makes sure the cell now belongs to the player-character.


9). Now ... if your character can't afford the 300 gold, here are the Conditions for this...

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetGold NONE < 300


... Again, make sure GetGold has Run on Target toggled ON. "Goodbye" can also be toggled on, making the NPC ForceBye us, because he or she's not happy that we're wasting their time.


10a). Make a second GREETING, this one saying "You're back. And the place is still available. Would you like to rent or buy it?" ... The NPC will say this Greeting after the place has been rented, but 30 days have passed, therefore the rental has expired.

10b). Again, include the same topic Choices (for renting or buying) which were included during the first GREETING: aaaRent and aaaBuy. These choices will lead in the exact same directions as they did after the first GREETING, which ensures that this quest is repeatable, giving us maximum choice all along.

Conditions look like this....

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetScriptVariable 'aaaHouseAgentRef', Rent == 0.00


10c). Now, make a third GREETING. This one will show up after the place has been rented, but the rental has not expired yet: "You are back. How is your lovely home? You have already rented it, are you thinking of buying today?"

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetScriptVariable 'aaaHouseAgentRef', Rent == 1.00


We have not written any "buy" dialog yet, but we'll do that in a moment. For now, just click OK (closing the quest window) and save. And reopen the Quest window.


11). QUEST DATA tab
It's that time! Time to write a script, and it's going to be a timer script, just like in the post above this one. This timer script will allow the game to rent us the place for however long we'd like. Let's say we're renting it for 30 days. Here is what the script will look like.

------------

scriptname aaaHomeScript

short Timer
short StartDay

Begin GameMode

If (aaaHouseAgentRef.Rent == 1)

If (Timer == 0)
Set StartDay to GameDaysPassed
Set Timer to 1

EndIf
EnfIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 29)

If (Player.GetInCell Cell != 1)
Set Timer to 0
aaaFrontDoorRef.lock 100
set aaaHouseAgentRef.rent to 0

Message "Your home rental has expired", 36

EndIf
EndIf
EndIf

End


----------------------------

So... this timer ensures that several things will happen. When the agent has been paid 300 gold, this begins the timer's script. After 30 days have passed, this script now LOCKS the front door with a "Needs a Key" lock. An easier lock can be placed here if you'd like. Just change 100 to any number between 1 and 99, if you want a situation in which the house can possibly be broken into. This door will ONLY Lock if the character is not inside the cell though, ensuring the character won't get locked in. There is also a message which tells the player when the rental terms are over, which will stay onscreen 36 seconds. This part is optional and may be game-breaking for some, but it helps to know if the quest is working, or not.

Finally, in the line which says StartDay, note that I put 29 instead of 30. The game always seems to add an extra day.

Optional: If desired, the game can also give the character the key, which opens the front door. Make this key a Quest Item, so it can't be dropped, and then picked up later on after the rental has expired. This key can get added via dialog, at the moment of rental (player.AddItem aaaFrontDoorKey 1 would go into the Result Script box). This key can also be removed after 30 days have passed. The Main Script is used to remove this key, once the timer is finished, by putting Player.RemoveItem aaaFrontDoorKey 1 into the second block of If/EndIf texts, under the line which says aaaFrontDoorRef.lock 100. Adding a key during the rental phase is more necessary in Fallout than it is in Oblivion (Fallout doors tend to lock themselves prematurely).


12a). TOPICS tab
Now, it's time to finally going to add dialog and Topics which will allow the agent to sell the place. Selling is not nearly as complicated as renting. Click on the Buy topic you created before, and change its Topic Text to something appropriate. "How much to buy the place?" or whatever. And add some appropriate text like as a Response. "It's your lucky day! We're asking just 2000 gold."

Conditions look like this:

GetIsID aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00


12b). Let's say the place does cost 2000 gold. In the Choices box, make a choice which says includes a Yes response, and one which includes a No response: aaaBuyYes and aaaBuyNo. Add both of these into the Editor ID as well.

12c). For the aaaBuyYes topic, if the character has the 2000 gold, everything moves forward, and the entire quest comes to an end.

Conditions:

GetIsId aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetGold NONE >= 2000


Make sure "Run on Target" is toggled ON for GetGold.

12d). Result Script is very simple: Player.SetStage aaaQuestName 100

12e). Make a second response for aaaBuyYes, in which the character wishes to buy the place, but hasn't got enough gold. "Ahhm. Seems you haven't enough. I asked specifically for 2000 gold!!!"

GetIsID aaaHouseAgent == 1.00 AND
GetStage aaaQuestName == 5.00 AND
GetGold NONE < 2000


12f). Toggle Goodbye on for this response, if the agent becomes haughty, angry, or whatever. mad.gif Or maybe the agent remains cordial. Don't toggle goodbye, if this is so, and make the agent smile.


13a). QUEST STAGES tab
Go to the final stage (I am calling this Stage 100). Add a Log Entry, denoting that the house, the warehouse, the loft, etc. has been purchased. "I have decided to purchase the home.... bla bla bla."

Result Scripts should be....

Player.RemoveItem Gold001 2000
Player.AddItem aaaFrontDoorKey 1
SetQuestObject aaaFrontDoorKey -1
StopQuest aaaQuestName


> The "SetQuestObject" script is only necessary if the key has been made into a quest item earlier for the rental phase. If it hasn't, don't worry about this script.

> Since we're purchasing this house and the agent will never talk to us again, he / she simply gives us the key we made in step 1a.

13b). Don't forget to toggle Complete Quest on.


14). Topics tab
Finally, fill in the Topic and dialog which causes the PC to back out of buying the place. This is the topic I called aaaBuyNo earlier. "2000 is too much," or whatever. Again, the NPC's response can be haughty if you'd like. Conditions are just the same GetIsID as before, along with the GetStage pertaining to Stage 5, or whatever number you chose for the quest's middle stage.

Voila.

Posted by: Renee Aug 12 2018, 04:13 PM

Cripes, it's been since JUNE since I've added one of these?

This one is going to teach how to add songs to a radio station in Fallout 3. Last summer it was my goal to get heavy metal into Janet Telia's game, because in my RP with her, there was some sort of stash of all kinds of modern music, and she grew up on metal.

SubRosa tried to teach me how to do add songs to radio last summer, but I wasn't able to get it back then. I figured out my own way though. It requires a radio station mod which can be found here: https://www.nexusmods.com/fallout3/mods/18358 Now, this may seem unethical, since I'm tearing into somebody else's mod. I'm not going around claiming the author's work to be mine, at least.

-----------------------------------------------

1). First step is to find some songs in mp3 format. On my computer, they will show up as HP Connected Music Files (colored red). There are all sorts of ways to get music onto computers nowadays, legally, or gray-area-gally. emot-ninja1.gif

2). Copy/paste these songs over to Fallout 3 > Data > Sound > Songs > Radio > OnTheRoadRadio. As an example, I am going to add the song https://www.youtube.com/watch?v=L_BJlBjF2Vc by The Cure.

3). Open up the GECK. File > Data > OnTheRoadRadio.esp. Make this esp active. (duh)

4). OBJECT window
Go to Miscellaneous > Sound. The added songs are in the right folder, but we can't see them yet. This is because their name hasn't been transformed to something that the GECK wants to see. So right-click > New into the Editor ID. A panel should pop up.

5). For ID, choose anything you'd like to name your song but it HAS to start with the letters MUS in its beginning. So for example, I'm going to type MUS1015SaturdayNight. It's possible to do the same trick to get our music at the very top of the pile, by adding 'aaa' up there. So MUSaaa1015SaturdayNight.

6). Click on the Add Sound File button. It should automatically find Fallout 3's Data > Sound folder. You can then manually direct into the OnTheRoadRadio folder (Data > Sound > Songs > Radio > OnTheRoadRadio). Find the song just added into this folder, and click OK. The song should show up in the greyed-out button you just clicked.

Note that there are Play and Stop buttons. These don't seem to do anything, unfortunately.

7). Below those two buttons, there are two tabs: Main and Attenuation. Start with MAIN. There are three sliders, and the first two don't get touched for some reason. But move 'Static Attenuation" to -12.33 db.

Note: I am not sure what this does. Maybe it adds a slight bit of static to the song, making it seem as though it's more on the radio? Hmm. 12.33 is used every time, though.


8). Frequency Adjustment can be left at 0.

And only the 'Dialog sound' toggle is going to be clicked ON.

'Looping" can be kept on None, and the two sliders at the bottom can be kept at Midnight.

9). ATTENUATION tab
I have no idea what any of the sliders on this page do, but the game has them set up like this:

100
50
20
5
0

'Reverb Attenuation Control' is set at 80.

...and the very bottom slider (Priority) is set on Default. Leave this slider alone. I tried putting it up to 'Highest,' to see if it would play a particular song first, but this didn't happen in-game.

Basically, we're not going to touch any of these sliders, but just make sure they all read what's supposed to be there.


10). Click OK. Now the song is in the game, but not on the radio.

11). Use the main toolbar and Save!

12). OBJECT window
Now, go to Actor Data > Quest. Find the OnTheRoadRadio quest. Double-click on it.

13). RADIO tab.
In the Display Text window (Windows 8 users: this is the window on the left. It'll be greyed-out and will need to be dragged from the top left), right-click > New > Add Topic and make a new radio list if this is desired. Or double-click on one that's already been made.

I am not sure if there is some limitation here. Why do we need to make a new list? There has to be some reason.


14). In the Info window, right-click > New. A panel should pop up.

15). Response Text box can be the name of the song, but it doesn't have to be in camel-case. It can be Beautiful Baby instead of BeautifulBaby. Basically, the name of the song can go there in plain English, which helps find the song as we're working in the GECK's quest section.

16). Don't touch anything else except the Sound File button. Click on 'Select TESSound'. Another panel should pop up. This button is fidgety, and it may take a couple tries.

17). Now find MUSaaa1015SaturdayNight, or whatever song you added. Double left-click on the song you want to add. Note that some of sound items on this list actually DO make sound, when clicked on accidentally. This seems to be hit-or-miss though.

18). Click OK. The song should now be in the Info window, as well as the Response Text box.

19). Make sure "Run Immediately" and "Random" are both toggled on.

20). In the 'Link To' box, right-click > New > Add Topic, and find 'RadioHello.' It should be somewhere down toward the bottom of the list, but you can type its name until we find it.

21). In the Link From box simply choose ANY. Then click OK (closing the quest panel).

22). Go back to the main toolbar and SAVE. Save after EVERY song. If the GECK refuses to save (there's a spinning blue circle staying onscreen forever) it's because one of the songs you've added can't be put into the game for some reason, even if it works outside the game. You may have to Ctrl + Alt + Delete and restart our computer if this blue circle happens. sad.gif


Final steps (which applies only if you've made a new Song List): Each Song List has its own 'Greeting,' and if you're adding a new song list (Step 13), you will need to add a new Greeting as well. This is not the same as GREETING.

23). In the Display Text window, click on RadioHello.

23). In the Info window, right-click > New. In the panel which pops up, add Greetings X in the Response Text box, with X being a number which corresponds to the new song list we've added. So if this song list is 5, it should say Greetings 5.

24). Click OK. Now, double-click on that same Info topic (Greetings 5, or whatever). Look at the Voice Filename area. 'OnTheRoadRadio_RadioHello_00004438_1' should automatically be there.

25). Again, the flags chosen should be "Run Immediately", "Random", and a new flag gets toggled, which is "Random End". The very last Topic in the Info section should be the bottom of the list, and this means that "Random End" should be removed from whatever used to be at the bottom. So if Greetings 4 used to be at the bottom, unclick this, and click it in the Greetings 5 topic.

26). In the Link To box, find your newest song list (OnTheRoadRadioList5 in this example). Click OK.

27). Now, the final touch will be to look on the right side of the Radio quest panel. There is a scroll-down bar called Speaker. Select this and find 'Zimmer.' I assume this is supposed to be the DJ of this radio station, but so far I've never heard him in the game.

28). Hope and pray everything saves when we close the GECK.


It is possible to remove the songs found in On the Road Radio, and replace them with our own songs, too. I didn't write any notes on how to do this unfortunately, but it is possible.

Posted by: Renee Aug 26 2018, 08:52 PM

Gun Tutorial Game: Fallout 3

This will not be as comprehensive as some others; it will merely blow through what all the different scroll-bars, slot numbers, and toggles do, and how they affect in-game play. In this case, I am going to edit something already pre-made by Bethesda, so nothing new is being made here. I don't know how to add totally new weapons into the game.

1). Fire up the GECK.

2). OBJECT window
Go to Items > Weapon. Find a weapon you'd like to make some changes to. Right-click > Edit on it. Give it a new ID and Name.

For me, this is going to be the very fast, very loud, but extremely inaccurate Assault Rifle. I'm not going to change its speed, or its weight, or anything like that. I will try to make it more accurate though. And also, I'm going to make its components last longer.

3). Here are all the items on the top half of the Weapon panel.

Script: Do not use.

Object Effect
: This scroll-bar will add certain effects to different weapons. For instance, we can put Moira Brown's "mole repellant" effect (which is found in a different part of the Object window) onto a Baseball Bat.

Ammunition: self-explanatory. This is what sort of Ammo your gun will require to operate.

Clip Rounds: Same as above. We can change the number of bullets in each clip.

Skill: another self-explanatory scroll-bar. Which skill does the gun affect?

Repair Item List: VERY important. Whatever is in this scroll-bar is what we can use to repair the gun with in-game. Since my assault rifle will be a unique item, found in very rare locations throughout my game, this doesn't mean it won't be able to be repaired. I'm leaving this on RepairAssaultRifle.

Equip Type: Again, self-explanatory. Don't change this away from SmallGuns, or whatever weapon is being edited.

Flags: These are various toggles which can be turned on and off, mostly self-explanatory. More detail about this can be found here...

http://geck.bethsoft.com/index.php?title=Ammo

One thing of interest is "Ignores Normal Weapon Resistance" which is a holdover from Oblivion, affecting the way silver weapons can damage undead, for instance. In other words, this flag doesn't do anything in Fallout. (thank you 'Rosa).

"No Jam After Reload" ... guns which have low Health will sometimes stick (not fire) after a new clip is slammed into them.

"Minor Crime" if the gun is used in-game, it is going to be considered a crime!


4). Game Data tab
On the lower half of the Weapon panel, and on the middle-left of the page, are three tabs. The Game Data tab is selected by default, and there are also Art and Sound and Rumble tabs.

Weight: After all these years, I'm still not sure if Beth uses pounds or kilograms.

Health: Yes!!! Finally, a way to make weapons last longer before repairing sets in. Though this is cheating, there's always a way to explain more durable guns through roleplay, right?

Reach: Do not use. This is always set at 1.000 by Beth.

Fire Rate: Another duh.

Spread
: This controls how accurate or inaccurate a gun is. Assault weapons in general are pretty inaccurate. By default this is set to 4.000 for an Assault Rifle. Change this to a lower number for less chance of missing, but also less chance of randomly hitting.

Min Spread: Guns have a minimum and maximum spread.

Sight FOV: This has to do with how far "inwards" the player's vision narrows in while aiming.

Sight Usage:

Crit Damage: How much damage this gun will do through critical hits.

Aim Arc
: Not sure. Do not use.

Value: Durrr.

Damage: This is the base damage the gun will do most of the time, while Critical Damage is what it can do, some of the time. Obviously, it can be very easy to make a gun which oneshotkills everything in the Wasteland, so don't remove all challenge from the game, else you might also remove a lot of its fun!

Ammo Use: How many bullets get used up per round.

# Projectiles: How may bullets come out of the gun at once. I don't think it has anything to do with Ammo Use.

Limb Dmg Mult: When making critical hits through VATS, this is what causes more or less damage. Leave this at 1.000. I think problems with glitches can otherwise occur.

Base VATS To-Hit Chance: this number can also be affected by certain Perks the character has, as well as Luck.

Burst Shot / Long Bursts: Do not use.

Semi-Automatic Fire Delay Min / Max: These affect the delay between shots. Don't mess with this.

Resist: This scroll-bar determines if the gun has resistance against various types of damage, such as resistance against energy weapons, fire, and so on.

On Hit: Don't mess with this.

Range: There is a minimum or maximum range in which the bullet has effect. This is measured in Bethesda's cryptic "units", (the same units that get used for setting X-marker distances, for instance), so this does not measure standard or metric.

Action Points: How many "Action Points" the gun uses per shot.

Damage to Weapon Mult: How quickly health regenerates. Don't change this.


5). Art and Sound tab.
Most of this we won't mess with, because this tab affects all the various artworks (such as icons) that are already in the game.

An example of a time we'd want to mess in this tab though is let's say we want to make a pistol shoot fire instead of bullets. If we have a 10mm Pistol, and make changes to it in the Game Data tab so that it uses Flamer Fuel, if we didn't change anything in the Art and Sound tab, the gun would still visually shoot 10mm ammo, even though the effect would be enemies burning up. We'd have to go into the Art and Sound tab to make the gun visually shoot flames, and also have the sound-effects for this as well.

To make a pistol which shoots fire, make all the changes in the Game Data tab, but then study the Art and Sound tab for a Flamer. Make the appropriate changes to the flaming pistol.

In most cases though, skip the Art and Sound tab.


6). Rumble tab.
This affects Xbox and Playstation controllers. We can make the motors in our controllers rumble more or less, amazingly.

Don't mess with this, in most cases.

Posted by: SubRosa Aug 26 2018, 08:59 PM

Ignores Normal Weapon Resistance is a holdover from the older Elder Scrolls games like Oblivion and Morrowind. It is for things like Silver and Daedric weapons, that can harm ghosts and other critters that are immune to normal weapons. It does not do anything in the Fallout games. I think it didn't work in Skyrim either.

Posted by: Renee Sep 2 2018, 12:55 PM

Thanks. I changed the info in my previous post.

Repeatable Bounty Quests, Game: TES IV: Oblivion

This one is going to discuss how to make a revolving, never-ending, set of bounty quests, similar to what Skyrim has, when we get bandit raids from innkeepers. My version is different from Skyrim's though, in several ways. Bottom line: If you're the type of gamer who wants to be sent off to do random kill-type missions, which are also repeatable, this is what is going to be taught in this post.

Here is what I decided to create in my game. Count Marius Caro begins to sponsor endeavors to clear out certain lairs of whatever scummy enemies they hold. My character (Lady Saga) will be able to go into Leyawiin's castle, speak to a certain NPC agent, and then select a location to plunder. Once she finds the location and eradicates a specific boss, the game informs the player that the boss has been taken care of. And now a reward can be collected back in Leyawiin's castle.

Though this sounds like just another kill quest, again, the main difference is this one can respawn itself. And multiple locations can be added.



1a). Fire up the Oblivion Construction Set.

1b). First thing to do is start a new quest. Give it an ID. Quest Name is not important (as will be seen, the name of these quests will never appear in-game), but you can name it just for reference, here in the Construction Set. For this lesson, I am giving an ID called aaaBountyQuest, which can be changed to whatever you'd like.

1c). In the quest's Data tab, start a script which looks like this...

-------------------------

scriptname aaaBountyQuestScript

short DoOnce


------------------------------

"aaaBountyQuestScript" can be made more specific, especially if you want to make this script more regional. In my game for instance, I've got aaaLeyawiinBountyQuestScript.

1d). Change the Script Type scroll bar from Object to Quest.

Save that script (using the save icon) and close it. Click OK, closing the quest window. Reopen it, find the script you just started, select it, and click OK (closing the quest window again).


Next, we're going to edit a letter, a town-based NPC, and an enemy NPC. All of this happens in the steps below.


2a). OBJECT window > Items > Books
Edit a handbill, or a letter, or a note, etc. Give whatever parchment you decide to edit a new ID. It makes sense to associate this ID name with whatever lair it's going to direct the player to. My first note will send the player to Undertow Cavern for instance, so I'm calling the note's ID aaaUndertowQuestNote, and then changing its Name to Undertow Cavern Order.

2b). Change the note's Book Text too, of course. Write some material describing that (1) there is a problem at a nearby lair (whether it's Undertow or somewhere else), and (2) a reward can be had after this lair is dealt with. Write something like...

Hear ye, hear ye!

By order of the County of Leyawiin, this parchment shall direct its bearer towards the subterranean dwelling known as Undertow Cavern. Once riddance and eradication of Undertow's scum has been accomplished, We of the County of Leyawiin shall have knowledge of its leader being taken down, through the glass of our specialized crystal ball. Thence, the bearer of this note shalt return toward our magnificent domain, and payment of 200 gold shall be dispensed.

~ Count Marius Caro~


2c). Ahem. It's a good idea to make this note a Quest Item. Here is why: This method of quest-making does not use stages at all. So the note is the only reminder a player will have, explaining where to go.

And don't worry. This quest item/note won't get stuck in inventory forever; it's going to get removed later on, or its quest-status is going to get removed.


3a). OBJECT window > Actors > NPC
Edit a named (not generic) Bethesda NPC who is not associated with Shivering Isles. This is going to be the guy or lady who will dispense quest locations.

If you have already made an agent and wish to reuse him or her, you can just skip to step 4a, whcih teaches how to make the enemy.

3b). Remove the NPC's script (if there is one), and also get rid of any AI. Change the NPC's Class to Agent. Edit the NPC in any manner you'd like.

I edited Agamir, removed his script, changed his Class from Thief to Agent, amd removed all his AI and Factions. Changed his ID and Name, bla bla bla. I transformed Agarmir into the "Leyawiin Quest Agent". Since this agent lives in Leyawiin Castle, I made sure to add him into the LeyawiinFaction (so he'll occasionally gossip about local topics), and also LeyawiinCastleFaction.


An optional step is to give the agent some AI (skip to step 4 if you just want to move on to the quest-making part). I gave him AI which causes him to Travel from the castle's court area into its Servants' Quarters. Most important though, I made a 'Use Item At' package called aaaLeyawiinAgentOnDuty. I then toggled Must Complete on. And changed the Time scroll-bar to 9, with a Duration of 8, meaning that he'll be "on duty" from 9 to 5. I gave him a desk to sit at (WorldObjects > Static > LowerClassTable01), and a chair to sit upon (World Objects > Furniture > UCChair05L). Gave the chair a Reference ID so the agent would sit down while "on duty". All of these furniture pieces were put off to the side of Leyawiin Castle's Great Hall.

.....If you want to do something simliar, just make two Travel packages: one which causes the NPC agent to travel to some other location, and another which causes him/her to return to work. The third AI package (Use Item At) makes the agent sit down from 9 to 5. I went into the agent's Use Item At again, and clicked on the Location tab. Toggled 'Near Reference' on, and then pushed the Select Reference in Render Window button. Double-clicked on the chair added earlier. Clicked OK.

Overall, he will travel to Leyawiin's court area at 7 am, sit down at 9, and stay there until 5. After 5, he walks to the Servants' Quarters, where he basically stands around doing nothing. Lol. You don't have to do all this. I like dynamic NPCs though. smile.gif


4a).
OBJECT window > NPC
Find a generic enemy who will be appropriate for whichever cell you'd like to plunder. Since I chose Undertow Cavern (which hosts Black Bow Bandits) I went into the Redguard section, and then edited BanditBlackBowBoss4Male1.

4b). Change ID, and change Name if you'd like. Toggle Respawn on, and toggle No Low Level Processing off.

Since the NPC I edited is already a Black Bow Bandit, he already has the correct factions and AI. It's always good to double-check these features, though. wink.gif

4c). Stats tab
Now's the time to make the enemy boss into whatever he or she is supposed to be. Whether he's a wimp, or an über. viking.gif Take the time to set the enemy up for combat.

Tip: There are two basic ways to set up the enemy's Health, Magicka, and Fatigue: these stats can either be fixed, or Leveled. PC Level Mult will make an enemy who levels with the player/character, or below / above the PC. This is my favorite way to set up enemies. Problem is, I have found that sometimes the game's engine screws up when respawning the enemy, leaving him or her with zero Health, and (sometimes) a huge negative number for Fatigue.

The only way I've found to fix this is to click PC Level Mult off. This will cause the CS to automatically choose Auto Calc Stats instead. Click Auto Calc Stats off too. Now it is possible to choose any numbers, not just for Health, Magicka, and Fatigue, but also for all the Attributes, and wherever else there is a slot which can be modified.

It is also possible to use scripts, so that these numbers get generated in real-time back in-game. But this too me seems overly complicated, like it could also welcome new problems in the future. I like keeping things simple.


4d). Inventory tab
All generic Bethesda enemies use Leveled Lists to determine what gets added into their inventories, so I personally don't mess with this tab. Leveled lists give random things to NPCs, to wear and use. Because of this, the enemy boss will be a little bit different every time he gets encountered, since he'll be wearing different armor / carrying different weapons, every time he respawns.

Go ahead and add or subtract whatever you'd like, though.



5a). CELL + RENDER windows
Place the NPC enemy into whichever cell he /she belongs in. It's a good idea to put him/her into a final room, so that the PC will be forced to defeat most of the lair before the boss is found. Once the enemy is in place, he or she might be in underclothes. ohmy.gif This is okay. Those leveled lists will handle this dilemma; giving the NPC something to wear, and carry, once we're back in the game.

5b). Give the enemy a Reference ID. For this tutorial, I am calling it aaaEnemyBossRef, but for my actual game I chose aaaUndertowBossRef. It's a good idea to copy whatever ID is chosen, so it can be pasted into scripts later on.

5c). Toggle Persistent Reference on, if it's not already on.

5d). Also, start a script for the enemy that looks like this....

---------------------------------

scriptname aaaEnemyBossScript

short Dead


-------------------------------

Substitute "EnemlyBossScript" with whatever name is more specific. In my game, I've got aaaUndertowBossScript.

5e). Save that script (using the save icon), and close it. Click OK, closing the NPC's panel, and click OK again, closing his or her Reference panel. If you're editing the NPC from the Object window (instead of its Reference window) you won't need to close a Reference panel.

5f). Reopen the NPC's panel(s), and find the script you started earlier. Click OK again (closing the NPC and Reference panels if both were opened) SAVE all progress using the main toolbar, and reopen the NPC's panel(s) again.

Though all of that opening & closing seems redundant, it's actually necessary to follow those steps, in that order. If you don't, sometimes problems can happen. The script might give annoying error messages later on when we're trying to save it, for instance.

5g). Now, to add more to the script.

------------------------------------

scriptname aaaEnemlyBossScript

short Dead

Begin OnDeath

If (aaaEnemyBossRef.Dead == 1)
Set aaaEnemyBossRef.Dead to 2
Set aaaBountyQuest.DoOnce to 2

Message "The leader of X has been killed", 36

EndIf
End


---------------------------------------------------

Substitute "aaaEnemyBossRef" with the Reference ID of your enemy, if you gave him/her some different Reference ID name.

Substitute X with whatever location name was chosen.

Note the message, too. Since this method of quest-making does not use stages, it's important to be informed of the boss's death in real-time, just so you know the quest is working. This message will not show up as a quest update (it will not pause the game). If you still find this to be immersion-breaking, just delete that whole line of text.


5h). Use the Save icon to save the script before it's closed. Click OK on the enemy's information panel(s).

5i).. RENDER window: Get back into the cell where the enemy is. Now go into the OBJECT window > WorldObjects > Static, and pull an XMarkerHeading from the Object window into the Render window. Give this XMarkerHeading a Reference ID. I am calling it aaaXMarkerHeading for this lesson, but this can be changed to something more specific, as per the enemy's name, for instance. The XMarkerHeading be discussed later in this post.


6a). QUEST window > Quest Data tab
Reopen the quest which got started earlier in this tutorial.

6b). Priority can be anywhere from 10 to 70, depending if the quest is going to 'compete' with others out there. For instance, if you only use the one NPC agent added during 3a, Priority can be set low. If you're going to include other NPCs (let's say Count Marius Caro or some other NPC gets spoken to, to introduce the character to this new concept of bounty hunting) Priority should be set higher, since other quests associated with the extra NPCs might prevent the bounty quest dialog from showing up.

Heck, if your character is in the middle of doing the Main Quest, might as well set Priority to 100, although now the bounty quests's dialog is competing with MQ dialog, which might not be desirable. laugh.gif

6c). Make sure Start Game Enabled is toggled on (it should be, by default) and add GetIsPlayableRace == 1.00 goes into the Quest Conditions window.

6d). Return to the script. Time to add a few more lines of text, so that it'll now look like this...

--------------------------------------

scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay


----------------------------------

Close and save, bla bla bla...

7a). Topics tab
As usual, start with a GREETING. "How fares thee? ... Have you come to take down one of our nearby locations?" is an example of what the NPC Agent could first say. Here are the Conditions.

GetIsID 'aaaQuestAgent' == 1.00 AND
GetQuestVariable 'aaaBountyQuest', DoOnce == 0.00


Substitute "aaaQuestAgent" with whatever ID you actually chose.

7b). Use the Add Topics box to to add a custom topic, and (as usual) add this topic into the Editor ID window as well. I am calling this topic "aaaBountyQuest01"

7c). During aaaBountyQuest01 (or whatever you named your topic), the Agent explains what's going on locally, with forts and caves and ruins all harboring lots of baddies. The agent then asks if we'd like to see a list of possible places to plunder.

The cool thing about this type of quest (once it is all set up) is we can add several locations to go to, later on. And all of these locations get chosen through dialog.

Conditions from the GREETING can be copy / pasted. Again, they go like this...

GetIsID 'aaaQuestAgent' == 1.00 AND
GetQuestVariable 'aaaBountyQuest', DoOnce == 0.00


7d). In the Result Script box, type this: Set aaaBountyQuest.DoOnce to 1

7e). In the Choices window, right-click > New and make a second custom topic, dealing with whichever lair is being featured. So in my game, I've got aaaUndertow as a topic ID.

Add that topic into the Editor ID window, too. This topic is going to be the first locational topic. As I said, more locations (and topics for each location) can be added later, each one getting its own dialog.

7e). For this first locational topic, do all the usual steps: change Topic Text to something in plain English (if needed). Make some dialog which furthers the conversation "Ah, so you'd like to head to Undertow Cavern...." The agent explains whatever local problems the town has been having with Undertow, then. "Located off the west gate, right above the town. Such a menace to the stable and travellers below..."

Conditions go like this....

GetIsID 'aaaQuestAgent' == 1.00 AND
GetScriptVariable 'aaaaEnemyBossRef', Dead == 0.00


That script variable function is an awesome tool, by the way. Variables are what often cause the game to allow, or not allow, all sorts of things. Same goes for the quest variable used in the first Greeting. Script and quest variables shall get used a lot during this entire process.

7f). If you want to make this moment into a Yes or No choice, use the Choices window to add Yes and No topics. If not, skip to step 8.

.... The "Yes" choice is going to be specific to Undertow Cavern (ID name is aaaYesUndertow, for instance). The "No" choice is going to be much more generic (aaaNo), and will pertain to any moment the player clicks on "No" during conversation. In fact, if you already have a "No" topic from previous quests, you can just reuse this.

7g). Add both Choices (aaaYesLocation and aaaNo) into the Editor ID as well, and add dialog for each one. If you want some dialog which explains where the lair is, you can type this in too. "Let me put that location on your map."

Conditions for the "yes" topic are the usual GetIsID and script variable...

GetIsID 'aaaQuestAgent' == 1.00 AND
GetScriptVariable 'aaaaEnemyBossRef', Dead == 0.00


In the Result Script box, type these in....

Set aaaEnemyBossRef.Dead to 1
Player.AddItem aaaQuestNote 1
ShowMap UndertowCavernMapMarker


Substitute "aaaEnemyBossRef" with the Reference ID of your enemy.

Substitute "aaaQuestNote" with the ID of the note made during step 2..

Substitute "UndertowCavernMapMarker" with the name of the location, unless you also are using Undertow, of course.



8a). Assuming you don't already have a "No" topic, make some dialog like "STOP WASTING MY TIME!" in response to our character opting out. Only one Condition is needed, which is the same GetIsID from previous steps.

8b). Result Script should be Set aaaBountyQuest.DoOnce to 0

8c). Toggle Goodbye on, to simulate the Quest Agent losing temper, if you'd like! mad.gif


Note: notice the QuestVariable up above in step 8b. It started out as 0, changed to 1, and now it's 0 again. What's that all about? Well, the way this bounty quest works is: we can only choose one quest location at a time. This is important. If we accept a quest (Undertow Cavern, for instance) and then immediately accept another one (assuming you write in more than one location), this will confuse the game's dialog, and screw it all up. It is possible to make more than one location at a time viable, but the amount of work it'd take is just not worth it. Much better to keep things simple!

So it's important to have a way to make sure only one quest location at a time gets focused on. But it's ALSO important that dialog is able to reset itself to the very beginning ("How fares thee?") so that the entire process can be started over.

>> This entire bounty quest idea works on timer scripts, which will get written up in a few moments. After a location gets accepted, its leader get killed, it is these timers which cause the quest to reset.


9a). Go back into the first locational topic (the one which describes where to go, and why to go there). Right-click > New into the Info window. Write some dialog which explains that a certain location has already been plundered.

For instance, let's say Undertow Cavern has already been eradicated, its timer has not reset, and its enemy has not respawned. The player forgets this though, and clicks on Undertow Cavern. Dialog in this situation can go like "Hmm. Seems you have already cleared that location. No need to go there again; Undertow's enemies have not returned. Would you like to choose another location?"

9b). Conditions ....

GetIsID 'aaaQuestAgent' == 1.00 AND
GetScriptVariable 'aaaEnemyBossRef', Dead >= 2.00


9c). In the Choices window, add any other locations which have been set up so far. In my game for instance, I've got aaaFortDoublecross and aaaFortTeleman in this window. Of course, if this is the first time setting all of this up, there won't be any other locations, yet.

Also, add in that "no" topic again, so the player has a choice to opt out entirely.


10a). Quest Data tab
Time to finish up the main script. Here is what it'll look like. Again, this will be a timer script.

------------------------------------
scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay

Begin GameMode

If (Timer == 0)

If (aaaEnemyBossRef.Dead == 3)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 3)
Set Timer to 0
Set aaaEnemyBossRef.Dead to 0

EndIf
EndIf

End


---------------------------------------------------

* To summarize, the script above will start its timer after we speak to the NPC agent, and are rewarded. The dialog for this reward has not been written yet, but we'll get to that later. After the timer starts, it will reset the quest once 3 days have passed. After those 3 days have passed, voila, the agent's dialog updates, which can potentially send us off to that same lair again. In that lair, the NPC enemy respawns, along with the cell he or she is in.

** It is possible to change the timer to your liking. If 3 days seems too soon, just change the "3" in If ((GameDaysPassed - StartDay) >= 3) to some other number. Changing this to 10 will make sure dialog doesn't reset until 10 days have passed, for instance.

*** 3 days happens to be the realistic minimum here, though. Since Bethesda cells don't reset until 3 days have passed, it's pointless to make dialog which resets before then (sending us off to that same lair), if the cell itself hasn't reset yet. Only for testing purposes should you try less than 3 days. Making the script reset after one day, for instance, is an experiment you can try just to see if the original dialog resets.


10b). Save the script and close it, close the Quest window, save, bla bla bla....

These next steps are optional, and deal with adding map markers and quest targets. If you don't want to add these, skip to step 12.


11a). CELL + RENDER windows
Go into the cell where the enemy got added, and find the way out of this cell, by clicking on the lair's Door Markers. Since I chose Undertow Cavern, this isn't such a task for me. wink.gif I only have one cell to exit from.

11b). Once you are outside this cell, try to find its Map Marker. Hopefully there is one! If not, you'll need to make one. Anyway, leave this marker on-screen.

11c). QUEST window > Quest Targets tab
Right-click into the large Target Ref window and select New.

11d). Click on the Select Reference in Render Window button, and double-click on the Map Marker.

11e). Right-click > New into the Conditions box, and add GetScriptVariable 'aaaEnemyBossRef', Dead == 1.00

11f). Go back into the Topics tab and find the "Yes" response (if you added this). Add some more dialog that goes "I will mark the location on your map."

11g). In the Yes topic's Result Script box, type ShowMap XMapMarker, with "X" being whichever lair the quest pertains to. So an example is ShowMap UndertowCavernMapMarker


To summarize, by now there should be five topics in this quest: the initial GREETING, the initial topic which follows the GREETING (in which the agent explains where some trouble areas are in Cyrodiil), a topic which discusses a specific lair (Undertow Cavern, in my case). Then there should be Yes and No topics, with the "Yes" being a specific topic sending the player to a specific lair, and the "No" topic being more generic.

12). Save, goshdarnit!


13a). Time to make a second GREETING, which shows up if the PC has started a quest, but has not completed it yet. "Ah, you are back. How's your latest expedition coming along?"

Conditions ....

GetIsID 'aaaQuestAgent' == 1.00 AND
GetQuestVariable 'aaaBountyQuest', DoOnce == 1.00


13b). Use the Add Topics box to move the conversation toward the same custom topic created in step 7b. This time though, write some dialog which says "Seems you've already got a quest to follow. Finish that one up, then come see me."

13c). Copy all the conditions from the GREETING just above, and paste them into this "Seems you have already...." topic. Toggle Goodbye on, if you'd like.


14a). Time to write the reward stuff. Start a final GREETING in which the agent is glad to see us return. "You've made it back!" Give the agent a surprised look, perhaps. The agent is amazed how good our toon is.

GetIsID 'aaaQuestAgent' == 1.00 AND
GetQuestVariable 'aaaBountyQuest', DoOnce == 2.00


14b). Use the Add Topics box to link to a "reward" topic. If youv'e already got one of these made from previous quests, you can just use this again.

14c). "Here is your reward.... bla bla bla" says the agent.

GetIsId 'aaaQuestAgent' == 1.00 AND
GetScriptVariable 'aaaEnemyBossRef', Dead == 2.00


14d). In the Result Script box, type ...

Set aaaBountyQuest.DoOnce to 0
Set aaaEnemyBossRef.Dead to 3
Player.AddItem Gold001 X
Player.RemoveItem aaaQuestNote 1


Substitute .... well, you know what to do by now, right? wink.gif

The "X" can be whatever number you'd like. 200 gold, 2000 gold, whatever.

Note the RemoveItem part, which removes the note which initially sends the player off to Undertow, or wherever. If you made this note a Quest Item, now you don't have to worry about getting it out of inventory. Another option: if you want to keep this note in some desk (perhaps your character is some sort of pack rat) yet the note is a Quest Item, just type SetQuestObject aaaQuestNote -1

Now for the final touch. Since the enemy boss is not generic, he or she tends to stay wherever he/she winds up. In other words, if the boss fight causes the player-character to flee to another location (even outside the lair) and the boss gets killed in that other location, THIS is where the boss will respawn. So here's how to put the boss back into that initial room. In fact, the boss will respawn exactly where the XMarkerHeading from step 5i was placed.

15a). OBJECT window > World Objects > Static
Click on anything in the right side of the Object window, and press X.

15b). Go into the lair where the enemy boss is located (unless the Render window is still showing this boss).

Now, if the enemy is in a multi-celled lair (for instance, if the enemy is in UndertowCavern02 instead of UndertowCavern01) you'll want to get into that initial cell, in this case, UndertowCavern01. If the enemy is in a lair which only has one cell, that'll be less work.

15c). Get to the initial cell's entry door. Typically, this is going to be the very FIRST door the PC walks through, to get into that initial cell.

15d). Go back to the Object window, and drag an XMarker from this window into the initial cell. Try to place this XMarker somewhere right behind the initial door, right on its floor. Give this XMarker a Reference ID. I am calling it aaaXMarker for this lesson.

15e). Save.

16a) QUEST window > Quest Data tab
Open up the main script. And add this script anywhere onto this page between its Begin / End block...

If (aaaNPCBossRef.Dead == 1)
If (Player.GetDistance aaaXMarker <= 500)

aaaNPCBossRef.MoveTo aaaMarkerHeadingRef

Message "I have entered the lair called X. The evil, it simmers from within...", 30


EndIf
EndIf


This script will ensure that the enemy boss gets moved back where it should be, in real-time, and its message lets the player know the script has worked. The only possible remaining issue is if that enemy somehow got located outside of his/her lair. If so, another idea is to attach aaaNPCBossRef.MoveTo aaaMarkerHeadingRef into the Result Script box when the reward is given.

Using the XMarker script works most reliably though, since it's very rare the boss will get outside that lair and into the open world. This script can go anywhere within the Begin GameMode / End block. To keep things nifty, I like to put it outside of any other If/EndIf blocks. Example of the final main script is below.

scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay

Begin GameMode

If (Timer == 0)

If (aaaEnemyBossRef.Dead == 3)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 3)
Set Timer to 0
Set aaaEnemyBossRef.Dead to 0

EndIf
EndIf

If (aaaNPCBossRef.Dead == 1)
If (Player.GetDistance aaaXMarker <= 500)
[indent]aaaNPCBossRef.MoveTo aaaMarkerHeadingRef

Message "I have entered the lair called X. The evil, it simmers from within...", 30

EndIf
EndIf

End


And that is all. All sorts of dialog can be written to enhance this type of quest. Greetings and topics can be made for townspeople for instance, making them praise and glorify our character through random dialog (or curse him or her, if they happen to feel compassion toward baddies). But for the basic revolving quest itself, everything above shall send the player off to one initial lair, which can be repeated later on (days, months, years later). Replayability, that's what it's all about.

In the next post, I'm going to discuss how to add extra locations to this same quest.

Posted by: Renee Sep 29 2018, 06:50 PM

Another tip for making these bounty quests: I like to keep a Notepad page open while using the Construction Set. It helps to copy/paste three pieces of information from the CS onto this Notepad page: the note's name (aaaBountyQuestNote or whatever), the Reference ID for the enemy, plus its 'dead' variable (aaaEnemyBossRef.dead or whatever), and the quest's variable name (aaaBountyQuest.doonce). The name of the XMarkerHeading and XMarker can also get pasted onto this page.

All of this helps so that those who want to try to make these quests have an open source to copy/paste all those complicated terms from, whenever these terms are needed.

Posted by: Renee Oct 12 2018, 02:41 AM

This post goes with the one above, and is going to show how to add extra locations to repeatable bounty quests. A lot of steps get skipped, while some get repeated.

For this lesson, I already have Undertow Cavern as a solid, repeatable location. Now I am going to add Fort Doublecross.


1a). OBJECT window > Items > Book
Find the previous note which was used for your first location, and edit this note. Change its ID, its Name, and (optional) leave Quest Item toggled on. I am calling this note aaaQuestNote2 for this lesson, but its actual in-game name is "aaaDoublecrossNote" and you can name the note whatever you'd like. It helps to associate the note's name with its corresponding location, of course.

1b). Change the note's Book Text. If this text already says something like "The Count and his people wish to see the eradication of X" (X being Undertow in my game), all that's needed then is to change the name of the old location to whatever new location is being added.

1c). Click OK, saving the note as a New Form.


2a). OBJECT window > Actors > NPC
Find a generic enemy who is appropriate for the second lair you have chosen.

2b). Change ID and Name.

2c). Toggle No low-level processing off, and toggle Respawn on.

2d). Double-check AI and Factions. AI is typically going to be two Wander packages: one for Interiors, and one for Exteriors .... and Faction is really important!! If the NPC is in the wrong faction, he/she could get pwned by some opposing faction before we've even dealt with them!

Get rid of any scripts, too. Move the Script scroll-bar up to NONE.

2e). Make any other changes you wish, to Stats, Inventory, facial features, whatever. Click OK, saving as a New Form.

Tip: It helps to toggle PC Level Mult and Auto-Calc Stats off, and enter fixed numbers into Health, Magicka, Fatigue, various Attributes (etc.) for the greatest chance that the enemy will respawn with those fixed numbers. I myself prefer using PC Level Mult, which causes the enemy to level with the PC, but I have also had problems with enemies respawning improperly, with zero Health and minus Fatigue.

2f). Place the enemy into whatever cell you've chosen. Give him or her a Reference ID. For convenience, copy this Ref Id so it can be pasted into scripts later. I am calling this Ref ID "aaaNPCenemy2Ref".

2g). Time to write the enemy's death script. Start with just the script's name, and the "short Dead" function...

---------------------------------

scriptname aaaNPCenemy2Script

short Dead


------------------------------

.... save that script, close it, close the NPC's panel and Reference panel (if you're editing from the Render window). Now, open both panels (or only one if you're editing from the Object window) and find the script. Select it. Close the NPC's panel(s). Reopen them, or it. Click the script button. Now's the time to add to this script, so in total, it'll look something like this...

----------------------------------

scriptname aaaNPCenemy2Script

short Dead

Begin OnDeath

If (aaaNPCenemy2Ref.Dead == 1)
Set aaaNPCenemy2Ref.Dead to 2
Set aaaBountyQuest.DoOnce to 2
Message "The leader of X has been killed", 36

EndIf

End


----------------------------------------------------------

Substitute "aaaNPCenemy2Script" with whatever name you chose, as needed.
Substitute "aaaNPCenem2Ref" with the Reference ID of the enemy.
Substitute X with the name of the location.

2h).. OBJECT window > WorldObjects > Static,
Pull an XMarkerHeading from the Object window into the Render window. Wherever this XMarkerHeading gets placed is where the enemy boss will respawn. Give this XMarkerHeading a Reference ID. I am calling it aaaXMarkerHeading for this lesson, but this can be changed to something more specific, as per the enemy's name, for instance. The XMarkerHeading be discussed later in this post.


3a). QUEST window > Topics tab
Open up the original bounty quest's Topics tab (for me, this includes Undertow). Thankfully, the same GREETING, and the same initial topic, can both be kept as-is. So in my game, the greeting ("How fares thee? Have you come to partake of more adventuring?") and the initial topic which links from that greeting ("As noted, we've got several problem areas which have become a local menace...") can both be kept, just like they are.

3b). In the initial topic's Choices box, there should already be one topic. This topic leads to whatever specific lair has already been added. So for me, once again, this is aaaUndertow, and also aaaNo, the topic which gives an option to back out. Now, it's time to add a third topic. This topic will lead to whatever second lair you'd like to plunder.

So for example, I've already got aaaUndertow and aaaNo here. Now I'm going to add aaaDoublecross.

Tip: if you wish these topics to show up in alphabetical order once you're back in-game, it is possible to remove one topic, and add it later. For instance, "aaaUndertow" is currently above "aaaDoublecross" in the Choices box, and this is how they'll appear in-game, if I don't rearrange them. Just right-click on each topic in the Choices box and select Remove Topic. Then add these topics back in, alphabetically. So now at the top, I'm seeing aaaDoublecross above aaaUndertow. This tip goes for the "no" topic, as well. I like having "no" as the very bottom choice.

3c). Right-click > New into the Editor ID window, and add the topic which leads to the second location.

3d).
Change the Topic Text slot (if needed) so that it's plain English. And add some text into the Info window, in which the quest agent explains what's going on at the second location. "Fort Doublecross, wretched place! The peoples of Brindlehome are constantly in fear and doubt, as they wish someone to come along and rid that fort's inhabitants....!"

3e). Right-click > New into the Conditions window. Add ....

GetIsID 'aaaQuestAgent' == 1.00 AND
GetScriptVariable 'aaaNPCenemy2Ref,' Dead == 0.00


Copy All those two conditions so they can be pasted later on. It also helps to have the enemy boss on-screen in the Render window, so you can simply double left-click on this enemy when choosing the script variable's reference.

3d). In the Choices box, add a Yes and a No topic. The Yes topic should be specific to whatever lair needs to get plundered (aaaYesDoublecross in my game). The No topic can be the same, generic no that's been used previously.

3e). Add the Yes topic into the Editor ID window. Change Topic Text (if needed) and add some dialog. "Yes! Glad to hear you are interested in downing Fort Doublecross..." Optional: add some dialog in which the agent explains a marker is getting added to the map.

3f). Paste the conditions from the previous locational topic (the GetIsID and GetScriptVariable) just as they are.

3g). In the Result Script box ...

Set aaaNPCenemy2Ref.Dead to 1
Player.AddItem aaaQuestNote2 1
ShowMap MapLocation


Substitute aaaQuestNote2 with whatever you named the note.

3h). Click OK (closing the Quest window) and save.


4a). Reopen the Quest window, and go into the second locational topic (this is aaaDoublecross, in my game). This is the topic which has a Yes and a No choice. Right-click > New into the Info window, and start second dialog response, in which the agent says "But you have already been to that location. Would you like to choose another?"

4b). Conditions go like...

GetIsID aaaQuestAgent == 1.00 AND
GetScriptVariable aaaNPCenemy2Ref, Dead >= 2.00


4c). In the Choices box, add topics which lead to any location which the player has NOT chosen yet. Make sure to add the "No"choice here, too. In my game's Choices box, I am seeing this...

aaaUndertow
aaaNo

Again, if there are already several locations listed here, these can be made alphabetical.

4d). Click OK (closing the Quest window). Save.

4e). Go back into any initial locational topic which includes "But you have already been to that location" (aaaUndertow for me), and add the second locational topic into its Choices box. Add the No topic as well, keeping things alphabetical if desired. I am seeing this...

aaaDoublecross
aaaNo


5a). QUEST window > Quest Data tab
Time to add more to the main script. At the top of the script, you should be seeing something like this...

-------------------------------

scriptname aaaBountyScript

short DoOnce
short Timer
short StartDay


-----------------------------

.... now it's time to add more variable functions to this list, so that here is what you'll see at the top.

scriptname aaaBountyScript

short DoOnce
short Timer
short StartDay

short StartDay2
short Timer2


It doesn't matter which order those extra lines of text get added. It helps to organize this text to your liking, though.

5b). Click the Save icon, and close the script. Close the quest window. Save. And reopen the quest window. Reopen the script too.

Altogether, the script should be looking like this now...

-------------------------------------------
scriptname aaaBountyScript

short DoOnce
short StartDay
short Timer

short StartDay2
short Timer2

Begin GameMode

If (Timer == 0)

If (aaaNPCEnemyRef.Dead == 3)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 3)
Set Timer to 0
Set aaaNPCEnemyRef.Dead to 0

EndIf
EndIf

End


---------------------------------------------------

....but a lot of extra lines are going to get added. In fact, an entire second timer script is getting added, so that in total, it'll look like this...


scriptname aaaBountyScript

short DoOnce
short StartDay
short Timer

short StartDay2
short Timer2

Begin GameMode

If (Timer == 0)

If (aaaNPCEnemyRef.Dead == 3)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 3)
Set Timer to 0
Set aaaNPCEnemyRef.Dead to 0

EndIf
EndIf

If (Timer2 == 0)

If (aaaNPCEnemy2Ref.Dead == 3)
Set StartDay2 to GameDaysPassed
Set Timer2 to 1
EndIf
EndIf

If (Timer2 == 1)
If ((GameDaysPassed - StartDay2) >= 3)
Set Timer2 to 0
Set aaaNPCEnemy2Ref.Dead to 0

EndIf
EndIf

End


-------------------------------------

As can be seen, the top timer deals with the first quest, associated with the first enemy. Now, there is a second timer (Timer2) which is associated with the second enemy. For every new enemy / quest / quest-location, you'll need to also add a new timer script! And again, both timer scripts will reset after three days have passed, though this reset can be changed if you'd like.

Note: I have found that a maximum of five locations can get added overall. Nothing wrong with going for more than five, per NPC agent's dialog, per town (so that I've got five in Leyawiin, five in Bravil, etc). But just keep in mind that I haven't tried more than 5.

5c). Save the script and close it. Close the Quest window and save all work.

At this stage, the player has gotten the quest, the second enemy has been killed, and now it's time for a reward.



6a). QUEST window, Topics tab
The return GREETING has already been written, and won't need to get altered. Instead, go to the Reward topic. Right-click > New into the Info window, and add some dialog. "The peoples of Blankenmarch thank thee, for taking care of Fort Doublecross..." is what'll go into my game.

6b). In the Conditions window, here is what goes....


GetIsID aaaQuestAgent == 1.00 AND
GetScriptVariable aaaNPCenemy2Ref, Dead == 2.00


6c). And here is what goes in the Result Script box...

Player.AddItem Gold001 X
Player.RemoveItem aaaQuestNote2 1
Set aaaBountyQuest.DoOnce to 0
Set aaaNPCEnemy2Ref.Dead to 3



And, time for the final bits. The script below gets added to the main script, and makes sure the enemy boss gets sent back into the cell where he/she initially started.


7a). OBJECT window > World Objects > Static
Click on anything in the right side of the Object window, and press X. Now go into the Render window. Chances are the enemy boss will still be onscreen, unless you moved away from this boss.

7b). If the enemy is in a multi-celled lair (for instance, if the enemy is in FortDoublecross02 instead of FortDoublecross01) you'll want to get into the initial cell, in this case, FortDoublecross01. If the enemy is in a lair which only has one cell, it'll be less work.

7c). Get to the initial cell's entry door. Typically, this is going to be the very FIRST door the PC walks through, to get into the initial cell.

7d). Go back to the Object window, and drag an XMarker from this window into the initial cell. Try to place this XMarker somewhere right behind the initial door, right on its floor, somewhere that the character will definitely walk across. Give this XMarker a Reference ID. I am calling it aaaXMarker for this lesson.

7e). Save.

7f). QUEST window > Quest Data tab
Open up the main script. And add this script anywhere onto this page between its Begin / End block...

If (aaaNPCBossRef.Dead == 1)
If (Player.GetDistance aaaXMarker <= 500)

aaaNPCBossRef.MoveTo aaaMarkerHeadingRef

Message "I have entered the lair called X. The evil, it simmers from within...", 30



EndIf
EndIf


This script will ensure that the enemy boss gets moved back where it should be, in real-time, and its message lets the player know the script has worked. The only possible remaining issue is if that enemy somehow got located outside of his/her lair. If so, another idea is to attach aaaNPCBossRef.MoveTo aaaMarkerHeadingRef into the Result Script box when the reward is given. It is also possible to use both scripts (one for the main script, another for the Reward's Result Script box) which is best of all.

Anyway, this script can go anywhere within the Begin GameMode / End block. To keep things nifty, I like to put it outside of any other If / EndIf blocks. Example of the final main script is below.

scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay

Begin GameMode

If (Timer == 0)

If (aaaEnemyBossRef.Dead == 3)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
EndIf

If (Timer == 1)
If ((GameDaysPassed - StartDay) >= 3)
Set Timer to 0
Set aaaEnemyBossRef.Dead to 0

EndIf
EndIf

If (aaaNPCBossRef.Dead == 1)
If (Player.GetDistance aaaXMarker <= 500)
[indent]aaaNPCBossRef.MoveTo aaaMarkerHeadingRef

Message "I have entered the lair called X. The evil, it simmers from within...", 30

EndIf
EndIf

End



[b]9).[/9] Voila. Time for a glass of wine.

Posted by: Renee Oct 25 2018, 10:59 PM

Lizard Men! -- Game: TES IV: Oblivion

https://i.imgur.com/QnGNiay.png

This one is not very comprehensive. Just something neat I added into my own game.

In TES 1: Arena, there were no Argonian enemies, https://images.uesp.net//2/2b/AR-creature-Lizard_Man.gif. These were similar to the primitive, reckless creatures found in many of the tabletop games: DnD and others. I wanted to put lizard men back into the Elder Scrolls series, starting with Oblivion. Because they were in the first game, so there.

This is going to show how I got lizard men into my game, and also how I added them to Leveled Lists, so they'll appear as generic enemies. Mostly in monster and goblin lairs, but also in underwater outdoor locations.

1). OBJECT window > Actors > NPC > Argonian
Select either Male or Female, and then scroll down to the V section. Any of the Veyond Argonians can be used (VeyondArgBossMale1, for instance).

Funny thing. I never really noticed that Argonian enemies are actually pretty rare in the fourth game! But yeah, they don't appear as bandits or conjurers or any other generic enemy except Marauders, I think. This only furthers my quest to add these into the game. Lizard men are not the same as Argonians though, as we'll see.

2a). Edit one of the Veyond enemies. Change ID, change Name. Class can be changed to whatever enemy-class fits best, such as BanditMelee for one which primarily uses melee weapons.

Make any changes you'd like to Stats, but make sure No Low Level Processing stays toggled on.

2b). Factions tab
Add or remove factions that seem pertinent. I tend to think lizard men will dwell mostly around creatures, so I added Lizard Man Warrior into the Creature Faction, removing him from VeyondCaveBandits.

2c). Inventory tab
Lizard men also don't go around wearing silly town clothes, in fact, the Veyond bandits aren't wearing anything much at all. I gave my lizard a Leather Shield, a Club, and left the two Leveled List selections alone. Gave the guy Leather Greaves though, otherwise he'd be walking around in loincloths, which is even sillier-looking than town clothes. Up to you, of course.

3). Click OK, saving as a New Form.

4a). Main Toolbar > Character > Faction
The Lizard Man deserves his own faction, and for dialog purposes, it's easiest just to make a new faction, just for the lizards. Right-click > New into the Factions window.

4b). Give the faction a name. I am calling it aaaLizardmen. Yeah, real original.

4c). Name the faction (in the top-center Name slot) and toggle "Hidden from PC" and "Evil" on.

4d). In the Interfaction Relations window, right-click > New and make this faction friendly, or hostile, or somewhere in between, to whatever other factions are in the game. Since my lizard men will primarily be put into Creature dungeons, I selected this, then put 70 into the Disposition Modifier slot. With 70, there is a chance there'll be occasional disagreements between the lizards and (let's say) some goblin or rat. They aren't totally rational beings.

4e). Keep the Faction window open.

5a)
. Reopen the Lizard Man's NPC panel, click the Factions tab, and drag the faction just made into the Lizard Man's Factions window.

5b). Close the Factions window.

Dialog button

Lizard Men are supposed to be primitives. They live in their own society, away from the colloquial civilization of Cyrodiil. They are basically like slightly-more-intelligent animals, since they have their own language, and can wield weapons. This being said, it'd be rather silly if they go around saying "How does the day greet you friend?" talking like any other NPC, if they are supposed to be monsters. laugh.gif

6a). Once the Dialog panel opens up (and it can take a few seconds) the Filter scroll-bar should automatically be on the lizard's ID IF aaa is at the front of the ID's name. If this ID is not showing in the filter, go ahead and find it.

6b). Click on the Conversation tab. This tab controls all the silly conversations NPCs normally say. In the center-left Editor ID (this is the tall window) there's a long list of topics. We're only going to focus on Hellos.

6c). Left-click on Hello. Scroll down to GenericArg. The first Argonian greeting is "Blessed we are." In the Conditions window, notice that there are two conditions: only Argonians are going to be able to say this.

6d). Add a third condition, which is GetInFaction aaaLizardman != 1.00

6e). Copy this Condition, then Paste it into all the other GenericArg Topics below.

6f). Scroll down to the Generic topics which do NOT include the Player in the NPC column. The first generic topic which qualifies is "Good Morning."

6g). Paste the same condition into Good Morning's Conditions window.

Pay attention to the variety of conditions which appear as you scroll downward. "You're making me nervous, sneaking around like that" is never said by any NPC I've ever heard. The aaaLizardMan condition won't need to be pasted into this one.

Also, any racial Hellos can get skipped. The game recognizes lizard men as Argonians, but not as Imperials, Orcs, High Elves, etc.

Any Generic Hellos which feature low Disposition ratings can also get skipped. Anything below 20.

6h). Click on the Combat tab, and click Attack in the Editor ID window.

Some of these Attacks can be kept. Anything not in plain English, for instance, such as "Huuagh!" or "Arrgh!" could potentially be said by a primitive beast. Anything English though, can get removed from lizard men dialog by pasting the same condition which was pasted into the Conversation tab topics.

Again, a lot of these Generics can be skipped. The lizard man character is not an elf for instance, so it's pointless to paste the GetInFaction aaaLizardman != 1 condition in.

6h). Detection tab
Every single selection in this tab will need to have that same condition pasted in. Good news is though, the job is finally done.

6i). Click OK, closing the Dialog panel, click OK on the NPC panel, and save.


Time to add these lizards into the game. If put into Leveled Lists, they will show up randomly

7a). OBJECT window > Actors > Leveled Creature
Find any list the lizard can possibly get added to. Since these lizards are friendly to goblins and monsters in my game, I started with LL0Goblin100. Double left-clicked on this selection.

As can be seen, there are three possible goblin-types which can appear in this list, all of them Level 1. Any instance of LL0Goblin100 (in a goblin lair or outdoors) will cause one of these three types to show up 100%

7b). Right-click > New into the window, and find the lizard man, or a lizard man. In my game so far, I've got aaaLizardmanWarrior and aaaLizardmanSwimmer (the underwater / swamp version). Swimmers don't carry weapons or shields, but are good with Hand-to-Hand. wink.gif Now, there is a chance one of lizards can show up, along with any one of those three goblins. Basically, there is a 25% chance the lizard will appear from that LL0Goblin100 list.

7c). The Level slot can be changed if desired. For instance, if the lizard man is not to appear until the PC is Level 6, this can be changed from 1 to 6.

7d). The Count slot can also be changed. By default, one lizard man (or one of those goblins) will appear from that list. If the slot is changed to two, now two will appear instead of one.

7e). Click OK. Save.

7f). Continue to scroll down the entire list of enemies, adding the lizard into whichever lists seem appropriate. Since Argonians can stay underwater indefinitely, I put the swimmers into some LL0WaterShallow and LL0WaterDeep lists, so they'll occasionally replace mudcrabs and slaughterfish respectively.

Posted by: Lopov Oct 25 2018, 11:25 PM

Nice! goodjob.gif I'll be using this mod when I come back to Oblivion.

QUOTE
but also in underwater outdoor locations.


So it's possible to encounter them in Lake Rumare too?

Posted by: Renee Oct 26 2018, 12:04 AM

QUOTE(Lopov @ Oct 25 2018, 06:25 PM) *

So it's possible to encounter them in Lake Rumare too?

If there are generic slaughterfish which swim in there, yes. I know that the infamous slaughterfish from the Weye quest are quest-specific though, so these lizardmen will not replace those. But yes, I did set it up so that "swimmer" versions show up in either shallow water areas (replacing mudcrabs occasionally) or in deep water areas (replacing slaughterfish occasionally).

The really COOL thing is, in theory, the lizards should be able to detect our characters from underwater, meaning they'll be able to emerge from the deep! ... Theory though for now. Has not been seen yet.

Posted by: Renee Oct 28 2018, 02:08 AM

Making an NPC Vendor / Repairist. Game: TES IV: Oblivion

I've got a recurring problem in one of my games, which is a lot of merchants tend to lock their doors at night, and then sometimes never reopen them. And if I use the Unlock console command, what I usually find inside is an empty shop, with no shopkeeper(s). This problem has something to do with Open Cities I think. I don't know. And I do not have much desire to delve into the Open / Better Cities conglomeration of mods. Instead, I'm going to make my own merchants. Surprisingly, making a merchant in Oblivion is much easier than it is in later games!

In Bruma's Nord Winds shop (in Renee Gade III's gameworld only), Skjorta shows up for work, but Ofland never does anymore. Perhaps he got pwned. Or perhaps he got sick of being in Bruma. Now he's in Skyrim. I don't know. Since Renee Gade III got kicked out of the Fighters Guild, and since the smith who runs Hammer and Axe also seems to have joined Olfland, nobody can repair RG3's gear in this town.

I know I can just use console commands to find these guys and bring them back, but screw it. My PC game needs new faces. I decided to make a young NPC named Olfland Junior, who takes over his father's shop.


1). OBJECT WINDOW > Actor > NPC
Find a named NPC who is also a merchant. Do all the usual: change ID and Name, bla bla.

2). Class can be MerchTrader, or change it to MerchSmith.

Note: If PC Level Offset or Auto-calc stats are toggled, this will automatically cause the NPC's Skills to change depending which Class they are. Skills can also be set manually, by toggling both PC Level Offset and Auto Calc Stats off, and then highlighting the skill, pressing F2, then choosing whatever number desired for that skill.

3). Since I am editing a named NPC, it's important to remove any AI they've got, so they don't wander off to Skingrad or wherever. Also, put the NPC into any Factions which are appropriate to where they live.

4). Click OK, closing the NPC's panel. Save as a New Form.

5). Reopen the NPC and click on the AI button.

I am going to make this NPC very "light" on AI. Olfland Junior will basically stand in Nord Winds by its forge 24/7. indifferent.gif He won't go anywhere, he won't even eat or sleep. But one thing he will do is BE there in Nord Winds, so my character and her friends have somebody to buy, sell, and repair stuff from.

6). Right-click > New into the Editor ID window. Give the AI Package an ID, and put Package Type on Wander.

7). Offers Services should be toggled on. VERY important, and easy to overlook this! Click OK.

8). All the various Buys/Sells toggles can also be turned on or off: Weapons, Armor, Books, etc.

9). Change Barter Gold to whatever you'd like. Oldland Junior is in charge of 1000 gold. Quite a responsibility for his 19 year-old self.

10). If the NPC is to Recharge and/or Repair, toggle these on.

11). Click the Save button.

12a). CELL + RENDER windows
Put the NPC in to the cell where he or she will do business. Olfland Junior goes into Nord Winds, by its forge area.

The job is basically done, assuming you just want the NPC to buy random stuff. That is what the "Offers Services" toggle does: it makes them buy random things. If more specific things are to be sold however, continue to the next step.

13). Move into an area of the cell which is not going to be inhabited by anybody. So...out in the void somewhere. We're going to put a vendor chest out into this void, where nobody can steal stuff from it. Bethesda tends to put vendor chests beneath the shop itself.

14). OBJECT window > WorldObjects > Container
Left-click into the Editor ID window (so you've highlighted one of the containers) and type VEN. This should automatically send you down to the VendorChest area, starting with VendorCFightingChance. Any of these chests can simply be edited, for quickest results.

15). Drag the chest into the Render window, out into the void. Left-click on the chest (so the Reference panel opens). Click on the Ownership tab, and find the NPC vendor in the NPC scroll-bar.

16). Put a Reference ID into the appropriate slot, and toggle Persistent Reference on. Click OK.

17). Reopen the chest, either from the Object window or Render window. Drag salable items from the Object window into this container's main window. Bethesda tends to use their hidden vendor chests to sell unique objects. If you choose to do the same, make sure Respawn stays toggled OFF. Click OK.

Conversely, if the merchant is to sell random things as well as buy them, toggle Respawn on, and drag some Leveled List stuff from the Object > Items window. Specific items (not from lists) can also be dragged over.

18). Find the vendor in the Reference window, and double-left click on him or her. Click on the Merchant Container tab.

19). Use the Cell scroll down to find the cell the vendor chest is in. Then use the Reference scroll-down to find the vendor's unique chest.

20). Click okay, and save. Done and done. Oops, I forgot to make sure the shop's door unlocks and locks.

21). Go back into the NPC's AI button and find the package which is on while they are offering services. Let's say the shop is to open at 8 am, and stays open for 12 hours. Toggle...

At Package Start: Unlock Doors on.
At Location: Unlock Doors on.
At Package End, Lock Doors can be toggled on.

22). Find the shop's main door, and double left-click on it. Don't go outside though, stay inside and open this door's information.

23). Click on the door's Ownership tab. It will be owned either by a single NPC, or a Faction. If it's owned by a single NPC who is no longer around, easy. Just make the door owned by the new person. If it's owned by some faction, the NPC can simply be included into this faction.


click OK, click Save, click OK, and save. NOW we're done.

Posted by: Renee Oct 29 2018, 12:17 AM

SEQ Files, Game: TES V: Skyrim

Requires the TESVEdit program.

This one is not about modding per se, it is about an important step one must take for quest-making, though. SEQ stands for "Startgame Enabled Quest." SEQ Files must be updated every time a new quest gets made for a particular .esp in the Skyrim Creation Kit. Otherwise, the game may not even recognize that a new quest is there, in this .esp.


1). In Skyrim's Data folder, look for the SEQ folder. Make sure it is there. If there is no SEQ file, one can be created in the Data folder, literally by right-clicking > New into the Data folder, and then naming the new folder SEQ.

2). Open TESVEdit. (link?) Right-click on any of the files which show up, and left-click None.

3). Find the mod you're working with, single left-click the mod's checkbox, and press OK. Do NOT double-click it, or it won't load properly.

4). After the mod loads, right-click onto the mod's name and select the very bottom selection , which is "Other." Left-click on Create SEQ File.

5). Close the TESVEdit program by left-clicking on the red X up in the upper-right corner. A final panel shows up which lists our mod with a check-mark next to it. Click OK.

6). Go into your Skyrim > Data > SEQ folder and see that your mod now has its own SEQ file. Hopefully it does.

If you've already made an SEQ file in the past, hover your mouse-cursor over this file, and make sure that it has today's date on it. This indicates that the file has been updated.

Posted by: Renee Nov 11 2018, 04:32 PM

Making FOMODs through Fallout Mod Manager

This post is going to discuss making FOMODs for the Fallout Mod Manager version which is found here, https://www.nexusmods.com/newvegas/mods/36901/. There could be other versions of FOMM which are easier, I don't know. Without the notes below though, I would be lost if I tried to make another FOMOD again. Making FOMODs for Fallout is a hell of a lot more involved and even stressful than making OMODs for Oblivion, I have found so anyway. I have heard others say the same, too.

The following assumes an archive file was downloaded, its author is promising a FOMOD can be made from this archive, and now you're going to make this archive into a FOMOD. Not all mods will need this method, of course; only those which are supposed to have their installation simplified by the FOMOD process. Only those which are more complicated than usual, in other words.

1). Open Fallout Mod Manager

2). On the right side of this program, click Package Manager.

3). Again, on the right side, click Create FOMOD. Wait a moment or two.

4). A new panel *POPs* up with two main windows, which is called FOMod Builder Form. It is easiest to just drag the archive into the Source Files window. We can also click the Add Files button and search for the archive this way.

5). Double-click on the archive (opening it up in the Source Files window).

6). Now, drag any folders, files, and readmes over to the FOMod Files window. rolleyes.gif See? More complicated for some reason. Neither OBMM nor Wrye Bash / Oblivion has me doing things so manually. Anyway...

7). Go back to the archive file. NO, not the archive in the FOMod program, go back to the archive in your Downloads folder, or wherever your original archive has been saved. Right-click on this file and choose Rename. Now copy / paste this name into the long, rectangular box where it says FOMOD File Name (without extensions).

Try clicking OK in the lower right corner, and be patient while the program does its work. Chances are some errors will show up, but hopefully one of these is not the FOMOD File Name.

8). Now, have a look at the left side of this panel. The 'Sources" button should be greyed-out. Click on the Download Locations button. IF the chosen mod came with pre-made FOMod stuff (like MMM does) simply click the "Included" toggle on. ... Do not mess with Hidden or General, both of these are for more advanced modders.

9). Click on the OK button again. Chances are some errors will be found, and again, allow the program to list them, because some FOMODs make certain changes that others do not.

For instance, if "FOMod Info" has an error, it's usually because of empty boxes that haven't been filled in, like "Mod Author" and "Version." Go ahead and fill in this info manually, but some of the stuff can be left blank. Click OK again. The program will warn that some stuff hasn't been filled in, but we don't always have to do this.

If the "Readme" area has an error, this is simply because any Readme file(s) have not been moved over to the FOMOD Files box. rolleyes.gif Even though we're supposed to be able to pick and choose this sort of stuff.

If the "Save Locations" area has an error, go ahead and click on this button and choose the Create FOMOD toggle. As can be seen, there is a "Premade FOMOd pack" toggle as well, but I haven't been able to get it to work, even though MMM is supposed to include premade FOMod stuff. rolleyes.gif Be patient!

10). If everything goes right, a new panel will *POP* up with two bars, which should be compressing information, turning green as progress commences. In some cases, these two bars won't show up though, because there isn't any stuff to compress. huh.gif

11). Be patient. If everything goes right, the previous FOMOD Builder panel will close (along with the progress panel) and we'll be back on the Package Manager panel, with our new FOMOD available as a one-click .esp or .esm choice. Go ahead and one-click (or double left-click) on it. If this doesn't work, highlight it, then press the Activate button.

12). Every FOMOD does this next part differently. Just go through all the choices that come up, clicking "Next" when you're ready to move to the next option. MMM, for instance, includes a choice of making the Configuration Menu either an in-game deal (similar to Skyrim's MCM Menu) or it uses an older method of ESP choices.

13). Click Finish whenever the choices sequence is done. If the mod is wanting to overwrite anything (MMM asked if I wanted to overwrite a variety of meshes, for instance), the cool thing is Fallout Mod Manager will let us know if we want to do this.

14). Close the Package Manager by clicking the red X in its upper-right corner.

15).
Now we're back on the original FOMM program. Double-check to see that any .esps we chose earlier are clicked on.

16). Close the program, https://loot.github.io/ and re-open it to make sure everything is still there

Posted by: Renee Dec 1 2018, 06:40 PM

`
Making an NPC follower Game: TES V: Skyrim

Firstly https://www.youtube.com/watch?v=BFHbusKVqZ0 shows how to make an NPC, it goes through all the different features of the NPC panel, Stats tab, Factions tab, etc. If watching videos annoys you, Bethesda has their own https://www.creationkit.com/index.php?title=Bethesda_Tutorial_Creating_an_Actor.

Second, I use https://www.nexusmods.com/skyrim/mods/15524 for the quest component of my followers. What I am about to describe below is merely how to make an NPC follower, not the dialog / quest part of it (wait, follow, etc.). I have found that AFT does the job just the way I'd like. AFT also has a feature (a spell, basically) which can automatically make a lot of NPCs into followers. So all the stuff below is just for gamers who want to custom-make an NPC follower from scratch.

https://www.nexusmods.com/skyrim/mods/16266 is also recommended. Helps them say more things. I have found that not all the voices listed in this mod work, but I have listed the ones that do below.


1). OBJECT window > Actors
Make a New NPC in Object window. Type an ID, a name, and a short name.

2). Make this NPC Unique. This is the most important button for now, on this first page. You might want to make him/her Essential as well, but the Respawn toggle is optional.

I made several generic followers for Sir Vyvoor for instance (a warrior, archer, and spellsword). These followers begin their lives in Windhelm's palace, and in case any one of them gets pwned, another one will eventually respawn in this palace.

Note: sometimes it helps to click OK (closing this new character window) and then reopen it. Otherwise, "Unique" and other selections will keep getting toggled off.

3a). Traits tab: Choose Race, Sex, etc.

3b). Give the NPC a voice in the Voice Type scroll bar. This will make them speak when we tell them to "wait" or "follow", etc. I have found that most voices do not work in the base Creation Kit, even that voice mod linked above. There are two ways to figure out which voices will work, and which do not. The first way is rather blind. Experiment by choosing a voice type, and then going back in-game to see if it works.

The second way to do this is much more specific. In the Object Window, find the Miscellaneous section, then choose FormList. Type "voice" in the Filter slot, and scroll down to VoicesFollowersAll. There are a total of seventeen voices that are guaranteed to work for followers.

MaleEvenTonedAccented
FemaleSultry
MaleDrunk
FemaleDarkElf
MaleDarkEfl
MaleNord
FemaleCommander
MaleBrute
MaleArgonian
MaleKhajiit
FemaleOrc
FemaleCondescending
MaleEvenToned
FemaleEvenToned
MaleYoungEager
FemaleYoungEager

3c). Raise Disposition Base from 35 to anywhere above 50, unless for some reason that follower is supposed to hate our character.


4a). Stats tab: Click PC Level Multiplier if you want somebody who will level with player, or Auto Calc Stats for soembody who is outside these bounds.

4b). Choose their Class. This is a scroll bar at the very bottom.


5a). Factions tab: very important. Right-click on this window and choose New. Filter the word "follower" and choose Current Follower Faction and Potential Follower Factionn

5b).
Current Follower Faction will need to be -1, meaning the NPC is not a follower yet. Change this from 0 by left-clicking under Rank, and pressing F2. Highlight 0 and type in -1.

Tip: when making multiple followers of the same type (soldiers or guards, for instance), it is possible to set a bunch of factions for one NPC, and then copy all these factions for the next one. Just right-click > Copy Stack from the first NPC, and Paste Stack to any others. Done.


6). AI Data tab: Make the NPC Aggressive if we want him / her to fight. Very Aggressive is only recommended for somebody who can possibly be an enemy to citizens. Also, choose Help Allies. We can go back to the Faction tab to see everyone this person has in his / her Faction.

Note: "Help Friends and Allies" may make the NPC jump into too many battles.


7a). Inventory Tab: we can give them a Default Outfit. Click on the Preview > Full button to see this in real-time. Amazing Follower Tweaks has a neat feature which also allows us to select an outfit which the NPC will wear when he/she is relaxing, which is a way to get them out of an armor suit.

7b). To give the NPC a weapon, click in the middle window > New, and then scroll down whatever object(s) you want. WeapIronDagger or whatever.

... also visit the Spells tab, if the NPC is to be a magic-user.


8). Click OK to save the NPC to the Object window. NOW THE NPC IS MADE, however, it is NOT yet a Follower


9a). In the Object window, go to Character > Relationship. Right-click on the window and select New. It helps to create a Relationship ID with a similar name as the NPC ID, just for convenience. We cannot make this ID exactly the same as the NPC's ID though.

9b). Under Parent NPC, find the name of the NPC, and choose this. This does not mean we are the NPC's parent, ha ha. It merely means we are the one who calls the shots for this NPC, when he/she is following.

-- Child NPC: Find "Player" for this.

-- Relationship Level: select "Ally".

-- Association Type can be left to NONE in most cases, unless we want to further define the NPC somehow.

DONE. To double-check all work, go back to the NPC just created, and look under the Relationship tab. It should have a Player reference here. Now, simply place the NPC where he/she is to begin.


Troubleshooting: if there is no dialog option when the NPC is spoken to in-game, make sure Additional Follower Voices is toggled on in your mod manager. Again, not all this mod's voices work! The NPCs will also not actually speak 100% of the time. I have found that sometimes they speak HELLOs, and sometimes Topic dialog added by AFV, but lots of times they won't.


some Amazing Follower Tweak options:

-- To enable outfit management: Once you're back in-game, talk to the NPC, select Tweak Options > Gear > then scroll all the way down. Toggle Enable Outfit Management on (if it's not already on) and then there are some different choices for City Outfit and Home Outfit. "Home Outfit" might just be them not wearing much at all, and I'm sure there's a way to change this. Basically, there are dozens of options AFT offers, too many to list here!

--There are also ways to get ALL followers to do something at once, manually or remotely. To manually do this, talk to the NPC, select Tweak Options > Actions > then scroll down to the ALL Followers section. We can make all of them follow us, wait, sandbox (relax) and so on.

--To command all followers remotely, got into your character's MAGIC menu, select POWERS, then scroll down to Tweak Commands. Hotkey this. When we're back in game mode, that hotkey toggle will work via the Shout button by default. All followers can be told to Wait, Follow, Relax, etc. Neato!

Posted by: Renee Dec 5 2018, 02:59 AM

Making an NPC Vendor Game: TES V: Skyrim

1a). OBJECT window > WorldObjects > Containers
Left-click into the Editor ID window and type Merch so all the merchant chests show up.

1b). Find a chest that sells things which you'd like the merchant to also sell. Duplicate this chest.

1c). Rename its ID, click OK. And select "no" when the CK asks if you'd like to make this chest into a New Item (since it already is a new item), and confirm this by clicking Yes.

1d): Go into this container's inventory and change anything you'd like. I duplicated VendorMiscChestSmall, which contains several Leveled List items.

Note: Make sure the Respawns toggle stays toggled on, so the merchant will restock their store.

It's a good idea to right-click > New into the Item List window, and add find VendorGold X in the scroll-bar, with the X being "Apothecary", 'Inn", and so on. Since I need a general merchant, I am choosing VendorGoldMisc, and then changing Count to 1. This will give the vendor 750 gold to play around with, though sometimes other mods will cause this amount to vary. Gold can also be added directly into the NPC's inventory window as well, after this NPC is created. Any gold added here will not vary.

1e). If there are any leveled items in the container's inventory which say anything to do with "PerkInvestor X" go ahead and remove these. Since the container was duplicated, sometimes this perk will hitchhike along. Since these perks are already associated with other merchants, we don't want to influence these others with our custom merchant. That can mess up things on their ends.


2a). CELL + RENDER windows
Drag the container into a cell where the vendor will be placed. Put it into the void though (outside of character reach), unless you want there to be a chance that the player will choose to try stealing from this chest. emot-ninja1.gif

Make sure the chest stays onscreen.


3a). OBJECT window > Character > Faction
Right-click > New into the window. Give the faction an ID and Name.

3b). Make sure the General tab is selected. If the vendor will be running his/her own shop or stall, click the Can Be Owner toggle on. This is not important for NPCs added into cells which are already inhabited by other vendors though. For instance, I wanted to add a general vendor into Dawnstar's Mortar & Pestle. Frida (the default merchant there) will gladly buy & sell apothecary stuff like potions and ingredients, but I want somebody else in there who will buy general stuff. This second NPC won't need "Can Be Owner" toggled on.

3c). Vendor tab: toggle Vendor on. And click on the Select Reference in Window button. Double left-click on the merchant's chest.

3d). Put some numbers into the Start Hour and End Hour slots. These numbers correspond to hours in the game, however they must be added in military time .... i.e., 18 instead of 6 pm. If times are not added into these slots, the NPC will not buy or sell at all.

3e). Change the Vendor Buy/Sell List to whatever is appropriate. Since my merchant will buy and sell general stuff, I changed this to VendorItemsMisc.

Note: when choosing VendorItemsMisc, toggle Not Sell/Buy on. This keeps them from buying & selling stuff which should not get bought or sold (such as keys).

3f). Click the Location button and choose Near Self. (Note, we can also choose Near Reference, and I will explain why this can sometimes be chosen later). Click Ok.

3g). Click OK, closing the Faction panel, and save all work.


4a). OBJECT window > Actors > Actor.
Right-click > New into the Object window. Do all the usual: ID, Name, and Short Name.

4b). Toggle Unique on, and click OK (this closes the NPC's panel). Now reopen the NPC's panel.


5a). Traits tab: choose a Race. And choose a Voice Type in the scroll-bar.

Note that not all of these voices will work in-game, and if they don't work, sometimes this can screw up the onscreen dialog as well. It helps to make sure the NPC's voice will work. So since I am making my NPC a vendor, here is what to do.

5b). Object window > Miscellaneous > FormList
Type "voice" into the Filter, so that the window focuses on Voice Types. There are dozens of results in the window now.

5c).
Scroll down to VoicesVendor and double left-click on this.

The FormList panel pops up, and this shows all the voice types which are "safe" to use. There are quite a few. Since my NPC will be an ordinary Nord, I can see that MaleNord is indeed safe to use. Why is this important? It's important because choosing the right voice will guarantee the NPC will say all the things vendors usually say: "You lookin' to buy something?" "Trinkets, odds and ends, that sort of thing," and so on. If they haven't got the correct voice type, they won't say anything. And while to some of you this might be a small blessing, I'm not sure if they'll also be able to participate in buying / selling stuff. sad.gif

5d). Click OK, save. And reopen NPC's info again.


6a). Stats tab: Choose PC Level Mult to make the NPC level with the character. Choose Auto-calc stats (and then give the NPC a level in the Level slot) to make an NPC who will pertain to a specific level. Or choose neither of these, and customize the NPC in the Skills window.

6b). In the Class scroll-down, VendorPawnbroker is a good class for a general merchant. There are also classes geared toward Smiths, Food, Alchemy, and so on.

Notice that when each class is chosen, this will change some of the numbers up above in the Skills window, if Auto-calc Stats is toggled on.

6c). Go through the rest of the tabs as you see fit, giving the NPC some AI, some clothes, some personal objects, and so on. Note that items in the Inventory tab's main window COULD get sold, if the NPC deals in this type of vendoring. For instance, if the NPC is to sell potions, any potions in his/her inventory can get sold as one-time items. This is useful for adding rare, possibly expensive items for sale.

6d).. Click OK and save.


7a). Reopen the NPC vendor's info and select his/her Factions tab. Drag the new faction from the Object window into the NPC's Factions and Ranks window. Right-click > New into this window too, and find the JobMerchantsFaction. These two factions alone are all that's needed for a basic merchant. Our custom faction makes sure the merchant will sell & buy from and to the right container, and the JobMerchantFaction makes sure the NPC will say all the things vendors usually say.

Note: Blacksmiths should not be added into the BlacksmithFaction. JobMerchantFaction will handle all their merchant duties.

It's also a good idea to add one of the crime factions, such as CrimeFactionPale, which is what my vendor will have. This will cause the NPC to freak out and give us a bounty if we get caught stealing something, or attack the NPC. Below the Factions and Ranks window, change the Assigned Crime Faction scroll-bar from None to whichever crime faction was added. Now.... depending how much Confidence this NPC has in her or his AI Data tab, this NPC will either run away if Cowardly is chosen, attack our character if Foolhardy is chosen, or somewhere in between.

A town faction (such as TownDawnstarFaction) might also be a good thing to add. This helps the vendor become part of the town itself, meaning they'll get involved in various things those townies say.

7b). Make sure any factions which are supposed to be "on" have a 0 next to them, under the Rank column. If there's a -1 in this column, change this by highlighting the faction, pressing F2, and changing this manually to 0.

7c).. Click OK, closing the NPC's info, and save.


8). Place the NPC into the cell where the container was added.

The work is basically done. Below are some tips which will make the vendor sell things which are right there in the store. As we buy these items, they will disappear from the store! They will also respawn when the store or stall's cell respawns. Neato.


9a). Grab 'n' drag any items from the Object window, into the Render window, and place these items onto any nearby surfaces. Double left-click on these items in the Render window, and select one of the Ownership tab's scroll-bars, selecting either the NPC vendor, or his/her faction.

9b). Double left-click on any object near where the NPC which cannot be sold, such as a counter or a table, where the vendor will do all vendoring.

9c). Give this object a Reference ID. Click OK.


10a). Double left-click an unsalable object (such as a counter or stall where the NPC will be vendoring) and give this object a Reference ID. Now, make sure this object (counter, stall, whatever) stays onscreen.

10b). Reopen the NPC's custom faction in the Object window, select the Vendor tab, and press the Location button. "Near Self" is toggled already, from step #3f. Change this to Near Reference.

10c). Press the Select Reference button and double left-click on the counter, stall, whatever.

10d). Put a number into the Radius slot, such as 256 or 512. Now, any referenced items placed nearby can be bought in real-time once we're back in-game, and if we can see these items onscreen, they will disappear when bought. smile.gif

Posted by: Renee Dec 15 2018, 02:39 AM

Making a Book bump a quest stage Game: TESV: Skyrim

This post assumes you've already written a quest (even if it's a partial quest) or have an idea for one. And then a book gets used to bump one of this quest's stages, objectives, and so on.

1). Start up the Creation Kit. Edit or Duplicate a book or a note. Give it an ID name and an actual Name. Change its Book Text.

2). Close and save the book as a New Form if you edited it, or don't do so if you duplicated it.

3). Reopen the book/note. In the Scripts section, click the Add button.

4). Type OnRead into the Filter. Two pre-made scripts will show up under [New Script]. Select the second one, which is DefaultOnReadSetQuestStageNotAlias.

Again, make sure you choose the NOTAlias version. For some reason, the first script will not work.

5). Click OK.

This attaches a generic script to the book which has been pre-written by Bethesda, which saves us a lot of time because we don't have to type the entire script!

6).
Go ahead and right-click onto the script, and select Edit Source to have a look at all the text we didn't have to write. How lovely. Thanks Beth, for finally making our scripting endeavors easier.

Close that script when you're done.

7). Click on the Properties button. A panel pops up which should have a couple items in its window: myQuest and myStage. By now, you're going to need to have a partially-written quest already extant.

8). Highlight myQuest. Press the Edit Value button. Look for the name of your quest in the scroll-bar, and select this.

9). Now highlight myStage, press the Edit Value button, and choose the stage which you'd like the quest to bump to, once the book is read.

10).
Click OK, closing the script, and click OK again, closing the book. Or Note. Save, and that should be all.

Posted by: Renee Dec 17 2018, 12:02 AM

Skyrim Quest Tutorial

So this one is sort of like an introduction to Skyrim quest-making. It rambles a lot, it's not very focused, but itintroduces a bunch of basic concepts, and shows how to use a lot features in the Quest windows. Because making quests in the Creation Kit is waaaaaaaaaay different sometimes than making quests in earlier programs. I wrote all this last year, so for me this is a refresher course, because I don't play Skyrim year-round, so I forgot a lot of stuff.

At the moment, I'm wanting to make a simple quest which gives Sir Vyvoor a horse, which will take place in Whiterun. I know he can just pay 1000 gold and buy one, but wouldn't it make sense that the Dragonborn, which is what Vyvoor is, should just get a free horse? viking.gif I mean, c'mon.

Quests can vary wildly of course. In this one, I already know I'm going to need a note, a horse, and a new NPC. The note is what begins the quest, and the NPC is going to be who my character speaks to. Pretend I am making a note and an NPC therefore. I won't write it all up. Basic notes are pretty much the same as from previous games, they can be edited from premade examples, then placed somewhere in the world. NPCs however, are best started from scratch, especially if this NPC is going to participate only with our quests.

How to make a note and an NPC are described in posts above this one, and the horse will get discussed at the end of this post.


1a). Open Creation Kit. File > Data > open the mod you want, if you're already working on something. If you're not, just double right-click on Skyrim.esm.


2). Object window > Character > Quests. All those yellow icons in the right window pane are quests. Right-click > New into this window.

3). Give the quest a unique ID name, and Quest name. Priority is good at 60 for this tutorial, though it will vary in the future, for some other quests you might write.

4).
Next to ID is a function called 'Type,' which is a scroll-bar. In most cases, we can just choose Side Quests or Miscellaneous. Miscellaneous quests will go into that bottom section of the Current Quests window once we're back in-game, and this is the place for lots of easy things to do, like Fetch or Kills. For this one I am choosing Side Quest.

*Note: to make an NPC who one-lines us with forcegreets (and that is all, this NPC cannot be spoken to more thoroughly) leave the scroll-bar at None. ...

5). Object Window Filter: leave this slot blank.

6). Event is another scroll down. We can leave this on NONE for now.

7). Toggle Start Game Enabled on if it's not already on, leave other toggles blank. In some cases, toggle Run Once on too, if it's not already toggled.

8
). In the Quest Dialog Conditions window, select New, then GetIsPlayableRace == 1.00

9). Close the Quest page by clicking OK. This will allow more tabs on the very top of the page. Once it is closed, SAVE all work. Now re-open the quest.


10a). QUEST STAGES tab
In the Index window, make stages 0, 5, 10, and 20, 50, and 100. Always leave some space between these numbers (don't put 1, 2, 3, 4.... etc.). This way, if you need to add more stages later on, you can put them easily between the ones you've already go.

Stage 0: Left-click on 0. Right-click into the top Log Entry window and do nothing else. It'll say EMPTY. Leave it just like that. Toggle Start-Up Stage on.

Stage 5: Enter an initial Log Entry for 5 (or whatever you put first) by right-clicking > New into the Log Entry window, and then type the first update into the Log Entry box below. Unlike the GECK, whatever we write into the Log Entry box is going to show in-game. In the Papyrus Fragment box, type SetObjectiveDisplayed (5)

The way this quest is going to work, the player finds the note written at the start of this quest. This note is what bumps the quest from 0 to 5. The lesson on how to do this is in the post above this one, so go follow those instructions (if this hasn't been done yet), then come back here.

So two stages are written so far. I will come back to this tab later.

DIALOGUE VIEWS and PLAYER DIALOGUE tabs
In that note, I wrote some dialog explaining who left the note, and to come see her. Again, this is Stage 5. When the player finds whoever left that note, my character will have a conversation with her.

Unlike the Construction Set and older versions of the GECK, in the Creation Kit there are two ways to structure dialog: the Dialog Views tab and Player Dialogue tab. Dialog Views introduces a very visual layout to see dialog (and how it can branch in different directions) as we're adding it. The Player Dialogue tab is a more old-fashioned way to lay out text, though it's also not laid out the same way as in the CS and GECK. Either tab can be used, whichever the modder feels more comfortable with.

11a) Let's start with the more-visual Dialogue Views windows. In the vertical left Editor ID window, right-click > New, then type aaaQuestNameDialogIntro. "Quest Name" can be whatever ID name was chosen in the Quest Data tab. Click OK. Now highlight that text in the Editor ID window, by left-clicking on it once.

11b). In the larger, blank window, right-click > Create Branch. Give the ID for this Branch name like aaaQuestNameStartBranch. Click OK. The CK will automatically add the word "Topic" after this.

11c). Click OK again. A yellow box should *POP* up in the larger window. If it doesn't, just click on another tab (such as Quest Data), return to the Dialog Views tab, highlight the topic name (aaaQuestNameDialogIntro) in the Editor ID window, and the yellow box should show up in the larger right window.

Note: Though I am teaching how to do this in the more-visual Dialogue Views page, keep an eye on what's happening in Player Dialogue as well, just in case you're more comfortable using this page. I actually prefer the older way of doing this, but for this very reason that's why I'm reminding myself how D. Views works.

11d). Double-click in the grey area inside the yellow box. Wait for it. Now a Topic page should open.

11e). The Subtype scroll-bar should stay as Custom, though in the future it is also make this dialog topic into a ForceGreet or Rumor.

11f). "Do all before repeating" is a toggle which works similar to the "Random" toggle in the CS; i.e. the NPC who says this stuff will say something different every time we click on their topic. Since I am writing a one-time quest which gives my toon a horse, I'm not toggling this on.

11g).
Topic Text is similar to what is in the CS as well. This is what we can click on as we speak to this NPC in-game. Priority can be left at 50.

11h). Double-click in the large Info window so that a New Response page pops up. The Response Text is what the NPC will say when we click on that topic.

11ii). Script Notes is sort of like a "notes to self" sort of area, which has nothing to do with in-game stuff at all.

11j). Idle Animations has a scroll bar for Speaker and Listener. And this will cause the NPC or PC to do certain things (such as gesture, clap hands, etc.) when dialog is being spoken. In most cases, both of these can be left at NONE.

11k). Give the NPC an Emotion and Emotion value, and click OK. A larger Topic Info page now pops onscreen.

11l). Prompt was first used in the GECK, and now we've got it in the CK. It is an overwrite feature, which will replace the Topic Text above it. Prompt will railroad the player into a specific discussion, so if you choose to add a Prompt into dialog, you won't see Rumors or any other choices at this moment, once you're back in-game.

Again, those who are familiar with Prompts in the GECK already know how it's possible to use the same topic over and over again, merely writing up new prompts for the player to click on, instead.

11m). We can see the Response Text we added a moment ago, and we can add more Responses by right-clicking > New into this long horizontal window.

11n). Conditions is similar to the CS. GetIsId is the default condition for this small page, which makes things SO convenient, since GetIsID is the most common condition. We can also put GetStage and other typical functions for this area.

Now comes the weird part. To make the dialog show up onscreen once we're back in-game, a Sound File must be made for the dialog which was just typed, otherwise the text will remain onscreen for literally a millisecond. Now, this sound file does NOT need to have any actual sound, that's the good thing. smile.gif

11o). Double left-click on the first Response Text which was just typed up, so the Edit Response panel pops up. There should be a Voice Type listed in the bottom window which corresponds to the NPC who says this dialog (MaleNord, for instance). If there isn't anything in this window, you'll need to go back to the NPC and make sure an appropriate Voice Type is chosen.

11p). Highlight this Voice Type. Now click the Record button. If you have a microphone, you can record your voice if you feel confident, but this is not 100% necessary. It is possible to just record silence. But there MUST be an appropriate amount of silence (while reading the text) so that the actor's mouth moves for an appropriate amount of time. In other words, if there's no actual dialog, press the Record button, then count to ten or whatever. Click Done.

11q). Click again on the VoiceType (MaleNord or whatever), and click the Save button. If a warning shows up saying this file already exists, it's because there is already a MaleNord (or whatever) file saved. Ignore the warning.

11r). If some actual voice was recorded, highlight the same Voice Type text, and click the Preview button to have a listen how awesome, or silly that voice sounds.

11s). Toggle the From WAV ON, and press Generate Lip File. Click OK.

11t). Toggle Has LIP File off, but Force Subtitle on.

11u) In Scripts End box, type GetOwningQuest().SetStage (10)


12). Click OK, OK, and OK, closing out all the quest windows, just to make sure everything is saved. SAVE. Reopen the Quest.


13a). DIALOG VIEWS tab:
Left-click the top of the EditorID name` (the top-yellow part of the box), and right-click > Add Topic. When the Topic page opens, the ID can be QuestNameYes if we want to make a Yes/No scenario. Add some text in the Topic Text slot, too. Since my character just got info about attaining a free horse, this'll say "You are giving me a horse?"

Tip: Once you're back in the Dialog Views tab, it's possible to click on the 'Show all text' toggle at the bottom of the panel if you want to see all the text typed up so far.

13b). Click OK. Again, the New Response panel *POPS* up. Write some Response Text that the NPC will say. "Oh yes, you've done many great things for us..." etc.

Follow all the steps from 13j to 14 for all dialog, to make sure recordings are made, even if they're silent.

13c): Back on the Dialogue Views tab, left-click into the first batch of NPC text. The cursor changes to a hand. Now, drag this hand over to the topic which follows the initial one. We can see how the conversation will flow now, right?

Have a look now in the Player Dialogue tab, at the initial topic. Note that in the Link To window (which is center-right) this initial topic ("Are you the one who left that note?") has been linked up to the topic which follows ("You are giving me a free horse?"). If you're not using the Dialogue Views tab, topics can still be linked manually by right-clicking into the Link To window, clicking Add Link and find the topic which follows. By doing all this, we do not need to make the quest SetStage as often as was needed in the CS and earlier GECK versions.

Click OK and OK, closing quest windows. Save.


Time to go backwards for a moment. I'm going to add an onscreen update into the game now, so that when the player finds the note, a message will flash onscreen.

14a). Quest Objectives tab
The Quest Objectives page works in a similar manner to the GECK. Right-click > New into the top horizontal window.

14b). Type the number 5 into the Index slot. And type some text into the Display Text slot. Whatever gets typed in there will be the onscreen update (and will show in the quest journal as well).

14c). Go into the Quest Stages tab, and select Stage 5. In the Papyrus Fragments box, type SetObjectiveDisplayed (5).

14d). Since dialog already bumps the quest up to Stage 10, let's go ahead and take care of 10. Right-click > New into the top Log Entry window, and type an update into the Log Entry box below it.

14e). In the Papyrus Fragments box, type SetObjectiveCompleted (5), and then SetObjectiveDisplayed (10). Go back into the Quest Objectives tab and type make and objective for Stage 10.

Click OK, and save. Reopen the quest window, with the Quest Stages tab showing.

Now comes the part that's really different. Once the player speaks to the quest-giver, she's going to ask for "tacking fees" of 150 gold before the horse becomes ours. So this horse is not really free. Plot-twist. In the CS and older GECK, all that was needed was to use a GetGold condition so the game could see if we've got enough to afford these fees. But getting the game to see our gold is now more complicated than it was.

14f). Select Stage 100, which is the final stage, so toggle Shut Down Stage on. Click the Properities button (this is right under the Papyrus Fragment scripting area).

14g). Click the Add Property button. For the Type scroll-bar, look for MiscObject. In the Name slot, type Gold001. Click OK, and click OK.

14h) In the Papyrus Fragment box, type Game.GetPlayer().RemoveItem (Gold001, X) , with "X" being whatever you think is fair. Also type...

SetObjectiveCompleted (10)
stop()


..........That is it! "Stop()" is what shuts down the quest. Now, to make sure the horse becomes ours.

15. OBJECT window > Actors
Type EncHorse into the Filter, and duplicate one of the horses which show up. Note that there are saddled and unsaddled versions to choose from.

Put into world somewhere (near a stable, usually). Give horse Ref ID. Click the horse's Ownership tab and make this horse belong to the NPC added earlier, the one who's giving all the dialog so far. Make sure the horse stays onscreen.

16a). QUEST window > Quest Aliases tab
Time to add some aliases to this quest. This is one of the huge differences between the Construction set and Creation Kit: we can create references to objects much more specifically in this latter program. References are going to be made for the player, gold, the horse, and the quest-giver. These references will make more sense later.

16b. Right-click > New Reference Alias. After the Reference Alias panel pops up, fill in the Alias Name slot with the word "Player" (without quotes, of course). Toggle Unique Actor on, and find Player in the scroll-bar. Click OK.

Note: Chances are the OK button for the Reference Alias panel will be off-screen. If so, single left-click on the Alias Name (so a cursor appears next to the name you typed earlier, which should be Player) and press Enter. This should close the panel, saving everything just added to it.

16c). Do all the steps in 16b, but this time type Gold into the Alias Name. Toggle Create Reference to Object on, find Gold001 in the scroll-bar, and leave everything else as-is. The entire string of information should be "Create Reference to Object: Gold001, Level: Easy, Create: at Player. Close the panel, again using the method from 16a, if the OK button is not onscreen.

16d. Follow all steps from 16b again, this time type Horse into the Alias Name slot. Toggle the Specific Reference on, click the Select Forced Reference button, then click the Select Reference in Reference Window button. Double left-click on the horse, and click OK. Close the panel.

16e). Last one. Follow 16b again, but this time, type QuestGiver into the Alias Name slot. Toggle the Unique Actor on, and find the NPC who speaks to us during the quest. Close the panel. Click OK. save.


17a). DIALOGUE VIEWS or PLAYER DIALOGUE tab
Whichever is preferred. Go back to the last bit of dialog added, which is "You are giving me a free horse?" Add a GetIsId and GetStage into the Conditions window. The stage so far is 10.

17b). In the Scripts: End box, type GetOwningQuest().SetStage (20). Click Ok, but leave the Quest window open.

17c). From here on, I'm going to be working in the Player Dialogue tab. Right-click > New into the gigantic window on the right, and type some text. "Well it's not exactly free. We'll need to charge some tacking fees..."

17d). Now, notice in the Topic Text slot, the same text from the first entry ("You are giving me a free horse?") is still in this slot. Do not change this. Instead, type something into the Prompt slot. "You want to charge me for this horse? How much, then?" All of this is similar to the way the GECK from earlier Fallout games works. We can keep the same topic going, substituting different prompts for the player to click on as the conversation commences.

17d). Follow steps 11j through 11t to add voice or silence, animations, facial emotions, etc.

17e).. GetIsID and GetStage can be pasted from the previous bit of dialog, but change the GetStage to 20. Now, if the player backs out of conversation early, he or she won't have to go through all that text about a horse being offered again.

17f). TBC

Posted by: Renee Dec 29 2018, 04:04 PM


Repeatable Bounty Quests II (innkeeper involvement). Game: TES IV: Oblivion


This post shall deal with Respawning Bounty Quests, but it's different from the process I detailed earlier in this thread. Again, the quest-giver won't give us this bounty quest just once. It can potentially happen over and over, as the game respawns every 3 days.

The main difference between this process and the previous bounty quest is: the request to take care of some baddie shows up occasionally when speaking to particular NPCs. We go to speak to this person (to rent a room, usually) and sometimes he or she will want the PC to do something about the boss of some local lair. Once we have done what this NPC wants us to do, it's then possible to go back for a reward from that NPC, or some other NPC. Like the previous method, this one can potentially happen every 3 days. Again, this adds to the roleplaying side of things just like the previous method, but the involved process is more random.

Since the NPC's request shows up randomly, the player never knows when the NPC will give the option to start things. Because of this, when the quest finally shows up it feels more natural, as it becomes a part of conversation only occasionally. I have gotten this to work with numerous NPCs, mostly innkeepers.

The subject of my first respawning quest is the most difficult to work with, but I didn't know this at the time. I got the inspiration for this idea after visiting Malene of Roxey Inn, and she's more complicated to work with than some others. The idea: Malene already knows my character (Renee Gade III), since Renee has helped Malene in the past during the Gravefinder's Repose quest. So the idea was: those pesky necromancers have returned, and Malene needs RG3's help again! emot-ninja1.gif But Malene will ONLY ask for this help AFTER The Gravefinder's Repose is done.

Since Malene has a pre-written Bethesda quest associated with her, she required some extra steps be taken to make my idea work. Other NPC innkeepers (Foroch, owner of Gottshaw Inn, for instance) did not require as much help to get similar quests running. In this post I will be trying to provide details for the different methods followed for several different innkeepers.


1). Open Construction Set, bla bla bla.

Innkeepers who aren't in walled towns make perfect quest-givers, because their places of business are not as protected. Whether it's Malene, Diram Sirethi, Candice Corgine, Foroch, and so on, these people have an interest in keeping the area near their establishments safe. But the thing is, using each of these innkeepers as quest-givers will make things different every time. Each one requires a unique approach.


OBJECT window > Actors > NPC
First thing to do is perform some research on the innkeeper / quest-giver. Double left-click on one of the names listed (Corgine, Malene, Diram, etc.), and click on their Dialogue button. The Dialogue panel takes forever to open. Once it does, look at the NPC's GREETINGs.

On the top right-hand side of the Dialogue panel is a large window, listing all the quests these NPCs will have for greetings. There is dialog which deals with Crime, as well as some Generic greetings. In some cases, they will also have greetings which deal with quests, such as SQ05, which is https://en.uesp.net/wiki/Oblivion:The_Gravefinder%27s_Repose.

It's time to determine if the chosen NPC is already involved with any other quests. Are any of these quests current in our character's game? Have they already been done? Or have any not been started yet? If there are any quests, will they be ignored by the character? Or will they eventually get tackled?

Some innkeepers are involved in quests, and some are not. Either way, look at all the GREETINGs the NPC has. If our character is in the middle of some quest (or eventually will be) an innkeeper deals with, you need to then look at these individually, and find their Priorities. In some cases, there might not be any quests being done any time soon. If there aren't, look at the innkeeper's Generic greetings. Generic greetings often have lower Priorities than quest greetings.

For instance, I am going to tackle Candice Corgine first. Candice Corgine of Pell's Gate's inn has a bunch of Crime greetings (which can be ignored, unless your character is some sort of constant criminal). She also has DAClavicusVile, aka https://en.uesp.net/wiki/Oblivion:Clavicus_Vile, which has a Priority of 60. She will give her innocuous Clavicus Vile greeting when spoken to ("Welcome to Pells Gate, friend."), but only if this quest has not been started yet, or we're in the middle of it. She also has Vampire greetings, one Thieves Guild greeting, and several dealing with the MQEndgame. MQEndgame greetings only show up once the Main Quest is done.

Rule out which quests you've done, and ones which you're in the middle of. If your character is not a vampire for instance, you don't have to worry about Vampire greetings. If your character has done the Main Quest, look at the Priority for MQEndgame's GREETINGs (Priority is 12). Once all these are ruled out, this leaves DAClavicusVile. If the character meets Candice before DAClavicusVile is done (Priority is 60), there are three choices, assuming you want your greetings to show up in-game.


1). Simply lower DAClavicusVile's Priority to 5 or below, ONLY if you're positive you're never going to do this quest. Maybe your current character could care less about daedric quests.

2). Finish the quest in-game, or

3). SetStage the entire thing with the console. Again, this works if your character never intends to do this quest.


Once those greetings get ironed out, this leaves the greetings for Bethesda's "Generic" quest (literally, it is called "Generic" in the Quest window), which mostly dispenses random dialog such as "Good day" and "Well met."

As I said before, for each innkeeper that gets looked at, approaching their Greetings goes differently.

> For instance, https://en.uesp.net/wiki/Oblivion:Foroch, the wood elf who runs Gottshaw Inn, is not involved with any quests. So, just look at any Generic greetings he has. The Generic quest has a Priority of 5. Since Foroch hasn't got any quests associated with him, this means there are no other quests that introduce dialog with Priorities higher than 5.

Therefore, a revolving bounty quest that only involves Foroch can also have a Priority of 5. This Priority rating can get raised, for those who want to see their GREETINGs showing up more often. These greetings will still be competing with Generic though, so moving Priority higher than 5 won't automatically make any added greeting trump those of the Generic quest 100% of the time.

>>https://en.uesp.net/wiki/Oblivion:Candice_Corgine has a bunch of generics she can randomly say, once the DAClavicusVile quest is out of the way. Again, the Priority for Generic is 5. Assuming no other quests are being involved with Candice, 5 can be chosen for her revolving bounty quest. Or, choose a number higher than 5. Maybe 7 or 9 or 15.


In some cases, the NPC will give GREETINGs which are Generic, but specific to a certain race.

>>> https://en.uesp.net/wiki/Oblivion:Diram_Serethi is like this. Assuming MS47 (the Aleswell Invisibility quest) is done, he will begin giving Greetings which are from the GenericDarkElf quest, which has a Priority of 6. Therefore, a bounty quest which involves him should also have a Priority of 6 at the very least.


So, as can be seen from the list above, Foroch is the least demanding, Candice has some issues which need to be addressed, and Malene and Diram are the ones who will require the most tweaking, since both of them are the most-directly involved.

QUEST window, Quest Data tab
2a). Start a new quest. For this lesson I am calling its ID aaaBountyQuest, though in-game I've got names which are more elaborate, such as aaaMossRockCavernQuest. Whatever you name it, this quest won't require a Name in its Name slot, but you can add one for reference. And add the appropriate Priority. GetIsPlayableRace == 1 goes into the Quest Conditions window, as usual.

2b). Start a script which looks like this...

----------------------
scriptname aaaBountyQuestScript

short DoOnce

-----------------

Save using the Save icon, close script. Click OK (closing the quest window) and reopen the quest. Find the script in the scroll-bar, and click OK again.

Substitute the name 'aaaBountyQuestScript' with something more specific, if desired. In my game I've got several of these bounty quests going, each with a name pertaining to its location.


If you're working with Malene, keep reading. If working with any of the others, skip to step 5a.

2c). For Malene, find SQFN in the Editor window (the long, vertical scroll-down box on the left side of the Quest window). SQFN stands for Side Quest FiNished, and it deals with NPCs who greet us after some official Beth quests have been done. ..... So, once Gravefinder's Repose is done, that's when Malene will begin to use Topics and dialog found in SQFN.

2d) Topics Tab
Look at Malene's GREETING, and she only has one GREETING in this window, which is "What can I do for you today?" ... Note the Conditions for this GREETING. One of them is GetStage SQ05 >= 100, meaning she will only say this once SQ05 (Gravefinder's Repose) is done. Malene will say this GREETING randomly, along with about a dozen other Beth-added GREETINGS, such as "What?" and "Good to see you."

We're going to include our own GREETING mixed in with all these others, so that she will only greet with any material we write once in a while. However, there's a small problem. If we include "What can I do for you today?" with our own GREETING, the game will only recognize the official GREETING from Bethesda, ignoring ours entirely.

2e). So Step #2e might seem rather controversial. I'm going to give this GREETING to somebody else, preferably somebody who will never be spoken to in-game, and/or is preferably not involved with any other quests. Just go to the Conditions box, click on the GetIsID function, and change its NPC to some other NPC. I chose Malintus Ancrus, which is the person right below Malene. Although Malintus is involved with some Thieves Guild stuff, my current character is not into TG, so this works for her.

3). Click OK, closing the quest window, and save.

4).

5a). Open up the bounty quest started earlier, starting with the Topics tab. Now to add your own GREETING. I made one which says "You're back, and I've got a problem."

5b). In the Conditions window, add a GetIsId for whomever this pertains to (Malene, Diram, or whomever).

6). Click OK, exiting the Quest window and SAVE.


OBJECT window > Actors > NPC
7a). Time to make an NPC enemy. If you are working with Malene / Moss Rock Cave, quickest method is to edit a generic necromancer, such as NecromancerBossMaleBreton, saving this NPC as a New Form. Likewise, if you're adding this NPC into some lair full of bandits, you can edit an actual bandit, and so on. Edit generic enemies though, not named ones. And do not edit anybody associated with Shivering Isles. SI NPCs will have SE at the front of their ID names.

7b). For the purposes of this lesson, I'm going to call the edited enemy boss aaaNPCBoss as a Base ID. In my actual game, they've got names which are more specific, such as aaaMossRockWitch or aaaHomesteadWarlord, etc.

7c). If this generic enemy has any sort of script, make sure to change the Script scroll-bar to NONE.

8). Make sure 'Respawn' is toggled on, but 'No Low Level Processing' is toggled off.


9a). Go to the Factions tab and double-check the enemy is in the correct faction(s). Necromancers for instance are usually going to be part of two: the NecromancerDungeon and NecromancerFaction factions. If you edited an actual necromancer, these factions will probably, already be chosen. Same goes for bandits, marauders, conjurers, and so on.

In many cases, there's no need to mess with the enemy's AI, but have a look at it anyway. Most of the time, their AI will include two Wander packages, maybe a Sleep or an Eat package. As long as there's a wander package for IsInInterior (rather than some specific dungeon) this is good. As long as the NPC enemy is placed in an interior, he or she will wander around a bit, but won't just leave.

9b). Also, delve into the Stats tab. I prefer to make my NPC a boss-type with lots of health, or I'll offset him / her several levels above my character using the PC Multi toggle.

9c). The Inventory tab can be important too. Usually for generics, this tab will be packed with armor, clothing, weapons, and other items drawn from Leveled Lists. It's a good idea to keep these lists intact. Doing so will ensure the boss will be wearing / carrying different gear every time he/she is encountered.


10). CELL / RENDER windows
Go into the cell where this enemy shall be placed. So for Malene / Moss Rock, the NPC enemy is placed into MossRockCavern. For Candice Corgine, she wants my toon to do something about either Fort Homestead, or Horn Cave. Diram Serethi wants us to do something about Fort Caractacus again, and so on.

Drop the NPC somewhere in this dungeon, preferably somewhere toward the end of it (so that he/she gets encountered near the place's end, or in a boss room). This will ensure that most, if not all, of the location's enemies will have been dealt with, by the time the hand-placed boss gets encountered.

11a).
Give the NPC a Reference ID. I am using aaaNPCBossRef for this lesson, but the actual names in-game can vary according to location. For instance, the necromancer of Moss Rock is called aaaMossRockBossRef. Whichever Ref ID gets chosen, copy this name so it can be conveniently pasted into scripts later.

11b). Click OK, closing all the NPC's panels, and save all work.


OBJECT window > Actors
11c). Find the NPC and right-click > Edit. Open up the NPC's script window. Type the following...
-------------------

scriptname aaaNPCBossScript

short Dead


--------------------------------

Substitute aaaNPCBossScript with whatever name is more desirable. Again, I tend to choose names which match the location of where the boss was placed.

Save the script (click on its Save icon) and close it. Click OK on the NPC's window, closing him or her. SAVE goshdarnit.

11d). Reopen the NPC's info from the Object window again. Find the script just saved in the scroll-bar. Select it, and click OK. Re-open the NPC again.

Now, add to the script, so (in total) it will look like this...

-----------------

scriptname aaaNPCBossScript

short Dead

Begin OnDeath

If (aaaNPCBossRef.Dead == 1)
Set aaaNPCBossRef.Dead to 2

Message "The leader of X has been killed", 36

EndIf
End


-----------------------------------------------------

Where the X is, substitute the name of the cell where the enemy has been placed, and of course, substitute the script's name and/or NPC's reference ID name with whatever was used
.

11e). Use the Save icon to save the script, before closing it.

Note: There are no quest stages being used for this process, which means no pop-up messages will pause the game. So, that on-screen message in the NPC's script is important. It lets the player know the proper NPC has been defeated, and now we have the option to collect a reward. You can opt for a MessageBox instead of a message (just substitute MessageBox instead of Message in the script), but this will pause the game, killing action until OK gets clicked.

Note 2: Technically, we won't need to kill any other NPCs once the one we added is pwned, but this is why it's a good idea to put him or her somewhere near the end of the dungeon.

11f). Click OK, closing the NPC's panel. Save.


12a). QUEST window > Topics tab
Open up the bounty quest again. Find the GREETING made earlier, the one which says "You're back and we've got a problem" or whatever.

Here are the needed Conditions IF working with Malene.

GetIsId NPC: Malene == 1
GetStage SQ05 >= 100
GetQuestVariable Quest: aaaBountyQuest DoOnce == 0.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 0.00


Note that the conditions above specify: (1) Malene is the one who will say "You're back ...", (2) the bounty quest won't begin until SQ05 (Gravefinder's Repose) is basically done. And there are also a couple of variables being thrown into the mix, which will make more sense later.

Here are the needed Conditions if working with Diram Serethi.

GetIsId NPC: DiramSerethi == 1
GetStage MS47 >= 100
GetQuestVariable Quest: aaaBountyQuest DoOnce == 0.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 0.00


MS47 is, of course, the Aleswell Invisibility quest.

If NOT working with either of them (in effect, you're writing your own quest without worrying if some other Bethesda-written quest is involved) here are the conditions which typically go...

GetIsId NPC: X == 1
GetQuestVariable Quest: X DoOnce == 0.00
GetScriptVariable Reference: X, Dead == 0.00


As always, substitute X for the NPC innkeeper's name, the name of the quest, and the Reference ID of the enemy
.

In any case, the innkeeper will only say "You're back, and we've got a problem" if everything is ready to go, and the enemy boss is theoretically alive. I am not including conditions which specify IF that enemy is actually alive, but it's certainly possible to do so. I fear that this can lead to occasional CTDs though, as the game's engine tries to figure whether some enemy who is in some faraway cell is alive or dead. So I did not write my quests this way.

For those who want to experiment, add a GetDead condition into that GREETING, specifying whether the enemy boss is alive or dead.

12b). In the Result Script box type Set aaaNPCBossRef.Dead to 1, substituting the actual Reference ID of the added enemy. This changes the ScriptVariable for that enemy from 0 to 1. Why is this important? It's important because this change ensures that Malene, Diram, Foroch, Candice, or anybody else will potentially give us this GREETING only once per 3 days. As soon as they greet us in this way, they won't do so again, not for 3 days. After 3 days, the variable will reset back to 0, meaning the NPC can potentially say "You're back...." once again.

In a minute, more dialog is going to get added which will allow the quest to move forward. It would be weird if (let's say) every time we speak to them, they try to goad us into going into that same lair, even though we've already accepted, or turned down, their proposal. So this issue is going to be addressed.

12c). Toggle Random on, and click OK, closing the Quest window. Save.

Quest-givers will now say this GREETING sometimes. Not all the time. As said before in this tutorial, they will also give other random GREETINGS like "What?" and "How are you?" .. Therefore, they won't always try to dispense this quest. You can add a second GREETING (or a third, or however many you'd like) if you want to increase the chances of them giving this mission. Just make sure to add all the respective Conditions, Result Scripts, and check "Random" for any additional greetings.

> Conversely, if you do not want there to be any randomness with this quest showing up, only one GREETING is required. Random can stay toggled off, in this case. In my opinion this is not as fun though. wink.gif It also feels a bit forced.

>> For testing purposes, once you're back in-game, it is possible to enter and exit dialog with the quest-giving NPCs over and over, until they say what we've added.

12d). In the Add Topics box, add a new topic which deals further with Malene's wish to have us kill the necromancers of Moss Rock Cavern, or if you're working with Diram, Foroch, or Candice, add dialog which explains that they want us to go into whichever lair is pertinent. I am calling it aaaBountyTopic. Find this topic in the Editor ID box as well, and add it there also.


13). Exit the Quest window by clicking OK, and use the main toolbar to SAVE.


14a). QUEST window > Topics tab > Topic Text slot
Go back to the topic just added (aaaBountyTopic) and add some dialog in which the innkeeper further explains his or her plight. "Yes, they have returned, those rascals, and we need to rid them once again, lest this local business suffers!"

14b). The Topic Text slot can be changed from aaaBountyTopic to "Enemies" or "Have they returned?" or whatever.

14c). Copy all the Conditions from the GREETING added earlier, and paste them into this new topic. So for Malene's quest it'll have the GetStage SQ05 >= 100, the GetIsID, GetQuestVariable SQFN DoOnce == 0, and the GetScriptVariable aaaNPCBossRef == 0.

Diram will have GetStage MS47 >= 100, the GetIsID, and so on.

For any of the others, there'll just be a GetIsID, GetQuestVariable X, DoOnce == 0, and the GetScriptVariable. Paste these into the conditions for the new topic

14d). Change GetScriptVariable aaaNPCBossRef.Dead == 0 to GetScriptVariable aaaNPCBossRef.Dead == 1.

From this moment, the quest can be written so that the innkeeper will simply give the quest to the PC without choice (the player is basically railroaded) or the quest can be written so there is a choice involved. Yes or no.

16). To railroad the player (maybe your character is somebody who always goes for quests) use the Add Topics box to add the next topic. To provide a choice, use the Choices box.

Continue to step 17a if choice is involved.
Continue to step 17b if no choice is involved.


17a). Add a Yes and a No choice into the Choices box, and also into the Editor ID window. If you've already got Yes and No choice topics from other quests, these can be reused. Add dialog and Topic Texts for each choice. Now, if the player chooses Yes, this will obviously lead to the innkeeper giving the quest. "Ah, I knew I could count on you." If No gets chosen, the innkeeper will say something appropriate, maybe even be angry or fearful.

For the Yes choice here are the needed Conditions...

GetIsId NPC: NPC Name == 1.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 1.00


For the No choice, all that's needed is a GetIsId. Also add a Result Script which says Set aaaNPCBossRef.Dead to 0 for the No choice, so the entire quest can potentially get started again.

17b). (Skip this step if you opted for choices instead of railroading). Use the Add Topic box to start a second topic, and also add this into the tall, vertical Editor ID window. Add dialog to this second topic ("They're located deep within X location, and there's a reward of X if you rid them....") and add something into the Topic Text slot. "Enemies" or whatever.

Conditions are similar to what's above....

GetIsId NPC: NPC Name == 1.00
GetScriptVariable Reference: aaaNPCBossRef Dead == 1.00


From this moment, the player has either accepted, turned down, or been forced to take on the quest. Off he or she goes, to rid the enemy boss (or not).


18a). QUEST DATA tab
Time to continue the main script now, and it's going to be yet another timer script. How it'll work: when the timer runs out after 3 days, the entire quest resets itself silently, along with the chosen dungeon itself. The NPC boss also respawns, since his or her Respawns toggle is turned on. Here is what the timer script looks like in total.

------------------------------------
scriptname aaaBountyQuestScript

short DoOnce
short Timer
short StartDay

Begin GameMode

if (Timer == 0)
If (aaaNPCBossRef.Dead >= 2)
Set StartDay to GameDaysPassed
Set Timer to 1
EndIf
Endif

If (Timer == 1)
If ((GameDaysPassed - StartDay) >=3)
Set Timer to 0
set aaaNPCBossRef.Dead to 0

If (aaaNPCBossRef.Dead == 3)
aaaNPCBossRef.MoveTo aaaMarkerRef (edit)


EndIf
EndIf

End

---------------------------

Substitute aaaNPCBossRef with whatever name was chosen for the boss, yadda yadda.

18b). Click the save icon, and if everything saves okay, close the script. Click OK, closing the Quest window.

.... Again, when the NPC boss gets pwned, this causes the timer to begin. Once 3 days have passed, the dungeon respawns all its enemies (including the boss), and the quest will reset. We'll be able to go back to our quest-giver, and potentially receive this entire quest over again! From this moment on, the player has three days to collect the reward (which has not been added yet). If the player does not do so within 3 days, oh well that's tough, because by then the entire quest will have reset itself, including any Reward dialog. blink.gif There are probably ways to avoid this problem (for instance, the timer can get started only after collecting the reward, via dialog). But in most cases, the above process will be sufficient.


19). Open the Quest window. Go back into the Topics tab > GREETING. Give the innkeeper a GREETING which deals with her or him being happy we have killed the enemy boss. "Oh glory, you have done it, and we are saved!"

Do NOT make this GREETING random. We want the innkeeper to just dispense a reward, not beat around the bush with "Hello" or "Good to see you!", when we return from our endeavor.

And here are the needed conditions.

GetScriptVariable Reference: aaaNPCBossRef.Dead == 2.00
GetIsID NPCname == 1.00


20a). Use the Add Topic box to give the innkeeper a topic which will lead to a reward (I usually just call this topic "Reward" in the Topic Text slot). If you already have a Reward topic from other quests, this can be reused.

20b). As always, add this reward topic in the Editor ID box. Once some dialog has been typed for this reward, use its Result Script box to make the innkeeper reward whatever is desired. For this lesson, I've chosen three bottles of beer, 100 gold, and some mutton. laugh.gif I'm also going to add another script which involves the main script's DoOnce (which causes dialog to change during future encounters with that same innkeeper), and bumps the ScriptVariable forward as well, so that there's no chance the NPC will keep giving this lame reward over and over.

Player.AddItem DrinkBeer 3
Player.AddItem Gold001 100
Player.AddItem Mutton 1
Set aaaBountyQuest.DoOnce to 1
Set aaaNPCBossRef.Dead to 3


Make sure to copy the Conditions from the reward GREETING just added....

GetScriptVariable Reference: aaaNPCBossRef Dead == 2
GetIsId NPC: NPCname == 1



21). Click OK, closing the Quest window, and SAVE.


22). QUEST WINDOW > Topics tab
Make another GREETING, and this one can be sort of generic. "So glad you have saved us from those bastards!" or whatever. Conditions for this GREETING will be

GetIsID NPCname == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 3.00


It is also possible to put a GetInFaction condition up there, replacing the GetIsId, and then add the faction of an entire town (such as LeyawiinFaction == 1.00) so that this entire location gets excited when they recognize our toon. Make sure Random is toggled on, so that people will only say this GREETING (mixed along with others Bethesda added) once the quest is done, its reward is given out, but 3 days have not passed yet.

Again, you can test to make sure the quest is still "working" by entering and exiting dialog with the innkeeper (or any other NPCs who are grateful for our character's success) over and over, until the "So glad you have saved us..." greeting shows up. Since the GetScritptVariable is now 3 instead of 2, the innkeeper won't keep rewarding the PC over and over, as dialog gets entered and exited.


23). Make one more GREETING, this one will be the final one. It is optional, and only to add realism. In this GREETing, the innkeeper will be greeting as though he or she's familiar with our past actions (we've basically helped the NPC once or twice by now), but those pesky enemies have returned one more time. "I know you've done so much for us in the past, but can I bend your ear one more time?"

GetIsID NPC: NPCname == 1.00
GetQuestVariable Quesname DoOnce == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 0.00


Again, Set aaaNPCBossRef.Dead to 1 goes n the Result Script box, and make sure Random gets toggled.


24). The same secondary topic which was used just after that very first GREETING (aaaBountyTopic aka "Enemies") can be added into the Add Topic box, but the quest-giver (whether it's Malene or somebody else) won't need to explain in as much detail what comes next.

Copy all the Conditions from the final GREETING, and paste them into this topic. Make sure to change the ScriptVariable to 1 though. So now, it'll look like....

GetIsID NPC: NPCname == 1.00
GetQuestVariable Quest: Questname DoOnce == 1.00
GetScriptVariable aaaNPCBossRef.Dead == 1.00


25). Add the same Topic or Choices which got added before, starting from step 16. No additional dialog needs to get added, and Conditions can be exactly the same for all this dialog, and also for the Reward part too.

26). Exit the Construction Set, saving all work. Make sure to make a backup copy of the .esp too, since it involved so much detail. goodjob.gif

---------------

Once this respawning bounty quest is set up, we can potentially add other NPCs who give out quests, not just Foroch or Candice or Malene or Diram. If you're trying to use the same quest for multiple people, it's also possible to add to the main script. Follow the same steps found on Page 2, post 30 of this thread. Not every step in that post will get repeated of course, so you'll need to use some judgement to get this all working properly, and also do lots of playtesting.

Posted by: mALX Jan 14 2019, 07:56 PM


This is an Awesome thread, Renee!!!

Posted by: Renee Jan 19 2019, 08:25 PM

Awesome, thanks so much. smile.gif

------------------------------------------------

Respawning Bounty Quests, Game: TES V: Skyrim

Note: Currently the first 11 steps deal with my learning process. I wanted to make a repeatable bounty quest for Skyrim, but my version works differently than what Beth wrote. The way I've got it, certain people will occasionally want us to go kill some bandit boss who's been terrorizing locally, but they won't ALWAYS want us to do this. It's not the same as going into Bannered Mare, where Hulda always gives us a flier, advertising some local menace.

Anyway, to skip the "research" part of this lesson, go to step 12.



1). First step is open up the Creation Kit. Like, duh.

I am going to be focusing on Lucan Valerian, proprietor of Riverwood Trader. The idea behind this quest is that Lucan is fed up with the lowlifes of Embershard Mine ekeing out a living right beside the respectable town of Riverwood. Lucan recognizes my character for being an adventurer, especially after we help him get his stupid Golden Claw back. In fact, this bounty quest won't even begin until the Golden Claw is done. This is the way I decided to write what's below. With different NPCs (innkeepers, smiths, etc.) the process will be a little different every time. It all starts with figuring out what quests (if any) get associated with each one.

As I did in Oblivion, I must first have a look at all the quests involved with Lucan, so I can see all the dialog he can possibly say, especially Hellos and Greetings. I want to make sure that the dialog will match up to these quests and their Priority ratings, so that Lucan won't just start this quest every time his shop gets entered, and dialog is initiated.


2). OBJECT window > Actors > Imperial Race > Male.
Find LucanValerius. Now right-click on him and left-click "Use Info." The Use Report panel shows up, and it includes two windows. The top one is the one I'm interested in.

At first glance, this top window seems to include everything Lucan is involved in, quest-wise. It actually does not include everything though, as I'll explain in a minute. Still, even though everything can't be seen here, the Use Report panel is still a good place to start. Immediately, I can see a slew of INFO topics that get associated with Lucan.

Go ahead and left-click on a few of these INFOs, just to see what shows up. Mostly, these are just fragments of the actual quests.


3). Scroll the top window down until you see QUST. Obviously, this stands for Quest. Look at every quest Lucan's got listed in this window. Here they all are:

MS13Intro
DialogueRiverwood_Revised
MS13LucanCamillaScene
MS13
DialogueRiverwoodDryGoodsScene1


Note that MS13 pops up several times, and this is Lucan Valerian's shining moment in the game, since it is the Golden Claw quest.

Double left-click on each QUST topic, and see what pops* up. Every time we double-click on one of these topics, a quest panel will open up, which is mighty convenient.

Since I will be writing the bounty quest so that it doesn't begin until MS13 is done, I'm not going to worry about MS13's Priority. But I will go through those five quests. It is important to research each of these, so that my own quest will work with the same randomness that the Oblivion version did.


a}. Double-left click on MS13Intro, and look at its Player Dialog tab. This quest deals with starting the Golden Claw, and its Priority is 0. Not only that, but Lucan doesn't have any dialog yet. Nothing to worry about, since I'm not going to write my quest for pre-MS13, or during any portion of MS13.

Close the MS13Intro panel.

b}. DialogueRiverwood_Revised is the first quest I might be dealing with, since it stays active after MS13 is done. Its Priority is 30. This quest, and all its dialog, remains active throughout the game. A lot of the dialog in DialogueRiverwood_Revised has to do with generic things Riverwood residents say, so it's definitely important to check further.

c}. MS13DialogueLucanCamillaScene: open it up, and look at its Player Dialogue tab. This is a short quest which causes Lucan and his wife to begin arguing about their claw, when we first walk in their shop. Its Priority is 60, and there's nothing under the Player Diaglogue tab, anyways. Let's move on.

d}. Open up MS13 itself. This one deals with the rest of the Golden Claw quest: going up to Bleak Falls, retrieving the claw, returning it to Lucan (or not), etc. Its Priority is also 60. Keep moving along.

e}. DialogueRiverwoodDryGoodsScene1 also has a Priority of 30. However, it doesn't have any dialog at all. It only includes a "Scene", which can be found under the Scenes tab. Scenes involve two NPCs, when they speak to each other back and forth. This quest has nothing under Player Dialogue, or any other tab, so I'm closing this panel out.


... Hmm. So far, I haven't found any of Lucan's more famous post-MS13 GREETINGs. Where, for instance, is "Thanks so much for taking care of those thieves...." ? I haven't seen this dialog yet, and I must find it. Because the dialog in my quest is going to work alongside the dialog of "Thanks so much for taking care of those thieves...."


4).
Close the Use Report panel. It seems like a bunch of time just got wasted, but not really. It's important to find everything an NPC says, if he/she is to be included in the bounty quest. If you don't find the things you'd normally expect, this just means it's important to keep digging, until these things are found.


5). OBJECT window > Characters > Quest.
Scroll down to the MS13 area. Ah-ha! There's an additional quest involving MS13, which is called MS13Fin. MS13Fin deals with the aftermath of the Golden Claw quest.

Double left-click on MS13Fin. I'm going to click from tab to tab, across the top of this quest's window. Start with the Quest Data tab, which should be open by default. Notice that it's got a Priority of 60.


6a). Now go to Quest Stages tab. Notice there no Quest Stages.

6b). Skip Quest Objectives because it does not handle dialog at all. Same goes with Quest Aliases, skip that one too.

6c). The two tabs which often handle dialog: Dialogue Views and Player Dialogue, also have nothing.

You can keep clicking other tabs, just to see if there's anything under there, but it's not until I got to the Misc tab that something shows up. Finally! All the more prominent post-MS13 Greetings are right here, and there are four of them, though they aren't called GREETINGs anymore, like we'd see in the Construction Set or the GECK, they are now called Hellos. Two of these Hellos are said by Lucan, and two are said by Camilla, therefore we can immediately rule Camilla's Hellos out.

7).
Double left-click on one of Lucan's Hellos. Note that 'Random' is not toggled. Oddly, once we're back in the game, he will say his Hellos in a random fashion, when greeted several times in a row (as I did when playtesting respawning bounty quests for TES IV: Oblivion). Why is this?

>>> From this point, if you'd like to know how everything works in detail (how the game involves Lucan in various dialogue Hellos), click the Spoiler tag below, and go to Step 8. If you'd just like to continue writing the quest, go to Step 12.




12).
Open up MS13Fin > Misc tab again (if it's not already open). Now, open up Lucan's "Thank you" greeting, and toggle Random on. Click OK. Now open up the topic just below it, which is "Thank you for bringing the claw back." Toggle random on for this one, too.

13). Change Hours until reset from 0.50 to 0.00 for both these Hellos. This is not 100% necessary, but it increases the chance of my own Hello, which will get written soon, appearing.

From this point on, you can either write your quest into MS13Fin, or start your own quest. Although I prefer to start my own, right now I'm not good enough yet with the CK to link multiple quests, so I'll hitchhike my material onto MS13Fin.


14). In the big Info window, right-click > New. Write up Lucan's Response Text, which will be something like "Hey, you're that guy who helped us before. We've got a small problem now. Care to have a listen?"

15a). Click OK. The Topic Info panel will show up, and it should include the "Hey, you're that guy..." text just typed.

15b). Toggle Random on. Leave Hours until reset at 0.00.

15c). In the Conditions box, right-click > New. GetIsID is what shows up by default, so choose LucanValerius for this condition.

15d). Toggle Has LIP File off, but Force Subtitle on.

Time to make some voice files, as was done for the Skyrim Quest Tutorial. Again, an actual voice is not needed in-game. If you already know how to do this from that previous lesson, skip to Step 16.

15e). Double left-click the dialog just added in the Response Text window, so the Edit Response panel shows up again. There should be a Voice Type listed in the bottom window which corresponds to the NPC who says this dialog (MaleNord, for instance).

15f). Highlight this Voice Type. Now click the Record button. If you have a microphone and want to record your, or someone else's voice, now's the time. If not, just press Record and read the text which just got written. Press Done.

15g). Click again on the VoiceType (MaleNord or whatever), and click the Save button. If a warning shows up saying this file already exists, it's because there is already a MaleNord (or whatever) file saved. There is a choice to overwrite any previous recording made, basically.

15h). Toggle the From WAV ON, and press Generate Lip File.


16). Click OK, OK, and OK, closing all the quest windows. SAVE by pushing the main toolbar's save button. Reopen the Quest now.

The new Hello is now in the game, and if I were to go back into Riverwood to greet Lucan, there's now a 50/50 chance he'll say "Thanks for taking care of those thieves," or whatever just got written. Thing is, he will only greet in these two ways, and he won't give any other Hellos he was formerly using. If you are fine with this, move on to Step 18. If you want to further reduce the chances of the new Hello showing up (so that he may only give this quest much more rarely, maybe once or twice a year), go to 17.


17a). To decrease the chance of Lucan saying the new Hello, simply lower MS13Fin's Priority to 30. This will cause Lucan to have five extra Hellos in his arsenal from the DialogueRiverwood_Revised quest. An occasional generic Hello from DialogueGeneric may also sneak in there. To increase our Hello showing up from this point (while keeping all the vanilla Hellos), simply add another greeting into MS13Fin's Misc tab.

17b). Optional: Go into DialogueRiverwood's Hellos, and make these random too. Hours Until Reset can stay off, or you can turn them on for each Hello.

** Now, the main difference between the respawning bounty quests for Oblivion, compared to these ones in Skyrim, is that the Oblivion versions worked solely with script and quest variables. In Skyrim, I will be using quest stages, along with some of the other things the CK likes to see, such as Properties and Aliases. There probably is a way to avoid using stages, instead using variables like Oblivion does. Bethesda themselves prefer stages for their own bounty quests though, so that's the way I learned.


18). OBJECT window > Actors .
Right-click > New. I made an NPC enemy, and put him somewhere in the center of Embershard Mine. I prefer to put the guy near where those jail cells are, this way he gets encountered roughly half-way through the cave. When you make your enemy, you can follow any steps you've found in other tutorials. Template Data can get used for instance, to make things more convenient. Just make sure the enemy winds up in the BanditFaction.

19). Toggle "Respawn" and "Unique" on for this enemy. Click OK. SAVE.


20a). Open MS13Fin again > Quest Data tab. Toggle "Allow repeated stages" on.

20b). Also, where the "Type" scroll-bar is, change this to Miscellaneous.

20c). Object Window Filter: type Misc\Riverwood\


21). Quest Stages tab.
Go ahead and make seven stages here. Bethesda only uses three, and you don't have to use seven, but seven is what I wound up with. My stages are 0, 10, 15, 20, 30, 50, and 100. For convenience, I recommend you use these numbers too.

21a). The first stage, of course, is 0. It is more like a pre-stage, actually. Toggle "Start Up Stage" on. Now, right-click > New into the Log Entry area, but don't add any text. It should say EMPTY in this box. In the Papyrus Fragment tab's box, you can type a comment saying ;Pre-quest, just for reference. Make sure that semi-colon goes before any comment added into this box, this'll prevent the CK from trying to read these comments, then screaming errors at us!

21b). Do the same things for Stage 10, so EMPTY shows up in the Log Entry box. Stage 10 shall deal with Lucan greeting the PC, pitching his idea. Another comment can be added into the Papyrus Fragment box, such as ;Lucan greets player.

21c). Repeat all of this for the next stage. I'm up to 15, by now. 15 shall be an intermediate stage, during which Lucan has spoken about his concern, and we've got a choice to say "yes" or "no" to the idea of invading Embershard. Stage 15 is optional, though. If your own character always takes on quests, never turns them down, don't worry about making a "no" choice here.

21d). Stage 20 now. If "yes" is chosen, the quest will bump to 20. If not, it'll just stay at 15 if you want it that way. The neat thing is, this quest won't even appear in the journal if "no" gets chosen. Do all the same things for this stage (EMPTY, and a semi-colon comment).

21e). Stage 30 is the first stage which adds some scripts, but for now, just do the same as what's been done for those four other stages, so that there's EMPTY and comment.


22a). RENDER window.
Go find the Embershard Enemy, and give him or her a Reference ID.

22b). Click Edit Base from the NPC's reference panel. In the Papyrus Scripts box, right-click > Add Script. Now double-click on [New Script]. Give the script a unique name (I named it aaaEmbershardEnemyScript), and leave Extends: ObjectReference alone. Click OK. A blue + symbol should show up in the Script Name box.

22b). Right-click on the script, and then left-click Edit Source. You should be seeing this....

Scriptname aaaEmbershardEnemyScript extends ObjectReference

22c). Close the script. Now highlight it, and press Properties. Press Add Property. Use the Type scroll bar to find Quest.

For "Name", just put the name of the quest. It doesn't have to be called MS13Fin. Matter of fact from this point on I began calling it aaaEmbershardBountyQuest, for convenience, since anything starting with "aaa" will usually show up at or near the top of any list.

22d). Click OK. Wait a moment until a symbol shows up. You have just made a Property. It should have the quest's name, and under Type it should say Quest.

22e). Highlight the Property and press.the Edit Value button. Since this property is a quest, all of the quests listed in the game show up. To link this new Property with MS13Fin, go ahead and find MS13Fin in the Pick Object scroll-bar. Click OK.

Note: It really helps to read about Skyrim's use of Properties, Aliases, and Fragments, if you haven't done so already. https://www.creationkit.com/index.php?title=Bethesda_Tutorial_Quest_Aliases. If you've already done some modding in the CS or GECK (which don't use properties, aliases, or fragments) using them in the CK may seem like extra, unnecessary steps. But these things are really here to make our lives easier in the long run, especially when it comes to writing some really complicated scripts.

22f). Now right-click on the Property and select Edit Source. This opens up the Script panel (just like the script panel for earlier programs), and here is what should show up...

-----------------
Scriptname aaaEmbershardEnemyScript extends ObjectReference

Quest Property aaaEmbershardBountyQuest Auto


---------------

22g). Write the rest of this script manually, so in total it'll look like this....

----------------
Scriptname aaaEmbershardEnemyScript extends ObjectReference

Quest Property aaaEmbershardBountyQuest Auto

Event OnDeath (Actor Killer)
aaaEmbershardBountyQuest.SetStage (30)
EndEvent

------------------------------------

22h). From the script panel's tool-bar, click on File > Save (or just ctrl + s) to see if everything got typed okay. Close the script window, and click OK on the enemy NPC's window, closing him or her out as well.


23). Open MS13Fin > Misc tab again. Find the Hello added earlier.

23a). There should already be a GetIsID == Lucan there. Now add the following conditions....

GetStage Quest: MS13Fin < 10.00
GetIsDead aaaEmbershardEnemy == 0.00


That second condition is obviously a check to make sure the enemy added to Embershard is alive. If he/she is not (if he/she has not respawned along with Embershard itself), Lucan won't be able to say the Hello we've added at all. To find the enemy, click on the scroll-bar next to where it says "Run on" and find him or her in this list. Click the Select button, find the Cell and the enemy's Reference ID, and click OK.

23b). In the "End: Papyrus Fragments" box (located bottom-middle) type GetOwningQuest().SetStage (10). This way, Lucan will keep saying random Hellos until he says the one we wrote. Once he says our own material, the quest bumps forward to 10, and he won't say this Hello anymore, not until the entire quest resets itself.


24). Dialogue Views or Player Dialogue tab.
Go ahead and write up all the rest of the dialog . Five different branches are needed, which shall include topics and infos as follows....

> Lucan informs the player about the menaces inside Embershard Mine {Stage 10. Type GetOwningQuest().SetStage (15) into the End: Papyrus Fragment box}.

>> We answer Yes or No to Lucan's proposal (Stage 15. Type GetOwningQuest().SetStage (20) into the End : Papyrus Fragment box for a "Yes" response. If "No" gets chosen, simply leave the quest at 15, and toggle Goodbye on, if desired).

>>> Lucan says some follow-up info: where Embershard can be found, how we'll get paid, and so on. (Stage 20, a SetStage does not occur here, since killing the enemy will do this).

>>>> We return to Lucan, after Embershard has been cleared, (its top enemy is dead. Stage 30.)

>>>>> Lucan gives a note, which can taken to Proventus Avenicci, Whiterun Jarl's steward, to get paid. (Stage 30. Don't worry about adding scripts yet, these get added in a few). Another option is to add your own steward, in fact this might be the better option for those who are doing the Civil War on the Stormcloaks' side, since I'm pretty sure Proventius disappears after the sack of Whiterun.

>>>>>> We get our money! (Stage 50. Type GetOwningQuest().SetStage (100) into the End: Papyrus Fragment box).


I won't go into detail here, but write up your own dialog for each of those five branches.


25). Quest Objectives tab.
By now, all dialog has been written, and quest stages should all be set up. Time to add some quest objectives. Just like in Fallout 3, Objectives are what cause onscreen messages to be displayed when important moments get passed during the quest.

I'm not going into full detail here, since this info is already in the Skyrim Quest Tutorial found on Page 2 of this thread, but I wound up with three Objectives: one which tells the player to "Kill the leader of Fort Embershard", one for "Return to Lucan" and one for "Head to Dragonsreach for a reward." These Objectives get displayed and completed as follows....

"Kill..." (Stage 20, Stage 30)
"Return.." (Stage 30, Stage 50)
"Head to.." (Stg 50, Stage 100)


26a). OBJECT window > Items > Books.
Find a note, and Duplicate it. I am calling this note aaaRewardNote. Erase this duplicate's text, and type something pertinent. "Ye, bearer of this note, who has't defeated the abominable enemies of Embershard Mine, shalt become dispenseda 100 gold...." etc.

My idea here: Lucan is pleased that we've killed the leader of Embershard, but he can't afford to pay us. He's got a business after all, and cannot (in roleplay terms) afford the downfall paying our character hundreds of gold would cause. See? So what he does is gives a note, explaining that we've taken care of Embershard Mine. This note gets taken to Dragonsreach, just like we'd do during any of Bethesda's bounty quests. Difference is, we're going to NEED this note if we want to get paid!

26b). Click OK, closing the note.

And now, we're going to use the Quest Aliases tab to add three different aliases: one for the Player, one for the quest-giver (Lucan), and one for the note.


27a). Aliases tab.
Always start with the Player. Right-click into the giant Alias window, and select New Reference Alias . This opens up the Reference Alias tab. Alias Name shall simply be Player (type Player in this slot). Now click on the Unique Actor toggle, and find Player in the scroll-bar. Click OK.

Note: Chances are the page is too big, and the OK button cannot be seen! If this is the case, just click into the Alias Name slot (where Player was typed earlier), and press Enter or Return on your keyboard.

27b). Next, to tackle Lucan, who is the one who gives the note. ALWAYS add the giver of any item first into the Quest Alias window, before the item itself gets added. Type QuestStarter into the Alias Name slot. Click the Unique Actor toggle on, and find LucanValerius in the scroll-bar.

27c). Click OK, or do the Alias Name slot thing, and press Enter.

27d). Do the same for the note. Type Note into the Alias Name slot.

27e). Toggle "Create Reference to Object" on. Find aaaRewardNote (or whatever you called it) in the scroll-bar. Leave "Level" as Easy (always leave it on Easy). Now, for Create, leave the toggle on "At". And find QuestStarter in the scroll-bar. Altogether, this should read "Create Reference to Object: aaaRewardNote, Level: Easy At QuestStarter.

Tip: Toggle Quest Object on to make absolutely sure this note will never get misplaced. Quest Object is on the top-right of this panel. Because remember: if we don't have the note, we won't get paid!

27f). Click OK.... or Enter.


28a). Dialogue Views or Player Dialogue tab.
Go back to whatever dialog got written for Lucan after the boss of Embershard was dealt with.

28b). In the Begin: Papyrus Fragment box, type SetObjectiveCompleted (30).

28c). In the End: Papyrus Fragment box, type GetOwningQuest().SetStage(50)

28d). Now find whatever dialog got written for Stage 50, when Proventus Avenicci or whomever is supposed to dispense payment. Here are the Conditions for Stage 50...

GetItemCount 'aaaRewardNote' == 1 And
GetStage Quest: 'MS13Fin' == 50 And
GetIsID Actor: 'ProventusAvenicci' == 1


Make sure that "Target" is selected for GetItemCount, rather than Subject.

28e). In the End: Papyrus Fragment box, type GetOwningQuest().SetStage (100) if this hasn't been added yet.


29a). Quest Stages tab > Stage 50 > Papyrus Fragment box. Click on the Properties button.

29b). After the panel pops up, click the Add Property button.

29c). In the Type scroll-bar, look for Book.

29d). In the Name slot, type the name of the note. Click OK.

29e). Click on the Property for the book. In the Pick Object scroll-down, look for aaaRewardNote.

29f). Click OK, closing the Properties for script panel.

29g). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (aaaRewardNote, 1) .

30a). Now for the final stage, which I called 100 up above. In the Papyrus Fragment box, type Game.GetPlayer().RemoveItem (Note, 1)

Now to get paid.

30b). Click the Properties button. Click the Add Property button. For the Type scroll-bar, look for MiscObject. In the Name slot, type Gold001. Click OK, and click OK.

30c). In the Papyrus Fragment box, type Game.GetPlayer().AddItem (Gold001, X) , with "X" being whatever you think is fair. Also type...

stop()

..........That is it! "Stop()" is what shuts down the quest, after payment is received. Do NOT toggle Complete Quest on though. We want this quest to never get completed, right? We want it to possibly return; that's the whole idea here.

So now the quest is good as a one-time affair. Here's how to make sure the entire thing respawns.


31). Quest Data tab
Find the Event scroll-bar, and choose Change Location Event. Make sure "Allow Repeated Stages" is on, if it's not already toggled.

Notice how "Start Game Enabled" is now grayed-out, and there is no longer an option to toggle this on or off. This is fine. Click OK, closing the Quest window.

32). OBJECT window > Character > SM Event Node.
Right-click on "Change Location Event" in the the right window, and select Edit. SM stands for Story Manager, by the way.

33). You might see several nodes made for other quests, or you might just see a large panel which is mostly empty. Right-click on the very top choice, which is "Stacked Event Node: Change Location Event". Select New Quest Node. A new choice called "Stacked Quest Node" should be at the very bottom of this window. Scroll down (if needed) and find it.

34). Right-click on Stacked Quest Node and choose Add Quests. Find MS13Fin. Click OK.

Now comes the tricky part. The SM Event Node page is similar to the Quest Aliases page, in the sense that it's too big for some screens. Bethesda actually put OK in the top-right corner this time, yet you might not be able to see the bottom of the panel. rolleyes.gif And we'll need to be working down there. If you can't see the bottom, you'll possibly need to minimize the entire Creation Kit from its tool bar. Now right-click on your desktop, and change your Screen Resolution setting to something smaller, or rotate the entire screen to Portrait instead of Landscape. You will need to adapt to working sideways for a few minutes!

35). Highlight the Node which just got created (not the quest below it). Now look down the page (or to the right, if you had to rotate). In the ID slot, type in aaaMS13FinQuestNode. Toggle "Do all before repeating" on. And toggle "Shares Event" on.

Once all this is done, the screen can be rotated back to Landscape.

36a). Right-click > New in the Node Conditions box, and add the two conditions...

GetInCurrentLoc Location: "RiverwoodLucanDryGoodsLocation" == 1.00 And
GetDead NONE == 0.00


36b). For the first condition, change Subject to Player, meaning that the Player/character needs to be in Riverwood Trader for the quest to begin.

36 c). For the second condition it says NONE, but there is some hidden information within this one that cannot be seen. Double left-click on this condition, and in its scroll-bar (where it says Subject) change this to Reference. Now push the Select button, and use the Cell scroll-bar to find EmbershardMine01. Find the enemy's Reference ID, and click OK.

37) Click OK, closing the SM Event Node panel.

38). Close Creation Kit, saving all work. Don't forget to create or update the SEQ file (see SEQ File Creation tutorail on Page 2 of this thread).


And that should be all. If you have Wrye Bash (or some mod which modifies cell resets) use a minimal number of days when playtesting this quest, to make sure it begins, runs through all its stages, shuts down, and starts all over again. When the quest shuts down, we can test to make sure it's shut down by spam-greeting Lucan several times. The opening Hello which begins the entire quest should not be showing up for X number of days.

Posted by: Renee May 15 2019, 12:53 AM

Setting up a gamepad controller Game: Elder Scrolls Online

This is for those gamers who prefer gamepad controllers, like myself. I am going to teach how to do some rather basic things, such as change what each button does, how to invert X and Y axises, and so on. Figuring this stuff out is a cinch in many other games. ESO OTOH requires some background knowledge.

In some games (like Skyrim or Fallout 3) getting a controller to work is as easy as going into the menu, then toggling a button on. Elder Scrolls Online is trickier, and more difficult to figure out. But overall, the experience is more rewarding because there are SO MANY options we can configure for ESO.

So this assumes that you've got a mouse and keyboard, but also a controller which is specifically made for PC gaming. This controller can apparently be Xbox or Playstation styled, or it can be something which is more customized. I myself only use Xbox-style controllers, and Microsoft models at that, but I also use mouse & keys for some tasks.

If you've got any third-party programs on your computer, such as Keys to Joy or Xpadder, it's a good idea to turn close these now. These programs can be used in the game to add extra options, but for now, just close these. I think they interfere with some other options in the base game.


1). Get into the game, so that you are not in its opening menu, you are in the actual game. This way, everything can get tested in real-time.

2). Controller should be on. Now, press the Esc key on the keyboard. Press Settings. And press Gameplay. About three-quarters down the menu page is the GAMEPAD section. Turn this on.

Once the gamepad is on, notice the menu changes to one which is more 'consolized.' wink.gif

Another feature: there are now TWO main menus which can be pulled up -- one can be gotten from the keyboard, the other from the controller itself. These are the sort of menus that allow us to change options, look for Help, and so on. Though these two menu sets might seem like they're the same at first, they actually have quite a lot of difference between them.

Now. If you are like me, you'll want the option to switch the X/Y Axis, which affects the "look around" feature normally assigned to the right mushroom stick. Normally, if the right stick is pushed forward (away from the player), the character looks upward. If the stick is pushed back (toward the player), the character looks down. For those who want to invert this, go to step 3. If not, go to step 4.

3). Press the Start button on the controller. Use the left mushroom stick to scroll down to OPTIONS. Select Camera, and INVERT Y is the very top option.


4). Zenimax gives us a total of three templates, each featuring a different set button assignments. But if you'd like to make your OWN button assignments, here is how to do that.

Press the ESC key. Again, this key works in a similar way as the START key on a controller, except ESC opens up different options.

5). Select CONTROLS. This opens up a menu with four columns, which Zenimax calls Binds.

The First Bind deals with the keyboard itself. All the selections in this column deal with keyboard assignments. Note the typical WASD movement assignments are right at the top, for instance. Oddly, it's the Third Bind that handles controller button assignments. But the cool thing about ESO is, we aren't just limited to using keyboard keys or controller buttons, either device can be used to handle different tasks!

So since the keyboard stuff should already be set up, I am going to show how to assign stuff to the controller.

Tip: Use the mouse-wheel to scroll the Binds menu up and down, it just works more efficiently than the controller does.


6). Start with the very top, which deals with Movement. By default, Move Forward is already set as "Left Stick Up," which is how most gamers prefer it to be set. Suppose you want to change this though? Doing so is easy as using the mouse to left-click on this selection, and then moving the left stick (or right stick, for southpaws) in the direction you'd prefer. In the BINDINGS window, it then shows whatever key, or button, or bumper, or trigger, has been selected.

7). Use the mouse to left-click on Bind.

From here, literally you can just scroll down the entire page, selecting whatever feature (such as Jump) with whatever button, trigger, stick (etc.) is preferred.

We can even sometimes select a combination of buttons. For instance, I just clicked on Autorun, pressed & held the B button, and then pressed the right bumper. Binded this selection. So now my character will run automatically (and keep running) if I press B + RB back in game mode.

8). When you are done making assignments, always press ESC on the keyboard. This will lock these assignments in.

Posted by: mALX May 15 2019, 01:55 AM

Awesome! You got it working!

By the way; you can set a key on your keyboard to toggle your character to always run; or always walk when toggled. I use the "7" key on my NumPad on the right side of my keyboard as a "walk or run" toggle. That frees up those two keys on your controller for something else.

That run is a kind of "Jogging" run; not a high speed run you might do if you are running for your life. If your character needs to get out of danger; you will want to sprint as fast as you can to get away:

To sprint (no matter which way that toggle is set, run or walk) = just hold down the LEFT shift key while walking or jogging; and your character will sprint as long as your stamina lasts.

Sprinting can't be toggled on or off; you have to actually hold it down = so if you want sprinting set to your controller; find it in the "Controls" list for the controller and set it where you want it.







Posted by: Renee May 15 2019, 01:05 PM

Awesome, thanks. I have noticed there's TONS of stuff which can be set up. Options, options, options. I like the way there are separate HUDs for PC and consolized versions. Everyone is happy, in theory. smile.gif

I think I'll let the controller handle most "immediate" functions (such as action / combat / hotkeys) but the keyboard will handle all the background functions, such as the quest window, Crown Store and so on.


Posted by: Renee Jun 19 2019, 02:28 AM

Game: Fallout 3, How to use Zone Triggers to set quest stages.

Video example: https://www.youtube.com/watch?v=QaMtpvrEG9E

TES IV: Oblivion uses X-markers to bump stages, set variables, and so on. Fallout 3 does use X-markers for some functions, but it also uses what are called zone triggers, or simply "triggers," to setstage quests and perform other functions, as we pass through them. "Pass THROUGH them" is the actual idea here. For an X-marker to work, the character (or NPC) must walk near the X-marker for it to do its job. With Fallout's triggers, we are going to walk through these areas instead.

A quick example from Oblivion's day was during the Unfriendly Competition quest, when the player is supposed to be sneaking a listen to a conversation between Agamir and Thoronir. If we weren't close enough to the X-marker which activates during this quest, the conversation would simply not happen, leading to dozens of "Broken" accusations from various gamers. If a giant trigger zone were used instead, chances are there wouldn't be as many problems.

Zone triggers appear red in the GECK but invisible in the game, and are also used in Skyrim.

CELL window

1). Go into the cell or wilderness area where the trigger is to be added. An example is right outside of Megaton.

2). On the main toolbar, find the T button. It looks like a child's block with a T in it, and is located to the right of the NavMesh button (the button with red scribbles in it). Click the T button. Sometimes it takes a couple of clicks before the button gets pushed inward.

3). In the Render window, left-click somewhere on the ground, and drag upon it. It helps if the area being clicked does not have a bunch of stuff on it (items, Markers, etc.). Try not to click on anything else but the ground, or (if inside a cell) the floor itself.

4). At first, nothing might happen. Maybe a red 2-dimensional rectangle will show up, but maybe not.

Let go of the mouse button. Now move the mouse upwards (away from you) without touching or holding any buttons. If done correctly, there should be a transparent red cube which morphs from two dimensions to three. The mouse can be moved away or toward you, to make the cube shorter or taller. It should be tall enough for a person to walk through though, for best results. If the cube is placed in front of a door for instance, it should be made so that it's taller than a person. It should also be placed across the entire door, which ensures the character will definitely walk through it.

This red cube will be what activates the next stage of the quest. Or it can be used to toggle an objective, set a variable, and so on. Again, the character is going to need to walk THROUGH this cube, so if it's not big enough, or if it's not in the right area, chances are it might need to be redrawn or dragged. These red cubes can be tricky to draw, so it can take some messing around.

5). Anyway, double left-click on the red cube. If done right, the Activator panel will pop up. Note that the game calls the cube "Gas Valve" for some reason. Note that the ID is part of a scroll-bar too. Every trigger zone in the game will be include in this ID slot.

Tips: Sometimes it's difficult not to select some other object (or a wall) which is right behind the cube. Simply click OK when this happens, and try again to position the Render window so that the cube gets selected. It might help to hold the left Shift key while moving the mouse around (don't press or hold any mouse buttons down while doing this). And if things really get aggravating, Hold Z while pulling the entire cube down! Once the cube is below the ground (or floor) it's now in the void, where it's easier to select the cube itself.

6). Click on the New toggle (next to the ID panel). This closes the scroll-bar, so a new ID can be typed in. "Name" is not important, and can be deleted, even.

7). If there is any Script on this Activator, get rid of it by moving the scroll-bar to NONE. Click OK. And Save.

Note: After closing the Activator panel, notice there are a bunch of colored lines & arrows in the cube. Now it can be moved, and also manipulated larger or smaller, with greater ease. If the cube was moved out into the void, time to move it back in place, back to where a character will definitely walk through it.

An easier way to change the cube's dimensions than trying to drag upon it is to double left-click on it, select the Primitive tab. From here, its X, Y, and Z Bounds can be changed. Click OK when done.

8). Double left-click on the red cube > Edit Base. Now it's time to add a script, which can be left as an Object. It should look like this..

scriptname aaaTriggerScript

Begin OnTriggerEnter Player

If (GetStage == X)
SetStage X
EndIf

End


Save the script, click OK on the Activator panel, and reopen it. Find the script in the scroll-bar area and select it. Click OK again.

9). When the Reference panel is reopened, click Persistent Reference ON. An actual Reference ID is not needed, unless there are plans for some quest or script to "know" that the cube/trigger zone is there. Usually this is not needed though.

10). Click OK and as always, save.

11). Open up the Quest window. Open the Target Ref tab, and add a target (vamp).

12).
In the Quest Objectives tab's Cell scroll-down bar, locate the area where the red cube has been added, and select its Ref.

Note: If this cube has been placed outside (especially somewhere in Wilderness) it may not show up in the scroll-bar. If this is so, click on the "Select Reference in Render Window" button. Make sure that the Render window is still displaying the area where the red cube has been created. Double-click on the cube, and it should automatically get selected as the Ref.

Posted by: Renee Jun 26 2019, 12:10 PM

How to transfer saves from Xbox to PC, Games: Oblivion, Fallout 3, Skyrim

Although all the info here can be found online, there is a helpful step-by-step version on this page. But here is the YouTube video I found, anyway.

http://www.bing.com/videos/search?q=obvlion+xbox+save+to+pc&&view=detail&mid=95EE15E407DAC31EDA1E95EE15E407DAC31EDA1E&FORM=VRDGAR

To make save transfers happen, Modio 5.3 must be downloaded. It can be found from several sites, but here's one I found.

https://modio.en.lo4d.com/windows

Download that from the big green Free Download button (and then choose either the US or UK versions) and save the program somewhere on the computer's hard drive. Make a desktop icon to make using this program even more convenient.


1). Insert a USB stick into the the Xbox 360. Some sticks go in the rear of this box, some might go in the front. Since the USB area is poorly-designed on my model, you may need an extension cord to plug into the box, if you have the same model I have.

2). Go into the Xbox's storage area like; Settings > Storage > Hard Drive > Games & Apps and then find the game, and the save you want to transfer. Copy this save from the hard drive to the USB stick.

3). On the PC, the USB stick will have a new folder in there, and each game will get its own folder.

> For Oblivion, this folder is called "Content." And inside of Content should be two more folders. One of these is called 00000000000000000, and this one will not be used at all, but keep it around anyway. The other folder will have its own, more complicated name. Go into this one, and keep diving into it until you find the Xbox save.

> For Fallout 3, there will be only one folder, and buried within this folder will be the save which just got transferred.

> For Skyrim, (vamp)

4). Copy/paste this save from the USB to the PC, in whichever area you like to keep saves.

5). Now, open Modio from wherever it got downloaded to.

6). On the bottom of the program, left-click on Open a Save.

7). Select the "Browse" button.

8). Now find the save just placed on the PC which got derived from step 3. Double-click on it.

9). On the left side of the program, select "Advanced."

10). Press the Edit Package Contents button (on the bottom of the window).

Now it's time to modify the file that's buried within the Xbox save. If this save was made in Oblivion, the file will be called gamedata.dat. If it was made in Fallout 3 or Skyrim, it will be called savegame.dat

11). Right-click on this file, and right-click "Save as...." and save it to the same area where the Xbox save was transferred to. Do NOT rename it.

12). Close Modio.

13). Now find the file just converted (which will be called gamedata.dat or savegame.dat). The game will not be able to read either of these as .dat files, so right-click on the file > Rename, and change the .dat extension to .ess for an Elder Scrolls game, or .fos for a Fallout game. So in other words, the file will now be called gamedata.ess, savegame.fos, or savegame.ess, depending if it's going to be used for Oblivion, FO3, or Skyrim.

.. It is possible change the file's name further if desired, but this is not 100% necessary.

...If the name gets changed, there will be a warning (after renaming the file) which can be ignored. Just click Yes.

14). Now, move the .ess or .fos file into Documents > My Games > *GAME* > Saves. There you go.

(*GAME* == Oblivion, Fallout 3, or Skyrim).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)