MSX Village forum

La Place des Développeurs [EN COURS] VDP Flash Pipeline Expérimentations Quelques applications sur l'approche Flash

6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 17/07/2018 à 16h05

Reprise du message précédent

Le BASIC des MSX2 est très puissants pour tout ce qui est graphique comparativement à d'autres machines 8 bits.

Et Igal nous le prouve avec ces expérimentations :) Edité par 6502man Le 17/07/2018 à 16h11


Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 20/07/2018 à 15h51
Voila je suis en train de bosser dessus:

1) Tout d'abord, pour faciliter le travail, je vais "cloner" le programme en incrémentant simplement de 10000 mon programme.
2) Ensuite, je sauvegarde sous un autre nom de programme.

A partir de la, je peux scinder "tout ou partie" du listing pour l'ajouter à la fin de mon ancien programme.
De la sorte, je peux facilement importer et dédoubler ce qui m'intéresse.
Ce n'est pas tout...Il faut évidemment considérer de nouvelles variables qui serviront au second personnage qui s'avère être ici l'ennemi.
Nb: Il suffit de ne pas intégrer de "Pseudo" intelligence artificielle et de remplacer S=STICK(0) pas T=STICK(1) pour donner les commandes à un second joueur :top

Voici donc les variables du HERO 1:
Code TEXT :
 
310 'Variables HERO 1
320 XA = 4 ' Marge Gauche du debut du cube
330 YA = 4 ' Marge Haute du debut du cube
340 XB = 4 ' Marge droite de fin du cube
350 YB = 4 ' Marge Basse de fin du cube
360 AO = 176 ' Point Haut du hero
370 AB = 207 ' Point Bas du Hero
380 AH = 25 ' Largeur du Hero
390 AV = 32 ' Hauteur du Hero
400 DR = 0 ' Variable d animation du [HERO]
410 IH = 156 ' Inversion Horizontale de l image du Hero
420 GR = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
430 Y = YA*34 ' Position PRIMA [ HERO ]
440 X = XA*20 ' Position PRIMA [ HERO ]
450 D = 1 ' Variable [ DROITE ] actif ou pas
460 G = 0 ' Variable [ GAUCHE] actif ou pas
470 SB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
480 MB = 0 ' indique [MAXIMA BOUCLE] a atteindre
490 ' Zone Visualisee
500 DA = 0
510 DB = 255
520 DC = 0
530 DD = 171
540 ' Zone tampon
550 TA = 128-XA-(AH/2)
560 TB = TA+XA+AH+XB
570 TC = 172
580 TD = TC+YA+AV+YB
 


Nb: Les lignes suivantes restent communes à tous les Héros:
490 ' Zone Visualisee
500 DA = 0
510 DB = 255
520 DC = 0
530 DD = 171

Voici maintenant les Variables du Héro 2 (ou ennemi si I.A activée).
Code TEXT :
 
10320 EA = 4 ' Marge Gauche du debut du cube
10330 FA = 4 ' Marge Haute du debut du cube
10340 EB = 4 ' Marge droite de fin du cube
10350 FB = 4 ' Marge Basse de fin du cube
10360 AP = 176 - 176' Point Haut du hero
10370 AC = 207 ' Point Bas du Hero
10380 AI = 25 ' Largeur du Hero
10390 AW = 32 ' Hauteur du Hero
10400 DS = 0 ' Variable d animation du [HERO]
10410 II = 156 ' Inversion Horizontale de l image du Hero
10420 420 GS = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
10430 F = FA*34 ' Position PRIMA [ HERO ]
10440 E = EA*24 ' Position PRIMA [ HERO ]
10450 J = 1 ' Variable [ DROITE ] actif ou pas
10460 K = 0 ' Variable [ GAUCHE] actif ou pas
10470 QB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
10480 NB = 0 ' indique [MAXIMA BOUCLE] a atteindre
10550 VA = 128-EA-(AI/2)
10560 VB = VA+EA+AI+EB
10570 VC = 172 - 172 + 40
10580 VD = VC+FA+AW+FB


Encore une fois, pour faciliter la suite de l'implantation, j'ai incrémenté de 10000 ligne pour ligne ces deux listings que je vais fusionner à la suite...

Test du résulta provisoire... Tout fonctionne normalement :top

Passons à la suite du programme ou il va falloir remplacer toutes les variables contenues dans les équations et incrémenter de 10000 ligne pour ligne.
Je fais ça dans la foulée et je vous tiens au jus si ca mouline encore :oups


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 20/07/2018 à 17h09
Bon ben voila..

Tout d'abord la vidéo pour donner l'envie de continuer :D



Bon ok..J'ai fais ça à l'arrache mais y a quand même un début de résulta qui donne envie de débugger le moulin...

A première vue, la vitesse devrait être acceptable pour peu que je résout les bugs qui semblent bouffer beaucoup de ressources en multipliant par 4 la surface des héros à déplacer :fou

Voici le listing et la source d'images pour ceux qui veulent s'y frotter :lol
Nb: A défaut d'avoir de quoi piloter du RS232, vous devez appuyer la toute première fois sur la barre d'espace pour flasher la page de fond..Puis la touche F lorsque la seconde page qui contient les héros s'affiche avec le meme background :fou

Voici un pack contenant les images:
STAGE 1.zip

Et enfin le code complet et buggé :fou
Code TEXT :
 
10 'SAUVEGARDE AU FORMAT ASCII
20 'save"EDEN030.asc",a
30 DEFINT A-Z
40 'Mode explicatif
50 CLS:LOCATE 10,4 : PRINT "Commencez par lancer la video de l'image Prima
60 LOCATE 10,6 : PRINT "Vous centrerez l'image avec les touches du clavier
70 LOCATE 10,8 : PRINT "Puis appuyez sur la barre d espace
80 LOCATE 10,10: PRINT "               Appuyez sur une touche pour commencer
90 'Attente d un input quelconque du clavier
100 IF INKEY$ = "" THEN100
110 'Ajustement vertical du "VDP FLASH PIPELINE
120 'Mode graAOique en 256 couleurs
130 SCREEN 8
140 'Couleurs du contour d ecran en Blanc
150 COLOR,,255
160 'Boucle d ajustement des variables pour SET ADJUST (X,Y)
170 ' ON STRIG permet de sortir de la boucle par appui sur la barre d espace
180 IF VDP (-2) AND 1 THEN 180 ELSE STRIG(0) ON : ON STRIG GOSUB 300 : SET ADJUST (X,Y) : S=STICK(0):ONS+1GOSUB 200,220,240,240,240,260,280,280,280:GOTO180
190 'Flash en boucle [STATIQUE]
200 COPYSCREEN:RETURN
210 'Flash si direction [HAUT]
220 COPYSCREEN:IFY=8THENRETURNELSEY=Y+1:RETURN
230 'Flash si direction [DROITE]
240 COPYSCREEN:IFX=8THENRETURNELSEX=X+1:RETURN
250 'Flash si direction [BAS]
260 COPYSCREEN:IFY=-7THENRETURNELSEY=Y-1:RETURN
270 'Flash si direction [GAUCHE]
280 COPYSCREEN:IFX=-7THENRETURNELSEX=X-1:RETURN
290 'Augmente les cycles CPU et VDP de 20%
300 VDP (10) = 0
310 'Variables HERO 1
320 XA = 4 ' Marge Gauche du debut du cube
330 YA = 4 ' Marge Haute du debut du cube
340 XB = 4 ' Marge droite de fin du cube
350 YB = 4 ' Marge Basse de fin du cube
360 AO = 176 ' Point Haut du hero
370 AB = 207 ' Point Bas du Hero
380 AH = 25 ' Largeur du Hero
390 AV = 32 ' Hauteur du Hero
400 DR = 0 ' Variable d animation du [HERO]
410 IH = 156 ' Inversion Horizontale de l image du Hero
420 GR = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
430 Y = YA*34 ' Position PRIMA [ HERO ]
440 X = XA*20 ' Position PRIMA [ HERO ]
450 D = 1 ' Variable [ DROITE ] actif ou pas
460 G = 0 ' Variable [ GAUCHE] actif ou pas
470 SB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
480 MB = 0 ' indique [MAXIMA BOUCLE] a atteindre
490 ' Zone Visualisee
500 DA = 0
510 DB = 255
520 DC = 0
530 DD = 171
540 ' Zone tampon
550 TA = 128-XA-(AH/2)
560 TB = TA+XA+AH+XB
570 TC = 172
580 TD = TC+YA+AV+YB
582 GOTO 10320
 
 
 
 
 
590 'Flash de la Page 0 
600 'RS 232 => FLASH IMAGE + ou -
610 COPYSCREEN:COPY(0,0)-(255,211),0TO(0,0),0',TPSET
620 IF INKEY$<>"f"THEN 620
630 'Flash de la Page 1
640 'Extinction du VDP 
650 DEFUSR =&H41 : A = USR (0)
660 'RS 232 => FLASH IMAGE + ou -
670 SETPAGE1:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
680 'Copie du masque de jeu vers la page [ ZERO ]
690 SETPAGE0
700 'Attente que le VDP termine sa COPIE en page [ ZERO ]
710 IF VDP (-2) AND 1 THEN 710
720 'Allumage du VDP
730  DEFUSR =&H44 : A = USR (0):'vdp(23)=vdp(23)OR&b11111111:vdp(2)=vdp(2)or32:vdp(14)=&H33:vdp(10)=vdp(10)OR4
740 'Boucle de Deplacement du [ HERO ]
750 S = STICK (0) : ONS+1 GOSUB 780,890,1060,1250,1420,1590,1740,1910,2080 : GOTO 10750
760 '********************STATIQUE************************
770 'MB definit le nombre de boucle saut maximum.
780 MB = 5 :IF G = 1 THEN GR = IH ELSE GR = 0
790 'Si la [Barre Espace utilisee alors => 2000 
800 IF STRIG (0) THEN GOSUB 2270
810 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
820 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
830 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
840 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
850 'Fin de boucle [STATIQUE]
860 RETURN
870 '*******************HAUT***************************
880 'MB definit le nombre de boucle saut maximum.
890 MB = 10: IF G = 1 THEN GR = IH ELSE GR = 0
900 'Verifie la limite du Plafond [HAUT]
910 IF Y < YA*24 THEN RETURN
920 'Si la [Barre Espace utilisee alors => 2000 
930 IF STRIG (0) THEN IF Y < YA*32 THEN RETURN ELSE 2270
940 'Permet l animation du HERO par incrementation de 25 pixels
950 DR = DR + 25 : IF DR = 100 THEN DR = 0
960 'Desincremente Y pour monter
970 Y = Y - YA
980 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
990 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1000 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1010 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1020 'Fin de la boucle [HAUT]
1030 RETURN
1040 '*******************HAUT DROITE*********************
1050 'MB definit le nombre de boucle saut maximum.
1060 MB = 10 : D = 1 : G = 0 
1070 'Si Y est inférieur a [UN] alors retour a la boucle
1080 IF Y < YA*24 THEN RETURN
1090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1100 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1110 'Si la [BARRE ESPACE] utilisee alors => 2000 
1120 IF STRIG (0) THEN GOSUB 2270
1130 'Permet l animation du [HERO] par incrementation de 25 pixels
1140 DR = DR + 25 : IF DR = 100THEN DR = 0
1150 'Valorisation X et Y
1160  X = X + XA : Y = Y - YA
1170 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1180 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1190 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1200 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1210 'Fin de la boucle [HAUT DROITE]
1220 RETURN
1230 '*********************DROITE**************************
1240 'MB definit le nombre de boucle saut maximum.
1250 MB = 5 : D = 1 : G = 0
1260 'Si la [BARRE ESPACE] utilisee alors => 2000
1270 IF STRIG (0) THEN GOSUB 2270
1280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1290 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1300 'Permet l animation du [HERO] par incrementation de 25 pixels
1310 DR = DR + 25 : IF DR = 100THEN DR = 0
1320 'Valorisation X et Y
1330 X = X + XA 
1340 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1350 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1360 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1370 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1380 'Fin de la boucle [DROITE]
1390 RETURN
1400 '**********************BAS DROITE*********************
1410 'MB definit le nombre de boucle saut maximum.
1420 MB = 2 : D = 1 : G = 0 
1430 ' Verifie la limite du seuil du sol [BAS]
1440 IF Y > YA*33 THEN RETURN
1450 'Permet l animation du [HERO] par incrementation de 25 pixels
1460 DR = DR + 25 : IF DR = 100THEN DR = 0
1470 'Valorisation X et Y
1480 X = X + XA : Y = Y + YA
1490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1510 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1520 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1530 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1540 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1550 'Fin de la boucle [BAS DROITE]
1560 RETURN
1570 '************************BAS*****************************
1580 'MB definit le nombre de boucle saut maximum.
1590 MB = 2 : IF G = 1 THEN GR = IH ELSE GR = 0
1600 ' Verifie la limite du seuil du sol [BAS]
1610  IF Y > YA*33 THEN RETURN
1620 'Permet l animation du [HERO] par incrementation de 25 pixels
1630 DR = DR + 25 : IF DR = 100THEN DR = 0
1640 'VALORISATION Y
1650 Y = Y + YA
1660 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1670 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1680 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1690 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1700 'Fin de la boucle [BAS]
1710 RETURN
1720 '*********************BAS GAUCHE***********************
1730 'MB definit le nombre de boucle saut maximum.
1740 MB = 2 : G=1 : D = 0 
1750 'Verifie la limite du seuil du sol [BAS]
1760 IF Y > YA*33 THEN RETURN
1770 'Permet l animation du [HERO] par incrementation de 25 pixels
1780 DR = DR + 25 : IF DR = 100THEN DR = 0
1790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
1800 Y = Y + YA : X = X - XA
1810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1820 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1830 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1840 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1850 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
1860 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1870 'Fin de la boucle [BAS GAUCHE]
1880 RETURN
1890 '**********************Gauche*****************************
1900 'MB definit le nombre de boucle saut maximum.
1910 MB = 5 : G = 1 : D = 0 
1920 'Permet l animation du [HERO] par incrementation de 25 pixels
1930 DR = DR + 25 : IF DR = 100THEN DR = 0
1940 'Si la [BARRE ESPACE] utilisee alors => 2000
1950 IF STRIG (0) THEN GOSUB 2270
1960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1970 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1980 'Desincremente X permettant le deplacement vers la gauche
1990 X = X - XA
2000 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2010 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2020 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2030 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2040 'Fin de la Boucle [GAUCHE]
2050 RETURN
2060 '**********************HAUT GAUCHE**********************
2070 'MB definit le nombre de boucle saut maximum.
2080 MB = 10 : G = 1: D = 0
2090 'Si Y est inférieur a [UN] alors retour a la boucle
2100 IF Y < YA*24 THEN RETURN
2110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
2120 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2130 'Si la [BARRE ESPACE] utilisee alors => 2000 
2140 IF STRIG (0) THEN GOSUB 2270
2150 'Permet l animation du [HERO] par incrementation de 25 pixels
2160 DR = DR + 25 : IF DR = 100THEN DR = 0
2170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
2180 X = X - XA : Y = Y - YA
2190 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2200 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2210 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2220 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2230 'Fin de la boucle [HAUT GAUCHE]
2240 RETURN
2250 '******************SAUT NUANCE*************************
2260 ' Si le [HERO] est trop haut alors RETURN
2270 IF Y < 100 THEN RETURN
2280 'Si le nombre de [CYCLES de SAUT SB] atteint [MB] alors 2100
2290 IF SB = MB THEN 2570 ELSE SB = SB + 1
2300 'Boucle de [SAUT PHASE MONTANTE]
2310 S=STICK(0):ONS+1GOTO 2330,2350,2370,2390,2410,2430,2450,2470,2490:GOTO2310
2320 '[STATIQUE]
2330 GOTO2500
2340 '[HAUT]
2350 GOTO2500
2360 '[HAUT DROITE]/Pieds elances droite
2370 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2380 '[DROITE]/Pieds elances droite
2390 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2400 '[DOITE BAS]/Pieds elances droite  
2410 DR = 75 : GR = 0 : X = X+4 : GOTO2500
2420 '[BAS]
2430 GOTO2500
2440 '[BAS GAUCHE]/ Pieds elances gauche
2450 DR = 75 : GR = IH : X = X-4 : GOTO2500
2460 '[GAUCHE]/Pieds elances gauche
2470 DR = 25 : GR = IH : X = X-4 : GOTO2500
2480 '[GAUCHE HAUT]/Pieds elances gauche
2490 DR = 25 : GR = IH : X = X-4 : GOTO2500
2500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2510 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2520 Y = Y - YB*2
2530 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2540 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2550 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2560 GOTO2290
2570 S=STICK(0):ONS+1GOTO 2580,2580,2590,2590,2590,2580,2590,2590,2590:GOTO2570
2580 GOTO 2610 
2590 X = X + 4 : GOTO 2610
2600 X = X - 4 : GOTO 2610
2610 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2620 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2630 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2640 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2650 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2660 IF SB = 0 THEN 2930 ELSE SB = SB - 1
2670 'Boucle de [SAUT PHASE DESCENDANTE]
2680 S=STICK(0):ONS+1GOTO2700,2720,2740,2760,2780,2800,2820,2840,2860:GOTO2680
2690 '[STATIQUE]
2700 GOTO 2870
2710 '[HAUT]
2720 GOTO 2870
2730 '[HAUT DROITE]/Pieds elances droite
2740 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2750 '[DOITE]/Pieds elances droite
2760 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2770 '[DROITE BAS]/Pieds elances
2780 DR = 75 : GR = 0 : X = X+4 : GOTO 2870
2790 '[BAS]
2800 GOTO 2870
2810 '[BAS GAUCHE]/Pieds elances gauche
2820 DR = 75 : GR = IH : X = X-4 : GOTO 2870
2830 '[GAUCHE]/Pieds elances gauche
2840 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2850 '[HAUT GAUCHE]/Pieds elances gauche
2860 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2870 COPY (X-XA,Y-YA)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2880 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+8),0,TPSET
2890 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2900 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2910 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2920 Y = Y + YB*2 : GOTO 2660
2930 RETURN:'XA = 4 : YA = 4 : RETURN
2940 'Flash de l image 0 sur la page 0
2950 'RS 232 => FLASH IMAGE + ou -
2960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
2970 'attente de l image impaire
2980 IF INKEY$<>"f"THEN 2980
2990 'Flash de l image 1 en page 1
3000 'Extinction du VDP 
3010 DEFUSR =&H41 : A = USR (0)
3020 'RS 232 => FLASH IMAGE + ou -
3030 SETPAGE1
3040 'VDP Flash
3050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
3060 'Retour en page 0
3070 SETPAGE0
3080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
3090 IF VDP (-2) AND 1 THEN 3090
3100 'Allumage du VDP
3110 DEFUSR =&H44 : A = USR (0)
3120 'Retour
3130 RETURN
 
 
10320 EA = 4 ' Marge Gauche du debut du cube
10330 FA = 4 ' Marge Haute du debut du cube
10340 EB = 4 ' Marge droite de fin du cube
10350 FB = 4 ' Marge Basse de fin du cube
10360 AP = 176 - 176' Point Haut du hero
10370 AC = 207 ' Point Bas du Hero
10380 AI = 25 ' Largeur du Hero
10390 AW = 32 ' Hauteur du Hero
10400 DS = 0 ' Variable d animation du [HERO]
10410 II = 156 ' Inversion Horizontale de l image du Hero
10420 GS = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
10430 F = FA*34 ' Position PRIMA [ HERO ]
10440 E = EA*24 ' Position PRIMA [ HERO ]
10450 J = 1 ' Variable [ DROITE ] actif ou pas
10460 K = 0 ' Variable [ GAUCHE] actif ou pas
10470 QB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
10480 NB = 0 ' indique [MAXIMA BOUCLE] a atteindre
10550 VA = 128-EA-(AI/2)
10560 VB = VA+EA+AI+EB
10570 VC = 172 - 172 + 40
10580 VD = VC+FA+AW+FB
10582 GOTO 590
 
 
10740 'Boucle de Deplacement du [ HERO ]
10750 T = STICK (1) : ONT+1 GOSUB 10780,10890,11060,11250,11420,11590,11740,11910,12080 : GOTO 750
10760 '********************STATIQUE************************
10770 'NB definit le noNBre de boucle saut maximum.
10780 NB = 5 :IF K = 1 THEN GS = II ELSE GS = 0
10790 'Si la [Barre Espace utilisee alors => 2000 
10800 IF STRIG (0) THEN GOSUB 12270
10810 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10820 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
10830 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
10840 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
10850 'Fin de boucle [STATIQUE]
10860 RETURN
10870 '*******************HAUT***************************
10880 'NB definit le noNBre de boucle saut maximum.
10890 NB = 10: IF K = 1 THEN GS = II ELSE GS = 0
10900 'Verifie la limite du Plafond [HAUT]
10910 IF F < FA*24 THEN RETURN
10920 'Si la [Barre Espace utilisee alors => 2000 
10930 IF STRIG (0) THEN IF F < FA*32 THEN RETURN ELSE 12270
10940 'Permet l animation du HERO par incrementation de 25 pixels
10950 DS = DS + 25 : IF DS = 100 THEN DS = 0
10960 'Desincremente Y pour monter
10970 F = F - FA
10980 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10990 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11000 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11010 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11020 'Fin de la boucle [HAUT]
11030 RETURN
11040 '*******************HAUT DSOITE*********************
11050 'NB definit le noNBre de boucle saut maximum.
11060 NB = 10 : J =1 : K = 0 
11070 'Si Y est inférieur a [UN] alors retour a la boucle
11080 IF F < FA*24 THEN RETURN
11090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11100 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11110 'Si la [BARRE ESPACE] utilisee alors => 2000 
11120 IF STRIG (0) THEN GOSUB 12270
11130 'Permet l animation du [HERO] par incrementation de 25 pixels
11140 DS = DS + 25 : IF DS = 100THEN DS = 0
11150 'Valorisation X et Y
11160  E = E + EA : F = F - FA
11170 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11180 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11190 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11200 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11210 'Fin de la boucle [HAUT DSOITE]
11220 RETURN
11230 '*********************DSOITE**************************
11240 'NB definit le noNBre de boucle saut maximum.
11250 NB = 5 : J =1 : K = 0
11260 'Si la [BARRE ESPACE] utilisee alors => 2000
11270 IF STRIG (0) THEN GOSUB 12270
11280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11290 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11300 'Permet l animation du [HERO] par incrementation de 25 pixels
11310 DS = DS + 25 : IF DS = 100THEN DS = 0
11320 'Valorisation X et Y
11330 E = E + EA 
11340 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11350 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11360 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11370 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11380 'Fin de la boucle [DSOITE]
11390 RETURN
11400 '**********************BAS DSOITE*********************
11410 'NB definit le noNBre de boucle saut maximum.
11420 NB = 2 : J =1 : K = 0 
11430 ' Verifie la limite du seuil du sol [BAS]
11440 IF F > FA*33 THEN RETURN
11450 'Permet l animation du [HERO] par incrementation de 25 pixels
11460 DS = DS + 25 : IF DS = 100THEN DS = 0
11470 'Valorisation X et Y
11480 E = E + EA : F = F + FA
11490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11510 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11520 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11530 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11540 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11550 'Fin de la boucle [BAS DSOITE]
11560 RETURN
11570 '************************BAS*****************************
11580 'NB definit le noNBre de boucle saut maximum.
11590 NB = 2 : IF K = 1 THEN GS = II ELSE GS = 0
11600 ' Verifie la limite du seuil du sol [BAS]
11610  IF F > FA*33 THEN RETURN
11620 'Permet l animation du [HERO] par incrementation de 25 pixels
11630 DS = DS + 25 : IF DS = 100THEN DS = 0
11640 'VALORISATION Y
11650 F = F + FA
11660 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11670 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11680 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11690 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11700 'Fin de la boucle [BAS]
11710 RETURN
11720 '*********************BAS GAUCHE***********************
11730 'NB definit le noNBre de boucle saut maximum.
11740 NB = 2 : K = 1 : J =0 
11750 'Verifie la limite du seuil du sol [BAS]
11760 IF F > FA*33 THEN RETURN
11770 'Permet l animation du [HERO] par incrementation de 25 pixels
11780 DS = DS + 25 : IF DS = 100THEN DS = 0
11790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
11800 F = F + FA : E = E - EA
11810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11820 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11830 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11840 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11850 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
11860 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
11870 'Fin de la boucle [BAS GAUCHE]
11880 RETURN
11890 '**********************Gauche*****************************
11900 'NB definit le noNBre de boucle saut maximum.
11910 NB = 5 : K = 1 : J =0 
11920 'Permet l animation du [HERO] par incrementation de 25 pixels
11930 DS = DS + 25 : IF DS = 100THEN DS = 0
11940 'Si la [BARRE ESPACE] utilisee alors => 2000
11950 IF STRIG (0) THEN GOSUB 12270
11960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11970 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11980 'Desincremente X permettant le deplacement vers la gauche
11990 E = E - EA
12000 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12010 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12020 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12030 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
12040 'Fin de la Boucle [GAUCHE]
12050 RETURN
12060 '**********************HAUT GAUCHE**********************
12070 'NB definit le noNBre de boucle saut maximum.
12080 NB = 10 : K = 1: J =0
12090 'Si Y est inférieur a [UN] alors retour a la boucle
12100 IF F < FA*24 THEN RETURN
12110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
12120 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12130 'Si la [BARRE ESPACE] utilisee alors => 2000 
12140 IF STRIG (0) THEN GOSUB 12270
12150 'Permet l animation du [HERO] par incrementation de 25 pixels
12160 DS = DS + 25 : IF DS = 100THEN DS = 0
12170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
12180 E = E - EA : F = F - FA
12190 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12200 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12210 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12220 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
12230 'Fin de la boucle [HAUT GAUCHE]
12240 RETURN
12250 '******************SAUT NUANCE*************************
12260 ' Si le [HERO] est trop haut alors RETURN
12270 IF F < 100 THEN RETURN
12280 'Si le noNBre de [CYCLES de SAUT QB] atteint [NB] alors 2100
12290 IF QB = NB THEN 12570 ELSE QB = QB + 1
12300 'Boucle de [SAUT PHASE MONTANTE]
12310 S=STICK(0):ONS+1GOTO 12330,12350,12370,12390,12410,12430,12450,12470,12490:GOTO12310
12320 '[STATIQUE]
12330 GOTO12500
12340 '[HAUT]
12350 GOTO12500
12360 '[HAUT DSOITE]/Pieds elances DSoite
12370 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12380 '[DSOITE]/Pieds elances DSoite
12390 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12400 '[DOITE BAS]/Pieds elances DSoite  
12410 DS = 75 : GS = 0 : E = E+4 : GOTO12500
12420 '[BAS]
12430 GOTO12500
12440 '[BAS GAUCHE]/ Pieds elances gauche
12450 DS = 75 : GS = II : E = E-4 : GOTO12500
12460 '[GAUCHE]/Pieds elances gauche
12470 DS = 25 : GS = II : E = E-4 : GOTO12500
12480 '[GAUCHE HAUT]/Pieds elances gauche
12490 DS = 25 : GS = II : E = E-4 : GOTO12500
12500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12510 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12520 F = F - FB*2
12530 COPY (E-EA,Y)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12540 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12550 COPY (VA,VC)-(VC,VD),0 TO (E-EA,Y),0
12560 GOTO12290
12570 S=STICK(0):ONS+1GOTO 12580,12580,12590,12590,12590,12580,12590,12590,12590:GOTO12570
12580 GOTO 12610 
12590 E = E + 4 : GOTO 12610
12600 E = E - 4 : GOTO 12610
12610 COPY (E-EA,Y)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12620 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12630 COPY (VA,VC)-(VC,VD),0 TO (E-EA,Y),0
12640 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12650 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12660 IF QB = 0 THEN 12930 ELSE QB = QB - 1
12670 'Boucle de [SAUT PHASE DESCENDANTE]
12680 S=STICK(0):ONS+1GOTO12700,12720,12740,12760,12780,12800,12820,12840,12860:GOTO12680
12690 '[STATIQUE]
12700 GOTO 12870
12710 '[HAUT]
12720 GOTO 12870
12730 '[HAUT DSOITE]/Pieds elances DSoite
12740 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12750 '[DOITE]/Pieds elances DSoite
12760 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12770 '[DSOITE BAS]/Pieds elances
12780 DS = 75 : GS = 0 : E = E+4 : GOTO 12870
12790 '[BAS]
12800 GOTO 12870
12810 '[BAS GAUCHE]/Pieds elances gauche
12820 DS = 75 : GS = II : E = E-4 : GOTO 12870
12830 '[GAUCHE]/Pieds elances gauche
12840 DS = 25 : GS = II : E = E-4 : GOTO 12870
12850 '[HAUT GAUCHE]/Pieds elances gauche
12860 DS = 25 : GS = II : E = E-4 : GOTO 12870
12870 COPY (E-EA,F-FA)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12880 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+8),0,TPSET
12890 COPY (VA,VC)-(VC,VD),0 TO (E-EA,F-FA),0
12900 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12910 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12920 F = F + FB*2 : GOTO 12660
12930 RETURN:'EA = 4 : FA = 4 : RETURN
12940 'Flash de l image 0 sur la page 0
12950 'RS 232 => FLASH IMAGE + ou -
12960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
12970 'attente de l image impaire
12980 IF INKEY$<>"f"THEN 12980
12990 'Flash de l image 1 en page 1
13000 'Extinction du VDP 
13010 DEFUSR =&H41 : A = USR (0)
13020 'RS 232 => FLASH IMAGE + ou -
13030 SETPAGE1
13040 'VDP Flash
13050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
13060 'Retour en page 0
13070 SETPAGE0
13080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
13090 IF VDP (-2) AND 1 THEN 13090
13100 'Allumage du VDP
13110 DEFUSR =&H44 : A = USR (0)
13120 'Retour
13130 RETURN
 
 


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 20/07/2018 à 20h17
la tu as fait fort, il faut appuyer sur CTRL sinon out of memory


:noel
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 21/07/2018 à 09h45
j'ai fait une petite version sans COPY SCREEN pour ceux qui n'ont pas de digitaliseur ;)
conversion de l'image en .SC8 et modifs dans le programme
barbare.dsk

en réglant BlueMSX a 10% on voit les erreurs dans les COPY une bande horizontale derriére le heros et une verticale sous le 2éme perso


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/07/2018 à 11h29
Salut Jipe:

Après deux heures à dégugger, le résulta est encourageant.


Le héro 2 (possible candidat à l'I.A) est correctement affiché, il se déplace correctement dans tous les sens.

Actuellement:
Le Héro 1 (Musclor) répond aux touches directionnelles du clavier dans les 8 directions.
Le Héro 2 (Ninja) répond à la manette sur le port No 1. (j'ai mappé les touches directionnelles du pavé numérique pour simuler la manette)

Les Héros 1 et 2 répondent à la même commande STRIG à savoir:
IF STRIG (0) THEN GOSUB ...
En fait, ils sautent tantôt l'un, tantôt l'autre à tour de rôle.


Reste à résoudre les problèmes suivants:

1) Actuellement les deux héros sautent tantot l'un et tantot l'autre en répondant à la commande suivante:
IF STRIG (0) THEN GOSUB ...
J'ai vu qu'il existe 5 STRIG différents allant de 0 pour le la [Barre d'espace], 1 et 2 pour les boutons de la manette 1 et enfin 2 et 3 pour la manette 2 :top
Ca devrait pas être trop compliqué.

2) Toujours à propos des sauts:
Actuellement, lorsqu'un saut est en cours, "la boucle générale" est suspendue le temps que le héro termine son saut!
Cela n'a plus de sens puisque les deux personnages doivent pouvoir se mouvoir librement quelque soit l'action de l'autre joueur!

3) Le chevauchement des héros l'un à l'autre génère des clignotements.
Ces clignotements sont la conséquence de l'affichage alterné du [Faux sprite Ninja] au [Faux sprite Musclor].
Va falloir envisager une "troisième zone de travail" pour afficher ces clignotements hors champs visuel et en copier le "résulta stable" sur la page visible.
Nb: Les Carrés figés des héros tout en haut et tout en bas de l'écran sont destinés en réalité à la page cachée 1 et non pas sur la page visible 0 comme actuellement. Je les laisse ici provisoirement pour faciliter la visualisation du travail en cours ;)

Ca vous plait! :tchin :tchin :tchin

Voici le code pour le bonheur des petits et des grands:
Code TEXT :
 
10 'SAUVEGARDE AU FORMAT ASCII
20 'save"EDEN030.asc",a
30 DEFINT A-Z
40 'Mode explicatif
50 CLS:LOCATE 10,4 : PRINT "Commencez par lancer la video de l'image Prima
60 LOCATE 10,6 : PRINT "Vous centrerez l'image avec les touches du clavier
70 LOCATE 10,8 : PRINT "Puis appuyez sur la barre d espace
80 LOCATE 10,10: PRINT "               Appuyez sur une touche pour commencer
90 'Attente d un input quelconque du clavier
100 IF INKEY$ = "" THEN100
110 'Ajustement vertical du "VDP FLASH PIPELINE
120 'Mode graAOique en 256 couleurs
130 SCREEN 8
140 'Couleurs du contour d ecran en Blanc
150 COLOR,,255
160 'Boucle d ajustement des variables pour SET ADJUST (X,Y)
170 ' ON STRIG permet de sortir de la boucle par appui sur la barre d espace
180 IF VDP (-2) AND 1 THEN 180 ELSE STRIG(0) ON : ON STRIG GOSUB 300 : SET ADJUST (X,Y) : S=STICK(0):ONS+1GOSUB 200,220,240,240,240,260,280,280,280:GOTO180
190 'Flash en boucle [STATIQUE]
200 COPYSCREEN:RETURN
210 'Flash si direction [HAUT]
220 COPYSCREEN:IFY=8THENRETURNELSEY=Y+1:RETURN
230 'Flash si direction [DROITE]
240 COPYSCREEN:IFX=8THENRETURNELSEX=X+1:RETURN
250 'Flash si direction [BAS]
260 COPYSCREEN:IFY=-7THENRETURNELSEY=Y-1:RETURN
270 'Flash si direction [GAUCHE]
280 COPYSCREEN:IFX=-7THENRETURNELSEX=X-1:RETURN
290 'Augmente les cycles CPU et VDP de 20%
300 VDP (10) = 0
310 'Variables HERO 1
320 XA = 4 ' Marge Gauche du debut du cube
330 YA = 4 ' Marge Haute du debut du cube
340 XB = 4 ' Marge droite de fin du cube
350 YB = 4 ' Marge Basse de fin du cube
360 AO = 176 ' Point Haut du hero
370 AB = 207 ' Point Bas du Hero
380 AH = 25 ' Largeur du Hero
390 AV = 32 ' Hauteur du Hero
400 DR = 0 ' Variable d animation du [HERO]
410 IH = 156 ' Inversion Horizontale de l image du Hero
420 GR = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
430 Y = YA*34 ' Position PRIMA [ HERO ]
440 X = XA*20 ' Position PRIMA [ HERO ]
450 D = 1 ' Variable [ DROITE ] actif ou pas
460 G = 0 ' Variable [ GAUCHE] actif ou pas
470 SB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
480 MB = 0 ' indique [MAXIMA BOUCLE] a atteindre
490 ' Zone Visualisee
500 DA = 0
510 DB = 255
520 DC = 0
530 DD = 171
540 ' Zone tampon
550 TA = 128-XA-(AH/2)
560 TB = TA+XA+AH+XB
570 TC = 172
580 TD = TC+YA+AV+YB
582 GOTO 10320
590 'Flash de la Page 0 
600 'RS 232 => FLASH IMAGE + ou -
610 COPYSCREEN:COPY(0,0)-(255,211),0TO(0,0),0',TPSET
620 IF INKEY$<>"f"THEN 620
630 'Flash de la Page 1
640 'Extinction du VDP 
650 DEFUSR =&H41 : A = USR (0)
660 'RS 232 => FLASH IMAGE + ou -
670 SETPAGE1:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
680 'Copie du masque de jeu vers la page [ ZERO ]
690 SETPAGE0
700 'Attente que le VDP termine sa COPIE en page [ ZERO ]
710 IF VDP (-2) AND 1 THEN 710
720 'Allumage du VDP
730  DEFUSR =&H44 : A = USR (0):'vdp(23)=vdp(23)OR&b11111111:vdp(2)=vdp(2)or32:vdp(14)=&H33:vdp(10)=vdp(10)OR4
740 'Boucle de Deplacement du [ HERO ]
750 S = STICK (0) : ONS+1 GOSUB 780,890,1060,1250,1420,1590,1740,1910,2080 : GOTO 10750
760 '********************STATIQUE************************
770 'MB definit le nombre de boucle saut maximum.
780 MB = 5 :IF G = 1 THEN GR = IH ELSE GR = 0
790 'Si la [Barre Espace utilisee alors => 2000 
800 IF STRIG (0) THEN GOSUB 2270
810 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
820 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
830 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
840 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
850 'Fin de boucle [STATIQUE]
860 RETURN
870 '*******************HAUT***************************
880 'MB definit le nombre de boucle saut maximum.
890 MB = 10: IF G = 1 THEN GR = IH ELSE GR = 0
900 'Verifie la limite du Plafond [HAUT]
910 IF Y < YA*24 THEN RETURN
920 'Si la [Barre Espace utilisee alors => 2000 
930 IF STRIG (0) THEN IF Y < YA*32 THEN RETURN ELSE 2270
940 'Permet l animation du HERO par incrementation de 25 pixels
950 DR = DR + 25 : IF DR = 100 THEN DR = 0
960 'Desincremente Y pour monter
970 Y = Y - YA
980 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
990 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1000 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1010 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1020 'Fin de la boucle [HAUT]
1030 RETURN
1040 '*******************HAUT DROITE*********************
1050 'MB definit le nombre de boucle saut maximum.
1060 MB = 10 : D = 1 : G = 0 
1070 'Si Y est inférieur a [UN] alors retour a la boucle
1080 IF Y < YA*24 THEN RETURN
1090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1100 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1110 'Si la [BARRE ESPACE] utilisee alors => 2000 
1120 IF STRIG (0) THEN GOSUB 2270
1130 'Permet l animation du [HERO] par incrementation de 25 pixels
1140 DR = DR + 25 : IF DR = 100THEN DR = 0
1150 'Valorisation X et Y
1160  X = X + XA : Y = Y - YA
1170 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1180 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1190 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1200 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1210 'Fin de la boucle [HAUT DROITE]
1220 RETURN
1230 '*********************DROITE**************************
1240 'MB definit le nombre de boucle saut maximum.
1250 MB = 5 : D = 1 : G = 0
1260 'Si la [BARRE ESPACE] utilisee alors => 2000
1270 IF STRIG (0) THEN GOSUB 2270
1280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1290 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1300 'Permet l animation du [HERO] par incrementation de 25 pixels
1310 DR = DR + 25 : IF DR = 100THEN DR = 0
1320 'Valorisation X et Y
1330 X = X + XA 
1340 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1350 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1360 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1370 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1380 'Fin de la boucle [DROITE]
1390 RETURN
1400 '**********************BAS DROITE*********************
1410 'MB definit le nombre de boucle saut maximum.
1420 MB = 2 : D = 1 : G = 0 
1430 ' Verifie la limite du seuil du sol [BAS]
1440 IF Y > YA*33 THEN RETURN
1450 'Permet l animation du [HERO] par incrementation de 25 pixels
1460 DR = DR + 25 : IF DR = 100THEN DR = 0
1470 'Valorisation X et Y
1480 X = X + XA : Y = Y + YA
1490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1510 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1520 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1530 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1540 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1550 'Fin de la boucle [BAS DROITE]
1560 RETURN
1570 '************************BAS*****************************
1580 'MB definit le nombre de boucle saut maximum.
1590 MB = 2 : IF G = 1 THEN GR = IH ELSE GR = 0
1600 ' Verifie la limite du seuil du sol [BAS]
1610  IF Y > YA*33 THEN RETURN
1620 'Permet l animation du [HERO] par incrementation de 25 pixels
1630 DR = DR + 25 : IF DR = 100THEN DR = 0
1640 'VALORISATION Y
1650 Y = Y + YA
1660 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1670 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1680 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1690 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1700 'Fin de la boucle [BAS]
1710 RETURN
1720 '*********************BAS GAUCHE***********************
1730 'MB definit le nombre de boucle saut maximum.
1740 MB = 2 : G=1 : D = 0 
1750 'Verifie la limite du seuil du sol [BAS]
1760 IF Y > YA*33 THEN RETURN
1770 'Permet l animation du [HERO] par incrementation de 25 pixels
1780 DR = DR + 25 : IF DR = 100THEN DR = 0
1790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
1800 Y = Y + YA : X = X - XA
1810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1820 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1830 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1840 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1850 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
1860 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1870 'Fin de la boucle [BAS GAUCHE]
1880 RETURN
1890 '**********************Gauche*****************************
1900 'MB definit le nombre de boucle saut maximum.
1910 MB = 5 : G = 1 : D = 0 
1920 'Permet l animation du [HERO] par incrementation de 25 pixels
1930 DR = DR + 25 : IF DR = 100THEN DR = 0
1940 'Si la [BARRE ESPACE] utilisee alors => 2000
1950 IF STRIG (0) THEN GOSUB 2270
1960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1970 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1980 'Desincremente X permettant le deplacement vers la gauche
1990 X = X - XA
2000 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2010 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2020 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2030 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2040 'Fin de la Boucle [GAUCHE]
2050 RETURN
2060 '**********************HAUT GAUCHE**********************
2070 'MB definit le nombre de boucle saut maximum.
2080 MB = 10 : G = 1: D = 0
2090 'Si Y est inférieur a [UN] alors retour a la boucle
2100 IF Y < YA*24 THEN RETURN
2110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
2120 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2130 'Si la [BARRE ESPACE] utilisee alors => 2000 
2140 IF STRIG (0) THEN GOSUB 2270
2150 'Permet l animation du [HERO] par incrementation de 25 pixels
2160 DR = DR + 25 : IF DR = 100THEN DR = 0
2170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
2180 X = X - XA : Y = Y - YA
2190 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2200 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2210 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2220 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2230 'Fin de la boucle [HAUT GAUCHE]
2240 RETURN
2250 '******************SAUT NUANCE*************************
2260 ' Si le [HERO] est trop haut alors RETURN
2270 IF Y < 100 THEN RETURN
2280 'Si le nombre de [CYCLES de SAUT SB] atteint [MB] alors 2100
2290 IF SB = MB THEN 2570 ELSE SB = SB + 1
2300 'Boucle de [SAUT PHASE MONTANTE]
2310 S=STICK(0):ONS+1GOTO 2330,2350,2370,2390,2410,2430,2450,2470,2490:GOTO2310
2320 '[STATIQUE]
2330 GOTO2500
2340 '[HAUT]
2350 GOTO2500
2360 '[HAUT DROITE]/Pieds elances droite
2370 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2380 '[DROITE]/Pieds elances droite
2390 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2400 '[DOITE BAS]/Pieds elances droite  
2410 DR = 75 : GR = 0 : X = X+4 : GOTO2500
2420 '[BAS]
2430 GOTO2500
2440 '[BAS GAUCHE]/ Pieds elances gauche
2450 DR = 75 : GR = IH : X = X-4 : GOTO2500
2460 '[GAUCHE]/Pieds elances gauche
2470 DR = 25 : GR = IH : X = X-4 : GOTO2500
2480 '[GAUCHE HAUT]/Pieds elances gauche
2490 DR = 25 : GR = IH : X = X-4 : GOTO2500
2500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2510 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2520 Y = Y - YB*2
2530 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2540 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2550 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2560 GOTO2290
2570 S=STICK(0):ONS+1GOTO 2580,2580,2590,2590,2590,2580,2590,2590,2590:GOTO2570
2580 GOTO 2610 
2590 X = X + 4 : GOTO 2610
2600 X = X - 4 : GOTO 2610
2610 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2620 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2630 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2640 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2650 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2660 IF SB = 0 THEN 2930 ELSE SB = SB - 1
2670 'Boucle de [SAUT PHASE DESCENDANTE]
2680 S=STICK(0):ONS+1GOTO2700,2720,2740,2760,2780,2800,2820,2840,2860:GOTO2680
2690 '[STATIQUE]
2700 GOTO 2870
2710 '[HAUT]
2720 GOTO 2870
2730 '[HAUT DROITE]/Pieds elances droite
2740 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2750 '[DOITE]/Pieds elances droite
2760 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2770 '[DROITE BAS]/Pieds elances
2780 DR = 75 : GR = 0 : X = X+4 : GOTO 2870
2790 '[BAS]
2800 GOTO 2870
2810 '[BAS GAUCHE]/Pieds elances gauche
2820 DR = 75 : GR = IH : X = X-4 : GOTO 2870
2830 '[GAUCHE]/Pieds elances gauche
2840 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2850 '[HAUT GAUCHE]/Pieds elances gauche
2860 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2870 COPY (X-XA,Y-YA)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2880 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+8),0,TPSET
2890 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2900 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2910 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2920 Y = Y + YB*2 : GOTO 2660
2930 RETURN:'XA = 4 : YA = 4 : RETURN
2940 'Flash de l image 0 sur la page 0
2950 'RS 232 => FLASH IMAGE + ou -
2960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
2970 'attente de l image impaire
2980 IF INKEY$<>"f"THEN 2980
2990 'Flash de l image 1 en page 1
3000 'Extinction du VDP 
3010 DEFUSR =&H41 : A = USR (0)
3020 'RS 232 => FLASH IMAGE + ou -
3030 SETPAGE1
3040 'VDP Flash
3050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
3060 'Retour en page 0
3070 SETPAGE0
3080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
3090 IF VDP (-2) AND 1 THEN 3090
3100 'Allumage du VDP
3110 DEFUSR =&H44 : A = USR (0)
3120 'Retour
3130 RETURN
10320 EA = 4 ' Marge Gauche du debut du cube
10330 FA = 4 ' Marge Haute du debut du cube
10340 EB = 4 ' Marge droite de fin du cube
10350 FB = 4 ' Marge Basse de fin du cube
10360 AP = 176 - 172' Point Haut du hero
10370 AC = 207 - 172' Point Bas du Hero
10380 AI = 25 ' Largeur du Hero
10390 AW = 31 ' Hauteur du Hero
10400 DS = 0 ' Variable d animation du [HERO]
10410 II = 156 ' Inversion Horizontale de l image du Hero
10420 GS = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
10430 F = FA*34 ' Position PRIMA [ HERO ]
10440 E = EA*20 ' Position PRIMA [ HERO ]
10450 J = 1 ' Variable [ DROITE ] actif ou pas
10460 K = 0 ' Variable [ GAUCHE] actif ou pas
10470 QB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
10480 NB = 0 ' indique [MAXIMA BOUCLE] a atteindre
10550 VA = 128-EA-(AI/2)
10560 VB = VA+EA+AI+EB
10570 VC = 172 - 172
10580 VD = VC+FA+AW+FB
10582 GOTO 590
10740 'Boucle de Deplacement du [ HERO ]
10750 T = STICK (1) : ONT+1 GOSUB 10780,10890,11060,11250,11420,11590,11740,11910,12080 : GOTO 750
10760 '********************STATIQUE************************
10770 'NB definit le noNBre de boucle saut maximum.
10780 NB = 5 :IF K = 1 THEN GS = II ELSE GS = 0
10790 'Si la [Barre Espace utilisee alors => 2000 
10800 IF STRIG (0) THEN GOSUB 12270
10810 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10820 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
10830 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
10840 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
10850 'Fin de boucle [STATIQUE]
10860 RETURN
10870 '*******************HAUT***************************
10880 'NB definit le noNBre de boucle saut maximum.
10890 NB = 10: IF K = 1 THEN GS = II ELSE GS = 0
10900 'Verifie la limite du Plafond [HAUT]
10910 IF F < FA*24 THEN RETURN
10920 'Si la [Barre Espace utilisee alors => 2000 
10930 IF STRIG (0) THEN IF F < FA*32 THEN RETURN ELSE 12270
10940 'Permet l animation du HERO par incrementation de 25 pixels
10950 DS = DS + 25 : IF DS = 100 THEN DS = 0
10960 'Desincremente Y pour monter
10970 F = F - FA
10980 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10990 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11000 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11010 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11020 'Fin de la boucle [HAUT]
11030 RETURN
11040 '*******************HAUT DSOITE*********************
11050 'NB definit le noNBre de boucle saut maximum.
11060 NB = 10 : J =1 : K = 0 
11070 'Si Y est inférieur a [UN] alors retour a la boucle
11080 IF F < FA*24 THEN RETURN
11090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11100 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11110 'Si la [BARRE ESPACE] utilisee alors => 2000 
11120 IF STRIG (0) THEN GOSUB 12270
11130 'Permet l animation du [HERO] par incrementation de 25 pixels
11140 DS = DS + 25 : IF DS = 100THEN DS = 0
11150 'Valorisation X et Y
11160  E = E + EA : F = F - FA
11170 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11180 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11190 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11200 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11210 'Fin de la boucle [HAUT DSOITE]
11220 RETURN
11230 '*********************DSOITE**************************
11240 'NB definit le noNBre de boucle saut maximum.
11250 NB = 5 : J =1 : K = 0
11260 'Si la [BARRE ESPACE] utilisee alors => 2000
11270 IF STRIG (0) THEN GOSUB 12270
11280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11290 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11300 'Permet l animation du [HERO] par incrementation de 25 pixels
11310 DS = DS + 25 : IF DS = 100THEN DS = 0
11320 'Valorisation X et Y
11330 E = E + EA 
11340 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11350 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11360 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11370 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11380 'Fin de la boucle [DSOITE]
11390 RETURN
11400 '**********************BAS DSOITE*********************
11410 'NB definit le noNBre de boucle saut maximum.
11420 NB = 2 : J =1 : K = 0 
11430 ' Verifie la limite du seuil du sol [BAS]
11440 IF F > FA*33 THEN RETURN
11450 'Permet l animation du [HERO] par incrementation de 25 pixels
11460 DS = DS + 25 : IF DS = 100THEN DS = 0
11470 'Valorisation X et Y
11480 E = E + EA : F = F + FA
11490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11510 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11520 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11530 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11540 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11550 'Fin de la boucle [BAS DSOITE]
11560 RETURN
11570 '************************BAS*****************************
11580 'NB definit le noNBre de boucle saut maximum.
11590 NB = 2 : IF K = 1 THEN GS = II ELSE GS = 0
11600 ' Verifie la limite du seuil du sol [BAS]
11610  IF F > FA*33 THEN RETURN
11620 'Permet l animation du [HERO] par incrementation de 25 pixels
11630 DS = DS + 25 : IF DS = 100THEN DS = 0
11640 'VALORISATION Y
11650 F = F + FA
11660 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11670 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11680 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11690 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11700 'Fin de la boucle [BAS]
11710 RETURN
11720 '*********************BAS GAUCHE***********************
11730 'NB definit le noNBre de boucle saut maximum.
11740 NB = 2 : K = 1 : J =0 
11750 'Verifie la limite du seuil du sol [BAS]
11760 IF F > FA*33 THEN RETURN
11770 'Permet l animation du [HERO] par incrementation de 25 pixels
11780 DS = DS + 25 : IF DS = 100THEN DS = 0
11790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
11800 F = F + FA : E = E - EA
11810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11820 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11830 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11840 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11850 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
11860 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11870 'Fin de la boucle [BAS GAUCHE]
11880 RETURN
11890 '**********************Gauche*****************************
11900 'NB definit le noNBre de boucle saut maximum.
11910 NB = 5 : K = 1 : J =0 
11920 'Permet l animation du [HERO] par incrementation de 25 pixels
11930 DS = DS + 25 : IF DS = 100THEN DS = 0
11940 'Si la [BARRE ESPACE] utilisee alors => 2000
11950 IF STRIG (0) THEN GOSUB 12270
11960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11970 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11980 'Desincremente X permettant le deplacement vers la gauche
11990 E = E - EA
12000 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12010 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12020 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12030 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12040 'Fin de la Boucle [GAUCHE]
12050 RETURN
12060 '**********************HAUT GAUCHE**********************
12070 'NB definit le noNBre de boucle saut maximum.
12080 NB = 10 : K = 1: J =0
12090 'Si Y est inférieur a [UN] alors retour a la boucle
12100 IF F < FA*24 THEN RETURN
12110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
12120 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12130 'Si la [BARRE ESPACE] utilisee alors => 2000 
12140 IF STRIG (0) THEN GOSUB 12270
12150 'Permet l animation du [HERO] par incrementation de 25 pixels
12160 DS = DS + 25 : IF DS = 100THEN DS = 0
12170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
12180 E = E - EA : F = F - FA
12190 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12200 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12210 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12220 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12230 'Fin de la boucle [HAUT GAUCHE]
12240 RETURN
12250 '******************SAUT NUANCE*************************
12260 ' Si le [HERO] est trop haut alors RETURN
12270 IF F < 100 THEN RETURN
12280 'Si le noNBre de [CYCLES de SAUT QB] atteint [NB] alors 2100
12290 IF QB = NB THEN 12570 ELSE QB = QB + 1
12300 'Boucle de [SAUT PHASE MONTANTE]
12310 S=STICK(0):ONS+1GOTO 12330,12350,12370,12390,12410,12430,12450,12470,12490:GOTO12310
12320 '[STATIQUE]
12330 GOTO12500
12340 '[HAUT]
12350 GOTO12500
12360 '[HAUT DSOITE]/Pieds elances DSoite
12370 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12380 '[DSOITE]/Pieds elances DSoite
12390 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12400 '[DOITE BAS]/Pieds elances DSoite  
12410 DS = 75 : GS = 0 : E = E+4 : GOTO12500
12420 '[BAS]
12430 GOTO12500
12440 '[BAS GAUCHE]/ Pieds elances gauche
12450 DS = 75 : GS = II : E = E-4 : GOTO12500
12460 '[GAUCHE]/Pieds elances gauche
12470 DS = 25 : GS = II : E = E-4 : GOTO12500
12480 '[GAUCHE HAUT]/Pieds elances gauche
12490 DS = 25 : GS = II : E = E-4 : GOTO12500
12500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12510 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12520 F = F - FB*2
12530 COPY (E-EA,Y)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12540 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12550 COPY (VA,VC)-(VB,VD),0 TO (E-EA,Y),0
12560 GOTO12290
12570 S=STICK(0):ONS+1GOTO 12580,12580,12590,12590,12590,12580,12590,12590,12590:GOTO12570
12580 GOTO 12610 
12590 E = E + 4 : GOTO 12610
12600 E = E - 4 : GOTO 12610
12610 COPY (E-EA,Y)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12620 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12630 COPY (VA,VC)-(VB,VD),0 TO (E-EA,Y),0
12640 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12650 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12660 IF QB = 0 THEN 12930 ELSE QB = QB - 1
12670 'Boucle de [SAUT PHASE DESCENDANTE]
12680 S=STICK(0):ONS+1GOTO12700,12720,12740,12760,12780,12800,12820,12840,12860:GOTO12680
12690 '[STATIQUE]
12700 GOTO 12870
12710 '[HAUT]
12720 GOTO 12870
12730 '[HAUT DSOITE]/Pieds elances DSoite
12740 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12750 '[DOITE]/Pieds elances DSoite
12760 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12770 '[DSOITE BAS]/Pieds elances
12780 DS = 75 : GS = 0 : E = E+4 : GOTO 12870
12790 '[BAS]
12800 GOTO 12870
12810 '[BAS GAUCHE]/Pieds elances gauche
12820 DS = 75 : GS = II : E = E-4 : GOTO 12870
12830 '[GAUCHE]/Pieds elances gauche
12840 DS = 25 : GS = II : E = E-4 : GOTO 12870
12850 '[HAUT GAUCHE]/Pieds elances gauche
12860 DS = 25 : GS = II : E = E-4 : GOTO 12870
12870 COPY (E-EA,F-FA)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12880 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+8),0,TPSET
12890 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12900 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12910 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12920 F = F + FB*2 : GOTO 12660
12930 RETURN:'EA = 4 : FA = 4 : RETURN
12940 'Flash de l image 0 sur la page 0
12950 'RS 232 => FLASH IMAGE + ou -
12960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
12970 'attente de l image impaire
12980 IF INKEY$<>"f"THEN 12980
12990 'Flash de l image 1 en page 1
13000 'Extinction du VDP 
13010 DEFUSR =&H41 : A = USR (0)
13020 'RS 232 => FLASH IMAGE + ou -
13030 SETPAGE1
13040 'VDP Flash
13050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
13060 'Retour en page 0
13070 SETPAGE0
13080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
13090 IF VDP (-2) AND 1 THEN 13090
13100 'Allumage du VDP
13110 DEFUSR =&H44 : A = USR (0)
13120 'Retour
13130 RETURN

 
Edité par igal Le 21/07/2018 à 11h32


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 21/07/2018 à 11h36
j'espére que tu as gagné des lignes de code pour libérer de la place pour l'I.A
c'est du a quoi le bug sur la tête du perso violet ?


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/07/2018 à 11h57
Salut Jipe:

Ce n'est pas un bug. En fait j'utilise la version "Trial" de "Magic Caméra" qui affiche donc un bandeau blanc en haut de l'écran ou il est écrit [WebCam effect by Magic Caméra].

Concernant, l'I.A:
J'ai pensé à intégré le code en lieu et place des Variables de déplacement et sauts du Héro 2 (le Ninja).

Dans la pratique, mis à part la "prévisibilité du comportement", le Ninja sera ni plus ni moins rapide qu'actuellement!
La seule inconnue pour moi reste l'intégration du RND dont a parlé Sylvain qui devra apporter un réel plus à ma vision actuelle de la Pseudo I.A
En effet, si l'ennemi se contente de [Monter] lorsque le joueur [Monte], [Descendre] lorsque le joueur [Descend], ça deviendrait très vite chiant parce que beaucoup trop prévisible.

si nécessaire, je nettoierai le listing de toutes les remarques qui prennent beaucoup de mémoire mais sont très utiles à l'évolution du moulin :D

M'en vais essayer le Barbare.DSK que tu as fais :jesors


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/07/2018 à 12h17
@Jipe: Ton adaptation pour ceux qui ne possèdent pas de digitaliseur est une très bonne idée :top

A ce propos, je me permet d'apporter la précision suivante:

1) Chaque image est en doublon!
2) l'image qui contient [Background en partie] + [ Héros phases d'animations] va sur la page cachée [1].
3) la page qui contient [Background complet] + [badeau d'item] va sur la page visible [0].

Nb: les deux carrés d'animation restants figés en [haut] et en [Bas] de l'écran sont destinés in fine à la page caché [1] et non pas à la page visible [0] comme ils le sont actuellement.
Je les ai mis sur la page visible [0] juste pour me faciliter les débugg éventuels!

j'essais de fixer le reste du programme (sauts et clignotements) d'ici la fin de semaine :p Edité par igal Le 21/07/2018 à 12h18


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 21/07/2018 à 12h54
la nouvelle version ici
barbare2.dsk


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 21/07/2018 à 18h11
Et voila.. J'avais le choix entre [H & M] ou alors camper sur le canapé pour continuer le débug..

Cette fois les deux héros peuvent se balader dans toutes les directions, toutes les diagonales et faire des sauts dans tous les sens bref... tout est ok.

Reste modifier légèrement la [boucle propre au saut] avec un GOSUB de sorte à "rendre la main" provisoirement au moteur principal de sorte à ce que l'autre héro puisse être libre de ses mouvements pendant que le saut de l'autre héro se déroule.. "Frame par frame" lol

Une fois que cela sera fait, j'aviserai pour ajouter une "Troisième" fenêtre d'animation réservée au chevauchement des deux héros.
Pour info, le principe de chevauchement reste le même si par exemple l'un des héros passe [Derrière un arbre]... Pour le coup, l'arbre (ou tout autre objet en avant plan) peut être considérer comme un "héro"/"personnage"/"protagoniste".. etc...

L'avantage avec les objets en avant plan est qu'ils sont immobiles et devraient être plus léger à gérer...

Code TEXT :
 
10 'SAUVEGARDE AU FORMAT ASCII
20 'save"EDEN031.asc",a
30 DEFINT A-Z
40 'Mode explicatif
50 CLS:LOCATE 10,4 : PRINT "Commencez par lancer la video de l'image Prima
60 LOCATE 10,6 : PRINT "Vous centrerez l'image avec les touches du clavier
70 LOCATE 10,8 : PRINT "Puis appuyez sur la barre d espace
80 LOCATE 10,10: PRINT "               Appuyez sur une touche pour commencer
90 'Attente d un input quelconque du clavier
100 IF INKEY$ = "" THEN100
110 'Ajustement vertical du "VDP FLASH PIPELINE
120 'Mode graAOique en 256 couleurs
130 SCREEN 8
140 'Couleurs du contour d ecran en Blanc
150 COLOR,,255
160 'Boucle d ajustement des variables pour SET ADJUST (X,Y)
170 ' ON STRIG permet de sortir de la boucle par appui sur la barre d espace
180 IF VDP (-2) AND 1 THEN 180 ELSE STRIG(0) ON : ON STRIG GOSUB 300 : SET ADJUST (X,Y) : S=STICK(0):ONS+1GOSUB 200,220,240,240,240,260,280,280,280:GOTO180
190 'Flash en boucle [STATIQUE]
200 COPYSCREEN:RETURN
210 'Flash si direction [HAUT]
220 COPYSCREEN:IFY=8THENRETURNELSEY=Y+1:RETURN
230 'Flash si direction [DROITE]
240 COPYSCREEN:IFX=8THENRETURNELSEX=X+1:RETURN
250 'Flash si direction [BAS]
260 COPYSCREEN:IFY=-7THENRETURNELSEY=Y-1:RETURN
270 'Flash si direction [GAUCHE]
280 COPYSCREEN:IFX=-7THENRETURNELSEX=X-1:RETURN
290 'Augmente les cycles CPU et VDP de 20%
300 VDP (10) = 0
310 'Variables HERO 1
320 XA = 4 ' Marge Gauche du debut du cube
330 YA = 4 ' Marge Haute du debut du cube
340 XB = 4 ' Marge droite de fin du cube
350 YB = 4 ' Marge Basse de fin du cube
360 AO = 176 ' Point Haut du hero
370 AB = 207 ' Point Bas du Hero
380 AH = 25 ' Largeur du Hero
390 AV = 32 ' Hauteur du Hero
400 DR = 0 ' Variable d animation du [HERO]
410 IH = 156 ' Inversion Horizontale de l image du Hero
420 GR = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
430 Y = YA*34 ' Position PRIMA [ HERO ]
440 X = XA*20 ' Position PRIMA [ HERO ]
450 D = 1 ' Variable [ DROITE ] actif ou pas
460 G = 0 ' Variable [ GAUCHE] actif ou pas
470 SB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
480 MB = 0 ' indique [MAXIMA BOUCLE] a atteindre
490 ' Zone Visualisee
500 DA = 0
510 DB = 255
520 DC = 0
530 DD = 171
540 ' Zone tampon
550 TA = 128-XA-(AH/2)
560 TB = TA+XA+AH+XB
570 TC = 172
580 TD = TC+YA+AV+YB
582 GOTO 10320
590 'Flash de la Page 0 
600 'RS 232 => FLASH IMAGE + ou -
610 COPYSCREEN:COPY(0,0)-(255,211),0TO(0,0),0',TPSET
620 IF INKEY$<>"f"THEN 620
630 'Flash de la Page 1
640 'Extinction du VDP 
650 DEFUSR =&H41 : A = USR (0)
660 'RS 232 => FLASH IMAGE + ou -
670 SETPAGE1:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
680 'Copie du masque de jeu vers la page [ ZERO ]
690 SETPAGE0
700 'Attente que le VDP termine sa COPIE en page [ ZERO ]
710 IF VDP (-2) AND 1 THEN 710
720 'Allumage du VDP
730  DEFUSR =&H44 : A = USR (0):'vdp(23)=vdp(23)OR&b11111111:vdp(2)=vdp(2)or32:vdp(14)=&H33:vdp(10)=vdp(10)OR4
740 'Boucle de Deplacement du [ HERO ]
750 S = STICK (0) : ONS+1 GOSUB 780,890,1060,1250,1420,1590,1740,1910,2080 : GOTO 10750
760 '********************STATIQUE************************
770 'MB definit le nombre de boucle saut maximum.
780 MB = 5 :IF G = 1 THEN GR = IH ELSE GR = 0
790 'Si la [Barre Espace utilisee alors => 2000 
800 IF STRIG (0) THEN GOSUB 2270
810 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
820 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
830 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
840 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
850 'Fin de boucle [STATIQUE]
860 RETURN
870 '*******************HAUT***************************
880 'MB definit le nombre de boucle saut maximum.
890 MB = 10: IF G = 1 THEN GR = IH ELSE GR = 0
900 'Verifie la limite du Plafond [HAUT]
910 IF Y < YA*24 THEN RETURN
920 'Si la [Barre Espace utilisee alors => 2000 
930 IF STRIG (0) THEN IF Y < YA*32 THEN RETURN ELSE 2270
940 'Permet l animation du HERO par incrementation de 25 pixels
950 DR = DR + 25 : IF DR = 100 THEN DR = 0
960 'Desincremente Y pour monter
970 Y = Y - YA
980 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
990 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1000 COPY (0+GR+DR,AO)-(24+GR+DR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1010 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1020 'Fin de la boucle [HAUT]
1030 RETURN
1040 '*******************HAUT DROITE*********************
1050 'MB definit le nombre de boucle saut maximum.
1060 MB = 10 : D = 1 : G = 0 
1070 'Si Y est inférieur a [UN] alors retour a la boucle
1080 IF Y < YA*24 THEN RETURN
1090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1100 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1110 'Si la [BARRE ESPACE] utilisee alors => 2000 
1120 IF STRIG (0) THEN GOSUB 2270
1130 'Permet l animation du [HERO] par incrementation de 25 pixels
1140 DR = DR + 25 : IF DR = 100THEN DR = 0
1150 'Valorisation X et Y
1160  X = X + XA : Y = Y - YA
1170 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1180 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1190 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1200 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1210 'Fin de la boucle [HAUT DROITE]
1220 RETURN
1230 '*********************DROITE**************************
1240 'MB definit le nombre de boucle saut maximum.
1250 MB = 5 : D = 1 : G = 0
1260 'Si la [BARRE ESPACE] utilisee alors => 2000
1270 IF STRIG (0) THEN GOSUB 2270
1280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1290 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1300 'Permet l animation du [HERO] par incrementation de 25 pixels
1310 DR = DR + 25 : IF DR = 100THEN DR = 0
1320 'Valorisation X et Y
1330 X = X + XA 
1340 'Mise en Tampon [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1350 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1360 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1370 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1380 'Fin de la boucle [DROITE]
1390 RETURN
1400 '**********************BAS DROITE*********************
1410 'MB definit le nombre de boucle saut maximum.
1420 MB = 2 : D = 1 : G = 0 
1430 ' Verifie la limite du seuil du sol [BAS]
1440 IF Y > YA*33 THEN RETURN
1450 'Permet l animation du [HERO] par incrementation de 25 pixels
1460 DR = DR + 25 : IF DR = 100THEN DR = 0
1470 'Valorisation X et Y
1480 X = X + XA : Y = Y + YA
1490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
1500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
1510 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1520 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1530 COPY (DR,AO)-(DR+24,AB),1 TO (TA+XA,TC+YA),0,TPSET
1540 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1550 'Fin de la boucle [BAS DROITE]
1560 RETURN
1570 '************************BAS*****************************
1580 'MB definit le nombre de boucle saut maximum.
1590 MB = 2 : IF G = 1 THEN GR = IH ELSE GR = 0
1600 ' Verifie la limite du seuil du sol [BAS]
1610  IF Y > YA*33 THEN RETURN
1620 'Permet l animation du [HERO] par incrementation de 25 pixels
1630 DR = DR + 25 : IF DR = 100THEN DR = 0
1640 'VALORISATION Y
1650 Y = Y + YA
1660 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1670 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1680 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+YA),0,TPSET
1690 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1700 'Fin de la boucle [BAS]
1710 RETURN
1720 '*********************BAS GAUCHE***********************
1730 'MB definit le nombre de boucle saut maximum.
1740 MB = 2 : G=1 : D = 0 
1750 'Verifie la limite du seuil du sol [BAS]
1760 IF Y > YA*33 THEN RETURN
1770 'Permet l animation du [HERO] par incrementation de 25 pixels
1780 DR = DR + 25 : IF DR = 100THEN DR = 0
1790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
1800 Y = Y + YA : X = X - XA
1810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1820 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1830 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
1840 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
1850 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
1860 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
1870 'Fin de la boucle [BAS GAUCHE]
1880 RETURN
1890 '**********************Gauche*****************************
1900 'MB definit le nombre de boucle saut maximum.
1910 MB = 5 : G = 1 : D = 0 
1920 'Permet l animation du [HERO] par incrementation de 25 pixels
1930 DR = DR + 25 : IF DR = 100THEN DR = 0
1940 'Si la [BARRE ESPACE] utilisee alors => 2000
1950 IF STRIG (0) THEN GOSUB 2270
1960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
1970 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
1980 'Desincremente X permettant le deplacement vers la gauche
1990 X = X - XA
2000 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2010 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2020 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2030 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2040 'Fin de la Boucle [GAUCHE]
2050 RETURN
2060 '**********************HAUT GAUCHE**********************
2070 'MB definit le nombre de boucle saut maximum.
2080 MB = 10 : G = 1: D = 0
2090 'Si Y est inférieur a [UN] alors retour a la boucle
2100 IF Y < YA*24 THEN RETURN
2110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
2120 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2130 'Si la [BARRE ESPACE] utilisee alors => 2000 
2140 IF STRIG (0) THEN GOSUB 2270
2150 'Permet l animation du [HERO] par incrementation de 25 pixels
2160 DR = DR + 25 : IF DR = 100THEN DR = 0
2170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
2180 X = X - XA : Y = Y - YA
2190 'Mise en Tampon du [Back ground]/[Hero]=> Puis affiche tout en page [ZERO]
2200 COPY (X-XA,Y-YA)-(X+AH+XB,Y+AV+YB),1 TO (TA,TC),0
2210 COPY (DR+IH,AO)-(DR+24+IH,AB),1 TO (TA+XA,TC+YA),0,TPSET
2220 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2230 'Fin de la boucle [HAUT GAUCHE]
2240 RETURN
2250 '******************SAUT NUANCE*************************
2260 ' Si le [HERO] est trop haut alors RETURN
2270 IF Y < 100 THEN RETURN
2280 'Si le nombre de [CYCLES de SAUT SB] atteint [MB] alors 2100
2290 IF SB = MB THEN 2570 ELSE SB = SB + 1
2300 'Boucle de [SAUT PHASE MONTANTE]
2310 S=STICK(0):ONS+1GOTO 2330,2350,2370,2390,2410,2430,2450,2470,2490:GOTO2310
2320 '[STATIQUE]
2330 GOTO2500
2340 '[HAUT]
2350 GOTO2500
2360 '[HAUT DROITE]/Pieds elances droite
2370 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2380 '[DROITE]/Pieds elances droite
2390 DR = 25 : GR = 0 : X = X+4 : GOTO2500
2400 '[DOITE BAS]/Pieds elances droite  
2410 DR = 75 : GR = 0 : X = X+4 : GOTO2500
2420 '[BAS]
2430 GOTO2500
2440 '[BAS GAUCHE]/ Pieds elances gauche
2450 DR = 75 : GR = IH : X = X-4 : GOTO2500
2460 '[GAUCHE]/Pieds elances gauche
2470 DR = 25 : GR = IH : X = X-4 : GOTO2500
2480 '[GAUCHE HAUT]/Pieds elances gauche
2490 DR = 25 : GR = IH : X = X-4 : GOTO2500
2500 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2510 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2520 Y = Y - YB*2
2530 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2540 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2550 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2560 GOTO2290
2570 S=STICK(0):ONS+1GOTO 2580,2580,2590,2590,2590,2580,2590,2590,2590:GOTO2570
2580 GOTO 2610 
2590 X = X + 4 : GOTO 2610
2600 X = X - 4 : GOTO 2610
2610 COPY (X-XA,Y)-(X+AH+XB,Y+YA+AV+YB),1 TO (TA,TC),0
2620 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC),0,TPSET
2630 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y),0
2640 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2650 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2660 IF SB = 0 THEN 2930 ELSE SB = SB - 1
2670 'Boucle de [SAUT PHASE DESCENDANTE]
2680 S=STICK(0):ONS+1GOTO2700,2720,2740,2760,2780,2800,2820,2840,2860:GOTO2680
2690 '[STATIQUE]
2700 GOTO 2870
2710 '[HAUT]
2720 GOTO 2870
2730 '[HAUT DROITE]/Pieds elances droite
2740 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2750 '[DOITE]/Pieds elances droite
2760 DR = 25 : GR = 0 : X = X+4 : GOTO 2870
2770 '[DROITE BAS]/Pieds elances
2780 DR = 75 : GR = 0 : X = X+4 : GOTO 2870
2790 '[BAS]
2800 GOTO 2870
2810 '[BAS GAUCHE]/Pieds elances gauche
2820 DR = 75 : GR = IH : X = X-4 : GOTO 2870
2830 '[GAUCHE]/Pieds elances gauche
2840 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2850 '[HAUT GAUCHE]/Pieds elances gauche
2860 DR = 25 : GR = IH : X = X-4 : GOTO 2870
2870 COPY (X-XA,Y-YA)-(X+AH+XB,Y+YA+AV+YB-4),1 TO (TA,TC),0
2880 COPY (DR+GR,AO)-(DR+24+GR,AB),1 TO (TA+XA,TC+8),0,TPSET
2890 COPY (TA,TC)-(TB,TD),0 TO (X-XA,Y-YA),0
2900 IF X>240 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=4 : GOSUB 2960
2910 IF X<4 THEN COPY (X-XA,Y-YA) - (X+AH+XB,Y+AV+YB),1 TO (X-XA,Y-YA),0 : X=240 : GOSUB 2960
2920 Y = Y + YB*2 : GOTO 2660
2930 RETURN:'XA = 4 : YA = 4 : RETURN
2940 'Flash de l image 0 sur la page 0
2950 'RS 232 => FLASH IMAGE + ou -
2960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
2970 'attente de l image impaire
2980 IF INKEY$<>"f"THEN 2980
2990 'Flash de l image 1 en page 1
3000 'Extinction du VDP 
3010 DEFUSR =&H41 : A = USR (0)
3020 'RS 232 => FLASH IMAGE + ou -
3030 SETPAGE1
3040 'VDP Flash
3050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
3060 'Retour en page 0
3070 SETPAGE0
3080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
3090 IF VDP (-2) AND 1 THEN 3090
3100 'Allumage du VDP
3110 DEFUSR =&H44 : A = USR (0)
3120 'Retour
3130 RETURN
10320 EA = 4 ' Marge Gauche du debut du cube
10330 FA = 4 ' Marge Haute du debut du cube
10340 EB = 4 ' Marge droite de fin du cube
10350 FB = 4 ' Marge Basse de fin du cube
10360 AP = 176 - 172' Point Haut du hero
10370 AC = 207 - 172' Point Bas du Hero
10380 AI = 25 ' Largeur du Hero
10390 AW = 31 ' Hauteur du Hero
10400 DS = 0 ' Variable d animation du [HERO]
10410 II = 156 ' Inversion Horizontale de l image du Hero
10420 GS = 0 ' 1 = Face Hero vers la Droite: 0 Face Hero vers la Gauche
10430 F = FA*34 ' Position PRIMA [ HERO ]
10440 E = EA*20 ' Position PRIMA [ HERO ]
10450 J = 1 ' Variable [ DROITE ] actif ou pas
10460 K = 0 ' Variable [ GAUCHE] actif ou pas
10470 QB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
10480 NB = 0 ' indique [MAXIMA BOUCLE] a atteindre
10550 VA = 128-EA-(AI/2)
10560 VB = VA+EA+AI+EB
10570 VC = 172 - 172
10580 VD = VC+FA+AW+FB
10582 GOTO 590
10740 'Boucle de Deplacement du [ HERO ]
10750 T = STICK (1) : ONT+1 GOSUB 10780,10890,11060,11250,11420,11590,11740,11910,12080 : GOTO 750
10760 '********************STATIQUE************************
10770 'NB definit le noNBre de boucle saut maximum.
10780 NB = 5 :IF K = 1 THEN GS = II ELSE GS = 0
10790 'Si la [Barre Espace utilisee alors => 2000 
10800 IF STRIG (1) THEN GOSUB 12270
10810 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10820 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
10830 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
10840 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
10850 'Fin de boucle [STATIQUE]
10860 RETURN
10870 '*******************HAUT***************************
10880 'NB definit le noNBre de boucle saut maximum.
10890 NB = 10: IF K = 1 THEN GS = II ELSE GS = 0
10900 'Verifie la limite du Plafond [HAUT]
10910 IF F < FA*24 THEN RETURN
10920 'Si la [Barre Espace utilisee alors => 2000 
10930 IF STRIG (1) THEN IF F < FA*32 THEN RETURN ELSE 12270
10940 'Permet l animation du HERO par incrementation de 25 pixels
10950 DS = DS + 25 : IF DS = 100 THEN DS = 0
10960 'Desincremente Y pour monter
10970 F = F - FA
10980 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
10990 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11000 COPY (0+GS+DS,AP)-(24+GS+DS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11010 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11020 'Fin de la boucle [HAUT]
11030 RETURN
11040 '*******************HAUT DSOITE*********************
11050 'NB definit le noNBre de boucle saut maximum.
11060 NB = 10 : J =1 : K = 0 
11070 'Si Y est inférieur a [UN] alors retour a la boucle
11080 IF F < FA*24 THEN RETURN
11090 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11100 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11110 'Si la [BARRE ESPACE] utilisee alors => 2000 
11120 IF STRIG (1) THEN GOSUB 12270
11130 'Permet l animation du [HERO] par incrementation de 25 pixels
11140 DS = DS + 25 : IF DS = 100THEN DS = 0
11150 'Valorisation X et Y
11160  E = E + EA : F = F - FA
11170 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11180 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11190 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11200 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11210 'Fin de la boucle [HAUT DSOITE]
11220 RETURN
11230 '*********************DSOITE**************************
11240 'NB definit le noNBre de boucle saut maximum.
11250 NB = 5 : J =1 : K = 0
11260 'Si la [BARRE ESPACE] utilisee alors => 2000
11270 IF STRIG (1) THEN GOSUB 12270
11280 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11290 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11300 'Permet l animation du [HERO] par incrementation de 25 pixels
11310 DS = DS + 25 : IF DS = 100THEN DS = 0
11320 'Valorisation X et Y
11330 E = E + EA 
11340 'Mise en Tampon [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11350 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11360 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11370 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11380 'Fin de la boucle [DSOITE]
11390 RETURN
11400 '**********************BAS DSOITE*********************
11410 'NB definit le noNBre de boucle saut maximum.
11420 NB = 2 : J =1 : K = 0 
11430 ' Verifie la limite du seuil du sol [BAS]
11440 IF F > FA*33 THEN RETURN
11450 'Permet l animation du [HERO] par incrementation de 25 pixels
11460 DS = DS + 25 : IF DS = 100THEN DS = 0
11470 'Valorisation X et Y
11480 E = E + EA : F = F + FA
11490 'Si [X] est superieur a "240" alors [X] est egal a "0" et GOTO 300 
11500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
11510 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11520 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11530 COPY (DS,AP)-(DS+24,AC),1 TO (VA+EA,VC+FA),0,TPSET
11540 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11550 'Fin de la boucle [BAS DSOITE]
11560 RETURN
11570 '************************BAS*****************************
11580 'NB definit le noNBre de boucle saut maximum.
11590 NB = 2 : IF K = 1 THEN GS = II ELSE GS = 0
11600 ' Verifie la limite du seuil du sol [BAS]
11610  IF F > FA*33 THEN RETURN
11620 'Permet l animation du [HERO] par incrementation de 25 pixels
11630 DS = DS + 25 : IF DS = 100THEN DS = 0
11640 'VALORISATION Y
11650 F = F + FA
11660 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11670 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11680 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+FA),0,TPSET
11690 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11700 'Fin de la boucle [BAS]
11710 RETURN
11720 '*********************BAS GAUCHE***********************
11730 'NB definit le noNBre de boucle saut maximum.
11740 NB = 2 : K = 1 : J =0 
11750 'Verifie la limite du seuil du sol [BAS]
11760 IF F > FA*33 THEN RETURN
11770 'Permet l animation du [HERO] par incrementation de 25 pixels
11780 DS = DS + 25 : IF DS = 100THEN DS = 0
11790 'Incremente X et Y permettant la diagonale [BAS GAUCHE]
11800 F = F + FA : E = E - EA
11810 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11820 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11830 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
11840 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
11850 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
11860 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
11870 'Fin de la boucle [BAS GAUCHE]
11880 RETURN
11890 '**********************Gauche*****************************
11900 'NB definit le noNBre de boucle saut maximum.
11910 NB = 5 : K = 1 : J =0 
11920 'Permet l animation du [HERO] par incrementation de 25 pixels
11930 DS = DS + 25 : IF DS = 100THEN DS = 0
11940 'Si la [BARRE ESPACE] utilisee alors => 2000
11950 IF STRIG (1) THEN GOSUB 12270
11960 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
11970 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
11980 'Desincremente X permettant le deplacement vers la gauche
11990 E = E - EA
12000 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12010 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12020 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12030 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12040 'Fin de la Boucle [GAUCHE]
12050 RETURN
12060 '**********************HAUT GAUCHE**********************
12070 'NB definit le noNBre de boucle saut maximum.
12080 NB = 10 : K = 1: J =0
12090 'Si Y est inférieur a [UN] alors retour a la boucle
12100 IF F < FA*24 THEN RETURN
12110 'Si le bord [GAUCHE] est atteint alors aller flasher en ligne 300
12120 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12130 'Si la [BARRE ESPACE] utilisee alors => 2000 
12140 IF STRIG (1) THEN GOSUB 12270
12150 'Permet l animation du [HERO] par incrementation de 25 pixels
12160 DS = DS + 25 : IF DS = 100THEN DS = 0
12170 'Desincremente X et Y permettant la diagonale [HAUT GAUCHE]
12180 E = E - EA : F = F - FA
12190 'Mise en Tampon du [Back GSound]/[Hero]=> Puis affiche tout en page [ZERO]
12200 COPY (E-EA,F-FA)-(E+AI+EB,F+AW+FB),1 TO (VA,VC),0
12210 COPY (DS+II,AP)-(DS+24+II,AC),1 TO (VA+EA,VC+FA),0,TPSET
12220 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12230 'Fin de la boucle [HAUT GAUCHE]
12240 RETURN
12250 '******************SAUT NUANCE*************************
12260 ' Si le [HERO] est trop haut alors RETURN
12270 IF F < 100 THEN RETURN
12280 'Si le noNBre de [CYCLES de SAUT QB] atteint [NB] alors 2100
12290 IF QB = NB THEN 12570 ELSE QB = QB + 1
12300 'Boucle de [SAUT PHASE MONTANTE]
12310 T=STICK(1):ONT+1GOTO 12330,12350,12370,12390,12410,12430,12450,12470,12490:GOTO12310
12320 '[STATIQUE]
12330 GOTO12500
12340 '[HAUT]
12350 GOTO12500
12360 '[HAUT DSOITE]/Pieds elances DSoite
12370 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12380 '[DSOITE]/Pieds elances DSoite
12390 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12400 '[DOITE BAS]/Pieds elances DSoite  
12410 DS = 75 : GS = 0 : E = E+4 : GOTO12500
12420 '[BAS]
12430 GOTO12500
12440 '[BAS GAUCHE]/ Pieds elances gauche
12450 DS = 75 : GS = II : E = E-4 : GOTO12500
12460 '[GAUCHE]/Pieds elances gauche
12470 DS = 25 : GS = II : E = E-4 : GOTO12500
12480 '[GAUCHE HAUT]/Pieds elances gauche
12490 DS = 25 : GS = II : E = E-4 : GOTO12500
12500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12510 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12520 F = F - FB*2
12530 COPY (E-EA,F)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12540 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12550 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F),0
12560 GOTO12290
12570 T=STICK(1):ONT+1GOTO 12580,12580,12590,12590,12590,12580,12590,12590,12590:GOTO12570
12580 GOTO 12610
12590 E = E + 4 : GOTO 12610
12600 E = E - 4 : GOTO 12610
12610 COPY (E-EA,F)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),0
12620 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),0,TPSET
12630 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F),0
12640 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12650 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12660 IF QB = 0 THEN 12930 ELSE QB = QB - 1
12670 'Boucle de [SAUT PHASE DESCENDANTE]
12680 T=STICK(1):ONT+1GOTO12700,12720,12740,12760,12780,12800,12820,12840,12860:GOTO12680
12690 '[STATIQUE]
12700 GOTO 12870
12710 '[HAUT]
12720 GOTO 12870
12730 '[HAUT DSOITE]/Pieds elances DSoite
12740 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12750 '[DOITE]/Pieds elances DSoite
12760 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12770 '[DSOITE BAS]/Pieds elances
12780 DS = 75 : GS = 0 : E = E+4 : GOTO 12870
12790 '[BAS]
12800 GOTO 12870
12810 '[BAS GAUCHE]/Pieds elances gauche
12820 DS = 75 : GS = II : E = E-4 : GOTO 12870
12830 '[GAUCHE]/Pieds elances gauche
12840 DS = 25 : GS = II : E = E-4 : GOTO 12870
12850 '[HAUT GAUCHE]/Pieds elances gauche
12860 DS = 25 : GS = II : E = E-4 : GOTO 12870
12870 COPY (E-EA,F-FA)-(E+AI+EB,F+FA+AW+FB-4),1 TO (VA,VC),0
12880 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+8),0,TPSET
12890 COPY (VA,VC)-(VB,VD),0 TO (E-EA,F-FA),0
12900 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12910 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12920 F = F + FB*2 : GOTO 12660
12930 RETURN:'EA = 4 : FA = 4 : RETURN
12940 'Flash de l image 0 sur la page 0
12950 'RS 232 => FLASH IMAGE + ou -
12960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
12970 'attente de l image impaire
12980 IF INKEY$<>"f"THEN 12980
12990 'Flash de l image 1 en page 1
13000 'Extinction du VDP 
13010 DEFUSR =&H41 : A = USR (0)
13020 'RS 232 => FLASH IMAGE + ou -
13030 SETPAGE1
13040 'VDP Flash
13050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
13060 'Retour en page 0
13070 SETPAGE0
13080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
13090 IF VDP (-2) AND 1 THEN 13090
13100 'Allumage du VDP
13110 DEFUSR =&H44 : A = USR (0)
13120 'Retour
13130 RETURN

 


@ suivre ;) Edité par igal Le 21/07/2018 à 18h12


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 21/07/2018 à 18h47
la derniére version en disquette
j'utilise Context pour modifier rapidement et sauvegarder le code ASCII ;)
barbare3.dsk


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 22/07/2018 à 18h58
J'ai passé un bonne partie de la journée à nettoyer le code.

J'ai viré de nombreux commentaires qui étaient à l'intérieur de la boucle principale, déplacé avantageusement les toutes les phases de copies des héros et j'ai apporté quelques modifications.
Au final, le programme est passé de 27ko à 16Ko seulement :top

Dorénavant, les héros peuvent se déplacer à reculons pour faire face à un ennemi tout en revenant sur ses pas!
Trois possibilités pour regarder dans la direction ou l'on se déplace.
1) j'avance simplement dans la direction voulue.
2) je saute dans la direction voulue.
3) je relâche la direction prise puis je reprends la marche dans cette même direction.
Autrement, dit:
Si l'on change brusquement de direction, le héro continue à faire face dans l'ancienne direction.
Le moteur est globalement un peu plus rapide.

Il reste à implémenter le chevauchement des héros, le choix d'un ou deux joueurs.
Je vais proposer deux versions: L'un à la King of Dragon (avec la possibilité de se déplacer dans la profondeur de l'écran) et l'autre à la Magic Sword se limitant à des déplacement Droite <=> Gauche et sauts mais tout cela sera par la suite.

Voici pour la vidéo des améliorations suivi du nouveau listing.

Code VB :
10 'SAUVEGARDE AU FORMAT ASCII
20 'SAVE"EDEN050.asc",a
30 DEFINT A-Z
40 'MODE EXPLICATIF
50 CLS:LOCATE 10,4 : PRINT "Commencez par lancer la video de l'image Prima
60 LOCATE 10,6 : PRINT "Vous centrerez l'image ZHec les touches du clZHier
70 LOCATE 10,8 : PRINT "Puis appuyez sur la barre d espace
80 LOCATE 10,10: PRINT "               Appuyez sur une touche pour commencer
90 'ATTENTEZNUN INPUT
100 IF INKEY$ = "" THEN100
110 'AJUSTEMENT VERTICAL DU "VDP FLASH PIPELINE
120 'MODE GRAPHIQUE EN 256 COULEURS
130 SCREEN 8
140 'COULEUR DU CONTOURZNECRAN
150 COLOR,,255
160 'BOUCLEZNAJUSTEMENT DE L ECRAN SET ADJUST (ZM,ZL)
170 ' ON STRIG PERMET DE SORTIR DE LA BOUCLE
180 IF VDP (-2) AND 1 THEN 180 ELSE STRIG(0) ON : ON STRIG GOSUB 300 : SET ADJUST (ZM,ZL) : S=STICK(0):ONS+1GOSUB 200,220,240,240,240,260,280,280,280:GOTO180
190 'FLASH EN BOUCLE [STATIQUE]
200 COPYSCREEN:RETURN
210 'FLASH SI DIRECTION [HAUT]
220 COPYSCREEN:IFZL=8THENRETURNELSEZL=ZL+1:RETURN
230 'FLASH SI DIRECTION [DROITE]
240 COPYSCREEN:IFZM=8THENRETURNELSEZM=ZM+1:RETURN
250 'FLASH SI DIRECTION [BAS]
260 COPYSCREEN:IFZL=-7THENRETURNELSEZL=ZL-1:RETURN
270 'FLASH SI DIRECTION [GAUCHE]
280 COPYSCREEN:IFZM=-7THENRETURNELSEZM=ZM-1:RETURN
290 'AUGMENTE LE NOMBRE DE CYCLES VDP DE 20%
300 VDP (10) = 0
310 'VARIABLES DU HERO 1
320 ZA = 4 ' MARGE GAUCHE DU CUBE
330 ZB = 4 ' MARGE HAUT DU CUBE
340 ZC = 4 ' MARGE DROITE DU CUBE
350 ZD = 4 ' MARGE BASSE DU CUBE
360 ZE = 176 ' SOURCE HAUT DU HERO
370 ZF = 207 ' SOURCE BAS DU HERO
380 ZG = 25 ' SOURCE LARGEUR DU HERO
390 ZH = 32 ' SOURCE HAUTEUR DU HERO
400 ZI = 0 ' SOURCE ANIMATION DU HERO ALLANT A DROITE
410 ZJ = 156 ' SOURCE ANIMATION DU HERO ALLANT A GAUCHE
420 ZK = 0 ' INDIQUE QUE LE HERO VA A DROITE. 1 SI IL VA A GAUCHE
430 ZL = ZB*34 ' POSITION PRIMAIRE HORIZONTALE DU HERO
440 ZM = ZA*20 ' POTITION PRIMAIRE VERTICALE DU HERO
450 ZN= 1 ' INDIQUE QUE LE HERO VA A DROITE
460 ZO = 0 ' INDIQUE QUE LE HERO VA A GAUCHE
470 ZP = 0 ' INDIQUE LA BOUCLE DE SAUT ACTUELLE
480 ZQ = 0 ' INDIQUE LA BOUCLE MAXIMALE POSSIBLE
490 ' ZONE JOUABLE
500 ZR = 0
510 ZS = 255
520 ZT = 0
530 ZU = 171
540 ' EMPLACEMENT DU CUBEZNANIMATION HERO
550 ZV = 128-ZA-(ZG/2)
560 ZW = ZV+ZA+ZG+ZC
570 ZX = 172
580 ZY = ZX+ZB+ZH+ZD
582 GOTO 10320
 
590 'FLASH DE LA PAGE 0
600 'RS 232 => FLASH IMAGE + ou -
610 COPYSCREEN:COPY(0,0)-(255,211),0TO(0,0),0
620 IF INKEY$<>"f"THEN 620
630 'FLASH DE LA PAGE 1
640 'EXTINCTION DU VDP 
650 DEFUSR =&H41 : A = USR (0)
660 'RS 232 => FLASH IMAGE + ou -
670 SETPAGE1:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1
680 'COPIE DU MASQUE DE JEU VERS LA PAGE [ ZERO ]
690 SETPAGE0
700 'Attente que le VDP termine sa COPIE en page [ ZERO ]
710 IF VDP (-2) AND 1 THEN 710
720 'Allumage du VDP
730  DEFUSR =&H44 : A = USR (0):'vdp(23)=vdp(23)OR&b11111111:vdp(2)=vdp(2)or32:vdp(14)=&H33:vdp(10)=vdp(10)OR4

740 'BOUCLE DEPLACEMENT
750 S=STICK(0):ONS+1GOSUB780,890,1060,1250,1420,1590,1740,1910,2080:COPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZV,ZX),1:COPY(0+ZK+ZI,ZE)-(24+ZK+ZI,ZF),1TO(ZV+ZA,ZX+ZB),1,TPSET:COPY(ZV,ZX)-(ZW,ZY),1TO(ZM-ZA,ZL-ZB),0
752 T=STICK(1):ONT+1GOSUB10780,10890,11060,11250,11420,11590,11740,11910,12080:COPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(VA,VC),1:COPY(0+GS+DS,AP)-(24+GS+DS,AC),1TO(VA+EA,VC+FA),1,TPSET:COPY(VA,VC)-(VB,VD),1TO(E-EA,F-FA),0
754 GOTO 750
 
760 'STATIQUE************
780 ZQ=5:IFZO=1THENZK=ZJELSEZK=0
800 IFSTRIG(0)THENGOSUB2270
820 RETURN
 
870 'HAUT****************
890 ZQ=10:IFZO=1THENZK=ZJELSEZK=0
910 IFZL<ZB*24THENRETURN
930 IFSTRIG(0)THENIFZL<ZB*32THENRETURNELSE2270
950 ZI=ZI+25:IFZI=100THENZI=0
970 ZL=ZL-ZB
990 RETURN
 
1040 'HAUT DROITE********
1060 ZQ=10:ZN=1:ZO=0 
1080 IFZL<ZB*24THENRETURN
1100 IFZM>240THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=4:GOSUB2960
1120 IFSTRIG(0)THENGOSUB2270
1140 ZI=ZI+25:IFZI=100THENZI=0
1160 ZM=ZM+ZA:ZL=ZL-ZB
1180 RETURN
 
1230 'DROITE*************
1250 ZQ=5:ZN=1:ZO=0
1270 IFSTRIG(0)THENGOSUB2270
1290 IFZM>240THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=4:GOSUB2960
1310 ZI=ZI+25:IFZI=100THENZI=0
1330 ZM=ZM+ZA 
1350 RETURN
 
1400 'BAS DROITE*********
1420 ZQ=2:ZN=1:ZO=0 
1440 IFZL>ZB*33THENRETURN
1460 ZI=ZI+25:IFZI=100THENZI=0
1480 ZM=ZM+ZA:ZL=ZL+ZB
1500 IFZM>240THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=4:GOSUB2960
1520 RETURN
 
1570 'BAS****************
1590 ZQ=2:IFZO=1THENZK=ZJELSEZK=0
1610 IFZL>ZB*33THENRETURN
1630 ZI=ZI+25:IFZI=100THENZI=0
1650 ZL=ZL+ZB
1670 RETURN
 
1720 'BAS GAUCHE********
1740 ZQ=2:ZO=1:ZN=0 
1760 IFZL>ZB*33THENRETURN
1780 ZI=ZI+25:IFZI=100THENZI=0
1800 ZL=ZL+ZB:ZM=ZM-ZA
1820 IFZM<4THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=240:GOSUB2960
1840 RETURN
 
1890 'GAUCHE***********
1910 ZQ=5:ZO=1:ZN=0 
1930 ZI=ZI+25:IFZI=100THENZI=0
1950 IFSTRIG(0)THENGOSUB2270
1970 IFZM<4THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=240:GOSUB2960
1990 ZM=ZM-ZA
2010 RETURN
 
2060 'HAUT GAUCHE******
2080 ZQ=10:ZO=1:ZN=0
2100 IFZL<ZB*24THENRETURN
2120 IFZM<4THENCOPY(ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZH+ZD),1TO(ZM-ZA,ZL-ZB),0:ZM=240:GOSUB2960
2140 IF STRIG (0) THEN GOSUB 2270
2160 ZI=ZI+25:IFZI=100THENZI=0
2180 ZM=ZM-ZA:ZL=ZL-ZB
2200 RETURN
 
2250 '******************SAUT NUANCE*************************
2260 ' Si le [HERO] est trop haut alors RETURN
2270 IF ZL < 100 THEN RETURN
2280 'Si le noZQre de [CYCLES de SAUT ZP] atteint [ZQ] alors 2100
2290 IF ZP = ZQ THEN 2570 ELSE ZP = ZP + 1
2300 'Boucle de [SAUT PHASE MONZVNTE]
2310 S=STICK(0):ONS+1GOTO 2330,2350,2370,2390,2410,2430,2450,2470,2490:GOTO2310
2320 '[STATIQUE]
2330 GOTO2500
2340 '[HAUT]
2350 GOTO2500
2360 '[HAUT DROITE]/Pieds elances DROITE
2370 ZI = 25 : ZK = 0 : ZM = ZM+4 : GOTO2500
2380 '[DROITE]/Pieds elances DROITE
2390 ZI = 25 : ZK = 0 : ZM = ZM+4 : GOTO2500
2400 '[DOITE BAS]/Pieds elances DROITE  
2410 ZI = 75 : ZK = 0 : ZM = ZM+4 : GOTO2500
2420 '[BAS]
2430 GOTO2500
2440 '[BAS GAUCHE]/ Pieds elances GAUCHE
2450 ZI = 75 : ZK = ZJ : ZM = ZM-4 : GOTO2500
2460 '[GAUCHE]/Pieds elances GAUCHE
2470 ZI = 25 : ZK = ZJ : ZM = ZM-4 : GOTO2500
2480 '[GAUCHE HAUT]/Pieds elances GAUCHE
2490 ZI = 25 : ZK = ZJ : ZM = ZM-4 : GOTO2500
2500 IF ZM>240 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=4 : GOSUB 2960
2510 IF ZM<4 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=240 : GOSUB 2960
2520 ZL = ZL - ZD*2
2530 COPY (ZM-ZA,ZL)-(ZM+ZG+ZC,ZL+ZB+ZH+ZD),1 TO (ZV,ZX),1
2540 COPY (ZI+ZK,ZE)-(ZI+24+ZK,ZF),1 TO (ZV+ZA,ZX),1,TPSET
2550 COPY (ZV,ZX)-(ZW,ZY),1 TO (ZM-ZA,ZL),0
2560 GOTO2290
2570 S=STICK(0):ONS+1GOTO 2580,2580,2590,2590,2590,2580,2590,2590,2590:GOTO2570
2580 GOTO 2610 
2590 ZM = ZM + 4 : GOTO 2610
2600 ZM = ZM - 4 : GOTO 2610
2610 COPY (ZM-ZA,ZL)-(ZM+ZG+ZC,ZL+ZB+ZH+ZD),1 TO (ZV,ZX),1
2620 COPY (ZI+ZK,ZE)-(ZI+24+ZK,ZF),1 TO (ZV+ZA,ZX),1,TPSET
2630 COPY (ZV,ZX)-(ZW,ZY),1 TO (ZM-ZA,ZL),0
2640 IF ZM>240 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=4 : GOSUB 2960
2650 IF ZM<4 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=240 : GOSUB 2960
2660 IF ZP = 0 THEN 2930 ELSE ZP = ZP - 1
2670 'Boucle de [SAUT PHASE DESCENZRNTE]
2680 S=STICK(0):ONS+1GOTO2700,2720,2740,2760,2780,2800,2820,2840,2860:GOTO2680
2690 '[STATIQUE]
2700 GOTO 2870
2710 '[HAUT]
2720 GOTO 2870
2730 '[HAUT DROITE]/Pieds elances DROITE
2740 ZI = 25 : ZK = 0 : ZM = ZM+4 : GOTO 2870
2750 '[DOITE]/Pieds elances DROITE
2760 ZI = 25 : ZK = 0 : ZM = ZM+4 : GOTO 2870
2770 '[DROITE BAS]/Pieds elances
2780 ZI = 75 : ZK = 0 : ZM = ZM+4 : GOTO 2870
2790 '[BAS]
2800 GOTO 2870
2810 '[BAS GAUCHE]/Pieds elances GAUCHE
2820 ZI = 75 : ZK = ZJ : ZM = ZM-4 : GOTO 2870
2830 '[GAUCHE]/Pieds elances GAUCHE
2840 ZI = 25 : ZK = ZJ : ZM = ZM-4 : GOTO 2870
2850 '[HAUT GAUCHE]/Pieds elances GAUCHE
2860 ZI = 25 : ZK = ZJ : ZM = ZM-4 : GOTO 2870
2870 COPY (ZM-ZA,ZL-ZB)-(ZM+ZG+ZC,ZL+ZB+ZH+ZD-4),1 TO (ZV,ZX),1
2880 COPY (ZI+ZK,ZE)-(ZI+24+ZK,ZF),1 TO (ZV+ZA,ZX+8),1,TPSET
2890 COPY (ZV,ZX)-(ZW,ZY),1 TO (ZM-ZA,ZL-ZB),0
2900 IF ZM>240 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=4 : GOSUB 2960
2910 IF ZM<4 THEN COPY (ZM-ZA,ZL-ZB) - (ZM+ZG+ZC,ZL+ZH+ZD),1 TO (ZM-ZA,ZL-ZB),0 : ZM=240 : GOSUB 2960
2920 ZL = ZL + ZD*2 : GOTO 2660
2930 RETURN:'ZA = 4 : ZB = 4 : RETURN
2940 'Flash de l image 0 sur la page 0
2950 'RS 232 => FLASH IMAGE + ou -
2960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
2970 'attente de l image impaire
2980 IF INKEY$<>"f"THEN 2980
2990 'Flash de l image 1 en page 1
3000 'EZMtinction du VDP 
3010 DEFUSR =&H41 : A = USR (0)
3020 'RS 232 => FLASH IMAGE + ou -
3030 SETPAGE1
3040 'VDP Flash
3050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
3060 'Retour en page 0
3070 SETPAGE0
3080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
3090 IF VDP (-2) AND 1 THEN 3090
3100 'Allumage du VDP
3110 DEFUSR =&H44 : A = USR (0)
3120 'Retour
3130 RETURN
10320 EA = 4 ' Marge GAUCHE du debut du cube
10330 FA = 4 ' Marge Haute du debut du cube
10340 EB = 4 ' Marge DROITE de fin du cube
10350 FB = 4 ' Marge Basse de fin du cube
10360 AP = 176 - 172' Point Haut du hero
10370 AC = 207 - 172' Point Bas du Hero
10380 AI = 25 ' Largeur du Hero
10390 AW = 31 ' Hauteur du Hero
10400 DS = 0 ' VariZFle d animation du [HERO]
10410 II = 156 ' Inversion HorizonZVle de l image du Hero
10420 GS = 0 ' 1 = Face Hero vers la DROITE: 0 Face Hero vers la GAUCHE
10430 F = FA*34 ' Position PRIMA [ HERO ]
10440 E = EA*20 ' Position PRIMA [ HERO ]
10450 J = 1 ' VariZFle [ DROITE ] actif ou pas
10460 K = 0 ' VariZFle [ GAUCHE] actif ou pas
10470 QB = 0 ' indique [SAUTS BOUCLE] la boucle du saut
10480 NB = 0 ' indique [MAZMIMA BOUCLE] a atteinZIe
10550 VA = 128-EA-(AI/2)
10560 VB = VA+EA+AI+EB
10570 VC = 172 - 172
10580 VD = VC+FA+AW+FB
10582 GOTO 590
 
10760 'STATIQUE**********
10780 NB=5:IFK=1THENGS=IIELSEGS=0 
10800 IFSTRIG(1)THENGOSUB12270
10820 RETURN
 
10870 'HAUT**************
10890 NB=10:IFK=1THENGS=IIELSEGS=0
10910 IFF<FA*24THENRETURN
10930 IFSTRIG(1)THENIFF<FA*32THENRETURNELSE12270
10950 DS=DS+25:IFDS=100THENDS=0
10970 F=F-FA
10990 RETURN
 
11040 'HAUT DROITE*******
11060 NB=10:J=1:K=0 
11080 IFF<FA*24THENRETURN
11100 IFE>240THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=4:GOSUB12960
11120 IFSTRIG(1)THENGOSUB12270
11140 DS=DS+25:IFDS=100THENDS=0
11160 E=E+EA:F=F-FA
11180 RETURN
 
11230 'DROITE************
11250 NB=5:J=1:K=0
11270 IFSTRIG(1)THENGOSUB12270
11290 IFE>240THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=4:GOSUB12960
11310 DS=DS+25:IFDS=100THENDS=0
11330 E=E+EA 
11350 RETURN
 
11400 'BAS DROITE********
11420 NB=2:J=1:K=0 
11440 IFF>FA*33THENRETURN
11460 DS=DS+25:IFDS=100THENDS=0
11480 E=E+EA:F=F+FA
11500 IFE>240THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=4:GOSUB12960
11520 RETURN
 
11570 'BAS***************
11590 NB=2:IFK=1THENGS=IIELSEGS=0
11610 IFF>FA*33THENRETURN
11630 DS=DS+25:IFDS=100THENDS=0
11650 F=F+FA
11670 RETURN
 
11720 'BAS GAUCHE********
11740 NB=2:K=1:J=0 
11760 IFF>FA*33THENRETURN
11780 DS=DS+25:IFDS=100THENDS=0
11800 F=F+FA:E=E-EA
11820 IFE<4THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=240:GOSUB12960
11840 RETURN
 
11890 'GAUCHE***********
11910 NB=5:K=1:J=0 
11930 DS=DS+25:IFDS=100THENDS=0
11950 IFSTRIG(1)THENGOSUB12270
11970 IFE<4THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=240:GOSUB12960
11990 E=E-EA
12010 RETURN
 
12060 'HAUT GAUCHE******
12080 NB=10:K=1:J=0
12100 IFF<FA*24THENRETURN
12120 IFE<4THENCOPY(E-EA,F-FA)-(E+AI+EB,F+AW+FB),1TO(E-EA,F-FA),0:E=240:GOSUB12960
12140 IFSTRIG(1)THENGOSUB12270
12160 DS=DS+25:IFDS=100THENDS=0
12180 E=E-EA:F=F-FA
12200 RETURN
 
12250 '******************SAUT NUANCE*************************
12260 ' Si le [HERO] est trop haut alors RETURN
12270 IF F < 100 THEN RETURN
12280 'Si le noNBre de [CYCLES de SAUT QB] atteint [NB] alors 2100
12290 IF QB = NB THEN 12570 ELSE QB = QB + 1
12300 'Boucle de [SAUT PHASE MONZVNTE]
12310 T=STICK(1):ONT+1GOTO 12330,12350,12370,12390,12410,12430,12450,12470,12490:GOTO12310
12320 '[STATIQUE]
12330 GOTO12500
12340 '[HAUT]
12350 GOTO12500
12360 '[HAUT DSOITE]/Pieds elances DSoite
12370 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12380 '[DSOITE]/Pieds elances DSoite
12390 DS = 25 : GS = 0 : E = E+4 : GOTO12500
12400 '[DOITE BAS]/Pieds elances DSoite  
12410 DS = 75 : GS = 0 : E = E+4 : GOTO12500
12420 '[BAS]
12430 GOTO12500
12440 '[BAS GAUCHE]/ Pieds elances GAUCHE
12450 DS = 75 : GS = II : E = E-4 : GOTO12500
12460 '[GAUCHE]/Pieds elances GAUCHE
12470 DS = 25 : GS = II : E = E-4 : GOTO12500
12480 '[GAUCHE HAUT]/Pieds elances GAUCHE
12490 DS = 25 : GS = II : E = E-4 : GOTO12500
12500 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12510 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12520 F = F - FB*2
12530 COPY (E-EA,F)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),1
12540 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),1,TPSET
12550 COPY (VA,VC)-(VB,VD),1 TO (E-EA,F),0
12560 GOTO12290
12570 T=STICK(1):ONT+1GOTO 12580,12580,12590,12590,12590,12580,12590,12590,12590:GOTO12570
12580 GOTO 12610
12590 E = E + 4 : GOTO 12610
12600 E = E - 4 : GOTO 12610
12610 COPY (E-EA,F)-(E+AI+EB,F+FA+AW+FB),1 TO (VA,VC),1
12620 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC),1,TPSET
12630 COPY (VA,VC)-(VB,VD),1 TO (E-EA,F),0
12640 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12650 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12660 IF QB = 0 THEN 12930 ELSE QB = QB - 1
12670 'Boucle de [SAUT PHASE DESCENZRNTE]
12680 T=STICK(1):ONT+1GOTO12700,12720,12740,12760,12780,12800,12820,12840,12860:GOTO12680
12690 '[STATIQUE]
12700 GOTO 12870
12710 '[HAUT]
12720 GOTO 12870
12730 '[HAUT DSOITE]/Pieds elances DSoite
12740 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12750 '[DOITE]/Pieds elances DSoite
12760 DS = 25 : GS = 0 : E = E+4 : GOTO 12870
12770 '[DSOITE BAS]/Pieds elances
12780 DS = 75 : GS = 0 : E = E+4 : GOTO 12870
12790 '[BAS]
12800 GOTO 12870
12810 '[BAS GAUCHE]/Pieds elances GAUCHE
12820 DS = 75 : GS = II : E = E-4 : GOTO 12870
12830 '[GAUCHE]/Pieds elances GAUCHE
12840 DS = 25 : GS = II : E = E-4 : GOTO 12870
12850 '[HAUT GAUCHE]/Pieds elances GAUCHE
12860 DS = 25 : GS = II : E = E-4 : GOTO 12870
12870 COPY (E-EA,F-FA)-(E+AI+EB,F+FA+AW+FB-4),1 TO (VA,VC),1
12880 COPY (DS+GS,AP)-(DS+24+GS,AC),1 TO (VA+EA,VC+8),1,TPSET
12890 COPY (VA,VC)-(VB,VD),1 TO (E-EA,F-FA),0
12900 IF E>240 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=4 : GOSUB 12960
12910 IF E<4 THEN COPY (E-EA,F-FA) - (E+AI+EB,F+AW+FB),1 TO (E-EA,F-FA),0 : E=240 : GOSUB 12960
12920 F = F + FB*2 : GOTO 12660
12930 RETURN:'EA = 4 : FA = 4 : RETURN
12940 'Flash de l image 0 sur la page 0
12950 'RS 232 => FLASH IMAGE + ou -
12960 CLS:SETPAGE1:CLS:COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),0',TPSET
12970 'attente de l image impaire
12980 IF INKEY$<>"f"THEN 12980
12990 'Flash de l image 1 en page 1
13000 'EZMtinction du VDP 
13010 DEFUSR =&H41 : A = USR (0)
13020 'RS 232 => FLASH IMAGE + ou -
13030 SETPAGE1
13040 'VDP Flash
13050 COPYSCREEN:COPY(0,0)-(255,211),1TO(0,0),1',TPSET
13060 'Retour en page 0
13070 SETPAGE0
13080 'Attente que le VDP termine sa COPIE en page [ ZERO ]
13090 IF VDP (-2) AND 1 THEN 13090
13100 'Allumage du VDP
13110 DEFUSR =&H44 : A = USR (0)
13120 'Retour
13130 RETURN



A suivre...


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 23/07/2018 à 15h03
Le même code avec juste un seul Héro à gérer ;)



Forcément, c'est plus rapide.
Nb: Ma source vidéo n'étant pas pilotée et pour cause, je n'ai pas de périphérique RS232 réel ou émulé pour gérer ma source, certains affichages sont inopinés :oups Edité par igal Le 23/07/2018 à 15h04


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 24/07/2018 à 19h27
Afin de faire profiter facilement et au plus grand nombre, je travaille sur une version sans FlashPipeline.

De la sorte, on peut l'utiliser sur n'importe quel MSX.

Voici les premières images du même moteur émulé sur Turbo-R.
Pour le coup, le moteur est 10 fois plus rapide que sur MSX2 :fou


Forcément, y a plus de Vdp Flash Pipeline mais pourquoi se fixer des limites quand il s'agit de se faire plaisir :D Edité par igal Le 24/07/2018 à 19h29


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 25/07/2018 à 10h36
Bravo, je pense qu'au niveau des difficultés graphiques tu as passé le plus 'touchy' :top
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie