You are viewing a potentially older version of this package. View all versions.
Exothermic-AllSleepNightSkip-0.1.5 icon

AllSleepNightSkip

Fast-forwards ASKA through the night when every required connected player is asleep.

Date uploaded a week ago
Version 0.1.5
Download link Exothermic-AllSleepNightSkip-0.1.5.zip
Downloads 5
Dependency string Exothermic-AllSleepNightSkip-0.1.5

This mod requires the following mods to function

BepInEx-BepInExPack_IL2CPP-6.0.755 icon
BepInEx-BepInExPack_IL2CPP

BepInEx pack for IL2CPP x64 Unity games. Preconfigured and ready to use.

Preferred version: 6.0.755

README

Exothermic All-Sleep Night Skip v0.1.5

A BepInEx IL2CPP mod for ASKA that accelerates the world simulation when all required active players are asleep, then restores the exact previous time scale at morning, when somebody wakes, on a scene change, or at a safety timeout.

Behaviour

  • Defaults to requiring 100% of active players to be asleep.
  • Waits 3 real seconds to avoid triggering during a brief bed interaction.
  • Runs only on the world authority when Fusion authority can be identified; dedicated/headless mode is treated as authority.
  • Uses runtime discovery rather than fixed private ASKA field names.
  • Stops at the discovered morning transition or after a 120-real-second safety timeout.
  • Restores Time.timeScale and Time.fixedDeltaTime on every exit path.

Build

The source is provided because ASKA's IL2CPP Unity reference assemblies are generated locally by BepInEx.

This release deliberately disables C# nullable-reference metadata because ASKA's generated Il2Cppmscorlib.dll does not provide the compiler attributes required for it on some Linux/Gale setups.

CachyOS / Arch / fish

  1. Install the SDK and zip utility:

    sudo pacman -S dotnet-sdk zip
    
  2. Start ASKA once through r2modman/BepInEx so BepInEx/interop exists.

  3. Run:

    ./build.fish "/full/path/that/contains/BepInEx/interop"
    

For a normal manual installation, that path is usually the ASKA game directory. For r2modman it may be the selected profile directory instead.

Windows PowerShell

Set-ExecutionPolicy -Scope Process Bypass
.\build.ps1 -AskaDir "C:\Program Files (x86)\Steam\steamapps\common\ASKA"

The build produces:

Exothermic-AllSleepNightSkip-0.1.5-install.zip

Installation

Extract the generated install ZIP into the ASKA dedicated-server/game root so the DLL ends up at:

BepInEx/plugins/Exothermic.AllSleepNightSkip/Exothermic.AllSleepNightSkip.dll

Install it on the dedicated server/host. Clients may keep it installed too; AuthorityOnly = true prevents non-authoritative peers from changing time.

Configuration

After one launch, edit:

BepInEx/config/com.exothermic.aska.allsleepnightskip.cfg

Recommended initial values:

[General]
Enabled = true

[Sleep]
RequiredSleepFraction = 1
MinimumPlayers = 1
StartDelaySeconds = 3

[FastForward]
TimeScale = 20
MaximumRealSeconds = 120
OnlyAtNight = true
AllowUnknownNightState = true
MorningHour = 6

[Advanced]
AuthorityOnly = true
PlayerScanIntervalSeconds = 1

[Diagnostics]
VerboseLogging = false
DumpDiscoveryOnWorldLoad = false

If the server stutters, lower TimeScale to 8 or 10.

Diagnostic behaviour

ASKA uses additive scenes and the active scene name can remain a boot/menu/persistent scene even while a world is running. v0.1.5 no longer blocks scanning based only on that name. With VerboseLogging = true, every scan now reports its gate, active scene, loaded scenes, authority, player count, and per-player sleep signal.

v0.1.5 dedicated-server fixes

The v0.1.4 log confirmed that the dedicated server could find CharacterAska(Clone) and the night clock, but ASKA keeps the actual sleep state behind the player's _interactionAgent rather than an IsSleeping field on SSSGame.Character. v0.1.5 recursively follows only interaction/state/action/pose references and recognises active sleep, bed, in-bed, resting, and wake-up interaction objects. The traversal is depth- and node-limited so it cannot walk the whole world graph.

The exact-type SSSGame.Character scan, Character.Spawned tracker, CharacterAska(Clone) fallback, and sun/moon clock handling remain enabled.

First test

  1. Back up the save.
  2. Start the server with the mod installed.
  3. Join with every intended test player.
  4. Wait until night and have everybody use a bed.
  5. Check BepInEx/LogOutput.log for:
Night fast-forward started
Night fast-forward stopped: morning reached

If it does not detect sleep or the clock after an ASKA update, set:

[Diagnostics]
VerboseLogging = true
DumpDiscoveryOnWorldLoad = true

Restart, enter the world, and sleep. While every player remains unknown, v0.1.5 writes up to three ALL-SLEEP NIGHT SKIP DISCOVERY sections at 15-second intervals so the log captures both the awake and in-bed interaction graphs. The mod only reads candidate state and does not change the save format.

Limitations of v0.1.5

ASKA does not expose a stable public mod API for sleep and world-clock state. This version therefore uses ranked runtime discovery plus a sun fallback. A game update can rename or restructure those internals. The safety timeout and full time-scale restoration are designed to prevent a failed clock probe from leaving the server accelerated.

CHANGELOG

Changelog

0.1.6

  • Removed developer build instructions from the public Thunderstore README.
  • Simplified installation, configuration, and troubleshooting information for server owners.
  • No gameplay or runtime behaviour changes from 0.1.5.

0.1.5

  • Added recursive inspection of ASKA's _interactionAgent, current interaction, action, state, pose, and moveset object graph.
  • Recognises active SleepInteraction, BedInteraction, InBed, WakeUpInteraction, sleeping state enums, and equivalent renamed objects.
  • Added guarded animator-clip detection without invoking invalid animator layers on the headless server.
  • Added CharacterAska(Clone) as a dedicated-server player-root fallback when IsPlayer() reports false.
  • Expanded the discovery dump with a bounded recursive interaction/state graph for future ASKA updates.
  • Discovery repeats up to twice at 15-second intervals while sleep remains unknown, so entering a bed after world load is captured.
  • Compact scan diagnostics now include the closest interaction graph values when no sleep signal is found.

0.1.4

  • Added a dedicated-server Character.Spawned registry so player objects are captured as ASKA creates them.
  • Added exact-type discovery for ASKA's SSSGame.Character IL2CPP wrapper, including inactive live scene instances.
  • Added playerProbe= diagnostics with tracked, exact-type, broad, tagged, and accepted counts.
  • Fixed ASKA's Directional Light MOON being interpreted as morning instead of night.
  • Retained broad and tag-based discovery fallbacks for clients and future ASKA updates.

0.1.3

  • Removed the unreliable active-scene-name gate that could silently stop all scans on ASKA dedicated servers.
  • Diagnostics now log before authority/player gates, so players=0, NotAuthority, and scene mismatches are visible.
  • Added an unconditional NightSkipBehaviour is active startup line.
  • Discovery waits until at least one player is visible instead of consuming the one-shot dump too early.
  • Startup now prints the effective diagnostic and authority settings.

0.1.2

  • Fixed Linux/Gale builds failing with CS0656 for NullableAttribute and NullableContextAttribute.
  • Removed nullable-reference metadata that conflicts with ASKA's generated Il2Cppmscorlib.dll.
  • Replaced record/init-only types with ordinary structs/properties for broader IL2CPP compiler compatibility.

0.1.0

  • Initial experimental ASKA/BepInEx IL2CPP release.
  • Detects active player characters and ranked sleep signals at runtime.
  • Requires a configurable fraction of connected players to be asleep.
  • Authority-only time acceleration with dedicated-server detection.
  • Reflective world-clock discovery and directional-sun fallback.