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

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

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

   Страница 12 из 15
На страницу: Пред.  1, 2, 3 ... 11, 12, 13, 14, 15  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал 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 , плз.
    Добавлено: 15:52 12-01-2005   
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

А вообще я вроде нашел где задаются названия моделей для станций и кораблей.
    Добавлено: 11:13 13-01-2005   
X-admiral
 100 EGP


Репутация: 7
Сообщения: 221
Откуда: Беларусь, Гродно
Зарегистрирован: 24.08.2004
Спасиб за инфу...Так напиши , что нашел ...
    Добавлено: 00:21 16-01-2005   
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А, но так и не прислал. Пришлите кто-нибудь.
    Добавлено: 12:04 17-01-2005   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
Blueboar :
Список найденных подпрограмм прислать не могу, так как у меня XT версии 2.1. Рыб обещал прислать 2.1А, но так и не прислал.

Очень извиняюсь, сегодня же вечером вышлю Я не при чем....

...

Выслал, 001.obj и 001.pch.
    Добавлено: 12:25 17-01-2005   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
X-admiral :
Спасиб за инфу...Так напиши , что нашел ...

Написал. Смотри здесь.
    Добавлено: 12:22 18-01-2005   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Ну так это... Почему обсуждение приостановилось? Расстроен
Мою статью кто-нибудь читал? Если читал, где комментарии,
комментарии на комментарии и так далее? Где новые идеи
и мысли?
    Добавлено: 10:37 15-02-2005   
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}
    Добавлено: 10:34 11-03-2005   
BB
 





Это я, Blueboar, не смог зарегиться

Ну так что Shaddie, как продвигается разбор скриптов? Я так понимаю сейчас когда известны все классы, подпрограммы, STRG и все остальное единственной проблемой остается их выполнение.

Как XT узнает когда какой скрипт запускать? Я так понимаю каждый скрипт вызывается в определенный момент времени, только вот в какой.

И еще - как насчет идеи называть объектами экземпляры классов, а объекты 002F - массивами?
    Добавлено: 13:07 15-03-2005   
Хищник
 170 EGP


Репутация: 12
Сообщения: 243
Откуда: Братск
Зарегистрирован: 19.04.2002
Ребята, я тут просмотрел всю тему, я почему-то к ХТ сердцем привязан, хочу спросить:
а все это поможет добавлять новые возможности в старую игру? например у DF имеется описание как присваивать себе корабль, а почему бы в игре не реализовать продажу некоторого устройства, с помощью которого можно было бы это делать, мне кажется с идеей намного интересней работать, а потом и играть..
Но вы всеравно молодцы.
_________________
будущее всегда рядом с нами...
    Добавлено: 11:24 21-03-2005   
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 – сегмент строк.
    Добавлено: 11:59 22-03-2005   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
Хищник :
...например у DF имеется описание как присваивать себе корабль, а почему бы в игре не реализовать продажу некоторого устройства, с помощью которого можно было бы это делать...
Почти все процедуры работы с товаром, по моему, находятся в exe-шнике, так что реализовать данную идею пока не возможно.
    Добавлено: 13:34 22-03-2005   
CheckerTwo
 550 EGP


Рейтинг канала: 4(90)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Есть 2 неизвестные команды 0053 и 0054. Чего делают - непонятно. Но встречаются обычно парами. Т.е. идет код, потом 0053, далее код, причем короткий и 0054. Как будто какие-то самафоры / критические секции.

Есть еще 005E - без параметров. Очень похожа на паскалевский case. Следом идет список адресов.
Иногда рядом с 005Е встречается 005F, которая чего-то подготавливает для этого case.

Кто-нибудь встречал?
    Добавлено: 11:59 29-03-2005   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
CheckerTwo :
Кто-нибудь встречал?
В obj файде XT я их не встречал, а мои мысли по их поводу я тебе отослал, посмотри в почте.

Где то Blueboar и DF потерялись Расстроен

Blueboar есть предложение еще раз сформировать полный список команд с подробным описанием и примерами.
    Добавлено: 12:32 29-03-2005   
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
  ну и тд. и тп.


Выложил вот тут
    Добавлено: 13:31 29-03-2005   
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. Странная команда.

Файлик обновил. Посмотрите, может где чего не так, ляпов наделал.
    Добавлено: 11:26 30-03-2005   
X-admiral
 100 EGP


Репутация: 7
Сообщения: 221
Откуда: Беларусь, Гродно
Зарегистрирован: 24.08.2004
Насчет квестов : мож можно если их хотябы не изменять а задавать условия или частоту активации.
    Добавлено: 14:49 31-03-2005   
Пассажир
 

Пассажир




X-admiral:
Цитата:

И еще забыл написать : а можно как найти скрипт для отображения ufo ( он из нескольких body состоит ) ? Или с этим делом в exe ? Хотя раз ufo генерится случайно , то это наверное все ж в obj...

Похоже отображением объектов занимается exe-шник.
Ufo - это такой же кораблик, как и все другие. Объект, который обслуживает этот ufo имеет номер 08D1 (hex). Но в Obj-файле для ufo задается только текст, который выодится при просмотре ТТХ карабля (unknown...unknown...). Больше ничем не отличается. Может плохо смотрел, но в Obj пока не нашел как завязана модель корабля и тип корабля. Возможно это в exe прописано.
Цитата:
Насчет квестов : мож можно если их хотябы не изменять а задавать условия или частоту активации.

Да, все квесты сидят в obj. Но разбирать тягомотно. Вот хочу дополнить декомпилер, чтобы строчки текста из текстового файла подставлял на место вызова SE_ReadText. Тогда должно проще будет... Подмигиваю
    Добавлено: 16:28 31-03-2005   
CheckerTwo
 550 EGP


Рейтинг канала: 4(90)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Эт был я Улыбка)
    Добавлено: 16:30 31-03-2005   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Тутова я. Мне почему-то на почту так и не пришло ни одного подтверждения того, что вы чего-то пишете Расстроен

Щас посмотрю ваш дизассемблер и буду тестить Улыбка. Не возражаете если я как спец по асму займусь подпрограммами из Экзешника?
    Добавлено: 11:33 05-05-2005   
Канал X-Tension/X-BTF: «Структура данных X-Tension»
На страницу: Пред.  1, 2, 3 ... 11, 12, 13, 14, 15  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Спасибо всем. Нихрена не помогает.(Kyznechik)

  » Структура данных X-Tension | страница 12
Каналы: Новости | 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