$(function () { // Positions are 1-indexed to match how the original tool (and the // in-game name entry screen) describes trainer-name character slots. // Position 1 is never read by the glitch; it's rendered but inert. var SPECIES_POSITIONS = [3, 5, 7]; var LEVEL_POSITIONS = [2, 4, 6]; var ROLE_LABEL = { 1: "unused", 2: "level 1", 3: "species 1", 4: "level 2", 5: "species 2", 6: "level 3", 7: "species 3" }; // Symbols not present on a standard keyboard; everything else usable // in a name (letters, digits, ( ) : ; [ ] ! - ? . / ,) can just be typed. var SYMBOL_BUTTONS = ["PK", "MN", "×", "♂", "♀"]; var FALLBACK_SPECIES = "MissingNo."; var FALLBACK_LEVEL = 127; var charmap = {}; var $nameRow = $("#name-row"); var $results = $("#results"); for (var i = 1; i <= 7; i++) { var $slot = $('
'); $slot.append('
char ' + i + '
'); $slot.append('
' + ROLE_LABEL[i] + '
'); var $input = $('') .attr("id", "char" + i) .data("pos", i); $slot.append($input); if (i > 1) { var $symbols = $('
'); SYMBOL_BUTTONS.forEach(function (sym) { var $btn = $('').text(sym); $btn.on("click", function () { $input.val($(this).text()); decode(); focusNext(i); }); $symbols.append($btn); }); $slot.append($symbols); } $nameRow.append($slot); } $nameRow.on("input", "input", function () { var pos = $(this).data("pos"); if (this.value.length >= 1) { focusNext(pos); } decode(); }); function focusNext(pos) { if (pos < 7) { $("#char" + (pos + 1)).trigger("focus"); } } function lookup(token) { if (!token) return null; return charmap[token] || null; } function decode() { var chars = []; for (var i = 1; i <= 7; i++) { chars[i] = $("#char" + i).val(); } $results.empty(); for (var pair = 0; pair < 3; pair++) { var speciesPos = SPECIES_POSITIONS[pair]; var levelPos = LEVEL_POSITIONS[pair]; var speciesEntry = lookup(chars[speciesPos]); var levelEntry = lookup(chars[levelPos]); var species = speciesEntry ? speciesEntry.pokemon : FALLBACK_SPECIES; var level = levelEntry ? levelEntry.decimal : FALLBACK_LEVEL; var $card = $('
'); $card.append('
from char ' + speciesPos + ' & char ' + levelPos + '
'); $card.append('
' + escapeHtml(species) + '
'); $card.append('
Level ' + level + '
'); $results.append($card); } } function escapeHtml(str) { return $("
").text(str).html(); } $.getJSON("data/charmap.json") .done(function (data) { charmap = data; decode(); }) .fail(function () { $("#load-error").show(); }); });