Rogue Life, ou tabasser des monstres dans une ruelle en toute légalité
Posté le 29/08/2021 11:24
Un projet pas très ambitieux avec Masséna, essentiellement une arène de la taille de l'écran où il faut survivre à des vagues de monstres. Ambiance mêlée et réactive garantie !
Télécharger Rogue Life en bêta : RogueLif.g3a (14 Juillet 2023)
Contient les niveaux 1 à 3
Pas encore de sauvegarde
Voilà à quoi ressemble actuellement le jeu (Juillet 2024) :
Vidéos plus anciennes
Cliquez pour recouvrir
Août 2021
Décembre 2022
Mars 2022
Mars 2023
Vous êtes un aventurier un peu baroudeur et grande gueule, mais vous savez ce que vous faites. Vous voulez donc conquérir les quelques arènes qui sont supposées poser un challenge... ou du moins c'est ce que vous prétendez, en fait c'est juste un défouloir.
Chaque arène (niveau) est indépendante, et consiste en un certain nombre de vagues de monstres ; le but est de survivre jusqu'à la fin (sauf si j'ai la foi d'implémenter un mode infini, dans ce cas bon courage). Les techniques de combat incluent des attaques de base, et quelques compétences physiques et magiques liées à l'équipement.
En termes de progression, a priori il n'y en a pas entre les niveaux. À chaque début d'arène on est niveau 1, et on progresse principalement en équipant des armes ou armures qui drop aléatoirement des monstres ou de façon prédéterminée dans le niveau. Le choix d'équipement disponible, qui vient avec quelques effets (défense, plus d'XP, vitesse, ce genre de choses) et skills (attaques supplémentaires, combos, magie, ce genre de choses) détermine le build pour la durée de l'arène.
Télécharger Rogue Life en bêta : RogueLif.g3a (14 Juillet 2023)
Excellent ! Ça rend super bien !
C'est pleins de petits détails et animations qui donne vraiment l'impression de taper du monstre, genre le scintillement blanc qui le monstre prend un dégâts. Bien vu. Par contre, on ne se rend pas trop compte quand le joueur prend des coups. Une petite animation serait peut être bienvenue 🙂 (tremblement écran, changement de teinte de l'écran, ...)
En terme de gameplay, c'est bien que les monstres reculs un peu à chaque coup, comme il faut rester pressé sur les touches de direction, le joueur avance toujours un peu, ça compense bien. Ce qui est pas mal des fois dans ce style de jeu, c'est d'avoir une touche qui bloque la direction du joueur tant qu'on reste appuyé, afin de le déplacer sans qui change sa direction. Si vous ajoutez des attaques à distance ça pourrait être pas mal d'avoir cette touche
Merci, ça me fait plaisir (et aussi à Masséna je pense) !
Une idée de design c'est de pas en faire trop pour rester d'avoir un truc "vivant" en termes d'animations, de physique, etc. Les sprites de monstres sont possiblement temporaires, c'est moi qui ai fait ce scintillement mais il est pas top.
Quand je dis pas en faire trop c'est vraiment que sur le design. Le code ça c'est passé différemment lol
En fait il y a bien une animation quand on prend des dégâts (et une bien visible en plus !) mais à cause d'une erreur de code elle n'est que rarement visible et n'apparaît pas du tout dans la vidéo. Oups. xD
Le screenshake c'est prévu quoique plutôt pour les gros skills, je vais faire des essais en tous cas. J'ai prévu quelques effets graphiques pas trop dégueulasses (je fais les dessins des mouvement d'attaque).
Ce qui est pas mal des fois dans ce style de jeu, c'est d'avoir une touche qui bloque la direction du joueur tant qu'on reste appuyé, afin de le déplacer sans qui change sa direction. Si vous ajoutez des attaques à distance ça pourrait être pas mal d'avoir cette touche
Que veux-tu, avec tous ces sprites... non seulement ce serait dur à lire sur l'écran (qui a beaucoup de rémanence), mais en plus il faudrait refaire les sprites et gérer la caméra.
Pendant que j'y suis, sur ce projet j'ai codé un convertisseur qui transforme directement les animations Aseprite en objets pour le moteur de jeu. C'est vraiment pratique. Ça utilise la lib py_aseprite (codée par Eiyeron !) pour lire les structures du fichier, et ensuite le rendu est fait vers PIL avant de convertir avec les fonctions standard de fxconv.
Ça donne des trucs très sympas. Par exemple, si on prend cette animation de Masséna :
J'indique de la convertir avec les métadonnées suivantes :
Et le convertisseur se charge de détecter les animations nommées, de créer une spritesheet compacte avec les délais corrects pour chaque frame, et générer les structures appropriées (qui sont définies dans le moteur de jeu) :
[ 44%] Building FXCONV object CMakeFiles/addin.dir/assets-cg/player/player_down.aseprite
Skipped 0x2007
player_down.aseprite (24x24) has 4 animations:
'Idle': Frames 0 to 1 (800 ms, 800 ms)
'Walking': Frames 2 to 5 (150 ms, 150 ms, 150 ms, 150 ms)
'Hit': Frames 6 to 9 (50 ms, 50 ms, 200 ms, 200 ms)
'Attack': Frames 10 to 12 (100 ms, 50 ms, 200 ms)
Dans le code, c'est immédiat ensuite (les 4 directions sont combinées automatiquement pour sélectionner selon le mouvement du joueur).
Une attaque qu'on trouve dans les équipements un peu bourrins, et très orientés sur l'attaque. Chaque cible est touchée plusieurs fois avec beaucoup de dégâts et de knockback, mais pour s'en servir efficacement il faut se jeter dans les rangs ennemis. Un canon de verre dans toute sa splendeur.
Je pensais avoir parlé du second skill, Judgement, mais non, du coup le voilà en même temps que le troisième, Bullet.
Judgement est une attaque très précise qui ne touche qu'un ennemi mais qui fait un paquet de dégâts. Une élimination chirurgicale plutôt dans le style des équipement d'attaque raffinés. Pas sans danger puisqu'il faut être au corps-à-corps pour l'utiliser.
Bullet est une attaque magique. Comme Shock, on n'est pas vraiment dans la finesse, le but est vraiment de faire du dégât rapide sur le menu fretin qui s'amasse en groupes (les slimes je pense à vous). Une attaque pour les armes magiques, évidemment.
Sur la vidéo ci-dessous je les utilise sans restriction mais en réalité ce sera rare d'avoir plus d'un skill à la fois, et bien sûr il y aura un cooldown.
Eeeet voilà un nouvel aperçu (jouable) du jeu. Le g3a est joint ici.
J'ai mis à jour le post principal. Un énorme merci à Massena pour les reskins qui carry le jeu comme pas deux.
Actuellement les stats sont ajustées, mais les skills non. Normalement vous aurez pas tous ces skills en même temps, et ils auront des cooldowns. En échange il y aura quelques équipements pour booster les stats et accéder aux skills.
Attention F6 démarre la capture vidéo, ce qui freeze le programme (sauf si vous connectez l'USB et que vous lancez fxlink avec fxlink -i).
@Massena Je viens de pousser de quoi faire des variations de palette sur les ennemis (et le joueur aussi d'ailleurs). D'abord j'ai passé tous les sprites en indexé. Si tu veux faire une variation, tu commences par ouvrir le sprite à modifier :
Ensuite tu modifies la palette à loisir, mais sans enregistrer le sprite :
Une fois que tu as fini, tu sauvegardes la palette toute seule à part, ici dans fire_slime_palette.aseprite.
Puis tu peux fermer le sprite original, toujours sans l'enregistrer.
Pour obtenir les animations modifiées, crée deux fichiers .txt (vides) au lieu de .aseprite dans le dossier enemies :
% ll assets-cg/enemies/fire_slime_*
Permissions Size User Date Modified Name
.rw-r--r-- 0 el 30 Dec 10:20 assets-cg/enemies/fire_slime_left.txt
.rw-r--r-- 328 el 30 Dec 10:20 assets-cg/enemies/fire_slime_palette.aseprite
.rw-r--r-- 0 el 30 Dec 10:20 assets-cg/enemies/fire_slime_right.txt
L'image source et la palette sont indiquées dans fxconv-metadata.txt :
Je voulais publier une version sérieuse aujourd'hui (avant de partir en Écosse), mais les préparatifs m'ont plus occupé que ce que j'imaginais, et le retour du serveur Minecraft de Breizh a bien réduit le temps qui me restait. Désolé Masséna. x)
En attendant on a quand même bien avancé, avec :
Des animations sur la map et une revue complète des animations d'attaques par Masséna ;
Un menu principal, incomplet mais décent et donnant un aperçu des niveaux et avec une jolie transition ;
Une mécanique d'XP : au début de chaque arène le joueur est niveau 1, et monte en niveau en tuant des monstres (super animation de Masséna d'ailleurs !). L'XP est déterministe pour l'instant mais ça changera plus tard.
Des IAs décentes : les slimes foncent sur le joueur, les chauves-souris attaquent et esquivent, les gunslingers attaquent à distance. Toute la variété du jeu final n'est pas encore là, mais on s'en approche.
Des items au sol ; pour l'instant juste un item qui restaure un partie des PVs apparaît au début du niveau. Je vous conseille d'aller le chercher, bouger dans la map change complètement la dynamique de l'arène.
Dans le futur, des armes/équipements apparaîtront comme items et guideront les skills disponibles.
Vous pouvez tester le jeu dans le build ci-dessous. Le niveau 1 est un bon exemple de ce à quoi le jeu ressemblera. Le niveau 2 contient juste une grosse vague pleine de slimes. Et @RDP pour la prochaine édition
Comment gères tu la transparence du menu quand tu appuies sur F6 ?
C'est super beau. Par contre, du coup les "blobs" ont leur animation très ralentie, est-ce un effet voulu ou est-ce lié à la transparence qui affale le framerate ?
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
J'ai du code spécial pour assombrir la VRAM, avec une formule basique. Mais c'est très lent, si tu affiches les perfs avec OPTN+F5 tu peux voir le coup que ça prend. C'est le genre de trucs qu'Azur (le moteur de rendu de TLT) améliore énormément.
Oui c'est voulu que tout soit ralenti, c'est un "bullet time". F6 ne montre pas grand-chose actuellement mais dans le futur F5 servira d'inventaire pour consulter et équiper les objets ramassés, et le jeu continue de progresser pendant ce temps-là.
Ce topic n'est jamais assez à jour. Je fais une vidéo bientôt, mais voici quelques highlights depuis la dernière update :
Ajout des objets: souvent des potions aux effets variés, mais aussi des équipements (pour l'instant juste quelques armes). Les équipements détermineront (ce n'est pas encore codé) les stats du joueur ainsi que les skills disponibles, il faut donc bien s'en servir !
Ajouté une prévisualisation des vagues à venir ; entre les vagues il peut aussi y avoir des délais, et des objets qui apparaissent. Les objets apparaissent toujours à un endroit aléatoire de la map, ce qui peut rendre leur collecte assez aventureuse/difficile.
Une nouvelle GUI pour visualiser l'inventaire et le statut du joueur (screen ci-dessous) ; la précédente était assez mauvaise.
Masséna a fait plein de sprites que j'ai pas encore intégrés. o(x_x)o
Niveau avancement/fonctionnalités, on est à la toute toute fin : en fonctionnalités pures il ne reste plus qu'à recalculer les stats et skills du joueur en fonction de l'équipement. Mais on va sans doute aussi rajouter des ennemis/skills ce qui demandera un peu de code côté IA.
En termes de contenus y'a toujours qu'un seul niveau sérieux, mais Masséna a déjà des plans assez stylés pour tous les ennemis du jeu (une douzaine environ si ma mémoire est bonne, plus les recolorations/variations) et assez de tilesets pour les 6 prochains mois.
Une bêta avec un ou deux niveaux proches de leur état final est, je pense, imminente. x3
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 29/08/2021 11:44 | #
Excellent ! Ça rend super bien !
C'est pleins de petits détails et animations qui donne vraiment l'impression de taper du monstre, genre le scintillement blanc qui le monstre prend un dégâts. Bien vu. Par contre, on ne se rend pas trop compte quand le joueur prend des coups. Une petite animation serait peut être bienvenue 🙂 (tremblement écran, changement de teinte de l'écran, ...)
En terme de gameplay, c'est bien que les monstres reculs un peu à chaque coup, comme il faut rester pressé sur les touches de direction, le joueur avance toujours un peu, ça compense bien. Ce qui est pas mal des fois dans ce style de jeu, c'est d'avoir une touche qui bloque la direction du joueur tant qu'on reste appuyé, afin de le déplacer sans qui change sa direction. Si vous ajoutez des attaques à distance ça pourrait être pas mal d'avoir cette touche
Stylé, bravo
Citer : Posté le 29/08/2021 11:46 | #
Quelle surprise ! /s
Très heureux de voir le projet officialisé. Bon courage
Citer : Posté le 29/08/2021 12:59 | #
vivement la version monochrome
Citer : Posté le 29/08/2021 13:37 | #
vivement la version monochrome
Tu seras libre de porter RL quand le jeu sera terminé (je suppose, si ils utilisent une license libre).
Citer : Posté le 29/08/2021 21:05 | #
Merci, ça me fait plaisir (et aussi à Masséna je pense) !
Une idée de design c'est de pas en faire trop pour rester d'avoir un truc "vivant" en termes d'animations, de physique, etc. Les sprites de monstres sont possiblement temporaires, c'est moi qui ai fait ce scintillement mais il est pas top.
Quand je dis pas en faire trop c'est vraiment que sur le design. Le code ça c'est passé différemment lol
En fait il y a bien une animation quand on prend des dégâts (et une bien visible en plus !) mais à cause d'une erreur de code elle n'est que rarement visible et n'apparaît pas du tout dans la vidéo. Oups. xD
Le screenshake c'est prévu quoique plutôt pour les gros skills, je vais faire des essais en tous cas. J'ai prévu quelques effets graphiques pas trop dégueulasses (je fais les dessins des mouvement d'attaque).
Je me note d'essayer ça !
vivement la version monochrome
C'est pas prévu pour l'instant
Citer : Posté le 29/08/2021 21:22 | #
nonnnnnnnnn
Citer : Posté le 30/08/2021 11:47 | # | Fichier joint
Que veux-tu, avec tous ces sprites... non seulement ce serait dur à lire sur l'écran (qui a beaucoup de rémanence), mais en plus il faudrait refaire les sprites et gérer la caméra.
Pendant que j'y suis, sur ce projet j'ai codé un convertisseur qui transforme directement les animations Aseprite en objets pour le moteur de jeu. C'est vraiment pratique. Ça utilise la lib py_aseprite (codée par Eiyeron !) pour lire les structures du fichier, et ensuite le rendu est fait vers PIL avant de convertir avec les fonctions standard de fxconv.
Ça donne des trucs très sympas. Par exemple, si on prend cette animation de Masséna :
J'indique de la convertir avec les métadonnées suivantes :
custom-type: aseprite-anim
name_regex: (.*)\.aseprite anims_\1
center: 12, 17
next: Idle=Idle, Walking=Walking
profile: p8
Et le convertisseur se charge de détecter les animations nommées, de créer une spritesheet compacte avec les délais corrects pour chaque frame, et générer les structures appropriées (qui sont définies dans le moteur de jeu) :
Skipped 0x2007
player_down.aseprite (24x24) has 4 animations:
'Idle': Frames 0 to 1 (800 ms, 800 ms)
'Walking': Frames 2 to 5 (150 ms, 150 ms, 150 ms, 150 ms)
'Hit': Frames 6 to 9 (50 ms, 50 ms, 200 ms, 200 ms)
'Attack': Frames 10 to 12 (100 ms, 50 ms, 200 ms)
Dans le code, c'est immédiat ensuite (les 4 directions sont combinées automatiquement pour sélectionner selon le mouvement du joueur).
extern anim_frame_t *anim_player_Idle[4];
/* anim.c */
ANIM_4DIRECTIONAL(anim_player_Idle);
/* main.c */
entity_set_anim(player, anim_player_Idle);
Voilà c'était l'instant devlog. La prochaine fois je reviens avec un skill un peu plus flashy que les attaques normales. x3
Citer : Posté le 30/08/2021 15:16 | # | Fichier joint
Et voilà le premier skill : Shock !
Une attaque qu'on trouve dans les équipements un peu bourrins, et très orientés sur l'attaque. Chaque cible est touchée plusieurs fois avec beaucoup de dégâts et de knockback, mais pour s'en servir efficacement il faut se jeter dans les rangs ennemis. Un canon de verre dans toute sa splendeur.
Citer : Posté le 17/10/2021 19:20 | # | Fichier joint
Je pensais avoir parlé du second skill, Judgement, mais non, du coup le voilà en même temps que le troisième, Bullet.
Judgement est une attaque très précise qui ne touche qu'un ennemi mais qui fait un paquet de dégâts. Une élimination chirurgicale plutôt dans le style des équipement d'attaque raffinés. Pas sans danger puisqu'il faut être au corps-à-corps pour l'utiliser.
Bullet est une attaque magique. Comme Shock, on n'est pas vraiment dans la finesse, le but est vraiment de faire du dégât rapide sur le menu fretin qui s'amasse en groupes (les slimes je pense à vous). Une attaque pour les armes magiques, évidemment.
Sur la vidéo ci-dessous je les utilise sans restriction mais en réalité ce sera rare d'avoir plus d'un skill à la fois, et bien sûr il y aura un cooldown.
Citer : Posté le 18/10/2021 09:31 | #
Très stylé tout ça. Bravo !!
Ou peut on télécharger l’add in ?
Citer : Posté le 18/10/2021 11:39 | # | Fichier joint
(Attention tu navigues sur dev.planet-casio.com ce qui crée des liens pas idéaux dans la shoutbox pour le reste des visiteurs)
Il n'y a pas de version officielle encore, mais je te joins un G3A. VARS pour accéder aux menus de debug si ça t'amuse
Citer : Posté le 18/10/2021 17:20 | #
Merci !
Citer : Posté le 29/12/2021 12:29 | # | Fichier joint
Eeeet voilà un nouvel aperçu (jouable) du jeu. Le g3a est joint ici.
J'ai mis à jour le post principal. Un énorme merci à Massena pour les reskins qui carry le jeu comme pas deux.
Actuellement les stats sont ajustées, mais les skills non. Normalement vous aurez pas tous ces skills en même temps, et ils auront des cooldowns. En échange il y aura quelques équipements pour booster les stats et accéder aux skills.
Attention F6 démarre la capture vidéo, ce qui freeze le programme (sauf si vous connectez l'USB et que vous lancez fxlink avec fxlink -i).
Edit : J'ai oublié le @RDP bien sûr
Citer : Posté le 29/12/2021 12:51 | #
Tu spammes pas F4 dans un coin, 0/20
Citer : Posté le 30/12/2021 10:23 | #
@Massena Je viens de pousser de quoi faire des variations de palette sur les ennemis (et le joueur aussi d'ailleurs). D'abord j'ai passé tous les sprites en indexé. Si tu veux faire une variation, tu commences par ouvrir le sprite à modifier :
Ensuite tu modifies la palette à loisir, mais sans enregistrer le sprite :
Une fois que tu as fini, tu sauvegardes la palette toute seule à part, ici dans fire_slime_palette.aseprite.
Puis tu peux fermer le sprite original, toujours sans l'enregistrer.
Pour obtenir les animations modifiées, crée deux fichiers .txt (vides) au lieu de .aseprite dans le dossier enemies :
Permissions Size User Date Modified Name
.rw-r--r-- 0 el 30 Dec 10:20 assets-cg/enemies/fire_slime_left.txt
.rw-r--r-- 328 el 30 Dec 10:20 assets-cg/enemies/fire_slime_palette.aseprite
.rw-r--r-- 0 el 30 Dec 10:20 assets-cg/enemies/fire_slime_right.txt
L'image source et la palette sont indiquées dans fxconv-metadata.txt :
base: slime_left.aseprite
palette: fire_slime_palette.aseprite
fire_slime_right.txt:
base: slime_right.aseprite
palette: fire_slime_palette.aseprite
Après t'es pas obligé de faire ces gourouteries avec fxconv, parce que pour tester en jeu il faut encore modifier du code donc c'est pas immédiat. x_x
Citer : Posté le 24/02/2022 21:07 | # | Fichier joint
Je voulais publier une version sérieuse aujourd'hui (avant de partir en Écosse), mais les préparatifs m'ont plus occupé que ce que j'imaginais, et le retour du serveur Minecraft de Breizh a bien réduit le temps qui me restait. Désolé Masséna. x)
En attendant on a quand même bien avancé, avec :
Dans le futur, des armes/équipements apparaîtront comme items et guideront les skills disponibles.
Vous pouvez tester le jeu dans le build ci-dessous. Le niveau 1 est un bon exemple de ce à quoi le jeu ressemblera. Le niveau 2 contient juste une grosse vague pleine de slimes. Et @RDP pour la prochaine édition
Tester Rogue Life bêta
Citer : Posté le 24/02/2022 21:32 | #
Superbe ! Bravo à tous les deux.
Comment gères tu la transparence du menu quand tu appuies sur F6 ?
C'est super beau. Par contre, du coup les "blobs" ont leur animation très ralentie, est-ce un effet voulu ou est-ce lié à la transparence qui affale le framerate ?
Citer : Posté le 24/02/2022 21:34 | #
J'ai du code spécial pour assombrir la VRAM, avec une formule basique. Mais c'est très lent, si tu affiches les perfs avec OPTN+F5 tu peux voir le coup que ça prend. C'est le genre de trucs qu'Azur (le moteur de rendu de TLT) améliore énormément.
Oui c'est voulu que tout soit ralenti, c'est un "bullet time". F6 ne montre pas grand-chose actuellement mais dans le futur F5 servira d'inventaire pour consulter et équiper les objets ramassés, et le jeu continue de progresser pendant ce temps-là.
Citer : Posté le 18/03/2022 22:32 | # | Fichier joint
Ce topic n'est jamais assez à jour. Je fais une vidéo bientôt, mais voici quelques highlights depuis la dernière update :
Niveau avancement/fonctionnalités, on est à la toute toute fin : en fonctionnalités pures il ne reste plus qu'à recalculer les stats et skills du joueur en fonction de l'équipement. Mais on va sans doute aussi rajouter des ennemis/skills ce qui demandera un peu de code côté IA.
En termes de contenus y'a toujours qu'un seul niveau sérieux, mais Masséna a déjà des plans assez stylés pour tous les ennemis du jeu (une douzaine environ si ma mémoire est bonne, plus les recolorations/variations) et assez de tilesets pour les 6 prochains mois.
Une bêta avec un ou deux niveaux proches de leur état final est, je pense, imminente. x3
Citer : Posté le 18/03/2022 22:33 | # | Fichier joint
Et le G3A pour ceux qui voudraient tester : RogueLif.g3a
Notez que la difficulté est un peu trop élevée à mon goût pour l'instant.