Закончил эксперименты по переводу хим. вектора на NML. Отработал механизм перевода. Нашёл несколько ошибок в NML, и, возможно, багу в openttd.
Для облегчения жизни используется grf2html, т.к. читать байтокод даже сейчас мне довольно напряжно.
А вот grf2html это дело существенно упрощает, и тела callbacks пишутся влёт. Правда, пришлось скачать исходники grf2html и пересобрать для себя, потому как он обновлялся довольно давно, и некоторых вещей типа параметров NewGRF не понимал.
Как словарь соответствия переменных, свойств, функций и пр. используются исходники NML
отсюда. Там же и бинарник nmlc.exe под Windows. Исходники распаковываются, по ним можно искать названия переменных, констант и проч.
Само-собой, документация по
NewGRF и
MNL тоже нужна.
NML позволяет писать callbacks в так называемом "
старом стиле", но всячески настаивают, что так делать нельзя.
Конечно, в новом стиле писать удобнее (во-первых, меньше), но главный недостаток - то что grf2html этот новый стиль плохо понимает и показывает. Ну, тут, видимо, сам grf2html нуждается в серьёзной доработке и актуализации.
Предпринял три попытки начать сначала, прежде чем остановился на этом пути. Пробовал самостоятельно разбирать NFO, что очень медленно и непродуктивно. Пробовал переводить один-в-один, что оказалось не всегда возможным из-за отличия NML от NFO.
Прикладываю результат в виде файла ecs.grf. Он содержит предприятия хим. вектора, 5 шт.: нефтевышку, нефтескважину, нефтеперерабатывающий завод, химзавод и завод пластмасс. И 4 груза для них. Остальные предприятия отключены, так проще тестировать.
- ecs.grf.7z
- ecs, example of NML version
- (101.02 Кб) Скачиваний: 192
Приложенный файл отличается от оригинального хим. вектора следующим.
1. Скорость анимации снижена вдвое. В анимацию строительства предприятий добавлены изгороди (fences), так клетки с будущими постройками хотя бы видны на карте. Бульдозеры всё также ездят по периметру.
2. Анимация присутствует, но не везде доделана до конца. Разве что нефтеперерабатывающий завод дым пускает почти как в оригинале. Остальные ещё не доделаны. Подозреваю, что подход NML к анимации и компоновке спрайтов очень сильно несовместим с чем-либо, кроме openttd, а поскольку мне лично совместимость тестировать негде и не хочется, то я после долгих мысленных мучений
от неё отказался. Хотя и бил себя по пальцам всякий раз, когда делал что-либо, отличающееся от поведения оригинального хим. вектора.
При работе над анимацией было найдено несколько багов в NML, поэтому я пока не определился с правильным подходом её реализации. Чтобы можно было использовать блоки кода для всего набора ECS, а не только для этих 5-и предприятий.
Кстати, в анимации не так уж и много индивидуализации. Большая часть клеток анимирована очень просто, только на этапе строительства, и потом остаётся статичной.
3. На форме предприятия несколько по другому показана информация о нём. Например, убрал строку о сносе предприятия и показываю её только, тогда, когда наступает этот самый снос. Тут бы ещё добавить отображение, что предприятие строится и не работает до истечения первых 93 дней, но руки пока не дошли. Ещё добавил немного раскраски. С отображением этой информации связано последнее неожидаемое поведение openttd, возможно бага. Написал о ней в
теме NML, ребята пока молчат. То ли непонятно написал, то ли не там.
4. Связанные с производством блоки оставлены как есть. Там довольно много повторяющегося кода, который можно было бы вынести в отдельное место и использовать в нескольких предприятиях, но я пока этого не делал. Назначение и формат регистров тоже оригинальный. Тоже бил себя по пальцам, когда казалось, что что-то можно сделать более эффективно.
5. Кое-где не удержался и скорректировал код. В основном, в коротких callbacks 37, 3A, 3D, 14A.
6. Нашёл несколько ошибок в хим. векторе. Исправил.
- oil rig, в блоке 1525 неверный переход на 1523, надо на 1505. Нумерация блоков по grf2html.
- в нескольких местах plastic plant указан неверный id 07, надо 17. Там, где проверка взаимного расположения предприятий.
--
Здесь можно посмотреть на NML-код, на котором написано то, что делает прицепленный grf. Этот код не совсем исходник, это результат обработки исходников gcc, который потом скармливается компилятору NML для получения grf. Сами исходники занимают несколько файлов и папок, включают текстовые файлы и графику. Собирается это всё по запуску пакетного файла.
Ну а ещё, быть может будет интересно увидеть NFO, который делает компилятор NML.
Сам ecs.grf в игре лучше смотреть с графикой, позволяющей перевозить грузы ECS. Например, opengfx+ trains, opengfx+ road vehicles и т.п.
Смешивать с оригинальным ECS не стоит!