Jump to content

Need Help With Scripting a Mod I'm Making


Omny

Recommended Posts

I've played around with timers and got it to work after looking at the vanilla disintegration effect script and GECK wiki. Just needs a bit more polish and it should look fine.

 

As for the dismemberment, I think I'm going to see if I can just straight-up disable dismemberment for this, either for energy weapons or NPCs wearing the skeleton outfits. Having the skeletons lose their bits either way just doesn't gel with my "vision" of this mod.

 

I'm gonna see if I can somehow script out a way to either:

 

A: apply No Dismemberment/Explode to all energy weapons across the board (to save on having to edit every weapon and to avoid conflicts with other mods)

 

or

 

B: disable dismemberment on DefaultBodyPartData for skeletonized NPCs, or, perhaps replace it with a copy of my own BodyPartData with dismemberment disabled on all the biped parts.

Edited by Omny
Link to comment
Share on other sites

UPDATE: Well, after a bit of fussing about in Nifskope I finally managed to get the dang dismemberment working, as well as fix a couple weird mesh issues with missing bones:

s3w1tox.jpg


It just needs a bit more polish regarding the effect shaders. What I'd prefer is that when an NPC dies, their body goes all glowy and disintegrated, and then gets replaced by a skeleton, to make it look like there's an actual transition between being fleshy and not-fleshy.

Whether that's possible is another bridge to cross later- right now I'm just trying to fix this one annoying little visual bug:

skZpEFS.jpg

Right after the effect shaders do their thing and the skeleton ragdolls on the ground, the body suddenly becomes transparent like this for about 1 second, and then snaps back to being opaque. I think it has something to do with the timer function in the scripts; I'm trying to figure it out myself.

 

I also noticed that, for some reason, the first line of my debug text shows up three times in the console:

 

f9dxCAz.jpg

Not sure what the deal is there. Mayhaps this and the previous bug are related?

 

I'll try to figure this out on my end. Here's what I got so far with the laser skeletonizer script if anyone wants to give it a look-over:

scn OMNYLaserSkeletonizerScript

Float Timer
Short DoOnce
ref rActor
ref rKiller

begin Function {rActor}

	Print "The event fired"
	set rKiller to rActor.GetKiller

	if rKiller.IsWeaponInList OMNYListOfLasers
		Print "the killer's weapon is eligible"
			if (rActor.GetIsCreature == 0) && (rActor != PlayerRef)
				Print "the victim is eligible"
				rActor.PMS LaserCritGlowFXShader 1.8
				rActor.PMS effectLaserDisintegration 1
				rActor.additem OMNYLaserSkellySuit 1
				rActor.equipitem OMNYLaserSkellySuit 1
				Set Timer to 1.8
				Set DoOnce to 0
			endif
	Print "welcome to the bone zone"
		If Timer <= 0.5
			rActor.SMS LaserCritGlowFXShader
			rActor.SMS effectLaserDisintegration	
			Set DoOnce to 1
		EndIf
	endif
end

 





Link to comment
Share on other sites

Disable what, exactly? The entire effect itself, or something specific in the effect shader window?

 

 

As far as the repeated "event fired" line, I tried disabling all but "the event fired" line with semicolons. When I killed someone and looked at the console, "the event fired" was listed four times. Still not sure why. I tried it with different weapons too; still the same effect. doesn't make any sense.

 

EDIT: Found the culprit: it was the quest script that I have the skeletonizer scripts attached to. This is how I wrote it:

ScriptName OMNYSkellyQuestScript

Begin GameMode

    If GetGameLoaded

    SetJohnnyOnDyingEventHandler 1 OMNYLaserSkeletonizerScript 0
    SetJohnnyOnDyingEventHandler 1 OMNYPlasmaSkeletonizerScript 0
    SetJohnnyOnDyingEventHandler 1 OMNYCharredSkeletonizerScript 0
    SetJohnnyOnDyingEventHandler 1 OMNYShockSkeletonizerScript 0

    endif

end

I disabled all but the laser script with semicolons, and sure enough, the "the event fired" only showed up once.

 

I'd rather not have all four scripts happen at once; I feel like that might cause problems.

Edited by Omny
Link to comment
Share on other sites

Your message spam is because the "event fired" message is coming from the EventHandler ("SetJohnnyOnDyingEventHandler") UDF ("OMNYLaserSkeletonizerScript"). Each time the EventHandler is called, the UDF spams the message. So, things are actually working as scripted. If you want the message to only appear once, move it to the "OMNYSkellyQuestScript" inside the "If GetGameLoaded" block. (It's only of use to yourself anyway.)

 

Alternatively you could define a variable (e.g. "iDBug") and the value it is set for can be tested to determine if a given debug message should be displayed. For example, a value of 0 = "no message', while "1 = Quest Script level only" and "2 = UDF level and Quest Level" messages. Or any similar scheme that works for you. Ex in UDF:

If (iDBug > 1) Print "The UDF event fired"

while in the Quest script:

If (iDBug > 0) Print "The Quest event fired"

Suggest you take a look at the 'TIP Debugging data to file' entry under the "Scripting" section of the wiki "Getting started creating mods using GECK" article.

-Dubious-

Link to comment
Share on other sites

Okay, that's not too much of an issue then.

 

Still trying to figure out how to stop that annoying transparency bug though. All I know is that it has something to do with the laser disintegration effect shader and not the glow shader, as disabling it causes that bug not to happen.

Link to comment
Share on other sites

Afraid I can't really help you with that. This is the most informative link I found. Which does raise the question: are you using a "post processor" like ENB/SweetFX? If so, developing mods is best done without such "extraneous" features enabled unless you intend your mod to require them. In which case you can expect to vastly increase your mod's support calls for everything related to such requirements.

 

-Dubious-

Link to comment
Share on other sites

I tried disabling transparency multisampling, and all it did was replace the transparent flicker with making the skeleton completely vanish for a second before popping back.

 

To answer your other question, I am not running ENB or anything like that. I'll check my other mods in a sec.

 

EDIT: Yeah, doesn't look like any of my mods are effecting it. I'll try a different approach.

 

EDIT THE SECOND: So I decided "f*#@ it" and made my own effect shader to replace the vanilla disintegration effect. Gonna mess around with it until I make it look the way I want it. I think I have a basic idea of how to edit these, though it would be a lot easier if the Effect Shader page on the GECK wiki wasn't so damn obtuse about what different settings do- what the hell does "RGB components of source pixel multiplied by alpha" mean? I'm basically just flipping checkboxes and punching in numbers to see what happens.

Edited by Omny
Link to comment
Share on other sites

Did you try covering up the "transparency" delay in the switch between bodies with another IMOD effect?

 

"Alpha" governs the transparency of a "pixel". It's a value that combined with the "Red", "Green", "Blue" (RGB) elements produces a given displayed color. The simplest way to choose one is to pick the hue you want from a "color wheel" that shows the display color for a given numeric value, such as here.

 

-Dubious-

Link to comment
Share on other sites

Well, I've taken a few days to step back from this. progress has been... lackluster.

 

I've looked into IMODs and I don't know if that will work? I've looked at several of them and they seem to only effect the camera view, like adding blur and bloom and color overlays. Can it be applied to individual NPCs?

 

I also tried a different approach suggested by someone on the LoversLab forums where I'd make my own Actor/Base effects like the vanilla laser disintegration effects and attach them to my script. But I can't seem to get it to play right?

 

Like, I made my own Actor/Base effects (OMNYLaserSkellyFXSpell, and OMNYLaserSkellyBaseEffect respectively) and I've connected the two together like the vanilla laser effects, but I can't seem to get them to play with my script.

 

Here's what I got:

 

Actor effect: OMNYLaserSkellyFXSpell (exactly like the LaserDisintegrationFXSpell, but with my custom base effect below)

 

Base Effect: OMNYLaserSkellyBaseEffect (exactly like the LaserDisintegrationEffect, but attached to my laser skeletonizer script)

 

And here's my latest script:

 

scn OMNYLaserSkeletonizerScript

Float Timer
ref rActor
ref rKiller

begin Function {rActor}

    Print "The event fired"
    set rKiller to rActor.GetKiller

    if rKiller.IsWeaponInList OMNYListOfLasers
        Print "the killer's weapon is eligible"
            if (rActor.GetIsCreature == 0) && (rActor != PlayerRef)
                Print "the victim is eligible"
                rActor.PMS LaserCritGlowFXShader
                rActor.CIOS OMNYLaserSkellyFXSpell
                rActor.additem OMNYLaserSkellySuit 1
                Set Timer to 1.8
                    If Timer <= 0.5
                        rActor.equipitem OMNYLaserSkellySuit 1
                    Endif
            EndIf
    endif
    Print "welcome to the bone zone"
        
end

But in-game, all that happens is the laser crit glow and the sizzling noise (which is new and exactly what I wanted, granted), but no disintegration effects, no sparks, and no skeletons!

 

I am so goddamn frustrated by all this I'm on the verge of just giving up.

Edited by Omny
Link to comment
Share on other sites

  • Recently Browsing   0 members

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