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

Reprise du message précédent
Franchement, je sais pas comment tu fais pour t'y retrouver
Mais chapeau pour le scrolling ...

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

(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

Bonne nuit lol
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


Bonne nuit lol

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…
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… ?
Edité par
ericb59
Le 07/01/2015 à 13h51
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

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… ?


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

Vous savez Neo, suivez le lapin blanc et tous ca,....


Non, c'est geant qd meme


MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)






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?
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?

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...
Pour le bug d'affichage… ben je ne sais pas de quoi tu veux parler au juste...

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

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


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...
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...

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

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

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 ?


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...
Edité par
ericb59
Le 01/02/2015 à 15h45
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...


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


Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie