Un idée simple, une programmation des plus légères. Et nous voilà à jouer sur un jeu très addictif.
Informations générales
En pensant à son prochain projet 1K pour le ZX-81, DanCresp ne le savait pas, mais ce jeu était en tête et de la recherche d’informations sur Internet. Il décida de créer une première version pour MSX. Les problèmes de temps et la facilité d’utilisation de MS-DOS EUPHORIC sur son ordinateur portable l’ont incité à l’adapter à l’ORIC, en vérifiant auparavant qu’il n’y avait pas de version connue.

Au bout de cinq jours, l’auteur a laissé cette version utilisable, quels que soient les niveaux et les blocs qui apparaissent dans la version d’origine, graphiquement sur la base de la version Spectrum.
Heureusement, l’émulateur EUPHORIC permet, en appuyant sur “F3”, de mapper le clavier ORIC avec les touches du PC, ce qui facilite beaucoup l’introduction du programme. De l’émulateur, il a généré le TAP et de «l’Oricutron» de Windows, il a généré le listing dans un fichier texte utilisé pour déboguer le code source.
La vérité est que Dan est très satisfait car le fonctionnement et la performance sont parfaits ; avec un très bon game design. Le système pour augmenter la difficulté a donné plus mal à la tête parce que le jeu devait être difficile mais réalisable. (NDLR : Dan est décidément un pro du game design)
Les petites choses de la version ORIC
Comme toujours lors de la programmation dans l’ORIC, les graphismes ont dû être repensés car au lieu de la matrice habituelle de 8×8 pixels, nous passons à une matrice de 8×6.
Étant donné que l’ORIC dispose d’un mode texte de 26 lignes et de 40 colonnes, la zone de jeu a les dimensions de la version Amiga 500 d’origine de 7 lignes x 10 colonnes au lieu de la version 7×9 de la version Spectrum.
Dan aurais aimé regarder plus avec la couleur de l’écran, mais le système “particulier” de l’ORIC ne m’a pas permis. Après consultation d’amis graphistes, c’était la meilleure solution. Très semblable à MSX … bleu et jaune.
Pour contrôler le curseur, le clavier est lu à l’aide d’un «PEEK 520» (NDLR : le fameux PEEK #208 si connu des développeurs), ce qui évite les problèmes de lettres majuscules / minuscules et vous garantit de toujours lire la dernière touche enfoncée, en accédant à la mémoire tampon du clavier.
Et pour le son, une fois encore, Dan a utilisé les effets prédéfinis de l’ORIC, démontrant ainsi une faiblesse dans ce domaine …
Et l’eau coule …
La difficulté principale et presque unique du projet a été de faire circuler l’eau à travers le tuyau, et même si au début cela semblait une question assez complexe, après une promenade avec brain-storming inclus, j’ai trouvé une solution très simple et rapide .
Nous avons 7 types de blocs différents pour assembler notre circuit.

Chacun de ces 7 blocs utilise certains des 11 graphiques de tubes différents, numérotés de 97 à 104.

L’eau peut avoir 4 directions possibles, numérotées dans le sens des aiguilles d’une montre.

Nous chargeons la matrice «U $» avec les valeurs DATA des lignes 9600 et 9605. Chacune de ces valeurs contient quatre nombres. La position indique la direction dans laquelle l’eau entre et la valeur de cette position indique la nouvelle direction à prendre par l’eau. Si la valeur est 0, cela signifie que vous avez entré une adresse incorrecte et que le jeu se termine.
Par exemple, la valeur en U du segment de tuyau 3 (coude inférieur / gauche) est «4300». Ainsi, si l’eau entre, elle monte et entre en dessous (direction 1), elle change à gauche (direction 4). Si vous entrez, il avance vers la droite (direction 2), il passe en bas (direction 3). Mais si l’eau vient du haut ou de la gauche, la valeur est «0» et le jeu se termine.
Lors du démarrage d’un niveau, la position initiale du bloc de sortie est calculée et dans la variable “W”, nous stockons l’adresse de la mémoire vidéo VRAM où l’eau commencera à circuler et dans la variable “O” son adresse (1, 2, 3 ou 4).
Lorsque l’eau commence à circuler, nous examinons le graphique correspondant à cette conduite et prenons son code (entre 1 et 11). Sur la base du sens d’entrée de l’eau (1 à 4), nous calculons le changement de direction en fonction de la matrice enregistrée dans «U $» et nous mettons à jour la position dans la VRAM sur laquelle pointe la variable «W» en fonction des valeurs de la matrice «J». Cette matrice contient 4 valeurs: -40, 1, 40 et -1 et est ajoutée à «W» en fonction de la nouvelle adresse pour pointer sur la bonne adresse VRAM afin de calculer le morceau de tuyau suivant.
Ensuite, nous modifions le CHAR du tuyau pour qu’il corresponde à l’eau, au moyen d’un POKE. Si le graphique de la position indiquée par «W» ne correspond pas à celui d’un tuyau, avec ou sans eau, le jeu se termine. J’ai utilisé un POKE car il est plus rapide et plus facile à contrôler (je n’utilise qu’une variable) qu’en utilisant un PLOT et deux variables.
Tout cela, qui semble très compliqué, est résolu pendant le jeu avec 3 lignes de code, 170, 175 et 180. C’est aussi simple que cela.
Une fois le niveau terminé, le même processus est exécuté pour calculer la section construite correcte, avec une copie du code précédent et quelques modifications simples, aux lignes 205, 210 et 215.
Eh bien, rien de plus, je ne peux qu’espérer que cela vous plaise, et oeil… qui accroche le sien…
Je vous invite à l’essayer.



Quelques éléments concernant le programme
Le programme est divisé en 9 blocs:
- Déclaration de la matrice et début du jeu.
- Boucle principale de développement.
- Passer le niveau
- Plusieurs routines.
- Fin du jeu.
- Présentation et début du jeu.
- Préparez et montrez l’aire de jeu.
- Charger UDG.
- DATA avec les UDG du jeu et les valeurs de la matrice.
L’ensemble du programme occupe 91 lignes.
- 10 – Nous définissons les matrices du jeu.
- 30 – Aller au sous-programme redéfinit les caractères et définit les variables globales.
- 100 – Début de la boucle principale. Si le curseur est verrouillé, il passera à la ligne 160.
- 105 – Prenez la touche appuyée. Si aucune touche n’a été enfoncée, le nombre passe à 160.
- 115 – Bloc qui déplace le curseur en fonction de la touche appuyée.
- 135 – Si vous n’appuyez pas sur “Space”, passez à 160.
- 140 – Vérifiez si la case est occupée par un bloc spécial, sautez à 160 si c’est le cas.
- 145 – S’il est occupé par un tuyau, réglez le compteur «N» sur 10 et il nous bloquera.
- 150 – Bloc qui vérifie qu’aucune eau ne passe à travers le bloc.
- 155 – Placez le bloc à la position indiquée en mettant à jour le curseur et la ligne des blocs suivants.
- 160 – Réduit l’heure de l’indicateur “T”. S’il reste encore sauter à 185.
- 165 – Compteur contrôlant le débit d’eau dans les tuyaux. Si vous ne devez pas avancer, passez à 185.
- 170 – Bloc qui contrôle la progression de l’eau dans les tuyaux. Si vous ne pouvez pas, mettez “D = -9” pour interrompre la répétition.
- 175 – Réduit le compteur “D” et vérifie le type de tuyau dans lequel se trouve l’eau.
- 180 – Modifiez le graphique du tuyau et affectez l’adresse correspondante.
- 185 – S’il reste encore du temps dans le compteur «D» et que l’eau circule bien dans la canalisation, retournez à REPEAT de la ligne 100.
- 200 – Si “D = -9” saute à 1900 et met fin à la partie, sinon le niveau est dépassé.
- 205 – Bloc qui vient de remplir d’eau l’ensemble du circuit de tuyaux assemblé.
- 220 – Mettez à jour les points, augmentez le niveau et passez à 2100 pour monter un nouveau niveau.
- 1000 – Routine qui place un bloc dans une certaine position.
- 1100 – Routine qui sélectionne de manière aléatoire un nouveau bloc à quitter lors des prochaines exécutions.
- 1200 – Routine qui montre les cinq blocs suivants à partir.
- 1300 – Place le curseur dans la case sélectionnée.
- 1350 – Supprimer le curseur de la case sélectionnée.
- 1400 – Affiche le marqueur à 8 chiffres avec les points ou l’enregistrement.
- 1900 – Le jeu se termine, met à jour le tableau de bord et marque une pause avant de passer à la présentation.
- 2000 – Écran initial du jeu.
- 2065 – Une touche doit être enfoncée. S’il se situe entre “1” et “9”, il est pris comme niveau initial et le jeu commence.
- 2100 – Initialise les variables et détermine la difficulté du niveau.
- 2105 – Dessine l’aire de jeu.
- 2115 – Calcule les cinq prochains blocs qui vont sortir.
- 2120 – Initialise la position des différentes cases.
- 2130 – Calculez la position de la boîte initiale et enregistrez dans «W» l’adresse VRAM de la première position de l’eau.
- 2135 – Calculer et positionner le curseur.
- 2140 – À partir d’un certain niveau, les blocs avec la clé sont placés à 3 positions de la boîte initiale.
- 3000 – Sélection des couleurs, effacement de l’écran, masquage du curseur et masquage des «CAPS» supérieurs.
- 3005 – Lecture de données UDG.
- 3010 – Assemblez les matrices avec des bandes de caractères.
- 3020 – Lire les DONNÉES avec les directions de l’eau et leurs incréments.
- 3025 – Chargez un tableau avec des chaînes numérotées de «01» à 25» et utilisées par les marqueurs. C’est plus rapide comme ça.
- 9000 – DONNÉES avec graphiques UDG.
- 9500 – DATA avec les différents types de blocs.
- 9600 – DATA avec les directions de l’eau en fonction du type de tuyau.
- 9700 – DATA permet de modifier la valeur «W» lorsque vous pointez vers la VRAM.
Le jeu
Pipe Mania est un jeu vidéo de type “casse-tête” développé en 1989 par The Assembly Line pour Amiga. Plus tard, LucasFilm Games a créé des versions pour d’autres machines sous le nom de Pipe Dream.
Le pipe est confié à un plombier, Alfonzo, qui a pour objectif d’ajuster des tuyaux apparaissant au hasard dans une matrice contenant un robinet d’où sort de l’eau.
Vous devez savoir que deux marqueurs effectuent un compte à rebours:
- “T”: indique le temps restant avant que l’eau commence à traverser les tuyaux.
- “D”: indique le temps restant pour terminer le niveau. Chaque unité correspond à un bloc.
Mettre un bloc de tuyaux dans une boîte occupée nous bloquera quelques instants.
À partir de certains niveaux, des blocs avec une clé ou des segments de tuyau apparaissent et ne peuvent être occupés.
Sur l’écran de présentation, nous pouvons indiquer le niveau, entre 1 et 9, auquel commencer le jeu.
Cette version suit exactement les mêmes mécanismes, mais les phases de bonus et certains types de blocs ont été éliminés.
Contrôles:
Contrôlez le curseur avec “Q” – “A” – “O” – “P” et appuyez sur “Espace” pour placer un segment de tuyaux.

Quelques autres versions

Leave a Reply