<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>PokéRogue</title> <meta name="title" content="PokéRogue" /> <meta name="description" content="A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible." /> <meta name="theme-color" content="#da3838" /> <meta name="keywords" content="pokerogue, pokemon, roguelite" /> <meta name="news_keywords" content="pokerogue, pokemon, roguelite" /> <meta name="distribution" content="Global"> <meta http-equiv="audience" content="General"> <meta property="og:title" content="PokéRogue" /> <meta property="og:type" content="website" /> <meta property="og:description" content="A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible." /> <meta property="og:image" content="https://pokerogue.net/logo512.png" /> <meta property="og:url" content="https://pokerogue.net" /> <meta property="og:site_name" content="PokéRogue" /> <meta property="twitter:title" content="PokéRogue" /> <meta property="twitter:description" content="A Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, and reaching Pokémon stats you never thought possible." /> <meta property="twitter:image" content="https://pokerogue.net/logo512.png" /> <meta property="twitter:card" content="summary" /> <meta property="twitter:url" content="https://pokerogue.net" /> <link rel="apple-touch-icon" href="./logo512.png" /> <link rel="shortcut icon" type="image/png" href="./logo512.png" /> <link rel="canonical" href="https://pokerogue.net" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <style type="text/css"> @font-face { font-family: 'emerald'; src: url('./fonts/pokemon-emerald-pro.ttf') format('truetype'); } @font-face { font-family: 'pkmnems'; src: url('./fonts/pkmnems.ttf') format('truetype'); } </style> <link rel="stylesheet" type="text/css" href="./index.css" /> <link rel="manifest" href="./manifest.webmanifest"> <script> if ("serviceWorker" in navigator) { window.addEventListener("load", function () { navigator.serviceWorker.register("./service-worker.js").then( function (registration) { console.log("ServiceWorker registration successful"); }, function (err) { console.log("ServiceWorker registration failed: ", err); }, ); }); } window.addEventListener('beforeinstallprompt', e => { // Prevent invasive install prompt (users are still able to install as an app) e.preventDefault(); }); </script> </head> <body> <div id="app"></div> <div id="touchControls"> <div class="left"> <div id="control-group-dpad" class="control-group control-group-dpad"> <div id="dpad" data-control-key="DPAD"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72"> <path id="dpadUp" data-key="UP" d="M48,5.8C48,2.5,45.4,0,42,0H29.9C26.6,0,24,2.4,24,5.8V24h24V5.8z" /> <path id="dpadRight" data-key="RIGHT" d="M66.2,24H48v24h18.2c3.3,0,5.8-2.7,5.8-6V29.9C72,26.5,69.5,24,66.2,24z" /> <path id="dpadDown" data-key="DOWN" d="M24,66.3c0,3.3,2.6,5.7,5.9,5.7H42c3.3,0,6-2.4,6-5.7V48H24V66.3z" /> <path id="dpadLeft" data-key="LEFT" d="M5.7,24C2.4,24,0,26.5,0,29.9V42c0,3.3,2.3,6,5.7,6H24V24H5.7z" /> <rect id="dpadCenter" x="24" y="24" width="24" height="24" /> </svg> </div> </div> </div> <div class="right"> <div id="control-group-action" class="control-group"> <div id="apadAction" class="apad-button apad-circle" data-key="ACTION"> <span class="apad-label">A</span> </div> </div> <div id="control-group-cancel" class="control-group"> <div id="apadCancel" class="apad-button apad-circle" data-key="CANCEL"> <span class="apad-label">B</span> </div> </div> <div id="control-group-extra-1" class="control-group control-group-extra"> <!-- buttons to navigate settings tabs --> <div id="apadPreviousTab" class="apad-button apad-square apad-small" data-key="CYCLE_FORM"> <span class="apad-label">F</span> </div> <div id="apadNextTab" class="apad-button apad-square apad-small" data-key="CYCLE_SHINY"> <span class="apad-label">R</span> </div> <!-- buttons to open filter menu in starter select --> <div id="apadOpenFilters" class="apad-button apad-rectangle apad-small" data-key="STATS"> <span class="apad-label">C</span> </div> <!-- main menu button --> <div id="apadMenu" class="apad-button apad-rectangle apad-small" data-key="MENU"> <span class="apad-label">Menu</span> </div> </div> <div id="control-group-extra-2" class="control-group control-group-extra"> <!-- buttons to cycle through pokemon characteristics in starter select --> <div id="apadCycleForm" class="apad-button apad-square apad-small" data-key="CYCLE_FORM"> <span class="apad-label">F</span> </div> <div id="apadCycleGender" class="apad-button apad-square apad-small" data-key="CYCLE_GENDER"> <span class="apad-label">G</span> </div> <div id="apadCycleShiny" class="apad-button apad-square apad-small" data-key="CYCLE_SHINY"> <span class="apad-label">R</span> </div> <div id="apadCycleAbility" class="apad-button apad-square apad-small" data-key="CYCLE_ABILITY"> <span class="apad-label">E</span> </div> <div id="apadCycleNature" class="apad-button apad-square apad-small" data-key="CYCLE_NATURE"> <span class="apad-label">N</span> </div> <div id="apadCycleVariant" class="apad-button apad-square apad-small" data-key="V"> <span class="apad-label">V</span> </div> <!-- buttons to display battle-specific information --> <div id="apadInfo" class="apad-button apad-rectangle apad-small" data-key="V"> <span class="apad-label">V</span> </div> <div id="apadStats" class="apad-button apad-rectangle apad-small" data-key="STATS"> <span class="apad-label">C</span> </div> </div> </div> </div> <script type="module" src="./src/main.ts"></script> <script src="./src/touch-controls.ts" type="module"></script> <script src="./src/debug.js" type="module"></script> </body> </html>