Работа с GRF

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

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

Работа с GRF

Сообщение skr » Ср янв 06, 2010 22:56

Практически нет информации по редактированию файлов GRF. Может кто-нибудь сможет помочь мне, может я смогу кому-либо помочь.
Небольшая мелочь по совмещению нескольких сетов в игре. Например я очень люблю канадский набор поездов, но там практически нет электропоездов. Добавляем американский набор и всего хватает. Но возникает проблема - появляется много одинаковых локомотивов и вагонов с чуть-чуть отличающимися характеристиками. Я решаю это так:
Основным является канадский сэт, поэтому редактирую американский:
Программой grfcodec.exe распаковываю ussetw.grf
В USSet_Readme.htm выбираю "лишние" локомотивы и вагоны и используя указанные там ID выставляю в файле ussetw.nfo в свойствах этих поездиков в Action 0 свойство 06 08 (обычно там 06 07). В результате в умеренном климате они не появляются. Технически я просто меняю значение используемого климата с ВСЕ на Toyland который никогда не использую.
Тем же grfcodec.exe запаковываем новый ussetw.nfo в grf.
Таким образом я в 2cc Train Set оставляю только метропоезда и использую их в городах.

Теперь вопрос:
Самолёт от Григори tu154_gr.grf

Строки:
48 * 22 02 03 05 82 F2 00 FF 03 01 00 01 01 02 00 02 02 03 00 03 03 04 00
49 * 14 02 03 06 82 01 00 FF 01 00 00 00 47 05 00
50 * 26 02 03 07 82 F2 00 FF 04 00 FF 00 00 01 FF 01 01 02 FF 02 02 03 FF 03 03 FF FF
51 * 14 02 03 08 82 0C 00 FF 01 07 00 19 19 06 00
52 * 14 02 03 12 82 01 00 FF 01 00 00 00 47 04 00

Здесь идёт выбор различных "ливрей" для Ту-154, но что есть что не понимаю
Смог немного разобраться со строкой
50 * 26 02 03 07 82 F2 00 FF 04 00 FF 00 00 01 FF 01 01 02 FF 02 02 03 FF 03 03 FF FF
Тут идёт присвоение названий различным "ливреям" из:
56 * 111 04 03 9F 04 00 "а (Aeroflot/1992 Aeroflot)" 00
" (Aeroflot/2005 Aeroflot)" 00 " (Aeroflot/1992 "
"Siberia)" 00 " (Aeroflot/2005 Siberia-S7)" 00

А именно:
50 * 26 Строка 50 * байт в ней 26
02 Action 2
03 Самолёт
07 Присваиваем переменную для этой строки
82 F2 00 FF ?????????
04 4 набора спрайтов ("ливреи")
00 FF 00 00 Первое наименование из списка (00) FF первый набор спрайтов (00 00)
01 FF 01 01 Второе наименование из списка (01) FF второй набор спрайтов (00 01)
02 FF 02 02 так далее
03 FF 03 03
FF FF всегда в конце строки - зачем?

Остальные указанные строки - тёмный лес. Может кто-нибудь побайтно подскажет?

NewGraphicsSpecs - единственное где есть инфа, но в данном случае мне не помогает - пытаюсь переводить, но польза 0
skr
Машинист
Машинист
 
Сообщения: 52
Зарегистрирован: Вс июн 10, 2007 08:59
Откуда: Минск, Беларусь

Re: Работа с GRF

Сообщение yu » Чт янв 07, 2010 09:39

skr писал(а):<skipped>
А именно:
50 * 26 Строка 50 * байт в ней 26
02 Action 2
03 Самолёт
07 Присваиваем переменную для этой строки
82 F2 00 FF ?????????
04 4 набора спрайтов ("ливреи")
00 FF 00 00 Первое наименование из списка (00) FF первый набор спрайтов (00 00)
01 FF 01 01 Второе наименование из списка (01) FF второй набор спрайтов (00 01)
02 FF 02 02 так далее
03 FF 03 03
FF FF всегда в конце строки - зачем?

Остальные указанные строки - тёмный лес. Может кто-нибудь побайтно подскажет?

NewGraphicsSpecs - единственное где есть инфа, но в данном случае мне не помогает - пытаюсь переводить, но польза 0


А если повнимательнее читать?
07 - это не переменная а ID для этой строки
Одна переменная - 82 (VarAction2 Type 0x82 byte of "first aircraft of consist")
вторая - переменная - это F2
"...F2 B Refit cycle, how many times refitted to the same cargo type ..."
FF - default.
по-моему - всё очевидно....
yu
Начальник станции
Начальник станции
 
Сообщения: 95
Зарегистрирован: Сб фев 24, 2007 13:27

Re: Работа с GRF

Сообщение skr » Чт янв 07, 2010 14:16

Вот с очевидностью у меня и пробемы :)
07 не переменная а ID - главное то, что эту цифру мы сами присваеваем этой строке в текущем блоке Action 2
82 - переменная GRF - first aircraft of consist- Promt: "состоят первые самолеты" - уже не понял - что же всё таки делает 82 и почему используется 82 - в WAS для этих целей используется 81
с F2 еще интересней - Refit cycle, how many times refitted to the same cargo type - Promt: "Цикл ремонта, сколько времен, переоборудованных к тому же самому грузовому типу" - мало того, что смысл перевода я не понял, так еще и возникает вопрос: 50 строка занимается присваиванием наименований ливреям, а тут речь о грузовых типах
Дальше идет 00 FF предположим 00 первый вариант перевозимых грузов (в случае с Ту-154 и единственный) а FF для чего?
После этого идет конкретно присваивание наименований, но я не вижу где указано что мы собираемся присваивать наименования, то есть обращаться к Action 4
Еще одна непонятка:
00 FF 00 00 Первое наименование из списка (00) FF первый набор спрайтов (00 00)
почему набор спрайтов указан дважды?
skr
Машинист
Машинист
 
Сообщения: 52
Зарегистрирован: Вс июн 10, 2007 08:59
Откуда: Минск, Беларусь

Re: Работа с GRF

Сообщение yu » Чт янв 07, 2010 22:43

skr писал(а):Вот с очевидностью у меня и пробемы :)
07 не переменная а ID - главное то, что эту цифру мы сами присваеваем этой строке в текущем блоке Action 2
82 - переменная GRF - first aircraft of consist- Promt: "состоят первые самолеты" - уже не понял - что же всё таки делает 82 и почему используется 82 - в WAS для этих целей используется 81
с F2 еще интересней - Refit cycle, how many times refitted to the same cargo type - Promt: "Цикл ремонта, сколько времен, переоборудованных к тому же самому грузовому типу" - мало того, что смысл перевода я не понял, так еще и возникает вопрос: 50 строка занимается присваиванием наименований ливреям, а тут речь о грузовых типах
Дальше идет 00 FF предположим 00 первый вариант перевозимых грузов (в случае с Ту-154 и единственный) а FF для чего?
После этого идет конкретно присваивание наименований, но я не вижу где указано что мы собираемся присваивать наименования, то есть обращаться к Action 4
Еще одна непонятка:
00 FF 00 00 Первое наименование из списка (00) FF первый набор спрайтов (00 00)
почему набор спрайтов указан дважды?


Если Вы не владеете английским на разговорном уровне и вынуждены пользоваться
promp'ом, то помочь Вам крайне затруднительно, почти невозможно.
first aircraft of consist - следует переводить, как 'локомотив'. Конечно, самолёты
всегда летают поодиночке, но здесь одна переменная, что для поездов, что
для автомобилей, что для самолётов.
Refit cycle, how many times refitted to the same cargo type -
'Сколько существует вариантов переоборудования'
то же самое - описание переменной сделано под поезда.

00 FF. FF показывает, что 00 - число а не ID строки VarAction2
00 00 -- это не набор спрайтов, а границы интервала.
yu
Начальник станции
Начальник станции
 
Сообщения: 95
Зарегистрирован: Сб фев 24, 2007 13:27

Re: Работа с GRF

Сообщение Smoky555 » Пн янв 11, 2010 12:11

могу предложить такой хороший инструментик как grf2html - правда там без знания аглицкого и хоть каких-либо в newgrfspecs делать все равно нечего, но уж очень наглядно все показывает
Входи тихо, проси мало, говори четко, уходи быстро.
Изображение
Изображение
У вас проблемы с русским в игре?
Изображение
Аватара пользователя
Smoky555
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1413
Зарегистрирован: Пт фев 25, 2005 08:33
Откуда: Волгоград

Re: Работа с GRF

Сообщение Mpet » Ср ноя 24, 2010 10:16

Добрый день!
Знатоки подскажите. Скачал GRF шведских поездов, а там электровоз IORE сделан по дебильному - Dual-headed flag стоял 01 и поэтому 2-х секц. электровоз вел себя как дизель-поезд. Я в GRF новичок, но таки попробовал сделать этот электровоз 2-х секционным. Делал по аналогии со шведским же Dm3 и Dm в том же файле ГРФ. Все вроде получилось, но вторая секция упорно не хочет разворачиватся мордой назад. Я читал что надо поставить 80, но куда? В 1630 уже стоят какие-то 80-ки...

1594 * 10 04 00 1F 01 13 "Iore" 00
1595 * 57 00 00 15 01 13 00 7D 73 03 28 06 07 05 00 09 50 00 0B B5 1D 0D B4 0E 3C 4C 00 00 13 00 14 00 15
00 16 B4 24 00 17 6E 19 30 1B 00 00 1C 00 1D 00 00 00 00 1E 10 21 00 22 3B
1596 * 11 04 00 1F 01 "FIore2" 00
1597 * 57 00 00 15 01 46 00 7D 73 03 28 06 07 05 00 09 50 00 0B 00 00 0D 00 0E 3C 4C 00 00 13 00 14 00 15
00 16 B4 24 00 17 00 19 30 1B 00 00 1C 00 1D 00 00 00 00 1E 10 21 00 22 3B
1598 * 6 01 00 01 FF 08 00
1599 sprites/ai_swedish.pcx 50 1752 01 22 8 -3 -11
1600 sprites/ai_swedish.pcx 66 1752 01 17 21 -14 -10
1601 sprites/ai_swedish.pcx 98 1752 01 15 32 -16 -11
1602 sprites/ai_swedish.pcx 146 1752 01 18 21 -6 -11
1603 sprites/ai_swedish.pcx 178 1752 01 22 8 -3 -11
1604 sprites/ai_swedish.pcx 194 1752 01 18 21 -14 -11
1605 sprites/ai_swedish.pcx 226 1752 01 15 32 -16 -11
1606 sprites/ai_swedish.pcx 274 1752 01 17 21 -6 -10
1607 * 9 02 00 00 01 01 00 00 00 00
1608 * 6 01 00 01 FF 08 00
1609 sprites/ai_swedish.pcx 338 1752 01 22 8 -3 -11
1610 sprites/ai_swedish.pcx 354 1752 01 18 21 -14 -11
1611 sprites/ai_swedish.pcx 386 1752 01 15 32 -16 -11
1612 sprites/ai_swedish.pcx 434 1752 01 17 21 -6 -10
1613 sprites/ai_swedish.pcx 466 1752 01 22 8 -3 -11
1614 sprites/ai_swedish.pcx 482 1752 01 17 21 -14 -10
1615 sprites/ai_swedish.pcx 514 1752 01 15 32 -16 -11
1616 sprites/ai_swedish.pcx 562 1752 01 18 21 -6 -11
1617 * 9 02 00 01 01 01 00 00 00 00
1618 * 6 01 00 01 FF 08 00
1619 sprites/ai_swedish.pcx 626 1752 01 1 1 0 0
1620 sprites/ai_swedish.pcx 642 1752 01 1 1 0 0
1621 sprites/ai_swedish.pcx 658 1752 01 1 1 0 0
1622 sprites/ai_swedish.pcx 674 1752 01 1 1 0 0
1623 sprites/ai_swedish.pcx 690 1752 01 1 1 0 0
1624 sprites/ai_swedish.pcx 706 1752 01 1 1 -27 -7
1625 sprites/ai_swedish.pcx 722 1752 01 15 55 -14 -11
1626 sprites/ai_swedish.pcx 786 1752 01 1 1 0 0
1627 * 9 02 00 02 01 01 00 00 00 00
1628 * 7 00 00 01 01 46 12 FD
1629 * 7 03 00 01 46 00 01 00
1630 * 18 02 00 03 81 10 00 FF 02 46 80 01 01 FF 80 02 FF FF FF
1631 * 14 02 00 04 81 0C 00 FF 01 03 00 16 16 00 00
1632 * 7 00 00 01 01 13 12 FD
1633 * 10 03 00 01 13 01 FF 02 00 04 00
Mpet
Машинист
Машинист
 
Сообщения: 33
Зарегистрирован: Вт авг 22, 2006 19:26
Откуда: СПб

Re: Работа с GRF

Сообщение yu » Ср ноя 24, 2010 12:06

Mpet писал(а):Добрый день!
Делал по аналогии со шведским же Dm3 и Dm в том же файле ГРФ. Все вроде получилось, но вторая секция упорно не хочет разворачиватся мордой назад.


Готов поспорить, что в графическом файле (*.pcx) ты не менял местами спрайты :)
поменяй местами четвёрки спрайтов для второй секции и будет тебе большое шшшастье.... :)
yu
Начальник станции
Начальник станции
 
Сообщения: 95
Зарегистрирован: Сб фев 24, 2007 13:27

Re: Работа с GRF

Сообщение Mpet » Ср ноя 24, 2010 12:43

Точно, я и ни заметил что pcx-е спрайты не так повернуты. :D Спасибо!
Mpet
Машинист
Машинист
 
Сообщения: 33
Зарегистрирован: Вт авг 22, 2006 19:26
Откуда: СПб

Re: Работа с GRF

Сообщение Mpet » Вт ноя 30, 2010 01:56

А не подскажите, как сделать так чтобы спрайты (речь про поезда) не лезли друг на друга, если они большие и длинные? Т.е. длиннее чем стандартные поезда OTTD. Например тепловоз из 2-х секций. Когда я рисую диагональный вид, к примеру, в 24-26 пикселей по длине и пытаюсь собрать такие спрайты в 2-х секционный articulated engine, то выходит что они лезут друг на друга. Я видел достаточно длинные вагоны в том же CSDset, но разобраться не смог. Как-то пока не сильно дружу с этими каллбэками и их логикой. :oops:
Mpet
Машинист
Машинист
 
Сообщения: 33
Зарегистрирован: Вт авг 22, 2006 19:26
Откуда: СПб

Re: Работа с GRF

Сообщение yu » Вт ноя 30, 2010 11:58

Mpet писал(а):А не подскажите, как сделать так чтобы спрайты (речь про поезда) не лезли друг на друга, если они большие и длинные?


Идейно - лехко, а вот, когда ручками начнёшь, то мало не покажется.
Надо просто для всего, что длиннее 32 пикселов рисовать прозрачные
спрайты и получится как бы дополнительная несуществующая секция...
yu
Начальник станции
Начальник станции
 
Сообщения: 95
Зарегистрирован: Сб фев 24, 2007 13:27

Re: Работа с GRF

Сообщение Mpet » Вт ноя 30, 2010 13:10

Ааа, понял. Вот он для чего какой-то непонятный сет спрайтов, размером 1х1 пикс., в чешском сете.

1463 * 53 00 00 14 01 0D 00 96 41 02 19 03 19 04 19 05 00 06 03 08 00 09 64 00 0B D0 07 0D 99 0E 36 4C 00
00 12 FD 13 00 14 00 16 74 17 25 18 05 19 25 1E 13 1F 3A 22 2F
1464 * 4 01 00 05 08
1465 sprites/csdseto.pcx 674 2088 01 26 8 -3 -15
1466 sprites/csdseto.pcx 690 2088 09 21 24 -17 -12
................
1502 sprites/csdseto.pcx 786 2136 01 1 1 0 0
1503 sprites/csdseto.pcx 2 2184 01 1 1 -1 -1
1504 sprites/csdseto.pcx 18 2184 01 1 1 0 0
1505 * 9 02 00 00 01 01 00 00 00 00
1506 * 9 02 00 01 01 01 01 00 01 00
1507 * 14 02 00 02 81 01 00 FF 01 00 00 1E 43 01 00
1508 * 18 02 00 2A 81 C4 00 FF 02 02 00 02 01 00 00 1E 43 01 00
1509 * 9 02 00 00 01 01 02 00 02 00
1510 * 9 02 00 01 01 01 03 00 03 00
1511 * 14 02 00 05 81 01 00 FF 01 00 00 1E 43 01 00
1512 * 9 02 00 17 01 01 04 00 04 00
1513 * 14 02 00 28 81 41 00 01 01 2A 00 00 00 17 00
1514 * 14 02 00 29 81 41 00 01 01 03 FF 00 00 04 FF
1515 * 14 02 00 2A 81 0C 00 FF 01 29 00 11 11 28 00
1516 * 18 02 00 2B 81 10 00 FF 02 0D FF 00 00 0D FF 01 01 FF FF
1517 * 14 02 00 2C 81 0C 00 FF 01 2B 00 16 16 2A 00
1518 * 14 02 00 2D 81 40 00 FF 01 24 FF 00 00 25 FF
1519 * 14 02 00 30 81 0C 00 FF 01 25 00 10 10 2C 00
1520 * 10 03 00 01 0D 01 FF 05 00 30 00
1521 * 28 04 00 1F 01 0D "T 679.1 [781] (Sergej)" 00

Я вот только не могу понять, что делает спрайт 1516: 02 00 2B 81 10 00 FF 02 0D FF 00 00 0D FF 01 01 FF FF?
Mpet
Машинист
Машинист
 
Сообщения: 33
Зарегистрирован: Вт авг 22, 2006 19:26
Откуда: СПб

Re: Работа с GRF

Сообщение Mpet » Ср дек 01, 2010 14:50

После долгих танцев с бубном, мне удалось сделать объект из 2-х секций, но вышло это только через создание двух объектов-невидимом. Если же делаю один и указываю его два раза тут (1 между секциями, а второй на конце "сцепки", чтобы последующие вагоны не задирали ногу на локомотив :) ): 1398 * 24 02 00 28 81 41 80 FF 00 05 03 00 00 00 00 02 00 01 01 01 00 02 02 02 00; то выходит залезание идущих далее вагонов почему-то... И еще две беды: 1) если я хочу прицепить такой же локомотив 2-м к этому, то выходит какой-то фарш - появляется 3-я секция и находиться она далеко, через пустов промежуток; 2) нету дыма у такого же локомотива, но вцепленного в состав через какое-то кол-во вагонов или в конце состава. Короче, не женское это дело, разбираться в дебрях ГРФ... :lol:
Весь код:
1393 * 9 02 00 00 01 01 00 00 00 00
1394 * 9 02 00 01 01 01 01 00 01 00
1395 * 9 02 00 02 01 01 02 00 02 00
1396 * 9 02 00 03 01 01 03 00 03 00
1397 * 9 02 00 04 01 01 04 00 04 00
1398 * 24 02 00 28 81 41 80 FF 00 05 03 00 00 00 00 02 00 01 01 01 00 02 02 03 00
//!!Warning (100): Default ID appears earlier in sprite.
1399 * 14 02 00 29 81 41 00 FF 01 03 FF 00 01 03 FF
1400 * 14 02 00 2A 81 0C 00 FF 01 29 00 11 11 28 00
1401 * 14 02 00 2B 81 10 00 FF 01 29 FF 00 02 FF FF
1402 * 14 02 00 2C 81 0C 00 FF 01 2B 00 16 16 2A 00
1403 * 18 02 00 2D 81 40 00 FF 02 24 FF 00 00 24 FF 02 02 40 FF
1404 * 14 02 00 2E 81 0C 00 FF 01 2D 00 10 10 2C 00
1405 * 10 03 00 01 29 01 FF 04 00 2E 00
Mpet
Машинист
Машинист
 
Сообщения: 33
Зарегистрирован: Вт авг 22, 2006 19:26
Откуда: СПб


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

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

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

cron