[{"data":1,"prerenderedAt":1084},["ShallowReactive",2],{"docs-navigation:de":3,"content-page:docs:gv5KEJmabFjU3VnOeb_3upjaFIk9doypkppyXwrdSGI":197,"content-page-surround:docs:gv5KEJmabFjU3VnOeb_3upjaFIk9doypkppyXwrdSGI":1076,"i-lucide:file":1078,"i-lucide:clipboard":1082},[4,54,74],{"title":5,"page":6,"canonicalKey":7,"locale":8,"id":9,"draft":6,"icon":10,"sidebar":11,"children":12},"Ableitungen",false,"1","de","content:de:1.dokumentation:1.anleitungen:.navigation.yml","lucide:route","section",[13,19,26,33,40,47],{"title":14,"id":15,"canonicalKey":16,"locale":8,"draft":6,"icon":17,"path":18},"Guild Wars auf dem Mac installieren","content:de:1.dokumentation:1.anleitungen:1.installation.md","1\u002F1","lucide:download","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Finstallation",{"title":20,"id":21,"canonicalKey":22,"locale":8,"draft":6,"navigation":23,"icon":24,"path":25},"Konten & Mobile-Verknüpfung","content:de:1.dokumentation:1.anleitungen:2.konten.md","1\u002F2",{"title":20},"lucide:key-round","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fkonten",{"title":27,"id":28,"canonicalKey":29,"locale":8,"draft":6,"navigation":30,"icon":31,"path":32},"Auf dem Mac spielen: Optionen","content:de:1.dokumentation:1.anleitungen:3.guild-wars-auf-dem-mac-spielen.md","1\u002F3",{"title":27},"lucide:scale","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fguild-wars-auf-dem-mac-spielen",{"title":34,"id":35,"canonicalKey":36,"locale":8,"draft":6,"navigation":37,"icon":38,"path":39},"Leistung","content:de:1.dokumentation:1.anleitungen:4.leistung.md","1\u002F4",{"title":34},"lucide:gauge","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Fleistung",{"title":41,"id":42,"canonicalKey":43,"locale":8,"draft":6,"navigation":44,"icon":45,"path":46},"Templates","content:de:1.dokumentation:1.anleitungen:5.templates.md","1\u002F5",{"title":41},"lucide:bookmark","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ftemplates",{"title":48,"id":49,"canonicalKey":50,"locale":8,"draft":6,"navigation":51,"icon":52,"path":53},"Fehlerbehebung","content:de:1.dokumentation:1.anleitungen:6.fehlerbehebung.md","1\u002F6",{"title":48},"lucide:wrench","\u002Fde\u002Fdokumentation\u002Fanleitungen\u002Ffehlerbehebung",{"title":55,"page":6,"canonicalKey":56,"locale":8,"id":57,"draft":6,"icon":58,"sidebar":59,"children":60},"Projekt","2","content:de:1.dokumentation:2.projekt:.navigation.yml","lucide:shield-check","group",[61,67],{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":6,"navigation":65,"icon":58,"path":66},"Sicherheit & Kontorisiko","content:de:1.dokumentation:2.projekt:1.sicherheit.md","2\u002F1",{"title":62},"\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fsicherheit",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":6,"navigation":71,"icon":72,"path":73},"Über & Credits","content:de:1.dokumentation:2.projekt:2.ueber.md","2\u002F2",{"title":68},"lucide:users","\u002Fde\u002Fdokumentation\u002Fprojekt\u002Fueber",{"title":75,"page":6,"canonicalKey":76,"locale":77,"id":78,"draft":6,"icon":79,"sidebar":11,"fallback":80,"children":81},"For ArenaNet","3","en","content:en:1.docs:3.upstream:.navigation.yml","lucide:send",true,[82,89,96,122,148,160,179],{"title":83,"id":84,"canonicalKey":85,"locale":77,"draft":6,"navigation":86,"icon":87,"fallback":80,"path":88},"Introduction","content:en:1.docs:3.upstream:1.introduction.md","3\u002F1",{"title":83},"lucide:book-open-check","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fintroduction",{"title":90,"id":91,"canonicalKey":92,"locale":77,"draft":6,"navigation":93,"icon":94,"fallback":80,"path":95},"Request summary","content:en:1.docs:3.upstream:2.request-summary.md","3\u002F2",{"title":90},"lucide:list-checks","\u002Fde\u002Fdokumentation\u002Fupstream\u002Frequest-summary",{"title":97,"page":6,"canonicalKey":98,"locale":77,"id":99,"draft":6,"icon":100,"sidebar":59,"fallback":80,"children":101},"File system","3\u002F3","content:en:1.docs:3.upstream:3.filesystem:.navigation.yml","lucide:folder-x",[102,108,115],{"title":103,"id":104,"canonicalKey":105,"locale":77,"draft":6,"navigation":106,"icon":100,"fallback":80,"path":107},"File routines (UR-01…04)","content:en:1.docs:3.upstream:3.filesystem:1.unimplemented-routines.md","3\u002F3\u002F1",{"title":103},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Funimplemented-routines",{"title":109,"id":110,"canonicalKey":111,"locale":77,"draft":6,"navigation":112,"icon":113,"fallback":80,"path":114},"RemoveExtension (UR-05)","content:en:1.docs:3.upstream:3.filesystem:2.path-remove-extension.md","3\u002F3\u002F2",{"title":109},"lucide:scissors","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Fpath-remove-extension",{"title":116,"id":117,"canonicalKey":118,"locale":77,"draft":6,"navigation":119,"icon":120,"fallback":80,"path":121},"File::Open mode (UR-06)","content:en:1.docs:3.upstream:3.filesystem:3.file-open-mode.md","3\u002F3\u002F3",{"title":116},"lucide:file-plus-2","\u002Fde\u002Fdokumentation\u002Fupstream\u002Ffilesystem\u002Ffile-open-mode",{"title":123,"page":6,"canonicalKey":124,"locale":77,"id":125,"draft":6,"icon":126,"sidebar":59,"fallback":80,"children":127},"Input","3\u002F4","content:en:1.docs:3.upstream:4.input:.navigation.yml","lucide:mouse-pointer-click",[128,134,141],{"title":129,"id":130,"canonicalKey":131,"locale":77,"draft":6,"navigation":132,"icon":126,"fallback":80,"path":133},"Double-click (UR-07)","content:en:1.docs:3.upstream:4.input:1.double-click-flag.md","3\u002F4\u002F1",{"title":129},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fdouble-click-flag",{"title":135,"id":136,"canonicalKey":137,"locale":77,"draft":6,"navigation":138,"icon":139,"fallback":80,"path":140},"Key labels (UR-08)","content:en:1.docs:3.upstream:4.input:2.key-labels.md","3\u002F4\u002F2",{"title":135},"lucide:keyboard","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fkey-labels",{"title":142,"id":143,"canonicalKey":144,"locale":77,"draft":6,"navigation":145,"icon":146,"fallback":80,"path":147},"Cursor re-test (UR-09)","content:en:1.docs:3.upstream:4.input:3.cursor-re-evaluation.md","3\u002F4\u002F3",{"title":142},"lucide:pointer","\u002Fde\u002Fdokumentation\u002Fupstream\u002Finput\u002Fcursor-re-evaluation",{"title":149,"page":6,"canonicalKey":150,"locale":77,"id":151,"draft":6,"icon":152,"sidebar":59,"fallback":80,"children":153},"Runtime","3\u002F5","content:en:1.docs:3.upstream:5.runtime:.navigation.yml","lucide:cpu",[154],{"title":155,"id":156,"canonicalKey":157,"locale":77,"draft":6,"navigation":158,"icon":152,"fallback":80,"path":159},"Heap maximum (UR-10)","content:en:1.docs:3.upstream:5.runtime:1.heap-maximum.md","3\u002F5\u002F1",{"title":155},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fruntime\u002Fheap-maximum",{"title":161,"page":6,"canonicalKey":162,"locale":77,"id":163,"draft":6,"icon":164,"sidebar":59,"fallback":80,"children":165},"Interface proposals","3\u002F6","content:en:1.docs:3.upstream:6.proposals:.navigation.yml","lucide:plug",[166,173],{"title":167,"id":168,"canonicalKey":169,"locale":77,"draft":6,"navigation":170,"icon":171,"fallback":80,"path":172},"Build identity (UR-11)","content:en:1.docs:3.upstream:6.proposals:1.build-identification.md","3\u002F6\u002F1",{"title":167},"lucide:fingerprint","\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fbuild-identification",{"title":174,"id":175,"canonicalKey":176,"locale":77,"draft":6,"navigation":177,"icon":164,"fallback":80,"path":178},"Host interface (UR-12)","content:en:1.docs:3.upstream:6.proposals:2.platform-host-interface.md","3\u002F6\u002F2",{"title":174},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Fproposals\u002Fplatform-host-interface",{"title":180,"page":6,"canonicalKey":181,"locale":77,"id":182,"draft":6,"icon":183,"sidebar":59,"fallback":80,"children":184},"Reference","3\u002F7","content:en:1.docs:3.upstream:7.reference:.navigation.yml","lucide:microscope",[185,191],{"title":186,"id":187,"canonicalKey":188,"locale":77,"draft":6,"navigation":189,"icon":52,"fallback":80,"path":190},"Our workarounds","content:en:1.docs:3.upstream:7.reference:1.our-workarounds.md","3\u002F7\u002F1",{"title":186},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Four-workarounds",{"title":192,"id":193,"canonicalKey":194,"locale":77,"draft":6,"navigation":195,"icon":183,"fallback":80,"path":196},"Verification method","content:en:1.docs:3.upstream:7.reference:2.verification-method.md","3\u002F7\u002F2",{"title":192},"\u002Fde\u002Fdokumentation\u002Fupstream\u002Freference\u002Fverification-method",{"title":198,"ref":199,"description":200,"icon":139,"updated":201,"navigation":202,"body":203,"type":1058,"id":136,"canonicalKey":137,"draft":6,"partial":6,"locale":77,"collection":1059,"navigationFile":6,"file":1060,"route":1066,"resolution":1073},"UR-08: every printable key is labelled one position too high","docs\u002Fupstream\u002Finput\u002Fkey-labels","The Controls panel names the next character in ASCII order. A control bound to K reads L. Input is correct; only the label is wrong.","2026-08-04",{"title":135},{"type":204,"children":205,"toc":1036},"root",[206,248,274,284,295,302,307,480,496,502,507,569,574,579,585,610,616,628,641,679,684,690,695,735,753,764,811,817,822,828,895,901,1004,1009,1015,1020,1025,1031],{"type":207,"tag":208,"props":209,"children":210},"element","p",{},[211,214,220,222,228,230,235,237,241,242,246],{"type":212,"value":213},"text","The Controls panel and the in-game menus name the wrong key for every binding\nthat uses a printable character. The label shows the ",{"type":207,"tag":215,"props":216,"children":217},"strong",{},[218],{"type":212,"value":219},"next character in ASCII\norder",{"type":212,"value":221},": a control bound to ",{"type":207,"tag":223,"props":224,"children":225},"code",{},[226],{"type":212,"value":227},"K",{"type":212,"value":229}," reads ",{"type":207,"tag":223,"props":231,"children":232},{},[233],{"type":212,"value":234},"L",{"type":212,"value":236},", a control bound to ",{"type":207,"tag":223,"props":238,"children":239},{},[240],{"type":212,"value":7},{"type":212,"value":229},{"type":207,"tag":223,"props":243,"children":244},{},[245],{"type":212,"value":56},{"type":212,"value":247},".",{"type":207,"tag":208,"props":249,"children":250},{},[251,253,258,260,265,267,272],{"type":212,"value":252},"Input itself is correct — the key that works is the right key and matches the\nWindows client, and the bindings on the account are fine. The defect is in the\ncode that renders a key id as text. Keys that have a name — ",{"type":207,"tag":223,"props":254,"children":255},{},[256],{"type":212,"value":257},"Up Arrow",{"type":212,"value":259},",\n",{"type":207,"tag":223,"props":261,"children":262},{},[263],{"type":212,"value":264},"Escape",{"type":212,"value":266},", ",{"type":207,"tag":223,"props":268,"children":269},{},[270],{"type":212,"value":271},"Tab",{"type":212,"value":273},", the function keys — are labelled correctly.",{"type":207,"tag":208,"props":275,"children":276},{},[277,282],{"type":207,"tag":215,"props":278,"children":279},{},[280],{"type":212,"value":281},"Fix:",{"type":212,"value":283}," low effort once the render function is found — with symbols that\nshould take minutes. Small blast radius: display text only, input handling\ndoesn't change.",{"type":207,"tag":208,"props":285,"children":286},{},[287,289,294],{"type":212,"value":288},"Build used for the measurements below: 38797,\n",{"type":207,"tag":223,"props":290,"children":291},{},[292],{"type":212,"value":293},"3229678d3fd7d2f0e309530086a614d97f02e7eeb3ca12650ababfd2eb360817",{"type":212,"value":247},{"type":207,"tag":296,"props":297,"children":299},"h2",{"id":298},"what-the-player-sees",[300],{"type":212,"value":301},"What the player sees",{"type":207,"tag":208,"props":303,"children":304},{},[305],{"type":212,"value":306},"Observed with default bindings, in Options → Control:",{"type":207,"tag":308,"props":309,"children":310},"table",{},[311,335],{"type":207,"tag":312,"props":313,"children":314},"thead",{},[315],{"type":207,"tag":316,"props":317,"children":318},"tr",{},[319,325,330],{"type":207,"tag":320,"props":321,"children":322},"th",{},[323],{"type":212,"value":324},"Action",{"type":207,"tag":320,"props":326,"children":327},{},[328],{"type":212,"value":329},"Key that works",{"type":207,"tag":320,"props":331,"children":332},{},[333],{"type":212,"value":334},"Label shown",{"type":207,"tag":336,"props":337,"children":338},"tbody",{},[339,361,381,400,420,440,459],{"type":207,"tag":316,"props":340,"children":341},{},[342,348,353],{"type":207,"tag":343,"props":344,"children":345},"td",{},[346],{"type":212,"value":347},"Panel: Open Hero",{"type":207,"tag":343,"props":349,"children":350},{},[351],{"type":212,"value":352},"H",{"type":207,"tag":343,"props":354,"children":355},{},[356],{"type":207,"tag":223,"props":357,"children":358},{},[359],{"type":212,"value":360},"I",{"type":207,"tag":316,"props":362,"children":363},{},[364,369,373],{"type":207,"tag":343,"props":365,"children":366},{},[367],{"type":212,"value":368},"Panel: Open Inventory",{"type":207,"tag":343,"props":370,"children":371},{},[372],{"type":212,"value":360},{"type":207,"tag":343,"props":374,"children":375},{},[376],{"type":207,"tag":223,"props":377,"children":378},{},[379],{"type":212,"value":380},"J",{"type":207,"tag":316,"props":382,"children":383},{},[384,389,393],{"type":207,"tag":343,"props":385,"children":386},{},[387],{"type":212,"value":388},"Panel: Open Skills and Attributes",{"type":207,"tag":343,"props":390,"children":391},{},[392],{"type":212,"value":227},{"type":207,"tag":343,"props":394,"children":395},{},[396],{"type":207,"tag":223,"props":397,"children":398},{},[399],{"type":212,"value":234},{"type":207,"tag":316,"props":401,"children":402},{},[403,408,412],{"type":207,"tag":343,"props":404,"children":405},{},[406],{"type":212,"value":407},"Panel: Open Quest Log",{"type":207,"tag":343,"props":409,"children":410},{},[411],{"type":212,"value":234},{"type":207,"tag":343,"props":413,"children":414},{},[415],{"type":207,"tag":223,"props":416,"children":417},{},[418],{"type":212,"value":419},"M",{"type":207,"tag":316,"props":421,"children":422},{},[423,428,432],{"type":207,"tag":343,"props":424,"children":425},{},[426],{"type":212,"value":427},"Panel: Open World Map",{"type":207,"tag":343,"props":429,"children":430},{},[431],{"type":212,"value":419},{"type":207,"tag":343,"props":433,"children":434},{},[435],{"type":207,"tag":223,"props":436,"children":437},{},[438],{"type":212,"value":439},"N",{"type":207,"tag":316,"props":441,"children":442},{},[443,448,452],{"type":207,"tag":343,"props":444,"children":445},{},[446],{"type":212,"value":447},"Action: Use Skill 1",{"type":207,"tag":343,"props":449,"children":450},{},[451],{"type":212,"value":7},{"type":207,"tag":343,"props":453,"children":454},{},[455],{"type":207,"tag":223,"props":456,"children":457},{},[458],{"type":212,"value":56},{"type":207,"tag":316,"props":460,"children":461},{},[462,467,472],{"type":207,"tag":343,"props":463,"children":464},{},[465],{"type":212,"value":466},"Movement: Move Forward",{"type":207,"tag":343,"props":468,"children":469},{},[470],{"type":212,"value":471},"W",{"type":207,"tag":343,"props":473,"children":474},{},[475],{"type":207,"tag":223,"props":476,"children":477},{},[478],{"type":212,"value":479},"X",{"type":207,"tag":208,"props":481,"children":482},{},[483,485,489,491,495],{"type":212,"value":484},"A player reads the menu, presses the key it names, and gets the adjacent\naction. \"Hero (I)\" opens the Inventory, because ",{"type":207,"tag":223,"props":486,"children":487},{},[488],{"type":212,"value":360},{"type":212,"value":490}," is the Inventory key, and\nthe Inventory label reads ",{"type":207,"tag":223,"props":492,"children":493},{},[494],{"type":212,"value":380},{"type":212,"value":247},{"type":207,"tag":296,"props":497,"children":499},{"id":498},"the-measurement-that-isolates-the-defect",[500],{"type":212,"value":501},"The measurement that isolates the defect",{"type":207,"tag":208,"props":503,"children":504},{},[505],{"type":212,"value":506},"One row of the Controls panel, with two keys bound to the same action:",{"type":207,"tag":308,"props":508,"children":509},{},[510,530],{"type":207,"tag":312,"props":511,"children":512},{},[513],{"type":207,"tag":316,"props":514,"children":515},{},[516,520,525],{"type":207,"tag":320,"props":517,"children":518},{},[519],{"type":212,"value":324},{"type":207,"tag":320,"props":521,"children":522},{},[523],{"type":212,"value":524},"Bound key",{"type":207,"tag":320,"props":526,"children":527},{},[528],{"type":212,"value":529},"Rendered",{"type":207,"tag":336,"props":531,"children":532},{},[533,551],{"type":207,"tag":316,"props":534,"children":535},{},[536,540,544],{"type":207,"tag":343,"props":537,"children":538},{},[539],{"type":212,"value":466},{"type":207,"tag":343,"props":541,"children":542},{},[543],{"type":212,"value":257},{"type":207,"tag":343,"props":545,"children":546},{},[547],{"type":207,"tag":223,"props":548,"children":549},{},[550],{"type":212,"value":257},{"type":207,"tag":316,"props":552,"children":553},{},[554,558,562],{"type":207,"tag":343,"props":555,"children":556},{},[557],{"type":212,"value":466},{"type":207,"tag":343,"props":559,"children":560},{},[561],{"type":212,"value":471},{"type":207,"tag":343,"props":563,"children":564},{},[565],{"type":207,"tag":223,"props":566,"children":567},{},[568],{"type":212,"value":479},{"type":207,"tag":208,"props":570,"children":571},{},[572],{"type":212,"value":573},"Same action, same binding record, same panel, same draw — and one of the two\nlabels is correct. That rules out the binding data, the stored configuration,\nthe keyboard layout, and any web-vs-Windows binding difference, because none\nof those can differ between two keys inside one record.",{"type":207,"tag":208,"props":575,"children":576},{},[577],{"type":212,"value":578},"The defect sits after the binding read, in the render step, and only for keys\nthat render as a character.",{"type":207,"tag":296,"props":580,"children":582},{"id":581},"scope",[583],{"type":212,"value":584},"Scope",{"type":207,"tag":586,"props":587,"children":588},"ul",{},[589,595,600,605],{"type":207,"tag":590,"props":591,"children":592},"li",{},[593],{"type":212,"value":594},"Letters and digits are both affected, by the same one position.",{"type":207,"tag":590,"props":596,"children":597},{},[598],{"type":212,"value":599},"Named keys are not affected. Those names come from the localized text, so a\nnumber cannot produce them.",{"type":207,"tag":590,"props":601,"children":602},{},[603],{"type":212,"value":604},"The defect is independent of the keyboard layout. We reproduced it on US\nQWERTY and on German QWERTZ, identically.",{"type":207,"tag":590,"props":606,"children":607},{},[608],{"type":212,"value":609},"The defect is independent of the host. Our host forwards key events\nunchanged, and it does not participate in the label draw.",{"type":207,"tag":296,"props":611,"children":613},{"id":612},"the-key-descriptor-table",[614],{"type":212,"value":615},"The key descriptor table",{"type":207,"tag":208,"props":617,"children":618},{},[619,621,626],{"type":212,"value":620},"The table sits at ",{"type":207,"tag":223,"props":622,"children":623},{},[624],{"type":212,"value":625},"0x1456c0",{"type":212,"value":627}," in the data segment. The records are 20 bytes:",{"type":207,"tag":629,"props":630,"children":634},"pre",{"language":631,"class":632,"tabindex":633},"c","shiki dark:dark-plus","0",[635],{"type":207,"tag":223,"props":636,"children":638},{"class":637},"language-c",[639],{"type":212,"value":640},"{ int32 id; char name[16] }\n\nid  0..43   Alt Control Shift CapsLock Escape NumLock ... ArrowUp F1..F12\nid 48..57   0..9   plus a parallel table of shifted names  ) ! @ # $ % ^ & * (\nid 65..90   A..Z   plus a parallel table of lowercase names  a..z",{"type":207,"tag":208,"props":642,"children":643},{},[644,646,651,653,658,659,664,665,670,672,677],{"type":212,"value":645},"The names are DOM ",{"type":207,"tag":223,"props":647,"children":648},{},[649],{"type":212,"value":650},"KeyboardEvent.key",{"type":212,"value":652}," values — ",{"type":207,"tag":223,"props":654,"children":655},{},[656],{"type":212,"value":657},"ArrowUp",{"type":212,"value":266},{"type":207,"tag":223,"props":660,"children":661},{},[662],{"type":212,"value":663},"PageDown",{"type":212,"value":259},{"type":207,"tag":223,"props":666,"children":667},{},[668],{"type":212,"value":669},"HangulMode",{"type":212,"value":671},", with ",{"type":207,"tag":223,"props":673,"children":674},{},[675],{"type":212,"value":676},"Unidentified",{"type":212,"value":678}," as the fallback. This is the table that\nturns a browser key event into an internal id.",{"type":207,"tag":208,"props":680,"children":681},{},[682],{"type":212,"value":683},"The contents and the order of this table are correct. The defect is not in\nthis data.",{"type":207,"tag":296,"props":685,"children":687},{"id":686},"what-we-could-not-determine",[688],{"type":212,"value":689},"What we could not determine",{"type":207,"tag":208,"props":691,"children":692},{},[693],{"type":212,"value":694},"We did not locate the function that renders the label. Two readings of the\ntable stay consistent with every observation above, and they need different\ncorrections, so we state both.",{"type":207,"tag":696,"props":697,"children":699},"info",{"title":698},"Reading 1 — the ids are ASCII+1 and the label casts the id",[700,702,707,709,714,716,721,722,727,728,733],{"type":212,"value":701},"Frame the records from ",{"type":207,"tag":223,"props":703,"children":704},{},[705],{"type":212,"value":706},"0x1456c4",{"type":212,"value":708},", with the name first and the id at ",{"type":207,"tag":223,"props":710,"children":711},{},[712],{"type":212,"value":713},"+16",{"type":212,"value":715},".\nThe printable ids are then one above ASCII: ",{"type":207,"tag":223,"props":717,"children":718},{},[719],{"type":212,"value":720},"A = 66",{"type":212,"value":266},{"type":207,"tag":223,"props":723,"children":724},{},[725],{"type":212,"value":726},"H = 73",{"type":212,"value":266},{"type":207,"tag":223,"props":729,"children":730},{},[731],{"type":212,"value":732},"0 = 49",{"type":212,"value":734},". A\ncast to a character gives the observed labels exactly.",{"type":207,"tag":696,"props":736,"children":738},{"title":737},"Reading 2 — the ids are ASCII and the render indexes one record too far",[739,740,744,746,751],{"type":212,"value":701},{"type":207,"tag":223,"props":741,"children":742},{},[743],{"type":212,"value":625},{"type":212,"value":745},", with the id first. The ids are then exactly\nASCII. A read of ",{"type":207,"tag":223,"props":747,"children":748},{},[749],{"type":212,"value":750},"name",{"type":212,"value":752}," from the following record gives the observed labels\nexactly.",{"type":207,"tag":208,"props":754,"children":755},{},[756,758,762],{"type":212,"value":757},"Both readings explain every case in this report, including why ",{"type":207,"tag":223,"props":759,"children":760},{},[761],{"type":212,"value":257},{"type":212,"value":763},"\nstays correct. With symbols and source this question is immediate; from a\nstripped module it isn't.",{"type":207,"tag":208,"props":765,"children":766},{},[767,769,774,776,781,783,787,788,793,794,798,799,804,805,809],{"type":212,"value":768},"We did establish that ",{"type":207,"tag":215,"props":770,"children":771},{},[772],{"type":212,"value":773},"function #9718",{"type":212,"value":775}," converts a key id to a character with\nno offset: ",{"type":207,"tag":223,"props":777,"children":778},{},[779],{"type":212,"value":780},"75",{"type":212,"value":782}," gives ",{"type":207,"tag":223,"props":784,"children":785},{},[786],{"type":212,"value":227},{"type":212,"value":266},{"type":207,"tag":223,"props":789,"children":790},{},[791],{"type":212,"value":792},"76",{"type":212,"value":782},{"type":207,"tag":223,"props":795,"children":796},{},[797],{"type":212,"value":234},{"type":212,"value":266},{"type":207,"tag":223,"props":800,"children":801},{},[802],{"type":212,"value":803},"48",{"type":212,"value":782},{"type":207,"tag":223,"props":806,"children":807},{},[808],{"type":212,"value":633},{"type":212,"value":810},". Many functions in\nthe module do that identical conversion as a generic one-character string\nhelper, so the conversion is not where the extra one enters.",{"type":207,"tag":296,"props":812,"children":814},{"id":813},"expected-behaviour",[815],{"type":212,"value":816},"Expected behaviour",{"type":207,"tag":208,"props":818,"children":819},{},[820],{"type":212,"value":821},"The Controls panel and the in-game menus name the key that actually triggers\nthe action — for printable keys, the way it already works for named keys.",{"type":207,"tag":296,"props":823,"children":825},{"id":824},"acceptance-criteria",[826],{"type":212,"value":827},"Acceptance criteria",{"type":207,"tag":586,"props":829,"children":830},{},[831,848,864,880,885,890],{"type":207,"tag":590,"props":832,"children":833},{},[834,836,840,842,846],{"type":212,"value":835},"\"Panel: Open Hero\" shows ",{"type":207,"tag":223,"props":837,"children":838},{},[839],{"type":212,"value":352},{"type":212,"value":841},", and ",{"type":207,"tag":223,"props":843,"children":844},{},[845],{"type":212,"value":352},{"type":212,"value":847}," opens the Hero panel.",{"type":207,"tag":590,"props":849,"children":850},{},[851,853,857,858,862],{"type":212,"value":852},"\"Action: Use Skill 1\" shows ",{"type":207,"tag":223,"props":854,"children":855},{},[856],{"type":212,"value":7},{"type":212,"value":841},{"type":207,"tag":223,"props":859,"children":860},{},[861],{"type":212,"value":7},{"type":212,"value":863}," uses skill 1.",{"type":207,"tag":590,"props":865,"children":866},{},[867,869,873,875,879],{"type":212,"value":868},"\"Movement: Move Forward\" shows ",{"type":207,"tag":223,"props":870,"children":871},{},[872],{"type":212,"value":257},{"type":212,"value":874}," and ",{"type":207,"tag":223,"props":876,"children":877},{},[878],{"type":212,"value":471},{"type":212,"value":247},{"type":207,"tag":590,"props":881,"children":882},{},[883],{"type":212,"value":884},"The result is the same on US QWERTY and on German QWERTZ.",{"type":207,"tag":590,"props":886,"children":887},{},[888],{"type":212,"value":889},"A rebind to any printable key shows that key.",{"type":207,"tag":590,"props":891,"children":892},{},[893],{"type":212,"value":894},"Named keys keep their current correct labels.",{"type":207,"tag":296,"props":896,"children":898},{"id":897},"how-to-reproduce",[899],{"type":212,"value":900},"How to reproduce",{"type":207,"tag":902,"props":903,"children":905},"steps",{"mode":904},"numbered",[906,913,918,924,945,951,962,968,978,984],{"type":207,"tag":907,"props":908,"children":910},"h3",{"id":909},"how-to-reproduce-open-the-panel",[911],{"type":212,"value":912},"Open the panel",{"type":207,"tag":208,"props":914,"children":915},{},[916],{"type":212,"value":917},"Log in and open Options → Control.",{"type":207,"tag":907,"props":919,"children":921},{"id":920},"how-to-reproduce-read-a-row",[922],{"type":212,"value":923},"Read a row",{"type":207,"tag":208,"props":925,"children":926},{},[927,929,933,935,939,940,944],{"type":212,"value":928},"Select ",{"type":207,"tag":215,"props":930,"children":931},{},[932],{"type":212,"value":466},{"type":212,"value":934},". It shows ",{"type":207,"tag":223,"props":936,"children":937},{},[938],{"type":212,"value":257},{"type":212,"value":874},{"type":207,"tag":223,"props":941,"children":942},{},[943],{"type":212,"value":479},{"type":212,"value":247},{"type":207,"tag":907,"props":946,"children":948},{"id":947},"how-to-reproduce-press-the-labelled-key",[949],{"type":212,"value":950},"Press the labelled key",{"type":207,"tag":208,"props":952,"children":953},{},[954,956,960],{"type":212,"value":955},"Press ",{"type":207,"tag":223,"props":957,"children":958},{},[959],{"type":212,"value":479},{"type":212,"value":961}," in the game. The character does not move.",{"type":207,"tag":907,"props":963,"children":965},{"id":964},"how-to-reproduce-press-the-real-key",[966],{"type":212,"value":967},"Press the real key",{"type":207,"tag":208,"props":969,"children":970},{},[971,972,976],{"type":212,"value":955},{"type":207,"tag":223,"props":973,"children":974},{},[975],{"type":212,"value":471},{"type":212,"value":977},". The character moves forward.",{"type":207,"tag":907,"props":979,"children":981},{"id":980},"how-to-reproduce-check-a-digit",[982],{"type":212,"value":983},"Check a digit",{"type":207,"tag":208,"props":985,"children":986},{},[987,988,992,993,997,999,1003],{"type":212,"value":928},{"type":207,"tag":215,"props":989,"children":990},{},[991],{"type":212,"value":447},{"type":212,"value":934},{"type":207,"tag":223,"props":994,"children":995},{},[996],{"type":212,"value":56},{"type":212,"value":998},". Skill 1 fires on ",{"type":207,"tag":223,"props":1000,"children":1001},{},[1002],{"type":212,"value":7},{"type":212,"value":247},{"type":207,"tag":208,"props":1005,"children":1006},{},[1007],{"type":212,"value":1008},"No configuration change is needed. The defect is present with default\nbindings.",{"type":207,"tag":296,"props":1010,"children":1012},{"id":1011},"method-and-its-limit",[1013],{"type":212,"value":1014},"Method, and its limit",{"type":207,"tag":208,"props":1016,"children":1017},{},[1018],{"type":212,"value":1019},"For the file-system reports we called the functions and measured the results.\nWe couldn't do that here: the label render depends on an initialised UI and\ntext subsystem, so there's no way to call it from a cold instance.",{"type":207,"tag":208,"props":1021,"children":1022},{},[1023],{"type":212,"value":1024},"What we observe directly: the rendered labels, the keys that work, and the\ncontents of the descriptor table. What we infer: which of the two readings is\nthe real one.",{"type":207,"tag":296,"props":1026,"children":1028},{"id":1027},"our-workaround-today",[1029],{"type":212,"value":1030},"Our workaround today",{"type":207,"tag":208,"props":1032,"children":1033},{},[1034],{"type":212,"value":1035},"None. A correction would need a second permanent transform, re-derived for\nevery client build — too high a price for a wrong letter on a label. We report\nthe defect and wait.",{"title":1037,"searchDepth":1038,"depth":1038,"links":1039},"",4,[1040,1042,1043,1044,1045,1046,1047,1048,1056,1057],{"id":298,"depth":1041,"text":301},2,{"id":498,"depth":1041,"text":501},{"id":581,"depth":1041,"text":584},{"id":612,"depth":1041,"text":615},{"id":686,"depth":1041,"text":689},{"id":813,"depth":1041,"text":816},{"id":824,"depth":1041,"text":827},{"id":897,"depth":1041,"text":900,"children":1049},[1050,1052,1053,1054,1055],{"id":909,"depth":1051,"text":912},3,{"id":920,"depth":1051,"text":923},{"id":947,"depth":1051,"text":950},{"id":964,"depth":1051,"text":967},{"id":980,"depth":1051,"text":983},{"id":1011,"depth":1041,"text":1014},{"id":1027,"depth":1041,"text":1030},"markdown","docs",{"source":1061,"path":1062,"stem":1063,"dir":1064,"extension":1065},"content","en\u002F1.docs\u002F3.upstream\u002F4.input\u002F2.key-labels.md","en\u002F1.docs\u002F3.upstream\u002F4.input\u002F2.key-labels","input","md",{"requestedPath":140,"resolvedPath":1067,"alternates":1068},"\u002Fdocs\u002Fupstream\u002Finput\u002Fkey-labels",[1069,1071],{"locale":77,"path":1067,"source":1070},"variant",{"locale":8,"path":140,"source":1072,"resolvedLocale":77},"fallback",{"requested":1074,"resolved":1075,"usedFallback":80},{"locale":8},{"locale":77},{"previous":1077,"next":1077},null,{"left":1079,"top":1079,"width":1080,"height":1080,"rotate":1079,"vFlip":6,"hFlip":6,"body":1081},0,24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\"\u002F>\u003Cpath d=\"M14 2v5a1 1 0 0 0 1 1h5\"\u002F>\u003C\u002Fg>",{"left":1079,"top":1079,"width":1080,"height":1080,"rotate":1079,"vFlip":6,"hFlip":6,"body":1083},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786362944981]