> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/dolphin-emu/dolphin/llms.txt
> Use this file to discover all available pages before exploring further.

# Resource Packs

> Create and manage distributable texture and resource packs

## Overview

Resource Packs provide a standardized way to package, distribute, and manage custom textures for games. They use ZIP archives with metadata to enable easy installation, priority management, and removal.

## Specification Version

This documentation covers **Resource Pack Specification v2**, which adds compression support. Version 1 packs are also supported.

## Pack Structure

```
resource-pack.zip
├── manifest.json
├── logo.png (optional)
└── textures/
    └── GAMEID/
        ├── texture1.png
        ├── texture2.png
        └── ...
```

### Game ID Directories

The `GAMEID` folder name determines which games use the pack:

* **Full Game ID**: `SMNE01` (New Super Mario Bros. Wii, NTSC)
* **Region-agnostic**: `SMN` (New Super Mario Bros. Wii, all regions)
* **Multiple directories**: Create multiple `GAMEID` folders for multi-game packs

## Manifest File

### Required Fields

<ResponseField name="name" type="string" required>
  Display name of your texture pack
</ResponseField>

<ResponseField name="id" type="string" required>
  Alphanumeric identifier (used for internal tracking)
</ResponseField>

<ResponseField name="version" type="string" required>
  Version string (any format)
</ResponseField>

### Optional Fields

<ResponseField name="description" type="string">
  Description of what the pack does
</ResponseField>

<ResponseField name="authors" type="array">
  List of author names
</ResponseField>

<ResponseField name="website" type="string">
  URL to pack website (must include protocol: `https://`)
</ResponseField>

<ResponseField name="compressed" type="boolean">
  **v2 only**: Allows ZIP compression (default: `false`)

  <Warning>
    If set to `true`, future versions that load textures directly from packs may not support your pack.
  </Warning>
</ResponseField>

### Example Manifest

<CodeGroup>
  ```json Complete Manifest (v2) theme={null}
  {
    "name": "My Texture Pack!",
    "id": "my-texture-pack-by-doe",
    "version": "2",
    "authors": ["John Doe", "Jane Doe"],
    "website": "https://example.com/my-texture-pack",
    "description": "A cool texture pack made by me!",
    "compressed": true
  }
  ```

  ```json Minimal Manifest (v1) theme={null}
  {
    "name": "Simple Pack",
    "id": "simple-pack",
    "version": "1.0"
  }
  ```
</CodeGroup>

<Note>
  Manifests missing required fields will not load. Validate your JSON before packaging.
</Note>

## Logo Image

### Requirements

* **Format**: PNG only
* **Dimensions**: Maximum 256×256 pixels
* **Alpha channel**: Supported (transparency allowed)
* **Location**: `logo.png` in ZIP root

### Usage

The logo displays in Dolphin's Resource Pack manager, helping users identify your pack visually.

## Texture Files

### Naming Convention

Texture filenames must match Dolphin's dumped texture names:

```
tex1_256x256_m_a1b2c3d4e5f67890_14.png
efb1_n000007_160x120_6.png
```

### Finding Texture Names

<Steps>
  <Step title="Enable Texture Dumping">
    Graphics Settings > Advanced > "Dump Textures"
  </Step>

  <Step title="Play Game">
    Run the game and trigger the textures you want to replace
  </Step>

  <Step title="Locate Dumps">
    Find textures in:

    ```
    User/Dump/Textures/GAMEID/
    ```
  </Step>

  <Step title="Use Exact Names">
    Custom textures must use the exact same filenames as dumped textures
  </Step>
</Steps>

### Supported Formats

* **PNG**: Primary format, supports transparency
* **DDS**: DirectDraw Surface (advanced)

## Compression

### Version 1 Behavior

<Warning>
  v1 packs **must be uncompressed** (store-only mode) or they will fail to load.
</Warning>

Create uncompressed ZIPs using:

* **7-Zip**: Select "Store" compression level
* **Command line**: `zip -0 -r pack.zip *`

### Version 2 Behavior

With `"compressed": true` in manifest, standard ZIP compression is allowed:

```bash theme={null}
# Standard compression
zip -r pack.zip manifest.json logo.png textures/

# Or with 7-Zip GUI
# Select "Normal" or "Maximum" compression
```

## Installation

### User Installation

1. Copy ZIP file to:
   ```
   Dolphin User Directory/ResourcePacks/
   ```

2. Open Dolphin Resource Pack Manager

3. Enable the pack

### Installation Location

**Windows**:

```
C:\Users\<username>\Documents\Dolphin Emulator\ResourcePacks\
```

**macOS**:

```
~/Library/Application Support/Dolphin/ResourcePacks/
```

**Linux**:

```
~/.local/share/dolphin-emu/ResourcePacks/
```

## Activation Process

When a resource pack is **activated**:

1. Dolphin copies textures from `pack.zip/textures/` to:
   ```
   User/Load/Textures/GAMEID/
   ```

2. Higher priority packs overwrite files from lower priority packs

3. Textures remain in place until pack is deactivated

### Priority System

Resource packs have user-defined priority order in the manager:

* **Higher position** = Higher priority
* **Conflicts resolved** by taking the higher-priority pack's file
* **Change order** by dragging packs in the manager

<Note>
  Activate "Load Custom Textures" in Graphics Settings > Advanced for packs to take effect.
</Note>

## Deactivation Process

When a resource pack is **deactivated**:

1. Dolphin removes the pack's texture files from `Load/Textures/`

2. If a lower-priority pack provides the same texture, it remains (was already overwritten)

3. If no other pack provides a texture, it's deleted

<Warning>
  Always deactivate packs through the Resource Pack Manager. Manual file deletion can leave orphaned files.
</Warning>

## Conflict Resolution

When multiple packs provide the same texture:

1. **Higher priority pack wins**
2. Lower priority files are not copied (overwritten)
3. Changing priority re-copies files in new order

### Example

```
Pack A (Priority 1): texture1.png, texture2.png
Pack B (Priority 2): texture2.png, texture3.png

Result:
  texture1.png → from Pack A
  texture2.png → from Pack B (higher priority)
  texture3.png → from Pack B
```

## Legacy Migration

If you have pre-resource-pack custom textures:

1. Dolphin detects them on first run with Resource Pack feature
2. Creates `legacy.zip` containing all unassigned custom textures
3. `legacy.zip` appears as a resource pack in the manager
4. Manage like any other pack

## Creating a Pack

<Steps>
  <Step title="Prepare Textures">
    Create or obtain replacement texture files (PNG format)
  </Step>

  <Step title="Organize Structure">
    Create folder structure:

    ```
    MyPack/
    ├── manifest.json
    ├── logo.png
    └── textures/
        └── GAMEID/
            └── [texture files]
    ```
  </Step>

  <Step title="Write Manifest">
    Create `manifest.json` with required fields:

    * name
    * id
    * version
  </Step>

  <Step title="Create Logo (Optional)">
    Design a 256×256 PNG logo
  </Step>

  <Step title="Create ZIP">
    **For v1 (uncompressed)**:

    ```bash theme={null}
    zip -0 -r MyPack.zip manifest.json logo.png textures/
    ```

    **For v2 (compressed)**:

    ```bash theme={null}
    zip -r MyPack.zip manifest.json logo.png textures/
    ```

    Add `"compressed": true` to manifest
  </Step>

  <Step title="Test">
    Copy to `ResourcePacks/` folder and enable in Dolphin
  </Step>
</Steps>

## Distribution

### Best Practices

* **Compress with v2**: Use `"compressed": true` for smaller downloads
* **Include readme**: Add installation instructions for users
* **Version properly**: Increment version for updates
* **Host reliably**: Use stable hosting for `website` URL
* **License clearly**: Include license information for textures

### File Size Tips

* Optimize PNGs with tools like `pngcrush` or `optipng`
* Use appropriate texture resolution (don't over-scale)
* Remove unused textures from pack
* Test compressed vs uncompressed trade-offs

## Troubleshooting

<AccordionGroup>
  <Accordion title="Pack Won't Load">
    * Verify all required manifest fields present
    * Check JSON syntax (use validator)
    * Ensure ZIP isn't corrupted
    * For v1: Verify ZIP is uncompressed (store-only)
  </Accordion>

  <Accordion title="Textures Not Appearing In-Game">
    * Enable "Load Custom Textures" in Graphics Settings
    * Verify pack is activated (checked) in Resource Pack Manager
    * Check texture filenames match dumped names exactly
    * Ensure Game ID folder name is correct
  </Accordion>

  <Accordion title="Wrong Textures Showing">
    * Check pack priority order in manager
    * Higher packs override lower packs
    * Deactivate conflicting packs to test
  </Accordion>

  <Accordion title="Can't Remove Pack">
    * Deactivate pack first (uncheck in manager)
    * Wait for deactivation to complete
    * Then delete ZIP file
    * Manually clean `Load/Textures/` if needed
  </Accordion>
</AccordionGroup>

## Related Topics

<CardGroup cols={2}>
  <Card title="Dynamic Input Textures" icon="gamepad" href="/advanced/dynamic-input-textures">
    Create controller-aware button prompt textures
  </Card>

  <Card title="Graphics Mods" icon="palette" href="/advanced/graphics-mods">
    Modify rendering behavior beyond textures
  </Card>
</CardGroup>
