Me gustaría compartir mi primer juego para Amstrad GX4000, Ronald In The Maze:
RolandMazeGX4000.zip (467.8 KB)
Probado en Arnold y Retro Virtual Machine.
Dabzy
Me gustaría compartir mi primer juego para Amstrad GX4000, Ronald In The Maze:
RolandMazeGX4000.zip (467.8 KB)
Probado en Arnold y Retro Virtual Machine.
Dabzy
¡Uuuuh sí, gracias!
¡Qué bien! jaja, me gusta la historia detrás
¿Qué usaste para hacerlo?
LOL, la historia detrás… Sí, ¡tenía que mantener con vida los [a veces] horribles argumentos de los juegos de esa época! ![]()
Bueno, lo hice con mis propias herramientas, por ahora está sin terminar, pero lo llamo Ronald4000; es un compilador de BASIC->ASM que usa RASM para generar el cartucho final…
Como ejemplo, aquí hay un jueguito de Invaders hecho con él:
' INVADERS - un pequeño y simple Space Invaders para la GX4000
' Escrito en Ronald BASIC
' Sprites (hardware, cero parpadeo):
' huecos 0..11 - la formación de invasores (4 x 3)
' hueco 12 - el cañón del jugador
' hueco 13 - el disparo del jugador
' Imágenes (software, dibujadas una vez):
' "bunker" - tres bloques de escudo en la parte inferior
'
' Controles: IZQUIERDA/DERECHA mueven, DISPARO dispara.
' Limpia la ola para ganar; si te alcanzan, se acaba el juego.
' DISPARO vuelve a jugar.
Mode 1
Ink 0, 0 ' negro
Ink 1, 18 ' verde brillante (texto + búnkeres)
Ink 2, 6 ' rojo
Ink 3, 26 ' blanco
Border 0
Dim alive:Byte[12]
' preparar + cargar los patrones de sprites una vez (los 12 invasores comparten un patrón)
For i = 0 To 11
LoadSprite "invader", i
Next
LoadSprite "player", 12
LoadSprite "bullet", 13
' bucle externo - una pasada = una partida, luego reinicia con DISPARO
Repeat
' ---- reiniciar estado ----
For i = 0 To 11
alive[i] = 1
Next
remaining = 12
score = 0
marchX = 0
marchY = 0
dir = 1 ' 1 = marchando a la derecha, 0 = marchando a la izquierda
tick = 0
bAlive = 0
px = 148
py = 176
gameover = 0
won = 0
Cls
' escudos - imágenes por software, dibujadas una vez; los sprites se deslizan sobre ellas
DrawImage "bunker", 40, 150
DrawImage "bunker", 148, 150
DrawImage "bunker", 256, 150
Locate 1, 1
Print "SCORE ", score, " "
' posicionar la formación y el cañón
For i = 0 To 11
row = i / 4
col = i - row * 4
Sprite i, 30 + col * 28 + marchX, 24 + row * 22 + marchY
Next
Sprite 12, px, py
' bucle principal del juego
Repeat
Wait
' ---- mover el cañón ----
If JoyLeft Then px = px - 3
If JoyRight Then px = px + 3
If px < 4 Then px = 4
If px > 292 Then px = 292
Sprite 12, px, py
' ---- disparar (un disparo a la vez) ----
If FireHit And bAlive = 0 Then
bAlive = 1
bx = px
by = py - 8
EndIf
' ---- actualizar el disparo ----
If bAlive = 1 Then
by = by - 6
If by <= 10 Then
bAlive = 0
SpriteHide 13
Else
Sprite 13, bx, by
' ¿golpeó a un invasor?
For i = 0 To 11
If alive[i] = 1 Then
If SpritePixelHit(13, i) Then
alive[i] = 0
SpriteHide i
bAlive = 0
SpriteHide 13
score = score + 10
remaining = remaining - 1
Locate 1, 1
Print "SCORE ", score, " "
Exit
EndIf
EndIf
Next
EndIf
EndIf
' ---- marchar la formación con un temporizador (se acelera a medida que quedan menos) ----
tick = tick + 1
spd = 3 + remaining
If tick >= spd Then
tick = 0
If dir = 1 Then
marchX = marchX + 8
If marchX >= 176 Then
marchX = 176
dir = 0
marchY = marchY + 12
EndIf
Else
If marchX <= 8 Then
marchX = 0
dir = 1
marchY = marchY + 12
Else
marchX = marchX - 8
EndIf
EndIf
' reposicionar los invasores vivos
For i = 0 To 11
If alive[i] = 1 Then
row = i / 4
col = i - row * 4
Sprite i, 30 + col * 28 + marchX, 24 + row * 22 + marchY
EndIf
Next
' ¿llegaron a la línea del cañón?
If marchY >= 92 Then gameover = 1
EndIf
' ---- ¿ola completada? ----
If remaining = 0 Then
won = 1
gameover = 1
EndIf
Until gameover = 1
' ronda terminada - limpiar el campo, mostrar el resultado
For i = 0 To 11
SpriteHide i
Next
SpriteHide 12
SpriteHide 13
Locate 16, 12
If won = 1 Then Print "YOU WIN!"
If won = 0 Then Print "GAME OVER"
Locate 12, 14
Print "FIRE TO PLAY AGAIN"
' esperar a que se presione DISPARO de nuevo
Repeat
Wait
Until FireHit
Until 0
Y una captura de pantalla del IDE, que tiene autocompletado aunque no se muestra aquí:
Tiene editores integrados de sprites y tilemaps accesibles a la izquierda.
La herramienta aún no está terminada, me queda bastante por trabajar… Es una especie de proyecto secundario respecto al principal, que (sin ánimo de hacer spam) es un lenguaje BASIC llamado BambooBasic (www.bamboobasic.org). ¡Tomé mucho de ahí y lo implementé en Ronald4000!
No tengo una fecha formal de cuándo estará listo porque Bamboo me quita mucho tiempo, pero bueno, ¡estará listo!
En fin, ¡gracias por echarle un vistazo! ![]()
Dabzy
¡Hola, gracias por compartirlo! ¿Parece un juego inspirado en Pacman?
No puedo jugarlo (en cpcec). Carga, muestra la animación «press fire to play», pero no consigo pasar de ahí.
Si ejecuto cpcec con el cartucho de firmware, veo que he activado correctamente el joystick: las teclas de cursor muestran flechas y X y Z muestran X y Z en mayúsculas. Y Burnin’ Rubber acepta los botones 1 y 2.
Pero «Ronald in the maze» en la misma configuración de emulación se queda atascado en la animación de «press fire to play».
Con respecto al hecho de que parece ser solo para joystick, ¿puedo sugerir que sea compatible con teclado?
Si no quieres invertir en una función para redefinir teclas, tal vez prefieras hacer lo que hice yo en Just Get 9: definir varias teclas para cada uso de modo que, independientemente de sus hábitos, el jugador encuentre rápidamente algo que le funcione directamente.
Detalles en "Any-setup keys": so every player can play your game, whatever their CPC or emulator - General - CPCWiki.