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
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
Ouuuh sì, grazie
Bello! ahah, mi piace la storia di fondo
Cosa hai usato per farlo?
Lol, la storia dietro… Sì, dovevo pur mandare avanti le plot dei giochi dell’epoca, [a volte] terribili! ![]()
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! ![]()
Dabzy
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.