[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

Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

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 : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

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 : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

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 : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

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

Re: [VG5000] Lode Runner

Message par Xavier_ »

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 : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

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?
Dernière modification par joaopa le 06 mai 2020 23:46, modifié 5 fois.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [VG5000] Lode Runner

Message par Papy.G »

Xavier_ a écrit : 06 mai 2020 15:32Petite 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.
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

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
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

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é 96 fois
Dernière modification par Xavier_ le 07 mai 2020 01:30, modifié 1 fois.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: [VG5000] Lode Runner

Message par joaopa »

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?
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

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...
Dernière modification par Xavier_ le 07 mai 2020 09:38, modifié 2 fois.
Guillaume
Messages : 46
Inscription : 26 avr. 2020 15:24
Localisation : Nice

Re: [VG5000] Lode Runner

Message par Guillaume »

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).
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

: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 de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [VG5000] Lode Runner

Message par Carl »

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) Consulté 3383 fois
Carl
Xavier_

Re: [VG5000] Lode Runner

Message par Xavier_ »

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) Consulté 3379 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