Logicielsmoto.com

Nous sommes le 06 Juil 2022, 08:29

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 420 messages ]  Aller à la page Précédente  1 ... 22, 23, 24, 25, 26, 27, 28  Suivante
Auteur Message
MessagePosté: 21 Avr 2022, 08:53 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Quelques nouvelles ...

J'ai terminé d'implémenter le système de buffer et j'obtiens un gain de 12% sur le framerate global.
Soit en moyenne 8700 cycles par boucle principale d'économisés.
Je vous explique tout ça plus tard.

J'ai intégré qq retours de Sam (mais pas encore tout).

Je pense mettre en place maintenant de quoi faire pointer les variables temp de chaque routine sur la zone DP en mappant les variables sur des "slots"

Exemple, dans la routine, au lieu de faire :
Code:
x_off   fdb   0


on fera :
Code:
x_off   equ glb_w_var_0


avec en include :
Code:
glb_w_var_0                   equ $9FEE


ça permettra également de gagner de la place en réutilisant toujours le même espace (pour des routines différentes) pour ces variables de travail.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 09:27 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 479
Mais tu arretes ?!?!? ... Tu vas nous pondre un Sonic aussi rapide que sur Megadrive :W


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 09:52 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Arrêtes surtout pas !

Quand je vois que certains sont tout heureux d'annoncer Sonic sur des machines à 85Mhz de pleins de MIPS (ce qui n'est pas un vrai challenge: la seule difficulté étant de configurer le Makefile),
phpBB [video]

alors qu'avec nos 1Mhz on arrive a faire aussi bien... (et eux en plus(moins), ils n'ont pas les niveaux bonus)
phpBB [video]

phpBB [video]

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 10:17 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Merci pour vos encouragements !

Voici la dernière vidéo :
phpBB [video]

https://youtu.be/hP3DjPNClHo

C'est bcp plus fluide que sur la première vidéo.

Sans parler d'un jeu complet, on peut déjà envisager d'ajouter à court terme :
- un layer supplémentaire pour les tiles d'avant plan (j'ai une idée pour aller vite, on ne devrait pas perdre bcp)
- la gestion des collisions de "terrain", la structure de données des tiles est compatible, mais il faut que je réalise un convertisseur des données d'origine
- le code de controle de sonic
- un gestionnaire d'objet pour instancier / libérer les objets en fonction de la position de sonic dans la map

largement de quoi s'amuser ...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 10:29 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Citation:
C'est bcp plus fluide que sur la première vidéo.
Carrément ! Ca (dé)fonce grave:
Image

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 11:10 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 479
Ca semble ralentir pas mal au niveau des cascades. Ont-elles un attribut de transparence ce qui fait qu'elles sont plus couteuses en cycles pour afficher ?

Aussi, je vois que tu affiches une ligne sur deux pour le background. As-tu essayer d'alterner les lignes ?

Par exemple :

* Boucle 1 : lignes paires
* Boucle 2 : lignes impaires
* Boucle 3 : lignes paires
* Boucle 4 : lignes impaires
* ...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 11:21 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Non rien de spécial sur les cascades.
La vitesse varie selon deux critères :
- le nombre de tuiles pleines dessinées a l’écran
- la pas de défilement (plus le pas est élevé, plus je dois remplir le buffer)

Les cascades sont des tuiles pleines et souvent entourées de murs en tuiles pleines également.

Dans le jeu d’origine, la transparence des cascades est gérée par entrelacement vertical.
Je crois que c’est un sprite qui vient s’afficher par dessus.
Je verai si je conserve ce principe ou si je profite de l’entrelacement horizontal et si je me contente d’afficher les tuiles concernées en avant plan. Dans ce cas pas de sprite supplémentaire.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 11:24 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Oui j’ai déjà essayé d’alterner (a l’époque sur le spécial stage) mais ça ne donne rien de bon car le frame rate est variable. Ça aurait fonctionné si on était sur du 50 ou 25 fps, ce qui n’est pas le cas.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 11:27 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
J’ai aussi essayé de me passer des bordures qui masquent en noir les tiles en cours d’apparition. Mais le fait de les voir apparaître par bloc attire l’œil et c’est très perturbant.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 12:01 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 479
Bentoc a écrit:
Je verai si je conserve ce principe ou si je profite de l’entrelacement horizontal et si je me contente d’afficher les tuiles concernées en avant plan. Dans ce cas pas de sprite supplémentaire.


Oui, c'est vrai qu'avec l'entrelacement, ce devrait donner un cote de transparence ... en esperant ceci dit que seules les cascades sont en avant plant dans le jeu, sinon, il va y avoir de tuiles qui ne peuvent s'afficher que sans entrelacement.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 21 Avr 2022, 15:45 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Oui ça va être pénible car certains tiles d’avant plan sont transparents il faut donc afficher ou non les pixels des lignes noires intermédiaires pour masquer les sprites. A moins d’afficher les sprites en entrelacé sur les mêmes lignes que le decors … (une solution pour gagner de la place et avoir tt les images de sonic en ram ?) à essayer…


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Avr 2022, 21:41 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
ça y est j'ai les tiles d'avant plan qui s'affichent correctement ...

phpBB [video]

https://youtu.be/_HvDkPCm164

J'ai donc écrit un convertisseur pour récupérer les données d'origine, ça aidera aussi pour les collisions.
Sur les tiles d'avant plan, les lignes intermédiaires conservent les pixels transparents, et on remplace les pixels colorés par des pixels noirs ... tout simplement :
Fichier(s) joint(s):
tileset.png
tileset.png [ 44.92 Kio | Vu 564 fois ]


Les points négatifs (pour le moment) :
1. Les données d'origine comprennent des blocks en double ... dont je ne connais pas l'utilité, le tileset adonc bien grossi.
S'il s'avère qu'ils sont inutiles, je dédoublonnerai.

2. Les zones d'avant plan coutent plus cher à afficher (lignes noires intermédiaires), ça ne devrait pas être problématique car les tiles d'avant plan utiles sont en qté limité.
Sauf que dans le design original il y a de grandes zones de mur en avant plan (dans des endroits normalement inacessibles). Il va donc falloir que j'édite la map des niveaux pour repasser ces murs en arrière plan.

Mais sinon c du tout bon ;-)

Coté prog rien de spécial :
Au moment de rendre les tiles d'arriere plan depuis le buffer, si je tombe sur un tile d'avant plan je le met en file d'attente :

Code:
DBT_cloop
        pulu  d,x
        pshs  u
        stb   $E7E6
        beq   @skip
   tsta
   bpl   @low
   stb   ,y+
   stx   ,y++
   ldx   <glb_screen_location_1
   stx   ,y++
   ldx   <glb_screen_location_2
   stx   ,y++
   bra   @skip
@low    ldu   <glb_screen_location_2
        jsr   ,x
@skip   puls  d,x,u


et après avoir rendu les sprites je dessine ces tiles d'avant plan :

Code:
DrawHighPriorityBufferedTile
        ldy   #tmb_hprio_tiles
@loop
   ldb   ,y+
        stb   $E7E6
        beq   @exit
   ldx   ,y++
   ldu   ,y++
   stu   <glb_screen_location_1
   ldu   ,y++
        jsr   ,x
   bra   @loop
@exit   rts


Quand l'écran ne bouge pas, les tiles d'arrière plan ne sont plus rendus du tout (on appelle pas la routine).
Par contre on appelle la routine pour les tiles d'avant plan, qui utilise la liste avec tout de prêt dedans ...
pratique !

C'est le seul code ajouté ...

ps : il faut que je règle un petit pb de clignotement des sprites au démarrage du scroll ... c'est sur la todo list.


Dernière édition par Bentoc le 23 Avr 2022, 22:32, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Avr 2022, 21:51 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Pour la transparence de l'eau, si j'édite la map en passant les blocs d'eau d'arrière plan en avant plan ça donnera ça :

phpBB [video]

https://youtu.be/4tvO6CsxEO4

Pas mal non ? du coup pas besoin de code spé pour gérer ça.

Vous noterez les trous dans les murs : c’est pour les tiles animés … ça viendra après


Dernière édition par Bentoc le 23 Avr 2022, 23:00, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Avr 2022, 22:39 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1644
Localisation: Brest
Petite optim: les ",y+" (2 cycles) et ",y++" (3 cycles) sont couteux à la longue. Il vaut mieux procéder à un décalage fixe (1 cycle) et un gros, mais unique, LEA (5 cycles) après:
Code:
   stb   ,y+   ; +2
   stx   ,y++  ; +3
   ldx   <glb_screen_location_1
   stx   ,y++  ; +3
   ldx   <glb_screen_location_2
   stx   ,y++  ; +3 = total +11cycles
devient
Code:
   stb   ,y   ; +0
   stx   1,y  ; +1
   ldx   <glb_screen_location_1
   stx   3,y  ; +1
   ldx   <glb_screen_location_2
   stx   5,y  ; +1
   leay  7,y  ; +5 = total +8 cycles
Evidemment plus on a de "++" et plus on gagne ainsi.

Par ailleurs il se pourrait que le "++" final sur Y ne serve à rien. En effet si le B qu'on place en $E7E6 est nul on passe dans @exit sans avoir fait avancer Y. Similairement si A est >0, on passe dans le @low sans non plus faire avancer Y. Donc si (hypothèse!) on se fiche que Y a bien avancé de 7 cases, on peut carrément virer le LEAY final du code ci-dessus et gagner encore plus.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Avr 2022, 22:56 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 307
Localisation: Var
Merci, bien vu.
Virer le leay final oui mais faut bien avancer donc le placer au début ? Ça revient au même non ?

J’ai envisagé d’utiliser puls pour la lecture de la liste mais l’irq viendrait écraser les données si elle se déclenche lors de la routine… donc c’est pas viable.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 420 messages ]  Aller à la page Précédente  1 ... 22, 23, 24, 25, 26, 27, 28  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com