16/04/2019
Adentrarse en el fascinante universo del desarrollo de videojuegos puede parecer abrumador al principio. Si alguna vez has soñado con crear tu propio RPG y GameMaker Studio 2 ha captado tu atención, es natural que te surjan preguntas. ¿Es este motor la herramienta adecuada para ti, especialmente si ya tienes una base en programación? Y con los cambios en su modelo de licenciamiento, ¿qué opción te conviene más: la compra en Steam o la suscripción anual? Vamos a explorar a fondo estas cuestiones para ayudarte a tomar la mejor decisión en tu camino como desarrollador.

GameMaker Studio 2 se ha consolidado como una plataforma muy popular, especialmente para la creación de juegos en 2D. Su interfaz visual y su lenguaje de scripting, GML, buscan ofrecer una experiencia de desarrollo intuitiva sin sacrificar la potencia necesaria para proyectos complejos. Para alguien que ya posee conocimientos básicos de programación, el salto a GML puede ser bastante fluido, ya que comparte muchas convenciones con otros lenguajes.

GameMaker Studio 2: ¿Un Motor Válido para tu RPG?
Cuando piensas en desarrollar un RPG, sueles imaginar vastos mundos, sistemas de combate complejos, inventarios, diálogos y una narrativa profunda. GameMaker Studio 2 es una opción muy competente para este tipo de proyectos, especialmente si te enfocas en una estética 2D o pixel art, géneros en los que brilla con luz propia. Su motor está optimizado para gráficos 2D, lo que facilita la implementación de sistemas de tiles, sprites animados y efectos visuales propios de este estilo.
La flexibilidad de GML permite implementar mecánicas de juego tan elaboradas como las que requiere un RPG. Puedes diseñar sistemas de turnos o de acción en tiempo real, gestionar estadísticas de personajes, crear árboles de habilidades, implementar sistemas de crafteo o inventario, y construir complejos sistemas de diálogo y misiones. Aunque no viene con plantillas pre-diseñadas específicamente para RPGs, la comunidad de GameMaker es vasta y activa, ofreciendo numerosos tutoriales, assets y ejemplos que pueden servir como punto de partida.
Su enfoque en la facilidad de uso lo convierte en una excelente puerta de entrada al desarrollo de juegos. No necesitas ser un experto en programación para empezar, ya que GameMaker ofrece herramientas visuales (GML Visual) que te permiten prototipar ideas rápidamente arrastrando y soltando bloques de acciones. Sin embargo, para un RPG completo y pulido, inevitablemente necesitarás profundizar en el código GML para personalizar y optimizar tus sistemas.
En resumen, sí, GameMaker Studio 2 es un motor perfectamente capaz para desarrollar un RPG, especialmente si te atrae el desarrollo 2D. Su curva de aprendizaje es accesible para principiantes con alguna base, y su flexibilidad permite escalar proyectos a niveles de complejidad considerables.
GML: El Lenguaje del Juego
El corazón programable de GameMaker es el GameMaker Language, o GML. Según la información proporcionada, GML es el lenguaje de scripting propietario de GameMaker. Está diseñado para permitir a los usuarios crear sus juegos de una manera intuitiva y flexible, al mismo tiempo que ofrece la potencia de otros lenguajes de programación importantes.
GML es la base tanto para la programación tradicional mediante código como para GML Visual. Esto significa que puedes usar ambos enfoques de manera conjunta si lo necesitas, combinando la rapidez del desarrollo visual con la potencia y el control fino que ofrece la escritura de código.
La sintaxis de GML es relativamente sencilla y está orientada a eventos y objetos, un paradigma muy adecuado para el desarrollo de juegos. Cada 'objeto' en tu juego (un personaje, un enemigo, una pared, un proyectil, etc.) puede tener diferentes 'eventos' (como el evento Create al nacer, el evento Step que se ejecuta cada frame, eventos de colisión, eventos de dibujo, etc.), y dentro de estos eventos, escribes código GML para definir el comportamiento del objeto.
Aprender GML implica familiarizarse con sus funciones integradas, sus estructuras de control (if, for, while), sus tipos de datos y cómo interactuar con los diferentes recursos del motor (sprites, sonidos, habitaciones, etc.). La documentación de GameMaker es muy detallada y es un recurso indispensable para dominar el lenguaje.
Detectando Interacciones: El Sistema de Colisiones en GameMaker
Uno de los aspectos fundamentales en cualquier videojuego es la detección de interacciones entre los elementos del mundo. Ya sea que tu personaje choque con una pared, un proyectil golpee a un enemigo o recojas un objeto, todo se reduce a manejar colisiones. GameMaker ofrece un robusto conjunto de funciones integradas para gestionar esto de manera eficiente.
La función más sencilla y común para verificar si hay colisión con otro objeto en una posición específica es place_meeting(x, y, objeto). Esta función simplemente retorna verdadero (`true`) si hay una instancia del `objeto` especificado en las coordenadas `x`, `y`, y falso (`false`) en caso contrario. Esto es útil, por ejemplo, para verificar si puedes moverte a una posición sin chocar con un obstáculo:
if (!place_meeting(x + velocidad_x, y, obj_pared)) { x += velocidad_x; }
Esta línea de código comprueba si no hay una instancia de `obj_pared` en la posición futura (tu posición actual más el desplazamiento horizontal deseado). Si no hay colisión, entonces te mueves.
Colisiones con Múltiples Objetos
A menudo, necesitarás verificar colisiones contra varios tipos de objetos (por ejemplo, paredes, árboles, rocas, todos obstáculos). GameMaker te ofrece dos métodos principales para esto:
1. Usando Objetos Padre: Puedes asignar un objeto padre a todos los objetos con los que quieres colisionar de manera similar. Por ejemplo, crea un objeto `obj_obstaculo` y haz que `obj_pared`, `obj_arbol` y `obj_roca` sean hijos suyos. Luego, simplemente comprueba la colisión contra el padre:
if (!place_meeting(x + velocidad_x, y, obj_obstaculo)) { x += velocidad_x; }
Este método es muy recomendado porque es limpio y eficiente, especialmente si usas el mismo grupo de obstáculos en múltiples verificaciones.
2. Pasando un Array: Alternativamente, puedes pasar un array que contenga los IDs de los objetos con los que deseas verificar la colisión:
if (!place_meeting(x + velocidad_x, y, [obj_pared, obj_arbol])) { x += velocidad_x; }
Ambos métodos logran el mismo resultado, pero el enfoque con objetos padre suele ser más manejable en proyectos grandes.
Obteniendo la Instancia Colisionada
place_meeting solo te dice si hay una colisión. Si necesitas saber *qué* instancia específica de objeto está colisionando (por ejemplo, para infligir daño a un enemigo específico), usas la función instance_place(x, y, objeto). Esta función retorna el ID de la instancia encontrada en la posición, o el valor especial `noone` si no hay colisión.

Colisiones con Tile Maps
Además de colisionar con objetos, puedes verificar colisiones con capas de Tile Maps. Esto es ideal para crear terreno o paredes basadas en un mapa de tiles. Primero, obtienes el ID del Tile Map de una capa usando layer_tilemap_get_id("NombreDeLaCapaDeTiles"), y luego pasas ese ID a las funciones de colisión:
var tilemap_id = layer_tilemap_get_id("CapadeTerreno"); if (!place_meeting(x + velocidad_x, y, tilemap_id)) { x += velocidad_x; }
Incluso puedes combinar objetos y Tile Maps en un array para la verificación de colisión.
Máscaras de Colisión y Bounding Boxes
Las colisiones se basan en máscaras de colisión, que pueden ser rectangulares (bounding box) o precisas (basadas en la forma del sprite). Por defecto, GameMaker usa el bounding box rectangular del sprite. El bounding box es un rectángulo inclusivo que define el área del sprite. Dos instancias colisionan si sus bounding boxes se solapan.
Puedes controlar la precisión de la colisión. Si la detección precisa está activada en las propiedades de la máscara del sprite y usas funciones de colisión que admiten el argumento `prec` (poniéndolo a `true`), la colisión se calculará píxel a píxel, lo cual es más preciso pero computacionalmente más costoso que usar el bounding box.
GameMaker también ofrece funciones para verificar colisiones con áreas o puntos específicos que no dependen de la máscara de colisión de una instancia, como point_meeting, rectangle_meeting, circle_meeting, etc. Esto es útil para cosas como la detección de clics del ratón o áreas de efecto.
Para juegos que usan el sistema de física integrado, las funciones de colisión estándar pueden no ser adecuadas, ya que las instancias físicas usan 'fixtures' en lugar de máscaras tradicionales. Existe una función específica (`physics_fixture_overlap`) para verificar colisiones entre fixtures físicos.
El sistema de colisiones de GameMaker es flexible y potente, permitiéndote manejar una amplia variedad de interacciones en tu juego, desde simples choques hasta sistemas más complejos.
Más Allá de lo Básico: Hitboxes y Hurtboxes para Combates Precisos
En géneros como los juegos de lucha o los RPG de acción, la precisión en el combate es crucial. Aquí es donde entran los conceptos de hitboxes y hurtboxes. No son funciones integradas directas de GameMaker, sino un patrón de diseño común implementado usando el sistema de colisiones.
Una hitbox (caja de golpe) representa el área de un ataque que puede causar daño o tener un efecto sobre un objetivo. Una hurtbox (caja de daño) representa el área de un personaje u objeto que puede ser impactado por una hitbox.
La implementación típica implica crear objetos separados (por ejemplo, `oHitbox` y `oHurtbox`) que actúan como estas cajas. Estos objetos suelen ser invisibles (o semi-transparentes para depuración) y tienen sus propias máscaras de colisión (normalmente rectangulares).
Configuración de Hurtbox
Un `oHurtbox` suele ser un objeto simple, quizás con un sprite de un solo píxel que se escala al tamaño deseado. Tiene variables para rastrear a su 'dueño' (`owner`) y un desplazamiento (`xOffset`, `yOffset`) para posicionarse correctamente respecto a su dueño. Se crea cuando el personaje o enemigo nace y se actualiza constantemente (normalmente en el evento End Step) para seguir a su dueño utilizando las coordenadas del dueño más el desplazamiento. El código para que siga al dueño podría verse algo así:
with(hurtbox_id) { x = other.x + xOffset; y = other.y + yOffset; }
Aquí, `hurtbox_id` es el ID de la instancia del hurtbox que le pertenece al objeto actual. El `with` cambia el contexto para ejecutar el código como si fuera el hurtbox, y `other` se refiere al objeto que llamó al `with` (el dueño).
Configuración de Hitbox
Un `oHitbox` es un poco más complejo. También tiene un dueño y un desplazamiento. Pero, a diferencia de una hurtbox, una hitbox solo existe durante la parte 'activa' de un ataque. Por lo tanto, necesita variables adicionales como `life` (cuántos frames estará activa), `xHit`, `yHit` (para el empuje o knockback) y `hitStun` (cuánto tiempo queda aturdido el objetivo). También necesita una manera de evitar golpear al mismo objetivo múltiples veces durante su corta vida; aquí es donde entra una lista de ignorados (`ignoreList`), a menudo implementada con una estructura de datos de lista (`ds_list`).
La hitbox se crea en un frame específico de la animación de ataque (la parte 'activa') y se destruye después de un número determinado de frames. Su posición también se actualiza para seguir al dueño.
Detección y Resolución de Colisión (Hit Check)
La magia ocurre cuando una hitbox colisiona con una hurtbox. Esto se verifica normalmente en el evento End Step de la hitbox (o del dueño, delegando la lógica). El patrón común es usar place_meeting o instance_place desde la hitbox para ver si colisiona con *alguna* instancia de `oHurtbox`.
with(oHurtbox) { if (place_meeting(x, y, other)) { // Colisión detectada entre esta hurtbox y la hitbox (other) // Lógica de ignorar y aplicar efectos } }
Dentro de esta detección, se realizan varias comprobaciones:
1. Dueños diferentes: Se verifica que la hurtbox encontrada no pertenezca al mismo dueño que la hitbox (`other.owner != owner`). Esto evita que un personaje se golpee a sí mismo.

2. Lista de ignorados: Se comprueba si el dueño de la hurtbox ya está en la `ignoreList` de esta hitbox. Si lo está, se ignora la colisión para este frame.
3. Aplicar efectos: Si la colisión es válida (dueños diferentes y no está en la lista de ignorados), se aplican los efectos al dueño de la hurtbox (por ejemplo, `other.owner.hit = true; other.owner.hitBy = id;`) y se añade el ID del dueño de la hurtbox a la `ignoreList` (`ds_list_add(ignoreList, other.owner)`) para que no vuelva a ser golpeado por *esta* instancia de hitbox.
Este sistema de hitboxes y hurtboxes, aunque requiere más configuración manual, permite un control muy fino sobre qué áreas de un ataque golpean qué partes de un personaje, crucial para sistemas de combate basados en la precisión.
Licencias: Steam vs. Suscripción Anual
La pregunta sobre el modelo de licenciamiento es clave y ha generado discusión en la comunidad de GameMaker. Históricamente, GameMaker ofrecía licencias perpetuas (compra única) para diferentes plataformas. Más recientemente, YoYo Games (la empresa detrás de GameMaker, ahora parte de Opera) anunció un cambio hacia un modelo de suscripción. Sin embargo, como mencionas, parece que la opción de compra en Steam aún está disponible.
Es importante entender la diferencia fundamental entre una licencia perpetua y una suscripción:
- Licencia Perpetua (como la posible opción de Steam): Pagas una vez y posees la versión del software que compraste de manera indefinida. Tradicionalmente, esto incluía actualizaciones mayores y menores por un tiempo, pero los detalles pueden variar. La principal ventaja es que no tienes pagos recurrentes. La desventaja potencial es que podrías no tener acceso garantizado a *todas* las futuras actualizaciones mayores o a nuevas funcionalidades de plataforma sin un coste adicional, dependiendo de los términos específicos de la licencia adquirida. Si la versión de Steam que se vende actualmente es una licencia perpetua de GameMaker Studio 2 (anterior a GameMaker, el nuevo nombre), podría tener limitaciones en cuanto a las plataformas de exportación disponibles sin costes adicionales o requerir la compra de módulos de exportación.
- Suscripción Anual: Pagas una tarifa recurrente (anual, en este caso) para tener acceso al software y a todas sus funcionalidades durante el período de suscripción. La principal ventaja de una suscripción suele ser el acceso continuo a las últimas actualizaciones, nuevas características, mejoras de rendimiento y soporte para las plataformas de exportación disponibles (que pueden variar según el nivel de suscripción, como Free, Creator, Pro, Enterprise). La desventaja obvia es el coste recurrente a largo plazo.
Si la opción en Steam es una licencia perpetua de GameMaker Studio 2, es probable que te ofrezca una gran parte de la funcionalidad principal, pero podrías encontrarte con que las exportaciones a ciertas plataformas (consolas, móviles avanzados) requieran módulos de exportación adicionales o estén ligadas a niveles de suscripción actuales. Si tu objetivo es solo desarrollar para PC (Windows, macOS, Linux) y no necesitas las últimas y futuras características de inmediato, una licencia perpetua (si aún está disponible con términos favorables) podría ser una opción rentable a largo plazo.
La suscripción anual, por otro lado, te mantiene siempre al día con el software y te da acceso a más opciones de exportación (dependiendo del nivel). Si planeas desarrollar activamente y apuntar a múltiples plataformas, o si quieres tener acceso a las características más nuevas tan pronto como salgan, la suscripción es probablemente el camino a seguir según el modelo actual de YoYo Games.
Es crucial verificar los términos exactos de la licencia que se ofrece en Steam *actualmente* y compararlos con los niveles y precios de las suscripciones en el sitio web oficial de GameMaker. Los modelos de negocio de software pueden cambiar, y lo que estuvo disponible antes podría tener términos diferentes ahora. Considera tus necesidades a largo plazo: ¿planeas desarrollar un solo juego o varios? ¿A qué plataformas quieres exportar? ¿Prefieres un coste inicial mayor o pagos recurrentes?
Tabla Comparativa (Ejemplo basado en modelos típicos)
Aunque los detalles exactos pueden variar según la oferta específica de Steam y los planes de suscripción actuales, aquí hay una comparación general basada en los modelos:
| Característica | Licencia Perpetua (Ej. Steam anterior) | Suscripción Anual |
|---|---|---|
| Coste Inicial | Alto | Bajo (primer año) |
| Coste a Largo Plazo | Solo mantenimiento (si aplica) | Recurrente (cada año) |
| Acceso a Actualizaciones Mayores | Limitado o con coste adicional | Incluido (durante suscripción) |
| Acceso a Nuevas Funcionalidades | Limitado | Incluido (durante suscripción) |
| Plataformas de Exportación | Puede requerir módulos adicionales | Varía según nivel (más opciones disponibles) |
| Soporte | Puede ser limitado | Incluido (durante suscripción) |
| Flexibilidad | Tienes la versión adquirida | Siempre la última versión |
Esta tabla es una generalización. Debes consultar la información oficial más reciente para tomar una decisión informada.
Preguntas Frecuentes
¿Es GameMaker Studio 2 solo para juegos 2D?
Aunque GameMaker Studio 2 se especializa y sobresale en el desarrollo de juegos 2D, tiene capacidades básicas para manejar 3D, pero no está diseñado para competir con motores 3D dedicados como Unity o Unreal Engine para proyectos 3D complejos.
¿Necesito saber programar para usar GameMaker?
No es estrictamente necesario empezar sabiendo programar gracias a GML Visual, que permite crear lógica visualmente. Sin embargo, para desarrollar juegos más complejos y personalizados, aprender y usar GML (el lenguaje de scripting) es altamente recomendable y casi indispensable.
¿Qué es un Objeto Padre en GameMaker?
Un Objeto Padre es un objeto que no suele usarse directamente en el juego, pero que agrupa características (código, variables, sprites) comunes a varios objetos 'hijos'. Los hijos heredan estas características y pueden añadir o modificar las suyas. Es muy útil para organizar código y para verificaciones de colisiones con múltiples objetos.
¿Qué significa 'noone' en GameMaker?
`noone` es una constante especial en GameMaker que representa que no se ha encontrado ninguna instancia donde se esperaba una (por ejemplo, una función de colisión que no detectó nada) o que una variable que normalmente contendría el ID de una instancia no lo tiene asignado.
¿Es fácil exportar juegos a diferentes plataformas con GameMaker?
GameMaker está diseñado para facilitar la exportación a múltiples plataformas desde una única base de código. Sin embargo, el acceso a las plataformas de exportación (Windows, macOS, Linux, Web, Mobile, Consolas) depende del tipo de licencia o nivel de suscripción que tengas.
Conclusión
GameMaker Studio 2 sigue siendo una herramienta muy relevante y potente para el desarrollo de juegos, especialmente si tu interés se centra en los juegos 2D o si buscas un motor con una curva de aprendizaje accesible pero con gran profundidad. Su lenguaje GML es intuitivo para aquellos con alguna experiencia en código, y su sistema de colisiones permite implementar desde interacciones simples hasta mecánicas avanzadas como hitboxes y hurtboxes.
La decisión entre la licencia de Steam y la suscripción anual dependerá de tus necesidades, presupuesto y planes a largo plazo. Ambas opciones te dan acceso a un motor capaz de dar vida a tus proyectos, incluido ese RPG que tienes en mente. Investiga los términos actuales de cada opción y elige la que mejor se adapte a tu viaje en el desarrollo de videojuegos. ¡Lo importante es empezar a crear!
Si quieres conocer otros artículos parecidos a GameMaker Studio 2: ¿Vale la Pena en 2024? puedes visitar la categoría Maquillaje.
