[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81037":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":11,"openIssues":12,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":13,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":14,"rankGlobal":9,"rankLanguage":9,"license":15,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":18,"hasPages":16,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":13,"starSnapshotCount":13,"syncStatus":23,"lastSyncTime":24,"discoverSource":25},81037,"deus-ex-i18n-toolkit","fmwizard\u002Fdeus-ex-i18n-toolkit","fmwizard","Universal localization toolkit for Deus Ex 1 (GOTY \u002F 1.112fm) ",null,"Python",28,1,0,40.9,"MIT License",false,"main",true,[],"2026-06-12 04:01:31","# Deus Ex i18n Toolkit\r\n\r\nAn open-source toolset for localizing **Deus Ex 1** (GOTY \u002F Steam 1.112fm) into other languages. The toolkit takes care of binary-level work — rewriting the engine's text packages, generating font atlases for your script, and patching a couple of DLLs — so a localization team can focus on the parts that actually require human judgment: translating the script and choosing fonts.\r\n\r\nIt does not ship any translations. Bring your own translated strings as JSON dictionaries; the build pipeline encodes them into the engine's binary formats and produces drop-in replacements for the game's `System\u002F` and `Textures\u002F` folders.\r\n\r\n## Contents\r\n\r\n1. [Quickstart](#1-quickstart)\r\n2. [Translation workflow](#2-translation-workflow)\r\n3. [Font workflow](#3-font-workflow)\r\n4. [Binary patches](#4-binary-patches)\r\n5. [Build and deploy](#5-build-and-deploy)\r\n6. [Pre-processing for Chinese, Japanese, Korean, and similar languages](#6-pre-processing-for-chinese-japanese-korean-and-similar-languages)\r\n\r\nDeeper reverse-engineering notes for anyone forking the toolkit live under `docs\u002F`.\r\n\r\n---\r\n\r\n## 1. Quickstart\r\n\r\nSix steps from a fresh clone to a built patch. Each step is a small file you fill in, except for step 6, which runs the build.\r\n\r\n### Layout\r\n\r\n`cd` into the cloned repo and run every command from there. The clone doubles as your workspace — stock files, configs, translations, and build output all live alongside `tools\u002F` and `prebuilt\u002F`. After Step 5:\r\n\r\n```\r\ndx1-i18n-toolkit\u002F\r\n├── tools\u002F                  toolkit (don't edit)\r\n├── prebuilt\u002F               toolkit drop-in DLLs and DeusEx.u (don't edit)\r\n├── *.toml.example          toolkit templates (don't edit)\r\n├── stock\u002F                  Step 1 — copied from game install\r\n├── fonts.toml              Step 2 — from fonts.toml.example, edited\r\n├── charset.toml            Step 3 — same\r\n├── patch_config.toml       Step 4 — same\r\n├── translations\u002F           Step 5\r\n└── patch\u002F                  Step 6 build output\r\n```\r\n\r\n### Step 1 — copy the stock game files\r\n\r\nThe build needs the original (untouched) game binaries to read from. Create a `stock\u002F` subdirectory in the cloned repo and copy these files into it from your game's `System\u002F`:\r\n\r\n```\r\nstock\u002F\r\n├── DeusExUI.u\r\n├── DeusExConText.u\r\n├── DeusExText.u\r\n├── DXFonts.utx\r\n├── Extension.u\r\n├── Extension.dll\r\n└── DeusExText.dll\r\n```\r\n\r\nOther `System\u002F` files aren't read by the toolkit — copying them in too does no harm if that's easier than picking. Keep the originals pristine in your game install; the toolkit never writes back into `stock\u002F`.\r\n\r\n### Step 2 — write `fonts.toml`\r\n\r\nSave `fonts.toml.example` as `fonts.toml` (drop the `.example` suffix) and edit. One line per UFont you want to replace, grouped by package:\r\n\r\n```toml\r\n[packages.DeusExUI]\r\nFontMenuSmall   = { ttf = \"fonts\u002FMyFont.ttf\",  size_px = 10, vsize = 10 }\r\nFontMenuTitle   = { ttf = \"fonts\u002FMyFont.ttf\",  size_px = 12, vsize = 12 }\r\n# ... 19 more in DeusExUI\r\n\r\n[packages.DXFonts]\r\nHUDMessageTrueType = { ttf = \"fonts\u002FMyFont.ttf\", size_px = 21, vsize = 21 }\r\nMainMenuTrueType   = { ttf = \"fonts\u002FMyFont.ttf\", size_px = 26, vsize = 26 }\r\n\r\n[packages.Extension]\r\nTechMedium = { ttf = \"fonts\u002FMyFont.ttf\", size_px = 10, vsize = 10 }\r\n# ... 5 more in Extension\r\n```\r\n\r\nUFonts you don't list keep their stock English glyphs. Schema details and the full list of 31 UFonts live in §3 and `docs\u002Ffont-pipeline-internals.md`.\r\n\r\n### Step 3 — write `charset.toml`\r\n\r\nSave `charset.toml.example` as `charset.toml` and list which Unicode codepoints your atlas should contain. Multiple sources combine:\r\n\r\n```toml\r\ncodecs = [\"gb2312\"]                    # any region codec (gb2312, shift_jis, euc-kr, ...)\r\nranges = [[0x0020, 0x007E]]            # printable ASCII\r\ncodepoints = [0x2026, 0x2014, 0x00B7]  # individual codepoints\r\nchars = \"—…·「」\"                      # literal characters\r\n```\r\n\r\nCodepoints must be in the BMP (`U+0000`–`U+FFFF`) — the engine's atlas can't address higher.\r\n\r\n### Step 4 — write `patch_config.toml`\r\n\r\nSave `patch_config.toml.example` as `patch_config.toml` and adjust paths if needed. The defaults match the Layout above (everything alongside `tools\u002F`):\r\n\r\n```toml\r\n[input]\r\nstock_dir = \"stock\"\r\n\r\n[output]\r\nroot = \"patch\"\r\n\r\n[stages.int]\r\nenable = true\r\nsource = \"translations\u002Fint\"\r\n\r\n[stages.contex]\r\nenable = true\r\ntranslations = \"translations\u002Fcontex.json\"\r\n\r\n[stages.deusextext]\r\nenable = true\r\ntranslations = \"translations\u002Fdeusextext.json\"\r\n\r\n[stages.font]\r\nenable = true\r\nfonts_toml = \"fonts.toml\"\r\ncharset = \"charset.toml\"\r\n\r\n[stages.dll]\r\nenable = false        # see \"Binary patches\" below\r\n```\r\n\r\n### Step 5 — prepare your translations\r\n\r\nThree input shapes, one per stage. See §2 for what each contains and how to extract the source strings.\r\n\r\n```\r\ntranslations\u002F\r\n├── int\u002F                    # stage `int` — UTF-8 *.int files\r\n│   ├── 00_Intro.int\r\n│   ├── 01_NYC_UNATCOHQ.int\r\n│   └── ... (one per mission, same names as stock System\u002F*.int)\r\n├── contex.json             # stage `contex` — {\"\u003Cexport_idx>\": \"translated text\", ...}\r\n└── deusextext.json         # stage `deusextext` — {\"\u003Cexport_name>\": \"translated text\", ...}\r\n```\r\n\r\nYou don't have to provide all three at once. Disable any stage you're not ready for in `patch_config.toml` (`enable = false`) and the build will skip it.\r\n\r\n### Step 6 — build\r\n\r\n```bash\r\npython tools\u002Fmake_patch.py all\r\n```\r\n\r\nOutput lands in `patch\u002FSystem\u002F` and `patch\u002FTextures\u002F`, mirroring the layout you copy back into the game install. After editing translations or fonts, re-run; for faster iteration name only the stages you changed (e.g. `python tools\u002Fmake_patch.py contex` if you only updated `contex.json`).\r\n\r\nTo deploy in one command, set `[deploy] target = \"\u002Fpath\u002Fto\u002FDeus Ex\"` in the config and add `--deploy`, or pass `--deploy \u002Fpath\u002Fto\u002FDeus Ex` directly.\r\n\r\n---\r\n\r\n## 2. Translation workflow\r\n\r\nDeus Ex stores text in three different containers. Each has its own extraction tool, but they all feed the same `{key: translated_text}` JSON shape back to the build pipeline.\r\n\r\n| Where | What's in it | Stage |\r\n|---|---|---|\r\n| `*.int` files in `System\u002F` | UI strings — menus, button labels, weapon names, augmentation descriptions | `int` |\r\n| `DeusExConText.u` | NPC dialogue, player reply choices, quest objectives, in-world notes | `contex` |\r\n| `DeusExText.u` | Long-form text — datacubes, books, emails, newspapers | `deusextext` |\r\n\r\n### Extracting source strings\r\n\r\n`*.int` files are plain text already. To translate, copy each one out of `stock\u002F` into your `translations\u002Fint\u002F` directory, save it as UTF-8 with the same filename, and edit the values; the `int` stage transcodes those UTF-8 files into the UTF-16 LE + BOM the engine expects.\r\n\r\n`DeusExConText.u` and `DeusExText.u` are binary UE1 packages. Extract their text with the toolkit's scanners:\r\n\r\n```bash\r\n# Conversation text (ConText)\r\npython tools\u002Fscan_contex.py --pkg stock\u002FDeusExConText.u --out en_contex.json\r\n\r\n# Page text (datacubes, books, ...)\r\npython tools\u002Fscan_deusextext.py --stock stock\u002FDeusExText.u --out en_deusextext.json\r\n```\r\n\r\n`scan_contex` produces a richer schema with conversation context (speaker, addressee, surrounding lines, sibling reply choices) to help the translator disambiguate. `scan_deusextext` produces a flat `{export_name: text}` map — datacubes are self-contained.\r\n\r\n### Building translations back in\r\n\r\nBoth build tools accept a `{key: translated_text}` JSON dict. Keys vary by stage:\r\n\r\n* `contex` keys are export indices as decimal strings (`\"408\"`, `\"3915\"`).\r\n* `deusextext` keys are export names as written (`\"00_Book01\"`, `\"03_NYC_Newspaper\"`) — no `.txt` suffix.\r\n\r\n```bash\r\npython tools\u002Fbuild_contex.py \\\r\n    --stock stock\u002FDeusExConText.u \\\r\n    --translations translations\u002Fcontex.json \\\r\n    --out patch\u002FSystem\u002FDeusExConText.u\r\n\r\npython tools\u002Fimport_deusextext.py \\\r\n    --stock stock\u002FDeusExText.u \\\r\n    --translations translations\u002Fdeusextext.json \\\r\n    --out patch\u002FSystem\u002FDeusExText.u\r\n```\r\n\r\nYou normally don't run these by hand — `make_patch.py` invokes them per stage with paths from `patch_config.toml`. Standalone use is for one-off iteration on a single file.\r\n\r\n### Translation platforms\r\n\r\nThe toolkit ships a reference adapter for [paratranz.cn](https:\u002F\u002Fparatranz.cn) under `tools\u002Fadapters\u002Fparatranz\u002F`. It converts toolkit scan output into paratranz's upload JSON and translated paratranz exports back into the `{key: text}` dicts the build pipeline expects. See `tools\u002Fadapters\u002Fparatranz\u002FREADME.md` for upload\u002Fdownload walkthrough.\r\n\r\nOther platforms (Crowdin, Transifex, Weblate, gettext PO, ...) follow the same pattern: a small `to_*` script that adds platform metadata, and a small `from_*` script that strips it back to a flat dict. PRs welcome.\r\n\r\n---\r\n\r\n## 3. Font workflow\r\n\r\nDeus Ex uses two kinds of font asset:\r\n\r\n* **UFont packages** (`DeusExUI.u`, `DXFonts.utx`, `Extension.u`) — bitmap atlas + glyph rectangle table. Each \"font\" (e.g. `FontMenuSmall`) is a UFont object inside a package. The engine looks glyphs up by codepoint in the atlas at runtime.\r\n* **TrueType handoff** — a few UFonts wrap an external TTF; the engine reads the TTF directly. These are mostly the menu\u002FHUD ones.\r\n\r\nEither way, the toolkit produces a new UFont (with a fresh atlas covering your charset) by rasterizing glyphs from a TTF you supply.\r\n\r\n### `fonts.toml` schema\r\n\r\nPer-package, per-UFont. Inline tables, one entry per UFont you want to replace:\r\n\r\n```toml\r\n[packages.DeusExUI]\r\nFontMenuSmall = {\r\n    ttf       = \"fonts\u002FMyFont.ttf\",\r\n    size_px   = 10,                 # rasterization size\r\n    vsize     = 10,                 # must match the stock UFont's vertical size\r\n    ascii_ttf = \"fonts\u002FLatin.ttf\",  # optional: render wchars \u003C 0x80 from this TTF\r\n                                    #           instead, leaving the main TTF for\r\n                                    #           the rest. Useful when the main\r\n                                    #           font's ASCII advances look too\r\n                                    #           narrow in a fixed-grid cell\r\n    vert_align = \"bottom\",          # optional: anchor glyphs to cell bottom\r\n                                    #           instead of cell top (default)\r\n    weight    = 700,                # optional: pin a Variable Font's wght axis\r\n                                    #           (e.g. 400=Regular, 700=Bold);\r\n                                    #           leave unset to use the design default\r\n}\r\n```\r\n\r\nRequired: `ttf`, `size_px`, `vsize`. Optional: `ascii_ttf`, `vert_align` (`\"top\"` \u002F `\"bottom\"`), `weight`.\r\n\r\n`vsize` is non-negotiable — the engine hardcodes line height per UFont elsewhere, so the rebuilt UFont must report the same vertical size as the stock one. The toolkit checks every entry against a built-in stock-vsize table and refuses to build if they disagree. The full table is in `docs\u002Ffont-pipeline-internals.md`; for a quick reference, copy `fonts.toml.example` and edit the `ttf` paths.\r\n\r\nUFonts not listed are passed through verbatim from the stock package — the original English glyphs remain. There is no \"exclude\" flag; *not listing a UFont is how you skip it*.\r\n\r\n### Three UFonts to skip\r\n\r\nThese three are best left as stock English. The toolkit will refuse to build them anyway (the first because it's not text, the other two because they exceed the atlas size cap):\r\n\r\n| UFont | Package | Reason |\r\n|---|---|---|\r\n| `FontHUDWingDings` | `DeusExUI` | Icon font — `'A'`, `'B'`, etc. render as datavault icons, not letters. CJK-izing it breaks the HUD icons. |\r\n| `FontMenuExtraLarge` | `DeusExUI` | `vsize = 29`, above the 28-pixel atlas tier cap. |\r\n| `FontSpinningDX` | `DeusExUI` | `vsize = 32`, animated rotating font, also above the cap. |\r\n\r\nIf you need to render large headings in your script, consider rebuilding `FontMenuTitle` with a larger `size_px` and accepting that the largest menu text stays in English. (Or fork and bump the atlas tier — see `docs\u002Ffont-pipeline-internals.md`.)\r\n\r\n### Charset\r\n\r\nThe font stage rasterizes every codepoint in your charset into the atlas. Bigger charset → bigger atlas → more VRAM, so list only what you need. Two formats:\r\n\r\n`charset.toml` — combine multiple sources:\r\n\r\n```toml\r\ncodecs = [\"gb2312\"]                    # bulk-include a region codec's coverage\r\nranges = [[0x0020, 0x007E]]            # closed intervals [low, high]\r\ncodepoints = [0x2026, 0x2014]          # individual integers\r\nchars = \"—…·\"                          # literal string\r\n```\r\n\r\n`charset.txt` — alternative for projects that already have a corpus dump:\r\n\r\n```\r\n你好世界\r\nThe quick brown fox …\r\n```\r\n\r\nEvery distinct codepoint in the file goes in (CR\u002FLF excluded; ASCII space included).\r\n\r\nBoth formats are BMP-only (`U+0000`–`U+FFFF`). The loader rejects non-BMP codepoints with a clear error.\r\n\r\n### Build CLI\r\n\r\n`make_patch.py font` runs `build_font_package.py` for each of the three font-bearing packages. To iterate on a single package:\r\n\r\n```bash\r\npython tools\u002Fbuild_font_package.py \\\r\n    --stock stock\u002FDeusExUI.u \\\r\n    --out patch\u002FSystem\u002FDeusExUI.u \\\r\n    --fonts-toml fonts.toml \\\r\n    --package DeusExUI \\\r\n    --charset charset.toml\r\n```\r\n\r\nOr restrict `make_patch.py font` with `[stages.font] packages = [\"DeusExUI\"]` in your config.\r\n\r\nSee `docs\u002Ffont-pipeline-internals.md` for the full 31-UFont reference table, atlas tier ladder, vertical-alignment rationale, and the `weight` axis caveats.\r\n\r\n---\r\n\r\n## 4. Binary patches\r\n\r\nTwo language-neutral DLL patches plus one prebuilt `DeusEx.u` live under `prebuilt\u002F`. Whether you need them depends on your script.\r\n\r\n### Wordwrap DLLs\r\n\r\nSome scripts use ASCII space between words (English, Russian, Vietnamese, ...). The engine wraps long lines on space, which works fine.\r\n\r\nOther scripts write words back-to-back with no inter-word space (Chinese, Japanese, Korean, Thai, Lao, Khmer, Myanmar, ...). The engine doesn't know where it's allowed to break, so it pushes the entire paragraph onto one line and chops off whatever runs past the panel.\r\n\r\nTwo patches fix this:\r\n\r\n| File | What it fixes |\r\n|---|---|\r\n| `Extension.dll` | Word-wrap on terminal screens \u002F datavault panels — the `XComputerWindow` UI |\r\n| `DeusExText.dll` | Datacube and book pages — handles cases where a placeholder like a player name gets split across lines |\r\n\r\nIf your script doesn't use spaces as word separators, enable both. The simplest path is to copy `prebuilt\u002FExtension.dll` and `prebuilt\u002FDeusExText.dll` straight into the game's `System\u002F`. To rebuild from source instead, set `[stages.dll] enable = true` in `patch_config.toml` and run `make_patch.py dll`; the result is byte-for-byte identical to the prebuilt copy.\r\n\r\nIf your script uses spaces, leave both disabled. The patches are a no-op for English-style wrapping.\r\n\r\nSee §6 below for the small one-time text transform that makes these patches work for CJK-style languages.\r\n\r\n### `prebuilt\u002FDeusEx.u` (InfoLink and HUD label sizing)\r\n\r\nIndependent of the wordwrap DLLs. Stock `InfoLink` (the comm popup at the top of the screen) renders at a font size sized for English's 7-pixel ink height. Larger glyphs — including most CJK fonts — turn into a smudge at that size. The prebuilt `DeusEx.u` bumps a handful of widget sizings:\r\n\r\n* `InfoLink` text panel — bigger font, taller box.\r\n* HUD bottom-row labels (health, energy, ammo) — accommodate slightly taller glyphs.\r\n\r\nIf your TTF renders cleanly at stock sizes, skip this file and your `DeusEx.u` stays as the original. Otherwise, copy `prebuilt\u002FDeusEx.u` into the game's `System\u002F`. The toolkit doesn't build this file from source — it's a one-off UC patch, shipped prebuilt.\r\n\r\nSee `docs\u002Fdll-patches-explained.md` for the reverse-engineering writeup.\r\n\r\n---\r\n\r\n## 5. Build and deploy\r\n\r\n`make_patch.py` is a thin orchestrator that calls each per-stage build tool with paths from `patch_config.toml` — picked up from the current working directory by default, or pass `--config PATH` to point at a different file.\r\n\r\n```bash\r\npython tools\u002Fmake_patch.py all                  # all enabled stages\r\npython tools\u002Fmake_patch.py int contex           # only the named stages\r\npython tools\u002Fmake_patch.py all --deploy         # build + deploy to [deploy] target\r\npython tools\u002Fmake_patch.py all --deploy \u002Fgame   # build + deploy to override path\r\n```\r\n\r\nFive stages:\r\n\r\n| Stage | Output | Default |\r\n|---|---|---|\r\n| `int` | UTF-16 LE+BOM `*.int` files in `patch\u002FSystem\u002F` | enabled |\r\n| `contex` | `patch\u002FSystem\u002FDeusExConText.u` | enabled |\r\n| `deusextext` | `patch\u002FSystem\u002FDeusExText.u` | enabled |\r\n| `font` | `patch\u002FSystem\u002FDeusExUI.u`, `patch\u002FSystem\u002FExtension.u`, `patch\u002FTextures\u002FDXFonts.utx` | enabled |\r\n| `dll` | `patch\u002FSystem\u002FExtension.dll`, `patch\u002FSystem\u002FDeusExText.dll` | disabled |\r\n\r\n### `patch_config.toml` shape\r\n\r\n* `[input] stock_dir` — where the toolkit reads stock binaries.\r\n* `[output] root` — where build products land. Mirrors the game's `System\u002F` + `Textures\u002F` layout.\r\n* `[deploy] target` — optional install path for the bare `--deploy` flag.\r\n* `[stages.\u003Cname>]` — per-stage settings. Each table has an `enable` boolean plus that stage's required input paths. Disabled stages can omit their inputs.\r\n\r\nA stage failure aborts the build with a clear error before any deploy step runs.\r\n\r\n### Deploy\r\n\r\nThe output tree mirrors the game install:\r\n\r\n```\r\npatch\u002F\r\n├── System\u002F\r\n│   ├── *.int\r\n│   ├── DeusExConText.u\r\n│   ├── DeusExText.u\r\n│   ├── DeusExUI.u\r\n│   ├── Extension.u\r\n│   ├── Extension.dll        # only if dll stage enabled\r\n│   └── DeusExText.dll       # only if dll stage enabled\r\n└── Textures\u002F\r\n    └── DXFonts.utx\r\n```\r\n\r\nCopy the contents of `patch\u002FSystem\u002F` and `patch\u002FTextures\u002F` into your install's `System\u002F` and `Textures\u002F` (or use `--deploy`). Back up your originals first — the engine has no rollback.\r\n\r\n---\r\n\r\n## 6. Pre-processing for Chinese, Japanese, Korean, and similar languages\r\n\r\nTriggered by: your target script doesn't use ASCII space to separate words. This section is the one place in the toolkit's docs that addresses CJK-style wrapping directly; the rest of the toolkit stays language-neutral.\r\n\r\nThe engine treats ASCII space (`U+0020`) as a soft wrap point. For English that's exactly right. For CJK, it produces a single-line paragraph that overflows the text panel because there are no spaces to break on.\r\n\r\nThe fix is a one-line substitution applied to every translated string before you feed it to the build pipeline: replace `U+0020` with `U+00A0` (non-breaking space).\r\n\r\n```python\r\ntext = text.replace(\" \", \"\\u00A0\")\r\n```\r\n\r\nThe engine then refuses to break on those spaces, and the wrap-on-character path in the DLL patches above takes over. Apply this in your translation pipeline before writing the `{key: text}` JSON — the toolkit deliberately performs *no* text transforms, so what you put in is what gets encoded into the binary.\r\n\r\n### Companion: enable the DLL patches\r\n\r\nOnce you've replaced ASCII space with NBSP, the engine has no soft wrap points left. Without the §4 DLL patches, lines just run off the panel. Pair the NBSP replacement with `[stages.dll] enable = true` (or copy the prebuilt DLLs); together they implement character-level wrapping.\r\n\r\n---\r\n\r\n## License\r\n\r\nMIT. See [LICENSE](LICENSE).\r\n\r\n## Where to read further\r\n\r\n* `docs\u002Fue1-package-format.md` — the on-disk layout of `.u` \u002F `.utx` packages, name table, export table, property tag protocol.\r\n* `docs\u002Ffont-pipeline-internals.md` — UFont format, atlas tiers, glyph rectangle table, the per-UFont stock vsize reference, ascii_ttf \u002F vert_align \u002F weight axis details.\r\n* `docs\u002Fdll-patches-explained.md` — what each DLL patch changes, why, and how to rebuild from source.\r\n","Deus Ex i18n Toolkit 是一个开源工具集，用于将《杀出重围1》（年度版\u002FSteam 1.112fm）本地化为其他语言。该工具包能够处理二进制级别的工作，如重写引擎的文本包、生成字体图集以及修补几个DLL文件，从而让本地化团队专注于翻译脚本和选择字体等需要人工判断的部分。项目采用Python编写，支持JSON格式的翻译字典输入，并将其编码成游戏引擎所需的二进制格式，最终替换游戏中的`System\u002F`和`Textures\u002F`文件夹内容。特别适合那些希望将经典游戏《杀出重围1》翻译成自己语言的社区或个人使用。",2,"2026-06-11 04:03:17","CREATED_QUERY"]