Pico-8 Zine 1 Español

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 48

CONTENIDO

3 Breve historia de PICO-8


10 Squashy
22 Hagamos Música
30 Toy Train
38 Geodezik
39 Partículas de humo
43 ¡Bienvenido a PICO-8!

HACK-run-learn
share-love-play
code-create-draw
make-design-BE
think-write-break
participate-retry
modify-dream-try-
PICO-8 es un fanzine hecho por y para usuarios de PICO-8.
El título está usado usado con el permiso de Lexaloffle Games LLP.
Para más información: www.pico-8.com
Contacto: @arnaud_debock
Ilustración portada: @dotsukiHARA
Traducción: @irenens_
2
Breve historia de PICO-8
Saludos, lectores de fanzine. Mi nombre es zep, o Joseph White en
la vida real. Soy el autor de PICO-8, y me alegré mucho cuando
supe sobre esta publicación. Al tratarse de la edición # 1, pensé
que sería apropiado dar en primer lugar unas pinceladas sobre cómo
surgió PICO-8.

Las primeras influencias


Puede que no sorprenda que creciera con ordenadores caseros clási-
cos como el Apple IIe, el C64, y el BBC Micro. Aunque mi familia
no tenía ninguno pasé mucho tiempo en casa de amigos y acampando
en el laboratorio de psicología de mi padre, donde él usaba Beebs
para controlar el hardware con el que se realizan experimentos de
memoria en palomas. Así es como aprendí a programar -- escribiendo
fragmentos de código del manual del BBC y tratando de construir
cualquier cosa remotamente parecida a un videojuego jugable.

El sentimiento de crear programas para esas máquinas es un recu-


erdo de infancia visceral a la altura del olor del árbol macro-
carpa al que subí con mi primera novia, o el sabor metálico de la
sangre después de caerme con la moto en un camino de grava cuando
tenía 8 años.

Había algo en el trazado de grandes píxeles de colores y el es-


cribir programas en un teclado burdo y grande que impactó en mi
cerebro de 8 años. La idea de encender el ordenador y no ver nada
excepto un aviso invitando a lanzar un nuevo programa habría pare-
cido absurda -- estabas destinado a ser sólo tú, el programa y ​​
el
negro lienzo.

Mira a éste pequeño,


¿Dónde irá? ¿Qué hacerá?

3
Herramientas y Editores
Cuando empecé a emprender la tarea de crear juegos enteros no
sabía qué tipo de herramientas existían para hacer gráficos, y
no se me ocurrió mirar. Se convirtió en una especie de ritual al
inicio de cada proyecto reescribir un editor de sprites, mapper,
editor de sonido, o cualquier otra herramienta que requiriese cada
nuevo juego.
Éste hábito acabó manifestándose como poido (“pointy Dough”) -- un
editor de propósito general creado en casa al comienzo de Lexal-
offle. Contaba con modos de edición de sprites, paletas, modelos,
mapas uv, animación esquelética, audio, y más adelante incorporó
un sintetizador de sonido modular y modelador voxel.

La característica de poido que más me gusta es bastante simple:


una colección de recursos mixtos que se puede editar y almacenar
en un solo archivo (un “pod”, que se muestra arriba), lo que elim-
ina la necesidad de saltar entre diferentes editores o gestionar
hojas de sprites o archivos. Éstos “pod” se convirtieron en el
modelo para Voxatron y editores de PICO-8.

LEX500
Un avance rápido hasta 2004. Estuve haciendo Lexaloffle durante
un par de años - lancé un par de juegos de puzzle que no vendieron
muy bien, e hice pequeñas cosas por diversión para permanecer cu-
erdo mientras hacía otros trabajos para mantenerme a flote. Uno
de ellos fue un proyecto llamado LEX500 nombrado en honor a Amiga
500, aunque era realmente más como un Beeb. Tenía una resolución
de 240x240, una paleta fija de 16 colores, y arrancaba en un en-
torno de BASIC.
4
LEX500 seguía siendo sólo un montón de notas y maquetas -- en su
momento fue más bien como un ejercicio de diseño. No había mucho
que lo diferenciase de arrancar un emulador en BBC Micro, aunque
lo que sí tenía es un editor de sprites integrado. Una carac-
terística peculiar de LEX500 fue que los sprites se presentaban
directamente en el editor de código cuando los referenciabas.

Formatos visuales
Aparte de trabajar en LEX500, empecé a probar con simuladores
de pantalla en otros formatos que convertirían cualquier cosa
hecha con ellos a su propio y particular estilo visual. El prim-
ero de ellos estuvo inspirado por una combinación de la primera
demostración de Voxlap por Ken Silverman, y algunos afortunados
accidentes de raytracing que llevaron a un bloque de voxels de
64x64x32 a renderizarse como cubos. Lo usé para maquetar un juego
de aventuras llamado “Félix y el pájaro de fuego’ (abajo), el cual
acabó convirtiéndose en la base para Voxatron y Voxatron Story.

5
La otra pantalla estaba basada en vectores con un formato de color
de 2 canales: un canal para el tono y el otro para la intensidad.
Los polígonos serían transmitidos a los canales por separado y
luego convertidos a RGB al final de cada frame. Lo usé para un
prototipo de Conflux (2008) y Swarm Racer 3000.

Trabajar con estos formatos en combinación con herramientas com-


plementarias me dio pie a crear algo que por aquel entonces vaga-
mente entendía como plataformas o medios; de la misma manera que
los juegos hechos para ordenadores retro tenían una particular
apariencia, la plataforma subyacente podía ser tratada como un
problema de diseño independiente que influiría en la identidad de
los juegos hechos con ello.

Voxatron
Voxatron comenzó en 2010 con la intención de hacer algo con mi
pequeña pantalla voxel. Inicialmente fue sólo un juego de acción
al estilo Robotron (de ahí el nombre), pero después de ver el
éxito que tuvo el trailer en YouTube, dejé el trabajo que estaba
haciendo en aquel momento y tomé la oportunidad para dedicarme
completamente a ampliarlo y desarrollar el juego de aventura que
había imaginado. Por su insólito formato lo veía también como una
oportunidad para ofrecer una plataforma general para que otros
usuarios pudieran hacer y compartir su propio trabajo con voxel.

Las distintas metas marcadas para el proyecto suponían un prob-


lema de diseño. ¿Cómo debían presentarse las distintas partes al
jugador manteniendo un vocabulario comúnmente conocido? Modos de
juego, mini-juegos, DLC, mods, niveles, niveles creados por el
usuario; cada uno de ellos viene con un conjunto de valores es-
perados que influyen en la forma en que se percibe el contenido.

Esto fue especialmente problemático para el contenido creado por


el usuario.Quería que los autores tuvieran autoridad; crear sus
propios proyectos en una plataforma en lugar de hacer un nivel o
mod para un juego ya existente. Algunos trabajos podrían ni si-
quiera asemejarse a los niveles o juegos en absoluto, sino a jug-
uetes, curiosidades, o demostraciones visuales. No fue hasta la
mitad de camino del proyecto que me tropecé con la analogía de los
cartuchos. En vez de tener todos estos tipos de contenido separa-
dos junto con su semántica y valores esperados, podía presentarlos
todos como cartuchos. La noción de un cartucho podía ser utilizada
de una manera lo suficientemente general para capturar su esencia:
una unidad de expresión estándar y fácil de compartir.
6
PICO-8
PICO-8 empezó como una resurrección de LEX500 en 2012. Necesita-
ba añadir un componente general de programación para Voxatron en
algún momento, pero no tenía mucha experiencia en ese tipo de co-
sas. Si hacía LEX500, podía ser una buena manera de ganar mayor
control en programación, y tal vez más adelante podría encontrar
una forma accesible para introducir a los usuarios Voxatron a la
programación.

Otro factor determinante fue la apertura de la oficina Lexaloffle


al público varios días a la semana como un espacio de trabajo
compartido como hacía Pico Pico Cafe (por el que PICO-8 fue par-
cialmente nombrado después). Uno de los primeros clientes habit-
uales fue Julien Quint, un chico con conocimientos de todos los
lenguajes, teoría, e implementación, que comparte mi afición por
los proyectos paralelos fuera de lo común y me inspiró a escribir
un primer borrador en un intérprete de BASIC para LEX500.

Empezamos a hacer presentaciones mensuales para los diseñadores


Picotachi (de nuevo, Pico) y PICO-8 resultó ser una buena herra-
mienta para esbozar o plantear ideas cuando tenía algo que mostrar
y no había nada visualmente accesible en Voxatron.

Poco a poco se hizo evidente que los dos proyectos tenían más en
común de lo que había previsto.

7
Como Voxatron tiene un conjunto completo de herramientas de
diseño integradas en él, parecía natural hacer lo mismo para
PICO-8, y entonces me di cuenta de por qué era tan importante.
Estuve haciendo prototipos de gráficos 2D a baja resolución con
Voxatron, y curiosamente acabé usando el 128x128 para que PICO-
8 cupiera en una sola parte de la visualización volumétrica de
Voxatron, convirtiéndolo en una plataforma viable. PICO-8 com-
partía los objetivos de Voxatron de operar como una plataforma
que podía aprovechar la Lexaloffle BBS para la distribución y
colaboración.
PICO-8 se había convertido en una destilación 2D minimalista de
Voxatron.

Una captura de pantalla de una prueba de PICO-8 cuando trata-


ba de estimar cuántas tiles podría necesitar para que un juego
fuera divertido de diseñar pero no laborioso de implementar.
Inicialmente tenía una pantalla de 160x120 con una capa en modo
texto por separado a 320x240 para el editor de código porque
pensé que no sería posible adaptar un editor de texto legible a
la resolución gráfica nativa. Tal vez tenía razón sobre eso.

La primera iteración incluyó un intérprete BASIC que fue imple-


mentado traduciendo de BASIC a Lua internamente con el fin de
utilizar Lua vm.

8
Gradualmente me fui enamorando de Lua durante el proceso, y me
deshice de la fachada de BASIC al completo.

Aunque era divertido pensar cómo sería PICO-8 si lo materializase,


nunca sentí que le beneficiara dotarlo de una forma física. La
elección de las especificaciones se basaba más en el fomento de
una cierta cultura del diseño y experiencia en el desarrollo que
no en ser realista o plausible. Este fue también el caso al lim-
itar los controles a DPAD y 2 botones, pero un interesante efecto
secundario es que los usuarios podrían construir sus propias PICO-
8 con controladores integrados.

Fantasy Console
Por lo tanto, tenía todos esos elementos que apuntaban al concepto
de una “fantasy console”: Cartuchos, herramientas de desarrollo,
una comunidad, formatos de visualización, y controles abstractos.
¡Pero todavía no podía verlo! PICO-8 inicialmente tenía “discos”
y “programas” en lugar de cartuchos - por un tiempo fue más como
un fantasy home computer, que no acababa de estar del todo bien.

Voxatron seguía siendo un juego que pasó a tener cartuchos y un


editor incluido. Si trataba de explicar a alguien que Voxatron en
realidad era más una plataforma que cualquier otra cosa, me mira-
ban con los ojos sin vida. Como los ojos de un muñeco.

PICO-8 se había convertido en algo que se puso en pie por sí mis-


mo, y ponerlo al lado de Voxatron ayudó a ver con más claridad a
ambos.

No recuerdo cómo hice el paso final al territorio de la consola,


pero en ese momento había muchos elementos que empujan en esa
dirección. Dio a Voxatron una buena razón para tener cartuchos,
ofreciendo una atractiva y accesible manera de presentar estos
dos proyectos de lo contrario abstractos, y le dio a PICO-8 una
identidad enfocada a diseñar alrededor. Ideas como un diseño de
memoria a 32k fija asignada a la disposición de los datos del car-
tucho habría sido difícil de ver de otra manera.
Podría haber sido mucho más fácil si hubiese empezado planteandome
la pregunta “¿Cómo sería crear una consola ficticia?” Y trabajar a
partir de ahí. En cambio, me fui hacia atrás a través de un bosque
de ideas difusas y al final me di cuenta: ¡Oh!, estas cosas son
sólo consolas.

-- zep

9
SQUASHY
Vamos a hacer un juego de squash, ¡al estilo del clásico juego
PONG!

Cómo moverse en PICO-8

Al arrancar PICO-8, se inicia en la modo comando.


Desde aquí, puedes pulsar la tecla Escape (ESC) en el teclado para
entrar en el modo Editor, donde puedes crear tus juegos.

Cuando quieras ejecutar el juego, pulsa ESC para volver al modo


comando, escribe RUN y pulsa RETURN (↵).

Para volver al modo comando de nuevo, ¡sólo tienes que pulsar ESC
en cualquier momento en tu juego!

10
Cuando estás en modo comando, también puedes guardar el juego te-
cleando save game-name ↵.

Para cargar el juego de nuevo cuando vuelvas teclea load game-name


↵.

Si te olvidas de cómo lo nombraste, escribe dir ↵ y PICO-8 te dará


una lista de todos los juegos que conoce.

Para este juego es posible que quieras usar el nombre squashy,


para guardarlo teclea save squashy

¡Ya estamos listos para empezar a hacer nuestro primer juego en


PICO-8!

1. Una barra en movimiento


¡Hagamos una barra que se mueva!

Presiona la tecla ESC para entrar en modo editor y escribe esto.


Presiona ESPACIO al comienzo de las líneas entre los bloques if
y function, esto hace que después sea mucho más fácil de leer.
También puede poner comentarios -- estas son las líneas con las
que se empieza --, y el ordenador las ignora, por lo que son como
pequeñas notas sólo para ti.

11
-- paddle
padx=52
pady=122
padw=24
padh=4

function movepaddle()
if btn (0) then
padx-=3
elseif btn(1) then
padx+=3
end
end

function _update()
movepaddle()
end

function _draw()
-- clear the screen
rectfill(0,0, 128,128, 3)

-- draw the paddle


rectfill(padx,pady, padx+padw,pady+padh, 15)
end

Pulsa la tecla ESC y escribe RUN. Al pulsar ← o → la barra debe


moverse!
Como puedes ver hemos hecho una función llamada movepaddle().
Eso va a hacer que sea más fácil encontrar lo que el código hace
más adelante.

### Los comandos que hemos utilizado

function _update() -- esto se autoejecuta 30 veces por segundo.


es donde se actualiza todo en el juego

12
function _draw() - -esto se ejecuta despues de UPDATE,
es donde se dibuja el juego

btn(b) -- comprueba si un boton esta apretado. el numero b significa
esto: 0 es ←, 1 es → , 2 es ↑ , 3 es ↓ , 4 es z y 5 es x
rectfill(x1,y1, x2,y2, col) -- dibuja un rectangulo en el color col
x1, y1 son las coordenadas de la esquina superior izquierda
x2,Y2 las de la esquina inferior derecha

2. Ahora vamos a añadir una bola


Pulse ESC dos veces para volver al editor de código.

Agrega nuevas variables arriba del todo del archivo para que sepa-
mos dónde poner la pelota:
-- ball
ballx=64
bally=64
ballsize=3
ballxdir=5
ballydir=-3

A continuación añade lo siguiente a la función _draw() en la parte


inferior del archivo:
function _draw()
-- clear the screen
rectfill(0,0, 128,128, 3)

-- draw the paddle


rectfill(padx,pady, padx+padw,pady+padh, 15)

-- draw the ball


circfill(ballx,bally,ballsize,15)
end

Pulsa ESC para salir del editor y el teclea RUN para ver aparecer
la pelota!

13
### Los nuevos comandos que hemos utilizado

circfill(x,y,size,col) --dibuja un circulo con un centro en x,y

3. Una bola quieta es una bola aburrida

Pulsa ESC hasta que estés de nuevo en el editor de código, agrega


una nueva función por encima de la función _update():

function moveball()
ballx+=ballxdir
bally+=ballydir
end

Y a continuación, asegúrate de llamar a la función en _update()


añadiendo:

function _update()
movepaddle()
moveball()
end

run lo que tienes y deberías ver la pelota salir hacia la parte


superior derecha de la pantalla.

4. Mantenla en terreno de juego

La pelota tiene que rebotar en la parte superior y los lados de la


pantalla. No es demasiado complicado -- sólo tenemos que comprobar
las posiciones x e y de la pelota.
Recuerda que la parte superior izquierda de la pantalla es 0,0
y la parte inferior derecha de la pantalla es de 127.127.

Para hacer que la pelota rebote de un lado sólo tenemos que cambi-
ar el signo de dirección de la pelota -- si la velocidad es mayor
que cero la bola se mueve hacia la derecha, y si la velocidad es
inferior a cero la bola se mueve a la izquierda.

Haz un gran sonido para cuando el balón pega en el borde de la


pantalla; ¡algo como esto ya funciona!

14
Añade una nueva función después de la final de moveball()

function bounceball()
-- left
if ballx < ballsize then
ballxdir=-ballxdir
sfx(0)
end

-- right
if ballx > 128-ballsize then
ballxdir=-ballxdir
sfx(0)
end

-- top
if bally < ballsize then
ballydir=-ballydir
sfx(0)
end
end

Y llámalo desde

15
_update():

function _update()
movepaddle()
bounceball()
moveball()
end

run lo que tienes y deberías ver salir la pelota, rebotar en los


laterales y caer por la parte inferior de la pantalla.

### Los nuevos comandos que hemos utilizado

sfx( number ) -- reproduce un sonido

5. Dale a la bola!

Averiguar si la pelota ha golpeado a la paleta es la parte com-


plicada del todo el juego, ¡así que paciencia!

Tenemos que comprobar si la posición x de la pelota está dentro


de la anchura de la barra, y si la ha tocado.

Lo haremos usando la palabra especial and de pico8, de la misma


manera que la usaríamos en inglés.

Añade una función bouncepaddle después de la función bounceball

-- REBOTAR PELOTA EN LA BARRA


function bouncepaddle()
if ballx>=padx and
ballx<=padx+padw and
bally>pady then
sfx(0)
ballydir=-ballydir
end
end

16
Si quieres, puedes hacer un sonido diferente para cuando el balón
golpea la barra y que suene eso en su lugar.
No te olvides de llamar a la función desde _update()

function _update()
movepaddle()
bounceball()
bouncepaddle()
moveball()
end
Si ejecutas esto, deberías ser capaz de mantener la pelota en la
pantalla moviendo la barra (¡aunque todavía desaparecerá si no le
das y cae por la parte inferior!)

6. Podemos tener la pelota de vuelta?


Cuando la pelota sale fuera de la parte inferior de la pantalla
debería aparecer de nuevo en el centro de la pantalla. En reali-
dad, deberíamos perder una vida -- ¡pero ya llegaremos a eso más
adelante!
Añade una nueva función después de moveball():

function losedeadball()
if bally>128 then
sfx(3)
bally=24
end
end

Asegúrate de llamar la función desde _update():


function _update()
movepaddle()
bounceball()
bouncepaddle()
moveball()
losedeadball()
end
17
Y hacer un sonido divertido para cuando se salga fuera de la
pantalla.
Algo como esto valdría:

¡Al ejecutar esto deberías obtener la mayor parte del juego!


Ahora pasaremos a ..

7. ¡Marca puntos!

Obviamente, ya que tenemos un juego, queremos ser capaces de tener


una buena puntuación! Vamos a necesitar una nueva variable en la
parte superior del programa:
score=0

Así, cada vez que la pelota rebote en la barra aumentaremos la


puntuación. Agrega una línea a la función bouncepaddle:

--REBOTAR PELOTA EN LA BARRA

function bouncepaddle()
if ballx>=padx and
ballx<=padx+padw and
bally>pady then
sfx(0)
score+=10 -- incrementa la puntuacion a cada toque
ballydir=-ballydir

18
end
end

A continuación, dibuja el resultado en pantalla añadiendo una


línea a la función _draw() :

function _draw()
-- limpia la pantalla
rectfill(0,0, 128,128, 3)

-- dibuja el marcador
print(score, 12, 6, 15)

-- dibuja la barra
rectfill(padx,pady, padx+padw,pady+padh, 15)

-- dibuja la pelota
circfill(ballx,bally,ballsize,15)
end

¡Ejecuta esto y listo!

### Los nuevos comandos que hemos utilizado

print(message,x,y,col) --escribe un mensaje en pantalla.


x, y es la parte inferior izquierda de la primera letra

8.VIDAS

La siguiente pieza del rompecabezas es limitar el número de vidas


que el jugador tiene. Tendremos que hacer un sprite (un icono)
para mostrar un corazón, por lo que necesitas abrir el Editor de
Sprites de PICO-8 y hacer uno como éste:

19
Recuerda que el número de sprites es 004 en este caso!
Ahora puedes agregar una nueva variable en la parte superior del
archivo: lives=3 Y el código para dibujarlo _draw():

function _draw()
-- limpia la pantalla
rectfill(0,0, 128,128, 3)

-- dibuja las vidas


for i=1,lives do
spr(004, 90+i*8, 4)
end

-- dibuja el marcador
print(score, 12, 6, 15)

-- dibuja la barra
rectfill(padx,pady,
padx+padw,pady+padh, 15)

20
-- dibuja la pelota
circfill(ballx,bally,ballsize,15)
end
(¡Asegúrate de que el número de después de spr coincide con el
número del sprite que hiciste!)

Lo último que tenemos que añadir es el perder una vida cuando el


balón sale por la parte inferior, y el juego termina cuando el
jugador se queda sin vidas. Tenemos que hacer la función losedead-
ball un poco más complicada -- cambia esto:

function losedeadball()
if bally>128-ballsize then
if lives>0 then
-- next life
sfx(3)
bally=24
lives-=1
else
-- game over
ballydir=0
ballxdir=0
bally=64
end
end
end

¡Puedes hacer también un sonido divertido para el final del juego!


Juega con la función sfx() en la sección marcada como game over.

### Los nuevos comandos que hemos utilizado

spr(number,x,y) -- dibuja un sprite en la pantalla con la parte superior


izquierda en x, y

----Alex MOLE
----@TheRealMolen

21
Vamos a hacer música!
Al trabajar con el PICO-8 tracker, hay dos herramientas con las
que debes sentirte cómodo.

1. El Editor SFX

Con esto vamos a crear los componentes individuales de tus can-


ciones, así como los efectos de sonido.
¡Vamos a desglosarlo! Desde la parte superior izquierda a la in-
ferior derecha, tenemos:

1. La secuencia seleccionada actualmente.


2. La velocidad en que se reproducirá la secuencia.
3. El bucle de inicio y el punto final.
4. La octava en la que se fijará la nueva nota.
5. El Instrumento con el que se tocará la nueva nota.
6. El volumen en el que sonará la nueva nota.
7. Con esto, vamos a crear los componentes individuales de las
canciones, así como los efectos de sonido

22
La mitad inferior muestra tus notas, con cuatro columnas soste-
niendo ocho notas cada una.

Cada nota tiene la siguiente información:

• una letra, indicando la frecuencia de la nota.


• un punto o almohadilla, indican si es un medio tono o completo.
• un número gris que indica la octava.
• un número rojo que indica el instrumento.
• un número azul que indica el volumen.
• un número de color gris oscuro que indica un efecto.

Las notas se introducen a través de una


distribución estándar de teclado musical.
La secuencia de la imagen muestra todas
las notas disponibles en dos octavas.
Las teclas correspondientes son:

• Columna 1: 2, 3, 5, 6, 7
• Columna 2: q, w, e, r, t, y, u, i
• Columna 3: s, d, g, h, j
• Columna 4: z, x, c, v, b, n, m
Los efectos disponibles son:

0 none 1 slide 2 vibrato 3 drop 4 fade_in


5 fade_out 6 arp fast 7 arp slow

1.1 El Modo Sfx - Editor Gráfico

Al hacer clic en el pequeño icono en la parte superior izquier-


da, se puede cambiar al modo de secuenciador del editor SFX. La
principal diferencia de este modo es que cada nota se representa
gráficamente en lugar de numéricamente, como lo sería en un se-
cuenciador. Además, puedes utilizar el ratón para crear notas,
ajustar frecuencias de notas, octavas, volumen, y así sucesiva-
mente...

23
Personalmente, yo no uso este modo debido a su falta de precisión
sobre los números del tracker, así que no puedo decir mucho al
respecto.

2. El Editor de patrones
En el editor de patrones puedes organizar las secuencias que has
hecho en el editor de sfx para hacer canciones.
Todas las funcionalidades del editor SFX se mantienen en el edi-
tor de patrón.

24
Además, hay:
1.Lista de patrones con cuatro puntos de colores cada uno en re-
presentación de las secuencias seleccionadas.
2.El comportamiento del patrón actual. Empezar bucle, hacer bucle
de nuevo y detenerlo.
3. Las secuencias individuales del patrón seleccionado.
Cada patrón tiene capacidad para cuatro.

En tu código, selecciona el número de patrón que sonará con MU-


SIC (NUMBER). El patrón apropiado sonará una vez. Dependiendo
del comportamiento del patrón, establecido en la parte superior
derecha de cada patrón, sonará entonces el siguiente patrón en
secuencia, volverá a sonar el patrón actual de forma indefinida,
o se detendrá.

Puedes editar las notas de la secuencia de la misma manera que en


el editor sfx. Las únicas funcionalidades que no están presentes
en el editor de patrón son los ajustes del punto de velocidad y
bucle.

3. Haz Música
Ahora que conoces las funcionalidades del tracker de PICO-8,
puedes empezar a hacer alún chiptune alocado.

Aquí está la lista de teclas de acceso rápido que puedes usar:


• Play / Stop: Espacio
• Introduzcir nota: zsxdcvgbhnjm q2w3er5t6y7ui
• Eliminar nota: Retroceso (Alternativamente, volumen a 0)
• Aumenta / disminuye velocidad, etc. del patrón por 4:
Shift + clic izquierdo / clic derecho
• Editor Sfx - establece todas las notas del instrumento / efecto:
Mayús + clic en el instrumento / efecto
• secuencia de bucle de salida: A

Aquí hay un par de consejos para empezar:


• El efecto de caída, 3, es bueno para bombos
• El instrumento de ruido, 6, es bueno para cajas y platillos
• Una canción completa debe consistir en, al menos, una introduc-
ción, un bucle principal, y uno final
• Un bucle continuo debe consistir de por lo menos 4 diferentes
patrones que no suenen cansinos. ¡Mientras más, mejor!
• Al hacer tu música, ten en cuenta que sólo tiene cuatro canales
para reproducirla + efectos de sonido.

25
• Un bajo con octava 0-1, un medio a alto lead con octava 1/3 y
la batería son una buena base para un sonido completo.
• Juega con varias combinaciones de efectos, instrumentos, oc-
tavas, volumen y frecuencias. Cambia la velocidad predeterminada
de tus canciones. Puedes hacer loops de batería tremendos dándole
una alta velocidad y notas alejadas entre sí...

4. Reproducción de música

playing =0
music( 0)

function _update ()
end

function _draw ()
cls()
print(“Track” ..PLaying)
end

Con el fin de reproducir la música que has hecho en el interior del


juego, todo lo que tienes que hacer es escribir MÚSIC(n), donde
n representa el número del patrón, que se muestra como un (1)pan-
tallazo del editor de patrones en la sección 2 de este tutorial.
Puedes reproducir cualquier patrón que quieras, sólo tienes que
tener en cuenta que los patrones vacíos no sonarán, por supuesto.
El resto del código que se muestra se añade porque PICO-8, de otro
modo, asume que el programa está vacío y se cierra al instante.
Para evitar esto hemos añadido un poco de código para borrar la
pantalla y que nos muestra qué pista se está reproduciendo.

Línea por línea:

PLAYING = 0 se establece su valor a 0.


MUSIC(0) se ejecuta una vez para empezar a reproducir la música.
FUNCTION _UPDATE () y FUNCTION _DRAW () para que el juego inicie.

En realidad puedes poner sólo estas dos funciones, dejar el resto


vacío, y PICO-8 reproducirá la música. El resto es extra.

CLS() borra la pantalla de cada frame, por lo que el código de la

26
siguiente línea sólo será visible una vez.

PRINT(“TRACK “ .. PLAYING) escribe TRACK en la pantalla junto con la


variable PLAYING, que tiene nuestro número de pista.

El comportamiento del patron:


Dependiendo del comportamiento del patrón establecido en el Editor
de patrones, que se muestra(2) en el pantallazo antes mencionado,
la función MUSIC reproducirá o el siguiente patrón en la secuencia
una vez que su patrón seleccionado termine, o en su totalidad una
vez si no se ha seleccionado ninguno de inicio de ciclo, bucle o
final. Si has seleccionado el tercer símbolo, final, la música se
detendrá después de que se reproduzca el patrón. Si has seleccio-
nado el segundo símbolo, bucle, el patrón anterior al que se está
reproduciendo y que tiene el bucle seleccionado se reproducirá
el siguiente. De esta manera puedes hacer bucles de conjuntos de
patrones, dándole al último en la secuencia un bucle atrás, y al
primero un bucle de reinicio. Si en cualquier patrón estableces
tanto un bucle atrás como uno de reinicio, éste se repetirá hasta
que lo detengan. ¡Ya está! Ahora combina éstos conocimiento con
otros tutoriales y haz algunos grandes programas para PICO-8!

Gracias por leerme, espero haber podido ayudar a entender las pis-
tas de audio un poco mejor. Si tienes alguna pregunta más, twit-
teame a @pizzamakesgames.

--Feliks Balzer

27
28
@bitmOO console design

29
TREN DE JUGUETE
Siempre me encantó ver los trenes de juguete de mi abuelo sil-
bar en sus raíles, estoy trabajando en un juego de tren algo más
complicado en este momento, pero me decidí a tratar de aportar
algo más simple a esta revista, en la misma línea.

No es tanto un juego como un pequeño juguete - un tren se mueve


por su pequeño rail haciendo sus perfectos giros angulares. Im-
presionante ingeniería por parte de los fabricantes de juguetes!

El mapa
Vamos a empezar con el método _init (), que se ejecuta cada vez
que utilizamos el comando RUN (o CTRL-R, o CMD-R).
Piensa en ello como una puesta a punto para el juego.

function _init()
cls()
switch_state=0
train={{64,8},{72,8},{80,8}}
end

30
Lo realmente útil sobre _INIT() es que se puede ejecutar de nuevo
en cualquier momento y se restablece el juego. Así que trata de
poner todo lo importante en él. En este caso sólo tengo dos vari-
ables, SWITCH_STATE y TRAIN. SWITCH_STATE sólo me dice si el inter-
ruptor para el tren está activado (1) o desactivado (0). Siempre
queremos empenzar con el tren desactivado para que el jugador
tenga la satisfacción de activarlo. Y luego TRAIN es una tabla,
que es básicamente una lista de listas. Cada par de valores es una
lista de dos elementos que representan un segmento del tren. El
primer valor es la posición X, y el segundo valor es la posición
Y. Como ves habrá tres segmentos en este tren, pero puedes añadir
tantos como quieras. Sólo ten cuidado cuando los posiciones. Ver-
emos por qué en un momento.

function move_segment(s,dir)
spd=dir*2
if(s[2]==8) --Arriba
then
if(s[ 1]==112) -- arriba derecha
then
s[2]+=spd
else
s[ 1]+=spd
end
else
if(s [ 1]==112) --derecha
then
if(s [2]==112) --abajo derecha
then
s[ 1]-=spd
else
s[ 2]+=spd
end
else
if(s[ 2]==112) --abajo
then
if(s[ 1]==8) --abajo
s[ 2]-=spd

31
else
s[ 1]-=spd
end
else
if(s [ 1]==8) -- left side
then
if(s [ 2]==8) --top left
then
s[ 1]+=spd
else
s[ 2]-=spd
end
end
end
end
end
end

La función MOVE_SEGMENT nos permitirá avanzar un segmento del tren


(que llamaremos S) a lo largo de la pista, teniendo en cuenta los
giros que tendrá que hacer en el camino.
Esto se hace mediante la comprobación de las coordenadas de S y
decidir si necesita moverse en la dirección X o en la dirección Y
en cada momento. Al principio, S tiene una posición vertical Y de
8, y una posición horizontal X NO igual a 112.
Por lo tanto, cuando el SWITCH_STATE es 1, estaremos aumentando
la posición X de S por 2 en cada ejecución hasta que X alcanza 112
(indicando la esquina superior derecha).
Cuando S llega a la esquina superior derecha, su posición vertical
Y es 8, y su posición horizontal X es 112. Ahora ejecutaremos dif-
erentes partes del código. En lugar de aumentar la posición X (que
se mueve a la derecha), hay que disminuirla. Así la posición Y del
tren se incrementa, enviándolo por la pantalla hasta llegar a la
siguiente esquina. Repetimos este método para las otras tres es-
quinas, y el resultado será que el segmento de tren se mueva a lo
largo en una dimensión hasta que alcance el límite, momento en el
que comienza a moverse en la otra dimensión, y así sucesivamente.

32
function adv_switch()
if(switch_state<1)
then
switch_state+=1
else
switch_state=0
end
end
Esta función mueve el interruptor a la siguiente posición (viene
de ADV-ances, en inglés). Puedes usar esto para gestionar tantos
estados de conmutación como quieras, simplemente aumentando el
número en el IF. Tener 1 en el IF nos permite tener dos estados de
conmutación, 2 permitiría tres estados, etc. ¡Diferentes estados
podrían hacer cosas muy diferentes!

function move_train()

for t in all(train)
do
move_segment(t,switch_state)
end

end

En la función MOVE_TRAIN hacemos algo muy simple: recorrer todos


los segmentos del tren, y mover cada uno. FOR T IN ALL(SME_LIST) te
permitirá hacer algunas operaciones (dentro de DO...END) en cada
elemento, denominado temporalmente como T. En este caso, nosotros
ya hemos hecho el trabajo duro, por lo que sólo vamos a llamar a
esta otra función, MOVE_SEGMENT, en cada iteración. Añadimos tam-
bién SWITCH_STATE porque si SWITCH_STATE es 0, no queremos que el
tren esté en movimiento.
Alternativamente podemos comprobar SWITCH_STATE y sólo hacer el
bucle FOR si su valor es 1, pero de esta manera podríamos poten-
cialmente añadir más cosas a la función MOVE_SEGMENT más adelante
.

33
function _update()
if(btnp(4))
then
adv_switch()
end
move_train()
end
La función _UPDATE como ya se ha visto en una lección anterior,
se ejecuta cada vez que se actualiza de juego (30 veces por se-
gundo). La función BTNP comprueba si un botón determinado está
siendo pulsado, en este mismo momento, y esperará unos fotogramas
antes de activarse de nuevo si el botón se mantiene pulsado. Así
que puedes utilizarlo muy cuidadosamente para interruptores. Al
presionar el botón 4 del Jugador 1 (generalmente Z) llamará al
método ADV_SWITCH que se muestra arriba, y encenderá el interrup-
tor. MOVE_TRAIN es algo que queremos ejecutar si se está presiona-
do o no un botón, por lo que lo ponemos fuera del bloque IF...END.

function draw_train()
local len=count(train)
for t=1,len
do
if(t==1)
then
sprite=11
else
if(t==len)
then
sprite=13
else
sprite=12
end
end
spr(sprite,train[t][1],train[t][2])
end
end
Ahora tenemos hacer que se visualice el tren. Esta suele ser la
parte más fácil, es sólo un poco más desordenada aquí porque

34
yo quería tener segmentos especiales al principio y final. Esta
vez utilizamos un tipo bucle diferente FOR, que comienza con T
a 1, y continúa, añadiendo uno cada vez, hasta que T es igual
a la longitud de la lista TREN. Esto nos permite no sólo hacer
cosas con cada segmento, sino también saber fácilmente en qué
lugar del listado nos encontramos. En este caso, el primer seg-
mento / elemento de la lista es el último segmento del tren, por
lo que queremos poner un sprite un poco más aburrido. El último
elemento de la lista es el primer segmento del tren, por lo que
podríamos hacer uno que sea más interesante. Y todos los de en
medio tendrán el mismo sprite.

function draw_switch()
if(switch_state==1)
then
sspr(0,16,16,16,56,56,16,16)
else
sspr(64,16,16,16,56,56,16,16)
end
end

Esta función comprueba el SWITCH_STATE y cambia a la imagen ade-


cuada para dibujar en base a eso. Las imágenes son dos sprites
de ancho por dos de alto (16x16px). Utilizamos la función SSPR
(‘stretch sprites’) para hacerlo fácil, aunque podríamos también
dibujar cada sprite uno por uno. Los dos primeros argumentos di-
cen al programa dónde empezar el dibujo (x = 0, y = 16 si el in-
terruptor está encendido). Los dos siguientes argumentos dicen al
programa cuán grande es el área que queremos sacar de la hoja de
sprites. Como vimos anteriormente, va a ser de 16 de ancho y 16
de largo desde el punto de origen. Tenemos que dar una coordenada
X e Y para empezar a dibujar el sprite, y de nuevo el tamaño del
área que queremos llenar. Si doblaste los dos últimos argumentos,
a (32, 32), el interruptor aparecerá el doble de grande. Es di-
vertido jugar con SSPR, pero también es útil incluso si no usas
sprites en absoluto.
function _draw()
map(0,0,0,0,16,16)
draw_switch()
draw_train()
end

35
Sprites

Esta función se ejecuta cada vez que se ejecuta _UPDATE (a menos


que PICO-8 esté funcionando lentamente). Utiliza la función MAP
para tirar de una gran parte de los datos de mapas y mostrarlo
en pantalla. Los dos primeros argumentos son por donde empieza a
dibujar PICO-8 en la pantalla (donde 0,0 es la esquina superior
izquierda), el segundo par de argumentos nos dice por donde emp-
iezan los datos del mapa, y el tercer par de argumentos nos dice
cuantos sprites se dibujan en cada dirección. Una pantalla comple-
ta es 16x16 sprites, o 128x128 píxeles. Así saca 16x16 sprites, en
base a los datos del mapa y los dibuja en pantalla antes de hacer
cualquier otra cosa. Luego llama a las funciones DRAW_SWITCH y
DRAW_TRAIN que vimos anteriormente. (Estas cosas se dibujan orde-
nadas por capas, de modo que si, por ejemplo, si quieres dibujar
un pequeño puente sobre el tren, lo dibujarás *después* del tren)

Vimos anteriormente que el MAP dibuja sprites en base a datos del


mapa, pero podría no estar claro lo que realmente está pasando.
El “mapa” que se puede ver en el primer pantallazo es sólo una
larga lista de números, diciéndole al programa qué sprite debe
poner. Así que la primera fila de sprites en los datos del mapa
sería algo como “02 03 19 18 03 02” y así sucesivamente. Simple-
mente recurre a la hoja de sprites (segundo pantallazo) y coge el
sprite que se corresponde a esa posición. Esto es particularmente

36
bueno porque se puede cambiar en cualquier momento el sprite 02 y
al instante ver el cambio en todos los mapas.

Mapeo y Sprites son un mundo en sí mismos, pero me gusta mucho


jugar con ello. Es una forma divertida de trabajar en un juego
sin ser demasiado técnico.

Deberes:
- Existe al menos una forma de mejorar la función MOVE_SEGMENT.
Trata de hacerla más pequeña.
- Ahora que has organizado lo anterior, desordénalo un poco
tratando de hacer que el tren vaya para otro lado.
- Probablemente podrías añadir una tercera posición en el inter
ruptor para hacer que el tren arranque,
se detenga y dé marcha atrás.
- Trata de hacer el tren vaya más lento antes de que se detenga,
en vez de que lo haga de golpe. Podrías incluso variar la
velocidad cuando se enciende.
- Cambia cualquiera (o todos) los sprites para cambiar la sensación
del juego, o ¡simplemente para que se vea mejor!
¿Para qué otras cosas podrías utilizar la misma mecánica pero con
diferentes elementos visuales?

¡Gracias por leer! Espero que haya sido educativo. ¡Si te ha gus-
tado y especialmente si has hecho algo interesante usando éste
juego como base no dudes en contactar!

Saludos,

James (PROGRAM_IX)
Puedes encontrar la versión original aquí:
http://www.lexaloffle.com/bbs/?tid=2253

37
GEODEZIK
@aliceffekt
http://xxiivv.com

frame = 0

function _update()
frame += 1

-- loop at f127

if frame > 127 then


frame = 0
end
end

function _draw()

rectfill(0,0,127,127,0)
i=0
while( i < 20) do
e = (i * 0.5)
line(0,(frame*e),127-(frame*e),0,7)
line((frame*e),127,0,(frame*e),7)
line(127,127-(frame*e),(frame*e),127,7)
line(127-(frame*e),0,127,127-(frame*e),7)
i += 1

end

end

38
Partículas de Humo
Por Mozz http://mozz.itch.io/

Este tutorial asume que sabes los fundamentos de PICO-8, incluido


el _init(), _update() and _draw().
Los efectos de partículas son el método más popular para crear
polvo, humo, y chispas en un juego: dotan a los mundos del juego
de vida. Básicamente, un sistema de efectos de partículas es el
que crea una serie de partículas individuales que tienen algún
tipo de física aplicada a ellos. En este tutorial, las partículas
serán círculos, que crecerán basados en la vida de las partículas,
emulando la disipación del humo y las nubes.
Para este efecto tendremos que escribir tres funciones: una para
hacer el humo; una para moverlo; y otra para dibujarlo.

1.Hacer la partícula
Al hacer humo debes pensar en las variables que necesitarás más
adelante y sobre qué quieres tener control el momento de crear-
lo. Para este ejemplo decidí que para establecer los valores xy
iniciales quería, el color del humo, y el tamaño inicial de la
partícula de humo.
Estas variables van en los parámetros de la función. El resto
de las variables de la función mantendrán el valor actual de la
partícula en x e y, así como las variables que controlarán la
física más tarde en el programa. La letra d delante de una vari-
able es la abreviatura matemática para delta, o “un cambio en”.
Así dx sería “el cambio en x” y fijará la velocidad de la partícu-
la en esa dirección. Esto te ayudará más adelante a recordar lo
que cada variable es.

Las variables t y max_t establecen el tiempo que dura una partícu-


la en cuestión de segundos, el width y width_final hará que la
partícula empiece de un cierto tamaño y crezca con el tiempo y ddy
es el cambio en dy, y simula la aceleración en el eje y.
A continuación, añadimos la lista “s” a una lista de “smoke” que
contendrá cada partícula que creamos en el juego. Así que al fi-
nal tendremos una lista llamada “smoke” que contiene una serie de
listas que contienen los datos para cada instancia de partículas
de humo.
function make_smoke(x,y,init_size,col)

39
local s = {}
s.x=x
s.y=y
s.col=col
s.width = init_size
s.width_final = init_size + rnd(3)+1
s.t=0
s.max_t = 30+rnd(10)
s.dx = (rnd(.8).4)
s.dy = rnd(.05)
s.ddy = .02
add(smoke,s)
return s
end
function _init()
smoke = {}
cursorX = 50
cursorY = 50
color = 7
end

2.Mover la partícula
Ahora que tenemos una función que añadirá una partícula de humo al
juego, tenemos que definir cómo se mueve. En move_smoke, cambiare-
mos los valores x e y de la partícula en función de las variables
que nos propusimos cuando lo creamos. A cada paso de move_smoke,
primero se comprueba si la partícula ha alcanzado su vida máxi-
ma, si es así quítala de “smoke”. Luego aumentamos el ancho de la
partícula si estamos dentro de los 15 pasos anteriores al final
de su vida (sin que exceda la variable width_final). Luego apli-
camos los valores dx y dy, así como ddy (que define la gravedad)
para futuras ejecuciones del dy. En _update decidí crear sólo una
partícula de humo en cada paso llamando a make_smoke, sólo para
testeo. El programa comprueba también si se ha pulsado una de las
flechas del teclado y cambia los valores de “cursorX” y “cursorY”
basado en el input del jugador. Usamos esos valores para deter-
minar dónde creamos nuevas partículas. El color se ajusta al azar
cuando se presiona “button 1”.
function move_smoke(sp)

40
if (sp.t > sp.max_t) then
del(smoke,sp)
end
if (sp.t > sp.max_t15) then
sp.width +=1
sp.width = min(sp.width,sp.width_final)
end
sp.x = sp.x + sp.dx
sp.y = sp.y + sp.dy
sp.dy= sp.dy+ sp.ddy
sp.t = sp.t + 1
end
function _update ()
foreach(smoke, move_smoke)
if btn(0,0) then cursorX=1 end
if btn(1,0) then cursorX+=1 end
if btn(2,0) then cursorY-=1 end
if btn(3,0) then cursorY+=1 end
if btn(4,0) then color = flr(rand(16)) end
make_smoke(cursorX,cursorY,rnd(4),color)
end

3. Dibujar la partícula

Ok, hemos creado una partícula y puede moverse, pero tendremos


que hacer que se dibuje en la pantalla antes de que podamos verlo.
El método es bastante simple: Cada vez que se llama a la función
_draw, foreach() llamará a draw_smoke para cada entrada en la lis-
ta “smoke”. draw_smoke usará los valores de la partícula actual
para dibujar un círculo relleno con los valores de x e y actuales,
con su anchura y color actual.

41
function draw_smoke(s)
circfill(s.x, s.y,s.width, s.col)
end
function _draw()
cls()
foreach(smoke, draw_smoke)
end

4.Pasos adicionales

Ahora puedes jugar con diferentes variables para cambiar el efecto


al aumentar la velocidad y la gravedad de las partículas generadas
y crear una sensación diferente. También puedes crear un emisor
que cree diferentes tipos de partículas con complicados efectos
en capas. Y si a quieres que la partícula sea algo más interesante
que un simple círculo, reemplaza circfill() con spr() y utilizar
sus propios sprites.
Para más ejemplos de lo que se puede hacer con
partículas, echa un vistazo a “Advanced Par-
ticle System Library” publicado por Viza, que
puedes encontrar a través de este código QR
http://www.lexaloffle.com/bbs/?tid=1920

42
¡Bienvenido a PICO 8!
@terrycavanagh

¿Nuevo en PICO-8? Aquí hay algunos cartuchos perfectos para comen-


zar:

CELESTE
Comentario del autor:
“Hemos utilizado prácti-
camente todos nuestros re-
cursos para esto. 8186/8192
código, todo el spritemap,
todo el mapa, y 63/64 soni-
dos. ¡Háznos saber lo que
piensas! “
Uno de los grandes de PICO
8. Si sólo vas a probar un
juego PICO-8, que sea éste.
http://www.lexaloffle.com/
bbs/?tid=2145

Stories at the Dawn

Un juego minimalista de
plataformas con una histo-
ria que cuenta con cuatro
finales. Un gran ejemplo de
lo que puede hacerse real-
mente bien bajo las limita-
ciones de PICO 8.

http://www.lexaloffle.com/
bbs/?tid=1919

43
PAT Shooter
Comentario del autor:
cuando se le preguntó “¿Qué
significa P.A.T.? “:” Nada.
En realidad yo esperaba na-
die va a preguntar “.

http://www.lexaloffle.com/
bbs/?tid=1867

Transdimensional
Butterfly

Hay un montón de cartuchos


de este tipo en el BBS, un
poco como las demos gráfi-
cas de los 90 con su músi-
ca.
Éste, del creador de PICO-
8, Lexaloffle, es preciosa,
y tiene una gran banda so-
nora también.

http://www.lexaloffle.com/
bbs/?tid=2109

44
The Tower of Archeos
Comentario del autor:
“Consigue llegar hasta la
8ª planta para luchar con-
tra Archeon.”
Un rompecabezas fantásti-
camente diseñado, por el
prolífico Benjamin Soule
(quién también escribió PAT
shooter y otros juegos de
PICO-8).

http://www.lexaloffle.com/
bbs/?tid=1907

Tempest
Comentario del autor:
“No se podría considerar
juego aún, pero pretende
convertirse en un juego de
aventura / sim / supervi-
vencia. Pasándomelo muy
bien con este proyecto! “
Construye un refugio y
encuentra comida para
sobrevivir. Aún no está
terminado, ¡pero es muy
prometedor!
http://www.lexaloffle.com/
bbs/?tid=2186

45
WORMWORMWORMWORM
Comentario del autor:
“INSPIRADO POR ‘DIARY OF UNSPOKEN TRUTHS’,
‘ARTISTA’, Y ‘YO, ROBOT’, por NIALL, MI-
CHAEL, Y UNO MISMO”
PICO-8 ha sido una muy buena fuente para el
glitch art. Éste es particularmente bueno!

http://www.lexaloffle.com/bbs/?tid=2006

mtrx
Comentario del autor:
“Una pintura con ruido en funcionamiento
eterno”
¿Disfrutaste WORM, pero te pareció que
tenía demasiada interacción y vocales?
¡Prueba MTRX de jph!

http://www.lexaloffle.com/bbs/?tid=1936

Delia Mute in Grave Grotto


Comentario del autor:
“Una pequeña cuadrícula a lo Roguelike.
Cada ranura del inventario puede sólo uti-
lizarse en la dirección en que se coge”

http://www.lexaloffle.com/bbs/?tid=2166

46
The Adventures of Jelpi
(en modo corrupto):
[Demo del juego incluída]

Comentario del autor:


Pensé que sería gracioso tener un monstruo glitcheador que in-
trodujera valores aleatorios a la memoria principal - tienes que
salir antes de que ya no se pueda completar el nivel. Aunque -
siempre existe la posibilidad de que ponga una salida en el mapa
justo en frente tuyo. O: un juego de superheroes ambientado en una
ciudad plagada de corrupcion. (Waka Waka)
Todo el que disponga de PICO 8 debería probar este juego - carga
la demo incluída, The Adventures of Jelpi. Justo al comienzo del
código, busca la variable corrupt_mode y ponla a TRUE. ¿Cuántas
veces conseguirás cruzar el escenario?

47
Más cosas interesantes:
=-=-=-

Stray Shot Endless Train


http://www.lexaloffle.com/ http://www.lexaloffle.com/
bbs/?tid=1923 bbs/?tid=2122

Random Sound Genera- Video Poker


tor http://www.lexaloffle.com/
http://www.lexaloffle.com/ bbs/?tid=2020
bbs/?tid=1965

Duangle 2015 intro


Piano Simulator http://www.lexaloffle.com/
http://www.lexaloffle.com/ bbs/?tid=1984
bbs/?tid=2208

Bounce
http://www.lexaloffle.com/
Thopter Escape
http://www.lexaloffle.com/ bbs/?tid=1947
bbs/?tid=2196
Sumo Pico
Puzzle Cave: http://www.lexaloffle.com/
Raiders of the Lost Pota- bbs/?tid=2191
to:
http://www.lexaloffle.com/
bbs/?tid=2039

PICO-8

También podría gustarte