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

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

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


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 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(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 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
 550 EGP


Рейтинг канала: 6(399)
Репутация: 118
Сообщения: 259
Откуда: Томск
Зарегистрирован: 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   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
Какая радость, с возвращением! Я пошерстил obj и обнаружил уже свыше 37 мест, где используется два цикла со счетчиком 20 и 10 элементов, но это еще не все места. Я уже писал тов. KWON о двух местах, где цифры 20 и 10 передаются в качестве параметров для функции
Код:

           push       10d ; 0Ah
           push       20d ; 14h
           push       1
           callasm    P_Random ; 000000F5

в функции TFACTORY.Production2();
Если Вы присоединитесь к данной разработке, думаю все получится.
    Добавлено: 13:53 09-07-2016   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
Вопрос на засыпку знающим людям.
1. Есть ли место в obj или каком другом месте, где прописывается принадлежность фабрики или завода той или иной расе?
2. Имеется ли такой же признак у торговой станции?
Если ответ положительный:
3. Имеется ли такой же признак для фабрики игрока?
4. Можно ли использовать этот признак для присвоения его торговой станции?
5. Можно ли всунуть торговую станцию в товары на верфь и присваивать ей признак принадлежности Игроку?

Где то во внутренностях игры видел заготовки принадлежности сектора игроку. Если можно сделать п. 5, то можно будет сделать и сектор, принадлежащий Игроку так, что бы эта информация отображалась на галактической карте. (моя давняя мечта)
    Добавлено: 15:05 10-07-2016   
AlexYar
 1620 EGP


Рейтинг канала: 5(238)
Репутация: 346
Сообщения: 25366

Зарегистрирован: 26.10.2003
yakim81 :
1. Есть ли место в obj или каком другом месте, где прописывается принадлежность фабрики или завода той или иной расе?


В х2 это TSTATION.st_Owner

Может и тут так.

yakim81 :
2. Имеется ли такой же признак у торговой станции?


У всех подклассов должен быть (либо берётся с родительского класса).

yakim81 :
3. Имеется ли такой же признак для фабрики игрока?


Да, игрок - это тоже раса.

yakim81 :
4. Можно ли использовать этот признак для присвоения его торговой станции?


Да.

yakim81 :
5. Можно ли всунуть торговую станцию в товары на верфь и присваивать ей признак принадлежности Игроку?


Нет. Товар не имеет принадлежности, а на верфь добавить можно только в виде товара.

yakim81 :
Где то во внутренностях игры видел заготовки принадлежности сектора игроку.


TSECTOR.sec_Owner тоже есть в х2, но чтобы назначить сектор игроку - нужно во многих местах код менять, так как изначально это не было предусмотрено. В оригинале принадлежность сектора назначается во время создания вселенной (на старте новой игры) и потом уже не меняется. В разных меню, в алгоритмах поиска кораблей/станций/товара и прочих местах потом проблемы могут быть.
    Добавлено: 15:27 10-07-2016   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
Т.е. если я правильно понял, то торговая станция как товар отсутствует в XT? но в X2, как я знаю, торговую станцию можно купить на верфи, и она будет принадлежать Игроку?
    Добавлено: 15:57 10-07-2016   
KWON
 331 EGP


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
yakim81 :
1. Есть ли место в obj или каком другом месте, где прописывается принадлежность фабрики или завода той или иной расе?
2. Имеется ли такой же признак у торговой станции?
3. Имеется ли такой же признак для фабрики игрока?
4. Можно ли использовать этот признак для присвоения его торговой станции?

Возьмите редактор, создайте станцию.
Скопируйте обж, вставте тут же (Копия 001.obj).
Откройте редактором "Копия 001.obj" в созданной станции поменяйте свойства:
расу и тип завода или фабрики (осторожно не сместив координаты).
Сохраните. Откройте оба файла Гекс-идитором, сравните.
И будет вам счастье. Можете приписать таким образом игроку любую станцию заменив код какой то расы на код расы игрока (0012).
Список кодов рас:
000A - 1 Argon
000B - 2 Boron
000C - 3 Split
000D - 4 Paranid
000E - 5 Teladi
000F - 6 Xenon
0010 - 7 Pirate
0011 - 8 Goner
0012 - 9 Player
yakim81 :
5. Можно ли всунуть торговую станцию в товары на верфь и присваивать ей признак принадлежности Игроку?

Вот таблица xmagnat'а:
http://xmagnat. narod.ru/code_obj.html
поиграйтесь сами заменяя на верфи разные предприятия.
Возмите оригинальный обж начните игру в Аргон Прайм, сохранитесь на верфи.
Откройте сейв Гекс-редактором, задайте в поиск, например, Аргонский спутниковый завод.
Код встретится два раза. Из таблицы Магната возмите код любой станции.
Замените в найденных двух местах.
Запускаем сохранеку, смотрим чаво случилось.
И будет видно что доки и торговые станции на верфь добавится не захотят.
    Добавлено: 23:56 11-07-2016   
Shaddie
 550 EGP


Рейтинг канала: 6(399)
Репутация: 118
Сообщения: 259
Откуда: Томск
Зарегистрирован: 09.09.2004
yakim81 :
Если Вы присоединитесь к данной разработке, думаю все получится.

Времени мало свободного, но постараюсь помочь. Пока подправил редактор под матрицу 30 на 30. Надо теперь подготовить 001.obj под эти размеры.
_________________
Быстро едешь, тихо понесут...
    Добавлено: 09:11 12-07-2016   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
Shaddie :
yakim81 :
Если Вы присоединитесь к данной разработке, думаю все получится.

Времени мало свободного, но постараюсь помочь. Пока подправил редактор под матрицу 30 на 30. Надо теперь подготовить 001.obj под эти размеры.

Теперь самое главное - заставить игру видеть сектора больше 20 по вертикали и 10 по горизонтали.
Я провел опыт, где добавил на 11 горизонталь сектор, включил отображение всех секторов на карте через чит меню - все сектора отобразились, а вот 11 горизонталь не отобразилась, хотя связь с 10 на 11 горизонт отображалась, но это 00749.bod, проблему с отображением которого мы уже решили.

KWON :
И будет видно что доки и торговые станции на верфь добавится не захотят.


Возможен ли такой вариант - где то в obj должен храниться список станций, которые являются товаром для верфей. Возможно туда нужно добавить торговую станцию в список, или заменить какую нить фабрику на Торговую.
    Добавлено: 09:26 12-07-2016   
Shaddie
 550 EGP


Рейтинг канала: 6(399)
Репутация: 118
Сообщения: 259
Откуда: Томск
Зарегистрирован: 09.09.2004
yakim81 :

Теперь самое главное - заставить игру видеть сектора больше 20 по вертикали и 10 по горизонтали.
Я провел опыт, где добавил на 11 горизонталь сектор, включил отображение всех секторов на карте через чит меню - все сектора отобразились, а вот 11 горизонталь не отобразилась, хотя связь с 10 на 11 горизонт отображалась, но это 00749.bod, проблему с отображением которого мы уже решили.

Подправил генерацию файла 00749.bod из редактора на новые размеры, обновил редактор в теме (еще раз скачать).
_________________
Быстро едешь, тихо понесут...
    Добавлено: 10:01 12-07-2016   
KWON
 331 EGP


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
yakim81 :
Где то во внутренностях игры видел заготовки принадлежности сектора игроку. Если можно будет сделать и сектор, принадлежащий Игроку так, что бы эта информация отображалась на галактической карте.


С разрешения Shaddie поделюсь Редактором где можно ставить станции игрока и сделать сектор принадлежащий плаеру.
Также можете взять строку любой станции в "Stations.dat" и поставить после раздела [Player],
добавив её на карту уберите личные корабли класов М5, М4 и ТS иначе это тоже будут Эксперименталы только не М3.

XT Map Editor.7z
 Описание:
Редактор карт со станциями игрока
 Имя файла:  XT Map Editor.7z
 Размер файла:  1.9 MB
 Скачано:  168 раз(а)


Последний раз редактировалось: KWON (13:59 03-05-2017), всего редактировалось 11 раз(а)
    Добавлено: 05:53 23-07-2016   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
Улыбка У меня как обычно две новости.
1. Научил obj залетать на 11 горизонталь без проблем
2. Галактическая карта не видит 11 горизонталь, т.е. вообще не видно где летишь, но корабль Гонеров появился в новом секторе, а это значит, что, при создании кораблей Гонеров, учитываются сектора за матрицей 20х10, В меню чит при добавлении спутников во все системы - спутники добавляются в новые сектора за пределами матрицы 20х10, на карте не видно, но они присутствуют в меню личного имущества.


В прикрепленном файле измененный obj + файл патча с вносимыми изменениями.
Внесены изменения во всех циклах в связке 20+10, в некоторых местах значения передаются в качестве параметров для процедур и функций. заменено все подозрительное.

Запускной файл вылетает с ошибкой при выходе из игры (даже без разницы, открывалась карта или нет)

Редактор карт неверно читает значения из 44001.txt

Если после компиляции ваших obj игра вылетает - виноват компилятор, он переписывает секцию STRG на STRU. После компиляции необходимо в новом obj заменить последнюю секцию на исходную.

001_obj_30x30.ZIP
 Описание:
001.obj 30x30
 Имя файла:  001_obj_30x30.ZIP
 Размер файла:  574.27 KB
 Скачано:  143 раз(а)
    Добавлено: 16:34 24-07-2016   
yakim81
 305 EGP


Рейтинг канала: 6(373)
Репутация: 16
Сообщения: 217

Зарегистрирован: 07.02.2015
для отображения карты выше 11 горизонтали и шире 20 вертикали необходимо видимо отредактировать еще 00335.bod и 00365.bod. Пока, к сожалению, нет возможности это провести
Это оказалось не то. У меня закончились мысли...

Последний раз редактировалось: yakim81 (22:39 29-07-2016), всего редактировалось 1 раз
    Добавлено: 16:44 28-07-2016   
KWON
 331 EGP


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Благодаря пилоту Non разобрался как можно русифицировать обж, подобно программистам "НовогоДиска"!

Пошаговое описание:

- берем файл 001.obj ;
- создаем папку "UnpackSTR";
- розмещаем в ней XA_ASM.EXE и XA_ASM.INI пилота CheckerTwo;
брать здесь:
ссылка
http://www.elite-games.ru/conference/viewtopic.php?p=3552417#3552417
- cоздаем файл UnpackSTR.asm
с таким содержимым:
Код:
 .title obj_patch
 .ident XT
 .radix 16d
 .loadobj "001.obj"
 .section code, abs
 .end

т.е. с нулевым действием;
- в файле XA_ASM.INI выставляем:
StrCrypt = false
- берем мышкой файл "UnpackSTR.asm" и перетаскиваем на XA_ASM.EXE;
- получаем файл UnpackSTR.cod;
- скачиваем хороший гекс редактор (я пользуюсь BreakPoint Software Hex Workshop v6.7);
- открываем им UnpackSTR.cod;
- задаем в поиск гекс-код нахождения текстовой секции STR: 535452 (не адрес-смещение);
эта секция это всегда завершение файла 001.obj
и если вы редактором карт Shaddie добавляли сектора и объекты,
то этот участок смещается в конец файла.
- и о чудо! мы видим знакомые английские и немецкие буквы в место непонятных гекс-кодов которые были раньше в этом месте обжа!
- теперь главная и продолжительная работа:
с помощью гекс-редактора переводим все необходимые нам букафки
секция STR занимает в конце файла 001.obj 44090 байт
так что розбираться придется долго.

- завершив гекс-перевод создадим папку "РackSTR"
- розместим в ней XA_ASM.EXE и XA_ASM.INI пилота CheckerTwo;
- но, теперь в файле XA_ASM.INI выставляем:
StrCrypt = true
- помещаем сюда переведенный файл UnpackSTR.cod;
- переименовываем его в 001.obj;
- берем наш текстовый файл UnpackSTR.asm
и не меняя внутренностей переименуем его теперь в РackSTR.asm;
- берем мышкой файл "РackSTR.asm" и перетаскиваем на XA_ASM.EXE;
- получаем файл РackSTR.cod;
- теперь розмещаем в этой папке GPTH.EXE и GPTH.INI от пилота CheckerTwo;
- дапее берем мышкой файл РackSTR.cod и перетаскиваем на GPTH.EXE;
- получаем РackSTRfix.obj и РackSTRfix.pch;
- переименовываем их в 001.obj и 001.pch;
- потом копируем их в папку "L" игры и проверяем результат. Всё.

Правда теперь грузится игра чего то медленние но зато все переводы работают.

Тут обж моей работы.
посмотрите меню взлома, оно почти на русише.
Восстанов. - это значит презагрузка всей Икс-галактики с возвратом всех станций и кораблей (станции игрока не пострадают),
но потребует несколько минут ожидания (10-15) в зависимости от силы Вашего компа,
не додумайтесь нажать это два раза, замучитесь потом ждать презагрузки карты несколько раз.

Вложение удалено, смотреть обновленную русификацию ниже:
http://www.elite-games.ru/conference/viewtopic.php?p=3553065#3553065

Последний раз редактировалось: KWON (06:26 03-01-2018), всего редактировалось 1 раз
    Добавлено: 20:44 27-12-2017   
Non
 791 EGP


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

Зарегистрирован: 27.06.2006
Лучшей альтернативой будет strg abs патчинг с помощью xa_asm.
Доп. информация в посте CheckerTwo

Это удобнее, т.к. результат работы в маленьком текстовом файле.

Ограничения:
- кодировка файла патча CP1251
- длина строки не больше исходной

Важно: в xa_asm.ini выставить опцию StrCrypt = true
Код:
; Принудительное указание на криптовку секции строк.
; Если ключ не указан - выбор режима "криптовать/не криптовать" остается
; за компилятором. Если ключ указан - то будет выполнятся то, что установлено:
; TRUE - криптовать, FALSE - не криптовать
StrCrypt = true

Иначе игра после патча обжа будет вылетать.


Как сделать свой перевод этим способом?

1. Добжим оригинальный обж XT
Код:
dobj 001.obj



2. Открываем 001.str
В этом файле все строки обжа


3. Находим интересующую строку, к примеру:
Код:
00002355 : Dear tester.\nYou are able to test Race Campaigning. The notoriety towards the player of the race of this sector is now -300. If you fire one shot at a factory, a campaign is started. Hitting something after a campaign or after a truce starts next campaign. Have fun\n\nOnno Paap

Номер строки 00002355
Длина исходной строки 279 символов. Учитываем, чтобы наш перевод был не длиннее.


4. Патчим строки по этому шаблону:

Установка указателя на номер строки
Код:
$ = <Номер строки>h

суффикс h нужен, чтобы шестнадцатеричный адрес был правильно найден

Замена строки
Код:
S0002355: .ascii     "Строка"

Номер строки тот же, но первый нуль меняется на S и суффикс h отсутствует
Сама строка в кавычках, строки поддерживаются только в кодировке ASCII

Конечный пример:
Код:
           .title     rus_patch
           .ident     XT
           .radix     10d
           .loadobj   "001.obj"
 
           .section   strg, abs

$ = 00002355h
S0002355:  .ascii      "Уважаемые тестеры.\nВы можете проверить Гонки. Награда победителю этого сектора теперь - 300. Кампания начнется, когда вы выстрелите по фабрике. При выстреле по чему-либо после начала кампании или перемирия перезапустит кампанию. Веселитесь\n\nОнно Паап"

           .end



Как сделать перевод, когда нужно вместить больше символов?

1. Находим команду, вызывающую интересующую нас строку в файле 001.out по номеру строки как в файле 001.str, только первый нуль заменён на S: 00003963 -> S0003963
Код:
000D579C: 0056 00002355          |    0            get_strg   S0002355 ;  ; "Dear tester.\nYou are able to test Race Campaigning. The notoriety towards the player of the race of this sector is now -300. If you fire one shot at a factory, a campaign is started. Hitting something after a campaign or after a truce starts next campaign. Have fun\n\nOnno Paap"

2. Устанавливаем указатель на адрес с вызовом строки и подменяем на вызов своей строки
Код:
           .section   code, abs

$ = 000D579Ch
           get_strg   S000AD6F

3. Дописываем свою строку неограниченной длины в конец строковой секции.
Код:
           .section   strg, con

S000AD6F:  .ascii     "Dear tester.\nYou are able to test Race Campaigning. The notoriety towards the player of the race of this sector is now -300. If you fire one shot at a factory, a campaign is started. Hitting something after a campaign or after a truce starts next campaign. Have fun\n\nOnno Paap\nHAHAHAHAHA HAH AHH HA AHHA HAHH"


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

Новая строка в строковой секции патченного обжа:
Код:
0000AC3B : Dear tester.\nYou are able to test Race Campaigning. The notoriety towards the player of the race of this sector is now -300. If you fire one shot at a factory, a campaign is started. Hitting something after a campaign or after a truce starts next campaign. Have fun\n\nOnno Paap\nHAHAHAHAHA HAH AHH HA AHHA HAHH



В приложении перевод от KWON в виде asm патча и пример добавления строк неограниченной длины.

xt_obj_l10n_example.7z
 Описание:
 Имя файла:  xt_obj_l10n_example.7z
 Размер файла:  3.02 KB
 Скачано:  69 раз(а)
    Добавлено: 20:37 28-12-2017   
KWON
 331 EGP


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Спасибо пилоту Non, получилось сделать удлинение записей русификации:

1. Слово "Armageddon" заменено на "Bосстановление всей карты".
 Cкрытый текст   (кликните здесь для просмотра)

2. Слово "Variables" заменено на "Проверить рейтинг (клав. [+])".
 Cкрытый текст   (кликните здесь для просмотра)

3. Также переведено меню очков расовых рейтингов:
 Cкрытый текст   (кликните здесь для просмотра)

4. Ещё скриншот Секретной миссии:
 Cкрытый текст   (кликните здесь для просмотра)

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


Весь список русифицированных слов в 001.obj:
 Cкрытый текст   (кликните здесь для просмотра)

Перевод секции STRG:
00001621 : Неизв. команда!
00002355 : Уважаемые тестеры.\nВы можете проверить Гонки. Награда победителю этого сектора теперь - 300. Кампания начнется, когда вы выстрелите по фабрике. При выстреле по чему-либо после начала кампании или перемирия перезапустит кампанию. Веселитесь\n\nОнно Паап
0000246A : Да
000025D8 : Игрок
0000281A : Бренaн
00002E50 : Ускор. производ
00002E60 : Норм. производ.
00002E71 : Взлом Банка Икс-Галактики на %d%02d
00002E9B : Взлом оборудования!
000030D0 : Цель
0000312A : Камера
000034EC : Нет доступной информационной помощи на эту тему сейчас
000035EC : Нет объектов!
00003704 : %d.%d м/с
00003725 : %d м/с%c
00003770 : %d МВ
00003820 : %d неопределен
0000394B : Показать все сектора
00003963 : Дать заводы игроку
00003978 : Дать спутники
00003987 : Проверить задачи
0000399B : Не нажимать - затрясет!
000039B6 : Взлом галактического банка на %d
00003BC4 : [Л]
00003C23 : %d км
00003CBA : Перемен.
00003D07 : Диалог
00003E26 : Статус: %s
00003E47 : Текущий Приоритет:%d
00003E6B : Мин. Приоритет: %d
00003E8F : Макс. Приоритет: %d
00003EAD : Есть
00003EB2 : Нет
00003EB8 : Вероятность: %s
00003F72 : Квест
0000405A : Настройка
00004081 : Земля - колыбель ума, но мы не можем жить всегда в колыбели.
000040CB : \nЗемля - колыбель ума, но мы не можем жить всегда в колыбели.
00004125 : \n-Koнстантин E. Циолковский\n\nВы поставили бы корабельные паруса против ветров и водотоков, освещая костер под его палубой... Я не имею времени для бессмыслицы.\nВы поставили бы корабельные паруса против ветров и водотоков, освещая костер под его палубой... Я неимею никакого времени для такой бессмыслицы.
00004269 : \n-Наполеон\n\nГлавное - не переставать задавать вопросы.
000042A4 : \nГлавное - не переставать задавать вопросы.
000042DB : \n-Альберт Ейштейн\n\nУм и дух человека растут с Космосом, в котором он позволяет действовать.
0000433D : \nУм и дух человека рустут с космосом, в котором он действует.
0000437F : \n-Крафт А. Ерике \n
00004446 : %s %s Л:%d Щ:%d
00004604 : Усоверш
00004824 : Меню
0000482C : Переменные Квеста %s
00004843 : Знач.
0000485A : Нет перем-х
00004945 : Пилот:***?????
00004954 : ...
00004958 : ..Неизвестный объект**????
00004973 : ..
00004976 : ..*Неизвестно что????
0000498C : Жрец Гонеров...
0000499C : . ? Н-Л-О.................
00005186 : Ты трус! Почему ты улетаешь? Мы думали, что можем доверять тебе!
000051F2 : Отношение Аргона
0000520C : Отношение Сплита
00005226 : Отношение Паранида
00005240 : Отношение Борона
0000525A : Отношение Телади
00005274 : Отношение Пиратов
0000528E : Отношение Гонеров
000052A6 : Количество ведомых:
0000537A : Нападение
00005384 : Нападающих
000093D0 : Восстанов.
000093EC : Запись в журнал
00009419 : Продажа
00009424 : Продать корабль
00009494 : Запись
000094A0 : Запись
000094AA : Введите запись:
000094C0 : Введите запись:
000094D5 : Улучш. судов
000094E3 : Усоверш. судов
00009505 : Имя
0000950A : Нажмите любую клавишу
0000952D : Нажмите любую клавишу
00009565 : Отлично! Хорошие фотографии. Вот деньги - %s Кредитов.
000095AA : Превосходно! Мы удовлетворены твоей работой. Вот деньги - %s кр.
000096B4 : Ручная запись журнала
000099E9 : Ваш
000099ED : Ваш
00009AA6 : Данные производ.цикла
00009ABC : Данные производ.цикла
00009ADA : Врем.цикла
00009AE5 : Врем.цикла
00009AF0 : Сколько производит
00009B03 : Сколько производ
00009B14 : Производство завер.
00009B29 : Производство завершено
00009B5B : Доступно нужных ресурсов
00009B76 : Доступно нужных ресурсов
00009C4A : Зв-д
00009C4F : Солнц
00009C68 : Система удаленной торговли отсутствует
00009C8F : Система удаленной торговли не установлена
00009CF8 : Груз
00009CFE : Груз
00009D17 : %s%s%d%s Кр
00009E33 : Нет доступа
00009E45 : Нет доступа
00009E56 : Да
0000A146 : %scr получите если доставите меня к %s %s в %s секторе %s для работы. %scr оплата за миссию.
0000A1BD : Найдите формулу лекарства от Аргонского Гриппа(сектор Президентский Рубеж) и вернитесь к %s в секторе '%s'. Время-%s час.
0000A239 : Мое имя-доктор %s, и мне нужна Ваша помощь! У нас на станции вспыхнул 'Аргонский Грипп'. Мы слышали, что существует лекарство, и мы должны узнать его формулу. Пожалуйста, летите к торговой станции в секторе 'Президентский Рубеж', где должна быть эта формула. Я даю вам %s час(а,ов). Пожалуйста, быстрее!
0000A44A : Транспорт
0000A456 : Транспортник
0000A46F : Отключить сканер
0000A483 : Закрыть
0000A48E : Oтключить Скан.
0000A49E : Закр.
0000A4A4 : Привет, моё имя %, я коммерционный представитель этой %s станции. Перевезитe меня на станцию %s в Системе %s. Я заплачу Вам %scr за Вашу службу.
0000A545 : Говорит тайная служба Борона. Мы к сожалению сообщаем, что смог убежать пират Мале Ги. Мы попробуем узнать о его новом местопребывании. Мы изведали, что он пошлет Транспортник с Космотабаком через сектор %s. За уничтожение этого транспорта мы платим 20000кр. Поспешите, однако.
0000A6F6 : Говорит тайная служба Борона. Мы получили анонимное указание, что Мале Ги нападет на боронскую коммерционную станцию в секторе %s. Мы платим Вам 50000кр. если Вы успешно обороните станцию. Спасите невиновных боронцев!
0000A824 : Гром
0000A82C : Maлe Ги
0000A843 : Ocминожек II
0000A850 : Бала Ги
0000A868 : Гонер Ван
0000A872 : Кларис
0000A879 : Cтрела
0000A884 : Meлиса Бенкс
0000A951 : Да, Да
0000A995 : Икс-Прото
0000A9A1 : Паранид Персей
0000AC3B : Bосстановление всей карты
0000AC55 : Проверить рейтинг (клав. [+])


Можно посмотреть сам пример русифицированного обжа.
Бросил в архив ещё и текстовые файлы заодно.

Rus_001.obj.7z
 Описание:
Пример русификации 001.obj
 Имя файла:  Rus_001.obj.7z
 Размер файла:  545.66 KB
 Скачано:  72 раз(а)


Последний раз редактировалось: KWON (15:01 27-01-2018), всего редактировалось 4 раз(а)
    Добавлено: 03:47 03-01-2018   
KWON
 331 EGP


Рейтинг канала: 7(586)
Репутация: -10
Сообщения: 143
Откуда: Україна. Чигирин.
Зарегистрирован: 24.11.2014
Для желающих использовать и русифицировать свой обж а не выложенный пример
предлагается уже переведенный участок обжа - секции STR.

Порядок работы:
1. Скачать файл "Rus OBJ".
2. Открыть гекс-редактором Ваш 001.obj.
3. Задать в поиск гекс-код 535452.
4. Поставить курсор перед буквой S и выделить всё до конца файла (44095 байт).
5. Открыть гекс-редактором файл "Rus OBJ" и просто выделить всё содержимое.
6. Скопировать выделенную область и перенести на выделение Вашего 001.obj.
7. Всё. Сохраните и тестируйте.

UPGR
Или лучше использовать уже готовую программу для русификации XT patch:
http://www.elite-games.ru/conference/viewtopic.php?p=3502247#3502247

Rus OBJ.rar
 Описание:
Закриптованный участок секции STRG
 Имя файла:  Rus OBJ.rar
 Размер файла:  38.97 KB
 Скачано:  69 раз(а)


Последний раз редактировалось: KWON (11:34 21-10-2018), всего редактировалось 1 раз
    Добавлено: 13:51 05-01-2018   
Non
 791 EGP


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

Зарегистрирован: 27.06.2006
Расковырял отключение захвата и отключение бесячего (меня) рандомного повреждения оборудования. Совместимость с сейвами до/после присутствует. Можно поиграть с отключенными, потом вернуть оригинальный обж и продолжить играть.

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

Частично разобрался как подменять стандартные функции кнопок на свои. К примеру заставил F2 запускать добавляемую в конец обжа функцию, чтобы тестировать пошустрее чего делает различный код в XT. Подозрение.

Много чего из обжа X2 очень похоже на XT, я таким образом и понял, какой именно код пропускать в процедуре TSHIP.AttackedBy, чтобы отключить захват. Да.

Подробнее в readme.html внутри архива.
    Добавлено: 23:21 12-01-2018   
Non
 791 EGP


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

Зарегистрирован: 27.06.2006
Мда блин, это жестко. Улыбка

С чего собственно началась эта тема, и на что мозгов хватило только сейчас.

Анимация меню + блокировка управления побеждена. Улыбка

Помимо уничтожения бодов с анимацией по раскопкам CheckerTwo (Open/Close), есть ещё подляна в обже.

Код:
000F1136: 0031 00078825          |    1 L000F1136: jump       L000F1052
000F113C: 0006 000A              |    1 L000F113C: read       TMENU.me_Mask ; [10d ; 0Ah]
000F1140: 0033 000788A9          |    2            if SP[0]=0 then jump L000F115A
000F1146: 0001 03E8              |    1            push       1000d ; 03E8h
000F114A: 000A                   |    2            push       1
000F114C: 005A 000000C5          |    3            callasm    P_Delay ; 000000C5


000F1146 - вот она наша подляна, задержка в 1000 мс.

Простенький патчик для обжа через xa_asm:
Код:
           .title     001.obj
           .ident     XT
           .radix     10d
           .loadobj   "001.obj"

           .section   code, abs

$ = 000F1146h
           push       50d

           .end

Значение ниже 50 не рекомендую, я тестил.

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

...

Дошёл до Ксенонского безумия.
В процедуре TRACE.Logic можно снизить таймауты. Ксенонские карательные отряды будут создаваться не раз в 40-55 секунд, а раз в 2-3 секунды. Верфь больше не закроет свой шлюз Хаос

Код:
; 000D49C2: 0001 2710              |    2 L000D49C2: push       10000d ; 2710h
; 000D49C6: 0001 61A8              |    3            push       25000d ; 61A8h
$ = 000D49C2h
           push       1000d
           push       1500d

; 000D49EC: 0001 7530              |    2            push       30000d ; 7530h
$ = 000D49ECh
           push       1000d


Последний раз редактировалось: Non (02:19 13-01-2018), всего редактировалось 1 раз
    Добавлено: 00:27 13-01-2018   
Канал X-Tension/X-BTF: «Раскопки обжа на предмет юзабельных вещей»
На страницу: Пред.  1, 2, 3, 4, 5  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Доведите процесс до логического завершения: дуэль устройте - на ночных горшках (Grebomet о выяснениях отношений)

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