ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» X2-ASM - это проcто! | страница 12 |
|
|
|
Канал X2: The Threat: «X2-ASM - это проcто!» |
|
|
Darth Revan
345 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) Рейтинг канала: 5(153) Репутация: 42 Сообщения: 349 Откуда: Belarus Prime Зарегистрирован: 01.02.2006
![Вы не можете голосовать](images/tool_cool.gif) |
|
Вот, кажется ещё толком не упоминалось. В обжах есть возможность работать с восьмибайтовыми числами с плавающей точкой. Правда, поддерживаются только арифметические операции.
Константа с плавающей точкой (fp8) задаётся командой unknown a,b, где а и b - два dwordа, т.е. те самые 8 байт, расположенные в обратном порядке, т.е. внутреннее представление числа с плавающей точкой. Получить такое представление можно, например, написав маленькую програмку на каком-нибудь ящыке программирования. Может и тулсы каьке есть. На XC запись очень похожа: __unknown(a,b).
Теперь о преобразовании типов. Как и положено, результат арифметической операции целого и fp8 есть fp8. Таким образом, чтобы преобразовать целое в fp8, достаточно сложить наше целое с [color="blue"]0.0[/color]. Т.е. если есть некторая целая переменная value_int, то value_int+__unknown(0,0) будет fp8.
Для осуществления обратной операции, т.е. приведения fp8 к целому служит exe-функция
Т.е. SE_ToInt(value_fp8) вернёт приведённою к целому величину value_fp8.
Как я уже отмечал, для fp8 доступны лишь базовые арифметические операции. Передача в функции, принимающие целые параметры, например, SE_Sqrt, SE_Distance3 и вообще все exe-функции, значений типа fp8 приводит к неправильным результатам - они воспринимаются какцелые, и результат возвращается целый.
Рассмотрим пример на XC использования fp8. Ниже приведена функция
вычисляющая fp8 квадратный корень от fp8 аргумента.
Код: |
.func DSqrt
function DSqrt(a)
{
var d0=__unknown(0,0); //0.0
if(a<=d0){return(0);}
var eps=__unknown(3e45798eh,0e2308c3ah); //точность (относительная)
var x=a;
var d1=__unknown(3ff00000h,0); //1.0
if(a>=d1)
{
var a1=a;
var d15=__unknown(40e00000h,0); //2^15
var d30=__unknown(41d00000h,0); //2^30
var y=d1;
while(a1>d30)
{
a1=a1/d30;
y=y*d15;
}
x=y*SE_Sqrt(SE_ToInt(a1)); //начальное приближение, если a>=1. Здесь два преобразования типов. }
else
{
x=(1+a)/2; //начальное приближение, если a<1
}
x=(x+a/x)/2;
x=(x+a/x)/2; //сразу сделаем две итерации
var x1=0;
while
{
x1=(x+a/x)/2; //итерационыый алгоритм, сходится очень быстро, и крайне быстро
if(x-x1<eps*x1){break;} // вблизи корня, так что достаточно одной-двух итераций
x=x1;
}
return(x1);
} |
|
|
|
Darth Revan
345 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) Рейтинг канала: 5(153) Репутация: 42 Сообщения: 349 Откуда: Belarus Prime Зарегистрирован: 01.02.2006
![Вы не можете голосовать](images/tool_cool.gif) |
|
Вот ещё одно возможное применение чисел с плавающей точкой. Предположим, что нам необходимо вычислить значение некоторой сложной математической функции f(x), где x из некоторого промежутка, причём так, чтобы код работал достаточно быстро. Для примера рассмотрим функцию sin(x). В X3, конечно, её можно вычислить, используя exe-функцию SE_Sin. В X2 вычислить эту функцию тоже можно, но окольным путём через функцию SE_GetRotMatrixFromAngles, что менее эффективно.
Вспомним разложение Тейлора для функции f(x).
f(x+h)=f(x)+f'(x)h/1!+f''(x)h2/2!+f'''(x)h3/3!+...
и так далее до любой степени h (при условии достаточной гладкости функции f(x)).
Возвращаясь к нашему примеру, имеем
sin(x+h)=sin(x)+h-h3/6+O(x,h5),
где остаток
O(x,h5)<=h5/120.
А дальше воспользуемся этой формулой. Внешним от иксов способом вычисляем значение функции f(x) с некоторым шагом d и сохраняем результат в некотором файле. После чего, скажем, при начале игры читаем в обжах эти значения из файла в некоторый массив. В самой функции вычисления значения f(y) по y находим ближайшее значение x из таблицы (например, если наша равномерная сетка значений в таблице содержит 0, то можно брать x=y%d). После чего используем формулу для вычисления f(y)=f(x+h). В нашем случае для вычисления синуса достаточно вычислить
sin(x)+h-h3/6,
где значение sin(x) берётся из массива, причём погрешность вычисления, связанная с использованием приближения синуса, не превосходит величины
O(x,d5)<=d5/120.
|
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
Для временного решение проблемы с декомпиляцией XA2C конструкций вида push / cmd / pop, где cmd - одна из следующих команд add, sub, mul, div, mod, or, and, xor, в дизассемблер введена опция:
UnsafeCmd. Включение опции позволяет комментировать код.
Текущая версия 3.28b доступна на http://checkertwo.narod .ru/do3_28.zip
do3_28.zip |
Описание: |
|
Имя файла: |
do3_28.zip |
Размер файла: |
98.58 KB |
Скачано: |
996 раз(а) |
Последний раз редактировалось: Finist (07:17 09-04-2008), всего редактировалось 1 раз Последний раз редактировалось: CheckerTwo (22:15 08-04-2008), всего редактировалось 1 раз |
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
Маленькие хитрости и трюки...
Как-то по весне обсуждали с AlexYar-ом возможность модернизации Х3. Ни к чему толковому не пришли, но поселилась в душе какая-то неудовлетворенность, что ли. И решил я немного поэкспериментировать. Прошло уж пол-года, все недосуг было, сейчас выкладываю. Возможно, что это пригодится кому-нибудь.
Идея передачи информации из Х3 в другую программу может быть решена просто и красиво. Как оказалось, стандартные exe-функции движка Х3 частично поддерживают работу с pipe-каналами.
Что для этого нужно.
1. Небольшую внешнюю программку - сервер pipe-канала.
2. Маленькие вставки в obj-файл.
3. Собственно все.
1. Громкое слово "pipe-сервер" не должно пугать. На самом деле это очень простая консольная программа. Пример реализации такого сервера можно глянуть в архиве. Написан на Delphi, а потому может быть легко переведен на любой язык, которым владеете. Программа создает именованный канал "\\.\PIPE\X3" и "зависает", в ожидании подключения к нему клиента - в нашем случае Х3.
2. В obj-файле нужно создать три функции для работы с каналом:
Код: |
.var fPipe; // переменная, хранящая хендл pipe-канала
// Эта функция открывает именованный канал
// должна вызываться только один раз при запуске игры
function _create_pipe()
{
global.fPipe = SE_FOpen("\\\\.\\PIPE\\X3", "r+");
return (0);
}
// Эта функция закрывает именованный канал
// должна вызываться только один раз - при завершении игры
function _close_pipe()
{
if (global.fPipe) {
SE_FClose(global.fPipe);
global.fPipe = 0;
};
return (0);
}
// тестовая функция передачи данных из Х3 во внешнюю программу
// может вызываться где попало и столько раз, сколько нужно
// это всего лишь пример, в реальной жизни передавать строчку
// "test test" смысла не имеет.
function _send_pipe()
{
if (global.fPipe) {
SE_FPrintf(global.fPipe, "test test");
};
return (0);
}
|
Именованный канал, однажды созданный будет жить до тех пор, пока либо клиент, либо сервер не прекратят существование. Запускать нужно сначала серверную часть, а уж потом пропатченную игру. Если во время работы игры сервер вдруг упадет, (а такое возможно при посылке очень длинного сообщения, > 4К), то скорее всего, игрушка тоже вылетит в винду.
Для чего это все?
В принципе, отлаживать можно путем записи инфы в файл точно таким же способом. Преимущество пайпов здесь одно - полученные из игры данные можно обработать немедленно, без задержек и ожиданий. К примеру, если вдруг кто-нибудь решится, можно написать небольшой профайлер, измеряющий время работы каждой отдельно взятой obj-процедуры. Для того, чтобы найти наиболее проблемные. А можно, например, сделать внешнюю прогу, которая показывает все имущество игрока и в каком оно состоянии в текущую секунду. Или...
Ограничения.
Увы! К сожалению, выше приведенный код может только передавать данные из Х3. Получить данные из внешней проги таким способом не получится. Это связано с тем, что среди exe-функций отсутствует функция, способная из открытого по SE_FOpen файла что-либо прочитать. Ну или я не нашел... Прикрутить SE_ReadFile тоже не удастся. Причина проста - эта функция внутри себя содержит код определения размера файла. А для pipe-каналов размер файла не существует как таковой. В результате функция вываливается не прочитав ничего.
Замечания.
Функцию SE_WriteFile тоже можно приспособить к работе с pipe-каналами. Но это не очень удобно. Точнее, совсем не удобно. Эта функция сама открывает файл, записывает данные и закрывает файл (ну или канал). Всё, после этого придется снова создавать новый pipe-канал, к старому уже никак не подцепиться. При этом возможны очень неприятные моменты, когда канал еще не создан, а следующая функция уже пытается что-либо передать. Потери инфы или вылеты неизбежны.
pipe.rar |
Описание: |
|
Имя файла: |
pipe.rar |
Размер файла: |
13.71 KB |
Скачано: |
1023 раз(а) |
Последний раз редактировалось: CheckerTwo (15:32 07-08-2008), всего редактировалось 1 раз |
|
|
ULiX
320 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Почетный скриптописатель под Х3: Reunion (+20 EGP)](/conference/images/ranks/medals/x3_script.gif) ![Лучший пилот вселенной Х года 2007 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) Репутация: 146 Сообщения: 573 Откуда: Комсомольск на-Амуре Зарегистрирован: 12.07.2005
![Вы не можете голосовать](images/tool_cool.gif) |
|
Checker!!! Он вкернулся!!! Он снова с нами!!!
Выкладываю свои мемуары сделаные за выходные.
*** Версия XA_ASM 3_28 ***
Работа над модом дроида резко затормозилась...
Причина в невозможности откомпилировать код.
Код: |
.radix 10d
.section code, con
.classdef TSHIP
.vint sh_Droid
.varray sh_DroidPrototypes
; procedures
.func GetDroid
.func SetDroid
.func AddDroidPrototyp
.func GetDroidPrototypes
.endclass TSHIP
; function TSHIP.AddDroidPrototyp(aProt)
TSHIP.AddDroidPrototyp:
setmem 3
; TSHIP_AddDroidPrototyp_if_1_1:
read TSHIP.sh_DroidPrototypes
if SP[0]<>0 then jump TSHIP_AddDroidPrototyp_endif_1_1
push 0
push 1
callasm SE_ArrayAlloc
write TSHIP.sh_DroidPrototypes
pop
TSHIP_AddDroidPrototyp_endif_1_1:
push SP[3] ; <-- aProt
read TSHIP.sh_DroidPrototypes
push 2
callasm SE_ArrayAppend
pop
push 0
ret
; function TSHIP.GetDroidPrototypes()
TSHIP.GetDroidPrototypes:
setmem 1
read TSHIP.sh_DroidPrototypes
ret
; function TSHIP.GetDroid()
TSHIP.GetDroid:
setmem 1
read TSHIP.sh_Droid
ret
; function TSHIP.SetDroid(oDroid)
TSHIP.SetDroid:
setmem 1
push SP[3] ; <-- oDroid
write TSHIP.sh_Droid
pop
push 0
ret
|
Выдаёт ошибки:
Цитата: |
pass2:(_DroidShipClassAdd.inc:7) Err: Error of definition of variable 'sh_Droid'.
pass2:(_DroidShipClassAdd.inc:8) Err: Error of definition of variable 'sh_DroidPrototypes'.
pass2:(_DroidShipClassAdd.inc:19) Err: Error of definition of variable 'sh_DroidPrototypes'.
pass2:(_DroidShipClassAdd.inc:19) Err: Local variable 'TSHIP.sh_DroidPrototypes' not defined.
pass2:(_DroidShipClassAdd.inc:24) Err: Error of definition of variable 'sh_DroidPrototypes'.
pass2:(_DroidShipClassAdd.inc:24) Err: Local variable 'TSHIP.sh_DroidPrototypes' not defined.
pass2:(_DroidShipClassAdd.inc:28) Err: Error of definition of variable 'sh_DroidPrototypes'.
pass2:(_DroidShipClassAdd.inc:28) Err: Local variable 'TSHIP.sh_DroidPrototypes' not defined.
pass2:(_DroidShipClassAdd.inc:37) Err: Error of definition of variable 'sh_DroidPrototypes'.
pass2:(_DroidShipClassAdd.inc:37) Err: Local variable 'TSHIP.sh_DroidPrototypes' not defined.
pass2:(_DroidShipClassAdd.inc:42) Err: Error of definition of variable 'sh_Droid'.
pass2:(_DroidShipClassAdd.inc:42) Err: Local variable 'TSHIP.sh_Droid' not defined.
pass2:(_DroidShipClassAdd.inc:48) Err: Error of definition of variable 'sh_Droid'.
pass2:(_DroidShipClassAdd.inc:48) Err: Local variable 'TSHIP.sh_Droid' not defined.
|
Код вполне рабочий, а природа ошибок абсолютно непонятна.
Поэксперементировав с разными классами я пришёл к выводу, что объявить новую локальную переменную можно исключительно для "одиноких бездетных" классов, например: TX_AUDIO, TINIT, TGALAXY, TSECTOR, TPLANET. Замените все TSHIP на TSECTOR и код прекрасно откомпилируется.
Сначала я было подумал, что определить новую локальную переменную можно только для корневого класса, но увы нельзя добавить локальные переменные к примеру к классу TGBODY.
Есть конечно вариант перекомпилировать весь x3story.obj из исходников как это делает AlexYar... Мысль меня не прельщает, тестирование исключительно через начало новой игры и не совместимость со старыми сохранками, а я задумывал автоматический перевод скриптовых дроидов в обж, у тех пилотов, у которых они были. Да даже если и кто-то захочет пройти сюжет дроида заного, вряд ли прям сразу захочет бросить все свои достижения и начать новую игру... Предпочитаю сделать мод таким образом, чтоб можно было установить и загрузиться со старой сохранки и продолжить играть, но уже с добавочным сюжетом и функциями дроидов.
Что-то намудрил Чекер... Млин паскалист-дельфинист, теперь понятно откуда такая тяга к приставке "T" у классов . Без исходников там черт ногу сломит. У него и в программе все классы начинаются c "T". Пытаюсь найти момент, когда же локальная переменная добавляется в список...
Судя по всему добавление новых локальных переменных должно происходить при первом проходе.
Предпологаю, что добавление новой переменной производится в той же функции, в которой генерируется ошибка на втором проходе.
Называем эту функцию символически дебаговским именем:
(Я не Паскалист, но попробую доступно описать)
void sub_00422C84( MyCompiler AS TCompiler, locVar AS STRING, arg3 AS BYTE, arg4 AS BYTE)
На первых порах замечаем, что существует глобальный флаг символизирующий номер прохода. Флаг является свойством объекта TCompiler.
Замечаем, что на втором проходе функция, которая должна возвращать ссылку на запись TRecVars выбранного класса возвращвет ноль в случае если используется класс "без родствеников".
TRecVars sub_0041A4D0( Symbols AS TStorySymbols, Class AS INTEGER, locVar AS STRING, fMathCaseCompare AS BYTE)
Эта функция похоже проверяет наличие определения локальной переменной не только в текущем классе, но и во всех старших родствениках.
На функцию определения наличия записи в списке грешить не приходится:
TRecVars sub_0041986С( ObjVars AS TVarsList, locVar AS STRING, fMathCaseCompare AS BYTE)
Проверил, на втором проходе список переменных для TSHIP не изменил своего размера, пошаговая трасировка показала, что новая локальная переменная после первого прохода так и не оказалась в списке переменных... Странно, ведь если переменная не может добавиться на первом проходе, то мы должны были получить генерацию ошибки 39h:
$1039 = E, "Нельзя добавить переменную '%s' в указанный класс."
Значит проверка на возможность добавления переменной в класс показала, что это сделать можно?
Ничего подобного это вторая ошибка, которая прикрывает первую. Пошаговая трасировка показала, что функция:
boolean sub_41A5E0(Symbols AS TStorySymbols, Class AS INTEGER),
которая занимается проверкой запрета на добавление новой переменной к классу Class, в случае с классом TSHIP возвращает TRUE, что запрещает добавление переменной к классу и генерируется ошибка 39 на первом проходе... Разбираться, почему сообщение об ошибке не попадает в список ошибок я не стал, мне куда интересней, почему же для класса TSHIP и для всех классов, имеющих родственников нельзя добавить локальную переменную? Что же такое проверяет эта функция?
Функция рекурсивная - может вызывать сама себя. Это сразу бросается в глаза. Рекурсия может применяться только к сходимым функциям (системам), что наталкивает на то, что функция проверяет возможность добавления переменной не только в текущий класс, но и в родственные. Хм...
Пришла в голову ещё одна спорная ситуация.
В алгоритме есть проверка на присутствие одноименной локальной переменной в родительских классах. Если она имеется, то определить мы эту переменную не сможем. Но ведь нет проверки на наличие одноименной переменной у дочерних классов. В принципе получим тот же конфликт: у родительского и дочернего класса будет определена одноименная переменная!
Может поэтому вообще решено заблокировать добавление новых локальных переменных в классы с родствениками?
Да и тяжко наверно это реализовывать, учитывая тот факт, что каждая запись TRecObject имеет запись с числом локальных переменных в текущем классе, запись о числе переменных в родительских классах, и запись об общем числе переменных... Хотя сомневаюсь, что это вызовет сложность, ибо это не вызвало сложности при добавлении новых функций.
Хм... может всё таки причина не в родителях а именно в детях?
Так точно дети всему виной!!! Для класса TSHIP_M1, не имеющего дочерних классов определить новые локальные переменные можно! Только мне это мало поможет.
После досканальной пошаговой проверки делаю выводы:
Функция запрещает определение новой локальной переменной для класса имеющего хотя бы одного "ребёнка", у которого имеется хотя бы одна собствненная локальная переменная.
Эхххх... Может это всё таки ошибка а? Я предполагаю, что нельзя определять в родительском классе переменную с таким же именем, что в дочернем, но чтоб настолько категорично...
Срочно нужно поймать Чекера и выяснить причины такой категоричности, связано ли это с фактической невозможностью, или же это недоделанная проверка на дубли?
Цитата из редми к компилятору:
Цитата: |
Для модификации (дополнения) существующих классов новыми переменными и/или
функциями нужно использовать директиву .CLASSDEF без параметров. Например:
.classdef TASTEROID
.vint NewVariable
.func NewFuction
.endclass TASTEROID
|
Нигде не говорится об ограничениях!!!
Неужели придётся, как Эгософтовцы, извращаться через псевдолокальные переменные оформленные в массиве сохраненном в глобальной переменной? ЖУТЬ!!!
Срочно нужен Чекер!!!!
Так или иначе, ему придется хотя бы разобраться, почему сообщение об ошибке 39 на первом проходе не попало в файл отчета.
Что-то мне это всё напоминает... Как только ULiX начинает вплотную использовать какой-либо инструмент, он как магнит притягивает и выявляет ошибки. Надеюсь это поможет, как отчасти это помогло в эвалюции exScE.
Хм... А вот сейчас поэксперементирую. Уберу к чертям собачьим эту проверку и разрешу добавить переменную назло Чекеру, посмотрим, что из этого выйдет.
Рыыыыыыыыыыы....
У XC тоже свои причуды... Он же каждый раз когда новый файл компилирует автоматом создаёт строки с именами:
S_XC_B_1
S_XC_B_2
S_XC_B_3
и т.д.
И получается, что в нескольких inc файлах имеются разные строки с одними и теми же именами-ссылками... Повеситься можно. Приходится, либо ручками исправлять имена строк в кадом файле отдельно, либо объединять все свои cpp файлы в один и генерировать один inc файл. Не удобно ни то ни другое... ПОсле каждой компиляции XC-XASM исправлять имена строк обломно, а общий файл слишком геморно, когда нужно иметь под глазами сразу несколько классов, чтоб помнить имена переменных и функций, да и вообще НУЖНО!
Явно в XC необходимо ввести метакоманду задающую базовое имя строковой переменной, чтоб можно было избежать повторений в разных модулях.
Как, скажите мне, могут два разных человека написать совместимые сpp файлы, используя в своём коде строки, если в результате inc файлы будут иметь повторения определения строк?
Возвращаемся к нашим "баранам"...
Эксперемент удался... Новые локальные переменные для "семейных" и "многодетных" классов вполне определяются. Видимо Чекер недоделал алгоритм проверки запрета добавления локальной переменной, а тот алгоритм, что имеется сейчас себя не оправдывает. Я конечно убрал "заглушку" запрещающую определить локальную переменную в классе к примеру TSHIP, но всё же думаю не стоит эксперементировать и добавить, скажем, к классу TSHIP переменную "sh_LaunchTime" которая уже определена в дочернем классе TSHIP_MOVEABLE. Сейчас мне не до экспериментов, но думаю ни к чему хорошему они и не приведут. Без заглушки главное подходить к определению новых переменных с особой осторожностью.
А знаете ли вы что...
Класс "TObj0" внегласно существует, но мы его привыкли называть "global".
Выкладываю исправленный xa_asm.exe позволяющий добавлять локальные переменные для всех классов.
Да простит меня Чекер, но я исходников не имею, поэтому правлю, как могу, по нашему, по х......и.
Ну, теперь я уже не мало узнал о структуре его программы изнутря, осталось получить исходники, чтоб процес отладки был не настолько утомительным. Целый день ушёл на тестирование и выяснение структуры, хотя с исходниками с этим можно было бы справиться за несколько минут.
Заодно выяснил почему я не смог использовать TObj2246 как родительский класс, его внутренее имя было создано согласно установке в xa_asm.ini "TypeName = HEX" в TObj8C6. Логично, что объекты разные .
Иправлеям на TypeName = DEC и всё нормально компилируется.
Атач удален, т.к. размещен без разрешения владельца ПО
_________________ Новое ещё не значит лучшее
Последний раз редактировалось: Tension MAN (14:18 12-08-2008), всего редактировалось 2 раз(а) |
|
|
AlexYar
1848 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Создатель модов для X2 (+25 EGP)](/conference/images/ranks/medals/x2_mods.gif) ![Лучший пилот вселенной Х года 2005 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Создатель модов для X3: Reunion (+30 EGP)](/conference/images/ranks/medals/x3_mods.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) ![Знаток игр 2010 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток игр 2011 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Заслуженный знаток игр (+25 EGP)](/conference/images/ranks/medals/kdi_znatok.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Знаток игр 2016 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Лучший пилот вселенной Х года 2017 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток игр 2017 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток Elite: Dangerous (+15 EGP)](/conference/images/ranks/medals/ed_expert.png) Рейтинг канала: 6(434) Репутация: 328 Сообщения: 31534
Зарегистрирован: 26.10.2003
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
Предпочитаю сделать мод таким образом, чтоб можно было установить и загрузиться со старой сохранки и продолжить играть, но уже с добавочным сюжетом и функциями дроидов.
|
И огромной кучей багов, которые вылезут обязательно впоследствии у всех, кто поставит твой мод
Если прочесть внимательно все темы по компиляции - можно сделать вывод, что несовместимость с сохранениями будет в любом случае! Хоть компилируй целиком, хоть накатывай патч. Ну если конечно ты не 1 байт правишь в обже
Так что полная компиляция - единственный 100% рабочий метод. К тому же он гораздо удобнее патчинга (если временно отбросить обновление версий), так как позволяет сразу задать нужные стартовые условия и данные для тестирования, компиляция кода занимает 1 секунду, старт игры значительно сокращается, если поотключать на старте всю лабуду стандартной игры, оставив только рабочую часть тестируемого кода.
ULiX : |
Заодно выяснил почему я не смог использовать TObj2246 как родительский класс, его внутренее имя было создано согласно установке в xa_asm.ini "TypeName = HEX" в TObj8C6. Логично, что объекты разные .
Иправлеям на TypeName = DEC и всё нормально компилируется.
|
И рекомендую не изобретать уже 5 раз изобретенный велосипед, а внимательно усвоить все материалы по ХС и xa_asm-у. Ты повторяешь все ошибки ,которые по сто раз уже разобраны в этих темах, и о которых всем давно известно
зыж Да, и это. Прежде чем выкладывать на сайте хакнутые версии трудов других авторов - перед этим обязательно нужно получить их разрешение.
Модераторам сигнал.
Последний раз редактировалось: AlexYar (12:01 11-08-2008), всего редактировалось 2 раз(а) |
|
|
Shaddie
556 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Серебряная медаль SETI@Home, EG team (208976 credits)](/conference/images/ranks/medals/seti_silver_new.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) Рейтинг канала: 4(60) Репутация: 118 Сообщения: 261 Откуда: Томск Зарегистрирован: 09.09.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
Может поэтому вообще решено заблокировать добавление новых локальных переменных в классы с родствениками?
|
Обращение к локальным переменным в обже происходит по порядковому номеру этой переменной с учетом всех переменных классов-владельцев. То есть если в классе-владельце 10 переменных, то обращение к первой переменной объявленной в нижестоящем по иерархии классе будет происходить по номеру 11. Теперь если добавить в первый класс переменную (к ней теперь нужно будет обращаться по номеру 11) и не изменить по всему коду обращение к переменной с номера 11 на 12 (а если этих переменных в подчиненных классах больше то и для них) можем получить кучу багов.
Поэтому при неполной компиляции обжа CheckerTwo и сделал соответствующую проверку:
ULiX : |
Функция запрещает определение новой локальной переменной для класса имеющего хотя бы одного "ребёнка", у которого имеется хотя бы одна собствненная локальная переменная.
|
_________________ Быстро едешь, тихо понесут... |
|
|
ULiX
320 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Почетный скриптописатель под Х3: Reunion (+20 EGP)](/conference/images/ranks/medals/x3_script.gif) ![Лучший пилот вселенной Х года 2007 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) Репутация: 146 Сообщения: 573 Откуда: Комсомольск на-Амуре Зарегистрирован: 12.07.2005
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
Атач удален, т.к. размещен без разрешения владельца ПО
|
Началось...
Tension MAN, Это с каких пор ты стал защитником авторских прав? И это на ЕГ!!! На сайте который изначально поддерживает тех, кто ломает и "ковыряет" все игры официальных представителей, которые стремятся защитить свои права на продукты...
Если рассуждать по твоей логике, тогда и все читы и патчи, и скрипты кстати тоже нужно считать нарушением авторских прав. В частности в Эгософт уже должны были обоготиться, еслиб решили посудиться со всеми, кто написал свои скрипты для X игр и распространяет их без их разрешения.
AlexYar : |
Прежде чем выкладывать на сайте хакнутые версии трудов других авторов - перед этим обязательно нужно получить их разрешение.
|
Не "хакнутая", а поправленая. Тоже мне защитник авторских прав... уж кто-то, но не ты...
to Shaddie
Спасибо за разъяснение... Хотя меня это больше огорчает, чем радует. Я добавить то добавил переменные, но получается так что дочерние объекты обращаясь к конкретным своим локальным переменным будут обращаться к переменным из parent класса. Хм...
---- Найти среди существующих лок переменных ненужную/неважную и присвоить ей массив своих переменных ----
Получается, что если я не хочу полной перекомпиляции, но хочу добавить новые локальные переменные к объекту, мне придётся воспользоваться тем же извратом, что был сделан Эгософтом, для реализации скриптовых локальных переменных, через глобальный массив. Желание доделывать мод дроида резко отпадает.
AlexYar : |
И рекомендую не изобретать уже 5 раз изобретенный велосипед, а внимательно усвоить все материалы по ХС и xa_asm-у. Ты повторяешь все ошибки ,которые по сто раз уже разобраны в этих темах, и о которых всем давно известно
|
Не еродствуй. Судя по числу закачек инстументов программирования на XC и XAsm таких програмеров единицы. Если ещё учесть, что некоторые закачали эти проги так для посмтореть, то в итоге реально использующих эти инструменты меньше десятка. Тут нужно всячески поддерживать новичков, а не пинать их по каждому поводу... Хотя... это у тебя в крови и не исправимо. Что в скриптописании, что теперь в обжах... Лучше раскритикую, чтоб отбить желание на всю отставшуюся жизнь... Не педогогично это... Учитель должен привлекать ученика к предмету обучения, а не отталкивать, дескать, хреного ты всё делаешь и ничего у тебя не получится, и отвали, иди книжки читать.
AlexYar : |
Если прочесть внимательно все темы по компиляции - можно сделать вывод, что несовместимость с сохранениями будет в любом случае!
|
Ну... если не использовать ожидания, то не в любом. Вот к примеру добавление нового девайса, как я это сделал при добавлении Расширенных Торговых Утилит. Обращение к новому коду происходит только при открытии меню, всё остальное время код не активен, и если весь остальной код не сместился, а это именно так и есть, если я патчу, а не перекомпилирую заново, то можно в любое время отключать и подключать этот мод без вызова проблем. Проблему совместимости мода с оригиналом можно решить если в момент сохранения не будет в активном состоянии (отрабатываться какой либо код программы) ни одна из функций добавленных патчем. И конечно же не будет существовать неразрушенных объектов созданных дерективой new.
Второй вариант выпросить Shaddie разобраться, как же именно добавляются патчи Эгософтом.
Для чего используется в KC метакоманда
#pragma path NNN
Млин. Только я решил почитать об этом и не могу попасть на страницы DEVNET вообще. РРРРРР...
_________________ Новое ещё не значит лучшее |
|
|
Tension MAN
1220 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Член Клуба Пилотов](/conference/images/ranks/medals/club_member.gif) ![Модератор года 2005 (+50 EGP)](/conference/images/ranks/medals/moderator.gif) ![Юморист года 2006 канала КСО](/conference/images/ranks/medals/kso_humor.gif) Рейтинг канала: 4(56) Репутация: 383 Сообщения: 8350 Откуда: Москва, корпус Д&Ф Зарегистрирован: 30.11.2002
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
Tension MAN, Это с каких пор ты стал защитником авторских прав? И это на ЕГ!!! На сайте который изначально поддерживает тех, кто ломает и "ковыряет" все игры официальных представителей, которые стремятся защитить свои права на продукты...
|
меня попросили присечь сие действо и я присек, в будущем при использовании чужого контента оставляйте ссылку на копирайт владельца, без обид это всего лишь формальность
Личные разборки в приват...
_________________ EVE-online - TensionMAN in game.
Последний раз редактировалось: Tension MAN (19:27 14-08-2008), всего редактировалось 2 раз(а) |
|
|
AlexYar
1848 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Создатель модов для X2 (+25 EGP)](/conference/images/ranks/medals/x2_mods.gif) ![Лучший пилот вселенной Х года 2005 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Создатель модов для X3: Reunion (+30 EGP)](/conference/images/ranks/medals/x3_mods.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) ![Знаток игр 2010 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток игр 2011 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Заслуженный знаток игр (+25 EGP)](/conference/images/ranks/medals/kdi_znatok.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Знаток игр 2016 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Лучший пилот вселенной Х года 2017 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток игр 2017 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток Elite: Dangerous (+15 EGP)](/conference/images/ranks/medals/ed_expert.png) Рейтинг канала: 6(434) Репутация: 328 Сообщения: 31534
Зарегистрирован: 26.10.2003
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
И это на ЕГ!!! На сайте который изначально поддерживает тех, кто ломает и "ковыряет" все игры официальных представителей
|
Не заблуждайся. Никто ломателей здесь не поддерживает, их наоборот не любят. Есть те, кто ломает чужие работы, пытаясь возвыситься за счет других, а есть те, кто создаёт сам.
Как только Егософт официально поддержал мод ХТМ - лицензионное соглашение, которое запрещало изменение файлов игры потеряло юридическую силу. Так что к моддерам и скриптерам никаких претензий быть не может.
Если ты не имеешь понятия, что такое сообщество "ежей" (пилотов ЕГи), что нужно всегда спрашивать разрешение на использование работ ежей, и что падлить своим же товарищам нехорошо, ломая их работы, то тут уже тебе помочь нечем, ситуация безнадёжна.
ULiX : |
Судя по числу закачек инстументов программирования на XC и XAsm таких програмеров единицы
|
Ты как всегда делаешь выводы по верхушкам информации. Кроме аттачей здесь есть еще очень много способов распространения
ULiX : |
Не "хакнутая", а поправленая
|
Напиши свой компилятор и правь сколько угодно.
ULiX : |
Тоже мне защитник авторских прав... уж кто-то, но не ты...
|
Я никогда ни чьих авторских прав не нарушал, и без спроса авторов "ежиные" работы не использовал и тем более не ломал. Так что твои намёки - пустой звук, в зеркало лучше посмотри.
Tension MAN : |
Личные разборки в приват
|
Разборок не будет Просто разъяснил человеку элементарные понятия, которые он не смог усвоить сам.
|
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
ULiX : |
Checker!!! Он вкернулся!!! Он снова с нами!!!
|
ну да, здесь я. Иногда пропадаю - коммандировки и загруз на работе...
ULiX : |
Выкладываю свои мемуары сделаные за выходные.
*** Версия XA_ASM 3_28 ***
Работа над модом дроида резко затормозилась...
Причина в невозможности откомпилировать код.
|
Жесть
Ну это дело уже обсуждали. Проблема в том, что ES для классовых переменных использует недоделанную, недоведенную до ума идею.Несмотря на то, что переменные класса компилятся в отдельные таблицы для каждого класса (например, смотреть файл x3story.var - нумерация в классе идет с 0 индекса), доступ к ним (команда read <class_var> и write <class_var>) выполняется по плоской таблице. Т.е. индекс переменной вычисляется для всего дерева наследования. Т.е. иерархии переменных нет. С одной стороны это и неплохо - генерация и исполнение кода реализуется достаточно просто, с другой - мы имеем массу проблем при модификации obj-ей. Точнее сказать, основную массу проблем имеет ES, когда выпускает патчи к игре.
Цитата: |
Что-то намудрил Чекер... Млин паскалист-дельфинист, теперь понятно откуда такая тяга к приставке "T" у классов .
|
А что, паскаль - хороший язык. Вообще, все что придумал Вирт - вполне приличные вещи. Я помню случай у нас на работе. Команда из трех программистов писала на С достаточно большой проект. Месяц парились в отладчиках сидели, ночи не спали.. а ошибки лезли и лезли. Хотя концепция была продумана и спецификации все были. В общем дело к сдаче, шеф трясет, нервотрепка. Ну я плюнул, за 4 дня переписал этот код на модулу, исправил синтаксические ошибки, в которые компилятор пальцем показал, и все. Все! Т.е. и отлаживать не пришлось. Поганяли по тестам и через неделю сдали. Все были просто счастливы После этого я как-то к С охладел, хотя писать приходится и много - для встроенных контроллеров.
Цитата: |
$1039 = E, "Нельзя добавить переменную '%s' в указанный класс."
|
К стати, все что ты делал, можно было не делать, потому что в этом топике, я писал, как можно отрубить вопли ассемблера. Так чтобы он вообще игнорировал ошибку.
Код: |
$1039 = I, "Нельзя добавить переменную '%s' в указанный класс."
|
причем в xasm.ini - там даже по-русски написано
добавлено спустя 30 минут:
А теперь немного о X3TC.
Игра пока еще не вышла, смотреть особо нечего. Но кое что уже можно и поковырять.
Итак, ES переписала свой КC. Изменился ли сам язык и его синтаксис - это мы вряд ли когда узнаем. А вот результат работы компилятора можно поизучать. Собственно основные алгоритмы кодогенерации похоже не изменились. Код какой был неоптимальный, такой и остался. Далее, новый КС генерирует байтовые команды. Коды всех команд были заменены. Так что о совместимости вообще никакой речи быть не может. Что дает такое изменение? В первую очередь - уменьшение размера obj-файла. А так как размер практически не изменился - значит добавили функциональности в игру.
Внутренний формат obj-файлов изменился. Выбросили секцию CTIM. В секции SYMB и VARS остались описания только глобальных процедур и переменных. Все методы и классовые переменные теперь описываются в секции CLAS.
Самое печальное - уничтожены все имена переменных и классов. В таблицах переменных поля-ссылки на имены остались, но забиты какой-то фигней. Это означает, что разбираться и модифицировать будет крайне сложно.
Новый код после дизассемблера будет выглядет примерно так:
Код: |
00084BF3: 05 09 pushb 09
00084BF6: 16 00 22 write class.[0022]
00084BF7: 24 pop
00084BF8: 01 push 0
00084BFB: 16 00 25 write class.[0025]
00084BFC: 24 pop
00084BFD: 01 push 0
00084C00: 16 00 0D write class.[000D]
00084C01: 24 pop
00084C04: 0D 00 09 push sp[0008]
00084C07: 0E 00 07 read global.[0007]
00084C08: 10 get_from_array
|
Некоторые команды изменили формат, причем радикально.
На текущий момент разобраны все команды и таблицы. Есть куча непонятностей, но, я думаю, решаемых. Если на работе будет просвет, то дизассемблер появится в ближайшее время. Про ассемблер пока рано еще говорить.
Всеж непонятно, для чего все это делалось?
Hvala Mne : |
Показал сегодня тему Бернду Лехану, директору ES.
Он сказал, что моддинг дело хорошее, и что если народ добьется каких-то положительных результатов, их можно будет даже опубликовать на сайте ES.
Также если найдутся какие-то еще косяки в компиляторе KC, было бы неплохо об этом информировать ES.
|
Возможно, что Бернд Лехан оценил большой вклад российских моддеров в дело поисков косяков в компиляторе?
Идея для ES:
Мне почему-то думалось, что ES попытается реализовать упрощенный байт-код, который можно было бы транслировать в исполняемый код машины при загрузке (JIT-технологии). Причем эти самые технологии были придуманы 15 лет назад, обкатаны и уже повсеместно используются. Не обязательно использовать dotNet. Можно и свою реализацию. Для такой тормозной игры как Х, это было бы просто замечательным решением - именно для таких задачь, как игрушка, когда единожды загруженная программа крутится очень долго, эта технология была очень даже к месту.
Итак, главный вопрос на повестке дня - как без наличия инфы об именах переменных и классов получить удобоваримый текст?
PS: Получается, что тот задел, который был у моддеров перечеркнули...
Если Darth Revan не появится, то ХС для Х3ТС не будет.
Последний раз редактировалось: CheckerTwo (20:03 19-10-2008), всего редактировалось 3 раз(а) |
|
|
AlexYar
1848 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Создатель модов для X2 (+25 EGP)](/conference/images/ranks/medals/x2_mods.gif) ![Лучший пилот вселенной Х года 2005 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Создатель модов для X3: Reunion (+30 EGP)](/conference/images/ranks/medals/x3_mods.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) ![Знаток игр 2010 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток игр 2011 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Заслуженный знаток игр (+25 EGP)](/conference/images/ranks/medals/kdi_znatok.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Знаток игр 2016 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Лучший пилот вселенной Х года 2017 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток игр 2017 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток Elite: Dangerous (+15 EGP)](/conference/images/ranks/medals/ed_expert.png) Рейтинг канала: 6(434) Репутация: 328 Сообщения: 31534
Зарегистрирован: 26.10.2003
![Вы не можете голосовать](images/tool_cool.gif) |
|
CheckerTwo : |
PS: Получается, что тот задел, который был у моддеров перечеркнули...
|
Слишком поздно они это сделали В х3тс ничего особоважного нет, а тех наработок, что есть для х3тт моддерам хватит ещё на довольно долгое время. Просто егософт делает всё возможное для уменьшения продаж своего продукта и убивания серии, так как подрезать возможности моддерам и кодерам = убивать собственную игру же, которая этим модам обязана свему существованию на компах юзверей
|
|
|
Darth Revan
345 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) Рейтинг канала: 5(153) Репутация: 42 Сообщения: 349 Откуда: Belarus Prime Зарегистрирован: 01.02.2006
![Вы не можете голосовать](images/tool_cool.gif) |
|
CheckerTwo : |
Самое печальное - уничтожены все имена переменных и классов. В таблицах переменных поля-ссылки на имены остались, но забиты какой-то фигней. Это означает, что разбираться и модифицировать будет крайне сложно.
|
Угу, всё равно что экзэшник дизассемблить Игры у меня ещё нет, обж бы посмотреть... Но с xc транслятором врядли следует ожидать проблем. xa2c - смотреть надо. Если оптизатора в KC всё ещё нет, то всё может получиться. Вопрос то ведь не в этом. Толку от трансляторов почти ноль: нет имён переменных - сложно будет даже в скрипт-редактор команды добавить. Можно конечно сравнивать с X3R обжем и пытаться идентифицировать имена, но если честно, надежды что-то маловато. По крайней мере я с этим не справлюсь. Да и в любом случае, удастся лишь в частных случаях, а для серьёзной работы нужно видеть всю картину.
Да, я как понял, и имена exe-функций не остались (которые callasm)? Если так, то это вообще уже всё
Кстати, а возможность вызова функции по ссылке не появилась? Т.е. чтобы адрес можно было сделать переменной, а не константой. Очень полезная вещь, с её помощью вроде можно совместимость с сейвами сделать.
Add: вроде всё не так плохо, как я боялся.
Последний раз редактировалось: Darth Revan (15:58 09-01-2009), всего редактировалось 1 раз |
|
|
AlexYar
1848 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Создатель модов для X2 (+25 EGP)](/conference/images/ranks/medals/x2_mods.gif) ![Лучший пилот вселенной Х года 2005 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Создатель модов для X3: Reunion (+30 EGP)](/conference/images/ranks/medals/x3_mods.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) ![Знаток игр 2010 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток игр 2011 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Заслуженный знаток игр (+25 EGP)](/conference/images/ranks/medals/kdi_znatok.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Знаток игр 2016 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Лучший пилот вселенной Х года 2017 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток игр 2017 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток Elite: Dangerous (+15 EGP)](/conference/images/ranks/medals/ed_expert.png) Рейтинг канала: 6(434) Репутация: 328 Сообщения: 31534
Зарегистрирован: 26.10.2003
![Вы не можете голосовать](images/tool_cool.gif) |
|
Darth Revan : |
Если так, то это вообще уже всё
|
А если прочесть тему багов в х3тс - создаётся впечатление, что в новом КС косяков на порядок больше, чем в старом...
2Darth Revan: Ты в каких дальних странах-то обитал всё это время?
|
|
|
Darth Revan
345 EGP
![Серебряная звезда (+50 EGP)](/conference/images/ranks/medals/silver.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) Рейтинг канала: 5(153) Репутация: 42 Сообщения: 349 Откуда: Belarus Prime Зарегистрирован: 01.02.2006
![Вы не можете голосовать](images/tool_cool.gif) |
|
В Неизведанных Регионах Вот вроде вернулся, а то меня последние два года постоянно чёго-то выбрасывало в окна постоянно куда-то пропадал. Решил завязать с этим безобразием.
Транслятор выправил, ошибка оказалась в неправильно выставленном приоритете команды put_to_array и отсутствию проверки на установку скобок для неё же (в смысле именно тех внешних, охватывающих весь оператор). Т.е. ошибка была при выводе результата, где я проверял приоритеты операторов чтобы скобок лишних не ставить. Для остальных вариантов присваивания всё было OK, а здесь чего-то пропустил И будь я нормальным, я бы давно увидел баг-репорт и исправил. Потестирую малёк и выложу.
|
|
|
AlexYar
1848 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (20 лет)](/conference/images/ranks/medals/veteran20.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Создатель модов для X2 (+25 EGP)](/conference/images/ranks/medals/x2_mods.gif) ![Лучший пилот вселенной Х года 2005 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Создатель модов для X3: Reunion (+30 EGP)](/conference/images/ranks/medals/x3_mods.gif) ![Знаток Х3: Reunion (+15 EGP)](/conference/images/ranks/medals/x3_turn.gif) ![Знаток игр 2010 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток игр 2011 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Заслуженный знаток игр (+25 EGP)](/conference/images/ranks/medals/kdi_znatok.png) ![Активист (+25 EGP)](/conference/images/ranks/medals/activist.gif) ![Знаток игр 2016 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Лучший пилот вселенной Х года 2017 (+50 EGP)](/conference/images/ranks/medals/xt.gif) ![Знаток игр 2017 года (+50 EGP)](/conference/images/ranks/medals/kdi_znatok_god.png) ![Знаток Elite: Dangerous (+15 EGP)](/conference/images/ranks/medals/ed_expert.png) Рейтинг канала: 6(434) Репутация: 328 Сообщения: 31534
Зарегистрирован: 26.10.2003
![Вы не можете голосовать](images/tool_cool.gif) |
|
Ошибка в файле xa_asm.ini в секции [Class_X2]
2201 = "MENU_BACKGRAUND"
2CheckerTwo: поправь у себя в следующих версиях, ок?
Последний раз редактировалось: AlexYar (11:36 09-02-2009), всего редактировалось 3 раз(а) |
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
AlexYar : |
Ошибка в файле xa_asm.ini в секции [Class_X2]
|
Спасибо. Щас поправлю.
|
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
По настоятельной просьбе djkram добавил в ассемблер возможность патча секции STRG.
Ассемблер искать в первом посте.
Сразу обращаю внимание, что эта возможность ассемблера - палка о 2х концах. С одной стороны - удобно поправить строку маленьким патчем без перекомпиляции всего obj-а. Например нужно, чтобы при выводе какой-либо строки вместо маленьких букв выводились заглавные.
Для примера:
Код: |
.title test
.ident X3
.radix 16d
.loadobj "x3story.obj"
.section strg, abs
; была такая строка
; [right][select value = 'Station%d']$PICK$[/select][/right]\n
; слово Station заменим
$ = 0000B0DBh
S0000B0DB: .ascii "[right][select value = 'STATION%d']$PICK$[/select][/right]\n"
.end
|
С другой стороны, можно налететь на трудноуловимые ошибки.
Поэтому, добавлены следующие ограничения:
1. адрес начала строки, задаваемый в примере командой $=0000B0DBh, должен точно соответствовать началу строки в obj-файле. Адреса всех строк можно посмотреть в файлике с расширением .str
2. длина строки в патче должна быть не больше, чем в obj-файле. Если строка короче - дополняется нулевыми байтами.
-- добавлено --
Чуть не забыл. Добавлен ключ StrCrypt в INI файле.
Позволяет принудительное установить режим криптовки секции строк.
Если StrCrypt = true, то ассемблер криптует секцию строк. Если false - то не криптует. Если что-то другое, кроме true/false, или вообще отсутствует в INI файле - то криптовка секции будет выполнятся в большинстве случаев, кроме режима ПАТЧА обжа с секцией STRU вместо STRG.
В одной из версий Х3 ES раздала obj с расшифрованной секцией строк (STRU), так что это нормально.
Последний раз редактировалось: CheckerTwo (01:08 16-01-2011), всего редактировалось 2 раз(а) |
|
|
CheckerTwo
550 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Ветеран Elite-Games (15 лет)](/conference/images/ranks/medals/veteran15.png) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) ![Автор программы под Х2 (+25 EGP)](/conference/images/ranks/medals/x2_prog.gif) ![Автор программы под Х3: Reunion (+25 EGP)](/conference/images/ranks/medals/x3_prog.gif) Рейтинг канала: 4(96) Репутация: 103 Сообщения: 412 Откуда: Tomsk Зарегистрирован: 18.08.2004
![Вы не можете голосовать](images/tool_cool.gif) |
|
Исправления, небольшая оптимизация и доработка.
По просьбе djkram сделал возможным инициализацию глобальных и классовых переменных.
Код:
Код: |
.title tst_var
.ident X3
.radix 10d
.loadobj "tst_var1.cod"
.section code, abs
.vint TGlobal_3 = 101d
.classdef X_AUDIO
.vint au_ErrorCount = 103d
.vint au_IdleFaceState = 203d
.endclass X_AUDIO
.end
|
Секция CODE должна быть с атрибутом ABS. Числовой идентификатор класса задавать не нужно. Он сам вытаскивается из обжа. Имена класса и переменной должны строго соответствовать тем, что нашел дизассемблер. Важно также, что бы у дизассемблера и ассемблера были одинаковые форматы вывода, например DEC - десятичный.
Ассемблер, дизассемблер в первом посте.
|
|
|
KWON
408 EGP
![Золотая звезда (+100 EGP)](/conference/images/ranks/medals/gold.gif) ![Создатель модов для X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_mods.gif) ![Автор программы под X-Tension (+25 EGP)](/conference/images/ranks/medals/xt_prog.gif) Рейтинг канала: 5(113) Репутация: -10 Сообщения: 171 Откуда: Україна. Чигирин. Зарегистрирован: 24.11.2014
![Вы не можете голосовать](images/tool_cool.gif) |
|
Подниму достаточно важную тему и заодно выложу
ини-файлы для "DOBJ" и "XA_ASM"
с заполненными пустыми строками классов ХТ, Х2, Х3.
Сделано благодаря изыскам пилота Chem:
http://www.elite-games.ru/conference/viewtopic.php?p=1830876#1830876
ini.rar |
Описание: |
Полностью заполнены все классы |
|
Имя файла: |
ini.rar |
Размер файла: |
13.44 KB |
Скачано: |
456 раз(а) |
_________________ Следи за собой, будь осторожен. В.Цой |
|
|
|
|
|
Канал X2: The Threat: «X2-ASM - это проcто!» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Мои радости прямо пропорциональны следствиям из времен года, помноженных на литраж выпитого и кубический объем выкуренного. ($atana)
|
» X2-ASM - это проcто! | страница 12 |
|