MSX Village forum

La Place des Développeurs [En COURS] Moteur de Sprites Moteur de Sprites

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 23/03/2015 à 11h15

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 :top



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 :fou


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 23/03/2015 à 15h41
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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 24/03/2015 à 19h18
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 :p

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) :D

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 :)


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 25/03/2015 à 10h47
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 :top

Je n'ai plus qu'à fusionner SPRITE et SCROLL dans le sujet Joe&Mac Challencge=> http://www.msxvillage.fr/forum/topic.php?id=2642


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 07/12/2015 à 15h09
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 ^^


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10328

Le 07/12/2015 à 17h01
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


:noel
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 07/12/2015 à 17h28
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...


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/12/2015 à 18h58
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 :D



@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 ;)




Faudrait pouvoir utiliser les SPRITES de la PAGE 1 sur le PAGE 0 pour doubler la variété des persos :gne

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 :p Edité par igal Le 07/12/2015 à 19h01


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 08/12/2015 à 07h37
igal :
Faudrait pouvoir utiliser les SPRITES de la PAGE 1 sur le PAGE 0 pour doubler la variété des persos :gne

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 :p


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

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 09/12/2015 à 10h03
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:

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


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 09/12/2015 à 10h40
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).


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)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10328

Le 09/12/2015 à 13h39
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$


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 09/12/2015 à 14h34
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 :
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$
Edité par Metalion Le 09/12/2015 à 14h34


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)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10328

Le 09/12/2015 à 17h22
j'ai été un peu trop vite en simplification :oups


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 10/12/2015 à 17h52
Merci de vôtre aide :top

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 :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 11/12/2015 à 12h08
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:
Code TEXT :
 
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

 
Edité par igal Le 11/12/2015 à 12h10


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