Page 1 of 3

[83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 19:39
by grosged
Vous ne trouvez pas que ça serait sympa de pouvoir créer et faire évoluer à l'écran toutes
sortes de Sprites ?...Et tout ça depuis le TI-Basic ! :#roll#:
Hé bien , après vous avoir proposé une modeste routine de Sprites (v1) 10x10 en 16 couleurs
(viewtopic.php?f=12&t=18327),
je vous propose maintenant la version 2 : :D
définition/affichage de sprites 36 couleurs, au format customisable (d' 1x1 jusqu'à 35x35 pixels) agrémentée d'autres fonctions pour effacer/remplir l'écran de la couleur de votre choix,
afficher/redéfinir la palette des 36 couleurs.

Sprite v2 Téléchargeable ici : archives_voir.php?id=539203

Commençons d'abord par l'installation...Transférez simplement ces fichiers :

defpal.8xp
defspr.8xp
affspr.8xp
effecr.8xp (optionnel)
affpal.8xp (optionnel)
PALETTE.8xp (optionnel)

Voici les fonctions dans le détail:

1) DEFPAL permet de définir une palette standard de 36 couleurs (ou d'en redéfinir tout ou partie)

Code: Select all
{couleur0,couleur1,couleur2:Asm(prgmDEFPAL
Dans cet exemple, on redéfinit uniquement les 3 premières couleurs de la palette (les 33 couleurs suivantes demeurent standard)

Voici les 256 couleurs disponibles pour redéfinir la palette:
Image(courtesy of Shaun 'Merthsoft' McFall )


Si ce qui précède Asm(prgmDEFPAL s'avère ne pas être une liste...

Code: Select all
0:Asm(prgmDEFPAL
ou encore
Code: Select all
"":Asm(prgmDEFPAL

Alors rien n'est redéfini : on se contente donc de la palette standard
(dont voici un aperçu: )

Image


2) DEFSPR permet de définir un Sprite et ses dimensions (du format 1x1 jusqu'à 35x35 pixels)
Son numéro, sa largeur et sa hauteur seront mentionnés en entête de cette manière:

Code: Select all
"0 C30123456789AB
Ans+"CDEFGHIJKLMN
Ans+"OPQRSTUVWXYZ
Asm(prgmDEFSPR
Le Sprite n°0 est donc au format 12x3 (d'où "0 C3..." à la 1ère ligne)

Petite précision: pour pouvoir spécifier au moyen d'un seul caractère la couleur (entre 0 et 35) de chaque pixel composant le sprite, on étend la notation héxadécimale en allant jusqu'à la dernière lettre de l'alphabet (A=10....Z=35) .

25200 octets (env. 24,6 Ko) sont attribués au stockage des sprites, il y a donc de la marge !
à noter qu'un sprite prend en mémoire (2+largeur*2*hauteur) octets, on peut donc stocker jusqu'à 10 sprites 35x35 :)


3) AFFSPR permet l'affichage d'1 ou plusieurs Sprites.

Code: Select all
{0,100,200,1,0,0:Asm(prgmAFFSPR
affichera le sprite n°0 en coordonnées (100,200) ainsi que le sprite n°1 en coordonnées (0,0), c'est-à-dire le coin supérieur gauche de l'écran.

:warning: IMPORTANT :warning: : afin d'éviter de faire planter la TI83PCE, veuillez respecter cet ordre précis:
-d'abord DEFPAL (obligatoire, même si l'on ne veut pas redéfinir!)
-puis DEFSPR (respecter l'ordre croissant : sprite0,sprite1,sprite2...)
-enfin AFFSPR

EFFECR et AFFPAL sont optionnels, ils peuvent être utilisés où et quand vous le souhaitez...


4) EFFECR permet d'effacer/remplir d'une couleur (entre 0 et 35) tout l'écran (au choix parmi la palette)

Code: Select all
0:Asm(prgmEFFECR
efface/rempli l'écran au moyen de la couleur 0


5) AFFPAL permet d'afficher à l'écran les 36 couleurs composant la palette en cours (pas de paramètre nécessaire)

Code: Select all
Asm(prgmAFFPAL
Pour voir s'afficher également les numéros correspondant à chaque couleur, il vous suffit de lancer le programme PALETTE
Le fichier 36couleurs.jpg joint également, représente la palette standard.

Voilà! J'espère que vous allez bien vous amuser !!! :D
Merci à Epharius, Mateo, PT, DjOmnimaga pour les conseils, astuces, et informations !! 8-)

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 20:18
by Epharius
Super ! Désolé de ne pas t'avoir envoyé de MP pour remplacer RclVarSym mais ça m'avait gonflé d'avoir perdu le message qui était censé être envoyé et que j'avais mis du temps à faire --'

35*35 est une excellente taille : l'utilisateur va avoir de la marge pour d'éventuels gros sprites, et de toute façon, il pourra toujours créer un sprite composé (en créant 2 sprite qu'il met côte à côte). En tout cas, chapeau !

Bref, si t'as besoin d'aide ou si tu es encore intéressé pas le fonctionnement de RclVarSym, n'hésite pas ;)

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 20:26
by grosged
Merci ! ;)
Au sujet de RclVarSym, vu sa taille, j'avoue que ça m'a un peu calmé, héhé :)
Durant mes quelques tests, j'ai remarqué un effet pas vraiment indésirable:
Après utilisation, lors d'un [2nde]+quitter, on peut parfois voir une trainée en haut de l'écran (juste sous la barre) : c'est parce qu'on vient d'utiliser la zone-mémoire PixelShadow, je pense.
En effet, pour avoir un max de place, j'ai opté pour l'utilisation des 3 zones consécutives de 8400 octets chacunes : PixelShadow,PixelShadow2,cmdPixelShadow

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 20:33
by Epharius
Bon, c'est pas grave mais il y a surement quelques programmes qui utilisent pxlshadow2 (en tout cas PHASM :p) mais on ne peut pas trop faire autrement. Enfin, y'a toujours la possibilité de mettre ça dans une AppVar mais tu disais que c'était moins rapide ?

Pour les barres, ouais, y'en avait aussi avec PHASM mais premièrement, c'est jute 10 pixels, et deuxièmement, je crois qu'il est possible d'éviter ça en décalant un peu, ça doit venir des premiers bytes de PxlShadow2.

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 21:24
by Adriweb
C'est du bon boulot !

Tu aurais un gif (animé?) d'un programme exemple/démo ? :P

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 21:34
by grosged
Merci Adriweb ;)

Non, je n'ai pas encore fait de démo, et je ne peux malheureusement pas faire de gif animé : je n'ai plus CEmu sur mon pc
(et je me souviens que j'avais galéré avec Wine pour pouvoir l'installer sur Linux)

J'utilise TILP pour faire des screenshots ;)

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 21:58
by Adriweb
Mais pourquoi ne pas compiler CEmu pour Linux directement ? :P

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 22:17
by grosged
hou lààà!.. Je verrai ça quand j'en aurais le courage :)

Sinon, pour booster encore la TI83PCE, je me souviens de l'excellente astuce de DrDnar : faster.8xp ...et encore mieux : fastest.8xp !!!
( archives_voir.php?id=464354&short=1 )
Je viens de tester fastest.8xp , hé bien ça dope la TI83PCE !!!

j'ai fait ce test d'un sprite 35x35 se déplaçant sur toute la largeur de l'écran (par pas d'1 pixel)
Voici les résultats:
-environ 4,2 secondes sans FASTEST
-3 secondes avec FASTEST !!!

Il se pourrait (fortement!) que cette astuce intègre le projet Sprite ;)

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 15 May 2016, 23:22
by DoOmnimaga
Je viens de recevoir ton message à propos de ce lib et Excellent travail! :)

Je suis content de voir ce lib aboutir en utilitaire élaboré pour les jeux BASIC étendu. Je vais devoir l'essayer pour faire des tests. Comme tu supportes des sprites de toutes sortes de grandeur je me demande si First Fantasy: Mana Force pourrait donc être adapté pour l'utilisation de ce lib? :)


Aussi bonne idée pour les palettes de couleurs. Ça permet de réduire la taille des sprites


EDIT: J'ai écrit un article en anglais à propos du lib: https://codewalr.us/index.php?topic=1350.0

Re: [83PCE] Des Sprites pour le Basic ! (v2)

Unread postPosted: 16 May 2016, 12:02
by Epharius
Si tu veux je pourrai te faire le gif animé avec le programme test que tu m'as passé ;)

Sinon, fais un peu attention avec FASTEST, tu l'as peut être vu mais il peut engendrer une RAM CLEARED. Mais par contre pour FASTER il ne devrait pas y avoir de problème. Avec l'accord de l'auteur, puisque que le code est très très court, tu pourrais l'intégrer directement dans DEFPAL ou quelque chose du genre.