Jump to content

CTDs when using "IsBlocking" condition on MGEFs.


Recommended Posts

I have a mod. Just an overhaul/tweaks pack for Requiem, basically.

 

One of the things I've done in it is add a condition to most poison and damaging enchantment MGEFs that's just "Subject.IsBlocking = 0". So the poison/enchant won't work if the target is blocking (since, afaik, the "subject" of an MGEF is the reference it's being applied to, not necessarily the caster).

 

Straightforward, this works just fine 99% of the time. No problem with contact poisons or enchants, either by PC or NPCs.

 

However, in certain cases it causes CTDs. Annoyingly, it's not always reproducible. This was very prominent on spider and chaurus spit attacks, to the point I ended up removing the condition from just these attacks. Everything else was fine, as far as I knew (I just chalked it up to being an issue with that specific projectile attack).

 

However, a user has now reported the same issue happening with Aela (using a fire-enchanted bow) in Dustman's Cairn. I was able to replicate this as well on a fairly minimal profile... but again, not totally consistently. It feels like the same issue I was facing with spider spit attacks.

 

Pastebin of the crashlog if it helps.

 

 

There was another mod on Skyrim LE that was using the "IsBlocking" condition that had the same issue with spit projectile attacks - Shields Block Poisons. As far as I know it was never really resolved.

 

All the cases where CTDs have occurred have been related to attacks where the MGEF is applied via a projectile and not the spell/weapon directly, which I suspect is important but I'm not really sure why.

 

 

Before I go pulling my hair out testing all sorts of different scenarios, I figured I'd ask here if anyone actually just knows why this happens. Is there something more to the "IsBlocking" condition I'm missing? The official CK documentation doesn't mention anything in particular about this condition and my Google-Fu isn't turning up any useful results either.

Link to comment
Share on other sites

It's highly possible that you have run into one of those "Game Engine Hole" (a game's flaw), this game engine is far from perfect and is full with this "Holes", especially the SSE version.


I've discovered a bunch of those, here is one example:

If you use this on a 'Ballista':

Event SomeEvent....

Self.Kill(Self)

EndEvent


Event OnDying()

Self.SetCriticalStage(3)

Self.SetCriticalStage(4)

EndEvent

The game will CTD 95% of the times!!!


Unfortunately, you can only be sure by doing a lot of heavy testings in different scenarios.


Don't ever take for granted the wiki, it's full with insurances and lack of information.

Link to comment
Share on other sites

^Did you try OnDeath() instead? OnDying is faster than OnDeath, obviously, but that may be the issue for critical stage changes.

 

I don't like engine limitations, but I like trying to figure out how to get around them. Usually the solution is simple.

Edited by Rasikko
Link to comment
Share on other sites

@ Rasikko


Yeah, since this was a part of one of my Major Add-Ons in one of my previous updates, i did more than just a few heavy testings, as a matter of fact, this is one of the things i've tested far beyond anything until now to cover all possibilities and to ensure a 100% stability on the Add-On, because this is meant to be an asset that it will be use constantly by the player.

* It's a portable deployable droid 'Non-Follower' follower with multi functions.


The issue is related to the 'havok engine' that the ballista uses when its death it's implemented this way.


Just as a reference: This is just a draft example, to be more precise i need to look for my 'Back Up' old code (if i still have it, but there is a high chance i may still have it), to see the exact sequence that triggers a 100% guaranteed CTD. Although, the "Self.Kill(Self)" it's enough by itself to cause random ctds.

Edited by maxarturo
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...