MSX Village forum

La Place des Développeurs MSXgl MSX Game Library

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 02/02/2022 à 19h17

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.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 02/02/2022 à 21h08
@Ricco @aoineko Merci, j'ai un château entier de prêt ;)


Il faut cultiver notre jardin.
   
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 248

Le 02/02/2022 à 21h31
Merci pour ces éclaircissements ;)
bravo Gfx, la suite vite :)


Tous mes travaux sont centralisés sur mon piti blog : https://ricco59.blogspot.com/
E-mail    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 02/02/2022 à 23h44
Bon bah tout à l'air de fonctionner... :hum


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 02/02/2022 à 23h49
Oh... dans le bout de code que tu avais mis, je viens de voir une erreur :
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.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 03/02/2022 à 00h33
Ah damned, c'est le dernier argument numTiles que tu m'avais mis en exemple qui m'a 'enduit' d'erreur :fou
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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 03/02/2022 à 00h38
aoineko :
Code C :
VDP_LoadPattern_GM2(tiles_Patterns, 0, numTiles);
VDP_LoadColor_GM2(tiles_Colors, 0, numTiles);


Effectivement, je m'étais planté. :oups

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.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 03/02/2022 à 09h22
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.


En mode screen2, la table des formes et des couleurs ne peuvent se trouver que en 0x000 ou 0x2000. (On peut les intervertir simplement)


banniere-ericb59e
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 03/02/2022 à 09h50
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à.


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 03/02/2022 à 19h45
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.

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.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 03/02/2022 à 20h05
... 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


banniere-ericb59e
Site web    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 03/02/2022 à 21h15
@aoineko oh mais plus rien ne t'arrête, c'est topissime ça !! :top
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

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 03/02/2022 à 21h41
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


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 ?


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.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 355

Le 03/02/2022 à 22h20
ça marche ! merci pour le conseil, je vais faire sans pour commencer


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2695

Le 04/02/2022 à 01h10
J'ai presque fini : Game sample.
J'ai encore un peu de ménage à faire ; je finirai demain.


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 04/02/2022 à 07h19
aoineko :


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.


Je risque pas t'attendre si longtemps en fait...
vu qu'apparemment t'es une machine à coder :| ;) Edité par ericb59 Le 04/02/2022 à 07h20


banniere-ericb59e
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie