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

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

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

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


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Фактически таблица - это аналог хэша получается.
_________________
Умножим энтропию на 0 :-)
    Добавлено: 18:04 07-04-2008   
Dark_
 64 EGP


Рейтинг канала: 5(201)
Репутация: 7
Сообщения: 58
Откуда: за вторым поворотом
Зарегистрирован: 18.03.2008
Дабы разъяснить конкретную ситуацию, листинг добавления элемента в эту таблицу:

Код:
function TSECTOR.AddSun(arg1)
 {
 TSECTOR.sec_Suns[arg1]=arg1;
 arg1->SetEnvironment(this);
 return(0);
 }

Один обьект одновременно пихает и в ключ и в значение таблицы по этому ключу, что и делает возможным приведенный выше код.

добавлено спустя 43 секунды:
Chem :
Фактически таблица - это аналог хэша получается.

Даже не аналог, vtable и есть самая настоящяя хеш-таблица.

Последний раз редактировалось: Dark_ (18:12 07-04-2008), всего редактировалось 1 раз
    Добавлено: 18:12 07-04-2008   
CheckerTwo
 550 EGP


Рейтинг канала: 4(99)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Пока Дарт Ревана нет предлагаю для временного решения проблемы:
Dark_ :

Вполне логичный код в котором делается примерно следующей
Код:

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


Теперь посмотрим на то что сгенерировал XA2C:
Код:

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


в дизассемблере сделать анализ на конструкции вида:
Код:

            push       1 ; или const
            <ariphmetic_command>
            pop

и либо выводить ошибку, либо комментарить.
Как оказалось в x3story таких мест - больше 750, и каждое из них может приводить к ошибкам...
Что скажите?

Последний раз редактировалось: CheckerTwo (21:09 08-04-2008), всего редактировалось 3 раз(а)
    Добавлено: 21:07 08-04-2008   
Dark_
 64 EGP


Рейтинг канала: 5(201)
Репутация: 7
Сообщения: 58
Откуда: за вторым поворотом
Зарегистрирован: 18.03.2008
CheckerTwo :
либо комментарить.

Коментарить, ошибкой как таковой не является, но логического смысла конструкция не несёт.
    Добавлено: 21:19 08-04-2008   
AlexYar
 1846 EGP


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

Зарегистрирован: 26.10.2003
CheckerTwo :
в x3story таких мест - больше 750


Странно, я насчитал всего 11+1 Подозрение.

Искал поиском по хс-тексту конструкции "+1-1;" и "-1+1;". Первых 11, вторая всего одна.
И все они в сюжетке (тобж3003 и тквест299).
    Добавлено: 21:28 08-04-2008   
CheckerTwo
 550 EGP


Рейтинг канала: 4(99)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
AlexYar :
Странно, я насчитал всего 11+1 Подозрение.

Ну я считал немного по-другому - количество последовательностей команд push/cmd/pop. Где cmd - это одна из следующих команд add, sub, mul, div, mod, or and, xor. Возможно, что декомпилятор Дарта не везде глючит, только изредка...
Самая первая такая последовательность - в функции TX_AUDIO.FadeSFXOut

Последний раз редактировалось: CheckerTwo (21:43 08-04-2008), всего редактировалось 1 раз
    Добавлено: 21:42 08-04-2008   
Dark_
 64 EGP


Рейтинг канала: 5(201)
Репутация: 7
Сообщения: 58
Откуда: за вторым поворотом
Зарегистрирован: 18.03.2008
AlexYar :
Странно, я насчитал всего 11+1

Просто большая часть обрабатывается "правильно", и генерятся строчки вида:
(loc7=loc7-1)+1;
    Добавлено: 21:43 08-04-2008   
CheckerTwo
 550 EGP


Рейтинг канала: 4(99)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Текущая поправленная версия 3.28b доступна на http://checkertwo.narod .ru/do3_28.zip
Проверяйте...

- добавлена опция UnsafeCmd, включение которой позволяет комментировать
код в конструкции вида "push / cmd / pop". Здесь cmd - это одна из
следующих команд add, sub, mul, div, mod, or, and, xor. Такая
последовательность команд может приводить к нерабочему С коду после XA2C.

do3_28.zip
 Описание:
здесь будет надёжней ;)
 Имя файла:  do3_28.zip
 Размер файла:  98.58 KB
 Скачано:  666 раз(а)


Последний раз редактировалось: Finist (07:35 09-04-2008), всего редактировалось 1 раз
    Добавлено: 22:18 08-04-2008   
AlexYar
 1846 EGP


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

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


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

В первом случае единица явно лишняя (и её можно грохнуть), во втором и третьем случае уже поменяется логика:

Код:

Вариант 1:

(loc1=loc1-1)+1;

Вариант 2:

while((loc3=loc3-1)+1)

Вариант 3:

while((loc10=loc10-1)+1>0)


добавлено спустя 25 минут:
Интересный пример оптимизации кода навешивания 20-ти щитов на врата при активации сектора Хы...

Код:

  for(loc1=20;(loc1=loc1-1)+1;1) // абра-кадабра
   {
   var loc2=SA_AllocObject(9,3);
   SA_MoveObjectIntoContainer(loc2,TGATE.ga_ObjectID);
   }


По-идее должно было выглядеть так:

Код:

  loc1=0;
  while(loc1<20)
   {
   var loc2=SA_AllocObject(9,3);
   SA_MoveObjectIntoContainer(loc2,TGATE.ga_ObjectID);
   loc1=loc1+1;
   }


Строчек больше, но смысл более понятен Улыбка

Последний раз редактировалось: AlexYar (12:39 09-04-2008), всего редактировалось 1 раз
    Добавлено: 12:39 09-04-2008   
Dark_
 64 EGP


Рейтинг канала: 5(201)
Репутация: 7
Сообщения: 58
Откуда: за вторым поворотом
Зарегистрирован: 18.03.2008
AlexYar :

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

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

AlexYar :
Вариант 2:

while((loc3=loc3-1)+1)

Вариант 3:

while((loc10=loc10-1)+1>0)


Дык тут pop нету сразу после операции...т.е. выражение реально используется а не выкидывается в void.
В этих вариант ничего не изменится.

добавлено спустя 9 минут:
AlexYar :

for(loc1=20;(loc1=loc1-1)+1;1) // абра-кадабра

Видал индуский код и похуже Гы-гы

Последний раз редактировалось: Dark_ (12:53 09-04-2008), всего редактировалось 1 раз
    Добавлено: 12:53 09-04-2008   
бухой джедай
 181 EGP


Рейтинг канала: 5(141)
Репутация: 70
Сообщения: 7906 Предупреждений: 1
Откуда: Одесса:)
Зарегистрирован: 08.09.2007
люди примерно колво всякого мусора в эгософтовском коду сказать можете ????7(будем немношка посчитать время процесорное которое на этот мусор тратится )
_________________
Так Добрый вечер...Превед с большого Бодуна...
Магистр Непросыхаемость...
Злобный Рецедивист...
    Добавлено: 13:54 09-04-2008   
CheckerTwo
 550 EGP


Рейтинг канала: 4(99)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Finist :
здесь будет надёжней Подмигиваю

Спасибо! Улыбка

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

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


Репутация: 25
Сообщения: 328

Зарегистрирован: 20.02.2006
А это нормально, если в function TORBITALLASER.___startDefendThread() используется 222, а не 500 ед/м? Подозрение.
    Добавлено: 17:34 05-05-2008   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Трудно сказать Подмигиваю
_________________
Умножим энтропию на 0 :-)
    Добавлено: 17:54 05-05-2008   
AlexYar
 1846 EGP


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

Зарегистрирован: 26.10.2003
WD :
используется 222, а не 500 ед/м?


Таких недочётов в коде очень много, но на фоне общего кол-ва ошибок их просто не заметно в игре Гы-гы
    Добавлено: 12:02 06-05-2008   
Rdf
 60 EGP


Рейтинг канала: 3(46)
Репутация: 2
Сообщения: 57

Зарегистрирован: 22.09.2007
Чего я хочу добиться:
Так как npc в бою не используют боковые двигатели, то игрок имеет перед ними большое преимущество. Хотелось бы уровнять шансы. Этого можно добиться несколькими способами, но почти все они затронут баланс сил игры в целом (например, усиление пиратских патрулей сильно подорвет здоровье торговцев). И тут мне в голову пришла идея уменьшить повреждения, получаемые npc от корабля игрока в 2 раза (ну или увеличить повреждения получаемые игроком в 2 раза). Таким образом, изменения коснутся только боев с участием игрока и все останутся довольными.

Как я себе представляю решение:
Очевидно, что подобные вещи осуществляются на уровне движка. Сначала я сунулся в функции TSHIP.Hit и TSHIP.HitDamage, но, пораскинув мозгами, я пришел к выводу, что они работают, скорее всего, на объектах не активного сектора. И тут мне на глаза попалась функция TSHIP.FireLasersOnTarget. Все бы хорошо, но она ссылается на функцию SA_FireOnObject где и происходит самое интересное.

Что я хочу от уважаемых иеромантов:
Функции SA_, SE_ находятся в x3.exe? С помощью какого софта можно поковырять x3.exe? (утомительную процедуру регистрации на сайте egosoft в рядах девелоперов, которая не известно чем закончится, хотелось бы оставить на крайний случай). А может, я чего не досмотрел и есть более простое решение?
    Добавлено: 18:37 06-06-2008   
Chem
 780 EGP


Скрипт-мастер
Рейтинг канала: 15(2610)
Репутация: 248
Сообщения: 4751
Откуда: Киев
Зарегистрирован: 08.01.2007
Rdf :
(утомительную процедуру регистрации на сайте egosoft в рядах девелоперов, которая не известно чем закончится, хотелось бы оставить на крайний случай)

При наличии лицензии - ничего в этой процедуре утомительного нет.
Зато получишь частичное описание таких функций. Хотя в данном случае - практически не поможет.
Описание - куцее. Но явно нарушать часть правил Эгософта не буду Подмигиваю. Т.е. цитату оттуда не приведу. Скажу только стреляет при наличии энергии.
И таки да - живут они в x3.exe
_________________
Умножим энтропию на 0 :-)
    Добавлено: 18:45 06-06-2008   
AlexYar
 1846 EGP


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

Зарегистрирован: 26.10.2003
Chem :
И таки да - живут они в x3.exe

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

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

Последний раз редактировалось: AlexYar (21:09 06-06-2008), всего редактировалось 1 раз
    Добавлено: 21:06 06-06-2008   
klop711
 80 EGP


Репутация: 24
Сообщения: 41
Откуда: Minsk
Зарегистрирован: 19.08.2007
Rdf :
С помощью какого софта можно поковырять x3.exe?

"ковырять" лучше всего этим: Hex-Rays.Decompiler for DataRescue.IDA.Pro.Advanced
Для "ковыряния" - штука бесподобная Супер!, но если захочешь собрать обратно (из C-исходников) то получишь большое количество ранее не существовавших багов, на исправление которых уйдет колоссальное кол-во человеко-часов.

IMHO реинжинеринг X3.EXE интересен с точки зрения:
- перевода на OpenGL (все-таки CVA либо FBO существенно быстрее своих аналогов в DX9);
- избавления от внутреннего жава-подобного интерпретатора псевдокода, и возможно от скриптов (компиляция всего в EXE).

P.S. впрочем есть и косяки (в имеющейся сейчас, в интернете, warez-версии Hex-Ray'я):
- нет де-компиляции кода сопроцессора (плавающая точка будет в виде ассемблерных вставок);
- на выходе - чистый C (без ++), а ~15% кода X3.EXE - операции с классами (реальными!, FIXED я не имею ввиду);
- иногда не разбирает сложные кейзы (но это в принципе решаемо).
    Добавлено: 02:09 19-06-2008   
RD180
 





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

xa2c.exe и xc.exe сработали без ошибок, обж был стандартный от весиии 2.5, использовались конфигурации для дизассемблера и ассемблера выложенные в первом посте этой темы.
    Добавлено: 13:41 02-07-2008   
Канал X3: Reunion -> Модовый и скриптовый отсек X3: Reunion: «Кодинг в обже, вопросы и ответы»
На страницу: Пред.  1, 2, 3, 4, 5, 6, 7  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Есть и другие теории. (так когда-то подписывался duch)

  » Кодинг в обже, вопросы и ответы | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18