IQminus1000-LongerDays icon

LongerDays

Longer days on moons and a slower difficulty ramp during the day. Configurable.

Last updated 3 hours ago
Total downloads 19
Total rating 0 
Categories Modpacks Misc
Dependency string IQminus1000-LongerDays-0.1.0
Dependants 0 other packages depend on this package

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

LongerDays

Journées plus longues sur les lunes et difficulté qui monte moins vite pendant la journée.

Config (BepInEx/config/alexis.longerdays.cfg, créée au premier lancement)

Option Défaut Limites Effet
DayLengthMultiplier 1.5 1 à 4 La journée dure X fois plus longtemps en temps réel
DifficultyRampMultiplier 0.75 0.25 à 1 Les courbes de spawn avancent X fois moins vite
ScaleMaxPower false Multiplie aussi la puissance max des monstres par DifficultyRampMultiplier

Une valeur hors limites est ramenée dans les limites par BepInEx. Les valeurs appliquées sont écrites dans le log au démarrage (LongerDays chargé : ...).

Comment ça marche

L'horloge du jeu (TimeOfDay)

  • globalTime avance à chaque frame dans MoveGlobalTime() : globalTime += Time.deltaTime * globalTimeSpeedMultiplier.
  • L'heure de la lune vient de CalculatePlanetTime() : (globalTime + OffsetFromGlobalTime) * DaySpeedMultiplier.
  • Une journée vaut totalTime = lengthOfHours (100) * numberOfHours (7) = 700 unités. normalizedTimeOfDay va de 0 (8h) à 1 (minuit).
  • timeUntilDeadline baisse du temps de jeu écoulé à chaque appel de MoveGlobalTime.

Patch ClockPatch : un Prefix divise globalTimeSpeedMultiplier par DayLengthMultiplier juste avant MoveGlobalTime, et un Finalizer remet la valeur d'origine juste après. Le temps réel d'une journée est donc multiplié, alors que totalTime et la deadline restent les mêmes en temps de jeu : le quota n'est pas cassé. Comme on divise la valeur en place au lieu de l'écraser, ça se combine avec les mods qui changent déjà ce multiplicateur.

Les spawns (RoundManager, uniquement chez l'hôte)

Chaque "heure", l'hôte lit sur la lune (SelectableLevel) trois courbes (AnimationCurve) à l'instant heure / totalTime :

  • enemySpawnChanceThroughoutDay (intérieur, dans PlotOutEnemiesForNextHour)
  • outsideEnemySpawnChanceThroughDay (extérieur, dans SpawnEnemiesOutside)
  • daytimeEnemySpawnChanceThroughDay (monstres de jour, dans SpawnDaytimeEnemiesOutside)

Patch SpawnCurvePatch : pendant ces trois méthodes, chaque courbe est remplacée par une copie "étirée" (temps des points-clés divisés par le facteur, pentes multipliées), donc nouvelle(t) = ancienne(t * facteur). Avec 0.75, à minuit on a la difficulté de ~21h45 en vanilla. Le Finalizer remet les courbes d'origine.

Patch MaxPowerPatch (si ScaleMaxPower = true) : après RefreshEnemiesList, currentMaxInsidePower et currentMaxOutsidePower sont multipliés par le facteur. maxDaytimeEnemyPowerCount n'est pas touché.

Ce que le mod ne change pas : la courbe de chaque monstre (enemyType.probabilityCurve, qui choisit quel monstre apparaît), PredictAllOutsideEnemies (prévision au début de la journée) et le moment où les spawns commencent (currentDayTime > 85).

Multijoueur

  • L'hôte envoie son globalTime aux clients toutes les 10 unités de temps (SyncTimeClientRpc). Un client sans le mod, ou avec une autre valeur, aura une horloge qui saute en arrière à chaque synchro.
  • Les spawns ne sont calculés que chez l'hôte : seule sa valeur de DifficultyRampMultiplier compte.
  • Tous les joueurs doivent avoir le mod avec la même config. La config de l'hôte n'est pas synchronisée automatiquement (CSync, déjà dans le profil, pourrait servir pour ça plus tard).

Conflits connus dans le profil chocolatinetest

  • Onyx_Inoculum-Longer_Day (Damir.longerDayMod, timeSpeed = 0.5) fait déjà la même chose. Les deux s'additionnent : 0.5 / 1.5 = journée 3 fois plus longue. Désactive l'un des deux dans r2modman, ou mets timeSpeed = 1.
  • LethalLevelLoader, Lategame Upgrades (MoreShipUpgrades), DawnLib touchent aussi MoveGlobalTime / DaySpeedMultiplier ; Weather_Modifiers et DawnLib changent les courbes de spawn. Ça devrait se combiner (on travaille sur la valeur qu'ils ont laissée), mais c'est à vérifier en jeu.

Compiler

dotnet build -c Release

La DLL est copiée automatiquement dans BepInEx/plugins/LongerDays du profil chocolatinetest.

Tester en jeu

  1. Lancer avec r2modman (profil chocolatinetest), vérifier dans BepInEx/LogOutput.log la ligne LongerDays chargé : ....
  2. Aller sur une lune et chronométrer une heure de l'horloge, avec puis sans le mod : le rapport doit être ≈ DayLengthMultiplier (Longer_Day désactivé pour la comparaison).
  3. Vérifier que le nombre de jours avant la deadline baisse bien d'un jour par journée.
  4. Comparer les spawns en fin de journée avec et sans le mod (le log du jeu affiche Round manager: et les probabilités des monstres).