La Place des Développeurs [EN COURS] VDP Flash Pipeline Expérimentations Quelques applications sur l'approche Flash
igal
Membre non connecté
Conseiller Municipal
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
Voici donc les variables du HERO 1:
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).
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
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
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
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
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
igal
Membre non connecté
Conseiller Municipal
Bon ben voila..
Tout d'abord la vidéo pour donner l'envie de continuer
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
Voici le listing et la source d'images pour ceux qui veulent s'y frotter
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
Voici un pack contenant les images:
STAGE 1.zip
Et enfin le code complet et buggé
Tout d'abord la vidéo pour donner l'envie de continuer
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
Voici le listing et la source d'images pour ceux qui veulent s'y frotter
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
Voici un pack contenant les images:
STAGE 1.zip
Et enfin le code complet et buggé
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
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
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
igal
Membre non connecté
Conseiller Municipal
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
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!
Voici le code pour le bonheur des petits et des grands:
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
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!
Voici le code pour le bonheur des petits et des grands:
Code TEXT :
Edité par
igal
Le 21/07/2018 à 11h32
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
igal
Membre non connecté
Conseiller Municipal
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
M'en vais essayer le Barbare.DSK que tu as fais
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
M'en vais essayer le Barbare.DSK que tu as fais
igal
Membre non connecté
Conseiller Municipal
@Jipe: Ton adaptation pour ceux qui ne possèdent pas de digitaliseur est une très bonne idée
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 Edité par igal Le 21/07/2018 à 12h18
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 Edité par igal Le 21/07/2018 à 12h18
igal
Membre non connecté
Conseiller Municipal
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...
@ suivre Edité par igal Le 21/07/2018 à 18h12
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
la derniére version en disquette
j'utilise Context pour modifier rapidement et sauvegarder le code ASCII
barbare3.dsk
j'utilise Context pour modifier rapidement et sauvegarder le code ASCII
barbare3.dsk
igal
Membre non connecté
Conseiller Municipal
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
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.
A suivre...
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
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...
igal
Membre non connecté
Conseiller Municipal
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 Edité par igal Le 23/07/2018 à 15h04
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 Edité par igal Le 23/07/2018 à 15h04
igal
Membre non connecté
Conseiller Municipal
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
Forcément, y a plus de Vdp Flash Pipeline mais pourquoi se fixer des limites quand il s'agit de se faire plaisir Edité par igal Le 24/07/2018 à 19h29
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
Forcément, y a plus de Vdp Flash Pipeline mais pourquoi se fixer des limites quand il s'agit de se faire plaisir Edité par igal Le 24/07/2018 à 19h29
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie