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

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

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

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


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

ПОДПРОГРАММУ ВЫЗЫВАЕМУЮ ПРИ ВХОДЕ В НОВЫЙ СЕКТОР!!!
Она проверяет всю инфу по нему, видимо его же и рисует,
проверяет необходимость всех квестов по рейтингу и
еще много чего делает.
По причине огромности подпрограммы меня может не
быть в форуме день или два. Так что не теряйте!

P.S. Ну и сами тоже за это время обсудите чего-нибудь...
    Добавлено: 18:13 06-12-2004   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
Кста, при стыковке со станцией подпрограмма, по идее, должна быть поменьше, но при этом блок касающийся квестов должен быть идентичен (по алгоритму, но возможно не по данным).
    Добавлено: 18:18 06-12-2004   
Blueboar
 125 EGP


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

Народ, чего-то я торможу в начале данной подпрограммы. В 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:32 06-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Зато теперь понятно, зачем команды 0058 И 0059. Они есть
тоже команды перехода на скрипт, но указывают одновременно
и смещение относительно начала скрипта, и смещение в STRG.
Они созданы чтобы однозначно выбрать из многих подпрограмм
с таким названием!
Зато теперь непонятно, чем они отличаются друг от друга...
    Добавлено: 19:37 06-12-2004   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
Скорее всего различаются по параметрам. В C++ можно задать хоть мильон функций в одной области видимости с одинаковыми названиями, но различающихся по количеству и(или) типу параметров, при вызове будет браться та, которая соответствует по параметрам. Точнее не при вызове, а при компиляции и в конечном бинарнике это будут ничем не связанные функции. Так же есть понятие области видимости и в разных таких областях можно задавать полностью идентичные функции, которые опять же - в конечном бинарнике будут ничем не связанными подпрограммами.
    Добавлено: 19:41 06-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
А у меня немного другие данные. И если я прав - ууу чего будит... Улыбка
Я думаю, что все SYMB кроме первого - ПАТЧИ! Это подтверждается и тем, что есть подпрограммы Pacth1 - Patch7, причем все располагаются в разных SYMB, кроме того первый SYMB самый большой (намного больше остальных).
Ну то есть, был оригинальный 001.OBJ (не удивлюсь, если даже остался от X-BTF. Не удивлюсь даже, если и в X2 такой же
с патчами (поправьте меня, если в X2 другой формат объектов
я в него не играл)). Потом поняли, что, например подпрограмма
YYY их не устраивает. Взяли, добавили ее к STO2 (а че мне
мешает туда дописать все что угодно, там же не написано
что означает каждый байт, там просто их собрание), потом
записали еще одну секцию VARS и SYMB где записали это новое
смещение и старое смещение в STRG. И все - X-TENSION работает
с новой подпрограммой. А СТАРАЯ ВИСИТ ПРОСТО ТАК!
А потом вдруг выяснилось, что старая была лучше, и при в
пропатченной подпрограмме нужно вызвать оригинальную. Нет
ничего проще - есть ведь команды 0058-0059. Там и название
и смещение указано - из любого патча можно данную подпрограмму
вызвать...
    Добавлено: 20:47 06-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Да, ребят, приплыли… Похоже все одинаковые подпрограммы и правда патчи. Чем это нам грозит? Объясняю на примере моей подпрограммы ‘SetState’. Я нашел 9 таких подпрограмм в различных областях ‘SYMB’. Девять не девяносто, потому я их все и проверил. Итак, чтобы было веселее, расскажу с последней версии, она самая новая, и, как я считаю, запускается первая (самый новый патч!)
Что должен делать новый патч (если он не может вносить изменения в программу а только дописываться к ней)? Само собой сначала он должен вызвать саму исходную подпрограмму, а потом, если нужно добавить чего-нибудь или подкорректировать ее работу в соответствии с новыми требованиями.
Так вот что есть в начале последнего патча этой подпрограммы.
196992 0055-0002 MAKE 2 STACK
196996 0009 PUSH 00000000
196998 0001-0C1C PUSH 00000C1C
19699C 0057-0000-4C0F JMP [SAME]
Что и требовалось доказать. Подпрограмма вызывает ТУ ЖЕ САМУЮ подпрограмму, НО БОЛЕЕ РАННЕГО ПАТЧА! Та отработает, НЕ ЗНАЯ, что уже есть более новый патч, после чего этот новый патч сделает еще кое-что (в данном случае он заносит нули в ячейки 1,6,7 командой 002B).
НО! Более ранний патч также вызывает еще более ранний Улыбка. Проникнитесь этим. Это пока второй случай, а ведь их восемь… Причем второй патч (с конца) АБСОЛЮТНО ИДЕНТИЧЕН первому. То есть заносит то же в те же ячейки (на процесс выполнения программы это не влияет никак, так как хоть тыщу нулей запиши по одному адресу, там останется ноль). Есть ЕЩЕ 3 ПАТЧА, которые тоже делают ТО ЖЕ САМОЕ!
А вот потом начинается самое интересное. Шестой патч с конца уже кроме выполнения предыдущего патча запускает две подпрограммы: скриптовую ‘QH_QuestSetSpeaker’ и ассемблерную ‘SE_TableRemove’. Седьмой патч – тот, который я начал разбирать с самого начала, уже достаточно сложен и многофункционален. Восьмой патч самый сложный и требует больше всего стека для выполнения. Наконец девятый патч (а он вовсе и не патч, а исходный код) НЕ СОДЕРЖИТ команды перехода сам на себя. Естественно, он же ПОНЯТИЯ НЕ ИМЕЕТ о существовании еще восьми надстроек над ним.
В EGOSOFT работают люди, которым нужен готовый продукт за как можно более короткое время. От этого страдает качество. Это лично мое мнение, но если послушать другие конференции, я в нем не одинок.
    Добавлено: 21:44 06-12-2004   
ASKirilL
 1220 EGP


Собака Павлова
Репутация: 302
Сообщения: 8209
Откуда: Москва
Зарегистрирован: 21.03.2003
Цитата:
*.obj явно писались на каком-то языке высокого уровня и затем были откомпилированы.

Опираясь на пост Blueboar'a, пытаюсь опнять как Это писалось на языке высокого уровня...
Чесно гря не получаеться.
_________________
Павлов - собака.
    Добавлено: 21:53 06-12-2004   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
Blueboar :
Подпрограмма вызывает ТУ ЖЕ САМУЮ подпрограмму, НО БОЛЕЕ РАННЕГО ПАТЧА! Та отработает, НЕ ЗНАЯ, что уже есть более новый патч, после чего этот новый патч сделает еще кое-что

Откровенно напоминает самое обыкновенное наследование. Если знаком с C++, то точно знаешь что это такое, на примере объясню:

Есть некий базовый класс, описавающий какой-либо обект в игре (возможно скрипты тоже объектами являются) с двумя функциями:
class A
{
void SetState() {что то делает;}
void OtherFunc() {что то делает;}
};

Далее выяснилось, что надо улучшить/изменить/дополнить класс A, для его выполняем его наследование. Например мы решили, что надо обновить/дополнить фукнцию SetState:
class AA : public A
{
void SetState() {A::SetState(); ещё что то делает;}
};

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

При этом в коде создаётся объект класса AA как
AA a;
И вызов:
a.SetState();
будет означать что вызовется функция SetState() класса АА, которая вызовет функцию SetState класса A.

Далее, можешь сам додумать, что может быть куча вариантов - не переопределять функции (например OtherFunc в этом примере) или переопределять, но не вызывать функции базовых классов и т.п.
    Добавлено: 22:14 06-12-2004   
ASKirilL
 1220 EGP


Собака Павлова
Репутация: 302
Сообщения: 8209
Откуда: Москва
Зарегистрирован: 21.03.2003
Хым.
Встаёт вопрос, какой смысл в этом?..
Мысля одна- эти скрипты они должны использовать не в одном месте (с изменением цепочки патчей, так сказать)... ТО есть с изменением стартовой подпрограммы (которая вызывает остальные).

А если такового нет- то это вообще Совсем запутался... .
Какой тогда смысл в наследовании?..
_________________
Павлов - собака.
    Добавлено: 22:37 06-12-2004   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
На всякий случай, если кто не видел и если это может быть чем-то полезно:
Hvala Mne :
Насчет стори-файла. Вся программа X-tension и (Х2 также) представляет собой нечто вроде бейсика, или, лучше сказать, явы. exe-файл - это интерпретатор, в различных каталогах различные файлы данных, а стори-файл, собссно, и есть сама программа. Нечто вроде ява-байткодов (кто знает, что это такое). Т.е есть специальный компилер (который работает на сайте ЭС), - КС компилер называется, - который из исходников делает этот самый байткод, этот самый сторифайл. Так вот я думаю и компилер и сами исходники для ХТ, если они вообще остались, зарыты у Бернда где-нибудь глубоко-глубоко, и нужны очень веские причины заставить его отыскать их. У меня этих вещей для ХТ никогда не было.


Hvala Mne :
это именно байт-код. С push'ами, с pop'ами и call'ами.

Hvala Mne :
001.obj это сама история, а 002.obj - это по-моему, заставка, демка и кредитсы.

Hvala Mne :
Че такое pch не знаю.
    Добавлено: 00:58 07-12-2004   
Blueboar
 125 EGP


Рейтинг канала: 2(12)
Репутация: 20
Сообщения: 47
Откуда: Курган
Зарегистрирован: 01.12.2004
Я так понял что мы с Рыб'ом по подходам ничем не отличаемся кроме одного - Я говорю "В EGOSOFT ламеры, работать не умеют", а Рыб - "А это фича такая, так задумано было". А в принципе - на расположение данных все равно это никак не повлияет. Так что примем за основу предложение Рыба, оно более научно, что ли.
Вопрос тогда появляется - из какого SYMB (или класса) вызывается подпрограмма. Например если я вызову SetState, то какая именно вызовется?
Судя по подпрограмме перехода, это определяется последним значением стека. Но оно всегда одно и то же. Наверное я дизассемблирую что-то не так.
А я думал, что просто подпрограмма берется в самом последнем классе из найденных и еще не вызванных (иначе зациклится).
Или должна быть некая таблица - какие классы какие наследуют и из каких вызываются...
    Добавлено: 09:52 07-12-2004   
Рыб
 1242 EGP


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

Зарегистрирован: 05.06.2001
To Blueboar:
Такая идея - если не лезть в их модель в плане структуры и организации, а просто разобраться с тем, что куда и как надо записать, что бы игровой интерпретар это корректно выполнил и произвёл соответствующие изменения со вселенной.
Далее как-то выяснить где и как инициировать обработку по определённому адресу и просто писать свои подпрограммы не заморачиваясь вклиниванием в существующие коды.

По идее - мы уже и так нашли место - ОТКУДА ВЫЗЫВАЕТСЯ - это нужные нам события, например - событие входа в сектор, мы знаем где эта подпрограмма, и, по идее, можно в её начало вставить вызов некой нашей процедуры, которая проделав всё что нам нужно вернёт стэк в исходное состояние и завершится.
    Добавлено: 10:13 07-12-2004   
CheckerTwo
 550 EGP


Рейтинг канала: 4(90)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Shaddie:
Цитата:
Как успехи с "Full X-T Map" Улыбка

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

Цитата:

А что получится, если сформировать scene-файл без добавления
строк для новых секторов, а добавлять только строки связей между
секторами для существующих секторов. Тогда файл почти не
увеличется.


В scene-файле все просто. Значится там такой формат.
Весь файл условно разделен на три секции. В начале каждой секции
стоит коментарий - что это такое.

Сначала идут записи о положении боксов - секторов.
По одной строчке на сектор. Угловые коэффициенты всегда 0.0000

Потом - положение надписей. В английской версии они видны. В
русифицированной - почему нет. Тоже по одной строке на сектор.
Здесь угловые коэффициенты задают наклон надписи, чтобы при
длинных названиях не перекрывались.

Далее идет инфа о гейтах - линиях, соединяющих сектора.
Их может быть от 2 до 4 строк на сектор. Это самая большая часть
этого scene-файла. Угловые коэффициенты задают угол, под которым
рисуется эта линия.

Цитата:
Может чем помочь?


Не могу найти в каком месте начинаются глюки. То ли из-за
размера этого файла, то ли из-за того, что ЕС не зарезервировала
место под эти самые 200 секторов. То ли у меня игруха сама по
себе глючит. Расстроен

Периодически вываливается и говорит
Activemovie window: x.exe
unknown software exception 0xc00000fd по адресу 0x07246517
А такое бывает, когда кодек какой-то не найден... Какой??
Фигня какая-то...

Щас методично откусываю куски карты и проверяю...

Вот идея к стати - попробовать мод делать в виде нового
story-файла и подключать его опцией в командной строке.
В смысле - оформить добавление новых секторов в виде отдельного
obj-файла. Секцию STRG пока не вставлять... Заканчивать - по RET.
Ы? Улыбка
Интересно когда он будет вызываться и вообще сработает ли...
    Добавлено: 15:56 07-12-2004   
Argonaut
 260 EGP


Рейтинг канала: 1(9)
Репутация: 43
Сообщения: 185
Откуда: Челябинск
Зарегистрирован: 27.04.2004
CheckerTwo :
Shaddie:
Цитата:
Как успехи с "Full X-T Map" Улыбка

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

Может вручить каждому желающему по сектору, пусть его "обустроит".
А потом все в кучу. А? Улыбка

На самом деле, секторы должны быть между собой "взаимосвязаны" и сбалансированы более-менее. Например, по экономике.
_________________
Объявление
Отдам малыша Ксенона в хорошие руки. Денег не предлагать.
    Добавлено: 18:02 07-12-2004   
X-admiral
 100 EGP


Репутация: 7
Сообщения: 221
Откуда: Беларусь, Гродно
Зарегистрирован: 24.08.2004
Люди , я вашу работу поддерживаю ( морально Гы-гы т.к в ассемблере ничего не петрю ) , хотелось только спросить : а что за файлы в одном каталоге вместе с *.obj - 001.xxx и 001.yyy ? Весят по 1.3 и по 1.5 mb , мож там чо полезное а ?
    Добавлено: 22:01 07-12-2004   
YogSagot
 1175 EGP


Рейтинг канала: 4(60)
Репутация: 275
Сообщения: 2796
Откуда: Daugavpils, Latvija
Зарегистрирован: 17.08.2003
Цитата:
т.к в ассемблере ничего не петрю

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

зы Просто я в нем "петрю" Гы-гы
    Добавлено: 15:51 08-12-2004   
CheckerTwo
 550 EGP


Рейтинг канала: 4(90)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
X-admiral:
Цитата:
хотелось только спросить : а что за файлы в одном каталоге вместе с *.obj - 001.xxx и 001.yyy ? Весят по 1.3 и по 1.5 mb , мож там чо полезное а ?

Эти файлы получаются из 001.obj после того, как поработал патч
от ЕС. В 01.dat файле при патчении старые файлы переименовываются,
затем в конец дописываются новые.
Полезного? Да, пожалуй. Можно отследить как была добавлена
миссия Персея. В версии 1.1 ее, кажись, еще не было.
Добавили позже.

Argonaut:
Цитата:
Может вручить каждому желающему по сектору, пусть его "обустроит".
А потом все в кучу. А?
На самом деле, секторы должны быть между собой "взаимосвязаны" и сбалансированы более-менее. Например, по экономике.


До этого еще долеко. Пока застрял на том, что на галактическом
навигаторе новые сектора отображаются не все 200, как положено,
а несколько менее... Расстроен
Хотя, идея здравая, и потребует серьезного подхода Улыбка
    Добавлено: 17:49 08-12-2004   
Hvala Mne
 881 EGP


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

http://www.egosoft.com/x/questsdk/index.asp

Они написаны на КС, нечто вроде С++. Весь стори написан на этом КС - собственная разработка ES. Весь ХТ и Х2 написан на КС, компилятор собирает все исходники в несколько obj файлов, которые затем интерпретирует exe. Зайдите на сайт ES и посмотрите исходники для квестов - они доступны для всех. Потом, если у вас есть 5-й уровень, вы можете скомпилировать стори-файл компилятором, получить и загрузить obj файл, который будет интерпретироваться. Все инструкции по использованию компилятора там же. Правда, он рассчитан на Х2 и с ХТ работать не будет.
_________________
скромный подданный Королевства Боронов
    Добавлено: 18:38 08-12-2004   
Hvala Mne
 881 EGP


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

Сегодня вечером дома поставлю оригинальную eng-версию, пропатчу до 2.1а и завтра с утра вышлю.

Кста, насколько реально вытянуть и расшифровать скрипт, который отвечает за отсылку компового транспортника за ресурсами?


В ХТ СКРИПТОВ НЕТУ. НИКАКИХ. ВООБЩЕ.
_________________
скромный подданный Королевства Боронов
    Добавлено: 18:53 08-12-2004   
Канал X-Tension/X-BTF: «Структура данных X-Tension»
На страницу: Пред.  1, 2, 3 ... 8, 9, 10 ... 13, 14, 15  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: От флуда залететь несколько сложнее, чем от флудерастов. (проверено Химиком)

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