Madoka Magica TPS Speedrunning
Page on my attempts to speedun the Madoka Magica TPS games. So far, I am currently speedrunning Mami Tomoe TPS.
Mami Tomoe TPS
Records
A personal leaderboard containing my times in the game. Scores from modded versions of the TPS games won't be counted but I'll still add them. Scores I achieved without screenshot or video proof will not be added. I plan to eventually get some of these scores to speedrun.com at some point.
NC=Not Counted
Stage 1
# | Time | Date | Platform |
---|---|---|---|
1 | 38.60 seconds | May 7, 2024 | Android |
2 | 39.00 seconds | April 9, 2024 | Android |
3 | 41.03 seconds | April 7, 2024 | Android |
4 | 42.53 seconds | April 6, 2024 | Emulator (Nox) |
5 | 46.53 seconds | July 10, 2022 | Android |
NC | 54.86 seconds | August 29, 2023 | Android (Modded; Battler TPS) |
Stage 2
# | Time | Date | Platform |
---|---|---|---|
1 | 1:21.16 | May 7, 2024 | Android |
Stage 3
Stage 4
Stage 5
Stage 6
Stage 7
Stage 8
Stage 9
Stage 10
Overall
TBD
Technical Information
Important note: After defeating a boss, there is some extra time spent waiting for the health bar to go down, this is in fact counted as part of the in-game timer. The moment you load into the game before the fade-in to the actual level is also counted by the timer.
Variable values
- DIFFICULTY_EASY=0
- DIFFICULTY_NORMAL = 1
- DIFFICULTY_HARD = 2
- DIFFICULTY_MAX = 3
- RANK_S = 0
- RANK_A = 1
- RANK_B = 2
- RANK_C = 3
- saveFileName = "save.sav"
- saveFileSize = 512
public static boolean saveSaveData() { ByteReaderWriter bw = new ByteReaderWriter(saveFileSize); bw.writeInt(0); bw.writeInt(continueStage); bw.writeInt(continueDifficulty); bw.writeInt(continueScore); bw.writeInt(continueTime); for (int i = 0; i < 3; i++) { for (int j = 0; j < 10; j++) { bw.writeInt(bestScore[i][j]); bw.writeInt(bestTime[i][j]); bw.writeInt(bestRank[i][j]); } } boolean ret = CommonHelper.writeStorage(saveFileName, bw.getData()); bw.close(); return ret; } public static boolean loadSaveData() { byte[] data = CommonHelper.readStorage(saveFileName); if (data == null) { return false; } ByteReader br = new ByteReader(data); int readInt = br.readInt(); continueStage = br.readInt(); continueDifficulty = br.readInt(); continueScore = br.readInt(); continueTime = br.readInt(); for (int i = 0; i < 3; i++) { for (int j = 0; j < 10; j++) { bestScore[i][j] = br.readInt(); bestTime[i][j] = br.readInt(); bestRank[i][j] = br.readInt(); } } br.close(); return true; }
Loading Level Files
The game loads in a .mgm binary file from the /raw/ folder in the .apk. The game takes the current level from a variable which starts at 0 and ends at 9 (stage0 seems to count as a tutorial, so only 9 levels are counted?). From there, it calls the file for that level. It turns the file from a resource into a byte array and reads the data as integers. It constructs level data based on how many textures there are, what textures, what values for the textures, etc. The .java file handling this is GameField.java
Strategies and Notes
Bomb Usage
I save all Tiro Finale bombs for the final boss.Enemy Weapon Drops
Certain enemies drop certain weapons and other pickups. The things I prioritize most is the Tiro Finale bomb pickup, the next being the Shot weapon, then the Fire weapon. I disregard the rest of the item drops.Notes
Unlike Homura TPS, Mami Tomoe can only jump when prompted.Homura Akemi TPS
Stage 1
# | Time | Date | Platform |
---|---|---|---|
1 | 1:21.36 | May 8, 2024 | Android |
2 | 1:24.86 | May 5, 2024 | Android |
3 | 1:25.20 | May 5, 2024 | Android |
4 | 1:29.06 | May 5, 2024 | Android |
Stage 2
# | Time | Date | Platform |
---|---|---|---|
1 | 2:01.66 | May 8, 2024 | Android |
2 | 2:15.43 | May 5, 2024 | Android |
Stage 3
Stage 4
Stage 5
Stage 6
Stage 7
Stage 8
Stage 9
Stage 10
# | Time | Date | Platform |
---|---|---|---|
1 | 2:34.10 | May 7, 2024 | Android |
2 | 3:38.76 | May 5, 2024 | Android |
Overall
May 5 total: ~28 minutesTechnical Information
Version 1.1 and Version 1.2 are functionally exactly the same. In my opinion, either of these can be used for speedrunning interchangeably. Version 1.2 does not alter any of the levels, it only adds new voicelines.Strategies and Notes
Don't use the Pipe Bombs
what the title says. The pipe bombs do less damage than the Spread weapon and also slows you down when killing a boss.Weapon Management
The only weapons you should ever get are Rapid and Spread. Everything else will just slow you down. If you pickup a third weapon, it overrides whatever you were using at the time, so it's optimal to avoid any rougue pickups dropped by enemies and witches.Enemy Spawn Order
Not killing enemies will result in only half of the intended amount of enemies to spawn; killing the first few enemies in the first level spawns a few more, and then a few more, not killing the first set skips those two other spawns. Though if you're willing to take a risk, certain enemies can be killed in order to spawn other enemies, if done right, you can get extra ammo for the Rapid and Spread this way.Notes
- Homura jumping doesn't make any sort of difference on speed.
- The witch Patricia can't be damaged by the Ring weapon.
- The render distance is pityfully small, except for certain points in the side.
- In all three TPS games, getting an A rank and S rank in a level unlocks a photo in the gallery.