Aller au contenu

Documentation

  • Télécharge le jeu, ouvre la liste des niveaux et joue n'importe quel niveau. Pour créer le tien, crée un niveau dans l'éditeur et mets un morceau de 1-2 minutes dans son dossier

  • Les bugs du jeu vont dans les issues de releases, les questions sur Discord. Joins la ligne de version des paramètres et les étapes après lesquelles le bug apparaît

  • Avant de jouer, le jeu montre à quel point un niveau est lourd pour ton appareil, avec une jauge de cinq barres : plus il y a de barres allumées, plus le niveau est léger. Des barres vertes veulent di

  • L'éditeur est intégré au jeu, il n'y a rien à installer en plus. Un niveau y est un dossier avec un morceau et des fichiers, que tu mènes du vide jusqu'à la publication

  • Un niveau est un dossier de fichiers, le premier se construit en six étapes, et tout l'éditeur repose sur six idées : objet, image, intervalle, calque, parent, image clé

  • Un niveau est un dossier ordinaire sur le disque : le fichier du niveau, les métadonnées et tout ce qu'il utilise. Construis-le en Json et transmets-le comme une copie du dossier, rien n'est à install

  • Six étapes jusqu'au premier test : créer un niveau, ajouter un morceau, poser le rythme, placer des objets, lancer un test, enregistrer

  • Objet, image, intervalle, calque, parent, image clé - les six idées sur lesquelles repose tout l'éditeur

  • Un niveau compte le temps dans ses propres images, pas dans les images de l'écran, il se joue donc pareil sur n'importe quel matériel. Tu fixes la durée du niveau, et mieux vaut laisser les fps à la v

  • Une image clé est une valeur sur une image d'une piste, plus le lissage avec lequel elle est atteinte. Tout ce qui, dans un niveau, bouge, change de couleur ou s'allume et s'éteint est une liste d'ima

  • Le minimum pour un niveau, c'est un morceau. Les textures et les polices, tu les apportes toi-même, et tout cela vit dans le dossier du niveau

  • Le minimum, c'est un morceau. Tout le reste est facultatif, et presque tout, tu l'apportes toi-même

  • Convertis le morceau en ogg : il pèse 8 à 10 fois moins que le wav et, contrairement au mp3, n'ajoute pas de silence au début du fichier. En dehors de l'ogg, seuls le mp3 et le wav se chargent

  • Si une forme fait l'affaire, prends une forme : elle n'a pas de fichier, ne coûte pas de mémoire et ne pose pas de question de droits. Fais une texture à la taille de sa place à l'écran, pas plus de 2

  • Un niveau vit dans son propre dossier, dans levels à l'intérieur du dossier du jeu. Ne renomme pas les fichiers qu'il utilise, et une sauvegarde complète est une copie du dossier du niveau

  • Un niveau que tu publies ne peut contenir que des fichiers sous une licence ouverte pas plus stricte que CC BY-NC ou avec l'autorisation de leur auteur. Un niveau pour toi-même peut être construit à p

  • Un morceau peut être utilisé si sa licence ouverte n'est pas plus stricte que CC BY-NC ou si son auteur a directement autorisé son usage dans le niveau. Un morceau venu de YouTube, SoundCloud ou Spoti

  • Une ressource est conforme si elle a une licence adaptée ou l'autorisation du titulaire des droits. Il n'y a pas de troisième voie

  • Sûrs par défaut : la musique de ccMixter, Freesound et Kenney, les images de Poly Haven, Pexels et Unsplash, les polices de Google Fonts. Rien ne peut être pris sur YouTube, SoundCloud ou Spotify

  • La fiche note d'où vient une ressource et à quelles conditions : le lien, la licence, les autorisations, les auteurs. Un champ de licence vide signifie "personne n'a vérifié", et une telle ressource e

  • Chaque service vérifie un niveau selon ses propres règles, donc l'un peut l'accepter et un autre le refuser. Seule une erreur bloque la publication, un avertissement envoie le niveau en modération

  • Écris à l'auteur avec le modèle, garde les points 1-3 intacts et conserve la réponse. Seule compte une autorisation qui permet directement de distribuer le niveau, pas une autorisation limitée à l'usa

  • Un bon niveau, c'est un niveau où le joueur comprend ce qui l'a tué, bouge avec la musique et a envie de réessayer

  • Le joueur doit comprendre ce qui l'a tué. Montre un danger avant qu'il ne devienne dangereux, laisse au moins 12 images pour réagir et fais ressortir le danger davantage que le décor

  • Cale d'abord la grille de pulsations : le tempo, puis le décalage, puis les pulsations par mesure. Place le sommet du niveau sur le sommet du morceau, et laisse le joueur respirer dans les breaks

  • Conçois en fonction des propres chiffres du joueur - ils sont tous sur 6_avatar et 7_damage - et d'une réaction humaine de 12-15 images. Montre d'abord un nouveau motif sous une forme sans risque

  • Garde le contenu important loin du bord : d'autres écrans placent le bord ailleurs, et l'encoche d'un téléphone peut cacher un projectile. Le tremblement de caméra marche sur une mesure, une rotation

  • Fais passer la couleur du contenu par une référence au thème, garde les couleurs littérales pour ce qui est vraiment unique. Active le post-traitement sur un sommet puis désactive-le, sinon les projec

  • Un thème est une palette de 64 couleurs à laquelle les objets renvoient par numéro d'emplacement. Change le thème, et tout ce qui y renvoie change avec lui

  • Construis d'abord une illustration à partir des formes intégrées et ne dessine les tiennes que là où aucune ne convient. Pose la lumière et l'ombre sur une seule forme de base, fais de chaque élément

  • Des habitudes, pas du design : dans quel ordre construire un niveau, comment ne pas faire le travail deux fois ni le perdre, comment le vérifier avec le bot, le transmettre et le construire avec un as

  • D'abord le morceau, les fps, la grille de pulsations et les marqueurs, puis un squelette en formes nues et son playtest. La décoration, le thème et les effets viennent en dernier

  • Des objets qu'il faudra plus tard changer tous ensemble forment un prefab, quel que soit leur nombre. Un contenu qui se décrit par une règle forme un générateur. Dans tous les autres cas, copie simple

  • La palette de commandes (Ctrl+Shift+P), la recherche de contenu (Ctrl+F), le bouton Localiser et les flèches sur une timeline font gagner le plus de temps. Chaque touche peut être réattribuée dans les

  • Ton travail est protégé par l'enregistrement automatique, l'annulation et une copie du dossier du niveau. Seule une copie du dossier est un instantané complet du niveau. Changer le format du fichier e

  • Un bot joue le niveau avec les mêmes contrôles que toi et vérifie la lisibilité, pas la difficulté. Il ne garantit pas que le niveau puisse être terminé

  • Empaquette le dossier du niveau en zip ou en tar.gz, et chiffre-le avec gpg pour un mot de passe. Sur une autre machine, le niveau décompressé se joue tout de suite, et le jeu lit lui-même ces archive

  • Un client IA qui parle MCP peut modifier le niveau ouvert dans l'éditeur pendant que tu regardes. Chaque lot de l'IA est une seule étape d'annulation, et l'IA ne peut ni publier, ni supprimer de fichi

  • Ce qui décide si un niveau tourne sur les appareils des joueurs, c'est le nombre de formes dans une image et l'overdraw. Commence par le budget du niveau, et si tu fais un niveau pour téléphones, lis

  • Un téléphone tient confortablement environ 1000 formes dans une image, un PC modeste 5000-10000. L'overdraw coûte plus cher que le nombre : des choses semi-transparentes sur tout l'écran, couche sur c

  • Sur un téléphone, un doigt couvre l'écran, et le système prend les bords. Garde l'essentiel loin des bords et teste le niveau sur un téléphone modeste : la semi-transparence plein écran l'épuise en pr

  • Ce que fait tel champ ou tel bouton de l'éditeur, une page par panneau, fenêtre ou onglet. La référence ne se lit pas d'un bout à l'autre : on y arrive depuis une recherche ou un lien dans un article

  • La liste principale des termes du projet. L'interface du jeu, cette documentation et tout autre texte sur Bullet Hero utilisent ces mots, et un nouveau terme est d'abord ajouté ici

  • Les métadonnées sont la couverture du niveau : nom, description, image, auteurs, classification par âge, difficulté et avertissements sur le contenu. Aujourd'hui, un niveau arrive à quelqu'un d'autre

  • Les timelines montrent le niveau dans le temps : les objets, les images clés de l'objet sélectionné, le modèle d'un prefab, l'audio et les événements. La grille de pulsations aide à placer tout cela s

  • La hiérarchie est un arbre des objets de l'image actuelle, rangés par parent. Chaque timeline a son propre tampon de presse-papiers, et la palette de commandes trouve n'importe quelle action de l'édit

  • L'inspecteur d'objet modifie les champs de l'objet sélectionné, l'inspecteur d'images clés modifie les images clés sélectionnées, sur toutes les pistes que touche la sélection à la fois

  • Un effet, ce sont des particules VFX Graph dont les paramètres sont répartis en modules : combien de particules, d'où elles partent, comment elles bougent, de quelle couleur et de quelle taille elles

  • Le son d'une piste audio passe par une chaîne d'effets : il y en a 11, de la normalisation et du compresseur à l'écho et à la réverbération. La chaîne, la vitesse et le volume se règlent dans l'inspec

  • Un générateur crée du contenu et l'applique au niveau en une seule opération, qui s'annule en une seule étape. Chaque générateur se lance depuis la fenêtre "Générateurs" de la barre d'outils

  • Un modificateur change ce qui est déjà dans le niveau : il retire du contenu, recalcule les fps, aplatit les prefabs, quantifie les images clés, ajuste et décale les intervalles. Un lancement s'annule

  • Tout ce qui appartient au niveau lui-même se règle ici : durée, images par seconde, graine, orientation, métadonnées, publication. C'est aussi d'ici que le niveau se lance, se vérifie selon les règles

  • Les textures, formes, thèmes, effets et prefabs d'un niveau vivent dans son dossier et voyagent avec lui. Chaque ressource a sa propre fiche avec sa source, sa licence et ses auteurs

  • En mode prefab, tu modifies le modèle, et l'enregistrement répercute la modification sur chacun de ses placements. On y entre avec le bouton "Modifier le prefab" dans l'inspecteur d'un placement, on r

  • L'export enregistre le niveau hors du jeu, sous forme de dossier ou d'archive, avec chaque fichier qu'il utilise. Un mot de passe chiffre le contenu du niveau sur le disque, et un mot de passe oublié

  • L'enregistrement automatique, la grille, la sélection, les gizmos et les préréglages des nouveaux niveaux se règlent ici. L'enregistrement automatique est activé par défaut et se déclenche 60 secondes

  • La hiérarchie, les inspecteurs et les timelines sont ancrés autour de la vue. Un clic sur la poignée au bord d'un panneau l'ouvre ou le ferme, un glissement change sa largeur

  • Les collections contiennent les ressources que tu réutilises d'un niveau à l'autre. Un niveau ne renvoie jamais à une collection : l'import copie la ressource à l'intérieur, et le niveau se joue parto

  • Un niveau ne s'envoie que depuis l'onglet "Publication" des paramètres du niveau : sous forme d'archive ou vers le Steam Workshop. Le rapport vérifie le niveau de lui-même, et ses erreurs bloquent l'e

  • L'éditeur rend le niveau ouvert dans un fichier vidéo grâce à ffmpeg installé sur ton ordinateur. Le rendu se fait hors temps réel, une image à la fois, donc la vidéo est exacte quelle que soit la len

  • Le SDK, c'est le format de niveau de Bullet Hero sous forme de bibliothèque C# ouverte. Le jeu lit et écrit les niveaux à travers lui, et ton programme peut faire de même

  • Le SDK, c'est le paquet BulletHero.SDK sur nuget.org, ou une compilation depuis les sources. Unity le prend comme sous-module git, et l'exemple ConsoleSmoke vérifie que tes niveaux se lisent

  • Un niveau est un dossier : le contenu dans level.json ou level.blob, les métadonnées dans metadata.json ou metadata.blob, une couverture et des fichiers médias. Les sauvegardes, les records et les par

  • Un niveau s'exporte en dossier, en tar.gz ou en zip, avec un mot de passe en option : zip avec AES-256 ou OpenPGP. Le SDK détecte le format d'un fichier reçu par ses premiers octets, pas par son nom

  • Il y a trois versions : gv pour le jeu, sv pour le SDK, mg pour la génération du format des modèles. D'après mg, le SDK migre un ancien fichier et refuse de lire un fichier dont la génération est plus

  • Tu appelles la validation toi-même via ValidationFacade, elle n'est pas intégrée à l'enregistrement ni au chargement. Les problèmes se répartissent en Error, Warning et Advice, et ValidateAndFix répar

  • Un service décrit les niveaux qu'il accepte dans un fichier PublishProfile : licences, sources des ressources, champs obligatoires, limites de taille. Ajouter un service, c'est écrire un fichier, pas

  • Bullet Hero est un hybride gratuit de jeu de rythme et de bullet hell. Aucun compte n'est nécessaire, et il n'y a pas encore de serveur. Les joueurs créent les niveaux dans l'éditeur intégré et se les

Notes

  • J'utilise l'IA, et je pense que ça vaut le coup. Mais correctement : comme un outil dont je vérifie le travail, pas comme quelque chose qui réfléchit à ma place. Utilisée sans réfléchir, elle produit

  • Bullet Hero est gratuit, tourne sur Windows et Android, et son SDK, sa documentation et ses builds sont ouverts. Le cœur gère des milliers d'objets à l'écran sur téléphone et est couvert par plus de 8

  • Communauté

    Les questions, les retours et tes niveaux vont sur Discord. Tout le monde peut aider le jeu : corriger une erreur dans la documentation, ajouter une traduction, signaler un bug ou faire un niveau

  • Les discussions et les questions vont sur Discord, les vidéos sur YouTube, les bugs du jeu dans les issues du dépôt bullet-hero/releases. Le code source est dans l'organisation bullet-hero sur GitHub