Skip to content

Instantly share code, notes, and snippets.

@spycrab
Last active March 4, 2024 13:29
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spycrab/9d05056755d8d7908bdb871a99d050bf to your computer and use it in GitHub Desktop.
Save spycrab/9d05056755d8d7908bdb871a99d050bf to your computer and use it in GitHub Desktop.
Resource pack specification v1

Dolphin Resource Pack Specification v2

This document is to be used as a reference when creating resource packs or writing programs that are to be capable of handling them.

Format

Dolphin Resource Packs are zip archives with the following file structure:

resource-pack.zip
\__ manifest.json
\__ logo.png (optional)
\__ textures (Directory)
    \__ GAMEID (Directory)
        \___ TEXTURES GO HERE

If you intend to use v1: Your zip file may not be compressed or else your pack will not load (You can create uncompressed zips with software like 7-Zip).
(This is to ensure that loading textures directly from resource packs remains a viable option in the future)

v2: Supports compressed texture packs if compressed is true.

GAMEID can be one or multiple directories which are named after:

  • a complete Game ID (e.g. SMNE01 for "New Super Mario Bros. Wii (NTSC)")
  • one without a region (e.g. SMN for "New Super Mario Bros. Wii (All regions)").

logo.png

The logo you provide has to be in PNG format and should not exceed the dimensions 256x256 pixels. The alpha channel is supported so your logo can be partially transparent.

manifest.json

The manifest.json file contains metadata that helps users identify your resource pack and is therefore mandatory.

Possible fields

Identifier Function Required Since
name Name of your texture pack Yes v1
id Alphanumeric identifier for your pack Yes v1
version Version (any string) Yes v1
description Description No v1
authors List of authors No v1
website Link to your website(with protocol!) No v1
compressed Allows you to compress your textures (1) No v2
  • (1) This will have the side effect that if Dolphin implements loading textures from the texture pack directly, your pack might not be supported

If your manifest doesn't contain all required fields, it won't load.

Example

Here's an example manifest.json that contains all supported fields:

{
"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!"
}

Conflicts

If there are conflicts (two texture packs providing the same file), they are resolved using the user-assigned order in which the higher entry in the list always overrides the ones that come afterwards.

Installation

Resource packs are loaded from $DOLPHIN_USER_FOLDER/ResourcePacks.

Removal

Please remove the resource packs via the resource pack manager instead of just deleting them so they don't remain permanently activated.

Activation

The actual installation process (Activation) just moves the contents of the pack's textures directory into $DOLPHIN_USER_FOLDER/Load/Textures.

Deactivation

Texture packs will be removed (Deactivated) by removing their files from $DOLPHIN_USER_FOLDER/Load/Textures.

If there's an active higher priority texture pack that provides the same file as a lower priority one, Dolphin won't remove this file as it has already been overriden.

Migration

If a user performs a migration, pre-resource-pack files that cannot be assigned to any particular pack are combined into a legacy.zip so they can be managed like any other resource pack.

UI

You can manage texture packs in Dolphin using the Resource Pack Manager (Tools -> Resource Pack Manager).

The texture pack manager consists of:

  • A table view listing all resource packs and their metadata, plus priority
  • Action buttons on the side that act upon the currently selected entry (except for Install...)
    • Install... - Copies a resource pack into the appropriate folder
    • Remove - Deletes the actual resource pack itself
    • Activate - See Activation
    • Deactivate - See Deactivation
    • Move up / down - Changes the resource pack priorities
    • Migrate - See Migration

Drag and drop reordering and resource pack installation are low-priority and might be introduced later on

Copy link

ghost commented Jan 2, 2019

Suggestion for corrections:
CONFLICTS -> Currently it says: "using the user-assigned order in which the later in the list always overrides the previous ones."
But if the order is reversed for the GUI so that the first loaded pack is at the bottom (which makes UX sense IMO) The conflict in the "conflicts" is that user-assigned is implying a GUI but the "latter on the list" doesn't make sense for GUI - unless that part is talking internally/dev/pack creation.

Copy link

ghost commented Jan 14, 2019

(This is to ensure that loading textures directly from resource packs directly remains a viable option in the future)

"directly" is written two times

@Jaffacakelover
Copy link

I made a basic testure pack following the above. When the folder in a ZIP is called textures the pack would not load, but it does when the folder is called Textures. So it appears that the directory name is case sensitive.
Could this requirement be removed, or changed in the instructions above?

@Jaffacakelover
Copy link

Suggestion: Could regular unzipped folders be added to the supported formats, as long as there's a manifest / icon file in there? This could be good for works in progress. Although if all the manifest files went into e.g. resources/load/textures, then it would have be called [gameid]-manifest.json instead of manifest.json.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment