Jump to content

Enemies always ash pile on death no matter what the cause


arcvoodal

Recommended Posts

To eliminate the problem of ragdoll spaghettification (which freaks me out to the point where I don't even want to play) I would like to have a mod that makes it so that any time an enemy dies from anything they will always become an ash pile.

 

Not the greatest solution to spaghettification, but I do not see any other way of eliminating the bodies. Even if I disable+setfordelete every enemy I kill, there are still random enemies being killed in the wasteland by other enemies which I am not even aware of. I will be happily traveling along and then a radscorpion will suddenly spagettify in front of me out of nowhere despite that I didn't even kill one before.

 

I am guessing that one way to do this would be to add the 'ash pile' script to every weapon (including the claws and teeth etc that animals use) but this is obviously not ideal. My request is for a mod that adds the script to make a body turn into an ash pile as part of the actual dying process.

 

As for the ash piles persisting, that is a separate issue to be tackled separately (there is already a mod that makes ash piles disappear anyway).

 

 

UPDATE:

 

so I found this script from a zapaway mod. This script is for when a dead body gets hit. Is there some way to repurpose this script to work on enemies that are dying or have very little health left?

ScriptName ZapAwayEffect

Float Timer
Short DoOnce

Begin ScriptEffectStart
	if GetDead == 1
		SetCriticalStage GooStart
		;SetCriticalStage DisintegrateStart
		PMS AlienCritGlowFXShader
		PMS effectAlienDisintegration
		Set Timer to 1.8
		Set DoOnce to 0
	else
		Set DoOnce to 1
	endif
End

Begin ScriptEffectUpdate
	if DoOnce == 0
		if Timer <= 0 
			SetCriticalStage GooEnd
			;SetCriticalStage DisintegrateEnd
			SMS AlienCritGlowFXShader
			SMS effectAlienDisintegration
			Set DoOnce to 1
		endif
		Set Timer to (Timer - GetSecondsPassed)
	endif
End

UPDATE 2:

so I found another script 'burn the body'. I especially like that it markfordelete . I don't know fallout scripting enough to repurpose this though:

SCN staticaZippoBurnEffectSCRIPT

Ref rTarget
Ref rToken
Float Timer
Float fPosX
Float fPosY
Short DoOnce
Short IsPile
Short IsStarted
Short myID
Short bDebug

BEGIN ScriptEffectStart
	Set Timer to 30.0
	Set IsStarted to 0
	Set DoOnce to 0
	Set myID to staticaZippoSelectorQuest.iSpellID
	Set bDebug to staticaZippoQuest.bDebug

	if bDebug
		ShowMessage staticaZippoMsgDebug1 myID
	endif

	if ListGetCount staticaZippoDeleteList > 0
		Set rTarget to ListGetNthForm staticaZippoDeleteList 0
		ListRemoveNthForm staticaZippoDeleteList 0

		if ( IsReference rTarget == 1 ) && ( rTarget.IsFormValid == 1 )
			PlaySound OBJPipeControlTurn
			PlayerREF.RemoveItem AmmoFlamerFuel 1 1

			; A token to play burning sound.
			; idk is there another way to stop the sound when I want.
			; By design there is should NOT be any such "tokens"
			; This done because of limitations of Fo3 API and/or my lack knowledge of it.
			Set rToken to rTarget.PlaceAtMe staticaEmptyFuelContainer 1

			rTarget.SetCriticalStage DisintegrateStart
			rTarget.PMS Flames01
			Set DoOnce to 1

		else
			; something weird happend
			ShowMessage staticaZippoMsgWRONG myID
		endif
	endif
END

BEGIN ScriptEffectUpdate
	if DoOnce
		if IsPile == 0
			if Timer <= 0.5
				if rTarget.IsFormValid
					rTarget.AttachAshPile
				endif

				; stop 3D sound
				if rToken.IsFormValid
					rToken.Disable
					rToken.MarkForDelete
				endif

				Set IsPile to 1

			elseif Timer <= 1.5
				; stop flames anim. several frames before of using Disable()
				; because instead it will cause CTD
				if rToken.IsFormValid
					rToken.SMS Flames01
				endif
			endif
		endif

		if IsStarted == 0
			if Timer <= 29.5
				if rToken.IsFormValid
					rToken.PlaySound3D FXFireHaroldLP
					rToken.PMS Flames01
					; move the token to new place
					;  because of lulz (they sometimes happens)
					Set fPosX to rToken.GetPos X
					Set fPosY to rToken.GetPos Y
					Set fPosX to ( fPosX - 25.0 )
					Set fPosY to ( fPosY - 25.0 )
					rToken.SetPos X fPosX
					rToken.SetPos Y fPosY
				endif

				Set IsStarted to 1
			endif
		endif

		if Timer <= 0
			if rTarget.IsFormValid
				rTarget.SetCriticalStage DisintegrateEnd
				rTarget.SMS Flames01
			endif

			Set DoOnce to 0
		endif

		Set Timer to ( Timer - GetSecondsPassed )
	endif
END

BEGIN ScriptEffectFinish
	if rTarget.IsFormValid
		rTarget.Disable
		rTarget.MarkForDelete
	endif

	; there is used staticaZippoQuest instead of staticaZippoSelectorQuest
	; because of ... bugs? limitations? race conditions? idk
	; anyway, usage of the staticaZippoSelectQuest gaves me no expected results
	SetStage staticaZippoQuest myID

	if bDebug
		ShowMessage staticaZippoMsgDebug2 myID
	endif
END

 

Edited by arcvoodal
Link to comment
Share on other sites

  • Recently Browsing   0 members

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