diff --git a/.eslintrc.json b/.eslintrc.json
index d1e7e66269..02446596b9 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -32,9 +32,6 @@
"google": true,
"moment": false,
"MarkerClusterer": true,
- "isNotifyPoke": true,
- "isTouchDevice": true,
- "isMobileDevice": true,
"noLabelsStyle": true,
"darkStyle": true,
@@ -48,17 +45,35 @@
"Store": true,
"mapData": true,
+ "pokemonFormMap": true,
+ "formMap": true,
+ "spriteMap": true,
+ "spriteClass": true,
+ "getSprite": true,
+ "getSpriteMarker": true,
+ "pokemonIcon": true,
+ "pokemonSprite": true,
+ "pokestopSprite": true,
+ "pokestopMarker": true,
+ "gymSprite": true,
+ "gymMarker": true,
+ "spawnpointMarker": true,
+ "getPositionMarkers": true,
+ "positionMarker": true,
+ "setupPokemonMarker": true,
+ "updatePokemonMarker": true,
+ "isNotifyPoke": true,
+ "isTouchDevice": true,
+ "isMobileDevice": true,
+ "toTitleCase": true,
- "pokemonSprites": true,
"centerLat": true,
"centerLng": true,
"clusterImagePath": true,
"showConfig": true,
- "pageLoaded": true,
"countMarkers": true,
- "skel": true,
- "setupPokemonMarker": true,
- "updatePokemonMarker": true
+
+ "pageLoaded": true
}
}
diff --git a/.gitignore b/.gitignore
index 25d0ee9ace..7c1f8cddf1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,11 +17,12 @@ src/
_build
_build_html
beehive.*
-static/images/raid/*.png
-!static/images/raid/*_unknown.png
-static/icons-sprite.png
-static/icons-large-sprite.png
-static/icons/*.png
+static/icons/.tracking
+static/icons/pokemon/*.png
+static/icons/gyms/*.png
+!static/icons/gyms/heart.png
+static/spritesheet.png
+static/sass/sprites.scss
static/css/custom.css
static/js/custom.js
*.csv
@@ -34,5 +35,5 @@ static/js/custom.js
!contrib/supervisord/gen-workers.sh
!contrib/supervisord/install-reinstall.sh
!static/data/*
-!static/icons/hsl*.png
-!static/app/settings.json
\ No newline at end of file
+!static/app/settings.json
+static/data/sprite_map.json
diff --git a/.travis.yml b/.travis.yml
index 48d877bbf0..e6510d0f67 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -8,6 +8,9 @@ python:
- 2.7
# Install steps MUST succeed or will immediately halt the build.
+before_install:
+ - sudo apt-get install libcairo2-dev libjpeg8-dev libpango1.0-dev libgif-dev build-essential g++
+
install:
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install --lts=boron
- pip install flake8
diff --git a/Gruntfile.js b/Gruntfile.js
index bf39b1bff3..04d7676256 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -2,11 +2,14 @@ module.exports = function (grunt) {
// load plugins as needed instead of up front
require('jit-grunt')(grunt, {
- unzip: 'grunt-zip'
+ unzip: 'grunt-zip',
+ pngmin: 'grunt-pngmin'
})
var path = require('path')
var fs = require('fs')
+ var buildIcons = require('./static/js/build_icons.js')
+ var buildSpritesheet = require('./static/js/build_spritesheet.js')
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
@@ -77,9 +80,10 @@ module.exports = function (grunt) {
build: {
files: {
'static/dist/data/pokemon.min.json': 'static/data/pokemon.json',
+ 'static/dist/data/pokemon_forms.min.json': 'static/data/pokemon_forms.json',
'static/dist/data/moves.min.json': 'static/data/moves.json',
'static/dist/data/mapstyle.min.json': 'static/data/mapstyle.json',
- 'static/dist/data/searchmarkerstyle.min.json': 'static/data/searchmarkerstyle.json',
+ 'static/dist/data/sprite_map.min.json': 'static/data/sprite_map.json',
'static/dist/locales/de.min.json': 'static/locales/de.json',
'static/dist/locales/fr.min.json': 'static/locales/fr.json',
'static/dist/locales/ja.min.json': 'static/locales/ja.json',
@@ -144,16 +148,31 @@ module.exports = function (grunt) {
src: 'static01.zip',
dest: 'static/'
}
+ },
+ pngmin: {
+ compile: {
+ files: [
+ {
+ src: 'static/spritesheet.png',
+ dest: 'static/'
+ }
+ ],
+ options: {
+ ext: '.png',
+ force: true
+ }
+ }
}
-
})
+ grunt.registerTask('icons-build', 'Builds the icons for gyms and raids.', buildIcons)
+ grunt.registerTask('sp-build', 'Builds the spritesheet.', buildSpritesheet)
grunt.registerTask('js-build', ['newer:babel', 'newer:uglify'])
grunt.registerTask('css-build', ['newer:sass', 'newer:cssmin'])
grunt.registerTask('js-lint', ['newer:eslint'])
grunt.registerTask('json', ['newer:minjson'])
-
- grunt.registerTask('build', ['clean', 'js-build', 'css-build', 'json', 'unzip'])
+ grunt.registerTask('build', ['clean', 'icons-build', 'sp-build', 'pngmin',
+ 'js-build', 'css-build', 'json'])
grunt.registerTask('lint', ['js-lint'])
grunt.registerTask('default', ['build', 'watch'])
}
diff --git a/README.md b/README.md
index d178221fc7..52c5d80e90 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
Live visualization of all the Pokémon (with option to show gyms, raids and PokéStops) in your area. This is a proof of concept that we can load all the Pokémon visible nearby given a location. Currently runs on a Flask server displaying Google Maps with markers on it.
-![Map](https://github.com/RocketMap/RocketMap/blob/develop/static/RocketMap.png)
+![Map](https://github.com/RocketMap/RocketMap/blob/develop/docs/_static/img/RocketMap.png)
## Features:
diff --git a/package.json b/package.json
index 40d60a335c..a54aa0ec79 100644
--- a/package.json
+++ b/package.json
@@ -5,10 +5,12 @@
"main": "Gruntfile.js",
"dependencies": {
"babel-preset-env": "^1.6.0",
+ "bluebird": "^3.5.1",
"eslint": "^3.1.1",
"eslint-config-standard": "^5.3.5",
"eslint-plugin-promise": "^2.0.0",
"eslint-plugin-standard": "^2.0.0",
+ "file-changed": "^1.2.1",
"grunt": "^0.4.5",
"grunt-babel": "^6.0.0",
"grunt-cli": "^1.2.0",
@@ -25,11 +27,18 @@
"grunt-legacssy": "latest",
"grunt-minjson": "latest",
"grunt-newer": "^1.2.0",
+ "grunt-pngmin": "^1.3.0",
"grunt-sass": "latest",
"grunt-unused": "latest",
"grunt-usemin": "latest",
"grunt-zip": "^0.17.1",
- "jit-grunt": "^0.10.0"
+ "handlebars": "^4.0.11",
+ "jimp": "^0.2.28",
+ "jit-grunt": "^0.10.0",
+ "spritesmith": "^3.1.1"
+ },
+ "optionalDependencies": {
+ "canvassmith": "^1.2.0"
},
"scripts": {
"build": "grunt build",
diff --git a/runserver.py b/runserver.py
index 8eda496b57..a86b2a9b45 100755
--- a/runserver.py
+++ b/runserver.py
@@ -126,7 +126,9 @@ def validate_assets(args):
static_path = os.path.join(root_path, 'static/js')
for file in os.listdir(static_path):
- if file.endswith(".js"):
+ if (file.endswith(".js")
+ and file != 'build_icons.js'
+ and file != 'build_spritesheet.js'):
generated_path = os.path.join(static_path, '../dist/js/',
file.replace(".js", ".min.js"))
source_path = os.path.join(static_path, file)
@@ -138,7 +140,7 @@ def validate_assets(args):
# You need custom image files now.
if not os.path.isfile(
- os.path.join(root_path, 'static/icons-sprite.png')):
+ os.path.join(root_path, 'static/spritesheet.png')):
log.critical(assets_error_log)
return False
diff --git a/static/RocketMap.png b/static/RocketMap.png
deleted file mode 100644
index 67dadad36b..0000000000
Binary files a/static/RocketMap.png and /dev/null differ
diff --git a/static/data/pokemon_forms.json b/static/data/pokemon_forms.json
new file mode 100644
index 0000000000..9afaa3afea
--- /dev/null
+++ b/static/data/pokemon_forms.json
@@ -0,0 +1,5 @@
+{
+ "201": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", ["exclamation", "!"], ["question", "?"]],
+ "351": [["normal", "NML"], ["sunny", "SUN"], ["rainy", "RN"], ["snowy", "SNW"]],
+ "386": [["normal", "NML"], ["attack", "ATK"], ["defense", "DEF"], ["speed", "SPE"]]
+}
\ No newline at end of file
diff --git a/static/data/searchmarkerstyle.json b/static/data/searchmarkerstyle.json
deleted file mode 100644
index 58c7a0cdf9..0000000000
--- a/static/data/searchmarkerstyle.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
- "backpack": {
- "name": "Backpack",
- "icon": "static/images/markers/backpack.png"
- },
- "camera": {
- "name": "Camera",
- "icon": "static/images/markers/camera.png"
- },
- "compass": {
- "name": "Compass",
- "icon": "static/images/markers/compass.png"
- },
- "google": {
- "name": "Default Google Marker",
- "icon": null
- },
- "female": {
- "name": "Female",
- "icon": "static/images/markers/female.png"
- },
- "fist": {
- "name": "Fist",
- "icon": "static/images/markers/fist.png"
- },
- "greatball": {
- "name": "Great Ball",
- "icon": "static/images/markers/greatball.png"
- },
- "hyperpotion": {
- "name": "Hyper Potion",
- "icon": "static/images/markers/hyperpotion.png"
- },
- "none": {
- "name": "Hidden",
- "icon": "static/images/markers/transparent.png"
- },
- "incense": {
- "name": "Incense",
- "icon": "static/images/markers/incense.png"
- },
- "incubator": {
- "name": "Incubator",
- "icon": "static/images/markers/incubator.png"
- },
- "male": {
- "name": "Male",
- "icon": "static/images/markers/male.png"
- },
- "masterball": {
- "name": "Master Ball",
- "icon": "static/images/markers/masterball.png"
- },
- "mobile": {
- "name": "Mobile",
- "icon": "static/images/markers/mobile.png"
- },
- "pokeball": {
- "name": "Pokeball",
- "icon": "static/images/markers/pokeball.png"
- },
- "pokedex": {
- "name": "Pokedex",
- "icon": "static/images/markers/pokedex.png"
- },
- "pokesition": {
- "name": "Pokesition",
- "icon": "static/images/markers/pokesition.png"
- },
- "potion": {
- "name": "Potion",
- "icon": "static/images/markers/potion.png"
- },
- "raspberry": {
- "name": "Raspberry",
- "icon": "static/images/markers/raspberry.png"
- },
- "stardust": {
- "name": "Stardust",
- "icon": "static/images/markers/stardust.png"
- },
- "superpotion": {
- "name": "Super Potion",
- "icon": "static/images/markers/superpotion.png"
- },
- "ultraball": {
- "name": "Ultra Ball",
- "icon": "static/images/markers/ultraball.png"
- }
-}
diff --git a/static/fonts/open-sans-bold-66-white.fnt b/static/fonts/open-sans-bold-66-white.fnt
new file mode 100644
index 0000000000..de11802d04
--- /dev/null
+++ b/static/fonts/open-sans-bold-66-white.fnt
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/fonts/open-sans-bold-66-white.png b/static/fonts/open-sans-bold-66-white.png
new file mode 100644
index 0000000000..fa34bf0115
Binary files /dev/null and b/static/fonts/open-sans-bold-66-white.png differ
diff --git a/static/fonts/open-sans-bold-86-white.fnt b/static/fonts/open-sans-bold-86-white.fnt
new file mode 100644
index 0000000000..b4a253b8a4
--- /dev/null
+++ b/static/fonts/open-sans-bold-86-white.fnt
@@ -0,0 +1,415 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/fonts/open-sans-bold-86-white.png b/static/fonts/open-sans-bold-86-white.png
new file mode 100644
index 0000000000..697e85e6a1
Binary files /dev/null and b/static/fonts/open-sans-bold-86-white.png differ
diff --git a/static/images/cluster/m1.png b/static/icons/clusters/m1.png
similarity index 100%
rename from static/images/cluster/m1.png
rename to static/icons/clusters/m1.png
diff --git a/static/images/cluster/m2.png b/static/icons/clusters/m2.png
similarity index 100%
rename from static/images/cluster/m2.png
rename to static/icons/clusters/m2.png
diff --git a/static/images/cluster/m3.png b/static/icons/clusters/m3.png
similarity index 100%
rename from static/images/cluster/m3.png
rename to static/icons/clusters/m3.png
diff --git a/static/images/cluster/m4.png b/static/icons/clusters/m4.png
similarity index 100%
rename from static/images/cluster/m4.png
rename to static/icons/clusters/m4.png
diff --git a/static/images/cluster/m5.png b/static/icons/clusters/m5.png
similarity index 100%
rename from static/images/cluster/m5.png
rename to static/icons/clusters/m5.png
diff --git a/static/icons/hsl-0.png b/static/icons/colors/hsl-0.png
similarity index 100%
rename from static/icons/hsl-0.png
rename to static/icons/colors/hsl-0.png
diff --git a/static/icons/hsl-10.png b/static/icons/colors/hsl-10.png
similarity index 100%
rename from static/icons/hsl-10.png
rename to static/icons/colors/hsl-10.png
diff --git a/static/icons/hsl-100.png b/static/icons/colors/hsl-100.png
similarity index 100%
rename from static/icons/hsl-100.png
rename to static/icons/colors/hsl-100.png
diff --git a/static/icons/hsl-105.png b/static/icons/colors/hsl-105.png
similarity index 100%
rename from static/icons/hsl-105.png
rename to static/icons/colors/hsl-105.png
diff --git a/static/icons/hsl-110.png b/static/icons/colors/hsl-110.png
similarity index 100%
rename from static/icons/hsl-110.png
rename to static/icons/colors/hsl-110.png
diff --git a/static/icons/hsl-115.png b/static/icons/colors/hsl-115.png
similarity index 100%
rename from static/icons/hsl-115.png
rename to static/icons/colors/hsl-115.png
diff --git a/static/icons/hsl-120.png b/static/icons/colors/hsl-120.png
similarity index 100%
rename from static/icons/hsl-120.png
rename to static/icons/colors/hsl-120.png
diff --git a/static/icons/hsl-125.png b/static/icons/colors/hsl-125.png
similarity index 100%
rename from static/icons/hsl-125.png
rename to static/icons/colors/hsl-125.png
diff --git a/static/icons/hsl-130.png b/static/icons/colors/hsl-130.png
similarity index 100%
rename from static/icons/hsl-130.png
rename to static/icons/colors/hsl-130.png
diff --git a/static/icons/hsl-135.png b/static/icons/colors/hsl-135.png
similarity index 100%
rename from static/icons/hsl-135.png
rename to static/icons/colors/hsl-135.png
diff --git a/static/icons/hsl-140.png b/static/icons/colors/hsl-140.png
similarity index 100%
rename from static/icons/hsl-140.png
rename to static/icons/colors/hsl-140.png
diff --git a/static/icons/hsl-145.png b/static/icons/colors/hsl-145.png
similarity index 100%
rename from static/icons/hsl-145.png
rename to static/icons/colors/hsl-145.png
diff --git a/static/icons/hsl-15.png b/static/icons/colors/hsl-15.png
similarity index 100%
rename from static/icons/hsl-15.png
rename to static/icons/colors/hsl-15.png
diff --git a/static/icons/hsl-150.png b/static/icons/colors/hsl-150.png
similarity index 100%
rename from static/icons/hsl-150.png
rename to static/icons/colors/hsl-150.png
diff --git a/static/icons/hsl-155.png b/static/icons/colors/hsl-155.png
similarity index 100%
rename from static/icons/hsl-155.png
rename to static/icons/colors/hsl-155.png
diff --git a/static/icons/hsl-160.png b/static/icons/colors/hsl-160.png
similarity index 100%
rename from static/icons/hsl-160.png
rename to static/icons/colors/hsl-160.png
diff --git a/static/icons/hsl-165.png b/static/icons/colors/hsl-165.png
similarity index 100%
rename from static/icons/hsl-165.png
rename to static/icons/colors/hsl-165.png
diff --git a/static/icons/hsl-170.png b/static/icons/colors/hsl-170.png
similarity index 100%
rename from static/icons/hsl-170.png
rename to static/icons/colors/hsl-170.png
diff --git a/static/icons/hsl-175.png b/static/icons/colors/hsl-175.png
similarity index 100%
rename from static/icons/hsl-175.png
rename to static/icons/colors/hsl-175.png
diff --git a/static/icons/hsl-180.png b/static/icons/colors/hsl-180.png
similarity index 100%
rename from static/icons/hsl-180.png
rename to static/icons/colors/hsl-180.png
diff --git a/static/icons/hsl-185.png b/static/icons/colors/hsl-185.png
similarity index 100%
rename from static/icons/hsl-185.png
rename to static/icons/colors/hsl-185.png
diff --git a/static/icons/hsl-190.png b/static/icons/colors/hsl-190.png
similarity index 100%
rename from static/icons/hsl-190.png
rename to static/icons/colors/hsl-190.png
diff --git a/static/icons/hsl-195.png b/static/icons/colors/hsl-195.png
similarity index 100%
rename from static/icons/hsl-195.png
rename to static/icons/colors/hsl-195.png
diff --git a/static/icons/hsl-20.png b/static/icons/colors/hsl-20.png
similarity index 100%
rename from static/icons/hsl-20.png
rename to static/icons/colors/hsl-20.png
diff --git a/static/icons/hsl-200.png b/static/icons/colors/hsl-200.png
similarity index 100%
rename from static/icons/hsl-200.png
rename to static/icons/colors/hsl-200.png
diff --git a/static/icons/hsl-205.png b/static/icons/colors/hsl-205.png
similarity index 100%
rename from static/icons/hsl-205.png
rename to static/icons/colors/hsl-205.png
diff --git a/static/icons/hsl-210.png b/static/icons/colors/hsl-210.png
similarity index 100%
rename from static/icons/hsl-210.png
rename to static/icons/colors/hsl-210.png
diff --git a/static/icons/hsl-215.png b/static/icons/colors/hsl-215.png
similarity index 100%
rename from static/icons/hsl-215.png
rename to static/icons/colors/hsl-215.png
diff --git a/static/icons/hsl-220.png b/static/icons/colors/hsl-220.png
similarity index 100%
rename from static/icons/hsl-220.png
rename to static/icons/colors/hsl-220.png
diff --git a/static/icons/hsl-225.png b/static/icons/colors/hsl-225.png
similarity index 100%
rename from static/icons/hsl-225.png
rename to static/icons/colors/hsl-225.png
diff --git a/static/icons/hsl-230.png b/static/icons/colors/hsl-230.png
similarity index 100%
rename from static/icons/hsl-230.png
rename to static/icons/colors/hsl-230.png
diff --git a/static/icons/hsl-235.png b/static/icons/colors/hsl-235.png
similarity index 100%
rename from static/icons/hsl-235.png
rename to static/icons/colors/hsl-235.png
diff --git a/static/icons/hsl-240.png b/static/icons/colors/hsl-240.png
similarity index 100%
rename from static/icons/hsl-240.png
rename to static/icons/colors/hsl-240.png
diff --git a/static/icons/hsl-245.png b/static/icons/colors/hsl-245.png
similarity index 100%
rename from static/icons/hsl-245.png
rename to static/icons/colors/hsl-245.png
diff --git a/static/icons/hsl-25.png b/static/icons/colors/hsl-25.png
similarity index 100%
rename from static/icons/hsl-25.png
rename to static/icons/colors/hsl-25.png
diff --git a/static/icons/hsl-250.png b/static/icons/colors/hsl-250.png
similarity index 100%
rename from static/icons/hsl-250.png
rename to static/icons/colors/hsl-250.png
diff --git a/static/icons/hsl-255.png b/static/icons/colors/hsl-255.png
similarity index 100%
rename from static/icons/hsl-255.png
rename to static/icons/colors/hsl-255.png
diff --git a/static/icons/hsl-260.png b/static/icons/colors/hsl-260.png
similarity index 100%
rename from static/icons/hsl-260.png
rename to static/icons/colors/hsl-260.png
diff --git a/static/icons/hsl-265.png b/static/icons/colors/hsl-265.png
similarity index 100%
rename from static/icons/hsl-265.png
rename to static/icons/colors/hsl-265.png
diff --git a/static/icons/hsl-270.png b/static/icons/colors/hsl-270.png
similarity index 100%
rename from static/icons/hsl-270.png
rename to static/icons/colors/hsl-270.png
diff --git a/static/icons/hsl-275-light.png b/static/icons/colors/hsl-275-light.png
similarity index 100%
rename from static/icons/hsl-275-light.png
rename to static/icons/colors/hsl-275-light.png
diff --git a/static/icons/hsl-275.png b/static/icons/colors/hsl-275.png
similarity index 100%
rename from static/icons/hsl-275.png
rename to static/icons/colors/hsl-275.png
diff --git a/static/icons/hsl-30.png b/static/icons/colors/hsl-30.png
similarity index 100%
rename from static/icons/hsl-30.png
rename to static/icons/colors/hsl-30.png
diff --git a/static/icons/hsl-35.png b/static/icons/colors/hsl-35.png
similarity index 100%
rename from static/icons/hsl-35.png
rename to static/icons/colors/hsl-35.png
diff --git a/static/icons/hsl-40.png b/static/icons/colors/hsl-40.png
similarity index 100%
rename from static/icons/hsl-40.png
rename to static/icons/colors/hsl-40.png
diff --git a/static/icons/hsl-45.png b/static/icons/colors/hsl-45.png
similarity index 100%
rename from static/icons/hsl-45.png
rename to static/icons/colors/hsl-45.png
diff --git a/static/icons/hsl-5.png b/static/icons/colors/hsl-5.png
similarity index 100%
rename from static/icons/hsl-5.png
rename to static/icons/colors/hsl-5.png
diff --git a/static/icons/hsl-50.png b/static/icons/colors/hsl-50.png
similarity index 100%
rename from static/icons/hsl-50.png
rename to static/icons/colors/hsl-50.png
diff --git a/static/icons/hsl-55.png b/static/icons/colors/hsl-55.png
similarity index 100%
rename from static/icons/hsl-55.png
rename to static/icons/colors/hsl-55.png
diff --git a/static/icons/hsl-60.png b/static/icons/colors/hsl-60.png
similarity index 100%
rename from static/icons/hsl-60.png
rename to static/icons/colors/hsl-60.png
diff --git a/static/icons/hsl-65.png b/static/icons/colors/hsl-65.png
similarity index 100%
rename from static/icons/hsl-65.png
rename to static/icons/colors/hsl-65.png
diff --git a/static/icons/hsl-70.png b/static/icons/colors/hsl-70.png
similarity index 100%
rename from static/icons/hsl-70.png
rename to static/icons/colors/hsl-70.png
diff --git a/static/icons/hsl-75.png b/static/icons/colors/hsl-75.png
similarity index 100%
rename from static/icons/hsl-75.png
rename to static/icons/colors/hsl-75.png
diff --git a/static/icons/hsl-80.png b/static/icons/colors/hsl-80.png
similarity index 100%
rename from static/icons/hsl-80.png
rename to static/icons/colors/hsl-80.png
diff --git a/static/icons/hsl-85.png b/static/icons/colors/hsl-85.png
similarity index 100%
rename from static/icons/hsl-85.png
rename to static/icons/colors/hsl-85.png
diff --git a/static/icons/hsl-90.png b/static/icons/colors/hsl-90.png
similarity index 100%
rename from static/icons/hsl-90.png
rename to static/icons/colors/hsl-90.png
diff --git a/static/icons/hsl-95.png b/static/icons/colors/hsl-95.png
similarity index 100%
rename from static/icons/hsl-95.png
rename to static/icons/colors/hsl-95.png
diff --git a/static/images/gym/Heart.png b/static/icons/gyms/heart.png
similarity index 100%
rename from static/images/gym/Heart.png
rename to static/icons/gyms/heart.png
diff --git a/static/icons/markers/backpack.png b/static/icons/markers/backpack.png
new file mode 100644
index 0000000000..bd11378a9a
Binary files /dev/null and b/static/icons/markers/backpack.png differ
diff --git a/static/icons/markers/camera.png b/static/icons/markers/camera.png
new file mode 100644
index 0000000000..d5824d9a92
Binary files /dev/null and b/static/icons/markers/camera.png differ
diff --git a/static/icons/markers/compass.png b/static/icons/markers/compass.png
new file mode 100644
index 0000000000..97c866a3e7
Binary files /dev/null and b/static/icons/markers/compass.png differ
diff --git a/static/icons/markers/female.png b/static/icons/markers/female.png
new file mode 100644
index 0000000000..04eb250023
Binary files /dev/null and b/static/icons/markers/female.png differ
diff --git a/static/icons/markers/fist.png b/static/icons/markers/fist.png
new file mode 100644
index 0000000000..ec61163fc9
Binary files /dev/null and b/static/icons/markers/fist.png differ
diff --git a/static/icons/markers/great-ball.png b/static/icons/markers/great-ball.png
new file mode 100644
index 0000000000..7d0fc902ab
Binary files /dev/null and b/static/icons/markers/great-ball.png differ
diff --git a/static/icons/markers/hidden.png b/static/icons/markers/hidden.png
new file mode 100644
index 0000000000..43387a3dcf
Binary files /dev/null and b/static/icons/markers/hidden.png differ
diff --git a/static/icons/markers/hyper-potion.png b/static/icons/markers/hyper-potion.png
new file mode 100644
index 0000000000..aeffcdef1e
Binary files /dev/null and b/static/icons/markers/hyper-potion.png differ
diff --git a/static/icons/markers/incense.png b/static/icons/markers/incense.png
new file mode 100644
index 0000000000..b42167389f
Binary files /dev/null and b/static/icons/markers/incense.png differ
diff --git a/static/icons/markers/incubator.png b/static/icons/markers/incubator.png
new file mode 100644
index 0000000000..d4c8f228d9
Binary files /dev/null and b/static/icons/markers/incubator.png differ
diff --git a/static/icons/markers/male.png b/static/icons/markers/male.png
new file mode 100644
index 0000000000..beba9124c5
Binary files /dev/null and b/static/icons/markers/male.png differ
diff --git a/static/icons/markers/master-ball.png b/static/icons/markers/master-ball.png
new file mode 100644
index 0000000000..5ced2ddbd8
Binary files /dev/null and b/static/icons/markers/master-ball.png differ
diff --git a/static/icons/markers/mobile.png b/static/icons/markers/mobile.png
new file mode 100644
index 0000000000..8152f46a7a
Binary files /dev/null and b/static/icons/markers/mobile.png differ
diff --git a/static/icons/markers/pokeball.png b/static/icons/markers/pokeball.png
new file mode 100644
index 0000000000..fa066b15a3
Binary files /dev/null and b/static/icons/markers/pokeball.png differ
diff --git a/static/icons/markers/pokedex.png b/static/icons/markers/pokedex.png
new file mode 100644
index 0000000000..92056c6ec1
Binary files /dev/null and b/static/icons/markers/pokedex.png differ
diff --git a/static/icons/markers/pokesition.png b/static/icons/markers/pokesition.png
new file mode 100644
index 0000000000..9e7529caa1
Binary files /dev/null and b/static/icons/markers/pokesition.png differ
diff --git a/static/icons/markers/potion.png b/static/icons/markers/potion.png
new file mode 100644
index 0000000000..4cbb21228c
Binary files /dev/null and b/static/icons/markers/potion.png differ
diff --git a/static/icons/markers/razz-berry.png b/static/icons/markers/razz-berry.png
new file mode 100644
index 0000000000..fe56d565b6
Binary files /dev/null and b/static/icons/markers/razz-berry.png differ
diff --git a/static/icons/markers/stardust.png b/static/icons/markers/stardust.png
new file mode 100644
index 0000000000..5e6953b44e
Binary files /dev/null and b/static/icons/markers/stardust.png differ
diff --git a/static/icons/markers/super-potion.png b/static/icons/markers/super-potion.png
new file mode 100644
index 0000000000..cc10fbc3af
Binary files /dev/null and b/static/icons/markers/super-potion.png differ
diff --git a/static/icons/markers/ultra-ball.png b/static/icons/markers/ultra-ball.png
new file mode 100644
index 0000000000..fd26cc82c7
Binary files /dev/null and b/static/icons/markers/ultra-ball.png differ
diff --git a/static/images/close.png b/static/icons/other/close.png
similarity index 100%
rename from static/images/close.png
rename to static/icons/other/close.png
diff --git a/static/icons/other/move-bar-1.png b/static/icons/other/move-bar-1.png
new file mode 100644
index 0000000000..09fa7b554a
Binary files /dev/null and b/static/icons/other/move-bar-1.png differ
diff --git a/static/icons/other/move-bar-2.png b/static/icons/other/move-bar-2.png
new file mode 100644
index 0000000000..2527b52172
Binary files /dev/null and b/static/icons/other/move-bar-2.png differ
diff --git a/static/icons/other/move-bar-3.png b/static/icons/other/move-bar-3.png
new file mode 100644
index 0000000000..c512a5aa8a
Binary files /dev/null and b/static/icons/other/move-bar-3.png differ
diff --git a/static/icons/other/move-bar-4.png b/static/icons/other/move-bar-4.png
new file mode 100644
index 0000000000..9a7da66d1e
Binary files /dev/null and b/static/icons/other/move-bar-4.png differ
diff --git a/static/icons/other/move-bar-5.png b/static/icons/other/move-bar-5.png
new file mode 100644
index 0000000000..2ea0a66128
Binary files /dev/null and b/static/icons/other/move-bar-5.png differ
diff --git a/static/icons/other/rocket.png b/static/icons/other/rocket.png
new file mode 100644
index 0000000000..1ad147bd35
Binary files /dev/null and b/static/icons/other/rocket.png differ
diff --git a/static/icons/parts/1.png b/static/icons/parts/1.png
new file mode 100644
index 0000000000..8b08865e4f
Binary files /dev/null and b/static/icons/parts/1.png differ
diff --git a/static/icons/parts/2.png b/static/icons/parts/2.png
new file mode 100644
index 0000000000..91039c53e6
Binary files /dev/null and b/static/icons/parts/2.png differ
diff --git a/static/icons/parts/3.png b/static/icons/parts/3.png
new file mode 100644
index 0000000000..c3e0cd7a98
Binary files /dev/null and b/static/icons/parts/3.png differ
diff --git a/static/icons/parts/4.png b/static/icons/parts/4.png
new file mode 100644
index 0000000000..8f95ef5b84
Binary files /dev/null and b/static/icons/parts/4.png differ
diff --git a/static/icons/parts/5.png b/static/icons/parts/5.png
new file mode 100644
index 0000000000..d4f26b0387
Binary files /dev/null and b/static/icons/parts/5.png differ
diff --git a/static/icons/parts/6.png b/static/icons/parts/6.png
new file mode 100644
index 0000000000..3024463d42
Binary files /dev/null and b/static/icons/parts/6.png differ
diff --git a/static/icons/parts/circle.png b/static/icons/parts/circle.png
new file mode 100644
index 0000000000..a5e58b1ff1
Binary files /dev/null and b/static/icons/parts/circle.png differ
diff --git a/static/icons/parts/circle_border.png b/static/icons/parts/circle_border.png
new file mode 100644
index 0000000000..fa5d664d43
Binary files /dev/null and b/static/icons/parts/circle_border.png differ
diff --git a/static/icons/parts/gym_instinct.png b/static/icons/parts/gym_instinct.png
new file mode 100644
index 0000000000..e67b39d0e9
Binary files /dev/null and b/static/icons/parts/gym_instinct.png differ
diff --git a/static/icons/parts/gym_mystic.png b/static/icons/parts/gym_mystic.png
new file mode 100644
index 0000000000..708ecf66c9
Binary files /dev/null and b/static/icons/parts/gym_mystic.png differ
diff --git a/static/icons/parts/gym_uncontested.png b/static/icons/parts/gym_uncontested.png
new file mode 100644
index 0000000000..d3b2dd7b65
Binary files /dev/null and b/static/icons/parts/gym_uncontested.png differ
diff --git a/static/icons/parts/gym_valor.png b/static/icons/parts/gym_valor.png
new file mode 100644
index 0000000000..98dd3382c3
Binary files /dev/null and b/static/icons/parts/gym_valor.png differ
diff --git a/static/icons/parts/raid_egg_1.png b/static/icons/parts/raid_egg_1.png
new file mode 100644
index 0000000000..85dea35c18
Binary files /dev/null and b/static/icons/parts/raid_egg_1.png differ
diff --git a/static/icons/parts/raid_egg_2.png b/static/icons/parts/raid_egg_2.png
new file mode 100644
index 0000000000..85dea35c18
Binary files /dev/null and b/static/icons/parts/raid_egg_2.png differ
diff --git a/static/icons/parts/raid_egg_3.png b/static/icons/parts/raid_egg_3.png
new file mode 100644
index 0000000000..f97cd9279d
Binary files /dev/null and b/static/icons/parts/raid_egg_3.png differ
diff --git a/static/icons/parts/raid_egg_4.png b/static/icons/parts/raid_egg_4.png
new file mode 100644
index 0000000000..f97cd9279d
Binary files /dev/null and b/static/icons/parts/raid_egg_4.png differ
diff --git a/static/icons/parts/raid_egg_5.png b/static/icons/parts/raid_egg_5.png
new file mode 100644
index 0000000000..f14fbe132e
Binary files /dev/null and b/static/icons/parts/raid_egg_5.png differ
diff --git a/static/icons/parts/raid_star_1.png b/static/icons/parts/raid_star_1.png
new file mode 100644
index 0000000000..271d8eb8dd
Binary files /dev/null and b/static/icons/parts/raid_star_1.png differ
diff --git a/static/icons/parts/raid_star_2.png b/static/icons/parts/raid_star_2.png
new file mode 100644
index 0000000000..271d8eb8dd
Binary files /dev/null and b/static/icons/parts/raid_star_2.png differ
diff --git a/static/icons/parts/raid_star_3.png b/static/icons/parts/raid_star_3.png
new file mode 100644
index 0000000000..19699faeca
Binary files /dev/null and b/static/icons/parts/raid_star_3.png differ
diff --git a/static/icons/parts/raid_star_4.png b/static/icons/parts/raid_star_4.png
new file mode 100644
index 0000000000..19699faeca
Binary files /dev/null and b/static/icons/parts/raid_star_4.png differ
diff --git a/static/icons/parts/raid_star_5.png b/static/icons/parts/raid_star_5.png
new file mode 100644
index 0000000000..866f3813e7
Binary files /dev/null and b/static/icons/parts/raid_star_5.png differ
diff --git a/static/icons/pokemon/.keep b/static/icons/pokemon/.keep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/static/icons/pokestops/pokestop-lured.png b/static/icons/pokestops/pokestop-lured.png
new file mode 100644
index 0000000000..2be5e9b65f
Binary files /dev/null and b/static/icons/pokestops/pokestop-lured.png differ
diff --git a/static/icons/pokestops/pokestop.png b/static/icons/pokestops/pokestop.png
new file mode 100644
index 0000000000..346bcf2790
Binary files /dev/null and b/static/icons/pokestops/pokestop.png differ
diff --git a/static/images/gym/Instinct.png b/static/images/gym/Instinct.png
deleted file mode 100644
index c9e29cda91..0000000000
Binary files a/static/images/gym/Instinct.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1.png b/static/images/gym/Instinct_1.png
deleted file mode 100644
index 1a8f0d15a0..0000000000
Binary files a/static/images/gym/Instinct_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1_1.png b/static/images/gym/Instinct_1_1.png
deleted file mode 100644
index 166d3b621d..0000000000
Binary files a/static/images/gym/Instinct_1_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1_2.png b/static/images/gym/Instinct_1_2.png
deleted file mode 100644
index f3d5a3f88a..0000000000
Binary files a/static/images/gym/Instinct_1_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1_3.png b/static/images/gym/Instinct_1_3.png
deleted file mode 100644
index dbbe134bc5..0000000000
Binary files a/static/images/gym/Instinct_1_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1_4.png b/static/images/gym/Instinct_1_4.png
deleted file mode 100644
index d4a6f3bf7d..0000000000
Binary files a/static/images/gym/Instinct_1_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_1_5.png b/static/images/gym/Instinct_1_5.png
deleted file mode 100644
index 2b0ad5df36..0000000000
Binary files a/static/images/gym/Instinct_1_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2.png b/static/images/gym/Instinct_2.png
deleted file mode 100644
index 5bd6149e0f..0000000000
Binary files a/static/images/gym/Instinct_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2_1.png b/static/images/gym/Instinct_2_1.png
deleted file mode 100644
index dd7e6748a7..0000000000
Binary files a/static/images/gym/Instinct_2_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2_2.png b/static/images/gym/Instinct_2_2.png
deleted file mode 100644
index 46e051c621..0000000000
Binary files a/static/images/gym/Instinct_2_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2_3.png b/static/images/gym/Instinct_2_3.png
deleted file mode 100644
index 2fa11725d0..0000000000
Binary files a/static/images/gym/Instinct_2_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2_4.png b/static/images/gym/Instinct_2_4.png
deleted file mode 100644
index 00403c5346..0000000000
Binary files a/static/images/gym/Instinct_2_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_2_5.png b/static/images/gym/Instinct_2_5.png
deleted file mode 100644
index 882567f88f..0000000000
Binary files a/static/images/gym/Instinct_2_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3.png b/static/images/gym/Instinct_3.png
deleted file mode 100644
index a2a9d28b70..0000000000
Binary files a/static/images/gym/Instinct_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3_1.png b/static/images/gym/Instinct_3_1.png
deleted file mode 100644
index 173795960f..0000000000
Binary files a/static/images/gym/Instinct_3_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3_2.png b/static/images/gym/Instinct_3_2.png
deleted file mode 100644
index 5a4cfc640b..0000000000
Binary files a/static/images/gym/Instinct_3_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3_3.png b/static/images/gym/Instinct_3_3.png
deleted file mode 100644
index 37dda2af2c..0000000000
Binary files a/static/images/gym/Instinct_3_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3_4.png b/static/images/gym/Instinct_3_4.png
deleted file mode 100644
index 6023679db5..0000000000
Binary files a/static/images/gym/Instinct_3_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_3_5.png b/static/images/gym/Instinct_3_5.png
deleted file mode 100644
index 64a90d1e0a..0000000000
Binary files a/static/images/gym/Instinct_3_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4.png b/static/images/gym/Instinct_4.png
deleted file mode 100644
index e1e2208054..0000000000
Binary files a/static/images/gym/Instinct_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4_1.png b/static/images/gym/Instinct_4_1.png
deleted file mode 100644
index a0d34a6c44..0000000000
Binary files a/static/images/gym/Instinct_4_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4_2.png b/static/images/gym/Instinct_4_2.png
deleted file mode 100644
index b10d1acd9b..0000000000
Binary files a/static/images/gym/Instinct_4_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4_3.png b/static/images/gym/Instinct_4_3.png
deleted file mode 100644
index 15b0a54164..0000000000
Binary files a/static/images/gym/Instinct_4_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4_4.png b/static/images/gym/Instinct_4_4.png
deleted file mode 100644
index c90f46091e..0000000000
Binary files a/static/images/gym/Instinct_4_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_4_5.png b/static/images/gym/Instinct_4_5.png
deleted file mode 100644
index 8c50f3ce2e..0000000000
Binary files a/static/images/gym/Instinct_4_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5.png b/static/images/gym/Instinct_5.png
deleted file mode 100644
index 68e2eed999..0000000000
Binary files a/static/images/gym/Instinct_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5_1.png b/static/images/gym/Instinct_5_1.png
deleted file mode 100644
index 84bfd6044e..0000000000
Binary files a/static/images/gym/Instinct_5_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5_2.png b/static/images/gym/Instinct_5_2.png
deleted file mode 100644
index b319a4f777..0000000000
Binary files a/static/images/gym/Instinct_5_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5_3.png b/static/images/gym/Instinct_5_3.png
deleted file mode 100644
index cec30ce3ad..0000000000
Binary files a/static/images/gym/Instinct_5_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5_4.png b/static/images/gym/Instinct_5_4.png
deleted file mode 100644
index c8a8ee9e7a..0000000000
Binary files a/static/images/gym/Instinct_5_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_5_5.png b/static/images/gym/Instinct_5_5.png
deleted file mode 100644
index eb36871a12..0000000000
Binary files a/static/images/gym/Instinct_5_5.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6.png b/static/images/gym/Instinct_6.png
deleted file mode 100644
index 2d47595b26..0000000000
Binary files a/static/images/gym/Instinct_6.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6_1.png b/static/images/gym/Instinct_6_1.png
deleted file mode 100644
index 06e7be9883..0000000000
Binary files a/static/images/gym/Instinct_6_1.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6_2.png b/static/images/gym/Instinct_6_2.png
deleted file mode 100644
index ce9d1e8804..0000000000
Binary files a/static/images/gym/Instinct_6_2.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6_3.png b/static/images/gym/Instinct_6_3.png
deleted file mode 100644
index 55a72ccdbf..0000000000
Binary files a/static/images/gym/Instinct_6_3.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6_4.png b/static/images/gym/Instinct_6_4.png
deleted file mode 100644
index 68b1a7f39b..0000000000
Binary files a/static/images/gym/Instinct_6_4.png and /dev/null differ
diff --git a/static/images/gym/Instinct_6_5.png b/static/images/gym/Instinct_6_5.png
deleted file mode 100644
index b7a6f04f9d..0000000000
Binary files a/static/images/gym/Instinct_6_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic.png b/static/images/gym/Mystic.png
deleted file mode 100644
index 47d6794c8f..0000000000
Binary files a/static/images/gym/Mystic.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1.png b/static/images/gym/Mystic_1.png
deleted file mode 100644
index e2428b9d29..0000000000
Binary files a/static/images/gym/Mystic_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1_1.png b/static/images/gym/Mystic_1_1.png
deleted file mode 100644
index 7b7a8d84b3..0000000000
Binary files a/static/images/gym/Mystic_1_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1_2.png b/static/images/gym/Mystic_1_2.png
deleted file mode 100644
index 85273ffe73..0000000000
Binary files a/static/images/gym/Mystic_1_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1_3.png b/static/images/gym/Mystic_1_3.png
deleted file mode 100644
index 9673965cc6..0000000000
Binary files a/static/images/gym/Mystic_1_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1_4.png b/static/images/gym/Mystic_1_4.png
deleted file mode 100644
index 64ecd332f5..0000000000
Binary files a/static/images/gym/Mystic_1_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_1_5.png b/static/images/gym/Mystic_1_5.png
deleted file mode 100644
index 3a1200207e..0000000000
Binary files a/static/images/gym/Mystic_1_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2.png b/static/images/gym/Mystic_2.png
deleted file mode 100644
index 48ee9d4790..0000000000
Binary files a/static/images/gym/Mystic_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2_1.png b/static/images/gym/Mystic_2_1.png
deleted file mode 100644
index 68edccadaf..0000000000
Binary files a/static/images/gym/Mystic_2_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2_2.png b/static/images/gym/Mystic_2_2.png
deleted file mode 100644
index 0d60614f39..0000000000
Binary files a/static/images/gym/Mystic_2_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2_3.png b/static/images/gym/Mystic_2_3.png
deleted file mode 100644
index 04ce511515..0000000000
Binary files a/static/images/gym/Mystic_2_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2_4.png b/static/images/gym/Mystic_2_4.png
deleted file mode 100644
index 6d76ba6da4..0000000000
Binary files a/static/images/gym/Mystic_2_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_2_5.png b/static/images/gym/Mystic_2_5.png
deleted file mode 100644
index bcd03b5606..0000000000
Binary files a/static/images/gym/Mystic_2_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3.png b/static/images/gym/Mystic_3.png
deleted file mode 100644
index 3ccdbdc6d7..0000000000
Binary files a/static/images/gym/Mystic_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3_1.png b/static/images/gym/Mystic_3_1.png
deleted file mode 100644
index 8ed18651cc..0000000000
Binary files a/static/images/gym/Mystic_3_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3_2.png b/static/images/gym/Mystic_3_2.png
deleted file mode 100644
index f6264ba85b..0000000000
Binary files a/static/images/gym/Mystic_3_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3_3.png b/static/images/gym/Mystic_3_3.png
deleted file mode 100644
index 9be3aef6ca..0000000000
Binary files a/static/images/gym/Mystic_3_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3_4.png b/static/images/gym/Mystic_3_4.png
deleted file mode 100644
index 9b18e8596c..0000000000
Binary files a/static/images/gym/Mystic_3_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_3_5.png b/static/images/gym/Mystic_3_5.png
deleted file mode 100644
index 0c330d5da6..0000000000
Binary files a/static/images/gym/Mystic_3_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4.png b/static/images/gym/Mystic_4.png
deleted file mode 100644
index 57b1cff927..0000000000
Binary files a/static/images/gym/Mystic_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4_1.png b/static/images/gym/Mystic_4_1.png
deleted file mode 100644
index 92ef9aad57..0000000000
Binary files a/static/images/gym/Mystic_4_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4_2.png b/static/images/gym/Mystic_4_2.png
deleted file mode 100644
index fc3c0c96ee..0000000000
Binary files a/static/images/gym/Mystic_4_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4_3.png b/static/images/gym/Mystic_4_3.png
deleted file mode 100644
index d383ee17c2..0000000000
Binary files a/static/images/gym/Mystic_4_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4_4.png b/static/images/gym/Mystic_4_4.png
deleted file mode 100644
index 292723005f..0000000000
Binary files a/static/images/gym/Mystic_4_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_4_5.png b/static/images/gym/Mystic_4_5.png
deleted file mode 100644
index 64a18c1878..0000000000
Binary files a/static/images/gym/Mystic_4_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5.png b/static/images/gym/Mystic_5.png
deleted file mode 100644
index 8fa2472ac2..0000000000
Binary files a/static/images/gym/Mystic_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5_1.png b/static/images/gym/Mystic_5_1.png
deleted file mode 100644
index 4c5e72997e..0000000000
Binary files a/static/images/gym/Mystic_5_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5_2.png b/static/images/gym/Mystic_5_2.png
deleted file mode 100644
index 44e69fa9c8..0000000000
Binary files a/static/images/gym/Mystic_5_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5_3.png b/static/images/gym/Mystic_5_3.png
deleted file mode 100644
index d9fc3fdd81..0000000000
Binary files a/static/images/gym/Mystic_5_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5_4.png b/static/images/gym/Mystic_5_4.png
deleted file mode 100644
index e6fc94a32e..0000000000
Binary files a/static/images/gym/Mystic_5_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_5_5.png b/static/images/gym/Mystic_5_5.png
deleted file mode 100644
index 05d9c143e5..0000000000
Binary files a/static/images/gym/Mystic_5_5.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6.png b/static/images/gym/Mystic_6.png
deleted file mode 100644
index dd4d44435b..0000000000
Binary files a/static/images/gym/Mystic_6.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6_1.png b/static/images/gym/Mystic_6_1.png
deleted file mode 100644
index d4f5e20029..0000000000
Binary files a/static/images/gym/Mystic_6_1.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6_2.png b/static/images/gym/Mystic_6_2.png
deleted file mode 100644
index 13628967c4..0000000000
Binary files a/static/images/gym/Mystic_6_2.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6_3.png b/static/images/gym/Mystic_6_3.png
deleted file mode 100644
index cf017da063..0000000000
Binary files a/static/images/gym/Mystic_6_3.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6_4.png b/static/images/gym/Mystic_6_4.png
deleted file mode 100644
index d4c7fa2c89..0000000000
Binary files a/static/images/gym/Mystic_6_4.png and /dev/null differ
diff --git a/static/images/gym/Mystic_6_5.png b/static/images/gym/Mystic_6_5.png
deleted file mode 100644
index 1c34c6e9a7..0000000000
Binary files a/static/images/gym/Mystic_6_5.png and /dev/null differ
diff --git a/static/images/gym/Strength.png b/static/images/gym/Strength.png
deleted file mode 100644
index c6d26140da..0000000000
Binary files a/static/images/gym/Strength.png and /dev/null differ
diff --git a/static/images/gym/Uncontested.png b/static/images/gym/Uncontested.png
deleted file mode 100644
index 1cfc00c7dd..0000000000
Binary files a/static/images/gym/Uncontested.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0.png b/static/images/gym/Uncontested_0.png
deleted file mode 100644
index 1cfc00c7dd..0000000000
Binary files a/static/images/gym/Uncontested_0.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0_1.png b/static/images/gym/Uncontested_0_1.png
deleted file mode 100644
index 5b7ff86e8b..0000000000
Binary files a/static/images/gym/Uncontested_0_1.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0_2.png b/static/images/gym/Uncontested_0_2.png
deleted file mode 100644
index 3988db505d..0000000000
Binary files a/static/images/gym/Uncontested_0_2.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0_3.png b/static/images/gym/Uncontested_0_3.png
deleted file mode 100644
index c4696770db..0000000000
Binary files a/static/images/gym/Uncontested_0_3.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0_4.png b/static/images/gym/Uncontested_0_4.png
deleted file mode 100644
index 066dbf746b..0000000000
Binary files a/static/images/gym/Uncontested_0_4.png and /dev/null differ
diff --git a/static/images/gym/Uncontested_0_5.png b/static/images/gym/Uncontested_0_5.png
deleted file mode 100644
index 1d3e5501b7..0000000000
Binary files a/static/images/gym/Uncontested_0_5.png and /dev/null differ
diff --git a/static/images/gym/Valor.png b/static/images/gym/Valor.png
deleted file mode 100644
index 996dab2b5d..0000000000
Binary files a/static/images/gym/Valor.png and /dev/null differ
diff --git a/static/images/gym/Valor_1.png b/static/images/gym/Valor_1.png
deleted file mode 100644
index 1f9a23e3af..0000000000
Binary files a/static/images/gym/Valor_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_1_1.png b/static/images/gym/Valor_1_1.png
deleted file mode 100644
index 415a9b33ea..0000000000
Binary files a/static/images/gym/Valor_1_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_1_2.png b/static/images/gym/Valor_1_2.png
deleted file mode 100644
index 8f3d58acce..0000000000
Binary files a/static/images/gym/Valor_1_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_1_3.png b/static/images/gym/Valor_1_3.png
deleted file mode 100644
index a6ca02bde6..0000000000
Binary files a/static/images/gym/Valor_1_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_1_4.png b/static/images/gym/Valor_1_4.png
deleted file mode 100644
index d5711e95dd..0000000000
Binary files a/static/images/gym/Valor_1_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_1_5.png b/static/images/gym/Valor_1_5.png
deleted file mode 100644
index 7a27ed1f86..0000000000
Binary files a/static/images/gym/Valor_1_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_2.png b/static/images/gym/Valor_2.png
deleted file mode 100644
index 7784034a4f..0000000000
Binary files a/static/images/gym/Valor_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_2_1.png b/static/images/gym/Valor_2_1.png
deleted file mode 100644
index 2cb270ac74..0000000000
Binary files a/static/images/gym/Valor_2_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_2_2.png b/static/images/gym/Valor_2_2.png
deleted file mode 100644
index d3b703590e..0000000000
Binary files a/static/images/gym/Valor_2_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_2_3.png b/static/images/gym/Valor_2_3.png
deleted file mode 100644
index a6d62a16bf..0000000000
Binary files a/static/images/gym/Valor_2_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_2_4.png b/static/images/gym/Valor_2_4.png
deleted file mode 100644
index dbccdda2d7..0000000000
Binary files a/static/images/gym/Valor_2_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_2_5.png b/static/images/gym/Valor_2_5.png
deleted file mode 100644
index b95f517e15..0000000000
Binary files a/static/images/gym/Valor_2_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_3.png b/static/images/gym/Valor_3.png
deleted file mode 100644
index 2f048c8f47..0000000000
Binary files a/static/images/gym/Valor_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_3_1.png b/static/images/gym/Valor_3_1.png
deleted file mode 100644
index c767a00ae4..0000000000
Binary files a/static/images/gym/Valor_3_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_3_2.png b/static/images/gym/Valor_3_2.png
deleted file mode 100644
index 8e66a34766..0000000000
Binary files a/static/images/gym/Valor_3_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_3_3.png b/static/images/gym/Valor_3_3.png
deleted file mode 100644
index 45d484ef89..0000000000
Binary files a/static/images/gym/Valor_3_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_3_4.png b/static/images/gym/Valor_3_4.png
deleted file mode 100644
index 7cb2185738..0000000000
Binary files a/static/images/gym/Valor_3_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_3_5.png b/static/images/gym/Valor_3_5.png
deleted file mode 100644
index 920655b209..0000000000
Binary files a/static/images/gym/Valor_3_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_4.png b/static/images/gym/Valor_4.png
deleted file mode 100644
index 2f0f4252a4..0000000000
Binary files a/static/images/gym/Valor_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_4_1.png b/static/images/gym/Valor_4_1.png
deleted file mode 100644
index cb1a760779..0000000000
Binary files a/static/images/gym/Valor_4_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_4_2.png b/static/images/gym/Valor_4_2.png
deleted file mode 100644
index c4f82241c0..0000000000
Binary files a/static/images/gym/Valor_4_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_4_3.png b/static/images/gym/Valor_4_3.png
deleted file mode 100644
index f40de2ae3a..0000000000
Binary files a/static/images/gym/Valor_4_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_4_4.png b/static/images/gym/Valor_4_4.png
deleted file mode 100644
index 05bc06b2b8..0000000000
Binary files a/static/images/gym/Valor_4_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_4_5.png b/static/images/gym/Valor_4_5.png
deleted file mode 100644
index 6f64e50549..0000000000
Binary files a/static/images/gym/Valor_4_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_5.png b/static/images/gym/Valor_5.png
deleted file mode 100644
index 4aaae6c057..0000000000
Binary files a/static/images/gym/Valor_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_5_1.png b/static/images/gym/Valor_5_1.png
deleted file mode 100644
index 45bb5e06a0..0000000000
Binary files a/static/images/gym/Valor_5_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_5_2.png b/static/images/gym/Valor_5_2.png
deleted file mode 100644
index f0ec366d83..0000000000
Binary files a/static/images/gym/Valor_5_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_5_3.png b/static/images/gym/Valor_5_3.png
deleted file mode 100644
index 3362e86e99..0000000000
Binary files a/static/images/gym/Valor_5_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_5_4.png b/static/images/gym/Valor_5_4.png
deleted file mode 100644
index 8725dd6352..0000000000
Binary files a/static/images/gym/Valor_5_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_5_5.png b/static/images/gym/Valor_5_5.png
deleted file mode 100644
index 0881707054..0000000000
Binary files a/static/images/gym/Valor_5_5.png and /dev/null differ
diff --git a/static/images/gym/Valor_6.png b/static/images/gym/Valor_6.png
deleted file mode 100644
index 3b5d03cef4..0000000000
Binary files a/static/images/gym/Valor_6.png and /dev/null differ
diff --git a/static/images/gym/Valor_6_1.png b/static/images/gym/Valor_6_1.png
deleted file mode 100644
index b4f47ec4d8..0000000000
Binary files a/static/images/gym/Valor_6_1.png and /dev/null differ
diff --git a/static/images/gym/Valor_6_2.png b/static/images/gym/Valor_6_2.png
deleted file mode 100644
index fabb2ed624..0000000000
Binary files a/static/images/gym/Valor_6_2.png and /dev/null differ
diff --git a/static/images/gym/Valor_6_3.png b/static/images/gym/Valor_6_3.png
deleted file mode 100644
index 2ac680ba87..0000000000
Binary files a/static/images/gym/Valor_6_3.png and /dev/null differ
diff --git a/static/images/gym/Valor_6_4.png b/static/images/gym/Valor_6_4.png
deleted file mode 100644
index 61a977e0f9..0000000000
Binary files a/static/images/gym/Valor_6_4.png and /dev/null differ
diff --git a/static/images/gym/Valor_6_5.png b/static/images/gym/Valor_6_5.png
deleted file mode 100644
index 535eb3fa93..0000000000
Binary files a/static/images/gym/Valor_6_5.png and /dev/null differ
diff --git a/static/images/markers/backpack.png b/static/images/markers/backpack.png
deleted file mode 100644
index cd830100e1..0000000000
Binary files a/static/images/markers/backpack.png and /dev/null differ
diff --git a/static/images/markers/camera.png b/static/images/markers/camera.png
deleted file mode 100644
index 790bc8517e..0000000000
Binary files a/static/images/markers/camera.png and /dev/null differ
diff --git a/static/images/markers/compass.png b/static/images/markers/compass.png
deleted file mode 100644
index e5f6ee3aae..0000000000
Binary files a/static/images/markers/compass.png and /dev/null differ
diff --git a/static/images/markers/female.png b/static/images/markers/female.png
deleted file mode 100644
index f1b10e81c7..0000000000
Binary files a/static/images/markers/female.png and /dev/null differ
diff --git a/static/images/markers/fist.png b/static/images/markers/fist.png
deleted file mode 100644
index 4a6495fafe..0000000000
Binary files a/static/images/markers/fist.png and /dev/null differ
diff --git a/static/images/markers/greatball.png b/static/images/markers/greatball.png
deleted file mode 100644
index 7cad692e79..0000000000
Binary files a/static/images/markers/greatball.png and /dev/null differ
diff --git a/static/images/markers/hyperpotion.png b/static/images/markers/hyperpotion.png
deleted file mode 100644
index ab17ff7f92..0000000000
Binary files a/static/images/markers/hyperpotion.png and /dev/null differ
diff --git a/static/images/markers/incense.png b/static/images/markers/incense.png
deleted file mode 100644
index 43493ae768..0000000000
Binary files a/static/images/markers/incense.png and /dev/null differ
diff --git a/static/images/markers/incubator.png b/static/images/markers/incubator.png
deleted file mode 100644
index e94917b1bb..0000000000
Binary files a/static/images/markers/incubator.png and /dev/null differ
diff --git a/static/images/markers/male.png b/static/images/markers/male.png
deleted file mode 100644
index 12d323a7e0..0000000000
Binary files a/static/images/markers/male.png and /dev/null differ
diff --git a/static/images/markers/masterball.png b/static/images/markers/masterball.png
deleted file mode 100644
index 632e643bae..0000000000
Binary files a/static/images/markers/masterball.png and /dev/null differ
diff --git a/static/images/markers/mobile.png b/static/images/markers/mobile.png
deleted file mode 100644
index 5bf027eef9..0000000000
Binary files a/static/images/markers/mobile.png and /dev/null differ
diff --git a/static/images/markers/pokeball.png b/static/images/markers/pokeball.png
deleted file mode 100644
index 4a1914c324..0000000000
Binary files a/static/images/markers/pokeball.png and /dev/null differ
diff --git a/static/images/markers/pokedex.png b/static/images/markers/pokedex.png
deleted file mode 100644
index b8f83e39db..0000000000
Binary files a/static/images/markers/pokedex.png and /dev/null differ
diff --git a/static/images/markers/pokesition.png b/static/images/markers/pokesition.png
deleted file mode 100644
index 40b06e45ec..0000000000
Binary files a/static/images/markers/pokesition.png and /dev/null differ
diff --git a/static/images/markers/potion.png b/static/images/markers/potion.png
deleted file mode 100644
index 86217fbb03..0000000000
Binary files a/static/images/markers/potion.png and /dev/null differ
diff --git a/static/images/markers/raspberry.png b/static/images/markers/raspberry.png
deleted file mode 100644
index c83ff8060b..0000000000
Binary files a/static/images/markers/raspberry.png and /dev/null differ
diff --git a/static/images/markers/stardust.png b/static/images/markers/stardust.png
deleted file mode 100644
index 5b14ded83d..0000000000
Binary files a/static/images/markers/stardust.png and /dev/null differ
diff --git a/static/images/markers/superpotion.png b/static/images/markers/superpotion.png
deleted file mode 100644
index 4e203e1ca0..0000000000
Binary files a/static/images/markers/superpotion.png and /dev/null differ
diff --git a/static/images/markers/transparent.png b/static/images/markers/transparent.png
deleted file mode 100644
index 9da19eacad..0000000000
Binary files a/static/images/markers/transparent.png and /dev/null differ
diff --git a/static/images/markers/ultraball.png b/static/images/markers/ultraball.png
deleted file mode 100644
index f9ac44dd01..0000000000
Binary files a/static/images/markers/ultraball.png and /dev/null differ
diff --git a/static/images/ph.png b/static/images/ph.png
deleted file mode 100644
index 1533a9c3f6..0000000000
Binary files a/static/images/ph.png and /dev/null differ
diff --git a/static/images/pokestop/Pokestop.png b/static/images/pokestop/Pokestop.png
deleted file mode 100644
index ddca867d3d..0000000000
Binary files a/static/images/pokestop/Pokestop.png and /dev/null differ
diff --git a/static/images/pokestop/PokestopLured.png b/static/images/pokestop/PokestopLured.png
deleted file mode 100644
index dd1f1fb447..0000000000
Binary files a/static/images/pokestop/PokestopLured.png and /dev/null differ
diff --git a/static/images/raid/Instinct_1_unknown.png b/static/images/raid/Instinct_1_unknown.png
deleted file mode 100644
index d79c4c3785..0000000000
Binary files a/static/images/raid/Instinct_1_unknown.png and /dev/null differ
diff --git a/static/images/raid/Instinct_2_unknown.png b/static/images/raid/Instinct_2_unknown.png
deleted file mode 100644
index 827f04d88f..0000000000
Binary files a/static/images/raid/Instinct_2_unknown.png and /dev/null differ
diff --git a/static/images/raid/Instinct_3_unknown.png b/static/images/raid/Instinct_3_unknown.png
deleted file mode 100644
index bc50dfef25..0000000000
Binary files a/static/images/raid/Instinct_3_unknown.png and /dev/null differ
diff --git a/static/images/raid/Instinct_4_unknown.png b/static/images/raid/Instinct_4_unknown.png
deleted file mode 100644
index 52a0680104..0000000000
Binary files a/static/images/raid/Instinct_4_unknown.png and /dev/null differ
diff --git a/static/images/raid/Instinct_5_unknown.png b/static/images/raid/Instinct_5_unknown.png
deleted file mode 100644
index b275c89049..0000000000
Binary files a/static/images/raid/Instinct_5_unknown.png and /dev/null differ
diff --git a/static/images/raid/Mystic_1_unknown.png b/static/images/raid/Mystic_1_unknown.png
deleted file mode 100644
index 9150b2b740..0000000000
Binary files a/static/images/raid/Mystic_1_unknown.png and /dev/null differ
diff --git a/static/images/raid/Mystic_2_unknown.png b/static/images/raid/Mystic_2_unknown.png
deleted file mode 100644
index 802cef9376..0000000000
Binary files a/static/images/raid/Mystic_2_unknown.png and /dev/null differ
diff --git a/static/images/raid/Mystic_3_unknown.png b/static/images/raid/Mystic_3_unknown.png
deleted file mode 100644
index 5e9eeb7a6b..0000000000
Binary files a/static/images/raid/Mystic_3_unknown.png and /dev/null differ
diff --git a/static/images/raid/Mystic_4_unknown.png b/static/images/raid/Mystic_4_unknown.png
deleted file mode 100644
index b42aa1710a..0000000000
Binary files a/static/images/raid/Mystic_4_unknown.png and /dev/null differ
diff --git a/static/images/raid/Mystic_5_unknown.png b/static/images/raid/Mystic_5_unknown.png
deleted file mode 100644
index e170e112c2..0000000000
Binary files a/static/images/raid/Mystic_5_unknown.png and /dev/null differ
diff --git a/static/images/raid/Uncontested_1_unknown.png b/static/images/raid/Uncontested_1_unknown.png
deleted file mode 100644
index 81a733b273..0000000000
Binary files a/static/images/raid/Uncontested_1_unknown.png and /dev/null differ
diff --git a/static/images/raid/Uncontested_2_unknown.png b/static/images/raid/Uncontested_2_unknown.png
deleted file mode 100644
index 43e4dc5374..0000000000
Binary files a/static/images/raid/Uncontested_2_unknown.png and /dev/null differ
diff --git a/static/images/raid/Uncontested_3_unknown.png b/static/images/raid/Uncontested_3_unknown.png
deleted file mode 100644
index eebeccdcd8..0000000000
Binary files a/static/images/raid/Uncontested_3_unknown.png and /dev/null differ
diff --git a/static/images/raid/Uncontested_4_unknown.png b/static/images/raid/Uncontested_4_unknown.png
deleted file mode 100644
index dace9d00dc..0000000000
Binary files a/static/images/raid/Uncontested_4_unknown.png and /dev/null differ
diff --git a/static/images/raid/Uncontested_5_unknown.png b/static/images/raid/Uncontested_5_unknown.png
deleted file mode 100644
index ec6475be5a..0000000000
Binary files a/static/images/raid/Uncontested_5_unknown.png and /dev/null differ
diff --git a/static/images/raid/Valor_1_unknown.png b/static/images/raid/Valor_1_unknown.png
deleted file mode 100644
index 51ad6a1e4c..0000000000
Binary files a/static/images/raid/Valor_1_unknown.png and /dev/null differ
diff --git a/static/images/raid/Valor_2_unknown.png b/static/images/raid/Valor_2_unknown.png
deleted file mode 100644
index acd21199fd..0000000000
Binary files a/static/images/raid/Valor_2_unknown.png and /dev/null differ
diff --git a/static/images/raid/Valor_3_unknown.png b/static/images/raid/Valor_3_unknown.png
deleted file mode 100644
index 597cf6f69b..0000000000
Binary files a/static/images/raid/Valor_3_unknown.png and /dev/null differ
diff --git a/static/images/raid/Valor_4_unknown.png b/static/images/raid/Valor_4_unknown.png
deleted file mode 100644
index 4cac518410..0000000000
Binary files a/static/images/raid/Valor_4_unknown.png and /dev/null differ
diff --git a/static/images/raid/Valor_5_unknown.png b/static/images/raid/Valor_5_unknown.png
deleted file mode 100644
index 68cb12056e..0000000000
Binary files a/static/images/raid/Valor_5_unknown.png and /dev/null differ
diff --git a/static/images/rocket.png b/static/images/rocket.png
deleted file mode 100644
index 22a02bade6..0000000000
Binary files a/static/images/rocket.png and /dev/null differ
diff --git a/static/js/build_icons.js b/static/js/build_icons.js
new file mode 100644
index 0000000000..aea92435da
--- /dev/null
+++ b/static/js/build_icons.js
@@ -0,0 +1,733 @@
+'use strict'
+
+const fs = require('fs')
+const readline = require('readline')
+const FileChanged = require('file-changed')
+const Promise = require('bluebird')
+const Jimp = require('jimp')
+
+const iconsDir = 'static/icons'
+const partsDir = `${iconsDir}/parts`
+const pokemonDir = `${iconsDir}/pokemon`
+const gymsDir = `${iconsDir}/gyms`
+const fontsDir = 'static/fonts'
+
+const resourceInfoPath = `${iconsDir}/.tracking`
+const resourceInfo = new FileChanged(resourceInfoPath)
+
+const teams = [
+ 'uncontested',
+ 'instinct',
+ 'mystic',
+ 'valor'
+]
+
+const teamColors = [
+ '#FFFFFF',
+ '#FFBE08',
+ '#00AAFF',
+ '#FF1A1A'
+]
+
+const unknownRaidBoss = 'unknown'
+const unknownRaidBossText = '?'
+
+const raidBosses = {
+ '1': [2, 5, 8, 11, 129, 320],
+ /* Ivysaur, Charmeleon, Wartortle, Metapod, Magikarp, Wailmer */
+ '2': [28, 73, 82, 91, 105, 302],
+ /* Sandslash, Tentacruel, Magneton, Cloyster, Marowak, Sableye, Mawile */
+ '3': [38, 65, 68, 94, 123, 137, 139, 303],
+ /* Ninetales, Alakazam, Machamp, Gengar, Scyther, Porygon, Omastar */
+ '4': [31, 34, 62, 71, 76, 131, 143, 248, 359 ],
+ /* Nidoqueen, Nidoking, Poliwrath, Victreebel, Golem, Lapras, Snorlax, Tyranitar, Absol */
+ '5': [144, 145, 146, 150, 243, 244, 245, 249, 250, 382, 383, 384]
+ /* Articuno, Zapdos, Moltres, Mewtwo, Raikou, Entei, Suicune, Lugia, Ho-Oh,
+ Groudon, Kyogre, Rayquaza */
+}
+
+const batchSize = 50
+
+function textWidth(font, text) {
+ var width = 0
+
+ for (let c = 0; c < text.length; ++c) {
+ if (font.kernings[text[c]] && font.kernings[text[c]][text[c + 1]]) {
+ width += font.kernings[text[c]][text[c + 1]]
+ }
+
+ width += font.chars[text[c]].xadvance || 0
+ }
+
+ return width
+}
+
+function textHeight(font, text) {
+ const heights = []
+
+ for (var c = 0; c < text.length; ++c) {
+ return font.chars[text[c]].height + (font.chars[text[c]].yoffset || 0)
+ }
+
+ return Math.max(heights)
+}
+
+function iconAlreadyExists(type, name) {
+ return fs.existsSync(`${iconsDir}/${type}/${name}.png`)
+}
+
+function pokemonIconName(pokemon, form) {
+ return pokemon.id + (form ? `-${form.name}` : '')
+}
+
+function gymIconName(teamId, gymStrength, raidLevel, raidBoss) {
+ return `${teams[teamId]}_${gymStrength || 0}_${raidLevel || 0}` +
+ (raidBoss ? `_${raidBoss}` : '')
+}
+
+function parseForm(form) {
+ if (Array.isArray(form)) {
+ return {
+ name: form[0],
+ symbol: form[1]
+ }
+ }
+
+ return {
+ name: form,
+ symbol: form.toUpperCase()
+ }
+}
+
+function saveResourceInfo() {
+ resourceInfo.addFile(`${iconsDir}/**/*.*`)
+ resourceInfo.addFile(`${fontsDir}/**/*.*`)
+ resourceInfo.clean()
+ resourceInfo.update()
+ resourceInfo.save()
+}
+
+function resourcePromise(resourceDetails) {
+ const resource = [
+ resourceDetails.type,
+ resourceDetails.path,
+ resourceDetails.name
+ ]
+
+ switch (resourceDetails.type) {
+ case 'icon':
+ resource.push(Jimp.read(resourceDetails.path))
+ resource.push(resourceDetails.size)
+ break
+
+ case 'font':
+ resource.push(Jimp.loadFont(resourceDetails.path))
+ break
+ }
+
+ return Promise.all(resource)
+}
+
+function pokemonResourceDetails(pokemon, form) {
+ const resourceDetails = [
+ {
+ type: 'icon',
+ name: 'circle',
+ path: `${partsDir}/circle.png`,
+ size: [192, 192]
+ }
+ ]
+
+ if (form) {
+ resourceDetails.push({
+ type: 'font',
+ name: 'font',
+ path: `${fontsDir}/open-sans-bold-66-white.fnt`
+ })
+ } else {
+ resourceDetails.push({
+ type: 'font',
+ name: 'font',
+ path: `${fontsDir}/open-sans-bold-86-white.fnt`
+ })
+ }
+
+ return resourceDetails
+}
+
+function gymResourceDetails(teamId, gymStrength, raidLevel, raidBoss) {
+ const resourceDetails = [
+ {
+ type: 'icon',
+ name: 'small_circle',
+ path: `${partsDir}/circle.png`,
+ size: [68, 68]
+ },
+ {
+ type: 'icon',
+ name: 'large_circle',
+ path: `${partsDir}/circle.png`,
+ size: [115, 115]
+ },
+ {
+ type: 'icon',
+ name: 'circle_border',
+ path: `${partsDir}/circle_border.png`,
+ size: [68, 68]
+ },
+ {
+ type: 'icon',
+ name: 'gym',
+ path: `${partsDir}/gym_${teams[teamId]}.png`,
+ size: [170, 170]
+ }
+ ]
+
+ if (gymStrength && gymStrength > 0) {
+ resourceDetails.push({
+ type: 'icon',
+ name: 'gym_strength',
+ path: `${partsDir}/${gymStrength}.png`,
+ size: [60, 60]
+ })
+ }
+
+ if (raidLevel && raidLevel > 0) {
+ resourceDetails.push({
+ type: 'icon',
+ name: 'raid_level',
+ path: `${partsDir}/${raidLevel}.png`,
+ size: [50, 50]
+ })
+
+ resourceDetails.push({
+ type: 'icon',
+ name: 'raid_egg',
+ path: `${partsDir}/raid_egg_${raidLevel}.png`,
+ size: [105, 105]
+ })
+
+ resourceDetails.push({
+ type: 'icon',
+ name: 'raid_star',
+ path: `${partsDir}/raid_star_${raidLevel}.png`,
+ size: [80, 80]
+ })
+ }
+
+ if (raidBoss) {
+ if (raidBoss === 'unknown') {
+ resourceDetails.push({
+ type: 'font',
+ name: 'font',
+ path: `${fontsDir}/open-sans-bold-86-white.fnt`
+ })
+ } else {
+ resourceDetails.push({
+ type: 'icon',
+ name: 'raid_boss',
+ path: `${pokemonDir}/${raidBoss}.png`,
+ size: [115, 115]
+ })
+ }
+ }
+
+ return resourceDetails
+}
+
+function resourceChanged(resourceDetails) {
+ const changedResources = []
+ resourceDetails.forEach(function (details) {
+ if (fs.existsSync(details.path)) {
+ changedResources.push(...resourceInfo.check(details.path))
+ } else {
+ changedResources.push(details.path)
+ }
+ })
+ return changedResources.length > 0
+}
+
+function resourceDetailsHash(resourceDetails) {
+ return resourceDetails.path +
+ (resourceDetails.size ? `-${resourceDetails.size}` : '')
+}
+
+function getPokemonIconDetails() {
+ const pokemonData = JSON.parse(
+ fs.readFileSync('static/data/pokemon.json', 'utf8'))
+ const pokemonForms = JSON.parse(
+ fs.readFileSync('static/data/pokemon_forms.json', 'utf8'))
+ const details = []
+
+ for (var pokemonId = 1; pokemonId <= 386; ++pokemonId) {
+ const pokemon = pokemonData[pokemonId]
+ const forms = pokemonForms[pokemonId]
+
+ pokemon.id = pokemonId
+
+ if (forms) {
+ forms.forEach(function (form) {
+ form = parseForm(form)
+ details.push({
+ name: pokemonIconName(pokemon, form),
+ pokemon: pokemon,
+ form: form,
+ resourceDetails: pokemonResourceDetails(pokemon, form)
+ })
+ })
+ } else {
+ details.push({
+ name: pokemonIconName(pokemon),
+ pokemon: pokemon,
+ resourceDetails: pokemonResourceDetails(pokemon)
+ })
+ }
+ }
+
+ return details
+}
+
+function getGymIconDetails() {
+ const details = []
+
+ var teamId
+ var raidLevel
+
+ // All gyms
+ for (teamId = 0; teamId < teams.length; ++teamId) {
+ for (raidLevel = 0; raidLevel <= 5; ++raidLevel) {
+ // Gym icons with just raid eggs
+ details.push({
+ name: gymIconName(teamId, 0, raidLevel),
+ teamId: teamId,
+ gymStrength: 0,
+ raidLevel: raidLevel,
+ resourceDetails: gymResourceDetails(teamId, 0, raidLevel)
+ })
+
+ // Gym icons with just raid bosses
+ if (raidLevel > 0) {
+ for (var raidBoss in raidBosses[raidLevel]) {
+ raidBoss = raidBosses[raidLevel][raidBoss]
+ details.push({
+ name: gymIconName(teamId, 0, raidLevel, raidBoss),
+ teamId: teamId,
+ gymStrength: 0,
+ raidLevel: raidLevel,
+ raidBoss: raidBoss,
+ resourceDetails: gymResourceDetails(teamId, 0, raidLevel, raidBoss)
+ })
+ }
+
+ details.push({
+ name: gymIconName(teamId, 0, raidLevel, unknownRaidBoss),
+ teamId: teamId,
+ gymStrength: 0,
+ raidLevel: raidLevel,
+ raidBoss: unknownRaidBoss,
+ resourceDetails: gymResourceDetails(teamId, 0, raidLevel, unknownRaidBoss)
+ })
+ }
+ }
+ }
+
+ // Only contested gyms
+ for (teamId = 1; teamId < teams.length; ++teamId) {
+ // Plain gym icon
+ details.push({
+ name: gymIconName(teamId),
+ teamId: teamId,
+ resourceDetails: gymResourceDetails(teamId)
+ })
+
+ // Gym icons with pokemon and raid eggs
+ for (var gymStrength = 0; gymStrength <= 6; ++gymStrength) {
+ for (raidLevel = 0; raidLevel <= 5; ++raidLevel) {
+ details.push({
+ name: gymIconName(teamId, gymStrength, raidLevel),
+ teamId: teamId,
+ gymStrength: gymStrength,
+ raidLevel: raidLevel,
+ resourceDetails: gymResourceDetails(teamId, gymStrength, raidLevel)
+ })
+ }
+ }
+ }
+
+ return details
+}
+
+function buildResourceMap(resources) {
+ const resourceMap = {}
+
+ resources.forEach(function (resource) {
+ const type = resource[0]
+ const path = resource[1]
+
+ const resourceDetails = {
+ type: type,
+ path: path,
+ name: resource[2]
+ }
+
+ switch (type) {
+ case 'icon':
+ var icon = resource[3]
+ const size = resource[4]
+
+ if (size && (icon.bitmap.width !== size[0] ||
+ icon.bitmap.height !== size[1])) {
+ icon = icon.resize(size[0], size[1])
+ .background(0x0)
+ }
+
+ resourceDetails.resource = icon
+ resourceDetails.size = size
+ break
+
+ case 'font':
+ resourceDetails.resource = resource[3]
+ break
+ }
+
+ resourceMap[resourceDetailsHash(resourceDetails)] = resourceDetails
+ })
+
+ return resourceMap
+}
+
+function resourcesForIcon(iconDetails, resourceMap) {
+ const iconResources = {}
+ iconDetails.resourceDetails.forEach(function (details) {
+ const resource = resourceMap[resourceDetailsHash(details)].resource
+ iconResources[details.name] = resource
+ })
+ return iconResources
+}
+
+function createProgressBar(text, size, stream = process.stdout) {
+ readline.clearLine(stream, 0)
+ stream.write(`${text} [${' '.repeat(size)}]\n`)
+ readline.moveCursor(stream, 0, -1)
+ readline.cursorTo(stream, text.length + 2)
+}
+
+function updateProgressBar(stream = process.stdout) {
+ stream.write('=')
+}
+
+function endProgressBar(stream = process.stdout) {
+ readline.cursorTo(stream, 0)
+ readline.clearLine(stream, 0)
+}
+
+function buildPokemonIcon(iconDetails, resources) {
+ return new Promise(function (resolve, reject) {
+ // eslint-disable-next-line no-new
+ new Jimp(192, 192, function (err, icon) {
+ if (err) {
+ reject(err)
+ }
+
+ const pokemon = iconDetails.pokemon
+ const form = iconDetails.form
+
+ const circle = resources['circle']
+ const font = resources['font']
+
+ // Background circle
+ const pokemonBkg = circle.clone()
+ .color([{
+ apply: 'mix',
+ params: [pokemon.types[0].color, 100]
+ }])
+ .background(0x0)
+
+ icon = icon.composite(pokemonBkg,
+ (icon.bitmap.width / 2) - (pokemonBkg.bitmap.width / 2),
+ (icon.bitmap.height / 2) - (pokemonBkg.bitmap.height / 2))
+
+ // Text
+ const idText = pokemon.id.toString()
+
+ if (form) {
+ // ID and form
+ const formText = form.symbol
+ icon.print(font,
+ (pokemonBkg.bitmap.width / 2) -
+ (textWidth(font, idText) / 2),
+ (pokemonBkg.bitmap.height / 2) -
+ textHeight(font, idText) -
+ 7,
+ idText)
+ icon.print(font,
+ (pokemonBkg.bitmap.width / 2) -
+ (textWidth(font, formText) / 2),
+ (pokemonBkg.bitmap.height / 2) +
+ 7,
+ formText)
+ } else {
+ // Just ID
+ icon.print(font,
+ (pokemonBkg.bitmap.width / 2) -
+ (textWidth(font, idText) / 2),
+ (pokemonBkg.bitmap.height / 2) -
+ (textHeight(font, idText) / 2),
+ idText)
+ }
+
+ icon.write(`${pokemonDir}/${iconDetails.name}.png`, function () {
+ resolve(iconDetails.name)
+ })
+ })
+ })
+}
+
+function buildGymIcon(iconDetails, resources) {
+ return new Promise(function (resolve, reject) {
+ // eslint-disable-next-line no-new
+ new Jimp(192, 192, function (err, icon) {
+ if (err) {
+ reject(err)
+ }
+
+ const teamId = iconDetails.teamId
+ const gymStrength = iconDetails.gymStrength
+ const raidLevel = iconDetails.raidLevel
+ const raidBoss = iconDetails.raidBoss
+
+ const circle = resources['small_circle']
+ const circleBorder = resources['circle_border']
+ const largeCircle = resources['large_circle']
+ const font = resources['font']
+
+ const gym = resources['gym']
+ icon = icon.composite(gym,
+ (icon.bitmap.width / 2) - (gym.bitmap.width / 2),
+ (icon.bitmap.height / 2) - (gym.bitmap.height / 2))
+
+ // Raid egg
+ const raidEgg = resources['raid_egg']
+ if (raidLevel && raidLevel > 0 && !raidBoss) {
+ icon = icon.composite(raidEgg,
+ icon.bitmap.width - raidEgg.bitmap.width - 3,
+ icon.bitmap.height - raidEgg.bitmap.height - 12)
+ }
+
+ // Raid boss
+ if (raidBoss) {
+ if (raidBoss === 'unknown') {
+ const unknownRaidBossBkg = largeCircle.clone()
+ .color([{
+ apply: 'mix',
+ params: ['#C0C0C0', 100]
+ }])
+ .background(0x0)
+
+ icon = icon.composite(unknownRaidBossBkg,
+ 5,
+ icon.bitmap.height -
+ unknownRaidBossBkg.bitmap.height)
+ icon.print(font,
+ (unknownRaidBossBkg.bitmap.width / 2) -
+ (textWidth(font, unknownRaidBossText) / 2) + 5,
+ icon.bitmap.height -
+ (unknownRaidBossBkg.bitmap.height / 2) -
+ (textHeight(font, unknownRaidBossText) / 2),
+ unknownRaidBossText)
+ } else {
+ const raidBossIcon = resources['raid_boss']
+ icon = icon.composite(raidBossIcon,
+ 5,
+ icon.bitmap.height -
+ raidBossIcon.bitmap.height)
+ }
+ }
+
+ // Gym strength
+ const gymStrengthY = icon.bitmap.height -
+ (circleBorder.bitmap.height / 1.75) -
+ 4
+
+ if (gymStrength && gymStrength > 0 && !raidBoss) {
+ const gymStrengthBkg = circle.clone()
+ .color([{
+ apply: 'mix',
+ params: [teamColors[teamId], 100]
+ }])
+ .background(0x0)
+
+ var gymStrengthX
+ if (raidLevel && raidLevel > 0) {
+ gymStrengthX = (icon.bitmap.width / 2) -
+ (gymStrengthBkg.bitmap.width / 2) +
+ 9
+ } else {
+ gymStrengthX = (icon.bitmap.width / 2) - 6
+ }
+
+ icon = icon.composite(gymStrengthBkg,
+ gymStrengthX - (gymStrengthBkg.bitmap.width / 2),
+ gymStrengthY - (gymStrengthBkg.bitmap.height / 2))
+ icon = icon.composite(circleBorder,
+ gymStrengthX - (circleBorder.bitmap.width / 2),
+ gymStrengthY - (circleBorder.bitmap.height / 2))
+ }
+
+ // Raid level
+ if (raidLevel && raidLevel > 0) {
+ const raidLevelBkg = resources['raid_star'].clone()
+ const raidLevelNum = resources['raid_level']
+ const raidLevelHeight = icon.bitmap.height - (raidLevelBkg.bitmap.height / 2)
+
+ icon = icon.composite(raidLevelBkg,
+ icon.bitmap.width -
+ (raidEgg.bitmap.width / 2) -
+ (raidLevelBkg.bitmap.width / 2) +
+ 10,
+ raidLevelHeight -
+ (raidLevelBkg.bitmap.height / 2))
+ icon = icon.composite(raidLevelNum,
+ icon.bitmap.width -
+ (raidEgg.bitmap.width / 2) -
+ (raidLevelNum.bitmap.width / 2) +
+ 10,
+ raidLevelHeight -
+ (raidLevelNum.bitmap.height / 2) +
+ 5)
+ }
+
+ // Gym strength number
+ if (gymStrength && gymStrength > 0 && !raidBoss) {
+ const gymStrengthNum = resources['gym_strength']
+ icon = icon.composite(gymStrengthNum,
+ gymStrengthX - (gymStrengthNum.bitmap.width / 2),
+ gymStrengthY - (gymStrengthNum.bitmap.height / 2))
+ }
+
+ icon.write(`${gymsDir}/${iconDetails.name}.png`, function () {
+ resolve(iconDetails.name)
+ })
+ })
+ })
+}
+
+module.exports = function () {
+ const done = this.async()
+
+ const pokemonIconDetails = getPokemonIconDetails().filter(function (iconDetails) {
+ return !iconAlreadyExists('pokemon', iconDetails.name) ||
+ resourceChanged(iconDetails.resourceDetails)
+ })
+
+ const pokemonResourceDetails = {}
+ pokemonIconDetails.forEach(function (iconDetails) {
+ iconDetails.resourceDetails.forEach(function (details) {
+ pokemonResourceDetails[resourceDetailsHash(details)] = details
+ })
+ })
+
+ const gymIconDetails = getGymIconDetails().filter(function (iconDetails) {
+ return !iconAlreadyExists('gyms', iconDetails.name) ||
+ resourceChanged(iconDetails.resourceDetails)
+ })
+
+ const gymResourceDetails = {}
+ gymIconDetails.forEach(function (iconDetails) {
+ iconDetails.resourceDetails.forEach(function (details) {
+ gymResourceDetails[resourceDetailsHash(details)] = details
+ })
+ })
+
+ const pokemonResourcePromises = []
+ for (var item in pokemonResourceDetails) {
+ const resourceDetails = pokemonResourceDetails[item]
+ pokemonResourcePromises.push(resourcePromise(resourceDetails))
+ }
+
+ Promise.all(pokemonResourcePromises)
+ .then(function (resources) {
+ const resourceMap = buildResourceMap(resources)
+
+ const pokemonIconDetailsBatches = []
+ const numBatches = Math.ceil(pokemonIconDetails.length / batchSize)
+ for (var i = 0; i < numBatches; ++i) {
+ const batchStart = i * batchSize
+ const batch = pokemonIconDetails.slice(batchStart, batchStart + batchSize)
+ pokemonIconDetailsBatches.push(batch)
+ }
+
+ createProgressBar('>> building pokemon icons', numBatches)
+
+ var iconsCreated = 0
+ return pokemonIconDetailsBatches.reduce(function (prev, pokemonIconDetails) {
+ return prev
+ .then(function () {
+ return Promise.all(pokemonIconDetails.map(function (iconDetails) {
+ const iconResources = resourcesForIcon(iconDetails, resourceMap)
+ return buildPokemonIcon(iconDetails, iconResources)
+ }))
+ })
+ .then(function (results) {
+ iconsCreated += results.length
+ updateProgressBar()
+ })
+ }, Promise.resolve(1))
+ .then(function () {
+ endProgressBar()
+ return iconsCreated
+ })
+ })
+ .then(function (iconsCreated) {
+ console.log('>>'['green'] + ` ${iconsCreated} pokemon icons built.`)
+
+ const gymResourcePromises = []
+ for (var item in gymResourceDetails) {
+ const resourceDetails = gymResourceDetails[item]
+ gymResourcePromises.push(resourcePromise(resourceDetails))
+ }
+
+ return Promise.all(gymResourcePromises)
+ })
+ .then(function (resources) {
+ const resourceMap = buildResourceMap(resources)
+
+ const gymIconDetailsBatches = []
+ const numBatches = Math.ceil(gymIconDetails.length / batchSize)
+ for (var i = 0; i < numBatches; ++i) {
+ const batchStart = i * batchSize
+ const batch = gymIconDetails.slice(batchStart, batchStart + batchSize)
+ gymIconDetailsBatches.push(batch)
+ }
+
+ createProgressBar('>> building gym icons', numBatches)
+
+ var iconsCreated = 0
+ return gymIconDetailsBatches.reduce(function (prev, gymIconDetails) {
+ return prev
+ .then(function () {
+ return Promise.all(gymIconDetails.map(function (iconDetails) {
+ const iconResources = resourcesForIcon(iconDetails, resourceMap)
+ return buildGymIcon(iconDetails, iconResources)
+ }))
+ })
+ .then(function (results) {
+ iconsCreated += results.length
+ updateProgressBar()
+ })
+ }, Promise.resolve(1))
+ .then(function () {
+ endProgressBar()
+ return iconsCreated
+ })
+ })
+ .then(function () {
+ console.log('>>'['green'] + ` ${gymIconDetails.length} gym icons built.`)
+ saveResourceInfo()
+ done()
+ })
+ .catch(function (err) {
+ console.log('>> '['red'] + (err.stack || err))
+ done(false)
+ })
+}
diff --git a/static/js/build_spritesheet.js b/static/js/build_spritesheet.js
new file mode 100644
index 0000000000..963c68658c
--- /dev/null
+++ b/static/js/build_spritesheet.js
@@ -0,0 +1,124 @@
+'use strict'
+
+const Promise = require('bluebird')
+const glob = require('glob')
+const fs = require('fs')
+const Spritesmith = require('spritesmith')
+const Handlebars = require('handlebars')
+
+const spritesheetIcons = 'static/icons'
+const spritesheetFile = 'static/spritesheet.png'
+const spritesheetScssFile = 'static/sass/sprites.scss'
+const spritesheetScssTemplate = 'templates/sprites.scss.hbs'
+const spritesheetMapFile = 'static/data/sprite_map.json'
+
+const writeFile = Promise.promisify(fs.writeFile)
+
+const batchSize = 40
+
+function findBestEngine() {
+ try {
+ require('canvassmith')
+ return 'canvassmith'
+ } catch (e) {}
+
+ return 'pixelsmith'
+}
+
+function writeSpritesheetToFile(spritesheet, file) {
+ return new Promise(function (resolve, reject) {
+ const stream = fs.createWriteStream(file)
+ stream.on('finish', resolve)
+ stream.on('error', reject)
+ spritesheet.pipe(stream)
+ })
+}
+
+function writeSpritesheetScssToFile(spritesheetMap, file) {
+ const templateFile = fs.readFileSync(spritesheetScssTemplate, 'utf8')
+ const template = Handlebars.compile(templateFile)
+ const spritesheetScss = template(spritesheetMap)
+ return writeFile(file, spritesheetScss)
+}
+
+function writeSpritesheetMapToFile(spritesheetMap, file) {
+ return writeFile(file, JSON.stringify(spritesheetMap, null, 2))
+}
+
+module.exports = function () {
+ const done = this.async()
+
+ const sprites = glob.sync(`${spritesheetIcons}/**/*.png`, {
+ ignore: `${spritesheetIcons}/parts/**/*.png`
+ })
+
+ const spriteBatches = []
+ const numBatches = Math.ceil(sprites.length / batchSize)
+ for (var i = 0; i < numBatches; ++i) {
+ const batchStart = i * batchSize
+ const batch = sprites.slice(batchStart, batchStart + batchSize)
+ spriteBatches.push(batch)
+ }
+
+ const spritesmith = new Spritesmith({
+ engine: findBestEngine()
+ })
+
+ spriteBatches.reduce(function (prev, sprites) {
+ return prev
+ .then(function (allImages) {
+ return new Promise(function (resolve, reject) {
+ spritesmith.createImages(sprites, function (err, images) {
+ if (err) {
+ reject(err)
+ }
+ allImages.push.apply(allImages, images)
+ resolve(allImages)
+ })
+ })
+ })
+ }, Promise.resolve([]))
+ .then(function (images) {
+ return new Promise(function (resolve, reject) {
+ resolve(spritesmith.processImages(images))
+ })
+ })
+ .then(function (spritesheetData) {
+ const spritesheetInfo = spritesheetData.properties
+ spritesheetInfo.url = spritesheetFile
+
+ const spriteInfo = {}
+ for (var spritePath in spritesheetData.coordinates) {
+ var spriteName = spritePath.replace(`${spritesheetIcons}/`, '')
+ .replace(/\.[^/.]+$/, '')
+ .replace('/', '-')
+ spriteInfo[spriteName] = spritesheetData.coordinates[spritePath]
+ }
+
+ const spritesheetMap = {
+ spritesheet: spritesheetInfo,
+ sprites: spriteInfo
+ }
+
+ return writeSpritesheetToFile(spritesheetData.image, spritesheetFile)
+ .then(function () {
+ return writeSpritesheetScssToFile(spritesheetMap, spritesheetScssFile)
+ })
+ .then(function () {
+ return writeSpritesheetMapToFile(spritesheetMap, spritesheetMapFile)
+ })
+ return Promise.all([
+ writeSpritesheetToFile(spritesheetData.image, spritesheetFile),
+ writeSpritesheetScssToFile(spritesheetMap, spritesheetScssFile),
+ writeSpritesheetMapToFile(spritesheetMap, spritesheetMapFile)
+ ])
+ })
+ .then(function () {
+ console.log('>> '['green'] + 'spritesheet built.')
+ done()
+ })
+ .catch(function (err) {
+ console.log('>> '['red'] + (err.stack || err))
+ done(false)
+ })
+}
diff --git a/static/js/map.common.js b/static/js/map.common.js
index df38b88c86..b885098390 100644
--- a/static/js/map.common.js
+++ b/static/js/map.common.js
@@ -788,16 +788,6 @@ var pGoStyleNight = [{
}]
}]
-var pokemonSprites = {
- columns: 28,
- iconWidth: 80,
- iconHeight: 80,
- spriteWidth: 2240,
- spriteHeight: 1440,
- filename: 'static/icons-large-sprite.png',
- name: 'High-Res'
-}
-
//
// LocalStorage helpers
//
@@ -1070,39 +1060,174 @@ var mapData = {
spawnpoints: {}
}
-function getGoogleSprite(index, sprite, displayHeight) {
- displayHeight = Math.max(displayHeight, 3)
- var scale = displayHeight / sprite.iconHeight
- // Crop icon just a tiny bit to avoid bleedover from neighbor
- var scaledIconSize = new google.maps.Size(scale * sprite.iconWidth - 1, scale * sprite.iconHeight - 1)
- var scaledIconOffset = new google.maps.Point(
- (index % sprite.columns) * sprite.iconWidth * scale + 0.5,
- Math.floor(index / sprite.columns) * sprite.iconHeight * scale + 0.5)
- var scaledSpriteSize = new google.maps.Size(scale * sprite.spriteWidth, scale * sprite.spriteHeight)
- var scaledIconCenterOffset = new google.maps.Point(scale * sprite.iconWidth / 2, scale * sprite.iconHeight / 2)
+function parseForm(form) {
+ if (Array.isArray(form)) {
+ return {
+ name: form[0],
+ symbol: form[1]
+ }
+ }
return {
- url: sprite.filename,
- size: scaledIconSize,
- scaledSize: scaledSpriteSize,
- origin: scaledIconOffset,
- anchor: scaledIconCenterOffset
+ name: form,
+ symbol: form.toUpperCase()
}
}
-function setupPokemonMarkerDetails(item, map, scaleByRarity = true, isNotifyPkmn = false) {
- const pokemonIndex = item['pokemon_id'] - 1
- const sprite = pokemonSprites
+var pokemonFormMap
+var formMap
+$(function () {
+ $.getJSON('static/dist/data/pokemon_forms.min.json').done(function (data) {
+ pokemonFormMap = data
+
+ $.each(pokemonFormMap, function (pokemon, forms) {
+ for (var form = 0; form < forms.length; ++form) {
+ forms[form] = parseForm(forms[form])
+ }
+ })
+
+ const pokemonFormList = $.map(pokemonFormMap, function (forms, pokemon) {
+ return {
+ pokemon: pokemon,
+ forms: forms
+ }
+ })
+
+ pokemonFormList.sort(function (a, b) {
+ return a.id - b.id
+ })
+
+ var formID = 1
+ formMap = {}
+ $.each(pokemonFormList, function (index, pokemonFormData) {
+ $.each(pokemonFormData.forms, function (index, data) {
+ formMap[formID] = {
+ pokemon: pokemonFormData.pokemon,
+ data: data
+ }
+ ++formID
+ })
+ })
+ })
+})
+
+var spriteMap
+$(function () {
+ $.getJSON('static/dist/data/sprite_map.min.json').done(function (data) {
+ spriteMap = data
+ })
+})
+
+function spriteClass(name, type) {
+ return `rm-sprite ${type}-${name}`
+}
+
+function markerName(name, type) {
+ return `${type}-${name}`
+}
+
+function spriteMarker(name, size) {
+ const spriteSheet = spriteMap.spritesheet
+ const sprite = spriteMap.sprites[name]
+
+ if (!sprite) {
+ return undefined
+ }
+
+ const scale = size ? (Math.max(size, 3) / sprite.height) : 1
+ const spriteScaledWidth = sprite.width * scale
+ const spriteScaledHeight = sprite.height * scale
+ return {
+ url: spriteSheet.url,
+ size: new google.maps.Size(spriteScaledWidth, spriteScaledHeight),
+ rawSize: new google.maps.Size(spriteScaledWidth, spriteScaledHeight),
+ scaledSize: new google.maps.Size(spriteSheet.width * scale, spriteSheet.height * scale),
+ origin: new google.maps.Point((sprite.x * scale), (sprite.y * scale))
+ }
+}
+
+function pokemonSpriteName(id, form) {
+ var formData
+ if (pokemonFormMap[id]) {
+ if (formMap[form]) {
+ formData = formMap[form].data
+ } else {
+ formData = pokemonFormMap[id][0]
+ }
+ }
+
+ return formData ? `${id}-${formData.name}` : id
+}
+
+function pokemonSprite(id, form) {
+ return spriteClass(pokemonSpriteName(id, form), 'pokemon')
+}
+
+function pokemonMarker(id, form, size) {
+ return spriteMarker(markerName(pokemonSpriteName(id, form), 'pokemon'), size)
+}
+
+function gymSpriteName(team, numPokemon, raidLevel, raidBoss) {
+ const level = raidLevel || 0
+ const boss = raidBoss ? `_${raidBoss}` : ''
+ numPokemon = raidBoss ? 0 : numPokemon
+ return `${team.toLowerCase()}_${numPokemon}_${level}${boss}`
+}
- var markerDetails = {
- sprite: sprite
+function checkedGymSpriteName(team, numPokemon, raidLevel, raidBoss) {
+ var name = gymSpriteName(team, numPokemon, raidLevel, raidBoss)
+ if (!spriteMap.sprites[markerName(name, 'gyms')]) {
+ name = gymSpriteName(team, numPokemon, raidLevel, 'unknown')
}
+ return name
+}
+
+function gymSprite(team, numPokemon, raidLevel, raidBoss) {
+ const name = checkedGymSpriteName(team, numPokemon, raidLevel, raidBoss)
+ return spriteClass(name, 'gyms')
+}
+
+function gymMarker(team, numPokemon, raidLevel, raidBoss, size) {
+ const name = checkedGymSpriteName(team, numPokemon, raidLevel, raidBoss)
+ return spriteMarker(markerName(name, 'gyms'), size)
+}
+
+function pokestopSprite(lured) {
+ const name = lured ? 'pokestop-lured' : 'pokestop'
+ return spriteClass(name, 'pokestops')
+}
+
+function pokestopMarker(lured, size) {
+ const name = lured ? 'pokestop-lured' : 'pokestop'
+ return spriteMarker(markerName(name, 'pokestops'), size)
+}
+
+function spawnpointMarker(color, size) {
+ return spriteMarker(markerName(`hsl-${color}`, 'colors'), size)
+}
+
+function getPositionMarkers() {
+ const positionMarkers = {}
+ for (var spriteName in spriteMap.sprites) {
+ if (spriteName.startsWith('markers-')) {
+ var markerName = spriteName.replace('markers-', '')
+ positionMarkers[markerName] = spriteMap.sprites[spriteName]
+ }
+ }
+ return positionMarkers
+}
+
+function positionMarker(style, size) {
+ return spriteMarker(markerName(style, 'markers'), size)
+}
+
+function setupPokemonMarkerDetails(item, map, scaleByRarity = true, isNotifyPkmn = false) {
var iconSize = (map.getZoom() - 3) * (map.getZoom() - 3) * 0.2 + Store.get('iconSizeModifier')
- rarityValue = 2
+ var rarityValue = 2
if (Store.get('upscalePokemon')) {
const upscaledPokemon = Store.get('upscaledPokemon')
- var rarityValue = isNotifyPkmn || (upscaledPokemon.indexOf(item['pokemon_id']) !== -1) ? 29 : 2
+ rarityValue = isNotifyPkmn || (upscaledPokemon.indexOf(item['pokemon_id']) !== -1) ? 29 : 2
}
if (scaleByRarity) {
@@ -1122,11 +1247,15 @@ function setupPokemonMarkerDetails(item, map, scaleByRarity = true, isNotifyPkmn
}
iconSize += rarityValue
- markerDetails.rarityValue = rarityValue
- markerDetails.icon = getGoogleSprite(pokemonIndex, sprite, iconSize)
- markerDetails.iconSize = iconSize
- return markerDetails
+ const icon = pokemonMarker(item.pokemon_id, item.form, iconSize)
+ icon.anchor = new google.maps.Point(icon.rawSize.width / 2, icon.rawSize.height / 2)
+
+ return {
+ icon: icon,
+ iconSize: iconSize,
+ rarityValue: rarityValue
+ }
}
function setupPokemonMarker(item, map, isBounceDisabled, scaleByRarity = true, isNotifyPkmn = false) {
@@ -1165,3 +1294,9 @@ function isMobileDevice() {
// Basic mobile OS (not browser) detection
return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
}
+
+function toTitleCase(str) {
+ return str.replace(/\w\S*/g, function (txt) {
+ return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
+ })
+}
diff --git a/static/js/map.js b/static/js/map.js
index 65ea324399..1d2a28d4dd 100644
--- a/static/js/map.js
+++ b/static/js/map.js
@@ -27,8 +27,6 @@ var i8lnDictionary = {}
var languageLookups = 0
var languageLookupThreshold = 3
-var searchMarkerStyles
-
var timestamp
var excludedPokemon = []
var notifiedPokemon = []
@@ -71,11 +69,6 @@ const audio = new Audio('static/sounds/ding.mp3')
const cryFileTypes = ['wav', 'mp3']
const genderType = ['♂', '♀', '⚲']
-const unownForm = ['unset', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '?']
-const pokemonWithImages = [
- 2, 3, 5, 6, 8, 9, 11, 28, 31, 34, 38, 59, 62, 65, 68, 71, 73, 76, 82, 89, 91, 94, 103, 105, 110, 112, 123, 125, 126, 129, 131, 134,
- 135, 136, 137, 139, 143, 144, 145, 146, 150, 153, 156, 159, 243, 244, 245, 248, 249, 250, 302
-]
/*
@@ -171,7 +164,7 @@ function initMap() { // eslint-disable-line no-unused-vars
// Enable clustering.
var clusterOptions = {
- imagePath: 'static/images/cluster/m',
+ imagePath: 'static/icons/clusters/m',
maxZoom: Store.get('maxClusterZoomLevel'),
zoomOnClick: Store.get('clusterZoomOnClick'),
gridSize: Store.get('clusterGridSize')
@@ -281,23 +274,6 @@ function initMap() { // eslint-disable-line no-unused-vars
}
}
-function updateLocationMarker(style) {
- if (style in searchMarkerStyles) {
- var url = searchMarkerStyles[style].icon
- if (url) {
- locationMarker.setIcon({
- url: url,
- scaledSize: new google.maps.Size(24, 24)
- })
- } else {
- locationMarker.setIcon(url)
- }
- Store.set('locationMarkerStyle', style)
- }
-
- return locationMarker
-}
-
function createLocationMarker() {
var position = Store.get('followMyLocationPosition')
var lat = ('lat' in position) ? position.lat : centerLat
@@ -334,23 +310,6 @@ function createLocationMarker() {
return locationMarker
}
-function updateSearchMarker(style) {
- if (style in searchMarkerStyles) {
- var url = searchMarkerStyles[style].icon
- if (url) {
- searchMarker.setIcon({
- url: url,
- scaledSize: new google.maps.Size(24, 24)
- })
- } else {
- searchMarker.setIcon(url)
- }
- Store.set('searchMarkerStyle', style)
- }
-
- return searchMarker
-}
-
function createSearchMarker() {
var searchMarker = new google.maps.Marker({ // need to keep reference.
position: {
@@ -393,6 +352,10 @@ function createSearchMarker() {
return searchMarker
}
+function updatePositionMarker(marker, style) {
+ marker.setIcon(positionMarker(style, 24))
+}
+
var searchControlURI = 'search_control'
function searchControl(action) {
@@ -518,15 +481,12 @@ function pokemonLabel(item) {
var details = ''
var contentstring = ''
- var formString = ''
- if (id === 201 && form !== null && form > 0) {
- formString += `(${unownForm[item['form']]})`
- }
+ const formSymbol = formMap[form] ? formMap[form].data.symbol : ''
contentstring += `
- ${name}
#${id} ${formString}
${genderType[gender - 1]} ${rarityDisplay} ${typesDisplay}
+ ${name}
#${id} ${formSymbol}
${genderType[gender - 1]} ${rarityDisplay} ${typesDisplay}
`
if (cp !== null && cpMultiplier !== null) {
@@ -540,7 +500,7 @@ function pokemonLabel(item) {
-
+
Level: ${pokemonLevel}
Exclude
Notify
@@ -572,7 +532,7 @@ function pokemonLabel(item) {
-
+
Level: n/a
Exclude
Notify
@@ -664,11 +624,8 @@ function gymLabel(gym, includeMembers = true) {
if (gym.team_id !== 0) {
subtitle = `
-
-
-
- Strength: ${gymPoints} (${slotsString})
-
+
+ Strength: ${gymPoints} (${slotsString})
`
}
@@ -679,7 +636,7 @@ function gymLabel(gym, includeMembers = true) {
if (isRaidStarted) {
// Set default image.
image = `
-
+
${levelStr}
@@ -688,12 +645,12 @@ function gymLabel(gym, includeMembers = true) {
`
// Use Pokémon-specific image if we have one.
- if (raid.pokemon_id !== null && pokemonWithImages.indexOf(raid.pokemon_id) !== -1) {
+ if (raid.pokemon_id !== null) {
image = `
-
+
@@ -714,7 +671,7 @@ function gymLabel(gym, includeMembers = true) {
`
}
} else {
- image = `
`
+ image = `
`
}
if (isUpcomingRaid) {
@@ -727,7 +684,7 @@ function gymLabel(gym, includeMembers = true) {
`
}
} else {
- image = `
`
+ image = `
`
}
@@ -759,13 +716,13 @@ function gymLabel(gym, includeMembers = true) {
-
+
${member.pokemon_name}
-
-
${member.cp_decayed}
+
+ ${member.cp_decayed}
@@ -802,7 +759,7 @@ function pokestopLabel(expireTime, latitude, longitude) {
00m00s left (${moment(expireTime).format('HH:mm')})
-
+
-
+
${latitude.toFixed(6)}, ${longitude.toFixed(7)}
@@ -1108,39 +1065,30 @@ function setupGymMarker(item) {
}
function updateGymMarker(item, marker) {
- let raidLevel = getRaidLevel(item.raid)
- if (item.raid && isOngoingRaid(item.raid) && Store.get('showRaids') && raidLevel >= Store.get('showRaidMinLevel') && raidLevel <= Store.get('showRaidMaxLevel')) {
- let markerImage = 'static/images/raid/' + gymTypes[item.team_id] + '_' + item.raid.level + '_unknown.png'
- if (pokemonWithImages.indexOf(item.raid.pokemon_id) !== -1) {
- markerImage = 'static/images/raid/' + gymTypes[item.team_id] + '_' + item['raid']['pokemon_id'] + '.png'
- }
- marker.setIcon({
- url: markerImage,
- scaledSize: new google.maps.Size(48, 48)
- })
+ var raidLevel = item.raid.level || 0
+ var raidPokemon = item.raid.pokemon_id
+
+ const shouldShowRaid = Store.get('showRaids') &&
+ raidLevel >= Store.get('showRaidMinLevel') &&
+ raidLevel <= Store.get('showRaidMaxLevel')
+ const isOngoingEgg = item.raid && item.raid.end > Date.now()
+
+ if (shouldShowRaid && isOngoingRaid(item.raid)) {
marker.setZIndex(google.maps.Marker.MAX_ZINDEX + 1)
- } else if (item.raid && item.raid.end > Date.now() && Store.get('showRaids') && !Store.get('showActiveRaidsOnly') && raidLevel >= Store.get('showRaidMinLevel') && raidLevel <= Store.get('showRaidMaxLevel')) {
- marker.setIcon({
- url: 'static/images/gym/' + gymTypes[item.team_id] + '_' + getGymLevel(item) + '_' + item['raid']['level'] + '.png',
- scaledSize: new google.maps.Size(48, 48)
- })
+ } else if (shouldShowRaid && isOngoingEgg && !Store.get('showActiveRaidsOnly')) {
+ raidPokemon = undefined
} else {
- marker.setIcon({
- url: 'static/images/gym/' + gymTypes[item.team_id] + '_' + getGymLevel(item) + '.png',
- scaledSize: new google.maps.Size(48, 48)
- })
+ raidLevel = undefined
+ raidPokemon = undefined
marker.setZIndex(1)
}
+
+ marker.setIcon(gymMarker(gymTypes[item.team_id], getGymLevel(item), raidLevel, raidPokemon, 48))
marker.infoWindow.setContent(gymLabel(item))
return marker
}
function setupPokestopMarker(item) {
- var imagename = item['lure_expiration'] ? 'PokestopLured' : 'Pokestop'
- var image = {
- url: 'static/images/pokestop/' + imagename + '.png',
- scaledSize: new google.maps.Size(32, 32)
- }
var marker = new google.maps.Marker({
position: {
lat: item['latitude'],
@@ -1148,7 +1096,7 @@ function setupPokestopMarker(item) {
},
map: map,
zIndex: item['lure_expiration'] ? 3 : 2,
- icon: image
+ icon: pokestopMarker(item['lure_expiration'], 32)
})
if (!marker.rangeCircle && isRangeActive(map)) {
@@ -1219,26 +1167,17 @@ function getColorBySpawnTime(value) {
}
function changeSpawnIcon(color, zoom) {
- var urlColor = ''
if (color === 275) {
- urlColor = './static/icons/hsl-275-light.png'
- } else {
- urlColor = './static/icons/hsl-' + color + '.png'
- }
- var zoomScale = 1.6 // adjust this value to change the size of the spawnpoint icons
- var minimumSize = 1
- var newSize = Math.round(zoomScale * (zoom - 10)) // this scales the icon based on zoom
- if (newSize < minimumSize) {
- newSize = minimumSize
+ color += '-light'
}
- var newIcon = {
- url: urlColor,
- scaledSize: new google.maps.Size(newSize, newSize),
- anchor: new google.maps.Point(newSize / 2, newSize / 2)
- }
+ const zoomScale = 1.6
+ const size = Math.max(Math.round(zoomScale * (zoom - 10)), 1)
- return newIcon
+ const icon = spawnpointMarker(color, size)
+ icon.anchor = new google.maps.Point(size / 2, size / 2)
+
+ return icon
}
function spawnPointIndex(color) {
@@ -1970,7 +1909,7 @@ function createMyLocationButton() {
locationIcon.style.margin = '5px'
locationIcon.style.width = '18px'
locationIcon.style.height = '18px'
- locationIcon.style.backgroundImage = 'url(static/mylocation-sprite-1x.png)'
+ locationIcon.style.backgroundImage = 'url(https://maps.gstatic.com/tactile/mylocation/mylocation-sprite-1x.png)'
locationIcon.style.backgroundSize = '180px 18px'
locationIcon.style.backgroundPosition = '0px 0px'
locationIcon.style.backgroundRepeat = 'no-repeat'
@@ -2156,7 +2095,7 @@ function showGymDetails(id) { // eslint-disable-line no-unused-vars
pokemonHtml = `
Gym Leader:
-
+
${result.guard_pokemon_name}
@@ -2192,11 +2131,13 @@ function getSidebarGymMember(pokemon) {
return `
-
+
${pokemon.pokemon_name}
- ${pokemon.cp_decayed}
+
+ ${pokemon.cp_decayed}
+
${pokemon.trainer_name} (${pokemon.trainer_level})
@@ -2254,7 +2195,7 @@ function getSidebarGymMember(pokemon) {
${pokemon.move_2_name}
${pokemon.move_2_type['type']}
-
+
@@ -2502,46 +2443,50 @@ $(function () {
$selectSearchIconMarker = $('#iconmarker-style')
$selectLocationIconMarker = $('#locationmarker-style')
- $.getJSON('static/dist/data/searchmarkerstyle.min.json').done(function (data) {
- searchMarkerStyles = data
- var searchMarkerStyleList = []
-
- $.each(data, function (key, value) {
- searchMarkerStyleList.push({
- id: key,
- text: value.name
- })
+ function setupPositionMarkers() {
+ const positionMarkers = getPositionMarkers()
+ const positionMarkerNames = $.map(positionMarkers, function (details, name) {
+ return {
+ id: name,
+ text: toTitleCase(name.replace(/[-_]+/g, ' '))
+ }
})
$selectSearchIconMarker.select2({
placeholder: 'Select Icon Marker',
- data: searchMarkerStyleList,
+ data: positionMarkerNames,
minimumResultsForSearch: Infinity
})
$selectSearchIconMarker.on('change', function (e) {
- var selectSearchIconMarker = $selectSearchIconMarker.val()
- Store.set('searchMarkerStyle', selectSearchIconMarker)
- updateSearchMarker(selectSearchIconMarker)
+ Store.set('searchMarkerStyle', this.value)
+ updatePositionMarker(searchMarker, this.value)
})
$selectSearchIconMarker.val(Store.get('searchMarkerStyle')).trigger('change')
- updateSearchMarker(Store.get('lockMarker'))
-
$selectLocationIconMarker.select2({
placeholder: 'Select Location Marker',
- data: searchMarkerStyleList,
+ data: positionMarkerNames,
minimumResultsForSearch: Infinity
})
$selectLocationIconMarker.on('change', function (e) {
Store.set('locationMarkerStyle', this.value)
- updateLocationMarker(this.value)
+ updatePositionMarker(locationMarker, this.value)
})
$selectLocationIconMarker.val(Store.get('locationMarkerStyle')).trigger('change')
- })
+ }
+
+ if (spriteMap) {
+ setupPositionMarkers()
+ } else {
+ $.getJSON('static/dist/data/sprite_map.min.json').done(function (data) {
+ spriteMap = data
+ setupPositionMarkers()
+ })
+ }
})
$(function () {
@@ -2550,9 +2495,7 @@ $(function () {
if (!state.id) {
return state.text
}
- var $state = $(
- '
' + state.text + ''
- )
+ var $state = $(`
${state.text}`)
return $state
}
diff --git a/static/js/statistics.js b/static/js/statistics.js
index c5d0377ae4..47e27eec8c 100644
--- a/static/js/statistics.js
+++ b/static/js/statistics.js
@@ -58,7 +58,7 @@ function processSeen(seen) {
$('#stats_table > tbody')
.append(`
-
+
${pokemonItem.pokemon_id}
diff --git a/static/move-bar-sprite.png b/static/move-bar-sprite.png
deleted file mode 100644
index 0099a8749b..0000000000
Binary files a/static/move-bar-sprite.png and /dev/null differ
diff --git a/static/mylocation-sprite-1x.png b/static/mylocation-sprite-1x.png
deleted file mode 100644
index d0b4ddd32f..0000000000
Binary files a/static/mylocation-sprite-1x.png and /dev/null differ
diff --git a/static/sass/components/_sprites.scss b/static/sass/components/_sprites.scss
deleted file mode 100644
index 86436f3a2d..0000000000
--- a/static/sass/components/_sprites.scss
+++ /dev/null
@@ -1,9 +0,0 @@
-/// Sprites for Pokemon icons on map.
-.pokemon-large-sprite {
- @include pokemon-sprites("icons-large-sprite.png", 80px);
-}
-
-/// Sprites for Pokemon icons in gyms and statistics.
-.pokemon-sprite {
- @include pokemon-sprites("icons-sprite.png", 30px);
-}
diff --git a/static/sass/layout/_gym-details.scss b/static/sass/layout/_gym-details.scss
index b158ce1706..d277ef7c03 100644
--- a/static/sass/layout/_gym-details.scss
+++ b/static/sass/layout/_gym-details.scss
@@ -270,6 +270,12 @@
}
}
+ .move-bar {
+ display: block;
+ width: 100px;
+ height: 15px;
+ }
+
.damage {
@media screen and (max-width: 480px) {
margin-right: 2px !important;
@@ -389,14 +395,24 @@
}
&.strength {
- @media screen and (max-width: 480px) {
- height: 12px !important;
- width:: 12px !important;
+ .rm-sprite {
+ display: inline-block;
+ @media screen and (max-width: 320px) {
+ height: 12px !important;
+ width: 12px !important;
+ }
+ height: 16px;
+ width: 16px;
+ margin: 2px;
+ margin-right: 1px;
+ vertical-align: middle;
+ }
+
+ span {
+ display: inline-block;
+ font-weight: 900;
+ vertical-align: middle;
}
- font-weight: 900;
- height: 16px;
- width: 16px;
- vertical-align: middle;
}
}
@@ -404,15 +420,22 @@
font-size: 12px;
&.motivation {
- font-weight: 900;
-
- &.heart {
- @media screen and (max-width: 480px) {
+ .rm-sprite {
+ display: inline-block;
+ @media screen and (max-width: 320px) {
height: 8px !important;
width: 8px !important;
}
height: 12px;
width: 12px;
+ margin: 2px;
+ margin-right: 1px;
+ vertical-align: middle;
+ }
+
+ span {
+ display: inline-block;
+ font-weight: 900;
vertical-align: middle;
}
}
diff --git a/static/sass/layout/_gym.scss b/static/sass/layout/_gym.scss
index 132b100934..4276a0b557 100644
--- a/static/sass/layout/_gym.scss
+++ b/static/sass/layout/_gym.scss
@@ -57,10 +57,24 @@
}
&.strength {
- font-weight: 900;
- height: 12px;
- width: 12px;
- vertical-align: middle;
+ .rm-sprite {
+ display: inline-block;
+ @media screen and (max-width: 320px) {
+ height: 8px !important;
+ width: 8px !important;
+ }
+ height: 12px;
+ width: 12px;
+ margin: 2px;
+ margin-right: 1px;
+ vertical-align: middle;
+ }
+
+ span {
+ display: inline-block;
+ font-weight: 900;
+ vertical-align: middle;
+ }
}
}
@@ -73,17 +87,30 @@
vertical-align: middle;
&.motivation {
-
- &.heart {
+ .rm-sprite {
+ display: inline-block;
@media screen and (max-width: 320px) {
height: 6px !important;
width: 6px !important;
}
- height: 8px;
- width: 8px;
- margin-right: -1px;
+ height: 10px;
+ width: 10px;
+ margin: 2px;
+ margin-right: 1px;
+ vertical-align: middle;
+ }
+
+ span {
+ display: inline-block;
+ font-weight: 900;
+ vertical-align: middle;
}
}
+
+ &.sprite {
+ height: 30px;
+ width: 30px;
+ }
}
}
diff --git a/static/sass/layout/_header.scss b/static/sass/layout/_header.scss
index 809c0fca4b..b345581052 100644
--- a/static/sass/layout/_header.scss
+++ b/static/sass/layout/_header.scss
@@ -133,7 +133,8 @@
}
}
- .rocket.icon {
+ .rm-sprite.other-rocket {
+ display: inline-block;
@media screen and (max-width: 480px) {
height: 24px !important;
width:: 24px !important;
diff --git a/static/sass/libs/_mixins.scss b/static/sass/libs/_mixins.scss
index 140b7f7cc2..f224dabe45 100644
--- a/static/sass/libs/_mixins.scss
+++ b/static/sass/libs/_mixins.scss
@@ -38,30 +38,3 @@
-webkit-user-select: none;
user-select: none;
}
-
-/// Defines Pokemon sprites
-/// @param {string} $filename The filename of the spritesheet, including file extension, excluding path
-/// @param {number} $icon_size The size of one icon, e.g. 80px
-@mixin pokemon-sprites($filename, $icon_size) {
- /// These are constant for now
- $icons_per_row: 28;
- $total_icons: 493;
-
- display: inline-block;
- background: {
- image: url(../../../#{$filename});
- size: ($icon_size * $icons_per_row) (ceil($total_icons / $icons_per_row) * $icon_size);
- repeat: no-repeat;
- };
- top: 6px;
- position: relative;
- -moz-transform-origin: 0 0;
- height: $icon_size;
- width: $icon_size;
-
- @for $i from 1 through $total_icons {
- &.n#{$i} {
- background-position: -#{$icon_size * (($i - 1) % $icons_per_row)} -#{$icon_size * floor(($i - 1) / $icons_per_row)}
- }
- }
-}
diff --git a/static/sass/main.scss b/static/sass/main.scss
index 33ddbd16aa..d28838ef3a 100644
--- a/static/sass/main.scss
+++ b/static/sass/main.scss
@@ -43,7 +43,6 @@
@import 'components/table';
@import 'components/button';
@import 'components/grid-demo';
-@import 'components/sprites';
// @import 'components/overlay';
// Layout.
@@ -59,4 +58,4 @@
@import 'layout/pokestop';
@import 'layout/pokemon';
-@import 'move-bar-sprite.scss';
+@import 'sprites.scss';
diff --git a/static/sass/move-bar-sprite.scss b/static/sass/move-bar-sprite.scss
deleted file mode 100644
index 18ae50ce1e..0000000000
--- a/static/sass/move-bar-sprite.scss
+++ /dev/null
@@ -1,35 +0,0 @@
-.move-bar-sprite {
- background-image: url(../../../move-bar-sprite.png);
- background-repeat: no-repeat;
- display: block;
-}
-
-.move-bar-sprite-1 {
- width: 100px;
- height: 11px;
- background-position: -2px -2px;
-}
-
-.move-bar-sprite-2 {
- width: 100px;
- height: 11px;
- background-position: -2px -17px;
-}
-
-.move-bar-sprite-3 {
- width: 100px;
- height: 11px;
- background-position: -2px -32px;
-}
-
-.move-bar-sprite-4 {
- width: 100px;
- height: 11px;
- background-position: -2px -47px;
-}
-
-.move-bar-sprite-5 {
- width: 100px;
- height: 11px;
- background-position: -2px -62px;
-}
diff --git a/static/sass/statistics.scss b/static/sass/statistics.scss
index ff465b81e6..929fcf5b21 100644
--- a/static/sass/statistics.scss
+++ b/static/sass/statistics.scss
@@ -1,8 +1,8 @@
-.status_container{
+.status_container {
display: none;
}
-.overlay{
+.overlay {
z-index: 100000;
display: none;
background-color: rgba(0,0,0,0.5);
@@ -13,11 +13,11 @@
min-height: 100%;
}
-#location_map{
+#location_map {
height: 100%;
}
-#times_list{
+#times_list {
float: left;
background: white;
position: fixed;
@@ -28,19 +28,19 @@
overflow: auto;
}
-#times_list div{
+#times_list div {
padding-bottom: 2px;
}
-#times_list .row0{
+#times_list .row0 {
background: #f1f1f1;
}
-#times_list .row1{
+#times_list .row1 {
background: #f8f8f8;
}
-.overlay .close{
+.overlay .close {
position: relative;
float: right;
margin-top: 20px;
@@ -49,7 +49,7 @@
cursor: pointer;
}
-.overlay .content{
+.overlay .content {
background: white;
margin: 50px;
border-radius: 10px;
@@ -62,16 +62,28 @@
right: 0px;
}
-#loading{
+#loading {
width: 100%;
height: 100%;
position: fixed;
top: 0px;
}
-#loading img{
+#loading img {
top: 50%;
left: 50%;
margin-right: -50%;
position: absolute;
-}
\ No newline at end of file
+}
+
+#stats_table.pokemon.sprite {
+ display: block;
+ width: 30px;
+ height: 30px;
+}
+
+.rm-sprite.other-close {
+ display: inline-block;
+ width: 30px;
+ height: 30px;
+}
diff --git a/static01.zip b/static01.zip
deleted file mode 100644
index de6a958cef..0000000000
Binary files a/static01.zip and /dev/null differ
diff --git a/templates/map.html b/templates/map.html
index 04e883496c..5ff3cc4619 100644
--- a/templates/map.html
+++ b/templates/map.html
@@ -44,7 +44,7 @@
diff --git a/templates/sprites.scss.hbs b/templates/sprites.scss.hbs
new file mode 100644
index 0000000000..f22d4122d4
--- /dev/null
+++ b/templates/sprites.scss.hbs
@@ -0,0 +1,11 @@
+.rm-sprite {
+ background-image: url(/{{spritesheet.url}});
+}
+
+{{#each sprites as |sprite name|}}
+.rm-sprite.{{name}} {
+ background-size: (({{../spritesheet.width}} / {{sprite.width}}) * 100%) (({{../spritesheet.height}} / {{sprite.height}}) * 100%);
+ background-position: (({{sprite.x}} / ({{../spritesheet.width}} - {{sprite.width}})) * 100%) (({{sprite.y}} / ({{../spritesheet.height}} - {{sprite.height}})) * 100%);
+}
+
+{{/each}}
diff --git a/templates/statistics.html b/templates/statistics.html
index be817bda3d..5f1a20fcc6 100644
--- a/templates/statistics.html
+++ b/templates/statistics.html
@@ -38,7 +38,7 @@
@@ -89,7 +89,7 @@ Duration
-
+
diff --git a/templates/status.html b/templates/status.html
index adee4a50df..ab685b8446 100644
--- a/templates/status.html
+++ b/templates/status.html
@@ -38,7 +38,7 @@