1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

[Ковыряние] Warcraft Orc and Humans. Сюрпризы.

Автор: Zelya · 14 мар 2018 ·
  1. Ковырвял в начале года Warcraft первый в IDA. Хотел кое-чего по сетевой игре посмотреть. Честно говоря, первоначальная цель до конца не выполнена, но увлекся и наковырял много "оффтопа". Может, кому интересно будет.

    1. Всю жизнь играл, но не знал, что клерики хилом дамаджат демонов. Причем в той же пропорции, что лечат: 1 здоровья за 3 маны. Что для этих жирных тварей весьма солидно.
    2. Уровень с Медивом. Обнаружилось, что проверки на гибель Медива нет. Стало быть его смерть не является завершением уровня. Ну что же, проверим, тем более, вторая проверка показала, что дистанция атаки Медива равна дистанции людского лучника. Еще из детства помню, что если открыть на карте Медива, он начианет расстреливать футмена, который появился возле стены, ближе к нему. Начианем уровень, убираем футменов, подгоняем лучников, открываем Медива. Атака лучниками и хилл-хилл-хилл. Медив мертв, игра продолжается, что и требовалось доказать.
    3. Бажок с подсчетом очков за уровень. Поначалу было задумано, что кол-во очков за убитый юнит высчитвается пропорционально его крутости. Но по ошибке из таблицы выбирается значение не по Id юнита, а по Id игрока, что "убивает" всю систему.
    4. Может кто не знал, что золотая шахта - убиваемая. Но здоровья у нее 255000. Для сравнения, следующие самые "жирные" объекты - это Штормвинд и Черный Пик (по 5000), и ТХ - 2500. У демонов по 300 ХП. Так что побить шахту, чтобы это стало заметно, надо постараться.
    5. Кстати самих игроков игра поддерживает - 5. Но не спешите радоваться, лишь два из них играбельные. Остальные - это всякие "раненые", "пленники" и прочая ересь. Хотя я еще не вкурил специализацию всех до конца.
    6. По объектам - есть плейсхолдеры для дракона, но он, кроме здоровья 250 - занулен, а часть параметров скопированы с огра.
    7. Еще есть непонятная полузануленная кузница, размером 1х1 и со здоровьем 255.
    8. Все герои "стоят" по 2500 голды, элементали и демоны по 2000
    9. То что Лотар и Гарона - управляемые юниты (мы их берем под контроль после спасения) а Медив - нет, это очевидно. А вот то что Гризелда управляемый юнит - я не знал. Но игра не передает вам управление, хотя, возможно, не ранних этапах дизайна Гризелда имела иную роль. И да, апгрейды по броне и атаке действую на Лотара, а на Гарону и Гризелду - только по защите (они не умеют атаковать).
    10. Все объекты до Id = 33h (включая) определены во всех таблицах. А дальше идут такие себе "песвдо-объекты", которые используются лишь в конкретных функциях, и определены не везде. Напрмиер: дорога (Id = 34h) и стена (Id = 35h). Но вот следующие два объекта - очень интересные: непонятность размером 1х3 клетки и 3х1, со скоростю постройки равной дороге и бесплатные. Скорее всего, это какой-то задел под ИИ или под нереализированные идеи (типа башен или ворот, которые есть на ранних артворках). Пока, не раскопал эту сущность.


    А вообще, код ужасен. Даже не знаю чем компилился. Большинство аргументов в функции передаются в асм-стиле: регистрами, а не стеком. Стек, если и используется, то очень необычно и неудобно. Лоакльных переменных (стековых) тоже нет. Все вынесено в глобальные значения в сегменте данных. Хотя, есть несколько функций написаных опрятно (наверное, дописывались позже). Вся игровая логика построена на if-ах, что тоже неудобно. Наприемр, проверка на смерть Гризелды (которую нужно убить) находится в общей функции по уничтожению любого объекта. Функция состояит из миллиона if-ов, которые проверяю, а объект - это структурка или юнит, а если юнит то не гризелда ли, и т.д.
    Интересно также, что каждый объект описывается структурой на 92 байта. И, например, каунтеры на разные наложенные спеллы (Unholy Armor, Invisible) - это отдельные каунтеры. А вот магия людей Far Seeing и орков Dark Vision - это одна и та же магия в enum-ах. И различает их (для иконок, хоткеев, надписей) игра опять же, только по if-ам. Может, что-то интересное уже подзабыл, если вспомню - дополню.
    OldGoodDog, Mlegion, Goblinit и 4 другим нравится это.

Комментарии

Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление