Адаптация узкоколейных ТС из RTTS

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

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

Адаптация узкоколейных ТС из RTTS

Сообщение дворник » Ср авг 17, 2011 17:49

Продолжаю мучать сценарий Транссиба. Подключил узкоколейку Narrow gauge rails. Захотелось уже с самого начала сценария (1890 год) использовать связку обычный жд транспорт+узкоколейный вместо обычный жд транспорт+грузовые трамваи. Жд шустрее, передачи работают лучше. Плюс одной платформой можно "качать" несколько видов грузов, по 1 вагону на каждый. Получается меньше трамвайных остановок и путь покороче.

В Russian Train and Tram Set транспортные средства с узкоколейкой есть. С 1890 доступно Serie-B, 28 км/ч, 81 лс Вот из-за этих 81 лс возить на нём что-либо совсем нереально. :) А если выставить склоны и множитель груза, то просто капут-капут.

Подключил сербский и канадский наборы поездов, т.к. там есть узкоколейный ТС. Но вот в 1890 году с ним туго. Можно, конечно, сдвинуть год начала сценария на 1905. Т.к. хочется с начала строительства разделять обычный жд для междугородних/дальних перевозок и узкоколейку для локальных/передачи грузов.

И вот посетила меня мысль другого способа решения проблемы. А именно. С помощью grfcodec можно декодировать грф набора, изменить можность, увеличив её в 2-4 раза для узкоколейных ТС, и закодировать обратно. И тогда уже можно будет им пользоваться. Или даже параметр завести, чтобы множитель можно было выбирать из некоего списка в настройках, как есть для др. наборов, того же 2cc trainset.

А потом тем же grfcodec закодировать обратно.

На примере того же Serie-B выснил, где и какая переменная отвечает за лс. Попробовал - вроде работает. :)

Как я понимаю, можно даже сделать маленький патч переменных нужных ТС, подключать его после rusrailw и таким образом менять мощность, делая узкоколейные ТС играбельными, а не всего-лишь декоративными.

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

Re: Адаптация узкоколейных ТС из RTTS

Сообщение дворник » Пт авг 19, 2011 12:09

С маленьким патчем не получилось. Нарисовал вот такой nfo-файл:
Код: Выделить всё
0 * 4 00 00 00 00
1 * 1 08 07 "AK" 26 19 "RTTS fix example" 00 "RTTS fix for narrow gauge vehicles example" 00
2 * 1 00 00 02 01 55 0B A0 00 12 FD

обработал nforenum, закодировал grfcodec, подключил - эффекта ноль. :) Либо знаний не хватает, либо как я полагаю, нельзя менять другие newgrf, только себя или базовый набор OpenTTD.

Вариант с декодированием, увеличением в 3 раза и кодированием обратно получился. Только вот играбельность такого варианта тоже не фонтан. :)

Конечно, RTTS делался давно, openttd меняется, появляются новые параметры и игровые возможности..
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57

Re: Адаптация узкоколейных ТС из RTTS

Сообщение дворник » Сб авг 20, 2011 02:06

Что ж, добился я таки того, чего хотел. С помощью NML. Никто не пробовал кодировать NewGRF с помощью NML? Документация есть тут.

Наваял такой rttspr.nml:

Код: Выделить всё
grf {
   grfid : "AKA\1";
   name : string(STR_GRF_NAME);
   desc : string(STR_GRF_DESCRIPTION);
   version: 1;
   min_compatible_version: 1;
   param {
       multiplier {
           type: int;
           name: string(STR_PARAM_MULTIPLIER_NAME);
           desc: string(STR_PARAM_MULTIPLIER_DESC);
           min_value: 1;
           max_value: 5;
           def_value: 4;
           names: {
               1: string(STR_PARAM_MULTIPLIER_1);
               2: string(STR_PARAM_MULTIPLIER_2);
               3: string(STR_PARAM_MULTIPLIER_3);
               4: string(STR_PARAM_MULTIPLIER_4);
               5: string(STR_PARAM_MULTIPLIER_5);
           };
       }
   }
}

engine_override("yu\07\05");

// name, id, power
// Serie - B, 0x55, 81
item (FEAT_TRAINS, engine55, 0x55) {
   property {
      power:       80 * multiplier;
   }
}

// Serie - 86, 0x56, 71
item (FEAT_TRAINS, engine56, 0x56) {
   property {
      power:       70 * multiplier;
   }
}

// Serie 157, 0x57, 132
item (FEAT_TRAINS, engine57, 0x57) {
   property {
      power:       131 * multiplier;
   }
}

// Serie 159, 0x58, 101
item (FEAT_TRAINS, engine58, 0x58) {
   property {
      power:       100 * multiplier;
   }
}

// LK - 01, 0x71, 101
item (FEAT_TRAINS, engine71, 0x71) {
   property {
      power:       100 * multiplier;
   }
}

// VP - 4, 0x70, 152
item (FEAT_TRAINS, engine70, 0x70) {
   property {
      power:       151 * multiplier;
   }
}

// AM-1, 0x6A, 81
item (FEAT_TRAINS, engine6A, 0x6A) {
   property {
      power:       80 * multiplier;
   }
}

// DMU, 0x6C, 507
item (FEAT_TRAINS, engine6C, 0x6C) {
   property {
      power:       506 * multiplier;
   }
}

// TU-2, 0x54, 304
item (FEAT_TRAINS, engine54, 0x54) {
   property {
      power:       303 * multiplier;
   }
}

// TU-3, 0x73, 248
item (FEAT_TRAINS, engine73, 0x73) {
   property {
      power:       248 * multiplier;
   }
}

// TU-4, 0x64, 253
item (FEAT_TRAINS, engine64, 0x64) {
   property {
      power:       253 * multiplier;
   }
}

// TU-5, 0x65, 406
item (FEAT_TRAINS, engine65, 0x65) {
   property {
      power:       405 * multiplier;
   }
}

// TU-6, 0x66, 91
item (FEAT_TRAINS, engine66, 0x66) {
   property {
      power:       90 * multiplier;
   }
}

// TU-7, 0x67, 406
item (FEAT_TRAINS, engine67, 0x67) {
   property {
      power:       405 * multiplier;
   }
}

// TU-8, 0x68, 456
item (FEAT_TRAINS, engine68, 0x68) {
   property {
      power:       455 * multiplier;
   }
}

// P-KO-1, 0x6F, 256
item (FEAT_TRAINS, engine6F, 0x6F) {
   property {
      power:       255 * multiplier;
   }
}

// TEU-1, 0x69, 122
item (FEAT_TRAINS, engine69, 0x69) {
   property {
      power:       121 * multiplier;
   }
}

// PEU-1, 0x6D, 256
item (FEAT_TRAINS, engine6D, 0x6D) {
   property {
      power:       256 * multiplier;
   }
}

// ChS - 11, 0x6E, 253
item (FEAT_TRAINS, engine6E, 0x6E) {
   property {
      power:       252 * multiplier;
   }
}


Id ТС взял из nfo, мощность - из игры, меняя игровой год. С помощью nmlc.exe закодировал и получил небольшой grf, правящий только мощности только у нужных ТС. Множитель от 1 до 5 настраивается в параметрах, по умолчанию поставил 4. Как (и можно ли) опросить текущие параметры ТС - не понял, поэтому просто взял их за константы.

Архив с получившимся grf и исходниками прилагается, подключать после rusrailw.grf

Прикольный этот NML, жаль только, что не все features поддерживает, зато кодировать проще nfo.

По данной методе можно править баланс у любых ТС из любых наборов. Возможно, можно даже одним grf править несколько наборов, проверяя их активность.
Вложения
rttspr.rar
(1.42 Кб) Скачиваний: 226
дворник
Президент
Президент
 
Сообщения: 563
Зарегистрирован: Сб дек 05, 2009 22:57


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

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

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