### Interactive Project Configuration Example
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/workshop-overview
An example of how project configuration and file tree structure are represented interactively. This mirrors the JSON structure.
```json
{
"name": "my-skin-mod",
"displayName": "My Skin Mod",
"version": "1.0.0",
"description": "A custom skin for Ahri",
"authors": [
{
"name": "ModderName",
"role": "Creator"
}
],
"tags": [
"skin"
],
"champions": [
"Ahri"
],
"maps": [],
"layers": [
{
"name": "base",
"priority": 0,
"description": "Base skin files"
}
]
}
```
--------------------------------
### Install wadtools with PowerShell
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Run this PowerShell one-liner to automatically install wadtools.
```powershell
irm https://raw.githubusercontent.com/LeagueToolkit/wadtools/main/scripts/install-wadtools.ps1 | iex
```
--------------------------------
### WADTools Configuration Example
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
This is an example of the `wadtools.toml` configuration file. It shows how to set global options like progress bar display and the directory for hashtable files.
```toml
show_progress = true
hashtable_dir = "C:\\Users\\YourName\\Documents\\LeagueToolkit\\wad_hashtables"
```
--------------------------------
### Clone Repository and Install Dependencies
Source: https://wiki.leaguetoolkit.dev/guides/contributing/building-from-source
Clone the LTK Manager repository and install frontend dependencies using pnpm.
```bash
# Clone the repository
git clone https://github.com/LeagueToolkit/ltk-manager.git
cd ltk-manager
# Install frontend dependencies
pnpm install
```
--------------------------------
### SCO Face Line Format Example
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/scb-sco
This example shows the format for a single face line in the SCO ASCII file. It includes the vertex count, indices for the three vertices, the material name, and UV coordinates for each vertex.
```plaintext
vertex_count idx0 idx1 idx2 MaterialName u0 v0 u1 v1 u2 v2
```
--------------------------------
### Build Production Release
Source: https://wiki.leaguetoolkit.dev/guides/contributing/building-from-source
Create a production build of the LTK Manager application. The installer will be generated in 'src-tauri/target/release/bundle/'.
```bash
pnpm tauri build
```
--------------------------------
### SCO ASCII Format Example
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/scb-sco
This is an example of the SCO ASCII text format for static meshes. It includes mesh name, central point, pivot point, vertex count and positions, and face data with material names and UV coordinates.
```plaintext
[ObjectBegin]
Name= MeshName
CentralPoint= 0.000000 0.000000 0.000000
PivotPoint= 0.000000 0.000000 0.000000
Verts= 100
-1.234567 2.345678 -3.456789
...
Faces= 50
3 0 1 2 MaterialName 0.0 0.0 1.0 0.0 0.5 0.5
...
[ObjectEnd]
```
--------------------------------
### Resolved BIN Data Example
Source: https://wiki.leaguetoolkit.dev/reference/metaclasses/overview
Demonstrates how BIN data becomes human-readable when metaclass definitions are applied, resolving property hashes to meaningful names and types.
```plaintext
ChampionStatData {
mBaseAttackDamage: f32 = 100.0
mCharName: string = "Annie"
}
```
--------------------------------
### Ritobin Metadata Block Example
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/ritobin
Defines the metadata for a Ritobin file, including its type, BIN format version, and a list of linked dependency files.
```ritobin
type: "PROP"
version: 3
linked: {
"DATA/Characters/Annie/Annie.bin"
"DATA/Characters/Shared/Shared.bin"
}
```
--------------------------------
### Start Development Server
Source: https://wiki.leaguetoolkit.dev/guides/contributing/building-from-source
Run the LTK Manager in development mode. Use 'pnpm tauri dev' for full dev mode with Rust backend and React frontend hot reload, or 'pnpm dev' for faster UI iteration by skipping Rust rebuilds.
```bash
# Full dev mode (Rust backend + React frontend with hot reload)
pnpm tauri dev
# Frontend only (skip Rust rebuild, faster UI iteration)
pnpm dev
```
--------------------------------
### Ritobin Entries Block Example
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/ritobin
Illustrates the main content of a Ritobin file, an 'entries' map where each BIN object is identified by a path hash and contains a class-typed object with named properties.
```ritobin
entries: map[hash,embed] {
0xDEADBEEF = {
SomeClassName {
propertyName: f32 = 1.5
anotherProperty: string = "hello"
}
}
}
```
--------------------------------
### Base Layer with Optional Extras
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/layers
Example of a base layer with optional high-resolution textures and particle effects. Users can choose to enable the optional layers.
```plaintext
base (priority: 0) - Core skin files
high-res (priority: 1) - High-resolution textures
particles (priority: 1) - Custom particle effects
```
--------------------------------
### Class Identification Example
Source: https://wiki.leaguetoolkit.dev/reference/metaclasses/overview
Illustrates how class hashes are computed using the FNV-1a hash of the class name. This hash is used to identify metaclass definitions for BIN objects.
```plaintext
Class name: "SpellDataResource"
Class hash: FNV-1a("SpellDataResource") → 0x______
```
--------------------------------
### Multiple Variant Layers
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/layers
Example demonstrating multiple variants of a mod, such as color variations. Users select one variant, and due to equal priority, only one will be active.
```plaintext
base (priority: 0) - Shared files
variant-a (priority: 1) - Color variant A
variant-b (priority: 1) - Color variant B
```
--------------------------------
### Unresolved BIN Data Example
Source: https://wiki.leaguetoolkit.dev/reference/metaclasses/overview
Shows the appearance of a BIN object without metaclass definitions, where properties are represented by numeric hashes and typed but unnamed values.
```plaintext
0xA1B2C3D4 {
0x1234ABCD: f32 = 100.0
0x5678EF01: string = "Annie"
}
```
--------------------------------
### Get Hashtable Directory
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Check the current directory where wadtools stores its hashtable files.
```bash
wadtools hashtable-dir
```
--------------------------------
### Build wadtools from Source
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Clone the repository, navigate to the directory, and build the release version. The binary will be located in `target/release/wadtools`.
```bash
git clone https://github.com/LeagueToolkit/wadtools.git
cd wadtools
cargo build --release
```
--------------------------------
### Run Project Checks
Source: https://wiki.leaguetoolkit.dev/guides/contributing/project-guidelines
Execute type checking, linting, and formatting for the project. This command should be run before committing changes.
```bash
pnpm check
```
--------------------------------
### Ritobin to Binary BIN Conversion
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/ritobin
Illustrates the bidirectional conversion between Ritobin and binary BIN file formats. This interchangeability allows for flexible data handling and processing.
```text
Binary BIN (.bin) ↔ Ritobin (.bin / .ritobin)
```
--------------------------------
### Print Hashtable Directory
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Prints the default hashtable directory path for the current platform.
```APIDOC
## hashtable-dir (alias: hd)
### Description
Print the default hashtable directory path for the current platform.
### Usage
```
wadtools hashtable-dir
```
```
--------------------------------
### Download Hashtables
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Use this command to download hashtable files from CommunityDragon. This is necessary for resolving hash values to human-readable file paths.
```bash
wadtools download-hashes
```
--------------------------------
### Enable Verbose Logging for Development
Source: https://wiki.leaguetoolkit.dev/guides/contributing/building-from-source
Configure RUST_LOG environment variable to enable trace-level logging for ltk_manager and info-level logging for tauri during development.
```bash
RUST_LOG=ltk_manager=trace,tauri=info pnpm tauri dev
```
--------------------------------
### Run Linting and Formatting Checks
Source: https://wiki.leaguetoolkit.dev/guides/contributing/building-from-source
Execute various checks for code quality, including type checking, linting, formatting, and comprehensive checks. Also includes specific Rust checks using cargo.
```bash
# Type check
pnpm typecheck
# Lint
pnpm lint
# Format
pnpm format
# All checks at once
pnpm check
# Rust checks
cargo clippy -p ltk-manager
cargo fmt -p ltk-manager
```
--------------------------------
### Quantized Quaternion Bit Assembly
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/anm
Shows how to assemble a 48-bit integer from three 16-bit unsigned integers for quantized quaternion data.
```csharp
bits = u16[0] | (u16[1] << 16) | (u16[2] << 32)
```
--------------------------------
### Layer Content Directory Structure
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/layers
Illustrates the directory structure for layer content within a mod project. Each layer maps to a subdirectory under 'content/', containing '.wad.client' folders for file organization.
```plaintext
Directorymy-mod/
mod.config.json
Directorycontent/
Directorybase/
DirectoryAhri.wad.client/
DirectoryDATA/
DirectoryCharacters/
DirectoryAhri/
DirectorySkins/
...
Directoryhigh-res/
DirectoryAhri.wad.client/
DirectoryDATA/
DirectoryCharacters/
DirectoryAhri/
DirectorySkins/
...
```
--------------------------------
### Run Rust Checks
Source: https://wiki.leaguetoolkit.dev/guides/contributing/project-guidelines
Perform code analysis and formatting checks specifically for the Rust backend. 'clippy' checks for common mistakes and 'fmt' formats the code.
```bash
cargo clippy -p ltk-manager
```
```bash
cargo fmt -p ltk-manager
```
--------------------------------
### Render Binary Structure Diagram
Source: https://wiki.leaguetoolkit.dev/guides/contributing/wiki-authoring
Use the BinaryStructure component to display an interactive byte-level diagram of a binary format. Hydrates when scrolled into view.
```javascript
import BinaryStructure from '../../../../components/BinaryStructure.svelte';
```
--------------------------------
### Image Comparison Slider
Source: https://wiki.leaguetoolkit.dev/guides/contributing/wiki-authoring
Implement an image comparison slider using the BeforeAfter component. This component allows users to drag between two images to see differences. Hydrates when scrolled into view.
```javascript
import BeforeAfter from '../../../../components/BeforeAfter.svelte';
```
--------------------------------
### JSON Project Configuration
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/workshop-overview
Defines mod metadata using JSON format. Ensure all required fields like name, displayName, version, and authors are present.
```json
{
"name": "my-skin-mod",
"displayName": "My Skin Mod",
"version": "1.0.0",
"description": "A custom skin for Ahri",
"authors": [
{ "name": "ModderName", "role": "Creator" }
],
"tags": ["skin"],
"champions": ["Ahri"],
"maps": [],
"layers": [
{
"name": "base",
"priority": 0,
"description": "Base skin files"
}
]
}
```
--------------------------------
### Metaclass Relationship Diagram
Source: https://wiki.leaguetoolkit.dev/reference/metaclasses/overview
Illustrates the relationship between Metaclass definitions, BIN files, Ritobin, and FNV-1a hashes, showing how they connect different layers of game data.
```plaintext
Metaclass definitions (extracted from game binary)
↓ provide schemas for
BIN files (binary property data)
↓ can be viewed as
Ritobin (human-readable text)
↓ identify properties via
FNV-1a hashes (hashing algorithms)
```
--------------------------------
### TOML Project Configuration
Source: https://wiki.leaguetoolkit.dev/guides/mod-creation/workshop-overview
Defines mod metadata using TOML format. This format is an alternative to JSON for project configuration.
```toml
name = "my-skin-mod"
displayName = "My Skin Mod"
version = "1.0.0"
description = "A custom skin for Ahri"
tags = ["skin"]
champions = ["Ahri"]
maps = []
[[authors]]
name = "ModderName"
role = "Creator"
[[layers]]
name = "base"
priority = 0
description = "Base skin files"
```
--------------------------------
### Download Hashtables
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Downloads community-maintained hashtable files from CommunityDragon to the configured hashtable directory. These files map hashes to file paths.
```APIDOC
## download-hashes (alias: dl)
### Description
Download community-maintained hashtable files from CommunityDragon to the configured hashtable directory.
### Usage
```
wadtools download-hashes
```
### Details
Downloads `hashes.game.txt` and `hashes.lcu.txt`. These files map xxHash64 values to their original file paths, enabling human-readable output in `extract`, `list`, and `diff` commands.
```
--------------------------------
### Ritobin Empty and Optional Values
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/ritobin
Demonstrates how to declare empty containers and optional values in Ritobin. Use empty curly braces for empty lists and optional types without a value. For optional types with a value, enclose the value in curly braces.
```ritobin
items: list[u32] {}
```
```ritobin
opt: option[f32] {}
```
```ritobin
opt: option[f32] { 3.14 }
```
--------------------------------
### SKN Header Structure (Little-Endian)
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/skn
Defines the initial fields of an SKN file, including magic number, version, and counts. All multi-byte values are little-endian.
```plaintext
0x00 magic u32 4B 0x00112233
0x04 version_major u16 2B Major version (0, 2, or 4)
0x06 version_minor u16 2B Minor version (always 1)
```
--------------------------------
### Quantized Quaternion Decompression to Float
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/anm
Explains the formula for decompressing a 15-bit component to a float value within the range [-1/√2, +1/√2].
```csharp
float = value / 32767.0 * sqrt(2) - 1/sqrt(2)
```
--------------------------------
### Enable Verbose Logging with RUST_LOG
Source: https://wiki.leaguetoolkit.dev/guides/mod-management/troubleshooting
Set the RUST_LOG environment variable to enable verbose logging for LTK Manager and Tauri. This is useful for debugging development issues.
```bash
RUST_LOG=ltk_manager=trace,tauri=info
```
--------------------------------
### SKN Version 2 Header Fields
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/skn
Details the header fields for Version 2 SKN files, introducing support for multiple named submesh ranges.
```plaintext
0x08 range_count u32 Number of submesh ranges
0x0C ranges N × 80 range[] Array of SkinnedMeshRange entries
… index_count i32 Total number of triangle indices
… vertex_count i32 Total number of vertices
```
--------------------------------
### Compare WAD Files
Source: https://wiki.leaguetoolkit.dev/tools/wadtools/overview
Compares two WAD files and shows differences, including new, removed, modified, and renamed chunks. Supports filtering.
```APIDOC
## diff (alias: d)
### Description
Compare two WAD files and show differences. Detects new, removed, modified, and renamed chunks.
### Usage
```
wadtools diff -r -t [OPTIONS]
```
### Options
| Option | Short | Description |
|---|---|---|
| `--reference ` | `-r` | Reference (old) WAD file |
| `--target ` | `-t` | Target (new) WAD file |
| `--hashtable ` | `-H` | Hashtable file for name resolution |
| `--output ` | `-o` | Output diffs to CSV file |
| `--pattern ` | `-x` | Filter diffs by regex |
| `--hash ` | | Filter by specific hashes. Repeatable |
| `--filter-invert` | `-v` | Invert filters |
### Example
Compare two versions of a champion WAD after a patch:
```
wadtools diff -r Annie_old.wad.client -t Annie_new.wad.client
```
Export diff to CSV:
```
wadtools diff -r Annie_old.wad.client -t Annie_new.wad.client -o annie_changes.csv
```
```
--------------------------------
### FNV-1a Hashing Algorithm
Source: https://wiki.leaguetoolkit.dev/reference/hashing/algorithms
The FNV-1a algorithm is the primary hashing method used in the League engine for various identifiers. Input strings are normalized to lowercase and path-separated before hashing.
```plaintext
hash = offset_basis
for each byte in input:
hash = hash XOR byte
hash = hash * prime
return hash
```
--------------------------------
### SKN Index Buffer Format
Source: https://wiki.leaguetoolkit.dev/reference/file-formats/skn
Describes the format of the index buffer, which immediately follows the header and range data in an SKN file.
```plaintext
count × 2 u16[] Triangle indices (3 indices per face)
```
--------------------------------
### SDBM Hash Algorithm
Source: https://wiki.leaguetoolkit.dev/reference/hashing/algorithms
The SDBM hash is an auxiliary hash function used in some legacy League file handling. It involves bitwise shifts and arithmetic operations on input bytes.
```plaintext
hash = 0
for each byte in input:
hash = byte + (hash << 6) + (hash << 16) - hash
return hash
```