Терминал kOS прокручивается и всё забывает. Если полёт не удался, вопрос «почему» упирается в ощущения: «вроде рано начал разворот». Телеметрия превращает ощущения в числа — и, что важнее, в файл на диске, который можно открыть таблицей или отдать на разбор ассистенту (Нейросеть как второй пилот).
Куда пишем: два тома
| Том | Что это | Где на диске | Нюанс |
|---|---|---|---|
0: |
Архив (общий) | <KSP>/Ships/Script/ |
Виден снаружи игры. Нужна связь с КЦК |
1: |
Локальный диск процессора | внутри сейва | Работает всегда, но снаружи не прочитать |
Ключевой момент: архив в kOS работает через связь. В карьере с CommNet аппарат без канала до Кербина архив не видит — запись в 0: упадёт. Отсюда рабочая схема: пишем в локальный том 1:, а как связь появилась — копируем в архив.
// пишем локально, потом переносим
LOG line TO "1:/flight.csv".
// ...после полёта, при живой связи:
COPYPATH("1:/flight.csv", "0:/flight.csv").
Если играешь без требования связи для зондов (см. Настройки: сложность и моды), можно писать сразу в 0: и не морочиться.
Простой логгер
Кладём рядом со скриптом полёта и запускаем перед стартом. Пишет строку раз в полсекунды в формате CSV.
// lib_log.ks — телеметрия взлёта
SET logFile TO "1:/ascent.csv".
IF EXISTS(logFile) { DELETEPATH(logFile). }
LOG "t,alt,vspd,spd,ap,pe,mass,thrust" TO logFile.
SET t0 TO TIME:SECONDS.
SET logging TO TRUE.
FUNCTION logTick {
SET line TO ROUND(TIME:SECONDS - t0, 1)
+ "," + ROUND(SHIP:ALTITUDE, 0)
+ "," + ROUND(SHIP:VERTICALSPEED, 1)
+ "," + ROUND(SHIP:VELOCITY:SURFACE:MAG, 1)
+ "," + ROUND(SHIP:APOAPSIS, 0)
+ "," + ROUND(SHIP:PERIAPSIS, 0)
+ "," + ROUND(SHIP:MASS, 2)
+ "," + ROUND(SHIP:AVAILABLETHRUST, 1).
LOG line TO logFile.
}
Вызов из основного цикла скрипта взлёта:
UNTIL SHIP:APOAPSIS > targetAp {
logTick().
WAIT 0.5.
}
Полсекунды — разумный шаг: файл за подъём выходит на пару сотен строк, а картина видна. Писать каждый такт физики бессмысленно, только раздуешь файл.
Что логировать под задачу
| Задача | Что писать |
|---|---|
| Взлёт | время, высота, вертикальная скорость, апоцентр, тяга, масса |
| Циркуляризация | время, апоцентр, перицентр, оставшийся Δv узла |
| Посадка | радарная высота (ALT:RADAR), вертикальная скорость, тяга, масса |
| Энергобаланс | SHIP:RESOURCES по ЭЧ, освещённость, время в тени |
| Долгий перелёт | раз в минуту: время, положение, ресурсы — иначе файл разбухнет |
После полёта
Файл лежит в Ships/Script/ — это обычная папка. Дальше три пути:
- Открыть таблицей. CSV импортируется в любой редактор, строишь график «высота от времени» и сразу видишь, где профиль ушёл.
- Сравнить два полёта. Один и тот же скрипт с разными параметрами — два файла рядом, разница видна по числам, а не по памяти.
- Отдать ассистенту. Это самый быстрый разбор: файл читается снаружи игры, и по нему видно, на какой секунде тангаж ушёл раньше времени или где кончилась тяга. Подробно — в Нейросеть как второй пилот.
Гигиена
- Чисти старые файлы:
DELETEPATH("1:/ascent.csv")в начале скрипта, иначе логи склеятся и разбор превратится в кашу. - Не логируй в тени связи. Если пишешь в
0:и потеряешь канал — скрипт упадёт с ошибкой тома. Локальный1:надёжнее. - Помни про размер локального диска. У процессоров он маленький (от 5 000 байт у младших моделей); длинный лог туда не влезет. Для долгих миссий пиши реже или сразу в архив.
- Заголовок в начале файла. Одна строка с именами колонок экономит кучу времени и тебе, и любому, кто будет разбирать лог.
Правило простое: если после полёта ты не можешь ответить числом на вопрос «почему», значит, в следующий раз нужен лог.