Jump to content

Trait effect only works until the game has to load


puddlepond

Recommended Posts

I released Fear The Reaper (https://www.nexusmods.com/newvegas/mods/74577) a few days ago without noticing that the trait's effects only function before the game has had a chance to reload, either by loading a save or by changing cells. After choosing the trait it works perfectly until you leave Doc Mitchell's or load a save, after which all its changes are seemingly reverted: your perk rate returns to normal, and your health increases as your endurance takes effect. I've been able to replicate this bug on a vanilla MO2 profile and my regular modded one so it is definitely an issue with the mod itself. Here's the script for reference:

scn FOTACTICSFearTheReaperSCRIPT

; Makes the player gain a perk every single level instead of two. - Panzermann

Short bDoOnce


BEGIN ScriptEffectStart

	If ( bDoOnce == 0 )
		Set bDoOnce to 1;
		SetNumericGameSetting iLevelsPerPerk 1;
		SetNumericGameSetting fAVDHealthLevelMult 0;
		SetNumericGameSetting fAVDHealthEnduranceMult 0;
	Endif
END; scripteffectstart

BEGIN ScriptEffectFinish

	If ( bDoOnce == 1 )
		Set bDoOnce to 0;
		SetNumericGameSetting iLevelsPerPerk 2;
		SetNumericGameSetting fAVDHealthLevelMult 5;
		SetNumericGameSetting fAVDHealthEnduranceMult 20;
	Endif

END

I've tried removing the second "ScriptEffectFinish" half, that plus removing the variable "bDoOnce", and I'm all out of ideas. Neither edit seemed to have any effect. I'm guessing it's an issue with the game wanting to revert Game Settings to their vanilla state with every load screen, but I don't know how to prevent that happening.

 

UPDATE: The bug isn't triggered by changing cells - it just looked like that because whenever the trait was nullified I had also happened to have moved cells - it's only triggered by quitting out of the game entirely and reloading a save. Maybe getting the script to fire every time a save is loaded if bDoOnce = 1 could fix it, but I don't see a block type that'd let me do that. There's GameMode, but I figure there's gotta be a more efficient way than just setting the script to fire every frame.

 

UPDATE 2: This didn't work either:

BEGIN MenuMode 1007

	If ( bDoOnce == 1 )
		SetNumericGameSetting iLevelsPerPerk 1;
		SetNumericGameSetting fAVDHealthLevelMult 0;
		SetNumericGameSetting fAVDHealthEnduranceMult 0;
	Else
		SetNumericGameSetting iLevelsPerPerk 2;
		SetNumericGameSetting fAVDHealthLevelMult 5;
		SetNumericGameSetting fAVDHealthEnduranceMult 20;
	Endif

END

I tried appending it to the end of the FTR script, nothing, Maybe I'd need something like a global variable instead of the integer I've been using. No idea.

 

UPDATE 3:

BEGIN MenuMode 1007

	If Player.HasPerk FOTACTICSFearTheReaper
		SetNumericGameSetting iLevelsPerPerk 1;
		SetNumericGameSetting fAVDHealthLevelMult 0;
		SetNumericGameSetting fAVDHealthEnduranceMult 0;
	Else
		SetNumericGameSetting iLevelsPerPerk 2;
		SetNumericGameSetting fAVDHealthLevelMult 5;
		SetNumericGameSetting fAVDHealthEnduranceMult 20;
	Endif

END

Nope. Nothing. If nothing else, hopefully this post can help dissuade anyone else from trying to edit Game Settings with perks. I'm seriously doubting that it's even possible at this point.

Edited by arsthetiu
Link to comment
Share on other sites

  • 1 month later...
scn FOTACTICSFearTheReaperSCRIPT

; Makes the player gain a perk every single level instead of two. - Panzermann

Short bDoOnce


BEGIN ScriptEffectStart

	If ( bDoOnce == 0 )
		Set bDoOnce to 1;
		SetNumericGameSetting iLevelsPerPerk 1;
		SetNumericGameSetting fAVDHealthLevelMult 0;
		SetNumericGameSetting fAVDHealthEnduranceMult 0;
	Endif
END; scripteffectstart

BEGIN ScriptEffectFinish

	If ( bDoOnce == 1 )
		Set bDoOnce to 0;
		SetNumericGameSetting iLevelsPerPerk 2;
		SetNumericGameSetting fAVDHealthLevelMult 5;
		SetNumericGameSetting fAVDHealthEnduranceMult 20;
	Endif

END; scripteffectfinish

BEGIN GameMode

	If GetGameRestarted
		If Player.HasPerk FOTACTICSFearTheReaper 1
			SetNumericGameSetting iLevelsPerPerk 1;
			SetNumericGameSetting fAVDHealthLevelMult 0;
			SetNumericGameSetting fAVDHealthEnduranceMult 0;
		EndIf

		If Player.HasPerk FOTACTICSFearTheReaper 0
			SetNumericGameSetting iLevelsPerPerk 2;
			SetNumericGameSetting fAVDHealthLevelMult 5;
			SetNumericGameSetting fAVDHealthEnduranceMult 20;
		EndIf
	EndIf
END

it works. it works now. im going to scream.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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