Bonjour à tous,
J’aimerais vous présenter mon jeu « Symbol Wars ». Je l’ai développé avec le même moteur de sprites que mon jeu « Sternenschwarm ». (Les sprites suivent des trajectoires prédéfinies).
symbol.dsk (190,3 Ko) (run"start").
Oui, c’est ma tentative de programmer un jeu de Tower Defense pour le CPC. La particularité réside dans le fait que tous les niveaux sont générés de manière procédurale. Vous trouverez plus d’informations à ce sujet plus bas.
J’ai enchaîné un paquet de parties pour tenter de trouver un équilibre entre les ennemis et nos propres armes. Je sais que ce n’est pas encore parfait. Mais j’ai maintenant besoin d’une petite pause, voici donc l’état actuel du projet.
INSTRUCTIONS
Empêchez les symboles ennemis d’atteindre la case d’arrivée : construisez des armes le long du chemin, repoussez chaque vague et survivez à tout le niveau. Chaque ennemi qui passe vous coûte des vies ; à zéro vie, la partie est perdue.
Écran titre et réglages
ESPACE = Lancer la partie
Gauche / Droite = Choisir le niveau
S = Entrer une graine (seed de 0 à 65535) ; même seed = mêmes niveaux
C = Changer de palette de couleurs (12 palettes, par ex. TRON, SIGNAL, EMBER, MINT, ICE, PLASMA)
D = Difficulté : EASY (ennemis 25 % plus faibles, 50 % de vies en plus), NORMAL, HARD (ennemis 25 % plus forts, un tiers de vies en moins)
L = Charger une partie (3 emplacements de sauvegarde)
H = Consulter le Panthéon / Hall of Fame (ESPACE = retour)
Aire de jeu et affichage
La barre d’état se trouve en haut, et en dessous l’aire de jeu avec le chemin. Les ennemis se déplacent du point de départ vers le point d’arrivée ; les deux ont la même apparence, et le côté d’apparition est tiré au sort à chaque vague. Dès le niveau 2 et dans le dernier tiers des vagues, les deux côtés attaquent en même temps.
- Barre d’armes : les cinq armes avec leurs coûts (en jaune) ; celle sélectionnée est soulignée.
- Or et vies : l’or (jaune) et les vies (cœur) sont affichés en haut, à côté du score.
- Lignes d’information : niveau, vague et compte à rebours avant la prochaine vague, avec en dessous des indications comme « CANNOT BUILD HERE » et la priorité de ciblage de la tour sous le curseur.
- Cercle de portée : autour du curseur, un anneau de 24 points indique la portée de l’arme sélectionnée ou de celle située sous le curseur.
- Vitesse de jeu : « X2 », « X4 » ou « /2 » dans la barre d’état.
- Remplissage de l’ennemi : les points de vie restants sont visibles via le remplissage de la forme (4 niveaux, se vidant de bas en haut).
Commandes en jeu
- Touches fléchées / Manette = Déplacer le curseur de construction (maintenir enfoncé = répétition)
- 1 2 3 4 5 = Choisir l’arme : Laser, Missile, Ralentisseur, Bombarde, Prisme
- ESPACE / COPY / Bouton de tir = Construire une arme ; sur une arme existante : l’améliorer au niveau supérieur
- DEL = Vendre l’arme sous le curseur (remboursement de 75 % du prix payé)
- RETURN / ENTRÉE = Lancer la vague suivante immédiatement (secondes restantes converties en or bonus)
- + = Accélérer : ×1 → ×2 → ×4
- − = Ralentir : ×1 → ×½ → ¼
- T = Priorité de ciblage de la tour sous le curseur : FIRST (premier), STRONG (plus fort), WEAK (plus faible), FAST (plus rapide)
- S = Activer/désactiver le son d’ambiance (battement de cœur)
- P = Pause
- ÉCHAP = Demande « Revenir au titre ? » (ÉCHAP = oui, ESPACE = non)
Armes
Chaque arme a 3 niveaux (symbole intérieur fin, double ou plein). Les prix sont indiqués dans la barre d’armes ; les améliorations ont également un coût fixe. Lors du tir, un pixel rouge s’allume brièvement au centre de l’arme.
- 1 Laser (carré avec croix)
Portée courte, très rapide. L’éclair rebondit sur d’autres ennemis. - 2 Missile (cercle avec triangle)
Portée moyenne, salve de deux missiles à tête chercheuse (la moitié des dégâts chacun). - 3 Ralentisseur (losange avec anneau)
Divise par deux la vitesse de jusqu’à 3 / 5 / 8 ennemis (selon le niveau) à portée. - 4 Bombarde (carré lourd avec sphère)
Plus grande portée, lente. Explosion : dégâts complets dans la moitié intérieure du rayon, moitié des dégâts à l’extérieur. - 5 Prisme (triangle dans un triangle)
Ne tire pas, augmente les dégâts de jusqu’à 8 armes adjacentes de 25 / 40 / 60 % selon le niveau.
Ennemis et résistances
Il existe treize formes. Deux cas particuliers :
- Le Bolide : petit et très rapide, insensible au Ralentisseur et à la Bombarde. Seuls le Laser et les Missiles peuvent le toucher. Il apparaît toutes les quelques vagues à partir du niveau 2.
- Le Boss : lent et résistant, un métamorphe : il prend les résistances de la forme qu’il affiche à l’instant T. Un boss apparaît lors de la dernière vague de chaque niveau (plusieurs dans les niveaux supérieurs).
Tous les ennemis ne subissent pas la même quantité de dégâts selon l’arme (pourcentage des dégâts normaux) : - ENNEMI (LASER, MISSILE, BOMBARDE)
- Triangle vertical (100, 100, 100)
- Triangle horizontal (100, 75, 75)
- Cercle (75, 100, 100)
- Carré (100, 75, 125)
- Rectangle horizontal (75, 100, 100)
- Rectangle vertical (50, 125, 100)
- Losange (125, 50, 50)
- Pentagone (75, 100, 125)
- Hexagone (50, 125, 100)
- Heptagone (100, 75, 125)
- Octogone (75, 100, 125)
- Bolide (100, 100, immunisé)
Construire un seul type d’arme finira tôt ou tard par vous confronter à des ennemis contre lesquels elle s’avère inefficace.
Astuces, scores et sauvegarde
- Diversifiez vos défenses : des lasers et missiles pour les ennemis véloces, des bombardes contre les groupes compacts, des ralentisseurs en amont des armes puissantes, et des prismes au milieu de plusieurs tourelles voisines.
- Placez vos armes dans les virages et les goulets d’étranglement pour qu’elles gardent le chemin en ligne de mire le plus longtemps possible.
- Réglez la priorité de ciblage avec T, par exemple sur STRONG pour les bombardes et FIRST pour les lasers.
- Utilisez RETURN pour appeler la vague suivante plus tôt lorsque votre défense est en place : le temps restant vous rapporte un bonus d’or.
- La première vague est la plus facile ; construisez vos premières armes avant son lancement.
Score : Ennemi abattu = 10 × l’or de l’ennemi, +100 par vague, plus un bonus à la fin du niveau. Terminer un niveau sans perdre une seule vie octroie +500 points et 50 pièces d’or supplémentaires pour démarrer le niveau suivant. Si votre score entre dans le Top 8, vous saisissez 3 lettres ; le Panthéon affiche le nom, le score, la graine (seed) et le niveau.
Sauvegarde : Après chaque niveau remporté, appuyez sur S = sauvegarder (emplacement 1 à 3) ou ESPACE = continuer. Le chargement s’effectue depuis l’écran titre avec L. Après une défaite, ESPACE permet de saisir son nom (en cas de score dans le Top 8) puis renvoie à l’écran titre.
Quelques coulisses du projet
Le jeu est en grande partie codé à la main et les graphismes ont été créés manuellement. L’IA a cependant été mise à contribution. Concrètement : toutes les séquences audio ont été générées par ChatGPT. Ce que j’avais essayé de faire moi-même était tout simplement inaudible.
Un niveau est généré en plusieurs étapes, chacune faisant l’objet d’une validation. Si l’une d’elles échoue, le programme passe simplement à la seed suivante.
-
Seed et numéro de niveau
La graine (seed) est un nombre qui détermine la partie entière. À partir d’elle et du numéro de niveau, on obtient une valeur initiale pour le générateur aléatoire. Une seed identique et un même numéro génèrent systématiquement le même niveau. C’est pourquoi on peut partager des niveaux grâce à une seed. -
Le chemin
Un chemin est d’abord tracé. Il commence sur le bord gauche, progresse par segments horizontaux vers la droite, change de ligne de temps à autre et s’arrête à l’arrivée. Le tracé ne comporte que des angles droits et ne se croise jamais lui-même. -
Vérification du tracé
Si le chemin est trop court ou trop long, il est rejeté. De même s’il présente des ruptures ou s’il manque de cases libres adjacentes pour pouvoir construire. Le programme essaie alors la seed suivante jusqu’à en trouver une qui convienne. -
Obstacles
Dans les niveaux plus avancés, des obstacles inconstructibles supplémentaires sont ajoutés. Au début, il y en a très peu. On vérifie ensuite qu’il reste assez de cases libres pour bâtir. -
Crédits et vies
Les crédits et les points de vie sont définis pour le niveau. Les crédits augmentent de niveau en niveau, tandis que les vies diminuent légèrement. La difficulté choisie et l’or de départ viennent moduler ces valeurs par la suite. -
Vagues
Le nombre de vagues augmente au fil des niveaux, avec une part d’aléatoire. La puissance de chaque vague est calquée sur la quantité de crédits qu’il est possible d’amasser jusqu’à ce point. Les premières vagues sont abordables, la dernière d’un niveau se révèle nettement plus redoutable. Dans les niveaux élevés, la courbe de difficulté grimpe plus vite. Le type d’ennemis présents dans une vague dépend de leur position dans la séquence. La dernière vague comprend un boss.
Pourquoi tout cela ?
Les vagues sont calibrées de manière à ce qu’il soit possible de monter une défense viable avec les crédits que l’on peut amasser. Le générateur vérifie ces calculs au préalable. Ainsi, chaque niveau est théoriquement faisable, même s’il est généré de manière procédurale. Enfin… du moins en théorie !
