La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?
Reprise du message précédent
Je vais le mettre en GRAS comme ça peut être que vous le verrez cette fois-ci ...Dans les expressions VDP(xx)=VDP(xx) + ... : "AND255" NE SERT A RIEN !!!!
1 AND 255 = 1
2 AND 255 = 2
Et d'ailleurs, n'importe quel nombre AND 255 est égal à lui-même.
A enlever donc, cela ralenti inutilement l'interprétation du BASIC.
Et je confirme ce que les autres ont déjà écrit : la seule solution pour connaitre les sprites qui sont en collision est de tester chaque coordonnées de chaque sprite pour trouver quelle paire est en collision.
Tu vas donc te heurter très rapidement (si ce n'est pas déjà fait au niveau de l'alimentation du décor) aux limites du BASIC. C'est lent, beaucoup trop lent pour ce que tu veux faire. Cela ne sert à rien de l'ignorer et d'espérer des solutions qui n'existent pas ... Un shoot'em up rapide avec double scrolling, animation intelligente des ennemis et tout le toutim, ce n'est PAS possible en BASIC, ou alors au prix de forts ralentissements. Edité par Metalion Le 09/02/2014 à 18h57
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)
ericb59
Membre non connecté
Conseiller Municipal
Si metallion tel que igal l'utilise c'est important
1 AND 255 = 1
2 AND 255 = 2
...
255 AND 255 = 255
256 AND 255 = 0
257 AND 255 = 1
etc...
Ca permet de ramener n'importe quel nombre sur une échelle entre 0 et 255
En fait peut-être qu'un simple test permettrait de vérifier que le BASIC ne fait pas de lui même la réduction à un octet. Cela permettra de supprimer le AND 255...
TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours)
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,...
ericb59 :
non, tu te trompes.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
Maggoo :
[quote=ericb59]non, tu te trompes.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
Etrangement le vdp(27) et vdp(28) utilisent une autre formule que ce dont ne me souvenait (la doc V9958 est pas super claire) et la bonne formule est donc:
VDP(27)=(N+7)8: VDP(28)=-N AND 7 Edité par Maggoo Le 09/02/2014 à 22h45
igal
Membre non connecté
Conseiller Municipal
@Magoo: Kun Basic Plus compatible avec SET SCROLL, Ca risque d'aider pas mal
@Métalion: Tu connais mon obsession...J'ai voulu te prendre au mot et j'ai donc appliquer ce qui suit sous Basic le plus élémentaire
Pour l'occasion, j'ai mis un peu d'ordre dans le code et surtout découpé certaines lignes de commandes qui semblaient faire ralentir le tout.
1 Sprite => Hero ( Huit directions plus tirs)
1 Sprite => Tir directionnel de quatre couleurs différentes selon la direction (Haut Rouge, Bas Vert, Gauche Jaune, Droite Orange, Statique noir, Diagonale effaceur )
5 Sprites => Ennemis rampants (Juste mobiles verticalement selon VDP 24)
4 Sprites => Ennemis volants dans tous les sens selon le comportement du Héro (Rouge, Vert, Jaune, Orange. Intelligence pseudo artificielle)
1 Tiles 16X 16 => Tracé en temps réel selon le comportement Statique du Héro combiné à VDP 27 (Sert à rien, mais juste pour montrer que ca tient la route lol)
1 Musique SCC => moins d'une dizaine de musiques interchangeables en temps réel à n'importe quel moment.
1 bruitage SCC => une quinzaine de bruitages interchangeable et combinables en temps réel à n'importe quel moment.
Le bas du décors est rempli par un simple copier coller selon les indications de Jipe
Le plus difficile reste à faire puisque je dois trouver le moyen d'activer les collisions sans trop ralentir le moulin.
Dans la pratique, j'ai pensé à une idée de jeu qui consiste à tirer un sprite de la couleur correspondante à l'ennemi.
Rouge, jaune, Vert, Orange, Noir
La gameplay consisterait à toucher l'ennemi exclusivement avec la bonne couleur sans quoi, tu perds un crédit!
De quoi s'arracher les cheveux je pense
Le tir est affiché (et le reste) en dirigeant selon les quatre points cardinaux!
Chaque direction génère une couleur correspondante au point cardinal spécifique. (Par exemple Tir vers le haut génère un tir Rouge et seulement rouge)
Le tir reste affiché à l'écran et risque de toucher un ennemi d'une autre couleur et donc tu perds un crédit.
Pour supprimer le Tir affiché à l'écran, il faut Tirer avec n'importe quelle Diagonale. Cela efface le tir précédemment généré.
Le tir avec le héro statique génère un tir Noir qui peut détruire les sprite Rampants arrivants par vague en escadrille.
Le problème, c'est qu'en plus de la difficulté à gérer les collisions en temps réel, il faut en plus tenir compte de tous ces paramètres!
Je sais pas si c'est faisable, mais l'idée me semble bonne
Peut être en essayant de gérer les collisions par les couleurs comme le dit Eric
Voici la vidéo:
http://youtu.be/0TuDsv3bH-8
@Métalion: Tu connais mon obsession...J'ai voulu te prendre au mot et j'ai donc appliquer ce qui suit sous Basic le plus élémentaire
Pour l'occasion, j'ai mis un peu d'ordre dans le code et surtout découpé certaines lignes de commandes qui semblaient faire ralentir le tout.
1 Sprite => Hero ( Huit directions plus tirs)
1 Sprite => Tir directionnel de quatre couleurs différentes selon la direction (Haut Rouge, Bas Vert, Gauche Jaune, Droite Orange, Statique noir, Diagonale effaceur )
5 Sprites => Ennemis rampants (Juste mobiles verticalement selon VDP 24)
4 Sprites => Ennemis volants dans tous les sens selon le comportement du Héro (Rouge, Vert, Jaune, Orange. Intelligence pseudo artificielle)
1 Tiles 16X 16 => Tracé en temps réel selon le comportement Statique du Héro combiné à VDP 27 (Sert à rien, mais juste pour montrer que ca tient la route lol)
1 Musique SCC => moins d'une dizaine de musiques interchangeables en temps réel à n'importe quel moment.
1 bruitage SCC => une quinzaine de bruitages interchangeable et combinables en temps réel à n'importe quel moment.
Le bas du décors est rempli par un simple copier coller selon les indications de Jipe
Le plus difficile reste à faire puisque je dois trouver le moyen d'activer les collisions sans trop ralentir le moulin.
Dans la pratique, j'ai pensé à une idée de jeu qui consiste à tirer un sprite de la couleur correspondante à l'ennemi.
Rouge, jaune, Vert, Orange, Noir
La gameplay consisterait à toucher l'ennemi exclusivement avec la bonne couleur sans quoi, tu perds un crédit!
De quoi s'arracher les cheveux je pense
Le tir est affiché (et le reste) en dirigeant selon les quatre points cardinaux!
Chaque direction génère une couleur correspondante au point cardinal spécifique. (Par exemple Tir vers le haut génère un tir Rouge et seulement rouge)
Le tir reste affiché à l'écran et risque de toucher un ennemi d'une autre couleur et donc tu perds un crédit.
Pour supprimer le Tir affiché à l'écran, il faut Tirer avec n'importe quelle Diagonale. Cela efface le tir précédemment généré.
Le tir avec le héro statique génère un tir Noir qui peut détruire les sprite Rampants arrivants par vague en escadrille.
Le problème, c'est qu'en plus de la difficulté à gérer les collisions en temps réel, il faut en plus tenir compte de tous ces paramètres!
Je sais pas si c'est faisable, mais l'idée me semble bonne
Peut être en essayant de gérer les collisions par les couleurs comme le dit Eric
Voici la vidéo:
http://youtu.be/0TuDsv3bH-8
ericb59
Membre non connecté
Conseiller Municipal
Maggoo :
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
ericb59 :
non, tu te trompes.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
j'ai pas cette version... tu peux me la filer ?
j'ai essayé avec NestorBasic qui inclu un xbasic. sans doute pas la derniere version vu que ça me fait un syntax errot
ericb59 :
Si metallion tel que igal l'utilise c'est important
1 AND 255 = 1
2 AND 255 = 2
...
255 AND 255 = 255
256 AND 255 = 0
257 AND 255 = 1
etc...
Ca permet de ramener n'importe quel nombre sur une échelle entre 0 et 255
1 AND 255 = 1
2 AND 255 = 2
...
255 AND 255 = 255
256 AND 255 = 0
257 AND 255 = 1
etc...
Ca permet de ramener n'importe quel nombre sur une échelle entre 0 et 255
Non,Eric, pas du tout !!!!
Je te rappelle son expression : VDP(24)=VDP(24)+1AND255
Dans ce cas, le nombre sur lequel on applique "AND255" est TOUJOURS 1 (puisque les opérateurs logiques sont prioritaires).
Donc, je réitère : "AND255" ne sert à rien !
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)
ericb59
Membre non connecté
Conseiller Municipal
oui metalion. IL devrait y avoir des parenthèses.
Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ?
et qu'il ferait la réduction lui même ?
Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ?
et qu'il ferait la réduction lui même ?
ericb59 :
oui metalion. IL devrait y avoir des parenthèses.
Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ?
et qu'il ferait la réduction lui même ?
Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ?
et qu'il ferait la réduction lui même ?
Probablement, oui.
Igal, je vais essayer (si j'ai le temps aujourd'hui) de réécrire ton programme pour encore le simplifier et peut-être ajouter quelques parties en assembleur pour accélérer les choses ... Edité par Metalion Le 10/02/2014 à 08h58
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)
ericb59
Membre non connecté
Conseiller Municipal
La théorie c'est bien, mais des fois elle se heurte à la réalité !
C'est sans doute un bug de l'interpreteurcar si tu remplace le '1' par une variable égal à 1, ca ne fonctionne plus, il faut mettre les parenthèses
si ça marche aussi avec une variable. Mais je me souviens bien avoir eu des cas où ça ne fonctionnait pas...
EDIT : Ca y est j'ai retrouvé là où ça ne fonctionne pas...
Avec MOD ça ne marche pas
I=I+1 MOD 255 ne fonctionne pas. MOD est appliqué à 1
il faut effectivement écrire
I=(I+1) MOD 255
A noter qu'après tests
I=I+1AND255 est plus rapide que I=I+1:IF I=256 then I=0
c'est aussi plus rapide que I=(I+1)MOD255
c'est minime... mais quand même ! Edité par ericb59 Le 10/02/2014 à 09h43
C'est sans doute un bug de l'interpreteur
si ça marche aussi avec une variable. Mais je me souviens bien avoir eu des cas où ça ne fonctionnait pas...
EDIT : Ca y est j'ai retrouvé là où ça ne fonctionne pas...
Avec MOD ça ne marche pas
I=I+1 MOD 255 ne fonctionne pas. MOD est appliqué à 1
il faut effectivement écrire
I=(I+1) MOD 255
A noter qu'après tests
I=I+1AND255 est plus rapide que I=I+1:IF I=256 then I=0
c'est aussi plus rapide que I=(I+1)MOD255
c'est minime... mais quand même ! Edité par ericb59 Le 10/02/2014 à 09h43
Fabf
Membre non connecté
Conseiller Municipal
Autant pour moi, j'étais donc dans l'erreur ...
J'étais persuadé que l'opérateur logique était évalué avant l'addition.
Il semble bien que non, puisque, effectivement :
J'étais persuadé que l'opérateur logique était évalué avant l'addition.
Il semble bien que non, puisque, effectivement :
Code :
Edité par
Metalion
Le 10/02/2014 à 10h58
? 255+1AND255
0
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
@Métalion: C'est cool de vouloir l'optimiser
Dans un premier temps, j'essais de voir (de facon empirique) tout ce que peut supporter le petit BASIC msx
Une fois la boucle bouclée, pourquoi pas, ce serait top d'optimiser voir d'inclure du programme machine si nécessaire
Dans un premier temps, j'essais de voir (de facon empirique) tout ce que peut supporter le petit BASIC msx
Une fois la boucle bouclée, pourquoi pas, ce serait top d'optimiser voir d'inclure du programme machine si nécessaire
Beaucoup d'ardeur pour réussir à faire un scrolling sous BASIC. Bravo !
N'y aurait-il pas justement une astuce pour gérer le scrolling rien qu'en langage machine (sous routine qu'on charge en début de programme) et lui incorporer des variables issues du BASIC qu'on change à sa convenance (vitesse, direction etc...) ?
Cela je pense soulagerai largement le BASIC pour faire d'autres choses.
Bon courage en tous cas !
N'y aurait-il pas justement une astuce pour gérer le scrolling rien qu'en langage machine (sous routine qu'on charge en début de programme) et lui incorporer des variables issues du BASIC qu'on change à sa convenance (vitesse, direction etc...) ?
Cela je pense soulagerai largement le BASIC pour faire d'autres choses.
Bon courage en tous cas !
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 !
ericb59 :
j'ai pas cette version... tu peux me la filer ?
j'ai essayé avec NestorBasic qui inclu un xbasic. sans doute pas la derniere version vu que ça me fait un syntax errot
Maggoo :
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
ericb59 :
non, tu te trompes.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Set scroll NE PEUX PAS être utilisé avec xbasic.
Au fait, Set scroll fonctionne avec le XBasic. Il faut juste utiliser la version Kun Basic Plus (specifique au 2+)
j'ai pas cette version... tu peux me la filer ?
j'ai essayé avec NestorBasic qui inclu un xbasic. sans doute pas la derniere version vu que ça me fait un syntax errot
Et hop
http://www.romnation.net/srv/roms/26885/msx2/MSX-Basic-Kun-Plus-1988-Ascii-J.html
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie