Ronald In The Maze (GX4000)

Vorrei condividere il mio primo gioco per Amstrad GX4000, Ronald In The Maze:

RolandMazeGX4000.zip (467.8 KB)

Testato su Arnold e Retro Virtual Machine.

Dabzy

10 Mi Piace

Ouuuh sì, grazie

2 Mi Piace

Bello! ahah, mi piace la storia di fondo :grinning_face: Cosa hai usato per farlo?

1 Mi Piace

Lol, la storia dietro… Sì, dovevo pur mandare avanti le plot dei giochi dell’epoca, [a volte] terribili! :smiley:

Beh, l’ho fatto con i miei strumenti, al momento è ancora incompleto, ma l’ho chiamato Ronald4000: è un compilatore BASIC->ASM che usa RASM per generare la cartuccia finale…

Per fare un esempio, ecco un piccolo gioco stile Invaders scritto così:

'  INVADERS  -  un semplice Space Invaders per GX4000
'  Scritto in Ronald BASIC

'  Sprite (hardware, zero sfarfallio):
'     slot 0..11 - la formazione di alieni (4 x 3)
'     slot 12     - la nave del giocatore
'     slot 13     - il proiettile del giocatore
'  Immagini (software, disegnate una volta sola):
'     "bunker"    - tre blocchi di protezione in basso
'
'  Comandi:  SINISTRA/DESTRA per muoverti,  FUOCO per sparare.
'  Distruggi l'ondata per vincere; se ti raggiungono è game over.
'  Premere FUOCO per rigiocare.

Mode 1
Ink 0, 0        ' nero
Ink 1, 18       ' verde brillante (testo + bunker)
Ink 2, 6        ' rosso
Ink 3, 26       ' bianco
Border 0

Dim alive:Byte[12]

' crea e carica i pattern degli sprite una volta (tutti e 12 gli alieni condividono lo stesso pattern)
For i = 0 To 11
  LoadSprite "invader", i
Next
LoadSprite "player", 12
LoadSprite "bullet", 13

'  loop esterno - un passaggio = una partita, poi riparte premendo FUOCO

Repeat

  ' ---- reset stato ----
  For i = 0 To 11
    alive[i] = 1
  Next
  remaining = 12
  score = 0
  marchX = 0
  marchY = 0
  dir = 1           ' 1 = marcia a destra, 0 = marcia a sinistra
  tick = 0
  bAlive = 0
  px = 148
  py = 176
  gameover = 0
  won = 0

  Cls
  ' scudi - immagini software, disegnate una volta; gli sprite ci scorrono sopra
  DrawImage "bunker", 40, 150
  DrawImage "bunker", 148, 150
  DrawImage "bunker", 256, 150
  Locate 1, 1
  Print "SCORE ", score, "   "

  ' posiziona la formazione e il cannone
  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

  '  loop principale di gioco

Repeat
    Wait

    ' ---- muovi la nave ----
    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

    ' ---- sparo (un colpo alla volta) ----
    If FireHit And bAlive = 0 Then
      bAlive = 1
      bx = px
      by = py - 8
    EndIf

    ' ---- aggiorna il proiettile ----
    If bAlive = 1 Then
      by = by - 6
      If by <= 10 Then
        bAlive = 0
        SpriteHide 13
      Else
        Sprite 13, bx, by
        ' ha colpito un alieno?
        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

    ' ---- fa avanzare la formazione a tempo (accelera man mano che diminuiscono) ----
    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
      ' riposiziona gli alieni ancora vivi
      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
      ' hanno raggiunto la linea del cannone?
      If marchY >= 92 Then gameover = 1
    EndIf

    ' ---- ondata eliminata? ----
    If remaining = 0 Then
      won = 1
      gameover = 1
    EndIf

  Until gameover = 1

  '  fine round - pulisci il campo, mostra il risultato

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"

  ' attende una nuova pressione del tasto FUOCO
  Repeat
    Wait
  Until FireHit

Until 0

E uno screenshot dell’IDE, che ha anche l’autocompletamento (qui non mostrato):

Integrazioni per la gestione degli sprite e degli editor di tilemap sono accessibili sulla sinistra.

Lo strumento è ancora incompleto, c’è un bel po’ da lavorare… È un po’ un progetto secondario rispetto a quello principale che, senza voler fare dello spam, è un linguaggio BASIC chiamato BambooBasic (www.bamboobasic.org): ho preso molto da lì e l’ho implementato in Ronald4000!

Non c’è ancora una data ufficiale per quando sarà pronto perché Bamboo mi porta via un sacco di tempo, ma prima o poi lo finirò!

Comunque, grazie per averci dato un’occhiata! :slight_smile:

Dabzy

6 Mi Piace

Ehi, grazie per la condivisione! Sembra un gioco ispirato a Pac-Man, vero?

Non riesco a giocarci (su cpcec). Si carica, mostra l’animazione «press fire to play» ma non riesco ad andare oltre.

Se avvio cpcec con la cartuccia firmware, vedo che il joystick è abilitato correttamente: i tasti freccia mostrano le frecce e X e Z mostrano X e Z maiuscole. E Burnin’ Rubber accetta i pulsanti 1 e 2.

Ma «Ronald in the maze», con la stessa configurazione di emulazione, si blocca sull’animazione «press fire to play».

Riguardo al fatto che sembra essere solo per joystick, posso suggerire di supportare la tastiera?

Se non vuoi investire in una funzione di ridefinizione dei tasti, potresti preferire fare come ho fatto io in Just Get 9: definire diversi tasti per ogni azione, così che, a prescindere dalle proprie abitudini, il giocatore trovi rapidamente una combinazione adatta.

Dettagli su "Any-setup keys": so every player can play your game, whatever their CPC or emulator - General - CPCWiki.