|
|
|
Канал X3: Terran Conflict »
Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки» |
|
|
vivere
|
|
нашла команду NOP, тоесть "ничего не делать" с опкодом 0C. иногда полезна если надо пропатчить обж и один байт остается лишним.
|
|
|
klop711 80 EGP
Рейтинг канала: 3(36) Репутация: 24 Сообщения: 41 Откуда: Minsk Зарегистрирован: 19.08.2007 |
|
почистил сегменты данных, разобрал структуры:
X3TC_asm_20091230.rar |
Описание: |
|
Имя файла: |
X3TC_asm_20091230.rar |
Размер файла: |
2.11 MB |
Скачано: |
820 раз(а) |
X3TC_c_20091230.rar |
Описание: |
|
Имя файла: |
X3TC_c_20091230.rar |
Размер файла: |
774.47 KB |
Скачано: |
784 раз(а) |
Последний раз редактировалось: klop711 (23:49 30-12-2009), всего редактировалось 1 раз |
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
vivere : |
нашла команду NOP, тоесть "ничего не делать" с опкодом 0C. иногда полезна если надо пропатчить обж и один байт остается лишним.
|
Ага, полезная команда. Кроме того, есть вероятность, что движек поддерживает множество команд, которые не используются кодогенератором ХС, а потому отсутствующих в dasm/xasm-е. Дизассемблинг exe-шника нужен, чтоб вытащить полный набор команд. Интересно б посмотреть
|
|
|
vivere
|
|
я как раз этим и занимаюсь. нашла еще несколько команд, но они реально безсмысленны. например прыгнуть на 5 байт вперед.
мечтаю найти режим ассемблерной вставки
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
vivere : |
я как раз этим и занимаюсь. нашла еще несколько команд, но они реально безсмысленны. например прыгнуть на 5 байт вперед.
|
Возможно, что команда предполагалась для организации циклов и обхода всевозможных условных/безусловных переходов... А еще что там есть?
|
|
|
vivere
|
|
команд там действительно очень много. намного больше чем в реально используется в обжах. я их не систематизировала, но на вскидку:
(числа надо проверить дебаггером)
AB jump $+6
B1 jump $+7
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
еще 2 команды:
0x08: pushf 0.0
0x09: pushf 1.0
|
|
|
klop711 80 EGP
Рейтинг канала: 3(36) Репутация: 24 Сообщения: 41 Откуда: Minsk Зарегистрирован: 19.08.2007 |
|
разбор всех команд смотрите в sub_496A60
/!\ коды там меньше на 1 т.к.: v3 = v8 - 1 и switch по v3
|
|
|
vivere
|
|
Именно эту функцию я и разбираю. Там еще есть одна интересная особенность: некоторые байты кода обжа не соответствуют ему же в памяти. во время загрузки в память программа не только разворачивает все переменные, но и изменяет некоторые команды. я предполагаю, что это происходит оптимизация часто встречающихся последовательностей команд.
..
Заметила баг компилятора в команде pushf.
пишу:
pushf 2000000000.0
после компиляции в файле x3story.lst строчка:
32 0018D0D5: 0A 41DDCD6500000000 pushf 2000000000.0
но в файле x3story.cod на этом месте:
0A0000000000000000
рассчитал то он правильно, а вот почему не записал - не понятно
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
vivere : |
Заметила баг компилятора в команде pushf.
пишу:
pushf 2000000000.0
после компиляции в файле x3story.lst строчка:
32 0018D0D5: 0A 41DDCD6500000000 pushf 2000000000.0
но в файле x3story.cod на этом месте:
0A0000000000000000
рассчитал то он правильно, а вот почему не записал - не понятно
|
Исправил. Новый файл ассемблера в первом посте. vivere - Спасибо!
Сорри за долгое исправление - коммандировки+отчеты...
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
DIMOSUS.X : |
Тоесть теперь будет работать полная песборка обжа ?
|
Ох, что-то тяжко движется...
Поотловил массу багов, больших и маленьких. То, что в X3R казалось неважным, в X3TC приводит к полностью нерабочему результату.
Как оказалось, число формальных аргументов функции должно строго соответствовать числу фактических. Число сие должно быть записано в таблицы SYMB и CLAS.
В результате пришлось отказаться от полной совместимости и ввести новую команду, заменяющую setmem <nstack>.
Новая команда enter <narg>, <nstack> генерирует эквивалентный setmem код, но первый параметр используется для занесения в таблицы числа формальных параметров.
После перекомпиляции игруха не вылетает, местами даже работает
Говорить о полностью рабочей версии пока рановато. Где-то что-то еще не так. Однако, патчить кусками уже можно. Вроде проблем не заметил.
Тут бы тестеров...
Обновленные версии - в первом посте.
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
Проблема оказалась проста, и я ее вроде даже как исправлял в одной из версий. Как и почему этот кусок выпал из проекта - не могу вспомнить...
команда switch <ncase1>, <ncase2> может иметь два варианта. Если первый параметр (ncase1) не равен 0, то команда сравнивает числа:
Код: |
L000015D2: switch 3, 0
.long L000015F3 ; 0
.long 53d, L00001576 ; 1
.long 231d, L00001549 ; 2
.long 356d, L000015A0 ; 3
|
Если второй параметр команды switch не равен 0, то выбор варинта производится сравнением строк.
Код: |
L0000E105: switch 0, 5
.long L0000E136 ; 0
.long S00002EC0, L0000DC98 ; 1 -- "player"
.long S00002E96, L0000DDEA ; 2 -- "sector"
.long S00002EC7, L0000DE6B ; 3 -- "sectors"
.long S00002EBB, L0000DF9F ; 4 -- "ship"
.long S00002ECF, L0000E000 ; 5 -- "ships"
|
Исправленный дизассемблер - в первом посте. Ассемблер такие конструкции понимает.
Вроде все работает. Летаю на перекомпиленных обжах.
|
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Ничего не пойму , как собрать дизассемблированный обж обратно. Какой файл ему нужно подсунуть ???? И вообще есть какие нибудь инструкции по разборке и сборки obj файлов, а то программы есть, описания каких-то команд есть, а как его собрать обратно нет.
Разобрал обж с помощью Дизассемблера - версия x04.08a на :
x3story.asm
x3story.def
x3story.err
x3story.out
x3story.pct
x3story.str
x3story.sym
x3story.var
Я так понял работать нужно с x3story.asm. Допустим я его изменил и... Подсовывая его Ассемблеру - версия x04.07a я никаких obj файлов не получаю, уже что только не подсовывал . Как мне обратно получить x3story.obj?
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (06:00 26-06-2010), всего редактировалось 1 раз |
|
|
Криптон 995 EGP
Рейтинг канала: 9(1038) Репутация: 164 Сообщения: 2665 Откуда: Москва Зарегистрирован: 05.04.2008 |
|
Мой совет:
положить x3story.asm в отдельную папку, где нет других файлов.
Скормить его xa_asm.exe.
В папке должны появиться x3story.cod, x3story.err и x3story.lst.
x3story.cod - это и есть скомпилированный obj, ему надо только расширение поменять.
Возможно, x3story.cod не появится - тогда в x3story.err будет список ошибок, помешавших компиляции.
|
|
|
YOYOMAN 71 EGP
Рейтинг канала: 2(21) Репутация: 1 Сообщения: 141 Откуда: Украина Зарегистрирован: 13.07.2010 |
|
Привет всем!!! Скажите что такое obj и как его редактировать.
А тоя в этом вопросе полный нуб.
_________________ Unreal Engine 4 |
|
|
YOYOMAN 71 EGP
Рейтинг канала: 2(21) Репутация: 1 Сообщения: 141 Откуда: Украина Зарегистрирован: 13.07.2010 |
|
Привет!!!! А как неигровые расы сделать игровыми??? Чтоб можна было использовать в скриптах.
_________________ Unreal Engine 4 |
|
|
YOYOMAN 71 EGP
Рейтинг канала: 2(21) Репутация: 1 Сообщения: 141 Откуда: Украина Зарегистрирован: 13.07.2010 |
|
klop711 : |
глюков вагон и маленькая тележка (пока это сырая альфа
|
Привет!! Скажи пожалуйста как разлочить неигровые расы??
_________________ Unreal Engine 4 |
|
|
DIMOSUS.X 997 EGP
Рейтинг канала: 8(921) Репутация: 188 Сообщения: 3252 Откуда: Vilnius/Minsk Зарегистрирован: 06.08.2008 |
|
К тому что ковыряют обж егософт хоть и с трениями, но кое-как привык. А вот за ехе еще можно влететь.
Дружеский пилотский совет - не стоит выкладывать такое на ЕГ.
добавлено спустя 2 минуты:
YOYOMAN : |
Привет!! Скажи пожалуйста как разлочить неигровые расы??
|
"Если бы я знал вопрос на этот ответ, я бы правил миром" (с)
Один из-законов Мерфи :пока сам не разберешься, ни кто не поможет.
_________________ Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
Последний раз редактировалось: DIMOSUS.X (23:04 18-07-2010), всего редактировалось 1 раз |
|
|
DNA78 423 EGP
Рейтинг канала: 9(1060) Репутация: 71 Сообщения: 1229 Откуда: Кыргызстан Зарегистрирован: 12.11.2008 |
|
Не компилируется файл x3story для версии X3TC v.3. Выдаёт следующие ошибки:
Cкрытый текст (кликните здесь для просмотра)
|
Использую Ассемблер версии x04.07a альфа и Дизассемблер версии 04.08a.
_________________ Очевидное-невероятное
Последний раз редактировалось: DNA78 (13:37 26-10-2010), всего редактировалось 1 раз |
|
|
CheckerTwo 550 EGP
Рейтинг канала: 6(486) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
DNA78 : |
Не компилируется файл x3story для версии X3TC v.3. Выдаёт следующие ошибки:
...
Использую Ассемблер версии x04.07a альфа и Дизассемблер версии 04.08a.
|
Хм. Интересно.
Это тот самый тип переменных, который был в Х2-Х3, но по каким-то причинам не использовался доселе в Х3ТС. А так как идентификаторы типов переменных изменились и проверить было не на чем, я заблокировал на всякий случай ".var".
0000 FFFFFFFF | 11 00000000 00000000 4C447672 | gs_DebugDump
жирным выделено поле типа переменной
В дизассемблере и ассемблере это я поправлю. Но интересно также и другое - во всех предыдущих сборках отладка была принудительно отключена. В объявлениях переменных стояло
.vint gs_DebugDump = -2147483648d ; = 80000000h
Вероятно забыли отключить при окончательной сборке.
PS: Пока я правлю ассемблер - попробуй вместо строки с "undefined" поставить то, что было раньше - .vint gs_DebugDump = -2147483648d
|
|
|
|
|
|
Канал X3: Terran Conflict ->
Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки» |
|