π
<-

[ASM] Problème de bomberman...

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

[ASM] Problème de bomberman...

Postby Epharius » 03 Jun 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 !
You do not have the required permissions to view the files attached to this post.
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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

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

Postby TheMachine02 » 03 Jun 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.
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 30%
 
Posts: 342
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

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

Postby Epharius » 03 Jun 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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

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

Postby TheMachine02 » 03 Jun 2015, 16:44

Non, y'a pas de contour blanc, mais pour ça il suffit d'étendre un peu le mask .
User avatar
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 30%
 
Posts: 342
Images: 0
Joined: 16 Jan 2013, 18:27
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Médecine

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

Postby Epharius » 03 Jun 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: Select all
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 ;)
You do not have the required permissions to view the files attached to this post.
Last edited by Epharius on 05 Jun 2015, 10:48, edited 1 time in total.
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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

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

Postby Epharius » 05 Jun 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: Select all
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...
You do not have the required permissions to view the files attached to this post.
Last edited by Epharius on 05 Jun 2015, 11:08, edited 1 time in total.
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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav

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

Postby Epharius » 03 Jul 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
User avatar
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 8.9%
 
Posts: 1182
Images: 4
Joined: 08 Dec 2014, 17:38
Gender: Not specified
Calculator(s):
MyCalcs profile
Class: Ensimag
GitHub: MathisLav


Return to Langages alternatifs

Who is online

Users browsing this forum: ClaudeBot [spider] and 4 guests

-
Search
-
Social TI-Planet
-
Featured topics
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
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
7118 utilisateurs:
>7078 invités
>31 membres
>9 robots
Record simultané (sur 6 mois):
32248 utilisateurs (le 01/09/2025)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)