Temporizadores sencillos en juegos: la regla de los 21 frames de Super Mario Bros.

Fuentes: Setting timers in simple games (feat. the frame rule)

Lynn (rose.systems) explica un sistema minimalista para programar temporizadores en juegos 2D, válido para PICO-8 o Picotron. La idea se reduce a dos líneas: una tabla T devuelve 0 por defecto mediante setmetatable y un bucle en _update decrementa todas sus claves con max(0,v-1). Con eso, T.foo contiene los frames restantes del temporizador foo, lo que permite tres patrones habituales: iniciar y comprobar estados sostenidos (un brillo de 60 frames), disparar acciones puntuales cuando el contador llega a 1, o repetir efectos con operaciones de módulo (T.blip%10). La misma técnica se replica por objeto si los enemigos guardan su propia tabla de timers.

La autora conecta esta idea con el código desensamblado de Super Mario Bros. para NES, donde los temporizadores se almacenan como bytes contiguos en RAM. Como la consola corre a 60 fps, un solo byte solo alcanza para 4,25 segundos. El juego lo soluciona con IntervalTimerControl: la mayoría de los temporizadores se decrementan cada frame, pero un subconjunto de ellos solo lo hace una vez cada 21 frames, sincronizado con un contador superior. Este mecanismo fija la animación de fin de nivel y origina la conocida frame rule del speedrunning: las mejoras de tiempo solo se producen en incrementos de 21 frames, porque el jugador no puede alterar IntervalTimerControl.