Introducción al Desarrollo de Videojuegos con GameMaker · Módulo 10: Diseño de niveles, cámaras y progresión.
Diseño de niveles con progresión de dificultad
Clase 47 de 60 · 60 min
También disponible en: EN
Fundamentos del diseño de niveles y progresión de dificultad
El diseño de niveles (o level design) es el arte y la disciplina de construir los espacios interactivos donde cobran vida las mecánicas de un videojuego. En módulos previos aprendiste a otorgarle movilidad al personaje principal, calcular sus colisiones físicas, animar sus movimientos y configurar adversarios con inteligencia artificial básica. No obstante, contar con un personaje que responde con precisión a los controles no garantiza automáticamente una experiencia divertida. La verdadera diversión surge cuando el entorno desafía al jugador de forma justa, variada y estimulante, guiándolo a través de una curva de aprendizaje armónica.
Una curva de dificultad adecuada se basa en el principio de mantener al jugador en el denominado 'estado de flujo' (teoría formulada por el psicólogo Mihály Csíkszentmihályi). Si los obstáculos son excesivamente sencillos o carecen de peligro, sobreviene el aburrimiento; por el contrario, si un salto milimétrico o un enemigo impredecible castiga al usuario sin previo aviso ni oportunidad de reaccionar, sobreviene la frustración. El objetivo del diseñador de niveles novato es estructurar los retos de manera que cada sección enseñe, refuerce y evalúe una destreza sin recurrir a trampas injustas ni picos de dificultad abruptos.
Para articular esta progresión con elegancia, muchos desarrolladores recurren a la estructura clásica de cuatro actos conocida en la tradición oriental como Kishōtenketsu, perfectamente trasladable al diseño de videojuegos: 1) Introducción (Ki): se presenta un obstáculo o mecánica en un entorno completamente seguro. 2) Desarrollo (Shō): la misma mecánica se repite con una pequeña variación o exigencia adicional. 3) Giro (Ten): se combina la mecánica aprendida con otro elemento ya conocido, alterando el ritmo del juego. 4) Conclusión (Ketsu): se propone una prueba de maestría que consolida el aprendizaje antes de avanzar a una nueva sección o recompensa.

Métricas espaciales del jugador: La regla invisible de la cuadrícula
Antes de arrastrar un solo bloque de suelo dentro de una room en GameMaker, es imperativo conocer las capacidades matemáticas exactas de nuestro personaje. Estas capacidades reciben el nombre técnico de 'métricas del jugador'. Si no mides de antemano cuánto puede saltar tu avatar en altura y en distancia horizontal, estarás diseñando a ciegas, obligándote a recolocar bloques una y otra vez mediante ensayo y error.
En el proyecto que venimos construyendo a lo largo del curso, las variables de físicas del objeto del jugador (`obj_player`) fueron definidas en su evento Create con valores específicos. Repasemos las variables que determinan el movimiento en el aire y la aceleración:
// Fragmento de configuración en obj_player -> Evento Create
move_speed = 4; // Píxeles recorridos horizontalmente por frame
grv = 0.3; // Aceleración de la gravedad por frame
jump_speed = -7.5; // Impulso vertical inicial hacia arriba al pulsar salto
hsp = 0; // Velocidad horizontal actual
vsp = 0; // Velocidad vertical actualA partir de estas constantes, podemos deducir matemáticamente las limitaciones y alcances del salto. Cuando el personaje presiona la tecla de salto, inicia con una velocidad vertical negativa de -7.5 píxeles/frame. En cada frame subsiguiente, la gravedad (`grv = 0.3`) frena esa velocidad hasta llevarla a cero en el ápice del salto. La cantidad de frames que tarda en alcanzar la altura máxima se calcula dividiendo el impulso entre la gravedad: 7.5 / 0.3 = 25 frames. Durante esos 25 frames de ascenso, la altura máxima alcanzada (h) equivale a (jump_speed^2) / (2 * grv), es decir, (56.25) / (0.6) ≈ 93.75 píxeles.
Si una celda de la cuadrícula (grid) de nuestro Tilemap o nivel mide 32x32 píxeles, 93.75 píxeles equivalen aproximadamente a 2.9 celdas. Esto nos indica que el personaje puede subir a una repisa situada a 2 celdas de altura de forma muy holgada, a 3 celdas con extrema precisión (justo en el límite si se pulsa el salto en carrera), y jamás podrá alcanzar un saliente colocado a 4 celdas sin ayuda de un resorte o doble salto. De igual forma, el tiempo total en el aire en un salto sobre suelo nivelado es el doble del tiempo de ascenso (50 frames). A una velocidad horizontal de 4 píxeles/frame, la distancia máxima teórica horizontal recorrida en el aire es: 50 frames * 4 píxeles/frame = 200 píxeles, lo que representa unas 6.25 celdas de cuadrícula de 32 píxeles.
| Tipo de Métrica | Medida en Píxeles | Celdas de Grid (32x32) | Aplicación en el Nivel |
|---|---|---|---|
| Altura de salto cómodo | 64 px | 2 bloques | Plataformas estándar para navegación fluida y sin tensión. |
| Altura de salto máximo | 92 px | 2.8 bloques (aprox. 3) | Zonas secretas, coleccionables opcionales o saltos de reto avanzado. |
| Salto horizontal estático | 64 - 96 px | 2 a 3 bloques | Vacíos iniciales donde el jugador salta sin tomar impulso de carrera previa. |
| Salto horizontal con carrera | 160 - 180 px | 5 a 5.5 bloques | Fosos profundos que demandan velocidad sostenida y precisión. |
| Tolerancia de techo (headbonk) | 48 px | 1.5 bloques sobre la cabeza | Espacio libre indispensable para evitar cancelaciones indeseadas del salto. |
💡 Regla de oro del diseñador: Diseña siempre para el 80% o 85% de la capacidad máxima del jugador en las rutas obligatorias. Reserva los saltos que exijan el 95% o 100% de la capacidad motriz exclusivamente para rutas opcionales que lleven a secretos, gemas o vidas extra.
Estructuración de saltos: De la simplicidad mecánica al desafío espacial
Una vez clarificadas las métricas, podemos clasificar los saltos según la exigencia psicomotriz y espacial que imponen sobre el usuario. En un buen nivel, los saltos nunca se repiten en un patrón idéntico y monótono; alternan distancias, alturas, obstáculos intermedios y márgenes de error.
1. **Salto de descanso y ritmo:** Son saltos cortos, de 1 a 2 bloques de separación, donde la superficie de aterrizaje es amplia (al menos 3 o 4 bloques de ancho). Su propósito es establecer una cadencia agradable mientras el jugador avanza o recolecta monedas básicas.
2. **Salto con restricción de altura (Headbonk):** Consiste en colocar un techo o una fila de bloques sólidos suspendidos por encima del punto de inicio del salto. Si el jugador salta de forma impulsiva o demasiado pronto, su cabeza colisionará verticalmente contra el techo antes de alcanzar la parábola óptima, cayendo al foso. Este diseño obliga a desacelerar y calcular con exactitud el momento del impulso.
3. **Salto con plataforma menguante:** En lugar de variar la distancia del vacío, reducimos la superficie donde se aterriza a un único bloque de 32x32 píxeles. Esto requiere que el jugador suelte la tecla direccional en el aire o efectúe microcorrecciones para no derrapar más allá del borde al caer.
4. **Salto descendente o en cascada:** El destino se encuentra varios bloques por debajo del punto de partida. Aunque la gravedad acelera el descenso, si el pozo es muy profundo el jugador no verá dónde va a caer a menos que la cámara o el diseño arquitectónico guíen su vista. Aquí es donde surge el peor vicio del principiante: el salto de fe.
💡 Evita terminantemente los 'saltos de fe' (blind jumps). Un salto de fe ocurre cuando el jugador debe lanzarse a un vacío sin poder ver la plataforma de aterrizaje en pantalla. Utiliza estelas de monedas (`obj_coin`), antorchas o la propia pendiente del terreno para indicar con total certeza que existe un suelo seguro abajo.
Colocación estratégica de enemigos como obstáculos cinéticos
En el Módulo 7 desarrollamos a `obj_patrol_enemy`, un enemigo cuadrúpedo que patrulla horizontalmente de izquierda a derecha y da la media vuelta al topar contra una pared sólida o detectar el vacío frente a sus pies. Si dispersas estos enemigos de forma aleatoria por el suelo de tu nivel, se convertirán en simples piñatas que el jugador saltará sin prestar atención. Para que un enemigo aporte diversión, debe actuar como un obstáculo sincronizado con la geometría del escenario.
A continuación analizamos los tres roles espaciales fundamentales para la colocación de patrulleros:
**A) El Guardián de Saliente (Ledge Guardian):** Colocar un enemigo patrullando justo en el borde de la plataforma hacia la cual el jugador debe saltar. Esto transforma un salto simple en un problema de sincronización temporal (timing). El jugador no solo debe calcular la distancia del salto, sino esperar el instante preciso en que el enemigo le da la espalda y se aleja del borde para efectuar el aterrizaje con seguridad.
**B) El Forzador de Ritmo (Pacing Enforcer):** Ubicado en un pasillo largo y horizontal. Si el enemigo se desplaza a una velocidad moderada en la misma dirección que el jugador, genera una sensación de persecución o apremio si el espacio es angosto. Si se mueve en sentido contrario, interrumpe el impulso de carrera continua, obligando al usuario a saltar por encima de él o a buscar un hueco elevado en el techo para esquivarlo.
**C) La Trampa Aérea Coordinada:** Ocurre cuando se coloca un foso con una plataforma central pequeña donde patrulla un enemigo. El jugador debe calcular su salto para caer exactamente encima del enemigo eliminándolo mediante el clásico rebote de pisotón (programado en clases previas mediante `vsp = jump_speed * 0.8`), utilizando ese rebote como impulso obligatorio para alcanzar el otro extremo del abismo.
Caso práctico: Creación de la sala de pruebas métricas (rm_metric_test)
Los diseñadores de videojuegos profesionales nunca prueban el balance de saltos en el nivel final de producción. Primero crean un 'gimnasio de mecánicas' o sala de pruebas métricas. Vamos a construir este espacio en GameMaker paso a paso para verificar físicamente los alcances de nuestro personaje.
Estructuración de un nivel completo en cuatro segmentos progresivos
Con los datos verificados en la sala de pruebas, procederemos a diseñar un nivel completo (por ejemplo, `rm_level_1`). La estructura que aplicaremos divide el nivel en cuatro zonas temáticas o segmentos secuenciales, garantizando una curva de dificultad orgánica.
**Segmento 1: Zona Segura y Calibración (Aprendizaje sin castigo)** El nivel inicia en un entorno cerrado a la izquierda para evitar retrocesos desorientadores. El jugador avanza hacia la derecha por un suelo continuo y plano. En este primer tramo encontramos una hilera de monedas situadas a nivel del piso y luego una pequeña colina de 2 bloques de altura con monedas en forma de arco. El arco de monedas enseña intuitivamente al jugador la parábola natural de su salto. No hay fosos mortales ni enemigos; si el jugador falla el salto, simplemente no recolecta la moneda, pero no pierde vidas ni tiempo valioso.
**Segmento 2: Introducción del Adversario y Saltos Básicos** Inmediatamente después de la colina, aparece el primer `obj_patrol_enemy`. El terreno aquí sigue siendo plano y continuo, lo que permite al jugador evaluar el patrón de movimiento del enemigo sin la presión adicional de caer a un foso. Si el enemigo lo golpea, el jugador pierde 1 punto de vida (de acuerdo a las variables de salud configuradas en `obj_player`), comprendiendo el peligro. Tras superarlo, se introduce el primer foso del juego, pero con un detalle crucial: el foso tiene únicamente 2 bloques de ancho y en el fondo no hay pinchos mortales, sino un suelo inferior con escalones para subir de nuevo. El fallo es pedagógico, no fatal.
**Segmento 3: El Desafío Combinado (Giro o 'Ten')** Aquí los elementos individuales se fusionan en un reto compuesto. El jugador se encuentra frente a un abismo profundo que ahora sí conduce a la pérdida de una vida si cae en él. Para cruzarlo, debe saltar sobre dos plataformas suspendidas de 2 bloques de ancho cada una. En la segunda plataforma patrulla un enemigo. El jugador debe calcular la inercia del primer salto, aterrizar sin caerse, esperar a que el enemigo camine en dirección contraria y asestar un pisotón preciso para usar su rebote y llegar a la orilla opuesta. Para reducir la frustración previa a este reto, es fundamental situar justo antes la bandera de punto de control (`obj_checkpoint`) programada en el Módulo 7.
**Segmento 4: Clímax, Dominio y Recompensa** El segmento final reúne la máxima exigencia física del nivel. Se presenta un ascenso vertical escalonado donde techos bajos obligan a regular la fuerza del salto (saltos cortos) combinados con enemigos que descienden en patrulla. Superada esta subida, el jugador llega a una explanada despejada donde se ubica el cofre de gemas o la puerta de final de nivel (`obj_door`), permitiendo un instante de relajación, alivio y triunfo antes de cargar la siguiente room.
Control visual y señalización ambiental (Signposting)
Uno de los mayores errores cometidos por desarrolladores novatos es asumir que el jugador sabe exactamente hacia dónde dirigirse. En un entorno 2D, si una pantalla presenta múltiples caminos sin diferenciación, el usuario puede perderse o sentir que deambula sin rumbo fijo. Para resolver esto, recurrimos a la señalización ambiental (signposting).
La señalización no requiere necesariamente colocar flechas gigantes con luces de neón en el escenario; se apoya en sutiles pistas visuales y compositivas:
1. **Líneas guía de coleccionables:** Las monedas (`obj_coin`) son la herramienta de dirección más poderosa en un juego de plataformas. Colocar un rastro de monedas no solo premia al jugador, sino que 'dibuja' en el aire la trayectoria segura que debe seguir un salto para superar un obstáculo o esquivar una amenaza oculta.
2. **Contraste lumínico y jerarquía visual:** El ojo humano se siente atraído de forma natural hacia los puntos de mayor brillo y contraste. Los elementos transitables (suelos, muros, plataformas) deben contar con contornos nítidos y colores diferenciables del fondo. El fondo (Background) debe mantener tonos desaturados o más oscuros para que el plano de acción principal resalte instantáneamente.
3. **Elementos decorativos direccionales:** El uso de antorchas, flores que apuntan en una dirección, grietas en la pared o postes de madera inclinados ayuda a guiar la mirada periférica del jugador en el sentido correcto de avance (típicamente de izquierda a derecha en los juegos de plataformas occidentales clásicos).
Implementación en código: Visualización de áreas de riesgo y depuración en sala
Durante la fase de diseño de niveles en GameMaker, resulta extraordinariamente útil contar con una herramienta visual que nos permita observar en tiempo real, mientras probamos el juego (F5), el rango de acción de nuestros enemigos y las trayectorias de salto. Vamos a programar una funcionalidad de depuración (Debug Mode) dentro de `obj_patrol_enemy` para visualizar sus límites de patrulla sin alterar los gráficos definitivos del juego.
En el objeto `obj_patrol_enemy`, abre el evento Draw. Si este evento no existía previamente, GameMaker dibujaba su sprite de forma automática. Al crear un evento Draw, debemos asegurarnos de invocar primero la función `draw_self()` para que el enemigo conserve su animación normal, y a continuación añadiremos las líneas que representarán su área de influencia cuando una variable global de depuración esté encendida.
// obj_patrol_enemy -> Evento Draw
// 1. Dibujar el sprite normal del enemigo con sus transformaciones
draw_self();
// 2. Si el modo de depuración está activo en el juego, dibujar guías espaciales
if (global.debug_mode == true)
{
// Dibujar una línea que indique hacia dónde está mirando y desplazándose
var line_length = 32;
var target_x = x + (dir * line_length);
draw_set_color(c_red);
draw_line_width(x, y, target_x, y, 2);
// Dibujar un círculo semitransparente que denote el área de peligro de contacto
draw_set_alpha(0.25);
draw_circle_color(x, y, 16, c_yellow, c_red, false);
draw_set_alpha(1.0); // Restaurar siempre la opacidad por defecto
draw_set_color(c_white); // Restaurar el color de dibujo
}Para alternar entre encender y apagar estas ayudas visuales durante el desarrollo, utilizaremos un objeto controlador que ya creamos en módulos anteriores, como `obj_game_controller`, asignando la tecla de función F1 dentro de su evento Step:
// obj_game_controller -> Evento Step
// Alternar el modo de depuración al presionar la tecla F1
if (keyboard_check_pressed(vk_f1))
{
global.debug_mode = !global.debug_mode;
}Recuerda inicializar la variable `global.debug_mode = false;` en el evento Create de `obj_game_controller` para evitar errores de lectura de variables no declaradas. Al pulsar F1 durante las pruebas de nivel, verás de inmediato los vectores de avance de los enemigos, permitiéndote comprobar si dos patrulleros están demasiado juntos o si un enemigo invade el espacio vital de aterrizaje de un salto difícil.
Errores comunes de diseño de niveles y cómo corregirlos
Al dar los primeros pasos como diseñador de niveles, es muy fácil caer en patrones de construcción que frustran al jugador sin aportar diversión real. Identificar estos vicios a tiempo te ahorrará horas de rediseño y garantizará que tu juego sea apreciado por su fluidez:
1. **El síndrome de la cuadrícula uniforme:** Ocurre cuando todas las plataformas miden exactamente 3 bloques de ancho y están separadas por fosos de 2 bloques a lo largo de todo el nivel. Aunque el nivel sea mecánicamente funcional, carece por completo de ritmo. Rompe la monotonía intercalando plataformas largas que inviten a correr con pequeñas islas de un solo bloque y desniveles verticales.
2. **Castigos desproporcionados al inicio:** Colocar pinchos instantáneos o abismos letales en los primeros 10 segundos de la primera room desmotiva al usuario antes de que haya comprendido el peso y la inercia del personaje. En las fases introductorias, el error debe costar únicamente posición espacial o un punto de vida menor, nunca el reinicio total de la partida.
3. **Enemigos en zonas de aterrizaje ciegas:** Si el jugador realiza un salto ascendente y al llegar a la cima de una plataforma colisiona instantáneamente contra un enemigo sin margen de reacción, sentirá que el juego hace trampa. El enemigo debe ser visible antes de que el jugador se comprometa con el salto, o su sonido debe alertar con anticipación de su presencia.
4. **Sobrecarga de estímulos simultáneos:** Presentar al mismo tiempo una plataforma móvil, dos enemigos con proyectiles, pinchos en el techo y un salto de longitud máxima genera fatiga cognitiva en lugar de emoción. Introduce los desafíos de uno en uno; combínalos únicamente cuando el jugador haya demostrado sobrada solvencia en cada uno por separado.
Ejercicios prácticos
Aplica los conceptos de diseño, cálculo métrico y progresión estructurada resolviendo las siguientes tres actividades prácticas dentro de tu proyecto de GameMaker:
Resumen
- El diseño de niveles eficaz busca mantener al jugador en el 'estado de flujo', equilibrando la dificultad para evitar tanto el tedio como la frustración.
- La estructura Kishōtenketsu (Introducción, Desarrollo, Giro y Maestría) es la base pedagógica ideal para presentar y escalar retos espaciales.
- Las métricas del jugador (altura máxima, longitud de salto y velocidad horizontal) dictan con exactitud matemática la separación y altura máxima permitida entre plataformas.
- Los saltos en rutas principales deben diseñarse al 80%-85% de la capacidad motriz del personaje, reservando el 100% de exigencia para secretos y coleccionables opcionales.
- Los enemigos no son decoraciones estáticas: colocados estratégicamente actúan como guardianes de saliente, forzadores de ritmo o puntos de apoyo cinético mediante rebotes de pisotón.
- La señalización visual (signposting) con estelas de monedas y contrastes de color orienta al usuario y erradica los injustos saltos de fe.
- Las herramientas de depuración integradas con GML (como visualizadores en el evento Draw) permiten verificar zonas de impacto y vectores de patrulla en tiempo de ejecución.
Practica lo aprendido
Ejercicio 1 · 1 punto
Ordena cronológicamente las cuatro etapas de la estructura Kishōtenketsu aplicadas al diseño de niveles y progresión de mecánicas:
- 1Introducción (Ki): Presentación del obstáculo o mecánica en un entorno seguro.
- 2Giro (Ten): Combinación de la mecánica con otro elemento conocido para alterar el ritmo.
- 3Conclusión (Ketsu): Prueba de maestría que consolida el aprendizaje antes de avanzar.
- 4Desarrollo (Shō): Repetición de la mecánica con una pequeña variación o exigencia adicional.
Ejercicio 2 · 1 punto
Tomando en cuenta las métricas de físicas del objeto del jugador (`obj_player`), donde el tiempo total de salto en el aire sobre suelo nivelado es de 50 frames y la velocidad horizontal (`move_speed`) es de 4 píxeles/frame, ¿cuál es la distancia máxima teórica horizontal recorrida en el aire?
Ejercicio 3 · 1 punto
Relaciona cada rol espacial del enemigo patrullero (`obj_patrol_enemy`) con su función estratégica en el nivel:
- Guardián de Saliente (Ledge Guardian)
- Forzador de Ritmo (Pacing Enforcer)
- Trampa Aérea Coordinada
Ingresa para guardar tu progreso — Ingresar