Factory, Inc.

(by difsod)

Prototype réalisé dans le cadre de la GameCodeur GameJam #15 - "Gestion / Simulation"


Élève (premium pro à vie) de GameCodeur : depuis 5 mois (difsod)

Langage et Framework utilisés : Lua / Pico-8 (mon quatrième projet concret sur cette console)

Code, graphismes et sons : moi-même

Utilisation de librairies et codes externes : non

Temps passé : 46h50, en 30 sessions de travail, divisées en phases différentes (- RÉFLEXION (sur papier) : recherche d'idées, de concepts de jeu, de mise en scène, de mécaniques de jeu, recherche de solutions aux problèmes rencontrés... -> 2H20 / CODAGE : mises en code et débogages -> 38H30 / MISE EN SCÈNE & POLISH : réalisation des sprites, des bruitages, placements dans l'écran de jeu, et améliorations au fur et à mesure des avancées -> 6H00)


Commandes

- Déplacements : flèches du clavier (ou au pad).

- Touche "X" : ouvrir / fermer les portes des "stocks", ouvrir les loquets qui retiennent les colis en bout de ligne.

- "X" et "C" devant la commande de l'ascenseur : faire monter ou descendre...


But du jeu

   Vous incarnez un robot contrôleur, dans une usine. Dans le premier niveau (seul dispo pour le moment), vous devez déposer tous les colis qui sortent des chaînes de production dans le collecteur situé en haut à droite. Seuls les colis groupés par trois sont collectés, lorsque le plateau qui les contient se trouve en face du collecteur (utilisez l'ascenseur pour le placer en face).


Comment j'ai abordé la contrainte du thème :

   Le thème, cette fois-ci, m'a fait un peu reculer au premier abord. Pas qu'il soit particulièrement complexe, ou hors de mes capacités actuelles (enfin je pense), mais parce qu'il me semblait représenter une somme de travail trop importante, et d'éléments variées à implémenter pour obtenir quelque chose d'intéressant (principalement pour le côté gestion, mais aussi tout ce qu'il y a autour : création d'interface, interactions à la souris, multiples éléments graphiques à mettre en place et à ajuster, gestion de l'évolution du jeu dans le temps, cohérence et équilibre des différentes mécaniques du jeu, etc.). J'ai donc décidé très vite de partir sur quelque chose de plus "léger", avec même en tête l'idée que peut-être je ne participerais pas, finalement, au cas où mon prototype ne serait pas suffisamment avancé, ou que j'estimerais qu'il ne présente pas suffisamment d'intérêt (j'aurais au moins continué à apprendre des choses en le faisant, et la pratique n'est jamais inutile). J'ai donc opté pour un petit jeu d'arcade, se déroulant sur un écran unique, avec un concept (et un univers) sur lequel je voulais travailler depuis très longtemps : les chaînes de production dans les usines. Et j'ai opté pour une gestion très basique des choses, avec l'idée de former un premier niveau simple, qui serait par la suite (si je poursuivais le développement après la jam) complété par des niveaux de plus en plus "complexes", et faisant intervenir de nouvelles mécaniques de jeu (j'ai beaucoup d'idées autour de ce concept de départ). Je ne suis donc pas vraiment dans le thème, mais je pense que je m'en approche un peu, dans un certain sens...

Postmortem :

   Je continue mon exploration de la Pico-8 (et de Lua, donc). Je ne crois pas avoir abordé de concepts réellement nouveaux pour moi dans ce prototype, par rapport à ce que j'avais déjà codé auparavant, mais je me suis tout de même heurté à certaines difficultés inédites, et j'en ai donc tout de même tiré des enseignements. J'ai encore privilégié le code, cette fois-ci, au détriment de la forme, car c'est ça que j'essaie d'apprendre, avant tout, avec cette formation (et la participation aux jams). J'ai donc passé assez peu de temps sur les graphismes (par ce que c'est un domaine que je maîtrise mieux), mais je sais que je les améliorerai par la suite (et il n'est même pas impossible que je fasse une version LÖVE, plus tard, avec une fenêtre de jeu plus grande, une résolution plus grande, et des graphismes beaucoup plus détaillés, car j'aimerais aller un peu plus loin avec ce concept, et si la Pico-8 était parfaite pour réaliser ce simple prototype, je pense que j'y serai à l'étroit pour vraiment améliorer tout ça et produire les idées que j'ai en tête).

    Les difficultés : contrairement à ce que j'avais imaginé au départ, la gestion des colis sur les lignes a été assez délicate à traiter. J'avais plusieurs façon de procéder, à ma disposition, et je ne suis pas certain d'avoir choisi la plus simple, ni la plus efficace... Pour gérer la position de chaque colis, il a fallu recourir aux listes, évidemment, et à de nombreux états différents, en fonction de la situation : colis dans le stock (avec porte fermée ou non, et stock plein ou non), colis sur le tapis, avec surveillance constante du nombre de colis devant, afin de déterminer la "destination" (et les "collisions" des uns avec les autres), colis arrivé en bout de ligne, bloqué par le loquet ou non (et gestion du loquet qui ne peut s'ouvrir que si le plateau de l'ascenseur en face contient moins de trois colis - et comme les ascenseurs changent constamment aussi...), et enfin ordre et positionnement inversé des colis sur le plateau de l'ascenseur, chacun devant "pousser" le précédent à la position suivante (ce qui d'ailleurs ne fonctionne plus exactement depuis l'implémentation des loquets, puisque les lignes sont décalées de 8 pixels à gauche, depuis, mais je devrais régler ça d'ici peu)... La gestion des ascenseurs a été encore plus épineuse, en fait. Il a fallu plusieurs tentatives et méthodes différentes (parfois en repartant complètement de zéro), pour obtenir le résultat espéré. J'ai encore utilisé une liste, et plusieurs éléments liés entre eux. Mais la difficulté principale vient du fait que les plateaux peuvent bouger (monter ou descendre), et que leur état change constamment. Ils ont donc une position, qui évolue dans le temps, mais aussi des relations qui changent avec leur environnement, à chacun de leurs mouvements, mais pas de la même manière : quand un plateau se trouve en face d'une ligne donnée, cette ligne n'est plus la même s'il monte ou descend (voire n'existe plus s'il est plus haut ou plus bas), et il faut soit la mettre à jour, soit la supprimer soit la recréer. Et puis il y a le fait que les plateaux, une fois "disparus" en haut ou en bas, doivent réapparaître de l'autre côté, en gardant toujours une trace de leur ordre, ainsi que des colis qui sont sur chacun d'eux (chaque colis est également lié au plateau sur lequel il a été déposé), et enfin il fallait gérer les colis placés dans le collecteur (et toutes les mises à jour que cela implique). Bref, je pensais au début partir sur un concept simple, mais il s'est avéré bien plus tortueux que je ne l'avais soupçonné...

    Les succès : étant donné qu'il reste encore un certain nombre de bugs dans la gestion des différents éléments, je n'ai pas grand chose à dire concernant les "succès" rencontrés. Certes, j'ai réussi à faire fonctionner l'essentiel du jeu comme je l'avais prévu (et même quand je me suis compliqué la tâche en ajoutant l'élément des loquets, qui a "cassé" pas mal des choses mises en place précédemment), mais rien n'est réellement terminé, à mes yeux, donc mon bilan est un peu mitigé... Allez, je peux quand même parler de mon "système" de compteur de colis, qui était quelque chose que je voulais savoir faire depuis un moment, à savoir la gestion "précise" de chaînes de caractères. En fait, le compteur, à l'origine, se contentait d'afficher le nombre de colis, simplement contenu dans une variable. Mais je m'étais dit que ce pourrait être l'occasion pour moi (même si c'est totalement invisible pour le joueur) d'apprendre à gérer un affichage caractère par caractère, en ayant recours à des conversions d'entiers en chaîne de caractères (parce que ça peut servir dans bien des circonstances). Je m'explique : tel que vous le voyez dans le jeu, le compteur ne se sert pas de la fonction "print", mais affiche des sprites (plus petits que les caractères originaux de la Pico-8), pour chacun des trois chiffres. Ainsi, il fallait que je convertisse la variable du nombre de colis en une chaîne de caractères, pouvant comporter de un à trois caractères, et que je fasse correspondre chacun avec le sprite adéquat. Ce n'était vraiment pas très difficile à coder, mais je ne savais pas le faire auparavant. Maintenant je sais (et ça me resservira). Donc c'est un petit succès, malgré tout.

    Bilan : j'ai déjà abordé le plus gros des difficultés que j'ai rencontrées et ce que j'ai appris avec cette game jam, donc je n'ai plus grand chose à ajouter... Je retiens cependant plusieurs petites choses, malgré tout : 1) il ne faut jamais sous-estimer la complexité d'un élément avant d'avoir réellement essayé de le coder (bon, je m'en doutais bien, évidemment, mais ça s'est confirmé de manière particulièrement flagrante, cette fois-ci) -- 2) j'ai beaucoup aimé travailler sur ce concept, et je vais poursuivre l'aventure après la jam (avec, comme je le disais plus haut, une très probable version LÖVE, plus affinée et visuellement plus aboutie) -- 3) même si je n'ai passé que peu de temps sur la gestion des bruitages, je sais qu'ils seront extrêmement importants pour créer le mood de ce jeu, et le rendre réellement "vivant", et je leur accorderai également tout le temps et l'attention qu'ils méritent -- 4) encore une fois, les jams sont des exercices extrêmement formateurs pour moi, et stimulants - je continuerai donc à en faire, aussi souvent que possible, tout au long de mon apprentissage.


A venir... :

- Gestion de niveau gagné (tous les colis ont été collectés - passage au niveau suivant), et de partie perdue (les tapis ont été remplis totalement à trois reprises - game over).
- Modifications des message sur le panneau d'affichage, avec animation, pour informer le joueur de différents paramètres (numéro du niveau en cours, nombre de colis collectés, nombre de colis restants...).
- Écran titre, menu et tuto animé...
- Amélioration des sprites et des bruitages, et polish général.
- Développement (probable) d'une future version, plus avancée et plus aboutie que ce simple prototype, pour un jeu sous LÖVE, avec graphismes détaillés.

StatusPrototype
PlatformsHTML5
Authordifsod
GenreSimulation
Made withPICO-8
Average sessionA few seconds
LanguagesFrench
InputsKeyboard, Gamepad (any)

Leave a comment

Log in with itch.io to leave a comment.