Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
LongerDays
Longer days on moons and a slower difficulty ramp during the day. Configurable.
By IQminus1000
| 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
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305README
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)
globalTimeavance à chaque frame dansMoveGlobalTime():globalTime += Time.deltaTime * globalTimeSpeedMultiplier.- L'heure de la lune vient de
CalculatePlanetTime():(globalTime + OffsetFromGlobalTime) * DaySpeedMultiplier. - Une journée vaut
totalTime = lengthOfHours (100) * numberOfHours (7) = 700unités.normalizedTimeOfDayva de 0 (8h) à 1 (minuit). timeUntilDeadlinebaisse du temps de jeu écoulé à chaque appel deMoveGlobalTime.
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, dansPlotOutEnemiesForNextHour)outsideEnemySpawnChanceThroughDay(extérieur, dansSpawnEnemiesOutside)daytimeEnemySpawnChanceThroughDay(monstres de jour, dansSpawnDaytimeEnemiesOutside)
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
globalTimeaux 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
DifficultyRampMultipliercompte. - 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 metstimeSpeed = 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
- Lancer avec r2modman (profil chocolatinetest), vérifier dans
BepInEx/LogOutput.logla ligneLongerDays chargé : .... - 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). - Vérifier que le nombre de jours avant la deadline baisse bien d'un jour par journée.
- 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).