c0442f3721
Previously, I had translated the existing levelhold behavior in WHMHammer's tja parsing code, assuming that it would produce the correct behavior for fumen charts. However, that is not the case -- the behavior is completely wrong. So, this PR takes out all the old `flag_levelhold` behavior and instead properly sets the `branch_info` bytes whenever #LEVELHOLD is present on a branch. This PR also prepares `shoto9.tja` for further testing, but I'm leaving that for later... Fixes #52. |
||
---|---|---|
.github/workflows | ||
.vscode | ||
src/tja2fumen | ||
testing | ||
.gitignore | ||
LICENSE.txt | ||
MANIFEST.in | ||
pyproject.toml | ||
README.md | ||
setup.py |
tja2fumen is a tool that allows you to convert TJA charts (.tja
) to fumen charts (.bin
).
Features
- Parse
.tja
chart files. - Convert parsed TJA song data into fumen chart data.
- Write fumen chart data to
.bin
files. - Decode official fumen
.bin
files.
Usage
tja2fumen is included as part of several existing projects. So, you may be using tja2fumen already!
- XB1/TDMX: TakoTako converts both chart and audio files for XB1/TDMX.
- Nijiro: TaikoSoundEditor converts both chart and audio files for NIjiro.
You can also use tja2fumen directly on a .tja
file by downloading tja2fumen.exe
from the Releases page and running tja2fumen.exe file.tja
in a command prompt.
Note
: For older versions of TakoTako (3.2.0 and below), you can add tja2fumen by renaming
tja2fumen.exe
totja2bin.exe
and placing it inside TakoTako's plugin folder (BepInEx/plugins/com.fluto.takotako/
).
TJA Support
If there is an unsupported feature that you would like support for, please make a request by opening a new issue.
Supported file formats
Legend:
✅
= Fully supported,❌
= Not supported
tja 2 fumen | tja 2 bin | Comment | |
---|---|---|---|
UTF-8 (with BOM) | ✅ |
❌ |
|
UTF-8 (without BOM) | ✅️ |
✅ |
|
Shift-JIS | ✅ |
✅ |
Supported metadata
Legend:
✅
= Fully supported,⚪️
= Ignored,⚠️
= Incorrect behavior,❌
= Not supported
tja 2 fumen | tja 2 bin | Comment | |
---|---|---|---|
BPM: , OFFSET: |
✅ |
✅ |
|
TITLE: , SUBTITLE: , WAVE: ,DEMOSTART: , etc. |
⚪️ |
⚪️ |
The only global metadata needed are BPM: and OFFSET: . |
COURSE: , LEVEL: , BALLOON: ,SCOREINIT: , SCOREDIFF: |
✅ |
✅ |
|
STYLE: (Single , Double ) |
✅ |
❌ |
|
EXAM1: , GAUGEINCR: , TOTAL: , etc. |
⚪️ |
⚪️ |
Other simulator-specific metadata fields are currently ignored. |
Supported notes/commands
Legend:
✅
= Fully supported,⚪️
= Ignored,⚠️
= Incorrect behavior,❌
= Not supported
tja 2 fumen | tja 2 bin | Comment | |
---|---|---|---|
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 |
✅ |
✅ |
|
A , B |
✅ |
❌ |
|
C , D , E , F , G , H , I |
⚠️ |
❌ |
Replaced by normal notes/rolls in tja2fumen. |
9000, 9008, |
⚪️ |
⚠️ |
Double Kusudama note treated as 1 drumroll by tja2fumen, but 2 overlapping drumrolls by tja2bin. |
#START , #END |
✅ |
✅ |
|
#START P1 , #START P2 |
✅ |
❌ |
|
#BPMCHANGE |
✅ |
⚠️ |
See #16 |
#MEASURE |
✅ |
✅ |
|
#SCROLL |
✅ |
✅ |
|
#GOGOSTART , #GOGOEND |
✅ |
✅ |
|
#BARLINEOFF , #BARLINEON |
✅ |
✅ |
|
#DELAY |
✅ |
❌ |
See #27 |
#BRANCHSTART , #BRANCHEND |
✅ |
✅ |
|
#N , #E , #M |
✅ |
✅ |
|
#SECTION |
⚠️ |
❌ |
See #53, #27 |
#LEVELHOLD |
✅ |
❌ |
|
#BMSCROLL , #LYRIC ,#DIRECTION , etc. |
⚪️ |
❌ |
Other simulator-specific chart commands are currently ignored. |
Reporting bugs
If you've found a .tja
file that tja2fumen converts incorrectly, please open a new issue on the tja2fumen repo.
It is especially important that you attach the song files to the issue. You can do this by adding the song files to a .zip
(Select files -> Right click -> "Send to" -> "Compressed (zipped) folder"), and then uploading the .zip
to the issue. This greatly helps me to reproduce and fix any issues.
You can also message me directly on Discord (_vivaria
) if you don't have a GitHub account, and I will take care of making an issue for you. :)
Building on top of tja2fumen
If you are a developer looking to add tja2fumen to your project, you have two options:
- For non-Python projects, you can download
tja2fumen.exe
and call it via a system call. - For Python projects, you can install tja2fumen via
pip install tja2fumen
.
tja2fumen uses a very permissable license (MIT License). You are free to distribute and modify tja2fumen, but please include a copy of the MIT License alongside the tja2fumen.exe
executable if you copy it into your project.
Attribution
- The fumen-parsing code in this project is based off of a modified copy of the
readFumen()
function from thefumen2osu.py
found in @KatieFrogs'fumen-tools
project. - The TJA-parsing code in this project is a Python translation of the
parseTJA.js
file from @WHMHammer'stja-tools
. - sakurada0291, DDDDDD, U-ros, and others in the Discord for helping to test tja2fumen. :)