Sotha Sil Expanded

Post about your mods, learn about OpenMW mod compatibility, check for problematic mods, discuss issues, and give us feedback about your experience with modded OpenMW.
User avatar
Jemolk
Posts: 237
Joined: 20 Mar 2017, 02:12
Location: Sadrith Mora

Re: Sotha Sil Expanded

Post by Jemolk »

Capostrophic wrote: 05 Jan 2019, 17:06 There are two problems with Interiors of Illusion:

1) Since non-actor objects don't have a magic effect list, GetSpellEffects fails on them, but since the lighting rods share the script with the flame atronachs there, the script isn't executed for the atronachs either, which leads to the platforms in the location to be unable to be enabled. Morrowind seems to return 0 for non-actor objects when GetSpellEffects is used. If we do that, the script works, but there's a second issue.
2) Atronachs have 100 fight rating for whatever reason so they attack the player... And then fall down from their platforms and die. You can spawn an atronach, set its fight rating to 0 and proceed, though, if 1 is fixed.

TESCS thinks they are supposed to have 90 fight rating, which is much better (they'll only attack if the player is as close as 2000 units). OpenMW-CS freaks out completely, which is weird because I resaved the plugin in it.

No need to rewrite the magic system from scratch to allow non-actor objects to have magic effects, though.
Also quite interesting, thanks!
User avatar
Capostrophic
Posts: 794
Joined: 22 Feb 2016, 20:32

Re: Sotha Sil Expanded

Post by Capostrophic »

Music that was forced by StreamMusic doesn't seem to loop to me on its own in Morrowind, the mod is supposed to loop it manually by putting a timer with the same duration as the track it streams.

Seems that OpenMW-CS resaving broke the AI data of atronachs, it's valid in the original plugin. Probably because all values were zero there so OpenMW-CS decided not to save anything, not even the subrecord itself. Welp.

Maybe the saving isn't broken, though, but the loading is. mAiData might be initialized with garbage data instead of zeroes.

That was it.
User avatar
Jemolk
Posts: 237
Joined: 20 Mar 2017, 02:12
Location: Sadrith Mora

Re: Sotha Sil Expanded

Post by Jemolk »

Capostrophic wrote: 06 Jan 2019, 01:53 Music that was forced by StreamMusic doesn't seem to loop to me on its own in Morrowind, the mod is supposed to loop it manually by putting a timer with the same duration as the track it streams.
Ah, interesting. It didn't seem to be a thing in the Pocket Cabal scripting, so I just made a bad assumption, then. Incidentally, I think I've figured out where the Pocket Cabal script goes off the rails. It's in the fight script, where it's supposed to set the pocket cabal to hiding somewhere. It just doesn't for some reason. Further testing ensues.

UPDATE: Dear god, would you believe the problem was nothing more than the fact that pocket_fightstage was never set to 1 in the edited script posted by sjek on page 1 of this thread? A simple enough fix. Dealt with. The fight now works perfectly in OpenMW. Just edit that back in. Oh, and the music is borked because sjek removed the line "PlaceAtMe "act_sotha_music8" 1 1 1" from the script as well and I, like a fool, just copied and pasted it. Whee.

UPDATE 2: I also fixed the controls not being re-enabled after the pipe falls. It's as simple as putting "return" after "EnablePlayerControls" because otherwise it continues on to run the portion that has DisablePlayerControls again. I can't even.
User avatar
Capostrophic
Posts: 794
Joined: 22 Feb 2016, 20:32

Re: Sotha Sil Expanded

Post by Capostrophic »

You should be able to pass the Interiors of Illusion maze without issues when using the latest code now.

And now Legs of Seht are also fixed.
User avatar
Jemolk
Posts: 237
Joined: 20 Mar 2017, 02:12
Location: Sadrith Mora

Re: Sotha Sil Expanded

Post by Jemolk »

Capostrophic wrote: 07 Jan 2019, 14:07 You should be able to pass the Interiors of Illusion maze without issues when using the latest code now.

And now Legs of Seht are also fixed.
Excellent! Thanks again! SSE can now work in OpenMW! You do have to remove the "SayDone" condition from the Pocket Cabal's pocket_linecontrol script to make it work. From the original, just delete the "if saydone == 1" line and its corresponding endif, and everything should work there. Alternatively, you might be able to separate that out into its own section with some tinkering to make controls reenable and the fight start only after the Pocket Cabal has finished talking. You also have to put a "return" statement into sotha_pipefall following EnablePlayerControls, because otherwise it runs DisablePlayerControls again after it and you can't move. Those are probably the two notable script changes that have to be made to the SSE file itself. I might upload a patched version here in a minute. Oh, also, there's a quest that has its Finished state stuck with a "Name" flag instead, so I'd fix that, too.

I'm going to make sure my other mods work in OpenMW now, and then it's time to start a playthrough! Gotta test my attempted fixes for Illuminated Order in particular.
User avatar
Capostrophic
Posts: 794
Joined: 22 Feb 2016, 20:32

Re: Sotha Sil Expanded

Post by Capostrophic »

Our next frontier is SSE scripts compiling without user intervention. :D

Ok, so SSE uses single-line else if which OpenMW doesn't handle as elseif, this breaks Interiors of Illusion Magnus_getLight script compilation and pipe fall script compilation.
I have a PR up that should fix that.

sotha_famercontain1 tries to declare doonce but there's no name after the type. Simply ignoring the declaration doesn't help.
sotha_hangspeak tries to call forcegreeting on an ID "surrounded" by a single quote, so the parser thinks the call (->forcegreeting) is a broken string. Not sure if this should be worked around.
SothaInnerPuzzleLevel1 and SothaInnerPuzzleLevel4 fail to compile because there's a hyphen before "begin". I guess junk before begin should be ignored.

sotha_pipefall is weird. Maybe Trainwiz can tell what it was supposed to do.
User avatar
Jemolk
Posts: 237
Joined: 20 Mar 2017, 02:12
Location: Sadrith Mora

Re: Sotha Sil Expanded

Post by Jemolk »

Capostrophic wrote: 07 Jan 2019, 22:02 sotha_pipefall is weird. Maybe Trainwiz can tell what it was supposed to do.
I'm pretty sure I know what it's supposed to do, and why it doesn't. It's supposed to first run that last segment that isn't part of an if statement, which disables a rock in the area you're falling into, and either a pipe in that area or the pipe you just stepped out of, I'm not sure which, disables your controls, and sets "done" to 1. Then, it runs again the next frame, sees that "done" is set to 1, and runs the main block of the script, looping for several seconds with a timer, first making a cracking sound that signifies the pipe coming loose, then having the pipe you're in shift downward, with the same mechanism as an elevator, except here it's a collapse. Finally, you get a different crashing sound and are deposited in the stated position. At this point, "done" is set to 2 in what appears to be a precautionary move to ensure it doesn't run again, because of the prior clause that just stops the script right there if done is 2. It also re-enables your controls there. However, because there's nothing ending the running of the script at this point, in OpenMW, it keeps going and runs the part that it was supposed to do first again, including re-disabling the player's controls, as well as disabling some things that are already disabled (so no effect there).

What I'm not sure about is why it worked in vanilla. Would GetStandingPC have returned 0 for some reason? Would the vanilla engine only process a single function per frame? Did it "time out" somehow? I have no idea.
User avatar
Capostrophic
Posts: 794
Joined: 22 Feb 2016, 20:32

Re: Sotha Sil Expanded

Post by Capostrophic »

I've just fixed the problem with GetStandingPC locally, collision map wasn't updated immediately upon a positioncell call if the cell hadn't changed so GetStandingPC returned 1 even though the player has already been teleported to the hall and doesn't stand on the scripted pipe anymore.

So only the elseif issue should be remaining with pipe fall script (and I'm still pretty sure my pending solution should work) once the pretty small change is merged.
User avatar
Jemolk
Posts: 237
Joined: 20 Mar 2017, 02:12
Location: Sadrith Mora

Re: Sotha Sil Expanded

Post by Jemolk »

Capostrophic wrote: 13 Jan 2019, 22:48 I've just fixed the problem with GetStandingPC locally, collision map wasn't updated immediately upon a positioncell call if the cell hadn't changed so GetStandingPC returned 1 even though the player has already been teleported to the hall and doesn't stand on the scripted pipe anymore.

So only the elseif issue should be remaining with pipe fall script (and I'm still pretty sure my pending solution should work) once the pretty small change is merged.
...Huh. Okay then. That's why it worked. Thanks for digging that out.

By the way, I'm pretty sure sotha_farmercontain1 was broken in vanilla as well, it just wasn't as immediately obvious why because vanilla didn't spit errors, just silently failed to run the script and update the journal. I had to use the journal command in the console to finish that quest multiple times in the past, I remember that quite well on thinking about it.
User avatar
Capostrophic
Posts: 794
Joined: 22 Feb 2016, 20:32

Re: Sotha Sil Expanded

Post by Capostrophic »

SothaInnerPuzzleLever1/4 scripts will compile fine in master now.

Two remaining issues I'm aware of:
Rogue quote in sotha_hangspeak makes parser think the following part with forcegreeting is not an explicit reference call (and it must be to work), so without this script the whole Reconstruction quest is unplayable because you can't talk with the NPC.
sotha_watchgate uses a global variable as it it were a function (making a call to the player). Trainwiz thinks it works just fine in Morrowind. Right now global variables don't allow using stray explicit arguments.

Then there's of course the else if issue and sotha_famercontain1 script but I can ignore these I guess (the solution for the first should go somewhere in time).

Also, some weird watchmen fabricants do not attack the player even though they shout angrily when they are attacked, I'm not sure what are these and what are they supposed to do (while being watchmen, headtracking the player creepily)
Post Reply