Posting my progress so far. The writing is pretty much done, the scripts are still WIP.
Table doc with journal, dialogue, and dialogue results script
https://docs.google.com/spreadsheets/d/1tid2bYxcfokqJOgzpCgqAC7vUDNPRdig...
Text doc with general infos and NPC script (at the end).
https://docs.google.com/document/d/1V2fwrFtLgxwUkvx50-KsfYGgcWsOZMpraIjv...
Pitch
The questgiver, Dunmer trader Fari Niernis, wants Imperial noble Hyrmiel Farragian gone from Darvonis. Farragian arrived some weeks ago, claiming to be on a mission from the Imperial Legion to secure the roads and facilitate trade. He has been butchering so much of the surrounding wildlife that hunters, and trade in Darvonis as a whole, begins to suffer. Niernis thinks Farragian is an impostor, and offers the PC to get rid of the fool for some cash. She suggests to lead him on a dangerous cave crawl to scare him off.
Upon talking to Farragian, it becomes evident the man is so full of himself he doesn’t (want to) see the harm he causes to the population he thinks he serves. Farragian also has a not-so-hidden interest in taxidermy. He sends some of his kills to Old Ebonheart to have them stuffed, and sent to his family’s estate in Colovia [I might try to find an appropriate trader in OE to fill that role and give some dialogue once the quest is over]. PC convinces Farragian to go to the cave by telling him there are rare creatures to hunt, that would make a nice prize for his collection, in addition to make the people safer, of course!
1. If PC kills Farragian after having talked to Niernis about it, she is pissed and gives a smaller gold reward.
2. If PC goes on a cave crawl with Farragian, he panics once he has spent some time in the cave (killing enough Venomous Parastylus or going under a certain health threshold), and wants to go home, offering PC his enchanted crossbow. Niernis is thrilled, and offers bigger gold reward and increased disposition with every Darvonis NPC.
3. If PC goes to Old Eboheart inquiring to guards about Legion impostors, he will get directed to captain Maurissha, who will promptly jail Farragian. Niernis is thrilled, and offers the same reward as 2.
2022-12-11 22:16
1 month 6 days ago
I've implemented everything in the CS, and I have a number of issues, mainly related to - you guessed it - scripting. I copied my whole NPC script in spoilers below. I'd be grateful if someone could take a look at it and explain to me what I did wrong, especially regarding the following points:
I'm running into a first series of troubles when the PC first talks with the quest NPC I've created (TR_m3_q_Farragian, with TR_m3_ScNPC_Farragian script attached), and triggers a series of error messages when opening the dialogue window - which I can safely ignore:
- first one is "Script error: EXPRESSION in TR_m3_ScNPC_Farragian";
- second one is "Left eval";
- third one is "==> CompileAndRun problem was found in Greetings, "Greeting 5", "[text of the greeting displayed at that very moment in the dialogue window, with result scripts working correctly]".
The script below has two commands moving the quest NPCs I created. One "position" and one "positioncell" at the very end, that are both very bugged:
- "position" disables the npc on the spot while in dialogue, and running "placeatpc" doesn't bring it back (which prevented me to test the other parts of the script);
- the "positioncell" ifblock doesn't run at all: no npc movement, no removitems.
Here's the NPC scipt in spoilers (sorry the forum doesn't seem to display the indents) and in the following googledoc: https://docs.google.com/document/d/1KW2hmZ26wr8c7Khf4uApDzhszRSOfTV2KoCb...
BEGIN TR_m3_ScNPC_Farragian
;involved in Darvonis misc TR_m3_Dar_Farragian
Short NoLore
Short T_local_NPC
Short T_local_NoLore
short TR_Map
short doOnce
short control
short controlQ
float GameHourCheck
if ( TR_Map != 3 )
set TR_Map to 3
endif
;OnDeath Journal updates
if ( OnDeath == 1 )
if ( GetJournalIndex TR_m3_Dar_Farragian == 5 )
Journal TR_m3_Dar_Farragian 6
elseif ( GetJournalIndex TR_m3_Dar_Farragian >= 10 )
Journal TR_m3_Dar_Farragian 60
endif
endif
;moving Farragian to Maesabun cave
if ( doOnce == 0 )
if ( GetJournalIndex TR_m3_Dar_Farragian != 20 )
return
elseif ( CellChanged )
if ( GetInterior )
Position 141228.391,160024.359,182.757,5400
set doOnce to -1
return
endif
else
set GameHourCheck to ( ( GameHour - GameHourCheck ) * 30 / TimeScale )
if ( GameHourCheck < 0 )
set GameHourCheck to ( -1 * GameHourCheck )
endif
if ( GameHourCheck < 0.01 )
if ( GetDistance, player < 6500 )
return
endif
endif
Position 141228.391,160024.359,182.757,5400
set doOnce to -1
endif
endif
set GameHourCheck to GameHour
;forcegreet inside Maesabun cave
if ( GetJournalIndex TR_m3_Dar_Farragian != 20 )
return
elseif ( GetPCCell TR_SS06_Cave_01 == 1 )
if ( GetDistance Player <= 1024 )
if ( GetLOS Player == 1 )
if ( GetHealthGetRatio 0.3 )
ForceGreeting
return
elseif ( TR_m3_q_ParaVn_Darmisc->OnDeath )
if ( GetDeadCount TR_m3_q_ParaVn_Darmisc >= 3 )
ForceGreeting
endif
endif
endif
endif
endif
;forcegreet outside Maesabun cave
if ( GetJournalIndex TR_m3_Dar_Farragian != 30 )
return
elseif ( GetJournalIndex TR_m3_Dar_Farragian == 30 )
if ( CellChanged )
if ( GetDistance Player <= 1024 )
if ( GetLOS Player == 1 )
ForceGreeting
endif
endif
endif
endif
;disabling Farragian after cave crawl
if ( GetJournalIndex TR_m3_Dar_Farragian != 35 )
return
elseif ( GetDisabled )
return
elseif ( CellChanged )
if ( GetInterior )
Disable
return
else
set GameHourCheck to ( ( GameHour - GameHourCheck ) * 30 / TimeScale )
if ( GameHourCheck < 0 )
set GameHourCheck to ( -1 * GameHourCheck )
endif
if ( GameHourCheck < 0.01 )
if ( GetDistance, player < 6500 )
return
endif
endif
Disable
endif
endif
set GameHourCheck to GameHour
;jailing Farragian after ratting on him
if ( doOnce <= 0 )
if ( GetJournalIndex TR_m3_Dar_Farragian != 40 )
return
else
PositionCell 50.581,8489.313,1237.667,5400, "Ebon Tower, Legion: Dungeons"
AiWander 0 0 0 0 0 0 0 0 0 0 0 0
removeitem silver_helm 1
removeitem silver_cuirass 1
removeitem T_Imp_Silver_PauldronL_01 1
removeitem T_Imp_Silver_PauldronR_01 1
removeitem T_Imp_Silver_Greaves_01 1
removeitem T_Imp_Silver_Boots_01 1
removeitem T_Imp_Silver_BracerL_01 1
removeitem T_Imp_Silver_BracerR_01 1
removeitem "silver claymore" 1
removeitem TR_m3_q_PoachersCrossbow 1
removeitem "steel bolt" 50
removeitem "silver bolt" 30
set doOnce to 1
endif
endif
End
2022-12-11 22:16
1 month 6 days ago
EDIT 06/12:
Cleaned dependencies with Wrye Mash. Or tried to, at least. Also uploaded the version of Sundered Scar I worked with, if that's any help.
EDIT 28/11:
Uploaded version 1.2 with typo fix, an attempt to implement correct filters for latest rumors (see bottom of the spreadsheet) and AIWander fix to keep an indoors-NPC still.
EDIT 27/11:
Uploaded version 1.1 to implement FlinSunset's corrections to Journal and scripts (modifications outlined in yellow in the google docs).
+ minor edits (creature placement, NPC hair)
My showcase is ready for review.
Dialogue & results scripts spreadsheet:
https://docs.google.com/spreadsheets/d/1tid2bYxcfokqJOgzpCgqAC7vUDNPRdig...
Objects and locations recap, IDs, non-dialogue scripts:
https://docs.google.com/document/d/1V2fwrFtLgxwUkvx50-KsfYGgcWsOZMpraIjv...
Quest starts by talking to Fari Niernis in the Darvonis ash market (TR_Darvonis_1). "Optional" quest start if the player talks to Hyrmiel Farragian in the Innside Out (TR_Darvonis_12), at which point Darvonis residents will point PC to Fari Niernis.
In the CS, everything should be quickly found using "show modified only", except Greetings 1 and 5 that are near the bottom of the list.
The area where the quest happens is still indev: Darvonis is not NPCed, exteriors are unfinished, and I think the version of the cave I have is the old one, rather than the refitted one with sulfur pools. This prevents me to present a quest ready for implementation, but I do hope it can satisfy the showcase requirements still.
To circumvent this:
- I placed the questgiver in the int semi-randomly (not in front of her shop) and I created two dummy NPCs in Darvonis - one Dunmer and one not - to test for "latest rumors";
- I placed venomous parastylus a bit stacked at the entrance of the cave, for easier testing (the cave quickly has a plateform over lava that is hard to get through with a companion);
- it is not possible to follow quest directions in dialogue to the cave: there are no roadsigns yet, and the track to the cave is interrupted halfway at the border between SS04 (Darvonis) and SS05.
2022-04-18 15:48
9 hours 28 min ago
Really nice work on this showcase! It's clear you've put a lot of effort in, including filling in dialogue for the world and characters around the central figures. That's always appreciated, and helps to make the world feel more real and connected. Your writing is very good, with an excellent sense of rhythm to keep it interesting. There are just some grammatical and phrasing issues which I've noted below. Your scripting is functional too, which is great, but it needs some work on its goals in order to be more resilient to the actions of the player.
Detailed dialogue notes:
Other notes
2022-12-11 22:16
1 month 6 days ago
EDIT 11/01: uploaded v 2.2 with dialogue tweaks, mainly rumor filtering.
Here is v2 of my quest showcase and the updated documents. For easier reviewing, here’s the key to spot the changes since review:
- yellow outline for changes in the scripting doc;
- yellow cells for new lines of dialogue in the dialogue doc.
Next are a few comments for when I took liberties from the reviewer’s advice or for easier tracking of scripting changes.
Scripting doc: https://docs.google.com/document/d/1V2fwrFtLgxwUkvx50-KsfYGgcWsOZMpraIjv...
Dialogue doc: https://docs.google.com/spreadsheets/d/1tid2bYxcfokqJOgzpCgqAC7vUDNPRdig...
Remaining issues:
- I think my latest rumors aren’t working: can I please have a course on rumor filtering?
- talking to Farragian before talking to Niernis somehow makes the “Hyrmiel Farragian” topic available when talking to Niernis, when it should only be available once clicking the “slaughtering the wildlife” topic. Clicking the former before clicking the latter starts the dialogue sequence that might start the quest, without the background provided by the “slaughtering the wildlife” topic.
Writing correction notes:
=> went with “I’m Indoril Nerevar reborn”.
=> went with “What good are those armies of dumb troopers and dull pen-pushers if they can’t enforce their own law upon their own people?”
=> cut the sentence differently: “The guy just wanted to hunt and send all the trophies to his family’s estate in Colovia. He practically starved the whole town as a result.”
=> I’ve added dialogue in the tavern and before the cave foreshadowing Hyrmiel flipping out, but I don’t want him to be a complete wimp. He’s supposed to be a good hunter that has been successfully killing creatures in the wilds around Darvonis for some weeks now. He’s not half the fighter he pretends to be, and he’s being burnt out by the harsh living conditions in Sundered Scar: the little cave trek PC lures him in is the straw that breaks the camel’s back.
=> That’s something I changed from quest design when I started to write his character. If Farragian is such a weakling, how come his hunting is so effective it disrupts the local wildlife and economy? That’s why I toned down the cowardliness & ramped up the “self-interest covered in self-righteousness” and aversion to discomfort to motivate his actions.
Scripting correction notes:
=> Maurissha's dialogue now starts a global script like the one moving Farragian from the tavern to the cave.
=> I disabled the parastylus through the unique creature's local script, and enabled them through the global script that moves Farragian to the entrance of the cave.
=> edited the killcount and forcegreeting conditions in the creature’s local script.
=> Ripped the FW IC quest as you advised, and modified it slightly (when I copied it outright, the radius limit worked only once).
=> I used the extra journal entries to have the questgiver change their greeting and dialogue if the player first refuses the quest. I’m using “talk to pc” dialogue function for the greeting, and a global variable for the quest offer (topic “Hyrmiel Farragian”).
=> I didn’t change it, since 1. it doesn’t fit the character limit; 2. the “_q_” part is enough to make him unique; 3. I’m lazy.
2022-04-18 15:48
9 hours 28 min ago
Thank you for the massive changes. You've done really well to develop on your scripts. Unfortunately the script to check the distance of Farragian to the cave, and have him walk back, isn't working -- at least on the Vanilla engine. After the forcegreeting, he just stands there, which then breaks the quest because when I try to get him to follow again he automatically forecegreets and stops following. I think it might be because the pathfinding around the cave is super-broken, maybe because of the sulfur activator. But also he doesn't even try to start walking towards the cave entrance, so there might be something else going on here. More testing is needed.
However I think another alternative would be to change the scripted solution so instead of controlling his follow distance, you just make him not start following until you're both inside Maesabun, and after you greet him outside Maesabun he will positioncell into Maesabun once the player enters the location. You've already demonstrated a clear understanding of positioning scripts, and this one is only slightly more complicated, so it shouldn't be too hard to make it work. I think this would be a more elegant solution than the previous one I gave you.
Make this change and if nothing else breaks I reckon you'll have passed the showcase.
2022-12-11 22:16
1 month 6 days ago
Here is v3!
I deleted the "activator" solution, and instead used a global script triggered by Farragian's greeting in front of the cave. Copying it here because I won't update my design docs:
BEGIN TR_m3_Dar_Farragian_mover3
If ( GetPCCell "Maesabun, Obalus Burial" == 1 )
TR_m3_q_Farragian->PositionCell 4142 1638 11087 90 "Maesabun, Obalus Burial"
TR_m3_q_Farragian->AIFollow player 0 0 0 0
Stopscript TR_m3_Dar_Farragian_mover3
Endif
END
Now, I guess the player could go out of the cave before triggering the next stage of the quest and have Farragian follow him around everywhere: should I cover for this too? I have an idea but it would involve the above script to add another journal entry, and then add the following ifblock to the NPC script:
if ( GetJournalIndex TR_m3_Dar_Farragian == 22 )
if ( Getinterior == 1 )
return
elseif
Forcegreeting
endif
endif
With AIWander in the Forcegreeting's dialogue result.
Other questions I asked myself during my showcase but didn't really impede my progress:
- I wasn't sure where to put my greetings or my "common topics" (my trade, latest rumors, background): between the relevant placeholders, but at the top or at the bottom? And is there a way to quickly find the dialogue placeholders (BEGIN M3 DARVONIS for example)? Because they're a bit of a pain to look for.
- is the documentation provided (google docs, script comments in NPC local script) any use to a reviewer, or is it too much/useless?
2022-04-18 15:48
9 hours 28 min ago
That's a good point. Potentially you could edit the exit door so when it gets activated Farragian stops following you while he's inside.
At this point however I think you've more than demonstrated a capacity for scripting, writing, and dialogue ordering to pass your showcase.
On the subject of topics, generally it's best to put your unique dialogue higher in the list between the placeholders. If you want to find a placeholder, you can use Edit > Find Text to search for it and then double-click on the entry in the Find Text window to jump to it in the dialogue window.
With the ability to show only edited records, CSSE makes your esp a good enough database for understanding everything you're doing. I personally don't use google docs to track my work. I don't find them especially useful as a reviewer either.