ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
 
  |  
|   » Структура данных 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
   1827 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» |  
	
		| 
		
		 | 
	 
 
      
        | К списку каналов | Наверх страницы  |  
Цитата не в тему:  и то правда - приходишь с утра в канал Х2, а там уже и закрыть-то нечего... (вздыхает Vitalii)
 
  |  
        |   » Структура данных X-Tension | страница 5 |  
       
      
 |