From 4caaf9808089e8d64cf0b41ce431ad2643cf7f69 Mon Sep 17 00:00:00 2001 From: Keith Oak Date: Tue, 31 Mar 2026 20:23:35 +1000 Subject: [PATCH] =?UTF-8?q?Add=20Pokedex=20app=20=E2=80=94=20Gen=201=20Pok?= =?UTF-8?q?emon=20viewer=20with=20shiny=20sprites?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gen 1 Pokedex with all 151 Pokemon and local gen1.json database. Sprites fetched via fetch_sprites.py (not bundled due to copyright). Shiny toggle with sparkle effects, Pokedex-inspired UI design. --- badge/apps/pokedex/__init__.py | 422 ++++++++++++++++++ badge/apps/pokedex/fetch_sprites.py | 87 ++++ badge/apps/pokedex/gen1.json | 1 + badge/apps/pokedex/icon.png | Bin 0 -> 1160 bytes badge/apps/pokedex/keefymon.png | Bin 0 -> 6919 bytes badge/apps/pokedex/keefymon_shiny.png | Bin 0 -> 7184 bytes badge/apps/pokedex/screenshot_charmander.png | Bin 0 -> 4669 bytes badge/apps/pokedex/screenshot_mewtwo.png | Bin 0 -> 7553 bytes badge/apps/pokedex/screenshot_pikachu.png | Bin 0 -> 4898 bytes .../apps/pokedex/screenshot_shiny_pikachu.png | Bin 0 -> 4938 bytes 10 files changed, 510 insertions(+) create mode 100644 badge/apps/pokedex/__init__.py create mode 100644 badge/apps/pokedex/fetch_sprites.py create mode 100644 badge/apps/pokedex/gen1.json create mode 100644 badge/apps/pokedex/icon.png create mode 100644 badge/apps/pokedex/keefymon.png create mode 100644 badge/apps/pokedex/keefymon_shiny.png create mode 100644 badge/apps/pokedex/screenshot_charmander.png create mode 100644 badge/apps/pokedex/screenshot_mewtwo.png create mode 100644 badge/apps/pokedex/screenshot_pikachu.png create mode 100644 badge/apps/pokedex/screenshot_shiny_pikachu.png diff --git a/badge/apps/pokedex/__init__.py b/badge/apps/pokedex/__init__.py new file mode 100644 index 0000000..a30aecf --- /dev/null +++ b/badge/apps/pokedex/__init__.py @@ -0,0 +1,422 @@ +import sys +import os + +sys.path.insert(0, "/system/apps/pokedex") +os.chdir("/system/apps/pokedex") + +from badgeware import io, brushes, shapes, Image, run, PixelFont, screen, Matrix, file_exists +import random +import math +import network +from urllib.urequest import urlopen +import gc +import json + + +# Colours +white = brushes.color(235, 245, 255) +faded = brushes.color(235, 245, 255, 100) +red = brushes.color(220, 50, 50) +dark_red = brushes.color(150, 30, 30) +dark_bg = brushes.color(15, 15, 25) + +# Type colours +TYPE_COLOURS = { + "normal": (168, 168, 120), + "fire": (240, 80, 48), + "water": (104, 144, 240), + "grass": (120, 200, 80), + "electric": (248, 208, 48), + "ice": (152, 216, 216), + "fighting": (192, 48, 40), + "poison": (160, 64, 160), + "ground": (224, 192, 104), + "flying": (168, 144, 240), + "psychic": (248, 88, 136), + "bug": (168, 184, 32), + "rock": (184, 160, 56), + "ghost": (112, 88, 152), + "dragon": (112, 56, 248), + "dark": (112, 88, 72), + "steel": (184, 184, 208), + "fairy": (238, 153, 172), +} + +small_font = PixelFont.load("/system/assets/fonts/ark.ppf") +large_font = PixelFont.load("/system/assets/fonts/absolute.ppf") + +SPRITE_URL = "https://wsrv.nl/?url=https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/{path}{id}.png&w=80&h=80&output=png" +STAT_NAMES = ["hp", "atk", "def", "sp.a", "sp.d", "spd"] +MAX_POKEMON = 151 + +# Load pokemon database from local file (12KB, all Gen 1) +pokedex_db = None +DB_PATH = "/system/apps/pokedex/gen1.json" +try: + f = open(DB_PATH, "r") + pokedex_db = json.loads(f.read()) + f.close() +except Exception as e: + print("Failed to load pokedex db: {}".format(e)) + +WIFI_PASSWORD = None +WIFI_SSID = None +wlan = None +connected = False +ticks_start = None +WIFI_TIMEOUT = 30 + +# State +current_id = 4 # Start with Charmander +pokemon_data = None +pokemon_sprite = None +sprite_task = None +sprite_fetching = False +shiny = False + + +def get_wifi_details(): + global WIFI_PASSWORD, WIFI_SSID + if WIFI_SSID is not None: + return True + try: + sys.path.insert(0, "/") + import secrets + sys.path.pop(0) + WIFI_SSID = getattr(secrets, "WIFI_SSID", None) + WIFI_PASSWORD = getattr(secrets, "WIFI_PASSWORD", None) + del secrets + except ImportError: + WIFI_PASSWORD = None + WIFI_SSID = None + return WIFI_SSID is not None + + +def wlan_start(): + global wlan, ticks_start, connected + if ticks_start is None: + ticks_start = io.ticks + if connected: + return True + try: + if wlan is None: + wlan = network.WLAN(network.STA_IF) + wlan.active(True) + if wlan.isconnected(): + connected = True + return True + wlan.connect(WIFI_SSID, WIFI_PASSWORD) + connected = wlan.isconnected() + except Exception as e: + print("WiFi error: {}".format(e)) + return False + if io.ticks - ticks_start < WIFI_TIMEOUT * 1000: + return connected + return False + + +def sprite_path(pokemon_id, is_shiny=False): + if is_shiny: + return "/system/shiny/{}.png".format(pokemon_id) + return "/system/sprites/{}.png".format(pokemon_id) + + +def fetch_sprite(pokemon_id, is_shiny=False): + path = sprite_path(pokemon_id, is_shiny) + if file_exists(path): + return + try: + url_path = "shiny/" if is_shiny else "" + response = urlopen(SPRITE_URL.format(id=pokemon_id, path=url_path), headers={"User-Agent": "Pokedex Badge"}) + data = bytearray(512) + with open(path, "wb") as f: + while True: + length = response.readinto(data) + if length == 0: + break + f.write(data[:length]) + yield + del data + del response + except Exception as e: + try: + os.remove(path) + except: + pass + raise RuntimeError("Sprite fetch failed: {}".format(e)) + finally: + gc.collect() + + +def load_pokemon(pokemon_id): + global pokemon_data + if pokedex_db is None: + pokemon_data = None + return + entry = pokedex_db.get(str(pokemon_id)) + if entry is None: + pokemon_data = None + return + # db format: n=name, t=types, s=[hp,atk,def,spatk,spdef,spd], h=height, w=weight + pokemon_data = { + "name": entry["n"].upper(), + "id": pokemon_id, + "types": entry["t"], + "stats": entry["s"], + "height": entry["h"], + "weight": entry["w"], + } + + +def type_brush(type_name): + rgb = TYPE_COLOURS.get(type_name, (168, 168, 120)) + return brushes.color(*rgb) + + +def draw_type_badge(type_name, x, y): + label = type_name.upper() + screen.font = small_font + w, h = screen.measure_text(label) + screen.brush = type_brush(type_name) + screen.draw(shapes.rounded_rectangle(x, y, w + 4, h + 1, 2)) + screen.brush = white + screen.text(label, x + 2, y) + + +# Fixed bar layout +BAR_X = 97 +BAR_W = 36 + +def draw_stat_bar(name, value, x, y, max_val=154): + fill = min(int((value / max_val) * BAR_W), BAR_W) + + screen.font = small_font + screen.brush = faded + screen.text(name, x, y) + + # Bar background + screen.brush = brushes.color(40, 40, 50) + screen.draw(shapes.rounded_rectangle(BAR_X, y + 2, BAR_W, 5, 2)) + + # Bar fill + if value >= 100: + screen.brush = brushes.color(100, 220, 100) + elif value >= 60: + screen.brush = brushes.color(220, 200, 60) + else: + screen.brush = brushes.color(220, 80, 60) + if fill > 0: + screen.draw(shapes.rounded_rectangle(BAR_X, y + 2, fill, 5, 2)) + + # Value — right-aligned, leaving 2px margin from screen edge + val_str = str(value) + vw, _ = screen.measure_text(val_str) + screen.brush = white + screen.text(val_str, 155 - vw, y) + + +def center_text(text, y): + w, _ = screen.measure_text(text) + screen.text(text, 80 - (w / 2), y) + + +def draw_main_view(): + # Pokeball red header bar + screen.brush = red + screen.draw(shapes.rectangle(0, 0, 160, 14)) + screen.brush = brushes.color(180, 50, 50) + screen.draw(shapes.rectangle(0, 14, 160, 1)) + + # Title + number + screen.font = large_font + screen.brush = white + if pokemon_data: + screen.text("#{:03d}".format(pokemon_data["id"]), 2, -2) + name = pokemon_data["name"] + w, _ = screen.measure_text(name) + screen.text(name, 157 - w, -2) + else: + center_text("POKEDEX", -2) + + # Sprite area (centred in left section) + # Sprite centred in left column (0-65 x, 15-107 y) + sprite_cx = 32 + sprite_cy = 65 + if pokemon_sprite: + bob = math.sin(io.ticks / 400) * 2 + sx = 0 + sy = int(sprite_cy - 40 + bob) + screen.blit(pokemon_sprite, sx, sy) + + # Shiny sparkles — alternating gold and white + if shiny: + sparkle = shapes.squircle(0, 0, 3, 2) + for i in range(6): + t = io.ticks / (500 + i * 130) + phase = i * 1.047 + angle = t * 0.4 + phase + r = 20 + i * 5 + cx = sprite_cx + math.cos(angle) * r + cy = sprite_cy + bob + math.sin(angle) * (r * 0.65) + pulse = math.sin(t * 2.5 + phase * 2) + if pulse > 0.1: + alpha = int(pulse * 200) + 55 + if i % 2 == 0: + screen.brush = brushes.color(248, 220, 48, alpha) + else: + screen.brush = brushes.color(255, 255, 255, alpha) + s = 0.3 + pulse * 0.7 + sparkle.transform = Matrix().translate(cx, cy).rotate(t * 50 + i * 60).scale(s) + screen.draw(sparkle) + else: + screen.brush = faded + squircle = shapes.squircle(0, 0, 8, 4) + for i in range(3): + squircle.transform = Matrix().translate(sprite_cx, sprite_cy).rotate( + (io.ticks + i * 5000) / 40).scale(1 + i / 1.5) + screen.draw(squircle) + + if pokemon_data: + rx = 66 + types = pokemon_data["types"] + + # Type badges right-aligned from screen edge + screen.font = small_font + badge_x = 158 + for t in reversed(types): + label = t.upper() + tw, _ = screen.measure_text(label) + badge_w = tw + 4 + badge_x -= badge_w + draw_type_badge(t, badge_x, 17) + badge_x -= 3 # gap between badges + + # Height / Weight — right-aligned + screen.brush = faded + h_m = pokemon_data["height"] / 10 + w_kg = pokemon_data["weight"] / 10 + hw_text = "{:.1f}m {:.1f}kg".format(h_m, w_kg) + hw_w, _ = screen.measure_text(hw_text) + screen.text(hw_text, 158 - hw_w, 30) + + # Stats + y_start = 40 + for i, name in enumerate(STAT_NAMES): + draw_stat_bar(name, pokemon_data["stats"][i], 69, y_start + i * 10) + + # Shiny indicator + if shiny: + screen.font = small_font + screen.brush = brushes.color(248, 208, 48) + screen.text("SHINY", 3, 16) + + # Button bar at bottom — matches header style + screen.brush = dark_red + screen.draw(shapes.rectangle(0, 107, 160, 1)) + screen.brush = red + screen.draw(shapes.rectangle(0, 108, 160, 12)) + screen.font = small_font + screen.brush = white + screen.text("") + screen.text("next>", 153 - nw, 108) + + +def load_sprite(): + global pokemon_sprite + path = sprite_path(current_id, shiny) + if file_exists(path): + try: + pokemon_sprite = Image.load(path) + except: + pokemon_sprite = None + else: + pokemon_sprite = None + + +def update(): + global current_id, sprite_task, sprite_fetching, pokemon_data, pokemon_sprite, connected, shiny + + # Clear screen + screen.brush = dark_bg + screen.draw(shapes.rectangle(0, 0, 160, 120)) + + if pokedex_db is None: + screen.font = large_font + screen.brush = red + center_text("POKEDEX", 20) + screen.font = small_font + screen.brush = white + center_text("gen1.json missing!", 50) + center_text("Re-flash badge files", 65) + return + + # Input handling (0 = KEEFYMON, 1-151 = Gen 1) + changed = False + if io.BUTTON_C in io.pressed: + current_id = (current_id + 1) % (MAX_POKEMON + 1) + changed = True + if io.BUTTON_A in io.pressed: + current_id = (current_id - 1) % (MAX_POKEMON + 1) + changed = True + if io.BUTTON_B in io.pressed: + current_id = random.randint(0, MAX_POKEMON) + changed = True + + # Toggle shiny with UP button + if io.BUTTON_UP in io.pressed: + shiny = not shiny + pokemon_sprite = None + sprite_task = None + sprite_fetching = False + load_sprite() + gc.collect() + + # Force sprite refresh on A+C hold + if io.BUTTON_A in io.held and io.BUTTON_C in io.held: + changed = True + try: + os.remove(sprite_path(current_id, shiny)) + except: + pass + + if changed: + pokemon_sprite = None + sprite_task = None + sprite_fetching = False + load_pokemon(current_id) + load_sprite() + gc.collect() + + # Fetch sprite over WiFi if not cached + if pokemon_sprite is None and not sprite_fetching: + if get_wifi_details(): + if wlan_start(): + connected = True + sprite_fetching = True + gc.collect() + sprite_task = fetch_sprite(current_id, shiny) + + if sprite_task: + try: + next(sprite_task) + except StopIteration: + sprite_task = None + sprite_fetching = False + load_sprite() + except Exception as e: + print("Sprite error: {}".format(e)) + sprite_task = None + sprite_fetching = False + + draw_main_view() + + +# Load initial pokemon on startup +load_pokemon(current_id) +load_sprite() + +if __name__ == "__main__": + run(update) diff --git a/badge/apps/pokedex/fetch_sprites.py b/badge/apps/pokedex/fetch_sprites.py new file mode 100644 index 0000000..bb628f5 --- /dev/null +++ b/badge/apps/pokedex/fetch_sprites.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +"""Download Gen 1 Pokemon sprites for the badge Pokedex app. + +Fetches normal and shiny sprites (64x64 PNG) from PokeAPI via wsrv.nl proxy. +Sprites are Nintendo/Game Freak/The Pokemon Company's intellectual property +and are NOT included in this repository. This script fetches them for +personal use on your badge. + +Usage: + python3 fetch_sprites.py # Download to ./sprites/ and ./shiny/ + python3 fetch_sprites.py /Volumes/BADGER # Download directly to badge +""" + +import os +import sys +import subprocess +from concurrent.futures import ThreadPoolExecutor, as_completed + +BASE_URL = "https://wsrv.nl/?url=https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/{path}{id}.png&w=80&h=80&output=png" +MAX_POKEMON = 151 +WORKERS = 10 + + +def fetch_sprite(pokemon_id, output_dir, shiny=False): + path = "shiny/" if shiny else "" + subdir = "shiny" if shiny else "sprites" + out_dir = os.path.join(output_dir, subdir) + os.makedirs(out_dir, exist_ok=True) + out_path = os.path.join(out_dir, f"{pokemon_id}.png") + + if os.path.exists(out_path): + return pokemon_id, shiny, True + + url = BASE_URL.format(id=pokemon_id, path=path) + try: + result = subprocess.run( + ["curl", "-sf", url, "-o", out_path], + capture_output=True, timeout=30, + ) + return pokemon_id, shiny, result.returncode == 0 + except Exception: + return pokemon_id, shiny, False + + +def main(): + output_dir = sys.argv[1] if len(sys.argv) > 1 else "." + + tasks = [] + for pid in range(1, MAX_POKEMON + 1): + tasks.append((pid, False)) # normal + tasks.append((pid, True)) # shiny + + total = len(tasks) + done = 0 + failed = [] + + print(f"Fetching {total} sprites ({MAX_POKEMON} normal + {MAX_POKEMON} shiny)...") + + with ThreadPoolExecutor(max_workers=WORKERS) as executor: + futures = { + executor.submit(fetch_sprite, pid, output_dir, is_shiny): (pid, is_shiny) + for pid, is_shiny in tasks + } + for future in as_completed(futures): + pid, is_shiny, ok = future.result() + done += 1 + label = "shiny" if is_shiny else "normal" + if not ok: + failed.append((pid, label)) + print(f" FAILED: {label} #{pid}") + if done % 50 == 0: + print(f" {done}/{total} complete...") + + print(f"\nDone! {done - len(failed)}/{total} sprites downloaded.") + if failed: + print(f"{len(failed)} failed: {failed}") + + # Verify + sprites_dir = os.path.join(output_dir, "sprites") + shiny_dir = os.path.join(output_dir, "shiny") + normal_count = len(os.listdir(sprites_dir)) if os.path.isdir(sprites_dir) else 0 + shiny_count = len(os.listdir(shiny_dir)) if os.path.isdir(shiny_dir) else 0 + print(f"Normal: {normal_count}, Shiny: {shiny_count}") + + +if __name__ == "__main__": + main() diff --git a/badge/apps/pokedex/gen1.json b/badge/apps/pokedex/gen1.json new file mode 100644 index 0000000..2c7058f --- /dev/null +++ b/badge/apps/pokedex/gen1.json @@ -0,0 +1 @@ +{"1":{"n":"bulbasaur","t":["grass","poison"],"s":[45,49,49,65,65,45],"h":7,"w":69},"2":{"n":"ivysaur","t":["grass","poison"],"s":[60,62,63,80,80,60],"h":10,"w":130},"3":{"n":"venusaur","t":["grass","poison"],"s":[80,82,83,100,100,80],"h":20,"w":1000},"4":{"n":"charmander","t":["fire"],"s":[39,52,43,60,50,65],"h":6,"w":85},"5":{"n":"charmeleon","t":["fire"],"s":[58,64,58,80,65,80],"h":11,"w":190},"6":{"n":"charizard","t":["fire","flying"],"s":[78,84,78,109,85,100],"h":17,"w":905},"7":{"n":"squirtle","t":["water"],"s":[44,48,65,50,64,43],"h":5,"w":90},"8":{"n":"wartortle","t":["water"],"s":[59,63,80,65,80,58],"h":10,"w":225},"9":{"n":"blastoise","t":["water"],"s":[79,83,100,85,105,78],"h":16,"w":855},"10":{"n":"caterpie","t":["bug"],"s":[45,30,35,20,20,45],"h":3,"w":29},"11":{"n":"metapod","t":["bug"],"s":[50,20,55,25,25,30],"h":7,"w":99},"12":{"n":"butterfree","t":["bug","flying"],"s":[60,45,50,90,80,70],"h":11,"w":320},"13":{"n":"weedle","t":["bug","poison"],"s":[40,35,30,20,20,50],"h":3,"w":32},"14":{"n":"kakuna","t":["bug","poison"],"s":[45,25,50,25,25,35],"h":6,"w":100},"15":{"n":"beedrill","t":["bug","poison"],"s":[65,90,40,45,80,75],"h":10,"w":295},"16":{"n":"pidgey","t":["normal","flying"],"s":[40,45,40,35,35,56],"h":3,"w":18},"17":{"n":"pidgeotto","t":["normal","flying"],"s":[63,60,55,50,50,71],"h":11,"w":300},"18":{"n":"pidgeot","t":["normal","flying"],"s":[83,80,75,70,70,101],"h":15,"w":395},"19":{"n":"rattata","t":["normal"],"s":[30,56,35,25,35,72],"h":3,"w":35},"20":{"n":"raticate","t":["normal"],"s":[55,81,60,50,70,97],"h":7,"w":185},"21":{"n":"spearow","t":["normal","flying"],"s":[40,60,30,31,31,70],"h":3,"w":20},"22":{"n":"fearow","t":["normal","flying"],"s":[65,90,65,61,61,100],"h":12,"w":380},"23":{"n":"ekans","t":["poison"],"s":[35,60,44,40,54,55],"h":20,"w":69},"24":{"n":"arbok","t":["poison"],"s":[60,95,69,65,79,80],"h":35,"w":650},"25":{"n":"pikachu","t":["electric"],"s":[35,55,40,50,50,90],"h":4,"w":60},"26":{"n":"raichu","t":["electric"],"s":[60,90,55,90,80,110],"h":8,"w":300},"27":{"n":"sandshrew","t":["ground"],"s":[50,75,85,20,30,40],"h":6,"w":120},"28":{"n":"sandslash","t":["ground"],"s":[75,100,110,45,55,65],"h":10,"w":295},"29":{"n":"nidoran-f","t":["poison"],"s":[55,47,52,40,40,41],"h":4,"w":70},"30":{"n":"nidorina","t":["poison"],"s":[70,62,67,55,55,56],"h":8,"w":200},"31":{"n":"nidoqueen","t":["poison","ground"],"s":[90,92,87,75,85,76],"h":13,"w":600},"32":{"n":"nidoran-m","t":["poison"],"s":[46,57,40,40,40,50],"h":5,"w":90},"33":{"n":"nidorino","t":["poison"],"s":[61,72,57,55,55,65],"h":9,"w":195},"34":{"n":"nidoking","t":["poison","ground"],"s":[81,102,77,85,75,85],"h":14,"w":620},"35":{"n":"clefairy","t":["fairy"],"s":[70,45,48,60,65,35],"h":6,"w":75},"36":{"n":"clefable","t":["fairy"],"s":[95,70,73,95,90,60],"h":13,"w":400},"37":{"n":"vulpix","t":["fire"],"s":[38,41,40,50,65,65],"h":6,"w":99},"38":{"n":"ninetales","t":["fire"],"s":[73,76,75,81,100,100],"h":11,"w":199},"39":{"n":"jigglypuff","t":["normal","fairy"],"s":[115,45,20,45,25,20],"h":5,"w":55},"40":{"n":"wigglytuff","t":["normal","fairy"],"s":[140,70,45,85,50,45],"h":10,"w":120},"41":{"n":"zubat","t":["poison","flying"],"s":[40,45,35,30,40,55],"h":8,"w":75},"42":{"n":"golbat","t":["poison","flying"],"s":[75,80,70,65,75,90],"h":16,"w":550},"43":{"n":"oddish","t":["grass","poison"],"s":[45,50,55,75,65,30],"h":5,"w":54},"44":{"n":"gloom","t":["grass","poison"],"s":[60,65,70,85,75,40],"h":8,"w":86},"45":{"n":"vileplume","t":["grass","poison"],"s":[75,80,85,110,90,50],"h":12,"w":186},"46":{"n":"paras","t":["bug","grass"],"s":[35,70,55,45,55,25],"h":3,"w":54},"47":{"n":"parasect","t":["bug","grass"],"s":[60,95,80,60,80,30],"h":10,"w":295},"48":{"n":"venonat","t":["bug","poison"],"s":[60,55,50,40,55,45],"h":10,"w":300},"49":{"n":"venomoth","t":["bug","poison"],"s":[70,65,60,90,75,90],"h":15,"w":125},"50":{"n":"diglett","t":["ground"],"s":[10,55,25,35,45,95],"h":2,"w":8},"51":{"n":"dugtrio","t":["ground"],"s":[35,100,50,50,70,120],"h":7,"w":333},"52":{"n":"meowth","t":["normal"],"s":[40,45,35,40,40,90],"h":4,"w":42},"53":{"n":"persian","t":["normal"],"s":[65,70,60,65,65,115],"h":10,"w":320},"54":{"n":"psyduck","t":["water"],"s":[50,52,48,65,50,55],"h":8,"w":196},"55":{"n":"golduck","t":["water"],"s":[80,82,78,95,80,85],"h":17,"w":766},"56":{"n":"mankey","t":["fighting"],"s":[40,80,35,35,45,70],"h":5,"w":280},"57":{"n":"primeape","t":["fighting"],"s":[65,105,60,60,70,95],"h":10,"w":320},"58":{"n":"growlithe","t":["fire"],"s":[55,70,45,70,50,60],"h":7,"w":190},"59":{"n":"arcanine","t":["fire"],"s":[90,110,80,100,80,95],"h":19,"w":1550},"60":{"n":"poliwag","t":["water"],"s":[40,50,40,40,40,90],"h":6,"w":124},"61":{"n":"poliwhirl","t":["water"],"s":[65,65,65,50,50,90],"h":10,"w":200},"62":{"n":"poliwrath","t":["water","fighting"],"s":[90,95,95,70,90,70],"h":13,"w":540},"63":{"n":"abra","t":["psychic"],"s":[25,20,15,105,55,90],"h":9,"w":195},"64":{"n":"kadabra","t":["psychic"],"s":[40,35,30,120,70,105],"h":13,"w":565},"65":{"n":"alakazam","t":["psychic"],"s":[55,50,45,135,95,120],"h":15,"w":480},"66":{"n":"machop","t":["fighting"],"s":[70,80,50,35,35,35],"h":8,"w":195},"67":{"n":"machoke","t":["fighting"],"s":[80,100,70,50,60,45],"h":15,"w":705},"68":{"n":"machamp","t":["fighting"],"s":[90,130,80,65,85,55],"h":16,"w":1300},"69":{"n":"bellsprout","t":["grass","poison"],"s":[50,75,35,70,30,40],"h":7,"w":40},"70":{"n":"weepinbell","t":["grass","poison"],"s":[65,90,50,85,45,55],"h":10,"w":64},"71":{"n":"victreebel","t":["grass","poison"],"s":[80,105,65,100,70,70],"h":17,"w":155},"72":{"n":"tentacool","t":["water","poison"],"s":[40,40,35,50,100,70],"h":9,"w":455},"73":{"n":"tentacruel","t":["water","poison"],"s":[80,70,65,80,120,100],"h":16,"w":550},"74":{"n":"geodude","t":["rock","ground"],"s":[40,80,100,30,30,20],"h":4,"w":200},"75":{"n":"graveler","t":["rock","ground"],"s":[55,95,115,45,45,35],"h":10,"w":1050},"76":{"n":"golem","t":["rock","ground"],"s":[80,120,130,55,65,45],"h":14,"w":3000},"77":{"n":"ponyta","t":["fire"],"s":[50,85,55,65,65,90],"h":10,"w":300},"78":{"n":"rapidash","t":["fire"],"s":[65,100,70,80,80,105],"h":17,"w":950},"79":{"n":"slowpoke","t":["water","psychic"],"s":[90,65,65,40,40,15],"h":12,"w":360},"80":{"n":"slowbro","t":["water","psychic"],"s":[95,75,110,100,80,30],"h":16,"w":785},"81":{"n":"magnemite","t":["electric","steel"],"s":[25,35,70,95,55,45],"h":3,"w":60},"82":{"n":"magneton","t":["electric","steel"],"s":[50,60,95,120,70,70],"h":10,"w":600},"83":{"n":"farfetchd","t":["normal","flying"],"s":[52,90,55,58,62,60],"h":8,"w":150},"84":{"n":"doduo","t":["normal","flying"],"s":[35,85,45,35,35,75],"h":14,"w":392},"85":{"n":"dodrio","t":["normal","flying"],"s":[60,110,70,60,60,110],"h":18,"w":852},"86":{"n":"seel","t":["water"],"s":[65,45,55,45,70,45],"h":11,"w":900},"87":{"n":"dewgong","t":["water","ice"],"s":[90,70,80,70,95,70],"h":17,"w":1200},"88":{"n":"grimer","t":["poison"],"s":[80,80,50,40,50,25],"h":9,"w":300},"89":{"n":"muk","t":["poison"],"s":[105,105,75,65,100,50],"h":12,"w":300},"90":{"n":"shellder","t":["water"],"s":[30,65,100,45,25,40],"h":3,"w":40},"91":{"n":"cloyster","t":["water","ice"],"s":[50,95,180,85,45,70],"h":15,"w":1325},"92":{"n":"gastly","t":["ghost","poison"],"s":[30,35,30,100,35,80],"h":13,"w":1},"93":{"n":"haunter","t":["ghost","poison"],"s":[45,50,45,115,55,95],"h":16,"w":1},"94":{"n":"gengar","t":["ghost","poison"],"s":[60,65,60,130,75,110],"h":15,"w":405},"95":{"n":"onix","t":["rock","ground"],"s":[35,45,160,30,45,70],"h":88,"w":2100},"96":{"n":"drowzee","t":["psychic"],"s":[60,48,45,43,90,42],"h":10,"w":324},"97":{"n":"hypno","t":["psychic"],"s":[85,73,70,73,115,67],"h":16,"w":756},"98":{"n":"krabby","t":["water"],"s":[30,105,90,25,25,50],"h":4,"w":65},"99":{"n":"kingler","t":["water"],"s":[55,130,115,50,50,75],"h":13,"w":600},"100":{"n":"voltorb","t":["electric"],"s":[40,30,50,55,55,100],"h":5,"w":104},"101":{"n":"electrode","t":["electric"],"s":[60,50,70,80,80,150],"h":12,"w":666},"102":{"n":"exeggcute","t":["grass","psychic"],"s":[60,40,80,60,45,40],"h":4,"w":25},"103":{"n":"exeggutor","t":["grass","psychic"],"s":[95,95,85,125,75,55],"h":20,"w":1200},"104":{"n":"cubone","t":["ground"],"s":[50,50,95,40,50,35],"h":4,"w":65},"105":{"n":"marowak","t":["ground"],"s":[60,80,110,50,80,45],"h":10,"w":450},"106":{"n":"hitmonlee","t":["fighting"],"s":[50,120,53,35,110,87],"h":15,"w":498},"107":{"n":"hitmonchan","t":["fighting"],"s":[50,105,79,35,110,76],"h":14,"w":502},"108":{"n":"lickitung","t":["normal"],"s":[90,55,75,60,75,30],"h":12,"w":655},"109":{"n":"koffing","t":["poison"],"s":[40,65,95,60,45,35],"h":6,"w":10},"110":{"n":"weezing","t":["poison"],"s":[65,90,120,85,70,60],"h":12,"w":95},"111":{"n":"rhyhorn","t":["ground","rock"],"s":[80,85,95,30,30,25],"h":10,"w":1150},"112":{"n":"rhydon","t":["ground","rock"],"s":[105,130,120,45,45,40],"h":19,"w":1200},"113":{"n":"chansey","t":["normal"],"s":[250,5,5,35,105,50],"h":11,"w":346},"114":{"n":"tangela","t":["grass"],"s":[65,55,115,100,40,60],"h":10,"w":350},"115":{"n":"kangaskhan","t":["normal"],"s":[105,95,80,40,80,90],"h":22,"w":800},"116":{"n":"horsea","t":["water"],"s":[30,40,70,70,25,60],"h":4,"w":80},"117":{"n":"seadra","t":["water"],"s":[55,65,95,95,45,85],"h":12,"w":250},"118":{"n":"goldeen","t":["water"],"s":[45,67,60,35,50,63],"h":6,"w":150},"119":{"n":"seaking","t":["water"],"s":[80,92,65,65,80,68],"h":13,"w":390},"120":{"n":"staryu","t":["water"],"s":[30,45,55,70,55,85],"h":8,"w":345},"121":{"n":"starmie","t":["water","psychic"],"s":[60,75,85,100,85,115],"h":11,"w":800},"122":{"n":"mr-mime","t":["psychic","fairy"],"s":[40,45,65,100,120,90],"h":13,"w":545},"123":{"n":"scyther","t":["bug","flying"],"s":[70,110,80,55,80,105],"h":15,"w":560},"124":{"n":"jynx","t":["ice","psychic"],"s":[65,50,35,115,95,95],"h":14,"w":406},"125":{"n":"electabuzz","t":["electric"],"s":[65,83,57,95,85,105],"h":11,"w":300},"126":{"n":"magmar","t":["fire"],"s":[65,95,57,100,85,93],"h":13,"w":445},"127":{"n":"pinsir","t":["bug"],"s":[65,125,100,55,70,85],"h":15,"w":550},"128":{"n":"tauros","t":["normal"],"s":[75,100,95,40,70,110],"h":14,"w":884},"129":{"n":"magikarp","t":["water"],"s":[20,10,55,15,20,80],"h":9,"w":100},"130":{"n":"gyarados","t":["water","flying"],"s":[95,125,79,60,100,81],"h":65,"w":2350},"131":{"n":"lapras","t":["water","ice"],"s":[130,85,80,85,95,60],"h":25,"w":2200},"132":{"n":"ditto","t":["normal"],"s":[48,48,48,48,48,48],"h":3,"w":40},"133":{"n":"eevee","t":["normal"],"s":[55,55,50,45,65,55],"h":3,"w":65},"134":{"n":"vaporeon","t":["water"],"s":[130,65,60,110,95,65],"h":10,"w":290},"135":{"n":"jolteon","t":["electric"],"s":[65,65,60,110,95,130],"h":8,"w":245},"136":{"n":"flareon","t":["fire"],"s":[65,130,60,95,110,65],"h":9,"w":250},"137":{"n":"porygon","t":["normal"],"s":[65,60,70,85,75,40],"h":8,"w":365},"138":{"n":"omanyte","t":["rock","water"],"s":[35,40,100,90,55,35],"h":4,"w":75},"139":{"n":"omastar","t":["rock","water"],"s":[70,60,125,115,70,55],"h":10,"w":350},"140":{"n":"kabuto","t":["rock","water"],"s":[30,80,90,55,45,55],"h":5,"w":115},"141":{"n":"kabutops","t":["rock","water"],"s":[60,115,105,65,70,80],"h":13,"w":405},"142":{"n":"aerodactyl","t":["rock","flying"],"s":[80,105,65,60,75,130],"h":18,"w":590},"143":{"n":"snorlax","t":["normal"],"s":[160,110,65,65,110,30],"h":21,"w":4600},"144":{"n":"articuno","t":["ice","flying"],"s":[90,85,100,95,125,85],"h":17,"w":554},"145":{"n":"zapdos","t":["electric","flying"],"s":[90,90,85,125,90,100],"h":16,"w":526},"146":{"n":"moltres","t":["fire","flying"],"s":[90,100,90,125,85,90],"h":20,"w":600},"147":{"n":"dratini","t":["dragon"],"s":[41,64,45,50,50,50],"h":18,"w":33},"148":{"n":"dragonair","t":["dragon"],"s":[61,84,65,70,70,70],"h":40,"w":165},"149":{"n":"dragonite","t":["dragon","flying"],"s":[91,134,95,100,100,80],"h":22,"w":2100},"150":{"n":"mewtwo","t":["psychic"],"s":[106,110,90,154,90,130],"h":20,"w":1220},"151":{"n":"mew","t":["psychic"],"s":[100,100,100,100,100,100],"h":4,"w":40},"0":{"n":"keefymon","t":["fighting","fairy"],"s":[154,154,154,154,154,154],"h":18,"w":900}} \ No newline at end of file diff --git a/badge/apps/pokedex/icon.png b/badge/apps/pokedex/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9725a75dbd4b9712ff24ae25da0853022564e609 GIT binary patch literal 1160 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 N002ovPDHLkV1gnUPX_=1 literal 0 HcmV?d00001 diff --git a/badge/apps/pokedex/keefymon_shiny.png b/badge/apps/pokedex/keefymon_shiny.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f86b7dcece92c6793193d5f24f90004e775ff0 GIT binary patch literal 7184 zcmV+r9Pi_aP)pe?Wc)xttI%`Q+ckZ11)!zH; zyZ1gvi3tC}|2vGKp1`*q{~>S>VGZ>Jz6pV|Ofj@ZiNZ9%P@v58-*ghR1`!YqiG)S} z>q!L=Jk>3s7t%lP4GbB91?L&k@tEF4(5zFH#CqYahrtyDD+$GA!UJ=lHx667;Lc~@ zyi*|-gT6TQMd7WtQXF`_l6C9Bvf#r_@5;erkK8LH4v7hm{&nC>@}~dNkVjT3DgK2a zITec3J3by;XyFei7T#{MYOaS+0<@{P?=>(ziYMMx6z7234NKNR?g*GR1!n&M1UPo? zQ4}BN5py47&{xR4s(~ZUF{PziNG(Z|SMqZu7yZECnumq1M=~%Frrp&~V+(ZL?*kNX z)%TM!6jwYUBvWwd_k}A*b#juYZykIk+-n574lw1o z(}h?5tX0NIN^U+M#HSdQ1wD^?`N`8Z32pP~6?wQ!oAaKI^5Xj%U#@WTPfTiV57H3} zv9Q)*-V)f{qzFfCl!9wc2kk&YAR2?DEfiqK0|hQee88vQgA+^?F_kb zKB5jpv>g!bc!cRlQy=30v62y&BX3kAFK$4l&2>rPImoLUl{hJvI4MJ(`CLiadC0Hc zRr2^s#Ie2Uk;;%iEJuniLkcfO9{&`vQQR5FTko1AbFyto3KelYVD?GZsMgDurIH~mtP(!xWZ z*!=bd=x!2@IoRNq!(3q4*pAJZ8*Q`((@^~G0zo@)#&{1Jo132klJKJ+Lw_H*CK{4j zKk%kJa0Hg!i0XT0mrDibD7pJ`c6%)pRD0uU) z>9>$c)8N>n;qgC#-vfqYkT4Ctd#?=!ytFxisT4}tyk3`Ncn;k4Cphw0IOB08bML!; zz?mEn6E-durK2N6Ef2t9J1)9~Siiwd7ig3grk@HVVa{c6_D^BiX4vq07$Zw@)cJ}p zR-~xNa}(~$AY~>oy)lZ%z`IWZDm_-e3!i-e2rQomPd%zRV{8Th7rh+g&wqm-8!^NN zalipCI19pIXzf%?EeH;TxVu0NR60vOnjvb|as^Byh(Qeg z{FGuvz0e#nS--|bmTB^{$qAaHnh!P%BO13UnbJmks~hp#__GWQC1htf*bZPSQYpnp zZ)kpX8Qe76%X91Ebj9Eox4@Zm;E-|Y0OtKwFz;C)1&NPj!2RHW5%|wAM=064)C~8r0|*s3*Xn+ePAyg zc=BKX2$VH$QB!x#ewYY?v?#j1-6N`(Ny99DwPD?z|3?wN+$ySKv!&X6I<89s-BVF_^krEpeX#%V(zj3+9Lwh@mlGRm8eslul*;t7Oi30$psk7Ktv;2nA~4QV4tZF zjY3N+G`E7agP@)reKz9UfCoxKj(l?uCI_+$_Kx-u4k5UGDLk-40mEg*NRC33Izx?*}aCABy z)7XmB6Xqe~FQk0JbM0P|;zf(a+8f(TXwj#%f^VhApC^48h z=D*UWDFTH-jFN({OjYajg5oIXkD^3CB%Q{$ypW8284ps|1hq|2(+FF(L48Y_%aS6@ zVMUzdoQ}7_%^8;9b|;Cp?MBR_pV(8;fkDm(iVYi=7IXQO28z22@Q*Eoz6h!-M0isT z^BUq5=4Fsf!ts?sPztNG5CTC6^+A3BHF12JG{X%}g7x!1Wx@I;9#|Cx1VQ-2F-43j z2~bs1h+V32O zYoBrSeo@apw=O~L@Na^oEmA2^4%Z%-!+)QBblM~hD{a;YQL^8VS+c+l`?OK5UDyW$n6jNTYW6IAuV>;lY({#N|*HEt$`@ z&JF6z(Xn1Nwr@}kO*S_@_&kI|U?-UvEMa@S5UT4OG#LjyrSHzjL-$#zo?d?T_l>0N zGCrtzi>XiaKwkpl31XrlmgMnM++2O!T|AMyk=sX

nd*4^i;?UtgswaxTZLxsq}J z=tjTaDYB{#3`wg&(x$I%8RsAM7cRN)FFbh3Y_w@%iiOkW9W?m{J*97N>VUAuNhO(I z?P2wr`Z6@^KxujnE_2Brb!AfoHKE2~_rsn-j$UKRFxTCz%Rlcp!{ z66LW(FSuLu+jok7>o&QjG;6?9`-5h}H;>Gh8-DjoqFoW}ckbmA_kqlQJ_xZ^a49U` z2ywZ5ASRd^$8N>7?iw@&+`alnTJJm^mE{LRk$C<}tc8VOL}6kcg;TE~BQOQWsl%g6 zh)wzt(!LBM-hv)=3gPkzl%M@Qem%lZSM7G5y5lLnGpZOz+XF7=pb=>9bPij$G4Iir z`Th?UBk}uC$qv-WkvIoGjN{E9_|fl)>5X{I5rhw)3l_Zf_f|6IT9D~Wug)$LscT9H z(sSmM(iYyjw=m68L<^~cNigF`2!$Zijj>phxc&QtBN5EnYA(I#Sk`^C9>>uGF6W>T zsFi@7!oS}HPOd5?ykR5M)`O0tuUiT&y^yp~B=MRfF>s))2udo z2y`h0eKBI~TWR>Lfz6HWhmE6-%! zoL>*PoP)LsUt8O$?!EhOB;#=^_a93~q@M!{Z^gBy5ilX9;n=Zo+7vjU3S6%AtK70? z*8XM;QdRr zBPOB7mV%?XyE!`G!StYpF^NQy;J7M0hfZfrSC}_$JQZiviQox9mIc*esEIp&DR_NM_>JFi`Ch_FCxc@K}0lDpk--5>nt5=~)iYPj1F_FXXrT_b5(}`4% zo9Q?Gjpp!6G~P9m6)QSey{?|~Pu~w^D0;SbFz0AxoSi(+f1Nz2x5y4t(YBA}phd=Tx92{ zbmk^yBeq6~17)R1xF38OsLmcjb+vr(New4naVFQF{cAjx6S(oC75|G^?8l%TZf}l!jW}89 z6}A62r{Vr@Fkq{&I(o-M=XvFy$pg5(D?Qm8D)I!SP+Fk97q!Fr8)HVY=&6s1#}gbi zX9k56^HGM$NCYs_8fO?ZEwAR21sgEp39h~GymX!9i}ldmmyQ>Ua*3^6$NF{k+};%W zW`g#;e4xZ0d>{C)sK4ZUQohd^Fx}ws0s)wZHL`l#Jd!^o;K@{4?=A_>Bt zASRH#-^g@*#Fc@>BB-2V*t7vW9xyFFd-g4!e0>!U#CBhCleaTO9UW8hsuB)eh{`^6 zk2GipC}jc^MPcUWQ5`2Yu;PZleM{;!M zyc?UrvPecF+$(Un`ZP^mh6kx_Ksvh8nkbScb0@k&>FdoMpacbd5M& zzTEQOr#$)gGVW}NGpb}9rcbkRbM@{Q4gItzD@EgIfORW^Y_0m;^l@`-j8X@3d`vTwNX(%f-kDSfxs8c-4^}_3PVa@ z-If~JZ|XF>ULV2CAkkQitAj~0ye6ITIL+Z0E>mF|CSF4^y*P)nR<+>`1_}5wY3kTc zPF61QL>$m8TfL0YRipRXHZK?=0zF=jBoj#{kDiPcA(DtPW1nf{1@n36`G?qY`mA)G z&onSig-+RE8dUvlF{4L}!{_tT-r2>N@=BJiTS0!X0HqWnLQ_X0F3Tj59GEcW|AZmg zD>r`lI4}ga+f6Kyz%&f1%Exm1!?!Y`ppxRkZ2FOOzq4iHHVv}xd6h%g2X=&+TQ|(4R+q4?AL1kGv zTU(ll#Umu|JsS`Vmm>SxmvOt?bcH%N{;=a{>1ZX(mq~9ZgvaAX83x;$w=<@)3auRs z!(`#Ig=jr^JCt@}uWF!S7*aWG6pKIkkkaB}LZJvVr_W?;)mWm@D2U*)+^pTQ7HjH0 zh~t2v$n*v2?dxE8!ARyWn$OJrXR&bkB2GK@47P5sqqVb*?5rS43{0gk41==5ktn4^ zWNufZ}cN()C0x=ef3geyu$$>{P5 zn%Y{}RA0@Q5#vZXNe0hyFxAOI9zzWtof_IhL%FqyycXHfBbZ9X2}h&!NBbFG zQi>pG5n}Ov8k)B8-2=YE^oi4XYTn<-@@Eo_M%dC=gJY*?YH7i;EW)u6`L28nWnd^p zOJ^IVVWJF^P`HybXP-EzzHqOYuw}W#acriI-ycV7`XXTrrKsCpLzX{>fIkaIYsOTL z!c>aBXdi~@BGaGA%GIkGSyqbMasdj%H0cfX(A^h8MCb~&r@zCn7*jq5v`Y7DDve`n zqVaw}vAtvKx0gVGbKQnKX@j6BFCC564h=0e_&u4V>?HX)#VDmPO_O0oMTiKcg(cK9 zY(Xi7%k3exqs6zSy$wkB^*EyG4t0k?K_e3sw%Ety@k7a>~H@f67;ws z=*K<2f<&yJSVn;SKnd|w0%aIX7&Q(NVMJ*ON*Ra{#cA~G>SjNLua#tH<+ZXbT}fK`o=~8N{Wl9uHAwbP0$yl zv#*oHqZh%*lCR1HT0z}5p8jY%XFc`8x39%_C*C}3_E*kA39YqtT)VCkM{KgQazQ~X z7DGFlWGczy3g567tj-qjhcNapef8QBpU0(Fif_$wX(gvoz~7)JRT1l zHm+q`({^&Qv(X|nwKP*!QUapUI^CWwA~@RNl>^Gtg}wd+5{iDc?@nvfAoK<9#9kq= zXhaDB7tXn!_~KQJoHB`=J4az_jo+Wi@ciLe$|O503lN%H+h}fU;lq_563om-I}U+N zKZappC`Cz8F-k#hc94k`;|a$?6bAwrhCzJo7hHe-EdWSg6qLbW9>23!d|>~!8tH%J zD!d*)zkU2AhI?I{zo}1|%9Koh7P-MZ9BmWuXX5wyXx!d}VVJaZZs&(b{gCz5>#_&PV-dOoVSkgm5sQ0c--!}vby`^Cyg@>3L7fj@ZH(p?Ca{~&+Bz^|U+~MYI zI;5Ev-a};Xo!Yh&Lwfw3wj6RiLC&taj62t+h$O#@D2EM=&!7NDQkZ1$+@q^7nZR`O zcnqM}Q%p%l8OKdLf+v^1NPD6#T_PR=3~6215)(@l4LuD^bx%i>gWxb$oe8+u#yd3f zChf9`A~hO?fD!^^F>A!W#QMW{Ob^4<7zX`_r*FWJ5@LZD0K$_d_^h$iF2B+L~v ze~u|2hVX+=_5;WM8tHojLq_1cuP%`zPnfCR|KL+u_Q6ut{?Wi|xiFFzkz|M$Vps1% z#)1X!%hTVlMY$DX3Oc12c5XXfx8j=XE~Gykqjcm%lDhl<@79h?*J#<+xRjh>1z!rf ze8F-_C6n}Y_i^?`S5f32%lg)rzea>x70A97vpM6eSsZlm47B4=GNO>-GOIQK literal 0 HcmV?d00001 diff --git a/badge/apps/pokedex/screenshot_charmander.png b/badge/apps/pokedex/screenshot_charmander.png new file mode 100644 index 0000000000000000000000000000000000000000..27789303cf81b94ba394da4d4e5b8063dce08da1 GIT binary patch literal 4669 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 literal 0 HcmV?d00001 diff --git a/badge/apps/pokedex/screenshot_mewtwo.png b/badge/apps/pokedex/screenshot_mewtwo.png new file mode 100644 index 0000000000000000000000000000000000000000..f44d537758a81268f7561162ea4c663372f4a31f GIT binary patch literal 7553 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 Usof1XJOBUy07*qoM6N<$g6-LNLjV8( literal 0 HcmV?d00001 diff --git a/badge/apps/pokedex/screenshot_shiny_pikachu.png b/badge/apps/pokedex/screenshot_shiny_pikachu.png new file mode 100644 index 0000000000000000000000000000000000000000..20a86cad218cef724b2f13d6cfe57235ad739955 GIT binary patch literal 4938 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