MSX Village forum

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

Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 09/02/2014 à 18h26

Reprise du message précédent

Je vais le mettre en GRAS comme ça peut être que vous le verrez cette fois-ci ... :s

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

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 09/02/2014 à 18h59

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


banniere-ericb59e
Site web    
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 09/02/2014 à 20h14
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) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 09/02/2014 à 22h29
ericb59 :
non, tu te trompes.

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+)
Site web    
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 09/02/2014 à 22h39
Maggoo :
[quote=ericb59]non, tu te trompes.

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
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 09/02/2014 à 23h29
@Magoo: Kun Basic Plus compatible avec SET SCROLL, Ca risque d'aider pas mal :top

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

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

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

Voici la vidéo:

http://youtu.be/0TuDsv3bH-8


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 10/02/2014 à 06h28
Maggoo :
ericb59 :
non, tu te trompes.

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


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 10/02/2014 à 07h59
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




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

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 10/02/2014 à 08h07
oui metalion. IL devrait y avoir des parenthèses.
Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ? :hum
et qu'il ferait la réduction lui même ?


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 10/02/2014 à 08h55
ericb59 :
oui metalion. IL devrait y avoir des parenthèses.

Ceci dit, ca voudrait dire que VDP(27) accepterait des valeurs supérieur à 255 ? :hum

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

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 10/02/2014 à 09h15
La théorie c'est bien, mais des fois elle se heurte à la réalité ! ;)




C'est sans doute un bug de l'interpreteur car 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... :hum


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


banniere-ericb59e
Site web    
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 10/02/2014 à 09h20
Quel suspens quand on approche les 255 :lol
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 10/02/2014 à 10h44
Autant pour moi, j'étais donc dans l'erreur ... :oups :oups :oups

J'étais persuadé que l'opérateur logique était évalué avant l'addition.
Il semble bien que non, puisque, effectivement :

Code :
? 255+1AND255
  0
Edité par Metalion Le 10/02/2014 à 10h58


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 10/02/2014 à 11h18
@Métalion: C'est cool de vouloir l'optimiser :top

Dans un premier temps, j'essais de voir (de facon empirique) tout ce que peut supporter le petit BASIC msx :fou

Une fois la boucle bouclée, pourquoi pas, ce serait top d'optimiser voir d'inclure du programme machine si nécessaire :top


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

Maire-adjoint

Rang

Avatar

Inscrit le : 06/10/2009 à 18h27

Messages: 613

Le 10/02/2014 à 14h10
Beaucoup d'ardeur pour réussir à faire un scrolling sous BASIC. Bravo ! :top

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 !
   
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 10/02/2014 à 20h25
ericb59 :
Maggoo :
ericb59 :
non, tu te trompes.

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
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie