Translation Project for CHUNITHM
The goal of this translation project is to translate the game of CHUNITHM in its entirety, including all of its versions, old and new.
There are no game files included in this repo (except texture files because I consider the content transformative enough lol), all of the files in this repo can be used with the associated scripts to apply to your own game files.
Scripts and Tools:
surfboard_text_import.py (by Raymonf) - extracts and import strings from surfboard (.srd) files to .po (poedit) files
Parse.py (by Yonokid) - extracts strings, explainText, skillSeeds, and other content from xml files into .csv files
Apply.py (by Yonokid) - imports content from .csv files into xml files
DBEditor.py (by Yonokid) - unpacks and repacks .bin files into .txt files
build.py (by Yonokid) - takes the game files and translation source files and packages them into a usable translation
EXEpatch.py (by Yonokid) - takes an exe, appends a new data section for english strings, and reroutes pointers to that section
parity.py (by Yonokid) - compare two game versions to check for parity differences and find typos
AvatarSplice.py (by Raymonf (proompt engineer)) - automatically translates avatarAccessory dds files
How to Build:
- Install uv.
- Install imagemagick per the instructions here: https://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows
- Download this repo and obtain a copy of the game you wish to build for.
- Provide an exe into the path
<game version>\src\exe - Run
build.py <root of the directory> <root of the proper translation> <output location> <version>
For example, if I wanted to build for 2.00.01, I would runbuild.py "E:\CHUNITHM NEW!! (SDHD 2.00.01)" "chutranslation\SDHD_20001" "E:\Chunithm NEW Translation" "SDHD_20001"
What Needs To Be Done:
- Cleaning Code; There's always room for improvement.
- TEST CASES!! I'm not how to go about this for this project, but this would be really important. Programming mistakes tend to slip by very easily in this project since there aren't that many ways to verify correct data processing besides going into the game and checking.
- Surfboard Reverse Engineering: I've done quite a bit of this myself, but in order to move on from manually patching in hex edits, there needs to be a json like format to decompile a surfboard to. If you're interested in this, please contact me.
- Documentation; Each version has its own README.md file, most of which have not been updated since the first commit.
- Parity within files: files such as mapBonus and cmission have character/rewards in the file names, and those are being translated. However, it would be more efficient to read those strings from their original files instead of retranslating them.
Credits:
Yonokid - Leading the project or something, some programming, hex edit porting to BemaniPatcher
Raymonf - Programming for surfboard extraction and import, string exe editing, ErrorCodeTable ksy analysis
GRIM - Creating the original translation tools and spreadsheets, expertise
aetherpi - Playing the game so much that every detailed bug could be found
yellowberryhn - db file struct analysis
exe (Hex Edit/string patching) Contributions:
Raymonf - Discovering encoding types Felix - Walking me through modifying the PE file Yonokid - string patching/translation
csv (A000, Option Data, xml) Contributions:
Content from NEW (SDHD 2.00.01) and up
Yonokid - All
memoriast - Granblue Fantasy content
colin - Some trophies
Content from PARADISE LOST (SDBT 1.50.00) and below
4199 - chara, chargeItem, course, courseRule, duel, duelMission, map, mapIcon, namePlate, present, quest, ranking, reward, skill, shop, systemVoice, ticket
PolarManne - chara
AMAZON Translation Team - skill
JWOWW - skill
hybir - skill
po (surfboard) Contributions:
Yonokid - All
db (.bin) Contributions:
Yonokid - All
texture Contributions:
Nabix - All SDHD Versions
Content from PARADISE LOST (SDBT 1.50.00) and below
GRIM - SDBT 1.50.00, SDBT 1.45.00, SDBT 1.40.00 (not available in this repo)
4199 - SDBT 1.50.00 (not available in this repo)