Community-driven, open-database translations for every Superfighters Deluxe map
A script extension that lets you play any Superfighters Deluxe map in your language. It automatically replaces dialogue lines, speaker names, in-world text objects, and popup messages with translations from an open, versioned database. No map editing required.
Each map is identified by its original GUID, and translations are bundled directly into the script at build time via a code generator. Pick a language once and the script applies it whenever you load a translated map.
Contributions are welcome: anyone can open a map in the editor and add entries to the shared database.
| Command | Description |
|---|---|
LANG [lang|original] |
Chooses the translation language. Provide a language code to translate on the next map load, or original to keep the original text. Called without arguments, it lists all available languages. Host only. |
TRANSLATION_DUMP |
Dumps every dialogue, dialogue name, text object and popup on the current map into shared script storage. Host only. |
Required options are shown with <>, optional parameters are shown with [].
All translations live in db/. Each map has its own directory, named after its hyphenated, lowercase original GUID.
db/
├── languages.json # supported language codes + display names
└── maps/<MapOriginalGUID>/
├── strings.tsv # original,key,kind (canonical source texts)
└── <lang>.tsv # key,translation (one per language, blanks = untranslated)
Supported kind values are dialogue-text, dialogue-name, text, and popup. Any other file in db/maps/<GUID>/ (e.g. README.md) is silently ignored.
- Load the map in SFD and run
/TRANSLATION_DUMPin chat. - Locate
Superfighters Deluxe/Cache/ScriptData/Shared/translationdump.txtand copy it into the repository root astranslationdump.txt. - Run
just process-dump. The recipe strips the storage-format header, extracts the GUID, createsdb/maps/<GUID>/strings.tsvif needed and appends only genuinely new rows: deduplicating both by placeholder key and by the pair(original, kind)so repeated texts on multiple objects only appear once.
- Open
db/maps/<GUID>/strings.tsv. Columns areoriginal,key,kind; invent stable, human-readable keys for each entry and replace the generated*.placeholder.*placeholders where you can. - Create or edit
<lang>.tsvfiles: each row iskey,translation. Leavetranslationblank for untranslated entries.
Tables are tab-separated: fields never need quoting, so commas and quotes in dialogue text work as-is. Within a field, write \n for a line break, \t for a tab, \r for a carriage return, and \\ for a literal backslash.
After editing the database:
just validate-translations # lint + coverage, exits non-zero on errors
just generate-translations # db → Translation/Data.generated.cs
just generate-script # compiles + welds to SFD.Scripting.MapTranslationProject.txtThe validate step reports overall coverage, hash collisions, placeholder mismatches, and length advisories.

