Ronald In The Maze (GX4000)

Ich möchte mein erstes Amstrad GX4000-Spiel teilen, Ronald In The Maze:

RolandMazeGX4000.zip (467.8 KB)

Getestet auf Arnold und Retro Virtual Machine.

Dabzy

10 „Gefällt mir“

Ouuuh ja, danke

2 „Gefällt mir“

Schön! haha, ich mag die Hintergrundgeschichte :grinning_face: Womit hast du es gemacht?

1 „Gefällt mir“

Lol, die Hintergrundstory… Ja, ich musste die [manchmal] schrecklichen Spielhandlungen der damaligen Zeit einfach am Leben erhalten! :smiley:

Na ja, ich habe es mit meinen eigenen Tools gemacht, im Moment noch unvollendet, aber ich nenne es Ronald4000. Es ist ein BASIC->ASM-Compiler, der RASM nutzt, um das finale Cartridge zu erstellen…

Als Beispiel ist hier ein kleines Invaders-Spiel darin:

'  INVADERS  -  ein einfaches kleines Space Invaders für den GX4000
'  Geschrieben in Ronald BASIC

'  Sprites (Hardware, null Flackern):
'     Slots 0..11 - die Invader-Formation (4 x 3)
'     Slot 12     - die Kanone des Spielers
'     Slot 13     - das Geschoss des Spielers
'  Bilder (Software, einmal gezeichnet):
'     "bunker"    - drei Schutzblöcke am unteren Rand
'
'  Steuerung:  LINKS/RECHTS bewegen,  FIRE schießen.
'  Lösche die Welle, um zu gewinnen; wenn sie dich erreichen, heißt es Game Over.
'  FIRE spielt nochmal.

Mode 1
Ink 0, 0        ' schwarz
Ink 1, 18       ' hellgrün (Text + Bunker)
Ink 2, 6        ' rot
Ink 3, 26       ' weiß
Border 0

Dim alive:Byte[12]

' Sprite-Muster einmal einbrennen + laden (alle 12 Invader teilen sich ein Muster)
For i = 0 To 11
  LoadSprite "invader", i
Next
LoadSprite "player", 12
LoadSprite "bullet", 13

'  äußere Schleife - ein Durchlauf = ein Spiel, dann Neustart bei FIRE

Repeat

  ' ---- Status zurücksetzen ----
  For i = 0 To 11
    alive[i] = 1
  Next
  remaining = 12
  score = 0
  marchX = 0
  marchY = 0
  dir = 1           ' 1 = marschiert nach rechts, 0 = marschiert nach links
  tick = 0
  bAlive = 0
  px = 148
  py = 176
  gameover = 0
  won = 0

  Cls
  ' Schilde - Software-Bilder, einmal gezeichnet; die Sprites gleiten darüber
  DrawImage "bunker", 40, 150
  DrawImage "bunker", 148, 150
  DrawImage "bunker", 256, 150
  Locate 1, 1
  Print "SCORE ", score, "   "

  ' Formation und Kanone platzieren
  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

  '  Haupt-Spielschleife

Repeat
    Wait

    ' ---- Kanone bewegen ----
    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

    ' ---- schießen (immer nur ein Schuss gleichzeitig) ----
    If FireHit And bAlive = 0 Then
      bAlive = 1
      bx = px
      by = py - 8
    EndIf

    ' ---- Geschoss aktualisieren ----
    If bAlive = 1 Then
      by = by - 6
      If by <= 10 Then
        bAlive = 0
        SpriteHide 13
      Else
        Sprite 13, bx, by
        ' hat es einen Invader getroffen?
        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

    ' ---- Formation nach Timer marschieren lassen (wird schneller, je weniger übrig sind) ----
    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
      ' lebende Invader neu positionieren
      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
      ' haben sie die Kanonenlinie erreicht?
      If marchY >= 92 Then gameover = 1
    EndIf

    ' ---- Welle geklärt? ----
    If remaining = 0 Then
      won = 1
      gameover = 1
    EndIf

  Until gameover = 1

  '  Runde vorbei - Feld räumen, Ergebnis anzeigen

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"

  ' auf erneuten FIRE-Druck warten
  Repeat
    Wait
  Until FireHit

Until 0

Und ein Screenshot der IDE, die Autovervollständigung hat, was hier aber nicht zu sehen ist:

Sie hat eingebaute Sprite- und Tilemap-Editoren, die links zugänglich sind.

Das Tool ist noch unvollendet, ich muss noch einiges daran tun… Es ist so eine Art Nebenprojekt zu meinem Hauptprojekt – das ist, um nicht spammig zu wirken, eine BASIC-Sprache namens BambooBasic (www.bamboobasic.org). Ich habe vieles davon übernommen und in Ronald4000 implementiert!

Es gibt noch kein offizielles Datum, wann es fertig sein wird, weil Bamboo viel von meiner Zeit in Anspruch nimmt, aber es wird fertig werden!

Wie auch immer, danke fürs Reinschauen! :slight_smile:

Dabzy

6 „Gefällt mir“

Hey, danke fürs Teilen! Sieht aus wie ein Spiel, das von Pac-Man inspiriert ist?

Ich kann es leider nicht spielen (in cpcec). Es lädt und zeigt die Animation „press fire to play“, aber weiter komme ich nicht.

Wenn ich cpcec mit der Firmware-Cartridge starte, sehe ich, dass ich den Joystick richtig aktiviert habe: Die Pfeiltasten zeigen Pfeile an und X und Z zeigen Großbuchstaben X und Z. Auch Burnin’ Rubber akzeptiert Button 1 und 2.

Aber „Ronald in the maze“ bleibt im selben Emulations-Setup bei der Animation „press fire to play“ hängen.

Was die Tatsache angeht, dass es anscheinend nur mit Joystick spielbar ist: Dürfte ich vorschlagen, Tastatursteuerung zu unterstützen?

Falls du nicht in eine Funktion zum Neubelegen von Tasten investieren möchtest, ziehst du es vielleicht vor, es so zu machen wie ich in Just Get 9: Definiere einfach mehrere Tasten für jede Aktion, damit die Spieler unabhängig von ihren Gewohnheiten schnell eine Belegung finden, die einfach funktioniert.

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