Найти в Дзене
mamaich

Редактор карт в Heroes of Might and Magic: Olden Era (0.32.13)

Логика основного меню в HoMM OE 0.32.13 заложена в файле HeroesOE_Data\Managed\Hex.dll. Данный файл удобнее всего декомпилировать утилитой dnSpy. Эта же утилита позволяет вносить изменения в файл.
Рядом с hex.dll лежит файл hex.BAK.dll - это оригинальный файл, правленный InsaneRamZes (нам он не нужен - но желающие могут сравнить и найти его правки).

Сперва (для удобства) я убрал мешающую строку "Work in progress. Does not represent the final quality of the product" - она находится в конце файла HeroesOE_Data\level0, достаточно просто заменить начало строки на нулевые байты.

57 меняем на 00
57 меняем на 00

Строка "Press F1 to open Bug Report Window" - находится в файле hex.dll (строку следует искать обычным поиском в dnSpy, только выбрав "Search for" - "Number/String"):

-2

Чтобы убрать текст - надо нажать внутрь процедуры "OnStoreInit" правую кнопку мыши и выбрать "Edit Method (C#)...":

-3

Я поменял строчку "this.textWm.text" на " " (пробел между кавычками):

-4

После этого кнопка "Compile" (должно пройти без ошибок) и "File" - "Save module...".

Далее нас интересует класс, который отрисовывает главное меню. Я его нашел просто по названию - Hex.MainMenu и там класс MainMenuNavigationView:

-5

Функция BindButtons, как мы видим, делает кнопки "серыми"

-6

А для доступных кнопок - байндит к ним соответствующие функции.

Функции - есть в этом же классе, вот список:

public void OnQuickButton()
public void OnNewSkirmishButton() == "Multiplayer"
public void OnLoadSkirmishButton()
public void OnMatchmakingButton()
public void OnLobbyListButton()
public void OnLeaderboardButton()
public void OnMapEditorButton()
public void OnLicenseAgreementButton() == "License Agreement"
public void OnSettingsButtons() == "Settings"
public void OnExitButton() == "Exit to Desktop"

На экране у нас есть 5 неиспользующихся кнопок:

-7

но я по названиям подобрал только 3: campaignButton, quickStartButton, creditsButton. На них назначаю функции: OnLoadSkirmishButton, OnQuickButton, OnMapEditorButton. Выбрал их тоже по названию - загрузка сейва, быстрая битва и редактор карты.

Правим функцию таким образом:

-8

Обратите внимание на убранные "new Action(ххх)" (оставлено только то что внутри скобок) - иначе не скомпилируется, похоже на баг декомпилятора. И я поменял все SetAvailable(false) на true.

Компилируем, сохраняем.

Кнопки перестали быть серыми:

-9

Кнопка Campaign теперь ведет на окно загрузки сейва:

-10

Кнопка Quick Start - ведет на быстрый старт:

-11

На следующих экранах можно будет выбрать фракцию/героя и карту.

Кнопка Credits - вызовет редактор:

-12

Я не понял как в редакторе перемещать карту - но в остальном редактор более-менее понятен.

Подземелье, как я вижу, пока еще не завезли.