#1 11-09-2009 18:11

cutik
Registered: 11-09-2009
Posts: 24

GTA IV. помогите, пожалуйста, с путями

Здравствуйте. Я захотел сделать мод с новыми линиями метро (то есть туннели останутся те же, но поезда будут ходить по разному - одни только по центру, вторые из дюкса в бохан итд). Я знаю как менять координаты и уже сделал, для пробы, линию вокруг Алгонкина. Но вот какая проблема - при изменении количества строк в файле (я редактирую data/common/paths/TracksBronx.dat) игра виснет. А 853 строки мне явно мало, чтобы сделать новые линии. В файле есть номер маршрута (например в tracksbronx.dat это 851), и если написать новый маршрут после первого под другим номером, например 852 и дальше новый маршрут, игра не виснет, но и маршрут не работает.
На мапсе мне сказали, что надо править exe. Но как это сделать, я себе не представляю. Мне и нужно-то всего продублировать код с новым маршрутом... или что-то в этом роде...
Плиз, киньте какой-нибудь "ламерский" туториал или просто помогите запустить новый маршрут, если это не сложно. Спасибо.

Offline

#2 11-09-2009 21:08

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: GTA IV. помогите, пожалуйста, с путями

А 851 - это точно номер маршрута? Просто в СА, например, число в начале файла маршрута поезда обозначало количество точек маршрута. Также там было необходимо оставлять в конце файла пустую строчку.

Offline

#3 12-09-2009 07:46

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: GTA IV. помогите, пожалуйста, с путями

853 строки это ооочень жирно....можно чё хочешь проложить с таким количеством))


GIMS developer

Offline

#4 12-09-2009 15:01

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Спасибо! так и есть. Я изменил число и добавил строчку, и все работает.
А вот еще тогда два вопроса.
1. Можно ли активировать одновременно несколько независимых маршрутов? если записать их подряд в файле работает только первый.
и 2. Можно ли как нибудь изменить надпись "Вы находитесь на линии N, станция такая то" чтобы оно писало название линии?
2 3Doomer: да я теперь хоть сто тыщ этих строк могу сделать) благодаря этому форуму в целом и den_spb в частности

Last edited by cutik (12-09-2009 17:36)

Offline

#5 12-09-2009 18:58

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: GTA IV. помогите, пожалуйста, с путями

1. Можно ли активировать одновременно несколько независимых маршрутов? если записать их подряд в файле работает только первый.

Насчет ГТА 4 сказать не могу, но в ГТА СА каждый маршрут поезда записан в отдельном файле (всего их 4 - data\paths\tracks.dat, tracks2.dat, tracks3.dat, tracks4.dat).

2 3Doomer: да я теперь хоть сто тыщ этих строк могу сделать)

На количество точек должен быть лимит. В СА, например, маршрут на 1082 точки работает без замечаний, но если приблизить количество к 2000, то появляются различные нестабильности.

Offline

#6 12-09-2009 19:01

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Den_spb wrote:

Насчет ГТА 4 сказать не могу, но в ГТА СА каждый маршрут поезда записан в отдельном файле (всего их 4 - data\paths\tracks.dat, tracks2.dat, tracks3.dat, tracks4.dat).

Вот именно! В гта 4 так же. Видимо, формат путей поездов не изменился со сменой движка.
Так значит, нельзя добавить новый файл, или сделать несколько маршрутов в одном файле?

Offline

#7 12-09-2009 19:34

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: GTA IV. помогите, пожалуйста, с путями

скорее всего, нет


GIMS developer

Offline

#8 12-09-2009 19:52

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: GTA IV. помогите, пожалуйста, с путями

Можно. Но нужно делать .asi с обработкой данных треков (сейчас для них отведен фиксированный массив. Размер массива, не переписывая все функции, что с ним работают, поменять нельзя).

Offline

#9 12-09-2009 20:51

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

То есть, нужно написать скрипт, передающий координаты путей коду управляющему поездами? Или придется полностью переписать весь код, который не дает поездам сталкиваться, сажает нас внутрь на станциях, пишет название линии итд?

Offline

#10 12-09-2009 21:36

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: GTA IV. помогите, пожалуйста, с путями

Второе - проще. Большую часть кода можно не трогать. В идеале - нужно переписать три-четыре функции.
В принципе, если разбор ~10 килобайт кода вызывает затруднения, можно просто попроавить ~40 мест, где делаются обращения к этим адресам и переписать одну тривиальную функцию (12 строчек).

Основная проблема в том, что в одной структуре хранятся трэки и для поездов и для самолетов, и не всегда можно отделить мух от котлет.

В любом случае, начинать копаться стоит вот отсюда:
.text:00AC1D40     __readTrackFiles

Offline

#11 13-09-2009 15:40

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Это в script.img? Или в exe? сорри за ламерство, просто я только начинаю скриптить

Offline

#12 13-09-2009 17:53

kostay scr
From: Беларусь
Registered: 25-05-2007
Posts: 176

Re: GTA IV. помогите, пожалуйста, с путями

Пологаю что в exe, поскольку:
1. код из иды
2. какие тривиальные функции в скрипт.имг??:)


GTA VC - ЭТО НАСТОЯЩАЯ ГТА!

Offline

#13 13-09-2009 19:48

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

А какой прогой можно открыть exe?
Ps. еще раз сорри за тупые вопросы

Offline

#14 13-09-2009 20:51

PIT
Registered: 08-09-2008
Posts: 224

Re: GTA IV. помогите, пожалуйста, с путями

cutik wrote:

А какой прогой можно открыть exe?
Ps. еще раз сорри за тупые вопросы

olly debugger или IDA - вот самое лучшее  smile только вот олли дебагер весит 1 мб, а ида 75 .


100 постов - 27 августа;

Offline

#15 13-09-2009 21:08

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: GTA IV. помогите, пожалуйста, с путями

лучше не берись, с твоии познаниями там нечего делать))


GIMS developer

Offline

#16 14-09-2009 17:07

kostay scr
From: Беларусь
Registered: 25-05-2007
Posts: 176

Re: GTA IV. помогите, пожалуйста, с путями

3Doomer прав. Ассемблер тебе не скриптинг(знаю по личному опыту smile )


GTA VC - ЭТО НАСТОЯЩАЯ ГТА!

Offline

#17 14-09-2009 19:28

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Чтож делать? засада. И долго его учить? (ассемблер). Можно конечно что то сделать и с существующим лимитом, но линий там будет немного... и к тому же, поезда будут "мигрировать" с одной на другую.

Offline

#18 15-09-2009 09:52

PIT
Registered: 08-09-2008
Posts: 224

Re: GTA IV. помогите, пожалуйста, с путями

cutik wrote:

Чтож делать? засада. И долго его учить? (ассемблер).

Это зависит только от тебя, можешь сидеть днями и ночами, или раз в день по паре часов, или вообще на***н бросить это дело smile


100 постов - 27 августа;

Offline

#19 15-09-2009 13:23

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: GTA IV. помогите, пожалуйста, с путями

cutik wrote:

Чтож делать? засада. И долго его учить? (ассемблер). Можно конечно что то сделать и с существующим лимитом, но линий там будет немного... и к тому же, поезда будут "мигрировать" с одной на другую.

Вопрос некорректен. Зависит от того, что есть из базовых умений и сколько усилий хочется приложить.
Для меня, освоить новый ассемблер - порядка двух-трех часов (заглянуть в код, посмотреть в справочник на предмет архитектуры процессора, потом бегло пробежаться по именам команд). Но это для меня - я свободно читаю десятка полтора разных ассемблеров и вообще программирую более двадцати лет.

Если есть большое желание научиться разбираться в коде - это можно сделать за неделю.
(главное - читать правильную документацию и задавать правильные вопросы).

Чтобы оценить задачу в целом, можно сделать следующее:
  1) добыть ida 5.2 (torrents.ru в помощь)
  2) скачать мою свежую базу по IV: http://sannybuilder.com/forums/viewtopic.php?id=564
  3) открыть базу в ida
  4) нажать 'G' (появится окошко), ввести AC1D40

если увиденное вызывает суеверный ужас - забить на эту идею. Если нет - вооружаться книжкой по архитектуре x86 (самая лучшая - родной мануал от Intel) и задавать правильные вопросы.

Offline

#20 15-09-2009 22:13

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Ну, в общем, частично о чем-то можно догадаться, а о чем-то - нет. То есть понятно, что самое левое - это номер строки, затем идет команда, затем ее параметры. Понятно, что передо мной процедура от начала и до конца. Можно догадаться, что стрелочки - это переходы от одного куска кода к другому, хотя непонятна разница между красной, синей и зеленой стрелочками. И, наверное, где-нибудь есть полный список этих команд (например, push, cmp и jzn) с описанием, чего они делают?

Offline

#21 16-09-2009 10:37

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: GTA IV. помогите, пожалуйста, с путями

Хорошо.

Самое полное руководство по процессору находится здесь: http://www.intel.com/products/processor … /index.htm
В частности, volume 2 - очень подробное описание всех команд.
К сожалению, для новичка оно достаточвно сложное (если нет хотя бы общего представления, как работает процессор - разбираться с ним придется долго).

Есть много статей по ассемблеру начального уровня; начать можно с http://sannybuilder.com/forums/viewtopic.php?id=41
Еще полезно зайти в IDA в Options->General и поставить галочку Auto Comments

Стрелочки трех типов - это безусловные переходы (переход на другой адрес, который выполняется всегда; синие), условные переходы (переход, если выполняется какое-то условие; зеленые) и переход, если условие не выполняется (следующая команда после условного перехода; красные).

Впрочем, не будем терять лес за деревьями.
Наша задача - не просто разобрать ассемблер, а решить задачу с путями.
Посмотрим, как данный фрагмент выглядит на языке высокого уровня:

void CTracksManager::readTrackFiles () {
  if (m_trackData[0] == NULL)
    readTrackFile ("common:/data/paths/TracksQueens.dat", &m_trackData[0], &m_tracksSizes[0], 
        &_14D17A8[0], &_14D1BD8[0], &_14D27C0[0], &_14D1FD0[0], &_14D16B8[0], &_14D2398[0], &_14D1C10[0]);
  if (m_trackData[1] == NULL)
    readTrackFile ("common:/data/paths/TracksQueens2.dat", &m_trackData[1], &m_tracksSizes[1], 
        &_14D17A8[1], &_14D1BD8[1], &_14D27C0[1], &_14D1FD0[1], &_14D16B8[1], &_14D2398[1], &_14D1C10[1]);
  if (m_trackData[2] == NULL)
    readTrackFile ("common:/data/paths/TracksBronx.dat", &m_trackData[2], &m_tracksSizes[2], 
        &_14D17A8[2], &_14D1BD8[2], &_14D27C0[2], &_14D1FD0[2], &_14D16B8[2], &_14D2398[2], &_14D1C10[2]);
  if (m_trackData[3] == NULL)
    readTrackFile ("common:/data/paths/TracksBronx2.dat", &m_trackData[3], &m_tracksSizes[3], 
        &_14D17A8[3], &_14D1BD8[3], &_14D27C0[3], &_14D1FD0[3], &_14D16B8[3], &_14D2398[3], &_14D1C10[3]);
  if (m_trackData[4] == NULL)
    readTrackFile ("common:/data/paths/cablecar_northern.dat", &m_trackData[4], &m_tracksSizes[4], 
        &_14D17A8[4], &_14D1BD8[4], &_14D27C0[4], &_14D1FD0[4], &_14D16B8[4], NULL, NULL);
  if (m_trackData[5] == NULL)
    readTrackFile ("common:/data/paths/cablecar_southern.dat", &m_trackData[5], &m_tracksSizes[5], 
        &_14D17A8[5], &_14D1BD8[5], &_14D27C0[5], &_14D1FD0[5], &_14D16B8[5], NULL, NULL);
  if (m_trackData[6] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneOnGround1.dat", &m_trackData[6], &m_tracksSizes[6], 
        &_14D17A8[6], &_14D1BD8[6], &_14D27C0[6], &_14D1FD0[6], &_14D16B8[6], NULL, NULL);
  if (m_trackData[7] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneOnGround2.dat", &m_trackData[7], &m_tracksSizes[7], 
        &_14D17A8[7], &_14D1BD8[7], &_14D27C0[7], &_14D1FD0[7], &_14D16B8[7], NULL, NULL);
  if (m_trackData[8] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneInFlight.dat", &m_trackData[8], &m_tracksSizes[8], 
        &_14D17A8[8], &_14D1BD8[8], &_14D27C0[8], &_14D1FD0[8], &_14D16B8[8], NULL, NULL);
  if (m_trackData[9] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneInFlight2.dat", &m_trackData[9], &m_tracksSizes[9], 
        &_14D17A8[9], &_14D1BD8[9], &_14D27C0[9], &_14D1FD0[9], &_14D16B8[9], NULL, NULL);
  if (m_trackData[10] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneInFlight3.dat", &m_trackData[10], &m_tracksSizes[10], 
        &_14D17A8[10], &_14D1BD8[10], &_14D27C0[10], &_14D1FD0[10], &_14D16B8[10], NULL, NULL);
  if (m_trackData[11] == NULL)
    readTrackFile ("common:/data/paths/TracksPlaneInFlight4.dat", &m_trackData[11], &m_tracksSizes[11], 
        &_14D17A8[11], &_14D1BD8[11], &_14D27C0[11], &_14D1FD0[11], &_14D16B8[11], NULL, NULL);

}

Итак, мы превратили почти восемьсот байтов кода в 26 более-менее понятных строчек.
Что же мы в них видим?

Видим мы в них девять массивов (для двух из них, я понял, как они должны называться, для остальных - еще нет, поэтому воспользовался адресами в памяти). Массивы заполняются данными из файлов маршрутов.

В каждом массиве 12 элементов, шесть используются  для поездов (и фуникулера), шесть - для самолетов.
Размеры массивов фиксированы, поэтому, чтобы добавить дополнительные маршруты, их придется переносить внутрь .asi и править все ссылки на них.

Если все еще не очень страшно - то будет продолжение.

Offline

#22 16-09-2009 11:13

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: GTA IV. помогите, пожалуйста, с путями

"в суеверном ужасе перед Лисенером"


GIMS developer

Offline

#23 16-09-2009 13:49

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Да нет, в общем-то все понятно. А asi создается какой прогой? Как можно использовать данные из asi в exe?

Offline

#24 16-09-2009 14:23

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: GTA IV. помогите, пожалуйста, с путями

.asi - это самая обычная .dll, только переименованная (по историческим причинам).
Создавать ее можно в любой программе, которая умеет делать .dll (VisualStudio, Delphi, ...)

PS. продолжу чуть позже, когда нужно будет сделать в работе перерыв.

Offline

#25 18-09-2009 12:13

cutik
Registered: 11-09-2009
Posts: 24

Re: GTA IV. помогите, пожалуйста, с путями

Два вопроса.
1. Почему при открытии базы данных IDA не спросила путь к gtaiv.exe? Получается, если я нажму "сохранить", все изменения сохранятся - где? В файле базы данных? Вообще, что это такое - база данных IDA, и зачем это нужно? Наконец, где тут кнопка для компиляции кода, или как это правильно сказать, в общем "чтобы сделать exe обратно".
2. Это необходимо - делать asi? Ведь по идее, можно просто добавить пару новых массивов, организовать для них чтение из файла (как для существующих), и прописать ссылки на них... Поправь меня, если я ошибаюсь.

Offline

Board footer

Powered by FluxBB