[VG5000] Lode Runner

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Répondre
Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume » 06 mai 2020 16:39

Xavier_ a écrit :
06 mai 2020 15:32
Salut,

J'ai intégré la routine de Markerror à ma version… et personnellement, il m'est difficile de vous dire s'il y a une différence, tellement j'ai joué et débogué le jeu!

Donc,

Ma version sans patch et la version patchée par MarkError (format texte et K7):
LodeRunner_test.zip


Mais, le patch est peut-être plus utile dans la version moins optimisée du jeu, dans sa partie Basic.

Pour synthétiser la méthode de la modification du code original, et sans donner de leçons en la matière…
(Car la programme était bon, et même bien conçu…)

Mais avec une méthode plus simple, avec des copiers/collers, une vue globale du programme, sans retaper toutes les lignes… et sans avoir à imprimer le programme et de le modifier sur papier… comme à l'époque.

Les modifications portent sur une simplification et le regroupement des lignes.
Car moins il y a de lignes, moins il y a d'instructions… plus le programme est rapide.

Donc un petit nettoyage et quelques petites astuces pour éviter des conditions inutiles il est possible d'améliorer un code en Basic.

Petite surprise au niveau de ce Basic qui est plutôt sympa et rapide, mais le manque de fonctions graphiques notamment le test d'un caractère à l'écran, plombent les possibilité de ce Basic.

Donc, au final, le Basic est paresseux, n'aime pas les instructions trop compliquées et les sauts de lignes le ralentissent.

Comme tous les Basics d'ailleurs.
Salut Xavier,
Mis bout à bout, toutes ces modifications peuvent apporter un bon plus!
Et même quand cela n'a pas vraiment d'effet sur la rapidité, c'est mieux de savoir que le code est propre et léger!
Merci!

joaopa
Messages : 500
Enregistré le : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa » 06 mai 2020 19:21

Pour ceux qui ont une vision claire du jeu, pouvez-vous confirmer que seule la couleur CO(6) (echelle de sortie) peut changer au cours du jeu?
Xav; dans ta version ligne 450

Code : Tout sélectionner

450 if BS>0....
ne devrait-il pas être

Code : Tout sélectionner

if BS>20
?

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume » 06 mai 2020 22:37

joaopa a écrit :
06 mai 2020 19:21
(supp modo: quote inutile)
J'ai une vision assez claire du jeu (avant l'apéro) :-)
Oui je te confirme. Uniquement pour l'échelle de sortie qui passe en blanc, puis en réinitialise CO(6) à noir 0 après.

joaopa
Messages : 500
Enregistré le : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa » 06 mai 2020 22:38

Merci Guillaume. Ca va simplifier grandement le passage en assembleur.

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 06 mai 2020 23:21

450 IFBS>0THENBS=BS-20:SOUND 180,1:C=0:D=1:E=T(X,Y):GOSUB418
Mais pas "if BS>20", car c'est la décrémentation du bonus.
If BS>=20 on retire 20. pour avoir 0
Si on a "if BS>20", on reste à 20... et on ne tombe pas à 0.

Avec "450 IFBS>0THENBS=BS-20" on retire 20 points jusqu'à 0, car 20-20=0 BS=0 donc on décrémente plus.

joaopa
Messages : 500
Enregistré le : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa » 06 mai 2020 23:27

OK. autres questions.
J'ai l'impression que

Code : Tout sélectionner

450 IFBS>0THENBS=BS-20:SOUND 180,1:C=0:D=1:E=T(X,Y):GOSUB418
451 IFE=0THENGOSUB920
peut être avantageusement remplacer par

Code : Tout sélectionner

450 IFBS>0THENBS=BS-20:SOUND 180,1:C=0:D=1:GOSUB418
451 IFT(X,Y)=0THENGOSUB920
En effet quoiqu'il arrive E sera remplacé par la ligne 515

Code : Tout sélectionner

515 E=T(NX,NY)
Peux-tu confirmer? Ca aiderait aussi pour l'assembleur....

Autre question:
ligne 534 FOR I=1 TO EN:IFX=EX(I)ANDY=EY(I)THENI=EN
si on rencontre un ennemi alors on sort de la boucle. Mais que fait-on alors de cette information?
Modifié en dernier par joaopa le 06 mai 2020 23:46, modifié 5 fois.

Avatar du membre
Papy.G
Modérateur
Messages : 2240
Enregistré le : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [VG5000] Lode Runner

Message par Papy.G » 06 mai 2020 23:28

Xavier_ a écrit :
06 mai 2020 15:32
Petite surprise au niveau de ce Basic qui est plutôt sympa et rapide, mais le manque de fonctions graphiques notamment le test d'un caractère à l'écran, plombent les possibilité de ce Basic.
C'est un peu lié au choix du VDP, à ses limites, et celles de l'architecture qu'impose sa mise en œuvre. :|
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 06 mai 2020 23:42

534 FOR I=1 TO EN:IFX=EX(I)ANDY=EY(I)THENI=EN
535 NEXT I
:shock:
C'est une boucle de ralentissement, car le Basic est trop…
534 GOSUB 550 : ' Utilisée qu'une fois.
(…)
550 FOR I=1 TO EN
551 IF X=EX(I) AND Y=EY(I) GOTO 560
552 NEXT I
553 RETURN
Le test se fait ailleurs, donc on peu supprimer…
:mrgreen:

Je regarde où...

ici:
692 CURSORX EX(N)+SX:CURSORY EY(N)+SY:ET CO(8):PRINT CHR$(108):IFEX(N)=XANDEY(N)=Y GOTO 560
Quand les monstres se déplacent.

On peut peut-être corriger car parfois, on peut passer sans mourir…
If T(X,Y)=8 GOTO 560

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 07 mai 2020 00:32

Bon, T(x,y) est le tableau miroir du décor, et ne gère pas les monstres…
Donc,
534 FOR I=1 TO EN:IFX=EX(I)ANDY=EY(I)THENM=1
535 NEXT I:IF M GOTO 560

M=0 au début, en ligne 560: M=0
Comme ça, ça marchera avec tous les monstres… d'ici et d'ailleurs.

Du coup, je ne vais plus avoir autant de chance de passer à travers!

[Edit]
Encore plus rapide, grâce à _Sam_ et un ajout de test pour mourir plus vite !
LodeRunner_Basic.zip
(5.05 Kio) Téléchargé 4 fois
Modifié en dernier par Xavier_ le 07 mai 2020 01:30, modifié 1 fois.

joaopa
Messages : 500
Enregistré le : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa » 07 mai 2020 01:08

Encore: je ne vois pas à quoi sert de redéfinir des caractères lignes 942,943,944,945. Il ne manquerait pas un PRINTCHR$(97) avant chaque FOR?

Dans la ligne 940, il y a ET. Le caractère affiché le sera en noir. Sur un fond noir.... C'est fait exprès?

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 07 mai 2020 01:35

C'est fait exprès?
Bein, Oui…
Tu me prends pour qui ?

[Edit: Attention, je ne mets pas forcement d'émoticônes quand je déconne, et parfois ça me sauve quand je déconne réellement! ou c'est le contraire… ça peut être mal pris par les lecteurs, donc soyez vigilent]
C'est fait exprès?
Bein Non, en fait !

Non, car j'ai remarqué que le caractère était modifié à chaque rafraîchissement.

Donc, on affiche, et à chaque redef. de l'UDG, le caractère change (tout seul).
On peut remarquer que TOUS les caractère affichés sont redéfini !
Contrairement au Spectrum qui mémorise l'ancien affichage.

Le problème, c'est que quand une bombe explose, tous les anciennes bombes explosent aussi !

ET/TX par défaut ne change pas la couleur, et utilise les couleurs actives pour le PRINT… apparemment.
Donc, même si c'est du pif, ça marche.
ça sélectionne le mode text/graphique spéciaux pour l'UDG, et non la couleur… enfin, c'est l'esprit de l'erreur de base.

Et c'est là que l'on s'aperçoit que le manuel utilisateur est un peu radin sur les explications...
Modifié en dernier par Xavier_ le 07 mai 2020 09:38, modifié 2 fois.

Guillaume
Messages : 45
Enregistré le : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume » 07 mai 2020 09:00

Xavier_ a écrit :
06 mai 2020 23:42
534 FOR I=1 TO EN:IFX=EX(I)ANDY=EY(I)THENI=EN
535 NEXT I
:shock:
C'est une boucle de ralentissement, car le Basic est trop…
534 GOSUB 550 : ' Utilisée qu'une fois.
(…)
550 FOR I=1 TO EN
551 IF X=EX(I) AND Y=EY(I) GOTO 560
552 NEXT I
553 RETURN
Le test se fait ailleurs, donc on peu supprimer…
:mrgreen:

Je regarde où...

ici:
692 CURSORX EX(N)+SX:CURSORY EY(N)+SY:ET CO(8):PRINT CHR$(108):IFEX(N)=XANDEY(N)=Y GOTO 560
Quand les monstres se déplacent.

On peut peut-être corriger car parfois, on peut passer sans mourir…
If T(X,Y)=8 GOTO 560
Il faut tester si le héro meurt dans les deux cas:
- Quand un ennemi se déplace, s'il se retrouve sur le héro.
- Quand le héro se déplace, s'il se retrouve sur l'un des ennemis (d'ou la boucle).

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 07 mai 2020 09:33

:lol:
Oui, c'est correctionné dans le zip associé; mais je trouvais ce bogue plutôt sympa pour les tests…
On fonce, et on meurt une fois sur deux…

Avatar du membre
Carl
Modérateur
Messages : 11129
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [VG5000] Lode Runner

Message par Carl » 07 mai 2020 10:19

Joaopa, il y a un bug à l'affichage sur un vrai VG5000, le dernier R de Runner...
IMG_5347.JPG
IMG_5347.JPG (448.72 Kio) Vu 121 fois
Carl

Avatar du membre
Xavier_
Messages : 150
Enregistré le : 24 avr. 2020 21:20

Re: [VG5000] Lode Runner

Message par Xavier_ » 07 mai 2020 10:29

Pour les "$" et le placement des "tas de pièces", j'ai remarqué cela sur la version de Joaopa !
Y aurait-il un bug sur l'émulateur (DcVG5k pour moi) avec la fonction RND ? (cf. constatations déjà pointées dans le fil dédié!)

vg5000.JPG
vg5000.JPG (55.75 Kio) Vu 117 fois
(1) (2) : Un problème CursorX ou Y...
(3) : RND ?
(4) : Trois monstres au lieu de deux ! FOR de 1 à X (non compris?)

:shock:

Effectivement, y a un truc qui cloche.

Répondre