M3: japanska skyltar – pixelfont, ordbok, kunskap, delvis översättning, hjälp
All checks were successful
release / build-release (push) Successful in 1m42s

- resources/text/fonts: PixelMplus 10/12 px (M+ FONT LICENSE) + licens;
  all text ritas via text/v2 på heltalspositioner, debugfonten är borta
- internal/lang: ordbok (60 ord, validerad), tokenisering med längsta
  matchning, Knowledge (ord + kana, nivå 0–5, hintar), Render (kända ord
  markerade/översatta, okända kvar, kana som romaji), EnglishShare/
  ShowEnglish per svårighet (deterministiskt per bana+position),
  HelpSeconds; datatest kräver att all japanska i banorna finns i ordboken
- sim.Run: AskHelp (H) med väntetid efter nivå, avbryts om man går,
  avslöjar skylten och lär första okända ordet; Knowledge delas mellan banor
- game: skylt- och avgångstavlor renderade genom kunskapen med färgkodning,
  engelsk rad på lätta banor, hjälp-förlopp, "Nytt ord"-notis, HUD visar
  resmålet på japanska från nivå 1 och japanska-nivå; meny med svårighet;
  pixelbaserad radbrytning av färgade textsegment; -know-flagga
- tools/shots: tre skyltbilder (skylt, hjälp, nytt ord) med förkunskap
- docs/README/wiki uppdaterade

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 20:14:36 +02:00
parent 0e10cbf123
commit b67493fddb
40 changed files with 1846 additions and 174 deletions

View File

@@ -1,23 +1,423 @@
{
"_comment": "Skyltord. Nyckel = japanska. kana = läsning i hiragana/katakana, romaji = latinsk läsning. tier = hur tidigt ordet brukar läras (1 = allra vanligast).",
"出口": { "kana": "でぐち", "romaji": "deguchi", "en": "Exit", "sv": "Utgång", "tier": 1 },
"入口": { "kana": "いりぐち", "romaji": "iriguchi", "en": "Entrance", "sv": "Ingång", "tier": 1 },
"改札": { "kana": "かいさつ", "romaji": "kaisatsu", "en": "Ticket gate", "sv": "Spärr", "tier": 1 },
"のりば": { "kana": "のりば", "romaji": "noriba", "en": "Platform", "sv": "Perrong", "tier": 1 },
"番線": { "kana": "ばんせん", "romaji": "bansen", "en": "Track no.", "sv": "Spår nr", "tier": 1 },
"切符": { "kana": "きっぷ", "romaji": "kippu", "en": "Ticket", "sv": "Biljett", "tier": 1 },
"トイレ": { "kana": "トイレ", "romaji": "toire", "en": "Toilet", "sv": "Toalett", "tier": 1 },
"方面": { "kana": "ほうめん", "romaji": "hōmen", "en": "Direction / for", "sv": "Riktning / mot", "tier": 2 },
"乗換": { "kana": "のりかえ", "romaji": "norikae", "en": "Transfer", "sv": "Byte", "tier": 2 },
"快速": { "kana": "かいそく", "romaji": "kaisoku", "en": "Rapid", "sv": "Snabbtåg", "tier": 2 },
"各駅停車": { "kana": "かくえきていしゃ", "romaji": "kakueki teisha", "en": "Local (all stops)", "sv": "Lokaltåg (alla stopp)", "tier": 3 },
"特急": { "kana": "とっきゅう", "romaji": "tokkyū", "en": "Limited express", "sv": "Expresståg", "tier": 3 },
"空港": { "kana": "くうこう", "romaji": "kūkō", "en": "Airport", "sv": "Flygplats", "tier": 2 },
"東口": { "kana": "ひがしぐち", "romaji": "higashiguchi", "en": "East exit", "sv": "Östra utgången", "tier": 2 },
"西口": { "kana": "にしぐち", "romaji": "nishiguchi", "en": "West exit", "sv": "Västra utgången", "tier": 2 },
"南口": { "kana": "みなみぐち", "romaji": "minamiguchi", "en": "South exit", "sv": "Södra utgången", "tier": 2 },
"北口": { "kana": "きたぐち", "romaji": "kitaguchi", "en": "North exit", "sv": "Norra utgången", "tier": 2 },
"終点": { "kana": "しゅうてん", "romaji": "shūten", "en": "Terminus", "sv": "Slutstation", "tier": 3 },
"自動券売機": { "kana": "じどうけんばいき", "romaji": "jidō kenbaiki", "en": "Ticket machine", "sv": "Biljettautomat", "tier": 3 },
"チャージ": { "kana": "チャージ", "romaji": "chāji", "en": "Top up (IC card)", "sv": "Fyll på (kort)", "tier": 2 }
"_comment": "Skyltord. Nyckel = japanska. kana = läsning, romaji = latinsk läsning, sv/en = översättning, tier = hur tidigt ordet brukar läras (1 = allra vanligast). Alla japanska ord i banorna måste finnas här (testas).",
"出口": {
"kana": "でぐち",
"romaji": "deguchi",
"en": "exit",
"sv": "utgång",
"tier": 1
},
"入口": {
"kana": "いりぐち",
"romaji": "iriguchi",
"en": "entrance",
"sv": "ingång",
"tier": 1
},
"改札": {
"kana": "かいさつ",
"romaji": "kaisatsu",
"en": "ticket gate",
"sv": "spärr",
"tier": 1
},
"のりば": {
"kana": "のりば",
"romaji": "noriba",
"en": "platform",
"sv": "perrong",
"tier": 1
},
"番線": {
"kana": "ばんせん",
"romaji": "bansen",
"en": "track",
"sv": "spår",
"tier": 1
},
"切符": {
"kana": "きっぷ",
"romaji": "kippu",
"en": "ticket",
"sv": "biljett",
"tier": 1
},
"トイレ": {
"kana": "トイレ",
"romaji": "toire",
"en": "Toilet",
"sv": "Toalett",
"tier": 1
},
"方面": {
"kana": "ほうめん",
"romaji": "hōmen",
"en": "for",
"sv": "mot",
"tier": 2
},
"乗換": {
"kana": "のりかえ",
"romaji": "norikae",
"en": "transfer",
"sv": "byte",
"tier": 2
},
"快速": {
"kana": "かいそく",
"romaji": "kaisoku",
"en": "Rapid",
"sv": "Snabbtåg",
"tier": 2
},
"各駅停車": {
"kana": "かくえきていしゃ",
"romaji": "kakueki teisha",
"en": "Local (all stops)",
"sv": "Lokaltåg (alla stopp)",
"tier": 3
},
"特急": {
"kana": "とっきゅう",
"romaji": "tokkyū",
"en": "Limited express",
"sv": "Expresståg",
"tier": 3
},
"空港": {
"kana": "くうこう",
"romaji": "kūkō",
"en": "Airport",
"sv": "Flygplats",
"tier": 2
},
"東口": {
"kana": "ひがしぐち",
"romaji": "higashiguchi",
"en": "East exit",
"sv": "Östra utgången",
"tier": 2
},
"西口": {
"kana": "にしぐち",
"romaji": "nishiguchi",
"en": "West exit",
"sv": "Västra utgången",
"tier": 2
},
"南口": {
"kana": "みなみぐち",
"romaji": "minamiguchi",
"en": "South exit",
"sv": "Södra utgången",
"tier": 2
},
"北口": {
"kana": "きたぐち",
"romaji": "kitaguchi",
"en": "North exit",
"sv": "Norra utgången",
"tier": 2
},
"終点": {
"kana": "しゅうてん",
"romaji": "shūten",
"en": "Terminus",
"sv": "Slutstation",
"tier": 3
},
"自動券売機": {
"kana": "じどうけんばいき",
"romaji": "jidō kenbaiki",
"en": "Ticket machine",
"sv": "Biljettautomat",
"tier": 3
},
"チャージ": {
"kana": "チャージ",
"romaji": "chāji",
"en": "Top up (IC card)",
"sv": "Fyll på (kort)",
"tier": 2
},
"新宿": {
"kana": "しんじゅく",
"romaji": "Shinjuku",
"en": "Shinjuku",
"sv": "Shinjuku",
"tier": 2
},
"渋谷": {
"kana": "しぶや",
"romaji": "Shibuya",
"en": "Shibuya",
"sv": "Shibuya",
"tier": 2
},
"東京": {
"kana": "とうきょう",
"romaji": "Tōkyō",
"en": "Tokyo",
"sv": "Tokyo",
"tier": 1
},
"上野": {
"kana": "うえの",
"romaji": "Ueno",
"en": "Ueno",
"sv": "Ueno",
"tier": 2
},
"京成上野": {
"kana": "けいせいうえの",
"romaji": "Keisei-Ueno",
"en": "Keisei-Ueno",
"sv": "Keisei-Ueno",
"tier": 3
},
"京成線": {
"kana": "けいせいせん",
"romaji": "Keisei-sen",
"en": "Keisei Line",
"sv": "Keisei-linjen",
"tier": 3
},
"山手線": {
"kana": "やまのてせん",
"romaji": "Yamanote-sen",
"en": "Yamanote Line",
"sv": "Yamanote-linjen",
"tier": 2
},
"中央線": {
"kana": "ちゅうおうせん",
"romaji": "Chūō-sen",
"en": "Chuo Line",
"sv": "Chuo-linjen",
"tier": 2
},
"成田エクスプレス": {
"kana": "なりたエクスプレス",
"romaji": "Narita Ekusupuresu",
"en": "Narita Express",
"sv": "Narita Express",
"tier": 3
},
"成田": {
"kana": "なりた",
"romaji": "Narita",
"en": "Narita",
"sv": "Narita",
"tier": 3
},
"駅": {
"kana": "えき",
"romaji": "eki",
"en": "station",
"sv": "station",
"tier": 1
},
"線": {
"kana": "せん",
"romaji": "sen",
"en": "line",
"sv": "linje",
"tier": 1
},
"南東": {
"kana": "なんとう",
"romaji": "nantō",
"en": "south-east",
"sv": "sydöst",
"tier": 3
},
"南西": {
"kana": "なんせい",
"romaji": "nansei",
"en": "south-west",
"sv": "sydväst",
"tier": 3
},
"南東口": {
"kana": "なんとうぐち",
"romaji": "nantōguchi",
"en": "South-east exit",
"sv": "Sydöstra utgången",
"tier": 3
},
"電車": {
"kana": "でんしゃ",
"romaji": "densha",
"en": "train",
"sv": "tåg",
"tier": 1
},
"バス": {
"kana": "バス",
"romaji": "basu",
"en": "bus",
"sv": "buss",
"tier": 1
},
"案内": {
"kana": "あんない",
"romaji": "annai",
"en": "Information",
"sv": "Information",
"tier": 2
},
"出発": {
"kana": "しゅっぱつ",
"romaji": "shuppatsu",
"en": "Departure",
"sv": "Avgång",
"tier": 2
},
"到着": {
"kana": "とうちゃく",
"romaji": "tōchaku",
"en": "Arrival",
"sv": "Ankomst",
"tier": 2
},
"注意": {
"kana": "ちゅうい",
"romaji": "chūi",
"en": "Caution",
"sv": "Varning",
"tier": 2
},
"禁煙": {
"kana": "きんえん",
"romaji": "kin'en",
"en": "No smoking",
"sv": "Rökning förbjuden",
"tier": 3
},
"お手洗い": {
"kana": "おてあらい",
"romaji": "otearai",
"en": "Restroom",
"sv": "Toalett",
"tier": 2
},
"階段": {
"kana": "かいだん",
"romaji": "kaidan",
"en": "Stairs",
"sv": "Trappa",
"tier": 2
},
"エレベーター": {
"kana": "エレベーター",
"romaji": "erebētā",
"en": "Elevator",
"sv": "Hiss",
"tier": 2
},
"エスカレーター": {
"kana": "エスカレーター",
"romaji": "esukarētā",
"en": "Escalator",
"sv": "Rulltrappa",
"tier": 2
},
"コンビニ": {
"kana": "コンビニ",
"romaji": "konbini",
"en": "Convenience store",
"sv": "Närbutik",
"tier": 1
},
"売店": {
"kana": "ばいてん",
"romaji": "baiten",
"en": "Kiosk",
"sv": "Kiosk",
"tier": 3
},
"飲み物": {
"kana": "のみもの",
"romaji": "nomimono",
"en": "Drinks",
"sv": "Dryck",
"tier": 2
},
"食べ物": {
"kana": "たべもの",
"romaji": "tabemono",
"en": "Food",
"sv": "Mat",
"tier": 2
},
"満員": {
"kana": "まんいん",
"romaji": "man'in",
"en": "Full (crowded)",
"sv": "Fullt",
"tier": 3
},
"遅延": {
"kana": "ちえん",
"romaji": "chien",
"en": "Delay",
"sv": "Försening",
"tier": 3
},
"普通": {
"kana": "ふつう",
"romaji": "futsū",
"en": "Local",
"sv": "Lokaltåg",
"tier": 2
},
"急行": {
"kana": "きゅうこう",
"romaji": "kyūkō",
"en": "Express",
"sv": "Expresståg",
"tier": 2
},
"新幹線": {
"kana": "しんかんせん",
"romaji": "shinkansen",
"en": "Shinkansen",
"sv": "Shinkansen (snabbtåg)",
"tier": 2
},
"地下鉄": {
"kana": "ちかてつ",
"romaji": "chikatetsu",
"en": "Subway",
"sv": "Tunnelbana",
"tier": 2
},
"次": {
"kana": "つぎ",
"romaji": "tsugi",
"en": "Next",
"sv": "Nästa",
"tier": 1
},
"分": {
"kana": "ふん",
"romaji": "fun",
"en": "minute(s)",
"sv": "minut(er)",
"tier": 1
},
"円": {
"kana": "えん",
"romaji": "en",
"en": "yen",
"sv": "yen",
"tier": 1
},
"京成本線": {
"kana": "けいせいほんせん",
"romaji": "Keisei Honsen",
"en": "Keisei Main Line",
"sv": "Keisei huvudlinje",
"tier": 3
}
}