Code:
Group Common
Quest Property THEWQuestUpdate Auto Const Mandatory
Quest Property THEWQuest_V_01_00 Auto Const Mandatory
THEW:THEWQuest_Gore_V_01_00 Property GoreQuest Auto Const Mandatory
THEW:THEWQuest_Effects_V_01_00 Property EffectQuest Auto Const Mandatory
THEW:THEWQuest_Misc_V_01_00 Property MiscQuest Auto Const Mandatory
GlobalVariable Property GameHour Auto Const Mandatory
GlobalVariable Property THEWVersion Auto Const Mandatory
Sound Property EffectSoundUIStart Auto Const Mandatory
Actor Property Player Auto Const Mandatory
bool Property IsUninstalled Auto
EndGroup
Group Misc
Spell Property THEWPerspectiveManagerSpell Auto Const Mandatory
EndGroup
Group Messages
Message Property THEWMenu0Main Auto Const Mandatory
Message Property THEWMenu1Gore Auto Const Mandatory
Message Property THEWMenu1Presets Auto Const Mandatory
Message Property THEWMenu1Settings Auto Const Mandatory
Message Property THEWMenu1MiscEffects Auto Const Mandatory
Message Property THEWMenu2EffectsAutoEgo Auto Const Mandatory
Message Property THEWMenu2EffectsDialogLight Auto Const Mandatory
Message Property THEWMenu2PresetBase Auto Const Mandatory
Message Property THEWMenu2PresetInterior Auto Const Mandatory
Message Property THEWMenu2PresetDay Auto Const Mandatory
Message Property THEWMenu2PresetNight Auto Const Mandatory
Message Property THEWMenu2PresetDawn Auto Const Mandatory
Message Property THEWMenu2PresetDusk Auto Const Mandatory
Message Property THEWMenu2PresetGeneric1 Auto Const Mandatory
Message Property THEWMenu2PresetGeneric2 Auto Const Mandatory
Message Property THEWMenu2PresetGeneric3 Auto Const Mandatory
Message Property THEWMenu2Info Auto Const Mandatory
Message Property THEWMenu2UninstallConfirm Auto Const Mandatory
Message Property THEWMenu3Filter Auto Const Mandatory
Message Property THEWMenu3CopyFrom Auto Const Mandatory
Message Property THEWMenu3CopyTo Auto Const Mandatory
Message Property THEWMenu4FilterSaturation Auto Const Mandatory
Message Property THEWMenu4FilterBrightness Auto Const Mandatory
Message Property THEWMenu4FilterContrast Auto Const Mandatory
Message Property THEWMenu4FilterColorShift Auto Const Mandatory
Message Property THEWMenu4FilterColorStyle Auto Const Mandatory
Message Property THEWMenu4FilterDofNear Auto Const Mandatory
Message Property THEWMenu4FilterDofFar Auto Const Mandatory
Message Property THEWMenu4FilterBloom Auto Const Mandatory
Message Property THEWMenu4FilterEffects Auto Const Mandatory
Message Property THEWMenuInfoOpen Auto Const Mandatory
Message Property THEWMenuInfoFirstStart Auto Const Mandatory
Message Property THEWMenuUninstallConfirmed Auto Const Mandatory
EndGroup
; Preset-ID
; -1 Default
; 0 Interior
; 1 Day
; 2 Night
; 3 Dawn
; 4 Dusk
; 5 Preset 1
; 6 Preset 2
; 7 Preset 3
int ActivePreset = -1
; Applied preset
int ForcedPreset = 0
; Zweimaliges Wirken verhindern
bool MenuOpen = false
bool StartOnce
; - Menus Level 0 --------------------------------------------------------
; Haupt-Menu
bool MenuMainInit
Function MenuMain()
If MenuMainInit == false
MenuMainInit = true
EffectQuest.LockUpdate()
GoreQuest.LockUpdate()
MiscQuest.LockUpdate()
ActivePreset = EffectQuest.CurrentPreset ; Last active preset
EndIf
int selected = THEWMenu0Main.Show()
If (selected == 0) ; Back
MenuOpen = false
MenuMainInit = false
If EffectQuest.ForcedPreset > 0
EffectQuest.ApplyPreset(ForcedPreset, true)
Else
EffectQuest.ResetAmbient()
EndIf
EffectQuest.UpdateEffects()
GoreQuest.UpdateGore()
MiscQuest.UpdateDialogLight()
ElseIf (selected == 1) ; Presets
MenuPresets()
ElseIf (selected == 2) ; Gore
GoreQuest.Preview()
MenuGore()
ElseIf (selected == 3) ; Placeholder
ElseIf (selected == 4) ; Placeholder
ElseIf (selected == 5) ; Placeholder
ElseIf (selected == 6) ; Placeholder
ElseIf (selected == 7) ; Placeholder
ElseIf (selected == 8) ; Settings
MenuSettings()
ElseIf (selected == 9) ; Info
MenuInfo()
EndIf
EndFunction
; - Menus Level 1 --------------------------------------------------------
Function MenuPresets()
int active = ActivePreset + 1
float currenthour = GameHour.GetValue()
float hour = Math.Floor(currenthour) as float
float minutes = (0.6 * (currenthour - hour)) * 100
int selected = THEWMenu1Presets.Show(hour, minutes, active as float, EffectQuest.InteriorEnabled as float, EffectQuest.DayEnabled as float, EffectQuest.NightEnabled as float, EffectQuest.DawnEnabled as float, EffectQuest.DuskEnabled as float)
If (selected == 0) ; Back
MenuMain()
ElseIf (selected > 0) ; Preset selection
MenuPresetSettings(selected - 2) ; Consistent index, see THEWQuest_Effects: -1: Default, 0 Interior, ...
EndIf
EndFunction
Function MenuGore()
float treshold = GoreQuest.GoreTreshold * 100
float goretype = (GoreQuest.GoreType + 1) as float
int selected = THEWMenu1Gore.Show(GoreQuest.GoreEnabled as float, goretype, treshold, GoreQuest.GoreEffects as float)
If (selected == 0) ; Back
GoreQuest.PreviewEnd()
MenuMain()
ElseIf (selected == 1) ; Disable Gore
GoreQuest.DisableGore()
MenuGore()
ElseIf (selected == 2) ; Enable Gore
GoreQuest.EnableGore()
GoreQuest.Preview()
MenuGore()
ElseIf (selected == 3) ; Gore Type Minus
GoreQuest.ChangeGoreType(-1, true)
MenuGore()
ElseIf (selected == 4) ; Gore Type Plus
GoreQuest.ChangeGoreType(1, true)
MenuGore()
ElseIf (selected == 5) ; Treshold Minus
GoreQuest.SetGoreTreshold(GoreQuest.GetGoreTreshold() - 0.05)
MenuGore()
ElseIf (selected == 6) ; Treshold Plus
GoreQuest.SetGoreTreshold(GoreQuest.GetGoreTreshold() + 0.05)
MenuGore()
ElseIf (selected == 7) ; Additional effects off
GoreQuest.EnableAdditionalEffects(false)
MenuGore()
ElseIf (selected == 8) ; Additional effects on
GoreQuest.EnableAdditionalEffects()
MenuGore()
EndIf
EndFunction
Function MenuEffectsMisc()
int selected = THEWMenu1MiscEffects.Show()
If (selected == 0) ; Back
MenuMain()
ElseIf (selected == 1) ; Dialog Light
MenuEffectsMiscDialogLight()
ElseIf (selected == 2) ; Auto Ego
MenuEffectsMiscAutoEgo()
EndIf
EndFunction
Function MenuSettings()
int selected = THEWMenu1Settings.Show(EffectQuest.TimerInterval, GoreQuest.GoreInterval)
If (selected == 0) ; Back
MenuMain()
ElseIf (selected == 1) ; Effects Interval -
If EffectQuest.TimerInterval > 1
EffectQuest.TimerInterval = EffectQuest.TimerInterval - 0.05
EndIf
MenuSettings()
ElseIf (selected == 2) ; Effects Interval +
If EffectQuest.TimerInterval < 5
EffectQuest.TimerInterval = EffectQuest.TimerInterval + 0.05
EndIf
MenuSettings()
ElseIf (selected == 3) ; Gore Interval -
If GoreQuest.GoreInterval > 0.05
GoreQuest.GoreInterval = GoreQuest.GoreInterval - 0.05
EndIf
MenuSettings()
ElseIf (selected == 4) ; Gore Interval +
If GoreQuest.GoreInterval < 3
GoreQuest.GoreInterval = GoreQuest.GoreInterval + 0.05
EndIf
MenuSettings()
ElseIf (selected == 5) ; Show Infos Off
EffectQuest.DebugOn = false
MenuSettings()
ElseIf (selected == 6) ; Show Infos On
EffectQuest.DebugOn = true
MenuSettings()
ElseIf (selected == 7) ; Placeholder
MenuSettings()
ElseIf (selected == 8) ; Info
MenuInfo()
ElseIf (selected == 9) ; Uninstall
MenuUninstall()
EndIf
EndFunction
; - Menus Level 2 --------------------------------------------------------
Function MenuPresetSettings(int presetType)
If EffectQuest.ControllerActivePreset != presetType
EffectQuest.ControllerActivePreset = presetType ; For messagebox condition in menus CopyFrom, CopyTo
EffectQuest.ApplyPreset(presetType, true)
EndIf
int selected = -1
float isApplied
If presetType == -1
selected = THEWMenu2PresetBase.Show()
ElseIf presetType == 0
selected = THEWMenu2PresetInterior.Show(EffectQuest.InteriorEnabled as float)
ElseIf presetType == 1
selected = THEWMenu2PresetDay.Show(EffectQuest.DayEnabled as float)
ElseIf presetType == 2
selected = THEWMenu2PresetNight.Show(EffectQuest.NightEnabled as float)
ElseIf presetType == 3
selected = THEWMenu2PresetDawn.Show(EffectQuest.DawnEnabled as float)
ElseIf presetType == 4
selected = THEWMenu2PresetDusk.Show(EffectQuest.DuskEnabled as float)
ElseIf presetType == 5
If presetType == EffectQuest.ForcedPreset
isApplied = 1.0
EndIf
selected = THEWMenu2PresetGeneric1.Show(isApplied)
ElseIf presetType == 6
If presetType == EffectQuest.ForcedPreset
isApplied = 1.0
EndIf
selected = THEWMenu2PresetGeneric2.Show(isApplied)
ElseIf presetType == 7
If presetType == EffectQuest.ForcedPreset
isApplied = 1.0
EndIf
selected = THEWMenu2PresetGeneric3.Show(isApplied)
EndIf
If selected == 0 ; Back to preset type, revert to the currently active preset, save current settings
EffectQuest.ControllerActivePreset = -666
EffectQuest.SaveToPreset(presetType)
If EffectQuest.ForcedPreset > 0
EffectQuest.ApplyPreset(ForcedPreset, true)
Else
EffectQuest.ApplyPreset(ActivePreset, true)
EndIf
MenuPresets()
ElseIf selected == 1 ; Disable preset, only ambient presets can be enabled/disabled, messagebox condition
EffectQuest.EnablePreset(presetType, false)
MenuPresetSettings(presetType)
ElseIf selected == 2 ; Enable, only ambient presets can be enabled/disabled, messagebox condition
EffectQuest.EnablePreset(presetType)
MenuPresetSettings(presetType)
ElseIf selected == 3 ; UnAapply preset, only generic presets 1-3 can be applied/unapplied, messagebox condition
EffectQuest.ForcedPreset = 0
MenuPresetSettings(presetType)
ElseIf selected == 4 ; Apply preset, only generic presets 1-3 can be applied/unapplied, messagebox condition
EffectQuest.ForcedPreset = presetType
MenuPresetSettings(presetType)
ElseIf selected == 5 ; Edit filters
MenuPresetEditEffects(presetType)
ElseIf selected == 6 ; Copy from other preset
MenuCopyFrom(presetType)
ElseIf selected == 7 ; Copy to other preset
MenuCopyTo(presetType)
EndIf
EndFunction
Function MenuEffectsMiscDialogLight()
int selected = THEWMenu1Settings.Show(MiscQuest.DialogLightEnabled as float, (MiscQuest.DialogLightType + 1) as float)
If (selected == 0) ; Back
MiscQuest.ClearDialogLights()
MenuEffectsMisc()
ElseIf (selected == 1) ; Disable
MiscQuest.DisableDialogLight()
MenuEffectsMiscDialogLight()
ElseIf (selected == 2) ; Enable
MiscQuest.EnableDialogLight()
MenuEffectsMiscDialogLight()
ElseIf (selected == 3) ; Type -
MiscQuest.ChangeDialogLightType(-1)
MenuEffectsMiscDialogLight()
ElseIf (selected == 4) ; EType +
MiscQuest.ChangeDialogLightType(1)
MenuEffectsMiscDialogLight()
EndIf
EndFunction
Function MenuEffectsMiscAutoEgo()
float hasEgoSpell = Player.HasSpell(THEWPerspectiveManagerSpell) as float
int selected = THEWMenu2EffectsAutoEgo.Show(hasEgoSpell)
If (selected == 0) ; Back
MenuEffectsMisc()
ElseIf (selected == 1) ; Disable
Player.RemoveSpell(THEWPerspectiveManagerSpell)
MenuEffectsMisc()
ElseIf (selected == 2) ; Enable
Player.AddSpell(THEWPerspectiveManagerSpell)
MenuEffectsMisc()
EndIf
EndFunction
; Mod Info
Function MenuInfo()
int selected = THEWMenu2Info.Show(THEWVersion.GetValue())
If (selected == 0) ; Back
MenuMain()
EndIf
EndFunction
; Uninstallation
Function MenuUninstall()
int selected = THEWMenu2UninstallConfirm.Show()
If (selected == 0) ; Back
MenuSettings()
ElseIf (selected == 1) ; Uninstall
IsUninstalled = true
THEWQuestUpdate.Stop()
THEWQuest_V_01_00.Stop()
THEWMenuUninstallConfirmed.Show()
EndIf
EndFunction
; - Menus Level 3 --------------------------------------------------------
; Menu filter selection
Function MenuPresetEditEffects(int presetType)
int selected = THEWMenu3Filter.Show(EffectQuest.GetPresetValue(-2, 0), EffectQuest.GetPresetValue(-2, 1), EffectQuest.GetPresetValue(-2, 2), EffectQuest.GetPresetValue(-2, 3), EffectQuest.GetPresetValue(-2, 4), EffectQuest.GetPresetValue(-2, 5), EffectQuest.GetPresetValue(-2, 6), EffectQuest.GetPresetValue(-2, 8))
If (selected == 0)
MenuPresetSettings(presetType)
ElseIf (selected > 0)
MenuPresetEditEffect(presetType, selected - 1)
EndIf
EndFunction
; Menu Copy from...
; Copies values of another preset to the active values
Function MenuCopyFrom(int presetType)
int selected = THEWMenu3CopyFrom.Show()
If (selected == 0) ; Back
MenuPresetSettings(presetType)
ElseIf (selected > 0) ;
EffectQuest.ApplyPreset(selected - 2, true) ; Consistent index, see THEWQuest_Effects: -1: Default, 0 Interior, ...
MenuPresetSettings(presetType)
EndIf
EndFunction
; Menu Copy to...
; Copies active values to another preset
Function MenuCopyTo(int presetType)
int selected = THEWMenu3CopyTo.Show()
If (selected == 0) ; Back
MenuPresetSettings(presetType)
ElseIf (selected > 0)
EffectQuest.SaveToPreset(selected - 2) ; Consistent index, see THEWQuest_Effects: -1: Default, 0 Interior, ...
MenuCopyTo(presetType)
EndIf
EndFunction
; - Menus Level 3 --------------------------------------------------------
; Menu Filter
; For message boxes
; - use the right type(%.0f for types, %.0f for strength values)
Function MenuPresetEditEffect(int presetType, int effectId)
int selected = -1
float modifierMin
float modifierMax
float effectValue = EffectQuest.GetPresetValue(-2, effectId)
If effectId == 0
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterSaturation.Show(effectValue)
ElseIf effectId == 1
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterBrightness.Show(effectValue)
ElseIf effectId == 2
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterContrast.Show(effectValue)
ElseIf effectId == 3
modifierMin = 1.0
modifierMax = 3.0
selected = THEWMenu4FilterColorShift.Show(effectValue)
ElseIf effectId == 4
modifierMin = 1.0
modifierMax = 3.0
selected = THEWMenu4FilterColorStyle.Show(effectValue)
ElseIf effectId == 5
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterDofFar.Show(effectValue)
ElseIf effectId == 6
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterDofNear.Show(effectValue)
ElseIf effectId == 7
modifierMin = 0.05
modifierMax = 0.1
selected = THEWMenu4FilterBloom.Show(effectValue)
ElseIf effectId == 8
modifierMin = 1.0
modifierMax = 3.0
selected = THEWMenu4FilterEffects.Show(effectValue)
EndIf
If selected == 0
MenuPresetEditEffects(presetType)
ElseIf selected == 1; Decrease effects ++
EffectQuest.ApplyEffect(effectId, effectValue - modifierMax)
MenuPresetEditEffect(presetType, effectId)
ElseIf selected == 2; Decrease effects +
EffectQuest.ApplyEffect(effectId, effectValue - modifierMin)
MenuPresetEditEffect(presetType, effectId)
ElseIf selected == 3; Disable effect
EffectQuest.ApplyEffect(effectId, 0)
MenuPresetEditEffect(presetType, effectId)
ElseIf selected == 4; ; Increase effects -
EffectQuest.ApplyEffect(effectId, effectValue + modifierMin)
MenuPresetEditEffect(presetType, effectId)
ElseIf selected == 5; ; Increase effects --
EffectQuest.ApplyEffect(effectId, effectValue + modifierMax)
MenuPresetEditEffect(presetType, effectId)
EndIf
EndFunction
; - Events --------------------------------------------------------------------------
; Player activates controller in the inventory
; To Do: controller as weapon or armor?
Event OnEquipped(Actor reader)
If (reader != Game.GetPlayer() || IsUninstalled)
return
EndIf
; To Do Auto Exit out of PipBoy
If StartOnce == false
StartOnce = true
THEWMenuInfoFirstStart.Show()
EndIf
EffectSoundUIStart.Play(Player)
Utility.WaitMenuMode(2.0)
If MenuOpen == false
MenuOpen = true
MenuMain()
Else
THEWMenuInfoOpen.Show()
EndIf
EndEvent
; Player activates controller outside inventory
; To Do: controller as weapon or armor?
Event OnActivate(ObjectReference reader)
If (reader != Game.GetPlayer() || IsActivationBlocked() || IsUninstalled)
return
EndIf
; To Do Auto Exit out of PipBoy
Utility.WaitMenuMode(1.0)
If MenuOpen == false
MenuOpen = true
MenuMain()
Else
THEWMenuInfoOpen.Show()
EndIf
EndEvent