Saltar al contenido principal

Importar proyectos de Pokemon Essentials

¿Tienes un proyecto de Pokemon Essentials en el que llevas meses o años trabajando? El Essentials Importer de OpenMon convierte los datos de tu proyecto PE v20, v21 y v21.1 al formato de OpenMon, preservando tu trabajo y dándote acceso a todo el soporte de plataformas de Unity y a la licencia comercial.

La pestaña Importer del OpenMon Hub

El Database Browser después de una importación

La segunda captura es el objetivo de todo el pipeline: 667 / 667 Monsters, navegables por especie, movimiento, habilidad, objeto, tipo y naturaleza, desde un proyecto que una hora antes eran scripts de Ruby y archivos de texto PBS.

Disponible en las ediciones Indie, Pro, Source y Studio (compilado en Indie y Pro).

Verificado contra un proyecto real v21.1​

El importador se ejecutó sin interfaz contra un proyecto completo de Pokemon Essentials v21.1 (la versión 2023-07-30), convirtiendo cada lista de principio a fin con cero errores:

DatosResultado
Especies898 / 898 convertidas, 0 errores: 335 sobrescrituras de forma aplicadas, 422 evoluciones enlazadas
Movimientos150 assets Move nuevos creados, 590 emparejados con la biblioteca de movimientos existente
Habilidades72 creadas, 195 emparejadas
Objetos315 assets Item creados, 378 emparejados
Entrenadores20 entrenadores con equipos completos (72 tipos de entrenador procesados)

Las 898 especies se convirtieron en ScriptableObjects reales de MCE, con formas y cadenas de evolución enlazadas, sin errores fatales. Esta es la afirmación principal del importador: verificado contra un proyecto v21.1 real y completo, no contra un caso de prueba sintético. Las 227 advertencias que acompañaron la ejecución son todas avisos de degradación honesta (efectos de movimientos sin una plantilla de MCE exacta; ver Movimientos más abajo), nunca pérdida silenciosa de datos.

Qué se importa​

El Essentials Importer maneja estos tipos de datos:

Datos de PEEquivalente en OpenMonEstado
PBS/pokemon.txtScriptableObjects MonsterEntrySoportado (898/898 en v21.1 real)
PBS/pokemon_forms.txtAssets Form + sobrescrituras DataByFormEntrySoportado (335 sobrescrituras aplicadas)
PBS/moves.txtScriptableObjects MoveSoportado, con mapeo honesto de efectos
PBS/types.txtAssets MonsterType + tabla de efectividadSoportado
PBS/abilities.txtScriptableObjects AbilitySoportado (a nivel de asset)
PBS/items.txtScriptableObjects ItemSoportado (se generan SOs concretos)
PBS/trainers.txtTrainerDefinition + CharacterData + Roster + BagSoportado
PBS/encounters.txtScriptableObjects WildEncountersSetSoportado
Sprites de monstruosMaterials de batalla + Sprites de iconoSoportado (variantes por forma y por género)
Archivos de mapa (.rxdata)Escenas de Unity con GridControllerSoportado (requiere verificación a nivel de proyecto)
Imágenes de tilesetSprite Atlases de UnitySoportado
Comandos de eventos de mapaNodos de CommandGraphSoportado (combates con entrenadores conectados)
Archivos de audioAudioClips con la configuración de AudioManagerCopia directa

Qué requiere trabajo manual​

Algunas funciones de PE no tienen una conversión automática directa. Las documentamos como límites honestos y deliberados en lugar de dejarlas ambiguas:

  • CommonEvents.rxdata: los eventos comunes quedan fuera de alcance por diseño. No se importan; porta manualmente la lógica de eventos compartida a CommandGraph o a C#.
  • Comportamiento de habilidades: los assets de habilidad se crean o se clonan, pero una habilidad importada solo se comporta con la riqueza de la implementación de MCE a la que se asigna. Las habilidades personalizadas o de plugins necesitan una implementación Ability de MCE equivalente.
  • Scripts de Ruby complejos: los scripts personalizados de PE que van más allá de los comandos de evento estándar requieren portarse manualmente a C# o CommandGraph.
  • Datos específicos de plugins: los plugins de terceros de PE guardan datos en formatos no estándar.
  • Diseños de interfaz personalizados: el sistema de ventanas de PE es fundamentalmente distinto de la UI de Unity.
  • Sprites de batalla animados: PE usa otro formato de animación; los sprites se importan como fotogramas estáticos que puedes volver a ensamblar.

Requisitos previos​

Antes de importar, asegúrate de tener:

  1. OpenMon instalado (edición Indie o superior): consulta la Guía de instalación
  2. La carpeta de tu proyecto PE accesible en disco (la que contiene PBS/ y Data/)
  3. Una copia de seguridad de tu proyecto de Unity. El propio asistente lo dice: el importador es experimental, se ofrece tal cual y algunas funciones son parciales (Items) o no están implementadas (Common Events).

No eliges la versión de Essentials (v20, v21 o v21.1): el importador la detecta cuando escaneas el proyecto.

Importación paso a paso​

Paso 1: Abrir el importador​

En Unity, abre el OpenMon Hub (Tools > MCE > OpenMon Hub) → pestaña Importer → Import Wizard.

Pestaña Importer del OpenMon Hub con Import Wizard, Full Reimport, Project Combiner, Starting Map Picker, Display Mode per Map e importación de HD dex

Starting Map Picker, más abajo en la misma pestaña, es el paso que la gente olvida: decide en qué mapa aparece el jugador tras el menú principal. Sin él, una importación que por lo demás fue bien no tiene dónde empezar.

La ventana del asistente muestra:

  • PE Project Folder: la carpeta raíz de tu proyecto (la que contiene PBS/, Data/, Graphics/), con un botón Browse
  • Project Name: un nombre para esta importación (por ejemplo FRLG o Emerald). Da nombre a la carpeta de salida, de modo que varias importaciones pueden convivir
  • Imported Projects: las importaciones que ya hay en este proyecto de Unity
  • Import Categories: un interruptor para cada tipo de datos
  • Map Display Mode: dibujar los mapas importados en 2D (planos, vistos desde arriba) o en 2.5D (bajo una cámara inclinada). Cada mapa se puede cambiar después en Display Mode per Map
  • Output Folder y Overwrite Existing Assets

Paso 2: Seleccionar y escanear tu proyecto PE​

Haz clic en Browse y navega hasta la carpeta de tu proyecto de Pokemon Essentials; luego pulsa Scan Project. El importador valida la estructura de carpetas, muestra la Version detectada e informa de lo que encontró:

PBS/pokemon.txt        -- 898 species detected
PBS/moves.txt -- 740 moves detected
PBS/types.txt -- 19 types detected
PBS/abilities.txt -- 267 abilities detected
PBS/items.txt -- 693 items detected
PBS/pokemon_forms.txt -- 339 form overrides detected
PBS/trainers.txt -- 20 trainers detected

(Las cifras mostradas son del proyecto real v21.1 2023-07-30 usado para verificar el importador.)

El escaneo también ejecuta un análisis profundo de los autotiles del proyecto. Cuando todas las imágenes que nombra un tileset están en el proyecto, el escaneo termina con [OK] Missing: 0 - All autotile images found!. Una imagen que falta todavía no se juzga: eso ocurre cuando los mapas ya están analizados (consulta la nota del código de salida en la sección de línea de comandos y la leyenda del registro en el paso 5).

Paso 3: Elegir qué importar​

Import Categories tiene un interruptor para cada uno de estos: Species, Moves, Items, Abilities, Types, Trainers, Encounters, Maps, Sprites, Follower Sprites, Audio y Connections.

Para una primera importación, recomendamos importar por etapas:

  1. Primera pasada: Types, Abilities, Moves, Species (solo datos, sin mapas)
  2. Segunda pasada: Items, Trainers, Encounters
  3. Tercera pasada: Maps y Audio
  4. Cuarta pasada: revisar los eventos y la integración de escenas (abajo)

Este enfoque por etapas te permite verificar cada capa de datos antes de construir sobre ella.

Paso 4: Ejecutar la importación​

El asistente trabaja por fases, y cada una tiene su propio botón:

BotónQué hace
PARSE DATAFases 1-2: lee los archivos de texto PBS y los mapas y tilesets .rxdata según la versión de Essentials detectada. Todavía no se crea nada en tu proyecto.
CONVERT TO MCEFase 3: convierte los datos analizados en ScriptableObjects y escenas de MCE bajo la carpeta de salida. Se habilita tras un análisis correcto.
FULL IMPORT (Parse + Convert)Analiza, convierte e integra de una vez.
INTEGRATE SCENES (Phase 6)Conecta las escenas importadas con el runtime de MCE: las registra en el gestor de escenas, conecta cada SceneInfo, coloca los disparadores de warp, enlaza los conjuntos de encuentros y agrega las escenas a los Build Settings. Ejecútalo después de la importación (la importación completa ya lo hace).

Todo se escribe en Assets/ImportedGames/<Project Name>/, y un registro detallado de la importación muestra los éxitos, las advertencias y los elementos que requieren atención.

Paso 5: Revisar el registro de importación​

El registro clasifica los resultados:

  • [OK]: datos convertidos con éxito
  • [WARN]: datos convertidos pero con suposiciones (p. ej., un efecto de movimiento sin una plantilla de MCE exacta, clonado por categoría), o un resto que no pierde nada (un tileset nombra una imagen de autotile que el proyecto no incluye, pero ningún mapa usa ese tileset)
  • [ERR]: datos que no se pudieron convertir automáticamente (incluida una imagen de autotile que nombra un tileset usado por al menos un mapa y que el proyecto no incluye)

Paso 6: Hacer el juego jugable​

Tras la integración, usa Starting Map Picker si quieres un mapa inicial distinto. Los botones Restore MCE Original Demo y Restore Imported Demo del asistente alternan los Build Settings entre las escenas de la demo y las importadas.

Botón destructivo

DELETE ALL IMPORTED PROJECTS elimina todas las carpetas y perfiles de proyectos importados. Haz una copia de seguridad antes de pulsarlo.

Paso 7: Renombrar para uso comercial​

Este paso es crítico para los lanzamientos comerciales.

Tu proyecto PE probablemente usa nombres propios de Pokemon para monstruos, personajes y objetos. Deben reemplazarse por nombres originales antes de poder vender tu juego. Usa el Database Browser para revisar y renombrar los datos importados:

  1. Abre el OpenMon Hub (Tools > MCE > OpenMon Hub) → pestaña Database → Database Browser
  2. Busca en la base de datos de especies importadas
  3. Cambia el nombre visible de cada entrada por tu nombre original
  4. Como los assets se referencian por referencia de objeto, las tablas de encuentros, los equipos de entrenadores y las cadenas de evolución siguen funcionando después de renombrar

Los nombres de movimientos y de habilidades suelen ser seguros de conservar tal cual (describen mecánicas, no propiedad intelectual), pero los nombres de monstruos, de personajes y de objetos con marca propia de Pokemon deben cambiar.

Qué importa el pipeline, paso a paso​

Parse (fases 1-2) lee, en orden: tipos, habilidades, movimientos, objetos, especies, entrenadores, encuentros, conexiones de mapas, metadatos de mapas, tilesets y mapas.

Convert (fase 3) ejecuta luego estos pasos (cada uno se omite cuando su categoría está desactivada):

  1. Escanear los assets de MCE que ya existen, de modo que los que coinciden se reutilicen en lugar de duplicarse.
  2. Crear los movimientos y habilidades que faltan, clonando y configurando.
  3. Convertir las especies, con sus formas y evoluciones (a estas alturas ya existen todos los movimientos y habilidades).
  4. Informar de las referencias sin emparejar.
  5. Enlazar los sprites de la carpeta Graphics/ de PE, y los sprites de seguidores si el proyecto los tiene.
  6. Reconstruir la base de datos de monstruos central; convertir los tipos; asegurarse de que existan las 25 naturalezas; exportar objetos y entrenadores.
  7. Cortar los tilesets en assets de tiles de Unity y hornear los autotiles.
  8. Convertir los mapas en escenas de Unity y conectar sus conexiones.
  9. Convertir los encuentros en assets WildEncountersSet.
  10. Importar el audio (BGM, BGS, ME, SE), los sprites de personajes del mundo, las imágenes de battleback y los sprites de entrenadores.
  11. Extraer los warps y los datos de eventos, y convertir los comandos de eventos en CommandGraphs.

Integrate (fase 6) registra, conecta y agrega las escenas como se describe en la tabla anterior.

Cómo se convierte cada tipo de datos​

Sprites y materiales de batalla​

Los paquetes reales de Essentials nombran los sprites de monstruos por INTERNALNAME, no por número de dex. El SpriteLinker empareja los archivos de sprite por nombre interno, enlaza el arte por forma y respeta las variantes de género: el campo de arte por defecto lleva el sprite hembra/sin género ({name}_female.png) y un campo de sobrescritura masculina aparte lleva el sprite base.

Fundamentalmente, el enlazador genera los Materials de batalla de cada una de las cuatro caras (Front, Back, Front-Shiny, Back-Shiny) más el sprite de icono. El modelo de batalla de MCE referencia los sprites mediante Materials (un shader de flipbook), así que sin este paso un monstruo importado sería invisible en batalla. El enlazado de sprites se ejecuta cuando importas con los sprites activados.

Movimientos (mapeo honesto de efectos)​

Los efectos de los movimientos provienen de los FunctionCodes de Essentials. El importador asigna 307 FunctionCodes distintos a plantillas concretas de movimientos de MCE (verificado en MoveConverter.FunctionCodeTemplates), un mapeo ampliado a lo largo de varios lotes, incluida una pasada residual que cubre ataques de dos turnos o de carga y movimientos que modifican la potencia.

Todo FunctionCode que no esté en la tabla se degrada con honestidad: el movimiento se crea igualmente, clonado según su categoría de daño, y se registra una advertencia visible (unmapped FunctionCode '…'. Cloned by category only.). Es deliberado: la degradación nunca es silenciosa. Algunos códigos se dejan sin asignar a propósito cuando no existe una plantilla de MCE fiel, porque un respaldo honesto es mejor que un clon equivocado.

Objetos​

ItemConverter genera ScriptableObjects Item concretos de MCE para cada objeto analizado (reutilizando cualquier Item de MCE existente que coincida por nombre, para ser idempotente) y exporta los datos brutos de PE como JSON para referencia. Los efectos de objetos que MCE no puede modelar se registran como advertencias, y el objeto se crea igualmente como un objeto de mochila inerte.

Entrenadores​

Los bloques Pokemon = SPECIES,level repetidos en trainers.txt se analizan correctamente (una trampa común: las claves duplicadas se conservan, no se colapsan). TrainerConverter crea un TrainerDefinition, CharacterType, CharacterData, Roster y Bag para cada entrenador. Los eventos de mapa que llaman a pbTrainerBattle(:TYPE, "Name") se conectan con el TrainerDefinition importado correspondiente, de modo que los entrenadores importados llegan a combates reales en tiempo de ejecución.

Encuentros​

EncounterConverter construye assets WildEncountersSet y resuelve las especies por nombre bruto, en mayúsculas y normalizado, incluidas las especies cuyos nombres contienen signos de puntuación o símbolos de género, de modo que las tablas de encuentros enlazan con el monstruo correcto incluso con nombres internos incómodos.

Formas y evoluciones​

Las sobrescrituras de forma crean o reutilizan assets Form y datos DataByFormEntry; una especie base ausente genera una advertencia sin contar como éxito. La conexión de evoluciones se ejecuta como una segunda pasada (cuando ya existen todos los assets de especie) para que los destinos se resuelvan, y reconstruye la lista de evoluciones de forma idempotente al reimportar. El conversor asigna el conjunto completo de encabezados de métodos de evolución de v21.1 (nivel, hora del día, género, objeto, objeto equipado, intercambio, movimiento conocido, en el equipo y variantes de golpe crítico) a comandos de evolución de MCE.

Importación por línea de comandos​

Dos puntos de entrada ejecutan el importador sin abrir el asistente. Se diferencian en cuánto hacen.

La importación completa: ImportarCompletoDesdeCli​

Ejecuta todo el pipeline del asistente (datos, mapas, encuentros, audio, sprites, warps, eventos e integración de escenas), exactamente igual que el botón FULL IMPORT:

Unity.exe -batchmode -projectPath . \
-executeMethod OpenMon.MCE.EssentialsImporter.Editor.EssentialsImporterWizard.ImportarCompletoDesdeCli \
-essentialsProyecto "D:/Games/MyEssentialsProject" \
-essentialsNombre "MyGame" \
-essentialsModo 2.5D
ArgumentoSignificado
-essentialsProyecto <carpeta>El proyecto de Essentials (debe contener PBS/ y Data/)
-essentialsNombre <nombre>El nombre de la importación. La salida va a Assets/ImportedGames/<nombre>/
-essentialsModo <2D o 2.5D>Opcional. Cómo se dibujan los mapas; 2D si se omite

Se niega a escribir sobre una carpeta de salida existente: el pipeline escribe y reescribe ahí, y lo que había se perdería. Elige otro -essentialsNombre, o saca la carpeta antigua del proyecto. También se niega cuando la carpeta del proyecto no existe o le faltan PBS/ o Data/.

El editor se cierra solo con el código de salida 0 cuando se produjeron escenas y no se registró ninguna línea [ERR], 1 en caso contrario, y 2 si no pudo arrancar (argumento faltante, modo desconocido, proyecto no encontrado, carpeta de salida ya existente). Sus líneas de registro empiezan con [EssentialsCompleto].

Un tileset que nombra una imagen de autotile que el proyecto no incluye se juzga cuando los mapas ya están analizados. Es un [ERR] solo si al menos un mapa usa ese tileset. Si ningún mapa lo usa, es un [WARN] ("no map uses that tileset, so nothing is lost") y no hace fallar la importación.

La importación solo de datos: EssentialsHeadlessImport​

Para CI, o cuando solo necesitas la base de datos (especies, movimientos, objetos...) y ningún mapa, EssentialsHeadlessImport ejecuta el pipeline de datos sin ventana:

Unity.exe -batchmode -quit -projectPath . \
-executeMethod OpenMon.MCE.EssentialsImporter.Editor.EssentialsHeadlessImport.RunCli

RunCli lee sus entradas de variables de entorno:

VariableSignificadoValor por defecto
MCE_IMPORT_PROJECTLa raíz del proyecto de Essentials./Pokemon Essentials v21.1 2023-07-30
MCE_IMPORT_OUTPUTCarpeta de salida relativa a UnityAssets/ImportedGames/_v21batch
MCE_IMPORT_SPRITESEnlazar sprites y seguidores (false, 0, no u off los omite)activado
MCE_IMPORT_REBUILD_DBReconstruir el MonsterDatabaseInstance del proyecto (false lo deja intacto)activado

Primero limpia la carpeta de salida anterior, de modo que la ejecución sea determinista; luego escribe un informe compacto, de una línea por sección, en Logs/v21-batchmode-summary.txt y termina con 0 si tiene éxito o 1 si falla.

Desde C# puedes llamar en su lugar a EssentialsHeadlessImport.Run(projectPath, outputPath, importSprites, rebuildDatabase); devuelve un ImportSummary con los recuentos reales (especies, movimientos, objetos, habilidades y entrenadores creados, emparejados y omitidos).

Importa tipos, habilidades, movimientos, objetos, especies con sus formas y métricas, sprites, seguidores, naturalezas y entrenadores, y reconstruye la base de datos. Omite deliberadamente los mapas, las escenas, los tilesets, los autotiles, las escenas de encuentros, el audio, los medios de mundo/battleback/entrenadores, los grafos de comandos de eventos y la integración de escenas; cada omisión queda registrada en SkippedSteps del resumen.

Ejecuta las importaciones grandes desde la línea de comandos

Una importación completa con generación de sprites realiza trabajo síncrono de AssetDatabase de varios minutos. Ejecútala en modo batch con el editor cerrado en lugar de forma interactiva, para que el largo trasiego de assets no bloquee tu editor. Las importaciones interactivas son mejores para pasadas por etapas, solo de datos.

Para volcados de cartuchos (HeartGold / SoulSilver, FireRed, Black / White) y sus perfiles de juego, consulta Juegos importados y perfiles de juego.

Lista de comprobación posterior a la importación​

Después de importar, recorre esta lista:

  • Verifica los datos de especies en el Monster Database Editor
  • Revisa por muestreo la efectividad de tipos en el Type Chart Editor
  • Prueba algunos combates con monstruos y movimientos importados
  • Recorre los mapas importados y verifica las colisiones de los tiles
  • Prueba los eventos de los NPC y el flujo de diálogos
  • Reemplaza todos los nombres propios de Pokemon por originales
  • Agrega tus propios sprites para los monstruos renombrados
  • Configura las tablas de encuentros según la progresión de tu juego
  • Configura el sistema de guardado con el formato de guardado de tu juego

Problemas comunes de importación​

"Species X has an unknown ability"​

PE permite habilidades personalizadas mediante plugins. Si el importador no reconoce una habilidad, la asigna a un marcador de posición. Crea un asset Ability personalizado en OpenMon que coincida con el comportamiento.

"Map tile Y has no matching collision type"​

PE usa algunas propiedades de tile que no se asignan directamente al GridController de OpenMon. El importador crea el tile pero lo marca para asignación manual de colisión.

"Evolution method Z not supported"​

OpenMon soporta 37 tipos de evolución, pero los plugins de PE pueden agregar otros personalizados. Se registran como advertencias para implementarlos manualmente.

¿Por qué migrar?​

El esfuerzo de importar y renombrar es un coste único. Lo que ganas:

Antes (PE)Después (OpenMon)
Solo Windows7+ plataformas
Solo juego de fansLanzamiento comercial
Sin multijugador25 clases de servicios en línea disponibles
Scripting en RubyC# con soporte completo de IDE
Sin pruebas automatizadasFramework de pruebas NUnit
Despliegue manualPipeline de compilación de Unity
Resolución 320x240Cualquier resolución

Tus años de trabajo creativo (el mundo que construiste, los monstruos que diseñaste, la historia que escribiste) merecen llegar a la mayor audiencia posible con la mejor tecnología posible.

Obtener ayuda​