Conociendo a Intersect Game Engine 0.8.0.0

Este es un post donde se abordan aspectos técnicos y se analiza de forma general, la estructura del código fuente de Intersect Engine.

Los temas vistos:

  • ¿Qué es Intersect?
  • ¿Cómo editar Intersect?
  • Compatibilidad de Intersect
  • Instrucciones de compilación
  • Testear juego
  • Distribuir juego
  • Licencias del proyecto
  • Sistema de bases de datos
  • Resumen de la estructura de Intersect
  • Estructura del Proyecto Intersect Engine

¿Qué es Intersect?

Intersect Game Engine, en su versión compilada, es un conjunto de herramientas compuesto por editor, servidor y cliente que permite crear videojuegos multijugador en 2D con estilo RPG.

El código fuente del motor está desarrollado en C# utilizando MonoGame, un framework open-source bajo licencia MIT orientado al desarrollo de videojuegos.

Desde mi punto de vista, su principal ventaja es que abstrae gran parte de la complejidad relacionada con la infraestructura de red y servidores, lo cual suele representar una inversión considerable de tiempo en proyectos multijugador.

¿Cómo editar Intersect?

Para trabajar con este motor se puede utilizar Visual Studio 2022, lo cual facilita el proceso de compilación. En mi caso, optaré por Visual Studio Code junto con el SDK de .NET 8.

El primer paso consiste en clonar el repositorio y actualizar sus submódulos:

El código fuente de Intersect está dividido en varias partes lógicas. Algunas de ellas corresponden a dependencias externas que se mantienen en repositorios independientes. En lugar de duplicar estos recursos dentro del repositorio principal, se gestionan mediante submódulos.

Este enfoque ofrece varias ventajas:

🔵Permite actualizar dependencias de forma centralizada.
🔵Reduce conflictos cuando múltiples partes del proyecto utilizan el mismo código.

El comando git submodule update descarga el contenido de cada submódulo en la versión exacta requerida por el repositorio principal.
–init inicializa los submódulos configurados.
–recursive permite inicializar y actualizar submódulos anidados.

Al ejecutar este comando, librerías como LiteNetLib (utilizada para la comunicación cliente-servidor) y DockPanel Suite (para interfaces con ventanas acoplables) son clonadas dentro de la carpeta vendor/.

Compatibilidad de Intersect en S.O.

El editor de intersect requiere Windows (debido al uso de DirectX), por lo que el desarrollo con esta herramienta debe realizarse en este sistema operativo.
El servidor y el cliente pueden ejecutarse en cualquier entorno de escritorio compatible con OpenGL (Linux, macOS, Windows), lo que permite, por ejemplo, desplegar el servidor en Linux.

Instrucciones de compilación

Antes de compilar, asegúrate de tener instalado:

  • .NET 8 SDK (versión 8.0.12 o superior).
  • Git.
  • Un IDE compatible: Visual Studio 2022 o superior, VS Code con extensiones de C#.
  • Tu repositorio debe estar clonado con Git y los submódulos inicializados
git clone > submódulos > build

Para compilar utilice un IDE o uno de los siguientes comandos:

Debug:
Todas las compilaciones de depuración no crearán salidas binarias de un solo archivo.
Usar si quieres probar tus cambios en modo desarrollo, con depuración, sin optimizaciones.

dotnet build -p:Configuration=Debug -p:PackageVersion=0.8.0-beta -p:Version=0.8.0

Release:
Las compilaciones de release crearán salidas binarias de un solo archivo,
no son autocontenidos (dependen de .NET Runtime instalado en el destino). Usar si quieres probar el rendimiento real o preparar una versión para distribución sin depuración.

dotnet build -p:Configuration=Release -p:PackageVersion=0.8.0-beta -p:Version=0.8.0

Distribución:
Usar si quieres generar un ejecutable que no requiera .NET Runtime en el ordenador del jugador/servidor.

-Windows
dotnet publish -p:Configuration=Release -p:PackageVersion=0.8.0-beta -p:Version=0.8.0 -r win-x64

-Linux
dotnet publish -p:Configuration=Release -p:PackageVersion=0.8.0-beta -p:Version=0.8.0 -r linux-x64

-Mac
dotnet publish -p:Configuration=Release -p:PackageVersion=0.8.0-beta -p:Version=0.8.0 -r osx-x64

Testear juego

Usa Debug para testear, el tiempo de compilación es mas rápido.

dotnet build -p:Configuration=Debug -p:PackageVersion=0.8.0-beta -p:Version=0.8.0

Orden de ejecución:

1. EJECUTAR PRIMERO EL SERVIDOR
   Ubicación: Intersect.Server/bin/Debug/net8.0/
   Ejecutar: Intersect Server.exe
   
   Al iniciar por primera vez, el servidor crea automáticamente:
   - /resources/              Carpeta de recursos
   - /resources/config.json   Configuración del servidor
   - /resources/gamedata.db   Base de datos del juego
   - /resources/playerdata.db Base de datos de jugadores
   - /resources/identity.db   Base de datos de cuentas
   - /resources/logging.db    Base de datos de logs
   
   Puerto por defecto: 5400

2. EJECUTAR EL CLIENTE (en otra ventana/consola)
   Ubicación: Intersect.Client/bin/Debug/net8.0/
   Ejecutar: Intersect Client.exe
   
   El cliente se conecta automáticamente a localhost:5400.
   Si necesitas conectar a otro servidor:
   Intersect Client.exe --server 192.168.1.100:5400

3. VERIFICAR QUE FUNCIONA
   - En el servidor: Deberías ver mensajes cuando el cliente se conecta
   - En el cliente: Debería mostrarse la pantalla de login/registro
   - Crear una cuenta de usuario
   - Iniciar sesión y entrar al mundo

4. EJECUTAR EL EDITOR (opcional, para modificar contenido)
   Ubicación: Intersect.Editor/bin/Debug/net8.0-windows/
   Ejecutar: Intersect Editor.exe
   
   El editor se conecta al mismo servidor y permite editar mapas,
   items, NPCs, hechizos, eventos y todo el contenido del juego.
   REQUIERE Windows (usa DirectX y WinForms).

5. MODO SINGLEPLAYER (alternativa para pruebas rápidas)
   Ubicación: Intersect.SinglePlayer/bin/Debug/net8.0/
   Ejecutar: Intersect.SinglePlayer.exe
   
   Este modo inicia automáticamente un servidor embebido en memoria
   y un cliente conectado a él. No necesitas ejecutar el servidor
   por separado. Útil para pruebas rápidas sin configuración.

#Nota:
- Para testing local no se requiere configuración adicional

Distribuir Juego

Para compartir el juego y que otros usuarios puedan utilzarlo, deberas compartir:
-Intersect Client.exe
-Intersect Client.pdb (si existe, opcional)
-/Resources/

#Nota archivos:
/Resources/mapcache.db es para editores y puede crecer hasta alcanzar un tamaño bastante grande. Es seguro eliminarlo y debes eliminar este archivo en lugar de enviarlo a tus jugadores.

#Nota conexión server:
Para que el cliente se conecte a tu servidor, el usuario debe tener
el archivo resources/config.json con la IP y puerto correctos:

{
«Host»: «tu-servidor.com»,
«Port»: 5400
}

Licencias del proyecto

El proyecto está dividido en distintos módulos con diferentes licencias:

-Licencia MIT
/Intersect.Client/
/Intersect.Core/
/Intersect.Client.Framework/
/Intersect.Network/


-Licencia GPLv3
/Intersect.Editor/
/Intersect.Server/
/Intersect.Server.Framework/
/Intersect.Utilities/

Sistema de bases de datos

Intersect utiliza dos bases de datos principales:

Intersect.Server/Database/GameData/GameContext.cs
Almacena datos del juego como objetos, mapas, recursos y eventos.


Intersect.Server/Database/PlayerData/PlayerContext.cs
Almacena toda la información relacionada con las cuentas de usuario.

Según la documentación oficial, las tablas de ambas bases de datos se generan automáticamente a partir de los contextos.
Estos contextos están formados por DbSet, los cuales representan tablas en la base de datos. A su vez:

Los DbSet se definen a partir de clases en C#.
Las relaciones entre tablas se configuran dentro de las clases de contexto.
Los campos se generan automáticamente a partir de las propiedades públicas de cada clase.

A continuación, se describe la estructura del proyecto:

Resumen de la estructura de intersect

🟢 = Elementos en estudio

/.github/Configuración de GitHub Actions.
/.idea/Configuración del IDE JetBrains Rider.
/assets/Recursos gráficos del proyecto.
/Documentation/Documentación adicional del proyecto.
/Examples/Proyectos de ejemplo para plugins.
/Framework/Nuevo sistema de arquitectura modular.
/Intersect (Core)/PROYECTO COMPARTIDO – Código base usado por cliente y servidor.
/Intersect.Client/PROYECTO CLIENTE – Punto de entrada del cliente de juego.
/Intersect.Client.Core/LÓGICA DEL CLIENTE – Procesa todo lo que el jugador ve.
/Intersect.Client.Framework/FRAMEWORK UI – Sistema de interfaz gráfica.
/Intersect.Editor/EDITOR DE JUEGO – Herramienta para crear y configurar el juego.
/Intersect.Network/COMUNICACIÓN DE RED – Manejo de conexiones cliente-servidor.
/Intersect.Server/PROYECTO SERVIDOR – Punto de entrada del servidor.
/Intersect.Server.Core/LÓGICA DEL SERVIDOR – Procesa toda la lógica del mundo.
/Intersect.Server.Framework/FRAMEWORK DEL SERVIDOR – Clases base para entidades.
/Intersect.SinglePlayer/MODO OFFLINE – Implementación para jugar sin servidor.
/Intersect.Tests/PRUEBAS BASE – Pruebas unitarias principales.
🟢/Intersect.Tests.Client/PRUEBAS DEL CLIENTE – Tests específicos del cliente.
🟢/Intersect.Tests.Client.Framework/PRUEBAS DEL FRAMEWORK UI – Tests para el sistema de interfaz.
/Intersect.Tests.Editor/PRUEBAS DEL EDITOR – Tests para el editor de juego.
/Intersect.Tests.Network/PRUEBAS DE RED – Tests específicos de comunicación.
/Intersect.Tests.Server/PRUEBAS DEL SERVIDOR – Tests de lógica del servidor.
/scripts/Scripts de automatización.
/targets/Archivos de MSBuild para configuración avanzada.
/Utilities/Herramientas de desarrollo.
/vendor/Dependencias externas integradas.
.dockerignoreLista de archivos ignorados al construir imágenes Docker.
.editorconfigDefine estándares de código del proyecto.
.gitattributesConfigura cómo Git maneja ciertos archivos:
.gitignoreLista de archivos/carpetas ignorados por Git.
.gitmodulesDefine submódulos de Git.
AUTHORS.mdLista de contribuidores del proyecto con sus nombres y enlaces.
CODE_OF_CONDUCT.mdCódigo de conducta para la comunidad.
Common.propsPropiedades comunes de MSBuild.
CONTRIBUTING.mdGuía para contribuyentes.
Directory.Build.propsArchivo importado automáticamente en todos los proyectos.
disable-windows-only.patchPatch de Git para deshabilitar código específico de Windows cuando se compila en Linux/Mac.
Intersect.propsPropiedades del proyecto.
Intersect.slnArchivo de solución de Visual Studio.
Intersect.sln.DotSettingsIntersect.sln.DotSettings
LICENSE.mdInformación de licencias.
NuGet.ConfigConfiguración de paquetes NuGet.
README.mdPágina principal del proyecto.
REQUIREMENTS.mdRequisitos del sistema.
SECURITY.mdPolítica de seguridad.
VERSIONING.mdPolítica de versionado semántico.

Estructura del Proyecto Intersect Engine

Análisis completo de cada carpeta y archivo en la raíz del proyecto

/CARPETAS/

/.github/

Configuración de GitHub Actions.
Automatiza el proceso de compilación y distribución del engine.

  • bundles/ – Archivos para crear paquetes de distribución
  • ISSUE_TEMPLATE/ – Plantillas para reportar bugs y features
  • workflows/ – Scripts de CI/CD que automatizan builds, tests y releases
  • FUNDING.yml – Configuración de financiamiento del proyecto

/.idea/

Configuración del IDE JetBrains Rider.
Archivos de preferencias y settings del editor.
Permite que el proyecto se abra correctamente en Rider con el formatting y plugins adecuados.

/assets/

Recursos gráficos del proyecto.
Almacena los logos e imágenes oficiales del engine usados en el launcher, documentación y paquetes.

  • Logos del engine en múltiples formatos (PNG, ICO, BMP, SVG)
  • Carpetas development/, production/, staging/ para diferentes entornos

/Documentation/

Documentación adicional del proyecto.
Proporciona guías y referencias para desarrolladores que usan características avanzadas.

  • Features.md – Guía de características extendidas
  • AvatarController/ – Documentación del sistema de avatares
  • Intersect Documentation.url – Acceso directo a documentación online
  • Features.HomepageLeaderboard.png – Imagen para la web

/Examples/

Proyectos de ejemplo para plugins.
Sirve como plantillas y tutoriales para que los desarrolladores aprendan a crear plugins para Intersect.

  • Intersect.Examples.Plugin/ – Plugin básico de ejemplo
  • Intersect.Examples.Plugin.Client/ – Ejemplo de plugin de cliente
  • Intersect.Examples.Plugin.Server/ – Ejemplo de plugin de servidor
  • Intersect.Examples.Plugin.Multitarget/ – Ejemplo multi-plataforma
  • Intersect.Examples.sln – Solución con todos los ejemplos

/Framework/

Nuevo sistema de arquitectura modular.
Arquitectura moderna que permite reutilizar código entre cliente y servidor de manera más eficiente.

  • Intersect.Framework.Core/ – Núcleo del framework
  • Intersect.Framework.Multitarget/ – Soporte para múltiples plataformas
  • Intersect.Framework/ – Implementación principal

/Intersect (Core)/

PROYECTO COMPARTIDO – Código base usado por cliente y servidor.
Contiene todo el código que tanto cliente como servidor necesitan compartir: tipos de datos, enums, utilidades base, sistema de red y plugins.

  • Enums/ – Enumeraciones (DamageType, ChatboxTab, SpellCastFailureReason, etc.)
  • Core/ – Clases base del motor
  • Network/ – Protocolo de red compartido
  • Plugins/ – Sistema de plugins base
  • IO/ – Lectura/escritura de archivos
  • Serialization/ – Serialización de datos
  • Security/ – Encriptación y seguridad
  • Collections/ – Estructuras de datos personalizadas
  • Compression/ – Algoritmos de compresión
  • Factories/ – Fábricas de creación de objetos
  • Localization/ – Sistema de traducciones
  • Reflection/ – Reflexión de tipos
  • Threading/ – Manejo de hilos
  • Utilities/ – Utilidades generales
  • Immutability/ – Clases inmutables
  • Memory/ – Gestión de memoria
  • CustomColors.cs – Sistema de colores personalizados
  • SharedConstants.cs – Constantes compartidas

/Intersect.Client/

PROYECTO CLIENTE – Punto de entrada del cliente de juego.
Es el ejecutable que corre el jugador. Delega toda la lógica a Intersect.Client.Core.

  • bin/ –
  • obj/ –
  • Properties/ – Configuración de build
  • app.manifest – Configuración de Windows
  • GlobalSuppressions.cs
  • Icon.bmp – Ícono del ejecutable
  • Intersect.Client.csproj
  • LICENSE.md
  • Program.cs – Método Main que inicia el client

/Intersect.Client.Core/

LÓGICA DEL CLIENTE – Procesa todo lo que el jugador ve.
Maneja renderizado de sprites, animación, mapas, input del jugador y comunicación con el servidor.

  • bin/ – Carpeta de salida de compilación. Contiene los archivos .dll compilados del núcleo del cliente. Se genera automáticamente por MSBuild
  • Core/ – Núcleo del cliente: motor gráfico (Graphics.cs – 1566 líneas), sistema de audio (Audio.cs), gestión de entrada (Input.cs), bucle principal del juego (Main.cs), transiciones de pantalla (Fade.cs) y bootstrapping
  • Entities/ – Todas las entidades del juego: Entity.cs (2624 líneas), Player.cs (3061 líneas), Resource.cs, Critter.cs, Animation.cs, ChatBubble.cs, Dash.cs, Status.cs. Incluye sistemas de combate, movimiento, animación e inventario. Subcarpetas: Events/ y Projectiles/
  • General/ – Estado global compartido del cliente (Globals.cs – 260 líneas): diccionarios de entidades, estado del juego, variable Me (jugador actual), listas de diálogos, colas de eventos, tiendas, bancos
  • Interface/ – Sistema COMPLETO de UI del juego con 4 subcarpetas: Menu/ (login, registro, creación personaje), Game/ (inventario, banco, chat, tiendas, quests, party), Shared/ (alertas, configuración), Debugging/ (herramientas de debug)
  • Items/ – Modelo de datos para items: Item.cs (ID, cantidad, bag, propiedades) y MapItemInstance.cs (items en el suelo). NO es visual
  • Localization/ – Sistema de localización masivo: Strings.cs (2847 líneas) con miles de cadenas de texto para toda la UI, formateo de números abreviados (K, M, B)
  • Maps/ – Sistema de mapas del mundo: MapInstance.cs (1751 líneas) con renderizado, clima, iluminación, niebla, panoramas, MapGrid.cs, WeatherParticle.cs
  • MonoGame/ – Capa de implementación de MonoGame: IntersectGame.cs (668 líneas – ciclo de vida), implementaciones de audio, gráficos, input, red, base de datos local y bindings nativos SDL2/OpenGL
  • Networking/ – Sistema de comunicación: Network.cs (conexión), PacketHandler.cs (recepción), PacketSender.cs (envío), NetworkStatus.cs (estados de conexión)
  • obj/ – Carpeta de salida de compilación. Contiene los archivos .dll compilados del núcleo del cliente. Se genera automáticamente por MSBuild
  • Plugins/ – Sistema de extensibilidad: contexto de plugins (ClientPluginContext.cs), API de audio para plugins (AudioManager.cs), helpers de ciclo de vida y red
  • Resources/ – Recursos embebidos: bibliotecas nativas (SDL2, OpenAL) y shader de iluminación radial. NO carga sprites/audio
  • Spells/ – Modelo mínimo para hechizos del jugador: Spell.cs con solo Id (Guid), Clone() y Load(). Solo almacena la referencia al hechizo, NO tiene lógica visual
  • ThirdParty/ – Integración con Steamworks: inicialización, detección de Steam Deck, logros, teclado virtual
  • Utilities/ – Utilidades específicas: MathHelper.cs (Clamp, Lerp) y PopulateSlotContainer.cs (disposición de slots de UI)
  • .gitignore – Excluye el identificador de aplicación Steam del control de versiones por seguridad
  • GlobalSuppressions.cs – Supresiones de advertencias del IDE para mantener legibilidad en manejo de eventos de botones de la UI
  • Intersect.Client.Core.csproj – Archivo de proyecto MSBuild que configura el núcleo como biblioteca con embebido de dependencias nativas multiplataforma y soporte condicional para Steamworks
  • LICENSE.md – Licencia MIT del proyecto. Permite uso, modificación y distribución libre con atribución a Ascension Game Dev
  • program.cs – Punto de entrada (Main): gestiona inicialización multiplataforma, exporta bibliotecas nativas desde recursos embebidos y arranca el contexto del cliente con manejo de errores específicos para dispositivos gráficos y de audio

/Intersect.Client.Framework/

FRAMEWORK UI – Sistema de interfaz gráfica.
Proporciona ventanas, menús, HUDs, diálogos, sistema de chat, menús de pausa y toda la UI del juego.

  • Audio/ – Sistema de audio con sonidos posicionados en mapa, efectos, música con transiciones fade-in/fade-out y control de volumen por tipo
  • bin/ – Carpeta de salida de compilación. Contiene los archivos .dll compilados del framework. Se genera automáticamente por MSBuild
  • Configuration/ – Configuración de características específicas del cliente, incluyendo el efecto typewriter para texto progresivo
  • Content/ – Sistema central de gestión de activos: define tipos de contenido, carga/busqueda de texturas, audio, fuentes, shaders y monitoreo de archivos en tiempo real
  • Core/ – Interfaces de definición para tipos de sonido (IMapSound, ISound).
  • Database/ – Sistema de persistencia de preferencias del usuario (volumen, FPS, UI, gameplay) en archivos JSON locales. NO es cache del juego
  • Entities/ – Interfaces completas del sistema de entidades: IEntity, IPlayer, IResource, IAnimation, IPartyMember, etc. Define contratos, NO componentes UI
  • File Management/ – Implementación principal del gestor de contenido del juego: carga, almacena y recupera TODOS los activos (texturas, audio, fuentes, layouts UI)
  • General/ – Enum GameStates con los 5 estados del ciclo de vida: Intro, Menu, Loading, InGame, Error
  • GenericClasses – Tipos de datos fundamentales: enumeración de teclas (Keys), estructura de rectángulo flotante, tipos de cursor, dialogs de archivos
  • Graphics/ – Sistema completo de renderizado 2D: gestión de texturas con carga lazy y descarga automática por VRAM, shaders, render targets, buffers de tiles, capturas de pantalla y gestión avanzada de memoria gráfica
  • Gwen/ – Toolkit completo de UI basado en Gwen: 40+ controles (botones, listas, árboles, tabs, etc.), sistema de eventos, layout, drag & drop y skins personalizables
  • Input/ – Sistema completo de entrada: controles configurables (movimiento, ataque, menús, hotkeys), bindings de teclas/ratón, detección multi-dispositivo y teclado virtual
  • Interface/ – Sistema de interfaz programable y proveedores de datos reactivos (IMutableInterface, DataProvider). Permite crear/buscar/eliminar controles dinámicamente. NO son ventanas
  • Items/ – Interfaces para items del juego: IItem (inventario) e IMapItemInstance (items en el suelo). SON interfaces de datos, NO UI
  • Maps/ – Interfaces del sistema de mapas: IMapInstance, IMapGrid, IMapAnimation, IActionMessage, IWeatherParticle. SON interfaces de datos, NO UI
  • Network/ – Socket abstracto de comunicación del cliente: conexión, envío de paquetes, eventos de conexión/desconexión y estadísticas de red (ping)
  • obj/ – Carpeta de archivos intermedios de compilación. Contiene caché de compilación incremental y archivos temporales. Se genera automáticamente por MSBuild
  • Plugins/ – Framework completo de plugins: ClientPluginEntry (clase base), IClientPluginContext (API completa del cliente para plugins), helpers de ciclo de vida y red
  • Sys/ – Interfaz abstracta mínima para logging del sistema: solo Log(string) y LogError(string)
  • ClientCommandLineOptions.cs – Registro de opciones de configuración por línea de comandos: resolución, servidor destino, ventana sin bordes, directorio de plugins
  • ColorizedText.cs – Estructura de datos simple: segmento de texto con color opcional. Usado por TextColorParser
  • IClientContext.cs – Interfaz principal del contexto del cliente: expone el ejecutor de plataforma (IPlatformRunner) y hereda opciones de línea de comandos
  • Intersect.Client.Framework.csproj – Archivo de proyecto MSBuild. Define el paquete AscensionGameDev.Intersect.Client.Framework, referencia al núcleo del framework (Intersect.Framework.Core), embebe el skin de UI (skin-intersect.png) y expone internamente a tests
  • Intersect.Client.Framework.nuspec – Configuración de empaquetado NuGet para distribuir el framework como paquete reutilizable para desarrollo de plugins de terceros. Incluye dependencias (Ceras, MessagePack, Newtonsoft.Json, Semver)
  • IPlatformRunner.cs – Interfaz de contrato para implementaciones de ejecutores de plataforma (MonoGame, Unity). Permite desacoplar la lógica de la plataforma gráfica
  • LICENSE.md – Licencia MIT del proyecto. Permite uso, modificación y distribución libre con atribución a Ascension Game Dev
  • TextColorParser.cs – Transforma texto con tags \c{color} en segmentos de texto coloreados para renderizar texto con colores dinámicos

/Intersect.Editor/

EDITOR DE JUEGO – Herramienta para crear y configurar el juego.
Permite crear mapas, configurar NPCs, eventos, items, hechizos, recursos gráficos, variables del juego y toda la lógica sin escribir código.

  • Core/ – Lógica principal del editor
  • EditorContext.cs – Estado global del editor
  • Database.cs – Acceso a base de datos
  • Main.cs – Ventana principal
  • Graphics.cs – Renderizado
  • Maps/ – Editor de mapas
  • MapGrid.cs – Grid visual
  • MapInstance.cs – Instancia de mapa
  • MapProperties.cs – Propiedades
  • Forms/ – Ventanas y diálogos
  • Entities/ – Editor de NPCs y eventos
  • Content/ – Gestión de sprites, tilesets
  • Networking/ – Comunicación con servidor
  • General/ – Utilidades generales
  • Configuration/ – Configuración
  • Resources/ – Recursos del editor
  • DarkUI.dll – Librería de UI (tema oscuro)
  • Pngcs.dll – Librería para procesar PNGs
  • sqlite3.dll – Base de datos

/Intersect.Network/

COMUNICACIÓN DE RED – Manejo de conexiones cliente-servidor.
Gestiona todo el tráfico de red entre cliente y servidor usando UDP para baja latencia, maneja conexión, desconexión, ping y envío de packets.

  • ClientNetwork.cs – Implementación de cliente de red
  • IServer.cs – Interfaz del servidor
  • LiteNetLib/ – Librería UDP de alta velocidad
  • NetworkMetaStatus.cs – Estados de conexión
  • Open.Nat.XML – Configuración de NAT traversal

/Intersect.Server/

PROYECTO SERVIDOR – Punto de entrada del servidor.
Servidor de juego que procesa lógica, maneja jugadores, persiste datos en SQLite/MySQL y sirve una web integrada

  • Program.cs – Método Main del servidor
  • Core/ – Lógica principal
  • Database/ – Acceso a base de datos
  • Networking/ – Manejo de conexiones
  • Admin/ – Comandos de administración
  • Notifications/ – Sistema de notificaciones
  • Web/ – Sitio web integrado
  • Migrations/ – Migraciones de base de datos
  • Resources/ – Recursos embebidos
  • wwwroot/ – Archivos web estáticos
  • appsettings*.json – Configuraciones para diferentes entornos
  • MIGRATIONS.md – Documentación de migraciones

/Intersect.Server.Core/

LÓGICA DEL SERVIDOR – Procesa toda la lógica del mundo.
Contiene toda la lógica de juego: combate, movimiento, inventario, quests, NPCs, comercio, banks, chat, PvP y más.

  • Entities/ – Jugadores, NPCs, criaturas
  • Jugadores: stats, inventario, equipo
  • NPCs: IA, diálogo, tiendas
  • Eventos: triggers, condiciones
  • Maps/ – Lógica de mapas, tiles, colisiones
  • Database/ – Acceso a datos, ORM
  • Core/ – Lógica principal
  • Networking/ – Packets, handlers
  • Extensions/ – Extensiones de métodos
  • Localization/ – Traducciones
  • Metrics/ – Telemetría y estadísticas
  • Migrations/ – Migraciones de esquema
  • Plugins/ – Plugins del servidor
  • General/ – Utilidades
  • Collections/ – Estructuras de datos
  • MIGRATIONS.md – Documentación

/Intersect.Server.Framework/

FRAMEWORK DEL SERVIDOR – Clases base para entidades.
Proporciona las clases base que el servidor usa para crear sus entidades especializadas.

  • Entities/ – Clases base para Player, NPC, Event
  • Items/ – Lógica de items (armas, pociones, etc.)
  • Maps/ – Lógica de mapas
  • Plugins/ – Sistema de plugins del servidor
  • Intersect.Server.Framework.nuspec – Paquete NuGet

/Intersect.SinglePlayer/

MODO OFFLINE – Implementación para jugar sin servidor.
Permite ejecutar el juego en modo single-player donde el «servidor» corre en la misma máquina que el cliente.

  • Program.cs – Punto de entrada
  • Networking/ – Simulación de red local
  • Properties/ – Configuración
  • Intersect.SinglePlayer.csproj – Proyecto

/Intersect.Tests/

PRUEBAS BASE – Pruebas unitarias principales.
Suite de pruebas unitarias para verificar que el código compartido funciona correctamente.

  • Network/ – Tests de red
  • Plugins/ – Tests de plugins
  • Factories/ – Tests de fábricas
  • Extensions/ – Tests de extensiones
  • IO/ – Tests de entrada/salida
  • Utilities/ – Tests de utilidades
  • TestApplicationContext.cs – Contexto de pruebas
  • Intersect.Tests.csproj – Proyecto de tests

/Intersect.Tests.Client/

PRUEBAS DEL CLIENTE – Tests específicos del cliente.
Asegura calidad del código del cliente.
Verifica que el rendering, input y UI del cliente funcionan correctamente.

/Intersect.Tests.Client.Framework/

PRUEBAS DEL FRAMEWORK UI – Tests para el sistema de interfaz.
Asegura que la UI del cliente no tiene regresiones.
Verifica que ventanas, botones, componentes gráficos funcionan correctamente.

/Intersect.Tests.Editor/

PRUEBAS DEL EDITOR – Tests para el editor de juego.
Asegura que el editor funciona sin errores.
Verifica que el editor puede crear mapas, configurar entidades y guardar correctamente.

/Intersect.Tests.Network/

PRUEBAS DE RED – Tests específicos de comunicación.
Asegura que la comunicación cliente-servidor es confiable.
Verifica handshake, conexión, desconexión y envío de packets.

/Intersect.Tests.Server/

PRUEBAS DEL SERVIDOR – Tests de lógica del servidor.
Asegura que la lógica del juego es correcta.
Verifica combate, estadísticas, inventario, NPCs, eventos.

/scripts/

Scripts de automatización.
Automatiza tareas de build y mantenimiento del proyecto.

  • package-framework.ps1 – Script PowerShell para empaquetar el framework
  • AUTHORS.md.updater.devtools.js – Herramienta para actualizar AUTHORS

/targets/

Archivos de MSBuild para configuración avanzada.
Define cómo MSBuild compila y empaqueta el proyecto.

  • DevelopIntersect.targets – Targets de desarrollo
  • FindIntersect.targets – Búsqueda de archivos
  • AscensionGameDev.Intersect.*.targets – Configuraciones específicas
  • Intersect.Building.KeyGeneration.msbuild – Generación de claves de red

/Utilities/

Herramientas de desarrollo.
Utilidades varias para desarrolladores del proyecto.

  • Intersect.OpenPortChecker/ – Herramienta para verificar puertos abiertos
  • Directory.Build.props – Configuración de build

/vendor/

Dependencias externas integradas.
Librerías de terceros necesarias para el proyecto pero mantenidas como submódulos.

  • LiteNetLib/ – Librería UDP para networking
  • dockpanelsuite/ – Librería UI para el editor (paneles acoplables)
  • Directory.Build.props – Configuración

ARCHIVOS

.dockerignore

Lista de archivos ignorados al construir imágenes Docker.
Optimiza el tamaño de las imágenes Docker evitando incluir archivos innecesarios.
Excluye bin/, obj/, archivos de IDE y archivos sensibles.

.editorconfig

Define estándares de código del proyecto.
Asegura que todo el código tiene el mismo estilo sin importar quién lo escriba.

  • Codificación UTF-8
  • Tamaño de indentación (2 espacios para JSON/XML, 4 para C#)
  • Estilo de line endings (LF)
  • Convenciones de nomenclatura C#

.gitattributes

Configura cómo Git maneja ciertos archivos:
Previene problemas de compatibilidad entre sistemas operativos con diferentes line endings.

  • Normalización de line endings
  • Algoritmos de diff para archivos binarios
  • Comportamiento de merge

.gitignore

Lista de archivos/carpetas ignorados por Git.
Evita que archivos generated o sensibles se suban al repositorio.

  • bin/, obj/ – Archivos compilados
  • Archivos de Visual Studio (.suo, .user)
  • Archivos del SO (Thumbs.db, .DS_Store)
  • Paquetes NuGet (packages/)
  • Logs y archivos temporales

.gitmodules

Define submódulos de Git.
Permite incluir dependencias externas que se mantienen en repositorios separados.

  • vendor/LiteNetLib – Librería de red
  • vendor/dockpanelsuite – Librería UI del editor

AUTHORS.md

Lista de contribuidores del proyecto con sus nombres y enlaces.
Da crédito a todas las personas que han contribuido al proyecto.

CODE_OF_CONDUCT.md

Código de conducta para la comunidad.
Mantiene un ambiente amigable y profesional en la comunidad.
Define reglas de comportamiento respetuoso en foros, Discord y GitHub.

Common.props

Propiedades comunes de MSBuild.
Configuración base que todos los proyectos heredan.

  • Configuraciones: Debug, Release, DebugTests, DebugFull, DebugPlugins
  • Plataforma: AnyCPU
  • Target Framework: net8.0
  • Opciones de lenguaje: C# latest, nullable enabled

CONTRIBUTING.md

Guía para contribuyentes.
Facilita que nuevos desarrolladores contribuyan correctamente.

  • Cómo hacer fork y pull requests
  • Estándares de código
  • Proceso de revisión
  • Requisitos para contribuciones

Directory.Build.props

Archivo importado automáticamente en todos los proyectos.
Evita repetir configuración en cada archivo .csproj.

  • Common.props – Configuración base
  • Intersect.props – Propiedades específicas del proyecto

disable-windows-only.patch

Patch de Git para deshabilitar código específico de Windows cuando se compila en Linux/Mac.
Permite compilar el proyecto en sistemas operativos no-Windows.

Intersect.props

Propiedades del proyecto.
Información centralizada del proyecto para todos los ensamblados.

  • Versión: 0.8.0.0
  • Autor: Ascension Game Development
  • Metadata de compilación (commit SHA, build number)
  • Ícono y licencia
  • Repositorio Git

Intersect.sln

Archivo de solución de Visual Studio.
Permite abrir y compilar todo el engine de una vez en Visual Studio.
Lista todos los proyectos:

  • Proyectos principales (Client, Server, Editor, Core, etc.)
  • Proyectos de tests
  • Proyectos de examples

Intersect.sln.DotSettings

Configuración de ReSharper/Rider para la solución.
Asegura consistencia de código cuando se usa ReSharper/Rider.
Define formatting específico para este proyecto.

LICENSE.md

Información de licencias.
Define legalmente cómo se puede usar, modificar y distribuir el código.
Intersect usa licencia dual:

  • MIT – Para código compartido (Core, Network, Client)
  • GPLv3 – Para Editor y Server

NuGet.Config

Configuración de paquetes NuGet.
Permite restaurar paquetes automáticamente durante el build.
Apunta a nuget.org para descargar dependencias.

README.md

Página principal del proyecto.
Primera lectura para cualquier persona interesada en el proyecto.

  • Descripción de Intersect
  • Cómo compilar
  • Dependencias (.NET 8 SDK)
  • Plataformas soportadas
  • Enlaces a documentación y comunidad
  • Badges de CI/CD

REQUIREMENTS.md

Requisitos del sistema.
Ayuda a usuarios a verificar que su sistema puede correr el engine.

  • Versiones mínimas de .NET
  • Plataformas soportadas (Windows, Linux, macOS)
  • Requisitos de hardware

SECURITY.md

Política de seguridad.
Proporciona canal seguro para reportar problemas de seguridad.

  • Cómo reportar vulnerabilidades
  • Tiempo de respuesta esperado
  • Bug Bounty (si existe)

VERSIONING.md

Política de versionado semántico.
Mantiene consistencia en cómo se numeran las versiones.

  • Formato: 0.8.0.0 (major.minor.patch.build)
  • Ramas: main, prerelease, development
  • Política de breaking changes

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *