Street Legal Redline является довольно сложной (если не самой сложной) игрой в плане моддинга. Сегодня я расскажу вам, как вставить свою собственную машину в игру. 
 У каждого есть свои хитрости и свои способы, здесь я расскажу как мне удобнее.  Нам понадобятся следующие файлы: 
 1. resdecode.exe и resconvert.exe чтобы править rpk. 
 2. 3d max 5 для работы с 3D. а так же плагин к нему для экспорта в формат scx. 
 3. zmodeler 1.07 а так же плагин к нему для импорта моделей из формата scx. 
 4. блокнот он есть у всех. 
 5. slrr 2.2.1 java pack - исходники стандартных машин. 
 6. adobe photoshop или иной графический редактор, но лучше фотошоп, а так же плагин к нему для работы с текстурами в формате dds. 
 7. SLRR 230LE. т.к. мы будем делать машину для этой версии. 
 Начнем. 
 Игру лучше установить в корень диска, так будет проще до нее добираться. У меня она установлена в "G:\Street Legal Racing 230LE" 
 Заходим в папку с игрой, жмем наверху кнопку "Сервис" -> "Свойства папки" 
 Далее выбираем вкладку "Вид" и снимаем галочку напротив "Скрывать расширения для зарегистрированных типов файлов". 
 
 
 Жмем Ок. 
 Теперь мы видим что в имени каждого файла отображается и его расширение. 
 Если в корне игры есть файл "error.log", удалите его. 
 Далее берем скачанные resdecode.exe и resconvert.exe и копируем их в папку с игрой. 
 Ок, жмем "Пуск" -> "Выполнить" -> в окошке пишем "cmd" и жмем ОК. 
 В черном окошке пишем (после каждой строки не забываем жать enter) 
 G: 
 cd street legal racing 230LE 
 resdecode cars/racers/einvagen 
 
 
 Напоминаю, что у меня игра установлена на диске G: в папке street legal racing 230LE, соответственно заменяйте на свои пути. 
 Если у вас игра например установлена на диске C: вместе с windows, то ваш порядок действий будет таков: 
 cd / 
 cd street legal racing 230LE 
 resdecode cars/racers/einvagen 
 Закрываем черное окно и идем в папку с игрой в cars/racers/ . 
 Там мы обнаружим новый файлик "einvagen.rdb". 
 Находим наши скачанные исходники для 2.2.1, распаковываем их и копируем от туда папку "einvagen_data" (она в cars/racers/ как и в игре") 
 Вставляем эту папочку в нашу игру в папку cars/racers/ , windows спросит о замене, нажмите "да для всех". 
 
 
 Идем в папку cars/racers/ , копируем папку "einvagen_data" 
 И сюда же вставляем 
 Теперь самое время, чтобы придумать нашей машинке название. 
 Назовем ее krevetko 
 
 Переименовываем нашу вставленную папку из "копия einvagen_data" в "krevetko_data", так же переименовываем "einvagen.rdb" в "krevetko.rdb" 
 
 
 открываем блокнотом "krevetko.rdb" 
 Небольшой ликбез по рпк файлам. 
 Рпк это нечто вроде архива, в основном со ссылками на игровые файлы.. 
 Для каждой детали используются в основном 5 блоков. 
 т.е. 
 script 
 render 
 mesh 
 phys 
 texture 
 Однако, если деталь имеет ту же текстуру, или физ. модель.. или меш (3д модель), то можно использовать меньше блоков, но скрипт у каждой детали обязательно свой. Если сейчас это непонятно, то современем станет ясно.. это довольно просто.  В стандартном рпк все это разбросано по всему файлу. И если мы захотим добавить собственную деталь, то придется собрать нужные блоки, но об этом позже.
 
 И так, как мы можем заметить в рпк содержаться ссылки на различные файлы, и путь к ним указан в папку "einvagen_data" .. нам же нужно все их переместить в папку "krevetka_data". 
 Жмем "Правка" -> "Заменить" 
 В поле "Что" пишем "einvagen_data" 
 В поле "Чем" пишем "krevetko_data" .. точнее название своей машины. 
 
 
 Жмем "Заменить все" 
 После окончания процесса, закрываем маленькое окошко и сохраняемся. 
 Сворачиваем наш блокнот "krevetko.rdb", он нам еще пригодится. 
 Далее мы идем править исходники. 
 Они лежат в папке cars/racers/krevetko_data/scripts/src/ 
 Имеют расширение .java и опять же открываются блокнотом. 
 Кстати рекомендую сделать "Вид" -> "Таблица" 
 
 
 Открываем файл "Einvagen_110_GT.java" 
 Выделенные строки и являются названием нашего автомобиля, кузова, описания.. текст внутри кавычек можно править, например так: 
 
 
 Чуть ниже мы увидим вот это, комментарии на скрине. 
 
 
 Нам снова надо заменить "einvagen" на "krevetko" но только в тех строках, в которых ставятся кузовные панели. 
 Жмем "правка" -> "заменить" , остальное видно на скрине. 
 
 
 Сохраняемся и закрываем. Для начала у нас будет 1 модель машины, поэтому другие 110 GTK, 140 GTA мы трогать не будем. 
 Поэтому открываем "Einvagen_models.java" и удаляем синие строки. 
 
| Quote | 
| package java.game.cars;   import java.util.*;   import java.util.resource.*;   import java.game.parts.bodypart.*;   public class Einvagen_models extends Chassis   {   	static int	MODEL_110_GT		= 1;   static int	MODEL_110_GTK		= 2;   	static int	MODEL_140_GTA		= 3;   	static int	MODEL_110_GTD		= 4;   	public Einvagen_models( int id )   	{   		super( id );   		carCategory = PACKAGE;   		make = MAKE_EINVAGEN;   	}   	public void updatevariables()   	{   		super.updatevariables();   		ResourceRef ref = new ResourceRef(sound:0x00000015r);   		setHornSFX(ref, 1.0, 1);   		setHornSFX(ref, 1.0, 3);   		ref.set(0);   		setHornSFX(ref, 1.0, 2);   	}   }  | 
  Далее открываем "Einvagen_VT.java" 
 Жмем "правка" -> "заменить" , остальное видно на скрине. 
 
 
 точно так же заменяем "racers.einvagen" на "racers.krevetko" в файлах "einvagen_FL_door.java" , "einvagen_FR_door.java", "einvagen_RL_door.java", "einvagen_RR_door.java", "einvagen_R_door.java" и "kit_gta_body.java" 
 Теперь самое скучное - во всех исходниках надо заменить название деталей на свои, например для бампера: 
 
| Quote | 
| package java.game.cars;   import java.util.*;   import java.util.resource.*;   import java.game.parts.bodypart.*;   public class Einvagen_F_bumper extends Bumper   {   	public Einvagen_F_bumper( int id )   	{   		super( id );   		carCategory = PACKAGE;   		name = "Einvagen GT/GTK front bumper"; // собственно название детали в игре.   		description = "The stock front bumper for the 110 GT and 110 GTK models."; // описание детали, его можно не менять.   		value = tHUF2USD(55.633); // цена детали, разделенная примерно на 5, т.е. в игре бампер стоит примерно 280 у.е.   		brand_new_prestige_value = 24.00; // престиж детали   	}   }  | 
  Все то же самое придется проделать для остальных деталей, если цену и престиж можно оставить прежними, то название детали стоит заменить на свое. Например вот тот же бампер после переименования. 
 Кстати, если кто не знает, то двойной слеш "//" отделяет комментарии, т.е. за ним можно писать что угодно. 
 
| Quote | 
| package java.game.cars;   import java.util.*;   import java.util.resource.*;   import java.game.parts.bodypart.*;   public class Einvagen_F_bumper extends Bumper   {   	public Einvagen_F_bumper( int id )   	{   		super( id );   		carCategory = PACKAGE;   		name = "Krevetko bumper"; // собственно название детали в игре.   		description = "The stock front bumper for the 110 GT and 110 GTK models."; // описание детали, его можно не менять.   		value = tHUF2USD(100); // цена детали, разделенная примерно на 5, т.е. теперь в игре бампер стоит примерно 500 у.е.   		brand_new_prestige_value = 34.00; // престиж детали   	}   }  | 
  С исходниками разобрались. 
 Теперь заходим в корень игры и создаем там текстовый файлик с любым именем, например krevetko.txt , заходим в него и пишем следующее: 
 resconvert cars/racers/krevetko 
 Сохраняемся, закрываем и переименовываем этот файлик в krevetko.bat 
 
 
 Запускаем получившийся файлик, появится черное окно, в котором побегут строки, когда остановятся закрываем его. Таким путем мы создали из "krevetko.rdb" "krevetko.rpk" , и теперь если мы обновим что-то в "krevetko.rdb" нам достаточно лишь запустить наш "krevetko.bat" в корне игры, чтобы сохранить наши изменения в рпк. 
 Заходим в игру, создаем карьеру и идем в обменник кузовов или в магазины .. если все сделали правильно, то должен появится эйнваген только под именем "krevetko" 
 К сожалению у меня нет времени проверять, но вроде ничего не упустил. 
 Покупаем любую машину и меняемся на кузов креветки, заходим в каталог и смотрим все секции "body" .. листаем все страницы, если игра не вылетела, то все отлично, покупаем движок, подвеску, ставим все это на креветку и сохраняем игру, выходим. 
 Если же игра вылетела, то идем в корень игра, открываем блокнотом файл error.log и смотрим где же был сбой. К примеру если содержимое error.log такое: 
 
| Quote | 
| !syntax error in file cars\racers\krevetko_data\scripts\fl_quarterpanel.java at line 14 | 
  То это означает, что мы ошиблись в файле FL_quarterpanel.java нашей машины, следуем по адресу и открываем этот файл, переходим на 14 строку и внимательно смотрим на нее, ошибка может возникнуть из-за любого пустяка, например вот из-за такого: 
 
| Quote | 
| package java.game.cars;   import java.util.*;   import java.util.resource.*;   import java.game.parts.bodypart.*;   public class Einvagen_FL_quarterpanel extends Quarterpanel   {   	public Einvagen_FL_quarterpanel( int id )   	{   		super( id );   		carCategory = PACKAGE;   		name = Krevetko GT front left quarterpanel"; // вот здесь и закралась ошибка, обратите внимание, я забыл открыть кавычки перед словом Krevetkо.   		description = "The stock front left quarterpanel for the GT models.";   		value = tHUF2USD(87.375);   		brand_new_prestige_value = 18.60;   	}   }  | 
  Чтож, бывает, заходим в игру и снова смотрим каталог.. если вылет, повторяем поиск проблемы. 
 Все ошибки исправлены, машина есть, теперь приступаем к собственно моделингу. 
 Устанавливаем 3D max 5, zmodeler 1.07 и не забываем плагины к ним. 
 Открываем zmodeler 1.07 , жмем "File" -> "Import" далее идем вот так street legal racing/cars/racers/einvagen_data/meshes/ открываем файл chassis.scx, 
 при этом появятся несколько ошибок, жмем ок на каждой и видим перед собой кузов эйнвагена. Мышью его можно покрутить 
 
 
 Видите справа окошко с названием "Objects" , удалите из него chassis.scx и chassis.scx+ (правой кнопкой на chassis.scx -> Delete, аналогично с chassis.scx+) 
 Должно получиться вот так. 
 
 
 Жмем "File" -> "Export" 
 В поле "Имя файла" пишем любое имя.. например "chas" и сохраняем в формате 3DS. 
 Закрываем занозу. Изменения можно не сохранять. 
 Открываем 3D Max 5 
 Жмем "File" - "Import" и находим наш только что сохраненный файлик. А сохранили мы его в street legal racing/cars/racers/einvagen_data/meshes/chas.3ds 
 Открываем его. 
 В появившемся мелком окошке жмем "ок" 
 Вот что мы должны увидеть. 
 
 
 Но модель слишком маленькая, надо увеличить ее в 100 раз. 
 Как работать в максе, я описывать тут не буду, для этого существует куча туторов, учитесь искать информацию. 
 И так, кузов эйнвагена нам нужен для того, чтобы подогнать размер своей машины к размеру игровой. 
 
 
 После этого кузов эйнвагена можно удалить. 
 Далее игровой материал, процесс его создания и вставки детали в игру очень хорошо описан в туторе "Накладывание текстур", за который скажем спасибо Konner. 
 Однако я крайне советую еще в свойствах материала ставить "specular level:" 100 для окрашиваемых деталей, для хрома 150-200 
 "glossines:" 40 
 
 
 Я думаю не надо объяснять на что это влияет, для примера джип разрезанный пополам, угадайте на какой половине применены эти настройки 
 
 
 
 Допустим модель автомобиля готова. Перед экспортом детали в игру, выделите ее, зайдите в "hierarchy", нажмите "affect pivot only", нажмите "center to object", еще раз нажмите "affect pivot only", чтобы отжать кнопку. 
 
 
 Далее в поля координат ставим нули, деталь сместится на начало координат. 
 Жмем "File" -> "Export selected" в окошке заходим в папку игры street legal racing/cars/racers/krevetka_data/meshes/ и заменяем нужную нам деталь. 
 
 
 Небольшой ликбез: 
 FL - front left - передний левый 
 FR - front right - передний правый 
 RL - rear left - задний левый 
 RR - rear right - задний правый 
 L - left - левый 
 R- right - правый, однако бывает и rear - задний, зависит от детали, например R_mirror - правое зеркало, а R_bumper - задний бампер. 
 F - front - передний 
 ---- 
 quarterpanel - крыло 
 door - дверь 
 seat - сиденье 
 steering_wheel - руль 
 hood - капот 
 bumper - бампер 
 trunk - багажник 
 sideskirt - порог 
 roof - съемная крыша 
 window - стекло 
 windshield - переднее или заднее стекло 
 mirror - зеркало 
 headlights - передние фары 
 taillights - задние фары.  В любом случае, если вам будет непонятна какая-то деталь, то всегда можно открыть ее модель в zmodeler и покрутить детальку.
 
 После замены детали иногда сбивается порядок текстур, опять же все это описано в туторе "Накладывание текстур", однако опять же добавлю от себя, необязательно при экспорте кузова или иных сложных деталей соединять их последовательно, я всегда экспортировал просто выделив деталь и прописав потом правильно порядок текстур. 
 О порядке текстур опять же добавлю, в рпк вы пишете порядок именно таким, который написан в получившимся tex файле при экспорте детали, НО меняете местами default_white.dds (0x00020025) и основную текстуру вашей детали, для крыла например это Einvagen_F_quarterpanel.dds (0x0000005A). В противном случае, ваша деталь будет закрашиваться полностью, иногда это плохо. 
 Далее мы возвращаем перемещенную в 0.0.0 деталь на место, для этого достаточно пару раз нажать "CTRL+Z", теперь наша задача установить ее правильно на машине. 
 Открываем street legal racing/cars/racers/krevetko_data/scripts/_main_110_GT.cfg 
 находим в нем нужную нам деталь, в данном случае это 
 
| Quote | 
| slot		-0.700 0.137 -0.778	0.000 0.000 0.000	34	; FL_quarterpanel | 
 (строка 481)  Это слот на кузове, в который ставится переднее левое крыло. 
 Мы видим 3 блока цифр. 
 -0.700 0.137 -0.778 отвечает за положение слота по 3 осям координат x,y,z (относительно автомобиля: x - перпендикулярная ось, т.е. влево вправо, y - высота, z - продольная ось, т.е. вперед назад. 
 0.000 0.000 0.000 отвечает за наклон детали по 3 осям. 
 34 номер слота 
 
 В 3д максе эти оси расположены немного по-другому. (пришлось взять гольф, т.к. джип завис и не сохранился .. ЧАЩЕ ЖМИТЕ CTRL+S В МАКСЕ!) 
 Думаю скрин все объяснит, обратите внимание, что знак у оси X надо менять. 
 А так же делить эти значения на 100. 
 
 
 Если стандартный слот выглядил вот так: 
 
| Quote | 
| slot		-0.700 0.137 -0.778	0.000 0.000 0.000	34	; FL_quarterpanel | 
  То с нашим крылом он будет вот таким: 
 
| Quote | 
| slot		-0.734 -0.185 -1.532	0.000 0.000 0.000	34	; FL_quarterpanel | 
  Надеюсь понятно.. 
 После этого необходимо зайти в скрипт нашей детали, т.е. левого крыла и поставить там его координаты на 0.0.0. 
 Открываем street legal racing/cars/racers/krevetko_data/scripts/FL_quarterpanel.cfg 
 Вот и нужный нам слот на самой детали: 
 
| Quote | 
slot		0.022 0.371 0.468	0.000 0.000 0.000	34	; FL_quarterpanel   attach		0x00000006 34	; chassis->FL_quarterpanel | 
  Ставим координаты на нули, вот так: 
 
| Quote | 
slot		0.000 0.000 0.000	0.000 0.000 0.000	34	; FL_quarterpanel   attach		0x00000006 34	; chassis->FL_quarterpanel | 
  Все, после этого можно зайти в игру, купить наше крыло и поставить его на машину. 
 И так со всеми прочими кузовными деталями, поэтому создавать машины так нудно.. 
 Также не стоит забывать о том, что эта координата относительно детали на которую крепится наша, т.е. например для того, чтобы расположить зеркало на двери, придется ставить дверь и зеркало в начало координат и смотреть какие координаты у зеркала. 
 С дверьми, багажниками и капотами все несколько сложнее. Проделайте все тоже самое, но придется еще сдвинуть наш слот в то место, где деталь будет закреплена и вокруг которого она будет поворачиваться при нажатии на нее. 
 Сдвиньте слот в _main_110_GT.cfg по оси Z в нужное место (определяется через 3д макс или экспериментальным путем), не забудьте про flap, ее координата должна быть такой же 
 На такое же число, но с противоположным знаком, сдвиньте слот на самой детали (в ее cfg).. сложно? 
 Если очень сложно, то можно в 3д максе нажать "Affect pivot only" (помните, мы проделывали это ранее), но не нажимать "Center to object" а перенести указатель к предполагаемой оси кручение (грубо говоря - где будут петли), поставить деталь в начало координат и экспортировать в игру. (так же как и обычно). 
 Получится немного некрасиво, но легче. 
 Допустим вы экспортировали все детали в игру, собрали машину. Отлично. 
 Далее надо настроить положение водителя, колес и камер. 
 Все это описывается в _main_110_GT.cfg координатами. (надеюсь помните где он находится 
 ) 
 Начинаем с первой камеры, она же голова водителя. 
 
| Quote | 
| camera		-0.380 0.350 0.202	0.000 0.000 0.000	 90.000 | 
  Надеюсь, что систему координат вы уже освоили и можете сообразить как и куда двигать. Но если ваша машина будет похожа на стандартный эйнваген, то есть шанс, что водилу и не придется трогать. 
 
| Quote | 
| steering	-0.378 0.080 -0.500	0.000 -0.454 0.000	0.01	sphere 0.1 | 
 
 Сюда крепится руль и соответственно руки водителя.  
| Quote | 
| seat		-0.375 -0.320 0.000	0.000 0.350 0.000 | 
 
 Сюда наш афроамериканец кладет свою попку.  
| Quote | 
| pedals		-0.375 -0.370 -0.610 | 
 
 А сюда тянет ноги к педалям.  Можно еще дописать ниже 
 
| Quote | 
| shifter 0.000 0.000 0.000  | 
 
 ну координаты соответствующие, и сюда водила будет тянуть руку во время переключения передач.  
| Quote | 
cockpit_speed	-0.265 0.135 -0.600	0.000 0.000 0.000 0x00020037 2.2 -0.03 -3.0 1.5   cockpit_rpm	-0.357 0.135 -0.600	0.000 0.000 0.000 0x00020037 2.2 -0.00045 -1.5 1.5 | 
  Координаты стрелок спидометра и тахометра 
 А сюда будут крепится пружины и амортизаторы к кузову, по порядку: FL, FR, RL, RR (помним что это такое?) 
 
| Quote | 
;upper arms on chassis   slot		-0.490 -0.103 -1.146	0 0 0	501   slot		 0.490 -0.103 -1.146	0 0 0	502   slot		-0.500 -0.172 1.220	0 0 0	503   slot		 0.500 -0.172 1.220	0 0 0	504 | 
  Далее меняем положение колес (опять же если понадобится) 
 
| Quote | 
# FL wheel #   type		10.000 sphere	0.315   spring		0.290 0.100 0.050   wheel		-0.670 -0.630 -1.146	0.000 0.000 0.000	1.000 1.000 1.000 0.000   wheelbones   slot		0.000 0.000 0.000	0.000 0.000 0.000	101	; FL wheel   attach		0x00040200 1   slottype	101   slotdmgmode	0x00000004 | 
  вынос колеса (наружу/внутрь) 
 Высота колеса 
 Продольное положение колеса (вперед/назад) 
 Вместе с колесом так же меняют свое положение подвески. 
 Аналогично проделайте с другими колесами. 
 Вот и все, надеюсь ничего не забыл. Тутор по добавлению детали в игру так же есть на promods.us. 
 Есть еще физические модели, это те же 3д модели, детали, но которые как бы следуют по границам детали, в игре они отвечают за столкновения, т.е. определяют границы детали при столкновении. Можно и их исправить, но если ваша машина очень похожа на игровую, с которой делалась (в данном случае эйнваген) то можно оставить так, но по-хорошему надо бы и их нарисовать, учтите что при этом надо будет во всех скриптах сменить пути к 3д модели, т.к. они остались старыми со ссылками на эйнваген.