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

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

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

   Страница 2 из 5
На страницу: Пред.  1, 2, 3, 4, 5  След. | Все страницы
Поиск в этой теме:
Канал X-Tension/X-BTF: «Раскопки обжа на предмет юзабельных вещей»
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
Главный вопрос, на который так и не увидел ответа:
можно ли в обж добавить новые данные (не заменяя старые) в описание звука как на примере добавления новых секторов?
    Добавлено: 22:50 21-06-2015   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Я такого способа не знаю. 0001-TX_AUDIO имеет стабильные адреса в начале обжа, не уверен, что этот раздел можно добавить еще и в конце.
yakim81 :
ведь нам без разницы, какая продолжительность была у старого участка, и где он находился, мы же можем указать новое место начала и новую продолжительность, и всунуть все это в конец 0144.dat. Я правильно понимаю?

Да. И если неточно обрезан участок из Х3, то можно подогнать новые значения места озвучивания или продолжительности. Запустить игру, послушать, чуть-чуть поменять, опять проверить игрой, вновь подогнать до получения безошибкового звучания.
_________________
Следи за собой, будь осторожен. В.Цой

Последний раз редактировалось: KWON (12:35 22-06-2015), всего редактировалось 1 раз
    Добавлено: 23:30 21-06-2015   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
Kwon. :
0001-TX_AUDIO имеет стабильные адреса в начале обжа, не уверен, что этот раздел можно добавить еще и в конце.
Вообще код любой процедуры можно увеличить: в нужном месте процедуры вставляется jump на область в конце кода обжа куда и пишется весь дополнительный код (только делать надо это с помощью программ ChekerTwo)
_________________
Быстро едешь, тихо понесут...
    Добавлено: 12:59 23-06-2015   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
я сильно прошу не пинать меня сильно, но ткните носом, где можно скачать наборчик для работы с обж?
UPD
Это случаем не этот http://www.elite-games.ru/_egm_scripts/url.php?action=gotourl&url=/downloads/x2/x2_asm_dasm.rar ?

Последний раз редактировалось: yakim81 (18:02 24-06-2015), всего редактировалось 1 раз
    Добавлено: 17:30 24-06-2015   
Non
 802 EGP


Модератор
Рейтинг канала: 6(383)
Репутация: 239
Сообщения: 801

Зарегистрирован: 27.06.2006
Я тут брал. Улыбка
    Добавлено: 18:17 24-06-2015   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Shaddie :
Вообще код любой процедуры можно увеличить

А я так и знал, что придет кто то знающий, потому и написал "не уверен".
А обучалку как так сделать можно? Т.е. создать универсальный асм-код на 110 новых систем а мы подставим свои номера, места и продолжительность звука.
Как известно раздел 0001-TX_AUDIO имеет два индекса:
00014C98: 002B 000F | 2 write TX_AUDIO.Tscript_eng ; [15d ; 0Fh]
000298F4: 002B 0010 | 2 write TX_AUDIO.Tscript_ger ; [16d ; 10h]
Т.е. озвучивать каждый сектор нужно два раза (если есть 00149.dat)
Научите где именно ставить jump и в общих чертах структуру добавляемого участка (для обоих ленгвиджей).
Потому как озвучка новых секторов поможет при атаке на фабрику игрока сразу сориентироваться куда бежать, кого спасать.
Ещё вопрос. А можно создать файлы 00344 и 00349 - участки названий новых секторов в отдельных файлах без мороки из соундфоржэм.
И добавить их сюда: ; procedure TX_AUDIO.SetLanguage(arg1); ?
Ещё непонятно как привязывается видео до звука. Было бы неплохо разобраться.
Я, озвучивая НЛО-шку, получил изображение Верховного Жреца, хотя около номера звука ничего указывающего на приклеенное видео нет.

Теперь такая информация:
Озвучивание секторов - вариант Лайт (без соундфорджирвания).

В звуковой разметке есть слова не использованные в ХТ:
<t id="102036" s="5672975" l="3457"/>На ксенонской станции вас не желают видеть.
<t id="1100063" s="20619259" l="1839"/>"Добро пожаловать в Храм Гонеров"
<t id="101376" s="5610929" l="1242"/>Порт Анархии Пиратов
Можно использовать их для озвучивания новых секторов.
(Конечно лучше было бы это озвукувание расставить на свои места как приветствия на соответствующих станциях, но не нашёл как.
Хотя подозреваю что редактировать нужно по адресам файла 2109-TTRADEMENU.txt, где прорисован залёт на станцию.)
Первое для секторов Ксенона.
Второе для секторов с новым Гонер темпелом.
Третье для пир.секторов с новой пир.базой.

Всем новым ксеноским секторам также можно приписать "Энэми сектор":
<t id="1020120" s="20415079" l="969"/>
Для новых расовых систем можно использовать просто их название.
<t id="102021" s="5625175" l="681"/>Aргон
<t id="102022" s="5626856" l="744"/>Борон
<t id="102023" s="5630305" l="584"/>Сплит
<t id="102024" s="5628600" l="705"/>Паранид
<t id="102025" s="5631889" l="710"/>Телади
<t id="102026" s="5633599" l="713"/>Ксенон
Берём номер нового сектора из 44001 прописываем его в резервной области и выбранное место в 00144, и продолжительность переносите туда.

Upgr
Cтолкнулся с проблемой в обжэ от НД совсем иная разметка звука и выложенный выше файл не подходит (ещё один плачущий смайлик).
Выход - смотреть значения непосредственно в 0001-TX_AUDIO.txt этого обжа.
Вот пример сравнения разделов оригинального ХТ и от НД. Места и продолжительности у них полностью свои.

По видимому Егософт поделился исходниками или специальной программой редактирования.
Нет случайно хакера взломавшего сервер НД (если по честному просить то такая прога наверно недешёвая).

P.S. Извините за безконечное редактирование, всё время появляются давно забытые или новые соображения.

0001-TX_AUDIO.rar
 Описание:
Детальный файл русского звука НД
 Имя файла:  0001-TX_AUDIO.rar
 Размер файла:  465.13 KB
 Скачано:  503 раз(а)

_________________
Следи за собой, будь осторожен. В.Цой

Последний раз редактировалось: KWON (18:21 15-07-2015), всего редактировалось 7 раз(а)
    Добавлено: 15:01 26-06-2015   
AlexYar
 1846 EGP


Рейтинг канала: 6(304)
Репутация: 328
Сообщения: 31404

Зарегистрирован: 26.10.2003
Kwon. :
"Добро пожаловать в Храм Гонеров"


Эта фраза используется в ХТ. По крайней мере в НД-версии точно. Подобные фразы можно услышать только если не отключены анимации посадки и стыковочных крюков.

L-комплектации на верфи можно получить обычным релоадом (там при каждой загрузке вроде рандом генерит наличие комплектаций).
    Добавлено: 13:35 30-06-2015   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
AlexYar :
L-комплектации на верфи можно получить обычным релоадом

Это тема по модингу, я летаю с 2006 года и игровой процесс сейчас так не захватывает как редактирование.
_________________
Следи за собой, будь осторожен. В.Цой
    Добавлено: 13:00 02-07-2015   
AlexYar
 1846 EGP


Рейтинг канала: 6(304)
Репутация: 328
Сообщения: 31404

Зарегистрирован: 26.10.2003
Для моддинга (ради интереса моддинга) нужно идти в X3-Reunion, там инструментов и возможностей реализации своих идей в тысячу раз больше Улыбка
И обж можно разобрать в читабельный вид (С-аналог), и потом обратно собрать. К сожалению, в ХТ так нельзя.

Последний раз редактировалось: AlexYar (15:50 03-07-2015), всего редактировалось 1 раз
    Добавлено: 15:50 03-07-2015   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Перенесу свои вопросы в это сообщение.
Kwon. :
К Shaddie.
Раз Вы сюда заходите, то есть вопрос по данной теме.
Когда то давно скачивал Ваш обж для Х2 где убраны комплектации S и M на верфях, а L есть постоянно.
Раскройте пожалуйста секрет, хочу сделать такое для ХТ.
А то я нашел только как буквы эти поменять Рыдания. .


Есть прикольное решение проблеммы.
Комплектация "L" будет не всегда но ежесекундно Улыбка .
Чтобы понять значение этих слов нужно увидеть.
По адресу 000A8F1F замените 4В на 4F. (предварительно скопировав обж, как говорят, в надежное место).
Потом редактором карт, для эксперимента, ставим режим отладки (чтобы хватило на комплектацию "L") и стартовым ставите сектор с любой верфью.
Главное успеть вовремя нажать стрелочку покупки корабля, а "энтэр" уже можно жать неспеша, когда "Рынок" будет моргать то "-1" то "9".

Теперь серйозно.
Как я понимаю редактировать нужно в разделе "2037-TFACTORY_SHIPYARD".
Там есть процедура "GetMSLState", которая отвечает за комплектации.
Розмещу её здесь:
 Cкрытый текст   (кликните здесь для просмотра)

Код:

; === GetMSLState ===============================================
; function  TFACTORY_SHIPYARD.GetMSLState();
;
                                 |      TFACTORY_SHIPYARD.GetMSLState:
000A8EF0: 0055 0005              |    0            setmem     5
000A8EF4: 0015                   |    0            push       12d ; 0Ch
000A8EF6: 000A                   |    1            push       1
000A8EF8: 003C                   |    2            get_object
000A8EFA: 0057 00009775          |    3            call       ___GetVar ; 00009775
000A8F00: 0009                   |    1            push       0
000A8F02: 005A 00000D77          |    2            callasm    P_GetAbsTime ; 00000D77
000A8F08: 0014                   |    2            push       11d ; 0Bh
000A8F0A: 000A                   |    3            push       1
000A8F0C: 003C                   |    4            get_object
000A8F0E: 0057 00009775          |    5            call       ___GetVar ; 00009775
000A8F14: 000B                   |    3            push       2
000A8F16: 005A 000012AC          |    4            callasm    P_CmpTime ; 000012AC
000A8F1C: 0009                   |    2            push       0
000A8F1E: 004B                   |    3            if SP[0]>=SP[1] then push 0 else push 1
000A8F20: 0033 00054796          |    2            if SP[0]=0 then jump L000A8F34
000A8F26: 0005 0001              |    1            push       SP[0] ; loc1
000A8F2A: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000A8F2E: 002E 0001              |    2            popx       1
000A8F32: 0035                   |    1            ret
000A8F34: 0001 0708              |    1 L000A8F34: pushw      1800d ; 0708h
000A8F38: 0001 0708              |    2            pushw      1800d ; 0708h
000A8F3C: 000A                   |    3            push       1
000A8F3E: 005A 000000F5          |    4            callasm    P_Random ; 000000F5
000A8F44: 003E                   |    3            add        SP[0],SP[1]
000A8F46: 0001 03E8              |    2            pushw      1000d ; 03E8h
000A8F4A: 0040                   |    3            mul        SP[0],SP[1]
000A8F4C: 0009                   |    2            push       0
000A8F4E: 005A 00000D77          |    3            callasm    P_GetAbsTime ; 00000D77
000A8F54: 000B                   |    3            push       2
000A8F56: 005A 000012B6          |    4            callasm    P_AddTime ; 000012B6
000A8F5C: 0014                   |    2            push       11d ; 0Bh
000A8F5E: 000B                   |    3            push       2
000A8F60: 003C                   |    4            get_object
000A8F62: 0057 0000974E          |    5            call       ___SetVar ; 0000974E
000A8F68: 002C                   |    2            pop
000A8F6A: 000C                   |    1            push       3
000A8F6C: 000A                   |    2            push       1
000A8F6E: 005A 000000F5          |    3            callasm    P_Random ; 000000F5
000A8F74: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000A8F78: 002C                   |    2            pop
000A8F7A: 0005 0001              |    1            push       SP[0] ; loc1
000A8F7E: 0015                   |    2            push       12d ; 0Ch
000A8F80: 000B                   |    3            push       2
000A8F82: 003C                   |    4            get_object
000A8F84: 0057 0000974E          |    5            call       ___SetVar ; 0000974E
000A8F8A: 002C                   |    2            pop
000A8F8C: 0005 0001              |    1            push       SP[0] ; loc1
000A8F90: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000A8F94: 002E 0001              |    2            popx       1
000A8F98: 0035                   |    1            ret
000A8F9A: 002E 0001              |                 popx       1
000A8F9E: 0009                   |                 push       0
000A8FA0: 0035                   |                 ret


Пилоты посмотрите пожалуйста математически одаренным глазом для подсказать что здесь поменять для решения проблеммы.

И этот запрос тоже не решен:
Kwon. :
Ещё вопрос по наполнению верфей. Перерыл все файлы диз.ас. обжа и ничего не нашел,
значит оно находится в той маленькой области (в конце файла), которую дизассемблер не берёт.
Хочу добавить пир.корабли на все верфи как у Телади.

_________________
Следи за собой, будь осторожен. В.Цой
    Добавлено: 18:28 15-07-2015   
Shaddie
 556 EGP


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

Процедура найдена верно "GetMSLState".

Вот в этом участке кода определяется вариант комплектации из 3 значений (число от 1 до 3).

Код:

...
000A8F6A: 000C                   |    1            push       3
000A8F6C: 000A                   |    2            push       1
000A8F6E: 005A 000000F5          |    3            callasm    P_Random ; 000000F5
000A8F74: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000A8F78: 002C                   |    2            pop
...


Можно заменить на такой код:

Код:

...
000A8F6A: 000C                   |    1            push       3
000A8F6C: 002C                   |    0            pop
000A8F6E: 000C                   |    1            push       3
000A8F70: 002C                   |    0            pop
000A8F72: 000C                   |    1            push       3
000A8F74: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000A8F78: 002C                   |    2            pop
...


000A8F6A-000A8F70 - просто бессмысленный код (разрыва в коде что бы небыло)
000A8F72 - вот здесь и пишем нужную комплектацию (000A = 1, 000B = 2 или 000C - 3).

добавлено спустя 29 минут:
Kwon. :
Ещё вопрос по наполнению верфей. Перерыл все файлы диз.ас. обжа и ничего не нашел,
значит оно находится в той маленькой области (в конце файла), которую дизассемблер не берёт.
Хочу добавить пир.корабли на все верфи как у Телади.

Смотреть в процедуре TFACTORY_SHIP.Create

Код:

function TFACTORY_SHIP.Create(arg1, arg2, arg3, arg4, arg5, arg6)
{
 2006->Create(arg1, arg2, arg3, arg4, arg5, arg6);
 this->AddProduct(7, global.ShipGTypeToSType(5, arg5));
 this->AddProduct(7, global.ShipGTypeToSType(6, arg5));
 this->AddProduct(7, global.ShipGTypeToSType(7, arg5));
 this->AddProduct(7, global.ShipGTypeToSType(1, arg5));
 if(arg5 == 5)
 {
  this->AddProduct(7, 44);
 }
 this->AddProduct(7, global.ShipGTypeToSType(0, arg5));
 this->___SetVar(11, P_GetAbsTime() + P_Random(3600) * 1000);
 this->___SetVar(12, P_Random(3));
 this->___SetVar(16, -1);
 return(this);
}


arg5 - ИД расы

Скорее всего условие и отвечает за наличие пир. кораблей на верфи
Код:

 if(arg5 == 5)
 {
  this->AddProduct(7, 44);
 }


Вот код этого участка:
Код:

000A941E: 0005 0008              |    0            push       SP[7] ; arg5
000A9422: 000E                   |    1            push       5
000A9424: 004F                   |    2            if SP[0]<>SP[1] then push 0 else push 1
000A9426: 0033 00054A1B          |    1            if SP[0]=0 then jump L000A943E
000A942C: 0001 002C              |    0            push       44d ; 2Ch
000A9430: 0010                   |    1            push       7
000A9432: 000B                   |    2            push       2
000A9434: 003C                   |    3            get_object
000A9436: 0057 00000A04          |    4            call       TFACTORY.AddProduct ; 00000A04
000A943C: 002C                   |    1            pop


Можно сделать так:
Код:

000A941E: 0005 0008              |    0            push       SP[7] ; arg5
000A9422: 002C                   |    1            pop
000A9424: 000A                   |    0            push       1
000A9426: 0033 00054A1B          |    1            if SP[0]=0 then jump L000A943E
000A942C: 0001 002C              |    0            push       44d ; 2Ch
000A9430: 0010                   |    1            push       7
000A9432: 000B                   |    2            push       2
000A9434: 003C                   |    3            get_object
000A9436: 0057 00000A04          |    4            call       TFACTORY.AddProduct ; 00000A04
000A943C: 002C                   |    1            pop


000A9422 меняем на 002C
000A9424 меняем на 000A

code_xt.zip
 Описание:
Некоторые процедуры XT в более понятном виде (не исключены ошибки)
 Имя файла:  code_xt.zip
 Размер файла:  93.95 KB
 Скачано:  523 раз(а)

_________________
Быстро едешь, тихо понесут...

Последний раз редактировалось: Shaddie (00:29 19-07-2015), всего редактировалось 2 раз(а)
    Добавлено: 00:21 19-07-2015   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Вот это да! Спасибо. Будем разбираться.

Отчёт.

Всё работает:
1) "L" есть постоянно, но "S" и "М" тоже Улыбка .
2) Пир.корабль на верфях есть.
Но, наверно нужно извиниться, не совсем грамотно оформил вопрос:
"Добавить пир.корабли на все верфи как у Телади", т.е. на аргонскую верфь пират лифтер, на боронскую - пират дельфин и т.д.,
ради справедливости, раз есть пират ксенонский транспорт (а его перенести на верфь Ксенона) должны быть и остальные.

Upgr

Может как-то увеличить процедуру. Такие мысли:
 Cкрытый текст   (кликните здесь для просмотра)

(копирован блок добаления пир.корабля)

Для верфи Аргона
000A | 1 push 1 Argon
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 002B | 0 pushw 43d ; 2Bh Pirat argon
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct

Для верфи Борона
000B | 1 push 2 Boron
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 002F | 0 pushw 47d ; 2Fh Pirat boron
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct

Для верфи Сплита
000C | 1 push 3 Split
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 002D | 0 pushw 45d ; 2Dh Pirat split
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct

Для верфи Паранида
000D | 1 push 4 Paranid
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 002E | 0 pushw 46d ; 2Eh Pirat paranid
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct

Для верфи Телади
000E | 1 push 5 Teladi
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 0030 | 0 pushw 48d ; 30h Pirat teladi
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct

Для верфи Ксенона
000F | 1 push 6 Xenon
004F | 2 if SP[0]<>SP[1] then push 0 else push 1
0033 00054A1B | 1 if SP[0]=0 then jump L000A943E
0001 002C | 0 pushw 44d ; 2Ch Pirat xenon
0010 | 1 push 7
000B | 2 push 2
003C | 3 get_object
0057 00000A04 | 4 call TFACTORY.AddProduct


Новое наблюдение.
В свете последней информации можно добавить любой недоступный корабль на верфь.
Я думал что произведя замену новый корабль будет перенесен из верфи телади на верфь пиратов:
Код:

000A9422: 0010                   |    1            push       7 (Пиратская верфь)
000A9424: 004F                   |    2            if SP[0]<>SP[1] then push 0 else push 1
000A9426: 0033 00054A1B          |    1            if SP[0]=0 then jump L000A943E
000A942C: 0001 0045              |    0            pushw      69d ; 2Ch (Персей)

Но оказалось "и овцы сыты, и волки целы" - Персей на пир.верфи а пир.корабль на теладианской верфи остался.
Значит есть ещё процедура занимающаяся вопросом наполнения Теладийской верфи.

Дальше.
 Cкрытый текст   (кликните здесь для просмотра)

Если в файл "Stations.dat" редактора карт там где гонерские станции - [Goner]
прописать ниже такую строку:
//Shipyard
360|0|6|2|5|5|5|201,278||
то можно ставить Гонерскую верфь. Там будут продаваться корабли Аргона, поэтому раньше в ней надобности не было.
Но произвев такую замену:
Код:

000A9422: 0011                   |    1            push       8 (Гонерская верфь)
000A9424: 004F                   |    2            if SP[0]<>SP[1] then push 0 else push 1
000A9426: 0033 00054A1B          |    1            if SP[0]=0 then jump L000A943E
000A942C: 0001 0034              |    0            pushw      52d ; 34h (Корабль Гонеров)

добавляем кор. Гонеров, правда купить его нельзя, нет такого класса в процедуре продажи кораблей (;= Input =; function TMENU_TRADE.Input(arg1, arg2); в радиусе 00133B0C и ниже).
Отсюда вывод: Верфь гонеров можна наполнить отдельно от Аргонской.

Далее. Что бы кор.гонеров продавался нужно добавить его в классы кораблей доступных на верфи (это в разделе 2217-TMENU_TRADE).
Я добавлять пока не умею, иду путем замены.
Меняю клас пир. транспортов "IS" на "GO", но шото делаю не всё, потому как пир. кор. уже не купить, и, к сожалению, кор.гонеров тоже.
Что не так?:
Код:

00133C88: 0013                   |   14            push       10 [b]("GO")[/b]
00133C8A: 004F                   |   15            if SP[0]<>SP[1] then push 0 else push 1
00133C8C: 0033 00099E4A          |   14            if SP[0]=0 then jump L00133C9C
00133C92: 0001 07F7              |   13            pushw      2039d ; 07F3h [b](ТSHIP_GONER)[/b]

Здесь ошибки, думаю, нет, просто прописать нужно ещё где-то что-то.
Было так:
00133C88: 0012 | 14 push 9 ("IS")
00133C92: 0001 07F3 | 13 pushw 2035d ; 07F3h (TSHIP_TS_PIRATE)
Конечно, лучше не заменять а расширить процедуру ассемблированием, т.е. добавить и класс "GO" в продажу.
А за наполнением щитов и лазеров указать ему куда идти где роздают щиты и лазеры для ТС например (от адреса 00133B6E (это для ТЛ) и далеко вниз).
Мне бы, только бы, понять, разобраться в этом добавлении процедур.


А вопросов миллион. Как лирнейская гидра: на один ответ два вопроса.

Есть интересная задумка: увеличить количество НЛО в Икс-галактике.
В разделе "2017-TGONER" нашел необходимую процедуру "StartShips", но все попытки метода тыка успехом не увенчались.
И снова тоже обращение посмотреть на код и подсказать где копать:
 Cкрытый текст   (кликните здесь для просмотра)

Код:

; === StartShips ================================================
; procedure TGONER.StartShips();
;
                                 |      TGONER.StartShips:
000DBA54: 0055 0006              |    0            setmem     6
000DBA58: 0009                   |    0            push       0
000DBA5A: 0009                   |    1            push       0
000DBA5C: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000DBA60: 002C                   |    2            pop
000DBA62: 0005 0001              |    1 L000DBA62: push       SP[0] ; loc1
000DBA66: 0001 0032              |    2            pushw      50d ; 32h
000DBA6A: 004A                   |    3            if SP[0]<=SP[1] then push 0 else push 1
000DBA6C: 0033 0006DD5E          |    2            if SP[0]=0 then jump L000DBAC4
000DBA72: 0031 0006DD42          |    1            jump       L000DBA8C
000DBA78: 0005 0001              |    1 L000DBA78: push       SP[0] ; loc1
000DBA7C: 000A                   |    2            push       1
000DBA7E: 003E                   |    3            add        SP[0],SP[1]
000DBA80: 002A 0002              |    2            mov        SP[1],SP[0] ; loc1
000DBA84: 002C                   |    2            pop
000DBA86: 0031 0006DD2D          |    1            jump       L000DBA62
000DBA8C: 0009                   |    1 L000DBA8C: push       0
000DBA8E: 0009                   |    2            push       0
000DBA90: 0009                   |    3            push       0
000DBA92: 000C                   |    4            push       3
000DBA94: 0001 07F7              |    5            pushw      2039d ; 07F7h
000DBA98: 003A                   |    6            create_object
000DBA9A: 0057 000009BB          |    6            call       TSHIP_GONER.Create ; 000009BB
000DBAA0: 0005 0001              |    2            push       SP[0] ; loc2
000DBAA4: 0033 0006DD59          |    3            if SP[0]=0 then jump L000DBABA
000DBAAA: 0005 0001              |    2            push       SP[0] ; loc2
000DBAAE: 000A                   |    3            push       1
000DBAB0: 003C                   |    4            get_object
000DBAB2: 0057 00000FE2          |    5            call       TGONER.StartThisShip ; 00000FE2
000DBAB8: 002C                   |    3            pop
000DBABA: 002E 0001              |    2 L000DBABA: popx       1
000DBABE: 0031 0006DD38          |    1            jump       L000DBA78
000DBAC4: 0009                   |    1 L000DBAC4: push       0
000DBAC6: 0009                   |    2            push       0
000DBAC8: 0009                   |    3            push       0
000DBACA: 000C                   |    4            push       3
000DBACC: 0001 0814              |    5            pushw      2068d ; 0814h
000DBAD0: 003A                   |    6            create_object
000DBAD2: 0057 000009BB          |    6            call       TSHIP_UFO.Create ; 000009BB
000DBAD8: 0005 0001              |    2            push       SP[0] ; loc2
000DBADC: 0033 0006DD75          |    3            if SP[0]=0 then jump L000DBAF2
000DBAE2: 0005 0001              |    2            push       SP[0] ; loc2
000DBAE6: 000A                   |    3            push       1
000DBAE8: 003C                   |    4            get_object
000DBAEA: 0057 00000FE2          |    5            call       TGONER.StartThisShip ; 00000FE2
000DBAF0: 002C                   |    3            pop
000DBAF2: 002E 0002              |    2 L000DBAF2: popx       2
000DBAF6: 0009                   |    0            push       0
000DBAF8: 0035                   |    1            ret


Как я понял вот это число отвечает за количество Кор.Гонеров:
000DBA66: 0001 0032 | pushw 50d ; 32h
а это за колич. уфошек?:
000DBA7C: 000A | push 1

Меняя эту переменную можно уменьшить или увеличить корабли гонеров но не НЛО:
000DBA6A: 004A | if SP[0]<=SP[1] then push 0 else push 1

Как бы заставить "TSHIP_UFO.Create" идти к коду где генерируются кор.гонеров.
Понимаю что нада поставить "jump", но как это грамотно сделать?

Продолжение о добавлении НЛО

Нашел интересный выход для данной ситуации.
В разделе 2000-TGALAXY есть процедура: function TGALAXY.BuildObject.
Там прописываются все классы объектов которые можно добавить на карту редактором карт.
Но чтобы что-то добавить нужно чем-то пожертвовать.
Я взял для этого эксперимента в жертву пиратский корабль (теперь, к сожалению, они пропадут на пир.базах).

Описание процесса замены пир.транспорта на НЛО:
Нам нужны вот эти три адреса:
00032E10: 0012 | 9 push 9
00032E2C: 0012 | 9 push 9
00032E48: 0001 07F3 | 14 pushw 2035d ; 07F3h

0012 - это клас корабля "IS",
2035d ; 07F3h - раздел свойств корабля (2035-TSHIP_TS_PIRATE).

0012 меняем на 0013 в двух местах, а 07F3 меняем на 0814 т.е. 2068-TSHIP_UFO.

Вот, теперь можна клепать нэлэошки толпами.
Как? Берем редактор ставим любой корабль (например - аргон элиту).
Сохраняем карту. Копируем этот файл и вставляем сдесь же.
Открываем редактором файл "Копия 001.obj" и осторожно, чтоб не сместить координаты расположения,
заменяем клас и расу аргон элиты например на борон пиранью.
Гекс-редактором сравниваем эти два файла 001.obj и Копия 001.obj
Находим такую разницу: 000A000E=000B000F
В файле 001.obj заменяем 000A000E на 00110013
0011 - раса Гонеров
0013 - клас GO
Запускаем игру, смотрим.
Желательно НЛО ставить в стартовом секторе поближе к центру, чтоб сразу видеть как оно завелось и поехало.

Таким образом я добавил на карту и башню, и мины, и астронавта, и боевого дрона.
Правда такая башня не хочет стрелять лучом а мина взорвется только если на неё наехать.
Но теперь эти мины можно прописать ксенонам или пиратам и обсыпать какие-то объекты на карте.
 Cкрытый текст   (кликните здесь для просмотра)

Для добавления мин
сюда:
00032E10: 0012
00032E2C: 0012
00032E48: 0001 07F3
записать такое:
00032E10: 0014
00032E2C: 0014
00032E48: 0001 0812

0014 - несуществующий клас для правильного отображения текстуры значка объекта на карте.
0812 - это свойства мины: 2066-TMINE

А после сравнения обжей записывать вместо кораблей так:
0010 0010 - это мина пиратов
или
000F 0010 - это мина ксенонов

Для обсыпания лазерными башнями, скажем, ворот, тут такая замена:
00032E10: 0014
00032E2C: 0014
00032E48: 0001 07DB

07DB - это 2011-TORBITAL_LASER

И после сравнения обжей записывать вместо кораблей так:
0010 000E - это башня пиратов
или
000F 000E - это башня ксенонов

Если нужно такое в свою собственность тогда первый код расы - 0012.

Конечно, умея добавлять процедуры можно поставить любой недоступный объект на карту.
http://www.elite-games.ru/conference/viewtopic.php?p=3290453#3290453
Shaddie :
Вообще код любой процедуры можно увеличить:
в нужном месте процедуры вставляется jump на область в конце кода обжа куда и пишется весь дополнительный код
(только делать надо это с помощью программ ChekerTwo)

Вот сама процедура пир.транспорта, это её нужно добавить в конец и заменить три параметра.
 Cкрытый текст   (кликните здесь для просмотра)

Код:

00032E08: 0031 0001970A          |                 jump       L00032E1C
00032E0E: 0007                   |    8 L00032E0E: push       SP[0] ; loc8
00032E10: 0012                   |    9            push       9
00032E12: 004F                   |   10            if SP[0]<>SP[1] then push 0 else push 1
00032E14: 0033 0001972F          |    9            if SP[0]=0 then jump L00032E66
00032E1A: 002C                   |    8            pop
00032E1C: 000F                   |    7 L00032E1C: push       6
00032E1E: 0005 000C              |    8            push       SP[11d] ; arg1
00032E22: 0008                   |    9            get_from_array
00032E24: 000E                   |    8            push       5
00032E26: 0005 000D              |    9            push       SP[12d] ; arg1
00032E2A: 0008                   |   10            get_from_array
00032E2C: 0012                   |    9            push       9
00032E2E: 000C                   |   10            push       3
00032E30: 0005 000F              |   11            push       SP[14d] ; arg1
00032E34: 0008                   |   12            get_from_array
00032E36: 000B                   |   11            push       2
00032E38: 0005 0010              |   12            push       SP[15d] ; arg1
00032E3C: 0008                   |   13            get_from_array
00032E3E: 000A                   |   12            push       1
00032E40: 0005 0011              |   13            push       SP[16d] ; arg1
00032E44: 0008                   |   14            get_from_array
00032E46: 000F                   |   13            push       6
00032E48: 0001 07F3              |   14            pushw      2035d ; 07F3h
00032E4C: 003A                   |   15            create_object
00032E4E: 0057 000009BB          |   15            call       TSHIP_TS_PIRATE.Create ; 000009BB
00032E54: 002A 0008              |    8            mov        SP[7],SP[0] ; loc1
00032E58: 002C                   |    8            pop
00032E5A: 0031 00019730          |    7            jump       L00032E68



О переводе обжа.
 Cкрытый текст   (кликните здесь для просмотра)

А возможно используя "code.cpp" с помощью ассемблера русифицировать секцию "стринг": .section strg, con
Например для этих слов:
S000394B: .ascii "Show All Sectors in Map"
S0003963: .ascii "Add Player Factories"
S0003978: .ascii "Add Satellites"
(так сразу будет видно работает или нет)
Для пробы взять простые слова: "Сектора", "Фабрики", "Спутники"
(я так понимаю количество символов не должно быть больше чем в оригинале).
И тогда можно русифицировать остальное, по примерному алгоритму, всё что забыл перевести "Новый диск".

UPGRD
 Cкрытый текст   (кликните здесь для просмотра)

Новая лишняя информация на тему раскопок обжа. Для создания нового сообщения оно не тянет.
Так для прикола поставте себе дальность запрыгивания докинг компутэра как в БэТээФе до 10 км:

В двух местах поменяйте это:
00169908: 0002 0010EFF0 | pushd 1110000d ;
00169A5E: 0002 0010EFF0 | pushd 1110000d ;
на вот это:
00169908: 0002 0021DFE0 | pushd 2220000d ;
00169A5E: 0002 0021DFE0 | pushd 2220000d ;
Проверено - работает.

Такое можно сделать и для транспортэра (вдвое увеличить дальность), но менять аж в 6-ти местах шото неохота.
Пробуйте сами, если интересно. Это здесь:
0016C292: 0002 0010EFF0 | pushd 1110000d ;
0016C394: 0002 0010EFF0 | pushd 1110000d ;
0016C6EA: 0002 0010EFF0 | pushd 1110000d ;
0016C7AC: 0002 0010EFF0 | pushd 1110000d ;
0016CA62: 0002 0010EFF0 | pushd 1110000d ;
0016CB0E: 0002 0010EFF0 | pushd 1110000d ;

Желающим усилить пиратов можно посоветовать добавить Персей в карательные караваны.
А Ориноки будут только как защитники пиратских баз.
По этим адресам:
000D8DB0: 0001 003D
000D93AC: 0001 003D
000DAC9C: 0001 003D
000DACC2: 0001 003D
000DB160: 0001 003D
3D заменить на 45.

UPGR again
yakim81 :
когда модифицируешь ехе при пролете врат иногда комп говорит о том, что исполняемый фал был модифицирован и происходит самоуничтожение

Если сильно правлен ХТ.ехе тогда бывает что при посадке на станцию или вылетании из гипер-врат можно получить сообщение компьютера о запуске режима самоуничтожения.
Выключение анти-чит режима в экзешнике от этого не спасает.
Лечение:
1. Находим эти слова в тесте:
1100027 "Внимание: X-TENSION исполнительный файл игры изменен"
1100026 "Запущен режим самоуничтожения"
2. Дизассемблируем обж и в файле 001.out задаем в поиск "1100027d".
Получим два результата:
а) первый при переходе врат:
000DECFC: 004E | 4 if SP[0]=SP[1] then push 0 else push 1
000DECFE: 0033 0006F6A1 | 3 if SP[0]=0 then jump L000DED4A
000DED04: 0001 00FA | 2 pushw 250d ; 0FAh
000DED08: 0002 0010C8FB | 3 pushd 1100027d ; 0010C8FBh
б) второй при посадке на станцию:
000EDC16: 004E | 11 if SP[0]=SP[1] then push 0 else push 1
000EDC18: 0033 00076E2E | 10 if SP[0]=0 then jump L000EDC64
000EDC1E: 0001 00FA | 9 pushw 250d ; 0FAh
000EDC22: 0002 0010C8FB | 10 pushd 1100027d ; 0010C8FBh
3. Дальше по адресам где стоит код 004E заменяем его на 004F. Всё.

UPGRD new
В базе данных есть такой вопрос:
Цитата :
Вопрос: Имеют ли расы репутацию друг у друга?
Ответ: Да.

Теперь более расширенный ответ:
 Начальные рейтинги отношений между расами   (кликните здесь для просмотра)



Источник этой информации:
 Cкрытый текст   (кликните здесь для просмотра)

Код:

// Отношение Аргона к Ксенону.
00094C50: 002C                   |    2            pop
00094C52: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094C58: 000F                   |    2            push       6   ...к Ксенону.
00094C5A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094C5E: 0008                   |    4            get_from_array
00094C60: 000B                   |    3            push       2
00094C62: 000A                   |    4            push       1   Отношение Аргона (см.вверх)...
00094C64: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094C68: 0008                   |    6            get_from_array
00094C6A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Аргону.
00094C70: 002C                   |    2            pop
00094C72: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094C78: 000A                   |    2            push       1   ...к Аргону.
00094C7A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094C7E: 0008                   |    4            get_from_array
00094C80: 000B                   |    3            push       2
00094C82: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094C84: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094C88: 0008                   |    6            get_from_array
00094C8A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Паранида к Ксенону.
00094C90: 002C                   |    2            pop
00094C92: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094C98: 000F                   |    2            push       6   ...к Ксенону.
00094C9A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094C9E: 0008                   |    4            get_from_array
00094CA0: 000B                   |    3            push       2
00094CA2: 000D                   |    4            push       4   Отношение Паранида (см.вверх)...
00094CA4: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094CA8: 0008                   |    6            get_from_array
00094CAA: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Параниду.
00094CB0: 002C                   |    2            pop
00094CB2: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094CB8: 000D                   |    2            push       4   ...к Параниду.
00094CBA: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094CBE: 0008                   |    4            get_from_array
00094CC0: 000B                   |    3            push       2
00094CC2: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094CC4: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094CC8: 0008                   |    6            get_from_array
00094CCA: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Телади к Ксенону.
00094CD0: 002C                   |    2            pop
00094CD2: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094CD8: 000F                   |    2            push       6   ...к Ксенону.
00094CDA: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094CDE: 0008                   |    4            get_from_array
00094CE0: 000B                   |    3            push       2
00094CE2: 000E                   |    4            push       5   Отношение Телади (см.вверх)...
00094CE4: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094CE8: 0008                   |    6            get_from_array
00094CEA: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Телади.
00094CF0: 002C                   |    2            pop
00094CF2: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094CF8: 000E                   |    2            push       5   ...к Телади.
00094CFA: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094CFE: 0008                   |    4            get_from_array
00094D00: 000B                   |    3            push       2
00094D02: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094D04: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094D08: 0008                   |    6            get_from_array
00094D0A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Сплита к Ксенону.
00094D10: 002C                   |    2            pop
00094D12: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094D18: 000F                   |    2            push       6   ...к Ксенону.
00094D1A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094D1E: 0008                   |    4            get_from_array
00094D20: 000B                   |    3            push       2
00094D22: 000C                   |    4            push       3   Отношение Сплита (см.вверх)...
00094D24: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094D28: 0008                   |    6            get_from_array
00094D2A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Сплиту.
00094D30: 002C                   |    2            pop
00094D32: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094D38: 000C                   |    2            push       3   ...к Сплиту.
00094D3A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094D3E: 0008                   |    4            get_from_array
00094D40: 000B                   |    3            push       2
00094D42: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094D44: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094D48: 0008                   |    6            get_from_array
00094D4A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Борона к Ксенону.
00094D50: 002C                   |    2            pop
00094D52: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094D58: 000F                   |    2            push       6   ...к Ксенону.
00094D5A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094D5E: 0008                   |    4            get_from_array
00094D60: 000B                   |    3            push       2
00094D62: 000B                   |    4            push       2   Отношение Борона (см.вверх)...
00094D64: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094D68: 0008                   |    6            get_from_array
00094D6A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Борону.
00094D70: 002C                   |    2            pop
00094D72: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094D78: 000B                   |    2            push       2   ...к Борону.
00094D7A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094D7E: 0008                   |    4            get_from_array
00094D80: 000B                   |    3            push       2
00094D82: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094D84: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094D88: 0008                   |    6            get_from_array
00094D8A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Аргона к Параниду.
00094D90: 002C                   |    2            pop
00094D92: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094D96: 000D                   |    2            push       4   ...к Параниду.
00094D98: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094D9C: 0008                   |    4            get_from_array
00094D9E: 000B                   |    3            push       2
00094DA0: 000A                   |    4            push       1   Отношение Аргона (см.вверх)...
00094DA2: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094DA6: 0008                   |    6            get_from_array
00094DA8: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Паранида к Аргону.
00094DAE: 002C                   |    2            pop
00094DB0: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094DB4: 000A                   |    2            push       1   ...к Аргону.
00094DB6: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094DBA: 0008                   |    4            get_from_array
00094DBC: 000B                   |    3            push       2
00094DBE: 000D                   |    4            push       4   Отношение Паранида (см.вверх)...
00094DC0: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094DC4: 0008                   |    6            get_from_array
00094DC6: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Аргона к Сплиту.
00094DCC: 002C                   |    2            pop
00094DCE: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094DD2: 000C                   |    2            push       3   ...к Сплиту.
00094DD4: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094DD8: 0008                   |    4            get_from_array
00094DDA: 000B                   |    3            push       2
00094DDC: 000A                   |    4            push       1   Отношение Аргона (см.вверх)...
00094DDE: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094DE2: 0008                   |    6            get_from_array
00094DE4: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Сплита к Аргону.
00094DEA: 002C                   |    2            pop
00094DEC: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094DF0: 000A                   |    2            push       1   ...к Аргону.
00094DF2: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094DF6: 0008                   |    4            get_from_array
00094DF8: 000B                   |    3            push       2
00094DFA: 000C                   |    4            push       3   Отношение Сплита (см.вверх)...
00094DFC: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E00: 0008                   |    6            get_from_array
00094E02: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Борона к Параниду.
00094E08: 002C                   |    2            pop
00094E0A: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094E0E: 000D                   |    2            push       4   ...к Параниду.
00094E10: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094E14: 0008                   |    4            get_from_array
00094E16: 000B                   |    3            push       2
00094E18: 000B                   |    4            push       2   Отношение Борона (см.вверх)...
00094E1A: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E1E: 0008                   |    6            get_from_array
00094E20: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Паранида к Борону.
00094E26: 002C                   |    2            pop
00094E28: 0001 FF9C              |    1            pushw      -100d ; 0FF9Ch   Очки рейтинга.
00094E2C: 000B                   |    2            push       2   ...к Борону.
00094E2E: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094E32: 0008                   |    4            get_from_array
00094E34: 000B                   |    3            push       2
00094E36: 000D                   |    4            push       4   Отношение Паранида (см.вверх)...
00094E38: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E3C: 0008                   |    6            get_from_array
00094E3E: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Аргона к Пиратам.
00094E44: 002C                   |    2            pop
00094E46: 0009                   |    1            push       0   Очки рейтинга.
00094E48: 0010                   |    2            push       7   ...к Пиратам.
00094E4A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094E4E: 0008                   |    4            get_from_array
00094E50: 000B                   |    3            push       2
00094E52: 000A                   |    4            push       1   Отношение Аргона (см.вверх)...
00094E54: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E58: 0008                   |    6            get_from_array
00094E5A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Пиратов к Аргону.
00094E60: 002C                   |    2            pop
00094E62: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094E68: 000A                   |    2            push       1   ...к Аргону.
00094E6A: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094E6E: 0008                   |    4            get_from_array
00094E70: 000B                   |    3            push       2
00094E72: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
00094E74: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E78: 0008                   |    6            get_from_array
00094E7A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Паранида к Пиратам.
00094E80: 002C                   |    2            pop
00094E82: 0009                   |    1            push       0   Очки рейтинга.
00094E84: 0010                   |    2            push       7   ...к Пиратам.
00094E86: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094E8A: 0008                   |    4            get_from_array
00094E8C: 000B                   |    3            push       2
00094E8E: 000D                   |    4            push       4   Отношение Паранида (см.вверх)...
00094E90: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094E94: 0008                   |    6            get_from_array
00094E96: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Пиратов к Параниду.
00094E9C: 002C                   |    2            pop
00094E9E: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094EA4: 000D                   |    2            push       4   ...к Параниду.
00094EA6: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094EAA: 0008                   |    4            get_from_array
00094EAC: 000B                   |    3            push       2
00094EAE: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
00094EB0: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094EB4: 0008                   |    6            get_from_array
00094EB6: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Телади к Пиратам.
00094EBC: 002C                   |    2            pop
00094EBE: 0009                   |    1            push       0   Очки рейтинга.
00094EC0: 0010                   |    2            push       7   ...к Пиратам.
00094EC2: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094EC6: 0008                   |    4            get_from_array
00094EC8: 000B                   |    3            push       2
00094ECA: 000E                   |    4            push       5   Отношение Телади (см.вверх)...
00094ECC: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094ED0: 0008                   |    6            get_from_array
00094ED2: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Пиратов к Телади.
00094ED8: 002C                   |    2            pop
00094EDA: 0009                   |    1            push       0   Очки рейтинга.
00094EDC: 000E                   |    2            push       5   ...к Телади.
00094EDE: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094EE2: 0008                   |    4            get_from_array
00094EE4: 000B                   |    3            push       2
00094EE6: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
00094EE8: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094EEC: 0008                   |    6            get_from_array
00094EEE: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Сплита к Пиратам.
00094EF4: 002C                   |    2            pop
00094EF6: 0009                   |    1            push       0   Очки рейтинга.
00094EF8: 0010                   |    2            push       7   ...к Пиратам.
00094EFA: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094EFE: 0008                   |    4            get_from_array
00094F00: 000B                   |    3            push       2
00094F02: 000C                   |    4            push       3   Отношение Сплита (см.вверх)...
00094F04: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F08: 0008                   |    6            get_from_array
00094F0A: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Пиратов к Сплиту.
00094F10: 002C                   |    2            pop
00094F12: 0009                   |    1            push       0   Очки рейтинга.
00094F14: 000C                   |    2            push       3   ...к Сплиту.
00094F16: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094F1A: 0008                   |    4            get_from_array
00094F1C: 000B                   |    3            push       2
00094F1E: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
00094F20: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F24: 0008                   |    6            get_from_array
00094F26: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Борона к Пиратам.
00094F2C: 002C                   |    2            pop
00094F2E: 0009                   |    1            push       0   Очки рейтинга.
00094F30: 0010                   |    2            push       7   ...к Пиратам.
00094F32: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094F36: 0008                   |    4            get_from_array
00094F38: 000B                   |    3            push       2
00094F3A: 000B                   |    4            push       2   Отношение Борона (см.вверх)...
00094F3C: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F40: 0008                   |    6            get_from_array
00094F42: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Пиратов к Борону.
00094F48: 002C                   |    2            pop
00094F4A: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094F50: 000B                   |    2            push       2   ...к Борону.
00094F52: 0004 0012              |    3            readvar    global.ga_Races ; [18d ; 12h]
00094F56: 0008                   |    4            get_from_array
00094F58: 000B                   |    3            push       2
00094F5A: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
00094F5C: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F60: 0008                   |    6            get_from_array
00094F62: 0057 00000B6D          |    5            call       SetNotoriety ; 00000B6D

// Отношение Ксенона к Игроку.
00094F68: 002C                   |    2            pop
00094F6A: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00094F70: 0012                   |    2            push       9   ...к Игроку.
00094F72: 000B                   |    3            push       2
00094F74: 000F                   |    4            push       6   Отношение Ксенона (см.вверх)...
00094F76: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F7A: 0008                   |    6            get_from_array
00094F7C: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Паранида к Игроку.
00094F82: 002C                   |    2            pop
00094F84: 0001 FF97              |    1            pushw      -105d ; 0FF97h   Очки рейтинга.
00094F88: 0012                   |    2            push       9   ...к Игроку.
00094F8A: 000B                   |    3            push       2
00094F8C: 000D                   |    4            push       4   Отношение Паранида (см.вверх)...
00094F8E: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094F92: 0008                   |    6            get_from_array
00094F94: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Сплита к Игроку.
00094F9A: 002C                   |    2            pop
00094F9C: 0001 FF9B              |    1            pushw      -101d ; 0FF9Bh   Очки рейтинга.
00094FA0: 0012                   |    2            push       9   ...к Игроку.
00094FA2: 000B                   |    3            push       2
00094FA4: 000C                   |    4            push       3   Отношение Сплита (см.вверх)...
00094FA6: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094FAA: 0008                   |    6            get_from_array
00094FAC: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Аргона к Игроку.
00094FB2: 002C                   |    2            pop
00094FB4: 0009                   |    1            push       0   Очки рейтинга.
00094FB6: 0012                   |    2            push       9   ...к Игроку.
00094FB8: 000B                   |    3            push       2
00094FBA: 000A                   |    4            push       1   Отношение Аргона (см.вверх)...
00094FBC: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094FC0: 0008                   |    6            get_from_array
00094FC2: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Борона к Игроку.
00094FC8: 002C                   |    2            pop
00094FCA: 0001 0064              |    1            pushw      100d ; 64h   Очки рейтинга.
00094FCE: 0012                   |    2            push       9   ...к Игроку.
00094FD0: 000B                   |    3            push       2
00094FD2: 000B                   |    4            push       2   Отношение Борона (см.вверх)...
00094FD4: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094FD8: 0008                   |    6            get_from_array
00094FDA: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Телади к Игроку.
00094FE0: 002C                   |    2            pop
00094FE2: 0009                   |    1            push       0   Очки рейтинга.
00094FE4: 0012                   |    2            push       9   ...к Игроку.
00094FE6: 000B                   |    3            push       2
00094FE8: 000E                   |    4            push       5   Отношение Телади (см.вверх)...
00094FEA: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00094FEE: 0008                   |    6            get_from_array
00094FF0: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Гонеров, в версии 1.0, к Игроку.
00094FF6: 002C                   |    2            pop
00094FF8: 0009                   |    1            push       0   Очки рейтинга.
00094FFA: 0012                   |    2            push       9   ...к Игроку.
00094FFC: 000B                   |    3            push       2
00094FFE: 0011                   |    4            push       8   Отношение Гонеров в версии 1.0 (см.вверх)...
00095000: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00095004: 0008                   |    6            get_from_array
00095006: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Пиратов к Игроку.
0009500C: 002C                   |    2            pop
0009500E: 0002 FFF0BDC0          |    1            pushd      -1000000d ; 0FFF0BDC0h   Очки рейтинга.
00095014: 0012                   |    2            push       9   ...к Игроку.
00095016: 000B                   |    3            push       2
00095018: 0010                   |    4            push       7   Отношение Пиратов (см.вверх)...
0009501A: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
0009501E: 0008                   |    6            get_from_array
00095020: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A

// Отношение Гонеров к Игроку.
00095026: 002C                   |    2            pop
00095028: 0001 0064              |    1            pushw      100d ; 64h   Очки рейтинга.
0009502C: 0012                   |    2            push       9   ...к Игроку.
0009502E: 000B                   |    3            push       2
00095030: 0011                   |    4            push       8   Отношение Гонеров (см.вверх)...
00095032: 0004 0012              |    5            readvar    global.ga_Races ; [18d ; 12h]
00095036: 0008                   |    6            get_from_array
00095038: 0057 00000B7A          |    5            call       SetGroupNotoriety ; 00000B7A
0009503E: 002C                   |    2            pop



Лучший из лучших гекс-редактор для правки обжа экстэна:
_________________
Следи за собой, будь осторожен. В.Цой

Последний раз редактировалось: KWON (21:22 06-10-2021), всего редактировалось 14 раз(а)
    Добавлено: 00:27 19-07-2015   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
aL144 :
В 1.3 только исправление последних косяков 1.2, ченджлог в шапке, из сторонних модификаций ХТНЛ ничего не брал, все свое Гы-гы
В новых секторах специально не во всех новая музыка, чтобы атмосфера ХТ была и в новых секторах.
Мод пока не планирую развивать, я все мечтаю о крутом программере, который расширит мне матрицу секторов игры вдвое. Т.е. чтобы вместо 200 поместилось 800 секторов Гы-гы


Перечитал тут намедни Структура данных X-Tension и Редактор карт и решил заняться археологией + некромантией.
В итоге порылся в дезассемблированном obj и пришел к выводу, что процедура
Код:
procedure TGALAXY.Build(arg1);

отвечающая за создание карты, содержит код
 Код процедуры procedure TGALAXY.Build(arg1);   (кликните здесь для просмотра)

Код:
L0009494A: push       1
           get_strg   S0000928 ;  ; "Loadings"
           push       2
           callasm    P_ViewEBMFullscreen ; 00000931
           pop
           push       1000d ; 03E8h
           writevar   global.gs_DelayFactor ; [16d ; 10h]
           pop
           push       20d ; 14h
           push       1
           callasm    SE_ArrayAlloc ; 00000AE1
           writevar   global.ga_Sectors ; [17d ; 11h]
           pop
           push       0
           push       0
           mov        SP[1],SP[0] ; loc1
           pop
L00094980: push       SP[0] ; loc1
           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094A28
           jump       L000949A8

L00094994: push       SP[0] ; loc1
           push       1
           add        SP[0],SP[1]
           mov        SP[1],SP[0] ; loc1
           pop
           jump       L00094980

L000949A8: push       10d ; 0Ah
           push       1
           callasm    SE_ArrayAlloc ; 00000AE1
           push       SP[1] ; loc1
           readvar    global.ga_Sectors ; [17d ; 11h]
           put_to_array
           pop
           push       0
           push       0
           mov        SP[1],SP[0] ; loc2
           pop
L000949C8: push       SP[0] ; loc2
           push       10d ; 0Ah
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094A1E
           jump       L000949F0

L000949DC: push       SP[0] ; loc2
           push       1
           add        SP[0],SP[1]
           mov        SP[1],SP[0] ; loc2
           pop
           jump       L000949C8

L000949F0: push       SP[0] ; loc2
           push       SP[2] ; loc1
           push       2
           push       2001d ; 07D1h
           create_object
           call       TSECTOR.Create ; 000009BB
           push       SP[1] ; loc2
           push       SP[3] ; loc1
           readvar    global.ga_Sectors ; [17d ; 11h]
           get_from_array
           put_to_array
           pop
           jump       L000949DC

L00094A1E: popx       1
           jump       L00094994

L00094A28: push       0
           pop
           push       0
           mov        SP[1],SP[0] ; loc1
           pop
L00094A34: push       SP[0] ; loc1
           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094AB2
           jump       L00094A5C

L00094A48: push       SP[0] ; loc1
           push       1
           add        SP[0],SP[1]
           mov        SP[1],SP[0] ; loc1
           pop
           jump       L00094A34

L00094A5C: push       0
           push       0
           mov        SP[1],SP[0] ; loc2
           pop
L00094A66: push       SP[0] ; loc2
           push       10d ; 0Ah
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094AA8
           jump       L00094A8E

L00094A7A: push       SP[0] ; loc2
           push       1
           add        SP[0],SP[1]
           mov        SP[1],SP[0] ; loc2
           pop
           jump       L00094A66

L00094A8E: push       SP[0] ; loc2
           push       SP[2] ; loc1
           readvar    global.ga_Sectors ; [17d ; 11h]
           get_from_array
           get_from_array
           popx       1
           jump       L00094A7A

L00094AA8: popx       1
           jump       L00094A48


и что-то мне подсказывает, что команды
push 20d ; 14h
push 10d ; 0Ah
с последющим
callasm SE_ArrayAlloc ; 00000AE1
отвечает за создание массива карты галактики и записывает в глобальную переменную writevar global.ga_Sectors ; [17d ; 11h]
а вот такая конструкция
Код:

           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094AA8

на мой взгляд проверяет переполнение (перелет/закольцовывание) и возвращает курсор на начало строки/столбца.
Возможно признак отображения сектора на карте

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

Просьба разрабам Редактора карт, добавьте пару строк на юге и пару колонок на востоке, увеличить в обже (опять же я без опыта его редактирования да и недостаток времени) эти значения
push 20d ; 14h
push 10d ; 0Ah

в нескольких местах (я насчитал шесть) и попробовать дорисовать сектор и проверить... Если мои предположения верны - можно будет получить сколь угодно большую карту Гы-гы
с девизом - Даешь карту Elite:Dangerous в X-Tension Гы-гы

UPD Кстати, кто-то когда-то спрашивал по поводу задержки меню...
мне кажется,
Код:

           push       1000d ; 03E8h
           writevar   global.gs_DelayFactor ; [16d ; 10h]

Вот этот кусок задает задержку в 1сек для меню галактической карты

Последний раз редактировалось: yakim81 (15:42 22-06-2016), всего редактировалось 4 раз(а)
    Добавлено: 11:32 22-06-2016   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
KWON :
Вы же скачивали мой мод.
Там стартовый сектор показывает зацикленность карты в ХТ.
Сделано по изысканию пилота Argonaut:
http://www.elite-games.ru/conference/viewtopic.php?p=654778#654778
Т.е. она круглая!... Улыбка .
Сильно сумлеваюсь в её увеличении.

я все это читал, но нигде не написано, что товарищи в прошлом пытались найти и изменить значение размера матрицы - т.е. увеличить массив секторов. Я же нашел (как мне кажется) где эти значения могут храниться, и если увеличить изначальную матрицу, то галактика от этого не перестанет быть замкнутой, а вот размер ее может увеличиться
К сожалению мне не хватает ни времени, ни умений изменять obj вручную, т.е. конечно можно по смещению увеличить, ради эксперимента

push 20d ; 14h
push 10d ; 0Ah

вот эти значения, но вот добавить новый сектор - тут я увы

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

 ДА. ВОТ оно   (кликните здесь для просмотра)

; procedure TGALAXY.Build(arg1);
;
TGALAXY.Build:
setmem 8
push SP[3] ; arg1
push -3d ; 0FFFDh
if SP[0]<>SP[1] then push 0 else push 1
if SP[0]=0 then jump L0000DD7C
push 0
ret

L0000DD7C: push 0
callasm P_InitLoadingScreen ; 0000169A
pop
push 0
callasm P_ShowNextLoadingScreen ; 00001644
pop
push 1000d ; 03E8h
writevar global.gs_DelayFactor ; [22d ; 16h]
pop
push 0
write TGALAXY.gal_IsBuild ; [0]
pop
push 20d ; 14h
push 1
callasm SE_ArrayAlloc ; 00000001
writevar global.ga_Sectors ; [23d ; 17h]
pop
push 0
push 0
mov SP[1],SP[0] ; loc1
pop
L0000DDBC: push SP[0] ; loc1
push 20d ; 14h
if SP[0]<=SP[1] then push 0 else push 1
if SP[0]=0 then jump L0000DE64
jump L0000DDE4

L0000DDD0: push SP[0] ; loc1
push 1
add SP[0],SP[1]
mov SP[1],SP[0] ; loc1
pop
jump L0000DDBC

L0000DDE4: push 15d ; 0Fh
push 1
callasm SE_ArrayAlloc ; 00000001
push SP[1] ; loc1
readvar global.ga_Sectors ; [23d ; 17h]
put_to_array
pop
push 0
push 0
mov SP[1],SP[0] ; loc2
pop
L0000DE04: push SP[0] ; loc2
push 15d ; 0Fh
if SP[0]<=SP[1] then push 0 else push 1
if SP[0]=0 then jump L0000DE5A
jump L0000DE2C

L0000DE18: push SP[0] ; loc2
push 1
add SP[0],SP[1]
mov SP[1],SP[0] ; loc2
pop
jump L0000DE04

L0000DE2C: push SP[0] ; loc2
push SP[2] ; loc1
push 2
push 2001d ; 07D1h
create_object
call TSECTOR.Create ; 0000101B
push SP[1] ; loc2
push SP[3] ; loc1
readvar global.ga_Sectors ; [23d ; 17h]
get_from_array
put_to_array
pop
jump L0000DE18

L0000DE5A: popx 1
jump L0000DDD0

L0000DE64: push 0
pop
push 0
callasm SE_TableAlloc ; 0000055C
write TGALAXY.gal_Products ; [4]
pop
push 0
callasm SE_TableAlloc ; 0000055C
write TGALAXY.gal_Resources ; [5]
pop
push 0
pop
push 20d ; 14h
push 1
callasm SE_ArrayAlloc ; 00000001
writevar global.ga_Races ; [24d ; 18h]
pop
push 2000000d ; 001E8480h
push 763d ; 02FBh
push 1266d ; 04F2h
push 2
callasm SE_ReadText ; 000000CB
push 14d ; 0Eh
push 3
push 2005d ; 07D5h

Вырезано из X2 та же функция. И тут параметры идут

push 20d ; 14h
push 15d ; 0Fh

что подтверждает мои догадки по поводу размера

UPD. осталось только подтвердить конкретным путем - изменить obj в размерах и дорисовать сектор и залететь туда ))

Последний раз редактировалось: yakim81 (21:13 22-06-2016), всего редактировалось 3 раз(а)
    Добавлено: 20:41 22-06-2016   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
Я тут глянул, он не был на форуме уже почти год. Может у кого есть его контакты, попросить подправить редактор в виду новых возможностей?
    Добавлено: 22:04 22-06-2016   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
В общем, после некоторых опытов с данными переменными удалось установить, что максимальная матрица (предполагаемая) может иметь максимум 31х31 секторов, дальше возможности упираются в интерпретатор. В любом случае, при выставлении больших значений, начинает ломаться структура obj. Как то так.
Написал уважаемому Shaddie письмо, с просьбой увеличить матрицу в его редакторе, что бы можно было проверить мои предположения. Буду ждать ответа.
    Добавлено: 12:04 23-06-2016   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
KWON :
На счет числа 31 я уже давно знаю.
Там такой прикол:
от 0 до 31 добавляется девятка.
А дальше тупо пересчет в гекс без этой беды.
Там Blueboar объяснил почему так:
http://www.elite-games.ru/conference/viewtopic.php?p=682053#682053
http://www.elite-games.ru/conference/viewtopic.php?p=683430#683430

Добавлю.

Это касается также и БТФ. В моем моде:
https://yadi.sk/d/Bt8a9r7RnPveW
Больше 30 ракет на Экспериментал добавить невозможно.
Также по методу магната:
http://www.elite-games.ru/conference/viewtopic.php?p=964377#964377
ставить гонорар за сбитые корабли больше 30 000 невозможно,
будет наоборот минусоваться.
30 в Иксах какое-то заколдованное число.


Я тут покумекал и пришел к выводу:
obj использует некий вид шифрации/сжатия байт-кода (я тут не силён). Если посмотреть этот же код с расшифровкой байт-кода, то можно увидеть, что операция
Код:
00094966: 001D                   |    0            push       20d ; 14h

занимает один байт-код 001D, и расшифровывается как 001Dh - 0009h = 0014h
а если нам надо закинуть в стек большее число, то используется две комманды
Код:
000949FA: 0001 07D1              |    5            pushw      2001d ; 07D1h

и занимают 2 байт-кода, при этом ничего не отнимается.
В принципе, если процедуру эту полностью заменить на свою (потому как простая замена аргумента приводит к смещению адресов) - методы есть, то можно (чисто теоретически) получить любой размер матрицы Гы-гы

PS. Просьба к модераторам перенести последние посты, не относящиеся к теме XTNL в раздел Редактор карт или Раскопки обжа, где они будут более логично смотреться по смыслу, начиная с этого сообщения

Последний раз редактировалось: yakim81 (16:34 24-06-2016), всего редактировалось 2 раз(а)
    Добавлено: 16:32 24-06-2016   
KWON
 408 EGP


Рейтинг канала: 8(857)
Репутация: -10
Сообщения: 171
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
yakim81 :
Если посмотреть этот же код с расшифровкой байт-кода, то можно увидеть, что операция
Код:
00094966: 001D                   |    0            push       20d ; 14h

занимает один байт-код 001D, и расшифровывается как 001Dh - 0009h = 0014h
а если нам надо закинуть в стек большее число, то используется две комманды
Код:
000949FA: 0001 07D1              |    5            pushw      2001d ; 07D1h

и занимают 2 байт-кода, при этом ничего не отнимается.

Правильно. А если нужно 4 байта, тогда пишут так (возьму Ваши цифры для примера):
Код:
000949FA: 0002 0000 07D1

Допишу.
Тут доходчивые объяснения:
http://www.elite-games.ru/conference/viewtopic.php?p=674372#674372
_________________
Следи за собой, будь осторожен. В.Цой

Последний раз редактировалось: KWON (09:40 25-06-2016), всего редактировалось 1 раз
    Добавлено: 18:29 24-06-2016   
yakim81
 305 EGP


Рейтинг канала: 6(417)
Репутация: 18
Сообщения: 220

Зарегистрирован: 07.02.2015
В общем печальные новости у меня.
Вчера провел эксперимент на XTNL, добавил вручную сектор на 10-ю горизонталь с северными вратам, установил южные врата на 9-й горизонтали, попробовал влететь - ожидаемо очутился на 1-й горизонтали без корабля (там же северных ворот нету).
Но я не отчаялся, и начал изучать obj на предмет кода
Код:

           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump

и
Код:

push       10d ; 0Ah
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump

Вот тут я и понял, что все мои потуги никчемны.
Не достаточно просто указать карте размеры, таким кодом исписана добрая часть игрового кода - встречается везде и всюду: расстановка станций, в процедуре поиска больших кораблей (если в доп меню установлена галочка восстанавливать ксенонские М0), для транспорта - поиск товара для фабрики, для пиратов - поиск цели для зондер-команды, вообще вся "фоновая симуляция" игрушки.
В некоторых процедурах, размер галактики передается подпрограмме в качестве аргументов, при чем бывает, что вертикаль обрабатывается в основной процедуре, а горизонталь передается в качестве аргумента в другую подпрограмму.
И тут я опечалился совсем. Проверить все места - не в моих силах, а получить половину галактики неработоспособной - не в моих интересах.
Посему изыскания в данной области временно приостанавливаю, в виду нехватки времени, но с правом возобновления изысканий (ближе к осени решится вопрос с работой, и, возможно, появится больше времени (главное, что бы его не стало меньше Гы-гы ))

Кстати, участок
Код:

L00094980: push       SP[0] ; loc1
           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094A28
           jump       L000949A8

банальный цикл for или while
    Добавлено: 10:25 26-06-2016   
Shaddie
 556 EGP


Рейтинг канала: 6(438)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
yakim81 :
В общем печальные новости у меня.
Вчера провел эксперимент на XTNL, добавил вручную сектор на 10-ю горизонталь с северными вратам, установил южные врата на 9-й горизонтали, попробовал влететь - ожидаемо очутился на 1-й горизонтали без корабля (там же северных ворот нету).
Но я не отчаялся, и начал изучать obj на предмет кода
Код:

           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump

и
Код:

push       10d ; 0Ah
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump

Вот тут я и понял, что все мои потуги никчемны.
Не достаточно просто указать карте размеры, таким кодом исписана добрая часть игрового кода - встречается везде и всюду: расстановка станций, в процедуре поиска больших кораблей (если в доп меню установлена галочка восстанавливать ксенонские М0), для транспорта - поиск товара для фабрики, для пиратов - поиск цели для зондер-команды, вообще вся "фоновая симуляция" игрушки.
В некоторых процедурах, размер галактики передается подпрограмме в качестве аргументов, при чем бывает, что вертикаль обрабатывается в основной процедуре, а горизонталь передается в качестве аргумента в другую подпрограмму.
И тут я опечалился совсем. Проверить все места - не в моих силах, а получить половину галактики неработоспособной - не в моих интересах.
Посему изыскания в данной области временно приостанавливаю, в виду нехватки времени, но с правом возобновления изысканий (ближе к осени решится вопрос с работой, и, возможно, появится больше времени (главное, что бы его не стало меньше Гы-гы ))

Кстати, участок
Код:

L00094980: push       SP[0] ; loc1
           push       20d ; 14h
           if SP[0]<=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00094A28
           jump       L000949A8

банальный цикл for или while

Всем привет!
Собственно и зашел, что бы что то похожее написать. Что бы изменить размеры матрицы галактики нужно менять не в паре мест.
Собственно сама карта хранится в виде массива размером в 20 элементов, где каждый элемент это то же массив размером в 10 элементов, а вот тут каждый элемент это уже объект сектор (TSECTOR):

Код:
function TGALAXY.Build(arg1)
{
 if(arg1 >= 0)
 {
  return(0);
 }
 P_ViewEBMFullscreen("Loadings", 1);
 global.gs_DelayFactor = 1000;
 global.ga_Sectors = SE_ArrayAlloc(20);
 loc1 = 0;
 for(loc1 < 20; loc1 = loc1 + 1)
 {
  global.ga_Sectors[loc1] = SE_ArrayAlloc(10);
  loc2 = 0;
  for(loc2 < 10; loc2 = loc2 + 1)
  {
   global.ga_Sectors[loc1][loc2] = new(TSECTOR)->Create(loc1, loc2);
  }
 }
 ...


Исправлять нужно по всему коду, как минимум в тех местах где идет обращение к глобальной переменной global.ga_Sectors.

Исходники редактора могу поискать - там думаю реально изменить размер матрицы (возможно сразу предусмотрел такую возможность и там размеры вынесены в константы).
_________________
Быстро едешь, тихо понесут...

Последний раз редактировалось: Shaddie (15:50 08-07-2016), всего редактировалось 1 раз
    Добавлено: 15:47 08-07-2016   
Канал X-Tension/X-BTF: «Раскопки обжа на предмет юзабельных вещей»
На страницу: Пред.  1, 2, 3, 4, 5  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Тихо шершнями шурша, Мобил едет не спеша. (Mobil)

  » Раскопки обжа на предмет юзабельных вещей | страница 2
Каналы: Новости | 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