Solon-FirstDayCompany icon

FirstDayCompany

Day one of a new save always departs to the Company building on 71-Gordion. Every other day is left to RandomMoonFX or the terminal. Host-authoritative, configurable target moon, works standalone.

Last updated 3 hours ago
Total downloads 8
Total rating 0 
Categories Mods AI Generated
Dependency string Solon-FirstDayCompany-1.0.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

First Day Company

FIRST DAY COMPANY

Lethal Company BepInEx Version License

Language / Язык: English · Русский

FIRST DAY COMPANY

Author: Solo00n

The very first departure of a new save file always lands at the Company building on 71-Gordion, and every day after that is handed straight back to whatever else picks the moon.

WHAT IT DOES

  • Day one is always the Company — pull the lever on a fresh save and the ship reroutes itself to 71-Gordion, no matter where the terminal was pointed.
  • The reroute is free — the crew credits are passed through unchanged, so a forced route never costs anything.
  • Day two onward is untouched — the mod bows out the moment the game day counter leaves zero, and the route goes back to RandomMoonFX or the terminal.
  • The last day still belongs to RandomMoonFX — if day one somehow is also the deadline day, this mod stands down and lets RandomMoonFX do its own Company routing.
  • The terminal cannot get around it — routing elsewhere on day one is simply ignored at take-off; routing to Gordion by hand is honoured and the ship just leaves.
  • Any moon, not only Gordion — the target is a config value and matches modded moons too.
  • Works standalone — RandomMoonFX is a companion, not a requirement.

HOW IT WORKS

  • The day check is the game own counter, StartOfRound.gameStats.daysSpent == 0 — the same condition vanilla uses to play the first-day ship animation. It is bumped in EndOfGame when the ship returns to orbit, so a second trip is never day one.
  • The hook is a prefix on StartOfRound.StartGame, ordered ahead of RandomMoonFX (HarmonyBefore plus Priority.First). That is the last moment the destination can still change — after any terminal route and after any randomizer.
  • On day one the ship is rerouted with ChangeLevelServerRpc and the take-off is swallowed; a pass-through postfix on TravelToLevelEffects waits out the arrival and starts the landing with StartGameServerRpc.
  • RandomMoonFX is handed its own IsStarting flag for that take-off, so it steps aside on its own terms — its config, blacklist, visited-moons list and last-day logic are never touched.
  • The moon is resolved from the live moon list every departure: displayed name with the leading number ignored (Gordion matches 71 Gordion), then scene name, then the Company shape — no day cycle and nothing spawning on it.
  • The whole RandomMoonFX binding is reflection-based, so a missing, older or newer version degrades to standalone instead of a load error.

MULTIPLAYER (HOST-AUTHORITATIVE)

Only the host needs the mod. It decides a shared route once and lets the game distribute it.

Route: the reroute goes out over the game own ChangeLevel RPC, so every client follows with no desync and no version check.
Take-off: StartGame only ever runs on the server, so the decision is made in exactly one place.
Clients: installing it as a client in a lobby whose host does not have it is harmless — the hooks simply never fire.

REQUIREMENTS

  • BepInEx 5.4.21+ (BepInEx-BepInExPack-5.4.2305)
  • Lethal Company V81
  • RandomMoonFX by Zigzag — optional companion, verified against 1.4.3

INSTALLATION

  • Mod manager (r2modman / Thunderstore Mod Manager): search for the mod and click Install.
  • Manual: install the BepInEx pack, then drop Solon.FirstDayCompany.dll into BepInEx/plugins/.

CONFIGURATION

File: BepInEx/config/Solon.FirstDayCompany.cfg (created on first launch).

KeyDefaultDescription
ForceFirstDaytrueMaster switch. Off means the first day is left alone.
FirstDayMoonGordionTarget moon for day one. Matched on the displayed name with the leading number ignored, then on the scene name, so modded moons work.
TakeoffDelay1.5Seconds between arriving at the forced moon and starting the landing.
DebugModefalseLog every departure decision: the day, the resolved moon and who is handling the route.
If FirstDayMoon matches nothing in the moon list, the mod logs a warning and leaves the departure alone rather than guessing. Raise TakeoffDelay if a moon-visuals mod (Celestial Tint, Chameleon) uses a longer routing animation.

INTEGRATIONS / COMPATIBILITY

  • RandomMoonFX (Zigzag) — the intended companion. It already forces the Company on the last day of a quota; this mod is the other bookend and keeps the first one.
  • Moon loaders — LethalLevelLoader, Celestial Tint, Chameleon and any pack that adds moons: the target is resolved from the live moon list, and FirstDayMoon can name any of them.
  • LethalFixes, GeneralImprovements — no shared hooks.
  • Challenge moon files are never touched.
  • Anything else patching StartOfRound.StartGame is fine; priority is claimed over RandomMoonFX specifically.

BUILD

dotnet build FirstDayCompany.csproj -c Release

Output: bin/Release/netstandard2.1/Solon.FirstDayCompany.dll. Running build-package.ps1 builds Release and assembles the Thunderstore zip in dist/. Game assemblies are referenced via the LethalCompany.GameLibs.Steam NuGet package as compile-only (PrivateAssets="all") — no game files are distributed.

CREDITS

  • Solo00n — author.
  • Built on BepInEx and HarmonyX.
  • Companion mod: RandomMoonFX by Zigzag — its last-day Company routing is what this mod mirrors for the first day.
  • Licensed under MIT.

FIRST DAY COMPANY

Автор: Solo00n

Самый первый вылет на новом сохранении всегда заканчивается посадкой у здания Компании на 71-Gordion, а все последующие дни мод отдаёт обратно тому, кто выбирает луну.

ЧТО ДЕЛАЕТ МОД

  • Первый день — всегда Компания — на новом сохранении корабль сам перенаправляется на 71-Gordion, куда бы ни был проложен маршрут в терминале.
  • Перенаправление бесплатное — кредиты команды передаются без изменений, принудительный маршрут ничего не стоит.
  • Со второго дня мод молчит — он отходит в сторону, как только счётчик дней перестаёт быть нулевым, и маршрут возвращается RandomMoonFX или терминалу.
  • Последний день остаётся за RandomMoonFX — если первый день вдруг оказался днём дедлайна, мод не вмешивается и отдаёт маршрут на Компанию ему.
  • Терминал не обходит мод — маршрут в другую сторону в первый день просто игнорируется при взлёте; маршрут на Гордион вручную уважается, и корабль сразу вылетает.
  • Любая луна, не только Гордион — цель задаётся в конфиге и находит модовые луны тоже.
  • Работает без RandomMoonFX — он спутник, а не зависимость.

КАК ЭТО РАБОТАЕТ

  • Проверка дня — собственный счётчик игры StartOfRound.gameStats.daysSpent == 0, ровно то же условие, по которому ванилла играет анимацию первого дня. Он увеличивается в EndOfGame при возврате на орбиту, поэтому второй вылет первым днём уже не считается.
  • Хук — префикс на StartOfRound.StartGame, поставленный впереди RandomMoonFX (HarmonyBefore плюс Priority.First). Это последний момент, когда точку назначения ещё можно изменить: после любого маршрута из терминала и после любого рандомайзера.
  • В первый день корабль перенаправляется через ChangeLevelServerRpc, а взлёт проглатывается; пасс-тру постфикс на TravelToLevelEffects дожидается прилёта и запускает посадку через StartGameServerRpc.
  • RandomMoonFX получает свой же флаг IsStarting на этот взлёт и отходит в сторону по собственным правилам — его конфиг, чёрный список, список посещённых лун и логика последнего дня не тронуты.
  • Луна ищется в живом списке при каждом вылете: отображаемое имя без ведущего номера (Gordion находит 71 Gordion), затем имя сцены, затем форма Компании — без смены времени суток и без спавна.
  • Вся привязка к RandomMoonFX сделана рефлексией, поэтому отсутствующая, старая или новая версия означает автономную работу, а не ошибку загрузки.

МУЛЬТИПЛЕЕР (HOST-AUTHORITATIVE)

Мод нужен только хосту. Он один раз принимает общее решение о маршруте, а дальше его разносит сама игра.

Маршрут: перенаправление идёт через ванильный RPC ChangeLevel, поэтому клиенты следуют за хостом без рассинхрона и без проверки версий.
Взлёт: StartGame выполняется только на сервере, так что решение принимается ровно в одном месте.
Клиенты: мод у клиента в лобби, где его нет у хоста, безвреден — хуки просто не срабатывают.

ЗАВИСИМОСТИ

  • BepInEx 5.4.21+ (BepInEx-BepInExPack-5.4.2305)
  • Lethal Company V81
  • RandomMoonFX от Zigzag — необязательный спутник, проверено на 1.4.3

УСТАНОВКА

  • Через менеджер (r2modman / Thunderstore Mod Manager): найти мод и нажать Install.
  • Вручную: установить BepInEx-пак, затем положить Solon.FirstDayCompany.dll в BepInEx/plugins/.

НАСТРОЙКА

Файл: BepInEx/config/Solon.FirstDayCompany.cfg (создаётся при первом запуске).

КлючПо умолчаниюОписание
ForceFirstDaytrueГлавный выключатель. Выключено — первый день не трогается.
FirstDayMoonGordionЛуна первого дня. Ищется по отображаемому имени без ведущего номера, затем по имени сцены, поэтому модовые луны тоже работают.
TakeoffDelay1.5Секунды между прилётом на принудительную луну и началом посадки.
DebugModefalseЛогировать каждое решение о вылете: день, найденную луну и того, кто ведёт маршрут.
Если FirstDayMoon не совпал ни с одной луной, мод пишет предупреждение в лог и оставляет вылет как есть, а не угадывает. Увеличьте TakeoffDelay, если мод на визуал лун (Celestial Tint, Chameleon) использует более длинную анимацию маршрута.

ИНТЕГРАЦИИ И СОВМЕСТИМОСТЬ

  • RandomMoonFX (Zigzag) — основной спутник. Он уже отправляет на Компанию в последний день квоты; этот мод закрывает вторую сторону и держит первый.
  • Загрузчики лун — LethalLevelLoader, Celestial Tint, Chameleon и любые паки с новыми лунами: цель ищется в живом списке, и FirstDayMoon может указывать на любую из них.
  • LethalFixes, GeneralImprovements — общих хуков нет.
  • Файлы испытательной луны (challenge) не трогаются никогда.
  • Любые другие моды, патчащие StartOfRound.StartGame, работают нормально — приоритет заявлен только над RandomMoonFX.

СБОРКА

dotnet build FirstDayCompany.csproj -c Release

Результат: bin/Release/netstandard2.1/Solon.FirstDayCompany.dll. Запуск build-package.ps1 собирает Release и складывает Thunderstore-архив в dist/. Сборки игры подключены через NuGet-пакет LethalCompany.GameLibs.Steam только для компиляции (PrivateAssets="all") — файлы игры не распространяются.

БЛАГОДАРНОСТИ

  • Solo00n — автор.
  • Построено на BepInEx и HarmonyX.
  • Мод-спутник: RandomMoonFX от Zigzag — его маршрут на Компанию в последний день и есть то, что этот мод повторяет для первого.
  • Лицензия MIT.