Skip to main content
ellie

Reverse engineering the BPM file format

for a while, one of my hyperfixations was doko demo issyo. it's a fun game where you take care of a japanese cat named toro and do all sorts of stuff.

A screenshot of the game Doko Demo Issyo

i am part of the community and one of the things that is very common is the .BPM file.

what is .BP(M)? #

it was a file format created in the first doko demo issyo game. it's kinda like a weird version of a .zip file without any compression. we don't know why it came in the first place but i have a theory why. there is no official name for .BPM, we just call it Bexide Package Manager.

the infamous ZZDUMMY.dat #

if you popped in a PS1 cd disc rom into your pc. you saw this file. ZZDUMMY.dat was a smart idea by sony to fill the CD with junk data so the disc can be read faster. my main idea is that .BPM was inspired by the CD problem on the playstation. once you see the .BPM file format, it reminds me of a circle since the headers, offsets, and then the raw data all together which would of probably increased the speed of reading the cd.

tinkering around #

way before i started bextract, there was another project by a developer named nekobit who made a .BP extractor to make a english edition of doko demo issyo for the PSP. but there was an issue with all extractors, they all did not work on the PS3 versions. doko demo issyo released live service games and toro lets party on the PS3 and there wasn't a good tool so i had to write my own. the main reason is because of different endianess. big endian and little endian are used for all sorts of things in files so i had to make my own and i wanna feel like its pretty cool.

writing bextract: extraction #

the extraction was the easiest part of the journey. i wrote it in python and added a funny little reference (explanation). mikhail helped me out figure some of the file format and i mainly wrote the tool. i was able to finish it by the end of the day and i planned to go for injection but i soon hated it.

injection hell #

i swear to god. i fucking hated this. sometimes i think i'm a smart programmer but this just made me lose so much demotivation. injecting files aren't that hard but the main issue was just actually getting the offsets correctly. i spent nearly 20 days. my grades at school actually dropped down because of this project because i was spending so much time trying to figure this out. after these 20 days, i figured it out and freaked out when i got it working for the first time. here's a fucking ouppy in weekly toro station.
screenshot of some text in ddi with a dog in the background

project #

if you want to try out the project yourself, here is the github repo bextract