Files
pokemon-namegen/index.html
T

71 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Set the base URL for all relative URLs within the document -->
<!-- <base href="https://example.com/"> -->
<meta name="robots" content="index,follow">
<meta name="googlebot" content="index,follow">
<meta name="format-detection" content="telephone=no">
<meta http-equiv="x-dns-prefetch-control" content="off">
<meta name="google" content="notranslate">
<meta name="google" content="nositelinkssearchbox">
<meta name="rating" content="General">
<!-- <meta name="url" content="https://example.com/"> -->
<meta name="subject" content="your website's subject">
<meta name="description" content="A description of the page">
<title>Old Man Glitch Decoder — Pokémon Red/Blue/Yellow</title>
<!-- analytics -->
<!-- -->
<!-- Favicon -->
<!-- <link href="/favicon.ico" rel="icon" sizes="16x16" type="image/icon"> -->
<!-- <link href="/favicon.svg" rel="icon" type="image/svg+xml"> -->
<!-- <link href="/favicon.png" rel="icon" sizes="192x192"> -->
<!-- CSS -->
<style media="screen">
:root{color-scheme:light dark;--bg:#f4f1e8;--panel:#ffffff;--ink:#202020;--muted:#6b6b6b;--accent:#cc0000;--accent-dim:#e8d7d7;--border:#202020}@media(prefers-color-scheme:dark){:root{--bg:#16171a;--panel:#232529;--ink:#eceff1;--muted:#9aa0a6;--accent:#ff5c5c;--accent-dim:#3a2626;--border:#4a4d52}}*{box-sizing:border-box}body{margin:0;padding:2rem 1rem 4rem;background:var(--bg);color:var(--ink);font-family:courier new,Courier,monospace;display:flex;justify-content:center}main{width:100%;max-width:720px}h1{font-size:1.4rem;margin:0 0 .25rem;letter-spacing:.02em}.subtitle{color:var(--muted);margin:0 0 1.5rem;font-size:.9rem}.panel{background:var(--panel);border:2px solid var(--border);border-radius:6px;padding:1.25rem 1.5rem;margin-bottom:1.5rem}.name-row{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:.5rem}.slot{display:flex;flex-direction:column;align-items:center;gap:.35rem}.slot .index{font-size:.7rem;color:var(--muted)}.slot .role{font-size:.65rem;color:var(--accent);font-weight:700;min-height:1em}.slot input{width:2.4rem;height:2.6rem;text-align:center;font-size:1.3rem;font-family:inherit;background:var(--bg);color:var(--ink);border:2px solid var(--border);border-radius:4px}.slot input:focus{outline:none;border-color:var(--accent)}.symbols{display:flex;gap:.2rem;flex-wrap:wrap;justify-content:center;max-width:2.4rem}.symbols button{font-family:inherit;font-size:.7rem;padding:.1rem .3rem;cursor:pointer;background:var(--accent-dim);color:var(--ink);border:1px solid var(--border);border-radius:3px}.symbols button:hover{background:var(--accent);color:#fff}.hint{font-size:.75rem;color:var(--muted);margin-top:.75rem}.results{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem;margin-top:1rem}.encounter{border:1px solid var(--border);border-radius:4px;padding:.75rem .9rem;background:var(--bg)}.encounter .from{font-size:.7rem;color:var(--muted);margin-bottom:.35rem}.encounter .species{font-size:1.1rem;font-weight:700}.encounter .level{color:var(--accent);font-size:.95rem}h2{font-size:1rem;margin:0 0 .5rem}p{line-height:1.5;font-size:.9rem}footer{color:var(--muted);font-size:.75rem;text-align:center;margin-top:2rem}
</style>
<!-- JS -->
<script>
(function(){for(var d=[3,5,7],h=[2,4,6],u={1:"unused",2:"level 1",3:"species 1",4:"level 2",5:"species 2",6:"level 3",7:"species 3"},a=["PK","MN","×","♂","♀"],l="MissingNo.",c=127,r={A:{decimal:128,pokemon:"Golduck"},B:{decimal:129,pokemon:"Hypno"},C:{decimal:130,pokemon:"Golbat"},D:{decimal:131,pokemon:"Mewtwo"},E:{decimal:132,pokemon:"Snorlax"},F:{decimal:133,pokemon:"Magikarp"},G:{decimal:134,pokemon:"MissingNo."},H:{decimal:135,pokemon:"MissingNo."},I:{decimal:136,pokemon:"Muk"},J:{decimal:137,pokemon:"MissingNo."},K:{decimal:138,pokemon:"Kingler"},L:{decimal:139,pokemon:"Cloyster"},M:{decimal:140,pokemon:"MissingNo."},N:{decimal:141,pokemon:"Electrode"},O:{decimal:142,pokemon:"Clefable"},P:{decimal:143,pokemon:"Weezing"},Q:{decimal:144,pokemon:"Persian"},R:{decimal:145,pokemon:"Marowak"},S:{decimal:146,pokemon:"MissingNo."},T:{decimal:147,pokemon:"Haunter"},U:{decimal:148,pokemon:"Abra"},V:{decimal:149,pokemon:"Alakazam"},W:{decimal:150,pokemon:"Pidgeotto"},X:{decimal:151,pokemon:"Pidgeot"},Y:{decimal:152,pokemon:"Starmie"},Z:{decimal:153,pokemon:"Bulbasaur"},"(":{decimal:154,pokemon:"Venusaur"},")":{decimal:155,pokemon:"Tentacruel"},":":{decimal:156,pokemon:"MissingNo."},";":{decimal:157,pokemon:"Goldeen"},"[":{decimal:158,pokemon:"Seaking"},"]":{decimal:159,pokemon:"MissingNo."},a:{decimal:160,pokemon:"MissingNo."},b:{decimal:161,pokemon:"MissingNo."},c:{decimal:162,pokemon:"MissingNo."},d:{decimal:163,pokemon:"Ponyta"},e:{decimal:164,pokemon:"Rapidash"},f:{decimal:165,pokemon:"Rattata"},g:{decimal:166,pokemon:"Raticate"},h:{decimal:167,pokemon:"Nidorino"},i:{decimal:168,pokemon:"Nidorina"},j:{decimal:169,pokemon:"Geodude"},k:{decimal:170,pokemon:"Porygon"},l:{decimal:171,pokemon:"Aerodactyl"},m:{decimal:172,pokemon:"MissingNo."},n:{decimal:173,pokemon:"Magnemite"},o:{decimal:174,pokemon:"MissingNo."},p:{decimal:175,pokemon:"MissingNo."},q:{decimal:176,pokemon:"Charmander"},r:{decimal:177,pokemon:"Squirtle"},s:{decimal:178,pokemon:"Charmeleon"},t:{decimal:179,pokemon:"Wartortle"},u:{decimal:180,pokemon:"Charizard"},v:{decimal:181,pokemon:"MissingNo."},w:{decimal:182,pokemon:"Kabutops Fossil"},x:{decimal:183,pokemon:"Aerodactyl Fossil"},y:{decimal:184,pokemon:"Ghost"},z:{decimal:185,pokemon:"Oddish"},PK:{decimal:225,pokemon:"Rival (#1)"},MN:{decimal:226,pokemon:"Professor Oak"},"-":{decimal:227,pokemon:"Chief"},"?":{decimal:230,pokemon:"Rocket"},"!":{decimal:231,pokemon:"Cooltrainer Male"},"♂":{decimal:239,pokemon:"Blaine"},"×":{decimal:241,pokemon:"Gentleman"},".":{decimal:242,pokemon:"Rival (#2)"},"/":{decimal:243,pokemon:"Rival (Final)"},",":{decimal:244,pokemon:"Lorelei"},"♀":{decimal:245,pokemon:"Channeler"},0:{decimal:246,pokemon:"Agatha"},1:{decimal:247,pokemon:"Lance"},2:{decimal:248,pokemon:"Glitch - Freezes Game"},3:{decimal:249,pokemon:"Glitch - Freezes Game"},4:{decimal:250,pokemon:"Glitch - Freezes Game"},5:{decimal:251,pokemon:"Glitch Trainer (Can be used for ZZAZZ Glitch)"},6:{decimal:252,pokemon:"Glitch Trainer (Can be used for ZZAZZ Glitch)"},7:{decimal:253,pokemon:"Glitch Trainer (Freezes after battle)"},8:{decimal:254,pokemon:"Glitch Trainer (Can be used for ZZAZZ Glitch)"},9:{decimal:255,pokemon:"Glitch Trainer (Can be used for ZZAZZ Glitch)"}},n=document.getElementById("name-row"),i=document.getElementById("results"),t=1;t<=7;t++)(function(t){var s,r,c,l,i=document.createElement("div");i.className="slot",r=document.createElement("div"),r.className="index",r.textContent="char "+t,i.appendChild(r),c=document.createElement("div"),c.className="role",c.textContent=u[t],i.appendChild(c),s=document.createElement("input"),s.type="text",s.maxLength=2,s.autocomplete="off",s.spellcheck=!1,s.id="char"+t,s.dataset.pos=t,i.appendChild(s),t>1&&(l=document.createElement("div"),l.className="symbols",a.forEach(function(n){var i=document.createElement("button");i.type="button",i.textContent=n,i.addEventListener("click",function(){s.value=n,e(),o(t)}),l.appendChild(i)}),i.appendChild(l)),n.appendChild(i)})(t);n.addEventListener("input",function(t){if(t.target.tagName!=="INPUT")return;var n=parseInt(t.target.dataset.pos,10);t.target.value.length>=1&&o(n),e()});function o(e){e<7&&document.getElementById("char"+(e+1)).focus()}function s(e){return e?r[e]||null:null}function e(){for(var e,t,o,a,r,u,m,f,p,v,b,g=[],n=1;n<=7;n++)g[n]=document.getElementById("char"+n).value;i.innerHTML="";for(t=0;t<3;t++)u=d[t],p=h[t],f=s(g[u]),m=s(g[p]),v=f?f.pokemon:l,b=m?m.decimal:c,e=document.createElement("div"),e.className="encounter",r=document.createElement("div"),r.className="from",r.textContent="from char "+u+" & char "+p,e.appendChild(r),a=document.createElement("div"),a.className="species",a.textContent=v,e.appendChild(a),o=document.createElement("div"),o.className="level",o.textContent="Level "+b,e.appendChild(o),i.appendChild(e)}e()})()
</script>
</head>
<body>
<main>
<h1>Old Man Glitch Decoder</h1>
<p class="subtitle">Pokémon Red / Blue / Yellow — trainer-name encounter preview</p>
<div class="panel">
<div class="name-row" id="name-row">
<!-- 7 slots injected by app.js -->
</div>
<div class="hint">Type up to 7 characters (letters, digits, or the symbols below each box). The 1st character has no effect — the glitch never reads it.</div>
<div class="results" id="results"></div>
</div>
<div class="panel">
<h2>How this works</h2>
<p>In Gen&nbsp;1, walking away from the Old Man in Viridian City right after he "shows you how to catch a Pokémon" can trigger a glitch encounter built from bytes of your trainer's name. Positions <strong>3, 5, and 7</strong> of the name are read as a Pokémon species byte, and positions <strong>2, 4, and 6</strong> are read as that encounter's level byte — three separate (species, level) pairs.</p>
<p>The species comes from the game's internal index table: every nameable character (A&#8211;Z, a&#8211;z, digits, and a handful of symbols) has a raw byte value from 128&#8211;255, and that byte doubles as a species ID in the Pokémon index.</p>
<p>The "level" isn't computed at all &mdash; it's <em>the same raw byte value</em>, printed as-is. That's why these encounters always show absurd levels (128&#8211;255) instead of the normal 1&#8211;100: the game is misreading a name-entry character as if it were a level.</p>
</div>
<footer>
Data source: internal Gen 1 index table (decimal / R-B-Y Pokémon / R-B-Y Letter columns). Based on the "Old Man Name Generator 2" tool archived from Glitch City Laboratories.
</footer>
</main>
</body>
</html>