The next few devlogs are going to be me working on, perhaps, one of the most difficult parts of this app. Importing from Pyware. Just as an introduction, Pyware is a piece of software from the 1990s that is used for drill writing, and has been the leader in this industry for years. However, it’s file format is completely proprietary! These next few devlogs will be reverse-engineering one particular type of its file: the “3d app” file, used for exporting to their mobile viewer, which has all of the information that I need (hopefully!) to import to PocketBook.
I have reversed most of the way that the pyware coordinates are stored.
In the first image, you can see a binary file that contains coordinates from one performer. Here’s what I concluded from this:
- blue = performer index (defined in instruments section)
- cyan = case 00 00 -> side 2; case FF FF -> side 1
- green = SIGNED INTEGER - units off from the 50
- yellow = case 00 -> marcher is below the center; case FF FF -> above
- orange = SIGNED INTEGER - units away from the center line
- red = unknown
- purple =
-
-
- second bit = performer label (ie T, W, C, etc)
1 step = 625 pyware “units” as pyware rounds to a max of 1/16 steps aka 0.0625
This sounds really complicated, and it is! there is also still stuff that I don’t know. Regardless, I have been able to make a parser that gets this into a json format (image 2)
However, this isn’t how pyware provides the file - it actually gives a count-by-count breakdown of each performer’s location. One of these counts is shown in image 3. As you can see, all performers are bundled together. What I am still missing is what separates these different “counts” as well as any other metadata, as there are maybe 3-4 lines after each count that give more info
Additionally, I need to find ways to parse the field grid, the instrument list, and more… these will come in future devlogs!