ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Структура данных X-Tension | страница 5 |
|
|
|
Канал X-Tension/X-BTF: «Структура данных X-Tension» |
|
|
glory_man
|
|
У меня все станции вообще стоят. Выработали все ресурсы и стоят. Но вездесущие гонеры шастають по всем секторам и энтими же вратами пользуются. Только вот врата на карте галактики никак не видны.
|
|
|
Blueboar
|
|
Народ, я тут решил проверить сообщение DF
о том, что в файле 001.obj есть скрипты.
Я рассмотрел гораздо большее число команд,
пришел к выводу, что весь файл 001.obj это
большой скрипт.
Вообще, результатов несколько страниц. Сейчас
в основном разбираюсь в вызове подпрограмм
ассемблера и определении точек входа в скрипт.
Само исследование лежит тут
www.Ссылки на narod.ru запрещены! Используйте пожалуйста другие, более нормальные хостинги.\x.zip (прямая ссылка,
на сайте ссылки нет)
Приглашаю энтузиастов продолжить исследования
blueboar_2@rambler.ru
|
|
|
Shaddie
556 EGP
      Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004
 |
|
glory_man : |
У меня все станции вообще стоят. Выработали все ресурсы и стоят.
|
Все станции – это все станции в одном или во всех секторах?
To Blueboar пошли на мыло, а то что с народа не качается.
|
|
|
Finist
1816 EGP
              Рейтинг канала: 4(83) Репутация: 391 Сообщения: 12170 Откуда: Рязань РОССИЯ Зарегистрирован: 25.12.2003
 |
|
Shaddie : |
а то что с народа не качается.
|
Опера не возьмёт, или IE или качалки заточенные под IE.
_________________ Про модераторов сказать можно много разного, вот только написать нельзя... |
|
|
Shaddie
556 EGP
      Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004
 |
|
To Blueboar
В архиве X.zip есть только один файл "Устройство данных на диске.doc". Документ интересный , но я думаю, это не то, что ты подразумевал под исследованием.
|
|
|
glory_man
|
|
Стоят все станции во всех секторах (или почти во всех - проверил в большинстве открытых - а налетал на открывахе много). Но это скорее всего из-за того что exe-шник у меня не той системы.
А в Аргоне Главном должны быть только одни врата? Это была самая заметная для меня перемена на карте в начале новой игры.
|
|
|
Shaddie
556 EGP
      Рейтинг канала: 6(438) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004
 |
|
glory_man : |
Стоят все станции во всех секторах…
|
Странно у меня вроде все нормально, правда, налетал немного - около 30 часов.
To All кто-нибудь еще смотрел?
glory_man : |
…а налетал на открывахе много…
|
А почему на открывахе? В Аргоне Главном не далеко от центра сектора весит Xperimental (неизвестный объект), можешь пересесть на него.
glory_man : |
Но это скорее всего из-за того что exe-шник у меня не той системы.
|
Гранаты у него не той системы.
Исходный файл 001.obj я брал для версии 2.1а. Если у тебя версия 2.1 или ниже, то странно, что вообще работает.
glory_man : |
А в Аргоне Главном должны быть только одни врата?
|
Да.
Изменений в Аргоне Главном больше нет, только добавил возможность купить в доке Salvage Insurance.
Обрати внимание на то, что производит солярка (ближайшая к западным воротам в секторе Стена)
А так же на завод альфа H.E.P.T. и торговую станцию там же.
|
|
|
Blueboar
|
|
Послал свое исследование Shaddie еще раз по мылу.
Кто не может скачать файл с народа, дайте адрес
почты, я вам закачаю.
Хотя, в принципе, если сильно захотеть, я могу
и сюда 5 страниц залить?
|
|
|
glory_man
|
|
У откывахи скорость больше. Я видел ХР, но в начале захотелось посмотреть на то, что стало с картой, на "новый" сектор OreBelt. Поэтому поменял бустер, проапргейдил скорость откывахи и помчался в OreBelt. Когда долетел до него ХР был еще где-то в стене. Ну и врата в Аргоне поразили - по привычке ломанул не глядя на карту в южные, а там ... .
Цитата: |
Гранаты у него не той системы.
|
О гранатах я не писал, но их подразумевал .
А так - вроде пользуюсь патчем XDron-a с этого сайта. Вот насчет версии - боюсь соврать - дома посмотрю. И вообще, может скинь свой exe-шник куда-нить для чистоты эксперимента.
Еще раз отмечу - врата в OreBelt есть, но на карте галлактики они никак не проявляются.
Солярку, завод и торговую станцию обязательно посмотрю дома.
Вот.!
|
|
|
BLY
|
|
2Blueboar:
В Вашем файле лежит какое-то "левое" исследование, к ХТ не
имеющее никакого отношения. Тем более к интерпретатору скриптов.
Цитата: |
Хотя, в принципе, если сильно захотеть, я могу
и сюда 5 страниц залить?
|
К чему это и зачем это исследование о формате данных на винте
на этом форуме? Прошу прощения, но непонятно.
Если у Вас есть список команд интерпретатора, то - велкам,
главное - что б по делу было.
|
|
|
Пассажир
|
|
Извините, архив я заменил вчера.
Попробуйте снова.
|
|
|
Blueboar
|
|
Никто не может выслать на мыло скрипты
001 и 002.obj от версии X-T 2.1.
А то у меня 1.1, хочу проверить, чем
отличаются.
А файл уже заменил. Теперь он действительно
про скрипты.
|
|
|
BLY
|
|
2Blueboar:
Цитата: |
А файл уже заменил. Теперь он действительно
про скрипты.
|
Увы, на сайте пока то же самое. Т.е. про винты...
|
|
|
Blueboar
|
|
Ну не знаю. У меня качает...
Можете дать адрес своего мыла, я пошлю
вам копию.
|
|
|
Blueboar
|
|
Ладно, не буду париться. Вот все, что я накопал:
Относительно данных в X-TENSION
Основанием для данного сообщения послужило сообщение DF от 27-10-2004, а также его фраза от 28-10-2004 «…мне показалось, что все приведенные здесь структуры тоже скрипты. Последовательно запихивают в стек данные, а потом все это перегоняется из стека еще куда-нибудь».
DF, ты даже не знаешь, насколько ты прав. Тогда бы не пришлось гадать относительно ZZZZ в новом секторе. Но все по порядку:
Сначала известные мне коды интерпретатора скриптов (те, которые есть у DF и свои) – курсивом выделены данные DF, в истинности которых я не уверен (что, впрочем, не означает, что они не верны)
Слово - Сколько слов данных - Что делает
0001 - 1 - Сохраняет на стеке двойное слово. Старшее слово всегда равно нулю, а младшее – данным
0002 - 2 - Сохраняет на стеке двойное слово
0005 - 1 - Сохранить на стеке двойное слово, находящееся в стеке уровня XX-1, где XX-данные.
0007 - 0 - Скопировать последнее значение стека (из одного значения сделать два)
0009
0028 - 0 - Сохранить на стеке значения 0000-001F
0029 - 1 - По адресу XX(данные) записать двойное слово из стека. Обратите внимание, XX адресует не слова, а двойные слова. Адреса отсчитываются от начала скрипта
002A - 1 - Записать текущее значение стека в стек под номером XX-1, где XX – данные. Текущее значение не теряется. (У DF было наоборот! – это делает команда 0005)
002B - 1 - Сохранить слово в специальном месте (типа стека, но другого)
002C - 0 - Извлечь из стека значение. Оно теряется.
002E - 1 - Извлечь из стека XX значений (XX-данные)
002F - Переменно - Последним значением в стеке является количество параметров. Записывает их (которые идут в стеке далее) куда-то (в недоступное для скрипта место), взамен выдает на стеке идентификатор, позволяющий их адресовать. Вот только команда «прочитать данные по идентификатору» пока не найдена.
0030 - 2 - Берет последние XXXX (данные) значений стека и выдает уникальный идентификатор (как 002Fh), только число параметров не задается в стеке, а содержится в команде. Идентификаторы, выдаваемые командами 002F и 0030 не совпадают.
0031 - 2 - Перейти на слово скрипта под номером XXXX (данные)
0032 - 2 - То же, что и 0031, но переход только если слово в стеке равно нулю
0033 - 2 - То же, что и 0031, но переход только если слово в стеке не равно нулю
0035 - 0 - Возврат из подпрограммы
003D - 0 - Сохранить на стеке FFFFFFFF
003E - 0 - Сложить два значения в стеке
003F - 0 - Вычесть два значения в стеке
0040 - 0 - Умножить два значения в стеке
0041 - 0 - Разделить два значения в стеке
0042 - 0 - Судя по всему, получить остаток от деления двух значений в стеке (неточно определено, возможно, что и нет)
0043 - 0 - Сделать логическое «ИЛИ» над значениями в стеке
0044 - 0 - Сделать логическое «И» над значениями в стеке
0045 - 0 - Сделать логическое «ИСКЛЮЧАЮЩЕЕ ИЛИ» над значениями в стеке
0046 - 0 - Если два последних значения стека равны нулю, сохранить на стеке 0, иначе сохранить на стеке 1 (не проверил, исчезают ли проверяемые значения)
0047 - 0 - Если хотя бы одно из последних двух значений стека не равно нулю, на стеке сохраняется 1, иначе 0
0048 - 0 - Сделать команду SHL [SP-1],SP над значениями в стеке
0049 - 0 - Сделать команду SAR [SP-1],SP над значениями в стеке
004A - 0 - Если A<=B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются.
004B - 0 - То же, что 004A, но условие A>=B
004C - 0 - То же, что 004A, но условие A<B
004D - 0 - То же, что 004A, но условие A>B
004E - 0 - То же, что 004A, но условие A=B
004F - 0 - То же, что 004A, но условие A<>B
0050 - 0 - Изменить знак числа в стеке
0051 - 0 - Если значение в стеке равно нулю, сохранить на стеке 1 иначе 0
0052 - 0 - Логически инвертировать значение в стеке
0056 - 2 - Взять по слову XXXX(данные) относительно начала скрипта слово и записать его в стек
0057 - 2 - Перейти на подпрограмму по адресу в данных
005A - ? - Перейти на подпрограмму ассемблера (правда, неизвестно какую. Известно лишь, что данные показывают смещение названия подпрограммы в области ‘STRG’ файла 001.OBJ (002.OBJ) – откройте его ближе к концу и вы найдете данную область. Проблема в том, что она зашифрована, и настоящие названия подпрограмм видно лишь под отладчиком. Если кто-то возьмется опознать вариант используемого шифра (а может быть и запаковки), я готов дать ему зашифрованный и расшифрованный вариант для сравнения.
|
|
|
Blueboar
|
|
Как отсчитывается адрес для команд перехода и чтения данных? Вы берете двойное слово, например, после команды 0031 (перейти на подпрограмму), умножаете его на 2 (так как команда 0031 адресует слова, а не байты) и добавляете 8 (связано с тем, что первые 8 байт в файле OBJ зарезервированы, наверное, под сигнатуру, которая показывает, что это и правда файл объектов)
Для особо жаждущих известности даю адреса начала подпрограммы ассемблера в интерпретаторе скриптов для каждой команды (искать в XTENSION.EXE)
0000 - Такой нет; 0010 - 00401B30; 0001 - 004018E0
0011 - 00401B50; 0002 – 00401910; 0012 - 00401B70;
0003 – 00401940; 0013 - 00401B90; 0004 - 00401970
0014 - 00401BB0; 0005 - 004019A0 - 0015 - 00401BD0
0006 - 004019D0 - 0016 - 00401BF0; 0007 - 00401A00;
0017 - 00401C10; 0008 - 00401A20 - 0018 - 00401C30;
0009 - 00401A50 - 0019 - 00401C50; 000A - 00401A70
001A - 00401C70; 000B - 00401A90 - 001B - 00401C90
000C - 00401AB0 - 001C - 00401CB0; 000D - 00401AD0;
001D - 00401CD0; 000E - 00401AF0 - 001E - 00401CF0;
000F - 00401B10 - 001F - 00401D10; 0020 - 00401D30
0030 - 00401F40; 0021 - 00401D50 - 0031 - 00401F70
0022 - 00401D70 - 0032 - 00401FA0; 0023 - 00401D90
0033 - 00401FF0; 0024 - 00401DB0 - 0034 – 00402040;
0025 - 00401DD0 - 0035 - 00402180; 0026 - 00401DF0
0036 – 00402230; 0027 - 00401E10 - 0037 - 004024D0
0028 - 00401E30 - 0038 - 004026D0; 0029 - 00401E50
0039 - 004027A0; 002A - 00401E80 - 003A - 004028D0;
002B - 00401EA0 - 003B - 00402A60; 002C - 00401EC0
003C - 00402B80; 002D - 00401ED0 - 003D - 00402BA0
002E - 00401EF0 - 003E - 00402BC0; 002F - 00401F10
003F - 00402BE0; 0040 - 00402C00 - 0050 - 00402E80;
0041 - 00402C20 - 0051 - 00402E90; 0042 - 00402C40
0052 - 00402EB0; 0043 - 00402C60 - 0053 - 00402EC0
0044 - 00402C80 - 0054 – 00403110; 0045 - 00402CA0
0055 - 0040312E; 0046 - 00402CC0 - 0056 – 00403170;
0047 - 00402CF0 - 0057 - 004031A0; 0048 - 00402D20
0058 - 004033B0; 0049 - 00402D40 - 0059 - 00403480
004A - 00402D60 - 005A - 004035B0; 004B - 00402D90
005B - 00403860; 004C - 00402DC0 - 004D - 00402DF0
004E - 00402E20 - 004F - 00402E50
ТЕПЕРЬ САМОЕ ГЛАВНОЕ: ДО НЕДАВНЕГО ВРЕМЕНИ Я ДУМАЛ, ЧТО В ФАЙЛЕ 001.OBJ (И В 002.OBJ) ЕСТЬ ДВА ТИПА ОБЪЕКТОВ – «ОПИСАНИЯ КАРТЫ» И «СКРИПТЫ». ТЕПЕРЬ ЖЕ Я УВЕРЕН – ЕСТЬ ТОЛЬКО СКРИПТЫ.
|
|
|
Blueboar
|
|
Не верите? Нужен пример? Пожалуйста. Цитата из сообщения от 06:13 27-10-2004 – «В общем случае формат записи координат XYZ выглядит следующим образом: 0002 YYYY YYYY 0002 ZZZZ ZZZZ 0002 XXXX XXXX, где YYYY YYYY - 4 байта, координата по оси Y; ZZZZ ZZZZ - 4 байта, координата по оси Z; XXXX XXXX - 4 байта, координата по оси X.»
Почему именно так? Очень просто! Сначала идет код команды – 0002. Смотрим: Это сохранить на стеке двойное слово. И действительно, идет двойное слово – координата Х, потом так же для Y и для Z. Что с ними делается дальше пока непонятно, но разберемся.
Далее, короткие формы. В том же сообщении указывается, что если координата равна 0, то можно написать 0009. Знаете почему? А посмотрите код команды 0009. Это значит записать на стеке 0!!! Вот поэтому она и используется. Но если вас прет, можете написать 0002-0000-0000.
Или когда координаты записываются одним байтом. Тогда используется код 0001. Как указано выше, он позволяет сохранять слово, заполняя старшее слово двойного слова нулями.
· Пойдем еще дальше. Знаете, почему иногда из числа нужно вычитать 9? Например, в приведенном в форуме примере по товарам для Argon Prime в конце указано 0017 002F 000A. 002F передает данные самой X-TENSION для хранения. И последнее слово в стеке она использует как число параметров.
· А команда «сохранить 0» имеет код 09, «сохранить 1» код 0А, и так далее. То есть код команды всегда на 9 больше самих сохраняемых данных. То есть, чтобы указать команде 002F, что у нас 14 объектов, мы должны сохранить число 14 на стеке. А для этого нужна команда 0017H!!. Вот поэтому-то все и больше на 9.
Теперь рассмотрим все, что написал Shaddie по порядку с новой точки зрения:
1. Обнаруженные мной ИС состоят из 12 или 14 байт: 00VV 00YY 00XX 000A [0001] 00ZZ 002F.
Объяснение: Последняя команда 002F передает данные X-TENSION, получая взамен идентификатор, чтобы не хранить большой объем данных. Последним (00ZZ) должно сохраняться число параметров. Судя по записи, их 4 слова (независимо от того, есть ли [0001] или нет, почему поймете позже) – 00VV, 00YY, 00XX и 000A.
Почему же Shaddie написал 00ZZ, а не 000D, что означает «сохранить 4 на стеке»? К тому же, в примере для Argon Prime там стоит 0022 – 19 параметров. Судя по всему, ИС начинается гораздо раньше, чем указал Shaddie и там есть еще какие-то данные.
Почему параметров 4, а не 5, если есть еще [0001], и что он означает? Объясняю – с помощью команд 0009-0028 можно сохранять на стеке числа от 0 до 31. Если данных больше (а для некоторых ИС видимо так и есть), используется команда 0001+значение, например 0001-0004 – сохранить на стеке «00000004»
2. Метка состоит из 6 байтов: 00XX 002F 00YY. XX - количество подчиненных объектов
Полностью подтверждает мою мысль. Только если объектов более 31, будет 0001 00XX 002F 00YY.
Относительно БДО для Free Argon Trading Station – Сначала с помощью команды 002F каждый товар заносится в базу данных и скрипту возвращается идентификатор, например:
0009 0017 000B 002F //Cloth Rimes
Заносим в стек два значения – 0 (0009) и E (0017). Командой 000B (занести в стек 00000002), указываем, что параметра 2. Командой 002F сохраняем их и получаем вместо двух параметров один – идентификатор.
Естественно, хранить 14 идентификаторов нерационально. Поэтому в конце встречаем команды:
0017 002F 000A
Командами 0017 002F мы записываем все 14 полученных идентификаторов и получаем еще один идентификатор. Таким образом, имея его, мы можем адресовать все товары для этой станции. Вот только я еще не нашел обратной команды – «взять идентификатор и занести для него в стек ранее сохраненные данные».
Команда 000A (записать в стек 1) скорее всего используется, чтобы скрипт не забыл, к чему относится данный идентификатор – к станции.
Скрипты используются в игре не только при генерировании секторов, а также при
· Загрузке
· Начале игры (вот эта самая загрузка секторов)
· При самой игре (а может алгоритмы поведения записаны также в виде скриптов?)
· При загрузке игры
Кстати говоря, при запуске новой игры читаются скрипты из 002.OBJ, а не из 001.OBJ. Судя по всему, в 001.OBJ записаны неизменные данные (положения станций, например), а в 002.OBJ – программы, типа «Показать мультик». А может быть, в нем записаны алгоритмы поведения кораблей и станций.
|
|
|
BLY
|
|
Блин, что ж вы раньше молчали!!
Цитата: |
Если кто-то возьмется опознать вариант используемого шифра (а может быть и запаковки)
|
Похоже там нет упаковки, потому как встречаются файлы obj,
с длинными последовательностями одинаковых значений. Хотя это
и не факт... Он большой этот список?
|
|
|
Blueboar
|
|
Да нет, не сильно. Щас запишу для примера байт
пятьсот от начала и пошлю. Пишите мыло,
кому нужно послать.
|
|
|
CheckerTwo
550 EGP
     Рейтинг канала: 4(90) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
 |
|
Кхм. Простите, а можно мне тоже ознакомиться со списком сиих
имен п/программ? Письмо отправил.
|
|
|
|
|
|
Канал X-Tension/X-BTF: «Структура данных X-Tension» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Есть такие два файла - ruki.sys и golova.sys. Очень настоятельно рекомендую иногда их юзать. (Shadow_Lynx)
|
» Структура данных X-Tension | страница 5 |
|