Перейти до змісту

Конвертація config.ini у новий формат

Раніше конфігурація локомотива зберігалася як перелік безіменних рядків зі значеннями. Теперішній формат дає кожному елементу ключ і описує його типом. Старі файли config.ini симулятор більше не читає, тож локомотив або перефарбування, зроблені для старішої версії, потрібно конвертувати.

Конвертацію виконує Locomotive Config Editor — або кнопкою з Content Editor, або з командного рядка.

Два формати

Старий формат — коментар називає конкретний елемент, наступний рядок містить самі лише значення, і розпізнаються вони за порядком:

;LocCamera=X Y Z
0.77 5.95 3.5
;CabLight1=X Y Z Color
0 6.2 4.2 $DDFFFF
;RightMirror=X Y Z AngleZ
1.555 6.52 3.43 30

Новий формат — коментар називає тип елемента та перелік його полів, а рядок значень має явний ключ у snake_case:

;CabCamera=Position.X Position.Y Position.Z Angle.X Angle.Y Angle.Z Bounds.Left Bounds.Right Bounds.Height
cab.camera=0.92 5.83 3.55 -3 0 0 1.4 1.4 0.5
;Light=Position.X Position.Y Position.Z Color Radius
cab.main_light=0 6.2 4.2 $DDFFFF 8.33
;RearViewMirrors=Position.X Position.Y Position.Z AngleZ
rear_view_mirrors=1.555 6.52 3.43 30

Окрім перейменувань, новий формат додає поля, яких раніше просто не існувало (Radius для ламп, Bounds.* для камери кабіни, обмежувальні сфери та звуки для довільних об’єктів). Симулятор шукає записи за ключем, тому порядок рядків у новому файлі не має значення — але якщо потрібного ключа немає взагалі, локомотив не завантажиться.

Що потрібно мати

Конвертеру потрібен шаблон

Він не вигадує нову структуру. Ви маєте дати йому вже переведений config.ini тієї самої серії (або найближчої з наявних). Шаблон задає набір ключів, порядок записів і значення за замовчуванням; ваш старий файл лише перекриває ті значення, які вдалося зіставити.

Усі локомотиви, що йдуть із симулятором, уже в новому форматі, тож шаблоном зазвичай слугує data\<серія>\config.ini з контенту гри.

Конвертація в Content Editor

Оберіть локомотив або перефарбування в дереві контенту й скористайтеся кнопками праворуч:

Вузол Кнопка Що робить
Локомотив Конвертувати config.ini конвертує серійний конфіг
Перефарбування Конвертувати config.ini конвертує конфіг перефарбування
Перефарбування Прибрати дублікати config.ini видаляє ключі, що збігаються із серійним конфігом

Шляхи редактор добирає сам:

  • Шаблон — <контент>\data\<локо>\config.ini
  • Результат — <контент>\data\<локо>\config.ini, або <контент>\data\<локо>\<перефарбування>\config.ini
  • Джерело (старий файл) — той самий відносний шлях у папці гри, якщо такий файл там є; інакше — сам файл результату

Перед записом діалог показує всі три шляхи, а попередній файл зберігається як config.ini.bak. Повний звіт потрапляє у вкладку Log, останні його рядки дублюються в діалозі.

Старий конфіг має відрізнятися від шаблону

Для серійного конфіга шлях результату збігається зі шляхом шаблону. Саме тому старий файл має лежати деінде — покладіть його в папку гри як data\<локо>\config.ini. Якщо його там немає, редактор відмовиться конвертувати файл сам у себе й покаже це повідомлення. Перефарбувань це не стосується: їхній шаблон — серійний конфіг, тому перефарбування конвертується на місці.

Конвертація з командного рядка

Той самий виконуваний файл працює як консольна утиліта. Він лежить поруч із Content Editor, у папці LocomotiveConfigEditor.

ZDSimulator.LocomotiveConfigEditor.exe convert <old.ini> <template.ini> <out.ini>

Наприклад, конвертація старого перефарбування ВЛ80с за поточним серійним конфігом:

ZDSimulator.LocomotiveConfigEditor.exe convert ^
  D:\old\vl80s\2538\config.ini ^
  D:\ZDSimulator-content\data\vl80s\config.ini ^
  D:\ZDSimulator-content\data\vl80s\2538\config.ini

На відміну від кнопки, консоль не створює резервної копії й нічого не вгадує — вона пише рівно той файл, який ви вказали. Тому зручно спершу конвертувати в тимчасовий файл і порівняти.

Як читати звіт

Кожен запуск друкує рядки трьох видів і підсумок на кшталт 178 mapped, 655 default, 6 unmatched old.

Рядок Що означає Що робити
MAPPED: cab.camera <- LocCamera значення зі старого файлу лягло в новий ключ перевірте перейменування, які виглядають несподівано
DEFAULT: <ключ>: no legacy value, kept template default у старому файлі для цього поля нічого не було нормально для справді нових полів; перевірте ті, що потрібні саме вашому локомотиву
UNMATCHED_OLD: CabLight2 елемент у старому файлі був, а в шаблоні його нікуди покласти ці дані втрачено — додайте запис вручну, якщо він потрібен

Рядків DEFAULT багато, і здебільшого вони нешкідливі: результат завжди містить увесь набір ключів шаблону, разом із записами, яких ваш локомотив не використовує. А от UNMATCHED_OLD — короткий список, який варто прочитати рядок за рядком.

Що перевірити руками після конвертації

Кути камери та елементів

Якщо старий заголовок містив лише X Y Z, ці ж три значення потрапляють і в Angle.X Angle.Y Angle.Z нового запису, бо голе X вважається псевдонімом для обох полів. Після конвертації cab.camera виглядатиме як cab.camera=0.77 5.95 3.5 0.77 5.95 3.5 1.4 1.4 0.5 — друга трійка хибна. Виправте ці кути (зазвичай 0 0 0 або невеликий поворот).

Ще варто переглянути:

  • Старий блок Sounds не має відповідника в новому config.ini і мовчки відкидається.
  • Радіуси, обмежувальні сфери та інші нові поля лишаються зі значеннями шаблону, тобто від іншого локомотива — перегляньте лампи й довільні об’єкти.
  • Конвертація перефарбування за серійним шаблоном дає повний конфіг, а не короткий файл перекриттів. Після неї запустіть Прибрати дублікати config.ini, щоб лишилися тільки ключі, які справді відрізняються від серії.

Повторний запуск конвертера на вже переведеному або наполовину переведеному файлі безпечний: парсер приймає старий, новий і змішаний формати, тож можна конвертувати, виправити кілька записів руками й конвертувати знову.

Перевірка конфіга

ZDSimulator.LocomotiveConfigEditor.exe verify <config.ini>

Друкує OK: <шлях> і повертає 0, якщо файл чистий, або перелік попереджень і код 1. Утиліта ловить невідомі типи елементів, перелік полів у заголовку, що не збігається зі схемою типу, кількість значень, яка не відповідає заголовку, заголовки без рядка значень і рядки значень без заголовка — тобто саме те, що ламається під час ручного редагування. Запускайте її після кожної конвертації.

Прибирання дублікатів перефарбування

ZDSimulator.LocomotiveConfigEditor.exe dedupe <livery.ini> [<series.ini>]

Видаляє з перефарбування всі ключі, значення яких збігаються із серійним конфігом; якщо другий аргумент не вказано, серійний файл береться з батьківської папки. Оригінал зберігається як .bak. Конфіг перефарбування має перелічувати лише те, що змінює, — решта підхоплюється із серійного файлу.