PDA

Voir la version complète : [Aide] Problème de changement de scène


zeytok
12/10/2007, 10h43
Bonjour,

j'ai lu la doc de brunni sur la colorisation (en entier), et il est dit qu'il utilise "l'écran blanc" pour détecter le passage d'une scène a l'autre...

Seulement, j'ai voulu commencer à coloriser Mystic Quest (avec VBA CE) et je me suis rendu compte que le crc était calculé seulement au début (donc il ne detecte pas le changement de scène). :hmm:

Alors, j'ai réfléchit à une solution :

Il faudrait pouvoir définir une "zone" (ou plusieurs) de tile qui, à partir du moment où l'on commence à la modifier, on mémorise qu'il y a changement [booléen1=true].

Ensuite, lors de la préparation de l'image suivante, il consulte si il y a eu changement et si changement, il mémorise qu'il faut changer [booléen2=true] (mais ne le fait pas tout de suite) et modifie la premier valeur memorisée pour quel indique qu'il n'y en a pas eu [booléen1=false]. Ainsi, si il y a encore des changements, elle attendra encore avant de calculer le crc.

Quand elle arrivera de nouveau dans la préparation de l'image suivante, si il n'y a pas eu de nouveau changement entre temps [booléen1=false, booléen2=true], c'est le bon moment pour calculer le crc et modifier la palette. :)

Désolé si l'explication est pas super fluide:fleur:, c'est pas trop facile à expliquer:ange:.



Autres (petites) remarques, sur VBA CE, quand il est lancer une fois avec un jeu et sa palette, tant que l'on a pas refermer l'émulateur, il continue d'utiliser les valeurs de la première fois qu'on a défini ColorIt.addTileCrc quelque soit le jeu suivant ou la modification dans le fichier .pal.ini, il faut relancer l'émulateur pour qu'il le prenne en compte.

zeytok
12/10/2007, 10h51
j'allais oublier, pour définir la "zone", ca serait bien de pouvoir le faire un peu dans chaque section, pas seulement dans le init...

Quentin
12/10/2007, 10h55
Moi jai abandonner mystic quest car les crc changent tout le temps !
Donc impossible de le colorier d'apres la documentation de Brunni.

Je t'envoie la ou jai poster le message :
http://www.playeradvance.org/forum/showthread.php?t=13193&page=2

omg
12/10/2007, 10h57
Faut que je regarde ça...

zeytok
12/10/2007, 12h04
Moi jai abandonner mystic quest car les crc changent tout le temps !
Donc impossible de le colorier d'après la documentation de Brunni.

Je t'envoie la ou jai poster le message :
http://www.playeradvance.org/forum/showthread.php?t=13193&page=2

Je sais que c'est impossible pour le moment (enfin, on peut que définir une section pour tout le jeu :S), et j'y ai refléchit et c'est pour ca que je propose cette idée de "mode de detection du changement de scène" pour pallier ce problème (j'ai déjà une certaine experience dans l'émulation).

Puis les crc ne changent pas tout le temps si on définit bien la zone de calcul... je suis passer de 2 crc pour la page titre à un seul en changeant ca.

Faut que je regarde ça...
Merci :wub:

omg
12/10/2007, 12h10
Moi je vais surement avoir un probleme sur Donkey Kong Land car les tiles changent contemment lors d'un niveau... Bref on verra...

Quentin
12/10/2007, 12h37
Moi j'atend ton tuto sur les crc omg car je comprend pas trop les zones de calcules... :S

omg
12/10/2007, 12h46
Je vais voir ça dimanche...

Brunni
12/10/2007, 14h31
C'est vrai ce serait une bonne idée de recalculer le CRC dès que les tiles ajoutées au CRC changent, mais le problème c'est qu'il faut détecter les écritures en VRAM, et c'est très très lent suivant les émus (différence > 25% suivant les jeux), et ça affecte même les jeux qui n'ont pas besoin de ça (notamment la GBC, qui est déjà assez lente comme ça...).
Pour VBA effectivement la section Init n'est exécutée qu'au lancement de l'ému.
Pour DKL j'ai pas regardé mais je crois qu'il y a un espace fixe réservé à tout ce qui est Donkey Kong ou Diddy non? Au pire vous y foutez 4 couleurs "bateau", déjà les couleurs par défaut de la GBC vont bien pour DK et Diddy.
Je vais tester et je vous dis ce que j'en pense :)

zeytok
12/10/2007, 15h29
C'est vrai ce serait une bonne idée de recalculer le CRC dès que les tiles ajoutées au CRC changent, mais le problème c'est qu'il faut détecter les écritures en VRAM, et c'est très très lent suivant les émus (différence > 25% suivant les jeux), et ça affecte même les jeux qui n'ont pas besoin de ça (notamment la GBC, qui est déjà assez lente comme ça...).
Ben, en faite, ca depend si tu utilises de "l'interprétation" ou de la "recompilation dynamique" de la mémoire vidéo...

Si c'est de "l'interpretation", aïe, ca va se sentir vu que lors de l'ecriture, il n'y a pas de testes sur la zone de vram concernée (est(ce que c'est le background, les tiles, les attributs des sprites, ...).

Par contre en "recompilation dynamique", soit on teste a chaque écriture (si c'est des accès aléatoires), soit c'est du sequentiel et on a un pointeur sur une fonction qui correspond à la zone concernée.

dans les 2 cas, on place les testes dans le code des tiles et comme il ne changent pas souvent (en théorie), ca a peu d'impact.

c'est aussi pour ca, que je pensait plutot qu'il faut définir une seule zone, si c'est des accès aléatoires, car autrement, c'est une grosse batterie de testes à chaque écriture. Contrairement, en écriture sequentielle, il suffit de "jongler" avec le pointeur de fonction et une variable qui définit "l'adresse" de changement de zone et là, l'impact d'une ou plusieurs zone est quasi-nul.

Pour VBA effectivement la section Init n'est exécutée qu'au lancement de l'ému.
ok :rolleyes:

Brunni
12/10/2007, 15h56
Oui, l'avantage c'est que si tu n'as pas à notifier tu peux gérer ça via une writemap: tu charges l'adresse de ta writemap, tu fais un and avec l'adresse pour déterminer la banque, tu charges avec offset, tu compares si c'est nul et tu stockes direct dans ce cas. En moins de 10 cycles par accès VRAM c'est plié. Alors que si tu dois notifier les changements tu ne peux pas directement intégrer la VRAM à la writemap, tu dois faire appel à une fonction qui va stocker une valeur dans un tableau, mettre à jour une variable globale; compte tenu du nombre d'accès VRAM de certains jeux, la différence est énorme (l'écran titre de toki tori passerait de 112% à 85% de CPU avec la writemap par exemple).
Mais bon le pb c'est surtout MasterBoy (là je fais des accès direct), j'espère que ça ne ralentira pas trop les jeux GBC (qui sont déjà assez limite pour certains...), c'est pour ça que je vais attendre de rentrer chez moi ce week et tester sur ma PSP ;)
Mais de toute façon c'est quelque chose d'important, donc tu peux être quasi sûr que d'une manière ou d'une autre je vais me débrouiller pour l'intégrer :)

omg
12/10/2007, 17h03
Ce dialoque m'a filé le tourni... :S

Brunni
13/10/2007, 13h52
Bon ben malheureusement c'est bien ce que je pensais: Mystic Quest est simplement impossible à coloriser, il faut l'oublier :(
Ce jeu construit un tileset dynamiquement en fonction des salles: par exemple si vous venez d'une salle du château par une autre salle de celui-ci, seules quelques tiles seront chargées à la suite des autres (celles qui manquaient), et si vous revenez en arrière puis retournez dans cette salle rien ne sera chargé du tout puisque tout y est déjà. Si vous venez de la forêt par contre, presque toutes les tiles seront rechargées car aucune ne correspond au château.
C'est pour cette raison que c'est malheureusement impossible de colorer ce jeu :(
Mais Zelda est coloriable par exemple car rien ne change entre les salles.

Decamail
09/11/2007, 01h11
moi j'ai un gros probleme sur wario blast, pour une meme scene, le crc change constamment d'un reset de vba à l'autre. Ca rend la colorisation quasiment impossible, il n'y a pas un moyen de modifier vba de sorte à ce que pour chaque reset il vide constamment la memoire (ou quoi que ce soit qui soit responsable de cette inconstance de crc)
autre suggestion: inclure un raccourci clavier permettant de copier vers le presse papier la valeur du crc, il y a de nombreux cas où le crc est illisible (superposition avec un autre texte de l'emulateur, interferece avec la fenetre de visualisation de l'emulateur...) ou tout simplement les cas où reussir à copier le crc dans les temps est une course contre la montre.

zeytok
09/11/2007, 23h10
pour le probleme du crc qui change tout le temps, tu peux normalement modifier quel tiles servent à calculer le crc. donc si ça change tout le temps, c'est que tu l'as probablement mal defini...

si tu modifies ça, il faudrait redemarrer VBA (pas juste faire un reset).

D'ailleur, c'est quelque chose de très important quand on veut colorisé, il faut toujours prendre le temps d'observer comment change les tiles (celle qui correspondent vraiment à la scène, les animés, etc...) sinon, ca devient vite ingérable.