From 6d20110d74e879aea4099163d615d92a235ba033 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Wed, 19 Mar 2025 01:07:50 +0100 Subject: [PATCH] Hardcore Helper 3.0 --- mod/Hardcore Helper.esp | Bin 0 -> 18642 bytes mod/Hardcore Helper.url | 2 + src/EHHGameMode.gek | 215 ++++++++++++++++++++++++++++++++++++++++ src/EHHMenuMode1013.gek | 90 +++++++++++++++++ src/EHHMenuMode4.gek | 55 ++++++++++ src/EHHQuestScript.gek | 39 ++++++++ 6 files changed, 401 insertions(+) create mode 100644 mod/Hardcore Helper.esp create mode 100644 mod/Hardcore Helper.url create mode 100644 src/EHHGameMode.gek create mode 100644 src/EHHMenuMode1013.gek create mode 100644 src/EHHMenuMode4.gek create mode 100644 src/EHHQuestScript.gek diff --git a/mod/Hardcore Helper.esp b/mod/Hardcore Helper.esp new file mode 100644 index 0000000000000000000000000000000000000000..0c8e6af4b15158281a4df737b251368a4ed1a128 GIT binary patch literal 18642 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 literal 0 HcmV?d00001 diff --git a/mod/Hardcore Helper.url b/mod/Hardcore Helper.url new file mode 100644 index 0000000..9109b66 --- /dev/null +++ b/mod/Hardcore Helper.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://mod.pub/falloutnv/5-hardcore-helper diff --git a/src/EHHGameMode.gek b/src/EHHGameMode.gek new file mode 100644 index 0000000..227bf6e --- /dev/null +++ b/src/EHHGameMode.gek @@ -0,0 +1,215 @@ +scn EHHGameMode + +int i +ref rItem +ref rSelectedFood +ref rAquaPura +int iEffectNum +int iEffectIndex +int iCachedPenalty +int iCurrentPenalty +int iLowestPenalty +int iValue +int bNeedDrink +int bNeedFood +int iHunger +int bPPInfected +array_var aInventoryItems + +begin function {} + + if playerRef.IsHardcore == 0 + return + endif + + if EHHAutoDrink + + if eval (playerRef.GetAV Dehydration > GetHardcoreStageThreshold Water1 - EHHThresholdOffset) && (playerRef.HasMagicEffect RestoreDehydrationLevel == 0) + + let bNeedDrink := 1 + + let i := 0 + while rItem := ListGetNthForm EHHDrinks i + if playerRef.GetItemCount rItem + MessageEx "Drinking %n..." rItem + playerRef.EquipItem rItem 0 1 + let bNeedDrink := 0 + break + endif + let i += 1 + loop + + if bNeedDrink == 0 + return + endif + + if EHHBrokenSteel + let rAquaPura := GetFormFromMod "BrokenSteel.esm" "104F" + if playerRef.GetItemCount rAquaPura + let bPPInfected := GetStageDone (GetFormFromMod "Fallout3.esm" "14E93") 100 + if bPPInfected == 0 + MessageEx "Drinking %n..." rAquaPura + playerRef.EquipItem rAquaPura 0 1 + return + endif + endif + endif + + ; Try other options + let bNeedDrink := EHHEatWateryFood + + endif + + endif + + if EHHAutoEat + let iHunger := playerRef.GetAV hunger + let bNeedFood := (iHunger > GetHardcoreStageThreshold hunger1 - EHHThresholdOffset) && (playerRef.HasMagicEffect RestoreStarvationLevel == 0) + endif + + if bNeedDrink || bNeedFood + + let aInventoryItems := playerRef.GetAllItems 47 1 1 1 + let i := ar_size aInventoryItems + let iLowestPenalty := -1 + + while (i -= 1) >= 0 + let rItem := aInventoryItems[i] + + if eval (GetEquipType rItem != 12 && GetEquipType rItem != 0) || 0 == GetIngestibleFlag rItem 2 || GetIngestibleFlag rItem 4 ; skip non-food and medicine + continue + endif + + if ListGetFormIndex EHHDrinks rItem != -1 + continue + endif + + let iCurrentPenalty := 0 + let iEffectNum := GetNumEffects rItem + + if bNeedFood + let iEffectIndex := -1 + while (iEffectIndex += 1) < iEffectNum + if GetNthEffectBase rItem iEffectIndex == RestoreStarvationLevel + let iValue := GetNthEffectTraitNumeric rItem iEffectIndex 0 + let iCurrentPenalty += 1000 - iValue + if iHunger < iValue + let iCurrentPenalty += 500 + endif + break + endif + loop + endif + + if bNeedDrink + if bPPInfected + if rItem == rAquaPura + continue + endif + endif + let iEffectIndex := -1 + while (iEffectIndex += 1) < iEffectNum + if GetNthEffectBase rItem iEffectIndex == RestoreDehydrationLevel + let iCurrentPenalty += 1000 - GetNthEffectTraitNumeric rItem iEffectIndex 0 + break + endif + loop + endif + + if iCurrentPenalty == 0 + continue + endif + + ; Cache item ratings for the game session + if RefMapGetType "*r" rItem + let iCurrentPenalty += RefMapGetFlt "*r" rItem + else + let iCachedPenalty := 0 + let iEffectIndex := -1 + while (iEffectIndex += 1) < iEffectNum + if GetNthEffectBase rItem iEffectIndex == DamageRadiationLevel + let iValue = GetNthEffectTraitNumeric rItem iEffectIndex 0 + let iCachedPenalty += iValue * 5 + if iValue >= 10 + ; push irradiated items down + let iCachedPenalty += 1000 + endif + break + endif + loop + + let iCachedPenalty += Ceil (GetValueAlt rItem) + let iCachedPenalty -= 5 * Ceil (GetWeight rItem) + + if ListGetFormIndex WaterLIST rItem == -1 + if eval 0 < ar_size (GetFormRecipes rItem) + ; push ingredients down + let iCachedPenalty += 10000 + endif + endif + + RefMapSetFlt "*r" iCachedPenalty rItem + let iCurrentPenalty += iCachedPenalty + endif + +; printc "%n=%g" rItem iCurrentPenalty + + if EHHEatIngredients == 0 + if iCurrentPenalty >= 10000 + continue + endif + endif + + if iLowestPenalty == -1 || iCurrentPenalty < iLowestPenalty + let iLowestPenalty := iCurrentPenalty + let rSelectedFood := rItem + endif + + loop + +; print "=================================" + let aInventoryItems := ar_null + + if rSelectedFood + if eval ListGetFormIndex NonAlchoholicDrinks rSelectedFood != -1 || ListGetFormIndex WaterLIST rSelectedFood != -1 + MessageEx "Drinking %n..." rSelectedFood + else + MessageEx "Eating %n..." rSelectedFood + endif + playerRef.EquipItem rSelectedFood 0 1 + return + endif + + endIf + + if EHHAutoRadAway + + if eval (playerRef.GetAV RadiationRads > GetHardcoreStageThreshold Rad1 - EHHThresholdOffset) && (playerRef.HasMagicEffect RestoreRadiationLevel == 0) + if playerRef.GetItemCount RadAway + MessageEx "Injecting RadAway..." + playerRef.EquipItem RadAway 0 1 + return + endif + endif + + endif + + if EHHAutoUppers + + if eval (playerRef.GetAV SleepDeprevation > GetHardcoreStageThreshold sleep1 - EHHThresholdOffset) && (playerRef.HasMagicEffect RestoreSleepDeprivationLevel == 0) + + let i := 0 + while rItem := ListGetNthForm EHHUppers i + if playerRef.GetItemCount rItem + MessageEx "Time to get some sleep! Meanwhile, consuming %n..." rItem + playerRef.EquipItem rItem 0 1 + break + endif + let i += 1 + loop + + endif + + endif + +end diff --git a/src/EHHMenuMode1013.gek b/src/EHHMenuMode1013.gek new file mode 100644 index 0000000..a41eb8b --- /dev/null +++ b/src/EHHMenuMode1013.gek @@ -0,0 +1,90 @@ +scn EHHMenuMode1013 + +int isEnabled +int iOption +float fValue + +begin function {} + + if GetUIFloat "StartMenu/MCM/_Reset" ; RESET + + if PlayerRef.IsHardcore + let isEnabled := 1 + else + let isEnabled := 2 + endif + + SetUIFloat "StartMenu/MCM/_Reset" 0 + SetUIFloat "StartMenu/MCM/*:1/_columns" 2 + + SetMCMFloat 1 1 "_enable" isEnabled + SetMCMString 1 1 "_title" "Automatic eating" + SetMCMFloat 1 1 "_type" 5 + SetMCMFloat 1 1 "_value" EHHAutoEat + + SetMCMFloat 1 2 "_enable" isEnabled + SetMCMString 1 2 "_title" "Eat ingredients" + SetMCMFloat 1 2 "_type" 5 + SetMCMFloat 1 2 "_value" EHHEatIngredients + + SetMCMFloat 1 3 "_enable" isEnabled + SetMCMString 1 3 "_title" "Automatic drinking" + SetMCMFloat 1 3 "_type" 5 + SetMCMFloat 1 3 "_value" EHHAutoDrink + + SetMCMFloat 1 4 "_enable" isEnabled + SetMCMString 1 4 "_title" "Quench thirst with food" + SetMCMFloat 1 4 "_type" 5 + SetMCMFloat 1 4 "_value" EHHEatWateryFood + + SetMCMFloat 1 5 "_enable" isEnabled + SetMCMString 1 5 "_title" "Automatic RadAway" + SetMCMFloat 1 5 "_type" 5 + SetMCMFloat 1 5 "_value" EHHAutoRadAway + + SetMCMFloat 1 7 "_enable" isEnabled + SetMCMString 1 7 "_title" "Automatic uppers" + SetMCMFloat 1 7 "_type" 5 + SetMCMFloat 1 7 "_value" EHHAutoUppers + + if isEnabled == 2 + SetMCMFloat 1 11 "_enable" 1 + SetMCMString 1 11 "_title" "Hardcore mode disabled" + SetMCMFloat 1 11 "_type" 0 + endif + + elseif GetUIFloat "StartMenu/MCM/_NewValue" ; NEW VALUE + + set iOption to GetUIFloat "StartMenu/MCM/_ActiveOption" + set fValue to GetUIFloat "StartMenu/MCM/_Value" + + SetUIFloat "StartMenu/MCM/_NewValue" 0 + SetUIFloat "StartMenu/MCM/_Reset" 1 + + if iOption == 1 + set EHHAutoEat to fValue + elseif iOption == 2 + set EHHEatIngredients to fValue + elseif iOption == 3 + set EHHAutoDrink to fValue + elseif iOption == 4 + set EHHEatWateryFood to fValue + elseif iOption == 5 + set EHHAutoRadAway to fValue + elseif iOption == 7 + set EHHAutoUppers to fValue + endif + + endif + + if GetUIFloat "StartMenu/MCM/*:1/_optionID" == 2 + SetUIFloat "StartMenu/MCM/*:9/visible" 1 + SetUIString "StartMenu/MCM/*:9/string" "If unchecked, items, included in any recipe, won't be eaten automatically." + elseif GetUIFloat "StartMenu/MCM/*:1/_optionID" == 4 + SetUIFloat "StartMenu/MCM/*:9/visible" 1 + SetUIString "StartMenu/MCM/*:9/string" "Some food items also hydrate in addition to satiation. This option allows to eat such food when you have no water in inventory." + elseif GetUIFloat "StartMenu/MCM/*:9/visible" == 1 + SetUIFloat "StartMenu/MCM/*:9/visible" 0 + endif + +end diff --git a/src/EHHMenuMode4.gek b/src/EHHMenuMode4.gek new file mode 100644 index 0000000..548624a --- /dev/null +++ b/src/EHHMenuMode4.gek @@ -0,0 +1,55 @@ +scn EHHMenuMode4 + +ref rItem + +begin function {} + + SetGameMainLoopCallback EHHGameMode 1 800 1 + + ; Fixing vanilla bugs + SetIngestibleFlag MS05FinNukaPie 2 1 + SetIngestibleFlag StrangeMeatPie 2 1 + + let EHHBrokenSteel := IsModLoaded "BrokenSteel.esm" + + if EHHBrokenSteel + set rItem to GetFormFromMod "BrokenSteel.esm" "6F62" ; Aqua Cura + if IsFormValid rItem + if ListGetFormIndex EHHDrinks rItem == -1 + ListAddForm EHHDrinks rItem 0 + endif + endif + endif + + if IsModLoaded "HonestHearts.esm" + let rItem := GetFormFromMod "HonestHearts.esm" "11112" ; Black Coffee + if IsFormValid rItem + if ListGetFormIndex EHHUppers rItem == -1 + ListAddForm EHHUppers rItem 0 + endif + endif + endif + + if IsModLoaded "TaleOfTwoWastelands.esm" + let rItem := GetFormFromMod "TaleOfTwoWastelands.esm" "DFC2" ; Spicy Quantum Sauce + if IsFormValid rItem + if ListGetFormIndex EHHUppers rItem == -1 + ListAddForm EHHUppers rItem + endif + endif + endif + + if IsModLoaded "The Mod Configuration Menu.esp" == 0 + print "Hardcore Helper: MCM not found" + return + endif + + ListAddForm (BuildRef (GetModIndex "The Mod Configuration Menu.esp") 2790) EHHMCMItem + + SetOnMenuOpenEventHandler (begin function {int i} + if GetQuestRunning EHHQuest == 0 + StartQuest EHHQuest + endif + end) 1 1013 + +end diff --git a/src/EHHQuestScript.gek b/src/EHHQuestScript.gek new file mode 100644 index 0000000..8d3bc09 --- /dev/null +++ b/src/EHHQuestScript.gek @@ -0,0 +1,39 @@ +scn EHHQuestScript + +begin GameMode + StopQuest EHHQuest +end + +begin MenuMode 4 + + StopQuest EHHQuest + + if GetGameRestarted == 0 + return + endif + + if GetNVSEVersionFull < 6.22 + MessageBoxEx "Hardcore Helper requires xNVSE 6.22+." + endif + + if GetPluginVersion "JIP LN NVSE" < 56.31 + MessageBoxEx "Hardcore Helper requires JIP LN 56.31+." + endif + + call EHHMenuMode4 + +end + +begin MenuMode 1013 + + if GetUIFloat "StartMenu/MCM/_ActiveMod" != GetSelfModIndex + return + endif + + if GetUIFloat "StartMenu/MCM/_ActiveMenu" != GetItemValue EHHMCMItem + return + endif + + call EHHMenuMode1013 + +end