Skip to content

Lexer/parser for League of Legends spell templates

License

Notifications You must be signed in to change notification settings

blakearoberts/ldragon

Repository files navigation

LDragon

LDragon uses Chevrotain to define a lexer/parser capable of compiling a League of Legends champion spell description template into an abstract syntax tree (AST).

LDragon can run in the browser, checkout the live demo!

Installation

npm install @blakearoberts/ldragon --save

Getting Started

import { ChampionBin, FontConfig, visit } from '@blakearoberts/ldragon';

const f = async <T,>(url: string) => {
  const response = await fetch(url, options)
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  return (await response.json()) as T;
}

const bin = await f<ChampionBin>(
  'https://raw.communitydragon.org/latest/game/data/characters/aatrox/aatrox.bin.json');

const fontConfig = await f<FontConfig>(
  'https://raw.communitydragon.org/latest/game/data/menu/main_en_us.stringtable.json');

const championId = 'Aatrox',
  spellKey = 'Characters/Aatrox/Spells/AatroxPassiveAbility/AatroxPassive',
  tooltip = fontConfig.entries['passive_aatroxpassive_tooltip'];

const ast = visit(championId, spellKey, bin, fontConfig, tooltip);

console.log(ast);

React Example

Checkout the example React app for a simple way to render an LDragon AST to the DOM. This example is built into a static site and hosted via this project's GitHub Pages.

AST Nodes

The AST returned from parsing a spell is comprised of nodes with relationships demonstrated by the following directed acyclic graph:

graph LR;
  D[DescriptionNode]
  TX[TextNode]
  B[BreakNode]
  EL[ElementNode]
  EX[ExpressionNode]
  TP[TemplateNode]

  DV[DataValueIdentifier]
  GC[GameCalculationIdentifier]
  GM[GameCalculationModifiedIdentifier]
  EF[EffectIdentifier]

  C[ConstantValue]
  A[AbilityLevelValue]
  CL[CharLevelValue]
  CB[CharLevelBreakpointsValue]

  subgraph Nodes
  D  --> TX & B & EL & EX & TP
  EL --> TX & EX & TP
  end

  subgraph Identifiers
  EX --> DV & GC & GM & EF
  GC --> DV & EF
  GM --> GC
  end

  subgraph Values
  DV --> C & A
  EF --> C & A
  GC -- part --> C & A & CL & CB
  GM -- multiplier --> C
  end
Loading

Contributing

Contributions are welcome! There are plenty of edge cases this library fails to parse. Issues and pull requests would be greatly appreciated!

To build and compile the TypeScript sources to JavaScript use:

npm run build

To run the unit tests use:

npm test

License

This project is licensed under the terms of the MIT license.

About

Lexer/parser for League of Legends spell templates

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages