MSX Village forum

La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?

Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 06/02/2014 à 08h57

Reprise du message précédent

Beaucoup plus simple et beaucoup plus rapide de faire ça en assembleur.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 06/02/2014 à 14h18
Effectivement, il faut tabler sur les sprites pour économiser un max de ressources.

Une chose étonnante et intéressante:

Autant VDP(27) Déplace "Seulement" le fond d'écran (SCREEN) et n'influe en rien sur les SPRITES.

Autant VDP(24) Déplace "Aussi bien" le Fond d'écran (SCREEN) et les SPRITES.

Existe t il un registre VDP qui déplace "Tout" [SCREEN + SPRITES] Verticalement tout comme le fait VDP (27) Horizontalement?

Pour mes exercises, j'ai repris un des tous premier moteurs de MsxOsaure très facilement compréhensible.

C'est très rapide en mettant un vrai SPRITE à la place du héro :top

@GDX: J'ai incorporé le "moteur" audio de Salamander donc toutes les musiques et bruitages sont au RDV :top


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 06/02/2014 à 23h25
Après une journée à tâtonner, voici le résulta :top

J'ai utilisé une des premières versions du moteur de MsxOsaure.
L'utilisation de SPRITES est très avantageuse puisque les ralentissements sont beaucoup plus faibles que lors d'utilisation de COPY.

Il reste beaucoup de choses à ajouter, mais pour le moment ça tient la route.
Actuellement, le moteur alignes [16 BLOCS HORIZONTALEMENT] X [12 BLOCS VERTICALEMENT]. Je voudrais rajouter en ligne de BLOCS (13) en dessous la (12) pour rendre plus agréable graphiquement.

D'autre part, mis à part les SPRITE qu'il faut injecter avec les COLLISIONS à gérer, il la plus grande difficulté à savoir:

Actuellement, Une page de 16TILES sur 12TILES est affichée et ensuite scrollée en BOUCLE (Dans le film ci dessous, j'active la création d'une nouvelle page en déplacant mon SPRITE à DROITE => [350 IFX>200THENX=4:N=N+1:GOSUB1280]

C'est la que j'ai besoin de vôtre aide! (Z80, GDX, Magoo, Jipe et toutes bonnes âmes charitables)
Comment générer les TILES par COLONNE de BLOCS et non par PAGE entière de BLOCS?
Quelle sont les solutions envisageables ?


http://youtu.be/QVewIswt7HU


http://youtu.be/9WJgTt_rGI0

Voici la Disquette: ZELDAVDP.zip
Il faut lancer => VDP27.ASC

Voici le Listing:
Code TEXT :
 
10 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:SAVE"vdp27.asc",a
20 VDP(10)=(0):WIDTH80:SCREEN5,2:COLOR 15,1,1:SETPAGE0,0:CLS:DEFINTA-Z
30 '
40 '            Chargement ecran des niveaux en page 3
50 '
60 SETPAGE0,3:BLOAD"fondw.sc5",S
70 '
80 '            Chargement ecran des "sprites" en page 2
90 '
100 SETPAGE0,1:BLOAD"winnie.sc5",S
110 COLOR=RESTORE
120 '
130 ' -----------INSERTION DES MUSIQUES ET SONS----------
140 GOTO 1410
150 'DEFUSR=&HD000:A=USR(0):'STOP LA MUSIQUE
160 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,30:A=USR2(0):' MUSIQUE STAGE 6
170 '
180 '            Cr‚ation d'un sprite pour masque en page 0
190 '
200 SETPAGE0,0
210 FORI=&H7800TO&H781F:VPOKEI,255:NEXTI
220 'PUTSPRITE0,(100,100),7,0
230 '
240 '            Initialisation des varibles et mise en place niveau 1
250 '
260 V=3
270 C=0:X=100:Y=80:D=52:A=0:N=1:M=0
280 GOSUB 1320
290 '
300 '            Boucle Principale:variable D pour animation du heros
310 '
320 S=STICK(0)
330 PUTSPRITE0,(X,Y),11,0:PUTSPRITE1,(Z,Y),0,0
340 ONS+1GOSUB410,460,520,580,640,700,760,820,870
350 IFX>200THENX=4:N=N+1:GOSUB1280
360 IFX<1THENX=0:'N=N-1:GOSUB1380
370 GOTO 320
380 '
390 '              SP gestion mouvement: statique!
400 '
410 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):Z=X:PUTSPRITE1,(Z+50,Y),5,0:'THEND=0
420 VDP(27)=VDP(27)+2AND255:X=X-1:RETURN
430 '
440 '              SP gestion mouvement: HAUT
450 '
460 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
470 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
480 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-1:VDP(27)=VDP(27)+2AND255:RETURN
490 '
500 '              SP gestion mouvement: HAUT/DROITE
510 '
520 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
530 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
540 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X+4:VDP(27)=VDP(27)+2AND255:RETURN
550 '
560 '              SP gestion mouvement: DROITE
570 '
580 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
590 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
600 VDP(27)=VDP(27)+2AND255:X=X+4:RETURN
610 '
620 '              SP gestion mouvement: DROITE/BAS
630 '
640 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
650 IFY>194THENY=195:VDP(24)=VDP(24)-1
660 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X+4:VDP(27)=VDP(27)+2AND255:RETURN
670 '
680 '              SP gestion mouvement: BAS
690 '
700 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
710 IFY>194THENY=195:VDP(24)=VDP(24)-1
720 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-1:VDP(27)=VDP(27)+2AND255:RETURN
730 '
740 '              SP gestion mouvement: BAS/GAUCHE
750 '
760 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
770 IFY>194THENY=195:VDP(24)=VDP(24)-1
780 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-4:VDP(27)=VDP(27)+2AND255:RETURN
790 '
800 '              SP gestion mouvement: GAUCHE
810 '
820 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
830 VDP(27)=VDP(27)+2AND255:X=X-4:RETURN
840 '
850 '              SP gestion mouvement: GAUCHE/HAUT
860 '
870 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
890 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
950 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-4:VDP(27)=VDP(27)+2AND255:RETURN
960 '
970 '              SP gestion rencontre avec objet
980 '
990 IF P=10THEN1140  ' si trou -> SP tombe
1000 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1010 COPY(D,A)-(D+25,A+37),1TO(4,4),3,TPSET
1020 COPY(0,0)-(34,50),3TO(X,Y),0
1030 POKE&HFD9F,201
1040 PSET(INT((X+15)/16),202+INT((Y+4)/16)),15:B=P*6:F=P*5
1050 COPY(240,191)-(255,206),1TO((INT((X+15)/16))*16,(INT((Y+36)/16))*16),2
1060 COPY(208,P*16-112)-(223,P*16-97),1TO(C*16+32,196),0
1070 POKE&HFD9F,201:POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1080 POKE&HCFFF,82:A=USR2(0)
1090 C=C+1
1100 GOTO 320
1110 '
1120 '              SP chute dans le trou
1130 '
1140 FORI=0TO36STEP2
1150 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1160 COPY(D,A)-(D+25,A+37-I),1TO(4,4+I),3,TPSET
1170 COPY(0,0)-(34,50),3TO(X,Y),0
1180 A=A+38:IFA=190THENA=38
1190 B=I+40:POKE&HCFFF,70:A=USR2(0)
1200 IFPLAY(0)=-1THEN1200
1210 NEXT
1220 M=0:N=0
1230 LINE(32,196)-(255,212),1,BF
1240 V=V-1:IFV=0THEN1260
1250 GOTO 270
1260 SCREEN0:PRINT"                GAME OVER
1270 GOTO1270  
1280 '
1290 '              SP Mise en place du d‚cor
1300 '
1310 COPY(0,200)-(15,211),0TO(M*16,200),3
1320 COPY(N*16,200)-(15+N*16,211),3TO(0,200),0
1330 POKE&HCFFF,69:A=USR2(0)
1340 FORI=0TO15:FORJ=0TO11:P=POINT(I,J+200):COPY(P*16,191)-(15+P*16,206),1TO(I*16,J*16),0
1350 NEXTJ:NEXTI
1360 COPY(0,0)-(256,192),0TO(0,0),2
1370 M=N
1380 'BEEP
1390 RETURN
1400 GOTO 1400
1410 '---------DEBUT DE SALAMANDER DEMO MODIFIE----------------
1420 'POKE&HFBB1,1: 'EMPECHE CONTROL+STOP
1430 BLOAD"1.006":DEFUSR4=&HD600:' CHARGE LE PLAYER ?
1440 BLOAD"1.007":U=USR4(1):' CHARGE SONS ET MUSIQUES
1450 BLOAD"1.008":U=USR4(2):' CHARGE SONS ET MUSIQUES
1460 BLOAD"1.009":U=USR4(3):' CHARGE SONS ET MUSIQUES
1470 BLOAD"1.010":U=USR4(4):' CHARGE SONS ET MUSIQUES
1480 BLOAD"1.011":FORT=0TO2000:NEXT
1490 DEFUSR=&HD000:A=USR(0): 'PREREQUIS ARRET LA MUSIQUE
1500 DEFUSR2=&HD003:' PREREQUIS FONCTION INCONNUE
1510 POKE&HFD9F,201
1520 POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1530 ' LISTE COMPLETE DES MUSIQUES ET SONS DANS POKE SALAMANDER
1540 '
1550 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,32:A=USR2(0):' MUSIQUE STAGE 6
1560 'POKE&HCFFF,67:A=USR2(0):' EXPLOSION D'ENNEMI MOYENNE
1570 '
1580 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:'PERMET ACCES DISK MAIS ARRETER MUSIQUE AVANT
1590 GOTO 150:' RETOUR A L ANIMATION
1600 '
1610 '---------FIN DE SALAMANDER DEMO MODIFIE-------------------



Merci de votre aide :D Edité par igal Le 06/02/2014 à 23h51


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 08h40
Essaie ça Igal
… En Turbo-R ! :)


Code TEXT :
10 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:SAVE"vdp27.asc",a
20 VDP(10)=(0):WIDTH80:SCREEN5,2:COLOR 15,1,1:SETPAGE0,0:CLS:DEFINTA-Z
30 '
40 '            Chargement ecran des niveaux en page 3
50 '
60 SETPAGE0,3:BLOAD"fondw.sc5",S
70 '
80 '            Chargement ecran des "sprites" en page 2
90 '
100 SETPAGE0,1:BLOAD"winnie.sc5",S
110 COLOR=RESTORE
120 '
130 ' -----------INSERTION DES MUSIQUES ET SONS----------
165 COPY(0,200)-(255,211),3TO(0,200),0
170 '
180 '            Cr‚ation d'un sprite pour masque en page 0
190 '
200 SETPAGE0,0
210 FORI=&H7800TO&H781F:VPOKEI,255:NEXTI
220 'PUTSPRITE0,(100,100),7,0
230 '
240 '            Initialisation des varibles et mise en place niveau 1
250 '
260 V=3:CP=0:L=15:WV=-1
270 C=0:X=100:Y=80:D=52:A=0:N=1:M=0
280 GOSUB 1320
290 '
300 '            Boucle Principale:variable D pour animation du heros
310 '
320 S=STICK(0):VDP(27)=VDP(27)+1AND255
330 PUTSPRITE0,(X,Y),11,0:PUTSPRITE1,(Z,Y),0,0
340 ONS+1GOSUB410,460,520,580,640,700,760,820,870
350 IFX>200THENX=4:N=N+1:GOSUB1280
360 IFX<1THENX=0:'N=N-1:GOSUB1380
365 CP=CP+1:IF CP>=2 THEN CP=0:L=L+1:WV=WV+1:FORJ=0TO11:P=POINT(L,J+200):COPY(P*16,191)-(15+P*16,206),1TO(WV*16,J*16),0:NEXTJ:IFWV=15THEN WV=-1
370 GOTO 320
380 '
390 '              SP gestion mouvement: statique!
400 '
410 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):Z=X:PUTSPRITE1,(Z+50,Y),5,0:'THEND=0
420 RETURN
430 '
440 '              SP gestion mouvement: HAUT
450 '
460 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
470 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
480 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-1:RETURN
490 '
500 '              SP gestion mouvement: HAUT/DROITE
510 '
520 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
530 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
540 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X+4:VDP(27)=VDP(27)+2AND255:RETURN
550 '
560 '              SP gestion mouvement: DROITE
570 '
580 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
590 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
600 X=X+4:RETURN
610 '
620 '              SP gestion mouvement: DROITE/BAS
630 '
640 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
650 IFY>194THENY=195:VDP(24)=VDP(24)-1
660 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X+4:RETURN
670 '
680 '              SP gestion mouvement: BAS
690 '
700 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
710 IFY>194THENY=195:VDP(24)=VDP(24)-1
720 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-1:RETURN
730 '
740 '              SP gestion mouvement: BAS/GAUCHE
750 '
760 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
770 IFY>194THENY=195:VDP(24)=VDP(24)-1
780 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-4:RETURN
790 '
800 '              SP gestion mouvement: GAUCHE
810 '
820 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
830 X=X-4:RETURN
840 '
850 '              SP gestion mouvement: GAUCHE/HAUT
860 '
870 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
890 IFY<-15THENY=-16:VDP(24)=VDP(24)+1
950 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-4:RETURN
960 '
970 '              SP gestion rencontre avec objet
980 '
990 IF P=10THEN1140  ' si trou -> SP tombe
1000 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1010 COPY(D,A)-(D+25,A+37),1TO(4,4),3,TPSET
1020 COPY(0,0)-(34,50),3TO(X,Y),0
1030 POKE&HFD9F,201
1040 PSET(INT((X+15)/16),202+INT((Y+4)/16)),15:B=P*6:F=P*5
1050 COPY(240,191)-(255,206),1TO((INT((X+15)/16))*16,(INT((Y+36)/16))*16),2
1060 COPY(208,P*16-112)-(223,P*16-97),1TO(C*16+32,196),0
1070 POKE&HFD9F,201:POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1080 POKE&HCFFF,82:A=USR2(0)
1090 C=C+1
1100 GOTO 320
1110 '
1120 '              SP chute dans le trou
1130 '
1140 FORI=0TO36STEP2
1150 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1160 COPY(D,A)-(D+25,A+37-I),1TO(4,4+I),3,TPSET
1170 COPY(0,0)-(34,50),3TO(X,Y),0
1180 A=A+38:IFA=190THENA=38
1190 B=I+40:POKE&HCFFF,70:A=USR2(0)
1200 IFPLAY(0)=-1THEN1200
1210 NEXT
1220 M=0:N=0
1230 LINE(32,196)-(255,212),1,BF
1240 V=V-1:IFV=0THEN1260
1250 GOTO 270
1260 SCREEN0:PRINT"                GAME OVER
1270 GOTO1270  
1280 '
1290 '              SP Mise en place du d‚cor
1300 '
1310 'COPY(0,200)-(15,211),0TO(M*16,200),3
1320 'COPY(N*16,200)-(15+N*16,211),3TO(0,200),0
1330 'POKE&HCFFF,69:A=USR2(0)
1340 FORI=0TO15:FORJ=0TO11:P=POINT(I,J+200):COPY(P*16,191)-(15+P*16,206),1TO(I*16,J*16),0
1350 NEXTJ:NEXTI
1360 COPY(0,0)-(256,192),0TO(0,0),2
1370 M=N
1380 'BEEP
1390 RETURN
1400 GOTO 1400
1410 '---------DEBUT DE SALAMANDER DEMO MODIFIE----------------
1420 'POKE&HFBB1,1: 'EMPECHE CONTROL+STOP
1430 BLOAD"1.006":DEFUSR4=&HD600:' CHARGE LE PLAYER ?
1440 BLOAD"1.007":U=USR4(1):' CHARGE SONS ET MUSIQUES
1450 BLOAD"1.008":U=USR4(2):' CHARGE SONS ET MUSIQUES
1460 BLOAD"1.009":U=USR4(3):' CHARGE SONS ET MUSIQUES
1470 BLOAD"1.010":U=USR4(4):' CHARGE SONS ET MUSIQUES
1480 BLOAD"1.011":FORT=0TO2000:NEXT
1490 DEFUSR=&HD000:A=USR(0): 'PREREQUIS ARRET LA MUSIQUE
1500 DEFUSR2=&HD003:' PREREQUIS FONCTION INCONNUE
1510 POKE&HFD9F,201
1520 POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1530 ' LISTE COMPLETE DES MUSIQUES ET SONS DANS POKE SALAMANDER
1540 '
1550 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,32:A=USR2(0):' MUSIQUE STAGE 6
1560 'POKE&HCFFF,67:A=USR2(0):' EXPLOSION D'ENNEMI MOYENNE
1570 '
1580 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:'PERMET ACCES DISK MAIS ARRETER MUSIQUE AVANT
1590 GOTO 150:' RETOUR A L ANIMATION
1600 '
1610 '---------FIN DE SALAMANDER DEMO MODIFIE-------------------

Edité par ericb59 Le 07/02/2014 à 08h46


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/02/2014 à 11h34
Salut Eric.

J'ai essayé ton listing ce matin, Malheureusement, cette solution saccade énormément le défilement VDP(24).

En attendant de trouver une idée, je me penche sur les SPRITES et leurs COLLISIONS.

voici comment j'ai procédé.

310 SPRITE ON => Rend les Sprites sensible à la COLLISION.
320 PUTE SPRITE2,(200,50),1,0 => Plaque le SPRITE nommé 2 aux latitudes (200,50) en couleur 1.
330 ONSPRITE GOSUB 970 => En cas de COLLISION renvoie vers le sous programme en ligne 970 (SEQUENCE No 4 EXPLOSIONS!)

380 PUTSPRITE0,(X,Y),11,0 => SPRITE nommé Zéro (HERO) dans la Boucle principale PUTSPRITE1,(Z,Y),0,0 => SPRITE nommé Un (Effacement des Tirs) dans la boucle principale. Z est la variable qui détermine la distance entre le HERO et le TIR ;)

480 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0) => En cas d'appui sur TIR, jouer le son de TIR puis => Z=X:PUTSPRITE1,(Z+50,Y)5,0 => Z prend la Valeur de la latitude X puis le SPRITE nommé 1 (Tir) est affiché à 50 pixels plus loin devant X (X étant la latitude du Héro) en couleur Marron.



Je me suis basé sur le Grimoire SPRITE par MsxOsaure, mais j'ai pas pu mieux comprendre le fonctionnement dans sa généralité

quelqu'un à une expérience SPRITE svp ? :p


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 11h41
le VDP(27)=VDP(27)+1AND255 en screen5, fait déplacer l'écran de 8 pixel à la fois….
Comment veux tu que ça ne soit pas saccadé :hum

Après pour faire un scroll avec affichage au fur et à mesure, sans saccade, en basic… ben… Pas sur MSX en tout cas !


banniere-ericb59e
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10336

Le 07/02/2014 à 11h52
il existe une fonction de masquage de bord sur le set scroll

il faut copier une bande de 8 caractéres qui est masquée

on doit pouvoir utiliser le set adjust pour introduire un décalage

tout ça reste de la théorie

il faut partir juste du graphisme pour les test


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/02/2014 à 12h41
@Ericb59:

En fait le scrool se fait par saut de 2 pixels. J'ai choisi par 2 pour plus de dynamisme dans l'animation:

Voici le rendu VDP(27)=VDP(27)+2AND255:

http://youtu.be/L8G78UZEJjY

On peut y voir 2 SPRITES ennemis tout à droite. (SPRITE 2 et SPRITE3)
Les collision entre mon TIR et/ou mon HERO contre les ENNEMIS n'ont pas l'air d'entrer en COLLISION :(
(J'ai du louper un truc)

Voici le SCROLL VDP(27)=VDP(27)+1AND255:

http://youtu.be/OwobacKXwwA
Comme tu peux le voir, le défilement se fait Pixel par Pixel et non par tranche de 8 pixels ;)

Voici le listing avec défilement pixel par pixel:
Code TEXT :
 
10 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:SAVE"vdp27.asc",a
20 VDP(10)=(0):WIDTH80:SCREEN5,2:COLOR 15,1,1:SETPAGE0,0:CLS:DEFINTA-Z
30 '
40 '            Chargement ecran des niveaux en page 3
50 '
60 SETPAGE0,3:BLOAD"fondw.sc5",S
70 '
80 '            Chargement ecran des "sprites" en page 2
90 '
100 SETPAGE0,1:BLOAD"winnie.sc5",S
110 COLOR=RESTORE
120 '
130 ' -----------INSERTION DES MUSIQUES ET SONS----------
140 GOTO 1470
150 'DEFUSR=&HD000:A=USR(0):'STOP LA MUSIQUE
160 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,30:A=USR2(0):' MUSIQUE STAGE 6
170 '
180 '            Cr‚ation d'un sprite pour masque en page 0
190 '
200 SETPAGE0,0
210 FORI=&H7800TO&H781F:VPOKEI,255:NEXTI
220 'PUTSPRITE0,(100,100),7,0
230 '
240 '            Initialisation des varibles et mise en place niveau 1
250 '
260 V=3
270 C=0:X=100:Y=80:D=52:A=0:N=1:M=0
280 GOSUB 1380
290 '              Sprites ennemis
300 '
310 ONSPRITEGOSUB1030
320 PUTSPRITE2,(200,50),1,0:PUTSPRITE3,(200,100),1,0:'PUTSPRITE4,(180,75),1,0
330 SPRITE ON
340 '
350 '              Boucle du moteur principale
360 '
370 S=STICK(0)
380 PUTSPRITE0,(X,Y),11,0:PUTSPRITE1,(Z,Y),0,0
390 ONS+1GOSUB450,510,580,650,710,780,850,920,980
400 GOTO 370
410 '
420 '
430 '              SP gestion mouvement: statique!
440 '
450 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):Z=X:PUTSPRITE1,(Z+50,Y),5,0:'THEND=0
460 IFX<1THENX=0:'N=N-1:GOSUB1380
470 VDP(27)=VDP(27)+1AND255:X=X-1:RETURN
480 '
490 '              SP gestion mouvement: HAUT
500 '
510 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
520 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
530 IFX<1THENX=0:'N=N-1:GOSUB1380
540 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-1:VDP(27)=VDP(27)+1AND255:RETURN
550 '
560 '              SP gestion mouvement: HAUT/DROITE
570 '
580 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
590 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
600 IFX>200THENX=196:N=N+1:GOSUB1340
610 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X+4:VDP(27)=VDP(27)+1AND255:RETURN
620 '
630 '              SP gestion mouvement: DROITE
640 '
650 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
660 IFX>200THENX=196:N=N+1:GOSUB1340
670 VDP(27)=VDP(27)+1AND255:X=X+4:RETURN
680 '
690 '              SP gestion mouvement: DROITE/BAS
700 '
710 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
720 IFY>189THENY=190:VDP(24)=VDP(24)-1
730 IFX>200THENX=196:N=N+1:GOSUB1340
740 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X+4:VDP(27)=VDP(27)+1AND255:RETURN
750 '
760 '              SP gestion mouvement: BAS
770 '
780 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
790 IFY>189THENY=190:VDP(24)=VDP(24)-1
800 IFX<1THENX=0:'N=N-1:GOSUB1380
810 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-1:VDP(27)=VDP(27)+1AND255:RETURN
820 '
830 '              SP gestion mouvement: BAS/GAUCHE
840 '
850 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
860 IFY>189THENY=190:VDP(24)=VDP(24)-1
870 IFX<1THENX=0:'N=N-1:GOSUB1380
880 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-4:VDP(27)=VDP(27)+1AND255:RETURN
890 '
900 '              SP gestion mouvement: GAUCHE
910 '
920 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
930 IFX<1THENX=0:'N=N-1:GOSUB1380
940 VDP(27)=VDP(27)+1AND255:X=X-6:RETURN
950 '
960 '              SP gestion mouvement: GAUCHE/HAUT
970 '
980 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0:'THEND=0
990 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
1000 IFX<1THENX=0:'N=N-1:GOSUB1380
1010 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-4:VDP(27)=VDP(27)+1AND255:RETURN
1020 '
1030 '              Sprites collisions
1040 '
1050 IF P=10THEN1200  ' si trou -> SP tombe
1060 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1070 COPY(D,A)-(D+25,A+37),1TO(4,4),3,TPSET
1080 COPY(0,0)-(34,50),3TO(X,Y),0
1090 POKE&HFD9F,201
1100 PSET(INT((X+15)/16),202+INT((Y+4)/16)),15:B=P*6:F=P*5
1110 COPY(240,191)-(255,206),1TO((INT((X+15)/16))*16,(INT((Y+36)/16))*16),2
1120 COPY(208,P*16-112)-(223,P*16-97),1TO(C*16+32,196),0
1130 POKE&HFD9F,201:POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1140 POKE&HCFFF,82:A=USR2(0)
1150 C=C+1
1160 GOTO 370
1170 '
1180 '              SP chute dans le trou
1190 '
1200 FORI=0TO36STEP2
1210 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1220 COPY(D,A)-(D+25,A+37-I),1TO(4,4+I),3,TPSET
1230 COPY(0,0)-(34,50),3TO(X,Y),0
1240 A=A+38:IFA=190THENA=38
1250 B=I+40:POKE&HCFFF,70:A=USR2(0)
1260 IFPLAY(0)=-1THEN1260
1270 NEXT
1280 M=0:N=0
1290 LINE(32,196)-(255,212),1,BF
1300 V=V-1:IFV=0THEN1320
1310 GOTO 270
1320 SCREEN0:PRINT"                GAME OVER
1330 GOTO1330  
1340 '
1350 '              SP Mise en place du d‚cor
1360 '
1370 COPY(0,200)-(15,211),0TO(M*16,200),3
1380 COPY(N*16,200)-(15+N*16,211),3TO(0,200),0
1390 POKE&HCFFF,69:A=USR2(0)
1400 FORI=0TO15:FORJ=0TO11:P=POINT(I,J+200):COPY(P*16,191)-(15+P*16,206),1TO(I*16,J*16),0
1410 NEXTJ:NEXTI
1420 COPY(0,0)-(256,192),0TO(0,0),2
1430 M=N
1440 'BEEP
1450 RETURN
1460 GOTO 1460
1470 '---------DEBUT DE SALAMANDER DEMO MODIFIE----------------
1480 'POKE&HFBB1,1: 'EMPECHE CONTROL+STOP
1490 BLOAD"1.006":DEFUSR4=&HD600:' CHARGE LE PLAYER ?
1500 BLOAD"1.007":U=USR4(1):' CHARGE SONS ET MUSIQUES
1510 BLOAD"1.008":U=USR4(2):' CHARGE SONS ET MUSIQUES
1520 BLOAD"1.009":U=USR4(3):' CHARGE SONS ET MUSIQUES
1530 BLOAD"1.010":U=USR4(4):' CHARGE SONS ET MUSIQUES
1540 BLOAD"1.011":FORT=0TO2000:NEXT
1550 DEFUSR=&HD000:A=USR(0): 'PREREQUIS ARRET LA MUSIQUE
1560 DEFUSR2=&HD003:' PREREQUIS FONCTION INCONNUE
1570 POKE&HFD9F,201
1580 POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1590 ' LISTE COMPLETE DES MUSIQUES ET SONS DANS POKE SALAMANDER
1600 '
1610 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,32:A=USR2(0):' MUSIQUE STAGE 6
1620 'POKE&HCFFF,67:A=USR2(0):' EXPLOSION D'ENNEMI MOYENNE
1630 '
1640 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:'PERMET ACCES DISK MAIS ARRETER MUSIQUE AVANT
1650 GOTO 150:' RETOUR A L ANIMATION
1660 '
1670 '---------FIN DE SALAMANDER DEMO MODIFIE-------------------

Edité par igal Le 07/02/2014 à 12h43


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 12h45
Dans le code que je t'ai mis plus haut j'ai mis :
VDP(27)=VDP(27)+1AND255

et bien ça fait des sauts de 8 pixels ... :hum


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 07/02/2014 à 13h28
Pour info, le "AND255" est inutile !

1AND255=1
2AND255=2



MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 13h47
Moi je trouve que ça rends pas mal…

C'est même plus rapide que le scrolling sde gradins ! :lol
Là ça tourne sur MSX2 classique

ZELDAG.dsk

-> FIchier : VDP27-2.ASC








Etrangement VDP(27) ne fonctionne pas dans un bloc turbo (Avec NestorBasic) alors que VDP(24) si :hum Edité par ericb59 Le 07/02/2014 à 14h32


banniere-ericb59e
Site web    
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 07/02/2014 à 14h45
ericb59 :
Dans le code que je t'ai mis plus haut j'ai mis :

VDP(27)=VDP(27)+1AND255



et bien ça fait des sauts de 8 pixels ... :hum




C'est normal parce que le registre 26 (VDP(27) en basic) ne stocke que 6 des 9 bits utlise pour le scroll horizontal. Les 3 autres bits sont dans le registre 27 (VDP(28) en basic)



Voir http://primrosebank.net/computers/mtx/projects/mtxplus/V9958-Technical-manual_v1.0.pdf



Donc mieux vaut utiliser la fonctione set scroll ou mettre les 2 registres a jour via:



x=x+1 and 255

vdp(27)=x/8:vdp(28)=(x and 7)



CQFD :-)
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 15h21
Hum hum !

Ben ça fait bien un déplacement par 1 pixel. Mais au bout de 8 il recommence à 0. Donc le scroll revient au début


Set scroll c'est uniquement sur MSX2+ … Si je ne m'abuse Edité par ericb59 Le 07/02/2014 à 15h24


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 07/02/2014 à 18h11
Ben on est bien en MSX2+ puisqu'il y a un scroll hardware sur les 2 directions.
Uniquement dispo sur MSX2+ et TR.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5484

Le 07/02/2014 à 18h42
zeldag.dsk


Sur cette disquette SCROLL.BAS
fait un scrolling fluide au pixel...
Mais un peut lent... Pas moyen d'utiliser Set Scroll avec Xbasic !!


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 08/02/2014 à 11h25
@Jipe: Pas mal la combine pour remplir de graphisme le BAS de l'écran (c'est de l'Overscan MSX ?)
Pour le moment, j'ai juste plaqué n'importe quoi, mais par la suite, j'attaquerai la partie graphique pure :D

@ Eric: Il est cool ton scrolling. :top
Peut être une solution le XBASIC :moue
Dommage que VDP(27) ne puisse pas être utilisé tel quel.
VDP(27) me permet d'animer les ENNEMIS volants. Cela influe de façon "visiblement aléatoire" sur le déplacement horizontal de certains sprites.
VDP(24) me permet d'animer les ENNEMIS rampants. Cela influe de façon cohérente sur le déplacement vertical de tous les Sprites Rampants.

De mon coté, j'ai continué à chercher toujours avec le même moteur à savoir VDP(27)=VDP(27)+1
J'ai pu implanter 4 SPRITES (ennemis) animés et avec un comportement pseudo intelligent :oups

Dans la vidée suivante,
1) je dirige le HERO avec le SPRITE BLANC.
2) Je TIRE en multidirectionnel en MARRON CLIGNOTANT.
3) j'ai ajouté 4 ennemis INTELLIGENTS qui réagissent selon mon comportement :top

Il me reste à implanter la COLLISION du HERO contre les ENNEMIS ainsi que la destruction par mes TIRS.
Faut que je trouve un exemple simple à adapter selon mes besoins. Si vous avez une idée!


http://youtu.be/UXV-3OdZI8c

Code TEXT :
10 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:SAVE"vdp27.asc",a
20 VDP(10)=(0):WIDTH80:SCREEN5,2:COLOR 15,1,1:SETPAGE0,0:CLS:DEFINTA-Z
30 '
40 '            Chargement ecran des niveaux en page 3
50 '
60 SETPAGE0,3:BLOAD"fondw.sc5",S
70 '
80 '            Chargement ecran des "sprites" en page 2
90 '
100 SETPAGE0,1:BLOAD"winnie.sc5",S
110 COLOR=RESTORE
120 '
130 ' -----------INSERTION DES MUSIQUES ET SONS----------
140 GOTO 1530
150 'DEFUSR=&HD000:A=USR(0):'STOP LA MUSIQUE
160 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,30:A=USR2(0):' MUSIQUE STAGE 6
170 '
180 '            Cr‚ation d'un sprite pour masque en page 0
190 '
200 SETPAGE0,0
210 FORI=&H7800TO&H781F:VPOKEI,255:NEXTI
220 'PUTSPRITE0,(100,100),7,0
230 '
240 '            Initialisation des varibles
250 '
260 V=3
270 C=0:X=100:Y=80:D=52:A=0:N=1:M=0
280 '
290 '              Mise en place d‚cors
300 '
310 GOSUB 1440
320 COPY(0,161)-(255,199),0TO(0,192),0:' Overscan
330 '
340 '              Sprites ennemis statiques
350 '
360 'ONSPRITEGOSUB1090
370 'PUTSPRITE5,(150,100),1,0:PUTSPRITE6,(180,75),1,0:PUTSPRITE7,(180,125),1,0
380 'PUTSPRITE8,(200,150),1,0:PUTSPRITE9,(200,50),1,0:putsprite10,(100,100),1,0
390 'SPRITE ON
400 '
410 '              Boucle du moteur principale
420 '
430 S=STICK(0):ONS+1GOSUB510,570,640,710,770,840,910,980,1040
440 PUTSPRITE0,(X,Y),11,0:PUTSPRITE1,(X,Y),0,0:PUTSPRITE2,(-X,X),9,0
450 PUTSPRITE3,(-X,-Y),15,0:PUTSPRITE4,(-Y,X),8,0:PUTSPRITE5,(VDP(27),X),1,0
460 GOTO 430
470 '
480 '
490 '              SP gestion mouvement: STATIQUE
500 '
510 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0
520 IFX<1THENX=0:'N=N-1:GOSUB1380
530 VDP(27)=VDP(27)+1AND255:X=X-1:RETURN
540 '
550 '              SP gestion mouvement: HAUT
560 '
570 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X,Y-50),3,0
580 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
590 IFX<1THENX=0:'N=N-1:GOSUB1380
600 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-1:VDP(27)=VDP(27)+1AND255:RETURN
610 '
620 '              SP gestion mouvement: HAUT/DROITE
630 '
640 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y-50),3,0
650 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
660 IFX>200THENX=196:N=N+1:GOSUB1400
670 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X+4:VDP(27)=VDP(27)+1AND255:RETURN
680 '
690 '              SP gestion mouvement: DROITE
700 '
710 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y),3,0
720 IFX>200THENX=196:N=N+1:GOSUB1400
730 VDP(27)=VDP(27)+1AND255:X=X+4:RETURN
740 '
750 '              SP gestion mouvement: DROITE/BAS
760 '
770 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y+50),3,0
780 IFY>189THENY=190:VDP(24)=VDP(24)-1
790 IFX>200THENX=196:N=N+1:GOSUB1400
800 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X+4:VDP(27)=VDP(27)+1AND255:RETURN
810 '
820 '              SP gestion mouvement: BAS
830 '
840 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X,Y+50),3,0
850 IFY>189THENY=190:VDP(24)=VDP(24)-1
860 IFX<1THENX=0:'N=N-1:GOSUB1380
870 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-1:VDP(27)=VDP(27)+1AND255:RETURN
880 '
890 '              SP gestion mouvement: BAS/GAUCHE
900 '
910 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X-50,Y+50),3,0:'THEND=0
920 IFY>189THENY=190:VDP(24)=VDP(24)-1
930 IFX<1THENX=0:'N=N-1:GOSUB1380
940 VDP(24)=VDP(24)+1AND255:Y=Y+6:X=X-4:VDP(27)=VDP(27)+1AND255:RETURN
950 '
960 '              SP gestion mouvement: GAUCHE
970 '
980 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X-50,Y),3,0:'THEND=0
990 IFX<1THENX=0:'N=N-1:GOSUB1380
1000 VDP(27)=VDP(27)+1AND255:X=X-6:RETURN
1010 '
1020 '              SP gestion mouvement: GAUCHE/HAUT
1030 '
1040 IFSTRIG(0)THENPOKE&HCFFF,11:A=USR2(0):PUTSPRITE1,(X+50,Y+50),3,0:'THEND=0
1050 IFY<-6THENY=-7:VDP(24)=VDP(24)+1
1060 IFX<1THENX=0:'N=N-1:GOSUB1380
1070 VDP(24)=VDP(24)-1AND255:Y=Y-6:X=X-4:VDP(27)=VDP(27)+1AND255:RETURN
1080 '
1090 '                Collisions
1100 '
1110 IF P=10THEN1260  ' si trou -> SP tombe
1120 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1130 COPY(D,A)-(D+25,A+37),1TO(4,4),3,TPSET
1140 COPY(0,0)-(34,50),3TO(X,Y),0
1150 POKE&HFD9F,201
1160 PSET(INT((X+15)/16),202+INT((Y+4)/16)),15:B=P*6:F=P*5
1170 COPY(240,191)-(255,206),1TO((INT((X+15)/16))*16,(INT((Y+36)/16))*16),2
1180 COPY(208,P*16-112)-(223,P*16-97),1TO(C*16+32,196),0
1190 POKE&HFD9F,201:POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1200 POKE&HCFFF,82:A=USR2(0)
1210 C=C+1
1220 GOTO 430
1230 '
1240 '              SP chute dans le trou
1250 '
1260 FORI=0TO36STEP2
1270 COPY(X,Y)-(X+34,Y+50),2TO(0,0),3
1280 COPY(D,A)-(D+25,A+37-I),1TO(4,4+I),3,TPSET
1290 COPY(0,0)-(34,50),3TO(X,Y),0
1300 A=A+38:IFA=190THENA=38
1310 B=I+40:POKE&HCFFF,70:A=USR2(0)
1320 IFPLAY(0)=-1THEN1320
1330 NEXT
1340 M=0:N=0
1350 LINE(32,196)-(255,212),1,BF
1360 V=V-1:IFV=0THEN1380
1370 GOTO 270
1380 SCREEN0:PRINT"                GAME OVER
1390 GOTO1390  
1400 '
1410 '              SP Mise en place du d‚cor
1420 '
1430 COPY(0,200)-(15,211),0TO(M*16,200),3
1440 COPY(N*16,200)-(15+N*16,211),3TO(0,200),0
1450 POKE&HCFFF,69:A=USR2(0)
1460 FORI=0TO15:FORJ=0TO11:P=POINT(I,J+200):COPY(P*16,191)-(15+P*16,206),1TO(I*16,J*16),0
1470 NEXTJ:NEXTI
1480 COPY(0,0)-(256,192),0TO(0,0),2
1490 M=N
1500 'BEEP
1510 RETURN
1520 GOTO 1520
1530 '---------DEBUT DE SALAMANDER DEMO MODIFIE----------------
1540 'POKE&HFBB1,1: 'EMPECHE CONTROL+STOP
1550 BLOAD"1.006":DEFUSR4=&HD600:' CHARGE LE PLAYER ?
1560 BLOAD"1.007":U=USR4(1):' CHARGE SONS ET MUSIQUES
1570 BLOAD"1.008":U=USR4(2):' CHARGE SONS ET MUSIQUES
1580 BLOAD"1.009":U=USR4(3):' CHARGE SONS ET MUSIQUES
1590 BLOAD"1.010":U=USR4(4):' CHARGE SONS ET MUSIQUES
1600 BLOAD"1.011":FORT=0TO2000:NEXT
1610 DEFUSR=&HD000:A=USR(0): 'PREREQUIS ARRET LA MUSIQUE
1620 DEFUSR2=&HD003:' PREREQUIS FONCTION INCONNUE
1630 POKE&HFD9F,201
1640 POKE&HFDA0,&H6:POKE&HFDA1,&HD0:POKE&HFD9F,&HC3
1650 ' LISTE COMPLETE DES MUSIQUES ET SONS DANS POKE SALAMANDER
1660 '
1670 DEFUSR=&HD000:A=USR(0):POKE&HCFFF,32:A=USR2(0):' MUSIQUE STAGE 6
1680 'POKE&HCFFF,67:A=USR2(0):' EXPLOSION D'ENNEMI MOYENNE
1690 '
1700 'DEFUSR=&HD000:A=USR(0):FORP=0TO10:NEXT:POKE&HFD9F,201:'PERMET ACCES DISK MAIS ARRETER MUSIQUE AVANT
1710 GOTO 150:' RETOUR A L ANIMATION
1720 '
1730 '---------FIN DE SALAMANDER DEMO MODIFIE-------------------

Edité par igal Le 08/02/2014 à 11h26


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie