1
0
mirror of synced 2024-12-18 05:45:51 +01:00
Commit Graph

107 Commits

Author SHA1 Message Date
Viv
0a3a4ae4e6 converters.py: Fix bug with measure BPM adjustment
The adjustment occurs between ANY BPM shifts, and not just mid-measure BPM shifts.

The reason I missed this is because my test song, Rokuchounen, ONLY contains mid-measure BPM shifts, and no BPM shifts that start exactly on the measure.
2023-06-02 17:43:59 -04:00
Viv
f336c37b8b parsers.py: Move SECTION to the branch function 2023-06-02 17:43:59 -04:00
Viv
555c92a8a5 Rename durationPadding to duration
The two shouldn't have been split apart; we should have had a single name representing duration as a whole, whether or not it's present.
2023-06-02 17:43:59 -04:00
Viv
6345fe5437 constants.py: Refactor TJA command lists
Some necessary commands were actually unnecessary, and some unused commands were actually used.
2023-06-02 17:43:59 -04:00
Viv
e3d2f0f039 Prepare for testing against Unlimited Games 2023-06-02 17:43:59 -04:00
Viv
c2739b322c parsers.py: Add cases for remaining ESE commands 2023-06-02 17:43:59 -04:00
Viv
b3968bc365 Remove TTBREAK, TTROWBEAT, and measureProperties
These are unnecessary; these commands are not included in the TJA spec.
2023-06-02 17:43:59 -04:00
Viv
1d3490c600 utils.py: Add difficulty-based investigation notes 2023-06-02 17:43:59 -04:00
Viv
60fb3215d7 utils.py: Pin down "Difficulty" header bytes 2023-06-02 17:43:59 -04:00
Viv
aadbb3f8ba Add a sample "unknownHeader" to use in TJA conversions
This contains all of the dummy/padding text found through investigation, but none of the actual song-specific header metadata, so this will need to be updated further.

But, it's better than all 0s, and I want to test to see how TDMX responds to this.
2023-06-02 17:43:59 -04:00
Viv
ce99164583 utils.py: Add function to validate unknown header bytes 2023-06-02 17:43:59 -04:00
Viv
35159ea793 tja2fumen.py: Refactor main steps into main() function 2023-06-02 17:43:59 -04:00
Viv
7239a00e76 converters.py: Fixup handling of scoreInit/scoreDiff 2023-06-02 17:43:59 -04:00
Viv
c7170d6f23 converters.py: Account for HIDDEN status 2023-06-02 17:43:59 -04:00
Viv
ec6bf1db68 converters.py: Account for GOGOTIME events
Also add in cases for barline and other events
2023-06-02 17:43:59 -04:00
Viv
dcc37ff0dd converters.py: Make 'note' its own case 2023-06-02 17:43:59 -04:00
Viv
1f76b19e69 converters.py: Remove redundant submeasures object 2023-06-02 17:43:59 -04:00
Viv
fdeefc2499 converters.py: Handle #SCROLL events 2023-06-02 17:43:59 -04:00
Viv
ae84137478 converters.py: Fix typo (PM -> BPM) 2023-06-02 17:43:59 -04:00
Viv
abd0af5f57 converters.py: Migrate event code to other function 2023-06-02 17:43:59 -04:00
Viv
96ca4ab2c0 converters.py: Move currentBranch line to top of function 2023-06-02 17:43:58 -04:00
Viv
a6d9feab4c converters.py: Group fumenOffset-related code 2023-06-02 17:43:58 -04:00
Viv
c17218d362 converters.py: Add tana's fix for mid-measure BPM changes 2023-06-02 17:43:58 -04:00
Viv
c0288bb0b2 Commit in-progress work just to demo
This should be cleaned up into proper commits
2023-06-02 17:43:58 -04:00
Viv
89011c79db readFumen(): Comment out useless offset value
This isn't actually used anywhere, and the calculation is often wrong.
2023-06-02 17:43:58 -04:00
Viv
cc885a0270 Refactor functions into individual modules 2023-06-02 17:43:58 -04:00
Viv
1b600fc26d tja2fumen.py: Fixup FumenStructure function 2023-06-02 17:43:58 -04:00
Viv
185ed46361 tja2fumen.py: Add convertTJAToFumen function
Thie is a first draft with many TODOs.
2023-06-02 17:43:58 -04:00
Viv
8b07fb77d0 parsetja.py: Add applyFumenStructureToParsedTJA function
This function basically just takes the output of the `getCourse`
function, and restructures it so that it more closely matches the
structure of the fumen `song` format.
2023-06-02 17:43:58 -04:00
Viv
06900237f6 parsetja.py: Account for default balloon metadata 2023-06-02 17:43:58 -04:00
Viv
fdc3b6e1af tja2fumen.py: Switch to a measures sub-dictionary
This makes the `song` object a lot easier to navigate when
inspecting variables through a debugger.
2023-06-02 17:43:58 -04:00
Viv
b7670b54a3 parsetja.py: Slightly refactor the getCourse function
The big if/elses were a little hard to parse, so I broke things
into subfunctions.
2023-06-02 17:43:58 -04:00
Viv
35ba7bfeba parsetja.py: Move parseLine function down
My main focus will be rewriting the `getCourse` function, so I want it to be at the top.
2023-06-02 17:43:58 -04:00
Viv
355d3a10f9 parsetja.py: Condense parseLine function 2023-06-02 17:43:58 -04:00
Viv
f77f31dcd0 parsetja.py: Condense global lists to save space 2023-06-02 17:43:58 -04:00
Viv
0cd8c93922 parsetja.py: Simplify the parseTJA function
No real functionality changes, just making the function simpler and easier to understand.
2023-06-02 17:43:58 -04:00
Viv
93dd1355f8 Add TJA parser (translated from JavaScript)
Source: https://github.com/WHMHammer/tja-tools/blob/master/src/js/parseTJA.js
2023-06-02 17:43:58 -04:00
Viv
8fa6295efa tja2fumen.py: Add TODOs for reverse engineering fumens 2023-06-02 17:43:58 -04:00
Viv
3b2111ae31 tja2fumen.py: Fix assumption about drumroll padding bytes
The 8 bytes after a drumroll are NOT just padding, as
`fumen2osu.py` assumed. There is some kind of metadata here;
I just need to determine what it stands for.
2023-06-02 17:43:58 -04:00
Viv
0c95ff11f3 tja2fumen.py: Account for additional unknown metadata
I'm not sure what these 4 bytes represent yet.
2023-06-02 17:43:58 -04:00
Viv
0995de89ae tja2fumen.py: Add function to validate rewritten fumens 2023-06-02 17:43:58 -04:00
Viv
9879cd9b7c tja2fumen.py: Rewrite song information to fumen files
On at least one song I've tested, this creates a perfect match,
meaning that we now have the ability to create a fumen file
from a "song" object.

The next challenge is reading TJA files into "song" objects.
2023-06-02 17:43:58 -04:00
Viv
adbc81a9c2 tja2fumen.py: Store additional metadata in song objects
The original `readFumen()` function ignored storing information
that was irrelevant for writing osu files.

Now, however, we store this information for the purposes of
*writing* valid fumen files.

Although much of this information is probably irrelevant, doing so
ensures that we can get a 1:1 match between input and output,
which builds a solid foundation for converting TJAs to fumens.
2023-06-02 17:43:58 -04:00
Viv
9fe28513d5 tja2fumen.py: Read the "unknown" part of the header
This seems to contain metadata that was ignored by the
original `readFumen()` function. I'm curious to explore
what these values represent, and how they vary from
fumen to fumen.
2023-06-02 17:43:58 -04:00
Viv
4995a4bee1 tja2fumen.py: Differentiate between note types
Having multiple note values map to identical strings
(e.g. "Don", "Ka", "DON", "KA") caused issues when
writing these strings back to .fumen files.

So, we make sure that each note type has a unique
string associated with it.
2023-06-02 17:43:58 -04:00
Viv
42f302eff0 tja2fumen.py: Add workaround for deo_n.bin song
I think this file has inaccurate metadata, so I've added a workaround
so that it will still parse.
2023-06-02 17:43:58 -04:00
Viv
f586372343 tja2fumen.py: Add new note types for Wii1/Wii4/PS4
I still don't know what these note types represent in the song,
but I'll figure it out later on!
2023-06-02 17:43:58 -04:00
Viv
48b9ae488f tja2fumen.py: Add new checkValidHeader function
This runs successfully against all 1800+ UM4 fumens.
2023-06-02 17:43:58 -04:00
Viv
ddce1b53de tja2fumen.py: Add extensive comments to readFumen()
Some lines of code were rearranged for clarity purposes.
2023-06-02 17:43:58 -04:00
Viv
9fe0fceced tja2fumen.py: Refactor readStruct and provide documentation 2023-06-02 17:43:58 -04:00