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

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

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

   Страница 10 из 15
На страницу: Пред.  1, 2, 3 ... 9, 10, 11 ... 13, 14, 15  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X-Tension/X-BTF: «Структура данных X-Tension»
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Насчет классов в X-T. Выяснено точно, что номер SYMB, из которого вызывается подпрограмма указывается в последнем значении стека. И чаще всего это действительно так (в 002.OBJ только 3 SYMB и там перед командами 0057-0059 чаще всего стоит PUSH 1 или PUSH 2). НО! Встречаются и такие : PUSH 00000884; CALL …. Сегмента с таким номером нет и быть не может (очень много). Чтобы разобраться я поставил эту команду самой первой для выполнения. Не выполнилось. Но и ошибки не появилось (это кстати отдельная история. Ошибки X-T находит и в памяти строит сообщение об ошибке, но на экран не выводит. Может в LOG-файл. Кто-нибудь что-нибудь знает?). То есть в процессе выполнения программы должно встретиться что-то, что создаст сегмент SYMB номер 0884h. Естественно ни одной пока изученной командой этого не сделать. Поэтому это может быть одно из двух: или создание нового класса делает пока неизученная команда, либо какая-то подпрограмма ассемблера. Будем разбираться…
To Shaddie: Я так понимаю Story-File – это OBJ, а что тогда является Scene-File? В смысле какое у него название и в каком он каталоге лежит?
    Добавлено: 18:54 08-12-2004   
Hvala Mne
 880 EGP


Рейтинг канала: 4(54)
Репутация: 184
Сообщения: 1380
Откуда: где-то меж звезд
Зарегистрирован: 08.02.2001
Blueboar :
Насчет двух дней - это я погорячился. Все равно в процессе
разбора затыки будут и ваша помощь понадобится. Вот, например,
один из них:

Народ, чего-то я торможу в начале данной подпрограммы. В SYMB написано, что
- Подпрограмма начинается с C9260*2+8 = 1924C8 Hex
- Имеет название со смещением в STRG - 4C0F
- Ей нужно 6 стека.

Смотрим в STRG 4C0F = 19471, и в моем файле xt.rar видим, что это 'SetState'
Вот начало:

1924C8 0055-0006 MAKE 6 STACK
1924CC 0009 PUSH 00000000
1924CE 0001-0C1C PUSH 00000C1C
1924D2 0057-0000-4C0F CALL 'SetState' ??!
1924D8 002C POP

Видно, стека и правда 6, но посмотрите на команду CAll! Она переходит на
подпрограмму со смещением STRG 4C0F, то есть, опять на SetState! Получается,
SetState зацикливается?
А потом смотрю в SYMB и вижу несколько подпрограмм для данного смещения
в STRG, то есть несколько 'SetState'!
1) По смещению 000B2E68
2) По смещению 000BBAC7
3) По смещению 000C9260
4) По смещению 000C9C142
5) По смещению 000C9FCB
И еще куча таких! Это потому, что в файле куча сегментов 'SYMB'. В них
судя по всему подпрограммы могут быть одинаковые (по названию), но начинающиеся
с разных мест и, видимо, чем-то различающиеся. Для интереса я посчитал количество
данных сегментов (видимо сказалась статистика Shaddie Улыбка ), их оказалось 177 штук.
Ни с одним числом Shaddie не совпало Расстройство. Я так предполагаю, это 177 действий для X-T,
для которых могут потребоваться скрипты, то есть в каждой группе SYMB есть одна
главная подпрограмма, вызываемая при некоторых параметрах?
И самое главное: Как называется моя подпрограмма теперь понятно - 'SetState',
так как такое смещение есть только в одном сегменте SYMB. Только вот куда она переходит,
если подпрограмм с таким смещением в STRG - куча?


КС это родственник С++, а там есть такая штука, как наследование.
_________________
скромный подданный Королевства Боронов
    Добавлено: 19:00 08-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
To HvalaMne: В XT скрипты есть, если откомпилированные в OBJ скрипты тоже называть скриптами. Хотя, естественно, самих скриптов (исходников) там нет.
To YogSagot: Ну так присоединяйся. Как сказал DF ставишь брикпоинт на 004018B2 (по моему так) и разбираешь команды интерпретатора скриптов. Я ранее приводил список известных команд, было известно далеко не все. Список конечно пополнился, но до завершения еще далеко. Какие данные используются подпрограммами я уже писал, но, естественно, это данные не все. Кстати, есть небольшие изменения:
По адресу 005290EC находится, как я сказал указатель на разные данные по сегментам OBJ:
$+08 Указывает на слово 'STO2' (на 8 меньше $+14)
$+14 Указывает на первые данные STO2
$+1C Длина STO2 в словах
$+20 Указывает на первые данные STRG
$+24 Длина STRG в байтах
$+28 Длина сегмента OBJ3
$+2C Ну, это отдельная история, про это я уже говорил
$+30 Состоит из двух слов – длина VARS и длина SYMB
$+3C Указывает на первые данные SYMB
$+40 Указывает на первые данные VARS
$+1D8 Длина всех сегментов, описываемых в $+2C (смотри более ранние посты)
$+228 Время создания скрипта (берется из CTIM)

Кроме того, вы обращали внимание, что данные в скриптах идут в «человеческом» виде – например 0055 означает 0055, а не 5500. Так вот, перед выполнением скрипта все данные переворачиваются (вплоть до длин сегментов) а потом читаются обычным MOV’ом. Зачем? Я понимаю, если от руки, как мы, писать, приятнее. А если они компилятором все это компилят, ему то какая разница? Если так не делать быстрее ведь будет?
    Добавлено: 19:18 08-12-2004   
DF
 300 EGP


Рейтинг канала: 5(118)
Репутация: 47
Сообщения: 478

Зарегистрирован: 06.09.2003
Так нужен нам компилятор/декомпилятор obj или нет? Если нет то зачем дальше команды исследовать, чтобы карту поменять того что есть уже достаточно.

Цитата:
Помню была инфа, что при запуске экзешника ему можно ключом подцепить дополнительный файл с квестами, соответственно если бы удалось найти то место где лежат квесты и разобрать его структуру, то можно было бы делать отдельные файлы с квестами.

Я же уже писал, все о ключе –location написано тут: http://www.elite-games.ru/conference/viewtopic.php?t=17760
Добавить дополнительный obj нельзя, можно только заменить оригинальный.
Цитата:
Вы бьетесь головой в открытую дверь. В разделе квесты есть примеры квестов.
http://www.egosoft.com/x/questsdk/index.asp

Это может для тебя она открытая, а мне предложили ввести логин и пароль. Да и что толку от исходников квестов если компилятора нету. Если бы там вообще ВСЕ исходники были, тогда может был бы какой толк, а только квесты – не интересно.
Цитата:
Так вот, перед выполнением скрипта все данные переворачиваются (вплоть до длин сегментов) а потом читаются обычным MOV’ом. Зачем?

По всей видимости за тем же, зачем и STRG зашифровали – заняться было больше нечем. Если бессмысленные/нерациональные команды в obj еще можно объяснить неоптимальностью компилятора, то это никакого логического объяснения не имеет.
То Blueboar: не знаешь, зачем нужен сегмент PTCH? Вроде какие-то адреса там.
_________________
По моему так.
    Добавлено: 22:03 08-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
To DF: Еще бы! Разбор команд нужен обязательно и компилятор/декомпилятор тоже. Если даже Shaddie или кто-нибудь еще будет против, я обоими руками за.
Насчет PTCH - не знаю, но думаю это от слова Patch, то есть
чтобы что-то исправить уже после написания скрипта.
Если этого уже достаточно, чтобы нарисовать карту, то можно же еще изменять поведение AI как в X2.
А у тебя как с командами - ни одной больше не узнал? Особенно интересуют 003C, 0058 и 0059, а также как создать новый класс для подпрограмм (или как игра находит класс с несуществующим номером)
    Добавлено: 08:41 09-12-2004   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
Blueboar :
Сделано еще одно открытие. Я узнал, зачем нужен файл PCH (например 001.PCH)…

По поводу 001.PCH ты прав. Я то же думаю, что он нужен только при отладке, по крайней мере, когда я увеличивал область STO2 и записывал туда новые данные глюков не было. Правда этому файлу есть еще одно применение: с помощью его можно узнать, сколько значений находится в стеке на начало подпрограммы.

Blueboar :
Подпрограмма называется "GetFixedValueFactor"

Начинается по offset 31C9A (файл 001.obj). Так вот в этой подпрограмме есть фрагмент скрипта (offset 31C9E-31DE9) который загоняет в стек данные по станции 125MW Shield Factory, причем для этой станции и ее кораблей не заданы координаты. Эта подпрограмма вызывается в двух местах (по крайней мере столько нашел): offset 941B8 и EBADC. Причем первый вызов происходит почти в конце подпрограммы отвечающей за загрузку данных карты при начале новой игры.
К стати эта подпрограмма, похоже, называется "SetGroupNotoriety".

Blueboar :
Вот подпрограмма ADD_125MW_FACTORY.

Ты описал последнюю версию.
Подпрограмма описана по трем адресам:
4D0FE -> offset 9A204;
5573A -> offset AAE7C;
78A54 -> offset F14B0.
Но с этим уже разобрались.

Blueboar :
Или должна быть некая таблица - какие классы какие наследуют и из каких вызываются...

Может каждая секция SYMB – это процедуры одного модуля? И тогда подпрограмма вызывается из того модуля в котором прописана текущая?

Кстати команда 0006 похожа на команду 0005, только она не записывает, а читает данные. Или я ошибаюсь?

Blueboar :
Я так понимаю Story-File – это OBJ, а что тогда является Scene-File? В смысле какое у него название и в каком он каталоге лежит?.

Scene-файлы это файлы с расширением .bod или .pbd (зажатый bod). Имели в виду файл 00749.bod. Он отвечает за вывод галактической карты. Если не ошибаюсь, то находится в папке cut.

CheckerTwo :
Хреновей трудно придумать. Завал на работе, плюс проблемы
дома. Я в ауте.

У меня то же завал на работе. Задница
    Добавлено: 15:04 09-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
To DF: Насчет секции PTCH. Ее структура очень простая (если считать, что это и правда патчи). После слова PTCH идет, соответственно число патчей, то есть дополнений к файлу. Далее все что я буду говорить повторяется для каждого дополнения.
Вначале 4 байта времени создания дополнения (по форме похоже на CTIM, я так предполагаю это время в секундах с 1970 года, так как получается как раз что-то около 30 лет), после чего еще 4 байта – число записей в данном патче. После этого идут записи по 8 байт, судя по всему это два адреса, вычисляемые как обычно – умножением на 2 и добавлением 8. Получаются два места в программе, но я так и не понял, как они связаны. Может два байта в первом смещении заменяются теми, что по второму? Таких записей по 8 байт столько, сколько записей в патче. Потом запись CTIM и количество повторяется для следующего патча, и так для всех.
    Добавлено: 15:26 09-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Нет, команды 0005 и 0006 абсолютно разные. Команда 0005 сохраняет в стеке слово, находящееся в стеке уровня Х, где Х – данные после команды.
Команда 0006 спарена с 002B, и они читают-пишут данные, правда неизвестно где, но точно ясно, что если есть команда 002B-4567, то после 0006-4567, прочитается то же самое, что было записано
Кроме того еще есть команды 0004-0029. Они читают и пишут переменные из секции VARS. Тут все проще. По крайней мере можно посмотреть в VARS, найти переменную с таким номером и узнать ее имя.
    Добавлено: 15:35 09-12-2004   
Hvala Mne
 880 EGP


Рейтинг канала: 4(54)
Репутация: 184
Сообщения: 1380
Откуда: где-то меж звезд
Зарегистрирован: 08.02.2001
DF :
Это может для тебя она открытая, а мне предложили ввести логин и пароль. Да и что толку от исходников квестов если компилятора нету. Если бы там вообще ВСЕ исходники были, тогда может был бы какой толк, а только квесты – не интересно.


Зарегестрироваться не пробовал?
Компилятора для ХТ, да, нет. Исходников тоже, боюсь, не осталось. У Бернда могут быть, но насколько я его знаю, не даст. Попробуйте Бала Ги подоставать, думаю, сам я невнятно изложу ваши проблемы. Если с ним вежливо говорить, можно кое-что вытянуть. Хотя, не уверен, что он сохранял старые материалы.

BalaGi@egosoft.com
_________________
скромный подданный Королевства Боронов
    Добавлено: 17:24 09-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Выяснил кое-что насчет классов. Судя по всему все классы перечисляются в начале скрипта (в первой же подпрограмме по смещению 0001). Там что в 001 что в 002.OBJ идет последовательность помещения в стек-команды 002F, причем второй параметр, помещаемый командой 002F неизвестно куда скорее всего и есть номер класса, так как используемые в 001 и 002.OBJ там перечисляются (и куча других еще)
Кроме номера класса помещаются еще 2 параметра, неизвестно чего означающих, но может быть тех, которые определяют как загружать подпрограмму из данного класса.
Запись значений в стек команды 002F помещается несколько странно, но скорее всего для EGOSOFT это "стандарт"
Сначала записывается 2 значения - неизвестное и номер класса. Потом в стек заносится еще одно неизвестное (второе) - оно в стек 002F не заносится. Так повторяется много раз. Естественно после этого остается много пар значений Идентификатор 002F-Второе неизвестное значение. Скорее всего в конце данного скрипта есть команда поместить все эти пары опять в стек и получить ОДИН идентификатор, как было и с данными для секторов.
    Добавлено: 18:11 09-12-2004   
Shaddie
 556 EGP


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

Насчет сегмента PTCH.

Этот сегмент можно разделить на 7 секций:
1. Offset 1B6DAA: 3960 5329 0000 0518
2. Offset 1B9672: 3989 1CB4 0000 052C
3. Offset 1BBFDA: 399A 0385 0000 0515
4. Offset 1BE88A: 39A3 1029 0000 0512
5. Offset 1C1122: 39AB C26C 0000 0519
6. Offset 1C39F2: 39AD 4DBE 0000 051A
7. Offset 1C62CA: 3A3A 8B81 0000 0279
Offset 1C769A: начало области STRG

Секция состоит из заголовка и собственно данных.
Заголовок состоит из двух слов идентификатора (?) секции и двух слов определяющих количество записей в секции.

Например, для первой секции:
Идентификатор: 3960 5329
Количество записей: 0000 0518
Запись 1: 0001 54C3 0001 54EB
Запись 2: 0001 59B7 0001 59ED и т.д.

Сразу за последней записью одной секции идет заголовок следующей. Таким образом, адрес начала следующей секции можно определить как адрес начала текущей плюс размер заголовка (8 байт) плюс размер данных (количество данных * 8): 001B6DAA + 8 + 0518 * 8 = 001B9672.

Запись напоминает соответствие между двумя адресами.
Например для такого то патча заменить один адрес на другой.
У кого еще есть мысли по назначению записей сегмента PTCH и того что может означать первые 4 байта в заголовке секции?
Кстати сколько всего выходило патчей для XT и XBTF?
    Добавлено: 11:45 10-12-2004   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
DF :
Так нужен нам компилятор/декомпилятор obj или нет?
Blueboar :
Если даже Shaddie или кто-нибудь еще будет против, я обоими руками за.
Почему это я должен быть против Подозрение.? Я за.

Blueboar :
Итак, я сочинил прогу на Паскале, которая выковыривает весь STRG из OBJ файла…
Если не сложно то можно ли добавить вывод еще двух колонок:
1. Адрес подпрограммы (как он указывается при вызове команды 0031).
2. Смещение подпрограммы относительно начала файла.

To Blueboar & DF
Может составите полный список известных команд с их описанием?
    Добавлено: 11:48 10-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Народ, только не бейте меня ногами после того, что я вам скажу... Все подпрограммы в XT.RAR были отмечены неправильно. Все названия были верны, но положения нет (забыл написать что первая подпрограмма - со смещением 1, а поэтому и все остальные съехали). Не будете пинать? А я за это вам выложил вторую версию программы - теперь на WWW.Ссылки на narod.ru запрещены! Используйте пожалуйста другие, более нормальные хостинги.\XT2.RAR. ПРОВЕРЬТЕ ПЕРЕД ИСПОЛЬЗОВАНИЕМ!.. (перед использованием преобразуйте текст в таблицу, в качестве разделителя используя '#'. Я бы и сам так сделал, но у меня комп загрузился на минут десять чтобы сделать 100-листовую страницу. Если у вас тоже - можете пользоваться и так).
Отличия:
1) Теперь если подпрограмма вызывается в нескольких классах, они отражены все
2) Для каждой подпрограммы отражено
а) Ее смещение в скрипте (как просил Shaddie - то что надо писать после 0031, чтобы туда перейти) - только для скриптовых подпрограмм
б) Ее смещение в скрипте (в файле) - только для скриптовых подпрограмм
в) Ее смещение в 'STRG' - Для всего - переменных, ассемблерных и скриптовых подпрограмм
г) Количество необходимого стека - только для скриптовых подпрограмм

И еще. Очень много подпрограмм 'IsClass' и 'GetClass'. Может это как-то связано с созданием или изменением классов? Вроде в C++ такая же была, или я ошибаюсь?
Еще большое количество подпрограмм 'Create' и 'Destruct'. Это не могут быть конструкторы - деструкторы?
    Добавлено: 15:16 10-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
И еще! Пишите имя файла xt2.rar маленькими! буквами, так как narod.ru на UNIX, а у них есть разница - маленькие или большие!
    Добавлено: 16:23 10-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
С новой нумерацией подпрограмм все стало гораздо проще. Хотите узнать все файлы которые читает скрипт, кроме 44001.txt. Пожалуйте на подпрограмму Set по адресу 00030ebc (смещение в файле). Хотите посмотреть за что какие рейтинги дают? Пожалуйте на GetTitleFromTradeRating и GetTitleFromFightRating. Там просто сравнивается ваш опыт с необходимым для получения рейтинга и на выходе число от 0 до 20 (не помню точно) - чем больше, тем рейтинг больше. Кстати, судя по сообщениям, читы в игре тоже есть. К сообщениям обращаются ТОЛЬКО из одной подпрограммы. НО! Во-первых, она очень большая, а во-вторых, у нее много классов, а обращаются из нескольких.
Ну и в общем, так со всем остальным. Теперь разбираться с подпрограммами стало ГОРАЗДО проще за исключением нескольких вещей.
1) Как классы соотносятся друг с другом?
Известно ТОЧНО, что при вызове подпрограммы в последнем стеке указывается номер класса из которого она вызывается! Только иногда там записан такой класс, которого на момент начала выполнения скрипта нет.
2) Что означают неизвестные коды команд
3) Нужно разобраться с ассемблерными подпрограммами (благо начальное смещение для каждой подпрограммы есть)
4) Когда какие скрипты вызываются (если по приоритету, как в X2, то где он устанавливается?)
    Добавлено: 19:13 10-12-2004   
DF
 300 EGP


Рейтинг канала: 5(118)
Репутация: 47
Сообщения: 478

Зарегистрирован: 06.09.2003
Цитата:
Разбор команд нужен обязательно и компилятор/ декомпилятор тоже. Если даже Shaddie или кто-нибудь еще будет против, я обоими руками за.

Тогда:
Цитата:
Так что просьба действия всех команд описывать условными обозначениями, т.к. словами не всегда бывает понятно и подробно описывать какие параметры как используются, что берется/записывается в стек, как он изменяется после выполнения команды. Также желательно придумать командам мнемоники на манер ассемблера.

И вообще больше заниматься исследованием команд и структуры obj, и меньше скриптами т.к. в виде команд их будет разбирать гораздо проще, чем побайтно как сейчас.
Цитата:
А у тебя как с командами - ни одной больше не узнал?

Не, я сейчас этим не занимаюсь т.к. на это совершенно нет времени, но после нового года, а может даже и до время должно появиться в приемлимом количестве Улыбка
Цитата:
Насчет PTCH - не знаю, но думаю это от слова Patch, то есть
чтобы что-то исправить уже после написания скрипта.

Это конечно возможно, но совершенно непонятно нафига оно надо, ведь если ты например делаешь новую версию программы, ты ведь не пытаешься что-то исправить в exe, а просто изменяешь исходники и компилируешь. Хотя в эгософте все возможно...
_________________
По моему так.
    Добавлено: 20:45 10-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Да… Shaddie предлагает придумать обозначения мне и DF, а DF – нам с Shaddie. Видно придумывать их придется все-таки мне…

0001 – 1 параметр – Сохраняет на стеке двойное слово. Старшее слово всегда равно нулю, а младшее – данным. Мнемоника: PUSH; 0001-5555 = PUSH 00005555
0002 – 2 параметра – Сохраняет на стеке двойное слово. Мнемоника: PUSH; 0002-5555-5555 = PUSH 55555555
0003 – 1 параметр – Абсолютно идентична 0001
0004 – 1 параметр – Прочитать переменную номера XX. Мнемоника: READVAR; 0004-0002 = READVAR [0002] (а вообще, если можно выковырять имя переменной из VARS, то можно и READVAR Sector_X, например)
0005 – 1 параметр – Сохранить на стеке двойное слово, находящееся в стеке уровня XX-1. Мнемоника: PUSH SP; 0005-0004 = PUSH SP[3]
0006 – 1 параметр – Прочитать слово неизвестно откуда под номером XX. Мнемоника – READ; 0006-0005 = READ [0005]
0007 – 0 параметров – Скопировать последнее значение стека. Мнемоника – PUSH [SP]
0008 – 0 параметров – Из номера объекта в стеке берет значение байта (слова? Двойного слова?) в положении второго стека и сохраняет их на стеке (эти два значения уничтожаются). Мнемоника – GETDATA.
0009 – 0028 – 0 параметров – Сохранить на стеке константы 0000-001F. Мнемоника – PUSH. 000A = PUSH 00000001
0029 – 1 параметр – Записать переменную номера XX значением стека. Мнемоника: WRITEVAR; 0004-0002 = WRITEVAR [0002], или имя переменной из VARS
002A – 1 параметр - Записать текущее значение стека в стек под номером XX-1, где XX – данные. Мнемоника – MOV. 002A-0005 = MOV SP[4], [SP]
002B – 1 параметр – Записать слово неизвестно куда под номером XX. Мнемоника – WRITE; 002B-0005 = WRITE [0005]
002C – 0 параметров – Извлечь значение из стека. Оно теряется. Мнемоника - POP
002D – 0 параметров - Берет из стека номер объекта (см. команду 002F), далее по адресу, адресуемому следующим значением стека, в данном объекте, записывает новое значение, равное третьему значению в стеке. Все три значения из стека теряются. Мнемоника - PUTDATA
002E – 1 параметр – Извлечь из стека несколько значений (в данных – количество). Мнемоника – POPX. 002E-0005 = POPX 0005
002F – Переменно - Последним значением в стеке является количество параметров. Записывает их (которые идут в стеке далее) куда-то (в недоступное для скрипта место), взамен выдает на стеке идентификатор, позволяющий их адресовать. Ими можно манипулировать путем команд 0008, 002D. Мнемоника – CREATEOBJ.
0030 – Переменно – Делает, судя по всему, то же самое, что и 002F (пока мы не узнаем обратное), только возвращаемые идентификаторы не совпадают. Мнемоника – CREATEOBJ2 (лучше придумать не могу, пока не узнаю точно, чем команды отличаются)
0031 – 2 параметра - Перейти на слово скрипта под номером XXXX (данные). Мнемоника – JMP. 0031-0000-4444 = JMP 00004444
0032 – 2 параметра – То же, что 0031, но переход если слово в стеке равно нулю. Мнемоника IF [SP]=0 THEN JMP … (THEN можно опустить)
0033 – 2 параметра - То же, что 0031, но переход если слово в стеке не равно нулю. Мнемоника IF [SP]<>0 THEN JMP … (THEN можно опустить)
0035 – 0 параметров - Возврат из подпрограммы. Мнемоника – RET
003C – 0 параметров – Получить идентификатор текущего выполняемого класса (ПРЕДПОЛОЖИТЕЛЬНО). Мнемоника – GETCLASSID
003D – 0 параметров – Сохранить на стеке FFFFFFFF. Мнемоника – PUSH FFFFFFFF
003E – 0 параметров – Сложить два значения в стеке. Мнемоника – ADD [SP], SP[1]
003F – 0 параметров – Вычесть два значения в стеке. Мнемоника – SUB [SP], SP[1]
0040 – 0 параметров – Умножить два значения в стеке. Мнемоника – MUL [SP], SP[1]
0041 – 0 параметров – Разделить два значения в стеке. Мнемоника – DIV [SP], SP[1]
0042 - 0 параметров – Получить остаток от деления двух значений в стеке. Мнемоника – MOD [SP], SP[1]
0043 – 0 параметров – Сделать логическое «ИЛИ». Мнемоника – OR [SP], SP[1]
0044 - 0 параметров – Сделать логическое «И». Мнемоника – AND [SP], SP[1]
0045 - 0 параметров – Сделать логическое «ИСКЛЮЧАЮЩЕЕ ИЛИ». Мнемоника – XOR [SP], SP[1]
0046 – 0 параметров – Если два последних значения стека равны нулю, сохранить на стеке 0, иначе сохранить 1. Мнемоника – IF [SP]=0 AND SP[1]=0 THEN PUSH 0 ELSE PUSH 1
0047 – 0 параметров - Если два последних значения стека равны единице, сохранить на стеке единицу, иначе сохранить ноль. Мнемоника – IF [SP]=1 AND SP[1]=1 THEN PUSH 1 ELSE PUSH 0
0048 – 0 параметров – Логически сдвинуть влево предпоследнее значение в стеке столько раз, сколько указывает последнее значение в стеке. Мнемоника – SHL SP[1], SP
0049 – 0 параметров – Логически сдвинуть вправо предпоследнее значение в стеке столько раз, сколько указывает последнее значение в стеке. Мнемоника – SAR SP[1], SP
004A – 0 параметров - Если A<=B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]<=SP[1] THEN PUSH 0 ELSE PUSH 1.
004B – 0 параметров - Если A>=B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]>=SP[1] THEN PUSH 0 ELSE PUSH 1.
004C – 0 параметров - Если A<B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]<SP[1] THEN PUSH 0 ELSE PUSH 1.
004D – 0 параметров - Если A>B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]>SP[1] THEN PUSH 0 ELSE PUSH 1.
004E – 0 параметров - Если A=B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]=SP[1] THEN PUSH 0 ELSE PUSH 1.
004F – 0 параметров - Если A<>B, возвратить в стеке 0, иначе 1. Значения сравниваемых величин теряются. Мнемоника IF [SP]<>SP[1] THEN PUSH 0 ELSE PUSH 1.
0050 – 0 параметров – Изменить знак числа в стеке. Мнемоника – NEG [SP]
0051 – 0 параметров – Если значение в стеке равно нулю, сохранить на стеке 1 иначе сохранить 0. Мнемоника – IF [SP]=0 THEN PUSH 1 ELSE PUSH 0
0052 – 0 параметров – Логически инвертировать значение в стеке. Мнемоника – NOT [SP]
0056 – 2 параметра – Подпрограмма абсолютно идентична 0002, только в файле OBJ такой командой записываются только смещения в STRG. Наверное изначально это были разные команды в исходных файлах. Потому мнемоника – PUSH.
0057 – 2 параметра – Перейти на подпрограмму по адресу в данных. Мнемоника – CALL. Адрес указан смещением в STRG. Потому если STRG не декодировать, то 0057-0005 = CALL [0005]. Или можно CALL SetSectorX если STRG известно.
0059 – 4 параметра – То же самое что 0057 но еще 2 параметра указывают точный адрес перехода. Предположительно чтобы выбрать нужную подпрограмму из множества классов. Мнемоника – CALL. Например CALL 00445677 [SetSectorY]
005A – 2 параметра – Перейти на подпрограмму ассемблера. Мнемоника – CALLASM. Пример – CALLASM SE_SetTexture.

Во всех этих изысканиях значения стека записываются как SP[1], SP[2], SP[3]… Самое первое значение стека – SP[0] обозначается как [SP].
    Добавлено: 10:24 12-12-2004   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
Blueboar :
Все подпрограммы в XT.RAR были отмечены неправильно.
Теперь ясно, почему процедуры так странно назывались (SetGroupNotoriety) Улыбка.
Blueboar :
Я бы и сам так сделал, но у меня комп загрузился на минут десять чтобы сделать 100-листовую страницу. Если у вас тоже - можете пользоваться и так.
Я преобразовал файл Blueboar в таблицу Excel. Удобно сортировать и не тормозит. Скачать можно отсюда (120Kb).
    Добавлено: 18:00 12-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Команды 0032 и 0033 описаны неправильно. Их нужно поменять местами
    Добавлено: 21:49 13-12-2004   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
В игре есть режим отладки. В этом режиме в главном меню появляется раздел Cheat, содержащее следующие меню: Cheat, Variables, Quests и Debug. Чтобы включить этот режим нужно в файле 001.obj по смещению (offset) 000DDB2D изменить значение 09 на 0A. После этого если начать новую игру станет доступно меню Cheat.

Что бы при начале новой игры у всех секторов установился признак посещения сектора, по смещению 00097E3D измените значение 09 на 0A.

Так же можно изменить координаты стартового сектора при начале новой игры. Координата X стартового сектора находится по смещению 000DDA91. Координата Y стартового сектора находится по смещению 000DDA99.
Например, если хотите начать игру с сектора Kindom End [0,0], необходимо по обоим адресам прописать 09 (0 + 9 -> hex).

Хотите начать игру с другим кораблем?
Есть три значения формирующие корабль:
1. Тип корабля – значение по смещению 000DE039 (1 байт): для TL должен быть 0A, для остальных 09.
2. Принадлежность корабля расе – значение по смещению 000DE03B (1 байт): 0A – Argon, 0B – Boron, 0C – Split, 0D – Paranid, 0E – Teladi, 0F – Xenon, 10 – Pirate.
3. Класс корабля - значение по смещению 000DE03D (1 байт): 09 – TL, 0A – TS, 0B - M0, 0C – M1, 0D – M2, 0E – M3, 0F – M4, 10 – M5.
Например, если хотите начать игру с кораблем Orinoco необходимо прописать следующие значения: 09, 10, 0E.

Изменив значение по смещению 000DE06D можно установить тип щитов: 09 – 1 MW, 0A – 5 MW, 0B – 25 MW, 0C – 125 MW.
Изменив значение по смещению 000DE06B можно установить количество щитов: 09 – 0, 0A – 1, …, 28 - 31.
Изменив значение по смещению 000DE07D можно установить тип пушек: 09 – Alfa IRE, 0A – Beta IRE, …, 0011 - Gamma HEPT.
Количество пушек определяется максимальным количеством слотов под оружие у корабля.

Так же можно изменить тип установленного оборудования (или товаров), но для этого требуется понимание структуры записи товаров. К примеру, изменив значение 28 по смещению 000DE091 на 23, то получите Jumpdrive вместо Boost Extension. Или изменив значение 1E по смещению 000DE0A4 на 1C, то получите Docking Computer вместо Tactical Navigation System.

Изменив значение 4A по смещению 000BD804, на 0A вы получите 100% вероятность захвата.
    Добавлено: 07:46 17-12-2004   
Канал X-Tension/X-BTF: «Структура данных X-Tension»
На страницу: Пред.  1, 2, 3 ... 9, 10, 11 ... 13, 14, 15  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Пил, пока соображал. Пока ехал - опять соображать начал. (Pastor Shlagge)

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