KnobelKnight's Quest Showcase

9 posts / 0 new
Last post
KnobelKnight's picture
KnobelKnight
Quest Reviewer
Joined:
2023-09-29 15:12
Last seen:
12 hours 16 min ago

Can't Buy a Kill (TR_m2_Ak_CantKill)

My quest showcase focuses on a wandering Nord who is trying to place a Morag Tong writ. The player will have the opportunity to either inform him that his request is impossible, lie to him and carry out the task for a large cash reward, or let his target know that she is in danger for a small cash reward. Successfully killing the target will lead to no consequences at first, but after a day guards in Sailen and Akamora are alerted to the crime and will charge the player with murder if caught within the next month. Additionally, if the player is a member of the Morag Tong, they will be expelled when next talking to a Morag Tong member.

Details, including a walkthrough for all endings, journal stages, a list of all dialogue (broken down by intended context) and more can be found in this google doc.

As the final file is significantly over the stated target size at 47kb, I am open to removing anything that is considered bloat by the reviewers.

This is my first attempt at making something with the Morrowind construction set and so I'm sure there are a lot of rookie mistakes in the scripting. I'm still really proud of what I put together, even if it's safe to say it took a lot more effort than I was anticipating!

Hope you enjoy!

AttachmentSizeDate
Binary Data Clean cbak.ESP46.44 KB2023-09-29 15:49
KnobelKnight's picture
KnobelKnight
Quest Reviewer
Joined:
2023-09-29 15:12
Last seen:
12 hours 16 min ago

v2 of the quest incorporating feedback from Discord.

AttachmentSizeDate
Binary Data Clean cbak v2.ESP47.29 KB2023-09-30 02:31
FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
2 hours 27 min ago

Hi KnobelKnight, thanks for submitting the showcase and for fixing the issues. The quest looks really great for your first work, you have good writing skills, and in most aspects, you know what you're doing in scripts. This quest would be a nice addition to content-empty Akamora.

Here are some issues which should be fixed:

  1. I'm afraid I'll have to ask you to entirely cut the guards looking for you for a month. Time-based events like that and guards charging you for a crime you can't hide from is something that's never done in vanilla, so it feels a bit moddy. If you want the player to be punished by the law, try to find another way to do it, for example add another npc near Idrenie who reports a crime.
  2. Please make Idrenie a bit harder to kill, since Mephalan Vales is a mid-game area. Raise her level, give her a weapon and maybe some armor if it makes sense, and optionally add an npc who reports a crime, or make Idrenie's husband attack you with a forcegreeting after you kill her. But try not to make Idrenie too overpowered, lvl 10 is max for her.
  3. Hrothdor wears Dunmer clothes, which is not really suitable for a traveler from another province. Please find more appropriate clothes for him, for example, something from T_Com_Ep_ set. Also, it would make sense for him to wear some light/medium armor, but that's up to you.
  4. You can't finish the quest if you kill the MT master. Add a special line for Hrothdor for that which ends the quest, or check "Finished" flag in 25 journal entry. The quest shouldn't fail if you talked to the master then killed him, because his response to Hrothdor's request is already known.
  5. Rumors in Akamora shouldn't appear if Hrothdor or Idrenie is dead.
  6. Your rumors overlap half of the rumors in Akamora. Put them a bit lower, either between the entries with 60 and 80 Random100 values, or between 40 and 60. Set their Random100 values to 70 or 50, respectively.
  7. Try to avoid splitting dialogue entries with Continue where you can. For better flow, it's better to combine them into a single entry. I've noticed that at least twice, while talking to the MT master and when you report Hrothdor's plans to Idrenie.
  8. Rename "Idrenie" topic to "Idrenie Odalyn". If someone creates a quest with another Idrenie npc in the future, the topics will overlap. But if you rename it, the topics will be unique for each quest.
  9. MT dialogue in "place a writ" topic should have TR_Map == 2 and T_Local_NoLore filters.
  10. Make Hrothdor's dialogue in "Morag Tong" topic a reported speech instead of I thought, 'I sure wish we had them back in Skyrim!'. Vanilla dialogue never does it like that.
  11. Hrothdor's greeting during the quest should contain the "place a writ" topic.
  12. Dialogue while reporting Hrothdor's plans to Idrenie should offer a choice whether or not to warn her. The player might click on that topic just out of curiousity, without the intention to report Hrothdor.
  13. Hrothdor's dialogue in "Laughing Goblin" topic should have a journal filter. If you unlock the topic somewhere else, then ask Hrothdor about it, he'll say "It's where I'm staying for the time being."
  14. Inside the tavern, place Hrothdor a bit closer to the nearby table, to avoid him blocking the way.
  15. It's not very intuitive that the quest finishes in "place a writ" topic. Either make the greeting mention it, or move the ending to Idrenie Odalyn topic.
  16. "Guar" shouldn't be capitalized.
  17. An MT greeting says "as a %PCRank". Try to avoid it because it can lead to mistakes like "as a Associate".
  18. Akamora cell has a dirty rock edit. Clean it and place Hrothdor again. Also, there are no edits in Sailen cell, so it should be cleaned.
  19. Don't use commas in scripts, they cause nothing but random errors. Instead, use only spaces.
  20. StopScript TR_m2_Ak_q_LGMove should be called even if Hrothdor is dead.
  21. if ( GetJournalIndex "TR_m2_Ak_CantKill" = 140) in TR_m2_Ak_CantKill_After_sc -- missing space before a bracket.
  22. Instead of a special script for disabling, it's better (easier to understand and safer) to disable Hrothdor in his own script based on journal conditions. Or, you can create a global var, set it to 1 on Idrenie's death and make him disable only when it equals to 1.
  23. Same with Idrenie scripts when she goes into hiding. Track current day by using DaysPassed global var. Set a local variable to DaysPassed once, then check DaysPassed value on cell change, and if enough days have passed, enable her. Don't forget to wrap enable/disable into GetDisabled checks.
KnobelKnight's picture
KnobelKnight
Quest Reviewer
Joined:
2023-09-29 15:12
Last seen:
12 hours 16 min ago

Thanks for the thorough breakdown! Fixes should be in for all the issues listed.

AttachmentSizeDate
Binary Data Clean cbak v3.ESP46.93 KB2023-10-01 20:29
FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
2 hours 27 min ago

Some more feedback. These are mostly structural edits to make the quest a bit less complex than it's now. After fixing them, I reckon we'll be done in one or two more iterations.

  1. In local scripts and dialogue results, there's no need to include the npc's id. For example, instead of "TR_m2_Hrothdor"->Disable, you can write only Disable. Instead of Player->GetDistance "TR_m3_Treram_Odalyn", you can inverse it and write GetDistance Player.
  2. Try to avoid GetDeadCount where you can, this function is quite heavy for performance. A better strategy is to set a variable or journal on death and check its value, or do a return above everything if the npc is dead.
  3. When you add a Dead filter in dialogue, set it to >0 or >=1 instead of =1. That way, the quest won't break if the player decides to resurrect the npc or spawn the npc's copy via console.
  4. Move Treram's greetings which initiate combat to Greeting 0. They should have higher priority than disease and vampire greetings (Greeting 2 and 4), as well as the Oath of Silence entry in Greeting 1.
  5. Instead of checking the faction of a particular npc upon killing Idrenie, it's easier and safer to directly check your rank in the Morag Tong with GetPCRank function.
  6. If you want to introduce a new topic alongside with a journal update (in your case, it's "Laughing Goblin" and an update to stage 30), the topic should be already available at the previous journal stage to appear as a hyperlink. In the "Laughing Goblin" topic, add a "default" entry for Hrothdar where he describes the tavern, put the "that's where I'll be" line above it, then move the entry filtered to the tavern cell above those two.
  7. Your generic rumors should either have a Khajiit version or avoid the npcs talking in first person. Removing "I wonder what's going on?" will both solve this problem and improve flow in that entry.
  8. Two Hrothdor's dialogue entries in "Idrenie Odalyn" topic start TR_m2_Ak_CantKill_After_sc script, which no longer exists.
  9. The order of some of your dialogue entries is quite unnatural, which makes it hard to understand the logic behind them. Try to reorder them to make the journal filter increase while going from bottom to top. Check vanilla faction quests for reference.

Also, please read the TR style guide: https://wiki.project-tamriel.com/wiki/Writing_and_Dialogue_Guidelines#Style . Your dialogue doesn't have any stylistic issues, but it's important to know these conventions nevertheless.

KnobelKnight's picture
KnobelKnight
Quest Reviewer
Joined:
2023-09-29 15:12
Last seen:
12 hours 16 min ago

Made all of your changes and fixed a couple bugs I found myself.

Reordering the topics/greetings was complex. I tried to test everything to make sure dialogue only popped up when it should but it's possible a few lines got past me. Other than that everything should be good.

AttachmentSizeDate
Binary Data Clean cbak v4.esp45.69 KB2023-10-07 18:10
FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
2 hours 27 min ago

The quest looks better now, but still has a number of issues:

  1. Hrothdor shouldn't have 1500 gold in his inventory because the game can't track you pickpocketing it. Instead, remove "removeitem" when he rewards you with gold, and make the money appear on his death if you kill him before the quest is complete.
  2. Hrothdor's dialogue entries in "place a writ" and "Idrenie Odalyn" topics still have unintuitive order. The journal stages should increase while going from bottom to top (not from top to bottom). This is not a strict rule, but a recommended practice to make them easier to understand.
  3. journal stage 110: "She plans to flee, but first rewarded me with some coins." -- mixing present and past tenses is something that's almost never done in vanilla quests. Use only past simple here, like "She said she would flee, but first rewarded me with some coins".
  4. after you kill Hrothdor during the quest, you still can report his plans to Idrenie, receive a gold reward (despite already collecting 1500 gold from Hrothdor's corpse) and make Idrenie go into hiding.
  5. It's nice that you made Hrothdor mention Andothren MT, but it's too far from Sailen. Make it some closer place instead, like Almalexia.
  6. Check "corpses persist" on Idrenie, so her corpse with the amulet doesn't disappear after a few days.
  7. After I finished the quest by killing Idrenie and chose the "place a writ" topic in Hrothdor's dialogue, he was still telling me to kill Idrenie and bring her amulet.
  8. I started the quest, killed Idrenie, then talked to the MT master. He said the Nord was finally gone, but Hrothdor was still standing outside.
  9. Try to avoid making nested if-else blocks where you could. Doing everything in a single if-else block is better for performance. For example, in Idrenie's script, change else <newline> if ( GetDisabled == 1 ) to elseif ( GetDisabled == 1 )
  10. TR_m2_Ak_q_LGMove should call PositionCell from Hrothdor's id, otherwise it's not obvious who is going to be PositionCell'ed. Currently, it works as intended only because you started the script from Hrothdor's dialogue result, but otherwise it will break.
  11. Try to avoid using GetDeadCount when it's called at every frame, because this function is heavy for performance. Instead, add OnDeath checks which set a variable (local or global) to a different value, then check its value instead of running GetDeadCount. That should be done in Hrothdor's and Idrenie's scripts.
  12. In addition to the above, the GetDeadCount check in TR_m2_Ak_q_LGMove script can be simply replaced with OnDeath for the same reason.
  13. The ids you use for items and some scripts make it hard to identify what quest they belong to. Instead, they should contain the quest name or involved characters, for example: TR_m2_Ak_q_LGMove --> TR_m2_Ak_q_HrothdorLGMove, TR_m2_Ak_q_writ -> TR_m2_Ak_q_IdrenieWrit, TR_m2_Ak_q_id_am -> TR_m2_Ak_q_IdrenieAmulet
KnobelKnight's picture
KnobelKnight
Quest Reviewer
Joined:
2023-09-29 15:12
Last seen:
12 hours 16 min ago

All issues cleared up.

AttachmentSizeDate
Binary Data Clean cbak v5.esp46.53 KB2023-10-20 03:35
FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
2 hours 27 min ago

All issues are fixed now. Neat quest and impressive work for your first attempt at modding. Recommended for promotion.