La Place des Développeurs MSXgl MSX Game Library
aoineko
Membre non connecté
Conseiller Municipal
Reprise du message précédent
Il n'y a pas de bonnes ou mauvaises adresses pour les tables en VRAM. On peut les mettre ou l'on veut en configurant le VDP, tant qu'on respecte certaines règles.Les différents BIOS que j'ai regardé n'utilisent pas tous les mêmes adresses de base.
On est toujours ignorant avant de savoir.
Merci pour ces éclaircissements
bravo Gfx, la suite vite
bravo Gfx, la suite vite
aoineko
Membre non connecté
Conseiller Municipal
Bon bah tout à l'air de fonctionner...
Voici le code :
J'ai converti directement ton image final avec CMSXimg car il repère automatiquement les tiles identiques (j'ai bien 19 tiles différents).
J'ai utilisé la commande suivante :
Du coup, je sais vraiment pas d'où vient ton problème.
Si tu me partages ton code, je pourrais essayer de debug pour trouver le soucis.
Voici le code :
Code C :
void main() { VDP_SetMode(VDP_MODE_SCREEN2); VDP_EnableVBlank(true); VDP_SetColor(0x11); VDP_FillScreen_GM2(0); VDP_LoadPattern_GM2(g_Test_Patterns, 19, 0); VDP_LoadColor_GM2(g_Test_Colors, 19, 0); VDP_WriteLayout_GM2(g_Test_Names, 0, 2, 32, 20); Print_SetTextFont(g_Font_Carwar, 0x20); Print_SetColor(COLOR_WHITE, COLOR_BLACK); Print_SetPosition(0, 0); Print_DrawText("WIZZL"); while(!Keyboard_IsKeyPressed(KEY_ESC)) { Halt(); } }
J'ai converti directement ton image final avec CMSXimg car il repère automatiquement les tiles identiques (j'ai bien 19 tiles différents).
J'ai utilisé la commande suivante :
Code BASH :
CMSXimg.exe testtileset.png -out testtileset.h -mode gm2 -name g_Test -pos 0 0 -size 256 160 -offset 0
Du coup, je sais vraiment pas d'où vient ton problème.
Si tu me partages ton code, je pourrais essayer de debug pour trouver le soucis.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
Oh... dans le bout de code que tu avais mis, je viens de voir une erreur :
Tu as inversé le compteur de tiles et l'offset.
Là, tu copies 0 tiles à vers le 18e emplacement de tile en VRAM... forcement, ça copie pas grand chose.
Code C :
//Patterns VDP_LoadPattern_GM2(tiles_Patterns, 0, 18); VDP_LoadColor_GM2(tiles_Colors, 0, 18);
Tu as inversé le compteur de tiles et l'offset.
Là, tu copies 0 tiles à vers le 18e emplacement de tile en VRAM... forcement, ça copie pas grand chose.
On est toujours ignorant avant de savoir.
Ah damned, c'est le dernier argument numTiles que tu m'avais mis en exemple qui m'a 'enduit' d'erreur
Trop bien... J'ai hâte de poursuivre maintenant.
Merci de prendre du temps avec les novices comme moi. Edité par Gfx Le 03/02/2022 à 09h28
Trop bien... J'ai hâte de poursuivre maintenant.
Merci de prendre du temps avec les novices comme moi. Edité par Gfx Le 03/02/2022 à 09h28
Il faut cultiver notre jardin.
aoineko
Membre non connecté
Conseiller Municipal
aoineko :
Code C :
VDP_LoadPattern_GM2(tiles_Patterns, 0, numTiles); VDP_LoadColor_GM2(tiles_Colors, 0, numTiles);
Effectivement, je m'étais planté.
Faut plus faire confiance aux headers qu'à moi :
Code C :
// Load patterns in all 3 screen sections void VDP_LoadPattern_GM2(const u8* src, u8 count, u8 offset); // Load colors in all 3 screen sections void VDP_LoadColor_GM2(const u8* src, u8 count, u8 offset);
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
aoineko :
Il n'y a pas de bonnes ou mauvaises adresses pour les tables en VRAM. On peut les mettre ou l'on veut en configurant le VDP, tant qu'on respecte certaines règles.
Les différents BIOS que j'ai regardé n'utilisent pas tous les mêmes adresses de base.
Les différents BIOS que j'ai regardé n'utilisent pas tous les mêmes adresses de base.
En mode screen2, la table des formes et des couleurs ne peuvent se trouver que en 0x000 ou 0x2000. (On peut les intervertir simplement)
ericb59
Membre non connecté
Conseiller Municipal
En mode screen2, on peut utiliser jusqu'à 768 tiles, réparties sur les 3 zones de l'écran.
Si dans le cas où seulement 256 tiles sont suffisantes pour le projet en cours, on peut faire en sorte de n'utiliser que les 256 premier tiles dans la table des formes,
et récupérer les 4096 octets restant de la VRAM pour stocker autre chose.
Il suffit de faire un VDPwrite(4,0)
(Instruction à adapter avec MSXgl)
On peut faire la même chose avec la table des couleurs avec un VDPwrite(3,0x9F)
et donc récupérer encore 4096 octets de ce coté là.
Si dans le cas où seulement 256 tiles sont suffisantes pour le projet en cours, on peut faire en sorte de n'utiliser que les 256 premier tiles dans la table des formes,
et récupérer les 4096 octets restant de la VRAM pour stocker autre chose.
Il suffit de faire un VDPwrite(4,0)
(Instruction à adapter avec MSXgl)
On peut faire la même chose avec la table des couleurs avec un VDPwrite(3,0x9F)
et donc récupérer encore 4096 octets de ce coté là.
aoineko
Membre non connecté
Conseiller Municipal
Le screen mode 1,5 (c'est comme ça qu'est appelé ce "mode" sur MRC) n'est pas standard et n'est pas supporté par certains VDP (même si c'est une minorité).
Perso, je conseillerai à Gfx de ne pas trop se préoccuper d'optimisation dans un premier temps.
Ensuite, on verra en fonction de ses besoins ce qui est le plus pertinent à optimiser.
S'il a vraiment besoin de plus de VRAM, le screen mode 1,5 pourrait être une option à envisager.
Oui, c'est pour ça que j'ai dis « tant qu'on respecte certaines règles ».
En fait, y a d'autres règles en fonction des modes : déjà faire attention que les tables ne se superposent pas , des "pas" d'adresse valide mais aussi des bits à mettre 1.
Voici le tableau récap que j'avais fait :
Et sinon @Gfx, je vais ajouter un module de collision de tiles et de physique à MSXgl.
Tu pourras l'utiliser, ou t'en inspirer.
Perso, je conseillerai à Gfx de ne pas trop se préoccuper d'optimisation dans un premier temps.
Ensuite, on verra en fonction de ses besoins ce qui est le plus pertinent à optimiser.
S'il a vraiment besoin de plus de VRAM, le screen mode 1,5 pourrait être une option à envisager.
ericb59 :
En mode screen2, la table des formes et des couleurs ne peuvent se trouver que en 0x000 ou 0x2000. (On peut les intervertir simplement)
Oui, c'est pour ça que j'ai dis « tant qu'on respecte certaines règles ».
En fait, y a d'autres règles en fonction des modes : déjà faire attention que les tables ne se superposent pas , des "pas" d'adresse valide mais aussi des bits à mettre 1.
Voici le tableau récap que j'avais fait :
Et sinon @Gfx, je vais ajouter un module de collision de tiles et de physique à MSXgl.
Tu pourras l'utiliser, ou t'en inspirer.
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
... oui oui... je disais ça juste en passant...
.... je retourne à mon coloriage ...
... Comme je ne peux pas utiliser ton super outils j'ai trouvé ça ... un outils on-line pour créer les tiles et les tiles's maps en screen2...
http://msx.sagaz.es/AutoTilerScreen2.php Edité par ericb59 Le 03/02/2022 à 20h08
.... je retourne à mon coloriage ...
... Comme je ne peux pas utiliser ton super outils j'ai trouvé ça ... un outils on-line pour créer les tiles et les tiles's maps en screen2...
http://msx.sagaz.es/AutoTilerScreen2.php Edité par ericb59 Le 03/02/2022 à 20h08
@aoineko oh mais plus rien ne t'arrête, c'est topissime ça !!
Je m'arrache les cheveux pour avoir des collisions sympa avec les animations qui vont biens...
j'ai d'ailleurs une question pour toi.
J'utilise ton Game_pawn et j'aimerais pouvoir utiliser deux tableaux de Game_sprites differents car pour mes animations de grimpette j'aimerais utiliser moins de layers (2 couleurs)
cf l'image des sprites ci-dessous.
Comment puis-je faire ?
Edité par Gfx Le 03/02/2022 à 21h30
Je m'arrache les cheveux pour avoir des collisions sympa avec les animations qui vont biens...
j'ai d'ailleurs une question pour toi.
J'utilise ton Game_pawn et j'aimerais pouvoir utiliser deux tableaux de Game_sprites differents car pour mes animations de grimpette j'aimerais utiliser moins de layers (2 couleurs)
cf l'image des sprites ci-dessous.
Comment puis-je faire ?
Edité par Gfx Le 03/02/2022 à 21h30
Il faut cultiver notre jardin.
aoineko
Membre non connecté
Conseiller Municipal
ericb59 :
... Comme je ne peux pas utiliser ton super outils j'ai trouvé ça ... un outils on-line pour créer les tiles et les tiles's maps en screen2...
http://msx.sagaz.es/AutoTilerScreen2.php
http://msx.sagaz.es/AutoTilerScreen2.php
Désolé, j'ai des trucs plus haut dans ma todo list, mais je n'oublie pas.
En tout cas, il a l'air très chouette ce programme.
Gfx :
J'utilise ton Game_pawn et j'aimerais pouvoir utiliser deux tableaux de Game_sprites differents car pour mes animations de grimpette j'aimerais utiliser moins de layers (2 couleurs)
Comment puis-je faire ?
Comment puis-je faire ?
Si c'est juste pour optimiser de la place dans les data, j'ai un doute que ça vaille le coup pour seulement 3 frames.
Utiliser la compression RLEp te fera gagner beaucoup plus de place.
Si c'est pour réduire le nombre de sprite affichés, c'est pertinent, mais j'ai tendance personnellement à garder le worst case (donc la version 3 sprites).
Si tu veux vraiment réduire le nombre de sprite juste pour l'échelle, il n'y pas solution clef en main dans MSXgl.
Ce que tu pourrais faire, c'est de créer 2 pawns et de switcher de l'un à l'autre en fonction que tu souhaites utiliser 2 ou 3 sprites.
Ca me semble un peu trop spécifique pour l'intégrer à MSXgl pour le moment, mais la solution pourrait être de définir quels sprites seront utilisés pour chaque Game_Frame, ou pour chaque Game_Action.
Ou sinon, pouvoir définir plusieurs Game_Sprite par Game_Pawn et choisir lequel on utilise par frame et/ou par action.
Si tu peux faire sans pour le moment, on verra quand tu seras plus avancé si tu en as vraiment besoin et on avisera.
On est toujours ignorant avant de savoir.
aoineko
Membre non connecté
Conseiller Municipal
J'ai presque fini : Game sample.
J'ai encore un peu de ménage à faire ; je finirai demain.
J'ai encore un peu de ménage à faire ; je finirai demain.
On est toujours ignorant avant de savoir.
ericb59
Membre non connecté
Conseiller Municipal
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie