MrWillisTheFetcher's Quest Showcase

Interested in joining? Show off your skills here
Post Reply
-MrWillis-
Forumite
Posts: 8
Joined: Fri Aug 05, 2016 8:31 am

MrWillisTheFetcher's Quest Showcase

Post by -MrWillis- »

I was told to post my quest showcase here. So here it is:
https://www.nexusmods.com/morrowind/mods/47052

It is pretty basic so I will understand if it is not good enough for the game.

Violet
Lead Dev
Posts: 273
Joined: Mon Apr 30, 2018 11:07 am

Post by Violet »

Looks fun, I don't have time to properly review or playtest it, so I'm mainly just taking a (very) brief look in the CS.

Both under latest rumors:
I must tell you, all this self-righteous Western clamor against slavery is really tiresome. Our right to own slaves is protected by law -- IMPERIAL law. People who free slaves are breaking the law. It's as simple as that.
- This line has two entries, one conditioned in Sadrith Mora and the other in Vivec (all other conditions are the same). One of them is touched by this mod and the other is in vanilla. Did you copy this line and make a copy for Vivec? Or is the one in Vivec simply a dirty entry? Either way, it doesn't seem to fit the theme of the quest afaik so I'd suggest deleting the one with Vivec as a condition.
"These Imperial tax collectors have really started to get on everyone's nerves. Haven't seen the local one in a while, though...not that anyone is complaining."
- This is similarly dirtied, but I'm pretty sure it's an accident. Remember that whenever you make a new line within an existing topic (or move a line within an existing topic), it dirties the lines surrounding it, both above and underneath. Make sure you thoroughly clean those existing lines that you don't intend to touch.

Journal MV_DeadTaxman entries 110, 120, and 130 are all dirtied. Should be cleaned.

Under Kwama Mine:
"Why am I not surprised. You are an absolute buffoon and fetcher. Get out of my sight."
- This uses a Get Dead condition. This is fine for now imo, but in the future remember that giving the could-be-dead creature/NPC an if ( OnDeath == 1 ) -> Set Journal "something" to number is much easier on loading time, this is because if the save file gets big then Get Dead conditions can be a little laggy.

A reviewer can probably come in a bit later and give more indepth feedback, as I'm sure I missed something and I didn't look for typos and such at all, but for now I'd suggest cleaning it with TESAME or other cleaning tools (iirc you can also clean a file with the CS itself, but I'm currently having trouble remembering how to do that). It's a good start and I can't wait to give it a playtest.

User avatar
Rakanishu
Lead Dev
Posts: 886
Joined: Thu Sep 15, 2016 9:16 pm

Post by Rakanishu »

Reviewing

User avatar
Rakanishu
Lead Dev
Posts: 886
Joined: Thu Sep 15, 2016 9:16 pm

Post by Rakanishu »

Thanks again for submitting a showcase!

Violet nailed the dirty "latest rumors" entries and the GetDeadCount/"Dead" filter issues; however, Journal MV_DeadTaxman entries 110, 120, and 130 are not dirty since they were added by this ESP.

Notes:
- Good use of dialogue choices. In my quick initial check, it looked like the writing was appropriate, interesting, and error-free.
- The entries on either side of the new entry in "latest rumors" are dirty (27440159621703420683 and 19630572326932259)
- To increase the script complexity, please add an OnDeath block to the Kwama Queen's script that sets a journal entry if the player is on the quest (and hasn't finished it!). If the player hasn't started the quest, then the block should instead do one of the following:
* Sets a local variable on Arrille to 1 (he'll need a custom script)
* Sets a new global variable to 1
- The GetDeadCount function and the "Dead" dialogue filter are very slow in larger save files. Please change the "Dead" check in Arrille's "kwama mine" dialogue entry (13586267553136717828) to rely instead on the alternatives mentioned above. You will need two entries, one which check for the journal entry and another which check for the local or global variable.
- Please add two follow-up entries for the "Abaesen-Pulu Egg Mine" topic, one which fires if the player is successful and another which fires if the player failed the quest.
- Journal ID #120 in MW_BittercoastMine looks like it's out of order? This is a minor thing.

I'll review again after you resubmit an ESP.

-MrWillis-
Forumite
Posts: 8
Joined: Fri Aug 05, 2016 8:31 am

Post by -MrWillis- »

Thanks Tex!

I will do so sometime tomorrow and try to figure out how to script it. Would be using a global variable be more efficient versus a local variable for Arrille?

Violet
Lead Dev
Posts: 273
Joined: Mon Apr 30, 2018 11:07 am

Post by Violet »

Generally, local scripts are better than globals when it comes to performance unless you make sure the global only fires once (at the appropriate time). However, if you plan on keeping it compatible with most other mods, then I'd suggest a global as a lot of the more immersion based mods tend to add/edit scripts for vanilla npcs.

So in this case a short global (that is, not attached to an object or npc) script that is blocked off with a DoOnce variable would likely be the better of the two options.

So the script in question would need to only fire if the DoOnce variable is 0 (doesn't have to be "DoOnce", you can make the variable anything), if the Journal isn't at the appropriate stage (in this case, the quest hasn't started, so it'd be GetJournalIndex == 0), AND if OnDeath Kwama Queen. Then set a second variable to 1 (the one Arielle's dialogue will use as a filter), and set the DoOnce variable to 1 to avoid the script from firing every frame.

That's just one method though, there are other ways to get the desired outcome. The main thing to remember is that local variables can't be messed with if the NPC that has the variable hasn't been loaded yet, which is why it's either set a new global variable (within its global script) or give Arrielle a new script that does his own filtering if you killed the Queen before the quest starts. Which ever you prefer, though again for mod compatibility reasons I'd suggest the global option.

-MrWillis-
Forumite
Posts: 8
Joined: Fri Aug 05, 2016 8:31 am

Post by -MrWillis- »

Okay, it has been nearly two years but bear with me:

Is this script good enough? It is on the Kwama Queen and sets up a global variable OnDeath. Probably not good enough but want to check first.

Code: Select all

Begin kwamaQueenSeydaNeen

;this handles curing the queen in Abaesen-Pulu Mine in the Seyda Neen quest for Arrille.
;Main idea is, like the Gnisis Mine Quest, is to detect whether queen is cured of disease.
;Also checks if the Queen is dead or not.


if (  OnDeath == 1 );
	set MW_BitterQueenDead to 1
endif

if ( GetJournalIndex MW_BittercoastMine < 10 )
	Return
endif

if ( GetJournalIndex MW_BittercoastMine >= 50 )
	Return
endif


if ( GetBlightDisease == 0 )
	Journal MW_BittercoastMine 50
endif

End kwamaQueenSeydaNeen

Violet
Lead Dev
Posts: 273
Joined: Mon Apr 30, 2018 11:07 am

Post by Violet »

Welcome back.

I don't see anything that immediately jumps out at me as off.

User avatar
Rakanishu
Lead Dev
Posts: 886
Joined: Thu Sep 15, 2016 9:16 pm

Post by Rakanishu »

Looks good. I added two things that jumped out at me and are commonly used in PT quests.
- The OnDeath should likely update the journal if on the quest since it's a signfiicant event. It should only fire 1) if the quest has been started and 2) if it hasn't been completed.
- There's a possibility that the player could cure the queen before the quest starts, so I added a global and a check similar to those in the OnDeath block.

Code: Select all

Begin kwamaQueenSeydaNeen

if ( OnDeath )
    set MW_BitterQueenDead to 1

    if ( GetJournalIndex MW_BittercoastMine > 0 )
        if ( GetJournalIndex MW_BittercoastMine < 70 )
            Journal MW_BittercoastMine 70
        endif
    endif
endif

if ( GetJournalIndex MW_BittercoastMine >= 50 )
    Return
endif

if ( GetBlightDisease == 0 )
    set MW_BitterQueenCured to 1

    if ( GetJournalIndex MW_BittercoastMine > 0 )
        if ( GetJournalIndex MW_BittercoastMine < 50 )
            Journal MW_BittercoastMine 50
        endif
    endif
endif

End
I think the only things left are:
- The entries on either side of the new entry in "latest rumors" are dirty (27440159621703420683 and 19630572326932259)
- Please add two follow-up entries for the "Abaesen-Pulu Egg Mine" topic, one which fires if the player is successful and another which fires if the player failed the quest.

-MrWillis-
Forumite
Posts: 8
Joined: Fri Aug 05, 2016 8:31 am

Post by -MrWillis- »

Okay, I updated my mod to use a global script for Queen Death and added a couple follow-up entries for the "Abaesen-Pulu Egg Mine" topic.

I even added some miners that spawn depending on whether or not the player completed the quest successfully.

LInk:
https://www.nexusmods.com/morrowind/mods/47052

User avatar
Rakanishu
Lead Dev
Posts: 886
Joined: Thu Sep 15, 2016 9:16 pm

Post by Rakanishu »

Sorry for the delay. The latest upload looks pretty good. The last thing you have to do is clean your dirty entries.

"murder of processus vitellius":
- 1616720351991631356
- 1023211710410632024
- 215421237372325771
- 321671945225437535
- 2182878901212026068
- 1181614601662221205

"processus' ring"
- 132381979266658957

"latest rumors"
- 27440159621703420683
- 419630572326932259

You can use either TESAME or tes3cmd to clean them. I like using tes3cmd and a bat script or to quickly delete the dirty entries without having to search for them in TESAME. First, I run a bat script to identify the dirty entries.

Code: Select all

tes3cmd common "Morrowind.esm" "BitterAndBlighted.esp" > "Compare.txt"
tes3cmd common "Tribunal.esm" "BitterAndBlighted.esp" >> "Compare.txt"
tes3cmd common "Bloodmoon.esm" "BitterAndBlighted.esp" >> "Compare.txt"
That bat script will generate a txt file called "Compare.txt" which lists dirty entries with an "INFO" prefix right under their "DIAL"-prefixed entries. Then, using those IDs, you can input them into another bat script to delete them.

Code: Select all

tes3cmd delete --type INFO --exact-id "1616720351991631356" "1023211710410632024" <...> "BitterAndBlighted.esp"
Running the above script will rename the first version of the esp and generate a new one with the original name.

Post Reply

Return to “Modder Showcase”