.::Russian Blood Community Forum::. »Blood: The Game We Playing In » In Blood We Trust » Декомпиляция Blood
Страниц (2): [1] 2 »
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. Ну и думаю, дальше видюхи делать нет смысла, просто буду потихоньку делать

18. [M210®] - 19 Мая, 2017 - 15:05:58
Всем привет Улыбка Довел свой source порт Blood до состояния бета релиза
http://m210.duke4.net/index.php/files/viewdownload/9-java/50-bloodgdx

Порт основан на реверс-инженеринге оригинального blood.exe, поэтому использует все ресурсы и всю механику/логику оригинала.
BloodGDX абсолютно играбелен, и уже может составить конкуренцию Dos версии, от которой отличается только отсутствием вокселей.
Воксели, hires, mp3 и другие примочки буду добавлять в процессе разработки.
Для запуска необходима JRE не ниже 1.6, собственно по этой причине минимальная версия Windows - 2000
Также были небольшие тесты на Mac OS X и Linux

19. Лекс - 22 Мая, 2017 - 12:17:33
Чувак это просто офигенно! Нет серьёзно! Мой низкий поклон тебе, как от человека разрабатывающего только модификации. Я понимаю какой это труд, сам процесс реверс-инженеринга, логики работы. Учитывая, что я сам ща больше упор делаю на конверсии, нежели просто модификации.
Есть вопрос не в тему по поводу явы - отрисовка изображенийполигонов там делается стандартными функциями? Т.е. там базовые наборы для работы есть? Мне бы это очень помогло для написания простых программ для работы с трилогией чужих...
Просто зная С++ там на каждую вещьфункцию надо выискивать и вычитывать набор библиотек и прочего, чтобы банально что то отрисоватьпорезать.

Уже пробегал порт, просто улёт бро, серьёзно. Заметил правда один косяк - клавиши "Fire" нет в настройках. Я хотел приседание повесить на левый CTRL, а саму клавишу не нашёл, чтобы стереть у неё настройку.
Да и такой вопрос - планируется ли онлайн доработка? Хотя бы примитивная, как в оригинале. Я бы даже нашёл людей для пробежки по всем режимам игры.

20. [M210®] - 23 Мая, 2017 - 20:32:36
Цитата:
Т.е. там базовые наборы для работы есть?

Вприцнипе да, все есть Улыбка Только на работы с графикой нужна не чистая ява а lwjgl или libgdx, либо другой фреймворк

Цитата:
"Fire" нет в настройках

потому что она не "Fire" а "Weapon_Fire" Улыбка

Цитата:
Да и такой вопрос - планируется ли онлайн доработка?

скорее всего да, но когда - пока не знаю

(Отредактировано автором: 23 Мая, 2017 - 20:37:36)

21. DrKugelschreiber - 24 Мая, 2017 - 17:57:30
Отлично! Все ощущения как от натуральной игры под Dos, не отличить.
Огромное спасибо!

22. [M210®] - 25 Мая, 2017 - 12:24:14
Спасиб)))
И наконец-то на форуме хоть как-то ожило, а то думал, сам с собой тут разговариваюУлыбка

23. DrKugelschreiber - 28 Мая, 2017 - 17:37:41
Слегка прорекламировал BloodGDX в сообществе gamer.livejournal.com

http://gamer.livejournal.com/1547070.html

24. BLUD - 29 Мая, 2017 - 08:05:47
Я всё ещё не верю, что это реальность. Данное невероятное событие по значимости можно сопоставить с выходом Blood III.

25. TGA - 01 Июня, 2017 - 19:04:09
Спасибо за проделанную работу! Это огромный шаг по сравнению с предыдущими подобными работами!

Сейчас прохожу первый эпизод, несколько замечаний:
1) подбираю сердце - а звук - как будто аптечку
2) хомы при рисовании порталов там, где у оригинале была просто черная стена
3) код мыши надо перепиливать, да, особенно по вертикали

Ну и мультиплеер в будущем Подмигивание

26. [M210®] - 04 Июня, 2017 - 13:48:17

Цитата:
2) хомы при рисовании порталов там, где у оригинале была просто черная стена

Что такое хомы?Улыбка

27. TGA - 07 Июня, 2017 - 19:50:40
Я имею ввиду это:

У тебя так:

А в оригинале это выглядит так:


Но я думаю на твоём сайте иностранцы тебе уже об этом сообщили, ждём новую версию с исправлениями)

(Добавление)
Цитата:
5. All savefiles and config file now stored in user.home folder

Оооо нееет, а можно в некст версии без этого?
Почему бы просто не хранить конфиг в папке с игрой и менять его название на имя юзера?

28. [M210®] - 08 Июня, 2017 - 10:58:30
Цитата:

Оооо нееет, а можно в некст версии без этого?

Нельзя, я задолбался получать сообщения access denided если ктото решит положить порт с игрой туда, куда ОС не разрешает или сообщения о том, что файлы ищутся в windows/system32. А еще есть те, которые жалуются, что порт перетирает файлы оригинала (сами виноваты Улыбка). Так что тут тройной профит, как не крути

Цитата:
Но я думаю на твоём сайте иностранцы тебе уже об этом сообщили, ждём новую версию с исправлениями)

Да....да...сообщают...те кто не слелит за работой и не умеет читать readme Улыбка

Цитата:
рисовании порталов там, где у оригинале была просто черная стена

А можно пример такой карты?

(Отредактировано автором: 08 Июня, 2017 - 11:08:03)

29. TGA - 10 Июня, 2017 - 16:22:52
Цитата:
Нельзя, я задолбался получать сообщения access denided если ктото решит положить порт с игрой туда, куда ОС не разрешает или сообщения о том, что файлы ищутся в windows/system32. А еще есть те, которые жалуются, что порт перетирает файлы оригинала (сами виноваты Улыбка). Так что тут тройной профит, как не крути

Тогда хотя бы сделать выбор - опцию в ланчере например, или отдельную portable-версию, или просто запускать с определённым параметром, типа "-portable". Проблема в том, что сейчас игру не потаскаешь на флешке например - конфиги и сейвы придется копировать отдельно(или не копировать и настраивать каждый раз по новой, засоряя папки юзеров на разных компах).

Цитата:
рисовании порталов там, где у оригинале была просто черная стена

Не, про черную стену вычеркиваю - показалось. Речь шла про хомы(выше показал).

30. BLUD - 10 Июня, 2017 - 23:28:35
Не такая уж и проблема, но... просто хочется сказать, что даже мышку в руки давать не следует тем, кто скопировать файлы не может куда надо. Если кто то что то не может, это ещё ладно, но если кто то не желает научиться что то делать, это совсем не ладно. А нормальные юзвери должны мириться с тем, что все идут у кретинизма на поводу. Так что лучше Blood делать так, как правильно, а не как кто то заказывает.

31. Diman - 11 Июня, 2017 - 12:04:39
Цитата:
Проблема в том, что сейчас игру не потаскаешь на флешке например - конфиги и сейвы придется копировать отдельно(или не копировать и настраивать каждый раз по новой, засоряя папки юзеров на разных компах).



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

Люди устанавливают Blood в Program Files. Ну кто же виноват? гы-гы!

32. [M210®] - 11 Июня, 2017 - 17:39:42
Цитата:
Тогда хотя бы сделать выбор - опцию в ланчере например, или отдельную portable-версию, или просто запускать с определённым параметром, типа "-portable".

Ну тогда я сделаю это после того, как порт станет более-менее стабильным...потому что мне абсолютно неинтересно получать сообщения о том, что не найден Blood.ini, Blood.rff и другие файлы ресурсов игры от людей, которые пытаются запустить порт без самой игры...сейчас я каждый день разгребаю логи из 30-50 файлов, и из них 25 сообщения о том, что не найден MAP-файл (люди не привыкли кидать карты куда надо) и остальные 5 - более менее то, что нужно исправить...пока такие логи существуют, я не хочу давать поводу людям, которые не умеют читать, наступать на одни и теже грабли, давая потом повод мне искать иголку в стоге "не найденых карт или ресурсов игры"

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


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