Inspector Widget ... le mode pause du moteur de jeu de GEDS qui permet de voir à travers la Matrice. Repérer les zones de collision, mais aussi visualiser le terrain autour des personnages tel que les contrôleur le perçoivent. Sauf que le code qui faisait l'affichage du terrain date de l'époque Apple Assault et qu'il est plus ou moins inutile avec le nouveau système de map physique.
Le code qu'il aurait fallu que je retrouve il y a un moment était caché dans InspectorWidget::clearmain().
for (int ty=sy; ty<=ey; ty++)
for (int tx=sx; tx<=ex; tx++) {
unsigned f=gob[0]->world->getflags(tx,ty);
unsigned c=BCHECK; // pattern for the "outer ring" of the zoomed tile
if (f&F_BLOCKING) c=BON; // plain light ring = solid block
if (f&F_PLAYERTHRU) c=BOFF; // dark ring = air / water / etc.
if (f&0x10000) c=BCHECK; // checkered ring = special block
if (f&F_SLOPE) c=97; // striked through = slopes
char sq[16];
memset(sq,c,16);
if ((f&(F_FLOOR|F_SLOPE))==F_FLOOR) memset(sq,BON,4);
sq[5]=80+((f>>12)&0xf); // 4-digits code in the inner area
sq[6]=80+((f>>8)&0xf); // encodes the F_* flags for cando() calls.
sq[9]=80+((f>>4)&0xf);
sq[10]=80+(f&0xf);
u16* v = vram+MAP+(ty-sy)*128+(tx-sx)*4;
for (int i=0;i<16;i++) {
*v++=sq[i];
if ((i&3)==3) v+=28;
}
}Pour ceux qui ne parlent pas le C couramment, le listing ci-dessus raconte que chaque pavé de la map va être représenté par un code à 4 caractères entouré d'une bordure dont le pattern est variable.
- bordure solide pour ce qui ne laisse pas passer le personnage
- bordure en damier pour les blocs spéciaux
- bordure en hachure pour les pentes.
Le code au centre du carré, ce sont les propriétés utilisée par la fameuse fonction cando(). Et il faut bien admettre que maintenant qu'il y a plusieurs types de pentes différents, plus de blocs spéciaux et des blocs aux propriétés particulières, juste les flags pour cando(), c'est devenu à la limite de l'inutile. Parce que la plupart des blocs spéciaux ont les mêmes propriétés et que celles des pentes sont prédéfinies.
Mais heureusemement, j'ai trouvé l'occasion d'améliorer ça.
- un code à 2 chiffres, c'est un tile à encodage direct. on voit littéralement le byte de la map physique et chacun de ses bits nous renseigne pour une propriété. 44, c'est de l'air.
- un code à 2 chiffres sous une petite ligne à damier, c'est un bloc spécial. Ici aussi, la valeur et celles du byte de la map. Les valeurs ff, fe et fd servent pour les fameuses "flèches jaunes" de l'éditeur.
- les pentes sont toujours identifiées par leur contour hachuré. Le code à 4 chiffres donne les hauteurs des pixels au centre du tile. 3456 ou 6543 pour des pentes à 45°. 2233 et 6677 pour des pentes plus faibles en "montée" de droite à gauche, etc.
- Enfin, pour les autres blocs, on reste sur un code à 4 chiffres qui contient les flags. à l'ancienne.
















Vote for your favourite post
