Vous n'êtes pas identifié.
Salut à tous....
comment ca va tous?
je reviens de vacances...lol...avec une entorce du pouce lol...
Des bonnes nouvelles :
- j'ai de nouveau internet donc je vais pouvoir revenir de temps en temps lors de mes peu de temps libre...
- j'ai retrouvé les sources imprimées de mon 1er programme basic...et je suis en train de le retaper...je devrais le sortir...
- la programmation de Chess est toujours en cours (je n'ai pas abandonné) et j'ai finis le mode editeur de partie...
voila ca fait plaisir de revenir...
Hors ligne
t'as trop joué avec ta caltos !!!
étais tu en manque ??? :ptdr:
re-bienvenue...
Hors ligne
tiens ça tombe bien swifter j' avais 2-3 choses à te dire pour certaines de tes routines dans ta librairies DB-lib que j' ai eu du mal à comprendre pour l' utiliser... notemment le manque de commentaire et de #define lol
Hors ligne
salut again
Hors ligne
lol vous avez pris des avatars sur le meme site...
va y xth exprime toi..."manque de commentaires"? hum... j'ai pourtant fais une page html avec des explications pour chaque fonctions...
Hors ligne
ta page html explique les effets et l' utilité de ta fonction, mais pas du tout comment elle fonctionne, embétant pour quelqu' un qui cherche à comprendre....
Donc manque de commentaires sur le code sources, par exemple la fonction d8clip_or. j' ai du retraduire l' asm en un dérivé du C puis faire les commentaires moi meme pour comprendre comment ça fonctionnait, et encore, ya encore un truc que j' ai pas pigé mais bon...
Le truc, c' était de transformer la fonction de telle maniere qu' elle fonctionne en linéaire 32 ( au lieu du 16 habituel) et de trafiquer le clipping aussi... et le seul commentaire présent sur le code sources était 'Ici on commence les tests du clipping...' alors qu' en fait 3 ou 4 instructions plus haut y' avait un label [clipping]... commentaire vachement utile lol
Mais sinon pour le clipping, fallait faire des #define pour les valeurs min et max, car par exemple, si on utilise un écran qui fait 96x64 (pour utiliser les 32 pixels restants pour l' interface par exemple), bah faut trouver pour le clipping!!
Sinon comme j' ai compris l' essentiel de la routine ( pas encore l' offset que tu emploie), jte dit bravo pour cette méthode ingénieuse par masquage simplement plus d' explication sur le fonctionnement de la routine aurait été plus cool, après tout, certaines personnes veulent comprendre pourquoi et comment ça fonctionne avant d' utiliser ces fonctions...
Maintenant, l' application d' une telle modification dans mon cas:
D' abbord, comment j' ai structuré les données d' une carte:
En gros, vous prenez l' écran de la G100 en mode DB, vous multipliez la hauteur et largeur par 2, et vous obtenez mon format de carte.
Du coup, on n' a plus 16 octets par ligne, mais 32!
Maintenant, si ça en interresse, les raisons de ce format.
En fait c' est simple, c' est pour effectuer la copie sans trop de prise de tète:
une ligne en mode DB:
XXXXXXXXXXXXXXXX
une ligne de mon format de carte:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
En fait, il faut copier, pour afficher la carte, 16 octets par 16 octets. Pour cela, le mode vidéo virtuel que j' ai nommé le Linéaire 32 utilise la meme structure que le Linéaire 16, et il suffit alors juste de déplacer de 1 octet la copie pour se décaler de 8 pixel vers la gauche, et 32 pour monter d' un cran.
Maintenant les cartes sont de 256 x 128 et c' est parfait :mrgreen: ( à part 2 - 3 bug dûs aux unsigned char ( comme les tirs qui sortent d' un coté et rerentre de l' autre mdr))
Mais sinon, ça serait bien, à l' avenir, de mettre des commentaires valables... au passage, j' ai, par le biais de cet évenement, apris 2-3 choses en asm lol
Hors ligne
bon ca y est ....
g fait des commentaires ; suffisait de demander lol... :mrgreen:
j'ai fait que ceux de d16clip...car si vous comprenez celui la vous comprendrez aisément d8clip...
// Affiche un sprite 16*16 pour mode D3 ou DB // avec OR avec clipping, au buffer voulu. void d16clip_or(int x,int y,void* spr,unsigned int segm) { unsigned char el=0xFF; // On commence par creer une variable de 8 bits, asm{ // car je n'aurai pas assez de registre. mov cx,x // On met x dans CX. mov 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. mov ax,segm // On charge dans AX le segment video voulu par l'utilisateur, sub ax,y // auquel on soustrait y pour pointer sur le bon mot. mov es,ax // On peut alors placer AX dans ES. mov ax,cx // On copie x dans AX. cmp ax,0 // On compare x a 0 pour savoir s'il y a un clipping gauche. jge clipping // Si x est plus grand ou egal, on commence les tests de clipping. add ax,0x80 // Sinon, et c'est tres important, on positionne le pointeur video add di,0x10 // sur l'octet suivant. Cela va permettre d'eviter le bug classique } // des nombres negatifs, et donc de ne pas ecrire n'importe clipping: // ou dans la memoire video. asm{ shr ax,0x3 // On effectue quelques calculs pour faire pointer sub di,ax // DI sur l'octet correct en abscisse. or bx,0xFFFF // On cree un masque (qui est pour l'instant transparent) dans BX et aussi dans EL. cmp cx,0x70 // On commence par le clipping droit. jle leftclip // S'il n'y en a pas, on teste le clipping gauche. cmp cx,0x7F // On teste si le sprite est positionne dans l'ecran. jg end // Si ce n'est pas le cas, on n'affiche rien et on quitte directement. xor el,bl // Le clipping droit : on annule tous les bits de EL, ce qui va cmp cx,0x78 // effacer la partie droite du sprite a afficher lors de l'application du masque. jl downclip // On teste si on a besoin d'effacer l'octet au centre du sprite. xor bl,bl // Si c'est le cas on le fait, puis on va directement tester jmp downclip // le clipping bas, puisque qu'il est impossible d'avoir } // en meme temps un clipping gauche et droit. leftclip: asm{ cmp cx,0 // S'il n'y a pas eu de clipping droit, on reteste le gauche (on peut pas plus optimiser) jge downclip // Si ce n'est pas le cas, on teste le clipping bas. cmp cx,-15 // S'il n'y a pas de sprite a afficher (qu'il sort completement de l'ecran) jl end // On quitte directement sans rien afficher. xor bh,bh // Le clipping gauche : on annule tous les bits de BH, ce qui va cmp cx,-8 // effacer la partie gauche du sprite a afficher lors de l'application du masque. jge downclip // On teste si on a besoin d'effacer l'octet au centre du sprite. xor bl,bl // Dans ce cas, on annule BL (le masque de l'octet du centre) } downclip: asm{ and cl,0x7 // On calcule le decalage a appliquer au sprite pour qu'il soit positionne correctement en abscisse. mov ch,0x10 // On place dans CH le nombre de ligne a afficher (ici 16). mov ax,y // On charge y dans AX, cmp ax,0x30 // et on teste si le sprite deborde en bas de l'ecran. jle upclip // Si ce n'est pas le cas, on file au clipping haut. cmp ax,0x3F // Sinon on teste s'il y a quelque chose a afficher. jg end // S'il n'y a rien on quitte directement. shl ch,0x2 // Le clipping bas : on place 64 dans CH sub ch,al // puis on soustrait le nombre de ligne a afficher jmp loop // en soustrayant y (64-y = nombre de ligne a afficher) } // Puis on commence a afficher le sprite. upclip: asm{ cmp ax,0 // On teste s'il y a besoin ou non d'un clipping haut. jge loop // Si non, on commence a afficher. cmp ax,-15 // On teste s'il faut afficher quelque chose. jl end // Si non, on quitte directement (je l'ai pas deja dis ca?) mov dx,ax // Le clipping haut : d'abord on copie y dans DX shl ax,0x1 // Ensuite on va repositionner le pointeur de donnees : sub si,ax // on ne doit pas afficher la premiere ligne du sprite etant donne qu'elle n'apparait pas a l'ecran. neg dx // On prend la valeur absolue de y, sub ch,dl // que l'on soustrait au nombre de ligne a afficher. (16+y = nombre de ligne a afficher) mov ax,segm // On repositionne le segment video a l'adresse voulue. mov es,ax } loop: asm{ // Apres tous ces tests, onaffiche enfin le sprite. xor dl,dl // On efface le contenu de DL. mov ax,ds:[si] // On charge une des lignes du sprite a afficher dans AX. mov dh,al // On copie la partie basse de AX dans la partie haute de DX. shr dx,cl // Ce qui permet de decaler DX, pour recuperer la partie manquante du sprite a afficher. shr ax,cl // On decale aussi AX. and ax,bx // On pose les masques prepares auparavant. Ainsi, si le masque est completement and dl,el // nul, alors il efface la partie qu'il ne faut pas afficher ; sinon, il conserve le sprite tel quel. or es:[di],ax // On pose la partie gauche du sprite, or es:[di-1],dl // puis la droite. sub di,0x10 // On fait pointer DI sur la ligne inferieure de la memoire video. add si,0x2 // On fait pointer SI sur la prochaine ligne du sprite. dec ch // On decremente le nombre de ligne a afficher. jne loop // Tant qu'il n'est pas nul, on continue la boucle. } end: }
Sinon pour le "debut des tests de clipping" mal positionné, ca date de l'époque où j'avais toujours pas réglé les problème de clipping gauche lié aux nombres négatifs...lol
Hors ligne
je suis a la bourre mais re bienvenue !
c'est moi qui dit ça ?!
Hors ligne
Reuhhh Swifter !!
Tu vois Fantasy, y'a pire que toi lol
Content que tu es récup internenette !!
Hors ligne
Sinon à propos de chess est ce qu'une version avec le mode link va bientot sortir parce qu'à deux sur la même calto on se fait griller quand on se la passe sur la table et elle fini par tomber quand c'est en dessous...
Hors ligne
c'zest que tu n'est pas doué !!!
l'année dernière, on a été jusqu'é six à faire une partie de scorch de 21 rounds ( on avait deux heures ) sans ce faire griller, et sans la faire tombé.
Par contre, ne surtoutpas mettre la caltos dans un puull qui serait sur la table, car pour peut que la prof soit un peu venere et te repere, il tire le pull un grand coup, et la G100 vol !!! et s'écrase lamentablement sur le sol ( et elle fonctionne toujours )
sinson, bioen venue oti !!!
Hors ligne
Ah cool Swifffffffeeeeeerrrrrrrrrrr ( fallait bien faire cette plaisanterie pour ton retour ) est de retour !
Hors ligne
hum une version link...
ce devrait peut etre venir pdt les vacances de paques...
faut que je retrouve mes fonction de link...et que je me remette a programmer...y faut que je change de compilateur...tc3 m'ennerve trop
enfin un tas de truc qui pourrait empecher une sortie rapide d'une nouvelle version...a oui pi ya le bac a commencer a réviser lol
mais g plein de changement important a refaire tel que le moteur graphique...
sinon g fini (depuis un bout de temps) le mode editeur de parties.
Hors ligne