Page 1 of 2

[ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 19:43
by Epharius
Hello tout le monde !

Voici un tout nouveau jeu à peine fini (pas de menu...) que je n'aurais pas uploadé si Plokki ne me l'avait pas demandé, c'est pour dire à quel point j'aurais aimé garder cette horreur pour moi :D

Présentation
Alors, ce jeu est fait en assembleur seulement pour ti-82 stats(.fr) et ti-83 (impatient d'avoir ma 83 PCE en passant, ça me changera de ma stats.fr), si vous voulez, vous pouvez l'essayer sur 83+ mais je ne donne pas cher de votre calculatrice...
Ce tunnel est aléatoire : y'a deux ld a,r pour la barre du haut et la barre du bas qui délimitent le terrain.
J'ai utilisé dans ce programme la routine de movax (sf... cf tutoriel d'ASMGURU) pour afficher le sprite. Alors là tout le monde s'insurge : quoi t'as même pas utilisé la routine d'Ion ? À ces gens là je répondrai : "je n'ai aucune raison valable à donner", j'ai commencé avec cette routine et j'ai continué avec celle-ci :p

Que dire d'autre... si quelqu'un à des idées pour :
  • Accélérer le tout : et je veux pas de ben uttilyze la roue tinne deux ion !!! :p
  • Pour que le jeu soit plus dur : mais ça rejoint le précédent point.
  • Trouver une technique pour revenir à l'écran de calcul (pour l'instant j'ai mis un _dispDone)
  • Je vous avez dit que j'aimais les listes à puce


Screenshot
Voici le traditionnel screenshot pour voir à quoi ça ressemble :
TUNNEL.gif


Notez cet incroyable bégaiement de la part de la calculatrice (dddd.. done, done !). Comme je l'ai dit plus haut c'est pour revenir à l'écran de calcul.
Voila le lien permettant de télécharger le programme avec les sources (eh ouais ça rigole pas) mais pas commenté. Vous comprenez, il m'a prit au dépourvu :p

Allez, bon jouage !

Re: [ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 19:54
by Lu_Lu54
Je verrais bien un menu...
sinon pour rendre plus difficile, je dis sûrement n'imp, parce que je suis du mauvais côté de la barrière pour donner des idées réalisables, mais ça ajouterai du piquant du mouvement de la map. genre elle évolue et se modifie
sinon j'aime bien la phisyque du truc, et le côté flouté qui donne un effet de masses qui évolues :P
un grand gg!

Re: [ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 19:59
by Epharius
Merci mais l'effet de flou n'est pas fait exprès :p
Ensuite pour le menu j'en ferai un quand le programme sera potable (comme l'eau... p'Ti rageur se suicide à la suite d'un harcèlement ). J'ai mes priorités ;)
C'est vrai que ce serait pas mal une map qui se modifie sauf que j'ai peur pour la vitesse, c'est à réfléchir !

Re: [ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 20:04
by Lu_Lu54
ben il faut trouver le compromis, sans trop modifier pour que ça reste une vitesse potable (comme l'eau... Lu_Lu54 se prend aussi des tomates) mais en faisant un truc un rien plus compliqué
à voir...
sinon tu peux pas resserrer le tunnel en accentuant la hauteur des montagnes ?

Re: [ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 20:08
by Epharius
Quand tu parles de la hauteur des montagnes, tu veux dire resserrer les deux bouts pour que ce soit plus dur ?

Re: [ASM] Le jeu du tunnel

PostPosted: 02 Jun 2015, 21:33
by Plokki
Ben il est pas du tout dégeu ton tunnel :)

Si tu veux accelérer le jeu je te propose d'enlever l'affichage de la distance, ça te flingue la vitesse d'un programme ça, à moins que ce ne soit pas la fonction text( de base de la calculatrice. Où alors tu fais ta propre fonction d'affichage, ce que je pense faire pour Boost.
Tu peux également faire un scrolling de 2 pixels à chaque fois.

Et à part ça il représente quoi ton sprite ? :D

Re: [ASM] Le jeu du tunnel

PostPosted: 03 Jun 2015, 13:04
by Epharius
Mon sprite était sensé représenter un sous marin au départ, et puis je me suis dit que si je ne l'effaçait pas au fur et à mesure ça rendait plutôt bien, d'où la trainée noire derrière.
Voilà le code du sprite si tu veux voir à quoi il ressemble :
Code: Select all
.db %00011000
.db %00010000
.db %01111100
.db %11111110
.db %11111110
.db %01111100
.db %00000000
.db %00000000


Pour l'affichage des distances je veux bien l'enlever mais s'il n'y pas de record, j'ai peur que le jeu ne soit pas d'un grand intérêt. J'ai réfléchi à le faire moi même mais je ne pense pas que ça change grand chose.

à moins que ce ne soit pas la fonction text( de base de la calculatrice

Là je ne t'ai pas très bien compris, je suis en assembleur (et pas en axe) et la seule fonction qui me permet d'afficher un registre en petits caractères est _DISPOP1A :p
C'est d'ailleurs ça qui prend vachement de temps, mais comme le score ne dépasse pas les 5000 je pense que je vais le mettre dans hl (65535 ça peut aller :p). Je vais faire des push hl et des pop hl, ça prendra pas beaucoup de states. Pour le moment c'est fait avec la romcall qui incrémente op1 et après je l'affiche avec _DISPOP1A. Autant te dire que ça prend du temps.

D'ailleurs pour tout ceux qui se lancent dans l'assembleur, j'aimerais leur conseiller de ne jamais utiliser la romcall _Random, tellement elle est lente. J'ai réussi à doubler la vitesse de jeu en la remplaçant par...
Code: Select all
ld a,r
sra a

...le sra a étant là pour ne pas qu'un motif se répète (puisque r est juste un registre incrémenté à chaque instruction).

Et voilà ce que ça donne maintenant, après avoir enlevé l'affichage du score (je l'ai mis à la fin). Maintenant ça incrémente hl et ça fait quelques pop&push pour sauvegarder sa valeur (juste ça) :
tunnel.gif


On ne note pas une très grande amélioration niveau vitesse mais c'est déjà ça...
Voilou !

Re: [ASM] Le jeu du tunnel

PostPosted: 03 Jun 2015, 13:39
by florian66
C'est vraiment bien :D
Par contre r a une valeur pseudo aléatoire.
D'ailleurs, tu utilises ionfastcopy pour rafraichir l'écran ??
Parce que moi j'ai écrit une routine du meme type mais j'ai plus de calculette pour tester :p
Si tu veux tester voilà la source: http://pastebin.com/8AsHK0DK

Re: [ASM] Le jeu du tunnel

PostPosted: 03 Jun 2015, 13:45
by Epharius
Par contre r a une valeur pseudo aléatoire.

Comme je l'ai dit plus haut, il ne fait que s'incrémenter à chaque instruction mais c'est assez je pense pour que ça donne de l'aléatoire correct en le multipliant par 2 ;)

Non j'utilise _GRBUFCPY, je ne me casse pas la tête, mais je vais essayer le tienne et voir le gain que ça me donne ;)

Re: [ASM] Le jeu du tunnel

PostPosted: 03 Jun 2015, 15:40
by TheMachine02
Bon alors plusieurs choses :p

Déjà, si tu veux vraiment de la vitesse et que la taille du code n'est pas trop importante, remplace ce code :
Code: Select all
   ld hl,PLOTSSCREEN+300h
   ld b,3
startLoopScroll:
   push bc
   ld b,0
loopScroll:
   rl (hl)
   dec hl
   djnz loopScroll
   pop bc
   djnz startLoopScroll


par :
Code: Select all
   ld   hl,PLOTSSCREEN+300h
   ld   b,64
scrollLoop:
   dec   hl
   sla   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   dec   hl
   rl   (hl)
   djnz   scroolLoop


bien plus rapide :)

Après deuxième point, peut-être le plus important.
Evite au maximum les routines de l'OS (oui, _ILINE je te regarde :p ), et utilise plutôt tes propres routines. Dans ce cas, en plus, tu peux utiliser une routine specialement faite pour afficher sur la dernière colonne et verticalement. Je pourrais te la faire, mais 1-j'ai la flemme, 2-faut que tu t'entraines :D .
Des petites indications : récupère d'abord l'adresse initial, puis 'or' la donnée du buffer avec %00000001, et ceux pour tout ce que tu dois afficher. Je pense que la vitesse pourra être énormément augmentée en virant ces call à l'OS.