MSX Village forum

La Place des Développeurs Final Smash Cette fois c'est le bon !?

HDCORP Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 12/10/2013 à 10h39

Messages: 285

Le 14/02/2021 à 14h04

Reprise du message précédent

Bravo bravo bravo c’est super comme idée et réalisation
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 14/02/2021 à 17h25
aoineko :
Nouvelle version avec les anims de déplacements et de shoot du joueur du bas : fs_0_3.rom.

Et non, Eric, y a pas encore les raquettes. :p

D'ailleurs, avec la raquette et la balle, je vais commencer à outrepasser la limite des 4 sprites par ligne.
Heureusement, j'ai prévu mon coup pour que la peau (qui à la même couleur que le terrain) disparaisse en premier.
Dans le pire des cas, la couleur blanche (peu utilisé) disparaitra aussi.
Heureusement, ça arrivera pas tout le temps et ça devrait être assez rapide.
De toute façon, avec les limites du MSX1, c'est difficile de faire mieux.

EDIT : J'ai un bug quand j'appuis sur les touches [Haut]+[Gauche], ou [Bas]+[Droit], je détecte plus la touche [Espace]. C'est un problème connu ou j'ai un bug qq part ?


De mémoire, une fois j'ai passé une journée entière avantde me rendre compte que certaines combinaisons (Diagonales) ne fonctionnaient pas avec BlueMsx...
Je peux me tromper mais il me semble bien que ca venait pas de mon programme.

Je crois que c'était lorsque j'essayai de controler 2 héros sur le même clavier! :oups


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 14/02/2021 à 19h50
igal :
Je peux me tromper mais il me semble bien que ca venait pas de mon programme.


C'est bien le cas !
C'est même pas à cause de OpenMSX ou MSXBlue ; c'est simplement le clavier de mon PC qui détecte pas l'appuis sur la barre espace si j'ai les touches [Haut]+[Gauche], ou [Bas]+[Droit] enfoncées.
On peut tester son clavier ici : http://en.key-test.ru/
De mémoire, le MSX n'a pas ce problème.


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 15/02/2021 à 07h16
Ha oui j’avais oublié le problème de Key Ghosting...
D’où l’interêt de travailler sur Mac :D

Il existe des claviers PC qui évitent le Key Ghosting, surtout des claviers « Gamer ». Edité par ericb59 Le 15/02/2021 à 07h17


banniere-ericb59e
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5791

Le 15/02/2021 à 10h24
Faudra mettre des bruitages pour le réalisme :tea
Quelques pistes ici : :D
https://youtu.be/M-e3l5JCx3E
https://youtu.be/ZdyGoL34AiI
Enfin, si il reste des ressources hein :lol



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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 15/02/2021 à 15h16
J'utilise ayFX donc aucun soucis pour ajouter des sons. :top
Je ferai des tests avec l'éditeur ayFX, mais si quelqu'un est motivé, je suis pas contre un coup de main. ;)


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 17/02/2021 à 00h24
J'ai fini mon 2e joueur !


J'ai optimisé les poses pour limiter les cas ou j'ai besoin d'un sprite de plus pour la raquette (il n'y a plus que 3 frames ou c'est nécessaire).
Ca limitera les cas ou je dépasse les 4 sprites par lignes.
Du coup, je vais retaper les sprites du 1er joueur pour utiliser la même technique.

J'ai hâte de reprendre la programmation, mais je me serai quand même bien amusé en pixel art. :)


On est toujours ignorant avant de savoir.
Github    
DataPro Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 14/06/2011 à 10h12

Messages: 844

Le 17/02/2021 à 12h26
Franchement c'est génial de passer du temps à développer un nouveau soft pour le MSX.
Et franchement, les graphismes sont très sympathiques. L'idée de s'inspirer de titres Gameboy est à conserver. J'espère qu'elle serait reprise par d'autres.

Je vais suivre le sujet et si j'en ai le temps, je testerai une prochaine version sur une machine réelle. Edité par DataPro Le 17/02/2021 à 12h28


MSX1: Yeno DPC-64 - Sanyo PHC-28S - Sanyo PHC-28L - Canon V20 - Sony HB-75F - Yeno MX-64
MSX2: Panasonic FS-A1F 128Ko RAM 128 Ko VRAM + Gotek / Philips NMS8255 Azerty
Carnivore 2 : 8Mb FlashROM ° 1024Ko RAM ° IDE ° FM-PAC(MSX Music)° SCC+
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 17/02/2021 à 13h20
Merci.
Pour moi, c'est un jeu en lui-même que de faire un jeu sur MSX.
Toutes les contraintes techniques sont autant de règles du jeu qu'on peut s'amuser à essayer d'exploiter au maximum pour atteindre ses objectifs.
Le revers de la médaille, c'est que comme je m'amuse beaucoup à solutionner les puzzles techniques, j'ai du mal à finir mes jeux une fois que ça devient facile. ^^
En tout cas, je suis bien motivé par celui-là qui a juste ce qu'il faut de challenges sans être non plus trop improbable.


On est toujours ignorant avant de savoir.
Github    
DataPro Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 14/06/2011 à 10h12

Messages: 844

Le 17/02/2021 à 13h42
Je connais cette sensation, j'ai adapté/upgradé un jeu du VG5000µ sur Sanyo PHC-25 en 2012 : Citadelle
http://www.phc25.com/projets.htm
Je devais faire la conversion sur MSX 64Ko mais le temps m'a manqué depuis


MSX1: Yeno DPC-64 - Sanyo PHC-28S - Sanyo PHC-28L - Canon V20 - Sony HB-75F - Yeno MX-64
MSX2: Panasonic FS-A1F 128Ko RAM 128 Ko VRAM + Gotek / Philips NMS8255 Azerty
Carnivore 2 : 8Mb FlashROM ° 1024Ko RAM ° IDE ° FM-PAC(MSX Music)° SCC+
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 17/02/2021 à 13h55
DataPro :
Je devais faire la conversion sur MSX 64Ko mais le temps m'a manqué depuis

Si un jour ça te ré-tente de faire une version MSX, tu trouveras ici des gens pour t'aider. :)


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 17/02/2021 à 20h36
Et voilà, j'ai fini les sprites de mes 2 personnages !



J'ai découvert ce site très sympa pour créer des sprites : https://www.piskelapp.com/
Perso, je les ai créé sous The Gimp, mais le site m'a permis de visualiser facilement les animations.

Bon, maintenant faut que je modifie mon tool d'export de sprites (CMSXimg) pour gérer le cas des sprites 16x16 dont l'agencement est un peu bizarre.
Le but va être de stocker les données des sprites dans mon jeu de la même la façon qu'ils sont stockés en VRAM pour optimiser le transfert.


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 17/02/2021 à 23h44
J'hésite entre deux approches pour mes données et j'espère que les experts en assembleur (Metallion par ex. ^^) pourront me donner leur avis.
Pour chaque frame d'animation de mes tennismen, j'utilise 9 patterns 16x16 de la Sprite Patterns Table du TMS9918 comme suit :

Comme mon personnage fait 16x24 pixels, sur ces 9 patterns 16x16, seuls 28 des 36 blocs 8x8 sont utilisés.
Sur l'image : En rouge, l'index du pattern. En bleu, l'index de l'attribue de sprite (hors sujet). En gris, les blocs non utilisés. En couleur, les groupe de blocs non-vides contiguës en VRAM.
(la "racket" est un cas particulier qu'on peut négliger)

J'hésite donc entre deux méthodes :
  • Copier les 36 blocks (288 octets) d'un coup dans une seule boucle (les blocs vides étant simplement plein de 0)
  • Copier les 28 blocks vraiment utilisés (224 octets) par groupe de blocs contiguës (il y en a 9 allant d'une taille de 8 à 72 octets)


Sur les 21 frames d'animation que compte chaque personnage, on aurait 1344 octets de blocs vides ; ce qui fait beaucoup, mais qui n'est pas vraiment un problème.
Ma problématique est surtout la vitesse de transfert de mes images en VRAM.
Comme je suis sur MSX1, en mode graphique 2 (Screen 2) et potentiellement hors V-Blank, je ne peux pas aller plus vite que 29 cycles pour l'écriture coté CPU pour laissé le temps au VDP d'écrire les données en VRAM.
Ma boucle de copie en VRAM est basé sur un outi + jp nz qui fait justement 29 cycles.
Le code assembleur que je compte utiliser fait 112 cc de setup + 29 cc / octet pour la copie.
Si je copie les 36 blocks dans une seule boucle (avec les blocs vides), j'ai calculé un total de 8464 cc (288 * 29 + 112).
Si je copie les 28 blocks en 9 fois, j'ai calculé un total de 7392 cc (224 * 29 + 112 * 9).
Il y aurait surement un petit surcout pour la copie en 9 fois sur le setup, mais d'un autre coté, aucune copie ne faisait plus de 256 octets, je pourrais optimiser le setup de la boucle (les deux doivent s'équilibrer à mon avis).
Si j'en crois ces chiffres, la deuxièmes solutions semble bien plus rapide.
Est-ce que ces résultats vous semblent cohérents ? :hum


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 18/02/2021 à 09h16
Oui, à priori, c'est cohérent. Il y a juste une petite erreur dans ton calcul de la 2e solution : 224x29 + 112x9 = 7504.
Mais cela ne change pas son avantage par rapport à la 1ère. Il faut juste être sûr que les blocs vides restent toujours vides.

Par contre, en terme de nombre de sprites, tu es à 6 sprites par ligne (si on compte la raquette) pour la 1ère ligne, et 5 sprites par ligne pour la 2e. Comment tu vas faire ? D'autant plus qu'il y a encore la balle (et son ombre) à ajouter ...
Edité par Metalion Le 18/02/2021 à 09h27


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)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 18/02/2021 à 09h44
Metalion :
Oui, à priori, c'est cohérent. Il y a juste une petite erreur dans ton calcul de la 2e solution : 224x29 + 112x9 = 7504.
Mais cela ne change pas son avantage par rapport à la 1ère. Il faut juste être sûr que les blocs vides restent toujours vides.


OK, je vais partir la dessus. :top

Metalion :
Par contre, en terme de nombre de sprites, tu es à 6 sprites par ligne (si on compte la raquette) pour la 1ère ligne, et 5 sprites par ligne pour la 2e. Comment tu vas faire ? D'autant plus qu'il y a encore la balle (et son ombre) à ajouter ...


En temps normal, on aura que 3 ou 4 sprites par ligne :
- Black1 ou Black2 (l'alternance créé l'effet d'ombrage)
- Cloth (uniquement sur la partie 16x16 basse)
- White
- Skin

Il n'y a que 2 frames sur les 21 où la raquette sera sur une ligne ou y a déjà 4 sprites.
Et il y a évidemment la balle qui pourra passer à hauteur du joueur.

J'estime que 80% du temps, on aura aucun problème de prio.
Dans le cas ou la raquette ou la balle font dépasser la limite des 4 sprites, c'est la peau qui va sauter en premier (via le système de priorité dû à l'index des attribues de sprite). Comme c'est la même couleur que le terrain, l'impact sera potentiellement limité (si le joueur n'est pas au dessus d'une ligne blanche, il ne devrait même pas se rendre compte que le sprite de peau à disparu).
Dans le cas rare (en nombre de frame) où on aura la raquette et la balle sur la même ligne, c'est la couleur blanche qui va sauter en plus de la peau.

Il n'y a pas de magie, mais disons que le système est prévue pour limiter les cas d'outrepassements de la limite des 4 sprites et pour minimiser l'impact visuel qu'auront ces outrepassements.

EDIT : Avec un autre agencement des patterns en VRAM (en mettant tous les blocks 16x16 plein côte à côte), je descends à 8 groupes de blocks à envoyer. Ça confirme l'avantage de la 2e méthode.


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1484

Le 19/02/2021 à 09h00
aoineko :
EDIT : Avec un autre agencement des patterns en VRAM (en mettant tous les blocks 16x16 plein côte à côte), je descends à 8 groupes de blocks à envoyer. Ça confirme l'avantage de la 2e méthode.

C'est la confirmation d'un grand principe qu'il ne faut jamais oublier lorsqu'on développe en assembleur : l'organisation des données, et la valeur des données elles-mêmes, jouent un grand rôle dans l'optimisation.
:p Edité par Metalion Le 19/02/2021 à 10h46


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