maxarturo Posted February 25, 2020 Author Share Posted February 25, 2020 (edited) Hi JustChill. Good to know about one more papyrus flaw... Unfortunately in order to be sure that your script will make your idea work as intended is to actually build the idea and test it in game, otherwise just making the script based on what "creationkit.com" saids might result in ending up with an idea that it will just won't work in game... If it wasn't so late for the game, i would create a page where all papyrus flaws could be cataloged by anyone that finds them + with the appropriate workaround for it, but it's too late now. Edited February 25, 2020 by maxarturo Link to comment Share on other sites More sharing options...
JustChill Posted February 25, 2020 Share Posted February 25, 2020 No worries, I already used it for my boss battle. ^^ A player could drag or use spellcraft to bring these corpses out of position.So I teleport them back into their initial editor position. :smile: Oh about the end, it's actually meant for her to be in Ghost status.I still need to implement her reviving casts for the corpses though. Unfortunately I just can invest around 2 to 3 hours during the week. Looking forward to the weekend. :D Jerking around with the engine feels currently pretty entertaining. ^^ Even though I am really not a fan of this disimprovement, I think I just have a bit of an enthusiasm for the Creation Engine right now.But definitely happy that I am not the only one who speaks bad about zhe Papyrus.Ah, I am late at that one too. XD Link to comment Share on other sites More sharing options...
JustChill Posted February 26, 2020 Share Posted February 26, 2020 Just as a minor addition... Scriptname _00E_YC_SoulbenderActSCR extends ObjectReference Event OnActivate(ObjectReference akActionRef) if akActionRef == PlayerRef if _00E_YC_SoulbenderActMSG.Show() == 0 ObjectReference FXExplosion = _00E_YC_MagicSoulTrapEffect.PlaceAtMe(_00E_YC_ExplosionOnAct, 1) ObjectReference FXExplosion1 = _00E_YC_MagicSoulTrapEffect.PlaceAtMe(_00E_YC_ExplosionOnAct1, 1) _00E_YC_SoulbenderActREF1.PushActorAway(PlayerRef, 20) ;=> Don't define your PlayerRef as ObjectReference as PushActorAway only allows Actor References!' _00E_YC_BattleWall1.Enable() _00E_YC_BattleWall2.Enable() ;=> So... You like invisible walls, huh? _00E_YC_BattleWall3.Enable() _00E_YC_BattleWall4.Enable() _00E_YC_BattleWall5.Enable() _00E_YC_BattleWall6.Enable() _00E_YC_BattleWall7.Enable() _00E_YC_BattleWall8.Enable() _00E_YC_MagicBarrier.Enable() ;=> No? Then add some cool magic barrier / shield effect! TimeFadeOut01FXS.Play(_00E_YC_Victim1) TimeFadeOut01FXS.Play(_00E_YC_Victim2) ;=> I am a ceritfied miracle player. A miracle player would grab one of the dead bodies or use magic to shoot it out of the battle zone, before battle even starts. TimeFadeOut01FXS.Play(_00E_YC_Victim3) ;=> So that could basically break the whole battle as it's meant that these corpses get reanimated. oO' TimeFadeOut01FXS.Play(_00E_YC_Victim4) ;=> Therefore we use a cool effect to make them disappear. TimeFadeOut01FXS.Play(_00E_YC_Victim5) TimeFadeOut01FXS.Play(_00E_YC_Victim6) TimeFadeOut01FXS.Play(_00E_YC_Victim7) TimeFadeOut01FXS.Play(_00E_YC_Victim8) Utility.Wait(2) ;=> Wait until the effect is done. _00E_YC_Victim1.Disable() _00E_YC_Victim2.Disable() ;=> We disable all corpses, as otherwise MoveTo wouldn't work properly. I knew this one from Gamebryo and I am happy Bethesda took it over. ^^' _00E_YC_Victim3.Disable() ;=> NOT! _00E_YC_Victim4.Disable() _00E_YC_Victim5.Disable() _00E_YC_Victim6.Disable() _00E_YC_Victim7.Disable() _00E_YC_Victim8.Disable() _00E_YC_Victim1.MoveToMyEditorLocation() ;=> I cannot recall such a function from Gamebryo... Maybe it is there, but I never used it. _00E_YC_Victim2.MoveToMyEditorLocation() ;=> However, here it's a life saver. All corspes get moved into default position. :D' _00E_YC_Victim3.MoveToMyEditorLocation() _00E_YC_Victim4.MoveToMyEditorLocation() _00E_YC_Victim5.MoveToMyEditorLocation() _00E_YC_Victim6.MoveToMyEditorLocation() _00E_YC_Victim7.MoveToMyEditorLocation() _00E_YC_Victim8.MoveToMyEditorLocation() _00E_YC_Victim1.Enable() _00E_YC_Victim2.Enable() _00E_YC_Victim3.Enable() ;=> All corpses get enabled again. _00E_YC_Victim4.Enable() _00E_YC_Victim5.Enable() _00E_YC_Victim6.Enable() _00E_YC_Victim7.Enable() _00E_YC_Victim8.Enable() _00E_YC_Victim1.SetAlpha(0) ;=> All corpses get invisible. _00E_YC_Victim2.SetAlpha(0) _00E_YC_Victim3.SetAlpha(0) _00E_YC_Victim4.SetAlpha(0) _00E_YC_Victim5.SetAlpha(0) _00E_YC_Victim6.SetAlpha(0) _00E_YC_Victim7.SetAlpha(0) _00E_YC_Victim8.SetAlpha(0) While _00E_YC_Victim1.Is3DLoaded() == False ;=> We do NOT know when the enabling is FULLY done. So we make this loop as long as the 3D Data isn't completely loaded (using "Play" for the effect shader on a form that hasn't loaded 3D data results in a script error). EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim1) ;=> Now we use a cool effect to make them visible again. _00E_YC_Victim1.SetAlpha(1) ;=> All corpses get visible again. Unfortunately the effect doesn't work on ActorAlpha (which is still 0), so it has to be reverted back to fully visible, while the effect is playing.' While _00E_YC_Victim2.Is3DLoaded() == False ;=> Whatever, just make a loop until the 3D is loaded! EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim2) ;=> It's Maniac's magic! _00E_YC_Victim2.SetAlpha(1) While _00E_YC_Victim3.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim3) _00E_YC_Victim3.SetAlpha(1) While _00E_YC_Victim4.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim4) _00E_YC_Victim4.SetAlpha(1) While _00E_YC_Victim5.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim5) _00E_YC_Victim5.SetAlpha(1) While _00E_YC_Victim6.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim6) _00E_YC_Victim6.SetAlpha(1) While _00E_YC_Victim7.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim7) _00E_YC_Victim7.SetAlpha(1) While _00E_YC_Victim8.Is3DLoaded() == False ;=> Whatever... EndWhile TimeFadeIn01FXS.Play(_00E_YC_Victim8) _00E_YC_Victim8.SetAlpha(1) _00E_YC_MagicSoulTrapEffect.Disable() _00E_YC_MagicAbsorbEffect1.Disable() ;=> We disable these fancy inventory effects around the soul bender. _00E_YC_MagicAbsorbEffect2.Disable() ;=> As now the soul bender will fancy Sira's Shadow. ^^' _00E_YC_MagicAbsorbEffect3.Disable() _00E_YC_MagicAbsorbEffect4.Disable() _00E_YC_MagicAbsorbEffect5.Disable() _00E_YC_MagicAbsorbEffect6.Disable() _00E_YC_MagicAbsorbEffect7.Disable() _00E_YC_MagicAbsorbEffect8.Disable() _00E_YC_SiraShadowREF.Enable() ;=> She will be so unhappy! _00E_YC_SiraShadowREF.SetGhost() ;=> She will be f***in' immortal!' FXExplosion.Delete() FXExplosion = None FXExplosion1.Delete() FXExplosion1 = None _00E_YC_SoulbenderActREF1.Disable() _00E_YC_SoulbenderActREF2.Disable() endif endif EndEvent Actor Property _00E_YC_Victim1 Auto Actor Property _00E_YC_Victim2 Auto Actor Property _00E_YC_Victim3 Auto Actor Property _00E_YC_Victim4 Auto Actor Property _00E_YC_Victim5 Auto Actor Property _00E_YC_Victim6 Auto Actor Property _00E_YC_Victim7 Auto Actor Property _00E_YC_Victim8 Auto Actor Property PlayerRef Auto Actor Property _00E_YC_SiraShadowREF Auto Message Property _00E_YC_SoulbenderActMSG Auto ObjectReference Property _00E_YC_MagicSoulTrapEffect Auto ObjectReference Property _00E_YC_MagicAbsorbEffect1 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect2 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect3 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect4 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect5 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect6 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect7 Auto ObjectReference Property _00E_YC_MagicAbsorbEffect8 Auto ObjectReference Property _00E_YC_SoulbenderActREF1 Auto ObjectReference Property _00E_YC_SoulbenderActREF2 Auto ObjectReference Property _00E_YC_BattleWall1 Auto ObjectReference Property _00E_YC_BattleWall2 Auto ObjectReference Property _00E_YC_BattleWall3 Auto ObjectReference Property _00E_YC_BattleWall4 Auto ObjectReference Property _00E_YC_BattleWall5 Auto ObjectReference Property _00E_YC_BattleWall6 Auto ObjectReference Property _00E_YC_BattleWall7 Auto ObjectReference Property _00E_YC_BattleWall8 Auto ObjectReference Property _00E_YC_MagicBarrier Auto EffectShader Property TimeFadeIn01FXS Auto EffectShader Property TimeFadeOut01FXS Auto Explosion Property _00E_YC_ExplosionOnAct Auto Explosion Property _00E_YC_ExplosionOnAct1 Auto As I now also added a fancy effect shader for the corpses re-appearing on position.They will also re-appear if they are already in position, but I don't mind that feature. It mainly should just prevent the player of f***ing up the boss battle. ^^ Oh, and as a note for people who may be very unfamiliar of how the Nexus forum code works.If you use the "Preview Post" function and have a CODEsegment in your post, the forum software will automatically add new empty lines after any line in your code segment. :wink: I personally dislike that function myself, but I guess it's there for a reason? Link to comment Share on other sites More sharing options...
Recommended Posts