Ronald In The Maze (GX4000)

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

10 Me gusta

¡Uuuuh sí, gracias!

2 Me gusta

¡Qué bien! jaja, me gusta la historia detrás :grinning_face: ¿Qué usaste para hacerlo?

1 me gusta

LOL, la historia detrás… Sí, ¡tenía que mantener con vida los [a veces] horribles argumentos de los juegos de esa época! :smiley:

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! :slight_smile:

Dabzy

6 Me gusta

¡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.