CODING ★ DE L'ARCADE DE L'ACTION N°29 ★

De l'Arcade de l'Action n°29

C'est la rentrée et vous mettez probablement au point toutes les crasses que vous ferez cette année à vos profs de maths et de français. Vous faites connaissance avec de nouveaux copains et copines bien gentils. Le tout se fait bien évidemment dans un coin de la cour, à la douce lueur d'un Cent Pour Cent

Cela dit, laissez tomber la drague et venez voir ce que l'ami Poum vous a préparé pour cette rentrée.

Avant les vacances, je vous avais fait un long discours sur la structure barbare de l'écran. Pour être complet, voici un programme qui trouvera très souvent son utilité lors de l'élaboration de vos jeux. Il s'agit d'un petit curseur de la taille de l'octet, qui se déplace sur l'écran à l'aide des flèches du pavé numérique. En appuyant sur la barre d'espace, il affiche l'adresse mémoire correspondant à sa position, ainsi que ses coordonnées (avec l'abscisse allant de 1 à 80 et les ordonnées de 1 à 200). Appelez-le comme vous voulez mais ne le perdez pas. Un dernier détail, pour plus de précision au moment du déplacement, appuyez sur la touche P ( P comme pause, n'est-ce pas ? ).

LES SPRITES EN JEU

Laissons pour l'instant l'écran et passons à des choses aussi sérieuses mais plus marrantes.
A mon humble avis, un jeu d'arcade sans sprites ressemble à une tartine de beurre sans pain, qu'en dites-vous ? Mis à part quelques rares jeux comme Dark Side et compagnie, les programmeurs utilisent toujours des sprites pour leur animation, et décorent ces sprites, ou lutins si vous préférez. Ne pouvant venir du néant, les sprites sont de simples données transférées à partir d'un dessin, sous une forme plus ou moins codée en mémoire de l'ordinateur. Cela demande une technique fort simple; mais aussi bête que soient les opérations de mise en mémoire, elle échappe totalement à l'esprit tordu de certains programmeurs non confirmés et leur paraît comme un véritable casse-tête. Alors, pour vous faciliter la vie, suivez mes modestes conseils.

La première chose à faire est de se munir d'un utilitaire graphique, genre OCP, et de dessiner les sprites sur une page. Il va de soi que tout autre moyen est bon, comme, par exemple, la programmation de petits dessins avec ce merveilleux, mais ô combien lent, langage Basic. Ce qui compte, c'est d'avoir une page écran sur votre support magnétique avec plein de petits lutins (sprites) dessus. Ensuite, vous pouvez utiliser le deuxième petit programme qui doit traîner quelque part dans ces pages. Pour cela, à l'aide du premier prog., notez sur le dos de votre copie de math l'adresse des segments haut et gauche de chacun des sprites. Gardez toujours en mémoire (la vôtre, pas celle du CPC) que la forme d'un sprite est celle d'un rectangle (même si plusieurs points sont de la couleur du papier, donc transparents), et que ce segment est l'octet le plus à gauche et le plus en haut du rectangle. Comptez ensuite la hauteur en lignes et la longueur en octets de chaque sprite. Je vous rappelle qu'en mode 2, 8 pixels correspondent à un octet, qu'en mode 1 ce sont 4 pixels, et 2 en mode 0, alors que les lignes sont toujours comptées de la même façon dans les trois modes.

THE POUM'S RECAP

Pour chaque sprite vous devez connaître trois valeurs : l'adresse écran, la hauteur et la longueur. Sur la ligne 50, remplacez le NB=2 par le nombre de sprites à l'écran. La variable MEMO est la zone mémoire dans laquelle seront sauvés les sprites (donc, si 10000 vous convient, ne touchez à rien, sinon libre à vous de la changer). La dernière opération consiste à remplacer les valeurs des lignes 60 à 70 par les valeurs déjà calculées. Comme exemple dans mon programme, je sauve 2 sprites (NB=2). à partir de l'adresse 10000 (MEMO= 10000). Le premier est à l'adresse 49152 avec une hauteur de 8 lignes sur 5 octets, le deuxième est en 50054 avec 16 lignes de haut et 10 octets de large, d'accord ? Voyons un peu de quelle manière seront sauvées nos données. A l'adresse MEMO, on poke le premier octet du sprite (SHG), à MEMO+1 on poke celui qui se trouve juste à sa droite, et ainsi de suite jusqu'en fm de ligne. En deux mots, on sauve la ligne telle quelle. Notre sprite, dans l'exemple, fait 5 octets de long ; on a donc rempli de l'adresse MEMO à MEMO+4. On sauve ensuite la deuxième ligne en commençant par ME-MO+5 pour arriver en fin de compte avec une zone mémoire allant de l'adresse MEMO jusqu'à MEMO+ HAUT*LON-l. rempli par les valeurs de notre premier sprite. On placera ainsi à la queue leu leu tous les sprites et on sauve le tout dans un fichier binaire du nom de Sprites.bin. Voilà, c'est tout.

ET L'AFFICHAGE ?

Il reste à voir l'opération la plus délicate, j'entends par là l'affichage. Croyez-moi, on est loin d'avoir optimisé ce genre de routine. Souvenez; vous des premiers jeux sur nos machines (comme les démos sur les disquettes CPM fournies avec l'ordinateur), l'animation était vraiment trop nulle. Il se trouve que, plus le temps passait, plus les programmeurs se cassaient la tête pour l'élaboration de nouveaux algorithmes, comme chez Probe, avec des jeux tels Trantor, Savage, Dan Dare III, et sans oublier le tout dernier Turrican, pour ne citer que les meilleurs.

Il existe un bon nombre de routines d'affichage de sprites ; je vous rassure tout de suite, il est hors de question de les passer toutes dans ces pages, pour la simple raison que je ne suis pas une encyclopédie vivante de ce genre de programme. Pour tout vous dire, il doit exister des programmeurs qui gardent jalousement leurs secrets et qui ne les divulguent qu'à certains privilégiés, moyennant d'éventuels échanges aussi intéressants. Les routines d'affichage seront le sujet de notre rubrique le mois prochain, mais pour ne pas rester les mains vides, voici une routine très simple qui affiche les sprites sauvés par les programmes précéckms. je ne vous donne que le source, il suffit de remplacer les "?" qui suivent les "EQU" pour rendre le tout foul-compatible.

LE MOT DE LA FIN

Mais non, ne vous inquiétez pas, je ne pourrai vous laisser sans commenter le dernier listing. Comme vous le constatez, il est simple et loin d'être optimisé, mais pour commencer, c'est largement suffisant. On fait pointer HL sur la zone mémoire contenant les valeurs de nos sprites. DE vise sur l'écran et B garde dans ses mains poilues le nombre de lignes dans le sprite. Etant donné que le registre BC sera modifié au cours des opérations suivantes, on le sauve, ainsi que DE qui aura le même sort. On place le nombre d'octets à transférer par ligne dans BC, et le père LDIR balance le tout à l'écran. Il suffit alors de ressortir l'adresse écran et de calculer la suivante (celle du dessous) ; en ressortant BC, on vérifie le nombre de lignes affichées et, le cas échéant, on recommence tout.

Comme vous le voyez, j'utilise le vecteur BC26 pour le calcul qui opère sur registre HL, d'où l'inversion de HL et DE par la mnémonique EX DE.HL. Je sais, c'est pas propre, mais n'oubliez pas que cet exemple ne sert qu'à vérifier la bonne marche de la mise en mémoire de vos sprites.

Sur ce. je vous bécote rapidement, car j'ai un bus à prendre et je suis déjà très en retard. Alors atchao et à plus !

;
; https://CPCrulez.fr
;
ORG #9000
ENT $
;
LD HL,#C000
LD (HAUT+l),HL
LD HL,#FF81
LD (BAS+1),HL
;
BOUCLE PUSH BC
HAUT LD HL,#C000
CALL AFF
BAS LD HL,#FF81
CALL AFF
LD HL,(HAUT+1)
CALL #BC26
LD (HAUT+1),HL
LD HL,(BAS+1)
CALL #BC29
LD (BAS+1),HL
POP BC
DJNZ BOUCLE
RET
;
AFF LD BC,-#8000
LD D,E
LD E,L
ADD HL,BC
LD B,8
LIGNE LDI
INC BL
IHC DE
LD C,69
PAUSE DEC C
JR NZ,PAUSE
DJNZ LIGNE

Poum qu'est loin de l'autobus , ACPC n°29 oct90

★ ANNÉE: 1990
★ AUTEUR: Alain Massoumipour

Page précédente : De l'Arcade de l'Action n°28
★ AMSTRAD CPC ★ DOWNLOAD ★

Other platform tool:
» arcade29DATE: 2012-08-27
DL: 31
TYPE: ASM
SiZE: 2Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » De l'Arcade de l'Action n°32
» Coding » De l'Arcade de l'Action n°33
» Coding » De l'Arcade de l'Action n°28
» Coding » De l'Arcade de l'Action n°30
» Coding » De l'Arcade de l'Action n°31
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 539 millisecondes et consultée 1831 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.