Vous n'êtes pas identifié.
Le jeu que je vais présenté au concours de l'UCF contient énormement de données (sprites et maps surtout) et je suis donc obligé d'en stocker une bonne partie dans des fichiers basic... mais je n'y connais pas grand chose
Je pensais utiliser cette méthode :
tu ouvres le fichier 'FONT' avec les routines memzone de 2072
ensuite tu px faire un truc du genre
unsigned char far* ascii = (unsigned char far*)MK_FP(bf.b_segment, bf.b_inneroffset)
un caractère prend 8 octets donc pour accéder à la première ligne d'un caractère tu fais : ascii[lettre * 8]
sachant que le police fait 5 pixels de hauteur et 4 de largeur.
Ca résoudrais mon problème de faire comme ça ?
Ah oui... je sais pas trop quoi utiliser pour créer et modifier facilement les fichiers basic (ou les .RFI), afin de pouvoir editer mes maps rapidement par exemple.
Hors ligne
les routines memzones de 2072
c'est pô extremement difficile à utilisé, je l'utilise dans mon craceur (la version instable pas distribuée...)
Hors ligne
Le jeu que je vais présenté au concours de l'UCF contient énormement de données (sprites et maps surtout) et je suis donc obligé d'en stocker une bonne partie dans des fichiers basic... mais je n'y connais pas grand chose
![]()
Je pensais utiliser cette méthode :tu ouvres le fichier 'FONT' avec les routines memzone de 2072
ensuite tu px faire un truc du genre
unsigned char far* ascii = (unsigned char far*)MK_FP(bf.b_segment, bf.b_inneroffset)
un caractère prend 8 octets donc pour accéder à la première ligne d'un caractère tu fais : ascii[lettre * 8]
sachant que le police fait 5 pixels de hauteur et 4 de largeur.Ca résoudrais mon problème de faire comme ça ?
Ca c'est utiliser les memzones "à la barbare": tu sautes toutes les sécurités mises en place par 2072 pour éviter les erreurs (et la perte inévitable du contenu de la ram dans ce cas!!)... Apparemment c'est ce que fait dada, c'est aussi ce que je fais dans sonic, mais personnellement j'éviterais pour débuter... :?
Hors ligne
tu va sur le site de 2072, et tu télécharge sa lib, et tu lit son readme ! (tout ce dont tu as besoin est dedans)
Hors ligne
arf c aussi ce que je fais dans chess...utiliser la lib com un barbare
Hors ligne
Bon ben je vais faire ça... je peux mettre combien d'octets de fichier basic avant que ça bug carrément ?
plus qu'il n'en faut
Mais pour écrire ou lire dans une zone, il faut mieux utiliser ses fonctions read_mem_zone et write_mem_zone plutot que d'utiliser directement un pointeur far vers le contenu
Hors ligne
arf j'hésite à échanger DB-lib contre Drawlib, surtout que l'on peut utiliser un pointeur far vers une memzone (donc tous les sprites -> dans des fichiers basic) et puis que le codage risque d'être plus rapide avec Sprite Maker :P
Surtout que j'aurais surement pas mal de sprites de plus de 16*16...
Pour ce qui est de la vitesse on y perd vraiment beaucoup par rapport aux fonctions de DB-lib ?
Hors ligne
Lol doucement...
DB-lib est plus complet et permet beaucoup + de choses que Drawlib, qui ne contient en fait qu'une seule fonction. Drawlib c'est bien quand tu as besoin d'afficher des sprites de dimensions assez variables, avec un masque et en gérant le clipping, ca permet de rendre la prog plus confortable... Mais bien sûr le confort a un prix, tu perds un peu en performance si jamais tu n'exploites pas drawlib à fond...
Je n'ai pas fait de tests de vitesse mais il ne me semble pas que les pertes sont énormes
Au passage, la version 1.4 plus complète devrait arriver bientôt (j'y travaille dessus maintenant): les sprites codés pour la 1.3 ne seront plus valables, mais ca vaudra le coup normalement
Hors ligne
j'espere que tu fera un convertisseur sprite de la version 1.3 -> sprite de la version 1.4, je pense pas que je vais attendre la nouvelle version pour m'y mettre
Hors ligne
j'espere que tu fera un convertisseur sprite de la version 1.3 -> sprite de la version 1.4, je pense pas que je vais attendre la nouvelle version pour m'y mettre
ben c'est pas une mauvaise idée, sauf que lire un sprite sous forme de texte "unsigned char bidule = { .. , .. , ...... };" c'est pas marrant :? (mais pas infaisable, d'accord)
Mais bon y'a moyen de devoir juste mettre sprite maker en mode 1.4, puis de regénérer les codes et de copier-coller...
A la limite tu peux meme t'arranger pour que le prog réécrive ton ficher source qui contient le code des sprites (a condition qu'il n'y ait que ca dedans bien sur)
Hors ligne
Ce serait pas mal de pouvoir générer directement le code d'un tableau de sprites.
J'ai comparé la vitesse et c'est quand même un petit peu plus lent avec une map de sprites 16*16 avec clipping (mais pas de masque dans la version avec DB-lib).
De toute façon je peux faire une partie de mon affichage avec DB-lib et l'autre avec Drawlib.
P.S. : On a le droit de parler de notre prog avant la fin du concours ?
Hors ligne
Le masque apporte une grosse différence normalement (vu que ca fait ~66% de sollicitation de la mémoire en plus :? )
Ce serait pas mal de pouvoir générer directement le code d'un tableau de sprites.
X-th me l'avait déjà suggéré, en effet... je vais faire ça
Hors ligne
Je vais faire ça :
- les sprites de 16*16 sans masque incluses dans le prog, affichées avec les d16clip de DB-lib.
- les sprites de taille variable (8*8 à 48*4 avec masque dans des fichiers basic (pour simplifier j'éviterai de mettre des sprites de différentes tailles dans un même fichier), affichées avec drawlib.
- les maps dans des fichiers basic, que je recupère avec un pointeur far.
Ca vous parait bien ?
Hors ligne
Oui, de toute facon si tes sprites 16*16 doivent servir pour tes maps, je t'aurais dit tout de suite de ne surtout pas utiliser drawlib pour ca
Hors ligne
lire dans une memzone avec un pointeur far ça n'est pas grave, tu risque juste de lire des conneries si tu te plante mais écrire directement dedans c'est vraiment dangereux, la fonction write_mem_zone est BIEN PLUS RAPIDE que d'utiliser les pointeur far alors vous n'avez aucune raison de ne pas l'utiliser !
Hors ligne
et puis c pas tres compliqué de modifier d16clip pour qu'il gere les far ; ya que quatres lignes a modifier :
// Affiche un sprite 16*16 pour mode D3 ou DB // avec OR avec clipping, au buffer voulu. // Fonction de DB-lib.h par Swifter - SWF Prod 2004 void d16clip_or(int x,int y,void far* spr,unsigned int segm) { asm{ push ds mov cx,x // On met x dans CX. mov bx,cx // Et on le met aussi dans BX. lds si,spr // On place l'adresse du sprite dans SI. mov di,0x3FE // On place l'offset vidéo sur le dernier mot, en haut a gauche de l'ecran. ......... // a la fin pop ds
Hors ligne
lire dans une memzone avec un pointeur far ça n'est pas grave, tu risque juste de lire des conneries si tu te plante mais écrire directement dedans c'est vraiment dangereux, la fonction write_mem_zone est BIEN PLUS RAPIDE que d'utiliser les pointeur far alors vous n'avez aucune raison de ne pas l'utiliser !
bien plus rapide qu'un rep movsw?
Hors ligne
c'est ce que ça fait...
Hors ligne
Je sais bien, et la fonction que j'utilise pour écrire dans les zones utilise également le rep movsw...
Hors ligne
je veux bien utiliser les fonctions read_mem_zone et write_mem_zone mais comment faire pour afficher un sprite par l'intermédiaire de ces fonctions, sans avoir à faire des variables "temporaires" dans lesquelles on stocke un sprite puis on l'affiche ?
Hors ligne
pour l'écriture, il vaut mieux utiliser write_mem_zone et repérer les offsets des sprites que tu écris dans la zone.
drawsprite() s'occupe de la lecture, il faut juste que tu arrives à obtenir un pointeur far vers le début de la zone (voir post plus haut), auquel tu rajoutes l'offset du sprite que tu veux afficher
Au fait cette méthode est efficace seulement quand les sprites ne sont pas définis dans l'exe bien sûr, tu dois les placer en fichier externe et les charger dans une zone au début du prog (que tu détruis convenablement à la fin du prog hein :twisted: )
Hors ligne
la map est maintenant dans un fichier basic et ça fonctionne impec
il me reste plus qu'à mettre les sprites et les autres données dans des fichiers basic, et de tester la fonction d16clip_or modifiée
Hors ligne