CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
Traqueur des esprits de Fortnite Chapitre 7 Saison 4 Override : debloque, maitrise, variantes Or et Cheat Master. Vos coches restent sur votre telephone.
Translation pending
GamesGitHub @JodyGsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Suivi des esprits de Fortnite — Treasure Hunters, la mini-saison qui ferme le chapitre 7. Cochez ce que vous avez débloqué et maîtrisé, variantes Fortune et Malédiction comprises.
Application web installable sur iPhone et Android, qui fonctionne hors connexion. Aucun compte, aucun serveur, aucune base de données : vos coches sont écrites dans le stockage du téléphone et y restent. Thème clair, sombre ou automatique, au choix.
Trois collections cohabitent sans jamais se mélanger : la saison en cours (Treasure Hunters) et deux saisons closes — Chapitre 7 Saison 4 « Override » et Chapitre 7 Saison 3 « Runners » —, accessibles par le bouton de collection. Chacune garde ses coches, ses compteurs et son export.
npm start
http://localhost:8787, et l'adresse à ouvrir depuis un téléphone du même wifi s'affiche
aussi dans la console. Aucune dépendance à installer.
public/ est un dossier entièrement statique — le petit serveur Node ne sert qu'à la
prévisualisation locale. En production, n'importe quel hébergeur de fichiers suffit.
Il faut du HTTPS : sans lui, aucun navigateur ne proposera l'installation. Les trois options ci-dessous le fournissent gratuitement.
Maintenant que l'app n'a plus de base de données, Vercel convient parfaitement.
npx vercel --prod
Ou : dépôt GitHub → Import Project sur vercel.com → Framework Preset Other, Output Directory public, pas de commande de build.
Le plus rapide sans compte : ouvrez app.netlify.com/drop et glissez le dossier public/
dans la fenêtre. Vous repartez avec une URL en .netlify.app.
Poussez le dépôt, puis Settings → Pages → Deploy from a branch, dossier /public (ou
placez le contenu de public/ à la racine d'une branche gh-pages). Les chemins de l'app
sont tous relatifs : elle fonctionne sans souci depuis un sous-dossier
votre-pseudo.github.io/capsule-override/.
Envoyez simplement le lien. C'est le seul « fichier à envoyer » qui fonctionne sur les deux plateformes — voir la note plus bas sur l'APK et l'IPA.
Android / Samsung — ouvrez le lien dans Chrome ou Samsung Internet. Le navigateur propose l'installation ; sinon, touchez Installer dans la barre de l'app, ou passez par menu ⋮ → Ajouter à l'écran d'accueil. L'app obtient sa propre icône, son écran de démarrage, et s'ouvre sans barre d'adresse.
iPhone / iPad — ouvrez le lien dans Safari (obligatoire : Chrome et Firefox sur iOS ne savent pas le faire), puis Partager → Sur l'écran d'accueil → Ajouter. Le bouton Installer de l'app affiche ces étapes en images si besoin.
Tout est dans le localStorage du navigateur, une clé par saison :
capsule-override.treasure.v1 pour Treasure Hunters, capsule-override.store.v4 pour
Override, capsule-override.legacy.v1 pour Runners. Le thème est sous
capsule-override.theme, le pseudo Epic sous capsule-override.player.v1. (Une clé
capsule-override.codes.v1 traîne peut-être encore sur les téléphones : c'est le suivi des
codes du lobby, dont l'écran est parti le 1er novembre. Elle n'est plus ni lue ni écrite, et
elle attend sagement si l'écran revient.)
La clé reste collée à sa saison, jamais à la place qu'elle occupe dans le bouton. C'est
ce qui a permis à Override de passer en archive le 1er novembre 2026 sans migration : son
fichier a changé de nom, sa clé non. Si la clé avait suivi l'emplacement « saison en cours »,
162 pièces cochées se seraient retrouvées projetées sur onze esprits qui n'existaient pas.
Au démarrage, l'app appelle navigator.storage.persist() pour demander au système de ne pas
effacer ces données quand la place manque — l'écran Réglages vous dit si c'est accordé.
Ce qui efface vos coches : désinstaller l'app, vider les données de site du navigateur, ou le bouton Tout effacer. Sur iOS, une app installée depuis l'écran d'accueil n'est pas soumise à la purge des 7 jours qui touche les simples sites web.
Les sauvegardes des versions précédentes sont reprises automatiquement, y compris celles à plusieurs profils — c'est le profil qui était ouvert qui devient votre collection.
Au tout premier lancement — et seulement tant qu'aucun pseudo n'est enregistré sur l'appareil — l'app ouvre une fiche qui demande le pseudonyme Epic Games du joueur. Trois à seize caractères, comme chez Epic ; les espaces multiples sont écrasés. Plus tard ferme la fiche sans rien écrire : elle sera reproposée au lancement suivant.
Une fois le pseudo enregistré, la fiche ne se rouvre plus jamais d'elle-même. Le pseudo apparaît alors dans une pastille en haut à gauche — la toucher permet de le changer — et dans Réglages → Pseudo Epic Games, où Effacer le retire (il sera redemandé au prochain lancement).
Il signe l'image d'export, en haut à droite de l'en-tête, et il ouvre le message
pré-rempli de la feuille de partage : « Jody Gs — ma collection d'esprits Saison en cours. », ou le nom de
l'archive ouverte depuis les autres collections — le libellé vient de la table
COLLECTIONS, pas d'un nom de saison écrit en dur. Le message reste court : les chiffres sont
déjà sur l'image, les répéter ferait doublon. Le nom du fichier reprend le pseudo aussi
(capsule-override-jody-gs-2026-08-21.png). Sans pseudo, image, message et nom de fichier
retrouvent exactement leur forme d'avant. Certaines applications ignorent le texte quand un
fichier l'accompagne — l'image porte de toute façon la même information. Il voyage aussi dans la sauvegarde JSON, mais à
l'import il n'est adopté que si l'appareil n'en a pas déjà un — on n'écrase jamais le
pseudo local. Tout effacer décoche la collection sans toucher au pseudo.
Réglages → Exporter en image dessine la collection sur un canvas et produit un PNG portrait : en-tête, score, barre de progression, une ligne par esprit avec ses trois variantes, et une légende. L'image reprend le thème actif — elle ressemble à ce que vous voyez à l'écran.
L'app essaie ensuite trois voies, dans cet ordre :
navigator.share — sur téléphone, ouvre la feuille de partage du système. WhatsApp,
Messages, Discord, Instagram y figurent : l'image part directement dans la conversation.Une précision technique : on ne peut pas pré-attacher une image à WhatsApp par une URL
wa.me — ce lien ne transporte que du texte. La feuille de partage native est la seule voie
qui dépose vraiment le fichier dans la conversation, et c'est celle que l'app emprunte.
Transférer vers un autre téléphone est une autre affaire : l'image ne se réimporte pas. Utilisez Réglages → Sauvegarde JSON, puis Importer sur l'autre appareil.
Une troisième liste a longtemps accompagné les saisons : neuf esprits maison qui n'existent nulle part dans Fortnite, en lecture seule, sans clé de stockage du tout. Elle a quitté l'app le 1er novembre 2026, à la bascule vers Treasure Hunters, pour laisser le bouton de collection aux trois saisons d'esprits.
Elle n'est pas supprimée : catalogue, images et tests sont gardés entiers dans
archive/famille/, avec un README.md qui dit comment la rebrancher — et pourquoi une
page à elle lui irait sans doute mieux qu'un quatrième cran dans un bouton.
La mécanique de galerie reste dans l'app, elle. COLLECTIONS accepte toujours une entrée
sans clé de stockage (store: null) : readStore rend alors un objet vide, setStatus et
saveStore sortent immédiatement, les compteurs, les filtres, le rebours et la bande
perforée s'éteignent, et l'export perd ses colonnes de variantes. Les teintes --f-* sont
restées dans les trois palettes du thème. Des tests veillent sur tout ça, précisément pour
que le retour ne commence pas par une chasse aux couleurs disparues.
Le bouton de collection, à côté de Réglages, tourne sur les trois saisons et annonce
toujours le nom de la suivante — CYCLE est simplement l'ordre des clés de COLLECTIONS.
Deux d'entre elles sont closes :
| Saison | Fichier | Clé de stockage | Compte |
|---|---|---|---|
| Treasure Hunters | sprites.json | capsule-override.treasure.v1 | 11 esprits, 31 pièces |
| Override (C7 S4) | sprites-override.json | capsule-override.store.v4 | 27 esprits, 162 pièces |
| Runners (C7 S3) | sprites-legacy.json | capsule-override.legacy.v1 | 25 esprits, 117 pièces |
Chacune est entièrement séparée : son catalogue, sa clé, ses compteurs, son export. Cocher un esprit d'un côté ne touche jamais les autres. La collection ouverte est retenue d'une visite à l'autre, et le bandeau rappelle en permanence qu'on ne regarde pas la saison en cours.
Une saison close porte over: true dans la table. C'est ce drapeau — et plus un nom de
collection écrit en dur — qui arrête le rebours et les rendez-vous, pose l'ambiance patinée
et fait afficher Archive · Saison close au centre du cadran. Un test interdit désormais la
comparaison state.which === "legacy" dans l'app : avec deux archives, elle était devenue un
piège silencieux.
Les coches, elles, ne sont pas gelées : une archive se complète encore, puisque les esprits restent consultables au Jardin des esprits et que l'on peut vouloir rattraper son relevé après coup.
Epic n'a jamais publié quelle variante existait pour quel esprit. La matrice a donc été
établie empiriquement : l'API MediaWiki de la Fortnite Wiki a été interrogée pour
énumérer tous les fichiers <Variante>_<Esprit>_Sprite_-_Item_-_Fortnite.png, et chaque
entrée a été vérifiée comme réellement servie.
| Ligne | Esprits concernés |
|---|---|
| Or | 20 |
| Gummy | 20 |
| Galaxy | 20 |
| Holofoil | 11 |
| Gem | 8 |
| Cube | 9 |
| Quack | 4 |
Soit 25 esprits de base et 92 variantes, 117 pièces. Zero Point les possède toutes les sept ; les cinq collaborations tardives (TheBurntPeanut, Vini Jr., Pollo, Ironmouse, John Wick) n'en ont aucune.
Trois entrées de la wiki ont été retirées : Gem_Ghost, Gem_Punk et Holofoil_Duck.
Leurs fichiers existent bien sur le serveur de la wiki, mais un joueur a signalé que ces
variantes n'apparaissent pas en jeu — et leur retrait fait tomber les totaux exactement sur
les chiffres publiés par Epic (Gem 8, Holofoil 11, 117 pièces). La présence d'un fichier
n'est donc pas une preuve de sortie : c'est un bon rappel des limites de la méthode.
Créez un public/sprites-<saison>.json sur le même modèle, ajoutez-le à COLLECTIONS dans
public/app.js, ses identifiants à WIKI_NAME dans scripts/fetch-sprite-icons.py, son
chemin à CATALOGUES dans le même script, et son fichier à la liste du service worker. Les
identifiants d'esprits doivent être préfixés pour ne pas entrer en collision d'une saison à
l'autre (l- pour Runners, t- pour Treasure Hunters) : le dossier d'icônes est commun.
Faire passer la saison en cours en archive, c'est l'opération inverse, et elle tient en trois règles apprises le 1er novembre 2026 :
events, news, et son seasonEnd devient
une simple date. Elle gagne une note — ce que deviennent ces esprits — et un
variantsNote qui fige son compte définitif. Le bandeau lit les deux dans le catalogue.store.v3, store.v2, la version à plat) suivent
leur saison. Elles ont été écrites pendant Override : les verser dans la saison en
cours reviendrait à cocher des esprits qui n'existent pas.Un bandeau sous les compteurs annonce le prochain rendez-vous de la semaine, ou celui qui
court. Treasure Hunters en compte deux : le Lundi de maîtrise (lundi 9 h à mardi 9 h à New
York, 15 h CET — XP d'esprit et poussière doublés) et le Jour du capitaine (samedi 9 h — un
capitaine, son équipage et son butin). Override en avait trois, dont les Power Hours à deux fenêtres par
jour ; le mécanisme starts leur survit et resservira.
Les horaires vivent dans public/sprites.json, sous events, en heure de New York. L'app les
convertit à l'heure du téléphone en passant par Intl.DateTimeFormat : le décalage est relu à
chaque calcul, donc les deux changements d'heure — qui ne tombent pas le même jour des deux
côtés de l'Atlantique — sont pris en compte au lieu d'être supposés. Un événement sans horaire
confirmé affiche son jour et pas un compte à rebours : annoncer une heure qu'Epic n'a pas
donnée serait pire que de se taire.
Un rendez-vous peut ouvrir plusieurs fenêtres dans la même journée — les Power Hours
tournent à 14 h puis à 21 h. Le champ starts prend alors la place de start et l'app génère
une occurrence par horaire, sinon le samedi à 17 h elle annoncerait le samedi suivant au lieu
de la séance du soir, quatre heures plus tard.
Un événement ponctuel reste la nouvelle du jour jusqu'à minuit à New York, pas pendant 24 heures glissantes — sinon un New Sprite Day du jeudi matin serait encore affiché le vendredi à l'aube.
Le texte des Power Hours a vécu un mois en annonçant « celles du 29 août ont sorti Storm Scout ». Vrai à l'écriture, faux la semaine suivante, et invisible : un bandeau qu'on lit tous les jours finit par ne plus se lire. Même chose pour la ligne Or, qui renvoyait encore aux Golden Hours du 22 août.
Ces trois textes décrivent maintenant la règle — deux fenêtres de deux heures, thème annoncé dans la semaine, séances rallongées pour une occasion — et un test refuse toute date dans le nom, le texte ou le conseil d'un rendez-vous. Les notes de variantes gardent le droit de dater une sortie (« sortie le 24 septembre » restera vrai) mais pas de renvoyer à l'édition passée d'un rendez-vous qui revient ; le test fait la différence sur le verbe.
Quand Epic sort un esprit, le catalogue change mais l'app, elle, se ressemble : on peut jouer une semaine sans remarquer les quatre nouvelles cartes. Une fiche Quoi de neuf s'ouvre donc toute seule au premier lancement qui suit une mise à jour des données.
Il n'y a pas de serveur derrière — donc pas de push web, qui réclamerait un backend, des
clés VAPID et un abonnement par appareil. La nouvelle voyage dans le catalogue lui-même :
public/sprites.json porte un bloc news avec une version, un titre et quelques lignes. Le
service worker va chercher les JSON en réseau d'abord, si bien qu'au premier lancement
connecté qui suit un déploiement l'app découvre une version qu'elle n'a jamais vue, ouvre la
fiche, et enregistre cette version dans capsule-override.news.v1. Un tour, puis plus jamais.
Deux cas sont traités à part :
Pour annoncer une mise à jour, il suffit donc de changer news.version en même temps que
updatedAt — un test vérifie que les deux ne divergent pas.
Le suivi sait ce qui manque, l'agenda sait ce que le jeu récompense en ce moment. Le bouton Que faire maintenant met les deux bout à bout, ce qu'il fallait jusque-là faire de tête. Le panneau range ce qui reste en trois temps :
Le plan savait ce qui manque, l'agenda savait ce que le jeu récompense en ce moment ; les deux s'ignoraient. Le panneau s'ouvre maintenant sur le croisement des deux.
Chaque rendez-vous déclare dans sprites.json ce qu'il favorise ("focus") et la phrase à
dire ("advice"). Un lundi de Cheat Code Monday, monter au niveau 5 rapporte double :
« poussez au niveau 5 ce que vous avez déjà — vous en avez 5 qui attendent ». Pendant les
Power Hours du samedi, le taux des variantes remonte : « il vous en manque 58 ». Le reste
du temps, le bandeau reste neutre et annonce le prochain créneau.
Deux règles de chiffres, parce qu'un nombre mal choisi décourage plus qu'il n'aide :
Jusqu'à la sortie des Bounty Hunter, toutes les variantes se ramassaient de la même façon et une consigne « en partie » suffisait. Ce n'est plus vrai : une Bounty Hunter n'apparaît que sur un adversaire éliminé, et ne gagne d'XP qu'aux éliminations — fouiller un coffre ne la fait pas monter d'un cran.
Chaque ligne déclare donc où on la trouve ("find"), et celles qui montent autrement le disent
("levelUp"). Le plan s'en sert pour sortir ces pièces de la section À maîtriser et leur
donner la leur, « Bounty Hunter — 2 à monter aux éliminations » : afficher « niveau 5 puis
banque à un site d'extraction » aurait été faux sur la moitié du trajet. La note précise quand
même qu'une fois le niveau 5 atteint, elle se banque comme les autres.
Le lien entre un code et une pièce était une donnée explicite ("grants"), jamais une lecture
du libellé de récompense. Il survit dans la sauvegarde : voir Les codes du lobby, mis de côté.
Réglages → Transférer vers un autre téléphone propose quatre gestes, un par intention, plutôt qu'un seul bouton au comportement variable :
Le partage descend une chaîne de replis, parce qu'iOS refuse de partager beaucoup
d'extensions, dont .json : le même contenu part alors en .txt, et si le système ne partage
aucun fichier, la sauvegarde file au presse-papier avec un message qui invite à la coller dans
une conversation. C'est pour cette dernière branche qu'existe Coller une sauvegarde : sans
elle, le repli produirait un texte que personne ne pourrait relire. L'import accepte donc aussi
bien .json que .txt, et valide sur le contenu, pas sur l'extension.
Réglages → Comparer avec quelqu'un ouvre la sauvegarde JSON d'un autre joueur et affiche, côte à côte, ce qu'il a et que vous n'avez pas — et l'inverse. Strictement en lecture : rien n'est écrit, et un test vérifie que la collection locale est identique avant et après. Si le fichier vient d'une autre saison, un avertissement le dit et seules les pièces communes aux deux catalogues sont comparées.
Trois filtres de statut, et chacun cherche un état de pièce précis — une pièce vaut 0 (pas obtenue), 1 (débloquée) ou 2 (maîtrisée) :
| Filtre | Ce qu'il cherche | À quoi il sert |
|---|---|---|
| Manquants | une pièce à 0 | la liste de chasse |
| À maîtriser | une pièce à 1 | la liste des niveaux 5 à finir |
| Maîtrisés | toutes les pièces à 2 | ce qui est bouclé |
Une carte s'affiche si elle contient au moins une pièce recherchée, et son tableau ne montre que ces pièces-là. Demander « les manquants » et recevoir une carte où six lignes sur sept sont déjà maîtrisées, c'est ne pas avoir répondu à la question.
Deux bugs vivaient là. Manquants testait « pas encore maîtrisée » (< 2), ce qui confond
je ne l'ai pas et je l'ai sans l'avoir montée au niveau 5 : un esprit entièrement débloqué
apparaissait comme manquant, et avec 91 pièces presque tout passait le filtre. Débloqués
testait « au moins une pièce obtenue » (>= 1), ce qui englobait tout ce que Maîtrisés
montrait déjà — deux filtres pour un seul résultat. Le second est devenu À maîtriser, dont
le nom dit ce qu'il fait.
Les puces de rareté avaient leur propre trou : « À confirmer » était exclue en dur, si bien qu'un esprit dont Epic n'a pas annoncé la rareté devenait introuvable dès qu'on touchait ce filtre. Une rareté a désormais sa puce dès qu'un esprit la porte, et aucune autrement.
Cocher une pièce pendant qu'un filtre est actif la retire de la vue : c'est voulu, la liste se vide à mesure. Le parcours naturel est donc Manquants pour trouver, puis À maîtriser pour finir.
L'app a longtemps porté un écran Codes : les 56 codes du panneau …/ admin panel,
cochables, copiables d'un geste, avec une pastille dorée annonçant ceux qui restaient. Il a
quitté la barre le 1er novembre 2026, avec la bascule vers Treasure Hunters.
Pas par ménage, par honnêteté. Les codes qui versaient une variante Cheat Master habillent des esprits d'Override, qui ne se ramassent plus en partie : le code existe peut-être encore, il ne fait plus avancer aucune case. La poussière et les gizmos sont repartis de zéro avec la saison. Et aucune liste publique n'a revu ces codes depuis le 28 octobre. Un écran qui affiche cinquante-six entrées non revérifiées a l'air d'un écran à jour : c'est le pire des deux états possibles.
La liste est gardée entière dans archive/codes-du-lobby/, avec un README qui dit ce
qu'il faut ramener, et dans quel ordre, le jour où Epic en redistribue. Les sept codes qui
déclaraient la variante offerte (grants) y sont aussi : c'est ce qui permettait au plan
d'action de dire « celle-là, un mot dans le lobby suffit ».
Ce qui part avec eux, dans l'app : le bouton et sa pastille, la modale, le stockage
capsule-override.codes.v1, la section À taper dans le lobby du plan d'action, le rappel
des codes sans esprit, et 3,7 Ko de styles. Des tests vérifient qu'il n'en reste aucune
trace — un fetch oublié vers un fichier absent, c'est une modale vide et une erreur
silencieuse.
La pastille du bouton Que faire maintenant comptait les pièces derrière un code : le seul chiffre sur lequel on pouvait agir dans la minute. Elle compte désormais les pièces déjà débloquées qu'il ne reste qu'à extraire. Celles-là non plus ne demandent pas de chercher : elles demandent d'y penser.
Trois modes, accessibles par le bouton de la barre du haut (qui les fait défiler) ou par Réglages → Apparence :
| Mode | Effet |
|---|---|
| Auto | Suit le réglage clair/sombre du téléphone, et bascule avec lui en direct. |
| Clair | Reste clair quoi qu'il arrive. |
| Sombre | Reste sombre quoi qu'il arrive. |
Le choix est retenu et appliqué avant le premier rendu — pas de flash blanc à l'ouverture. La couleur de la barre d'état du téléphone suit, ce qui compte en mode installé.
public/ l'application, statique de bout en bout
index.html
app.js tout le comportement
styles.css thème clair et sombre, passe mobile
sprites.json le catalogue de la saison en cours
sprites-override.json l'archive du Chapitre 7 Saison 4 — Override
sprites-legacy.json l'archive du Chapitre 7 Saison 3 — Runners
icons/sprites/ l'icone de chaque esprit, telle qu'elle apparaît en jeu
icons/variants/ l'illustration de chaque variante (Or, Cheat Master, Gummy…)
manifest.webmanifest nom, icônes, mode plein écran
sw.js service worker : fonctionnement hors connexion
icons/
archive/famille/ la galerie maison, gardée hors de l'app (voir son README)
archive/codes-du-lobby/ les 56 codes, gardés de la même façon
serve.js prévisualisation locale uniquement
scripts/make-icons.py régénère les icônes de l'app (npm run icons)
scripts/fetch-sprite-icons.py récupère les icônes des esprits (npm run sprite-icons)
Un encadré au-dessus des compteurs annonce ce qu'il reste avant la fin du passe de combat. C'est la première chose à savoir en ouvrant l'app, et la seule qui change toute seule.
Une jauge y montre la saison consommée. Un nombre qui descend ne dit pas s'il reste beaucoup ou peu — « 34 j » ne veut rien dire sans savoir que la saison en fait 73 ; une barre qui se remplit le montre d'un coup d'œil.
La précision monte à mesure que l'échéance approche — « 34 j », puis « 3 j 15 h », puis « 35 min ». Douze jours comptés à la minute n'aident personne, la dernière heure comptée en jours non plus. Sous trois jours, l'encadré passe en teinte d'alerte. Passé l'heure, il s'éteint — Saison terminée, en plus petit, et le rappel que les paliers non débloqués sont perdus. Jamais de durée négative, jamais de jauge au-delà de 100 %.
L'échéance est délibérément pessimiste. Epic publie le jour — le 1er novembre — mais
jamais l'heure à l'avance ; elle est annoncée la veille sur @FortniteStatus, et le minuteur
en jeu fait foi. Le compte à rebours vise donc l'horaire de bascule habituel d'Epic, c'est-à-dire
le plus tôt des instants plausibles. Se tromper dans ce sens fait rater une soirée ;
se tromper dans l'autre fait rater des paliers. Le sous-titre dit que l'heure est estimée.
Tout vit dans sprites.json, sous seasonEnd : date, time et timeConfirmed. Le jour où
Epic annonce l'heure, passer timeConfirmed à true suffit — le sous-titre perd sa réserve.
Rien n'empêche d'ajouter une fiche qui ne vient pas du jeu — un esprit pour rire, à son nom.
Il suffit d'une entrée dans public/sprites.json avec "custom": true, d'un PNG carré de
288 px dans public/icons/sprites/ et, si on veut les cinq lignes, de quatre vignettes de
192 px dans public/icons/variants/.
Le champ custom n'est pas décoratif : npm run sprite-icons saute ces fiches. Sans lui,
le script chercherait le nom sur la wiki, ne le trouverait pas, et retirerait l'icône à chaque
passage — l'esprit retomberait sur sa pastille à initiale sans qu'on comprenne pourquoi.
Une fiche maison compte dans le total comme les autres, puisque ses cases se cochent. Pour
qu'elle reste décorative, il suffit de la passer à "released": false : elle s'affiche alors
en fin de grille sans entrer dans le score.
Éditez public/sprites.json — c'est le seul fichier à toucher quand un esprit sort ou
que les esprits communautaires arrivent. Puis npm run sprite-icons pour récupérer les
icônes des nouveaux venus : le script interroge la Fortnite Wiki, réduit les images en 288 px,
les ramène à une palette de 256 couleurs et coche le champ icon des esprits trouvés.
288 px couvre l'affichage à 96 px sur un écran 3×, et la palette divise le poids par quatre —
36 icônes pèsent 408 Ko alors qu'elles font trois fois la taille des premières, qui en
pesaient 396.
Le même script récupère aussi l'illustration de chaque variante (Gold_, Cheat_Master_,
Gummy_… sur la wiki) dans public/icons/variants/, en 96 px, et écrit la liste de celles
qui existent dans "variantIcons". Une coupure réseau n'efface jamais une entrée juste :
tant que le PNG est sur le disque, le script signale l'échec et passe. Sans ce garde-fou, un
timeout suffisait à retirer un esprit de la collection de tout le monde — c'est arrivé à
l'esprit Poisson de Legacy, rattrapé avant publication. Il ne demande que les variantes que
le catalogue déclare : la wiki sert des fichiers pour des variantes qui n'existent pas en jeu, et c'est
exactement l'erreur qui avait fait compter 120 pièces au lieu de 117 en Legacy.
Les esprits sont rangés dans l'ordre de l'écran de collection du jeu, relevé à la main dans
Fortnite et recopié tel quel dans le tableau order de sprites.json : Plongeon dans la
benne ouvre, puis Jonesy, Aventure, Broussaille… et les trois esprits de Fortnitemares se
rangent après Morgana.
Ce n'est ni la rareté, ni l'ordre de sortie, ni l'alphabétique — c'est un ordre qu'Epic ne publie nulle part et qu'aucune règle ne reconstitue. J'avais d'abord groupé par rareté faute de mieux ; la liste dictée depuis le jeu a remplacé l'approximation. Une liste recopiée vaut mieux qu'une règle devinée.
Un esprit absent de order — une sortie du jour, une fiche maison — se range à la fin sans
déranger le reste, et le tri reste stable. Quatre tests gardent la liste honnête : pas de
doublon, pas de nom inconnu, aucun esprit oublié, et la grille rendue identique à la liste.
Deux noms viennent aussi du jeu plutôt que de ma traduction : Broussaille (et non Buisson) et Étang (et non Mare).
Le catalogue ne compte que des esprits sortis. Un esprit entre dans la liste dès qu'Epic
a annoncé une date — sa carte l'affiche alors en clair, « À venir — 26 septembre » — mais
il reste hors du total tant qu'il n'est pas obtenable. Sans date, il ne figure pas du tout : ni
rareté, ni source, ni date, c'est une case qu'on ne peut pas cocher et qui ressemble à un trou
au milieu de la grille. Ces esprits vivent dans les notes de l'app —
nommés, datés quand Epic donne une date — et entrent dans sprites.json le jour de leur
sortie. Le champ "released" reste lu et le filtre « À venir » réapparaît tout seul s'il
revient un esprit non sorti ; l'app remonte alors les sortis en tête au chargement, avec
un tri stable qui conserve l'ordre du fichier à l'intérieur de chaque groupe. Deux tests
couvrent ce retour : l'un démarre l'app sur un catalogue inversé, l'autre y injecte un esprit
non sorti et vérifie qu'il se range en dernier sans compter dans le total.
État au 1er novembre 2026 : Override est close, à 27 esprits et 162 pièces — son
compte définitif, figé dans sprites-override.json. Treasure Hunters ouvre à 12 esprits
et 32 pièces : trois lignes (base, Fortune, Malédiction), dix esprits qui les portent
toutes, Doux rêves et Transponder Snail qui n'ont que leur forme de base. Trois
exceptions à connaître :
Les raretés ne viennent pas d'Epic, et les traqueurs se contredisent. Sprite Catch et FN Sprite Tracker donnent les mêmes onze paliers. Fortnite.GG, qui les lit dans les données de carte du jeu, en conteste quatre — Exmarks, Chester, Guide et Crapoulpe, chaque fois d'un cran plus bas. Les sept paliers unanimes sont publiés ; les quatre contestés, plus l'escargot, portent « À confirmer » et nomment qui dit quoi. La règle n'a pas bougé, c'est elle qui a tenu Obsession hors des raretés toute la saison passée. La couleur de la carte dans l'écran Esprits du jeu tranchera plus vite que n'importe quel site.
Les illustrations ne viennent pas de la wiki. Elle n'avait rien publié le 1er novembre —
les onze noms y renvoyaient une 404, testés un à un, et les pages … Sprite y sont encore
des liens rouges. Elles viennent donc de Sprite Catch, qui les servait le jour même :
11 bases et 20 variantes, 31 images pour 31 pièces. Le script interroge toujours la wiki
d'abord et rebasculera dessus dès qu'elle publiera.
Les noms affichés sont ceux du jeu en français. Epic publie son annonce traduite, et cinq des onze y changent de nom : Mi-pelure (Halfpeel'd), Guide (Wayfinder), Varech (Kelper), Crapoulpe (Lil' Squibbly), Doux rêves (Sweet Dreams). Le nom anglais reste en sous-titre, puisque c'est celui des guides et des recherches. Le vocabulaire suit : ce sont des avis de recherche, pas des affiches.
Transponder Snail n'est annoncé nulle part : ni par Epic, ni par les suiveurs d'esprits,
ni par la wiki — et il tourne pourtant en partie. Il est entré sur un signalement en jeu,
recoupé par les fichiers du jeu qui le nomment. La règle n'a pas bougé pour autant : un
fichier servi n'est pas une sortie, mais une sortie vue en partie en est une. Son effet ne
vient que d'une source (unconfirmed: true) et son nom français reste à relever. Son
illustration, elle, a failli être écartée : c'est un dessin à plat, là où tous les autres
esprits sont des rendus en relief. Vérification faite, c'est bien l'asset du jeu — Fortnite.GG
sert le même fichier sous le nom interne FeedJet, identique octet pour octet. Le style vient
de la collaboration One Piece. Une illustration qui détonne se vérifie, elle ne se rejette
pas : la leçon est écrite dans le script.
La ligne Or est annoncée pour le 12 novembre. Elle n'entrera dans le catalogue que ce jour-là : un filtre vide et un denominateur faux coûtent plus cher qu'une ligne annoncée dans les notes.
État au 1er octobre 2026 : 25 esprits jouables et 122 pièces obtenables. Fortnitemares en a livré quatre — Spooky Dash, Vampire, Le Cerf et Plongeon dans la benne, le lauréat du concours — avec une sixième ligne de variantes, Trick or Treat.
Trois exceptions font qu'un compteur naïf se trompe :
Toutes les raretés des esprits sortis sont publiées : Spooky Dash est Mythique, Vampire et Le Cerf Légendaires, Plongeon dans la benne Épique. Les deux premières ont attendu d'être recoupées par une seconde source — un tracker donnait les quatre nouveaux « Rares », y compris Le Cerf que deux autres sources disaient Légendaire. Seuls Miel et Obsession, pas encore sortis, restent sans rareté.
Toutes les illustrations sont en place, y compris la Trick or Treat de la Couronne. Celle du Cerf avait d'abord échoué : la
wiki l'enregistre sous The_Deer_-_Item_-_Fortnite.png, sans le mot « Sprite » que le
script collait systématiquement. Il essaie désormais les deux formes avant de déclarer une
image absente. Seuls Miel et Obsession, pas encore sortis, gardent leur pastille à initiale. Cinq autres noms
scripts/fetch-sprite-icons.py interroge la Fortnite Wiki d'abord : elle nomme, date et
crédite, et c'est elle qui sert les 300 images des saisons closes. Mais elle publie avec du
retard — au lancement de Treasure Hunters, les onze esprits y renvoyaient une 404 pendant que
le jeu tournait déjà. Sprite Catch sert alors de filet : le script lit la page de l'esprit
et y récupère l'URL de chaque variante. Les noms de fichiers y portent une empreinte qui change
à chaque reversement, donc la page est relue à chaque passage plutôt qu'une URL recopiée qui
vieillirait en silence.
En troisième, FN Sprite Tracker, pour ce que les deux premières n'ont pas : Lil Uzi Vert Jr. y avait son rendu avant même sa sortie, et le Transponder Snail n'existe que là. Ses images sont en WebP sous un nom fixe, donc pas de page à relire.
Le script porte aussi les noms internes des assets, relevés sur Fortnite.GG — Exmarks est
TreasureMap, Guide est Compass, Crapoulpe est Squibbly, l'escargot est FeedJet, Lil Uzi
Vert Jr. est RookGecko. Ils ne servent à aucun téléchargement : ce site refuse les accès
automatisés, et c'est son droit. Ils identifient un esprit sans ambiguïté quand les noms
d'affichage changent d'une langue à l'autre.
Le script dit en fin de course quelles images ne sont pas venues de la wiki ; ces lignes
disparaîtront d'elles-mêmes le jour où elle publiera. Une fiche qui déclare iconPending est
annoncée comme telle, pas comme une panne.
Le script accepte un ou plusieurs catalogues en argument :
python3 scripts/fetch-sprite-icons.py public/sprites.json
Sans argument, il les parcourt tous. Rapatrier onze esprits ne justifie pas de retélécharger trois cents images, et chaque téléchargement est une occasion de perdre une entrée juste sur un incident réseau.
Pensez à incrémenter VERSION dans public/sw.js après une modification, pour que les
téléphones déjà installés récupèrent la nouvelle version — un bandeau leur proposera alors
de recharger.
Testé dans un DOM simulé, 88 vérifications au vert : génération des 17 cartes et des 102 boutons, règle « maîtrisé implique débloqué », badge Complet, compteurs et barres, filtres par rareté, statut et recherche, écriture différée dans le stockage, bouton Tout effacer, les trois modes de thème avec leur persistance et la couleur de barre d'état, la reprise d'une ancienne sauvegarde à profils, la bascule Legacy avec l'étanchéité des deux collections et le nombre exact de variantes par esprit, et surtout réouverture de l'app avec des données existantes — les coches sont toutes restituées.
Le pseudo Epic, la structure de la carte et le plan d'action ont leur propre harnais, 78 vérifications au vert : ouverture au premier lancement, silence total une fois le pseudo posé, refus du vide et des longueurs hors bornes, normalisation des espaces, relecture de l'ancien format, « Plus tard » qui n'écrit rien, effacement, étanchéité vis-à-vis de Tout effacer, et le fait que l'icône, l'effet, la source et le tableau des variantes restent enfants directs de la carte.
Les catalogues ont le leur, 1727 vérifications qui tournent sans navigateur — 1942 avec
les trois autres fichiers de tests, tous au vert : les comptes publiés (11 esprits et 31
pièces cette saison, 27 et 162 dans Override, 25 et 117 dans Runners, la sauvegarde
des 56 codes et l'absence de toute trace d'eux dans l'app), la table des collections et le fait que chaque clé de stockage reste collée à
sa saison, l'échéance du passe et sa réserve sur l'heure, l'absence de date périmée dans
les textes permanents, la répartition des raretés, l'absence de code en double, le fait qu'aucun code
n'offre une variante non obtenable, que Mega Man n'ait qu'une ligne et les quinze autres
quatre, qu'aucun esprit retiré ne laisse d'image ou d'entrée de précache derrière lui, les
trois variantes retirées de Legacy, et surtout le lien entre les données et les fichiers —
chaque esprit marqué icon a bien son PNG, chaque PNG est précaché par le service worker, et
aucun ne descend sous 288 px. C'est ce dernier contrôle qui rattrape l'oubli classique :
ajouter un esprit au JSON sans lancer le script d'icônes. Les vignettes de variantes passent
au même crible, plus deux règles à elles : une vignette ne peut exister que pour une variante
que l'esprit possède réellement, et aucun fichier ne doit traîner sans être déclaré.
Le responsive est audité avec Playwright sur 10 formats (320 à 1440 px) × 2 thèmes × les deux modes de pointeur : débordement horizontal, cibles tactiles, texte tronqué, erreurs console. Aucun défaut mesuré. L'audit vérifie aussi que la résolution source de chaque icône couvre sa taille d'affichage multipliée par la densité de l'écran — c'est ce contrôle qui a fixé les fichiers à 192 px quand l'icône est passée à 64 px.
Les rendez-vous ont vingt vérifications sur des instants figés — dont les deux changements d'heure de l'automne 2026, qui tombent une semaine d'écart entre l'Europe et les États-Unis.
Le transfert a vingt vérifications : un téléphone qui accepte le .json, un iOS qui ne veut
que le .txt, un navigateur qui ne partage rien — et le retour par Coller une sauvegarde,
y compris le cas d'un texte qui n'en est pas une, où l'app doit refuser sans rien écrire.
L'encoche de l'iPhone a les siennes, vingt aussi : les retraits d'écran passent par des
variables CSS, ce qui permet de leur donner la valeur d'un iPhone 15 Pro (59 px en haut) dans
un navigateur de bureau et de vérifier que rien ne passe dessous, en cartes comme en liste,
barre collante comprise. Un test lit aussi la feuille de style pour interdire toute règle
.appbar qui poserait un padding-top sans le retrait : c'était exactement le défaut.
L'image d'export a été rendue pour de vrai, hors navigateur, avec les vraies polices, dans les deux thèmes, et inspectée visuellement.
L'image de l'esprit occupe une colonne entière à gauche ; le nom, l'effet et la source
s'empilent à sa droite, et le tableau des variantes reprend toute la largeur en dessous.
C'est une grille nommée sur .card, pas une imbrication de conteneurs : l'icône, le bloc de
titre, l'effet, la source et le tableau restent enfants directs de la carte, ce qui permet
à la vue liste de les redisposer en une ligne ("icon top effect vt") sans toucher au HTML.
L'icône fait 96 px sur grand écran, 84 sur téléphone, 72 sous 380 px ; en vue liste elle reste petite (40 à 44 px), parce que cette vue sert à balayer et que la densité y prime.
Toucher une illustration l'ouvre en grand, avec le nom de la variante et ce qu'elle fait. Les fichiers de variante font 192 px et l'agrandissement plafonne à 208 px : au-delà ils commenceraient à s'étirer, et une image floue vaut moins qu'une image petite.
Chaque ligne du tableau des variantes porte sa propre vignette — la statue dorée pour Or, la silhouette criblée de code pour Cheat Master, les sept lignes de Legacy — pour qu'on voie ce qu'on cherche et pas seulement son nom. Quand la vignette manque (un esprit pas encore sorti), la pastille de couleur reprend sa place. Les 24 vignettes de la saison en cours sont préchargées ; les 92 de Legacy se mettent en cache à la première consultation, ce qui évite d'imposer 92 fichiers à l'installation pour une collection qu'on ouvre à l'occasion.
Non vérifié : le rendu de l'interface elle-même, l'installation sur un vrai téléphone, et le comportement de la feuille de partage, faute de navigateur dans l'environnement de développement. À confirmer de votre côté.
.apk est envoyable, mais il faut Android Studio et le SDK pour le
produire, et le destinataire doit autoriser les sources inconnues. Si vous y tenez,
Capacitor emballe ce dossier public/ tel quel en projet
Android — mais la PWA fait déjà le travail, sans build ni signature.Données recoupées le 24 septembre 2026 sur les notes officielles v42.20 d'Epic, Game Rant, Sprite Checklist, AccountShark, Beebom, The Click, lobbyhack.com, MySprites et VICE. Seule la rareté de Blinky reste non recoupée. Ce qui est annoncé mais pas encore obtenable est cité dans les notes de l'app, pas listé dans le catalogue.
Les icônes des esprits proviennent de la Fortnite Wiki. Fortnite, ses visuels et ses noms appartiennent à Epic Games. Ce projet est une œuvre de fan non commerciale, publiée dans le cadre de la Fan Content Policy d'Epic, sans lien ni affiliation avec Epic Games. Ne l'utilisez pas à des fins commerciales, et gardez l'attribution affichée dans l'app.