MSX Village forum

La Place des Développeurs MSXgl MSX Game Library

aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 31/01/2022 à 16h33

Reprise du message précédent

Tout à l'air de fonctionner avec le template de base pourtant.

Je te conseille :
- Récupère une version "vanilla" (version d'origine sans aucune modif) du répertoire /template/ .
- Lance /template/build.bat pour vérifier que ça compile et que ça génère bien la ROM dans /template/emul/rom/template.rom .
- Duplique le répertoire et donne lui un nom (dans mon ex. : gfxgame).
- Lance /gfxgame/build.bat et vérifie que tout fonctionne toujours bien (y a pas de raison, mais c'est bien de faire étape par étape quand on sait pas d'où vient le problème)
- Renomme /gfxgame/template.c en ce que tu veux ( /gfxgame/gfxgame.c par ex.) et modifie /gfxgame/build.bat pour mettre SET ProjName=gfxgame
- Relance le build et vérifie que tu as bien /gfxgame/emul/rom/gfxgame.rom
- Ensuite, ouvre /gfxgame/gfxgame.c et copie-colle tout le contenu de ton programme
- Assure-toi bien que toutes les données ( .h ) sont à l'endroit on vont les chercher les #include
- Relance le build

Si jamais ça ne fonctionnait toujours pas, copie-colle ici le résultat du build (tu peux faire un " build.bat > log.txt ") pour que toutes les infos affichées par le Build tool se retrouve dans un fichier text.


On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 31/01/2022 à 19h07
@aoineko,
j'ai bien fait comme tu m'as dit et l'exemple fonctionne très bien.
Mais lorsque je copie/colle le code du sample vers le projet et que je build, la compilation marche bien mais j'ai une erreur au moment du make:

erreur :

?ASlink-Warning-Undefined Global '_GamePawn_SetPosition' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_Game_Exit' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_Game_MainLoop' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_GamePawn_SetAction' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_GamePawn_Draw' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_GamePawn_Initialize' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_Game_SetState' referenced by module 'wizzl'

?ASlink-Warning-Undefined Global '_GamePawn_Update' referenced by module 'wizzl'


J'ai bien vérifié que tous les .h soient bien trouvés (mon projet s'appelle wizzl :) )

Merci pour ton aide...
Je me sens un peu nul Edité par Gfx Le 31/01/2022 à 19h08


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 31/01/2022 à 20h04
Ah, c'est la liste des modules utilisés qu'il faut mettre à jour.
Tu utilises des fonctions des modules Game et Game_Pawn mais ils ne sont pas dans la liste des modules à ajouter à ton programme.
Il faut changer ta liste dans le build.bat de ton projet.
Ca dépend des modules que tu veux utiliser, mais avec ceux-là tu devrais avoir de quoi faire :
Code BASH :
set LibModules=system,bios,vdp,print,input,memory,math,draw,game,game_pawn


On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 31/01/2022 à 21h33
@aoineko ça marche, merci beaucoup !!

J'aimerais faire un jeu à la maze of galious avec ce décor en Mode 2.
Comment est-ce que tu ajoutes et récupères un pattern dans la table de patterns avec ta lib ?

Edité par Gfx Le 31/01/2022 à 21h37


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 31/01/2022 à 22h42
Voici comment je ferais :
- Tu exportes ton image de tiles avec CMSXimg en utilisant l'option -mode gm2 (tu vas avoir un tableau avec les tiles et leurs couleurs).
- Tu crées un tableau qui représente ton level de jeu, du genre : const u8 Level_01[32*24] = { 8, 0, 1, 0, ... }; .
- Dans le code d'initialisation, tu charges tes tiles avec :
Code C :
VDP_LoadPattern_GM2(tiles_Patterns, 0, numTiles);
VDP_LoadColor_GM2(tiles_Colors, 0, numTiles);

- Puis, tu as juste besoin de loader ton level dans la table des layouts :
Code C :
VDP_WriteVRAM_16K(Level_01, g_ScreenLayoutLow, 32*24);


Et voilà... enfin, à quelques détails près. ^^

EDIT: Tu peux exporter séparément les tiles bloquants et ceux qui ne le sont pas et les charger à différent offset dans la table de patterns (et de couleurs) :
Code C :
VDP_LoadPattern_GM2(tilesNoBlock_Patterns, 0, numNoBlock);
VDP_LoadPattern_GM2(tilesBlock_Patterns, 128, numBlock);


On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 01/02/2022 à 00h50
Merci @aineko, pour l'instant le contenu de ma table de pattern ressemble à un tableau d'art abstrait...
j'initialise le screen mode 2 dans le main avec Game_MainLoop(VDP_MODE_SCREEN2); Quand je fais un VDP_LoadPattern_GM2, le dernier argument est juste le nombre de tiles à charger ?
Je continuerai demain j'ai les yeux qui piquent :)



Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 01/02/2022 à 20h33
Gfx :
Quand je fais un VDP_LoadPattern_GM2, le dernier argument est juste le nombre de tiles à charger ?


Toutafé


On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 01/02/2022 à 22h06
j'obtiens ça :(




Code C :
bool State_Initialize()
{
    VDP_EnableDisplay(false);
 
    VDP_SetColor(0);
 
    //Patterns
    VDP_LoadPattern_GM2(tiles_Patterns, 0,  18);
    VDP_LoadColor_GM2(tiles_Colors, 0, 18);
    VDP_WriteVRAM_16K(level_01, g_ScreenLayoutLow, 32*20);
 
    //Sprites
    VDP_SetSpriteFlag(VDP_SPRITE_SIZE_16);
    VDP_LoadSpritePattern(g_DataSprtLayer, 0, 8*2*3*4);   
    VDP_SetSpriteSM1(3, 0, 208, 0, 0); // hide
    // Init player pawn
    GamePawn_Initialize(&g_PlayerPawn, g_SpriteLayers, numberof(g_SpriteLayers), g_AnimActions);
    GamePawn_SetPosition(&g_PlayerPawn, 16, GROUND);
    VDP_EnableDisplay(true);
    Game_SetState(State_Game);
    return false; // Frame finished
}



La tête des patterns:
Code C :
// Patterns Table
const unsigned char tiles_Patterns[] =
{
// Sprite[0] (offset:640)
    0x50, /* .#.#.... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0x50, /* .#.#.... */
    0x05, /* .....#.# */
    0x00, /* ........ */
    0x00, /* ........ */
    0x03, /* ......## */
// Sprite[1] (offset:648)
    0x00, /* ........ */
    0x00, /* ........ */
    0x44, /* .#...#.. */
    0x52, /* .#.#..#. */
    0x41, /* .#.....# */
    0x6C, /* .##.##.. */
    0x6F, /* .##.#### */
    0x38, /* ..###... */
...
Et la table de couleurs :

Code C :
// Colors Table
const unsigned char tiles_Colors[] =
{
// Sprite[0] (offset:792)
    0x17, 0x14, 0x14, 0x14, 0x17, 0x44, 0x44, 0x14,
// Sprite[1] (offset:800)
    0x11, 0x11, 0x41, 0x14, 0x41, 0x41, 0x41, 0x14,
...



La première des 20 lignes du level:
Code C :
const unsigned char level_01[] =
{
    0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x01, 0x01, 0x00, 0x00,
...
Edité par Gfx Le 01/02/2022 à 22h19


Il faut cultiver notre jardin.
   
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 01/02/2022 à 22h10
Au fait ton CMSXimg est génial :)


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 01/02/2022 à 23h05
Est-ce que les patterns de ta table tiles_Patterns correspondent à ton image d'origine ?
Sinon, envoie-moi ton image et les paramètres que tu utilises pour exporter.

Ce qui est bizarre, c'est que tu n'as pas la même chose dans chacune des 3 pages du screen mode 2 alors que VDP_LoadPattern_GM2 copie les mêmes patterns dans ces 3 pages.
Essaye de forcer les adresses des tables en VRAM au début de ton programme avec par ex. :
Code C :
VDP_SetLayoutTable(0x3800);
VDP_SetColorTable(0x2000);
VDP_SetPatternTable(0x0000);
VDP_SetSpritePatternTable(0x1800);
VDP_SetSpriteAttributeTable(0x3E00);




On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 01/02/2022 à 23h28
Oui ça correspond parfaitement.
Voici le level :

Et le tiles set:


j'ai utilisé cette ligne de commande:
Code :
.\CMSXimg.exe testtileset.png -out ..\..\..\projects\wizzl\data\tileset.h -name tiles -mode gm2 -pal msx1 -size 256 160


edit: j'ai essayé avec le code pour forcer mais ça ne change rien... Edité par Gfx Le 01/02/2022 à 23h34


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 01/02/2022 à 23h58
Déjà, c'est très joli. :)

La size ne corresponds non ?
Ca ne devrait pas être "-pos 152 8" ?

Mais bon, si les patterns semblent bons dans le .h, tu devrais les voir dans la VRAM via MEISI.

Je pense pas que ça vienne de là, mais au cas ou, dans Final Smash, j'ai aussi les paramètres "-pos 0 0" et "-offset 0".

Tu peux aussi essayer d'écrire une valeur de test dans la table des patterns de la VRAM pour vérifier que le mode est bien configuré.
Code C :
VDP_FillVRAM(0xAA, g_ScreenPatternLow, 0, 32*8); // Cela devrait créer 32 pattern rayés verticalement dans la 1re page en VRAM.

Tu peux aussi essayer de modifier le contenu des tables de couleur à l'adresse VRAM g_ScreenColorLow et la table du layout à g_ScreenLayoutLow pour vérifier.
Par ex. :
Code C :
VDP_FillVRAM(0x00, g_ScreenLayoutLow, 0, 32*24); // Cela devrait remplir l'écran avec le pattern 0 (de chacune des 3 pages).


On est toujours ignorant avant de savoir.
Github    
Gfx Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 22/02/2021 à 22h22

Messages: 353

Le 02/02/2022 à 00h21
Voici ce que j'obtiens, les patterns ne sont pas dupliqués 3 fois c'est bizarre...






Edité par Gfx Le 02/02/2022 à 00h24


Il faut cultiver notre jardin.
   
aoineko Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 02/02/2022 à 07h34
Dans le screen mode 2, tu as 3 pages de 256 patterns, une pour chaque tiers de l'écran (3 bandes de 32 x 8 tiles).
La première se trouve en VRAM à l'adresse g_ScreenPatternLow, la suivante à g_ScreenPatternLow + 256 et la dernière à g_ScreenPatternLow + 512.
Les fonctions VDP_Xxxxx_GM2 s'occupe justement de dupliquer les données que tu envois dans ces 3 pages.
Avec les infos que j'ai, je ne comprends pas ton problème ; Je testerai avec ton image ce soir.


On est toujours ignorant avant de savoir.
Github    
Ricco59 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 02/01/2021 à 11h22

Messages: 246

Le 02/02/2022 à 18h23
comme le dit Aoineko : c'est bô

Pourquoi la Name Table est à $3800 ??

screen2
NAMETABLE = $1800 non ?
PATTERNTABLE = $0000
.... Edité par Ricco59 Le 02/02/2022 à 18h31


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/01/2011 à 21h17

Messages: 2184

Le 02/02/2022 à 19h17
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    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie