: Place both Patch.tjs and xp3filter.tjs directly into the root of that game folder.

Kirikiri (especially older versions) requires TJS files to be saved as or UTF-8 with BOM . If you save Patch.tjs as plain UTF-8 without BOM, the first character of your script will be misinterpreted, causing a parse error. Solution: Use Notepad++ or VS Code to save "UTF-8 with BOM."

Here is a breakdown of what these files typically do and how they are used:

Advanced games calculate a CRC of Xp3filter.tjs . If even one byte changes, the game refuses to boot. You must hex-edit the game's .exe to bypass the CRC check (a legal grey area).

While the filter handles the "how," Patch.tjs handles the "what." This file is traditionally used to override the core game logic without touching the original, encrypted archives.

function XP3Filter(archive, filename) for (var pattern in overrideMap) if (filename.match(wildcardToRegex(pattern))) var newPath = overrideMap[pattern] + filename; if (Storages.isExistentStorage(newPath)) return newPath; // redirect to patch file

You will often see these files working together in a translation patch distribution. The structure usually looks like this:

Patch.tjs Xp3filter.tjs Jun 2026

: Place both Patch.tjs and xp3filter.tjs directly into the root of that game folder.

Kirikiri (especially older versions) requires TJS files to be saved as or UTF-8 with BOM . If you save Patch.tjs as plain UTF-8 without BOM, the first character of your script will be misinterpreted, causing a parse error. Solution: Use Notepad++ or VS Code to save "UTF-8 with BOM." Patch.tjs Xp3filter.tjs

Here is a breakdown of what these files typically do and how they are used: : Place both Patch

Advanced games calculate a CRC of Xp3filter.tjs . If even one byte changes, the game refuses to boot. You must hex-edit the game's .exe to bypass the CRC check (a legal grey area). Solution: Use Notepad++ or VS Code to save "UTF-8 with BOM

While the filter handles the "how," Patch.tjs handles the "what." This file is traditionally used to override the core game logic without touching the original, encrypted archives.

function XP3Filter(archive, filename) for (var pattern in overrideMap) if (filename.match(wildcardToRegex(pattern))) var newPath = overrideMap[pattern] + filename; if (Storages.isExistentStorage(newPath)) return newPath; // redirect to patch file

You will often see these files working together in a translation patch distribution. The structure usually looks like this: