35 heroes, four ways to read them — ranked, shaped, paired, and edited. The Roster tab is the source of truth; every other view reads from it.
your arrangement
Focus formula
Where your levels, stars, skills and gear pay back most, worked out for every hero you
own. Change a weight and the table re-sorts immediately — the point is that you can disagree with it.
Terms that score nothing for anyone are usually waiting on data, not broken.
Start here
A planner for Fate War heroes — how they rank, who pairs with whom, what beats what,
and where they go on the arena board. Everything below is optional; the app works without any of it.
How complete is it
Blanks aren't errors — anything not recorded is simply left out rather than guessed at.
These bars show what's filled in, so you can see what the suggestions have to work with.
Where your changes go
Everything you change is kept privately in this browser as a layer on top of the
published data. It stays yours, and it survives when a newer version is published.
How the Focus ranking is worked out
In the Roster, sort by Focus to see where your levels, stars, skills
and gear pay back most. Only heroes you own are ranked. Tier dominates on purpose — it's the
hero's own strength you're buying — and everything else refines the order rather than overturning it.
A tier step is worth more than any amount of team membership,
so a B-tier can't outrank an S just by appearing in your pairings. Two things override that:
what you actually meet — the Meta tallies, the biggest single term — and
whether you already own someone better. You field five teams, so roughly two heroes per
troop earn their keep; the third is a reserve and the fourth is a bench warmer, however good they'd
be on their own. Pick up a stronger hero of that troop and everyone below slides down a slot
the moment you tick the box.
Running your own copy — the files behind it
Five plain-text files sit next to hero-hub.html. Edit them, refresh, done.
The app only ever reads the first four — nothing it does can overwrite what you typed.
hero-names.js
display names and aliases
shared
core-skills.js
troop, talent trees, skin, how you get them · and every hero's five skills
shared
skill-seq.js
the order to train each hero's skills
shared
hero-mine.js
which heroes and skins you own
yours — not published
hero-data.js
tiers, pairings, arena teams, boards, portraits
written by the app
Mode key — what each tag covers
Hover any mode tag or radar axis for the same note. Send me new content and I'll add it, or edit MODE_INFO at the top of this file's script.
Troop types
Set each hero's primary troop on its card, or fill the troop column in core-skills.js. Icons you load here preview for this session only — send me the image files and I'll embed them permanently.
Talent trees
One picture can serve every hero running that build. Name the files and drop them in
icons/builds/, or load them here for this session:
Icon size
How big hero portraits are drawn — each view on its own. Tier board also covers the Timeline; hero tray covers both drag trays and the icon library.
Portraits
Pick from the icon library below, or load a screenshot of your hero roster and click a hero's face in it — the crop lands on whichever hero is targeted below and moves on to the next one without a portrait. Click any card's avatar to re-target it.
To make a portrait permanent, put a file in the portraits folder next to this page, named after the hero's id — portraits/Ganglot.png. png, webp, jpg and jpeg all work. That is all a new hero ever needs: no encoding, no code, no waiting on anyone. “Save portrait files…” writes out everything you already hold, correctly named, ready to drop in.
Icon library —
Assign order — optional
TargetCrop size150pxZoom100%
Fix names
One hero per line, original name -> correct name. Edit the right-hand side only — the left side is the id everything else hangs off. Add (Short) at the end for an alias, e.g. Rot -> Rotgar (Roro). Lines starting with # are ignored.
My changes
hero-data.js is the version everyone starts from. Anything you change is kept
separately in this browser as a layer on top of it — so it stays yours, and it survives when a newer
hero-data.js is published.
Saving gives you a small my-hero-hub.json. Load it in another
browser or on another machine and your setup comes across — it carries only your edits, not the whole roster.
Send my edits back to the project
Maintainer view. Hidden on the published page, because a
visitor pressing it would get rows describing their own browser edits and nowhere to put them.
It is off by default and remembered on this machine — ?me=1 turns it on,
?me=0 off. That is tidiness, not security: this is one public HTML file and anyone
reading the source can find the switch. It is fine because this panel has no power —
it reads your own browser and prints text, writes nothing and sends nothing anywhere.
Everything you change lives in this browser as a layer over the published files.
That is right while you are working and wrong once a fact is settled — a layer entry
shadows the file forever, so once your browser says a hero is Axe, a later correction in
core-skills.js can never reach you. This is how an edit comes home.
Your arrangement
Shared by every view. Save hero-data.js writes everything — tiers, names, troops, portraits, pairings — to a file you keep next to hero-hub.html; reload and it's all still there. The text below is the human-readable version if you'd rather send it to me.
Mode
Hero tray — drag onto a tier row to move a hero there
TroopSkinObtaintroop type, skin and how you get them are the three dropdowns under each portrait · lieutenants stay on the Roster tab
StartedWeek
Hero tray — drag into a window
Meta shifts
One mark per change. Drag a hero from the tray above the line for who came
in, and below it for who dropped off. Left is older, right is newer.
Hero Score
One card per hero, one score out of 5 for everything worth scoring —
five skills, three talents, any troop, and how often they turn up in the meta. Rate them
as a commander and again as a lieutenant, since the two seats aren't the same
hero. The TALLY card on the right of each row adds it all up in front of you, and
R 7/10 in the header says how much of that score is yours rather than a default.
Pick a mode first — a talent that wins sieges does nothing in arena.
Hero tray — drag a hero onto either side
New hero
Everything the app needs about a hero, in one place. Fill what you know —
nothing here is required to save, and the checklist tells you what's still open.
When you're done you get the exact lines to paste into core-skills.js —
into the sheet table at the top of it — and into hero-mine.js,
because those files stay the source of truth.
Add a heroSort
Merge duplicatesintothe first hero is removed; everything they hold moves to the second
This is the source of truth. Anything you add or change here flows straight into the tier board, the radar, the hero tray and the pairing slots.
Modes are equal — a hero either has one or doesn't. Their tier decides how far each reaches on the radar.
ViewHave
Context
Hero tray — drag into any slot
Show
Hero tray — drag into any slot
Compare heroes
Up to three at once. Click any hero below to swap one in.
Each axis is one mode, and the reach is that hero's commander score for it,
straight off the Hero Score tab. The dotted outline behind is what their tier claims —
where the solid web falls short of it, your ratings and your tier list disagree.
An unrated hero sits near 40 because the defaults carry them that far and no further.
Modes a hero isn't tagged for stay at zero.
All heroes — mode scores
The numbers behind the radar shapes — your rating for that mode, then what the tier list claims for it.
They only match when you've rated a hero all the way up to their tier.
Talent treesthree branches per hero · one wheel per situation