MSX Village forum

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

ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 02/09/2014 à 20h44

Reprise du message précédent

- 1 renome tes fichiers en hexa
1xxxxxx1.scc
1xxxxxx2.scc
...
1xxxxxxA.scc
1xxxxxxB.scc

2- utilise cette formule
LD$="1xxxxxx"+MID$(hex$(N),2,1):BLOAD LD$,S,0



Autre solution, tu mets les noms des fichiers à charger dans une ligne de DATA
et tu lis les data Edité par ericb59 Le 02/09/2014 à 20h46


banniere-ericb59e
Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 02/09/2014 à 22h15
igal :
J'arrive à charger les images nommées:

10000001.SCC

....

10000009.SCC



Par contre, pas moyen des charger les fichiers suivants:

10000010.SCC

....

10000013.SCC





Oui ton code est valable pour les noms finissant par 0 à 9 mais au delà il faut que tu prenne en compte la longeur de la chaine du nom -1 pour les dizaines -2 pour les centaines .... ;)



Tu as plusieurs solution mais la plus pratique est de convertir en string le chiffre ensuite de l'insérer dans le nom en tenant compte de sa longueur ;)


Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 02/09/2014 à 22h38
Voici ce que ca pourrais donner vite fait:





Tu peux aller jusqu"a "99999999" avec cette technique ;)



Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 03/09/2014 à 08h52
ha cool cette méthode ! :top


banniere-ericb59e
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 03/09/2014 à 10h53
Un poil plus court :
Code TEXT :
10 FOR A=1 TO 20
20 EX$=STR(A)
30 NME$=LEFT$("1000000",9-LEN(EX$))+RIGHT$(EX$,LEN(EX$)-1)
40 PRINT NME$
50 NEXT
   
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 03/09/2014 à 11h12
@GDX: tu peux faire un poil mieux en remplaçant NME$ par NM$ ;)

Vu que de mémoire le BAISC MSX ne prends en compte que les 2 premiers caractères d'une variable?...


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 03/09/2014 à 11h46
J'ai seulement repris les variables du programme au dessus.
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 03/09/2014 à 12h13
Merci de votre aide :top

Euh... du coup, je dois écrire BLOAD" Quoi ????

Désolé pour mon manque de connaissances :heink


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 03/09/2014 à 12h37
igal :
Merci de votre aide :top



Euh... du coup, je dois écrire BLOAD" Quoi ????



Désolé pour mon manque de connaissances :heink




BLOAD NME$


banniere-ericb59e
Site web    
6502man Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 19/08/2013 à 18h14

Messages: 815

Le 03/09/2014 à 21h59
Content que ca puisse aider ;)



Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 04/09/2014 à 21h34
Voici une technique qui devrait faire l'affaire.

Code TEXT :
  10      'SAVE"generat.asc",A
15 'generateur de 25 strates (0 a 23) de 8*256 pixels
16' strate (24) de 4*256 pixels
20 SCREEN 12
30 'BLOAD"00000007.scc",S
35 'GOTO 35
100 BLOAD"00000000.scc",S: BSAVE"10000000.scc",256*0,256*8-1,S
101 BLOAD"00000001.scc",S: BSAVE"10000001.scc",256*8,256*16-1,S
102 BLOAD"00000002.scc",S: BSAVE"10000002.scc",256*16,256*24-1,S
103 BLOAD"00000003.scc",S: BSAVE"10000003.scc",256*24,256*32-1,S
104 BLOAD"00000004.scc",S: BSAVE"10000004.scc",256*32,256*40-1,S
105 BLOAD"00000005.scc",S: BSAVE"10000005.scc",256*40,256*48-1,S
106 BLOAD"00000006.scc",S: BSAVE"10000006.scc",256*48,256*56-1,S
107 BLOAD"00000007.scc",S: BSAVE"10000007.scc",256*56,256*64-1,S
108 BLOAD"00000008.scc",S: BSAVE"10000008.scc",256*64,256*72-1,S
109 BLOAD"00000009.scc",S: BSAVE"10000009.scc",256*80,256*88-1,S
110 BLOAD"00000010.scc",S: BSAVE"10000010.scc",256*96,256*104-1,S
111 BLOAD"00000011.scc",S: BSAVE"10000011.scc",256*104,256*112-1,S
112 BLOAD"00000012.scc",S: BSAVE"10000012.scc",256*112,256*120-1,S
113 BLOAD"00000013.scc",S: BSAVE"10000013.scc",256*120,256*128-1,S
114 BLOAD"00000014.scc",S: BSAVE"10000014.scc",256*128,256*136-1,S
115 BLOAD"00000015.scc",S: BSAVE"10000015.scc",256*136,256*144-1,S
116 BLOAD"00000016.scc",S: BSAVE"10000016.scc",256*144,256*152-1,S
117 BLOAD"00000017.scc",S: BSAVE"10000017.scc",256*152,256*160-1,S
118 BLOAD"00000018.scc",S: BSAVE"10000018.scc",256*160,256*168-1,S
119 BLOAD"00000019.scc",S: BSAVE"10000019.scc",256*168,256*176-1,S
120 BLOAD"00000020.scc",S: BSAVE"10000020.scc",256*176,256*184-1,S
121 BLOAD"00000021.scc",S: BSAVE"10000021.scc",256*184,256*192-1,S
122 BLOAD"00000022.scc",S: BSAVE"10000022.scc",256*192,256*200-1,S
123 BLOAD"00000023.scc",S: BSAVE"10000023.scc",256*200,256*208-1,S
124 BLOAD"00000024.scc",S: BSAVE"10000024.scc",256*208,256*212-1,S 


Ce programme répétitif permet de générer 25 strates d'une seule image en SCREEN 12. www.vgmaps.com/
Les Lesstrates ont une épaisseur de 8 pixels sauf la dernière qui est épaisse de 4 pixels.

Le grand avantage de cette technique est qu'il n'est pas nécessaire de donner une coordonnée de destination puisque chaque strate est faite d'une bribes d'image qui commence après la dernière ligne de la strate précédente et termine la dernière ligne de la strate suivante.

L'idée est donc de récupérer la map d'un jeu que l'on veut, découper la map en succession d'images de 212 pixels de hauteur, les convertir en SCREEN 12 avec bmp2msx, générer les strates à l'aide du programme basic sur msx.

A la suite de quoi on devrait avoir [ 25 (strates) x nombre d'images de 212 pixels de haut qui composent le stage] = nombre de fichiers à charger successivement pour créer une illusion de scrolling de 8 pixels de deplacement vertical.

La boucle principale devra intégrer le déplacement du héros et ennemis si possible :D



Edité par igal Le 05/09/2014 à 23h09


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 08/09/2014 à 14h30
GDX :
Un poil plus court :

Code TEXT :
10 FOR A=1 TO 20
20 EX$=STR(A)
30 NME$=LEFT$("1000000",9-LEN(EX$))+RIGHT$(EX$,LEN(EX$)-1)
40 PRINT NME$
50 NEXT




Cette formule fonctionne il y a juste un oubli du sigle dollars après STR De la ligne 20.



20 EX$=STR$(A)



Par contre la encore on a une "auto-génération" des noms de fichiers trop longue!

La création est plus rapide que la méthode de jipe et en plus la création est régulière ce qui est très bien mais le temps de chargement du fichier qui pèse 8x256 pixels est bien plus rapide que la création des noms de fichiers.



Ce serait vraiment dommage de rester sur un tel résulta d'autant que j'ai prévu d'aller encore plus loin en créant des fichiers de 4X256 pixels :)



Donc encore plus rapide a charger, plus rapide a afficher, plus fluide dans le déroulement du scroll, BUS MSX accessible en deux fois plus grand nombre etc etc...



J'ai trouve une solution simple et extrêmement efficace pour écrire sur la page ZÉRO (celle visible a l'écran) dans les lignes réputés "Non exploitable" directement!

Il s'agit des lignes supérieurs a 212 qui sont au total de 44!

Soit 212+44=256.



On peut donc afficher en page zéro sur une zone de [(256)x(212+44)]...soit:

256 X 256 et ça c'est cool :top



Jipe m'avait donné une technique contraignante pour écrire dans cette zone:

1) j'affiche un dessin sur une zone comprise entre 1 et 212.

2) je copie une fraction de la zone vers un point entre 213 et 255.



Au final on obtient le clonage d'une zone vers une autre zone ce qui est lent et limite la variété des graphismes :(



En creusant la chose je suis arrivé à trouver la solution simple et radicale que voici:



1) je copie colle un dessin de 44x256 sur la ligne [zero moins quarante quatre] :fou



BLOAD"image.SCC",s,0-44



L'astuce consiste à donner comme point de départ pour le "décompte", un point de référence situé sur une zone "normale" de la âge zéro!



Une fois ce point de départ determiné, (ici, la ligne zéro) il ne reste que déterminer le lieu d'affichage allant de -1 a -44 :fou



Si votre dessin fait 44 x 256 alors il couvrira l'intégralité de çette fameuse zone :noel



En définitive, on peut donc afficher une image de 256 x 256 sur la page zéro du vdp.

Pour les 256 de hauteur, il suffira juste d'appliquer la règle que je donne au dessus.



Voilà une bonne solution bien tordue comme je les aime :tchin


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

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 08/09/2014 à 16h12
Plus simple, tu créé un seul fichier dans lequel tu déplace un index qui évolue modulo 16x256 (4096).
Index = Nuémro_section x 4096

Numéro_section va de 0 à N de 1 en 1. Tu veux le morceau N°9, alors tu pointe dans ton fichier à l'octet 9 x 4096 = 36864 et tu charge 4096 octet dans la VRAM à l'adresse qui va bien.
Du coup tu passes à 1 fichier par niveau de jeux ce qui est quand même vachement plus simple à gérer...


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
gradius Membre non connecté

Maire-adjoint

Rang

Avatar

Inscrit le : 06/10/2009 à 18h27

Messages: 613

Le 08/09/2014 à 17h08
C'est clair ! :lol :fou


MSX Turbo-R FS A1GT - 1 Mo de RAM - Disque dur SCSI Syquest cartouches de 270 Mo - Lecteur CD. Musique, musique, musique et encore musique !
   
MSXlegend Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 18/06/2010 à 22h42

Messages: 5798

Le 08/09/2014 à 19h01
J'ai raté le train aussi :fou , mais promis je surveille tout ça de tres pres !! :lol


Createur du KCX Bluetooth emitter au format cartouche compatible stereo moonsound
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 08/09/2014 à 19h31
Voici la matrice telle que je l'explique plus haut.


BMP2MSX n'étant pas capable (a ma connaissance) de traiter des images en 256 X 256, il faut donc créer deux images différentes telles que:

A) Image contenant les Graphismes des pixels destinés aux lignes -44 à -1.
B) Image contenant les graphismes des pixels destinées aux lignes 0 à 212.

voici l'idée mise en pratique pour la création d'un Scrool d'une Map world de n'importe quel jeu :top

1) Je découpe des tranches alternativement de 44 pixels de Haut puis 212 pixels de haut.
Afin de les reconnaître aisément, je les nomme:
Page 0 -44 à -1
Page 0 1 à 255
Page 1 -44 à -1
Page 1 1 à 255
Page 2 -44 à -1
Page 2 1 à 255
Etc etc...

Voici l'image PAGE 0 -44 À -1

Voici l'image PAGE 0 0 A 212



Je tranche dans la mappe World comme dans un Gateau :top


2) Il ne reste plus qu'à traiter les images découpées avec BMP2MSX pour en faire des IMAGE.SCC en SCREEN12

3) Traiter les IMAGES.SCC de 256X212 pour en faire des Bribes d'images d'une superficie de 8 X 212.
(La bribe est en fait le résulta d'une soustraction d'une grande partie de l'image pour n'en laisser que "le bandeau qui nous interresse".
Le gros avantage de cette méthode étant qu'elle ne nécessite aucune coordonnée de COPIER ni de COLLER puisque seule la Bribe est visible et le reste est transparent.

Voici en gros ce que le BASIC applique à l'image:


Etc etc.....
(La partie banche est en réalité "Anéantie" une fois traitée sous Basic :top )

@Eric: J'attends vos idées pour la "génération automatique" des noms de fichiers à charger ^^

De mon coté,je me demande si une simple boucle du genre:
Code TEXT :
 
10 BLOAD"A"+"B"+"C"+"D"+"E"+"F"+"G".SCC",S
20 G=G+1 and 10: F=G/10: E=F/10: D=E/10:  C=D/10: B=C/10: A=B/10
 


C'est juste une idée :fou

Voici les commandes qui couvrent la zone des lignes -44 à -1
Edité par igal Le 08/09/2014 à 20h53


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