Ресурсы в ECS

Графические дополнения (NewGRF) для OpenTTD: наборы графики поездов, автомобилей, предприятий, самолетов, городских знаний и т.п. Разработка, обсуждение и совместимость.

Модераторы: eraserkry, Smoky555, ihim4, Группа модераторов

Re: Ресурсы в ECS

Сообщение George » Ср сен 14, 2011 23:39

kraks писал(а):
George писал(а):В общем, я не знаю как это исправить просто, а сложно смысла не вижу. Сделаю когда-нибудь параметр отключения и хватит. Ну или кто-то предложит какое-нибудь другое (не очень сложное) решение :roll:
Может просто домик слева сделать повыше, а поезд - на вагончик покороче. Тогда он будет скрываться за этим домиком. Выехал из-за домика. Доехал до края, постоял, вернулся за домик. И не понятно, пропал он там или нет. :)
По-моему шило на мыло :oops:
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение дворник » Чт сен 15, 2011 19:48

Кстати, если смущает, что ID графики может измениться из-за изменений набора с транспортом либо порядка загрузки графики, то можно (а) просто включить нужные спрайты в ecs и (б) использовать их в зависимости от определения активности тех или иных наборов. Тогда и внешний вид будет зависеть от подключенных наборов, и ID будт "постоянным", т.к. включён в свой набор.
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Ресурсы в ECS

Сообщение George » Чт сен 15, 2011 21:01

дворник писал(а):Кстати, если смущает, что ID графики может измениться из-за изменений набора с транспортом либо порядка загрузки графики, то можно (а) просто включить нужные спрайты в ecs и (б) использовать их в зависимости от определения активности тех или иных наборов. Тогда и внешний вид будет зависеть от подключенных наборов, и ID будт "постоянным", т.к. включён в свой набор.
Гениально :lol: :lol: Сделаешь? :mrgreen:

Там доработать совсем немного, всего 7528 строк кода
Вложения
ECSMach Bauxite mine.rar
(21.72 Кб) Скачиваний: 186
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение дворник » Чт сен 15, 2011 21:20

Вот обкатаю буровые, посмотрим.
Главное - чтобы комментариев было побольше. Вот такая штука тоже помогает разобраться.

Я потому и заинтересовался NML, потому что байтокодом писать ну очень выворачивает мозг.
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Ресурсы в ECS

Сообщение George » Чт сен 15, 2011 21:41

дворник писал(а):Главное - чтобы комментариев было побольше. Вот такая штука тоже помогает разобраться.
Только учитывай, у меня в списке дел стоит "Обновить Wiki". Я к тому, что не всё, написанное в Wiki, 100% соответсвует действительности. Оно может успеть устареть.

дворник писал(а):Я потому и заинтересовался NML, потому что байтокодом писать ну очень выворачивает мозг.
Готов поспорить, что анимацию поезда, так, что бы она работала в TTDP, за 2 дня на NML ты не сделаешь. И никто не сделает. Это оказалось возможно только тем самым устаревшим методом, которым кодирую я :lol:
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение дворник » Вт окт 11, 2011 17:12

Закончил эксперименты по переводу хим. вектора на 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. Там, где проверка взаимного расположения предприятий.

--
ecs.nml.7z
(25.16 Кб) Скачиваний: 186


Здесь можно посмотреть на NML-код, на котором написано то, что делает прицепленный grf. Этот код не совсем исходник, это результат обработки исходников gcc, который потом скармливается компилятору NML для получения grf. Сами исходники занимают несколько файлов и папок, включают текстовые файлы и графику. Собирается это всё по запуску пакетного файла.

Ну а ещё, быть может будет интересно увидеть NFO, который делает компилятор NML.
ecs.nfo.7z
(25.54 Кб) Скачиваний: 191


Сам ecs.grf в игре лучше смотреть с графикой, позволяющей перевозить грузы ECS. Например, opengfx+ trains, opengfx+ road vehicles и т.п. Смешивать с оригинальным ECS не стоит!
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Ресурсы в ECS

Сообщение George » Вт окт 11, 2011 20:03

дворник писал(а):Закончил эксперименты по переводу хим. вектора на NML. Отработал механизм перевода.
Теперь надо решать принципиальный вопрос - что делать дальше?
Ты собираешься делать все вектора? Если да, то, во-первых, можно выполнить все упрощения, в том числе забить на поддержку TTDP, использовать http://wiki.openttd.org/Frosch/Advanced_Sprite_Layout (очень много сократит спрайтов). Но главное, можно сразу делать новые модели производства вторичных предприятий, которые я собирался делать после выпуска версии 2.0.
Ты готов стать кодером этого сета? Тогда за мной будет только графика и логическая модель (формирование описаний для тебя).
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение George » Вт окт 11, 2011 20:04

дворник писал(а):6. Нашёл несколько ошибок в хим. векторе. Исправил.
- oil rig, в блоке 1525 неверный переход на 1523, надо на 1505. Нумерация блоков по grf2html.
- в нескольких местах plastic plant указан неверный id 07, надо 17. Там, где проверка взаимного расположения предприятий.
У меня нумерация другая. Напиши, пожалуйста, ближайшие коменты перед строкой с ошибкой.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение George » Вт окт 11, 2011 20:17

дворник писал(а):Прикладываю результат в виде файла ecs.grf.
Скормил NFORenum - ошибок нашёл кучу. не только предупреждений, но и ошибок, в том числе фатальных
Код: Выделить всё
//!!Error (164): Offset 33: 3B is not a valid callback for this feature.
//!!Error (62): Offset 21: ID 00 has not been defined.
//!!Fatal Error (134): Unexpected end-of-sprite reading building sprite 5.
.. 
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение дворник » Вт окт 11, 2011 21:18

George писал(а):Скормил NFORenum - ошибок нашёл кучу. не только предупреждений, но и ошибок, в том числе фатальных


NFO скормил? Там же ещё спрайты в png нужны.
Попробовал с ними - ага, плюётся. :) А grfcodec сделал grf по этому nfo без ругани. Хотя и отличающийся от того, что делает сам nmlc напрямую.

Для "ECSChem2 Oil rig.inc" это тело cb 3A

Код: Выделить всё
// ignore 3 months test if the industry exists from the beginning, special text during first 3 months of life
    1 * 44   02 0A 1D 89
                 1A 20 C7 D4 C7 D4 \2sto
                 1A 20 00 00 00 00 \2rst
                 1A 20 C1 D4 C1 D4 \2sto
                 1A 00 01 00 00 00
                 01 1E 00 00 00 00 00 00 00 00 00 1E 00

вместо 1E который сразу над ним надо к выходу на тоже 1E. Видимо, по тому и путаница.

Исходников завода пластмасс у меня нет, я его по опубликованному тобой grf версии 1.2 делал. Есть его представление в grf2html. По нему это в cb 35, блок под комментом "set IR0[0]b3-7 to 0 if level > 04h, v40 + v41 + v42> 1024, younger than 5(2) years, last one on the map", там указан id 87, а надо 97, ибо "80 | 17".

Ещё в cb28 oil refinery надо 87, а не 8B. Тоже id спутаны.
"ECSChem2 Oil refinery.inc"

Код: Выделить всё
    1 * 18   02 0A DE 85 64 8B 00 FF FF 01 0E 80 00 00 10 00 DE 00
// outside town zone 00. test town var 94 + 16^2 < var 1c


8B нет, по смыслу и коментам выше 87. Комент - "// disallow near other industries (Oil wells, oil rig, refinary, chemical plant)".

Ещё в oil rig в описании callbacks для cb38 возвращается E1, а надо E2.
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Ресурсы в ECS

Сообщение дворник » Вт окт 11, 2011 21:44

George писал(а):Теперь надо решать принципиальный вопрос - что делать дальше?
Ты собираешься делать все вектора? Если да, то, во-первых, можно выполнить все упрощения, в том числе забить на поддержку TTDP, использовать http://wiki.openttd.org/Frosch/Advanced_Sprite_Layout (очень много сократит спрайтов). Но главное, можно сразу делать новые модели производства вторичных предприятий, которые я собирался делать после выпуска версии 2.0.
Ты готов стать кодером этого сета? Тогда за мной будет только графика и логическая модель (формирование описаний для тебя).


Вот думаю, что же дальше. Сейчас я уперся в непонятное поведение openttd в части работы выбора вариантов (gender, case). Есть подозрение, что это всё же бага. Но пока на форуме не подтверждают. Либо я чего-то не так написал, не там, или вопрос корректной локализации и языков дело десятое и надо ещё подождать.

Вот этот вариант, что по ссылке, для NML является "родным". Я его ещё в FIRS увидел, и полез переделывать твои гирлянды ветвлений для выбора спрайтов под каждый фрейм. Я думал, это единственный метод. :) Пока не перевёл пару предприятий, и понял, что их можно подсовывать по разному. Именно поэтому grf2html плющит на блоках спрайтов, если попробовать им открыть прицепленный мной grf. На FIRS и др. проектах на NML то же самое.

Зато он реально сокращает кол-во блоков кода. И может позволить адекватную анимацию. Вот сейчас, у тебя бульдозеры на спрайтах размером более 1x1 клетку начинают перемигиваться с нормальной графикой. Потому что часть тайлов изменила construction_state, а часть нет.

Хочу спросить, а почему ты такие спрайты не порезал на кусочки 1x1? Реально не хватает 255 идентификаторов (или сколько их там) для тайлов на всю промышленность? И тайлы промышленности переиспользуются на разных предприятиях? В хим. векторе вроде нет и все уникальны.

А ты сам совсем не хочешь хоть немного понимать NML? ;)

И где можно почитать про "новые модели производства вторичных предприятий"?
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Ресурсы в ECS

Сообщение George » Вт окт 11, 2011 22:40

дворник писал(а):... Ещё в ...
Исправлено.
Это лишний раз доказывает, что программирование в кодах очень сложно с точки зрения поиска ошибок. Если бы там писать переменные, содержащие ID предприятий, было бы проще.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение George » Вт окт 11, 2011 23:50

дворник писал(а):Вот думаю, что же дальше. Сейчас я уперся в непонятное поведение openttd в части работы выбора вариантов (gender, case). Есть подозрение, что это всё же бага. Но пока на форуме не подтверждают. Либо я чего-то не так написал, не там, или вопрос корректной локализации и языков дело десятое и надо ещё подождать.
Попробуй в чат IRC.oftc.net залезть, канал openttd
И в http://bugs.openttd.org/ обязательно закинь
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение George » Ср окт 12, 2011 00:07

дворник писал(а):Зато он реально сокращает кол-во блоков кода. И может позволить адекватную анимацию. Вот сейчас, у тебя бульдозеры на спрайтах размером более 1x1 клетку начинают перемигиваться с нормальной графикой. Потому что часть тайлов изменила construction_state, а часть нет.
Знаю. Но резать заново здание в несколько тайлов когда что-то подправил в графике мне не нравится.
А ещё я принципиально борюсь с нежеланием разработчиков OTTD обеспечивать работу bounding boxes большего размера, чем одна клетка, хотя движок изначально это может (см. суда). Поэтому везде их впихиваю. Из принципа.

дворник писал(а):Хочу спросить, а почему ты такие спрайты не порезал на кусочки 1x1? Реально не хватает 255 идентификаторов (или сколько их там) для тайлов на всю промышленность? И тайлы промышленности переиспользуются на разных предприятиях? В хим. векторе вроде нет и все уникальны.
Если кодировать будешь ты, с меня только PSD, а дальше ты разбиваешь, как хочешь, то можешь бить на кусочки как считаешь нужным. А я не хочу :)
Что касается tileID, интуитивно понятнее для кодирования layout'ов, когда один логический объект это один tileID. Если же все GRF запихнуть в 1, то tileID банально не хватит. Сейчас осталось около двух десятков tileID на 3 предприятия.

дворник писал(а):А ты сам совсем не хочешь хоть немного понимать NML? ;)
Понимать твой код, когда он написан - это одно. Писать самому - другое. Переписывать написанное ранее - третье. Третье я не буду делать никогда (по той же причине, по которой TTDP разработчики не влились в команду OTTD разработчиков). А вот первое и второе, если кто-то сделает третье - вполне возможно.

дворник писал(а):И где можно почитать про "новые модели производства вторичных предприятий"?
Нигде. Если ты скажешь, что ты берёшься сделать весь ECS на NML - сяду писать.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1384
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: Ресурсы в ECS

Сообщение дворник » Ср окт 12, 2011 18:26

George писал(а):Нигде. Если ты скажешь, что ты берёшься сделать весь ECS на NML - сяду писать.


Честно говоря, есть такое желание. Правда, пока не могу оценить, сколько это займёт времени. Ну и одно дело - просто сконвертировать NFO в NML, а другое - разбить его на осмысленные блоки кода и использовать макросы gcc и др. родные для NML штучки.

Какой вектор попроще после химического?
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Пред.След.

Вернуться в Новая графика в OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26