English · Русский

HommaRe

Неофициальная статическая рекомпиляция Heroes of Might and Magic V (2006) вместе с «Владыками Севера» и «Повелителями Орды»: нативный порт, а не эмулятор.
Играйте в свою копию с GOG на Mac с Apple silicon, iPad и iPhone.

Скачать · Быстрый старт · Управление · Вопросы · Сообщить об ошибке

> [!IMPORTANT] > HommaRe — неофициальный фанатский проект. Он не связан с Ubisoft, Nival или GOG > и не одобрен и не спонсируется ими. > > **Файлы игры не входят в проект и не распространяются.** Чтобы играть, нужна ваша > собственная законно приобретённая копия игры с GOG. Лаунчер скачивает её из вашей > библиотеки GOG.com или устанавливает из офлайн-инсталляторов GOG и проверяет каждый > файл. Пожалуйста, не просите и не выкладывайте файлы игры. Подробнее — в [правовой информации](#правовая-информация). **Содержание:** [Что это](#что-такое-hommare) · [Что нового](#что-нового) · [Главное](#главное) · [Состояние](#состояние) · [Скачать](#скачать) · [Быстрый старт](#быстрый-старт) · [Управление](#управление) · [Настройки](#настройки) · [Вопросы](#вопросы-и-решения-проблем) · [Что дальше](#что-дальше) · [Для разработчиков](#для-разработчиков) · [Благодарности](#благодарности) · [Лицензия](#лицензия) · [Правовая информация](#правовая-информация) ## Что такое HommaRe? HommaRe — статическая рекомпиляция Windows-версии Heroes of Might and Magic V: собственный x86-код игры заранее переведён в C и собран в приложение для arm64. Во время игры нет ни Wine, ни CrossOver, ни Rosetta, ни эмулятора: игра работает как обычное приложение на Mac, iPad или iPhone. Все три игры в одном приложении: оригинальная игра (1.60), **«Владыки Севера»** (2.1) и **«Повелители Орды»** (3.1). Вы устанавливаете их из своей копии с GOG, выбираете игру в лаунчере и играете — с тем, чего игра 2006 года не умела: ультраширокие экраны, управление пальцами и тачпадом, интерфейс для iPhone и частота кадров, которая бережёт батарею, пока на экране ничего не происходит. ## Что нового **0.1-playable-421** (октябрь 2026) · [все изменения](CHANGELOG.md) (на английском) - **Немецкие, французские и польские** версии GOG: установка из GOG.com или из их инсталляторов, нативные экраны на их языке. - **Сетевые игры «Владык Севера»** по локальной сети больше не вылетают. - **Арифметика оригинальной игры на любом устройстве:** дополнения создают игры на ubi-gs. Для сетевой игры эта сборка нужна на каждом устройстве. - **Больше нативных экранов:** загрузка и сохранение в сетевых играх и игре за одним компьютером, сохранение в дополнениях, их лобби локальной сети и дуэли. - **Касания:** бой «коснитесь врага, затем клетки» во «Владыках Севера» и «Повелителях Орды», а отряд делится, если перетащить его и задержать палец. ## Главное - **Нативно на Apple silicon.** Код игры, а вместе с ним и библиотека анимации Granny 2 от RAD, перекомпилированы под arm64. Direct3D 9 рисуется через Metal, а скиннинг и освещение моделей считает видеокарта. - **Три игры — одно приложение.** Heroes V, «Владыки Севера» и «Повелители Орды», у каждой свои профили и сохранения. Лаунчер показывает, что установлено, и запускает выбранную игру. - **Лаунчер в стиле игры.** Рамки, кнопки и фон он берёт из данных вашей установленной игры во время работы, поэтому в приложении нет игровой графики. Говорит на десяти языках инсталляторов GOG (английский, русский, чешский, немецкий, испанский, французский, итальянский, венгерский, польский и упрощённый китайский) и на iPhone стоит вертикально. - **Загрузка из вашей библиотеки GOG.com — на любом устройстве.** Войдите в GOG в лаунчере, и он скачает купленные игры на английском, русском, немецком, французском или польском, сверит SHA-256 каждого файла и продолжит прерванную загрузку. Ни инсталляторы, ни «Файлы» не нужны. - **Установка из ваших инсталляторов GOG — на любом устройстве.** Дайте лаунчеру офлайн-инсталлятор GOG: `.exe`, `.bin`, папку с ними или сразу несколько; на Mac их можно и перетащить на окно. Он распакует только то, что нужно игре, сверит SHA-256 каждого файла и продолжит прерванную установку. Обновления GOG (`patch_*.exe`) тоже ставятся, а уже установленная игра находится сама. - **Ультраширокий экран как надо.** На 21:9 карта и бои показывают больше по ширине, а не растягиваются (Hor+), интерфейс уходит к краям экрана, а сцены диалогов занимают всю ширину. *«Границы интерфейса»* держат HUD в рамке 21:9, 16:9 или 4:3 на очень широких экранах; экраны, фоны и 3D-мир всё равно занимают весь дисплей. Во всех трёх играх. - **Сенсорное управление для «Героев».** Heroes V всё объясняет при *наведении*, поэтому палец на экране работает как наведённая мышь: держите — читаете подсказку, коснитесь — действие. Второй палец даёт правый клик; ведите пальцем — камера движется, щипок — масштаб, поворот двумя пальцами — вращение камеры. На текстовом поле появляется системная клавиатура, а списки прокручиваются пальцем. - **Бой под палец.** Коснитесь врага — подсветятся клетки, с которых его можно ударить; коснитесь клетки — отряд подойдёт и ударит. Курсор атаки виден рядом с подсказкой урона, как при игре мышью. - **Интерфейс для iPhone.** Круглые меню превращаются в ряды кнопок вдоль краёв экрана, панели крупнее, список героев стоит рядом с мини-картой, меню строительства и найма в городе уходят в угол, и ничего не заходит под Dynamic Island. Камера в бою ближе и плавно отъезжает, пока вы расставляете войска. Раскладка следует за размером окна, поэтому складной телефон переключает её, когда его складывают и раскладывают. - **Меню под экран.** На iPhone главное меню, профили, кампании, загрузка и сохранение, настройки, дуэли, своя игра и игра за одним компьютером и меню в игре нарисованы как нативные экраны из картинок, слов и рамок самой игры, с текстом под размер телефона. На iPad их тоже можно включить. - **Игра по локальной сети.** *«Сетевая игра» → «Локальная сеть»* находит игры в вашей Wi-Fi: создайте игру, присоединитесь к чужой и играйте — между Mac, iPad и iPhone. - **Тачпад на Mac.** Два пальца над картой приключений поднимают и опускают камеру или двигают её как на iPad: прокрутка — перемещение, щипок — масштаб, поворот — вращение. В бою камера приближается к указателю, а списки прокручиваются вслед за пальцами. - **Плавно и бережно к батарее.** По умолчанию лимит 40 кадров/с (можно 60 или 120; iPhone с ProMotion работают на 120 Гц, чтобы лимит держался). Через минуту без ввода частота падает до 30, пока вы не тронете мышь, клавиатуру или экран. Энергорежим по желанию снижает лимит кадров и масштаб рендера в режиме энергосбережения или при нагреве. Скрытое окно работает на 10 кадрах/с. - **Чёткая картинка при малой нагрузке.** *«Качество графики»* рисует 3D в родном разрешении или меньше и увеличивает его через MetalFX, а интерфейс всегда рисуется в родном разрешении экрана. На iPad и iPhone режим «Авто» уменьшает долю 3D, когда устройство греется. Шейдеры компилируются заранее и сохраняются между запусками, чтобы не было подтормаживаний. ## Состояние Проект на ранней стадии и активно развивается. Что работает сейчас: | | Heroes V 1.60 | «Владыки Севера» 2.1 | «Повелители Орды» 3.1 | |---|---|---|---| | Mac (Apple silicon) | Играбельно: кампании, сценарии, игра за одним компьютером, бои, города, сохранения | Играбельно: карты, бои, города; проверено меньше | Играбельно: карты, бои, города; проверено меньше | | iPad | Играбельно с сенсорным управлением | Играбельно с сенсорным управлением; проверено меньше | Играбельно с сенсорным управлением; проверено меньше | | iPhone | Играбельно с телефонным интерфейсом | Телефонный интерфейс, проверен на iPhone 15 Pro Max | Телефонный интерфейс, проверен на iPhone 15 Pro Max | | Ультраширокий (21:9) | Вид Hor+, HUD по краям, границы интерфейса, широкие диалоги | То же | То же | | Тачпад Mac | Карта; масштаб и сдвиг в бою | Карта; масштаб и сдвиг в бою | Карта; масштаб и сдвиг в бою | Проверено на MacBook Pro (M1 Max, macOS 27) с ультрашироким монитором 3440x1440, на iPad Pro 13" (M5) и iPhone 15 Pro Max (iOS 27), в основном с **русскими релизами GOG**. Английские инсталляторы GOG тоже распознаются и устанавливаются; другие языки пока не проверялись — будем рады отчётам. ## Скачать > [!NOTE] > **Mac:** готовая сборка лежит в [релизах](../../releases/latest) > (`HommaRe-<версия>-macOS.dmg`). Данных игры в ней нет: она скачивает игру из вашей > библиотеки GOG.com или устанавливает из ваших инсталляторов GOG. macOS не может проверить её разработчика, поэтому при первом запуске один раз переспросит (см. > [быстрый старт](#быстрый-старт)). **iPad и iPhone:** в том же релизе лежит неподписанный > IPA (`HommaRe-<версия>-iOS.ipa`); установите его через Sideloadly, AltStore или > SideStore либо соберите приложение сами на Mac. | Платформа | Как получить | |---|---| | Mac (Apple silicon) | [Скачайте DMG](../../releases/latest) или [соберите сами](#сборка-из-исходников). | | iPad и iPhone | [Установите IPA](../../releases/latest) через Sideloadly, AltStore или SideStore либо соберите сами на Mac в Xcode. | | Linux (x86-64) | [Соберите сами](#сборка-из-исходников); рисует через Vulkan. | | Linux (64-битный ARM) | [Соберите сами](#сборка-из-исходников), на самом ARM-компьютере или кросс-компиляцией на ПК с x86-64; Vulkan. Для ARM-хромбуков, ноутбуков на Snapdragon X, Asahi Linux, Raspberry Pi 5. Собирается; на железе ещё не проверялась. | | Windows, Android | Пока не планируется: на Windows оригинальная игра и так работает. | ### Системные требования - **Для всех:** ваша копия Heroes of Might and Magic V с GOG: *Heroes of Might and Magic V* (с «Владыками Севера») и/или *Heroes of Might and Magic V: Tribes of the East*. Около 4 ГБ свободного места для Heroes V с «Владыками Севера» и ещё 2,2 ГБ для «Повелителей Орды», плюс место под инсталляторы, если ставите из них. - **Mac:** Apple silicon, macOS 14 Sonoma или новее. Сборки для Mac на Intel нет. - **iPad и iPhone:** iPad на чипе M-серии или свежий iPhone (проверено на iPhone 15 Pro Max). Приложение просит у iOS больше памяти, чем большинство приложений. Игра идёт в горизонтальной ориентации. ## Быстрый старт ### Mac 0. **Скачайте HommaRe.** Возьмите `HommaRe-<версия>-macOS.dmg` в [релизах](../../releases/latest), откройте его и перетащите *HommaRe* в *Программы*. macOS не может проверить разработчика приложения, поэтому первый запуск не удастся: откройте *Системные настройки → Конфиденциальность и безопасность*, прокрутите вниз и нажмите *Открыть всё равно* рядом с HommaRe. Дальше оно открывается как обычно. (Или [соберите сами](#сборка-из-исходников).) 1. **Откройте HommaRe.** У неустановленной игры написано *«Не установлено»*. Нажмите *«Установить из GOG…»*. 2. **Войдите в GOG и скачайте.** Войдите на странице GOG в открывшейся панели, выберите язык игры и нажмите *«Скачать»* рядом с каждой купленной игрой. Лаунчер скачает её, проверит каждый файл и отметит готовой. *Heroes of Might and Magic V* даёт сразу и оригинальную игру, и «Владык Севера». Прерванная загрузка продолжается с того места, где остановилась. 3. **Или используйте файлы инсталлятора.** Если у вас уже есть офлайн-инсталляторы GOG (для каждой игры один `.exe` и один или несколько `.bin`, а также `patch_*.exe`, если GOG его предлагает), нажмите *«Из файлов установщика…»* в той же панели и выберите `.exe`, `.bin` или их папку — или перетащите их на окно. Если игра уже где-то установлена, выберите *«Папка игры…»*. 4. **Играйте.** Выберите игру в лаунчере и нажмите *«Играть»*. Профили, сохранения и настройки хранятся отдельно от файлов игры, поэтому переживают обновления и переустановку. ### iPad и iPhone Сначала установите приложение: `HommaRe-<версия>-iOS.ipa` из [релизов](../../releases/latest) через Sideloadly, AltStore или SideStore (они подпишут его вашим Apple ID; включите на устройстве режим разработчика) либо [соберите его](#сборка-из-исходников) сами. 1. **Откройте HommaRe**, нажмите *«Установить из GOG…»* и войдите в GOG. Выберите язык игры и нажмите *«Скачать»* рядом с каждой купленной игрой: лаунчер скачает её в приложение и проверит каждый файл (2–4 ГБ на игру, лучше по Wi-Fi). 2. **Или используйте инсталляторы GOG**: положите файлы `.exe` и `.bin` на устройство в приложение «Файлы» (на устройстве или в iCloud Drive) или через Finder с Mac, нажмите *«Из файлов установщика…»* в той же панели и выберите их. Потом инсталляторы можно удалить. 3. **Игра уже установлена?** Тогда скопируйте на устройство её папку и выберите её через *«Добавить файлы игры…»*. > [!TIP] > В *Одиночной игре* пункты «Кампания», «Сценарии» и «Зал славы» остаются серыми, пока > не выбран профиль: откройте *«Сменить профиль»*, выберите свой в списке и нажмите > *«Выбрать»*. Так ведёт себя оригинальная игра, это не ошибка порта. ## Управление ### Mac Мышь и клавиатура работают как в оригинале: наведение — информация, левый клик — действие, правый клик — подробности, колесо мыши и клавиши игры управляют камерой. Двойной клик, Shift при перетаскивании для разделения отряда и Alt для подписей на карте работают. С тачпадом или Magic Mouse два пальца над 3D-картой приключений двигают камеру (*Настройки → «Тачпад»*): | Режим | Два пальца над картой | |---|---| | Высота (по умолчанию) | Прокрутка вверх и вниз поднимает и опускает камеру, с инерцией | | Как на iPad | Прокрутка — перемещение, щипок — масштаб, поворот — вращение камеры | | Как в игре | Прокрутка уходит в игру, как колесо мыши | В бою щипок или прокрутка приближают камеру к указателю, а два пальца сдвигают поле. Над списком содержимое идёт вслед за пальцами. Над городом и остальным интерфейсом прокрутка уходит в игру как колесо мыши. ### iPad и iPhone | Жест | Что делает | |---|---| | Касание с удержанием | Наведение: подсказки и подсветка игры без клика | | Касание | Левый клик (курсор сначала прыгает под палец) | | Двойное касание | Двойной клик | | Касание вторым пальцем рядом с лежащим первым | Правый клик по тому, что под первым пальцем | | Касание двумя пальцами | Правый клик между пальцами | | Ведение одним пальцем по карте | Перемещение камеры | | Ведение вверх или вниз по списку | Прокрутка списка | | Касание текстового поля | Появляется клавиатура | | Щипок | Масштаб | | Поворот двумя пальцами | Вращение камеры | **Сенсорный бой** (включён по умолчанию): коснитесь врага, до которого дотягивается ваш отряд, — подсветятся клетки, с которых можно ударить. Коснитесь клетки — отряд подойдёт и ударит; коснитесь врага ещё раз — удар с ближайшей клетки; касание в любом другом месте отменяет выбор. Чтобы только подойти, задержите палец на подсвеченной клетке и отпустите. На экране загрузки, когда загрузка закончилась, коснитесь ещё раз, чтобы начать: игра ждёт там клика. Каждый из трёх вступительных роликов пропускается касанием, а в настройках их можно отключить совсем. ## Настройки *Настройки* лаунчера действуют на все игры. При первом запуске каждое устройство получает свои значения по умолчанию — они выделены жирным: | Настройка | Варианты | Что делает | |---|---|---| | Язык | Как в системе или один из десяти | Язык лаунчера | | Лимит кадров | Как в игре, **40**, 60, 120 | Наибольшая частота кадров игры | | Экономия энергии | Авто, Всегда, **Никогда** | Ниже лимит кадров и масштаб рендера; «Авто» включает её в режиме энергосбережения или при нагреве | | 30 кадров после минуты простоя | Авто, **Вкл**, Выкл | Через минуту без ввода частота падает до 30 и сразу возвращается при любом вводе | | Качество графики | Авто, Максимум, Качество, Баланс, Скорость | В каком размере рисуется 3D перед увеличением через MetalFX; интерфейс остаётся чётким. **Скорость** на Mac и iPhone, **Баланс** на iPad | | Границы интерфейса | Края экрана, 21:9, 16:9, 4:3 | На широких экранах держит HUD в рамке, а не у самых краёв (**16:9** на Mac) | | Ролики при запуске | Показывать, Пропускать | Логотипы и вступление при старте | | Metal HUD | Показывать в игре (**выкл**) | Счётчик производительности Apple поверх игры, со следующего запуска | | Анимация моделей | На видеокарте (**вкл**) | Скиннинг и освещение моделей на видеокарте, а не на процессоре | | Тачпад *(Mac)* | **Высота**, Как на iPad, Как в игре | Что делают два пальца над картой | | Кнопки камеры *(iPad, iPhone)* | Показывать, **Скрывать** | Экранная панель камеры | | Сенсорный бой *(iPad, iPhone)* | Выкл, **Вкл** | Сначала враг, потом клетка, с которой бить | | Беззвучный режим *(iPad, iPhone)* | **Учитывать**, Игнорировать | Глушит ли игру переключатель беззвучного режима | | Интерфейс для телефона *(iPhone)* | **Авто**, Всегда, Никогда | Крупные панели и ряды кнопок вместо круглых меню; «Авто» выбирает по размеру окна, поэтому складной телефон переключается сам | | Папки с играми | | Дополнительные места, где лаунчер ищет установленные игры | Меню «Настройки» самой игры (качество графики, звук) работает как в оригинале. На iPad и iPhone игра всегда рисует в размер экрана, поэтому выбора разрешения в её настройках нет: его заменяет *«Качество графики»* в лаунчере. ## Вопросы и решения проблем **Игра входит в HommaRe?** Нет. Файлы игры не входят в проект и не распространяются. Вы устанавливаете игру из своей копии с GOG, и каждый файл проверяется. **Какая версия нужна?** Релизы GOG: *Heroes of Might and Magic V* 2.1 (внутри оригинальная игра 1.60 и «Владыки Севера» 2.1) и *Tribes of the East* 3.1, на английском, русском, немецком, французском или польском. Лаунчер сверяет исполняемый файл каждой игры по SHA-256 и сообщает, если он не совпадает. Другие языки GOG, дисковые версии и другие магазины не проверялись. **Это эмулятор? Используется Wine?** Нет. Это статическая рекомпиляция: x86-код игры заранее переведён в C и собран под arm64. Среда выполнения, написанная для этого порта, заменяет те части Windows, которыми пользуется игра. **Можно установить игру на iPad или iPhone без Mac?** Да. Нажмите в лаунчере *«Установить из GOG…»* и войдите в GOG: он скачает купленные игры. Или положите файлы инсталлятора GOG на устройство (в «Файлы» или iCloud Drive) и выберите *«Из файлов установщика…»*. **Можно перенести сохранения и профили с Windows?** Профили и сохранения — в собственных форматах игры. Скопируйте их в папку профилей (см. ниже); это пока мало проверялось. **Где мои профили, сохранения и настройки?** | | Mac | iPad и iPhone | |---|---|---| | Профили и сохранения | `~/Library/Application Support/HommaRe/Documents/My Games/Heroes of Might and Magic V/` (открывается кнопкой *«Сохранения»* в лаунчере) | Внутри приложения | | Установленные игры | Там, где вы выбрали в лаунчере | Внутри приложения (папка `Games` в «Файлах») | **Сохранения игры за одним компьютером не видны в «Загрузить».** Они загружаются через *«Сетевая игра» → «Один компьютер» → «Обычный режим» → «Загрузить»*, а не из списка одиночной игры — как в оригинале. **Новый профиль не запоминается.** Игра записывает выбор профиля при обычном выходе. После создания профиля один раз выйдите через *«Выход» → «OK»*. **На iPhone нет звука.** Включён беззвучный режим. Выключите его или поставьте *Настройки → «Беззвучный режим» → «Игнорировать»*. **Есть мультиплеер?** Игра за одним компьютером и по локальной сети — да. Интернет-серверы игры (Ubi.com) Ubisoft закрыла в 2015 году; их может заменить сервер сообщества (ubi-gs, ниже). Сетевая игра использует UDP-порты 8888 и 8889. **Что за ubi-gs в меню сетевой игры?** Сетевой сервис игры (Ubi.com) Ubisoft закрыла в 2015 году. [ubi-gs](https://github.com/michal-kapala/ubi-gs) — его воссозданная сообществом замена, которую кто-то должен запустить; все игроки подключаются к одному серверу. Пункт *ubi-gs* спрашивает адрес сервера (`хост` или `хост:порт`) и запоминает те, что ответили, в файле `ubi-gs-servers.txt` в папке профиля; пока такого нет, он предлагает сервер сообщества `ubigs.wayofharm.com`. Игра получает от него список серверов, входит, попадает в каналы лобби, создаёт игры и присоединяется к ним. Оператор сервера видит CD-ключ, с которым вы входите: подойдёт любой ключ, поэтому не вводите настоящий. **Какое имя и пароль там вводить?** Придумайте новые для этого сервера: не свой логин Ubisoft (Ubi.com, Ubisoft Connect) — серверы держит сообщество, а не Ubisoft, — и не пароль от других сервисов. Протокол входа игры передаёт пароль практически открытым текстом, поэтому HommaRe отправляет вместо него хэш с солью (scrypt; соль — сервер и ваше имя): ни оператор, ни тот, кто следит за сетью, самого пароля не видит, хотя слабый пароль по хэшу всё же можно подобрать. Серверу, который присылает одноразовый вызов (`LoginNonce` в его `servers.ini`), хэш уходит только в первый раз, дальше — лишь ответ на вызов; файл `ubi-gs-logins.txt` в папке профиля помнит, где вы зарегистрировались (пароля в нём нет). Сервер, который об этом ничего не знает, просто принимает хэш за ваш пароль. Учётные записи, созданные в оригинальной игре (она отправляет пароль как есть), из HommaRe недоступны. **Безопасна ли сетевая игра?** Сервер ubi-gs может запустить кто угодно, а игра по локальной сети и через интернет связывает вас с копиями игры у других игроков. Клиент 2006 года разбирает то, что присылают сервер или другой игрок, старым кодом на C++, который местами копировал текст в буферы фиксированного размера на стеке без проверки длины, — враждебный сервер мог прислать слишком длинное поле и переполнить такой буфер. HommaRe перекомпилирует игру и поэтому заменяет эти копирования собственной функцией игры, которая знает размер буфера: слишком длинное поле обрезается, и игра продолжает работу с укороченным текстом, а не пишет за пределы буфера. Так защищено каждое строковое поле от сервера, которое клиент читает в буфер фиксированного размера: все 52 места в каждой из игр, где было копирование без проверки, — ответ с данными игрока (известное переполнение), список комнат и список участников, вход участника в комнату, ответ прокси на вход, список прокси модуля, уведомления о начале игры и об изменениях у друзей, сообщения рейтинга, а также остальные имена и идентификаторы лобби. Копирование из любого другого места обрезалось бы до 16 байт и попало бы в журнал, а не шло бы без проверки. Первые поля списка комнат и так читаются с ограничением длины; в ответах NAT и адресов строк нет. Игра по локальной сети и напрямую между игроками использует другой, двоичный протокол: его датаграммы читаются в буфер ограниченной длины и разбираются в записи фиксированного размера, копирования без проверки там не найдено. И всё же, если вы не хотите доверять незнакомому серверу ubi-gs или игроку, играйте по локальной сети или через VPN со знакомыми людьми. ## Что дальше - Другие языки GOG (чешский, испанский, итальянский, венгерский и китайский): для проверки файлов нужны их инсталляторы. - Качество графики прямо в настройках игры. - Ещё быстрее: больше самого горячего кода игры в нативном виде и оптимизация по профилю (PGO). Сроков и обещаний нет: будет готово, когда будет готово. ## Для разработчиков ### Как это работает HommaRe собран на **recomp-kit** — наборе для статической рекомпиляции 32-битных x86-игр под Windows. 1. **Анализ.** Ghidra находит функции `H5_Game.exe` (около 70 000) и `granny2.dll`. 2. **Трансляция.** Транслятор набора разбирает каждую функцию через Capstone и пишет C: регистры x86, флаги, x87 и SSE — обычным C. Восемь регистров хранятся в локальных переменных внутри функции, а флаги прослеживаются по переходам функции и вычисляются только там, где их читают. 3. **Компиляция.** Clang собирает C (около 100 000 функций) вместе со средой выполнения в одно arm64-приложение. Каждое дополнение становится модулем (`libgame..dylib`), который приложение загружает, когда вы выбираете его в лаунчере. 4. **Среда выполнения.** Вместо Windows она даёт то, что вызывает игра: - `kernel32`, `user32` и соседей: файлы, отображаемые в память файлы, потоки, сообщения, кодовые страницы (Windows-1251 для русского релиза); - C- и C++-рантайм Microsoft (UCRT, VCRUNTIME140, MSVCP140); - **Direct3D 9 на Metal**: фиксированный конвейер, шейдеры `ps_1_x` / `vs_1_1`, переведённые в Metal Shading Language и сохраняемые в бинарном архиве Metal, текстуры DXT (декодируются на CPU, если GPU не умеет BC-форматы), вершинные буферы, синхронизируемые через защиту страниц памяти, апскейл 3D через MetalFX с интерфейсом в полном разрешении; - DirectInput для мыши и клавиатуры, SDL3 для окон, ввода и звука; - замену **FMOD**, которая играет звуки и музыку игры через микшер набора. 5. **Нативный код.** Написанный вручную C в `native/` перехватывает часть функций игры; адреса для каждой игры — в `games/*/native/addresses.h`: - `touch.c`, `camera.c`, `tap_attack.c`: ввод пальцами и тачпадом, жесты камеры, сенсорный бой; - `widescreen.c`, `horplus.c`, `ui_bounds.c`, `hof_screen.c`: широкий виртуальный экран, Hor+, привязки к краям и границы интерфейса (во «Владыках Севера» своего кода раскладки для них нет); - `phone_hud.c`, `phone_layout.c`: слой для iPhone — безопасные зоны, масштаб панелей, угловые меню, раскладка по размеру окна; - `gpu_skin.cpp`, `lighting.c`, `granny.c`, `scene.c`: скиннинг и освещение моделей на видеокарте и нативные версии самого горячего кода анимации и сцены — у каждой есть режим проверки, который сравнивает её с транслированным оригиналом; - `render_split.c`: отмечает конец 3D, чтобы интерфейс рисовался уже после апскейла; - `save.cpp`: сохранение настроек, когда приложение уходит в фон. 6. **Моды интерфейса из рецептов.** Изменения интерфейса, которым не нужен код, — это собственные пакеты модов игры: `Widescreen.h5u` (привязки к краям из «Повелителей Орды»), `PhoneUI.h5u` (ряды кнопок для iPhone) и `MobileOptions.h5u`. В приложении лежат только их *рецепты* (`ui-mods/`): для каждого файла интерфейса — SHA-256 исходного файла и изменённые строки раскладки. При первом запуске приложение собирает моды из данных игры самого игрока и кладёт их в профиль. «Владыки Севера» не читают `UserMODs`, поэтому получают то же самое файлами `zz-*.pak`, подключёнными поверх собственных данных. Кроме того, хост при каждом запуске пересобирает `zz-port-texts.pak` из файлов самой установки (`[texts]` в game.toml): «Выход в Windows» с другими словами и щелчок кнопок на четверти громкости. `granny2.dll` транслируется по собственному базовому адресу `0x50000000` и никогда не перемещается: файлы моделей `.gr2` хранят сырые указатели внутрь неё. Данные игры (карты, модели, текстуры, звуки, видео) берутся из установки игрока. В HommaRe нет игровых данных и ресурсов, а `tools/check_bundle.py` не пропустит сборку, в которую они попали. ### Сборка из исходников В репозитории нет кода игры: сборка транслирует **ваши собственные** исполняемые файлы, поэтому на Mac или ПК с Linux, где идёт сборка, игра должна быть установлена (сборка читает её исполняемые файлы `H5_Game.exe` и `granny2.dll`). Готовое приложение не несёт ни данных игры, ни модов, сделанных из них: игру в него вы устанавливаете на устройстве из своих инсталляторов GOG, как в [быстром старте](#быстрый-старт). Сгенерированный код, анализ и файлы игры игнорируются git. Никогда не коммитьте и не выкладывайте их. Поддерживаемые исполняемые файлы: | Игра | Файл | SHA-256 | |---|---|---| | Heroes V 1.60 | `bin/H5_Game.exe` | `820786b0f85c62ca96a1a5b18d03d60185047ae8dab09ef6f0b299e3abcfba7c` | | «Владыки Севера» 2.1 | `bina1/H5_Game.exe` | `c15cc3c68a5bd1f3111d7d2fda7ef7607dbe96d1aedadaf463b50cbe41b40730` | | «Повелители Орды» 3.1 | `bin/H5_Game.exe` | `3eb6fce81071f48631360202d81d41c67b09d8b1807105b1f22c402e15d16268` | **1. Зависимости.** Xcode, CMake, Ninja, Python 3 с зависимостями набора (`capstone`, `pefile`, `numpy`, `Pillow`) и Ghidra с JDK для анализа. На Linux вместо Xcode — clang и lld, заголовки SDL для X11, Wayland и звука (список в `kit/.github/workflows/checks.yml`), драйвер Vulkan и `innoextract`, чтобы лончер ставил игру из инсталляторов GOG. На Fedora: ```bash sudo dnf install clang lld innoextract glslc java-21-openjdk-devel nas-devel \ pulseaudio-libs-devel pipewire-jack-audio-connection-kit-devel libXScrnSaver-devel \ mesa-libgbm-devel mesa-libGL-devel mesa-libEGL-devel libglvnd-devel ibus-devel \ pipewire-devel libdecor-devel liburing-devel ``` На Debian 13, Ubuntu 24.04 и новее, а также на основанных на них Raspberry Pi OS и Linux-окружении хромбука (сборка проверена с clang 20; clang 14 из Debian 12 может оказаться слишком старым для C++20 набора, там соберите кросс-компиляцией, как ниже): ```bash sudo apt install clang lld make pkg-config python3-venv innoextract glslc openjdk-21-jdk \ libasound2-dev libpulse-dev libaudio-dev libjack-jackd2-dev libsndio-dev libx11-dev \ libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev \ libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev \ libdbus-1-dev libibus-1.0-dev libudev-dev libpipewire-0.3-dev libwayland-dev \ libdecor-0-dev liburing-dev mesa-vulkan-drivers ``` **2. Подключите свою игру и проанализируйте её.** ```bash python3 -m venv .venv && .venv/bin/pip install -r kit/requirements-dev.txt tools/setup.py --install "/path/to/Heroes of Might and Magic V" --link-only tools/analyze.py ``` Для дополнений то же самое в `games/hof` и `games/toe` (`games/run_analysis.py`). **3. Сборка.** Одна команда собирает все три игры в одно приложение без файлов игры и проверяет результат: ```bash .venv/bin/python tools/build_app.py --target app ``` `--target ios-sim` собирает для симулятора iOS, `--target ios` — для устройства, с `RECOMP_IOS_TEAM` — вашей командой разработчика Apple. Bundle id принадлежит команде, которая первой его зарегистрировала, поэтому для сборки на устройство поменяйте `bundle_id` в `game.toml`, `games/hof/game.toml` и `games/toe/game.toml` на свой префикс (окончания `.hof` и `.toe` оставьте). Ключей подписи и профилей в репозитории нет: Xcode подписывает вашей командой. На Linux `--target app` оставляет `build/package/HommaRe` (и архив рядом): исполняемый файл `HommaRe` с дополнениями в `modules/`, запускается из этой папки. `--overlay` оставляет оверлей производительности набора (F11). Трансляция занимает около 10–15 минут на игру, компиляция — около 25 минут на игру и платформу на M1 Max; следующие сборки инкрементальные. После изменений в трансляторе запускайте `kit/tools/build.py` с `--regenerate`. **Linux на 64-битном ARM** (ARM-хромбуки, ноутбуки на Snapdragon X, Asahi Linux, Raspberry Pi 5) собирается так же на самом ARM-компьютере. ПК с x86-64 и Linux собирает его кросс-компиляцией своими clang и lld, с sysroot из Debian 12, который делает контейнер podman (или docker) без root; apt в контейнере работает через qemu-user (Fedora: `qemu-user-static-aarch64`, Debian и Ubuntu: `qemu-user-static`): ```bash kit/tools/linux_sysroot.py --arch arm64 # один раз: kit/build/sysroots/debian12-arm64 .venv/bin/python tools/build_app.py --target app --arch arm64 ``` Результат — `build/linux-arm64/package/HommaRe` (и рядом `HommaRe-linux-aarch64.tar.gz`) для Debian 12, Ubuntu 22.04 и всего новее (glibc 2.35, libstdc++ из GCC 12). Трансляция — обычный C, общий со сборкой для x86-64, так что дважды ничего не транслируется; то же с `analysis/`, поэтому анализ можно сделать на другом компьютере, если у вашей Ghidra нет декомпилятора для ARM Linux. ARM-компьютеру нужен драйвер Vulkan 1.3 или Vulkan 1.1 с `VK_KHR_dynamic_rendering`: Honeykrisp (Asahi), Turnip (Adreno), PanVK (Mali) или V3DV (Raspberry Pi) из Mesa. Ядра со страницами по 16 КБ (Asahi, как на Mac) или 64 КБ подходят: приложение работает в размере страницы самого ядра. ### Полезные переключатели | Переменная | Что делает | |---|---| | `RECOMP_LAUNCHER=0` | Запуск игры сразу, без лаунчера | | `RECOMP_ADAPTIVE_FPS=1/0` | Принудительно включить или выключить 30 кадров в простое | | `RECOMP_ENERGY=on/off` | Принудительный энергорежим | | `RECOMP_D3D9_MAX_SCALE` | Потолок масштаба рендера | | `RECOMP_D3D9_SPLIT=0` | Увеличивать весь кадр вместе с интерфейсом | | `RECOMP_HOMM5_GPU_SKIN=0/1` | Скиннинг и освещение моделей на процессоре или видеокарте | | `RECOMP_HOMM5_UI_BOUNDS=0..3` | Границы интерфейса: края экрана, 21:9, 16:9, 4:3 | | `RECOMP_HOMM5_BATTLE_CURSOR=0/1` | Курсор боя рядом с подсказкой урона, на любой платформе | | `RECOMP_TRACKPAD_CAMERA=0..2` | Режим тачпада: высота, как на iPad, как в игре | | `RECOMP_METAL_HUD=0/1` | Счётчик производительности Metal от Apple | | `RECOMP_CPUID_SSE=0` | Скрыть от игры SSE, чтобы она шла путями x87 | | `RECOMP_AUTO_KEYS`, `RECOMP_MAX_SECONDS` | Сценарные запуски без участия человека | | `RECOMP_TRACE_FUNCS` | Трассировка вызовов заданных функций игры | Заметки по устройству, с адресами, лежат в `docs/`: `expansions.md`, `trackpad-camera.md`, `gog-installer.md`, `launcher-skin.md`, `ui-mods.md`, `performance-energy.md`. ## Благодарности HommaRe стоит на большом количестве открытого кода. Спасибо всем, кто стоит за: | Проект | Для чего используется | Лицензия | |---|---|---| | recomp-kit (veritr1x) | Транслятор, среда выполнения и хост | MIT | | Ghidra (NSA) | Поиск функций игры | Apache-2.0 | | Capstone | Разбор x86 в трансляторе | BSD-3-Clause | | SDL3 | Окна, ввод, звук, жизненный цикл приложения | zlib | | innoextract (Daniel Scharrer) | Распаковка инсталляторов GOG в лаунчере | zlib | | Boost, XZ Utils | Внутри innoextract | BSL-1.0, 0BSD | | miniz | Чтение пакетов игры для сборки модов интерфейса | MIT | | FFmpeg | Воспроизведение видео | LGPL-2.1-or-later | | Lua 5.4 | Основа модов набора | MIT | | Unicorn | Проверка транслированных инструкций в тестах | GPL-2.0 (только для разработки) | Полные тексты лицензий — в `kit/NOTICE` и `kit/third_party/`. ## Лицензия Собственный код и графика HommaRe распространяются под лицензией MIT (`LICENSE`). recomp-kit в `kit/` — тоже под MIT (`kit/LICENSE`, `kit/NOTICE`). Сторонние компоненты в `kit/third_party/` сохраняют свои лицензии, перечисленные выше. На саму Heroes of Might and Magic V ни одна из них не распространяется: файлов игры здесь нет, и ничто здесь не меняет их лицензию. ## Правовая информация HommaRe — неофициальный фанатский проект. Он не связан с Ubisoft Entertainment, Nival или GOG и не одобрен и не спонсируется ими. «Heroes of Might and Magic», «Hammers of Fate» («Владыки Севера») и «Tribes of the East» («Повелители Орды») — товарные знаки Ubisoft Entertainment. Apple, Mac, macOS, iPad, iPhone, Metal и MetalFX — товарные знаки Apple Inc. Все прочие товарные знаки принадлежат их владельцам. Здесь они упомянуты только затем, чтобы сказать, с чем работает HommaRe. Игровой контент на скриншотах принадлежит его владельцам. **Файлы игры не входят в проект и не распространяются.** В HommaRe нет игровых данных и ресурсов: ни карт, ни моделей, ни текстур, ни музыки, ни звуков, ни видео. Чтобы играть, нужна ваша собственная законно приобретённая копия игры. Лаунчер проверяет её и устанавливает. HommaRe предоставляется «как есть», без каких-либо гарантий.