The Smogon / Pokémon Showdown! sprite repository
Go to file
Christopher Monsanto 0c47e34a43 Build refactor
There's still more implementation cleanup to do, but I at least wanted
to publish the new build DSL, which is stable-ish at this point
2020-05-06 01:45:56 -04:00
src Add gen5-style Bird type 2020-05-04 11:44:23 -04:00
tools deploy: baseName -> basename 2020-05-01 20:11:28 -04:00
util Build refactor 2020-05-06 01:45:56 -04:00
vendor Add support for DeflOpt 2020-05-01 07:38:36 -04:00
.editorconfig Deploy DSL, take 3 2020-04-30 21:48:11 -04:00
.gitignore User-configurable compression settings 2020-05-01 03:08:11 -04:00
pnpm-lock.yaml Remove debug output from tools/deflopt 2020-05-01 07:46:04 -04:00
pnpm-workspace.yaml Add support for DeflOpt 2020-05-01 07:38:36 -04:00
ps.deploy.js build missing cap dex/ entries, deploy cap dex/ 2020-05-02 23:01:22 -04:00
README.md add compression options for spritesheets 2020-05-02 18:48:56 -04:00
smogon.deploy.js move cap from src/noncanonical => src/cap 2020-05-01 20:06:24 -04:00
Tupfile.ini Add models & skeleton build 2020-04-12 23:21:02 -04:00
Tupfile.lua Build refactor 2020-05-06 01:45:56 -04:00
Tuprules.lua Build refactor 2020-05-06 01:45:56 -04:00

Pokémon Sprites

The Smogon / Pokémon Showdown! sprite repository.

Installation

This project depends on

Windows

Windows binaries of these dependencies can be found on the download pages of the sites listed above.

Linux

$ sudo apt install nodejs imagemagick advancecomp wine
$ sudo npm install -g pnpm

Build tup from source:

$ sudo apt install build-essential pkg-config libfuse-dev
$ git clone git://github.com/gittup/tup.git
$ cd tup
$ ./bootstrap.sh
$ sudo cp tup /usr/local/bin/tup
$ sudo cp tup.1 /usr/local/share/man

You may have to build imagemagick from source to get version 7.

$ sudo apt install build-essential pkg-config libltdl-dev libperl-dev libpng-dev
$ wget https://imagemagick.org/download/ImageMagick.tar.gz
$ tar xf ImageMagick.tar.gz
$ cd ImageMagick-*
$ ./configure --with-modules --enable-shared --with-perl
$ sudo make install
$ sudo ldconfig /usr/local/lib

macOS

Using brew on a macOS:

$ brew cask install osxfuse wine-stable
$ brew install tup imagemagick advancecomp

Building

Install dependencies once with pnpm install. Then, to build:

$ tup

Configuration

Build settings are configurable in tup.config.

  • CONFIG_DEFAULT_OPTIPNG: Command line to pass to optipng.
  • CONFIG_DEFAULT_ADVPNG: Command line to pass to advpng.
  • CONFIG_DEFLOPT_PATH: Path to DeflOpt.exe. If using Wine, you have to copy it somewhere outside the Tup tree.
  • CONFIG_DEFAULT_DEFLOPT: true, false, or blank

There are src-specific versions of these settings:

  • CONFIG_TRAINERS_<PROGRAM>: Compression options for trainers/ only.
  • CONFIG_DEX_<PROGRAM>: Compression options for dex/ only.
  • CONFIG_MODELS_<PROGRAM>: Compression options for models/ only.
  • CONFIG_SPRITESHEET_<PROGRAM>: Compression options for spritesheets only.

For example, these settings reflect the compression settings for the files chaos uploaded in src/:

CONFIG_DEFAULT_OPTIPNG=-o7
CONFIG_DEFAULT_ADVPNG=-z4 -i5000
CONFIG_DEFLOPT_PATH=/home/monsanto/.local/bin/DeflOpt.exe
CONFIG_DEFAULT_DEFLOPT=true

Filename Scheme

Pokemon sprite filenames are in a 1-to-1 correspondence with the Pokemon's name, for ease of processing. Filenames may be directly substituted in shell commands without escaping. This naming scheme means that some of the filenames in src/ are a little awkward looking to humans, but it means that no additional data beyond what is encoded in the filesystem is required to determine the correct name for any given Pokémon.

  • Filenames must conform to the POSIX portable filename character set, [0-9a-zA-Z-._]. To ensure this, we encode filenames according to the following rules. Characters in [0-9a-zA-Z-.] are left as-is. Spaces are converted to an underscore. Other characters are escaped using two underscores and four hex characters, similar to JavaScript Unicode escapes. (example: Flabébé -> Flabe__0301be__0301)

    The following JS functions may be useful:

    function encode(s) {
       return s.replace(/[^0-9a-zA-Z-. ]/g, c => '__' + c.charCodeAt(0).toString(16).padStart(4, '0')).replace(" ", "_");
    }
    
    function decode(s) {
       return s.replace(/__(....)/g, (_, m) => String.fromCharCode(parseInt(m, 16))).replace("_", " ");
    }
    
  • Formes are separated with two dashes from their base. (example: Necrozma--Dawn-Wings)

  • Cosmetic female formes are --Female instead of --F, so that you may distinguish it from Unown.

Gotchas

Tup, like Git, tracks files, not directories. If you readdir() and forget to declare a dependency it won't catch it, like it would for read(). You can work around this by having build tools stat() any filenames they acquire.

License

All code in this repository is licensed under the MIT License.

The sprites themselves are property of Nintendo / Game Freak / The Pokémon Company, though Black & White sprites for Pokémon from later generations were created by artists in the community. The license for these community-created sprites is still being determined and may change in the future, but in the meantime please talk to use first before using them.