### 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 ```