La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?
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
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
@GDX: J'ai incorporé le "moteur" audio de Salamander donc toutes les musiques et bruitages sont au RDV
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
@GDX: J'ai incorporé le "moteur" audio de Salamander donc toutes les musiques et bruitages sont au RDV
igal
Membre non connecté
Conseiller Municipal
Après une journée à tâtonner, voici le résulta
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:
Merci de votre aide Edité par igal Le 06/02/2014 à 23h51
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 Edité par igal Le 06/02/2014 à 23h51
ericb59
Membre non connecté
Conseiller Municipal
Essaie ça Igal
… En Turbo-R !
… En Turbo-R !
Code TEXT :
Edité par
ericb59
Le 07/02/2014 à 08h46
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-------------------
igal
Membre non connecté
Conseiller Municipal
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 ?
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 ?
ericb59
Membre non connecté
Conseiller Municipal
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é
Après pour faire un scroll avec affichage au fur et à mesure, sans saccade, en basic… ben… Pas sur MSX en tout cas !
Comment veux tu que ça ne soit pas saccadé
Après pour faire un scroll avec affichage au fur et à mesure, sans saccade, en basic… ben… Pas sur MSX en tout cas !
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
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
igal
Membre non connecté
Conseiller Municipal
@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:
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 :
Edité par
igal
Le 07/02/2014 à 12h43
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-------------------
ericb59
Membre non connecté
Conseiller Municipal
Moi je trouve que ça rends pas mal…
C'est même plus rapide que le scrolling sde gradins !
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 Edité par ericb59 Le 07/02/2014 à 14h32
C'est même plus rapide que le scrolling sde gradins !
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 Edité par ericb59 Le 07/02/2014 à 14h32
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 ...
VDP(27)=VDP(27)+1AND255
et bien ça fait des sauts de 8 pixels ...
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 :-)
ericb59
Membre non connecté
Conseiller Municipal
Ben on est bien en MSX2+ puisqu'il y a un scroll hardware sur les 2 directions.
Uniquement dispo sur MSX2+ et TR.
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
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 !!
Sur cette disquette SCROLL.BAS
fait un scrolling fluide au pixel...
Mais un peut lent... Pas moyen d'utiliser Set Scroll avec Xbasic !!
igal
Membre non connecté
Conseiller Municipal
@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
@ Eric: Il est cool ton scrolling.
Peut être une solution le XBASIC
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
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
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
Pour le moment, j'ai juste plaqué n'importe quoi, mais par la suite, j'attaquerai la partie graphique pure
@ Eric: Il est cool ton scrolling.
Peut être une solution le XBASIC
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
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
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 :
Edité par
igal
Le 08/02/2014 à 11h26
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-------------------
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie