|
|
|
Канал X-Tension/X-BTF: «Структура данных X-Tension» |
|
|
X-admiral 100 EGP
Репутация: 7 Сообщения: 221 Откуда: Беларусь, Гродно Зарегистрирован: 24.08.2004 |
|
Shaddie : |
Не проверял, но если посмотреть код скрипта DisplayExplosion (отображение взрыва станции ?), то можно увидить, что в ней используется body-файл 505 (папка v) и scene-файлы 2098-2102, 2104 и 2105 (папка cut).
Модель, если я правильно понимаю, и есть scene-файл?
|
2 Shaddie :
А не мог бы ты исходя из шестнадцатиричного кода который грузит scene 2098 написать отрывок кода который бы грузил scene 500 , 4150 , 5000 ?
И подробнее насчет синтаксиса , чтобы я каждый раз не прсил тебя что-то делать , тоесть напиши отрывок кода и что там нужно изменять чтобы грузить другой номер scene , плз.
|
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
X-admiral : |
... отрывок кода который бы грузил scene 500 , 4150 , 5000 ?
... тоесть напиши отрывок кода и что там нужно изменять чтобы грузить другой номер scene , плз.
|
Изменяй значения, по ниже приведенным смещениям в файле 001.obj каким либо hex-редактором (например WinHex):
Смещение(offset)____Знач.__Bod-файл
000DF546-000DF547: 01 F9 505.bod
000DF5E0-000DF5E1: 08 38 2104.bod
000DF604-000DF605: 08 39 2105.bod
000DF628-000DF629: 08 32 2098.bod
000DF64C-000DF64D: 08 33 2099.bod
000DF670-000DF671: 08 34 2100.bod
000DF694-000DF695: 08 35 2101.bod
000DF6B8-000DF6B9: 08 36 2102.bod
Например:
000DF546-000DF547: 01 F4 500.bod
000DF5E0-000DF5E1: 08 38 2104.bod
000DF604-000DF605: 08 39 2105.bod
000DF628-000DF629: 10 36 4150.bod
000DF64C-000DF64D: 13 88 5000.bod
000DF670-000DF671: 08 34 2100.bod
000DF694-000DF695: 08 35 2101.bod
000DF6B8-000DF6B9: 08 36 2102.bod
А вообще я вроде нашел где задаются названия моделей для станций и кораблей.
|
|
|
X-admiral 100 EGP
Репутация: 7 Сообщения: 221 Откуда: Беларусь, Гродно Зарегистрирован: 24.08.2004 |
|
Спасиб за инфу...Так напиши , что нашел ...
|
|
|
Blueboar 125 EGP
Рейтинг канала: 2(12) Репутация: 20 Сообщения: 47 Откуда: Курган Зарегистрирован: 01.12.2004 |
|
Итак, все, что знал, записал по адресу http://www.Ссылки на narod.ru запрещены! Используйте пожалуйста другие, более нормальные хостинги./xt4.rar.
И еще - XT написан на Visual C++, так что можно попробовать найти стандартные процедуры Visual в коде XT (они на то и стандартные, что повторяются во всех программах). Попробовал найти и обнаружилось, что 60К из 600К кода они и составляют. Таким образом можно гораздо ускорить дизассемблинг программы. Список найденных подпрограмм прислать не могу, так как у меня XT версии 2.1. Рыб обещал прислать 2.1А, но так и не прислал. Пришлите кто-нибудь.
|
|
|
Рыб 1242 EGP
Рейтинг канала: 3(36) Репутация: 340 Сообщения: 7461
Зарегистрирован: 05.06.2001 |
|
Blueboar : |
Список найденных подпрограмм прислать не могу, так как у меня XT версии 2.1. Рыб обещал прислать 2.1А, но так и не прислал.
|
Очень извиняюсь, сегодня же вечером вышлю .
...
Выслал, 001.obj и 001.pch.
|
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
X-admiral : |
Спасиб за инфу...Так напиши , что нашел ...
|
Написал. Смотри здесь.
|
|
|
Blueboar 125 EGP
Рейтинг канала: 2(12) Репутация: 20 Сообщения: 47 Откуда: Курган Зарегистрирован: 01.12.2004 |
|
Ну так это... Почему обсуждение приостановилось?
Мою статью кто-нибудь читал? Если читал, где комментарии,
комментарии на комментарии и так далее? Где новые идеи
и мысли?
|
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
Blueboar : |
Ну так это... Почему обсуждение приостановилось?
Мою статью кто-нибудь читал? Если читал, где комментарии,
комментарии на комментарии и так далее? Где новые идеи
и мысли?
|
Времени не было осмыслить твою информацию.
Вчера посмотрел и вот первые несколько комментариев.
Blueboar : |
Она называется BuildObject и находится в классе Galaxy. Получается интересная ситуация. Есть такой класс GBODY, именно от него отходят все классы с тем, что можно создать в космосе (корабли, астероиды итп). То есть когда вам надо создать, например, астероид, вы вызываете BuildObject с объектом, описывающим астероид. Но так как сам BuildObject находится в Galaxy, то и ваш вновь созданный астероид будет иметь родителем Galaxy. Поэтому сначала Galaxy почти пустой класс – он заполняется позднее новыми классами. Поправьте меня, если я чего-то напутал в наследовании, но по-моему все так. Ей передаются всего один параметр – объект, созданный командой 002F.
|
Процедуре BuildObject действительно передается объект, созданный командой 002F. А вызывается эта процедура из процедуры BuildFromEditor в которой и создаются объекты класса SECTOR (они как раз и подчинены классу Galaxy). А все объекты созданные в процедуре BuildObject подчинены классу SECTOR (кроме товаров и кораблей охранения станций/кораблей – они подчинены создаваемому объекту). Такие объекты как ворота и текстуры космоса создаются в самой процедуре BuildFromEditor (смотреть нужно в самом конце: начиная со смещения 93B38).
Blueboar : |
Как обычно, кораблей "In Space" почему-то нет…
|
У станций могут быть только корабли "Landed". А корабли могут иметь корабли "In Space".
Смещение 0003337C PUSH 9 – начало проверки на корабли "In Space", далее
CALL EscortAddTo {STRG: 00000A73}
|
|
|
BB
|
|
Это я, Blueboar, не смог зарегиться
Ну так что Shaddie, как продвигается разбор скриптов? Я так понимаю сейчас когда известны все классы, подпрограммы, STRG и все остальное единственной проблемой остается их выполнение.
Как XT узнает когда какой скрипт запускать? Я так понимаю каждый скрипт вызывается в определенный момент времени, только вот в какой.
И еще - как насчет идеи называть объектами экземпляры классов, а объекты 002F - массивами?
|
|
|
Хищник 170 EGP
Репутация: 12 Сообщения: 243 Откуда: Братск Зарегистрирован: 19.04.2002 |
|
Ребята, я тут просмотрел всю тему, я почему-то к ХТ сердцем привязан, хочу спросить:
а все это поможет добавлять новые возможности в старую игру? например у DF имеется описание как присваивать себе корабль, а почему бы в игре не реализовать продажу некоторого устройства, с помощью которого можно было бы это делать, мне кажется с идеей намного интересней работать, а потом и играть..
Но вы всеравно молодцы.
_________________ будущее всегда рядом с нами... |
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
Blueboar : |
Ну так что Shaddie, как продвигается разбор скриптов?
|
Временно забросил. Добиваю редактор карт.
Blueboar : |
Я так понимаю сейчас когда известны все классы, подпрограммы, STRG и все остальное единственной проблемой остается их выполнение.
Как XT узнает когда какой скрипт запускать? Я так понимаю каждый скрипт вызывается в определенный момент времени, только вот в какой.
|
Все процедуры вызываются из exe-ника или из других процедур. Например, игрок выстрелил и попал по другому кораблю, тогда движок игры (exe-шник) вызывает соответствующую процедуру из obj (AttackedBy – для соответствующего типа корабля), та в свою очередь обсчитывает захват, наносимый урон, повреждение, рейтинг расы атакуемого и т.д. Далее происходит возврат управления движку игры. Другой пример: игрок вызвал меню (нажав какую-то клавишу) движок в таком случае выполняется процедура Create для этого меню, потом происходит возврат управления движку, далее при выборе пункта меню вызывается процедура Input ну и т.д.
Blueboar : |
И еще - как насчет идеи называть объектами экземпляры классов, а объекты 002F - массивами?
|
Согласен. Команда 002F на самом деле предназначена для упаковки и передачи массива данных через одно значение стека.
По поводу классов у меня есть следующая информация:
В obj есть следующие сегменты:
STO2 – сегмент кода.
CTIM – в нем одна пара подсегмента: SYMB - глобальные процедуры и VARS – глобальные переменные (доступны в любой процедуре по командам 0004 – READVAR и 0029 - WRITEVAR).
OBJ3 – в нем 176 пар подсегментов: SYMB – процедуры класса и VARS – переменные класса (доступны в любой процедуре этого класса по командам 0006 – READ и 002B – WRITE, для каждого объекта (экземпляра одного класса) хранится собственный массив значений этих переменных).
PATH – не понял для чего этот сегмент.
STRG – сегмент строк.
|
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
Хищник : |
...например у DF имеется описание как присваивать себе корабль, а почему бы в игре не реализовать продажу некоторого устройства, с помощью которого можно было бы это делать...
|
Почти все процедуры работы с товаром, по моему, находятся в exe-шнике, так что реализовать данную идею пока не возможно.
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 4(90) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
Есть 2 неизвестные команды 0053 и 0054. Чего делают - непонятно. Но встречаются обычно парами. Т.е. идет код, потом 0053, далее код, причем короткий и 0054. Как будто какие-то самафоры / критические секции.
Есть еще 005E - без параметров. Очень похожа на паскалевский case. Следом идет список адресов.
Иногда рядом с 005Е встречается 005F, которая чего-то подготавливает для этого case.
Кто-нибудь встречал?
|
|
|
Shaddie 556 EGP
Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004 |
|
CheckerTwo : |
Кто-нибудь встречал?
|
В obj файде XT я их не встречал, а мои мысли по их поводу я тебе отослал, посмотри в почте.
Где то Blueboar и DF потерялись
Blueboar есть предложение еще раз сформировать полный список команд с подробным описанием и примерами.
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 4(90) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
Shaddie:
Цитата: |
В obj файде XT я их не встречал, а мои мысли по их поводу я тебе отослал, посмотри в почте.
|
Да, я читал, спасибо... Ну и здесь спросил. Вдруг кто чего нового нарыл. Вот молчат-молчат, потом бац!! и скажут что-нибудь.
OBJ файл XBTF практически ничем не отличается от XT. Только секция не "OBJ3", а "OBJ2". В заголовке секций отсутствует третий параметр.
Цитата: |
есть предложение еще раз сформировать полный список команд с подробным описанием и примерами.
|
Да, неплохо бы. Заодно перепроверить порядок следования параметров.
Первая колонка - код команды, вторая число СЛОВ под параметры команды третья - формат параметров (word - 2 байта, long - 4 байта).
Код: |
$0001 1 push word
$0002 2 push long
$0003 1 push word
$0004 1 readvar word
$0005 1 push SP[word - 1]
$0006 1 read [word]
$0007 0 push SP[0]
$0008 0 get_from_array
$0009..$0028 0 push word
$0029 1 writevar word
$002A 1 mov SP[word - 1],SP[0]
$002B 1 write [word]
$002C 0 pop
$002D 0 put_to_array
$002E 1 popx word
$002F 0 create_array
$0030 0 create_object
$0031 2 jump long
$0032 2 if SP[0]<>0 then jump long
$0033 2 if SP[0]=0 then jump long
$0034 2 callind long
$0035 0 ret
$003A 0 make_object
$003B 0 destroy_object
$003C 0 get_class
$003D 0 push -1
$003E 0 add SP[0],SP[1]
$003F 0 sub SP[0],SP[1]
$0040 0 mul SP[0],SP[1]
$0041 0 div SP[0],SP[1]
$0042 0 mod SP[0],SP[1]
$0043 0 or SP[0],SP[1]
$0044 0 and SP[0],SP[1]
$0045 0 xor SP[0],SP[1]
$0046 0 if SP[0]=0 and SP[1]=0 then push 0 else push 1
$0047 0 if SP[0]=1 and SP[1]=1 then push 1 else push 0
$0048 0 shl SP[1],SP[0]
$0049 0 shr SP[1],SP[0]
$004A 0 if SP[0]<=SP[1] then push 0 else push 1
$004B 0 if SP[0]>=SP[1] then push 0 else push 1
$004C 0 if SP[0]<SP[1] then push 0 else push 1
$004D 0 if SP[0]>SP[1] then push 0 else push 1
$004E 0 if SP[0]=SP[1] then push 0 else push 1
$004F 0 if SP[0]<>SP[1] then push 0 else push 1
$0050 0 neg SP[0]
$0051 0 if SP[0]=0 then push 1 else push 0
$0052 0 not SP[0]
$0053 0 begin_critical ???
$0054 0 end_critical ???
$0055 1 setmem word
$0056 2 getvar long
$0057 2 call long
$0058 4 call58 long, long
$0059 4 call59 long, long
$005A 2 callasm long
$005E 0 switch SP[0]
|
2All:
С благословения Shaddie набрался храбрости сообщить Вам, что вышла первая бетта дизассемблера скриптов. Понимает "наследуемость переменных и процедур объектов". Генерит, примерно, вот такой код :
Код: |
; type
; TObj07FA = class(TObj07D7)
; variables
; dgo_DialogState;
;
; public
; procedure GetClass();
; procedure IsClass();
; procedure AttackedBy();
; end;
;
| TObj07FA.GetClass:
000A19F8: 0055 0001 | setmem 1
000A19FC: 0001 07FA | push 07FA ; 2042
000A1A00: 0035 | ret
000A1A02: 0009 | push 0
000A1A04: 0035 | ret
| TObj07FA.IsClass:
000A1A06: 0055 0003 | setmem 3
000A1A0A: 0005 0004 | push SP[3]
000A1A0E: 000A | push 1
000A1A10: 0001 07D7 | push 07D7 ; 2007
000A1A14: 0057 0000042F | call TObj07D7.IsClass ; 0000042F
000A1A1A: 0032 00050D18 | if SP[0]<>0 then jump L000A1A38
000A1A20: 0005 0004 | push SP[3]
000A1A24: 0001 07FA | push 07FA ; 2042
000A1A28: 004F | if SP[0]<>SP[1] then push 0 else push 1
000A1A2A: 0032 00050D18 | if SP[0]<>0 then jump L000A1A38
000A1A30: 0009 | push 0
000A1A32: 0031 00050D19 | jump L000A1A3A
000A1A38: 000A | L000A1A38: push 1
000A1A3A: 0035 | L000A1A3A: ret
000A1A3C: 0009 | push 0
000A1A3E: 0035 | ret
| TObj07FA.AttackedBy:
000A1A40: 0055 000B | setmem 11
000A1A44: 0009 | push 0
000A1A46: 0009 | push 0
000A1A48: 0001 0834 | push 0834 ; 2100
000A1A4C: 0059 0006EE1B 0000021A | call59 TObj0834.GetPlayer ; 0000042F
000A1A56: 0057 0000022F | call TObj07D9.GetSectorX ; 0000022F
ну и тд. и тп.
|
Выложил вот тут
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 4(90) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
Добавил разбор case. (команда 005E)
Генерится примерно вот такое:
Код: |
000082AA: 000A | push 1
000082AC: 004C | if SP[0]<SP[1] then push 0 else push 1
000082AE: 0032 00004158 | if SP[0]<>0 then jump L000082B8
000082B4: 002C | pop
000082B6: 0009 | push 0
000082B8: 005E | L000082B8: switch
000082BA: 0000415F | case jump L000082C6
000082BE: 000040E5 | case jump L000081D2
000082C2: 00000000 | case jump 00000008
000082C6: 0005 0006 | L000082C6: push SP[5]
|
Jump-ы вроде указывают на правильные адреса. Но непонятно для чего нужны были 0 адреса - фактически это переход на 0000008. Странная команда.
Файлик обновил. Посмотрите, может где чего не так, ляпов наделал.
|
|
|
X-admiral 100 EGP
Репутация: 7 Сообщения: 221 Откуда: Беларусь, Гродно Зарегистрирован: 24.08.2004 |
|
Насчет квестов : мож можно если их хотябы не изменять а задавать условия или частоту активации.
|
|
|
Пассажир
|
|
X-admiral:
Цитата: |
И еще забыл написать : а можно как найти скрипт для отображения ufo ( он из нескольких body состоит ) ? Или с этим делом в exe ? Хотя раз ufo генерится случайно , то это наверное все ж в obj...
|
Похоже отображением объектов занимается exe-шник.
Ufo - это такой же кораблик, как и все другие. Объект, который обслуживает этот ufo имеет номер 08D1 (hex). Но в Obj-файле для ufo задается только текст, который выодится при просмотре ТТХ карабля (unknown...unknown...). Больше ничем не отличается. Может плохо смотрел, но в Obj пока не нашел как завязана модель корабля и тип корабля. Возможно это в exe прописано.
Цитата: |
Насчет квестов : мож можно если их хотябы не изменять а задавать условия или частоту активации.
|
Да, все квесты сидят в obj. Но разбирать тягомотно. Вот хочу дополнить декомпилер, чтобы строчки текста из текстового файла подставлял на место вызова SE_ReadText. Тогда должно проще будет...
|
|
|
CheckerTwo 550 EGP
Рейтинг канала: 4(90) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004 |
|
Эт был я )
|
|
|
Blueboar 125 EGP
Рейтинг канала: 2(12) Репутация: 20 Сообщения: 47 Откуда: Курган Зарегистрирован: 01.12.2004 |
|
Тутова я. Мне почему-то на почту так и не пришло ни одного подтверждения того, что вы чего-то пишете
Щас посмотрю ваш дизассемблер и буду тестить . Не возражаете если я как спец по асму займусь подпрограммами из Экзешника?
|
|
|
|
|
|
Канал X-Tension/X-BTF: «Структура данных X-Tension» |
|