Список форумов .::Russian Blood Community Forum::.
Официальный форум русского сообщества фанатов игры BLOOD
Deep Cold Grave
Официальный сайт издательства ОНО
BloodGame

 

Blood: The Game We Playing In
In Blood We Trust
Декомпиляция Blood
[Страниц (5): [1] 2 3 4 5 » ]

Декомпиляция Blood
| Новая тема | Ответить | | Поиск в теме |
| Версия для печати |
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Всем привет! я тут пробую декомпилировать исходники Блада...путем сравнения с декомпилированным engine.obj из исходников Tekwar ну и сравниваю с исходниками релизного Buildа....в декомпилированном Бладе я уже нашел метод drawrooms, а там же и дальше по цепочке все известные методы движка.....получается чтото вроде этого
Код:

word_3823B6 = xdimen;
  numscans = 0;
  numbunches = 0;
  word_3823D2 = 0;
  dword_11835C = 0;
  word_3823D4 = 0;
  spritesortcnt = 0;
  if ( globalcursectnum < 1024 )
  {
    v27 = globalcursectnum;
    updatesector(globalposx, globalposy, &globalcursectnum);
    if ( globalcursectnum < 0 )
      globalcursectnum = v27;
  }
  else


как можно заметить, код становится более читабельным) Может быть я смогу хотя бы структуру движка из исходников Блада воссоздать, может быть дальше будет проще и все получится Ухмылка

Кстати декомпилированный engine.obj я взял за основу только потому, что в нем сохранены названия всех глобальных переменных а сама декомпилированная структура практически не отличается от декомпилированного кода Блада, поэтому очень легко сравнивать...единственная проблема, версии движка разные, поэтому drawalls я начал брать из исходников jfbuildа, потому что с Engine.obj там мало общего, но при этом можно заметить некоторое сходство и заменить названия переменных на читабельные.

Ну может кто-то этим уже занимался?

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 03 Июля, 2016 - 13:14:22
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Добрался до rotatesprite метода...теперь я знаю в каком месте "выводится реклама" в демоверсии по выходу из игры
Код:

 if ( !byte_124638 )
  {
    setview(0, 0, xdim - 1, ydim - 1);
    sub_87572(0, v3);
    rotatesprite(10485760, 6553600, const65536, 0, 2044, 0, 0, 10, 0, 0, xdim - 1, ydim - 1);
    sub_12800(const65536, v3);
    v59 = dword_124618 + 600;
    while ( v59 > dword_124618 && !sub_8BA70() )
      ;
    sub_87572(0, v3);
    rotatesprite(10485760, 6553600, const65536, 0, 2592, 0, 0, 10, 0, 0, xdim - 1, ydim - 1);
    sub_12800(const65536, v3);
    v60 = dword_124618 + 600;
    while ( v60 > dword_124618 && !sub_8BA70() )
      ;
    sub_87572(0, v3);
    v50 = const65536;
    rotatesprite(10485760, 6553600, const65536, 0, 2593, 0, 0, 10, 0, 0, xdim - 1, ydim - 1);
    sub_12800(const65536, v3);
    v61 = dword_124618 + 600;
    while ( v61 > dword_124618 && !sub_8BA70() )
      ;
  }


2044, 2592, 2593 - это тайлы рекламы, выводятся поочередно...видимо два других метода и цикл - это затемнение экрана

К слову, я использую shareware версию 0.99, т.к. кажется, она меньше размером, там меньше кода и значит будет проще разобраться...но если что потом и полную можно будет также расписать

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 04 Июля, 2016 - 11:12:39
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Ну вот и исходники альфы пригождаются Улыбка
Код:

int InitStatusBar()
{
  return tileLoadTile(2200);
}


Это декомпилированный метод из Blood.exe. Точно такой же метод есть в исходниках альфы....а тайл 2200 соответствует большому статусбару (напомню, что использую shareware версию)

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 05 Июля, 2016 - 11:32:39
Лекс


Маньяк-потрошитель
Откуда: Самара
ICQ
Вернуться к началу
Профиль :

Вау! Да это шаг в перёд бро)
Мой поклон)
Кстати, а можешь написать какие нить доки по декомпиляции? Мне для трилогии чужих подойдёт как раз...

-----
LEX

Всего записей: 61 : Дата рег-ции: Март 2011 : Отправлено: 11 Июля, 2016 - 11:27:34
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Лекс
наконец-то хоть кто-то тут появился Голливудская улыбка

Я сам занялся декомпиляцией недавно, поэтому советов дать не могу...да и просто знание движка делает декомпиляцию более простой...достаточно только найти "знакомую" функцию, свериться с исходниками и расширяться от нее...в функции все глобальные переменные переименовать на читаемые, а дальше можно искать функции, где используются уже известные функции, опять же сверяться с исходниками и переименовывать...таким образом я нашел практически все функции движка, некоторые функции Блада, которые были расширенными от стандартных функций ну и функции, которые есть в альфа версии...забавно, но практически все альфа-функции есть в релизе, либо в неизменном виде, либо немного расширенные. Проблема остается в том, что структуры вприцнипе не декомпилятся, пока собственно эта структура неизвестна...таким образом в релизе мне неизвестна полностью структура PLAYER и еще огорчает то, что структура игрока из альфы отличается от релизной версии, поэтому ее тоже не получится использовать....остается лишь догадываться, таким образом
имеет строку: *(player + 12) = sprite.extra это будет означать, что в структуре по смещению 12 записывается экстра информация...и дальше просто запомнить это смещение и использовать знания в ходе декомпиляции....а есть еще хуже - структура xsprite например....хоть структура полностью известна, "расшифровке" декомпилятором переменные все равно не поддаются, т.к. xsprite это бинарное поле, адресация по смещению там не прокатывает (ну или прокатывает частично) поэтому тут просто нужно по памяти "угадывать" переменную.....например *xsprite << 18 >> 18 это тоже самое что и *sprite как ни странно и это соответствует самой первой переменной в структуре xrefer....ну и как то так и выкручиваться Улыбка

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 12 Июля, 2016 - 21:32:32
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Декомпиляция продвигается успешно Улыбка Нашел переменную, отвечающую за beast mode например...появляются мелкие нюансы, которые можно было просто не заметить - например глаза у черепов в HUDе меняют свою яркость если игрок бегает/ходит - при беге или включенном автобеге - глаза светятся ярко, при ходьбе - тускло. В открытом инвентаре у активированных итемов процентное значение тоже немного становится ярче Улыбка

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

Кстати также нашел код "добивания" в мультиплеерном режиме, который вызывает Shroom Delirium эффект.

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

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 03 Августа, 2016 - 14:11:34
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

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

Код:

sub_9DF00(&v81, &v71, 37);
if ( v76 && v76 != 'ttaM' && v76 != 'Matt' )
{
    decrypt((int)&v71, 37, 'ttaM');
    byte_182DAB = 1;
}


Надо будет потом покопать в эту сторону, как например, что означает byte_182DAB = 1 и подобные Улыбка

Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 05 Августа, 2016 - 12:52:23
ConkerUral



Пушечное мясо

Вернуться к началу
Профиль :

Цитата:
Еще меня всегда интересовало, каким образом рисуется круглый шар при использовании Chrystall Ball, в подробности не вдавался, но там происходит рендер в текстуру - а сама текстура получается круглая


Играл я по сетке через локалку как-то с другом и скажу, что этот шар при использовании выводит вверху то ли слева, то ли справа ВНЕЗАПНО шар, который показывает твоего врага (игрока) от третьего лица. Очень круто)

Вы - молодец. Мне всегда хотелось увидеть исходники этой игры. Надеюсь, вы докопаетесь до сути Подмигивание

Всего записей: 4 : Дата рег-ции: Нояб. 2014 : Отправлено: 21 Августа, 2016 - 20:37:27
[M210®]



Избранный
Откуда: Москва

Вернуться к началу
WWW : Профиль :

Цитата:
который показывает твоего врага (игрока) от третьего лица.

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

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

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



Всего записей: 939 : Дата рег-ции: Янв. 2008 : Отправлено: 22 Августа, 2016 - 22:27:04
ConkerUral



Пушечное мясо

Вернуться к началу
Профиль :

Что ж, буду ждать новостей =)

Всего записей: 4 : Дата рег-ции: Нояб. 2014 : Отправлено: 24 Августа, 2016 - 10:32:58
| Версия для печати |
| Новая тема | Ответить | | Поиск в теме |


Blood: The Game We Playing In
In Blood We Trust
Декомпиляция Blood
[Страниц (5): [1] 2 3 4 5 » ]


Powered by ExBB 1.9.1
Original Style v1.5a2 created by Daemon.XP


GameTop - рейтинг игровых ресурсов. Портал Rolemancer (www.rolemancer.ru)