1

I've worked on a totally new game called "volts".

Volts is a very fast scrolling game. It's very old school, the map is composed of 8 x 8 block.
This is a choice, For me, the most important thing is the playability.

There's currently 18 levels :
- 6 easy levels
- 6 medium levels
- 6 hard levels

Hard levels are very long and it uses random routines to generate a different map each times tongue

The game is already finished, but there's a lot of optimizations to do on the code.

Here some animated screenshot :

volt1.gif

volt.gif

(WARNING : GAME IS NOT AS FAST AS THE ANIMATED GIF)


What do you think about it? grin

2

Whouaouh ! Ça a l'air vraiment bien !

3

Seul point négatif : le clignotement de lécran dans la sélection ds niveaux (si j'ai bien vu des clignotements)
Sinon super

4

Oui tu as raison ça clignote il faut que j'arrange ça...

Merci pour vos réactions en tout cas smile

5

J'ai ajouté 6 niveaux ce qui fait maintenant donc 18 levels grin

6

Tu devrais le changer dans la description du premier message wink

7

Tu as raison c'est fait smile

8

Je vais un peu ralentir le chargement de la page pour les smart phones dsl smile

Mode easy :

level 1 : volts_l01.gif

level 2 : volts_l02.gif

level 3 : volts_l03.gif

level 4 : volts_l04.gif

level 5 : volts_l05.gif

level 6 : volts_l06.gif





Mode medium :

level 7 : volts_l07.gif

level 8 : volts_l08.gif

level 9 : volts_l09.gif

level 10 : volts_l10.gif

level 11 : volts_l11.gif

level 12 : volts_l12.gif




Mode hard :

level 13 : volts_l13.gif

level 14 : volts_l14.gif

level 15 : volts_l15.gif

level 16 : volts_l16.gif

level 17 : volts_l17.gif

level 18 : volts_l18.gif

9

top

Tous les niveaux sont inclus dans le programme ? Combien ça pèse en tout ?

( Ça clignote toujours hehe )

10

Tout est inclu dans le programme. Pour l'instant ça pèse environ 5000bytes mais une grosse partie n'est absolument pas optimisée.
La partie choix des niveaux par exemple est assez horriblement codée.

Je pense peut-être pouvoir passer en dessous de 3000bytes

Oui ça clignote encore faut que je vois ça un de ces quatre tongue

11

Les niveaux me plaisent beaucoup ! J'aime comment il y a des blocs au milieu du champ, non seulement par les côtés. A propos, quand on réussit terminer un niveaux, se passe-t-il quelque chose ?

12

Merci, je trouve que ce jeu est sympa et ceux qui l'ont testé m'on donné que des bonnes critiques smile
Je me suis bien appliqué pour les niveaux pour que ce soit bien jouable avec une difficulté progressive.
A propos, quand on réussit terminer un niveaux, se passe-t-il quelque chose ?

Euh rien smile
Ca ne débloque rien, on obtient juste un message de félicitation.

Mais tu as raison ce serait une bonne idée d'ajouter un petit quelque chose...
Tu as des idées?

13

des niveaux Bonus ?
Ou bien tous les niveaux ne seraient pas débloqués direct, mais au fur et à mesure de la progression, par exemple

14

En fait le problème c'est que je ne sais pas ou stocker la progression.

Il faudrait que je sache les zones de mémoire "persistantes" pour faire une sauvegarde...
Il faudra que je demande à deeph, chickendude, gh ou glre ou que je trouve sur le net.
Je peux utiliser les zones utilisées par Ion pour les sauvegardes, mais si on installe ION ça posera problème avec volts ...

15

Ah
Tu sais toutes les applications APPS possèdent des Appvars propres (visibles dans le menu Mem de la calto) qui comportent des données archivées. En Axe c'est possible d'en créer, mais en ASM je sais pas

16

En asm on peut tout faire...

17

Oui j'imagine ^^

Mais après c'est comment le faire

18

Contra, si tu veux sauvegarder des données, il faut d'abord chercher l'addresse de ton programme dans la mémoire de la calc:
  bcall(_PushRealO1)	;garder le nom du programme (qui est dans OP1 quand le programme commence) pour pouvoir chercher où sauvegarder les données plus tard

;...  augmenter highscore par 4
  ld hl,highscore
  ld a,(hl)
  add a,4
  ld (hl),a
  jr nc,continue
  inc hl
  inc (hl)
continue:
;...

  ld hl,(highscore)
  bcall(_dispHL)

  bcall(_PopRealO1)	;nom du programme dans OP1
  bcall(_ChkFindSym)	;de = addresse du programme dans la mémoire
  ld hl, highscore - $9D95 + 4	;plus 4 parce que les 4 premiers octets du programme sont: 2 octets pour la taille et 2 pour le AsmPrgm token
  add hl,de		;hl = l'addresse de "highscore"
  ex de,hl
  ld hl,highscore
  ld bc,highscore_end - highscore
  ldir			;sauvegarder les données :)
  ret

highscore:
 .dw 0	;tes données
highscore_end:

Ça ne fonctionnera que si ton jeu est dans la RAM, mais je ne pense pas que ça causera des problèmes.

19

Y a-t-il des nouvelles ? smile

20

Non pas vraiment...

Voici dans l'ordre de mes priorités :

1) Je voudrais bien arranger le menu pour qu'il ne clignote plus.
2) Je voudrais bien aussi faire une version ti83+ (facile)
3) Je voudrais mettre en place les sauvegardes avec le code que tu m'as donné.

Je suis capable de faire les 3 mais il faut que je trouve un peu de temps à consacrer à l'asm smile... mais ça viendra tongue

Puis j'ai encore oilcap a avancer et là y a beaucoup de travail...

Et toi? monopoly ou pas monopoly? smile
Ou alors d'autres projets peut-être?

21

1) Sûrement tu as un _ClrLCDFull quelque part ou c'est quelque chose à voir avec le texte que tu affiches.
2) Je dirais que c'est plus ou moins déjà fait !
3) Je ne crois pas que tu aies de problèmes, mais tu sais que le forum asm est toujours ici.
Et toi? monopoly ou pas monopoly?
On va voir wink

22

1) C'est le meme probleme que lorsque j'avais le score qui clignotait avec oilcap... call bufcopy m'efface le texte que qui n'est pas inséré dans le buffer (donc les labels "easy" "medium" "hard" et les numéros dans les cases)... Meme en les affichant tout de suite après ça clignote ...
2) Oui ça il ne doit vraiment pas y avoir beaucoup de différences pour ce programme.
3) Merci

La dernière chose qui est intéressant mais inachevée c'est l'optimisation. Une partie du code est très propre et disons assez optimisée.... tandis que le reste (menu etc...) est vraiment très laid.
Les possibilités d'optimisation sont énormes , et j'avais d'ailleurs commencé, mais on perd vraiment en lisibilité du code puis je n'ai pas eu le temps de finir.
(je parle d'optimisation en taille pas en temps)

Cela pourra être intéressant de vous montrer le code et ses évolutions sur ce domaine là.
Mais pas tout de suite smile

23

Le problème de clignotement est résolu (merci nanowar) .

Nouveau screenshot :

volts_m1.gif


Et le code source actuel :
tromb Fichier joint : speed_v0.9a.tar.gz

Y a du travail d'optimisation à faire (sur le menu surtout).

Mis à part ça on peut dire que c'est un bon exemple de "petit" jeu assez "simple" à coder.

edit : version avec plus de commentaires...

24

Je te l'ai déjà dit, mais le nouveau ménu est beaucoup plus joli ! Si j'ai le temps peut-être ce weekend je vais parcourir ton code, si ça ne te gène pas bien sûr wink

25

si ça te ne gène pas bien sûr


C'est fait pour ça smile

26

I've made some modification (imrpovements?!) on the title screen.

volts_m2.gif

There's now a background and scrolling is a little slower smile

27

Do you draw the gbuf after each ldir (i assume that's what you're using to shift the screen)? Maybe it's the emulator or screenshot, but when it your titlescreen lowers the screen gets divided into columns. Other than that it looks nice smile

Ok, ben, j'ai jeté un coup d'oeuil a ta routine pour afficher le titre, j'ai une petite question pour toi: pourquoi en lieu d'avoir 5 sprites n'en as-tu mieux qu'un seule ?

28

Ce soir je me suis amusé peut-être un peu trop avec ton code:
cOEQ

:P

29

pourquoi en lieu d'avoir 5 sprites n'en as-tu mieux qu'un seule ?


Je maitrise mal l'affichage de sprite à taille variable en fait smile
Mais si tu regardes d'autres parties du code (menu.asm) tu risques d'être encore plus effrayé. .. grin

Tu peux me montrer le code que tu utilises pour le screenshot que tu as fait?

edit: un nouvel effet lorsqu'on perd :
volts_m3.gif

Et la routine qui permet de faire ça :
ld a, 11111111b
call SCROLL_BYTE_EFFECT
ld a, 00000000b
call SCROLL_BYTE_EFFECT
ld a, 11111111b
call SCROLL_BYTE_EFFECT
ld a, 00000000b call SCROLL_BYTE_EFFECT

; Faire une crolling vertical de en utilisant le byte en argument (registre a)
; Cela permet de faire un effet de style
SCROLL_BYTE_EFFECT:
ld b, 64
ld hl, 8e29h

sbe_loop:
push bc
ld b, 12

sbe_loop2:
ld (hl), a
inc hl
djnz sbe_loop2

push af
push hl
call FASTCOPY
pop hl
pop af
pop bc
djnz sbe_loop
ret

30

Bien sûr, je te le montre plus tard peut-être ce soir. J'ai seulement une chose à dire maintenant: tu devrais vraiment faire un CONSTANT du gbuf (#DEFINE gbuf 8e29h ou gbuf .equ 8e29h ou gbuf = 8e29h, ce que tu voudras). Ainsi tu n'auras pas à te rappeler toujours de son valeur !