Here it is:
Scriptname IMCNqsVitalityMenu extends QuestMessage Property IMCNmsgInfo0E autoMessage Property IMCNmsgInfo0M autoMessage Property IMCNmsgInfo0P autoMessage Property IMCNmsgInfo0VampireE autoMessage Property IMCNmsgInfo0VampireM autoMessage Property IMCNmsgInfo0VampireP autoMessage Property IMCNmsgInfoActions autoMessage Property IMCNmsgInfoAdvancedE autoMessage Property IMCNmsgInfoAdvancedM autoMessage Property IMCNmsgInfoAdvancedP autoMessage Property IMCNmsgInfoAdvancedVampire autoMessage Property IMCNmsgInfoSubstances autoMessage Property IMCNmsgInfoCharacter autoMessage Property IMCNmsgInfoConfirmReset autoMessage Property IMCNmsgInfoDisabled autoMessage Property IMCNmsgInfoFatigue autoMessage Property IMCNmsgInfoListsRebuilt autoMessage Property IMCNmsgRealistic0 autoMessage Property IMCNmsgRealisticHungry autoMessage Property IMCNmsgRealisticTired autoQuest Property IMCNmain autoIMCNqsSpoilageDefaults Property IMCNspoilage autofunction ShowMenu()IMCNqsMain IMCN = IMCNmain as IMCNqsMainIMCNqsMenuConditions menuConditions = (self as Quest) as IMCNqsMenuConditionsif menuConditions.enabled == 0 if IMCNmsgInfoDisabled.Show() == 0 menuConditions.enabled = 1 IMCN.StartTracking() IMCN.ResetRates() endIfendIfif menuConditions.enabled != 0 if ((self as Quest) as IMCNqsMenuConditions).showStats == 1 ShowClassicMenu() else ShowRealisticMenu() endIfendIfendFunctionfunction ShowClassicMenu()IMCNqsMain IMCN = IMCNmain as IMCNqsMainIMCNqsDefaults defaults = IMCNmain as IMCNqsDefaultsIMCNqsMenuConditions menuConditions = (self as Quest) as IMCNqsMenuConditionsMessage msgbool exitMenu = falseint menuLevel = 1while !exitMenu int response = -1 if menuLevel == 1 if IMCN.isVampire if menuConditions.units == 0 msg = IMCNmsgInfo0VampireP elseIf menuConditions.units == 1 msg = IMCNmsgInfo0VampireM else msg = IMCNmsgInfo0VampireE endIf response = msg.Show(IMCN.GetSatiationPct(IMCN.queue[IMCN.satiationSolid] + IMCN.queue[IMCN.satiationLiquid]), \ IMCN.GetBloodCU(IMCN.reserves[IMCN.blood]), \ IMCN.GetBloodCU(IMCN.queue[IMCN.blood]) ) else if menuConditions.units == 0 msg = IMCNmsgInfo0P elseIf menuConditions.units == 1 msg = IMCNmsgInfo0M else msg = IMCNmsgInfo0E endIf response = msg.Show(IMCN.GetSatiationPct(IMCN.queue[IMCN.satiationSolid] + IMCN.queue[IMCN.satiationLiquid]), \ IMCN.GetCaloriesCU(IMCN.reserves[IMCN.calories]), \ IMCN.GetCaloriesCU(IMCN.queue[IMCN.calories]), \ IMCN.GetHydrationCU(IMCN.reserves[IMCN.hydration]), \ IMCN.GetHydrationCU(IMCN.queue[IMCN.hydration]), \ IMCN.sleepDebt ) endIf if response == 0 exitMenu = true elseIf response == 1 menuLevel = 10 elseIf response == 2 menuLevel = 11 elseIf response == 3 menuLevel = 12 elseIf response == 4 menuLevel = 13 else menuLevel = 14 endIf elseIf menuLevel == 10 ; advanced if IMCN.isVampire response = IMCNmsgInfoAdvancedVampire.Show(IMCN.morale) else if menuConditions.units == 0 msg = IMCNmsgInfoAdvancedP elseIf menuConditions.units == 1 msg = IMCNmsgInfoAdvancedM else msg = IMCNmsgInfoAdvancedE endIf response = msg.Show(IMCN.morale, \ IMCN.GetNutrientsRatePct(IMCN.nutrientsPerHourAvg), \ IMCN.GetNutrientsPct(IMCN.queue[IMCN.nutrients]), \ IMCN.GetProteinCU(IMCN.proteinPerHourAvg * 8), \ IMCN.GetProteinCU(IMCN.queue[IMCN.protein]) ) endIf menuLevel = 1 elseIf menuLevel == 11 ; substances IMCNmsgInfoSubstances.Show( IMCN.GetBloodAlcoholPct(IMCN.reserves[IMCN.alcohol]), \ IMCN.GetBloodAlcoholPct(IMCN.queue[IMCN.alcohol]), \ IMCN.GetCaffeinePct(IMCN.reserves[IMCN.caffeine]), \ IMCN.GetCaffeinePct(IMCN.queue[IMCN.caffeine]) ) menuLevel = 1 elseIf menuLevel == 12 ; fatigue IMCNmsgInfoFatigue.Show(IMCN.mentalFatigue, IMCN.physicalFatigue) menuLevel = 1 elseIf menuLevel == 13 ; character stats int feet = ((IMCN.height * defaults.metersToFeet) as int) float inches = 12.0 * (IMCN.height * defaults.metersToFeet - (feet as float)) if inches > 11.5 inches = 0.0 feet += 1 endIf IMCNmsgInfoCharacter.Show( feet, inches, IMCN.height, \ IMCN.bodyWeight * defaults.kilogramsToPounds, \ IMCN.bodyWeight, \ IMCN.bodyFat / IMCN.bodyWeight * 100, \ IMCN.skeletalMuscle / IMCN.bodyWeight * 100 ) menuLevel = 1 elseIf menuLevel == 14 ShowActionsMenu() menuLevel = 1 endIfendWhileendFunctionfunction ShowRealisticMenu()IMCNqsConditions conditions = IMCNmain as IMCNqsConditionsbool exitMenu = falseint menuLevel = 1while !exitMenu int response = -1 if menuLevel == 1 response = IMCNmsgRealistic0.Show() if response == 0 exitMenu = true elseIf response == 1 conditions.ShowSatiationEffects() elseIf response == 2 menuLevel = 12 elseIf response == 3 conditions.ShowHydrationEffects() elseIf response == 4 conditions.ShowBloodEffects() elseIf response == 5 menuLevel = 15 elseIf response == 6 conditions.ShowAlcoholEffects() elseIf response == 7 conditions.ShowCaffeineEffects() else menuLevel = 18 endIf elseIf menuLevel == 12 response = IMCNmsgRealisticHungry.Show() if response == 0 menuLevel = 1 elseIf response == 1 conditions.ShowCaloriesEffects() elseIf response == 2 conditions.ShowNutrientsEffects() else conditions.ShowProteinEffects() endIf elseIf menuLevel == 15 response = IMCNmsgRealisticTired.Show() if response == 0 menuLevel = 1 elseIf response == 1 conditions.ShowSleepEffects() elseIf response == 2 conditions.ShowMentalFatigueEffects() else conditions.ShowPhysicalFatigueEffects() endIf elseIf menuLevel == 18 ShowActionsMenu() menuLevel = 1 endIfendWhileendFunctionfunction ShowActionsMenu()IMCNqsMain IMCN = IMCNmain as IMCNqsMainIMCNqsMenuConditions menuConditions = (self as Quest) as IMCNqsMenuConditionsbool exitMenu = falseint menuLevel = 1while !exitMenu int response = -1 if menuLevel == 1 response = IMCNmsgInfoActions.Show() if response == 0 exitMenu = true elseIf response == 1 menuConditions.enabled = 2 IMCN.StopTracking() elseIf response == 2 menuConditions.enabled = 1 IMCN.StartTracking() elseIf response == 3 menuLevel = 13 else IMCNspoilage.UpdateLists() IMCNmsgInfoListsRebuilt.Show() endIf elseIf menuLevel == 13 response = IMCNmsgInfoConfirmReset.Show() if response == 0 menuLevel = 1 else IMCN.ResetAll() IMCN.StopTracking() menuConditions.enabled = 2 menuLevel = 1 endIf endIfendWhileendFunction