For Mod Authors

Lifecycle Events

Dark Future exposes the following lifecycle event hooks that you can listen for using Codeware's custom events.

Lifecycle Hook
Event Name
Description

Init

DarkFuture.Main.MainSystemLifecycleInitEvent

Event that fires when Dark Future begins starting up all subsystems (either initially or when the game is loaded). Occurs before any of Dark Future's systems are initialized.

InitDone

DarkFuture.Main.MainSystemLifecycleInitDoneEvent

Event that fires when Dark Future is finished starting all subsystems (either initially or when the game is loaded).

Resume

DarkFuture.Main.MainSystemLifecycleResumeEvent

Event that fires when Dark Future begins resuming all subsystems. Occurs if the user toggled "Enable Dark Future" to On after having turned it Off.

ResumeDone

DarkFuture.Main.MainSystemLifecycleResumeDoneEvent

Event that fires when Dark Future is finished resuming all subsystems.

Suspend

DarkFuture.Main.MainSystemLifecycleSuspendEvent

Event that fires when Dark Future begins suspending all subsystems. Occurs if the user toggled "Enable Dark Future" to Off.

SuspendDone

DarkFuture.Main.MainSystemLifecycleSuspendDoneEvent

Event that fires when Dark Future is done suspending all subsystems.

Here's an example of how these lifecycle hooks might be used:

import DarkFuture.Main.{
  MainSystemLifecycleInitEvent,
  MainSystemLifecycleInitDoneEvent,
  MainSystemLifecycleResumeEvent,
  MainSystemLifecycleResumeDoneEvent,
  MainSystemLifecycleSuspendEvent,
  MainSystemLifecycleSuspendDoneEvent
}

public class MyEventListener extends ScriptableService {
  private cb func OnLoad() {
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleInitEvent", this, n"OnMainSystemLifecycleInitEvent", true);
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleInitDoneEvent", this, n"OnMainSystemLifecycleInitDoneEvent", true);
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleResumeEvent", this, n"OnMainSystemLifecycleResumeEvent", true);
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleResumeDoneEvent", this, n"OnMainSystemLifecycleResumeDoneEvent", true);
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleSuspendEvent", this, n"OnMainSystemLifecycleSuspendEvent", true);
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Main.MainSystemLifecycleSuspendDoneEvent", this, n"OnMainSystemLifecycleSuspendDoneEvent", true);
  }
    
  private cb func OnMainSystemLifecycleInitEvent(event: ref<MainSystemLifecycleInitEvent>) {
      // Started initializing subsystems!
  }
    
  private cb func OnMainSystemLifecycleInitDoneEvent(event: ref<MainSystemLifecycleInitDoneEvent>) {
      // Finished initializing subsystems!
  }
    
  private cb func OnMainSystemLifecycleResumeEvent(event: ref<MainSystemLifecycleResumeEvent>) {
      // Started resuming subsystems after a shutdown!
  }
    
  private cb func OnMainSystemLifecycleResumeDoneEvent(event: ref<MainSystemLifecycleResumeDoneEvent>) {
      // Finished resuming subsystems after a shutdown!
  }
    
  private cb func OnMainSystemLifecycleSuspendEvent(event: ref<MainSystemLifecycleSuspendEvent>) {
      // Started suspending subsystems!
  }
    
  private cb func OnMainSystemLifecycleSuspendDoneEvent(event: ref<MainSystemLifecycleSuspendDoneEvent>) {
      // Finished suspending subsystems!
  }
}

Basic Need Value Change Event

There is an event that fires whenever a Basic Need (Nerve, Hydration, Nutrition, Energy) changes its value that you can listen for using Codeware's custom events.

Event
Event Name
Description

Need Value Change

DarkFuture.Needs.NeedValueChangedEvent

Fires when any Basic Need changes its value.

Here's an example of usage.

import DarkFuture.Needs.{
  DFNeedType,
  DFNeedValueChangedEventDatum,
  NeedValueChangedEvent
}

/*
public enum DFNeedType {
  None = 0,
  Hydration = 1,
  Nutrition = 2,
  Energy = 3,
  Nerve = 4
}

public struct DFNeedValueChangedEventDatum {
  public let needType: DFNeedType;
  public let newValue: Float;
}
*/

public class MyEventListener extends ScriptableService {
  private cb func OnLoad() {
    GameInstance.GetCallbackSystem().RegisterCallback(n"DarkFuture.Needs.NeedValueChangedEvent", this, n"OnNeedValueChangedEvent", true);
  }
    
  private cb func OnNeedValueChangedEvent(event: ref<NeedValueChangedEvent>) {
      let data: DFNeedValueChangedEventDatum = event.GetData();
      
      let needType: DFNeedType = data.needType; // Was this an update for Nerve, Hydration, Nutrition, or Energy?
      let newValue: Float = data.newValue; // What was the new value for the need?
  }
}

Consumables

Below is a quick list of all TweakDBIDs for new Consumables added by Dark Future, and their gameplay purpose, as well as consumables in the game that have had their functionality significantly changed.

In Dark Future, Narcotics and Cigarettes are new classifications of consumables similar to Food, Drinks, and Alcohol. Because they have distinct gameplay purposes and feed unique Addictions, they should be handled as their own types of consumables.

Other types of consumables that have more generalized gameplay uses are noted as "beneficial", below.

Item Name
TweakDBID
Notes

Vargas Black Label

DarkFutureItem.CigarettePackC

Cigarette.

Yeheyuan Filters

Items.GenericJunkItem23

Cigarette. (This item exists in the base game as a Junk Item; it was converted into a consumable.)

Morley Fusion

Items.GenericJunkItem24

Cigarette. (This item exists in the base game as a Junk Item; it was converted into a consumable.)

Mr. Whitey

Items.LowQualityFood6

Narcotic (no longer Food). Combat use allowed.

Mr. Whitey Mint

Items.MediumQualityFood11

Narcotic (no longer Food). Combat use allowed.

Mr. Whitey Crystal

Items.MediumQualityFood14

Narcotic (no longer Food). Combat use allowed.

Mr. Whitey Spiced

Items.MediumQualityFood15

Narcotic (no longer Food). Combat use allowed.

Black Lace Mk. 1

Items.BlackLaceV0

Narcotic. Combat use allowed.

Black Lace Mk. 2

Items.BlackLaceV1

Narcotic. Combat use allowed.

Emergency Cardioregulator

DarkFutureItem.NerveRestoreDrug

Narcotic. Combat use allowed.

Glitter

DarkFutureItem.Glitter

Narcotic. Combat use allowed.

Addiquit

DarkFutureItem.AddictionTreatmentDrug

Beneficial consumable. Helps cure Addictions.

Endotrisine

DarkFutureItem.TraumaTreatmentDrug

Beneficial consumable. Helps cure Trauma status.

Certain Food and Drinks that come from vending machines have both positive and (minor) negative gameplay effects, in order to encourage players to seek out higher-quality food at Food Vendors. The list of these "low quality" food and drink items that can negatively impact the player in Dark Future are listed below.

Item Name
TweakDBID

ChroManticore Lime

Items.GoodQualityDrink2

ChroManticore Carnival

Items.GoodQualityDrink4

Spunky Monkey

Items.LowQualityDrink4

Spunky Monkey Mint

Items.LowQualityDrink5

Cirrus Cola Classic

Items.LowQualityDrink6

Cirrus Cola Corn and Lemon

Items.LowQualityDrink7

Cirrus Cola Blood Breeze

Items.LowQualityDrink8

NiCola Blue

Items.LowQualityDrink9

NiCola

Items.LowQualityDrink10

NiCola Fire

Items.MediumQualityDrink1

NiCola Sakura

Items.MediumQualityDrink2

Naranjita Classic

Items.MediumQualityDrink5

Naranjita Zero

Items.MediumQualityDrink6

ChroManticore

Items.MediumQualityDrink7

Moonchies

Items.LowQualityFood5

Orgiantic Omniflave

Items.LowQualityFood7

Pop-Turd

Items.LowQualityFood8

Sojasil Dynamite

Items.LowQualityFood9

Cat Food

Items.LowQualityFood11

Holobites Grape Pie

Items.LowQualityFood12

Holobites Mint Pie

Items.LowQualityFood13

Holobites Peach Pie

Items.LowQualityFood14

Orgiantic Salsa Agave

Items.LowQualityFood15

Orgiantic Vinegar Chili

Items.LowQualityFood16

Moonchies Andromeda

Items.LowQualityFood17

Moonchies Pulsar

Items.LowQualityFood18

Moonchies Sour Planet

Items.LowQualityFood19

Leelou Beans Lagoon

Items.LowQualityFood20

Leelou Beans Meyer Lemon

Items.LowQualityFood21

Leelou Beans Plantain

Items.LowQualityFood22

Leelou Beans Tropical

Items.LowQualityFood23

Sojasil Eruption

Items.LowQualityFood24

Sojasil Molotov Cocktail

Items.LowQualityFood25

Sojasil Nitroglycerin

Items.LowQualityFood26

Sojasil Radioactive

Items.LowQualityFood27

Sojasil Second Impact

Items.LowQualityFood28

Slaughterhouse Jerky

Items.MediumQualityFood3

Burrito XXL

Items.MediumQualityFood4

Slaughterhouse Prime

Items.MediumQualityFood7

Burrito XXL Rosado

Items.MediumQualityFood12

Burrito XXL Turquesa

Items.MediumQualityFood13

Shwabshwab Grape

Items.MediumQualityFood17

Shwabshwab Ketchup

Items.MediumQualityFood18

Shwabshwab Bue

Items.MediumQualityFood19

Slaughterhouse Veggie

Items.MediumQualityFood20

Last updated