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

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

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

   Страница 3 из 7
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7  След. | Все страницы
Поиск в этой теме:
Канал X3: Reunion » Модовый и скриптовый отсек X3: Reunion: «Кодинг в обже, вопросы и ответы»
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
klop711 :
"ковырять" лучше всего этим: Hex-Rays.Decompiler for DataRescue.IDA.Pro.Advanced
Для "ковыряния" - штука бесподобная

А можешь расковырять и поделиться на мыло, мня для изучения и понимания Подмигиваю

RD180 :
А как бороться с ошибками, возникающими при работе xa_asm.exe вида (из x3story.err файла):
pass2:(x3story.inc:245791) Err: Undefined identifier 'GetStandardTurretLaserMask'. и т.д? Подозрение. Таких ошибок полчилось 8, причем только для GetStandardTurretLaserMask, GetSpecialTurretLaserMask, GetStandardMissileMask, GetSpecialMissileMask, SetCurrentMissileType, GetNumMissiles, SetPilotTradeSkill и GetPilotTradeSkill.

Явно при декомпиляции не был найден (если запускался x3story_obj_to_cpp.cmd )addx3_25.txt.
Либо, если запускал руками - то не использовал addx3_25.txt .
В файле addx3_25.txt - формирование ссылок на внешние функции.(живущие в ехе).
Либо допиши руками в cpp, либо по-новой дизасм и дизси Подмигиваю
_________________
Умножим энтропию на 0 :-)
    Добавлено: 13:57 02-07-2008   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

Зарегистрирован: 26.10.2003
Chem :
Предлагаемая структура секции Class_X3 для файла dobj.ini.


Напишу здесь тоже, пока не поздно..

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

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


Если вы уже начали писать свои патчи, то рекомендую пока не поздно переделать их на обжи со стандартным именованием классов.

Последний раз редактировалось: AlexYar (12:45 03-07-2008), всего редактировалось 1 раз
    Добавлено: 12:30 03-07-2008   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Ок. Я их тоже для верности выложу в первом посте.
_________________
Умножим энтропию на 0 :-)
    Добавлено: 12:53 03-07-2008   
ULiX
 320 EGP


Рейтинг канала: 7(691)
Репутация: 146
Сообщения: 573
Откуда: Комсомольск на-Амуре
Зарегистрирован: 12.07.2005
Dark_ :
Даже не аналог, vtable и есть самая настоящяя хеш-таблица.

Может кто подскажет синтаксис преопределения таких таблиц на традиционном Си?

Мы знаем, что массивы определяются по формату:

array aMyArray = {a1,a2,a3,a4};
или многомерный:
array aMyMultiArray = {{a1,a2,a3},{b1,b2,b3}};

А какой синтаксис может быть для таблиц?
В коде XC встречаются структуры типо:

var tMyTablle = array2(key1,value1,key2,value2,key3,value3);

Как эта строка может выглядеть на KC?
Есть предположение, что синтаксис такой же как и для массивов, но тип переменной заставляет использовать другой определитель:

table tMyTablle = {key1,value1,key2,value2,key3,value3};

Но это лишь предположение.

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

Дословно:
Цитата:
A 'table' is an unordered 2 dimensional array. The first dimension contains the 'key'. The second dimension contains an additional value that can be retrieved using the 'key'.


Так как звучит слово "array", то возможно и синтаксис определения такой же как у массивов.

Ключом в такой таблице на самом деле является число. Любой объект, любая переменная имеет уникальный числовой идентификатор. Не будет ни оди язык в качестве ключа использовать объект целиком, со всеми его локальными переменными и функциями. Обычно числом-идентификатором является прямой адрес в памяти на объект или же адрес в таблице объетов, и в таблице уже хранится действительный адрес в памяти. И уже этот блок памяти имеет указатель на тип данных, который в нем хранится. Я думаю так бы задумал сделать каждый, кто решил бы создать объектно ореентированый язык программирования. Машина не знает что такое объекты, она оперирует с числами.

Не что не мешает к примеру получить сылку на корабль игрока:

var oPlShip=global.ga_PlayerShip;

А потом перевести это значение в строку не задумываясь, что это не число а ссылка на объект:

var strIDPlaShip = SE_SPrintf("%d",oPlShip);

А потом вывести это значение в журнал или ещё куда нибудь.
Если помните, команда скриптов:

<RetVar> = <RefObj> serialise object

менно то и делает, что возвращает целочисленный идентификатор объекта в виде строки "$#идентификатор_объекта$".
Эти самые идентификаторы как раз и используются в качестве ключей в таблицах.
Так что есть факус. Данные типа int могут принимать любое целочисленное значение, и вполне вероятно присвоить целочисленной переменной такое значение, которое бы совпало с идентификатором объекта.
Например есть предположение, что у любого класса есть объект прототип. Причем судя по всему ссылку на прототип, зная целочисленное значение класса можно получить негативируя это значение. Это конечно предположение, но оно могло бы объяснить структуры, когда в переменную получают класс, а потом негативируют эту переменную.

Dark_ :
Просто большая часть обрабатывается "правильно", и генерятся строчки вида:
(loc7=loc7-1)+1;

Судя по всему проблемы генерации начинаются при работе с массивами и элементами массивов. Кстати не только в вопросе +1-1, но и с другими командами, например что нибудь такое:

loc3[1] = array(SE_SPritf("%d",loc1),SE_SPritf("%d",loc2));

CheckerTwo :
if(0){...} - это они так закоментарили старый плохоотлаженный код. Он нигде не вызывается и не выполняется. Частично можно удалить из дизассемблерного файла, если включить опции RemarkNoUse = On и RemarkIfConst = On

Всё куда проще. Некоторые програмеры забыли про команды условной компиляции
#if
#endif

И создали строчки типо:

if(DEBUG_MODE){...}

А в начале исходников была определена константа:

#define DEBUG_MODE 0

Еслиб они поступили по уму, то использовали бы:
#if DEBUG_MODE
{}
#endif

Но команда Эгософт состоит из нескольких програмеров, и кто-то делает "по уму", а кто-то "как умеет". Хотя есть и другое объяснение: не желание, чтоб изменялся размер файла в отладочном виде и в релизе. Это тоже резонно, например, для создание патчей.

AlexYar :
А эта "единица" точно не баг егософтовского компилятора?

Это не баг. Это команда i++;
Действительно в классическом си сказано, что в структурах типо:

i++ > N

Сначала происходит сравнение с текущим значением в переменной i а потом уже инкрементирование. Что мы и наблюдаем. получаем увеличение на единицу самой переменной, но сравнение ведётся так, как будто этого увеличения не происходило, путем вычита этой единицы от копии значения перемнной в стеке.

AlexYar :
Если вы уже начали писать свои патчи, то рекомендую пока не поздно переделать их на обжи со стандартным именованием классов

Что подразумевается под стандартными именованиями? То что в оригинале идёт в архивах вместе с do3_28 и XA3_28?

Если так, то я уже столкнулся с призраками типо TObj2246, которые нивкакую не могу использовать в своих патчах, пока не придумаю достойного имени для этого класса. Пришлось вписать в xa_asm.ini вместо:
2246 = ""
2246 = "MENU_BIGTEXT2"
И использовать в своей проге псевдоним TMENU_BIGTEXT2, иначе выдаёт ошибку при использовании TObj2246, что класс не определён.

Так что тут ещё не известно как лучше, оставить стандарт, или же воспользоваться заданными именами...

AlexYar, именно по этой причине я ещё и хочу перейти к стандартному синтаксису KC. В котором все псевдонимы определены командой #define.
Например:
#define OBJ_X_AUDIO 1
#define OBJ_INIT 2

Странно, что Чекер использовал префикс "T" вместо "OBJ_". Была бы полная идилия в совпадении имен объектов принятых в ЕС.

И ещё было бы идеально еслиб XA поддерживал как аналог командам типо:
Код:

  push       2100     ; <-- TCLIENT
  call59     TCLIENT.GetPlayerShip

альтернативу:
Код:

  push       2100     ; <-- TCLIENT
  call59     2100.GetPlayerShip

или даже
Код:

  push       2100     ; <-- TCLIENT
  call59     GetPlayerShip


Так или иначе все равно на стадии компиляции TCLIENT заменяется числом согласно таблице xa_asm.ini. Всё равно эта приставка TCLIENT. перед именем функции берётся согласно числу в предшествующем push и имеет информативный характер, чтоб человек читающий код понимал, о какой функции какого класса идёт речь.
_________________
Новое ещё не значит лучшее
    Добавлено: 09:47 29-07-2008   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

Зарегистрирован: 26.10.2003
ULiX :
Если так, то я уже столкнулся с призраками типо TObj2246, которые нивкакую не могу использовать в своих патчах, пока не придумаю достойного имени для этого класса. Пришлось вписать в xa_asm.ini вместо:
2246 = ""
2246 = "MENU_BIGTEXT2"
И использовать в своей проге псевдоним TMENU_BIGTEXT2, иначе выдаёт ошибку при использовании TObj2246, что класс не определён.


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

ULiX :
Так что тут ещё не известно как лучше, оставить стандарт, или же воспользоваться заданными именами...


Ивестно, и очень хорошо известно. Если ты что-либо поменяешь в названиях классов и прочего - ты сразу сделаешь свой код несовместимым со всеми уже написанными патчами и кодами.
Если хочешь подложить себе такую мину - вперёд Улыбка

ULiX :
Странно, что Чекер использовал префикс "T" вместо "OBJ_". Была бы полная идилия в совпадении имен объектов принятых в ЕС.


Объясняю еще раз - никому кроме егософта этой идилии не надо. Чем больше код ХС различается с кодом КС - тем лучше (хуже только егософту).
Пока Егософт не предоставит общественности свой компилятор с полной документацией - говорить о приближении ХС к КС просто глупо.

По асму только CheckerTwo может что-то сказать.
    Добавлено: 12:53 29-07-2008   
ULiX
 320 EGP


Рейтинг канала: 7(691)
Репутация: 146
Сообщения: 573
Откуда: Комсомольск на-Амуре
Зарегистрирован: 12.07.2005
to AlexYar
Заметил одну особенность. Но ещё не стал искать причины.

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

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

Возникло предположение, что имеются служебный диапозон номеров текстовых файлов, которые инициализируются автоматически в случае присутствия в каталоге. Мои файлы текста имеют номера 70060, 440060. Вроде бы в X2 как раз и была автоматическая подгрузка номеров xx0002 xx0003, честно говоря, я уже не помню, давно это было.

AlexYar :
Это действительно призрак, так как проблема чисто локальная на твоем компе. Я с успехом использовал как этот класс, так и сделал дочерние ему классы с новыми меню. Всё работает отлично.

Это кажется старый XA был Улыбка Он не принимал не определенные в xa_asm.ini имена классов. Я недавно обновил все инструменты, но на новых ещё не пробовал, так как уже настроил.

AlexYar :
Если ты что-либо поменяешь в названиях классов и прочего - ты сразу сделаешь свой код несовместимым со всеми уже написанными патчами и кодами.

Пока совместим, т.е. может быть подключен c помощью #include в общий патч по добавлению команд, хоть я и поменял имена... Вернее я не менял, я ведь добавил имя безымянным. Главное дать проге свой xa_asm.ini. Или вписать строчки в прежний.

Почему собтвенно я и настаиваю на приближении к KC и возможности в XA обращаться к классам не по именам а по численному значению.

В КС можно сделать следующее:

#define OBJ_MY_MENU_EXT 12211
#define Me_MENU OBJ_MY_MENU_EXT
#define Me_M 12211

И вызовы:
OBJ_MY_MENU_EXT.Update();
OBJ_Me_MENU.Update();
OBJ_Me_M.Update();

Будут ссылаться на одну и туже функцию.
Это даёт возможность не париться, вспоминая имена нужных классов, а просто программировать без заморочек, давая свои имена, возможно короткие для удобства и скорости набора, а после уже присвоить каждомо своему идентификатору конкретное значение. Собственно, что и делается Эгософтом. Разработчики отдельных компонентов именуют свои классы, а когда все отдельные части компонуются, каждому идентификатору класса выдается свободный номер класса. И это освобождает от заморочек, а какой же номер выбрать для своего нового класса, чтоб не дай бог он не конфликтовал с номером класса другого программиста, который писал свой компонент на XC и тоже создавал новые классы объектов.

Все ЗА и ПРОТИВ и что Лучше, а что Хуже начинает выясняться при создании большого проекта несколькими людьми.

Языки ОО программирования создавались не глупыми людьми, и были выработаны общие концепции, чтоб избежать конфликтов при создании большого проекта состоящего из разных частей, созданных разными людьми. В настоящий момент XC настолько же не идеален насколько не идеальна система добавления консольных команд в X. Нужно всегда искать куда приткнуться, чтоб не конфликтовать с другими скриптами. Даже проект моего дроида не идеален в этом плане, так как фиксированно выбраны номера стеков, в которых будут работать резиденты. Еслиб таких проектов было тысячи, как это наблюдается в скриптописании, то возможны были бы конфликты, еслиб кто-то захотел использовать те же номера стеков для своих задач.

Задача по выделению номеров хорошо показана на примере регистрации пользовательских горячих клавиш. Без заморочек, зарегистрировал клавишу, получил свободный номер по очереди, уже точно никто не займет твоё место, если только новую игру не начнёшь. Если б точно также регистрировались консольные команды и резервировались номера стеков для кораблей, система бы стала более удобной и менее ограниченной.
_________________
Новое ещё не значит лучшее
    Добавлено: 10:09 31-07-2008   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

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


1,3 для игры и 2 для стартового окна-менюшки.

ULiX :
Пока совместим, т.е. может быть подключен c помощью #include в общий патч по добавлению команд


Не может.

ULiX :
хоть я и поменял имена.


Именно поэтому.

ULiX :
Вернее я не менял, я ведь добавил имя безымянным


Нет там безымянных. 2222="" в xa_asm.ini эквивалентно TObj2222.

ULiX :
Главное дать проге свой xa_asm.ini. Или вписать строчки в прежний.


Нельзя.

ULiX :
Все ЗА и ПРОТИВ и что Лучше, а что Хуже начинает выясняться при создании большого проекта несколькими людьми.


Вот именно. Так как исходник обжа для Ext-патча уже есть - все надстройки других кодеров обязаны иметь названия классов именно такие, какие есть в исходнике. Переименование классов запрещено. Переопределение констант так же запрещено.
    Добавлено: 11:56 31-07-2008   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
ULiX :
В КС можно сделать следующее

У тебя есть KC и исходники в его формате ?
_________________
Умножим энтропию на 0 :-)
    Добавлено: 13:22 31-07-2008   
ULiX
 320 EGP


Рейтинг канала: 7(691)
Репутация: 146
Сообщения: 573
Откуда: Комсомольск на-Амуре
Зарегистрирован: 12.07.2005
Chem :
У тебя есть KC и исходники в его формате ?

У меня есть только исходники в его формате.
Исходники миссий, апгрейдов и другой шняги доступны деволоперам на сайте Эгософт.
Думаешь XC создавался сам по себе, Darth Revan на абум соостветствия кода XAsm с Си делал? Он прекрасно провел аналогию между кодом асма и тем же исходным кодом на сях. Когда-то в первых своих статьях по захвату кораблей например, я занимался ручной переделкой из асма в си. Тогда ещё XCtoXasm не существовало. Его существование значительно бы ускорило написание статьи и облегчило мне работу. Я также ореентировался на существующие исходники, чтобы быстро находить стандартные структуры.
И проблему с обрезанием строк в Анализаторе цен в Эгософт решили после того как я пальцем ткнул на исходный код и предложил решение. В том месте сейчас стоит #pragma patch Улыбка
Кстати, интересная метакоманда Подмигиваю

Кстати о исходниках.
На сайте Эгософт выложено немало исходников, которые так и не вошли в игру, но могут представлять интерес отдельных индивидуумов. Если бы XC поддерживал формат мнемоники KC, то пилоты, чьи проекты были не приняты Эгософтом, могли бы с легкостью опробовать их не заморачиваясь переделкой из мнемоники KC в XC. Это рациональный и нужный шаг в эволюции XC!!!
_________________
Новое ещё не значит лучшее
    Добавлено: 10:07 06-08-2008   
ULiX
 320 EGP


Рейтинг канала: 7(691)
Репутация: 146
Сообщения: 573
Откуда: Комсомольск на-Амуре
Зарегистрирован: 12.07.2005
Предлагаю добавить информацию в первый пост. Мы тут с AlexYar спорили на счет задания имен неименованным классам. Я нашёл причину, почему я не мог использовать в своём проекте класс TObj2246. Всё оказалось ООООчень просто. Действительно такого объекта для XAsm не существовало, но не из за ошибки компилятора, а просто из за того, что этот объект именовался как TObj8C6. А исправляется это всё просто.
[b]Нужно в xa_asm.ini исправить строчку

TypeName = HEX

на

TypeName = DEC[.b]

Только в этом случае имена TObj???? начинают восприниматься правильно. Раз мы дизассемблировали в десятично, то и компилить нужно в десятичной.
_________________
Новое ещё не значит лучшее
    Добавлено: 04:48 11-08-2008   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

Зарегистрирован: 26.10.2003
ULiX :
Предлагаю добавить информацию в первый пост


Там это уже давно есть. Читать нужно внимательнее Подмигиваю

Цитата:
Потом подправляете секцию [Class_X3] в файле xa_asm.ini, аналогично сделанному в dobj.ini. Так же исправляем с TypeName = HEX на TypeName = DEC


Последний раз редактировалось: AlexYar (12:06 11-08-2008), всего редактировалось 1 раз
    Добавлено: 12:04 11-08-2008   
Darth Revan
 345 EGP


Рейтинг канала: 4(54)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Вот, вернулся из странствий в Неизведанных Регионах Гы-гы Это я уже совсем оборзел, более года... Полагаю, извиняться бессмысленно - не в первый раз пропадаю. Хотя год - это конечно рекорд, даже в геометрическую прогрессию не вписывается. Задница Стыдно мне. Всё ведь от глупости.

Ну ладно, теперь к делу. Давно пора.

Вижу, что баг серьёзный нашли в xa2c.

Должно быть

Код:
if(<некое логическое выражение которое нам не итерсно>) {
   {
   (loc3[2]=loc3[2]+1)-1; // результат от -1 выкидывается, строчки asm 
                          // 001B629A - 001B629E
                          // идёт if который выглядит примерно так:
if (SE_ArraySize(loc3[1]) > loc3[2]) {  //  впрочем if не важен.


а выдаёт

Код:
if(<некое логическое выражение которое нам не итерсно>)
   {
   loc3[2]=loc3[2]+1-1;  // вот здесь наступает пипец логике кода...
   if(loc3[2]>=SE_ArraySize(loc3[1]))
    {


Буду исправлять. Уж и не знаю как извиняться за отстуствие поддержки трансляторов.

Код:
for(loc1=20;(loc1=loc1-1)+1;1)


это абсолютно нормальный код. Я когда ещё писал транслятор, внимательно изучал asm код в этих местах. Всё здесь правильно. И это вполне валидная запись. Просто с толку сбивает единица в последнем операторе - это скорее всего либо было TRUE, либо в KC-исходнике вообще был пропущен, и KC сам добавил. А может и написал кто так Улыбка

Цитата:
В эгосовтовском коде чёрт ногу сломит на различных if(0){} и прочем мусоре не несущем никакого смысла... мусор этот возможно остался от их собственных патчей или от компилятора у которого весьма специфический стиль генерации asm кода...


Это из-за отстутствия оптимизатора. Т.е. такое чувство, что вообще. Отсуда куча лишнего кода. Я старался в наиболее простых случаях его автоматически убирать. А насом деле, это счастье, что оптимизатора в KC нет, иначе с высокой вероятностью и транслятора xa2c бы не было, поскольку было бы почти или совсем невозможно восстановить исходную конструкцию по asm-коду.

ULiX :
Думаешь XC создавался сам по себе, Darth Revan на абум соостветствия кода XAsm с Си делал?


На самом деле, он как раз сам по себе и создавался. KC я не пользолся вообще, хотя, конечно, знал, что он C-подобный. Всё дело в том, что asm-код от KC без оптимизации, поэтому всё относительно легко восстанавливается.

Последний раз редактировалось: Darth Revan (22:00 07-01-2009), всего редактировалось 3 раз(а)
    Добавлено: 18:01 07-01-2009   
Zurkevich
 50 EGP


Репутация: 0
Сообщения: 29

Зарегистрирован: 06.02.2009
Народ, пожалуйста, если есть, дайте ссылки на информацию по ресурсам игры, какие файлы за что отвечают и их структуру. сори если вопрос не совсем по теме, я пока новичок и хотел бы освоить моды и скрипты для Х3
    Добавлено: 14:16 16-02-2009   
Alexmv
 55 EGP


Рейтинг канала: 1(5)
Репутация: 2
Сообщения: 72

Зарегистрирован: 09.07.2009
а у меня dobj не пашет Задница , полная Задница Пишет, что x3story.obj не найден, хотя он лжит в папке с добжом. Что делать? Помогите плз.
    Добавлено: 14:25 11-08-2009   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

Зарегистрирован: 26.10.2003
Какая винда, какая командная строка запуска добжа?
    Добавлено: 09:51 12-08-2009   
Alexmv
 55 EGP


Рейтинг канала: 1(5)
Репутация: 2
Сообщения: 72

Зарегистрирован: 09.07.2009
AlexYar :
Какая винда, какая командная строка запуска добжа?
обычная windows xp sp3 pro, строка - из файла в начале темы.
    Добавлено: 08:02 22-08-2009   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

Зарегистрирован: 26.10.2003
CheckerTwo :
if(0){...} - это они так закоментарили старый плохоотлаженный код. Он нигде не вызывается и не выполняется. Частично можно удалить из дизассемблерного файла, если включить опции RemarkNoUse = On и RemarkIfConst = On


Кстати, если эти секции выкидывать - обжи с включённой отладкой и выключенной будут несовместимыми по сейвам Улыбка Размеры таких обжей будут разные, соот-но все адреса уедут.
Может поэтому они егософтовским компилятором и не выбрасываются (чтобы можно было быстро включить отладку, заменив if(0) на if(1) и проверять на обычных сейвах).

Кстати, а нет-ли у кого информации по ф-иям:

SA_DoObjectSound
SFX_PlaySound3D
SFX_GetPanningState
SFX_SetPanningState


Ессно, инфу в личку мне. Никого не выдам Хы...
    Добавлено: 15:39 20-10-2009   
AlexYar
 1848 EGP


Рейтинг канала: 13(2096)
Репутация: 328
Сообщения: 31530

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

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

Возникло предположение, что имеются служебный диапозон номеров текстовых файлов, которые инициализируются автоматически в случае присутствия в каталоге. Мои файлы текста имеют номера 70060, 440060. Вроде бы в X2 как раз и была автоматическая подгрузка номеров xx0002 xx0003, честно говоря, я уже не помню, давно это было.


Случайно увидал, а ответа не увидал Гы-гы

Вобщем, любой языковой файл в папке T, который хотя бы 1 раз инициализировался командой Load text, попадает в таблицу языковых файлов (в обже) и при последующих релоадах игры уже подгружается автоматически (т.е. релоад на сейв, сделанный уже после инициализации языкового файла).

Сделано это специально, так как все языковые файлы принудительно выгружаются перед сохранением игры (для уменьшения размера сейвов), а затем опять загружаются.

Предотвратить повторную загрузку файла-описателя может только его физическое удаление.
    Добавлено: 12:12 25-10-2009   
ns88ns
 





Доброго всем.

Вопрос по декомпиллеру. В папке лежат следующие файлы:

dobj.exe
dobj.ini
x3story.obj

в этой папке запускаю:

dobj.exe x3story.obj

в ответ слышу:
Error : file x3story.obj not found.

Файл x3story.obj на самом деле есть и является оригинальным. Пользователь имеет к каталогу полный доступ. Атрибут Read-only на файлах не установлен.

Скажите, почему декомпиллер выдает эту ошибку?

Если вместо OBJ положить любой другой файл, переименовав его в x3story.obj, то выдается ошибка "not loaded", что есть правильно ибо файл не является OBJ.
    Добавлено: 18:24 03-03-2010   
CheckerTwo
 550 EGP


Рейтинг канала: 4(99)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
ns88ns :
в ответ слышу:
Error : file x3story.obj not found.

Файл x3story.obj на самом деле есть и является оригинальным. Пользователь имеет к каталогу полный доступ. Атрибут Read-only на файлах не установлен.

Скажите, почему декомпиллер выдает эту ошибку?

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

На всякий случай скажи версию dobj и версию x3story.obj. Я проверю на выходных...
    Добавлено: 11:07 07-03-2010   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Кодинг в обже, вопросы и ответы»
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Вот забросали баянами пилота. (Nova Purga)

  » Кодинг в обже, вопросы и ответы | страница 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