.::Russian Blood Community Forum::. »Blood: The Game We Playing In » In Blood We Trust » Декомпиляция Blood
1. [M210®] - 03 Июля, 2016 - 13:14:22
Всем привет! я тут пробую декомпилировать исходники Блада...путем сравнения с декомпилированным 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 там мало общего, но при этом можно заметить некоторое сходство и заменить названия переменных на читабельные.

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

2. [M210®] - 04 Июля, 2016 - 11:12:39
Добрался до 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, т.к. кажется, она меньше размером, там меньше кода и значит будет проще разобраться...но если что потом и полную можно будет также расписать

3. [M210®] - 05 Июля, 2016 - 11:32:39
Ну вот и исходники альфы пригождаются Улыбка
Код:

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


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

4. Лекс - 11 Июля, 2016 - 11:27:34
Вау! Да это шаг в перёд бро)
Мой поклон)
Кстати, а можешь написать какие нить доки по декомпиляции? Мне для трилогии чужих подойдёт как раз...

5. [M210®] - 12 Июля, 2016 - 21:32:32
Лекс
наконец-то хоть кто-то тут появился Голливудская улыбка

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

6. [M210®] - 03 Августа, 2016 - 14:11:34
Декомпиляция продвигается успешно Улыбка Нашел переменную, отвечающую за beast mode например...появляются мелкие нюансы, которые можно было просто не заметить - например глаза у черепов в HUDе меняют свою яркость если игрок бегает/ходит - при беге или включенном автобеге - глаза светятся ярко, при ходьбе - тускло. В открытом инвентаре у активированных итемов процентное значение тоже немного становится ярче Улыбка

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

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

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

7. [M210®] - 05 Августа, 2016 - 12:52:23
Меня не очень интересует загрузка карты Blood в коде, т.к. она вся известна и расшифрована, но таки наткнулся на место с дешифровкой переменных по кодовому слову

Код:

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


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

8. ConkerUral - 21 Августа, 2016 - 20:37:27
Цитата:
Еще меня всегда интересовало, каким образом рисуется круглый шар при использовании Chrystall Ball, в подробности не вдавался, но там происходит рендер в текстуру - а сама текстура получается круглая


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

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

9. [M210®] - 22 Августа, 2016 - 22:27:04
Цитата:
который показывает твоего врага (игрока) от третьего лица.

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

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

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


10. ConkerUral - 24 Августа, 2016 - 10:32:58
Что ж, буду ждать новостей =)

11. vzl - 11 Сентября, 2016 - 06:24:20
Прям археологические раскопки.

12. Diman - 11 Сентября, 2016 - 20:34:55
Данная статья описывает процесс активации режима зверя в Blood 1.21, которая в свою очередь стала возможной в частности благодаря стараниям M210R по декомпиляции Blood.

http://cruo.bloodgame.ru/beast/beast_ru.html

13. [M210®] - 02 Октября, 2016 - 15:25:42
Декомпиляция начала приносить первые плоды -
https://www.youtube.com/watch?v=hDZJ6ZOQuSY

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

14. [M210®] - 05 Октября, 2016 - 18:57:54
Все, со взрывами тоже разобрался...в итоге у меня есть полноценный ИИ оригинала. Теперь буду переносить его в BloodCM. в СМ планирую перенести ИИ зомби, чернобога и граждана. Потом сделаю Plasma Pak эпизод и релизну, наверно, последнюю версию СМа. Дальше буду писат порт. Благо для порта у меня теперь есть аболютно все) СМу вроде как нехватало только оригинального ИИ и ее физики. Теперь физика и ИИ есть, движущиеся секторы и механику тоже перенесу из декомпиленной версии...но на крайняк можно будет взять из СМа или написать свою реализацию) Меня беспокоит только ROR...ну надеюсь реверс-инженеринг мне и тут поможет)

(Отредактировано автором: 05 Октября, 2016 - 19:01:02)

15. [M210®] - 20 Декабря, 2016 - 16:46:09
Привет! Решил я начать по-тихоньку писать порт на основе кодов альфа-версии и декомпилированного кода.


На данный момент порт умеет загружать ресурсы из RFF архива, загружает SEQ файлы...на данном скриншоте как раз первые успехи - рабочий вариант SEQ.

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

Также нашел метод, где рисуется ROR область...на деле оказался обычный метод DrawMirrors, но там еще могут быть подводные камни и я пока не дошел до этой части.

AI частично работает в BloodCM, который в скором времени я выложу на свой сайт
Ну как то так в общем Улыбка
Всем с наступающим! поддерживаю

(Отредактировано автором: 20 Декабря, 2016 - 18:35:51)

16. [M210®] - 23 Декабря, 2016 - 19:37:59
Ну вот и первое видео (хотя на самом деле второе)
https://youtu.be/gVJBI377HTs
декомпиляция во всей красе Улыбка

17. [M210®] - 07 Февраля, 2017 - 15:41:48
https://www.youtube.com/watch?v=pzvLXWZlE3Y
Еще одно видео с декомпилированным Blood. Ну и думаю, дальше видюхи делать нет смысла, просто буду потихоньку делать


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