ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» X3TC Моддинг: obj-файлы и маленькие утилитки | страница 3 |
|
|
|
Канал 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), посравнивать.
|
|
|
SeT aka SettleR 300 EGP
Рейтинг канала: 3(49) Репутация: 94 Сообщения: 1253 Откуда: Третья планета от Солнца Зарегистрирован: 27.05.2005 |
|
Вопрос: как называется функция, отвечающая за кол-во десанта на корабле?
_________________ Ищу Белый Тезис |
|
|
MistR 80 EGP
Рейтинг канала: 5(197) Репутация: 29 Сообщения: 193 Откуда: Краснодар Зарегистрирован: 25.12.2008 |
|
Вопрос к тем, кто прошарил ОБЖ не в малом количестве...)
Скажите плиз, кто нить знает список прописанных игровых условий для выполнения анимаций в моделях? Например - опускание парковочного крюка на станциях при стыковке малых кораблей.
П.с. Заранее благодарен!
_________________ НЕТ - Читам!!!
Последний раз редактировалось: MistR (17:40 11-02-2011), всего редактировалось 1 раз |
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
SeT aka SettleR : |
Вопрос: как называется функция, отвечающая за кол-во десанта на корабле?
|
SHIP.GetMaxMarines ?
|
|
|
vivere 230 EGP
Рейтинг канала: 4(57) Репутация: 56 Сообщения: 171
Зарегистрирован: 17.02.2011 |
|
Заметила небольшой но неприятный баг в декомпиляторе: иногда он не видит ошибку стека. тоесть например команда условного перехода, имеющая стек равный 6, должна перекинуть на пару строчек выше, где стек равен 3. так как ошибка не видна, то приходится долго рассматривать собственный код вручную.
Также есть пожелание добавления одной фичи:
добавить в компилятор возможность сдвига переменных всех читающих/записывающих функций определенных классов, при их наследовании из какого-либо указанного класса, без полного перекомпилирования. Чтобы можно было добавлять новые переменные в классы, которые уже имеют наследников.
edit:
Хотелось бы также узнать, будет ли добавлена команда nop в де/компилятор. в данный момент приходится использовать запись ".byte 0ch"
Последний раз редактировалось: vivere (13:22 11-03-2011), всего редактировалось 1 раз |
|
|
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
Сейчас еще потестю немного...
|
|
|
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 раз |
|
|
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 раз |
|
|
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 раз |
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
vivere : |
в новой версии появился другой баг, выводит ошибку стека там где её нет
|
vivere, спасибо.
Немного по-оптимизировал.
Переписал трассировщик, добавил проверку стека при переходах от xjump.
Выбросил определение "функции/процедуры" (т.е. возвращает она результат в стеке или нет), как малоинформативное, но очень ресурсоемкое.
Дизассемблер в первом посте.
|
|
|
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 раз |
|
|
Whiskas 137 EGP
Рейтинг канала: 3(36) Репутация: 5 Сообщения: 139
Зарегистрирован: 28.04.2011 |
|
При каждой компиляции содержимое x3story.cod отличается, несмотря на то, что содержимое асма не менялось. В частности 4 байта в начале, а затем целыми участками в секции SYMB. Похоже на то, как будто связано с временем создания или хеша или...
Это вообще критично? А то хотелось бы и ручками поковырять потом, без полной пересборки.
|
|
|
Whiskas 137 EGP
Рейтинг канала: 3(36) Репутация: 5 Сообщения: 139
Зарегистрирован: 28.04.2011 |
|
Твою налево... Выдает ошибку на загрузке сохранки. Значит таки критична пересборка обжа даже если .asm не был изменен? Какой в этом смысл?!?! Несовместимость сохранений!
Хоть бы мануальчик выложили, а то я несколько задолбался прописывать десант на истребы в ориджин стори. Длина файла выросла на 22 байта, не знаю как отразится в будущем, но сохранки из версии 3.1 грузит и десант есть и мне плевааать!!))
Программеры, млин, все себе - ничего людям Ни мануалов, ни инструкции, ни примеров, думай сам, ага...)
За софт респект и большущее спасибо!
Последний раз редактировалось: Whiskas (23:48 10-05-2011), всего редактировалось 1 раз |
|
|
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 раз |
|
|
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 раз(а) |
|
|
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 |
|
|
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 раз |
|
|
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"
|
|
|
YOYOMAN 71 EGP
Рейтинг канала: 2(21) Репутация: 1 Сообщения: 141 Откуда: Украина Зарегистрирован: 13.07.2010 |
|
CheckerTwo : |
Значения некоторых идентификаторов можно посмотреть в файле 0001-L007.xml. Только они там все разбросаны.
|
Спасибо,єто всё я понаходил, но мне нужно понять что как узнать адреса расс типа:
L000077ХХ???
_________________ Unreal Engine 4 |
|
|
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;
};
}
|
|
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: ...может тебе еще и ключи от Прометея, где шершни лежат?
|
» X3TC Моддинг: obj-файлы и маленькие утилитки | страница 3 |
|