Super Puzzle Fighter II Turbo is a game originally released in arcades in 1996 that was ported to several consoles over the years. The game works on a mechanic of normal blocks (which can group together into power gems), crash gems (which destroy gems of the same color), and counter gems sent over from opponents that count down until they turn into normal blocks. Blocks fall in pairs and after the 25th pair a diamond gem appears which destroys all gems of the same color on the playfield.

Game objectives

  • Emulator used: fba-rr-007
  • Defeats the 8 normal characters and the final character as quickly as possible
  • Plays as the "weakest" character (Ryu) and plays on the hardest difficulty
  • Abuses enemy attack RNG
  • Gets abused by gem drop order

Comments

I've recently been going through games that were significant to me in days gone by which do not yet have a tool assisted speedrun. I primarily played the PSX version of this game but the arcade version has better resolution so I opted to start with that. I later regretted my decision due to some emulator issues I'll describe in a section below and I'll move back to describing the game's significance to me before I start ranting mid-paragraph. I played the PSX version extensively in the past and greatly enjoyed it.
There's a very full guide of the game on StrategyWiki that was quite useful for showing the enemy drop orders and other useful details specific to the arcade version.

RNG Mechanics

The RNG in this game is evil - input prior to starting the round dictates all gems that will be dropped for the entire round. You can spend hours trying different input at the end of the previous round to manipulate the drop order in the next round, and endlessly try for better times. Sometimes a drop order that seems good is really bad, because your opponent will get the same gems in the same order as you and it's not always possible to get the upper hand quickly. As a result this is the kind of game that could be infinitely optimized - I put many, many hours into optimization with at best mixed results to my sanity in the process on some levels (Sakura, I'm looking at you!) but overall I'm content with how this turned out.

Round by round comments

Each gem color (yellow, red, green, and blue) is listed below, with crash gems in upper case and D as the diamond if it is used.

Round 1 (Ken) drop order

rr ry gY bg gB Yg rY gr bb gg rr yR bb yB ry br gY bb yR Yb gB By Gy
7y + 5Y = 12
9r + 2R = 11
9g + 1G = 10
9b + 4B = 13
}}
For the first fight I intentionally picked Ken as the enemy, as Ken has one of the best attack patterns. I put more effort changing the drop order at the end of this level than any other. The way you rotate pieces and where you place them will affect the next level's predefined drop sequence, and I did most of the initial experimentation in the first level while experimenting with what might make for a better drop order for Donovan. What I didn't quite factor in early in the run is that the enemy gets the exact same drop order - it's something I knew from playing the game for years, but it somehow didn't occur to me that the enemy would have the opportunity to attack me the same way I was attacking, so what seems like "ideal" drop sequences are often disastrous if your goal is to finish quickly. This was primarily because the first person to attack puts their opponent on defense, at which point every gem they destroy counts to remove half of the blocks being sent (destroying two of the same color removes 1 counter gem headed toward them, etc.). The problem I kept encountering was I would be faster than the opponent to attack, but because they have the same blocks they would immediately soak up most of the damage. It's far better to attack when they have no opportunity for defense, which is harder than it sounds in the early game.

Round 2 (Donovan) drop order

gg rb bg yG rB yb yb rY yb bG yr rg bg gB rb bg by Yb bY Rg ry Yr gb Gb
7y   + 4Y = 11
8r   + 1R = 9
9g   + 3G = 12
14b  + 2B = 16
}}
By changing input at the end of the first fight I was able to create a drop order that was biased toward blue gems, so I went to great lengths to try to make the largest blue power gem I could. In retrospect this was perhaps not the best strategy as I ended up leaving a very large number of blocks behind at the end of the level. Donovan is considered one of the hardest opponents because of his mustard stand attack pattern but he gets very few opportunities to attack. The crash gem at the end isn't needed to defeat him but changes to its position and rotation can be used to manipulate the drop order for the next fight.

Round 3 (Chun-Li) drop order

yg rg bb rB gB ry bY gr rr yb bY bg rg bb yy br rY rY ry gg Rb YB yy gr GD
8y  + 5Y = 12
12r + 1R = 13
9g  + 1G = 10
10b + 3B = 13
}}
Chun-Li is famous for making power gems when she attacks an opponent with a level playfield but she doesn't get much of an opportunity to do more than chip damage that sends a scant few lazy counter gems over so I opted to make a couple of 4x4 power gems in her honor on my own. This is the first level to employ the diamond; I place it on the red gems which act like a fuse, dropping out of the way and allowing other crash gems to touch their respective colors. The diamond usually does half damage and sends counter gems over that start counting down from 3 instead of the normal 5, but chain reactions caused after the diamond is used do normal damage. This round ends with an all clear stage which I'm happy about.

Round 4 (Morrigan) drop order

gr rG bG bg gr gb gr bb bb gR gB gr rG yB yb Rg gB gg gy by YB gY yG Bg
5y  + 2Y =  7
6r  + 2R =  8
15g + 4G = 19
9b  + 5B = 14
}}
Morrigan has a somewhat annoying alternating attack pattern but by limiting her to only sending me a small amount of counter gems at a time early in the round I can place gems in anticipation. This is the first level where I manipulate the drop location to my advantage, forcing the first set of gems to drop on the left side. I send over a fair bit of small damage to star causing Morrigan problems before doing a decent sized attack that does her in.

Round 5 (Ryu) drop order

br bg gr yy bG bR gr yy gg ry yb bg by yr bb gb rG YR gr yR GB Rg Rb
9y  + 1Y = 10
7r  + 5R = 12
9g  + 3G = 12
11b + 1B = 12
}}
After skipping past an intermission I fight... myself. Ryu's weakness, and the reason he is considered the weakest character, is that big attacks turn into vertical columns that can be easily exploited - simply place a crash gem of the correct color in the column you know Ryu will be dropping gems into and let the fun begin. The AI seems to know how to do this well, and I suspect the arcade game designers intentionally placed Ryu in the upper left / player 1 default character selection spot for this reason, but I digress. As you can see from the drop order I intentionally set up a sequence with a fairly even distribution of gems of all colors, and I place them in columns to match where Ryu will drop counter gems. I set off a time bomb / mine next to the green column that helps take out my doppelganger handily.

Round 6 (Hsien-Ko) drop order

yb gb gg gR bb yy rr br gg gr rb Gr rg yR ry yy gY br yB Rg gB gg gG
8y  + 1Y =  9
9r  + 3R = 12 
14g + 2G = 16
7b  + 2B =  9
}}
It seemed like I had to work on this particular stage for a very long time before I was able to quickly defeat Hsien-Ko (Seriously, I have no idea how a native English speaker is supposed to know how to pronounce that name). I let Hsien-Ko (Hiss'in'n Ko?) send over a fairly large attack to give me more gems to work with - more gems means I can make a bigger attack faster, which is a good thing. I'm able to make a massive power gem (but not too massive, as I want to avoid fighting Devilot to save time and avoiding making a power gem of size 20 or larger is the easiest way to do that). In the end, Hsien-Ko (Sign-Co?) gets obliterated by the destruction of a rather large power gem followed by a chain reaction - say good-bye to Hsien-Ko (Cinco? I'm clearly bad at this).

Round 7 (Sakura) drop order

bY yG gy gg gb bY rg yy rr rr rB bg gg gB gB bb gy rr Rr ry GR bR gr YB yD
7y  + 3Y = 10
11r + 3R = 14 
12g + 2G = 14
7b  + 4B = 11
}}
Ah, Sakura - this fight turned out to be one of my favorites, but I had to re-do this fight a dozen times to get something I was happy with. All of the drop orders were especially bad and I just couldn't find one I was happy with. I probably put 12 hours of testing different drop orders and different techniques into this round alone. This fight starts out looking like a bit of a mess, but by using yellow gems to separate crash gems from power gems of the same color I'm able to set up a sizable attack. Of course, by the time I get everything lined up where I need it I've literally filled the center all the way to the top, which ends with an impressive finish. The "DANGER" warning gets as high as 92 blocks sent, although I think it's actually a larger attack than that. Needless to say, the bratty schoolgirl is done in with one of the largest finishes in the run.

Round 8 (Felicia) drop order

gB yg gy gr ry yy ry rr rY gr rY gy rY Gy rG Yr gy bG rg rY Gy Br yb rB yD
12y + 5Y = 17 
15r + 0R = 15
8g  + 4G = 12
2b  + 3B =  5
}}
Felicia is just plain weird, but setting up a decent chain reaction initially fueled by a rather large diamond burst finishes her off in a quite ordinary looking way, as far as a typical fight in this game is concerned. I say all this, but the honest truth is I spent over 6 hours working on a fight that at the end I still wasn't completely satisfied with, only to have FBA corrupt my movie file yet again which wiped out the entire fight, permanently. I struggled through another round that had even worse results, only to finish it and accidentally load an earlier state in read+write mode, then fatfinger loading a different state in read-only mode that was beyond the then-current movie, at which point it truncated everything to the beginning of the Felicia round again and I nearly quit in frustration. Imagine my surprise when my third attempt was faster than either of the first two attempts through sheer dumb luck of getting a better drop order. Do take note of the odd positioning of the last pair that appears, however, it'll come in important very soon.

Round 9 (Da.. I mean, Akuma) drop order

gg gb rY rr yb rr rr bb bb bb gg bG gg rr Yb rG ry RB
2y  + 2Y =  4
11r + 1R = 12
7g  + 2G =  9
10b + 1B = 11
}}
After a quite amusing entrance Akuma appears, and Akuma is less than pleasant. Not only does Akuma have the most evil counter gem attack pattern in the game, we're facing him on Hard mode. He literally drops blocks at "perfect" speeds, although he occasionally rotates them as they come down which does slow things down just enough for me to get the upper hand. I tried any number of attempts at the end of Felicia's stage to generate this quite amazing drop sequence, and by "any number of attempts" I mean 1 attempt (that is to say, I finished the level then went back and rotated the yellow crash block once). That's right, this incredibly crazy drop pattern was the first manipulation attempt, and couldn't have been more perfect. It still took quite a bit of testing to figure out how to end the input as early as I do, however. The primary tactic is sending over just enough damage to counteract gems that would mess up exploding both red and blue power gems at the same time. When he does send a few counter gems over I manipulate them into falling in harmless areas, and near the end I taunt Akuma (in a replacement file I created after submission) and drop a bomb on him. The game is nice enough to auto-advance past the summary and even the name entry so after setting up a big enough attack I simply rotate the pair of crash gems at the end into the right location and end input.

Emulator notes

I could write an entire diatribe on everything that fba-rr-007 did against me but I'll spare you the gritty details. Needless to say, FBA (or at least the rerecording version) is *very* unstable and loves to pass on guru meditation messages (memory search, I'm looking at you!). There are funky quirks, such as disabling the current savestate load and save functions when working with a movie (I bound them to a set slot and worked around it). Lua scripting is effectively broken if you want to do anything other than displaying stuff on the screen, although I was able to create an input-modules.lua file specific to spf2t. My very first run through the game was destroyed by an issue where I created and later loaded a savestate at the first frame and unless I loaded that savestate the movie wouldn't sync. One of the bugs I discovered turned out to be very handy, however - disabling audio disables the ability to use turbo and makes frame advance advance two frames at a time, holding buttons down in the process. For this particular game, that was actually a huge benefit as there is always plenty of time to move gems before they fall so I actually ran through a substantial part of the game in that state.

Other comments and potential improvements

This was both fun and frustrating to work on. On the one hand, this process is quite possibly one of the most unique puzzles I've ever worked on in the sense that I was often trying to find a way to set up chain reactions or otherwise amass power gems and taking the list of upcoming gems and figuring out the best thing to do was often quite tricky. On the other hand, the infinite number of potential gem drop orders you can sort through is maddening - will *this* series of gems produce a faster result than the last one? Who knows! Spend a few hours trying to get one to be just a second faster, give up in frustration, try another drop order and destroy the enemy in no time flat, hope to get the same luck on the next round and fail, lather, rinse, repeat. Needless to say, I am in no way deluding myself into believing that this is completely perfect because to make it perfect would require botting and knowing where certain things reside in memory, both of which are literally impossible in this emulator. I encourage anyone who wants to to obsolete this run in the future - assuming some of the annoyances of the emulator are resolved you might find it to be an enjoyable process of puzzling over the best solutions.

Thanks

I'd like to say thanks to zid who helped me diagnose the brokenness that is Lua support in this emulator and to Raelcun, Invariel, and everyone else on IRC who kept me in good spirits during the low points of the run. Enjoy!

ars4326: Judging!
ars4326: Updated movie file. Previous time: 07:08.18 (25691 frames). Current time: 07:08.15 (25689 frames).
ars4326: Hi again, dwangoAC. Overall, this was a fun watch. Observing the steadily incrementing combo setups were entertaining, along with some of the more humorous opponent defeats (e.g. Sakura and Akuma). From a tech quality standpoint, it was also very noteworthy in how much time you invested into the run (both individual stages and overall), as well as documenting how unforgiving the RNG was. Impressive work!
Accepting for publication to Moons!
fsvgm777: Processing.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15577
Location: 127.0.0.1
This topic is for the purpose of discussing #4830: dwangoAC's Arcade Super Puzzle Fighter II Turbo in 07:08.15
Joined: 7/2/2007
Posts: 3960
Wow, that's an evil RNG indeed. I enjoyed the run; thanks for making it! However, isn't there a secret boss that you should probably fight? This video shows a fight with Devilot.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Moderator, Senior Ambassador, Experienced player (907)
Joined: 9/14/2008
Posts: 1014
Derakon wrote:
Wow, that's an evil RNG indeed. I enjoyed the run; thanks for making it! However, isn't there a secret boss that you should probably fight? This video shows a fight with Devilot.
Yes, but that would have made the run longer, and her attack pattern is just a mirror of Akuma's. Also, it requires getting a 20 gem or larger power gem, which isn't a fast process in and of itself (I met all other requirements). I seriously considered doing it anyway but opted to end input early instead.
I was laid off in May 2023 and became too ill to work this year and could use support via Patreon or onetime donations as work on TASBot Re: and TASBot HD is stalled. I'm dwangoAC, TASVideos Senior Ambassador and BDFL of the TASBot community; when healthy, I post TAS content on YouTube.com/dwangoAC based on livestreams from Twitch.tv/dwangoAC.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4043
Great job, love this game. My favourite was the match against Sakura, where it looked like you were about to die then suddenly win. This would be a great game for a TAS vs TAS playaround match (probably wait on that until the emulation is better, of course).
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Joined: 1/27/2014
Posts: 181
Great TAS! Ending input early too.
Player (58)
Joined: 8/22/2015
Posts: 73
Is it bad that watching this made me wish I still had my copy of Pocket Fighter (Super Gem Fighter) for playstation? Was a good watch, though.
Experienced player (690)
Joined: 2/5/2012
Posts: 1795
Location: Brasil
did u avoid devilot?
I want all good TAS inside TASvideos, it's my motto. TAS i'm interested: Megaman series, specially the RPGs! Where is the mmbn1 all chips TAS we deserve? Where is the Command Mission TAS? i'm slowly moving away from TASing fighting games for speed, maybe it's time to start finding some entertainment value in TASing.
Post subject: Avoiding Devilot was deliberate
Moderator, Senior Ambassador, Experienced player (907)
Joined: 9/14/2008
Posts: 1014
grassini wrote:
did u avoid devilot?
Yes, I deliberately avoided that fight to save time. To reach Devilot you have to do all of the following things:
  • Finish at least 1 round under 60 seconds.
  • Create a Chain Reaction of 4 or higher.
  • Complete at least 1 round with a Super Finish (30+ Counter Blocks).
  • Your biggest Power Gem must consist of 20 Gems or higher.
To avoid fighting Devilot I needed to not do at least one of the things on the list above. I wanted to finish the game as fast as possible, so ensuring I always took longer than 60 seconds on every round was clearly detrimental to that plan. One of the best ways to send a lot of counter gems is to make crazy long chains, so that was out. I want to actually defeat the opponents and not just chip away at them at the end, so avoiding a Super Finish wasn't ideal. But the last one was fairly easy - a power gem consisting of 20 gems is pretty big, and if you do the math on the distribution of gem colors most of the levels simply don't have enough of one color to make a power gem that large unless a fight involves the enemy sending a lot of counter blocks early on, so I simply kept the power gem size below that threshold. As you can see, this actually took some thought. :) Take note that I'm behind on updating the submission text but I hope to get to it soon. Thanks for the feedback, all!
I was laid off in May 2023 and became too ill to work this year and could use support via Patreon or onetime donations as work on TASBot Re: and TASBot HD is stalled. I'm dwangoAC, TASVideos Senior Ambassador and BDFL of the TASBot community; when healthy, I post TAS content on YouTube.com/dwangoAC based on livestreams from Twitch.tv/dwangoAC.
Mitjitsu
He/Him
Banned User
Joined: 4/24/2006
Posts: 2997
Sakura was definitely the highlight. I'm not surprised by the nature of the RNG, it's exactly how I expected it to work. I think it would have been better to fight Devilot. Even though it might be the same as Akuma, because it would make the rounds previous to it more exciting.
Joined: 6/24/2007
Posts: 119
Nice, too bad rebalanced Chun Li could not be used, attack 120% Would it be faster to manipulate two oo gems to hit two 3x2 gems at one go than doing four chain? Is the diamond glitch real? http://www.sirlin.net/articles/balancing-puzzle-fighter In the original game, the diamond was intended to deal only 50% of the damage you’d do by breaking the same pieces without the diamond. However, there was a glitch that allowed you to bypass this and deal 100% of the damage. In order to perform this “diamond trick,” you must first find a place on your playfield where you can rotate your diamond-piece 180 degrees with just one button press (rather than the usual two presses).
Moderator, Senior Ambassador, Experienced player (907)
Joined: 9/14/2008
Posts: 1014
flashthe wrote:
Nice, too bad rebalanced Chun Li could not be used, attack 120% Would it be faster to manipulate two oo gems to hit two 3x2 gems at one go than doing four chain? Is the diamond glitch real? http://www.sirlin.net/articles/balancing-puzzle-fighter In the original game, the diamond was intended to deal only 50% of the damage you’d do by breaking the same pieces without the diamond. However, there was a glitch that allowed you to bypass this and deal 100% of the damage. In order to perform this “diamond trick,” you must first find a place on your playfield where you can rotate your diamond-piece 180 degrees with just one button press (rather than the usual two presses).
I still haven't fixed the formatting and written the level-by-level comments but in brief, I've usually defeated the enemy by the time the diamond drops, and when I do use the diamond, I generally have enough already that I don't really need anything extra; I think there's a place where the diamond in one level can't rotate, I'll go back through and double-check, but I don't think it has a material impact. Thanks for the note!
I was laid off in May 2023 and became too ill to work this year and could use support via Patreon or onetime donations as work on TASBot Re: and TASBot HD is stalled. I'm dwangoAC, TASVideos Senior Ambassador and BDFL of the TASBot community; when healthy, I post TAS content on YouTube.com/dwangoAC based on livestreams from Twitch.tv/dwangoAC.
Post subject: Added taunting by request, saved 3 frames in the process
Moderator, Senior Ambassador, Experienced player (907)
Joined: 9/14/2008
Posts: 1014
TL;DR: Submission handlers, please substitute this movie that is 3 frames faster and has a taunt during the last fight. So a few people have asked me why I didn't taunt the opponent and the honest answer is I was so focused on just getting FBA to not crash or desync my movie that it wasn't really a priority. Well, I braved FBA again and while it didn't crash it did desync on me so adding taunting took the better part of an hour. The upshot is I saved 3 frames in the process after taunting Akuma late in the game and discovering a faster method of moving the last pair of crash gems. The downside is someone has to encode this again. I don't know as if the changes warrant a pre-publication encode, though - honestly, the taunt is pretty weak in my opinion but it's the best one that I could do without going back through a much larger portion of the game which I'm not particularly inclined to do. :) At any rate, enjoy!
I was laid off in May 2023 and became too ill to work this year and could use support via Patreon or onetime donations as work on TASBot Re: and TASBot HD is stalled. I'm dwangoAC, TASVideos Senior Ambassador and BDFL of the TASBot community; when healthy, I post TAS content on YouTube.com/dwangoAC based on livestreams from Twitch.tv/dwangoAC.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15577
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [2955] Arcade Super Puzzle Fighter II Turbo by dwangoAC in 07:08.15
Emulator Coder
Joined: 3/9/2004
Posts: 4588
Location: In his lab studying psychology to find new ways to torture TASers and forumers
I just found this TAS while looking through the voting options for the awards for this past year. Excellent TAS, easily one of my favorite of the year.
Warning: Opinions expressed by Nach or others in this post do not necessarily reflect the views, opinions, or position of Nach himself on the matter(s) being discussed therein.