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

Специализированне имена и типы объектов

Документ описывает строки, ключевые слова и “типы”, которые жёстко распознаются кодом симулятора и утилитами (без привязки к конкретному контенту). Это полезно, когда вы правите маршруты/объекты и хотите понимать, какие имена имеют специальное поведение.

  • objects.ref / traffic.ref содержат справочники (имя → файлы модели/текстур и т.п.). Большинство имён там — “обычные”.
    Но часть имён и префиксов дополнительно интерпретируются кодом (см. “Спец-имена объектов”).

Атрибуты objects.ref

  • [mipmap] — включает mipmapping для всех следующих объектов. Работает только если глобальная опция MipMapping включена в настройках симулятора.
  • [not_mipmap] — отключает mipmapping для всех следующих объектов.
  • [smooth] — включает режим гладкого затенения (smooth shading) для следующих объектов.
  • [not_smooth] — отключает smooth shading для следующих объектов.
  • [optional] — помечает все следующие объекты как “опциональные” (их отсутствие не вызывает фатальной ошибки, а обрабатывается мягко).
  • [not_optional] — отменяет признак “опциональности” для следующих объектов.
  • [alpha] — включает поддержку альфа-канала (прозрачности) для следующих объектов (например, для объектов с полупрозрачными текстурами).
  • [not_alpha] — отменяет атрибут альфа-канала для следующих объектов.

Формат строки-данных:

  • Для objects.ref: Name<TAB>ModelFile<TAB>TextureFile
  • Для traffic.ref: Name<TAB>ModelFile<TAB>TextureFile<TAB>TrafficType<TAB>Length<TAB>Weight
  • Любая строка, начинающаяся с ;, считается комментарием и пропускается.

Типы светофоров (svetofor1.dat, svetofor2.dat)

Во входных файлах svetofor*.dat второй TAB-столбец — это строковый тип, который движок анализирует по символам в строке.

Поддерживаемые “built-in” значения:

  • ab_entr: входной светофор (в коде определяется по SignalType[5] = 'n').
  • ab_exit: выходной (по SignalType[5] = 'x').
  • ab_rout: маршрутный (по SignalType[5] = 'o', в ряде мест трактуется близко к выходному).
  • ab_line: проходной (по SignalType[4] = 'l').

Автоматическая подстановка объекта-модели светофора по SignalType и caption:

  • Для ab_line:
  • если caption равен '1' или '2' → ставится signal_pred (предупредительный),
  • иначе → signal_line.
  • Для ab_entrsignal_enter.
  • Для ab_exit и ab_routsignal_exit.

Файлы маршрута, которые ожидает движок

В загрузке маршрута/сцены используются фиксированные базовые имена:

  • route1.trk, route2.trk (геометрия путей)
  • route1.map (карта поверхности/объектов)
  • svetofor1.dat, svetofor2.dat (светофоры)

“Типы” пути в route*.trk: поле strelki (жёстко распознаваемые значения)

В route*.trk есть строковое поле strelki. Движок и инструменты трактуют некоторые значения особым образом.

Подробно: откуда берутся строки 1-2, 2+22, префиксы m: / n:, как генерируются объекты 1track500l, 2track2-2 и порядок BuildFromProfile в Route Editor — см. Опции пути в profile.dat.

Базовые значения:

  • '' или '0': “обычный” участок без спец-логики (в нескольких местах именно так проверяется “нет кривой/стрелки”).

Стрелка/съезд (используется в мире/редакторе/звуке):

  • 'b': стрелка/боковой путь (в редакторе подсвечивается, для графики строится безье-ветка; в сигнализации влияет на флаги).

Кривые/радиусы и спец-метки:

  • '2000', '-2000'
  • '1000', '-1000'
  • '750', '-750'
  • '500', '-500'

Комбинированные маркеры (используются для звука/логики, трактуются как “switch-like”):

  • '1+22', '1-22', '2+22', '2-22'

Отображаемые в Track.pas как “особые” (для подписей/подсветки в 3D):

  • '1+2', '+2', '2+1', '2+'

Примечание:

  • На практике strelki используется и для стрелок, и для параметров кривой/радиуса, и как “маркер” для звуков/эффектов. Поэтому важно держать совместимость со строковыми сравнениями, а не только с числовым смыслом.

Спец-имена объектов

Ниже — “встроенные” имена/шаблоны, которые движок распознаёт, и что это меняет для игрока. Эти имена относятся к объектам из objects.dat / route*.map.

Видимость и оптимизация

  • big_*: объект может рисоваться дальше обычной дистанции видимости (в “полудальней зоне”: (distance > VisibleDistance), но меньше (MaxVisibleDistance + 500)).
  • wire*: провода. Не рисуются дальше 250–750 м. в зависимости от дальности прорисовки.
  • *trac*: объекты, считающиеся “track/rail” по шаблону, не рисуются дальше ~500м.

Растительность (LOD, плавное появление, освещение)

  • v_*: объект трактуется как “дерево/растительность”:
    включается плавное появление на границе дальности видимости, используется LOD3 (если есть), а также используется освещение как для деревьев. Включается анимация раскачивания.
  • v_gr*: дополнительная логика “трава”:
    трава не рисуется далеко (полностью отключается после ~400м, а в диапазоне ~300–400м рисуется с затуханием альфы).
  • v_bu*: кусты (как растительность) — не рисуются далеко (отсекаются после ~400м).
  • field*: поле рисуется с “деревянным” солнечным освещением как спец-слой ландшафта.

Свисток

Вблизи (примерно до 1000м) некоторые объекты автоматически выставляют “надо свистеть”:

  • s_board*: “таблички/знаки” инициируют NeedWhistle при приближении.
  • platform*: платформы инициируют NeedWhistle.
  • road_cross* и road100*: переезды/дорожные объекты инициируют NeedWhistle.
  • signal_enter*: входные сигналы инициируют NeedWhistle.

Переезд и дорожные сцены

  • road_cross*: объект считается переездом; чтобы логика/индикаторы знали, что это переезд. В отрисовке переезда может появляться машина (простая “сцена” с CarX), если она близко.
  • road100*: ведёт себя как “дорожный” объект и использует ту же отрисовку “переезда с машиной”, даже если это не road_cross*.

Фонари (light) — активные источники света ночью

  • light: ночью в пределах ~700м объект добавляется в список активных источников света.
    Радиус берётся из caption (число), а если caption пустой — используется радиус по умолчанию (около 100).

Таблички/столбы

  • plate_blue: поверх модели рисуется текст caption (синяя табличка с надписью).
  • stolbik: километровый столб — рисуются две надписи: caption и caption+1 (на обратной стороне).
  • stolbik_opN (например stolbik_op0, stolbik_op1, …): “километровый столб на опоре/гантри” — те же две надписи, но позиционирование текста выбирается по составному имени (суффикс _op + номер N).
  • piket: пикет — аналогично рисуются caption и caption+1.
  • piket_opN: пикет на опоре/гантри — как piket, но позиционирование текста выбирается по _opN.

Примечание по генерации в редакторе маршрута: при km_type=2 имя делается составным (stolbik_opN / piket_opN), где N = Gantry.Right;

Электронные часы (time*)

  • time*, обычно это time_el: объект рисует цифровое время поверх модели. В caption можно задать параметры в формате <цвет><масштаб><секунды>
  • Если caption начинается с буквы R/G/B/Y/W, задаётся цвет (соответственно синий/зелёный/красный/жёлтый/белый).
  • Если caption имеет длину ≥ 3, то по caption[2..3] вычисляется масштаб ((/10)).
  • Если caption имеет длину ≥ 4 и caption[4] = 's', выводится HH:MM:SS, иначе HH:MM.

Обьект time_el встроенный и его не надо добавлять в objects.ref

Сигналы, огни и “надписи на сигналах” (sig*, signal_*)

Эти имена влияют на то, где и какие огни рисуются, и как они связываются с текущим состоянием сигнализации.

  • signal_line*: рисуется “проходной” светофор с огнём на одной высоте (в коде используется позиция ~5.13).
  • signal_exit* и signal_enter*: рисуется огонь “мачтового” поездного светофора на другой высоте (позиция ~6.4).
  • signal_enter* + специальная подпись (см. ниже про caption = ЧД/НД/YD/HD): включает особую отрисовку “входной по неправильному пути” (два огня на разных высотах).
  • sig_k*: карликовый входной по неправильному пути (огни рисуются низко: ~1.29 и ~0.8).
  • sig_povt* / sig_povt_k*: “повторительные” — если текущий следующий сигнал не зелёный, рисуется повторительный огонь (высота зависит от типа: карликовый/мачтовый).
  • sig*_zag* (т.е. sig* + содержит zag): “заградительный” — при активной ситуации/неисправности (Troubles[71]) принудительно рисуется запрещающий огонь.

Дополнительно для любых sig* (и не sig_ukaz) движок может рисовать надписи из caption на сигнальных табличках (набор “плашек” plate по символам).
Если имя содержит _k, надпись позиционируется иначе (для карликовых/низких конструкций).

sig_ukaz — указатель маршрута/направления (стрелки)

  • sig_ukaz: это не “обычная надпись”, а стрелочный указатель.
    Если caption равен одному из символов |, \, /, - — рисуется соответствующий световой рисунок.
    Если caption не пустой и не один из этих символов — выводится 1-й символ caption как знак.

Примечания про caption для сигналов

  • Для ряда сигналов значение caption — это имя/идентификатор, по которому код сопоставляет объект с текущим CurrSignalCaption/AltCaption и выбирает, какой огонь рисовать.
  • caption = ЧД/НД (а также YD/HD) используется как маркер “дополнительного входного по неправильному пути” для особой отрисовки.

Сценарные/служебные “люди/машины/объекты”

  • ukaz_ponab: индикатор PONAB; при активном событии (Troubles[15]) рядом рисуется набор желтых огней (индикация срабатывания).
  • signalistStop: рисуется анимированной моделью (кадр зависит от SignalistStopFrame).
  • ks2: кадр модели зависит от Troubles[55] (визуальная реакция на неисправность/ситуацию).
  • puteec: кадр/анимация зависит от Svistok/Tifon (реакция на свисток/тифон).
  • kamaz, bad_track, prep_wagon: участвуют в “служебных” сценарных действиях и сбросах состояния (например, при нажатии F5 эти объекты “убираются” вниз по Z).

Route Editor: как формируются name и caption

Редактор маршрута Route Editor записывает в objects.dat ровно то, что выбрано/введено в поле выбора объекта.

Свойство name

  • Список в выпадашке заполняется из загруженных *.ref, которые были подхвачены редактором при старте, плюс отдельно добавляется встроенное имя:
  • time_el

То есть вы можете:

  • выбрать имя из списка (обычно это имена из objects.ref),
  • или ввести имя вручную — и оно также будет записано как есть (дальше движок попробует найти его в objects.ref/глобальном ref или обработать как built-in).

список “встроенных” имен

  • plate
  • plate_blue
  • signal_pred
  • bshpal
  • piket
  • puteec
  • bad_track
  • bad_track2
  • s_board1
  • signalistR
  • signalistStop
  • signalistY
  • stolbik
  • zaraza
  • znak_disk
  • nachalo_board
  • konec_board
  • yellow_board
  • signal_line
  • signal_pred_old
  • opk_curvedR

Свойство caption

По умолчанию caption для объекта при вставке не сохраняется. Редактор сохраняет подпись только для набора имён/шаблонов:

  • plate_blue
  • an_p1
  • light
  • sig*
  • time_el

Дополнительно при чтении objects.dat редактор применяет ограничение:

  • если caption длиннее 5 символов, он не записывается в caption (для отрисовки/атрибутов).

Формат objects.dat

При вставке редактируемого объекта редактор дописывает строку в routes/<RoutePath>/Objects.dat:

  • ordinate<TAB>shift<TAB>angle<TAB>angle_vert<TAB>height<TAB>name<TAB>caption<TAB>angle_y

Спец-объекты, которые создаются кодом

При расстановке светофоров и служебных сущностей код явно назначает имена:

  • signal_pred, signal_line, signal_enter, signal_exit (см. раздел про svetofor*.dat).
  • sig_ukaz и plate — создаются как отдельные переменные.