Импортированные игры и профили игр
Помимо проектов Pokémon Essentials (см. Импорт из Pokémon Essentials), импортёр может принести целые игры из дампа картриджа, которым вы владеете: HeartGold / SoulSilver, FireRed и Black / White. Результат — готовый проект в Assets/ImportedGames/<Game>/ (мир, персонажи, виды, приёмы, предметы, тренеры, музыка, NPC со скриптами), в который затем можно играть внутри движка.
Импорт и игра — два отдельных шага, и это сделано намеренно:
- Импорт пишет только в
Assets/ImportedGames/<Game>/. Он ничего не трогает в движке. - Применение профиля игры («Play ...») заставляет движок запускать именно эту игру. Оно редактирует ассеты движка, поэтому сохраняет резервную копию и может быть отменено («Restore the demo»).
Доступно в уровне Source. Всё в Hub находится на вкладке Importer.
Что вам понадобится
| Игра | Папка, которую читает импортёр | Node.js | Как рисуются карты |
|---|---|---|---|
| HeartGold / SoulSilver | salida/, результат работы экстрактора HGSS | для экстрактора | 2.5D, как в картридже, или 2D (выбирается при импорте) |
| FireRed | salida-rom/, про читанная из картриджа | для экстрактора | 2D |
| Black / White (и Black 2 / White 2) | Ваш ROM .nds, читаемый самим Hub | 18 или новее | -- (данные видов и сражений) |
Ридеры, превращающие дамп картриджа в эти папки, — небольшие скрипты на Node.js, которые поставляются с импортёром в Assets/OpenMon/Importer/Tools~/ (папки hgss/, firered/ и bw/; завершающая ~ не даёт Unity импортировать их как ассеты). Они читают ваш дамп и пишут в выбранную вами папку; вместе с MCE ничего из игры не распространяется.
Инструменты Node определяют, из какой игры и платформы получен дамп, по сигнатуре в его заголовке (Game Boy Advance или Nintendo DS), а поколение игры определяет, как рисуется мир: FireRed импортируется в 2D, HeartGold / SoulSilver предлагает 2.5D и 2D.
Шаг 1: Импорт
В Hub (Tools > MCE > OpenMon Hub → вкладка Importer) прокрутите до раздела вашей игры и нажмите кнопку импорта. Он запросит папку, а для HeartGold / SoulSilver ещё и спросит, рисовать ли карты в 2.5D (как в картридже) или в 2D (плоско, сверху). Позже это можно изменить для отдельной карты с помощью Display Mode per Map.
Импортёры выполняются в фиксированном порядке. Порядок важен, потому что каждый шаг опирается на предыдущие, а шаг мира пересобирает все сцены с нуля, поэтому NPC всегда идут последними:
HeartGold / SoulSilver (HgssImportador):
- Мир: карты, варпы и внешние соседние карты.
- 3D-модели карт (2.5D).
- Боевые приёмы картриджа, затем предметы, затем магазины (каждая машина обучает приёму из картриджа; каждый магазин продаёт предметы картриджа).
- Значки и регионы.
- Виды с эволюциями, затем их боевые спрайты и значки.
- Аудио: музыка, звуковые эффекты и крики.
- Дикие встречи и боевые фоны.
- Персонажи и последователи с их репликами, а также эмоциональные шарики игры.
- Тренеры, затем их боевые фигуры (лицом у тренера и со спины у игрока, см. Спрайты тренера со спины).
- NPC со скриптами, переведёнными в CommandGraph.
FireRed (FireRedImportador): сначала мир и персонажи, затем данные картриджа (приёмы, предметы, виды, спрайты, тренеры, боевые фигуры, значки, встречи), затем аудио, боевые фоны, эмоциональные шарики и, наконец, NPC со скриптами.
Black / White (BwDesdeLaRom): читает ROM экстрактором из Tools~/bw и импортирует виды, их приёмы, крики, значки и анимированные боевые спрайты. Данные, прочитанные из ROM, остаются в Library/OpenMon/BW; импортированные ассеты попадают в Assets/ImportedGames/BW.
Всё, что импортёр встречает и не может сопоставить, подсчитывается и сообщается в итоговом диалоге и в консоли (например, «commands without support yet» или «moves without a template»). Ничего не отбрасывается молча.
Каждый импортёр пишет только внутрь своей папки: Assets/ImportedGames/HGSS, Assets/ImportedGames/FireRed или Assets/ImportedGames/BW.
Шаг 2: Игра — профиль игры
Импортированная игра не становится частью движка, пока вы не примените её профиль. В Hub в том же разделе есть ещё две кнопки:
| Кнопка | Что она делает |
|---|---|
| Play HGSS / Play FireRed (apply its game profile) | Регистрирует импортированные сцены там, где их ищет движок, начинает новую игру в комнате игрока, предлагает героя и героиню этой игры как играбельных персонажей, засевает флаги новой игры, регистрирует виды, предметы, музыку, регионы и последователей игры и отключает онлайн-слой движка (эти игры одиночные) |
| Restore the demo | Отменяет профиль байт в байт, возвращая движок в исходное состояние |
Профиль затрагивает ассеты движка, которые лежат в репозитории: инициализатор новой игры, сцену выбора персонажа, реестр сцен, Build Settings, базы данных сохранений и мира, базу данных монстров, аудиобиблиотеку, музыку лаунчера сражений, наборы последователей и эмоциональных шариков в MCESettings, глобальные данные игры и онлайн-конфигурацию. Поэтому профиль никогда не применяется при импорте; вы всегда применяете его осознанно. И ведёт он себя так:
- Сначала резервная копия. Прежде чем что-либо изменить, профиль сохраняет то, что было, в
perfil-original.jsonи папкуperfil-original~/внутри папки игрыAssets/ImportedGames/<Game>/. Копия делается один раз: повторное применение профиля никогда не перезаписывает копию уже изменёнными значениями. Профиль идемпотентен. - Один профиль за раз. Применение FireRed, когда применён профиль HGSS, сначала восстанавливает HGSS (и наоборот), поэтому резервная копия никогда не фиксирует движок с уже загруженной другой игрой.
- Экспорт заблокирован. Пока применён профиль, экспортёр пакетов отказывается запускаться, потому что движок поставлялся бы с указанием на игнорируемую папку
ImportedGames. Сначала нажмите Restore the demo. - Шарики и спрайты со спины идут в комплекте. Профиль назначает набор эмоциональных шариков игры (Эмоциональные шарики и эмоции), а импортированные персонажи-игроки несут собственные спрайты со спины и тайминг броска из картриджа (Спрайты тренера со спины). Кроме того, если в проекте есть онлайн-слой, импортёр ставит идентификатор подарка на каждого NPC, который дарит вам монстра (Подарки монстров).
Профиль редактирует ассеты, принадлежащие движку. Если ваш проект находится под системой контроля версий, нажмите Restore the demo перед коммитом, иначе вы зафиксируете проект, указыва ющий на папку, которой ни у кого больше нет.
Командная строка
У каждой кнопки Hub есть статический метод, который можно запустить из пакетного режима Unity (-batchmode -quit -projectPath . -executeMethod <method>). Все они завершают редактор с кодом возврата: 0 при успехе и 1 при ошибке. Импорт HeartGold / SoulSilver и импорт Black / White используют 2, если не смогли даже начать (отсутствует или неверен аргумент; для Black / White — нет ROM или Node.js).
| Игра | Метод | Аргументы |
|---|---|---|
| HGSS | OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssImportador.ImportarTodoDesdeCli | -hgssSalida <папка salida> (обязательно), -hgssModo <2D или 2.5D> (необязательно, по умолчанию 2.5D) |
| Профиль HGSS | OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssPerfil.AplicarDesdeCli | -hgssSalida <папка salida> (необязательно: используется последний результат) |
| Восстановление HGSS | OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssPerfil.RestaurarDesdeCli | -- |
| FireRed | OpenMon.MCE.EssentialsImporter.Editor.FireRed.FireRedImportador.ImportarTodoDesdeCli | -fireredSalida <папка salida-rom> (необязательно) |
| Профиль FireRed | OpenMon.MCE.EssentialsImporter.Editor.FireRed.FireRedImportador.AplicarPerfilDesdeCli | -fireredSalida <папка salida-rom> (необязательно) |
| Восстановление FireRed | OpenMon.MCE.EssentialsImporter.Editor.FireRed.FireRedImportador.RestaurarPerfilDesdeCli | -- |
| Black / White | OpenMon.MCE.EssentialsImporter.Editor.BW.BwDesdeLaRom.DesdeLaRomDesdeCli | -bwRom <rom.nds> (или MCE_BW_ROM) |
У FireRed есть также методы для отдельных частей (ImportarDatosDesdeCli, ImportarFondosDesdeCli, ImportarAudioDesdeCli, ImportarEncuentrosDesdeCli), а у Black / White — BwImportador.ImportarTodoDesdeCli и ImportarDatosDesdeCli (с -bwSalida).
Если аргумент необязателен, точка входа ищет папку (или ROM) в другом месте, и каждая делает это по-своему:
| Точка входа | Без аргумента |
|---|---|
Импорт HGSS (HgssImportador.ImportarTodoDesdeCli) | -hgssSalida обязателен: нет ни переменной окружения, ни последней папки. Записывает в журнал falta -hgssSalida <ruta a salida/> и завершается с кодом 2. |
Профиль HGSS (HgssPerfil.AplicarDesdeCli) | MCE_HGSS_SALIDA, а если её нет — последний результат HeartGold / SoulSilver, импортированный в этом редакторе. |
| FireRed: полный импорт, частичные импорты и профиль | MCE_FIRERED_SALIDA, а если её нет — последний результат FireRed, импортированный в этом редакторе. Если нет ни того, ни другого, импорт завершается ошибкой (код 1), так как папки не существует. |
Black / White из ROM (BwDesdeLaRom.DesdeLaRomDesdeCli) | MCE_BW_ROM. Запасного варианта в виде последней папки нет: без ROM (или без Node.js) завершается с кодом 2. |
Black / White из папки результата (BwImportador) | MCE_BW_SALIDA, а если её нет — последний результат Black / White, импортированный в этом редакторе. |
Пример полного скриптового запуска HeartGold:
# 1. import
Unity.exe -batchmode -quit -projectPath . \
-executeMethod OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssImportador.ImportarTodoDesdeCli \
-hgssSalida D:/dumps/hgss/salida -hgssModo 2D
# 2. apply the profile so the engine starts that game
Unity.exe -batchmode -quit -projectPath . \
-executeMethod OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssPerfil.AplicarDesdeCli \
-hgssSalida D:/dumps/hgss/salida
# 3. ... later, give the engine back
Unity.exe -batchmode -quit -projectPath . \
-executeMethod OpenMon.MCE.EssentialsImporter.Editor.HGSS.HgssPerfil.RestaurarDesdeCli
Для обычных проектов Pokémon Essentials соответствующие точки входа описаны в Импорт из Pokémon Essentials.
Где находятся импортёры
| Папка | Содержимое |
|---|---|
Assets/OpenMon/Importer/Editor/HGSS/ | Импортёры HeartGold / SoulSilver и HgssPerfil — профиль (он обслуживает и FireRed) |
Assets/OpenMon/Importer/Editor/FireRed/ | Импортёры FireRed и FireRedImportador |
Assets/OpenMon/Importer/Editor/BW/ | Импортёры Black / White |
Assets/OpenMon/Importer/Tools~/ | Ридеры на Node.js, превращающие дамп картриджа в перечисленные выше папки |