π
<-

[ASM] Problème de bomberman...

Assembleur, Axe, C/C++, ICE...

[ASM] Problème de bomberman...

Message non lude Epharius » 03 Juin 2015, 14:00

Salut tout le monde !

Comme vous pouvez le voir dans ma charmante signature, j'ai quelques petits problème concernant la réalisation d'un bomberman.
Mais ce n'est pas exactement un problème de vitesse, mais plutôt un problème de sprite : comme l'image suivante...
bomberman.png

... j'aimerais que mon bonhomme soit superposé au mur. Sauf que le mur ayant pas mal de détaux (oups), la routine traditionnelle XOR na marche pas vraiment (ça donne n'importe quoi). J'ai finalement réussi à faire une routine AND, cependant, les blocks plein (8*8 de noir complet) cachent le personnage. Du coup, j'aurais aimé faire un contour blanc, mais je ne vois pas vraiment comment faire. OU ALORS : utiliser les nuances de gris. Dans ce cas là, j'aurais besoin de votre aide pour m'indiquer en quoi ça consiste (je sais juste que ça concerne les interruptions).

Pour la vitesse, pour l'instant ça passe, mais comme je compte faire un ou deux bots, j'ai peur que ça lague comme crocodile sur l'eau.

Bref, je vous donne le programme.
Le programme n'est pas vraiment optimisé pour le moment. Là vous vous dites mais il est con lui, pourquoi il veut qu'on optimise son programme alors qu'il ne l'a même pas fait un petit peu ? Tout simplement parce que ce n'est pas la priorité pour le moment ;)
Si vous voulez que je le commente plus, dites le moi simplement.

Merci d'avance pour votre aide !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: [ASM] Problème de bomberman...

Message non lude TheMachine02 » 03 Juin 2015, 15:29

Ce que tu cherche s'appelle la technique de masking 0:]

Basiquement, tu va d'abord faire une opération and sur le buffer de données, PUIS un or avec les données de spirites.
Donc si tu as par exemple :

%11111111 dans le buffer
%01011010 pour le spirite du perso, sachant que les deux 0 aux extrémités ne sont pas le perso (sont hors spirite)

le mask sera : %10000001,constant (donc faut juste faire le mask en même temmps que le spirite)
et donc : magie !
(%11111111 and %10000001) or %01011010= %11011011
ce qui correspond à ton perso avec le mur de derrière :)

Plusieurs routines peuvent être trouvées sur le net, mais je te conseille de faire la tienne pour t'entrainer.
Avatar de l’utilisateur
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 30%
 
Messages: 342
Images: 0
Inscription: 16 Jan 2013, 18:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Médecine

Re: [ASM] Problème de bomberman...

Message non lude Epharius » 03 Juin 2015, 15:52

Ben mince alors, suis-je bête. C'est à ce demander si je le fait exprès :p
Le masking, tout simplement ! Pourtant ce n'est pas la première fois que j'utilise cette technique (par exemple dans le jeu du tunnel). Merci beaucoup, je vais essayer et je te dirais si ça rend bien ou pas.
Par contre si je comprend bien ta suite de AND et de XOR, ce que tu as fait là ne fait pas de contour blanc sur le perso, si ? Au pire je vois comment je pourrais faire maintenant. Mais c'est vrai que ça me demande de faire un masque pour chaque sprite.

PS : si je me trompe corrige moi, j'ai peut-être mal compris...
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: [ASM] Problème de bomberman...

Message non lude TheMachine02 » 03 Juin 2015, 16:44

Non, y'a pas de contour blanc, mais pour ça il suffit d'étendre un peu le mask .
Avatar de l’utilisateur
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 30%
 
Messages: 342
Images: 0
Inscription: 16 Jan 2013, 18:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Médecine

Re: [ASM] Problème de bomberman...

Message non lude Epharius » 03 Juin 2015, 22:56

Argh ! Cela fait maintenant 2 heures que je bute sur un petit problème de rien du tout. Je sais d'où ça vient, je sais à quoi c'est du, mais je ne sais pas comment enlever le bug.
bug.gif


En fait, c'est juste que ma routine d'affichage du sprite vérifie si le sprite est à cheval sur deux octets du graphbuf, si oui, il laisse des 0 sur les côtés pour combler le vide, ce qui ne pose pas de problème quand c'est une routine XOR, mais un gros quand c'est autre chose (là, AND)... Donc je me retrouve avec des gros blancs sur les côtés.
J'ai bien essayé de récupérer les deux bouts des deux octets du graphbuf pour en faire qu'un, ça ne marche pas (enfin, je n'y parviens pas). Je ne sais plus quoi faire. Pourtant ce n'est pas faute d'avoir essayé !

Je te met le code de la routine d'affichage au cas où tu (ou vous) aurais l'illumination.

Code: Tout sélectionner
SPRXOR:
   push bc
   ld b,c
   ld l,e
   ld h,0
   ld d,h
   add hl,de
   add hl,de
   add hl,hl
   add hl,hl
   ld e,a
   and %00000111
   ld c,a
   srl e
   srl e
   srl e
   add hl,de
   ld de,PLOTSSCREEN
   add hl,de
putSpriteLoop1:
   push bc
   ld d,(ix)
   ld e,255
   ld a,c
   or a
   jr z,putSpriteSkip1
putSpriteLoop2:
   srl d
   rr e
   dec a
   jr nz,putSpriteLoop2
putSpriteSkip1:
   ld c,a
   ;pop af
   or a
   jp z,xor
   ld a,c
   ld a,(hl)
   ld a,d
   and d
   ld (hl),a
   inc hl
   ld a,(hl)
   ld a,e
   and e
   ld (hl),a
   ld de,11
   add hl,de
   inc ix
   djnz putSpriteLoop1
   ret
xor:
   ld a,c
   ld a,(hl)
   ld a,d
   and d
   ld (hl),a
   inc hl
   ld a,(hl)
   ld a,e
   and e
   ld (hl),a
   ld de,11
   add hl,de
   inc ix
   djnz putSpriteLoop1
   ret


Pour aider à la compréhension :
Au début on calcule l(es)'octet(s) à modifier et on voit si le sprite est sur un ou deux octets (si sur un, jump to ALIGN).
les deux labels importants sont SHLOP et ALOP1 : c'est là où il y a les or de sprite.

Merci pour ton aide ;)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Dernière édition par Epharius le 05 Juin 2015, 10:48, édité 1 fois.
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: [ASM] Problème de bomberman...

Message non lude Epharius » 05 Juin 2015, 11:05

On y est presque, on va y arriver...

Mais autre problème, j'ai rajouté scf \ rr d mais le personnage se noie dans le noir maintenant :
bomber.gif


Voilà le code actuellement :
Code: Tout sélectionner
SPRXOR:
   ld e,l
   ld h,0
   ld d,h
   add hl,de
   add hl,de
   add hl,hl
   add hl,hl
   ld e,a
   and %00000111
   ld c,a
   srl e
   srl e
   srl e
   add hl,de
   ld de,PLOTSSCREEN
   add hl,de
putSpriteLoop1:
   ld d,(ix)
   ld e,255
   ld a,c
   or a
   jr z,putSpriteSkip1
putSpriteLoop2:
   srl d
   scf
   rr e
   dec a
   jr nz,putSpriteLoop2
putSpriteSkip1:
   ld a,(hl)
   and d
   ld (hl),a
   inc hl
   ld a,(hl)
   and e
   ld (hl),a
   ld de,11
   add hl,de
   inc ix
   djnz putSpriteLoop1
   ret

EDIT : Ça marche, j'avais mis le scf pour le rr e et pas rr d...
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Dernière édition par Epharius le 05 Juin 2015, 11:08, édité 1 fois.
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: [ASM] Problème de bomberman...

Message non lude Epharius » 03 Juil 2015, 21:33

Petit message pour vous prévenir que je vais continuer le bomberman... en couleur !
En effet, après réflexion et ma Ti-83 premium CE étant arrivée, j'ai décidé d'arrêter de faire le bomberman en noir et blanc pour le continuer en faisant quelque chose de plus construit, de plus joli. Bien entendu, je ne suis pas prêt de le terminer, pour plusieurs raisons. Déjà parce que je n'ai pas encore vraiment appris l'assembleur eZ80, ensuite parce que le travaille est colossal, et enfin car aucun émulateur en ce jour n'existe pour ti-84+CE (équivalent de la mienne). Pour l'émulateur j'ai croisé KermM et MateoConLechuga sur Cemetech qui m'ont dit qu'ils commenceraient à y travailler après les vacances. Pour vous donner une idée de l'attente qu'il vous faudra avant que je sorte une version stable, je dirais octobre 2016, je préfère être pessimiste, et puis je ne sais absolument pas combien de temps ça leur prendra de faire l'emulateur. Ça se trouve ils leur faudra 2 ans, ça se trouve seulement 3 mois.

Bref, I hope you'll enjoy it ! D'ici là, j'essaie de trouver un style pour les sprites des persos (je suis obligé de tout refaire, et c'est là partie que j'aime le moins, donc si vous avez des talents ou pas, je vous encourage à me donner des idées ;) )
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 8.9%
 
Messages: 1182
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav


Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Ndless for CX 4.5.5 / CX II 6.2.0
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
12345
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2033 utilisateurs:
>2012 invités
>9 membres
>12 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)