Ymir Engine · C++ · Team Project

Alien: Extraction

Un shooter de supervivencia construido sobre un motor propio en C++, valorado por ingenieros de Larian Studios.

2024 4 meses Engine & Gameplay Programmer Clapcom Studios (equipo de X personas)
C++Ymir EngineParticlesGameplayMotor propio
scroll

Videojuego inspirado en la saga Alien, desarrollado por el estudio ficticio Clapcom Studios sobre un motor de juego propio llamado Ymir Engine, programado íntegramente en C++.

Mi rol principal fue el módulo completo de partículas del motor: diseño de la arquitectura, implementación del emisor, sistema de pooling y los parámetros de configuración expuestos al editor. También trabajé en sistemas del jugador como el disparo y habilidades.

🏆 El juego fue jugado y valorado por personal de Larian Studios, quienes destacaron el mérito técnico de desarrollar un motor funcional en solo 4 meses.

Imágenes y gameplay

Sistemas técnicos

Decisiones de arquitectura y los sistemas que dan vida al proyecto.

01

Módulo de partículas (Ymir Engine)

Sistema de partículas construido desde cero en C++: emisores configurables, object pooling para evitar allocations en runtime, soporte para múltiples tipos de emitter (burst, continuous, radial) y parámetros editables desde el editor del motor.

C++Object PoolEditor Integration
02

Sistema de disparo del jugador

Mecánica de disparo con soporte para diferentes tipos de munición, raycasting para detección de impactos, feedback visual con partículas y sistema de recarga con animación sincronizada.

C++RaycastingAnimation Sync

Cómo se construyó

Las fases del proyecto: desde la idea hasta el resultado final.

01 — Motor primero

Construir las herramientas antes que el juego

Las primeras semanas fueron exclusivamente de motor: no había juego, solo había que hacer funcionar el renderer, el editor y los sistemas base. Es una forma de trabajar muy diferente a Unity y obliga a entender qué hay debajo de los motores modernos.

02 — Módulo de partículas

De cero a sistema completo

Empecé integrando todo en mi versión del motor, pero fue todo un reto integrarlo junto al resto de modulos. Semana a semana fui añadiendo: pooling, emisores, curvas de vida, colores, escala... El reto era que cada iteración tenía que ser estable porque otros sistemas del juego dependían de las partículas.

03 — Integración y polish

Hacer que el juego se sienta cohesionado

Las últimas semanas fueron de crear herramientas para que el equipo pudiese utilizar el sistema y de conectarlos: que el disparo generara las partículas correctas, que la IA respondiera bien a los eventos del jugador, que el rendimiento aguantara con todo activo.

Problemas y soluciones

Los obstáculos más interesantes del proyecto y cómo los resolví.

Rendimiento Problema

El sistema de partículas generaba garbage en runtime al instanciar y destruir partículas dinámicamente, causando stutters visibles en momentos de acción intensa.

Solución

Implementé un pool de partículas preasignado al inicio de la escena. Las partículas se 'reciclan' en lugar de destruirse, eliminando completamente las allocations en runtime y estabilizando el framerate.

Trabajo en equipo Problema

Coordinar el trabajo de varios programadores sobre el mismo motor sin romper los sistemas de los demás era caótico al principio.

Solución

Establecimos un sistema de ownership claro por módulo y usamos interfaces bien definidas para la comunicación entre sistemas. Reducir el acoplamiento fue la clave para poder trabajar en paralelo.

Qué aprendí

Programar un motor propio, aunque sea uno simple, cambia completamente cómo ves Unity o Unreal. Entiendes por qué las cosas funcionan como funcionan.

El object pooling no es una optimización prematura cuando sabes de antemano que vas a instanciar miles de objetos por segundo. Es el diseño correcto desde el principio.

4 meses para un motor + juego es muy poco tiempo. La priorización constante — qué entra y qué se corta — es la habilidad más importante del equipo.