Méthode de compression de niveaux
Posté le 04/11/2013 17:51
Salut à tous, déjà je savais pas où mettre le sujet alors je l'ai mis ici.
J'ai pensé à une méthode de compression de niveaux qui m'a paru intéressante :
en gros, on a une matrice avec un peu n'importe où des cases avec un chiffre entre 0 et 3.
On va compresser uniquement les chiffres 1,2 et 3.
Pour cela, on va enregistrer un nombre dans une variable, qui va pouvoir contenir chaque case 1, une autre variable pour chaque case 2 et une autre pour chaque case 3.
On va utiliser pour cela un peu de binaire : en gros, on va enregistrer une puissance de 2 à chaque case.
Par exemple la première case (1,1), si elle est égale à 1 on ajoute à la variable 1 et si c'est autre chose on ajoute pas. La case d'après, si elle est égale à 1 on ajoute 2, la case suivante 4, 8, 16, 32, etc...
Ensuite, on fait pareil mais pour les autres chiffres.
à la fin, on obtient un niveau qui tient en trois variables
exemple :
3244487->A
12447567->B
648->C
Pour la décompression, il suffit juste de parcourir en sens inverse (la puissance de 2 doit diminuer), si A est supérieur ou égal à la puissance de 2 actuellement vérifiée, alors il met 1 à la case correspondante dans la matrice.
Après c'est juste une idée qui est venue comme ça, et vu que j'ai rien sous la main pour tester...
J'ai jugé intéressant qu'on y réfléchisse tous.
Citer : Posté le 04/11/2013 18:07 | #
J'avais testé ça pour mon RPG, sauf que ça n'est plus vraiment valable dans le cas où on a de grosses maps avec 9 (ou plus) "sprites" ...
J'ai finalement adopté un système proche du RLE - un peu adapté évidemment !
Citer : Posté le 04/11/2013 18:56 | #
Oui le RLE c'est pratique en fin de compte (je fais un TIPE dessus! ).
Oui finalement ton système ça revient à stocker en binaire puis puis transcrire en décimal. C'est simple et efficace, tant que la taille de données n'est pas trop grande (13 chiffres max par variable! Et pas 15 comme on le croit, tests à l'appui!).
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 04/11/2013 18:59 | #
Oui finalement ton système ça revient à stocker en binaire puis puis transcrire en décimal. C'est simple et efficace, tant que la taille de données n'est pas trop grande (13 chiffres max par variable! Et pas 15 comme on le croit, tests à l'appui!).
en fait, 30 par variable
13 pour la partie "classique", 2 pour la mantisse (le E), et le double pour la partie imaginaire
et comme c'est codé en BCD, les chiffres des variables sont en décimal, et ne s’arrête pas brutalement a un nombre binaire (comme en C, ou les variables peuvent se stopper a 255 )
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 04/11/2013 19:05 | #
Ah le E je ne savais pas! Mais la partie imaginaire ça fait longtemps que je m'en sers!
(cf la compression de ouf de Timeless Remix 8) )
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 04/11/2013 19:07 | #
C'est un peu le principe des sprites en C monochrome
Citer : Posté le 04/11/2013 19:07 | #
D'ailleurs, pour avoir la mantisse, il faut faire log(A), mais par contre c'est pas facile à utiliser, car pour utiliser une valeur de la variable normale, il faut faire un long décompressage.
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 04/11/2013 19:10 | #
Bah oui, mais pas si long que ça, pour TR j'avais été étonné de la rapidité du truc.
Bien sûr c'est pas utilisable en plein moteur de jeu, seulement pour stocker des niveaux ou des trucs comme ça...
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf
Citer : Posté le 04/11/2013 19:11 | #
Quand je dis long, c'est long au niveau de la taille, pas au niveau rapidité.
Car c'est bien d’économiser 4 octets par niveaux, mais si c'est pour en perdre 400 à faire une fonction de décompression
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 04/11/2013 19:13 | #
Oui, j'ai calculé tout ça!
En fait j'ai pas gagné 4 octets, j'ai presque divisé la taille de la campagne par 10!!!
(De 14000 et quelques à 1600 octets!)
Timeless Remix
Super Run & Jump
Timeless
Les tests vidéo de Marmotti
Timeless Remix Airwolf