Welcome Guest ( Log In | Register )

2 Pages V < 1 2  
Reply to this topicStart new topic
> T.I.M.E. (The Interactive Modding Excursion), Mod-making tutorials
Renee
post May 13 2018, 07:53 PM
Post #21


Councilor
Group Icon
Joined: 19-March 13



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.

This post has been edited by Renee: Oct 17 2018, 04:57 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post May 29 2018, 01:25 AM
Post #22


Councilor
Group Icon
Joined: 19-March 13



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 follow the GECK's official page.


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.

This post has been edited by Renee: Oct 17 2018, 05:07 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 10 2018, 11:53 PM
Post #23


Councilor
Group Icon
Joined: 19-March 13



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.

This post has been edited by Renee: Jun 27 2018, 07:56 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Jun 24 2018, 03:37 AM
Post #24


Councilor
Group Icon
Joined: 19-March 13



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.

This post has been edited by Renee: Jun 30 2018, 02:05 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Aug 12 2018, 04:13 PM
Post #25


Councilor
Group Icon
Joined: 19-March 13



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: On the Road Radio 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 10:15 Saturday Night 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.

This post has been edited by Renee: Aug 29 2018, 03:15 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Aug 26 2018, 08:52 PM
Post #26


Councilor
Group Icon
Joined: 19-March 13



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.

This post has been edited by Renee: Aug 29 2018, 01:57 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
SubRosa
post Aug 26 2018, 08:59 PM
Post #27


Ancient
Group Icon
Joined: 14-March 10
From: Between The Worlds



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.


--------------------
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Renee
post Sep 2 2018, 12:55 PM
Post #28


Councilor
Group Icon
Joined: 19-March 13



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 inkeepers. 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, but you can name it just for reference. 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.

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).


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


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



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 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 resuse 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 only a GetIsID...

GetIsID 'aaaQuestAgent' == 1.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


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.

This post has been edited by Renee: Sep 4 2018, 02:02 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Sep 29 2018, 06:50 PM
Post #29


Councilor
Group Icon
Joined: 19-March 13



edit

This post has been edited by Renee: Sep 29 2018, 06:51 PM
User is online!Profile CardPM
Go to the top of the page
+Quote Post
Renee
post Oct 12 2018, 02:41 AM
Post #30


Councilor
Group Icon
Joined: 19-March 13



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.

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.


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, but get rid of the GetScriptVariable. Only a GetIsId is needed here.

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


Voila. Time for a glass of wine.

This post has been edited by Renee: Oct 16 2018, 01:53 AM
User is online!Profile CardPM
Go to the top of the page
+Quote Post

2 Pages V < 1 2
Reply to this topicStart new topic
2 User(s) are reading this topic (2 Guests and 0 Anonymous Users)
0 Members:

 

- Lo-Fi Version Time is now: 23rd October 2018 - 12:49 PM