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
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
Ouuuh ouais, merci
Génial ! Haha, j’aime bien l’histoire
Tu as utilisé quoi pour le faire ?
Mdr, la petite histoire… Ouais, il fallait bien que je continue à faire vivre les intriges de jeu [parfois] affreuses de l’époque ! ![]()
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 ! ![]()
Dabzy
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.