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)} @@ -816,7 +773,7 @@ function pokestopLabel(expireTime, latitude, longitude) { Pokéstop
- +
${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 @@