Θα ήθελα να μοιραστώ το πρώτο μου παιχνίδι για το Amstrad GX4000, το Ronald In The Maze:
RolandMazeGX4000.zip (467.8 KB)
Δοκιμάστηκε σε Arnold και Retro Virtual Machine.
Dabzy
Θα ήθελα να μοιραστώ το πρώτο μου παιχνίδι για το Amstrad GX4000, το Ronald In The Maze:
RolandMazeGX4000.zip (467.8 KB)
Δοκιμάστηκε σε Arnold και Retro Virtual Machine.
Dabzy
Ουυυ ναι, ευχαριστώ
Tέλειο! haha, μ’ αρέσει η ιστορία πίσω από αυτό
Τι χρησιμοποίησες για να το φτιάξεις;
Lol, η ιστορία από πίσω… Ναι, έπρεπε να κρατήσω ζωντανές τις [μερικές φορές] απαίσιες πλοκές των παιχνιδιών εκείνης της εποχής! ![]()
Λοιπόν, το έφτιαξα με τα δικά μου εργαλεία, είναι ημιτελές προς το παρόν, αλλά το ονομάζω 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 μου τρώει πολύ χρόνο, αλλά θα γίνει!
Όπως και να 'χει, ευχαριστώ που ρίξατε μια ματιά! ![]()
Dabzy
Έι, ευχαριστώ που το μοιράστηκες! Φαίνεται παιχνίδι εμπνευσμένο από το 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.