The hard case for game localisation, documented by a Chinese translation of Degrees of Lewdity
Degrees of Lewdity 游戏的授权中文社区本地化版本
At a glance
- What is it?
- The Degrees of Lewdity Chinese Localisation repository publishes a Simplified Chinese build of a free Twine game on a monthly schedule, and its documentation is a rare honest account of what happens when a game's text cannot be separated from its logic. The version scheme, the mod loader workflow and the three code shapes that defeat naive string mapping are the parts worth reading.
- Who is it for?
- This repository is worth reading for anyone who localises games, because its documentation classifies localisation difficulty honestly, shows the exact code shapes that break a text mapping, and publishes a version scheme that tells a user whether a build is complete, polished, or merely translated.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 21 days ago.
- What is it written in?
- GitHub does not report a main language for this repository.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A release address rather than a codebase
The first thing the README makes clear is what the repository is and is not. The repository itself contains no game content, it exists as a release address, and the top-level entries match that description with a .data/ directory holding images, a CREDITS.md, a LICENSE, the README and the .github/ directory for the release workflow. The project is described as the authorised Chinese community localisation of the game, with the author of the game credited at the top and links to the author's blog, the English and Chinese wikis, the official Discord and the game's own source repository. The game itself is free to play, and the localisation is published for study and exchange, with the README asking for the download to be deleted within 24 hours, restricting it to users over 18, and explicitly forbidding commercial use and wide redistribution, with the legal consequences placed on the user. The downloads are served from a GitHub Pages site and from the releases tab, and the README warns that localised builds found on other platforms are not guaranteed to be safe.
The version number is a coverage report in the release name
The versioning scheme is the most useful thing in the repository, because it tells a user how finished a build is without reading anything. The localisation version has the structure chs-x.y.z, for example chs-1.7.1a, and the full release name combines the game version with it, for example 0.4.1.7-chs-1.7.1a. The suffix letter describes translation quality, and the three letters mean different things. alpha means the translation rate is 100 percent but there may be missed text and the polish is insufficient. beta means the translation rate is 100 percent with no missed text, but the polish is still insufficient. release means 100 percent translated, nothing missed, and properly polished. The numeric part changes according to the game version. A breaking game update, for example 0.4.1 to 0.4.2 or 0.4 to 0.5, resets the localisation version to 1.0.0. A minor game update bumps the first digit. A scheduled monthly release bumps the second digit. And a hotfix for a serious problem that stops the game being playable bumps the last digit. Reading a release name therefore tells you the game version, the translation state, and whether the release was routine or urgent.
Two ways to get it, and the mod loader is the base
The download procedure has two variants. The first is the downloadable build, and its first step is to fetch the game with the mod loader, as a zip or an apk, and the four files have different names:
DoL-ModLoader-xxx.zip
DoL-ModLoader-xxx-polyfill.zip
DoL-ModLoader-xxx.apk
DoL-ModLoader-xxx-polyfill.apkThe apk is an Android application package that installs and runs on Android, and the zip contains the html file that runs in any browser, on a desktop or on a phone. The polyfill variants exist for older browser engines, and the instruction is to prefer the file without polyfill and only try the polyfill build if it does not run. The second variant is the online build, which is deployed to GitHub Pages automatically on release, loads the localisation and image packs by default with no way to uninstall them, and still allows other mods to be loaded locally from a computer or a phone. Either way, the mod loader package contains no translation and no images, so both have to be downloaded separately, as ModI18N.mod.zip for the translation and GameOriginalImagePack.mod.zip for the images.
Side-loading the two mod packs through the mod manager
Loading the translation is a UI procedure, and the README is specific about the order. You click the Mod manager button in the lower left of the game screen, or press Alt+M on a computer, then in the Add or Remove Mod section you choose the file ModI18N.mod.zip and press the side-load mod button beside it. A Success message and a refresh notice appear, and you repeat the same two steps for GameOriginalImagePack.mod.zip. You then press the reload button at the top of the manager, or refresh the page in the browser, and at that point the game should show the Chinese text and the images. If it does not, the README tells you to check at the top of the manager whether safe mode is enabled, and if it is, to disable it and reload again, because safe mode suppresses the mods that did not load. If you are updating mods you have already loaded, loading the new file directly is enough, and if you add several mods, one reload after all of them is enough rather than reloading after each.
Three grades of localisable game, and this one is the third
The document on localisation method is the part of this repository that generalises beyond one game, and it starts by classifying how hard localisation is. The first case is a game designed with multiple languages in mind, where the on-screen text is represented by uniquely identified variables in the source, one to one, so the text and the logic are independent and the mapping lives in a separate file that the developer publishes. Games like Minecraft, Medieval II Total War and Age of Empires II work this way, and a localiser needs no technical knowledge at all. The second case is a single-language game that still represents text with variables but never published the mapping, so a localiser has to extract the mapping by reverse engineering the game or its resources and inject a patch. The third case is the hard one, a game with no mapping at all, where the text is hard-coded into the source and even takes part in logic. The document is explicit that Degrees of Lewdity is a typical case three game.
The TwineScript patterns that defeat a text mapping
The reason is the technology. The game uses the Twee3 text format, built on the SugarCube2 specification, and its TwineScript code makes up most of the source. The document puts the trade-off plainly, that TwineScript lets a developer freely mix display text with variables that can be assigned values, and that this is exactly what makes localisation hardest. The team therefore has to decide what needs translating, invent variables, and build the mapping before any translation can begin. On top of that, the game mixes display text with execution logic in several recurring shapes. The first is a string comparison used as a condition, where translating the display text alone breaks the logic:
<<if $EVENT is 'go to school'>>The second is a variable that is transformed and then printed, where a simple mapping cannot work at all because the output has to be reconstructed:
My name is <<print $NAME.replace('_', ' ').capitalize()>>.The third is display text assembled from fragments under different conditions, where the fragments need translating and the order and the conditions need adjusting:
<<switch ...>> <<case 1>> $TEXT += ' boy' <<case 2>> $TEXT += ' cat' <</switch>>The document also notes the two scale problems, that a visual novel made mostly of text has tens of thousands of sentences and millions of words, and that the existing tooling for building the mapping is still some distance from the intended goal, which is why the localisation's maturity is not claimed even after the progress made.
A monthly rhythm, a credits file, and a licence to read
The maintenance pattern is regular and stated. Unless something unusual happens, the repository publishes a new version on the first day of each month at nine in the evening, Beijing time, which is what the second digit of the localisation version tracks, and the release tags follow the combined scheme, with v0.5.12.13-chs-1.0.1a published on 2026-10-02, v0.5.11.9-chs-1.0.0a on 2026-08-14 and v0.5.10.12-chs-1.0.8a on 2026-06-28. The last push was on 2026-10-02, and a Chinese localisation Discord server is linked for discussion. The repository carries a CREDITS.md, and the licence is a custom one that GitHub cannot classify, so the terms are in the LICENSE file rather than in a standard identifier. Issue reporting has its own rules, with a request to attach a screenshot plus the save file or save code, a request not to delete issues so that later readers can find them, and a boundary on the repository's scope, since it only handles problems caused by the Chinese build, while anything reproducible in the English version should go to the official Discord.
Editorial conclusion
This repository is worth reading for anyone who localises games, because its documentation classifies localisation difficulty honestly, shows the exact code shapes that break a text mapping, and publishes a version scheme that tells a user whether a build is complete, polished, or merely translated. It is not a project to contribute code to, since the repository holds no game code and only release assets, and the translation itself is a community effort measured in tens of thousands of sentences. Before using a build, read the disclaimer in the README, note that the project asks users to delete the download within 24 hours and to avoid commercial use and wide redistribution, and check the version suffix, since an alpha build may still contain unpolished text even though the translation rate is complete.
Frequently asked questions
What does the chs version number in the release name mean?
The localisation version has the form chs-x.y.z and the full name combines it with the game version, for example 0.4.1.7-chs-1.7.1a. The suffix letter describes the translation state, with alpha meaning fully translated but possibly missed text and insufficient polish, beta meaning fully translated with nothing missed but insufficient polish, and release meaning fully translated, nothing missed and properly polished.
How do I load the Chinese translation and images into the game?
Download the mod loader build plus the two mod packs, ModI18N.mod.zip and GameOriginalImagePack.mod.zip, then open the mod manager with the button in the lower left of the game screen or Alt+M, use Add or Remove Mod and the side-load mod button for each file, and press reload at the top of the manager. If nothing appears, check whether safe mode is enabled and disable it.
What is the difference between the polyfill build and the regular build?
The game with a mod loader comes in four files, zip and apk versions, each with and without polyfill. The polyfill versions carry some compatibility work for older browser engines, so the README recommends downloading the file without polyfill first and only trying the polyfill file if it does not run.
Why is localising this game so difficult?
The game uses the Twee3 format on SugarCube2 with TwineScript, where display text and execution logic are mixed, and the README classifies it as the hardest category, where text is hard-coded into the source. Conditions that compare display strings, variables that are transformed before printing, and text assembled from fragments under different conditions all break a simple text-to-variable mapping.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/eltirosto-degrees-of-lewdity-chinese-localization)Was this useful?