Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » X3TC Моддинг: obj-файлы и маленькие утилитки | страница 3
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 3 из 12
На страницу: Пред.  1, 2, 3, 4 ... 10, 11, 12  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X3: Terran Conflict » Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки»
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
DNA78 :
Не компилируется файл x3story для версии X3TC v.3. Выдаёт следующие ошибки:
...
Использую Ассемблер версии x04.07a альфа и Дизассемблер версии 04.08a.


Добавил в дизассемблер и ассемблер директиву .var для переменных, тип которых в таблицах OBJ-а равен 0. Что этот тип означает - пока не понятно. При компиляции переменной назначается этот самый тип 0.
Обновил вложения в первом посте.

PS: Если отладка частично не заблокирована в 3.0 версии X3TC, наверное игруха медленнее должна работать... Можно попробовать собрать 2 версии OBJ-а с включенной (как есть) и выключенной (gs_DebugDump = -2147483648d), посравнивать.
    Добавлено: 11:55 04-11-2010   
SeT aka SettleR
 300 EGP


Рейтинг канала: 3(49)
Репутация: 94
Сообщения: 1253
Откуда: Третья планета от Солнца
Зарегистрирован: 27.05.2005
Вопрос: как называется функция, отвечающая за кол-во десанта на корабле?
_________________
Ищу Белый Тезис
    Добавлено: 18:27 23-01-2011   
MistR
 80 EGP


Рейтинг канала: 5(197)
Репутация: 29
Сообщения: 193
Откуда: Краснодар
Зарегистрирован: 25.12.2008
Вопрос к тем, кто прошарил ОБЖ не в малом количестве...)
Скажите плиз, кто нить знает список прописанных игровых условий для выполнения анимаций в моделях? Например - опускание парковочного крюка на станциях при стыковке малых кораблей.

П.с. Заранее благодарен!
_________________
НЕТ - Читам!!!

Последний раз редактировалось: MistR (17:40 11-02-2011), всего редактировалось 1 раз
    Добавлено: 09:10 04-02-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
SeT aka SettleR :

Вопрос: как называется функция, отвечающая за кол-во десанта на корабле?

SHIP.GetMaxMarines ?
    Добавлено: 00:05 11-02-2011   
vivere
 230 EGP


Рейтинг канала: 4(57)
Репутация: 56
Сообщения: 171

Зарегистрирован: 17.02.2011
Заметила небольшой но неприятный баг в декомпиляторе: иногда он не видит ошибку стека. тоесть например команда условного перехода, имеющая стек равный 6, должна перекинуть на пару строчек выше, где стек равен 3. так как ошибка не видна, то приходится долго рассматривать собственный код вручную.

Также есть пожелание добавления одной фичи:
добавить в компилятор возможность сдвига переменных всех читающих/записывающих функций определенных классов, при их наследовании из какого-либо указанного класса, без полного перекомпилирования. Чтобы можно было добавлять новые переменные в классы, которые уже имеют наследников.

edit:
Хотелось бы также узнать, будет ли добавлена команда nop в де/компилятор. в данный момент приходится использовать запись ".byte 0ch"

Последний раз редактировалось: vivere (13:22 11-03-2011), всего редактировалось 1 раз
    Добавлено: 21:37 09-03-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
vivere :
Заметила небольшой но неприятный баг в декомпиляторе: иногда он не видит ошибку стека. тоесть например команда условного перехода, имеющая стек равный 6, должна перекинуть на пару строчек выше, где стек равен 3. так как ошибка не видна, то приходится долго рассматривать собственный код вручную.

Да, не порядок. Хорошо бы посмотреть на пример кода. Что-то воспроизвести не получается.

vivere :
Также есть пожелание добавления одной фичи:
добавить в компилятор возможность сдвига переменных всех читающих/записывающих функций определенных классов, при их наследовании из какого-либо указанного класса, без полного перекомпилирования. Чтобы можно было добавлять новые переменные в классы, которые уже имеют наследников.

Фича конечно интересная, полезная, но. Я бы сказал, что это большое НО! Дело в том, что если добавлять/удалять переменные в классе, от которого наследуется дерево классов, то ассемблеру, чтобы исправить все индексы переменных во всех наследуемых классах, придется сначала дизассемблировать обж (пусть даже не полностью), отыскать все команды read/write, откорректировать их. Так что - почти полная перекомпиляция. Кроме того изменятся таблицы VAR, боюсь что после этого на старых сохраненках глючить будет.

vivere :
Хотелось бы также узнать, будет ли добавлена команда nop в де/компилятор. в данный момент приходится использовать запись ".byte 0ch"

Добавил nop, pushf 0.0, pushf 1.0
Сейчас еще потестю немного...
    Добавлено: 01:22 12-03-2011   
vivere
 230 EGP


Рейтинг канала: 4(57)
Репутация: 56
Сообщения: 171

Зарегистрирован: 17.02.2011
CheckerTwo :

Да, не порядок. Хорошо бы посмотреть на пример кода. Что-то воспроизвести не получается.

Эта функция, понятное дело, не имеет смысла.Я написала её специально для теста:
 Cкрытый текст   (кликните здесь для просмотра)
Код:
;
; === TextRestrict ==============================================
; procedure TextRestrict(arg1);
;
                               |      TextRestrict:
0018D2F8: 6E 000A              |    0            enter      1, 10d ; 0Ah
0018D2FB: 0D 0004              |    0            push       SP[3] ; arg1
0018D2FE: 0D 0005              |    1            push       SP[4] ; arg1
0018D301: 0D 0006              |    2            push       SP[5] ; arg1
0018D304: 0D 0007              |    3            push       SP[6] ; arg1
0018D307: 0D 0008              |    4            push       SP[7] ; arg1
0018D30A: 0D 0009              |    5            push       SP[8] ; arg1
0018D30D: 34 0018D32B          |    6            if SP[0]=0 then jump L0018D32B
0018D312: 0D 0009              |    5            push       SP[8] ; arg1
0018D315: 0D 000A              |    6            push       SP[9] ; arg1
0018D318: 34 0018D32B          |    7            if SP[0]=0 then jump L0018D32B
0018D31D: 0D 000A              |    6            push       SP[9] ; arg1
0018D320: 0D 000B              |    7            push       SP[10d] ; arg1
0018D323: 34 0018D32B          |    8            if SP[0]=0 then jump L0018D32B
0018D328: 0D 000B              |    7            push       SP[10d] ; arg1
0018D32B: 23 0008              |    8 L0018D32B: popx       8
0018D32E: 02                   |    0            push       1
0018D32F: 83                   |    1            ret

                                              .end


CheckerTwo :

Добавил nop, pushf 0.0, pushf 1.0
Сейчас еще потестю немного...

Огромнейшее спасибо!

Последний раз редактировалось: vivere (03:02 12-03-2011), всего редактировалось 1 раз
    Добавлено: 03:00 12-03-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Пофиксил немного, добавил новые команды (nop, pushf). В дизассемблере поправил определение несогласованности стеков команд (vivere - спасибо!). Небольшие оптимизации.

По настоятельной просьбе djkram сделал возможность правки секции строк.
Если атрибут секции STRG установлен ABS, но можно поправить стрку.
Удобно, если нужно поправить буквально несколько байт в строке без перекомпиляции всего obj-а. Например нужно, чтобы при выводе какой-либо строки вместо маленьких букв выводились заглавные.
Для примера:
Код:

           .title     test
           .radix     16d
           .loadobj   "x3story.obj"

           .section   strg, abs

; была такая строка
; 0001AC7E : \t\t<current_patch value=\"%d\" />\r\n
; слово Station заменим

$ = 0001AC7Eh
   .ascii   "\t\t<current_patch VALUE=\"%d\" />\r\n"
           .end


Действуют следующие ограничения:
1. адрес начала строки, задаваемый в примере командой $=0001AC7Eh, должен точно соответствовать началу строки в obj-файле. Адреса всех строк можно посмотреть в файлике с расширением .str
2. длина строки в патче должна быть не больше, чем в obj-файле. Если строка короче - дополняется нулевыми байтами. Увеличить длину - нельзя.

По просьбе djkram сделал возможным инициализацию глобальных и классовых переменных.
Код:

   .title tst_var
   .radix 10d
   .loadobj "tst_var1.cod"
   
   .section code, abs
   
.vint   TGlobal_3 = 101d

.classdef X_AUDIO
.vint   au_ErrorCount = 103d
.vint   au_IdleFaceState = 203d
.endclass X_AUDIO

   .end


Опять же, секция CODE должна быть с атрибутом ABS. Числовой идентификатор класса задавать не нужно. Он сам вытаскивается из обжа. Имена класса и переменной должны строго соответствовать тем, что нашел дизассемблер. Важно также, что бы у дизассемблера и ассемблера были одинаковые форматы вывода, например DEC - десятичный.

Ассемблер, дизассемблер в первом посте. Улыбка

Последний раз редактировалось: CheckerTwo (16:33 12-03-2011), всего редактировалось 1 раз
    Добавлено: 16:31 12-03-2011   
vivere
 230 EGP


Рейтинг канала: 4(57)
Репутация: 56
Сообщения: 171

Зарегистрирован: 17.02.2011
в новой версии появился другой баг, выводит ошибку стека там где её нет
 Cкрытый текст   (кликните здесь для просмотра)
Код:
;
; === TextRestrict ==============================================
; procedure TextRestrict(arg1);
;
                               |      TextRestrict:
0018D2F8: 6E 000A              |    0            enter      1, 10d ; 0Ah
0018D2FB: 0D 0004              |    0            push       SP[3] ; arg1
0018D2FE: 0D 0005              |    1            push       SP[4] ; arg1
0018D301: 34 0018D308          |    2            if SP[0]=0 then jump L0018D308
0018D306: 24                   |    1            pop
0018D307: 02                   |    0            push       1
0018D308: 83                   |    1 L0018D308: ret
;Error: function at addr = 0018D308 has corrupted phase stack (1 <> 1).


Последний раз редактировалось: vivere (12:26 14-03-2011), всего редактировалось 1 раз
    Добавлено: 03:46 14-03-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
vivere :
в новой версии появился другой баг, выводит ошибку стека там где её нет

vivere, спасибо. Улыбка
Немного по-оптимизировал.
Переписал трассировщик, добавил проверку стека при переходах от xjump.
Выбросил определение "функции/процедуры" (т.е. возвращает она результат в стеке или нет), как малоинформативное, но очень ресурсоемкое.
Дизассемблер в первом посте.
    Добавлено: 17:44 17-03-2011   
vivere
 230 EGP


Рейтинг канала: 4(57)
Репутация: 56
Сообщения: 171

Зарегистрирован: 17.02.2011
небольшое дополнение, которое неплохо бы включить в дизассемблер.
как известно, команда xjump обладает двумя аргументами и второй аргумент является смещением числовой переменной. было бы очень удобно, если бы комментарии показывали правильную переменную.
сейчас таблица выглядит так:
Код:
00004FFB: 78 000C 00000008     |    2 L00004FFB: xjump      12d, 8
00005002:    00004FE8          |    1            .long      L00004FE8 ; 0
00005006:    00004FD9          |    1            .long      L00004FD9 ; 1
0000500A:    00004FCB          |    1            .long      L00004FCB ; 2
0000500E:    00004FE8          |    1            .long      L00004FE8 ; 3
00005012:    00004FE8          |    1            .long      L00004FE8 ; 4
00005016:    00004FE8          |    1            .long      L00004FE8 ; 5

более удобные комментарии:
Код:
00004FFB: 78 000C 00000008     |    2 L00004FFB: xjump      12d, 8
00005002:    00004FE8          |    1            .long      L00004FE8 ; default
00005006:    00004FD9          |    1            .long      L00004FD9 ; 8
0000500A:    00004FCB          |    1            .long      L00004FCB ; 9
0000500E:    00004FE8          |    1            .long      L00004FE8 ; 10
00005012:    00004FE8          |    1            .long      L00004FE8 ; 11
00005016:    00004FE8          |    1            .long      L00004FE8 ; 12


Последний раз редактировалось: vivere (17:50 03-05-2011), всего редактировалось 1 раз
    Добавлено: 13:56 03-05-2011   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
При каждой компиляции содержимое x3story.cod отличается, несмотря на то, что содержимое асма не менялось. В частности 4 байта в начале, а затем целыми участками в секции SYMB. Похоже на то, как будто связано с временем создания или хеша или... Подозрение.

Это вообще критично? А то хотелось бы и ручками поковырять потом, без полной пересборки.
    Добавлено: 15:07 10-05-2011   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
Твою налево... Выдает ошибку на загрузке сохранки. Значит таки критична пересборка обжа даже если .asm не был изменен? Какой в этом смысл?!?! Несовместимость сохранений!

Хоть бы мануальчик выложили, а то я несколько задолбался прописывать десант на истребы в ориджин стори. Длина файла выросла на 22 байта, не знаю как отразится в будущем, но сохранки из версии 3.1 грузит и десант есть и мне плевааать!!))
Программеры, млин, все себе - ничего людям Гы-гы Ни мануалов, ни инструкции, ни примеров, думай сам, ага...)
За софт респект и большущее спасибо! Супер!

Последний раз редактировалось: Whiskas (23:48 10-05-2011), всего редактировалось 1 раз
    Добавлено: 23:44 10-05-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
vivere :
более удобные комментарии

Хорошо, немного разгребу текучку на работе и подравняю.

Whiskas T-Mech :
При каждой компиляции содержимое x3story.cod отличается, несмотря на то, что содержимое асма не менялось. В частности 4 байта в начале, а затем целыми участками в секции SYMB. Похоже на то, как будто связано с временем создания или хеша или... Подозрение.

Да, при каждой компиляции текущее время заполняет поля в VARS, там где в Х2-Х3R были имена переменных, и CLAS (тоже была ссылка на имя).
Вероятно сделано ES для того, чтобы сложнее было разбираться.

Whiskas T-Mech :
А то хотелось бы и ручками поковырять потом, без полной пересборки.

Ну можно и без пересборки. Обычно так и делают. Правят кусочки, которые не так работаю, как хотелось бы. После полной отладки - пересобирают.

Whiskas T-Mech :
Твою налево... Выдает ошибку на загрузке сохранки. Значит таки критична пересборка обжа даже если .asm не был изменен? Какой в этом смысл?!?! Несовместимость сохранений!

На счет смысла - сложно сказать. Может быть основная идея хранения и проверки времени была в корректном накладывании патчей друг на друга. Но так как механизм работы патчей в exe никто не разбирал, то это только мои домыслы. Улыбка
Кроме того, для X3TC мало кто ковыряет обжы. Так что ты первый, кто нашел этот косяк. Думаю, что надо в компилятор вернуть директиву принудительной установки времени компиляции. Может поможет в таких случаях. Ладно, подумаю.

Whiskas T-Mech :
Хоть бы мануальчик выложили, а то я несколько задолбался прописывать десант на истребы в ориджин стори. Длина файла выросла на 22 байта, не знаю как отразится в будущем, но сохранки из версии 3.1 грузит и десант есть и мне плевааать!!))
Программеры, млин, все себе - ничего людям Гы-гы Ни мануалов, ни инструкции, ни примеров, думай сам, ага...)

С мануалами и примерами действительно сложно. В основном из-за отсутствия свободного времени. Компилятор для Х3ТС мало отличается от Х2-Х3R, поэтому можно пользоваться инфой из этого топика. Система команд конечно поменялась. Ну так ЕГ для этого и есть, чтоб спрашивать! Улыбка

Последний раз редактировалось: CheckerTwo (09:23 12-05-2011), всего редактировалось 1 раз
    Добавлено: 09:23 12-05-2011   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
CheckerTwo :
С мануалами и примерами действительно сложно. В основном из-за отсутствия свободного времени. Компилятор для Х3ТС мало отличается от Х2-Х3R, поэтому можно пользоваться инфой из этого топика. Система команд конечно поменялась. Ну так ЕГ для этого и есть, чтоб спрашивать! Улыбка

Это хорошо конечно, вот только я имел ввиду готовый код. Асм не знаю просто Гы-гы Как пропихнуть, сам-то я догнал, вот только сразу после этого и мод вышел(вы знали! знали как! и слова даже не сказали! я стока времени угробил!). Ваши же его и сделали time of the truth. Впихнули кода на 10 кб, правда ещё изменили и вот этот хеш(CRC, время..?), пока непонятно зачем.

Совсем мельком просмотрел. Нашел десантов(я к ним не равнодушен Гы-гы) для отдельного корабля. В принципе можно уже выдирать готовый код и впихивать что нравится. Лишь бы предыдущие сохранки загрузились.
Может даже мануальчик подгоню для нубов, правда, у мене со секцией STRG траблы, одна-две буквы в названии новой функции всегда фиг знает какая. Дешифратор/шифратор нужен, а то бесит каждый раз ассемблить и сравнивать.

__________________________

Меня ток один вопрос пока мучает.
Цитата:
0018E160 43 4C 41 53 00 02 14 84 00 00 01 0C | CLAS...„....


Цитата:

0018D300 53 59 4D 42 00 00 0B 14 00 00 00 B1 00 00 0B 8D 00 00 05 36 | SYMB.......±......6


Вот зелёным пометил, это кол-во global функций(в секции SYMB) и объектов(или классов, в секции CLAS)
А красным - это что? Глянул в вашем моде, там они изменены, поигрался сам, пропихнул новый класс, чуть ни так изменю дизассеблер выдает критическую ошибку Подозрение.

__________________________
 Cкрытый текст   (кликните здесь для просмотра)
ps
И почему-то ещё в секции PTCH изменили. Если в оригинальном было так:
Цитата:
001AF5F0 50 54 43 48 00 02 48 14 00 00 00 15 48 C4 72 D9 PTCH..H.....HÄrÙ

То в моде так:
Цитата:
001B1B30 50 54 43 48 00 02 48 1C 00 00 00 15 48 C4 72 D9 PTCH..H.....HÄrÙ

Забавно, что здесь этот хеш, crc, md5 оставлен без изменений. В других местах 4D 6D 09 F0. Не врубаюсь пока ваще


ADDED LATER:
Нах, врубился, рассеянный был. Перечитал твой пост, CheckerTwo. Это реально как-то связано с версией. Случайно наткнулся на
Цитата:
InitPatchTable:
................................
00000B9F: 07 48C472D9 | pushd 1220834009d ; 48C472D9h
............
00000BAA: 0B 0001A180 | get_strg S0001A180 ; ; "v1.0.1"

В баню её, версию. И патчи тоже Супер! Эдитор в руки и напрямую код фигачить будем Супер!


Последний раз редактировалось: Whiskas (19:26 15-05-2011), всего редактировалось 4 раз(а)
    Добавлено: 16:05 15-05-2011   
YOYOMAN
 71 EGP


Рейтинг канала: 2(21)
Репутация: 1
Сообщения: 141
Откуда: Украина
Зарегистрирован: 13.07.2010
Разбираю функцию GetRaceLicenseSubtype(arg1) - это полицейски лицензии попросту:

 Cкрытый текст   (кликните здесь для просмотра)
Код:
; function  GetRaceLicenseSubtype(arg1);
;
GetRaceLicenseSubtype:
           enter      1, 1
           push       SP[3] ; arg1
           jump       L000077D9

L000077CA: pushb      26d ; 1Ah
           ret

L000077CD: pushb      27d ; 1Bh
           ret

L000077D0: pushb      28d ; 1Ch
           ret

L000077D3: pushb      29d ; 1Dh
           ret

L000077D6: pushb      30d ; 1Eh
           ret

L000077D9: xjump      5, 1
           .long      L000077F8 ; 0
           .long      L000077CA ; 1
           .long      L000077CD ; 2
           .long      L000077D0 ; 3
           .long      L000077D3 ; 4
           .long      L000077D6 ; 5

L000077F8: pushb      -1d ; 0FFh
           ret


ПОсле долгих раздумий я понял что 5 строк после jump L000077D9 - это привязка номерного ид из TWareT к определённой рассе, а именно к 5 расам Гы-гы
<номер>d и есть номерной ид ( отсчёт от 0 поэтому всё сдвигается на 1 назад), что соотвествует таким товарам:

    26d = SS_WARE_L_A или лицензия Аргона
    27d = SS_WARE_L_B - Боронская
    28d = SS_WARE_L_S - Сплитская
    29d = SS_WARE_L_P - Паранидская
    30d = SS_WARE_L_T - Теладийская


а вот это: L000077CA: -похоже адреса расс, в даном случаее аргона.

Следующая конструкция это видимо перчень адресов расс с сылками на их числовые значения (raw), выделено raw value , для 5 рас которые получили себе лицензию полиции, от 1 до 5 (1 = Аргон, и т.д.) 0 же просто возврат. (может быть это и тип лицензии просто порядковые номера, кто знает Зеваеца )
 Cкрытый текст   (кликните здесь для просмотра)

000077D9: xjump 5, 1
.long L000077F8 ; 0
.long L000077CA ; 1
.long L000077CD ; 2
.long L000077D0 ; 3
.long L000077D3 ; 4
.long L000077D6 ; 5

L000077F8: pushb -1d ; 0FFh


Но скажите где можно увидеть все адреса расс? Совсем запутался... Я к примеру хочу лицензию дать АОГ или Землянам, соотвествено после записи адреса в перечне внизу секции нужно писать либо 6 либо 17 (всего 19 расс: 6 шаблонов, 1 ИГРОК и 12 игровых ). ТАк прошу помощи в этом вопросе. Расстроен Рыдания. Рыдания. Рыдания.
_________________
Unreal Engine 4
    Добавлено: 01:39 16-05-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Whiskas T-Mech :
Это хорошо конечно, вот только я имел ввиду готовый код. Асм не знаю просто Гы-гы Как пропихнуть, сам-то я догнал, вот только сразу после этого и мод вышел(вы знали! знали как! и слова даже не сказали! я стока времени угробил!).

Не понял, что такое "готовый код"? Или ты думаешь, что vivere, DIMOSUS_X и другие разработчики TOTT пишут на С-подобном языке? Я не могу конечно со 100% вероятностью сказать, но полагаю что на ассемблере.
Whiskas T-Mech :
Ваши же его и сделали time of the truth. Впихнули кода на 10 кб, правда ещё изменили и вот этот хеш(CRC, время..?), пока непонятно зачем.

Ничего не понимаю...
Whiskas T-Mech :
Совсем мельком просмотрел. Нашел десантов(я к ним не равнодушен Гы-гы) для отдельного корабля. В принципе можно уже выдирать готовый код и впихивать что нравится. Лишь бы предыдущие сохранки загрузились.

При модификации обжей вероятность того, что будут работать старые сохраненки не велика. Этого можно добиться только правкой уже существующих функций, без добавления новых переменных и функций. Причем смещать функции тоже нельзя. В противном случае таблицы патчей, хранящиеся в секции PTCH, будут убивать рабочий код. Если делать полную перекомпиляцию, то тогда о совместимости с сохраненками вообще не может быть речи. Чтобы исключить сдвиг функций добавлять код можно только в конец секции CODE. Есть еще один вариант - если правится уже существующая функция, и размер исправлений не превосходит размера старой функции, то новый код можно "накладывать" на старый. Но и в этом случае тоже есть подводные камни. Чтобы не бороться с глюками, отловить которые практически не возможно из-за большого числа вариантов, все разработчики и говорят, что "мод не совместим" и необходимо начинать новую игру.
Whiskas T-Mech :
Может даже мануальчик подгоню для нубов, правда, у мене со секцией STRG траблы, одна-две буквы в названии новой функции всегда фиг знает какая. Дешифратор/шифратор нужен, а то бесит каждый раз ассемблить и сравнивать.

Что-то я не пойму как ты чего правишь...
Whiskas T-Mech :
Меня ток один вопрос пока мучает.
0018E160 43 4C 41 53 00 02 14 84 00 00 01 0C | CLAS...„....

0018D300 53 59 4D 42 00 00 0B 14 00 00 00 B1 00 00 0B 8D 00 00 05 36 | SYMB.......±...�...6

Вот зелёным пометил, это кол-во global функций(в секции SYMB) и объектов(или классов, в секции CLAS)
А красным - это что? Глянул в вашем моде, там они изменены, поигрался сам, пропихнул новый класс, чуть ни так изменю дизассеблер выдает критическую ошибку

Красным цветом - размер секции в байтах
Whiskas T-Mech :
И почему-то ещё в секции PTCH изменили. Если в оригинальном было так

Тут не подскажу. Возможно ты сравниваешь не с той "оригинальной" версией.
Whiskas T-Mech :
В баню её, версию. И патчи тоже Супер! Эдитор в руки и напрямую код фигачить будем Супер!

И все ж, ты про какой редактор? HEX что ли? Не пугай! Не уверен, что HEX-редактором можно что-то написать и не наделать массу ошибок.

Последний раз редактировалось: CheckerTwo (07:30 16-05-2011), всего редактировалось 1 раз
    Добавлено: 06:41 16-05-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
YOYOMAN :
Разбираю функцию GetRaceLicenseSubtype(arg1) - это полицейски лицензии попросту:
...
Но скажите где можно увидеть все адреса расс? Совсем запутался... Я к примеру хочу лицензию дать АОГ или Землянам, соотвествено после записи адреса в перечне внизу секции нужно писать либо 6 либо 17 (всего 19 расс: 6 шаблонов, 1 ИГРОК и 12 игровых ). ТАк прошу помощи в этом вопросе. Расстроен Рыдания. Рыдания. Рыдания.


В качестве аргумента функция GetRaceLicenseSubtype(arg1) получает идентификатор расы. Значения некоторых идентификаторов можно посмотреть в файле 0001-L007.xml. Только они там все разбросаны. Искать можно по ключевому слову "Racenames"
    Добавлено: 07:53 16-05-2011   
YOYOMAN
 71 EGP


Рейтинг канала: 2(21)
Репутация: 1
Сообщения: 141
Откуда: Украина
Зарегистрирован: 13.07.2010
CheckerTwo :
Значения некоторых идентификаторов можно посмотреть в файле 0001-L007.xml. Только они там все разбросаны.

Спасибо,єто всё я понаходил, но мне нужно понять что как узнать адреса расс типа:
L000077ХХ??? Совсем запутался... Совсем запутался... Совсем запутался...
_________________
Unreal Engine 4
    Добавлено: 10:41 16-05-2011   
CheckerTwo
 550 EGP


Рейтинг канала: 6(486)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
YOYOMAN :
CheckerTwo :
Значения некоторых идентификаторов можно посмотреть в файле 0001-L007.xml. Только они там все разбросаны.

Спасибо,єто всё я понаходил, но мне нужно понять что как узнать адреса расс типа:
L000077ХХ??? Совсем запутался... Совсем запутался... Совсем запутался...


Не, не так. В общем случае тебе не нужны эти L000077ХХ???
L000077ХХ??? - это метки, на которые выполняется переход командами передачи управления (jump, xjump, if-jump). Большинство команд, которые используются в ассемблере могут иметь метки. Метки - это любой идентификатор, начинающийся с буквы и содержащий буквы и цифры. Чтобы не выдумывать, дизассемблер формирует метки самым простым способом - первая буква L, затем текущий адрес команды. То, что аргонской лицензии досталась метка L000077CA - совершенно ничего не значит. Это случайность. Если что-либо поменять и перекомпилить исходник, то очень даже вероятно, что адрес сменится, сменится и имя метки.

Эта функция может быть представлена на С-подобном языке примерно вот в таком виде:

Код:

function GetRaceLicenseSubtype(int RaceId)
{
  switch(RaceId) {
    case 1: return 26; break;
    case 2: return 27; break;
    case 3: return 28; break;
    case 4: return 29; break;
    case 5: return 30; break;
    default: return -1;
  };
}
    Добавлено: 14:10 16-05-2011   
Канал X3: Terran Conflict -> Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки»
На страницу: Пред.  1, 2, 3, 4 ... 10, 11, 12  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Я мохнат!.. нет, не так. Я - магнат!! (Lancer в СтарВинде)

  » X3TC Моддинг: obj-файлы и маленькие утилитки | страница 3
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18