Ronald In The Maze (GX4000)

J’aimerais partager mon premier jeu Amstrad GX4000, Ronald In The Maze :

RolandMazeGX4000.zip (467,8 Ko)

Testé sur Arnold et Retro Virtual Machine.

Dabzy

10 « J'aime »

Ouuuh ouais, merci

2 « J'aime »

Génial ! Haha, j’aime bien l’histoire :grinning_face: Tu as utilisé quoi pour le faire ?

1 « J'aime »

Mdr, la petite histoire… Ouais, il fallait bien que je continue à faire vivre les intriges de jeu [parfois] affreuses de l’époque ! :smiley:

Eh bien, je l’ai créé avec mes propres outils, ce n’est pas encore terminé pour le moment, mais je l’appelle Ronald4000, c’est un compilateur BASIC->ASM, qui utilise RASM pour générer la cartouche finale…

À titre d’exemple, voici un petit jeu Invaders écrit avec :

'  INVADERS  -  un petit Space Invaders simple pour la GX4000
'  Écrit en Ronald BASIC

'  Sprites (matériel, aucun clignotement) :
'     emplacements 0..11 - la formation d'envahisseurs (4 x 3)
'     emplacement 12     - le canon du joueur
'     emplacement 13     - le tir du joueur
'  Images (logiciel, dessinées une fois) :
'     "bunker"           - trois blocs de bouclier en bas
'
'  Commandes :  GAUCHE/DROITE pour se déplacer,  TIR pour tirer.
'  Éliminez la vague pour gagner ; s'ils vous atteignent, c'est game over.
'  TIR pour rejouer.

Mode 1
Ink 0, 0        ' noir
Ink 1, 18       ' vert vif (texte + bunkers)
Ink 2, 6        ' rouge
Ink 3, 26       ' blanc
Border 0

Dim alive:Byte[12]

' générer + charger les motifs de sprites une fois (les 12 envahisseurs partagent le même motif)
For i = 0 To 11
  LoadSprite "invader", i
Next
LoadSprite "player", 12
LoadSprite "bullet", 13

'  boucle externe - un passage = une partie, puis redémarrage sur TIR

Repeat

  ' ---- réinitialiser l'état ----
  For i = 0 To 11
    alive[i] = 1
  Next
  remaining = 12
  score = 0
  marchX = 0
  marchY = 0
  dir = 1           ' 1 = avance vers la droite, 0 = avance vers la gauche
  tick = 0
  bAlive = 0
  px = 148
  py = 176
  gameover = 0
  won = 0

  Cls
  ' boucliers - images logicielles, peintes une fois ; les sprites glissent dessus
  DrawImage "bunker", 40, 150
  DrawImage "bunker", 148, 150
  DrawImage "bunker", 256, 150
  Locate 1, 1
  Print "SCORE ", score, "   "

  ' placer la formation et le canon
  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

  '  boucle principale du jeu

Repeat
    Wait

    ' ---- déplacer le canon ----
    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

    ' ---- tirer (un seul tir à la fois) ----
    If FireHit And bAlive = 0 Then
      bAlive = 1
      bx = px
      by = py - 8
    EndIf

    ' ---- mettre à jour le tir ----
    If bAlive = 1 Then
      by = by - 6
      If by <= 10 Then
        bAlive = 0
        SpriteHide 13
      Else
        Sprite 13, bx, by
        ' a-t-il touché un envahisseur ?
        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

    ' ---- faire avancer la formation sur minuteur (accélère quand ils sont moins nombreux) ----
    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
      ' replacer les envahisseurs vivants
      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
      ' ont-ils atteint la ligne du canon ?
      If marchY >= 92 Then gameover = 1
    EndIf

    ' ---- vague éliminée ? ----
    If remaining = 0 Then
      won = 1
      gameover = 1
    EndIf

  Until gameover = 1

  '  manche terminée - nettoyer le terrain, afficher le résultat

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"

  ' attendre un nouvel appui sur TIR
  Repeat
    Wait
  Until FireHit

Until 0

Et une capture d’écran de l’IDE, qui intègre l’autocomplétion (pas visible ici) :

Des éditeurs de sprites et de tilemaps sont intégrés et accessibles sur la gauche.

L’outil n’est pas encore fini, j’ai encore pas mal de boulot dessus… C’est un projet secondaire à côté de mon projet principal qui, sans vouloir faire du spam, est un langage BASIC appelé BambooBasic (www.bamboobasic.org). J’en ai repris pas mal de choses pour les implémenter dans Ronald4000 !

Pas encore de date précise pour la sortie parce que Bamboo me prend beaucoup de temps, mais ça sera fait !

Bref, merci d’avoir jeté un œil ! :slight_smile:

Dabzy

6 « J'aime »

Salut, merci pour le partage ! On dirait un jeu inspiré de Pacman ?

Je n’arrive pas à y jouer (dans cpcec). Il se charge, l’animation « press fire to play » tourne, mais impossible d’aller plus loin.

Si je lance cpcec avec la cartouche firmware, je vois que j’ai bien activé le joystick : les touches directionnelles affichent des flèches, et X et Z affichent X et Z en majuscules. Et Burnin’ Rubber accepte les boutons 1 et 2.

Mais « Ronald in the maze » avec la même configuration d’émulation reste bloqué sur l’animation « press fire to play ».

Concernant le fait qu’il semble fonctionner uniquement avec un joystick, puis-je suggérer de prendre en charge le clavier ?

Si tu ne souhaites pas investir du temps dans une fonctionnalité de redéfinition des touches, tu préféreras peut-être faire comme moi dans Just Get 9 : définir plusieurs touches pour chaque action afin que, quelles que soient leurs habitudes, les joueurs trouvent rapidement une configuration qui fonctionne tout simplement.

Plus de détails sur "Any-setup keys": so every player can play your game, whatever their CPC or emulator - General - CPCWiki.