SpottheCat Quest Showcase

5 posts / 0 new
Last post
SpottheCat's picture
SpottheCat
Interior DeveloperQuest Developer
Joined:
2024-02-25 03:38
Last seen:
10 hours 4 min ago

This is my (curerently WIP) Quest Showcase using the Shipal-Sharai misc A Family Affair. It is currently about 80% done but I wanted to post it earlier in order to get feedback and help with some situations I don't know how to handle. I have uploaded a document (template copied from Ronik) below that covers those issues as well as added topics, journal, scripts, etc. 
 

Requirements

Location: Yes, Shipal-Sharai

Conventions: TR_m7_ShiSha_FamilyAffair (same as Lifting Spirits)

Journal: 6+ stages (yes, 26)

Topics: Yes, adds 5 topics, Greeting 1 and 5, and latest rumors

Scripts: Uses all 5

Script Variables: I beleive I did this correctly, not sure if setting TRmap goes at beginning or end.

Size: Aim for 15-20kb. Must not be greater than 70kb in size. Currently 55

Standards Validator: Ran, w/ following warnings 
Cell Shipal-Sharai, Sedri Residence contains 3 unowned items (These are 2 empty skooma vials and the NPC marker) 

Clean: Yes

Google Doc

AttachmentSizeDate
Binary Data TR_m7_ShiSha_FamilyAffair_v6.ESP56.53 KB2024-06-06 04:13
Ronik's picture
Ronik
Senior DeveloperQuest Reviewer
Joined:
2023-04-16 18:05
Last seen:
34 min 48 sec ago

Hi, thank you for submitting your showcase! :)

Overall you've done a good job, especially when it comes to writing and playtesting. From the players' perspective, the quest works fine and is intuitive. However, I think the implementation suffers from the fact that the quest is sort of deceptively complex and as a new quest developer, you probably don't know the full scope of tools at your disposal.

So together, we should try to simplify the implementation a fair bit, mainly the amount of journal entries :) Like I already told you on Discord, this isn't a full review and we'll focus on the main points first.

First, to answer your questions from the Google doc:

  • I get two journal updates when bringing Ravos to Autrinix Residence (Check his script starting at GetAIPackage)
    • Probably just some engine quirk in regards to how AI packages are handled. Just add a GetJournalIndex < 70 check before you update the journal to resolve this.
  • Too much back and forth maybe. Could add a stage where you escort Ravos to a closer location first (Ancestral tomb?)
    • I think the quest as it is is fine in this regard. I wouldn’t change it.
  • If you speak to Ravos first (10) then speak to Ulyne (15) and then speak to Ravos again you will get both the similar journal entires (10) and (18)
    • Easy fix is to remove 10 altogether. Talking to Ravos shouldn’t update the journal immediately. You should only trigger the journal update if the player agrees to help him. In other words, remove journal entry 10 and keep only journal entry 12.
  • Do I setmap at the beginning or end of the script?
    • End of the script, always if possible.
  • Is SetHealth 0 on Ravos going to work when he’s placed further away
    • Yes, it should
  • How to handle the choice b/w Ulyne and Drerayn. Currently telling Ulyne Ravos is alive (60) locks you out of agreeing to kill Ravos (30), but you can still lie to Drerayn that you will kill Ravos and then tell Ulyne (60). Being able to go both ways would be too complicated imo, as I’m an unsure how the player would be able to lie to Ulyne after telling her the truth
    • Right now, the quest sort of breaks if you do this. If you agree to kill Ravos for Drerayn and tell Ulyne Ravos is alive, and then kill him, the journal is updated to stage 65, Ulyne’s dialogue doesn’t change (she still tells you to bring Ravos to the manor ASAP), and Drerayn doesn’t give you any reward.
    • This obviously needs to be fixed somehow. You could do this with usage of globals, but honestly, a much better way would be to restructure the quest journals somewhat - more on that later.
  • How to handle calm/command humanoid on Ravos/Drerayn during fight
    • This is an edgecase I don’t think is worth covering, but if you really want to, you can add a Greeting 1 to Drerayn that would just make him attack Ravos again..
  • How to handle Ravos Dieing in these circumstances, How to handle bringing Ravos to Ulyne
    • I’ll elaborate on these later since I think it’s basically the same thing.

One major point from my side:

  • The quest, as it is right now, pretty much works well from the player perspective (barring some edgecases, like the one where you agree to help both Ulyne and Drerayn), but the different routes are very hard to keep track of in the CS since you crammed them all into one journal ID. This also evidently caused you issues during implementation, since it forced you to filter your dialogue like this: 
  • You also have four different journal updates for Ravos’ death and three different journal updates for Drerayn’s death. Some of these could definitely be handled by Dead dialogue filters instead. Some of these could be instead handled by splitting the journal into subquests (quests with a different ID, but the same quest name).
  • I think the journal entries could be dramatically simplified if you’ll just:
    • Remove all of the journal updates on death (45, 50, 65, 78, 80, 105) except for 110 and 125. These, I believe, are the only “unwinnable” scenarios in the whole quest. Technically 125 isn’t, since you could still finish the quest with Drerayn, but for simplification I’d suggest that Drerayn just attacks you if you kill his wife and talk to him.
    • Use dialogue filters for Dead >= 1 instead of the journal entries I just listed.
    • Split the journal entry 30 into its own subquest. Then, in dialogue with Drerayn, you can just check if Ravos is dead and you have previously accepted Drerayn’s offer (e.g. TR_m7_ShiSha_FamilyAffair_a == 30). That way, the player has freedom to decide whether to follow Drerayn’s or Ulyne’s route at any point, possibly even after they grab Revos and start escorting him to Shipal-Sharai.
    • You could also split the journal entries even more, and, for example, have a separate quest ID for Ulyne's route and Drerayn's route. This could possibly help to make the filtering easier, but I'm not sure if that's actually necessary in this case, though.

Just a couple of other minor issues I noticed:

  • “poisoned by family” is a really unwieldy topic since it’s just very awkward to fit in most sentences. I’d replace it with “was poisoned”
  • Default disposition of 0 causes issues in Ravos’ dialogue. When you cure him and ask him about Ulyne, he refuses to tell you about her even though he sends you after her. Just set it to the default of 50 IMO.
  • I noticed a lot of missing commas. Not sure if you’re using some sort of spell checker, but it should cover most of them
  • A bit ironically, your scripts contain a lot of commas - you should remove all of those since they just cause random issues 😀
  • Would be nice if you could tell Ravos to wait and follow you (the travel together topic)

Please let me know on Discord if you have any questions, I'll be happy to help you :)

SpottheCat's picture
SpottheCat
Interior DeveloperQuest Developer
Joined:
2024-02-25 03:38
Last seen:
10 hours 4 min ago

Updated. Should be fully working minus a few edge cases with Calm Humanoid. 

Edit: uploaded a new version becase I realized the rewards were too high.

Ronik's picture
Ronik
Senior DeveloperQuest Reviewer
Joined:
2023-04-16 18:05
Last seen:
34 min 48 sec ago

Good work :) I did a full review now, so there's a couple of new issues, but most of them should be fairly easy to fix.

Quest flow
  1. When you’re at journal stage 18, you should be able to go back to Drerayn, tell him that Ravos is alive and have him give the offer to kill Ravos to you. Similarly, you should be able to do Ulyne and tell her that Ravos is alive, but she should refuse to believe you without proof.
  2. If you kill Ravos before accepting Drerayn’s offer, you should be able to immediately tell him, skip the whole dialogue chain, and just have Drerayn give you the reward and finish the quest.
  3. If you escort Ravos to Drerayn without talking to Drerayn first, let Drerayn kills Ravos, and then talk to him, he keeps repeating the greeting where he expresses his surprise that Ravos is still alive. I’d expect him to either attack you, or give you a reward, or at least have some unique reaction to this.
  4. Once you tell Ravos that you should bring him to the Autrinix manor (Choice = 6), you should have him follow the player with AiFollow automatically without the player having to prompt him through the “travel together” topic. Ravos should also mention the “travel together” topic somewhere in that dialogue.
Scripting
  1. Ulyne’s reward doesn’t work at the moment. This is because you set the controlQ variable to 1 when you tell her that Ravos is alive, but then you check if the variable is 0 when you try to give the player the reward (and it will always be 1 at that point, I think). You also do the same check on the dialogue line filtered to journal >= 175.
  2. The Choice dialogue in the “travel together” topic is a bit messed up. but it’s easy to fix - just remove the quote and the space after 2.
  3. Usually when you use StartCombat, you want to use it in combination with “SetFight 100” to avoid some of the Calm Humanoid edgecases you’ve mentioned.
  4. When you give a NPC some clothes via a script, you should also use the Equip function to make sure they actually wear them. On the vanilla engine, this is sometimes an issue.
  5. You use ClearInfoActor a lot. To be honest, I’m not quite sure what’s the “official” project stance on this, but vanilla has used it only very sparingly for dialogue with variables shared across multiple NPCs (like I’m %Name, %Rank of %Faction etc.) You use it for all of the replies that are, shall we say, “non-essential” to the quest, but to be honest I would just delete most of these ClearInfoActor uses, if not all of them. The dialogue lines don’t bloat the journal too much, and sometimes it might even be useful to have the full dialogue record.
  6. You also overuse Goodbye slightly. This is more of a stylistic choice than anything else, but I would try to use it a bit less. Specifically, the goodbyes that have bothered me a bit were:
    1. After Drerayn’s “Thank you. You rarely meet such understanding people nowadays. Talk to me again when the job is done.”
    2. After Drerayn’s “Is it done? If it isn't, you won't get a single coin out of me.”
  7. This is somewhat superstitious, and I’m not gonna ask you to delete them all, but in general - you simply don’t need commas while scripting. They basically do nothing except introduce random errors. With MCP/MWSE it should be less of an issue than with pure vanilla, but still there is no reason to use them.
Dialogue

I’ve got very little remarks regarding dialogue as it’s quite well written, except for these:

  1. Ravos’ dialogue before you cure him is way more lucid than I would expect from the first greeting. I’d suggest making it slightly more disjointed.
  2. “He send you check if if the poison finished its work yet?” - This sentence needs a bit more love 😀
  3. "I'll gut you and eat your entrails!" - This is a bit too edgy IMO for a Dunmer. Tone it down a notch, please.
  4. There’s still a couple grammar issues and mistakes (spelling of “believe” is a consistent issue, also missing commas) that would be fixed by any spellchecker. It’s nothing that can’t be fixed in review, but I’d suggest introducing some spellchecking tool into your workflow to make future reviews easier 🙂

I reckon we should be done after the next pass :)

Ronik's picture
Ronik
Senior DeveloperQuest Reviewer
Joined:
2023-04-16 18:05
Last seen:
34 min 48 sec ago

The latest version is looking good except for some minor writing mistakes. Good job! Recommended for promotion.