MSX Village forum

La Place des Développeurs [EN COURS] VDP(24) et décors destructibles. Interagir sur un décor scrollé.

metalgear2 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 06/01/2015 à 21h44

Reprise du message précédent

Franchement, je sais pas comment tu fais pour t'y retrouver :oups

Mais chapeau pour le scrolling ... :top

Moi perso, il faut déjà que je décode cette phrase :

Sachant que le contenu scrollé par le VDP fait 256 lignes, il suffit donc en théorie de charger un bribe située [256 + 1 lignes] plus bas sur la Map stocké dans les bribes pour afficher la bonne Bribe. Edité par metalgear2 Le 06/01/2015 à 21h45



Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 06/01/2015 à 23h36
(Pardon c'est 128 Bribes épaisses de 2 lignes donc 256 lignes et non pas 256 Bribes)

Voici comment charger une Bribes située "géographiquement" 256 lignes Plus bas.

comme tu peux le voir sur le dessin, Chaque [Répertoire] de départ contient 8 répertoires qui contiennent pour chacun d'eux 16 Bribes.

Au total, chaque répertoire de départ contient 128 Bribes!

Il y a deux facons pour y accéder:
1) on déplace le curseur d'un répertoire, on détermine le sous répertorie et le fichier lu!
2) on recréer un ensemble de répertoire contenant les bribes contenant le dessin de la mappe décalée de 256 Lignes.
3) on créer le second moteur Asymétrique :fou



Bonne nuit lol


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 07/01/2015 à 13h48
Salut igal, et les autres…

Aujoud'hui j'ai pris le temps de regarder à ce que tu as pondu ces derniers jours.
Ta technique à sans doute du potentiel pour en faire quelque chose… un jeu ? sans doute, mais peut être pas en basic… Enfin c'est à voir…

En tout cas je me suis amusé à améliorer le principe.
Sur la base de ton travail voici donc un programme Basic (un poil plus optimisé que le tient ;) ) qui te fait le scroll dans les deux sens…
Code TEXT :
 
10 SCREEN 12:VDP(24)=VDP(24)+254
100 DATA "M-0","M-1","M-2","M-3","M-4","M-5","M-6","M-7","M-8","M-9","M-A","M-B","M-C","M-D","M-E","M-F"
110 DATA "7","6","5","4","3","2","1","0"
120 DATA "F","E","D","C","B","A","9","8","7","6","5","4","3","2","1","0"
130 DIM M$(16):FOR I=0 TO 15:READ X$:M$(I)=X$:NEXT
140 DIM S$(8):FOR I=0 TO 7:READ X$:S$(I)=X$:NEXT
150 DIM J$(16):FOR I=0 TO 15:READ X$:J$(I)=X$:NEXT
200 FOR N=0 TO128:I=N
210 J=I MOD 16:S=CINT(I/16) MOD 8:M=CINT(I/128) MOD 8
220 F$=M$(M)+""+S$(S)+""+J$(J)
230 IF(S=6 AND J>9) OR S=7 THEN BLOAD F$,S,0-11264 ELSE BLOAD F$,S
231 VDP(24)=VDP(24)-2AND255
240 NEXT:L=1
250 S=STICK(0)
260 ON S GOSUB 300,290,290,290,400,290,290,290
280 GOTO 250
290 RETURN
300 IF L<>1 THEN I=I+128
305 I=I+1:L=1:GOSUB500:VDP(24)=VDP(24)-2AND255:RETURN
400 IF L<>5 THEN I=I-128
405 I=I-1:L=5:GOSUB500:VDP(24)=VDP(24)+2AND255:RETURN
500 J=I MOD 16:S=CINT(I/16) MOD 8:M=CINT(I/128) MOD 8
510 F$=M$(M)+""+S$(S)+""+J$(J)
520 IF(S=6 AND J>9) OR S=7 THEN BLOAD F$,S,0-11264 ELSE BLOAD F$,S
530 RETURN
 


Le scroll est d'abord automatique, pour remplir l'écran.
ligne 200 à 240
Ensuite avec les flèches haut et bas tu peux déplacer le scroll.
lignes 250 à 530
(Ne pas aller vers le bas au début, car ça vas faire une erreur car j('ai pas implémenté les extrémités du scroll)


la technique que j'ai utilisé est de calculer quelles sont les brides qu'il convient d'afficher.
C'est la ligne 210 (ou 500)

Tes fichiers étant rangés de cette manière :

Dossier M$ : (de "M-0" à "M-F")
Dossier S$ : (de "7" à "0")
image J$ : (de "F" à "0")

on a donc la structure suivante pour chaque image

M$ / S$ / J$

il y a 1024 images possibles, que l'on nomme par la variable I
J=I MOD 8 donne donc le numéro d'image dans J$ (de 0 à F)
S=CINT(I/16) MOD 8 donne le numéro du sous dossier (de 0 à 7)
M=CINT(I/128) MOD 8 donne le numéro du dossier principale (de 0 à F)

j'espère que mes explications sont claires… ? :p Edité par ericb59 Le 07/01/2015 à 13h51


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 07/01/2015 à 14h36
petite video



banniere-ericb59e
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5794

Le 07/01/2015 à 18h23
Quand je vois le post de Igal, ca me fait pensé a..... Matrix :D
Vous savez Neo, suivez le lapin blanc et tous ca,.... :oups En fait Igal doit communiqué avec une autre dimension :D
Non, c'est geant qd meme ^^ Edité par TurboSEB Le 07/01/2015 à 18h24



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 08/01/2015 à 13h29
Salut Éric. C'est super ce que fu as fait.

Je suis étonné de voir que vos vidéos montre les scroll dérouler plus rapidement que sur mon 8280+ émulé sur BlueMSX!

Ta vidéo comporte pas de bug d'affichage.
Le teste que j'avais fais comporte des bug..
Tu as du lettre à jour je pense non?


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 08/01/2015 à 13h33
Pour la vitesse, c'est sans doute parceque je l'ai fait la video en mode Turbo-R.

Pour le bug d'affichage… ben je ne sais pas de quoi tu veux parler au juste...


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 08/01/2015 à 14h54
En regardant bien le bug figure bien sur ta vidéo à la seconde 30.

En fait, dès que tu fais marche arrière, la première Frame généré est buggé.

J'ai pensé à un autre solution pour savoir quelle Frame doit etre générée.

Sachant que VDP(24)=VDP(24)+2and255 et que le point de départ est VDP(24)=VDP(24)+254:

Il suffit d'utiliser la valeur de VDP(24) comme si elle était une variable.

De la sorte, on saurait très exactement quelle Bribe il faut afficher :top

Sachant que: [8 Répertoires] contenant chacun [8 Répertoires] contenant [128 Bribes]

Il suffit d'utiliser "une formule adaptée pour indiquer au moteur quelle bribe il faut afficher.

Si tu arrives à pondre la formule permettant d'indiquer quelle bribe il faut afficher, je pourrais l'appliquer à mon moteur "rudimentaire" mais "très souple :kiss


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 08/01/2015 à 15h02
Igal c'est ce que j´ai fait.
Mon programme calcul les brides à afficher.

Je vois le bug dont tu parles.
´ajustement ce fait en ligne 300 et 400, lorsque le scroll change de sens.
Il faut essayer en changeant la valeure '128´ par 127 ou 129...
La pour le moment sur iphone je peux pas tester...


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 08/01/2015 à 15h58
Après tests je confirme ce que je disais tout à l'heure, il suffit de remplacer la valeur 128 par 127 en ligne 300 et 400 pour ne plus avoir de bug lors du changement de sens du scroll.
ce qui donne :

Code TEXT :
 
10 SCREEN 12:VDP(24)=VDP(24)+254
100 DATA "M-0","M-1","M-2","M-3","M-4","M-5","M-6","M-7","M-8","M-9","M-A","M-B","M-C","M-D","M-E","M-F"
110 DATA "7","6","5","4","3","2","1","0"
120 DATA "F","E","D","C","B","A","9","8","7","6","5","4","3","2","1","0"
130 DIM M$(16):FOR I=0 TO 15:READ X$:M$(I)=X$:NEXT
140 DIM S$(8):FOR I=0 TO 7:READ X$:S$(I)=X$:NEXT
150 DIM J$(16):FOR I=0 TO 15:READ X$:J$(I)=X$:NEXT
200 FOR N=0 TO128:I=N
210 J=I MOD 16:S=CINT(I/16) MOD 8:M=CINT(I/128) MOD 8
220 F$=M$(M)+""+S$(S)+""+J$(J)
230 IF(S=6 AND J>9) OR S=7 THEN BLOAD F$,S,0-11264 ELSE BLOAD F$,S
231 VDP(24)=VDP(24)-2AND255
240 NEXT:L=1
250 S=STICK(0)
260 ON S GOSUB 300,290,290,290,400,290,290,290
280 GOTO 250
290 RETURN
300 IF L<>1 THEN I=I+127
305 I=I+1:L=1:GOSUB500:VDP(24)=VDP(24)-2AND255:RETURN
400 IF L<>5 THEN I=I-127
405 I=I-1:L=5:GOSUB500:VDP(24)=VDP(24)+2AND255:RETURN
500 J=I MOD 16:S=CINT(I/16) MOD 8:M=CINT(I/128) MOD 8
510 F$=M$(M)+""+S$(S)+""+J$(J)
520 IF(S=6 AND J>9) OR S=7 THEN BLOAD F$,S,0-11264 ELSE BLOAD F$,S
530 RETURN
 


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 01/02/2015 à 15h32
Je voudrais remplacer les noms de fichier [1,2,3,4,5,6,7,8] par une variable que j'incrémente à chaque boucle mais j'arrive pas à comprendre comment faire :(

300 CALL CHDIR ("C"):VB=C
302 BLOAD"8",S:GOSUB 1510
304 BLOAD"7",S:GOSUB 1510
306 BLOAD"6",S:GOSUB 1510
308 BLOAD"5",S:GOSUB 1510
310 BLOAD"4",S:GOSUB 1510
312 BLOAD"3",S:GOSUB 1510
314 BLOAD"2",S:GOSUB 1510
316 BLOAD"1",S:GOSUB 1510
318 CALL CHDIR ("..")

supposons que la variable pour les fichiers soit X:
10 X=X+1
20 BLOAD"X",S
25 IF X=8 THEN X= 0
30 GOTO
C'est ça?

---------------------------------------------------------------------

A la suite de quoi, je voudrais remplacer les noms des Répertoires [0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f] par une variable qui s'incrémente après chaque lecture des 8 fichiers qui sont à l'intérieur.

300 CALL CHDIR ("C"):VB=C
302 BLOAD"8",S:GOSUB 1510
304 BLOAD"7",S:GOSUB 1510
306 BLOAD"6",S:GOSUB 1510
308 BLOAD"5",S:GOSUB 1510
310 BLOAD"4",S:GOSUB 1510
312 BLOAD"3",S:GOSUB 1510
314 BLOAD"2",S:GOSUB 1510
316 BLOAD"1",S:GOSUB 1510
318 CALL CHDIR ("..")

Supposons que Y soit la variable (hexadécimale) des répertoires:
[0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f] Il faut sortir de la boucle pour le répertoire C qui comporte certaines particularités!

.....Y=&HC
10 X=X+1
20 BLOAD"X",S
25 IF X=8THENX=1:CALLCHDIR(".."):Y=Y-&H1:CALL CHDIR(" "+(Y)):IF Y=&HD THEN GOTO 40
30 GOTO 10
40 ....=> Autre conditions spécifiques au répertoire D....

Pouvez vous m'aider svp ? ;) Edité par igal Le 01/02/2015 à 15h40


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 01/02/2015 à 15h45
cher igal, tout ce que tu demandes est dans le programme Basic que je t'ai mis plus haut.

Part du BLOAD F$, en ligne 520, regarde le nom de variable, et cherche en remontant dans le listing comment la variable est créé.

as tu testé ce programme ? Il fait tout ce que tu as demandé depuis le début, en automatique... :gne Edité par ericb59 Le 01/02/2015 à 15h45


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 01/02/2015 à 15h58
Salut Éric.

J'ai besoin d'une boucle ou je peux incrémenté à volonté à n'importe quel moment par une variable qui sera modifiée à n'importe quel moment et n'importe où dans le programme.

et surtout pas en mettant en data.

Juste une formule toute bête du genre.

BLOAD " VARIABLE, S
j incrémente ou réduis la variable ou je veux et à n'importe quel moment.

Pareil pour l'accès aux répertoires.

Juste une formule toute bête.
CALL CHDIR ("VARIABLE")

Je veux augmenter ou réduire depuis n'importe où et à n'importe quel moment du programme.

merci se ton aide :)

Pour les fichier c'est de 1 à 8 (decimal)
Pour les répertoires de 0 à F (hexadécimal)

Merci de ton aide Edité par igal Le 01/02/2015 à 16h07


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 01/02/2015 à 15h59
J'ai testé ton programme y a un moment et il marche bien mais j'ai besoin de faire ce que j'explique juste qu dessus :)


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 01/02/2015 à 18h01
Code TEXT :
 
100 f=f+1
110 f$=mid$(str$(f),2,len(str$(f)-1))
120 bload f$
 


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 01/02/2015 à 19h08
j'ai un [Type MisMatch in 302]

300 F=1
302 F$=MID$(STR$(F),2,LEN(STR$(F)-1))
304 BLOAD"F$",S: F=F+1:GOSUB1510
308 GOTO 302

1510 VDP(24)!VDP(24)+2ANd255:RETURN

Tu as essayé ta ligne de commande?


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