Stringman est un test de moteur de jeu de plateforme basé sur le module tile map de ma lib perso.
Après avoir créé un éditeur de map en tiles, il m'a fallu le tester, et de fil en aiguille...
Comme ce qui m'amuse consiste généralement à créer des surcouches simplifiées, j'y ai donc également inclus un module de météo.
Utiliser un pad ou flèches + (bouton 0) espace pour le saut + (Rtrigger) LSHIFT pour courir.
La touche C permet de modifier le type de suivi de la caméra.
Les animations étant plus poussées que sur mon projet précédent, j'utilise une matrice d'adjacence. C'est un concept idéal : à la fois très
simple à mettre en œuvre et d'une souplesse incroyable. Je ne peux que le recommander.
Toujours le même module d'animation que pour Revolver, module faisant partie de ma lib perso.
Les techniques utilisées :
Tile mapping.
Jusque là, on sait ce que c'est. J'ai voulu programmer un éditeur de map un minimum avancé. et il a bien fallu le tester.
Il est multi-couche avec la possibilité d'animer les tiles et de leur attribuer jusqu'à 10 propriétés en plus de propriétés de base comme
les tiles "durs" pour les murs et les sols.
Il existe également la possibilité de modifier la texture de référence des tiles. L'idée m'est venue de Zelda sur super NES dans lequel il y a 2 mondes
basés sur la même carte : on savait faire des économies de mémoire en ce temps là.
Il est même possible en passant par la gif_Lib de se servir d'une texture animée à partir d'un fichier GIF... Moyennant un passage à 255 couleurs.
Bien entendu, tout le monde aura reconnu d'où viennent les tiles utilisées dans ce niveau. L'édition étant généralement mon point faible et l'objectif de base juste
de tester l'éditeur, je ne me suis pas donné la peine de créer des tiles originaux. On verra si ça devient un jeu.
Matrice d'adjacence.
Bien que je ré-utilise le module d'animation de Revolver, animer un personnage est bien plus complexe qu'une animation de shmup.
Pour les connaisseurs, je me suis basé sur le jeu Rayman Legends pour définir les actions que devrait accomplir le personnage.
Ayant pas mal d'exceptions à gérer, je me suis rapidement emmêlé dans du code un peu trop spaghetti à mon goût. Après avoir appelé à l'aide,
je me suis vu conseillé l'usage d'une matrice d'adjacence (merci à Fvirtman... Encore). Rien à dire, c'est juste génial.
À peine 20 minutes à implémenter, débug compris.
D'une souplesse incroyable avec la possibilité de gérer individuellement les exceptions pour le passage d'un état à l'autre, le tout dans du code bien rangé.
Je proposerai bientôt dans la rubrique dev la version que j'utilise ici.
La CEV_lib.
C'est ma lib perso en surcouche de la SDL. Ce projet m'a permi de l'étoffer un peu de nouveaux modules. Je suis assez satisfait de me rendre compte que
les modules les plus anciens n'ont pas eu à être modifiés ou adaptés pour ce projet. C'est signe que ce n'était pas trop mal pensé au moment de la création.
Certains ont presque 10 ans et ont tout juste été un peu révisés pour le passage à la SDL 2.
La partie animation est donc identique à celle de Revolver (SDL 2). Je suis même plutôt surpris du résultat pas trop dégueu.
Seul truc original de cette mini démo : le sprite. Je me suis personnellement chargé de le dessiner image par image (et oui...).
Updates :
Avril 2021 :
Pas mal d'autres projets en parallèle :
Travail princialement en labo sur des modules, par exemple un reflet dans l'eau a été ajouté au premier niveau de la démo.
D'autres trucs n'ont pas été intégrés car j'attend de savoir où je vais avant de mettre le bordel dans le code en ajoutant des trucs au fur et à mesure.
On peut voir en vidéo un essai pour un niveau où il faudra monter une tour.
La tour est entièrement construite à partir d'une tuile unique, les affichages sont pré-calculés.
Mai 2020 :
"Stringman" devient "Bonhomme", quelle imagination débordante ! :
Refonte du perso et des animations, stringman était peu visible sur les fonds plus sombres des niveaux à venir...
Reprise des images pour remplacer le texte "stringman" par "bonhomme".
Implémentation d'une petite démo comme on en voyait sur Amiga, codée au plus près des techniques de l'époque.
Je complète la CEV_Lib en parallèle pour la gestion des bmp fonts, objectif old-school oblige. Et éventuellement me passer de SDL_ttf pour la suite.
10 Avril 2020 :
Avancement des mécaniques :
Ajout d'un test de bumper.
Configuration de la machine à état pour intégrer la réaction au bumper.
Ajout de sons.
06 Avril 2020 :
Avancement des mécaniques :
Test de la flexibilité de la méthode de gestion des objets.
Ajout d'une tyrolienne à cet effet.
Validation de la méthode de warp d'un niveau à l'autre, essai avec une zone "cachée" dans le niveau de test.
Correction d'un problème d'écrasement des profils lors d'un chargement de profil.
Modification de la gestion des profils.
Des pièces bonus ramassées n'apparaissent plus au rechargement d'un niveau (pour ce profil).
Le jeu redémarre depuis la pièce que l'on a quitté si on quitte et redémarre la partie.
28 Mars 2020 :
Travail sur les objets :
Implémententation des plateformes, avec paramétrage depuis l'éditeur de maps.
Révision des fonctions de collision pour une précision améliorée et permettre de monter / s'accrocher aux plateformes.
Il reste un petit bug occasionnel lorsque l'on grimpe sur une plateforme, un petit saut débloque le perso.
26 Mars 2020 :
Pendant que je regarde le monde se zombifier depuis ma fenêtre :
Ajout de la gestion d'objets : Mise en place d'une méthode générique qui devra me permettre d'ajouter toutes sortes d'objets interactifs ou non
(plateformes, bonus et autres idées qui me viendront en cours de route). Premier test avec les pièces bonus.
Mort du perso au contact des trolls avec une animation déjà en place qui sera adaptée plus tard.
Quelques améliorations sur le programme d'édition des maps pour intégrer des besoins supplémentaires.
Sauvegarde automatique qui devra, plus tard, permettre de reprendre au niveau en cours avec choix des profils (5).
Gestion de ces profils notamment avec la possibilité de remplacer un profil existant lors de la création d'une nouvelle partie.
Les prochains jours seront consacrés à des essais d'insertion de plateformes mobiles.
Décembre 2019 / Janvier 2020 :
Beaucoup d'édition pour étoffer les ressources.
Création et ajout du hub programme.
Création et ajout d'une intro avec le scénario du jeu.
Création d'un tile set (original) supplémentaire pour un nouvel environnement (pas dans la démo).
Modification de la gestion des backgrounds pour accepter les images GIF. La parallaxe en Y reste à implémenter...
Création des animations de la mort du perso (brûle et coule) et activation par environnement. Reste d'autres morts à créer.
Création de nouveaux backgrounds (+2) pour des mondes à venir.
Création et ajout du menu principal du jeu (pas dans la démo).
Création et ajout d'une outro avec les crédits.
Création et ajout d'une présentation de chapitre.
Création de divers images et ressources pour le jeu.
Réorganisation du code vers un jeu multi-niveaux au lieu d'une démo.
Package de fichiers descripteurs pour la météo pour éviter le codage en hard.
Package de fichiers descripteurs des niveaux pour la même raison.
Correction d'un défaut de calcul des trajectoires qui impliquait qu'on finissait
parfois coincé dans le sol ou qu'on se faisait "éjecter" d'une marche : toujours penser à multiplier AVANT de diviser ^^.
20 Juillet 2019 :
Ajout d'une escalade des murs lorsque l'on arrive en courant ou que l'on saute vers un mur en étant au pied de celui-ci.
Je travaille sur la création de tuiles originales et une nouvelle map de démo.
16 Juin 2019 :
Toujours du nettoyage, évolution vers de la gestion multi-niveaux pour passer à l'édition.
Bonne nouvelle, j'ai rencontré une bonne âme prête à s'occuper de l'aspect visuel du jeu.
Ajout d'un pnj de sauvegarde de position pour valider la variabilité du nombre de type de pnj dans un niveau.
Automatisation de la création des backgrounds avec parallaxe à partir d'un fichier de configuration puis un format de fichier dédié.
08 Juin 2019 :
Ajout, juste pour me faire plaisir, d'une petite intro. J'espère que les vieux comme moi sauront apprécier le clin d'œil.
Correction d'un défaut dans la gestion de la parallaxe.
Principalement des modifications dans l'agencement du code pour faire du propre.
Ajout à la lib de l'extraction de musique depuis le paquage des ressources.
01 Juin 2019 :
Avancement de ce qui a été commencé sur les sprites de trolls. Début du nettoyage du code pour sortir d'un code "labo" vers du code "projet",
notamment pour réduire la difficulté lors des relectures / corrections / ajouts.
Il reste un bug dans le moteur à supprimer. Sa présence est due à un état du joueur qui n'est pas encore implémenté dans la machine à état.
La prochaine étape va consister à inclure du multi-niveaux type Mario. J'envisage également la possibilité d'un niveau infini à partir du collage
de différents tronçons de carte de façon aléatoire (mais pas trop). Je ne sais juste pas comment je vais m'y prendre pour l'instant.
Intro, menus et options pour plus tard, c'est quelque chose de simple à faire et me concentre donc pour l'instant sur le fond du jeu.
Même punitions pour sons et musique.
Animations des trolls, suivent le joueur, s'arrêtent aux murs et devant le vide.
Ajout des tests de hitbox, tuer les trolls en sautant dessus. Maintenir saut pour rebondir plus haut.
Création et ajout de la parallaxe du background. Parallaxe sur l'axe des ordonnées à ajouter.
Ajout du package des ressources. Partie de ma lib.
Quelques modifications comportementales pour améliorer la jouabilité comme l'ajout de la combinaison "direction + saut" contre "haut" seul
pour escalader un mur, ainsi que l'accélération de cette animation.
12 Mai 2019 :
Ajout d'un sprite "troll" pour test d'integration.
Les animations ont été créées à partir du site piskel alors que j'utilise généralement the Gimp.
Bon... Je ne suis pas Michel Ange, ce n'est pas nouveau.
Le test vise à tester l'integration rapide de pnj à partir de l'éditeur de map.
Chacun possède sa propre matrice d'adjacence, ce qui devrait me permettre de leur attribuer une pseudo IA.
Les premiers tests seront sur le changement de direction face aux murs, la peur du vide et se "jeter" sur le joueur.
Pas d'interaction avec le joueur.
Pas de liaison au moteur "physique", ils ne subissent pas la gravité pour l'instant et sont juste posés et animés.
Avril 2019 :
Ayant un peu laissé tombé, j'ai eu un regain d'intérêt suite à la
présentation du jeu de plateforme d'un camarade sur OC.
Cette reprise est orientée sur 2 grands axes, une refonte visuelle et une jouabilité accrue avec toujours Rayman Legends en référence pour les capacités du personnage.
Donc une réduction de la définition du jeu pour un effet gros pixels (ig : Kingdom Classic) et résolution des probèmes qui vont avec.
Passage des coordonnées du joueur sur des réels contre entiers. Principalement pour résoudre les problèmes liés aux vitesses inférieures à 1,
ce qui m'empêchait d'ajuster les valeurs de déplacement et de saut au mieux.
Sélection de la définition automatique selon affichage client 4/3 - 16/9 - 16/10.
Ajout et améliorations des animations. On peut maintenant s'accrocher aux rebords + certaines animations de transitions.
Egalement une animation "ennuie". D'autres à venir pour lisser le visuel.
Tiles 32 px vers tiles 16 px.
Affinement des paramètres vitesse et inertie pour s'integrer au paysage. Déplacements et sauts cohérents par rapport aux tiles.
Résolution des soucis de conservation d'énergie lors des sauts et des chutes. Notamment lors des changements de direction en l'air
Affinement des contrôles pour une jouablitité accrue.
Level design modifié pour un niveau type tuto. Tileset réduit dans la démo pour résoudre
le problème lié aux grandes textures sur des machines plus modestes.
Lissage des repositionnements "forcés" comme par exemple lorsque l'on attrappe un anneau.