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 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:
| Datos | Resultado |
|---|---|
| Especies | 898 / 898 convertidas, 0 errores: 335 sobrescrituras de forma aplicadas, 422 evoluciones enlazadas |
| Movimientos | 150 assets Move nuevos creados, 590 emparejados con la biblioteca de movimientos existente |
| Habilidades | 72 creadas, 195 emparejadas |
| Objetos | 315 assets Item creados, 378 emparejados |
| Entrenadores | 20 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 PE | Equivalente en OpenMon | Estado |
|---|---|---|
| PBS/pokemon.txt | ScriptableObjects MonsterEntry | Soportado (898/898 en v21.1 real) |
| PBS/pokemon_forms.txt | Assets Form + sobrescrituras DataByFormEntry | Soportado (335 sobrescrituras aplicadas) |
| PBS/moves.txt | ScriptableObjects Move | Soportado, con mapeo honesto de efectos |
| PBS/types.txt | Assets MonsterType + tabla de efectividad | Soportado |
| PBS/abilities.txt | ScriptableObjects Ability | Soportado (a nivel de asset) |
| PBS/items.txt | ScriptableObjects Item | Soportado (se generan SOs concretos) |
| PBS/trainers.txt | TrainerDefinition + CharacterData + Roster + Bag | Soportado |
| PBS/encounters.txt | ScriptableObjects WildEncountersSet | Soportado |
| Sprites de monstruos | Materials de batalla + Sprites de icono | Soportado (variantes por forma y por género) |
| Archivos de mapa (.rxdata) | Escenas de Unity con GridController | Soportado (requiere verificación a nivel de proyecto) |
| Imágenes de tileset | Sprite Atlases de Unity | Soportado |
| Comandos de eventos de mapa | Nodos de CommandGraph | Soportado (combates con entrenadores conectados) |
| Archivos de audio | AudioClips con la configuración de AudioManager | Copia 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
Abilityde 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:
- OpenMon instalado (edición Indie o superior): consulta la Guía de instalación
- La carpeta de tu proyecto PE accesible en disco (la que contiene
PBS/yData/) - 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.

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
FRLGoEmerald). 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:
- Primera pasada: Types, Abilities, Moves, Species (solo datos, sin mapas)
- Segunda pasada: Items, Trainers, Encounters
- Tercera pasada: Maps y Audio
- 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ón | Qué hace |
|---|---|
| PARSE DATA | Fases 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 MCE | Fase 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.
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:
- Abre el OpenMon Hub (
Tools > MCE > OpenMon Hub) → pestaña Database → Database Browser - Busca en la base de datos de especies importadas
- Cambia el nombre visible de cada entrada por tu nombre original
- 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):
- Escanear los assets de MCE que ya existen, de modo que los que coinciden se reutilicen en lugar de duplicarse.
- Crear los movimientos y habilidades que faltan, clonando y configurando.
- Convertir las especies, con sus formas y evoluciones (a estas alturas ya existen todos los movimientos y habilidades).
- Informar de las referencias sin emparejar.
- Enlazar los sprites de la carpeta
Graphics/de PE, y los sprites de seguidores si el proyecto los tiene. - Reconstruir la base de datos de monstruos central; convertir los tipos; asegurarse de que existan las 25 naturalezas; exportar objetos y entrenadores.
- Cortar los tilesets en assets de tiles de Unity y hornear los autotiles.
- Convertir los mapas en escenas de Unity y conectar sus conexiones.
- Convertir los encuentros en assets
WildEncountersSet. - Importar el audio (BGM, BGS, ME, SE), los sprites de personajes del mundo, las imágenes de battleback y los sprites de entrenadores.
- 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
| Argumento | Significado |
|---|---|
-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:
| Variable | Significado | Valor por defecto |
|---|---|---|
MCE_IMPORT_PROJECT | La raíz del proyecto de Essentials | ./Pokemon Essentials v21.1 2023-07-30 |
MCE_IMPORT_OUTPUT | Carpeta de salida relativa a Unity | Assets/ImportedGames/_v21batch |
MCE_IMPORT_SPRITES | Enlazar sprites y seguidores (false, 0, no u off los omite) | activado |
MCE_IMPORT_REBUILD_DB | Reconstruir 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.
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 Windows | 7+ plataformas |
| Solo juego de fans | Lanzamiento comercial |
| Sin multijugador | 25 clases de servicios en línea disponibles |
| Scripting en Ruby | C# con soporte completo de IDE |
| Sin pruebas automatizadas | Framework de pruebas NUnit |
| Despliegue manual | Pipeline de compilación de Unity |
| Resolución 320x240 | Cualquier 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
- Discord: Únete a la comunidad de OpenMon: el canal #essentials-import tiene soporte dedicado
- Documentación: Explora la biblioteca completa de guías para flujos de trabajo específicos de OpenMon
- Incidencias: Informa de errores de importación en GitHub