Ronald In The Maze (GX4000)

Θα ήθελα να μοιραστώ το πρώτο μου παιχνίδι για το Amstrad GX4000, το Ronald In The Maze:

RolandMazeGX4000.zip (467.8 KB)

Δοκιμάστηκε σε Arnold και Retro Virtual Machine.

Dabzy

10 «Μου αρέσει»

Ουυυ ναι, ευχαριστώ

2 «Μου αρέσει»

Tέλειο! haha, μ’ αρέσει η ιστορία πίσω από αυτό :grinning_face: Τι χρησιμοποίησες για να το φτιάξεις;

1 «Μου αρέσει»

Lol, η ιστορία από πίσω… Ναι, έπρεπε να κρατήσω ζωντανές τις [μερικές φορές] απαίσιες πλοκές των παιχνιδιών εκείνης της εποχής! :smiley:

Λοιπόν, το έφτιαξα με τα δικά μου εργαλεία, είναι ημιτελές προς το παρόν, αλλά το ονομάζω Ronald4000· είναι ένας compiler από BASIC σε ASM, ο οποίος χρησιμοποιεί το RASM για να φτιάξει το τελικό cart…

Ως παράδειγμα, ορίστε ένα μικρό παιχνίδι τύπου Invaders γραμμένο σε αυτό:

'  INVADERS  -  a simple little Space Invaders for the GX4000
'  Written in Ronald BASIC

'  Sprites (hardware, zero flicker):
'     slots 0..11 - the invader formation (4 x 3)
'     slot 12     - the player cannon
'     slot 13     - the player's bullet
'  Images (software, drawn once):
'     "bunker"    - three shield blocks along the bottom
'
'  Controls:  LEFT/RIGHT move,  FIRE shoots.
'  Clear the wave to win; let them reach you and it's game over.
'  FIRE plays again.

Mode 1
Ink 0, 0        ' black
Ink 1, 18       ' bright green (text + bunkers)
Ink 2, 6        ' red
Ink 3, 26       ' white
Border 0

Dim alive:Byte[12]

' bake + load the sprite patterns once (all 12 invaders share one pattern)
For i = 0 To 11
  LoadSprite "invader", i
Next
LoadSprite "player", 12
LoadSprite "bullet", 13

'  outer loop - one pass = one game, then restart on FIRE

Repeat

  ' ---- reset state ----
  For i = 0 To 11
    alive[i] = 1
  Next
  remaining = 12
  score = 0
  marchX = 0
  marchY = 0
  dir = 1           ' 1 = marching right, 0 = marching left
  tick = 0
  bAlive = 0
  px = 148
  py = 176
  gameover = 0
  won = 0

  Cls
  ' shields - software images, painted once; the sprites glide over them
  DrawImage "bunker", 40, 150
  DrawImage "bunker", 148, 150
  DrawImage "bunker", 256, 150
  Locate 1, 1
  Print "SCORE ", score, "   "

  ' place the formation and the cannon
  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

  '  main game loop

Repeat
    Wait

    ' ---- move the cannon ----
    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

    ' ---- fire (one shot at a time) ----
    If FireHit And bAlive = 0 Then
      bAlive = 1
      bx = px
      by = py - 8
    EndIf

    ' ---- update the bullet ----
    If bAlive = 1 Then
      by = by - 6
      If by <= 10 Then
        bAlive = 0
        SpriteHide 13
      Else
        Sprite 13, bx, by
        ' did it hit an invader?
        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

    ' ---- march the formation on a timer (speeds up as they thin out) ----
    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
      ' reposition the living invaders
      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
      ' they reached the cannon line?
      If marchY >= 92 Then gameover = 1
    EndIf

    ' ---- wave cleared? ----
    If remaining = 0 Then
      won = 1
      gameover = 1
    EndIf

  Until gameover = 1

  '  round over - clear the field, show the result

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"

  ' wait for a fresh FIRE press
  Repeat
    Wait
  Until FireHit

Until 0

Και ένα screenshot από το IDE, το οποίο έχει και αυτόματη συμπλήρωση (autocomplete), αν και δεν φαίνεται εδώ:

Έχει ενσωματωμένους επεξεργαστές για sprites και tilemaps, προσβάσιμους στα αριστερά.

Το εργαλείο είναι ακόμα ημιτελές, έχω αρκετή δουλειά ακόμα… Είναι ένα παράπλευρο project σε σχέση με το κύριο μου, το οποίο (χωρίς να θέλω να κάνω spam) είναι μια γλώσσα BASIC που λέγεται BambooBasic (www.bamboobasic.org). Πήρα πολλά στοιχεία από εκεί και τα εφάρμοσα στο Ronald4000!

Δεν υπάρχει επίσημη ημερομηνία για το πότε θα ολοκληρωθεί, επειδή το Bamboo μου τρώει πολύ χρόνο, αλλά θα γίνει!

Όπως και να 'χει, ευχαριστώ που ρίξατε μια ματιά! :slight_smile:

Dabzy

6 «Μου αρέσει»

Έι, ευχαριστώ που το μοιράστηκες! Φαίνεται παιχνίδι εμπνευσμένο από το Pacman;

Δεν μπορώ να το παίξω (στο cpcec). Φορτώνει, εμφανίζει το αμφίδρομο εφέ «press fire to play», αλλά δεν μπορώ να το προσπεράσω.

Αν τρέξω το cpcec με το cartridge του firmware, βλέπω ότι έχω ενεργοποιήσει σωστά το joystick: τα πλήκτρα των βελών εμφανίζουν βέλη και τα X και Z εμφανίζουν κεφαλαία X και Z. Επίσης, το Burnin’ Rubber δέχεται τα κουμπιά 1 και 2.

Όμως το «Ronald in the maze» με την ίδια ρύθμιση εξομοίωσης κολλάει στην κινούμενη οθόνη «press fire to play».

Σχετικά με το γεγονός ότι φαίνεται να λειτουργεί μόνο με joystick, θα μπορούσα να προτείνω την υποστήριξη πληκτρολογίου;

Αν δεν θέλετε να επενδύσετε σε μια λειτουργία επαναορισμού πλήκτρων, ίσως προτιμάτε να κάνετε ό,τι έκανα κι εγώ στο Just Get 9: ορίστε διάφορα πλήκτρα για κάθε χρήση, ώστε, όποιες κι αν είναι οι συνήθειές του, ο παίκτης να βρει γρήγορα κάτι που απλά λειτουργεί.

Λεπτομέρειες στο "Any-setup keys": so every player can play your game, whatever their CPC or emulator - General - CPCWiki.