Projet mis en avant

Reflectron

Casse-brique synchronisé au BPM, réécrit de zéro sous Godot

Création d'un casse-brique arcade synchronisé au BPM depuis novembre 2023, de la conception à la commercialisation sur Steam. Prototypé sous Unity, puis entièrement réécrit sous Godot 4 : design, code, art, backend et déploiement menés seul, musique et sound design par FeathersCrow.

#Godot#GDScript#Shaders#Steamworks#Fastify#PostgreSQL#Docker#GitHubActions#Astro#Notion
Reflectron, capture du jeu
Rôle & moteur
Game Designer & Game Developer
Godot 4
Équipe
2 personnes
Design, code, art, backend et communication par moi ; musique et sound design par FeathersCrow
Période & durée
2023 - Présent
2+ ans
Plateformes
PC Windows & Linux (Steam)
Steam Deck

Le défi

Sortir un jeu payant sur Steam en portant seul le design, le code, l'art, le backend, le déploiement et la communication : rien à déléguer sauf la bande son, et une exigence de finition que le joueur qui paie ne négocie pas.

Puis une décision plus lourde que le développement lui-même : le prototype Unity avait validé la boucle, pas sa production. Changer de moteur sur un jeu déjà en vente veut dire tout réécrire en gardant la page boutique, les wishlists et l'Early Access, sans jamais casser le classement ni les sauvegardes de ceux qui ont payé.

Le genre ajoute sa propre contrainte : sans récit ni contenu à débloquer, tout doit tenir dans la boucle elle-même. Ses power-ups, ses upgrades, ses défis et la comparaison avec les autres via le classement.

Concept du projet

  • Casse-brique revisité : le joueur se déplace et dashe, c'est la balle qui tue
  • BPM constant du début à la fin : la grille, les ondes et les feedbacks tombent sur le temps
  • Roguelite léger : power-ups, upgrades tirées en fin de palier, défis-mutateurs
  • Rendu néon obtenu par glow HDR natif et shaders plein écran, sans aucun éclairage

Mon rôle & mes responsabilités

Game Designer
  • Conception de la boucle : le joueur ne tire pas, il place les rebonds d'une balle qui ne lui obéit qu'à moitié
  • 7 archétypes d'ennemis, 4 power-ups, 34 upgrades, défis-mutateurs et méta-progression sans monnaie
  • Onboarding : tutoriel scripté au premier lancement, indices de première rencontre et codex
Développeur
  • Réécriture complète sous Godot 4 : simulation, rendu, shaders de grille et d'ondes, glow HDR
  • Steamworks : ticket d'authentification, Cloud Save, build de démo exportée du même projet
  • Portage Steam Deck en natif et 19 bancs de test headless qui tiennent les invariants
Backend & production
  • Classement en ligne Fastify + PostgreSQL, déployé en conteneur sur un VPS
  • CI GitHub Actions : exporte le jeu et sa démo, les dépose sur Steam à chaque push
  • Site vitrine Astro dont les données et les vignettes sont générées depuis le jeu
Graphiste
  • Direction artistique géométrique néon inspirée de Geometry Wars, entièrement en formes et en shaders
Communication
  • Devlogs hebdomadaires sur TikTok et YouTube, page Steam et trailers

Ce qui a changé en cours de route

Première version

Le jeu était sorti sous Unity 6 (URP) et se vendait : la boucle était validée, mais pas sa production. Le rendu néon coûtait cher à faire tourner, l'audio dépendait de Wwise dont l'outil d'authoring ne tourne pas sous Linux, et presque rien du projet ne se pilotait en ligne de commande.

Version retenue

Réécriture complète sous Godot 4, sans chercher la compatibilité : glow 2D HDR natif, shaders et scènes en texte donc diffables, audio natif recalé sur une horloge musicale, et un CI qui exporte, teste et dépose le jeu et sa démo sur Steam à chaque push. Le jeu tourne en natif à 90 fps sur Steam Deck.

Pourquoi : Le prototype avait fait son travail : prouver que le gameplay tenait. Le garder aurait défendu du code plutôt que le jeu. Le vrai critère n'était pas de savoir quel moteur est meilleur, mais lequel me laisse itérer seul : sur un projet solo, ce qui n'est pas scriptable finit par ne plus être refait.

Galerie d'images

Une partie en cours : le joueur place les rebonds, la balle fait le travail
Le dash traverse l'arène et laisse la nuée derrière lui
La nuée s'agrège autour d'un ennemi lourd
Un power-up peut changer toute la partie : ici le multiball
Choix d'upgrade en fin de palier, une carte parmi trois
Devlog hebdomadaire sur TikTok

Résultats

  • Jeu commercialisé sur Steam en Early Access : du prototype à la page boutique, au build de sortie et au suivi post-lancement
  • Réécriture moteur menée à terme, Unity 6 vers Godot 4, jeu complet et version démo exportés par le même CI
  • Backend en production : classement en ligne, authentification Steam et Cloud Save
  • 90 fps en natif sur Steam Deck, mesurés en jeu réel et non sur un banc
  • Site vitrine du jeu, dont le classement, le bestiaire et les vignettes viennent du jeu lui-même
  • Devlogs hebdomadaires publiés sur TikTok et YouTube pendant tout le développement

Ce que j'en retiens

  • Un prototype qui a validé son gameplay ne se défend pas : ce qui vaut est la preuve qu'il a produite, pas son code. Décider de le jeter se tranche sur ce qui reste à faire, jamais sur ce qui a déjà été fait.
  • Sur un projet solo, un outil ne se choisit pas sur sa puissance mais sur ce qu'il laisse automatiser. Scènes en texte, shaders lisibles, export en ligne de commande : ce qui n'est pas scriptable finit par ne plus être refait.
  • Sur un projet commercial mené presque seul, le développement n'est qu'une part du travail : page boutique, builds, devlogs et retours joueurs pèsent autant que le code, et se planifient au même titre.
  • Une direction artistique contrainte (géométrie, néon, glow) coûte peu à produire et reste identifiable. C'est un choix de production autant qu'un choix esthétique.

Disponible pour un poste de Game Designer / Developer

Studio indé ou double A, profil polyvalent : design, code, réseau, audio, outillage.

bastienokonski@gmail.com