NML версия набора (обсуждаем только вопросы кода!)

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

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение George » Пн янв 30, 2012 20:11

дворник писал(а):
George писал(а):а зачем нам на текущем этапе несколько веток?
Всего две, причём их можно и в одну слить.
Выделил, чтобы не смешивать графику рельсов с графикой ПС, поскольку в отличие от ПС, где есть кой-какой транспорт, графики рельсов просто нет. Рельсы рассматриваю как отдельную подзадачу, поэтому и выделил ей отдельную ветку, посмотрел, как оно делается и какие возможности. Я не планирую поддерживать особо ветку с рельсами на данном этапе, пока не появится какая-нить их графика.
Так вынеси их в отдельный GRF
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1345
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение Wowan » Пн янв 30, 2012 20:46

Тоже верно. На данном этапе в одной грфке это всё необязательно держать.

дворник писал(а):Hirundo написал, что он запретит использовать тернарный оператор (?:) "при работе со строками"...
Тратить месяц времени на освоение питона...
А можно всё то же самое, но медленно и для домохозяек? :D
Аватара пользователя
Wowan
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1382
Зарегистрирован: Вт сен 18, 2007 14:43
Откуда: трасса М1, Минск — Москва

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Пн янв 30, 2012 20:57

George писал(а):Так вынеси их в отдельный GRF

Зачем?

Wowan писал(а):А можно всё то же самое, но медленно и для домохозяек?

Вот отсюда и ниже на английском про тернарный оператор с примерами на NML.

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

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение George » Пн янв 30, 2012 21:20

дворник писал(а):
George писал(а):Так вынеси их в отдельный GRF
Зачем?
что бы не было ситуации, когда я беру последнюю по номеру сборку, загружаю её в тестовом сэйве, созданном с 2 видами тока, и обнаруживаю, что нескольких видов тока нет.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1345
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Пн янв 30, 2012 21:50

Это тебе не поможет.
1. Чтобы ПС понимал нестандартные рельсы, каждому ПС надо прописать метки.
2. Чтобы рельсы имели адекватные атрибуты (и графику) их надо прописать для railtype.

Поэтому нет смысла делить, одно без другого бесполезно.

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

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение George » Пн янв 30, 2012 22:20

дворник писал(а):Это тебе не поможет.
1. Чтобы ПС понимал нестандартные рельсы, каждому ПС надо прописать метки.
Из чего следует, что они не могут быть разнесены?
Мне это напоминает CargoLabels, а они прекрасно разносятся между их определяющими, и их использующими сетами.
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1345
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Пн янв 30, 2012 22:38

Да нет же, из этого следует бессмысленное увеличение сущностей. Где ещё будут использоваться метки 17-ти видов рельсов набора xussr, кроме него? Зачем в GRF ПС логика выявления и назначения меток рельсов, если она бесполезна без GRF рельсов? Зачем GRF с рельсами, по которым никто не умеет ездить, кроме xussr? Зачем GRF с рельсами, в котором нет графики, одни метки и атрибуты?

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

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение George » Пн янв 30, 2012 23:32

дворник писал(а):Да нет же, из этого следует бессмысленное увеличение сущностей. Где ещё будут использоваться метки 17-ти видов рельсов набора xussr, кроме него? Зачем в GRF ПС логика выявления и назначения меток рельсов, если она бесполезна без GRF рельсов? Зачем GRF с рельсами, по которым никто не умеет ездить, кроме xussr? Зачем GRF с рельсами, в котором нет графики, одни метки и атрибуты?
По мне так лучше один GRF со всем функционалом, настраиваемым через параметры в одном месте.
тогда вноси всё в одну ветку и не выноси мозг :lol:
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1345
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение Balu » Вт янв 31, 2012 01:22

OTTD 1.2. Beta 2
xUSSR 1.428
Кроме них на компе установлен Alpine Climate, DB Set XL, Sweddish Houses, Ikarus Set, и некоторые другие.

1) У некоторых локомотивов в параметрах указана скорость, а в игре получается другая (если без вагонов и с пасажирскими ЦМВ). Вот что удалось пока обнаружить (В игре 1967 год)
Локомотив / Скорость в Паспорте / Скорость в Игре
ТЭП10 / 120 / 140
ТЭП60 / 130 / 160
2ТЭП60 / 130 / 160
ТЭП10Л / 120 / 140
* Причем в игре лисуется одна секция от 2ТЭ10Л (может так и должно быть))
2ТЭ10Л - Все в порядке, скорость как задекларировано
ЭР-1 / 99 / 130
ЭР-2 / 109 / 130
* У моторных вагонов в паспорте записана скорость 0, что как-то вводит в заблуждение...
** Еще ВЛ 61 меняет значение максимальной скорости в зависимости от года и окраски - но это кажется так и должно бы быть.
В 1990 году (новая игра)
ТЭП70 / 140 / 160
ЧС 2Т / 130 / 120 Одинарный и 160 парой
ЧС 4 / 160 / 120 одинарный и 180 парой или тройкой
ЧС 4Т / 140 / 160
Еще у ЧС6 в 1990 году скорость 160, а ЕМНИП он таскал Аврору до 200? или я что-то путаю? Или Надо как раз собрать Аврору и тогда пллучится 200?

По графике в старой версии были глюки с ЧС6, 7 и 8 в некоторых вариантах раскрасок типа вариант 7,8 и 9 с разными вагонами, секции локомотива менялись местами, В 428 это проблемма осталась при подчеплении мягких ЦМВ с кондеем к ЧС6 и ЧС2Т.

2) Очень хочется почтовый ЦМВ. Хотя бы фейковый. А то как-то почты набирается много, а цеплять поездам ЦМВ почтовые вагоны Егоровцев - не особо смотрится. У Егоровцев не хватает почтового в окрске экспресса (в моделях ТТ его видел, не уверен был ли он на самом деле, но думаю что для красоты в ОТТД он был бы полезен, даже фейковый).

3) Простите, меня глупого, если я пишу не в ту тему, то подскажите куда А) репортить баги из версий новых GRF, B) в каком формате репортить (ну типа что указывать в репорте кроме версии GRF), С) в Какую тему писать хотелки (пожелаловки) по поводу моделей, доработок.
Balu
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 20
Зарегистрирован: Пт янв 27, 2012 23:50

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Вт янв 31, 2012 09:29

Balu писал(а):А) репортить баги из версий новых GRF, B) в каком формате репортить (ну типа что указывать в репорте кроме версии GRF)

Во первых, спасибо за сообщение.

Об ошибках конкретных ревизий сообщать здесь. Указывать версию сборки и описание ошибки, чтобы её можно было обнаружить и воспроизвести. Можно добавить кусочек скриншота.

Balu писал(а):С) в Какую тему писать хотелки (пожелаловки) по поводу моделей, доработок.

Не связанные напрямую с программированием и NML хотелки надо писать в соседней теме.

Про скорость. Озвученные цифры соответствуют тому, что задано в xls, но в меню покупки действительно есть косяк. Буду исправлять, спасибо.

Balu писал(а):В 428 это проблемма осталась при подчеплении мягких ЦМВ с кондеем к ЧС6 и ЧС2Т.

Прицепил ЧС6 и ЦВМ с конд., глюков неправильного показа секций не увидел. Как точно воспроизвести?

Что же до смены ливрей локомотивов и вагонов одновременно, то тут дело в особенностях механизма openttd. Когда список ливрей для всего поезда совпадает со списком для каждого ПС в поезде, всё вполне адекватно. Когда же у локомотивов один список, а у вагонов другой - начинается чехарда. Можно использовать зажатый Ctrl для выбора от текущего до конца, и переоборудовать в 2 притопа: сначала локомотивы, потом вагоны скопом. Хорошо бы разработчикам делать анализ того, к какой группе ПС относится выбранная игроком строка переоборудования, и менять признак переоборудования только этой группе. Не по номеру по списку от нуля, а по id строки. Тут моя, как программиста набора графики, бессильна.
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение Balu » Вт янв 31, 2012 11:57

1990 год. Покупаю ЧС6 две секции подцепляем ЦМВ с конедеем. Жму кнопочку рефит, и выбираю самюю последнию ливрею в списке (она пасажиры 9). Вагоны перекрашиваются, а вот с локом что-то странное творится. (Доберусь до домашнего компа, тогда сделаю скрины и выложу). Думаю что баг возникает из-за того что у локомотива просто нет такого количества ливрей (или не совсем четко прописано взаимодействие при групповой перекраске).

Еще аналогичный глюк (или фича) когда к ТЭП10 (или ТЭП10Л) подцепить мягких егоровцев, и перекрасить в к ливрею экспресса, то и лок перекрашивается в сочный синий цвет. В 60 годы это единственный спсоб перекрасить его в этот цвет, который появляется позднее в качестве стандарта.

А вообще богатство выбора моделей и вариантов перекрасок, которые меняются в зависимости от года и дороги - это очень сильно! Модцы все создатели! Получился просто прекрасный набор! Дай вам бог здоровья, и творческой энергии чтобы осуществить все планы по подвижному составу xUSSR.
Balu
Шпалоукладчик
Шпалоукладчик
 
Сообщения: 20
Зарегистрирован: Пт янв 27, 2012 23:50

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Ср фев 01, 2012 15:43

Последняя промежуточная версия.
- добавлен штраф по скорости, величина от 10 до 50% задаётся в настройках, по умолчанию 15%.

В случае, если сцепляемые локомотивы не умеют работать в СМЕ, либо превышено их количество, либо неверный порядок следования, то все локомотивы получают штраф, и скорость движения состава определяется наименьшей скоростью.
Исключение составляют маневровые тепловозы и паровозы. Они сигнализируют о штрафе для др. локомотивов всегда, но сами не получают штраф. У них и так скорость снижена, см. паровоз 9П, тепловозы ТЭМ1, ТЭМ2, ТЭМ2У. Мне такой вариант показался более интересным. Если заблуждаюсь, можно мне это объяснить, и у маневровых не будет исключения.

xussr.441.grf.7z
(401.3 Кб) Скачиваний: 166


С реализацией штрафа есть серьёзные проблемы. :) Например, я пока не знаю, как сделать (и реализуемо ли это) совместное использование локомотивов разных моделей, см., например, строчку для 2ТЭ10М в xls.

Люто не хватает переменной, позволяющей опросить идентификатор соседей справа/слева. Если бы была переменная, позволяющая задать положительное или отрицательное смещение в виде параметра и возвращающая id элемента в составе, это бы очень сильно помогло.

Не хватает возможности вызывать подпрограммы, из-за этого пришлось в чёрную копипастить, потому как ограничение реализовано через 3 вызова cb.

Теперь, как это было сделано.
Для ограничения скорости использован cb speed, для задания скорости в меню покупки использован отдельный cb purchase_speed. После серии опытов на паровозах было выяснено, что мы можем опросить локомотив, используя область видимости PARENT, и текущий элемент, используя область видимости SELF. Другие элементы нам недоступны в силу ограничений, наложенных разработчиками на обращения в теле cb, меняющих свойства ПС. Величина скорости должна вернуться сразу же в конце тела cb speed. Другими словами, штраф можно наложить на текущий элемент, а для сравнения можно использовать только его позицию и данные о локомотиве. Я решил зайти с др. стороны. Для этого задействовал cb bitmask_vehicle_info, которая возвращает 8 бит пользовательских данных, и стал трактовать бит 0 как флаг, определяющий, надо ли применять штраф к составу или нет. В результате функции speed и purchase_speed упростились, там остались только величины скоростей, а логика активации режима перешла в тело bitmask_vehicle_info. Даже если один из ПС требует штрафа составу, этот штраф в силу природы переменной bitmask_consist_info будет виден и может быть применён ко всем ПС в составе. Я его применяю только для локомотивов.

Общий алгоритм таков:
1. проверяем позицию элемента, если она == 0, то считаем себя локомотивом и завершаем вызов не устанавливая признак штрафа.
2. иначе считаем себя где-то в середине состава, и опрашиваем id локомотива в области видимости PARENT и считаем кол-во элементов своего типа.
3. в обл. видимости SELF считаем кол-во элементов своего типа от текущего до конца. Разница величин, расчитанной на шаге 2 и этой, даст нам индекс локомотива нашего типа. Этой величиной мы оперируем, сравнивая её с текущей позицией в предположении, сколько элементов нашего типа уложится между локомотивом и текущим элементом. Если уложилось, сверяем СМЕ, если нет, то взводим флаг штрафа. Если текущий индекс больше положенного по СМЕ - тоже взводим, иначе возвращаем не взведённым.

Текст функций на примере 2ТЭ70, позволяющему до 4-х секций
Код: Выделить всё
// Макс. скорость: 110 км/ч
#define MAX_SPEED 110

switch (FEAT_TRAINS, SELF, _2te70_purchase_speed,
  MAX_SPEED)
{
  return;
}

switch (FEAT_TRAINS, SELF, _2te70_speed,
[
  STORE_TEMP(MAX_SPEED, 0),
  is_penalise_speed() ? get_penalised_speed(LOAD_TEMP(0)) : LOAD_TEMP(0)
])
{
  return;
}

#undef MAX_SPEED

switch (FEAT_TRAINS, SELF, _2te70_bitmask_vehicle_info3,
[
  STORE_TEMP(LOAD_TEMP(0) - count_veh_id(_2te70), 0),
  (last_computed_result && (position_in_consist == 2 * LOAD_TEMP(0)) &&
    LOAD_TEMP(0) < 4)
])
{
  1: return 0;
  return FLAG_PENALISE_SPEED;
}

switch (FEAT_TRAINS, PARENT, _2te70_bitmask_vehicle_info2,
[
  STORE_TEMP(count_veh_id(_2te70), 0),
  vehicle_type_id == _2te70
])
{
  _2te70_bitmask_vehicle_info3;
}

switch (FEAT_TRAINS, SELF, _2te70_bitmask_vehicle_info,
  position_in_consist == 0)
{
  1: return 0;
  _2te70_bitmask_vehicle_info2;
}


Напоминаю, что в наборе все ПС длиннее 8 состоит из двух сочленённых элементов: собственно ПС и невидимого болванчика, главной задачей которого является выставления правильной величины размера (размер_ПС - 8 ). Это потому, что если для локомотивов можно применять livery_override (и задать там размер), то для вагонов это увы нельзя делать. Механизм же использовать хотелось унифицированный, а не специализированный.
Поэтому тут - "position_in_consist == 2 * LOAD_TEMP(0)" - множитель 2.

Что в итоге вышло - можете заценить. :)
Последний раз редактировалось дворник Ср фев 01, 2012 20:36, всего редактировалось 1 раз.
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Ср фев 01, 2012 16:35

Есть ещё один вопрос, по которому хотелось бы посоветоваться. В наборе большое кол-во ПС, которое ездит парами. Иногда по 1-2, иногда только по 2, иногда от 1 до 4. Для такого ПС нарисованы модельки двух видов: мордой вперёд и мордой назад. И рисуются они сейчас с учётом чётности позиции:
Код: Выделить всё
<
<>
<><
<><>

где скобочки - локомотивы от 1 до 4, мордой в соответствующую сторону ориентации скобки.
Есть тройные локомотивы, состоящие из 3-х секций, выглядят как:
Код: Выделить всё
<=>
<=><=>


И есть пожелание, что многие локомотивы умеют ездить по трое, и что в реальности они делают это так:
Код: Выделить всё
<>>

а не так:
Код: Выделить всё
<><


Можно переделать код таким образом, что первый локомотив будет всегда развёрнут в в одну сторону, а последующие - в другую.
Код: Выделить всё
<
<>
<>>
<>>>
<>>>>
<>>ВВВВВВВВВ>ВВ>

где В - вагоны.
Для тех случаев, где не по трое. Вопрос - надо ли? Более сложный анализ конфигурации локомотивов затруднён, но возможен, поскольку в функции отображения спрайтов можно обращаться ко всем переменным и получать параметры соседей.

Вариант
Код: Выделить всё
<>
<>>
<><>

не невозможен, весь вопрос, как разворачивать элемент в третьей позиции. И как в пятой, седьмой и пр. нечётных.

Ах да, вот это "<><>" делалось для эмуляции двух двоек. Первая двойка идёт спина к спине, за ней вторая двойка. Но можно эмулировать иначе: первый элемент идёт вперёд, остальные в противоположную сторону. Чем проще и короче код, тем быстрее вычисления и меньше тормозов в игре. А спрайты зовутся очень часто.
Что думаете?
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение George » Ср фев 01, 2012 19:32

дворник писал(а):Люто не хватает переменной, позволяющей опросить идентификатор соседей справа/слева. Если бы была переменная, позволяющая задать положительное или отрицательное смещение в виде параметра и возвращающая id элемента в составе, это бы очень сильно помогло.
http://www.tt-forums.net/viewtopic.php?f=68&t=51697
Попробуй покричать о добавлении в транк :D
Аватара пользователя
George
Почетный тайкунер
Почетный тайкунер
 
Сообщения: 1345
Зарегистрирован: Пн сен 20, 2004 12:02
Откуда: SPb, Russia

Re: NML версия набора (обсуждаем только вопросы кода!)

Сообщение дворник » Ср фев 01, 2012 20:35

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

Пред.След.

Вернуться в xUSSR Set

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

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

cron