Voir la version complète : [GBA][Aide] Grandes cartes avec HAM et HEL
Même avec 1942, je n'avais pas eu trop de problèmes pour gérer de grandes cartes (240x3072). D'ailleurs, la doc de hel le précise bien "Map-System supports (in theory) unlimited large maps".
Cependant, depuis que j'ai introduit une carte de 3584x208, j'ai un bel écran de plantage comme quoi la mémoire BG est saturées. La grande carte ne passe que si je vire un des deux BG.
Est-ce que vous, utilisateurs de HAM/HEL, vous déclarez vos cartes ainsi ? Sinon avez-vous une idée de la manière de contourner le problème (chargement des tiles en dynamique) ?
Voila ce que c'est que de bosser avec des librairies >_< ...
Merci d'avance :-'
extern const unsigned char map_alpha_Tiles[9792];
extern const unsigned short map_alpha_Map[156];
extern const unsigned short map_level01a_Map[11648];
extern const unsigned char map_level01a_Tiles[41600];
extern const unsigned short map_level01b_Map[5824];
extern const unsigned char map_level01b_Tiles[3456];
TMapScrollInfo g_MapInfo0;
TMapScrollInfo g_MapInfo1;
TMapScrollInfo g_MapInfo2;
ham_bg[0].ti = ham_InitTileSet((void*)&map_alpha_Tiles,SIZEOF_16BIT(map_alpha_Tiles),1,1) ;
g_MapInfo0= hel_MapInit(0,39,4,0,(void*)map_alpha_Map);
ham_InitBg(0,1,1,0);
ham_bg[1].ti = ham_InitTileSet((void*)&map_level01b_Tiles,SIZEOF_16BIT(map_level01b_Tiles ),1,1);
g_MapInfo1 = hel_MapInit(1,208,26,0,(void*)map_level01b_Map);
ham_InitBg(1,1,0,0);
ham_bg[2].ti = ham_InitTileSet((void*)&map_level01a_Tiles,SIZEOF_16BIT(map_level01a_Tiles ),1,1);
g_MapInfo2 = hel_MapInit(2,448,26,0,(void*)map_level01a_Map);
ham_InitBg(2,1,1,0);
Tu as essayé de la mettre en 240 de large mais avec des tiles vides pour voir ?
Dr.Vince
30/03/2007, 01h26
bah je voudrais pas dire de conneries Arcadia mais à l'époque j'avais commencé à coder un jeu de plateforme avec des grandes map
et si c'est ce que je pense, en fait ton nombre de tiles est limité mais la taille de ta map elle est illimitée
en tout cas j'ai les bouts de codes qui vont bien si ça t'intéresse
Tout a fait Dr Vince, j'avais pas fait le calcul sur la taille des tilesets, je pensais qu'il voulait dire qu'il utilisait le meme (alors que pas du tout a priori).
Rien qu'un des deux tableaux de tiles dépasse les 32K alloués au tiles ;)
Non, c'est pas un problème de taille, l'actuelle version de mon mario tourne avec 2 maps de 8192x320
(par contre je ne déclare pas en extern les tiles)
Surement un problème de poids de tiles comme le dit magicwp & vince...
Ah ouais, c'est cette histoire de tiles y'a pas à se tortiller :cry: ...
Merci à vous tous et bien vu, j'y pensais plus >_<
Je me souviens maintenant que sur une carte de 1942, j'avais du tricher dans les décors, en dégageant des tiles afin de tomber sur un nombre ne faisant pas planter ham.
Va falloir que j'étudie un système pour mettre en mémoire les tiles au fur et à mesure de l'avancée du perso alors ? C'est ce qu'on appelle si je ne m'abuse le chargement dynamique. Mais je ne vois pas trop comment procéder :unsure:
Je peux aussi couper la carte en 2 et faire en sorte aue les deux morceaux chevauchent à un endroit (zone commune de 240 pixels de large), et faire un transfert à un moment donné, en intervertissant les deux maps, mais j'ai bien peur d'avoir une sorte de glish au moment du tranfert de cartes.
Ah ce que je n'aime pas me battre avec les contraintes techniques, surtout à mon niveau, je veux parler de mes connaissances en hardware GBA :-' ...
déjà en testant ta rom, j'ai constaté que tes tiles étaient en mode 256 couleurs, passe tout ca en mode 16x16 couleurs, et tu vas gagner 50% de place.
Heu, alors là, je me demande si je ne vais pas poser la question la plus con du forum, mais c'est quoi la différence entre 256 et 16x16 ... :-'
Parce au'actuellement, dans ce jeu, qui comporte un total de je ne sais plus trop de couleurs (environ 160 couleurs), j'ai créé une palette unique pour les sprites et les tiles. C'est nue solution de fénéant, mais ça m'arrangeait bien lors du rip et de l'incorporation de tout nouvel élément graphique ^^.
Dois-je donc envisager, en fonction de la map, créer une palette plus restreintes ?
Merci de ton aide, et en tout cas tu me mets sur une bonne piste en m'orientant vers la solution logique de diminuer le nombre de couleurs :)
Dr.Vince
30/03/2007, 20h01
bah soit tu utilises une palette de 256 soit 16 palettes de 16 couleurs, car bien souvent un niveau n'utilise pas plus de 16 couleurs
l'avantage est donc que tu gagne de la place en mémoire, à noter également que le numéro de palette utilisé est stockée sur le tile
Heu, alors là, je me demande si je ne vais pas poser la question la plus con du forum, mais c'est quoi la différence entre 256 et 16x16 ... :-'
Parce au'actuellement, dans ce jeu, qui comporte un total de je ne sais plus trop de couleurs (environ 160 couleurs), j'ai créé une palette unique pour les sprites et les tiles. C'est nue solution de fénéant, mais ça m'arrangeait bien lors du rip et de l'incorporation de tout nouvel élément graphique ^^.
Dois-je donc envisager, en fonction de la map, créer une palette plus restreintes ?
Merci de ton aide, et en tout cas tu me mets sur une bonne piste en m'orientant vers la solution logique de diminuer le nombre de couleurs :)
Cela va t'obliger à réorganiser tes tiles. par exemple utiliser 16 couleurs pour la police (en fait 15, puisque la couleur index 0 est la couleur transparente).
En mode 16 couleurs la palette de 256 couleurs est divisées en 16 palettes de 16 couleurs (l'index 0 de "chaque" palette de 16 couleurs est transparent attention). Dans ce mode là dans la map est stocké à la fois le numéro du bloc ainsi que l'index de la palette à utiliser.
Ainsi tu peux utiliser une palette de 16 couleurs pour la police, 1 palette de 16 couleurs pour les tiles qui constient le sol, 1 palette de 16 couleurs pour les tombes, etc.
Gros avantage dans ce mode là, tu peux indexer deux fois plus de tiles et surtout une tile prend en mémoire 32 octets contre 64 octets en mode 256 couleurs : 8x8 pixels / 2 (car un pixel est stocké sur un demi octet, car l'index maximum n'est plus 255 -8bits- mais 15 -4bits-)
J'ai essayé de rester le plus basique possible, mais il faut quand même un explication technique minimum.
Je pense que tes explications m'ont pas mal éclairées, du moins elles confirment ce que je pensais. Il ne reste plus qu'à mettre en pratique, mais en tout cas l'idée me séduit un max !!!
Donc si je te suis bien, j'ai la possibilité de garder ma palette de 256 couleurs, qui pour le moment est commune à tous mes BG et sprites, et de rajouter des palettes de 16 couleurs pour certains BG, dont les couleurs seraient en quelque sorte un échantillion de la palette 256 ?
Ah en tout cas l'idée de gagner 2x plus de place me séduit, en ce qui me concerne, c'est largement siffusant !
Merci, merci, merci !!!!!! :) :) :)
Moi j'utilise pour mes map (mode 0) une palette de 256 couleurs.
Par contre chaque Sprite à sa Palette :
- Palette 0 pour Banjo
- Palette 1 pour l'affichage des notes
- Palette 2 pour les Jiggy et notes
- Palette 3 et 4 pour les ennemis
- Palette 10 11 12 13 et 14 pour les Jinjos
- Palette 15 pour les Token
Après c'est sur que c'est plus facile de gérer 16 palettes mais c'est vrai que j'ai quelques couleurs en doublons... Alors qu'en 256 tu n'a pas de doublons mais il faut bien savoir ou est quelle couleur...
Petite précision, il y a une palette 256 couleurs pour les décors (et une pour les sprites bien sur).
Cette palette peut-être utilisée simultanément en 16x16 couleurs par certaines map et en 256 couleurs par d'autres
Je pense que j'en sais assez pour maintenant orienter mes recherches vers une solution salutoire. Il est clairement établi que je négligeais l'importance du nombre de couleurs dans mes palettes. Tu m'as donné pas mal d'indices magicwp et je devrais maintenant être capable d'arriver à adapter mes maps en suivant tes conseils. Je te remercie infiniement :)
En mode 16 couleurs la palette de 256 couleurs est divisées en 16 palettes de 16 couleurs (l'index 0 de "chaque" palette de 16 couleurs est transparent attention). Dans ce mode là dans la map est stocké à la fois le numéro du bloc ainsi que l'index de la palette à utiliser.
Ainsi tu peux utiliser une palette de 16 couleurs pour la police, 1 palette de 16 couleurs pour les tiles qui constient le sol, 1 palette de 16 couleurs pour les tombes, etc.
Concrètement, comment on fait :huh: ?
Comment peut-on séparer les elements du decors pour leur affecter une palette particulière :unsure: ?
Aaaah, je suis un boulet :-' ...
Concrètement, comment on fait :huh: ?
Comment peut-on séparer les elements du decors pour leur affecter une palette particulière :unsure: ?
Aaaah, je suis un boulet :-' ...
Contact moi par MSN, on s'organise un RDV pour que je t'explique ca de vive voix, ca sera plus simple ;)
Contact moi par MSN, on s'organise un RDV pour que je t'explique ca de vive voix, ca sera plus simple ;)
OK, je réponds à ton mp, merci magicwp :) !
OK, je réponds à ton mp, merci magicwp :) !
Aucun souci, quand tu veux ;)
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org