SETTINGS
Appearance
Language
About

Settings

Select a category to the left.

Appearance

Theme

Light or dark? Choose how the site looks to you by clicking an image below.

Light Dark AMOLED

Language

Preferred Language

All content on blog.claranguyen.me is originally in UK English. However, if content exists in your preferred language, it will display as that instead. Feel free to choose that below. This will require a page refresh to take effect.

About

"blog.claranguyen.me" details

Domain Name: claranguyen.me
Site Version: 1.0.0
Last Updated: 2020/08/18
Puyo Puyo Tetris's 50 replay limit... Shattered
Saturday, February 8, 2020

Introduction

So recently I bought a game on Steam called Puyo Puyo Tetris. It's a crossover between... well... Puyo Puyo and Tetris! I've had a few good matches here and there with some friends and the game lets you save good matches as replays. With replays, you can go and rewatch gameplay at a later time. You can also slow down or speed up the gameplay as you wish when playing them back.

Okay that's a pretty useful feature right? Well it is useful until you hit the absurd 50 replay limit. For a PC port, I would've expected something like in Quake or Half-Life where the replays are stored in a separate file (and in an unlimited quantity), but unfortunately that isn't the case here. Nope, we're stuck with 50.

Well I happened to be bored and had a really good cup of coffee, so I hacked something up to make this possible. Introducing CN_PPTRM (Clara Nguyen's Puyo Puyo Tetris Replay Manager). This is a tool that artificially removes the 50 replay limit by letting you extract the replays from your save. Nifty huh?

How it works

First, we need to understand how Puyo Puyo Tetris stores data. The replays are stored in data.bin... all 50 of them. And all 50 of those are in a fixed spot in that file. That file is constructed to never change size either. This explains why the limit is hardcoded. CN_PPTRM takes advantage of this simple format and just jumps straight to where the replay is stored to extract it. The game does not have any checksums to check if a replay is legitimate or not. So we are able to extract replays from the save, as well as import replays into it and it'll work.

"How does it remove the 50 replay limit?"

Well, it "artificially" does. The save will always have the 50 replay limit. But you can choose which 50 replays you want to store in it. The others are stored on your hard drive. Makes sense?

"Your program exports 'DEM' files. What are those?"

It stands for "Demo". In games like Quake, Half-Life, and Counter-Strike, the concept of recording inputs to play back in the future is called Demo Recording. So I named this based on that. Those games actually have entire communities driven on posting these kinds of files due to their small filesize (usually Kilobytes or just a few Megabytes). Puyo Puyo Tetris replays are around 91 KB in size, and can be compressed down to 6-12 KB. My program will do that compression for you via Gzip.

"Why can't I just record and delete?"

Fair point! That is a solution (it’s what everyone is doing, including me). If you are a YouTuber that only cares to upload, this tool won’t help you. This is only for those who wish to archive in the most efficient way possible (a few KB per match as opposed to a huge video file of potentally hundreds of MB). It also allows you to go back at a later time and record the gameplay at whatever resolution and framerate you wish.

Source Code & Download

This software is open source and I don't really care how people use it. You can get the source code from the GitHub repository. You can also get a compiled Windows binary from the Releases tab. This is pre-release software. Use it at your own risk and please back up data.bin before using it. Enjoy!




Clara Nguyễn
Hi! I am a Vietnamese/Italian mix with a Master's Degree in Computer Science from UTK. I have been programming since I was 6 and love to write apps and tools to make people's lives easier. I also love to do photography and media production. Nice to meet you!


Blog Links
Post Archive
Affiliates/Cool People
Nigoli's Blog
Raas's Blog