MMBC

Sprites ez80

Aug 18th, 2017
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "ti83pce.inc"
  2.  
  3.     .assume ADL=1
  4.     .db tExtTok, tAsm84CeCmp
  5.     .org userMem
  6.    
  7.     call _ClrLCDFull
  8.    
  9.     ld a, $27
  10.     ld ($E30018), a ; c'est comme ça qu'on met l'écran en 8 bits
  11.    
  12.     ld hl, 000f0h ; ma première couleur %0000000011110 une sorte de bleu
  13.     ld (mpLCDPalette), hl ; on mets cette couleur comme première couleur de la palette
  14.     ld hl, 0f800h ; deuxième couleur %1111100000000000 une sorte de rouge
  15.     ld (mpLCDPalette+2), hl ; deuxième couleur de la palette (+2 car une couleur = 2 octets)
  16.     ld hl, 0f5DDh ; troisième couleur %1111010111011101
  17.     ld (mpLCDPalette+4), hl ; troisième couleur de la palette
  18.            ; ne pas se tromper, les couleurs ici sont en RGB1555 , le premier bit on sait pas trop ce que c'est, les 5 suivants c'est le rouge, les 5 d'après, le vert et les 5derniers le bleu   
  19.    
  20.     ld hl, Sprite ; on mets l'adresse de la sprite dans hl
  21.     ld de, vRam+1280 ; l'adresse de l'endroit ou on veut afficher la sprite
  22.     ld a, 8 ; hauteur de la sprite (ma sprite est en 8x8)
  23.    
  24. aff_sprite:
  25.     ld bc, 8 ; largeur de la sprite
  26.     ldir ; on écrit la première ligne avec un ldir simple
  27.     ld bc, 312 ; on mets dans bc 320-largeur de la sprite
  28.     ex de, hl
  29.     add hl, bc ; on l'ajoute a de (l'endroit ou doit être dessinée la sprite) comme ça on a dans de le premier pixel de la ligne du dessous
  30.     ex de, hl
  31.     dec a
  32.     jr nz, aff_sprite ; on boucle jusqu'a ce que la sprite soit entièrement affichée (quand a = 0)
  33.  
  34. ; second sprite (ici c'est la sprite avec transparence, tout simplement dans cette sprite on va regarder si un pixel en question est d'une couleur bien définie, et si c'est le cas on n'affiche pas ce pixel)
  35.  
  36.     ld de, Sprite2 ; adresse de la deuxième sprite
  37.     ld hl, vRam+2560 ; adresse de la ou on veux dessiner la sprite
  38.     ld b, 8 ; hauteur de la sprite
  39.  
  40. spriteLoop:
  41.     push bc ; contient la hauteur de la sprite pour la boucle Y)
  42.     ld b, 8 ; largeur de la sprite
  43. spriteX:
  44.     ld a, (de) ; on mets dans a la couleur du pixel actuel de la sprite
  45.     cp 0 ; on la compare avec la couleur qu'on ne veut pas afficher (j'ai choisi de ne pas afficher la première couleur de ma palette)
  46.     jr z, emptyPxl ; si c'est le cas, on passe la partie affichage
  47.     ld (hl), a ; on affiche le pixel (hl contient l'adresse dans la vram du pixel)
  48.    
  49. emptyPxl:
  50.     inc hl ; on passe au pixel d'après sur l'écran
  51.     inc de ; on passe au pixel d'après sur la sprite
  52.     djnz spriteX ; on loop sur tout les X
  53.     ld bc, 312 ; quand c'est fini on met 320-largeur dans dans bc
  54.     add hl, bc ; on ajoute a hl pour avoir le premier pixel de la ligne d'en dessous
  55.     pop bc ; on remet notre hauteur de la sprite pour la boucle des y
  56.     djnz spriteLoop ; on loop sur tout les y
  57.    
  58.     call _GetKey ; on admire le résultat :troll:
  59.    
  60.     ld a, $2D
  61.     ld ($E30018), a ; c'est comme ça qu'on repasse en mode 16 bits pour éviter de tout casser lol
  62.    
  63.     call _ClrLCDFull
  64.     call _ClrScrnFull
  65.    
  66.     ret
  67.    
  68. Sprite: ; notre première sprite, les nombres sont simplement la couleur du pixel (enfin le numéro de la couleur dans la palette)
  69.     .db       1,   1,   0,   0,   0,   0,   0,   0
  70.     .db       0,   0,   1,   1,   0,   0,   0,   0
  71.     .db       0,   0,   0,   0,   1,   1,   0,   0
  72.     .db       0,   0,   0,   0,   0,   0,   1,   1
  73.     .db       0,   0,   0,   0,   0,   0,   1,   1
  74.     .db       0,   0,   0,   0,   1,   1,   0,   0
  75.     .db       0,   0,   1,   1,   0,   0,   0,   0
  76.     .db       1,   1,   0,   0,   0,   0,   0,   0,0 ; toujours finir une sprite avec un 0 en plus
  77.    
  78. Sprite2:
  79.     .db       1,   1,   0,   0,   0,   0,   2,   2
  80.     .db       0,   0,   1,   1,   2,   2,   0,   0
  81.     .db       0,   0,   2,   2,   1,   1,   0,   0
  82.     .db       2,   2,   0,   0,   0,   0,   1,   1
  83.     .db       2,   2,   0,   0,   0,   0,   1,   1
  84.     .db       0,   0,   2,   2,   1,   1,   0,   0
  85.     .db       0,   0,   1,   1,   2,   2,   0,   0
  86.     .db       1,   1,   0,   0,   0,   0,   2,   2,0
Advertisement
Add Comment
Please, Sign In to add comment