mr.potato's developer's showcase

11 posts / 0 new
Last post
mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

I am submitting my showcase/claimed quest for review. Here is the link to the relevant claim https://www.tamriel-rebuilt.org/claims/othmura-letter-edalvel-plantation . I am also attaching a link to google docs file that I have been using to better organize my thoughts and progress and that I belive has all needed and relevant information. https://docs.google.com/document/d/1YRB5SQQ0gZpccM7meiEta9nmAmlSOmpR6Ki-...

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetter.esp20.97 KB2023-08-01 14:20
FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
18 min 13 sec ago

Hi mr.potato, thanks for the showcase! The quest looks great for your first work, but there are some issues that need to be fixed.

  1. Thirr Valley and Shipal-Shin section file have been merged and converted into a single file TR_Narsis.esm today. Please update your section files and add a dependency on the new esm.
  2. TR_m7_q_Abeek-Jah, TR_m7_q_Melur_Beloth and TR_m7_Ra'Renji don't exist in the game world, and your esp doesn't have any cell edits. That probably happened by accident after you cleaned some extra records, but that needs a fix nevertheless.
  3. Every NPC added in TR must have a script attached to them, either a generic script starting with T_ScNpc_Mw_Map... or a unique script. TR_m7_q_Abeek-Jah doesn't have any script attached.
  4. Judging by the dialogue and scripts, TR_m7_Ra'Renji takes no part in the quest. I assume you've added him to make the place less empty, since the plantation is not NPCed yet. That's okay here in the showcase, but usually it's better to leave that job for an NPCing developer, to avoid conflicts and confusion about whether your npc is involved in some quest or not.
  5. Your dialogue entries have been copy-pasted from elsewhere, probably from a Google doc. The problem is, advanced text editors like Word or Gdoc use special formatting you need to avoid in the CS. For example, they replace the ASCII apostrophe ' with a different Unicode symbol , which may be not visible in the game due to how MW engine works. If you want to copy-paste your dialogue from somewhere else, you should first copy-paste it to Notepad to convert it back into pure text.
  6. Try to avoid using commas in functions, they cause nothing but random errors. Use spaces instead, for example tr_m7_q_melur_beloth->aitravel -4234.58,-354548.66,513.95 --> tr_m7_q_melur_beloth->aitravel -4234.58 -354548.66 513.95
  7. I think the letter you're supposed to deliver should contain Manse Menas' name, so the overseer can be sure it's not counterfeit. Since the letter is sealed, she might not care about staying anonimous.
  8. NPCs shouldn't have quest items and rewards in their inventories because the game can't track you pickpocketing them. Instead, get rid of "removeitem" and leave only "additem" when they give it to you, and vise versa. If you want a quest item to appear on their corpses as well, it's safer to add an item to the NPC's inventory on their death.
  9. When you're introducing a new topic, use "addtopic" to make sure it will always be unlocked for the player.

Journal:

  1. All journal entries starting from 100 should have the "Finished" flag checked. Otherwise, the quest will remain in your journal forever.
  2. In journal entry 10, "an agent in Othmura" should be separated with commas.
  3. Journal entry 60, which says "I have warned Abeek-Jah that his connection with the abolitionists has been discovered and he decided to flee.", can be interpreted as "I have warned Abeek-Jah that he decided to flee". Please rephrase it to remove that ambiguity.
  4. Typo in journal entry 150: "kiiled"

TR_m7_oth_q_EdalvelLettterSC script:

  1. typo in the word "lettter" -- triple t

Tr_m7_oth_q_melurSC script:

  1. Tr_m7_oth_q_melurSC should be renamed to TR_m7_oth_q_melurSC -- TR should always be in uppercase.
  2. While your approach with using non-existent journal entries works, it's not very intuitive to understand and requires you to duplicate the script conditions, the journal entries and the related greetings. Use local variables control and controlQ instead. That might require you to adjust the journal entries which say that Melur killed the slave.
  3. If you kill Melur after the quest, it shouldn't update journal to 150. Add one more check that the quest isn't finished yet.
  4. Instead of repeating the CellChanged condition twice, you can wrap everything into a single sondition. Use elseif instead of double if-s to check your journal stage, or swap the stages 120 and 130 to do >=110 and <=120 checks and to avoid duplicating them.
  5. You should call AiWander as soon as Melur reaches his destination. There's no reason to keep AiTravel after he arrives to the position.
  6. Make Melur forcegreet you when he reaches the destination and discovers the slave is missing. It should be him who initiates the dialogue there, not the player. Two entries from the "letter to the overseer" topic should be turned into greetings for that.

Manse Menas' script:

  1. disabling Manse in every dialogue entry which finishes the quest is honestly not a good practice. That way, you have to insert the disable command in every possible place where the quest can end, including the murder of the overseer. Instead, please make a script for Manse which disables her on cell change after you started the quest. It's easier to maintain because it happens automatically in a single place, no matter what ending will be chosen.
  2. Also, please make Manse NoLore-ed. Morrowind questgivers usually (but not always) have NoLore and don't offer any generic dialogue.

"Edalvel Plantation" topic:

  1. You can travel from Othmura to Hlerynhul not only on foot, but also by boat. Your directions should mention that, either by telling you about both routes or by giving you more abstract information like "You should travel to Hlerynhul" instead of "follow the road south to Hlerynhul".
  2. Add showmap "Edalvel Plantation" there as well, so its cell is marked on the map

"latest rumors" topic:

  1. Your line should be placed among the rest of Othmura's rumors. Currently, it's overlapped by the rumors above which were filtered in the way to intentionally suppress everything below them.
  2. The rumor shouldn't appear if you started the quest or if Manse is dead.
  3. People in the tavern should lead you upstairs instead of saying Manse is staying "at the Muck Racker’s Hangout". If your questgiver doesn't have NoLore, you also need to make sure they don't say that rumor themselves (but here, it's not an issue).
  4. Your dialogue doesn't answer the question why Manse can't deliver the letter herself. I think the rumor is one of the places where you can expand on that. Instead of simply stating that she's looking for a courier and pays well, you can add some details about her (for example, people notice that she looks suspicious, she's hiding from someone or simply doesn't have much time). Do it as you see fit.

"letter to the overseer" topic:

  1. Please remove the "No" response during the quest. In general, try to avoid adding player responces if they don't offer any actual choice. From a player's perspective, it's a bit annoying that you can't immediately exit the dialogue window without pressing "No". To compensate that, you can change Manse's line to something like "stop wasting your time and deliver the letter".
  2. Manse's disposition should increase by 5 or 10 points when you accept the quest.
  3. Manse shouldn't give you the quest if the overseer or the slave is dead. The rumor in town shouldn't appear as well.
  4. Melur's dialogue entries should check if you have the letter in your possession. Make him ask something like "A letter? Will you give it to me?" and add a Yes/No choice. "Yes" response should appear only if you have the letter with you.
  5. Melur should take the letter from you.
  6. Actions in square brackets should be full sentences. [He reads the letter.] instead of [reads the letter]
  7. When you run functions in dialogue results, it's not necessary to reference the speaker. For example, in Melur's dialogue, you can write forcerun instead of tr_m7_q_melur_beloth->forcerun
  8. Melur should have a special failsafe entry if you killed the slave before giving him the letter.
  9. In the slave's dialogue, the player might want to click on the topic out of curiousity, without the intention to warn him. To prevent that, add a choice where you decide whether to warn him or keep silent.
  10. The slave's disposition should increase if you decide to warn him.

Greetings:

  1. "I have a slave to kill" should end with a period.
  2. Move all "I can't talk right now. I have a slave to kill" entries to Greetings 1. When they are greetings 5, if you're a vampire or you have a disease, one of Greetings 2 or 3 will be chosen instead. It may theoretically break the quest if the greeting is supposed to end the dialogue immediately.

 

mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

Hopefully fixed all of the issues mentioned, submitting for a second review pass.

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetterV2.esp26.1 KB2023-09-09 17:48

we be questing

FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
18 min 13 sec ago

Thanks for your changes, looks much better now. Still, there are some issues left, mostly stylistic ones. Also, I recommend you to read the TR dialogue style guide: https://wiki.project-tamriel.com/wiki/Writing_and_Dialogue_Guidelines (sorry, forgot to mention it the first time).

Greetings:

  • You've put your Greeting 1 entries in the middle of Hlan Oek dialogue, which might be confusing for other people who will modify them in the future. Recreate them at the very top, leaving only the Oath of Silence entry above them.
  • The second Greeting 1 entry from the bottom has a "11111 test journal" filter
  • One of Greeting 5 entries has "aren’t", which features the problem of copy-pasting dialogue from other editors. Change it to "aren't" with a different apostrophe

Rumors:

  • Your rumors should be filtered to 30 disposition
  • You've placed your rumors above the ones filtered to particular classes or cells. To avoid overlapping them, place your entries below the ones with class/cell filters and adjust your Random100 values (I recommend to set it to 90)
  • Your rumors should account for Khajiit NPCs who don't speak in first person. Either rephrase your line to avoid first-person speech, or add an alternative version also filtered to "Local" "T_Local_Khajiit" = 1
  • Your rumors should also have a Melur Beloth dead filter. There'll be no space left for a slave dead filter, so I'd suggest to remove it entirely from rumors and Manse's dialogue, because the quest is possible to complete with him dead already.
  • "Manse Menas has ben holed up" -> "has been"
  • "I wonder how she manages to continue doing her deliveries without leaving the place?" shouldn't be a question. Replace the question mark with a period.
  • buisness -> business
  • Racker’s -> Racker's (different apostrophe again)

Journal:

  • Entry 100: "He was furious that I opened his letter and killed Abeek-Jah." can be interpreted as " He was furious that I killed Abeek-Jah.", just like the one I reported before. Same with 110. Please rephrase them.
  • Entry 130: "Abeek-Jaj" -> "Abeek-Jah"

"letter to the overseer" topic, Manse's dialogue:

  • "Stop wasting my time" entry shouldn't have a disposition filter. With low disposition, after she gives you the letter, she shouldn't say she doesn't trust you enough to talk about that.
  • "Excellent, the name of the overseer is Melur Beloth" -- make it two sentences for better flow. "Excellent. The name of the overseer is Melur Beloth"

"letter to the overseer" topic, Melur's dialogue:

  • "if ( player->getitemcount TR_m7_oth_q_edalvelletter == 1  )" has a double space before a closing bracket, leave only one
  • Change "== 1" there to "> 0". If the player added one more letter to their inventory via console commands, the quest shouldn't break.
  • Melur's dialogue shouldn't have a 30 disposition filter. You're just a courier here, I think he would prioritize his job over his trust to you.
  •  [He reads the letter] should have a period at the end:  [He reads the letter.]
  • Remove "removeitem gold_001 100" and leave only additem to avoid the problem with pickpocketing I mentioned before.
  • "Prepare to die" entry (and in general, all entries with startcombat) should have a Goodbye.
  • Currently, Melur will give you infinite amount of gold if you ask him about the letter after he kills the slave.

"letter to the overseer" topic, Abeek-Jah's dialogue:

  • Abeek-Jah's entries shouldn't have a disposition filter. Why would he refuse a letter if he doesn't trust you? Especially if it may lead him to freedom.
  • Choices should have periods. "[Show him the letter]" 1 "[Do nothing]" 2 -> "[Show him the letter.]" 1 "[Do nothing.]" 2
  • The dialogue doesn't check if you have the letter in your possession.
  • "Go with peace" -> "Go in peace"

Many TR NPC scripts follow the naming convention "TR_m<X>_NPC_<Name>". Your script names should also include surnames to avoid potential confusion between several npcs with the same name. Please rename TR_m7_oth_q_ManseSC to TR_m7_NPC_Manse_Menas, TR_m7_oth_q_melurSC to TR_m7_NPC_Melur_Beloth, and Tr_m7_oth_q_abeekSC to TR_m7_NPC_Abeek-Jah.

TR_m7_oth_q_ManseSC script:

  • =< and => operators are incorrect, they should be <= and >= respectively.
  • "additem letter" should happen if your journal stage is < 10, not <= 10
  • "disable tr_m7_manse menas" is incorrect, it's either "tr_m7_manse menas"->disable (if called from elsewhere) or just "disable" (if called from a local script)

TR_m7_oth_q_melurSC script:

  • Wrap the GetAIPackageDone condition into a GetCurrentAIPackage == 1 check. You shouldn't check that if his AI package is not AITravel.
  • There's no need to use both control and controlQ in different conditions. Using only one of them should be enough and will let you avoid duplicate checks everywhere. Use journal and global TR_m7_Oth_q_eldavelletter_seal checks where you want them to do different things.
  • Instead of "tr_m7_q_melur_beloth->aiwander 0 5 0 52 20 10 10" in his own script, you can write "aiwander 0 5 0 52 20 10 10"
  • GetDeadCount is heavy for performance, use "tr_m7_q_abeek-jah"->OnDeath instead
  • Use PositionCell instead of Position, it's more reliable since Position can sometimes lead to NPCs disappearing

TR_m7_q_Melur_Beloth NPC:

  • Raise his Medium Armor a bit, he should be more proficient at that if he's wearing it
  • Add some clothes to him. NPCs shouldn't wear only armor without any clothes beneath.
mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

I think I managed to fix all of these issues as well. Submitting for review once more.

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetterV3.esp26.02 KB2023-09-10 17:31

we be questing

FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
18 min 13 sec ago

Good work, the latest update has huge improvements and better dialogue. With the hardest part already done, only one or two iterations remain, I guess.

  • The sealed letter should use a paper roll model. For example, check another sealed letter, TR_m7_HH_SvoshLetter.
  • Muck Racker's Hangout -> Muck Raker's Hangout, that's how it's actually called
  • Your rumors are still in the wrong place. To understand how it works, look at all Othmura rumors from bottom to top. Rumors filtered to all town's cells and any class have increasing Random100 values, responsible for the chances of them appearing. Rumors above them filtered to particular places or NPC classes overlap everything below. You should place your new entries above those of the existing rumors filtered to everyone in town.
  • "Why aren't you delivering my letter?" greeting shouldn't have a 30 disposition filter, same as the entry in the topic which you've already edited. Besides, it should be filtered to both QuestID >= 10 and QuestID < 100 (so as not to appear before the quest) and shouldn't have a Melur dead filter.
  • "Stop wasting my time and deliever the letter" -> deliver
  • Not an issue or anything, just a recommendation: when all of your dialogue choices are filtered to the same conditions, you can avoid adding all the filters there. "Function Choice = X" filter alone is enough for it to work.
  • Actions in dialogue should be in square brackets: [Show him the letter.] and [Do nothing.] . This doesn't apply to the responses spoken by the character, such as Yes/No.
  • Swap the choices in Abeek-Jah's and Melur's dialogue so "Yes" option is above. That's more in line with how vanilla quests do it.
  • Make Abeek-Jah mention the letter in "Is there something I can do?" entry. If you don't have it, you don't really understand what to do there.
  • When you warn Abeek-Jah, I think the game should treat it as a freed slave (remember that 15 freed slaves unlock the Twin Lamps). Check how vanilla dialogue changes their disposition and FreedSlavesCounter variable in "go free" topic, and do it here the similar way. Don't change slaveStatus though, because the slave is not actually freed at that moment.
  • Since Abeek-Jah is planning an escape, you shouldn't be able to unlock his bracers. Add a custom line for him at the top of the "go free" topic, in which he refuses your help.
  • Also, add a key called "Edalvel Plantation Slave Key" to Melur's inventory. It's logical that he should have it, even if it's not used anywhere.
  • In Manse's and Abeek-Jah's scripts, add a return if TR_Map == 7 because it's better for performance than to set it at every frame. You did it right in Melur's script.
  • You can break the quest by stealthily killing the slave or killing him before the quest, then delivering the letter to Melur. He'll still try to attack Abeek-Jah and will pay you 100 gold. In order to fix that, you can remove OnMurder check and instead set "TR_m7_q_Melur_Beloth".controlQ to -1 in case when "TR_m7_q_Melur_Beloth".controlQ != 3 for alternative dialogue.
  • Melur's entries filtered to controlQ == 4 should be greetings you receive via forcegreeting. Since they update journal and end the quest, it's not obvious enough that you should talk to Melur again and click on the topic to progress in the quest further. The dialogue might need small changes to account for that.
mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

That was a tricky one, especially with the ondeath check. I did manage to figure it out in the end, though. Thanks for taking the time to review it.

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetterV4.esp25.08 KB2023-09-15 21:55

we be questing

FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
18 min 13 sec ago

Nice work. It's very close to completion, but still has some issues. Fix these and you'll be recommended for promotion.

  1. The player shouldn't know that Abeek-Jah is involved in the quest before reading the letter. Make the journal update on his death appear only after you unseal it.
  2. Journal entry 150 has "Quest Name" flag checked instead of "Finished"
  3. Manse's dialogue entry in "letter to the overseer" shouldn't appear when Melur is dead.
  4. If you want the letter to appear on Manse's corpse, the player should be able to show it to Abeek-Jah even before starting the quest. Or, a much simpler solution and the one I'd personally prefer, just don't add the letter to Manse's inventory on her death.
  5. Use "SetHello 0" together with AiTravel. Melur shouldn't say his voiced greetings and abruptly stop for a few seconds while running to the slave. When AiTravel is done, set Hello back to 30.
  6. Melur's dialogue lacks an entry filtered to journal == 50, seal == 0. That results in a dialogue loop if you unseal and re-seal the letter without warning the slave, then give it to Melur.
  7. PositionCell should always be followed by AiWander. When you move an npc to a different location, his AI package still functions based on his old position. In order to fix that, you should run AiWander afterwards to reset his AI package.
mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

Should be all fixed. I also added an additional journal stage, 170, so that a quest can be finished, if a player kills abeek-jah before taking it.

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetterV5.esp25.27 KB2023-09-16 20:06

we be questing

mr.potato's picture
mr.potato
Quest Developer
Joined:
2023-01-07 18:22
Last seen:
55 min 47 sec ago

Reuplaoding as per conversation on discord.

AttachmentSizeDate
Binary Data TR_m7_Oth_EldavelLetterV6.esp25.59 KB2023-09-16 20:30

we be questing

FlinSunset's picture
FlinSunset
Senior DeveloperQuest Reviewer
Joined:
2022-10-05 00:13
Last seen:
18 min 13 sec ago

All the issues are fixed now. Also, haven't noticed that before, but putting the slave behind the plant where he can't be seen at first was a nice touch.

Good work, that's a nice and clean small quest. Recommending for promotion.

The quest still has a few minor things that I'll change myself in a review:

  • Melur's dialogue for killing the slave should appear only after starting the quest. The reason is, until you take it, you have no idea he is the quest target.
  • It should be possible to free Abeek-Jah after Melur's death. Otherwise, you won't have another option to free him. But anyway, 99% of players won't kill their quest targets without a reason, so that's okay.
  • For simplicity, 4 different journal entries for each ending can be reduced to 2 or even 1, if you omit some details. But in a quest like yours, it's not a big deal.
  • It would be a bit better if Melur had special dialogue after the quest. That way, the progression through the quest feels more natural, because your character would be able to ask him about the letter at any stage.
  • By checking your journal stage and the global var with if-else in dialogue results, it's possible to reduce the amount of Melur's dialogue entries. But your current implementation is also fine.