FG Notation

approved

by teaya

Render fighting game combo notation for Marvel Tokon, Street Fighter, Tekken, Guilty Gear, Granblue and more into clean, colour-coded combos. - This plugin has not been manually reviewed by Obsidian staff.

53 downloadsUpdated 1mo agoMIT

FG Notation

Render fighting game combo notation in Obsidian — for any game, not just one.

```fg:tokon
input: 236M > M > 2H > jump > M H > M H H > A > 214M > 623M > jump > H 6H > H 6H H
name: Magik Basic Assist Loop
damage: 45000
hits: 26
```

Each step of the combo becomes a chip, buttons are coloured using the game's own palette, motions and directions get tooltips (236 → "Quarter-circle forward"), and the metadata renders as a compact stat row.

Install

Manually — download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/fg-notation/, then enable it under Settings → Community plugins.

With BRAT — add kh0p/fg-notation as a beta plugin.

Block syntax

The fence is fg, then the game, then any options:

fg:<game>[:<option>…]
OptionEffect
imgDraw directions and motions as arrow glyphs instead of digits
compactDrop the card chrome — just the accent bar and the combo
plainNo chips; colourised text only
nobadgeHide the game badge
sm / md / lgOverride the size for this block

Example: ```fg:ggst:img:compact

Fields

Everything is optional. A block with no input: line treats its bare text as the notation, so ```fg:ggst followed by 5P > 2K xx 236K just works.

input (aliases: combo, notation) · name (title) · damage (dmg) · hits · character (char) · meter (cost, gauge) · position (pos) · works · difficulty · video (link) · notes · tags

Field names are case-insensitive, so Hits: 26 is the same as hits: 26. Unknown key: value lines are kept and shown verbatim rather than dropped.

Put several combos in one block by separating them with ---:

```fg:sf6
input: cr.MK xx DR > 5HP > 236HP
name: Midscreen
---
input: 5HP xx 214PP xx 236236P
name: Corner, with super
```

Supported games

idGameNotation
tokonMARVEL Tōkon: Fighting SoulsL/M/H/U + A (Assemble)
sf6Street Fighter 6LP–HK, Drive system
sf3SF III: 3rd Strike / SFVLP–HK
tekkenTekken 8 / 71–4 buttons, letter directions
ggstGuilty Gear -Strive-P K S HS D
ggxrdGG Xrd / +RP K S HS D
gbvsrGranblue Fantasy Versus: RisingL M H U
bbcfBlazBlue: CentralfictionA B C D
uniUnder Night In-Birth IIA B C D
mbtlMelty Blood: Type LuminaA B C D
dbfzDragon Ball FighterZL M H S + assists
mvc3Ultimate Marvel vs. Capcom 3L M H S + assists
sgSkullgirlsLP–HK
kofKing of Fighters XVA B C D
cotwFatal Fury: City of the WolvesLP LK HP HK, REV
mk1Mortal Kombat 11–4 buttons, F/B/D/U
vf5Virtua Fighter 5P K G
sc6Soulcalibur VIA B K G
genericAnything elseBroad numpad vocabulary

Most have aliases — strive, gg, t8, granblue, melty, umvc3 and so on all resolve. Autocomplete lists them all.

Adding your own

Settings → Custom games takes a JSON array of profiles with the same shape as the built-ins. An id matching a built-in replaces it, so you can retune colours or add a button without forking the plugin.

How the notation is read

Three families, because the games genuinely disagree:

  • numpad — digits are directions (2H is down + Heavy) and digit runs are greedily matched against known motions, longest first, so 632146HS stays one motion instead of collapsing into 63 + 214 + 6.
  • tekken — digits 1–4 are buttons, directions are letters, and case is meaningful: f taps forward, F holds it. This is the only case-sensitive profile.
  • nrs — Mortal Kombat: digits 1–4 are buttons, directions are F/B/D/U.

Beyond that the tokenizer understands connectors (>, ,, xx, ~, ->, /), prefixes (j., cr., cl., f., c., dl., TK, IAD), annotations (CH, PC, OTG, x3, [4] charge, (2) hit counts), and plain-English steps like jump, dash and land, which render as muted stage directions.

Anything it does not recognise is left alone and shown as text — an unknown move name never gets chopped into letters.

Autocomplete

With autocomplete on (default):

  • Typing ```fg: offers the game list. Picking one scaffolds the whole block — input:, name:, damage:, hits: and the closing fence — and puts the cursor after input: .
  • On an empty line inside a block, the field list appears, with an "Insert combo template" entry at the top when the block is still empty.

Which fields the template inserts is configurable in settings.

There are also two commands: Insert combo block (with a game picker) and Insert combo block (default game).

Styling

The stylesheet exposes a Style Settings section (notation size, chip radius, card radius, accent bar width, button fill strength, chip background) if you use the Style Settings plugin. Colours are Obsidian theme variables throughout, so it follows light and dark automatically.

Arrow glyphs are drawn inline as SVG rather than fetched from a wiki or combo site, so :img works offline, in exports, and without hotlinking anyone's assets.

Clipboard use

Each combo card has a copy button that writes the raw notation to your clipboard. It only ever writes, never reads, and only in response to a click. Turn it off with the "Copy button" setting if you would rather the plugin not touch the clipboard at all.

Development

npm install
npm run dev      # watch build
npm run build    # typecheck + minified build
node test/run.mjs      # tokenizer + block-parser tests
node test/preview.mjs  # writes preview.html showing every example rendered

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.