La Place des Développeurs [En COURS] Moteur de Sprites Moteur de Sprites
igal
Membre non connecté
Conseiller Municipal
Reprise du message précédent
@Métalion: J'ai bien compris la nécessité de créer un tableau ou chaque Tile est qualifié de "Neutre", "Obstacle", "Poison" tout comme on peut le voir dans le moteur Zelda de MsxOsaure.Puisque dans le cas présent, il s'agit de "SCROLL", j'ai donc réalisé la solution suivante.
Voici quelques explications:
Les "Sols" deviennent "réalité que parce qu'ils sont matérialisés par des Sprites.
Les Sprites immobiles sont donc de la Matière inerte et se limitent donc à n'être que des obstacles.
Les Sprites réagissent simplement par [ON SPRITE GOSUB].
Selon la commande des touches (selon l'état de (S)=Stick), un sous programme est appelé.
En gros le tableau qui prédéfini les TILES dans le Moteur de MsxOsaure se traduit par le placement judicieux des "Sprites" à mesure du déroulement du Scroll
Le tableau se présente provisoirement sous cette forme:
Code TEXT :
48 'variables Latitudes et Longitudes des sprites fixes 49 ' 50 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 51 AA=183:AB=183:AC=183:AD=183:AE=183:AF=183:AG=183 52 B1=24:B2=56:B3=73:B4=120:B5=137:B6=200:B7=216 53 BA=95:BB=95:BC=95:BD=63:BE=63:BF=111:BG=111 54 C1=24:C2=41:C3=57:C4=136:C5=168:C6=184:C7=216 55 CA=15:CB=15:CC=15:CD=-1:CE=-1:CF=31:CG=31 56 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216 57 DA=15:DB=15:DC=15:DD=15:DE=15:DF=16:DG=15 65 'Projection des Sprites Fixes 70 ' 100 PUTSPRITE1,(A1,AA),1,D:PUTSPRITE2,(A2,AB),1,D:PUTSPRITE3,(A3,AC),1,D:PUTSPRITE4,(A4,AD),1,D:PUTSPRITE5,(A5,AE),1,D:PUTSPRITE6,(A6,AF),1,D:PUTSPRITE7,(A7,AG),1,D 105 PUTSPRITE8,(B1,BA),1,D:PUTSPRITE9,(B2,BB),1,D:PUTSPRITE10,(B3,BC),15,D:PUTSPRITE11,(B4,BD),15,D:PUTSPRITE12,(B5,BE),15,D:PUTSPRITE13,(B6,BF),15,D:PUTSPRITE14,(B7,BG),1,D 110 PUTSPRITE15,(C1,CA),15,D:PUTSPRITE16,(C2,CB),1,D:PUTSPRITE17,(C3,CC),15,D:PUTSPRITE18,(C4,CD),15,D:PUTSPRITE19,(C5,CE),15,D:PUTSPRITE20,(C6,CF),15,D:PUTSPRITE21,(C7,CG),1,D 115 'PUTSPRITE22,(D1,DA),1,D:PUTSPRITE23,(D2,DB),1,D:PUTSPRITE24,(D3,DC),1,D:PUTSPRITE25,(D4,DD),1,D:PUTSPRITE26,(D5,DE),1,D:PUTSPRITE27,(D6,DF),1,D:PUTSPRITE28,(D7,DG),1,D
En définitive, une fois que le moteur de Sprite et le Scroll VDP(24) seront fusionnés, le tableau "s'égrainera" à mesure du déroulement du scroll.
ce devrait donner un truc du genre:
Code TEXT :
900 BLOAD"BRIBE001.SCC",S 901 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 902 AA=183:AB=183:AC=183:AD=183:AE=183:AF=183:AG=183 903 PUTSPRITE1,(A1,AA),1,D:PUTSPRITE2,(A2,AB),1,D:PUTSPRITE3,(A3,AC),1,D:PUTSPRITE4,(A4,AD),1,D:PUTSPRITE5,(A5,AE),1,D:PUTSPRITE6,(A6,AF),1,D:PUTSPRITE7,(A7,AG),1,D 904 GOSUB 1000 910 BLOAD"BRIBE002.SCC",S:GOSUB 1000 911 BLOAD"BRIBE003.SCC",S:GOSUB 1000 912 BLOAD"BRIBE004.SCC",S:GOSUB 1000 913 BLOAD"BRIBE005.SCC",S:GOSUB 1000 913 BLOAD"BRIBE006.SCC",S:GOSUB 1000 913 BLOAD"BRIBE007.SCC",S:GOSUB 1000 913 BLOAD"BRIBE008.SCC",S:GOSUB 1000 915 BLOAD"BRIBE009.SCC",S 916 B1=24:B2=56:B3=73:B4=120:B5=137:B6=200:B7=216 917 BA=95:BB=95:BC=95:BD=63:BE=63:BF=111:BG=111 918 PUTSPRITE8,(B1,BA),1,D:PUTSPRITE9,(B2,BB),1,D:PUTSPRITE10,(B3,BC),15,D:PUTSPRITE11,(B4,BD),15,D:PUTSPRITE12,(B5,BE),15,D:PUTSPRITE13,(B6,BF),15,D:PUTSPRITE14,(B7,BG),1,D 919 GOSUB 1000 1000S=STICK(0):ONS+1GOSUB160,170,180,190,160,160,160,230,240:VDP(24)=VDP(24)+2AND255:RETURN
De la sorte, la "création" et "l'emplacement" des SPRITE se fait progressivement.
Une fois affichés, ces sprites ne consomment pas de ressources puisque en réalité, c'est VDP(24) qui déplace l'ensemble de l'image sans avoir à modifier les coordonnées des sprites
Il est possible d'intégrer des Sprites animés comme des "Ascenceurs".
Pour se faire, il faut intégrer les Sprites dans "Le Noyau Dur" de la boucle.
ici il suffit d'intégrer les commandes suivantes pour qu'un "ascenseur" se déplace latéralement dans l'écran.
Lorsque le "Hero" saute sur l'ascenceur, les Variables du Héros prennent la valeur des variables de l'asceur ce qui a pour effet de déplacer le personnage comme si il est chargé dessus.
140 XB=XB+1AND255:IFAS=1THENX=XB:'MOTEUR ASCENCEUR
141 PUTSPRITE31,(XB,YB),7,A:'ASCENCEUR
142 IFY=YB-16THENAS=1
150 'Moteur Principal
155 S=STICK(0):ONS+1GOSUB 1600,1700,1800,190,160,160,160,230,240:'Renvoie selon Stick ZERO
156 GOTO140
Voici le listing:
Code TEXT :
0 'Sauvegarde Travail en cours***** 10 'save"SPRITE23.asc",a 15 'Mode ecran********************* 20 SCREEN5,2:BLOAD"alpha.sc5",S:COLOR=RESTORE 25 ' 27 'Variables Sprites Mobiles****** 28 ' 30 X=1+96+8:Y=0+7:'Position initiale du HERO 31 XB=32+1:YB=127-64:' Position initiale ASCENCEUR 32 VM=16:VC=8:VS=16:VH=8:'Vitesses Monte, Chute, Saute, Horizontale 33 SH=1:SD=1:SG=1:'Empeche les sauts. 34 P=1:UP=0:' Active la pesanteur 35 RI=0:LE=0:' Desactive le passe muraille Droite et Gauche 36 AS=0 40 'DATAS des Patterns des Sprites*************** 42 GOTO 1250 44 'Variables des Pattern des sprites************* 46 A=0:B=1:C=2:D=3:E=4 48 'variables Latitudes et Longitudes des sprites fixes 49 ' 50 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 51 AA=183:AB=183:AC=183:AD=183:AE=183:AF=183:AG=183 52 B1=24:B2=56:B3=73:B4=120:B5=137:B6=200:B7=216 53 BA=95:BB=95:BC=95:BD=63:BE=63:BF=111:BG=111 54 C1=24:C2=41:C3=57:C4=136:C5=168:C6=184:C7=216 55 CA=15:CB=15:CC=15:CD=-1:CE=-1:CF=31:CG=31 56 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216 57 DA=15:DB=15:DC=15:DD=15:DE=15:DF=16:DG=15 65 'Projection des Sprites Fixes 70 ' 100 PUTSPRITE1,(A1,AA),1,D:PUTSPRITE2,(A2,AB),1,D:PUTSPRITE3,(A3,AC),1,D:PUTSPRITE4,(A4,AD),1,D:PUTSPRITE5,(A5,AE),1,D:PUTSPRITE6,(A6,AF),1,D:PUTSPRITE7,(A7,AG),1,D 105 PUTSPRITE8,(B1,BA),1,D:PUTSPRITE9,(B2,BB),1,D:PUTSPRITE10,(B3,BC),15,D:PUTSPRITE11,(B4,BD),15,D:PUTSPRITE12,(B5,BE),15,D:PUTSPRITE13,(B6,BF),15,D:PUTSPRITE14,(B7,BG),1,D 110 PUTSPRITE15,(C1,CA),15,D:PUTSPRITE16,(C2,CB),1,D:PUTSPRITE17,(C3,CC),15,D:PUTSPRITE18,(C4,CD),15,D:PUTSPRITE19,(C5,CE),15,D:PUTSPRITE20,(C6,CF),15,D:PUTSPRITE21,(C7,CG),1,D 115 'PUTSPRITE22,(D1,DA),1,D:PUTSPRITE23,(D2,DB),1,D:PUTSPRITE24,(D3,DC),1,D:PUTSPRITE25,(D4,DD),1,D:PUTSPRITE26,(D5,DE),1,D:PUTSPRITE27,(D6,DF),1,D:PUTSPRITE28,(D7,DG),1,D 125 ' 138 'Projection des Sprites Mobiles*************** 139 ' 140 'XB=XB+1AND255:IFAS=1THENX=XB:'MOTEUR ASCENCEUR 141 'PUTSPRITE31,(XB,YB),7,A:'ASCENCEUR 142 'IFY=YB-16THENAS=1 150 'Moteur Principal 153 S=STICK(0):ONS+1GOSUB 160,170,180,190,160,160,160,230,240:'Renvoie selon Stick ZERO 154 GOTO150 155 ' 156 'Gestion des Mouvements 157 ' 158 'STATIQUE 160 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1000:SPRITEON:'Si colision aller a 1000 161 'IFRI=1THENP=1 162 'IFLE=1THENP=1 163 IFP=1THEN210:'Si pesanteur alors Chute de 8 Pixels 164 RETURN 167 ' 168 'SAUT HAUT 170 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1010:SPRITEON:'Si colision aller a 1010 172 IFSH=5THEN210:'Si Saut deja utilise alors aller a 210 173 IFUP=1THENY=Y+1:UP=0:AS=0 174 Y=Y-VS:SH=SH+1:P=1:'Saut Haut utilisé! Pesanteur active 176 RETURN 177 ' 178 'SAUT DROITE 180 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1020:SPRITEON:'Si colision aller a 1020 182 IFSD=2THEN210:'Si Saut Droite deja utilise alors aller a 210 183 IFUP=1THENY=Y+1:UP=0:AS=0 184 X=X+VS:Y=Y-VS:SD=SD+1:P=1:'Saut Droite utilisé! Pesanteur active 186 RETURN 187 ' 188 'DROITE 190 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030 192 X=X+VH:'Deplacement a droite 193 ' 194 IFP=1THEN210:'Si pesanteur alors chute de 8 Pixels 196 RETURN 197 ' 198 'CHUTE A DROITE 200 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1040:SPRITEON:SI COLISION ALLER A 1040 202 X=X+VC:'Deplacement a Droite 203 IFUP=1THENY=Y+1:UP=0 204 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 206 RETURN 207 ' 208 'CHUTE 210 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1050:SPRITEON:'Si colision alors 1050 211 IFLE=1THENEL=EL+1:P=1:'Si RI actif alors Pesanteur Actif 212 IFEL=2THENX=X+1:LE=0:EL=0 213 IFRI=1THENRI=0:P=1:'Si RI actif alors Pesanteur Actif 214 IFUP=1THENY=Y+1:UP=0:'SI UP SURLEV ALORS UP RABAISS 215 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 216 RETURN 217 ' 218 'CHUTE A GAUCHE 220 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1060:SPRITEON:SI COLISION ALLER A 1060 222 X=X-16:'Deplacement a Gauche 223 IFUP=1THENY=Y+1:UP=0:SI UP SURLEV ALORS UP RABAISS 224 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 226 RETURN 227 ' 228 'GAUCHE 230 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070 232 X=X-VH:'Deplacement a Gauche 233 ' 234 IFP=1THEN210:'Si pesanteur alors chute de 8 Pixels 236 RETURN 237 ' 238 'SAUT GAUCHE 240 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1080:SPRITEON:'Si colision aller a 1020 242 IFSG=2THEN210:'Si Saut Droite deja utilise alors aller a 210 243 IFUP=1THENY=Y+1:UP=0:AS=0 244 X=X-VS:Y=Y-VS:SG=SG+1:P=1:'Saut Gauche utilisé! Pesanteur active 246 RETURN 998 ' 999 'COLISION STATIQUE 1000 P=0:SH=0:SD=0:SG=0 1001 SPRITEOFF 1002 IFRI=1THENP=1 1003 IFLE=1THENP=1 1004 IFUP=0THENY=Y-1:UP=1 1005 RETURN 1008 ' 1009 'COLISION SAUT HAUT 1010 P=0:SH=0:SD=0:SG=0 1011 SPRITEOFF 1013 IFUP=0THENY=Y-1:UP=1 1014 RETURN 1018 ' 1019 'COLISION SAUT DROITE 1020 P=0:SH=0:SD=0:SG=0 1021 SPRITEOFF 1023 IFUP=0THENY=Y-1:UP=1 1024 RETURN 1028 ' 1029 'COLISION DROITE 1030 P=1:SH=0:SD=0:SG=0:RI=1 1031 SPRITEOFF 1033 IFUP=0THENY=Y-1:UP=1 1034 RETURN 1038 ' 1039 'COLISION CHUTE A DROITE 1040 P=0:SH=0:SD=0:SG=0 1041 SPRITEOFF 1043 IFUP=0THENY=Y-1:UP=1 1044 RETURN 1048 ' 1049 'COLISION BAS 1050 P=0:SH=0:SD=0:SG=0 1051 'SPRITEOFF 1053 IFUP=0THENY=Y-1:UP=1 1054 RETURN 1058 ' 1059 'COLISION CHUTE A GAUCHE 1060 P=0:SH=1:SD=0:SG=0 1061 SPRITEOFF 1063 IFUP=0THENY=Y-1:UP=1 1064 RETURN 1068 ' 1069 'COLISION GAUCHE 1070 P=1:SH=0:SD=0:SG=0:LE=1 1071 X=X-16-1:SPRITEOFF 1073 IFUP=0THENY=Y-1:UP=1 1074 RETURN 1078 ' 1079 'COLISION SAUT GAUCHE 1080 P=0:SH=0:SD=0:SG=0 1081 SPRITEOFF 1083 IFUP=0THENY=Y-1:UP=1 1084 RETURN 1088 ' 1200 DESSIN DES SPRITES 1201 ' 1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI 1252 ' DESSIN DES SPRITES 1260 RESTORE 1301 1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI 1280 SPRITE$(0)=S$ 1290 GOTO 1350 1301 DATA 0101010101010101 1302 DATA 0101010101010101 1303 DATA 0101010101010101 1304 DATA 0101010101010101 1305 DATA 0101010101010101 1306 DATA 0101010101010101 1307 DATA 0101010101010101 1308 DATA 0101010101010101 1309 DATA 0101010101010101 1310 DATA 0101010101010101 1311 DATA 0101010101010101 1312 DATA 0101010101010101 1313 DATA 0101010101010101 1314 DATA 0101010101010101 1315 DATA 0101010101010101 1316 DATA 0101010101010101 1350 FORJ=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJ 1360 RESTORE 1401 1370 FORJ=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJ 1380 SPRITE$(1)=T$ 1390 GOTO 1450 1401 DATA 0000000000000000 1402 DATA 0000000000000000 1403 DATA 0000000000000000 1404 DATA 0000000000000000 1405 DATA 0000000000000000 1406 DATA 0000000000000000 1407 DATA 0000000000000000 1408 DATA 0000000000000000 1409 DATA 1010101010101010 1410 DATA 1010101010101010 1411 DATA 1010101010101010 1412 DATA 1010101010101010 1413 DATA 1010101010101010 1414 DATA 1010101010101010 1415 DATA 1010101010101010 1416 DATA 1010101010101010 1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK 1460 RESTORE 1501 1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK 1480 SPRITE$(2)=U$ 1490 GOTO 1550 1501 DATA 1010101010101010 1502 DATA 1010101010101010 1503 DATA 1010101010101010 1504 DATA 1010101010101010 1505 DATA 1010101010101010 1506 DATA 1010101010101010 1507 DATA 1010101010101010 1508 DATA 1010101010101010 1509 DATA 0000000000000000 1510 DATA 0000000000000000 1511 DATA 0000000000000000 1512 DATA 0000000000000000 1513 DATA 0000000000000000 1514 DATA 0000000000000000 1515 DATA 0000000000000000 1516 DATA 0000000000000000 1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL 1560 RESTORE 1601 1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL 1580 SPRITE$(3)=V$ 1590 GOTO 44 1601 DATA 0000000000000000 1602 DATA 0000000000000000 1603 DATA 0000000000000000 1604 DATA 0000000000000000 1605 DATA 0000000000000000 1606 DATA 0000000000000000 1607 DATA 0000000000000000 1608 DATA 0000000000000000 1609 DATA 1111111111111111 1610 DATA 0000000000000000 1611 DATA 0000000000000000 1612 DATA 0000000000000000 1613 DATA 0000000000000000 1614 DATA 0000000000000000 1615 DATA 0000000000000000 1616 DATA 0000000000000000
A suivre
igal :
En gros le tableau qui prédéfini les TILES dans le Moteur de MsxOsaure se traduit par le placement judicieux des "Sprites" à mesure du déroulement du Scroll
J'ai bien compris ta technique, mais je reste convaincu qu'elle est plus complexe et plus difficile à mettre en oeuvre que le simple test de la tile qui se situe sous (ou à côté) du sprite.
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
Voila...
Finalement, j'ai trouvé l'astuce suivante.
J'ai créé 4 Sprites.
2 Sprites qui ont une buté sur la face supérieur.
2 sprites qui ont une buté sur la face inférieur.
Lorsque le sprite subit une collision dû à la pesanteur, ce même sprite remonte de 2 pixels.
L’interstice de 2 pixels est comblé d'un pixel par le Héro qui se déplace.
L'interstice de 1 pixel restant est comblé par l'extrémité du SOL qui contient un Sprite [Extrémité Droite] ou encore un Sprite [Extrémité Gauche].
De la sorte, lorsque l'on se déplace horizontalement, le héro est en "sustentation" jusqu'à ce qu'il arrive en bout de "Plateau" (bout de sol), ou le héro rentre obligatoirement en collision avec la [Buté du sprite] placé aux extrémités.
Au final:
si le héro touche l'extrémité du sol, la pesanteur s'active.
si le héro saute, la pesanteur s'active.
On y est presque
Pour le Fun, j'ai ajouté un ascenseur et ca marche pas mal.
La prochaine étape consistera à fusionner [Le Moteur de Sprite] avec [Le Scroll Vdp(24)
voici le listing actuel.
A suivre
Finalement, j'ai trouvé l'astuce suivante.
J'ai créé 4 Sprites.
2 Sprites qui ont une buté sur la face supérieur.
2 sprites qui ont une buté sur la face inférieur.
Lorsque le sprite subit une collision dû à la pesanteur, ce même sprite remonte de 2 pixels.
L’interstice de 2 pixels est comblé d'un pixel par le Héro qui se déplace.
L'interstice de 1 pixel restant est comblé par l'extrémité du SOL qui contient un Sprite [Extrémité Droite] ou encore un Sprite [Extrémité Gauche].
De la sorte, lorsque l'on se déplace horizontalement, le héro est en "sustentation" jusqu'à ce qu'il arrive en bout de "Plateau" (bout de sol), ou le héro rentre obligatoirement en collision avec la [Buté du sprite] placé aux extrémités.
Au final:
si le héro touche l'extrémité du sol, la pesanteur s'active.
si le héro saute, la pesanteur s'active.
On y est presque
Pour le Fun, j'ai ajouté un ascenseur et ca marche pas mal.
La prochaine étape consistera à fusionner [Le Moteur de Sprite] avec [Le Scroll Vdp(24)
voici le listing actuel.
Code TEXT :
0 'Sauvegarde Travail en cours***** 10 'save"SPRITE25.asc",a 15 'Mode ecran********************* 20 SCREEN5,2:BLOAD"alpha.sc5",S:COLOR=RESTORE 25 ' 27 'Variables Sprites Mobiles****** 28 ' 30 X=1+96+8:Y=0+7:'Position initiale du HERO 31 XB=32+1:YB=127:' Position initiale ASCENCEUR 32 VM=16:VC=8:VS=16:VH=8:'Vitesses Monte, Chute, Saute, Horizontale 33 SH=1:SD=1:SG=1:'Empeche les sauts. 34 P=1:UP=0:' Active la pesanteur 35 RI=0:LE=0:' Desactive le passe muraille Droite et Gauche 36 AS=0 40 'DATAS des Patterns des Sprites*************** 42 GOTO 1250 44 'Variables des Pattern des sprites************* 46 A=0:B=1:C=2:D=3:E=4 48 'variables Latitudes et Longitudes des sprites fixes 49 ' 50 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 51 AA=183:AB=183:AC=183:AD=183:AE=183:AF=183:AG=183 52 B1=24:B2=56:B3=73:B4=120:B5=137:B6=200:B7=216 53 BA=95:BB=95:BC=95:BD=63:BE=63:BF=111:BG=111 54 C1=24:C2=41:C3=57:C4=136:C5=168:C6=184:C7=216 55 CA=15:CB=15:CC=15:CD=-1:CE=-1:CF=31:CG=31 56 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216 57 DA=15:DB=15:DC=15:DD=15:DE=15:DF=16:DG=15 65 'Projection des Sprites Fixes 70 ' 100 PUTSPRITE1,(A1,AA),1,A:PUTSPRITE2,(A2,AB),1,A:PUTSPRITE3,(A3,AC),1,A:PUTSPRITE4,(A4,AD),1,A:PUTSPRITE5,(A5,AE),1,A:PUTSPRITE6,(A6,AF),1,A:PUTSPRITE7,(A7,AG),1,A 105 PUTSPRITE8,(B1,BA),1,A:PUTSPRITE9,(B2,BB),1,A:PUTSPRITE10,(B3,BC),15,C:PUTSPRITE11,(B4,BD),15,D:PUTSPRITE12,(B5,BE),15,C:PUTSPRITE13,(B6,BF),15,D:PUTSPRITE14,(B7,BG),1,A 110 PUTSPRITE15,(C1,CA),15,D:PUTSPRITE16,(C2,CB),1,A:PUTSPRITE17,(C3,CC),15,C:PUTSPRITE18,(C4,CD),15,D:PUTSPRITE19,(C5,CE),15,C:PUTSPRITE20,(C6,CF),15,D:PUTSPRITE21,(C7,CG),1,A 115 'PUTSPRITE22,(D1,DA),1,A:PUTSPRITE23,(D2,DB),1,A:PUTSPRITE24,(D3,DC),1,A:PUTSPRITE25,(D4,DD),1,A:PUTSPRITE26,(D5,DE),1,A:PUTSPRITE27,(D6,DF),1,A:PUTSPRITE28,(D7,DG),1,A 125 ' 138 'Projection des Sprites Mobiles*************** 139 ' 140 XB=XB+8AND255:'MOTEUR ASCENCEUR 141 IFAS=1THENX=XB:'ADHERENCE ASCENCEUR 1 143 PUTSPRITE29,(XB,YB),15,A:'ASCENCEUR 1 145 IFY>YB-14THENIFY<YBTHENIFX>XB-4THENIFX<XB+8THENAS=1 150 'Moteur Principal 153 S=STICK(0):ONS+1GOSUB 160,170,180,190,160,160,160,230,240:'Renvoie selon Stick ZERO 154 GOTO140 155 ' 156 'Gestion des Mouvements 157 ' 158 'STATIQUE 160 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1000:SPRITEON:'Si colision aller a 1000 161 'IFRI=1THENP=1 162 'IFLE=1THENP=1 163 IFP=1THEN210:'Si pesanteur alors Chute de 8 Pixels 164 RETURN 167 ' 168 'SAUT HAUT 170 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1010:SPRITEON:'Si colision aller a 1010 172 IFSH=5THEN210:'Si Saut deja utilise alors aller a 210 173 IFUP=1THENY=Y+2:UP=0:AS=0 174 Y=Y-VS:SH=SH+1:P=1:'Saut Haut utilisé! Pesanteur active 176 RETURN 177 ' 178 'SAUT DROITE 180 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1020:SPRITEON:'Si colision aller a 1020 182 IFSD=2THEN210:'Si Saut Droite deja utilise alors aller a 210 183 IFUP=1THENY=Y+2:UP=0:AS=0 184 X=X+VS:Y=Y-VS:SD=SD+1:P=1:'Saut Droite utilisé! Pesanteur active 186 RETURN 187 ' 188 'DROITE 190 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030 192 X=X+VH:'Deplacement a droite 193 ' 194 IFP=1THEN210:'Si pesanteur alors chute de 8 Pixels 196 RETURN 197 ' 198 'CHUTE A DROITE 200 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1040:SPRITEON:SI COLISION ALLER A 1040 202 X=X+VC:'Deplacement a Droite 203 IFUP=1THENY=Y+2:UP=0 204 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 206 RETURN 207 ' 208 'CHUTE 210 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1050:SPRITEON:'Si colision alors 1050 211 IFLE=1THENEL=EL+1:P=1:'Si RI actif alors Pesanteur Actif 212 IFEL=2THENX=X+1:LE=0:EL=0 213 IFRI=1THENRI=0:P=1:'Si RI actif alors Pesanteur Actif 214 IFUP=1THENY=Y+2:UP=0:'SI UP SURLEV ALORS UP RABAISS 215 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 216 RETURN 217 ' 218 'CHUTE A GAUCHE 220 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1060:SPRITEON:SI COLISION ALLER A 1060 222 X=X-16:'Deplacement a Gauche 223 IFUP=1THENY=Y+2:UP=0:SI UP SURLEV ALORS UP RABAISS 224 IFP=1THENY=Y+VC:'Si pesanteur alors chute de 8 pixels 226 RETURN 227 ' 228 'GAUCHE 230 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070 232 X=X-VH:'Deplacement a Gauche 233 ' 234 IFP=1THEN210:'Si pesanteur alors chute de 8 Pixels 236 RETURN 237 ' 238 'SAUT GAUCHE 240 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1080:SPRITEON:'Si colision aller a 1020 242 IFSG=2THEN210:'Si Saut Droite deja utilise alors aller a 210 243 IFUP=1THENY=Y+2:UP=0:AS=0 244 X=X-VS:Y=Y-VS:SG=SG+1:P=1:'Saut Gauche utilisé! Pesanteur active 246 RETURN 998 ' 999 'COLISION STATIQUE 1000 P=0:SH=0:SD=0:SG=0 1001 SPRITEOFF 1002 IFRI=1THENP=1 1003 IFLE=1THENP=1 1004 IFUP=0THENY=Y-2:UP=1 1005 RETURN 1008 ' 1009 'COLISION SAUT HAUT 1010 P=0:SH=0:SD=0:SG=0 1011 SPRITEOFF 1013 IFUP=0THENY=Y-2:UP=1 1014 RETURN 1018 ' 1019 'COLISION SAUT DROITE 1020 P=0:SH=0:SD=0:SG=0 1021 SPRITEOFF 1023 IFUP=0THENY=Y-2:UP=1 1024 RETURN 1028 ' 1029 'COLISION DROITE 1030 P=1:SH=0:SD=0:SG=0:RI=1 1031 SPRITEOFF 1033 IFUP=0THENY=Y-2:UP=1 1034 RETURN 1038 ' 1039 'COLISION CHUTE A DROITE 1040 P=0:SH=0:SD=0:SG=0 1041 SPRITEOFF 1043 IFUP=0THENY=Y-2:UP=1 1044 RETURN 1048 ' 1049 'COLISION BAS 1050 P=0:SH=0:SD=0:SG=0 1051 'SPRITEOFF 1053 IFUP=0THENY=Y-2:UP=1 1054 RETURN 1058 ' 1059 'COLISION CHUTE A GAUCHE 1060 P=0:SH=1:SD=0:SG=0 1061 SPRITEOFF 1063 IFUP=0THENY=Y-2:UP=1 1064 RETURN 1068 ' 1069 'COLISION GAUCHE 1070 P=1:SH=0:SD=0:SG=0:LE=1 1071 X=X-16-1:SPRITEOFF 1073 IFUP=0THENY=Y-2:UP=1 1074 RETURN 1078 ' 1079 'COLISION SAUT GAUCHE 1080 P=0:SH=0:SD=0:SG=0 1081 SPRITEOFF 1083 IFUP=0THENY=Y-2:UP=1 1084 RETURN 1088 ' 1200 DESSIN DES SPRITES 1201 ' 1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI 1252 ' DESSIN DES SPRITES 1260 RESTORE 1301 1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI 1280 SPRITE$(0)=S$ 1290 GOTO 1350 1301 DATA 0000000000000000 1302 DATA 0000000000000000 1303 DATA 0000000000000000 1304 DATA 0000000000000000 1305 DATA 0000000000000000 1306 DATA 0000000000000000 1307 DATA 0000000000000000 1308 DATA 0000000000000000 1309 DATA 1111111111111111 1310 DATA 1000000000000000 1311 DATA 0000000000000000 1312 DATA 0000000000000000 1313 DATA 0000000000000000 1314 DATA 0000000000000000 1315 DATA 0000000000000000 1316 DATA 0000000000000000 1350 FORJ=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJ 1360 RESTORE 1401 1370 FORJ=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJ 1380 SPRITE$(1)=T$ 1390 GOTO 1450 1401 DATA 0000000000000000 1402 DATA 0000000000000000 1403 DATA 0000000000000000 1404 DATA 0000000000000000 1405 DATA 0000000000000000 1406 DATA 0000000000000000 1407 DATA 0000000000000000 1408 DATA 0000000000000000 1409 DATA 1111111111111111 1410 DATA 0000000000000001 1411 DATA 0000000000000000 1412 DATA 0000000000000000 1413 DATA 0000000000000000 1414 DATA 0000000000000000 1415 DATA 0000000000000000 1416 DATA 0000000000000000 1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK 1460 RESTORE 1501 1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK 1480 SPRITE$(2)=U$ 1490 GOTO 1550 1501 DATA 0000000000000000 1502 DATA 0000000000000000 1503 DATA 0000000000000000 1504 DATA 0000000000000000 1505 DATA 0000000000000000 1506 DATA 0000000000000000 1507 DATA 0000000000000000 1508 DATA 0000000010000000 1509 DATA 1111111111111111 1510 DATA 0000000000000000 1511 DATA 0000000000000000 1512 DATA 0000000000000000 1513 DATA 0000000000000000 1514 DATA 0000000000000000 1515 DATA 0000000000000000 1516 DATA 0000000000000000 1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL 1560 RESTORE 1601 1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL 1580 SPRITE$(3)=V$ 1590 GOTO 44 1601 DATA 0000000000000000 1602 DATA 0000000000000000 1603 DATA 0000000000000000 1604 DATA 0000000000000000 1605 DATA 0000000000000000 1606 DATA 0000000000000000 1607 DATA 0000000000000000 1608 DATA 1000000000000000 1609 DATA 1111111111111111 1610 DATA 0000000000000000 1611 DATA 0000000000000000 1612 DATA 0000000000000000 1613 DATA 0000000000000000 1614 DATA 0000000000000000 1615 DATA 0000000000000000 1616 DATA 0000000000000000
A suivre
igal
Membre non connecté
Conseiller Municipal
J'ai enfin pu fixer le problème de "transperçage" du SOL lorsque le Héro est soumis à la [Pesanteur] combinée aux directions [Droite] ou [Gauche].
Il suffisait d'ajouter la condition suivante en, cas de collision [Droite]:
1029 'COLISION DROITE
1030 IFP=1THENRETURN
1031 P=1:SH=0:SD=0:SG=0:RI=1
1032 SPRITEOFF
1033 IFUP=0THENY=Y-2:UP=1
1034 RETURN
Pareil pour la collision [Gauche]
1069 'COLISION GAUCHE
1070 IFP=1THENRETURN
1071 P=1:SH=0:SD=0:SG=0:LE=1
1072 X=X-16-1:SPRITEOFF
1073 IFUP=0THENY=Y-2:UP=1
1074 RETURN
La solution se résume à la Phrase suivante:
Lors de la collision, si la Pesanteur est active, alors retourner à la boucle principale
Je n'ai plus qu'à fusionner SPRITE et SCROLL dans le sujet Joe&Mac Challencge=> http://www.msxvillage.fr/forum/topic.php?id=2642
Il suffisait d'ajouter la condition suivante en, cas de collision [Droite]:
1029 'COLISION DROITE
1030 IFP=1THENRETURN
1031 P=1:SH=0:SD=0:SG=0:RI=1
1032 SPRITEOFF
1033 IFUP=0THENY=Y-2:UP=1
1034 RETURN
Pareil pour la collision [Gauche]
1069 'COLISION GAUCHE
1070 IFP=1THENRETURN
1071 P=1:SH=0:SD=0:SG=0:LE=1
1072 X=X-16-1:SPRITEOFF
1073 IFUP=0THENY=Y-2:UP=1
1074 RETURN
La solution se résume à la Phrase suivante:
Lors de la collision, si la Pesanteur est active, alors retourner à la boucle principale
Je n'ai plus qu'à fusionner SPRITE et SCROLL dans le sujet Joe&Mac Challencge=> http://www.msxvillage.fr/forum/topic.php?id=2642
igal
Membre non connecté
Conseiller Municipal
Voici un site fort intéressant pour créer des SPRITES directement sur PC et générer le code DATA pour les exploiter sur MSX.
http://msx.jannone.org/tinysprite/tinysprite.html
Eric ayant confirmer qu'il est possible de "régénérer" les zones réservées de Sprites par un simple BLOAD, l'approche devient intéressante.
Je pose la question au cas ou:
Le site Jannonne.org/tinysprite propose de dessiner les sprites pixel par pixels.
Savez vous si il est possible de [COPIER/COLLER] des dessins de SPrites déja existant sur les sites spécialisés?
Par exmple, ici les personnages de Magic Sword sont déjà présent.
http://www.spriters-resource.com/arcade/magicsword/sheet/59289/
En fait je cherche à créer des dizaines de sprites rapidement sur PC mais il faut que je puisse récuperer les DATAS en sortie
http://msx.jannone.org/tinysprite/tinysprite.html
Eric ayant confirmer qu'il est possible de "régénérer" les zones réservées de Sprites par un simple BLOAD, l'approche devient intéressante.
Je pose la question au cas ou:
Le site Jannonne.org/tinysprite propose de dessiner les sprites pixel par pixels.
Savez vous si il est possible de [COPIER/COLLER] des dessins de SPrites déja existant sur les sites spécialisés?
Par exmple, ici les personnages de Magic Sword sont déjà présent.
http://www.spriters-resource.com/arcade/magicsword/sheet/59289/
En fait je cherche à créer des dizaines de sprites rapidement sur PC mais il faut que je puisse récuperer les DATAS en sortie
ce que tu vois sur spriter-ressource ne sont pas des sprites tel que tiny sprite pourra en créer
ce dont plutot des copy d'écran graphique que l'on déplace par blocs
sur MSX les sprites sont plutot comme ceci
http://www.spriters-resource.com/msx_msx2/vampirekiller/sheet/21332/
avec Blue MSX pour savoir si on affaire a des sprites il suffit d'appuyer sur LCtrl+LSft+S et il vont disparaitre
ce dont plutot des copy d'écran graphique que l'on déplace par blocs
sur MSX les sprites sont plutot comme ceci
http://www.spriters-resource.com/msx_msx2/vampirekiller/sheet/21332/
avec Blue MSX pour savoir si on affaire a des sprites il suffit d'appuyer sur LCtrl+LSft+S et il vont disparaitre
ericb59
Membre non connecté
Conseiller Municipal
je sais qu'il y a des outils créés par développeurs spécifiquement pour tel ou tel jeu...
Qui vont scanner une image .PNG et créer les sprites correspondant...
Mais je n'en ai pas en ma possession...
Qui vont scanner une image .PNG et créer les sprites correspondant...
Mais je n'en ai pas en ma possession...
igal
Membre non connecté
Conseiller Municipal
L'idéal est est un outil qui systématise la création des DATAS qui forment les SPRITES en couleurs.
Cela permettrait d'obtenir les datas en deux coups de souris après quoi, il ne reste plus qu'à le "projeter" dans la "Zone réservée" des SPRITES à l'aide de PUT SPRITE qui envoie les DATAS dans cette zone.
Ensuite BSAVE pour avoir un instantané de la Zone
@Jipe: Je n'ai jamais travaillé les Sprites coté graphique mais il faut faire avec les infos que tu donnes la dessous
Faudrait pouvoir utiliser les SPRITES de la PAGE 1 sur le PAGE 0 pour doubler la variété des persos
A un moment je me demandais si il etait possible d'afficher les SPRITES de la PAGE 1 sur la PAGE 0 simplement en soustrayant à la coordonnée Y 256 lignes Edité par igal Le 07/12/2015 à 19h01
Cela permettrait d'obtenir les datas en deux coups de souris après quoi, il ne reste plus qu'à le "projeter" dans la "Zone réservée" des SPRITES à l'aide de PUT SPRITE qui envoie les DATAS dans cette zone.
Ensuite BSAVE pour avoir un instantané de la Zone
@Jipe: Je n'ai jamais travaillé les Sprites coté graphique mais il faut faire avec les infos que tu donnes la dessous
Jipe :
pour le screen 8 les sprites les adresses sont
de F000H a F7FFH 2048 octets pour la forme des sprites
de F800H a F9FFH 512 octets pour les couleurs des sprites
pour avoir un personnage multicolore il faut superposer plusieurs sprites et la c'est plus dur de gérer les formes
de F000H a F7FFH 2048 octets pour la forme des sprites
de F800H a F9FFH 512 octets pour les couleurs des sprites
pour avoir un personnage multicolore il faut superposer plusieurs sprites et la c'est plus dur de gérer les formes
Faudrait pouvoir utiliser les SPRITES de la PAGE 1 sur le PAGE 0 pour doubler la variété des persos
A un moment je me demandais si il etait possible d'afficher les SPRITES de la PAGE 1 sur la PAGE 0 simplement en soustrayant à la coordonnée Y 256 lignes Edité par igal Le 07/12/2015 à 19h01
igal :
Faudrait pouvoir utiliser les SPRITES de la PAGE 1 sur le PAGE 0 pour doubler la variété des persos
A un moment je me demandais si il etait possible d'afficher les SPRITES de la PAGE 1 sur la PAGE 0 simplement en soustrayant à la coordonnée Y 256 lignes
A un moment je me demandais si il etait possible d'afficher les SPRITES de la PAGE 1 sur la PAGE 0 simplement en soustrayant à la coordonnée Y 256 lignes
Impossible : il n'y a qu'une seule zone de sprite active par mode graphique, quelle que soit la page sélectionnée. De plus, la limite du nombre de sprites affichés à l'écran est une contrainte hardware du VDP, et n'est pas liée à la mémoire. Rappel : pour MSX2, c'est 32 sprites maximum.
Par contre, ce qu'il est possible de faire, c'est stocker plusieurs zones de sprites dans la VRAM, et puis sélectionner l'une ou l'autre en fonction de tes besoins. Mais toujours en respectant les limites hardwares du VDP.
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
Merci pour ces précisions Métalion.
En voulant rendre plus lisible mon moteur de SPRITES, j'obtiens maintenant un "OUT OF DATA IN 1250"
J'ai essayé de Faire GOTO 1350 ou 1450 ou encore 1550 mais j'obtiens "OUT OF DATA IN 1350 ou 1450 etc etc"
Voici un extrait du listing:
Voici le Listing complet:
Vous avez une idée? Edité par igal Le 09/12/2015 à 10h33
En voulant rendre plus lisible mon moteur de SPRITES, j'obtiens maintenant un "OUT OF DATA IN 1250"
J'ai essayé de Faire GOTO 1350 ou 1450 ou encore 1550 mais j'obtiens "OUT OF DATA IN 1350 ou 1450 etc etc"
Voici un extrait du listing:
Code TEXT :
250 'SPRITES DATAS des Patterns************************* 252 GOTO 1250 .. .. 1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI 1252 ' DESSIN DES SPRITES 1260 RESTORE 1301 1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI 1280 SPRITE$(0)=S$ 1290 GOTO 1350 1301 DATA 0000000000000000 1302 DATA 0000000000000000 1303 DATA 0000000000000000 1304 DATA 0000000000000000 1305 DATA 0000000000000000 1306 DATA 0000000000000000 1307 DATA 0000000000000000 1308 DATA 0000000000000000 1309 DATA 1111111111111111 1310 DATA 1000000000000000 1311 DATA 0000000000000000 1312 DATA 0000000000000000 1313 DATA 0000000000000000 1314 DATA 0000000000000000 1315 DATA 0000000000000000 1316 DATA 0000000000000000 1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJB 1360 RESTORE 1401 1370 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB 1380 SPRITE$(1)=T$ 1390 GOTO 1450 1401 DATA 0000000000000000 1402 DATA 0000000000000000 1403 DATA 0000000000000000 1404 DATA 0000000000000000 1405 DATA 0000000000000000 1406 DATA 0000000000000000 1407 DATA 0000000000000000 1408 DATA 0000000000000000 1409 DATA 1111111111111111 1410 DATA 0000000000000001 1411 DATA 0000000000000000 1412 DATA 0000000000000000 1413 DATA 0000000000000000 1414 DATA 0000000000000000 1415 DATA 0000000000000000 1416 DATA 0000000000000000 1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK 1460 RESTORE 1501 1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK 1480 SPRITE$(2)=U$ 1490 GOTO 1550 1501 DATA 0000000000000000 1502 DATA 0000000000000000 1503 DATA 0000000000000000 1504 DATA 0000000000000000 1505 DATA 0000000000000000 1506 DATA 0000000000000000 1507 DATA 0000000000000000 1508 DATA 0000000010000000 1509 DATA 1111111111111111 1510 DATA 0000000000000000 1511 DATA 0000000000000000 1512 DATA 0000000000000000 1513 DATA 0000000000000000 1514 DATA 0000000000000000 1515 DATA 0000000000000000 1516 DATA 0000000000000000 1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL 1560 RESTORE 1601 1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL 1580 SPRITE$(3)=V$ 1590 GOTO 252 1601 DATA 0000000000000000 1602 DATA 0000000000000000 1603 DATA 0000000000000000 1604 DATA 0000000000000000 1605 DATA 0000000000000000 1606 DATA 0000000000000000 1607 DATA 0000000000000000 1608 DATA 1000000000000000 1609 DATA 1111111111111111 1610 DATA 0000000000000000 1611 DATA 0000000000000000 1612 DATA 0000000000000000 1613 DATA 0000000000000000 1614 DATA 0000000000000000 1615 DATA 0000000000000000 1616 DATA 0000000000000000
Voici le Listing complet:
Code TEXT :
0 'SAVE"SPMOT01.asc",A 1 ' 2 'MOTEUR DE SPRITES V001 3 ' 50 'Mode graphique 52 SCREEN 10,2 54 'VDP(24)=VDP(24)+212:'VDP Deplace verticalement la fenetre sur la VRAM 56 'VDP(9)=VDP(9)OR2:'VDP Desactive la Zone des sprites ??? 58 SC=2:'VDP Vitesse de Scrolling Vertical 100'HERO **************************************** 120 X=1+96+8:'HERO Position initiale Horizontale 122 Y=195-128-4:'HERO Position initiale Verticale 124 VM=16:'HERO Vitesse Montée 126 VC=8:'HERO Vitesse Chutée 128 VS=16:'HERO Vitesse Sautée 130 VH=8:'HERO Vitesses Horizontale 132 SH=1:'HERO Empeche double Saut Haut 134 SD=1:'HERO Empeche double Saut Droite 136 SG=1:'HERO Empeche double Saut Gauche 138 P=1:'HERO Active pesanteur ??? 140 UP=0:'HERO Active la pesanteur ??? 142 RI=0:'HERO Desactive le passe muraille Droite 144 LE=0:'HERO Desactive le passe muraille Gauche 200 'SPRITES MOBILES ****************************************** 202 XB=32+1:' ASCENCEUR Position initiale Horizontale 204 YB=127:'ASCENCEUR Position initiale Verticale 206 AS=0:' ASCENCEUR Adherence 1=Active / 0=Desactive 250 'SPRTIES DATAS des Patterns************************* 252 GOTO 1250 260 SPRITES Attribution des Pattern aux Variables******* 262 A=0:B=1:C=2:D=3:E=4 270 'SPRITES Tableau des Latitudes et Longitudes********* 280 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 282 AA=183-16:AB=183-16:AC=183-16:AD=183-16:AE=183-16:AF=183-16:AG=183-16 284 B1=24:B2=56:B3=88:B4=120:B5=152:B6=184:B7=216 286 BA=183-48:BB=183-48:BC=183-48:BD=183-48:BE=183-48:BF=183-48:BG=183-48 288 C1=24:C2=56:C3=88:C4=120:C5=152:C6=184:C7=216 290 CA=183-16-48-16:CB=183-16-48-16:CC=183-16-48-16:CD=183-16-48-16:CE=183-16-48-16:CF=183-16-48-16:CG=183-16-48-16 292 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216 294 DA=15:DB=15:DC=15:DD=15:DE=15:DF=16:DG=15 300 'SPRITE Tableau des Projections************************************************************************************************************************************ 302 ' 304 PUTSPRITE1,(A1,AA),4,A:PUTSPRITE2,(A2,AB),4,A:PUTSPRITE3,(A3,AC),4,A:PUTSPRITE4,(A4,AD),4,A:PUTSPRITE5,(A5,AE),4,A:PUTSPRITE6,(A6,AF),4,A:PUTSPRITE7,(A7,AG),4,A 306 PUTSPRITE8,(B1,BA),4,A:PUTSPRITE9,(B2,BB),4,A:PUTSPRITE10,(B3,BC),5,C:PUTSPRITE11,(B4,BD),7,D:PUTSPRITE12,(B5,BE),5,C:PUTSPRITE13,(B6,BF),7,D:PUTSPRITE14,(B7,BG),4,A 308 PUTSPRITE15,(C1,CA),7,D:PUTSPRITE16,(C2,CB),4,A:PUTSPRITE17,(C3,CC),5,C:PUTSPRITE18,(C4,CD),7,D:PUTSPRITE19,(C5,CE),5,C:PUTSPRITE20,(C6,CF),7,D:PUTSPRITE21,(C7,CG),4,A 310 PUTSPRITE22,(D1,DA),4,A:PUTSPRITE23,(D2,DB),4,A:PUTSPRITE24,(D3,DC),4,A:PUTSPRITE25,(D4,DD),4,A:PUTSPRITE26,(D5,DE),4,A:PUTSPRITE27,(D6,DF),4,A:PUTSPRITE28,(D7,DG),4,A 312 ' 838 'SPRITES MOBILES Projections********************** 839 ' 840 XB=XB+8AND255:'MOTEUR ASCENCEUR 841 IFAS=1THENX=XB:'ADHERENCE ASCENCEUR 1 843 PUTSPRITE29,(XB,YB),15,A:'ASCENCEUR 1 845 IFY>YB-14THENIFY<YBTHENIFX>XB-4THENIFX<XB+8THENAS=1:'???? 847 ' 850 'BOUCLE PRINCIPALE [SPRITES et BACKGROUND] 852 ' 853 S=STICK(0):ONS+1GOSUB 860,870,880,890,860,860,860,930,940:'Renvoie selon Stick ZERO 854 VDP(24)=VDP(24)-SCAND255:GOTO838:'RETURN 855 ' 856 'Gestion des Mouvements 857 ' 858 'STATIQUE 860 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1000:SPRITEON:'Si colision aller a 1000 861 'IFRI=1THENP=1 862 'IFLE=1THENP=1 863 IFP=1THEN910:'Si pesanteur alors aller a ligne 210 (chute) 864 RETURN 867 'END 868 'SAUT HAUT 870 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1010:SPRITEON:'Si colision aller a 1010 872 IFSH=5THEN910:'Si Saut boucle x fois alors aller a 210 873 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 874 Y=Y-VS:SH=SH+1:P=1:'Saut Haut utilise! Pesanteur active 876 RETURN 877 'END 878 'SAUT DROITE 880 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1020:SPRITEON:'Si colision aller a 1020 882 IFSD=3THEN910:'Si Saut Droite deja utilise alors aller a 210 883 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 884 X=X+VS:Y=Y-VS:SD=SD+1:P=1:'Saut Droite utilise! Pesanteur active 886 RETURN 887 'END 888 'DROITE 890 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030 892 X=X+VH:'Deplacement a droite 893 ' 894 IFP=1THEN910:'Si pesanteur alors aller a 210 (chute) 896 RETURN 897 'END 898 'CHUTE A DROITE 900 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1040:SPRITEON:'SI COLISION ALLER A 1040 902 X=X+VC:'Deplacement a Droite 903 IFUP=1THENY=Y+2:UP=0:'si saut utilise alors recalibrer Y 904 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels 906 RETURN 907 'END 908 'CHUTE 910 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1050:SPRITEON:'Si colision alors 1050 911 IFLE=1THENEL=EL+1:P=1:'Si RI actif alors Pesanteur Actif 912 IFEL=2THENX=X+1:LE=0:EL=0 913 IFRI=1THENRI=0:P=1:'Si RI actif alors Pesanteur Actif 914 IFUP=1THENY=Y+2:UP=0:'Si saut utilise alors recalibrer Y 915 IFP=1THENY=Y+VCAND255:'Si pesanteur alors chute de VC pixels 916 RETURN 917 'END 918 'CHUTE A GAUCHE 920 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1060:SPRITEON:SI COLISION ALLER A 1060 922 X=X-16:'Deplacement a Gauche 923 IFUP=1THENY=Y+2:UP=0:SI SAUT UTILISE ALORS RECALIBRER Y 924 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels 926 RETURN 927 'END 928 'GAUCHE 930 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070 932 X=X-VH:'Deplacement a Gauche 933 ' 934 IFP=1THEN910:'Si pesanteur aller a 210 (chute) 936 RETURN 937 'END 938 'SAUT GAUCHE 940 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1080:SPRITEON:'Si colision aller a 1020 942 IFSG=3THEN910:'Si Saut Gauche deja utilise alors aller a 210 943 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 944 X=X-VS:Y=Y-VS:SG=SG+1:P=1:'Saut Gauche utilisé! Pesanteur active 946 RETURN 998 'END 999 'COLISION STATIQUE 1000 P=0:SH=0:SD=0:SG=0 1001 SPRITEOFF 1002 IFRI=1THENP=1 1003 IFLE=1THENP=1 1004 IFUP=0THENY=Y-2:UP=1 1005 RETURN 1008 ' 1009 'COLISION SAUT HAUT 1010 P=0:SH=0:SD=0:SG=0 1011 SPRITEOFF 1013 IFUP=0THENY=Y-2:UP=1 1014 RETURN 1018 ' 1019 'COLISION SAUT DROITE 1020 P=0:SH=0:SD=0:SG=0 1021 SPRITEOFF 1023 IFUP=0THENY=Y-2:UP=1 1024 RETURN 1028 ' 1029 'COLISION DROITE 1030 IFP=1THENRETURN 1031 P=1:SH=0:SD=0:SG=0:RI=1 1032 SPRITEOFF 1033 IFUP=0THENY=Y-2:UP=1 1034 RETURN 1038 ' 1039 'COLISION CHUTE A DROITE 1040 P=0:SH=0:SD=0:SG=0 1041 SPRITEOFF 1043 IFUP=0THENY=Y-2:UP=1 1044 RETURN 1048 ' 1049 'COLISION BAS 1050 P=0:SH=0:SD=0:SG=0 1051 'SPRITEOFF 1053 IFUP=0THENY=Y-2:UP=1 1054 RETURN 1058 ' 1059 'COLISION CHUTE A GAUCHE 1060 P=0:SH=1:SD=0:SG=0 1061 SPRITEOFF 1063 IFUP=0THENY=Y-2:UP=1 1064 RETURN 1068 ' 1069 'COLISION GAUCHE 1070 IFP=1THENRETURN 1071 P=1:SH=0:SD=0:SG=0:LE=1 1072 X=X-16-1:SPRITEOFF 1073 IFUP=0THENY=Y-2:UP=1 1074 RETURN 1078 ' 1079 'COLISION SAUT GAUCHE 1080 P=0:SH=0:SD=0:SG=0 1081 SPRITEOFF 1083 IFUP=0THENY=Y-2:UP=1 1084 RETURN 1088 ' 1200 DESSIN DES SPRITES 1201 ' 1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI 1252 ' DESSIN DES SPRITES 1260 RESTORE 1301 1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI 1280 SPRITE$(0)=S$ 1290 GOTO 1350 1301 DATA 0000000000000000 1302 DATA 0000000000000000 1303 DATA 0000000000000000 1304 DATA 0000000000000000 1305 DATA 0000000000000000 1306 DATA 0000000000000000 1307 DATA 0000000000000000 1308 DATA 0000000000000000 1309 DATA 1111111111111111 1310 DATA 1000000000000000 1311 DATA 0000000000000000 1312 DATA 0000000000000000 1313 DATA 0000000000000000 1314 DATA 0000000000000000 1315 DATA 0000000000000000 1316 DATA 0000000000000000 1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJB 1360 RESTORE 1401 1370 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB 1380 SPRITE$(1)=T$ 1390 GOTO 1450 1401 DATA 0000000000000000 1402 DATA 0000000000000000 1403 DATA 0000000000000000 1404 DATA 0000000000000000 1405 DATA 0000000000000000 1406 DATA 0000000000000000 1407 DATA 0000000000000000 1408 DATA 0000000000000000 1409 DATA 1111111111111111 1410 DATA 0000000000000001 1411 DATA 0000000000000000 1412 DATA 0000000000000000 1413 DATA 0000000000000000 1414 DATA 0000000000000000 1415 DATA 0000000000000000 1416 DATA 0000000000000000 1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK 1460 RESTORE 1501 1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK 1480 SPRITE$(2)=U$ 1490 GOTO 1550 1501 DATA 0000000000000000 1502 DATA 0000000000000000 1503 DATA 0000000000000000 1504 DATA 0000000000000000 1505 DATA 0000000000000000 1506 DATA 0000000000000000 1507 DATA 0000000000000000 1508 DATA 0000000010000000 1509 DATA 1111111111111111 1510 DATA 0000000000000000 1511 DATA 0000000000000000 1512 DATA 0000000000000000 1513 DATA 0000000000000000 1514 DATA 0000000000000000 1515 DATA 0000000000000000 1516 DATA 0000000000000000 1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL 1560 RESTORE 1601 1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL 1580 SPRITE$(3)=V$ 1590 GOTO 252 1601 DATA 0000000000000000 1602 DATA 0000000000000000 1603 DATA 0000000000000000 1604 DATA 0000000000000000 1605 DATA 0000000000000000 1606 DATA 0000000000000000 1607 DATA 0000000000000000 1608 DATA 1000000000000000 1609 DATA 1111111111111111 1610 DATA 0000000000000000 1611 DATA 0000000000000000 1612 DATA 0000000000000000 1613 DATA 0000000000000000 1614 DATA 0000000000000000 1615 DATA 0000000000000000 1616 DATA 0000000000000000
Vous avez une idée? Edité par igal Le 09/12/2015 à 10h33
Quelle est la valeur de la variable I quand tu as l'erreur ?
Pour être sur de commencer à lire les DATA au bon endroit (surtout dans un listing qui en comporte beaucoup), ajoute une instruction "RESTORE 1301" avant de lire les données en 1250.
Et je ne suis pas sur que l'on peut stocker des variables texte en DATA sans utiliser les guillemets (à vérifier).
Pour être sur de commencer à lire les DATA au bon endroit (surtout dans un listing qui en comporte beaucoup), ajoute une instruction "RESTORE 1301" avant de lire les données en 1250.
Et je ne suis pas sur que l'on peut stocker des variables texte en DATA sans utiliser les guillemets (à vérifier).
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)
j'ai fait l'essai les guillemets ne sont pas obligatoires
par contre ce n'est pas la peine de lire 2 fois A$
la variable fait 16 octets et tu lis les 8 de gauche puis les 8 de droite
ensuite tu transforme en binaire avec le &B
moi je verrais plutôt un truc du genre
1340 RESTORE 1401
1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8)))
1370 T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB
1380 SPRITE$(1)=T$
par contre ce n'est pas la peine de lire 2 fois A$
la variable fait 16 octets et tu lis les 8 de gauche puis les 8 de droite
ensuite tu transforme en binaire avec le &B
moi je verrais plutôt un truc du genre
1340 RESTORE 1401
1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8)))
1370 T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB
1380 SPRITE$(1)=T$
Non, Jipe, parce que la lecture des données dans le listing d'igal se fait dans l'ordre correct pour générer un sprite : tous les octets de gauche puis tous les octets de droite. On peut cependant optimiser en faisant :
Code :
Edité par
Metalion
Le 09/12/2015 à 14h34
1250 RESTORE 1301:FOR I=1TO16:READA$
1251 L$=L$+CHR$(VAL("&B"+LEFT$(A$,8))):R$=R$+CHR$(VAL("&B"+RIGHT$(A$,8)))
1252 NEXTI:SPRITE$(0)=L$+R$
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
Merci de vôtre aide
Après une journée à me tirer les cheveux, je viens de trouver la source du problème.
Tous les Datas sont parfaitement lus une première fois mais en toute fin de lecture des DATAS, je recommençais la lecture des DATAS par un GOTO mal dirigé
Bref, maintenant c'est OK
Après une journée à me tirer les cheveux, je viens de trouver la source du problème.
Tous les Datas sont parfaitement lus une première fois mais en toute fin de lecture des DATAS, je recommençais la lecture des DATAS par un GOTO mal dirigé
Bref, maintenant c'est OK
igal
Membre non connecté
Conseiller Municipal
Salut à tous
Je voudrais déplacer le héro horizontalement entre 9 et 225 inclus sans déborder d'un coté comme de l'autre.
Actuellement, ma commande pour aller à droite est:
888 'DROITE
890 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030
892 X=X+VH:'Deplacement a droite
894 IFP=1THEN910:'Si pesanteur alors aller a 210 (chute)
896 RETURN
Ma commande pour aller à gauche est:
928 'GAUCHE
930 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070
932 X=X-VH:'Deplacement a Gauche
933 '
934 IFP=1THEN910:'Si pesanteur aller a 210 (chute)
936 RETURN
Est il possible de limiter les déplacement de 9 à 225 sans utiliser la commande IF X=9THEN ou encore IF X=225THEN afin de ne pas alourdir encore le cycle?
Voici le listing complet:
Je voudrais déplacer le héro horizontalement entre 9 et 225 inclus sans déborder d'un coté comme de l'autre.
Actuellement, ma commande pour aller à droite est:
888 'DROITE
890 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030
892 X=X+VH:'Deplacement a droite
894 IFP=1THEN910:'Si pesanteur alors aller a 210 (chute)
896 RETURN
Ma commande pour aller à gauche est:
928 'GAUCHE
930 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070
932 X=X-VH:'Deplacement a Gauche
933 '
934 IFP=1THEN910:'Si pesanteur aller a 210 (chute)
936 RETURN
Est il possible de limiter les déplacement de 9 à 225 sans utiliser la commande IF X=9THEN ou encore IF X=225THEN afin de ne pas alourdir encore le cycle?
Voici le listing complet:
Code TEXT :
Edité par
igal
Le 11/12/2015 à 12h10
0 'SAVE"SPRMOT01.asc",A 1 ' 2 'MOTEUR DE SPRITES V001 3 ' 50 'Mode graphique 52 SCREEN 10,2 54 'VDP(24)=VDP(24)+212:'VDP Deplace verticalement la fenetre sur la VRAM 56 'VDP(9)=VDP(9)OR2:'VDP Desactive la Zone des sprites ??? 58 SC=2:'VDP Vitesse de Scrolling Vertical 100 'HERO **************************************** 120 X=1+96+8:'HERO Position initiale Horizontale 122 Y=195-128-4:'HERO Position initiale Verticale 124 VM=16:'HERO Vitesse Montée 126 VC=8:'HERO Vitesse Chutée 128 VS=16:'HERO Vitesse Sautée 130 VH=8:'HERO Vitesses Horizontale 132 SH=1:'HERO Empeche double Saut Haut 134 SD=1:'HERO Empeche double Saut Droite 136 SG=1:'HERO Empeche double Saut Gauche 138 P=1:'HERO Active pesanteur ??? 140 UP=0:'HERO Active la pesanteur ??? 142 RI=0:'HERO Desactive le passe muraille Droite 144 LE=0:'HERO Desactive le passe muraille Gauche 200 'SPRITES MOBILES ****************************************** 202 XB=32+1:' ASCENCEUR Position initiale Horizontale 204 YB=40-1:'ASCENCEUR Position initiale Verticale 206 AS=0:' ASCENCEUR Adherence 1=Active / 0=Desactive 250 'SPRTIES DATAS des Patterns************************* 252 GOTO 1250 260 'SPRITES ATTRIBUTION DES PATTERN AUX VARIABLES******* 262 A=0:B=1:C=2:D=3:E=4 270 'SPRITES Tableau des Latitudes et Longitudes********* 272 ' 282 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216 284 DA=71:DB=71:DC=71:DD=71:DE=71:DF=71:DG=71 286 C1=24:C2=56:C3=88:C4=120:C5=152:C6=184:C7=216 288 CA=103:CB=103:CC=103:CD=103:CE=103:CF=103:CG=103 290 B1=24:B2=56:B3=88:B4=120:B5=152:B6=184:B7=216 292 BA=135:BB=135:BC=135:BD=135:BE=135:BF=135:BG=135 294 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216 296 AA=167:AB=167:AC=167:AD=167:AE=167:AF=167:AG=167 298 ' 300 'SPRITE Tableau des Projections************************************************************************************************************************************ 302 ' 304 PUTSPRITE22,(D1,DA),0,A:PUTSPRITE23,(D2,DB),0,A:PUTSPRITE24,(D3,DC),0,A:PUTSPRITE25,(D4,DD),10,D:PUTSPRITE26,(D5,DE),2,C:PUTSPRITE27,(D6,DF),0,A:PUTSPRITE28,(D7,DG),0,A 306 PUTSPRITE15,(C1,CA),2,C:PUTSPRITE16,(C2,CB),0,A:PUTSPRITE17,(C3,CC),0,A:PUTSPRITE18,(C4,CD),10,D:PUTSPRITE19,(C5,CE),2,C:PUTSPRITE20,(C6,CF),0,A:PUTSPRITE21,(C7,CG),10,D 308 PUTSPRITE8,(B1,BA),2,C:PUTSPRITE9,(B2,BB),0,A:PUTSPRITE10,(B3,BC),7,B:PUTSPRITE11,(B4,BD),0,A:PUTSPRITE12,(B5,BE),0,A:PUTSPRITE13,(B6,BF),10,D:PUTSPRITE14,(B7,BG),4,A 310 PUTSPRITE1,(A1,AA),4,A:PUTSPRITE2,(A2,AB),4,A:PUTSPRITE3,(A3,AC),4,A:PUTSPRITE4,(A4,AD),4,A:PUTSPRITE5,(A5,AE),4,A:PUTSPRITE6,(A6,AF),4,A:PUTSPRITE7,(A7,AG),4,A 312 ' 838 'SPRITES MOBILES Projections********************** 839 ' 840 XB=XB+8AND255:'MOTEUR ASCENCEUR 841 IFAS=1THENX=XB:'ADHERENCE ASCENCEUR 1 843 PUTSPRITE29,(XB,YB),15,A:'ASCENCEUR 1 845 IFY>YB-14THENIFY<YBTHENIFX>XB-4THENIFX<XB+8THENAS=1:'???? 847 ' 850 'BOUCLE PRINCIPALE [SPRITES et BACKGROUND] 852 ' 853 S=STICK(0):ONS+1GOSUB 860,870,880,890,860,860,860,930,940:'Renvoie selon Stick ZERO 854 GOTO838:'VDP(24)=VDP(24)-SCAND255:GOTO838:'RETURN 855 ' 856 'Gestion des Mouvements 857 ' 858 'STATIQUE 860 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1000:SPRITEON:'Si colision aller a 1000 861 'IFRI=1THENP=1 862 'IFLE=1THENP=1 863 IFP=1THEN910:'Si pesanteur alors aller a ligne 210 (chute) 864 RETURN 867 'END 868 'SAUT HAUT 870 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1010:SPRITEON:'Si colision aller a 1010 872 IFSH=5THEN910:'Si Saut boucle x fois alors aller a 210 873 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 874 Y=Y-VS:SH=SH+1:P=1:'Saut Haut utilise! Pesanteur active 876 RETURN 877 'END 878 'SAUT DROITE 880 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1020:SPRITEON:'Si colision aller a 1020 882 IFSD=3THEN910:'Si Saut Droite deja utilise alors aller a 210 883 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 884 X=X+VS:Y=Y-VS:SD=SD+1:P=1:'Saut Droite utilise! Pesanteur active 886 RETURN 887 'END 888 'DROITE 890 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030 892 X=X+VH:'Deplacement a droite 893 ' 894 IFP=1THEN910:'Si pesanteur alors aller a 210 (chute) 896 RETURN 897 'END 898 'CHUTE A DROITE 900 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1040:SPRITEON:'SI COLISION ALLER A 1040 902 X=X+VC:'Deplacement a Droite 903 IFUP=1THENY=Y+2:UP=0:'si saut utilise alors recalibrer Y 904 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels 906 RETURN 907 'END 908 'CHUTE 910 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1050:SPRITEON:'Si colision alors 1050 911 IFLE=1THENEL=EL+1:P=1:'Si RI actif alors Pesanteur Actif 912 IFEL=2THENX=X+1:LE=0:EL=0 913 IFRI=1THENRI=0:P=1:'Si RI actif alors Pesanteur Actif 914 IFUP=1THENY=Y+2:UP=0:'Si saut utilise alors recalibrer Y 915 IFP=1THENY=Y+VCAND255:'Si pesanteur alors chute de VC pixels 916 RETURN 917 'END 918 'CHUTE A GAUCHE 920 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1060:SPRITEON:SI COLISION ALLER A 1060 922 X=X-16:'Deplacement a Gauche 923 IFUP=1THENY=Y+2:UP=0:SI SAUT UTILISE ALORS RECALIBRER Y 924 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels 926 RETURN 927 'END 928 'GAUCHE 930 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070 932 X=X-VH:'Deplacement a Gauche 933 ' 934 IFP=1THEN910:'Si pesanteur aller a 210 (chute) 936 RETURN 937 'END 938 'SAUT GAUCHE 940 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1080:SPRITEON:'Si colision aller a 1020 942 IFSG=3THEN910:'Si Saut Gauche deja utilise alors aller a 210 943 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y 944 X=X-VS:Y=Y-VS:SG=SG+1:P=1:'Saut Gauche utilisé! Pesanteur active 946 RETURN 998 'END 999 'COLISION STATIQUE 1000 P=0:SH=0:SD=0:SG=0 1001 SPRITEOFF 1002 IFRI=1THENP=1 1003 IFLE=1THENP=1 1004 IFUP=0THENY=Y-2:UP=1 1005 RETURN 1008 ' 1009 'COLISION SAUT HAUT 1010 P=0:SH=0:SD=0:SG=0 1011 SPRITEOFF 1013 IFUP=0THENY=Y-2:UP=1 1014 RETURN 1018 ' 1019 'COLISION SAUT DROITE 1020 P=0:SH=0:SD=0:SG=0 1021 SPRITEOFF 1023 IFUP=0THENY=Y-2:UP=1 1024 RETURN 1028 ' 1029 'COLISION DROITE 1030 IFP=1THENRETURN 1031 P=1:SH=0:SD=0:SG=0:RI=1 1032 SPRITEOFF 1033 IFUP=0THENY=Y-2:UP=1 1034 RETURN 1038 ' 1039 'COLISION CHUTE A DROITE 1040 P=0:SH=0:SD=0:SG=0 1041 SPRITEOFF 1043 IFUP=0THENY=Y-2:UP=1 1044 RETURN 1048 ' 1049 'COLISION BAS 1050 P=0:SH=0:SD=0:SG=0 1051 'SPRITEOFF 1053 IFUP=0THENY=Y-2:UP=1 1054 RETURN 1058 ' 1059 'COLISION CHUTE A GAUCHE 1060 P=0:SH=1:SD=0:SG=0 1061 SPRITEOFF 1063 IFUP=0THENY=Y-2:UP=1 1064 RETURN 1068 ' 1069 'COLISION GAUCHE 1070 IFP=1THENRETURN 1071 P=1:SH=0:SD=0:SG=0:LE=1 1072 X=X-16-1:SPRITEOFF 1073 IFUP=0THENY=Y-2:UP=1 1074 RETURN 1078 ' 1079 'COLISION SAUT GAUCHE 1080 P=0:SH=0:SD=0:SG=0 1081 SPRITEOFF 1083 IFUP=0THENY=Y-2:UP=1 1084 RETURN 1088 ' 1200 DESSIN DES SPRITES 1201 ' 1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI 1252 ' DESSIN DES SPRITES 1260 RESTORE 1301 1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI 1280 SPRITE$(0)=S$ 1290 GOTO 1350 1301 DATA 0000000000000000 1302 DATA 0000000000000000 1303 DATA 0000000000000000 1304 DATA 0000000000000000 1305 DATA 0000000000000000 1306 DATA 0000000000000000 1307 DATA 0000000000000000 1308 DATA 0000000000000000 1309 DATA 1111111111111111 1310 DATA 1000000000000000 1311 DATA 0000000000000000 1312 DATA 0000000000000000 1313 DATA 0000000000000000 1314 DATA 0000000000000000 1315 DATA 0000000000000000 1316 DATA 0000000000000000 1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJB 1360 RESTORE 1401 1370 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB 1380 SPRITE$(1)=T$ 1390 GOTO 1450 1401 DATA 0000000000000000 1402 DATA 0000000000000000 1403 DATA 0000000000000000 1404 DATA 0000000000000000 1405 DATA 0000000000000000 1406 DATA 0000000000000000 1407 DATA 0000000000000000 1408 DATA 1000000001000000 1409 DATA 1111111111111111 1410 DATA 0000000000000001 1411 DATA 0000000000000000 1412 DATA 0000000000000000 1413 DATA 0000000000000000 1414 DATA 0000000000000000 1415 DATA 0000000000000000 1416 DATA 0000000000000000 1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK 1460 RESTORE 1501 1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK 1480 SPRITE$(2)=U$ 1490 GOTO 1550 1501 DATA 0000000000000000 1502 DATA 0000000000000000 1503 DATA 0000000000000000 1504 DATA 0000000000000000 1505 DATA 0000000000000000 1506 DATA 0000000000000000 1507 DATA 0000000000000000 1508 DATA 0000000001000000 1509 DATA 1111111111111111 1510 DATA 0000000000000000 1511 DATA 0000000000000000 1512 DATA 0000000000000000 1513 DATA 0000000000000000 1514 DATA 0000000000000000 1515 DATA 0000000000000000 1516 DATA 0000000000000000 1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL 1560 RESTORE 1601 1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL 1580 SPRITE$(3)=V$ 1590 GOTO 260 1601 DATA 0000000000000000 1602 DATA 0000000000000000 1603 DATA 0000000000000000 1604 DATA 0000000000000000 1605 DATA 0000000000000000 1606 DATA 0000000000000000 1607 DATA 0000000000000000 1608 DATA 1000000000000000 1609 DATA 1111111111111111 1610 DATA 0000000000000000 1611 DATA 0000000000000000 1612 DATA 0000000000000000 1613 DATA 0000000000000000 1614 DATA 0000000000000000 1615 DATA 0000000000000000 1616 DATA 0000000000000000
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie