Skip to content
MLBBDex

Write a hero analysis

Game data updates itself; commentary has to be written. Here is how to write a hero analysis and submit it to the site.Learn more
Heroes analysed
38
Awaiting an analysis
96

What you write

Roles, lanes, skills, skins, statistics and popular builds come from the automatic sync with the wiki and the community API. An analysis adds only what no extraction produces: what the hero really does, strengths and weaknesses, counters and explained builds.

Analyses are written in French, the site's original language. Each one is a TypeScript entry added to the hero's role file in src/data/heros/.

The fields

An analysis follows the AnalyseHeros type in src/lib/types.ts. Its skills and builds each have their own shape.

The analysis — AnalyseHeros

slugstring
The hero's exact identifier, as listed in src/data/jeu/heros.json.
summarystring
One sentence on what makes the hero unique. It is also used as the meta description.
analysisstring
Two paragraphs separated by a blank line: what the hero actually does, then their limits.
skillsSkill[]
Skills in game order: passive, skill 1, skill 2, ultimate. The order is what matches each description to the wiki skill.
strengthsstring[]
Three to five short points, visible in a match.
weaknessesstring[]
Three to five short points, with what exploits them.
strongAgainststring[]
Slugs of heroes this hero handles comfortably.
weakAgainststring[]
Slugs of heroes that give this hero trouble.
buildsBuild[]
One or more builds, each with its context.

A skill — Competence

type"Passive" | "Skill 1" | "Skill 2" | "Ultimate"
Skill slot.
namestring
English name, as in game. The site displays the wiki's name.
descriptionstring
What the skill does and when to use it, without damage values.
cooldownnumber[] · optional
Cooldown per level, in seconds. Omitted for a passive.
costnumber[] · optional
Cost per level. Omitted if the hero does not use mana.

A build — Build

namestring
Short name for the build.
contextstring
When to pick this build. A build without context teaches nobody anything.
itemsstring[]
Six items, by their English name, in buying order.
emblemstring
Recommended emblem, named as in existing analyses ("Emblème de mage").
talentstring
Main emblem talent, English name.
spellstring
Battle spell, English name.

Annotated template

Copy this template to the end of the role file's list, fill it in, then remove its comments. npm run typecheck checks it on every run, so it always follows the current type.

import type { HeroAnalysis } from "@/lib/types";

/**
 * Hero analysis template.
 *
 * Copy it into the file of the hero's role (`src/data/heroes/tanks.ts`,
 * `fighters.ts`, `assassins.ts`, `mages.ts`, `marksmen.ts` or `supports.ts`),
 * fill it in, then strip its comments. It is imported nowhere:
 * `npm run typecheck` only checks it, which keeps it in line with the
 * `HeroAnalysis` type.
 *
 * Displayed text is written in French, with its accents. Item, skill, talent
 * and spell names stay in English, as in the game.
 * Nothing is copied from another site. Full guide: /fr/contribute.
 */
export const template: HeroAnalysis = {
  // Exact slug, as it appears in src/data/game/heroes.json.
  slug: "slug-du-heros",

  // One sentence: what sets the hero apart. Reused as the meta description.
  summary: "Une phrase qui dit ce que le héros a de singulier.",

  // Two paragraphs separated by a blank line: what the hero actually does,
  // then its limits. Observable facts, no superlatives.
  analysis:
    "Premier paragraphe : le plan de jeu du héros, ce qu'il fait réellement en partie.\n\n" +
    "Second paragraphe : ses limites, et ce qui les expose.",

  // Game order: passive, skill 1, skill 2, ultimate. The order is what pairs
  // each description with the wiki skill, whose name is the one that is
  // displayed.
  skills: [
    {
      type: "Passive",
      // English name, as in the game.
      name: "Passive Name",
      // The effect and how to use it, without damage values: they change
      // almost every patch. No cooldown or cost for a passive.
      description: "Ce que le passif change à la façon de jouer le héros.",
    },
    {
      type: "Skill 1",
      name: "First Skill Name",
      description: "Ce que la compétence permet, et quand s'en servir.",
      // Cooldown per level, in seconds.
      cooldown: [8, 7.5, 7, 6.5, 6, 5.5],
      // Cost per level; omit it if the hero does not use mana.
      cost: [60, 65, 70, 75, 80, 85],
    },
    {
      type: "Skill 2",
      name: "Second Skill Name",
      description: "Ce que la compétence permet, et ce qui la rend dangereuse ou fragile.",
      cooldown: [12, 11, 10, 9, 8, 7],
      cost: [70, 75, 80, 85, 90, 95],
    },
    {
      type: "Ultimate",
      name: "Ultimate Name",
      description: "Ce que l'ultime change à un combat, et le bon moment pour le lancer.",
      cooldown: [40, 35, 30],
      cost: [120, 140, 160],
    },
  ],

  // Three to five short points, observable in a match.
  strengths: ["Une force concrète, visible en partie"],
  // Three to five short points, with what exploits them.
  weaknesses: ["Une faiblesse concrète, et ce qui la punit"],

  // Slugs, not names: heroes it is comfortable against…
  strongAgainst: ["slug-adverse"],
  // … and heroes that give it trouble.
  weakAgainst: ["autre-slug"],

  builds: [
    {
      name: "Nom court du build",
      // When to pick this build: a build without context teaches nothing.
      context: "La situation dans laquelle ce build s'impose, et ce qu'il sacrifie.",
      // Six items, English in-game names, in purchase order.
      items: ["Item One", "Item Two", "Item Three", "Item Four", "Item Five", "Item Six"],
      // Emblems named as in the existing analyses.
      emblem: "Emblème de mage",
      // Main talent and battle spell, English names.
      talent: "Lethal Ignition",
      spell: "Flicker",
    },
  ],
};
View the template on GitHub

Style rules

  • French accents wherever the language needs them: the analysis text is shown to visitors, even though the project's code goes without.
  • Game terms stay in English: items, skills, talents and spells keep the name players see in game ("Winter Crown", "Flicker").
  • Nothing copied: no wiki, guide or video. An analysis taken from elsewhere, even closely reworded, will be rejected.
  • No damage values: they change almost every patch. Describe the effect, not the number.
  • Concrete over superlatives: "he wins long fights as long as the enemy doesn't buy healing reduction" beats "he is very strong".

Review, through a pull request

  1. Fork the GitHub repository and create a branch for your analysis.
  2. Add the entry to the role file: tanks.ts, fighters.ts, assassins.ts, mages.ts, marksmen.ts or supports.ts.
  3. Run npm run lint, npm run typecheck and npm test. Automated checks will run them again anyway.
  4. Open a pull request with a clear title in the imperative, in French: "ajoute l'analyse de Ling".
  5. A maintainer reviews substance and form — accuracy for the current patch, style, originality — and comments on the pull request if something needs to change.
  6. Once merged, the analysis goes live with the next deployment, and your name stays in the repository history.