Page 1 of 1

Iskuss's Questing Showcase (Gotta get Licenced)

Posted: Thu Aug 23, 2018 6:18 pm
by Iskuss1418
This is my questing showcase, I made a quest involving leading a beggar's friend back to him.


NPCs (ID -> Name):
beggar -> Bjorlan
halvir -> Halvir

"A Beggar in Need"

get in contact with Halvir

Re: Iskuss's Questing Showcase (Gotta get Licenced)

Posted: Thu Aug 23, 2018 8:25 pm
by Iskuss1418
Edit: Still first attempt, but I just wanted to complicate it a little. Instead of saying which tavern the friend is in, I just said he was in one of the taverns in the city, and gave people in those taverns dialogue to help player find right one. Also added an entry to latest rumors, and misc fixes.

New Topic:

Re: Iskuss's Questing Showcase (Gotta get Licenced)

Posted: Fri Aug 24, 2018 5:23 pm
by Texafornian
Looks very good so far. It's fine mechanically except for the missing gold check and adding a journal entry to allow the player to decide whether to accept the quest.

- ESP was already cleaned
- Dialogue was already cleaned
- autocalc was already checked then unchecked

- There's no condition on Bjorlan's Greeting 5 "Choice 1" entry to ensure that the player actually has 1 gold to give
- ^ Adding that will require another "Choice 1" entry in the event that the player doesn't have 1 gold

- GetAiPackageDone doesn't need to be declared in a script as a variable; it's a hardcoded function
- I'd change the GetAIPackageDone check in Halvir's script to something like GetDistance "beggar" < 300 in the event that the beggar moved. GetDistance is apparently OK to use every frame
- ^ Requires changing Halvir's AIFollow command, too (in dialogue results of an entry), and adding an AIWander line in Halvir's script when the GetDistance check is finished

- Additional entries filtered for "Karthwasten, Dancing Saber: Tavern, Den" aren't needed when you're already filtering for "Karthwasten, Dancing Saber: Tavern" because cell filters are treated as string matches. The former ID contains the latter. Same reason why we have empty cells called "Mournhold" and "Solstheim" -- they're used to filter dialogue to all cells that start with those strings

- Add additional Greeting 5 entry to Halvir in the event that you kill the beggar
- Add a journal entry (15) between IDs 10 and 20 that serves as a "player accepted the quest" entry
- Check journal entry ID 10 as "finished" to prevent it from appearing in the "quests" tab
- Check journal new entry ID 15 as "restart" to add the quest to the player's "quests" tab

- Add a copy of Halvir's first 70-disposition entry in "get in contact with Halvir" filtered for players with higher speechcraft (an alternative to high disposition)

I'd also like to see a solution for an edge case: killing Halvir prior to taking the quest from the beggar. The easiest way to do this would be to add a line to Halvir's OnDeath block in his script that fires when GetJournalIndex == 0. You could:

set "beggar".Sky_ControlQ to 1

And then add an initial entry to the beggar that overrides the default 3-option prompt when Sky_ControlQ == 1. Something like a copy of the "I don't want to talk to you" entry.

Re: Iskuss's Questing Showcase (Gotta get Licenced)

Posted: Sat Aug 25, 2018 1:59 am
by Iskuss1418
I did all the things you pointed out above. Also instead of using a variable for the edge case of Halvir being dead at the start, I filtered the greeting for choice 1 to also be: Dead "Halvir" = 0, and I had another one filtered to 1, for if Halvir was dead. I still let the player give a coin, but the beggar doesn't bring up the friend.

Re: Iskuss's Questing Showcase (Gotta get Licenced)

Posted: Sun Aug 26, 2018 9:40 pm
by Texafornian
Almost there.

- It looks like the beggar's Greetings now break when the player gives 1 gold then refuses to help him out. Could be solved by just changing some conditions around to account for journal state 10 and/or 15.

- The words "get in contact with Halvir" should be included in the acceptance journal entry (state 15) for topic linking.

- The "dead" condition check you added is discouraged since it can be extremely slow in larger save files, same goes for GetDeadCount in scripts.

- Good job identifying the case where the player could kill the beggar while Halvir was following. The only issue with the new solution is that Halvir will constantly run that AIWander command if the player hits that journal state. This can be solved by declaring short doOnce and then running a "if ( doOnce == 0 )" check on that AIWander line. An efficient approach would be doing something like this, which would account for quest completion too:

Code: Select all

if ( doOnce == 0 )

    if ( GetJournalIndex "A Beggar in Need" == 40 )
    elseif ( GetJournalIndex "A Beggar in Need" == 45 )
        AiWander 0 0 0 0 60 20 10 10 0 0 0 0

    set doOnce to 1
That block would have to be the lowest block in the script, else the Return would block everything below it from being checked and/or firing.