Category Archives: fighting games

For IaMP Advent Calender 2014:

So the Japanese IaMP community is holding an event for the month of the game’s ten year anniversary, asking community members to write articles for it. I was asked to do it, and it sounded like a good idea, so here I am. This article is going to be about my personal history with the game, the history of Mizuumi’s #iamp, and the reasons behind RollCaster.


While I’m not especially good at Japanese, I intend for this to be translated, so I’m keeping the language simple and stiff. Please be patient with me, thank you.


Personal history with the series and game:

Way back in 2004 I was looking for interesting games to play, and I found out about the web trial for Imperishable Night so I thought I’d give it a try. Immediately became hooked on it and then looked at other Touhou-related games, including eventually IaMP in 2005. Played single player a lot, but didn’t do much more than mash royal flare with Patchouli. Watched some Japanese replays, but having had no one to play it with, I put it away.


Three years later, in mid-2007, I was on a fighting game high and was looking for interesting games with online play. By chance I found the famous Ric vs Aruhori match video, which led me to the Mizuumi wiki and discovering th075Caster’s existence. Deciding it was worth giving a serious try this time, I practiced offline with Yuyuko for a week, then joined #iamp and been there ever since. Switched to Reimu the next month, who I still main. Really enjoyed watching and studying Sekibun’s Reimu play.


I wanted more features in th075Caster, so I took the freely available source code and created CowCaster. I added automatic delay calculation, custom color palettes, a pretty junky training mode, and other nice functions. The automatic replay saving and spellcard hiding had come from another developer. This eventually became the base for RollCaster.


And somehow I still play it occasionally. It’s a fun game, and the biggest draw for me is that it’s different enough from everything else that there is literally nothing else like it. I didn’t like the direction that was taken with later games, so I didn’t follow along to them, opting to stay back with IaMP.


English-speaking community, history, now, etc:

In 2006, the host of Mizuumi, bellreisa(@waitingintheair), added an IRC channel, #iamp, and a wiki to help create an IaMP community. Most of the players who came were fans of Touhou or anime games originally, and not generally fighting games as a whole. Despite that, it’s a place for serious fighting game players, and most casual Touhou fans did not stay long.

2006年にはMizuumiの管理者(bellreisa, @waitingintheair)は萃夢想コミュを作るためにIRCのch( #iamp)とwikiを作りました。 大半の新しいプレイヤーは元々東方やアニメファンで普段は格闘ゲーム自体をやっていません。そのため、真面目な試合を求めるプレイヤーが集まった場所だからカジュアルファンはすぐ出て行きます。

We spent years obsessing over Japanese information sites and replays, learning from anything we could find, though at that time Japanese language knowledge is not common and we had to figure out much of it ourselves. I’ve only recently learned Japanese myself, and only a couple others knew it well. Most translations had been done with machine assistance.


Because we had relatively few players, this enthusiasm for the game carried our playing and drive to improve, but not all characters had been well represented. For example, we had many strong Youmu players, but few to no Suikas. I still don’t know how to fight a good Suika player! More than technical expertise, this has been our biggest weakness, but becoming able to play outside communities with RollCaster helped us overcome a lot of it.

プレイヤーが少ないから、萃夢想に熱心でよく頑張ったけれど、すべてのキャラに使い手がいませんでした。例えば、強い妖夢使いがたくさんいましたが、萃香使いはあまりいませんでした。私はまだに強い萃香使い人と全然上手く戦えない! 技術よりそれが一番の弱点ですけど、RollCasterで他のコミュとプレイ出来るようになったおかげで、たくさんの問題を乗り越えました。

Our notable players: Reimu(mauve, Armando, Chiyou, Kura), Marisa(Comic-Z, hourai, Pdee, bellreisa, Kura), Sakuya(Malty, Zed, bellreisa, Armando), Alice(TMN, mauve, bellreisa), Patchouli(Zed, Shy, Armando), Youmu(ZomB, Baco, hourai, DeuS, satsu, Chiyou), Remilia(mauve, ZomB, Pdee), Yuyuko(mauve, bellreisa), Yukari(mauve, Pdee, sphyra), Suika(Pdee, bellreisa), Meiling(hourai). Apologies to anyone I forgot.

キャラごとの要注意プレイヤー: 霊夢(mauve, Armando, Chiyou, Kura), 魔理沙(Comic-Z, hourai, Pdee, bellreisa, Kura), 昨夜(Malty, Zed, bellreisa, Armando), アリス(TMN, mauve, bellreisa), パチュリー(Zed, Shy, Armando), 妖夢(ZomB, Baco, hourai, DeuS, satsu, Chiyou), レミリア(mauve, ZomB, Pdee), 幽々子(mauve, bellreisa), 紫(mauve, Pdee, sphyra), 萃香(Pdee, bellreisa), 美鈴(hourai)。書き忘れた人がいたらすみません。

Even at the community’s peak, offline play was not common. America is huge, players are far apart, and fighting game events often require major travel planning. And as most of the players were primarily netplayers, they weren’t used to traveling to events. There’s always a few people playing it at NEC or Evo, but never a serious offline tournament.


Nowadays, there are far more fighting games with good netplay and easily available to everyone, and most players have moved on to other games. Even then, in #iamp, you can usually still get a match if you ask, so please come by sometime if you want to play. Japanese is fine!

現代は良いネット対戦機能がある格闘ゲームが誰でもできるようになって、大半のプレイヤーが他のゲームに行きました。 それでも#iampで質問と試合ができますので、萃夢想をやりたい時は是非来てください。日本語でも良い!


In late 2006, a new network model for fighting games was created, which to enabled lagless inputs by rewinding the game for the opponent’s actions. Compared to the input delay methods that had come before it was completely different, and immediately popular with fighting game players. I created RollCaster to support the same with IaMP. Since then, Fireseal has also added rollbacks to EFZ and Hisoutensoku.


By 2009, #iamp’s average skill level had risen enough that 4~5 input delay was no longer acceptable to many players, which split us into small islands which did not want to play each other anymore. I had given thought to adding rollbacks, even writing design plans, but was not yet sufficiently motivated. Then, one fateful day, in a 5-delay match against Baco’s Youmu, an impossible counterhit elbow broke my spirit. Ragecoding ensued. Two weeks later, we had a playable, but buggy version. Two months after that, it was stable enough to play, and everyone had switched over.


Everyone’s level of play immediately improved drastically, and delay from distance was less of a concern. I could even do my combos! Additionally we could play Japan more easily and frequently, giving us a pool of players that we previously couldn’t play with reliably. Without this upgrade, I don’t think #iamp would still exist.

皆が即上手くなっていきまして、遠く離れた地域との対戦でも遅延が気にならなくなりました。私はコンボができるようになった! さらに私達が日本と手軽に戦える、以前は試合出来ない人とも試合ができるようになりました。ロールをつくらなかったら今の#iampは存在しなかったと思います。

I’m really happy that Roll has also taken hold in Japan, and that Weltail added a version with support for the Japanese netplay lobby. Good netplay benefits everyone! There are parts of RollCaster I’m not thrilled with, but I think it’s plenty good enough.

ロールが日本に拡散したことと、ウェルテルさんがロビー対応版ロールを作られたのはとても嬉しいです。良いネット環境は皆に良い事です! ロールキャスターは細かい部分に不満が残りますが、結構充分だと思います。

If there is interest in a detailed technical article on how rollback netplay works, and people willing to help translate to Japanese, I can write one. However, it would be too long to include here.



I don’t play much lately, but I still enjoy IaMP, and if you’d like a match, you can ask me either on IRC or on Twitter at @mauvecow or @mauvejp. Thanks for the good times; I’ll definitely be back for the next fighting game I enjoy, count on it. (But I’m not playing anything without rollbacks again, even if I have to make them myself!)


Special thanks to Toho(@tohololovitch) for proofreading the Japanese text!


Understanding Fighting Game Networking

So earlier today I was talking with Zinac about timing and synchronization issues in fighting games. More specifically, the cases that need to be handled with respect to packet loss and frame loss. These are actually very different things!

Then it occurred to me that I haven’t actually written an article on how fighting game netplay really works at a nuts and bolts level, and so here we are.

Read more »

How I didn’t clip the sound effects.

As a certain recently released fighting game added rollbacks and then completely screwed up the ability to handle sound effects, I think now’s a good time to go over how RollCaster‘s sound engine works.

Before I get in on it, I want to get something out of the way though. This process is not in any way CPU intensive and anyone claiming this sort of thing would be hugely draining on a computer’s resources just so happens to be full of crap.

The case of doing this in a modern game that is being run directly on the native system is often somewhat different from the case of an emulator running an old game, so GGPO itself is not perfectly applicable here. Namely, you have to deal with the sound APIs instead of just saving the state of everything, which is a somewhat more complicated affair.

Alright! So, with that done, let’s phrase the problem here.

Read more »

Investigating RollCaster’s Timing Issues

After finishing the desync fix I thought I had finally finished. Shortly after, a few Japanese guys tried it out and got back to me that the timing was unstable, causing the frame rate to jitter unnecessarily.

Sure, I thought, it can’t be that hard to fix.

This started a very long process which led me all over the codebase, analyzing every last part of the process involved in it, for over a month. I’m sure nearly everyone who put up with me begging for testing and putting out updates is sick of me by now!

Read more »

Investigating RollCaster’s Desyncs

So RollCaster has had a long-standing desync issue. This is a pretty minor thing as far as the Western player base is concerned, since the community don’t have a lot of players and it happens infrequently enough that it’s more a nuisance than anything else. They probably thought I was mad for attempting to fix it.

If I wasn’t before, I sure went mad trying!

I was moderately successful, and I’m not sure it’s even possible to be truly 100% on this one so I’m not going to worry about it too much. Instead I’ll discuss the origin, strategy used for finding it, the results, and a ridiculous case of coincidence that popped up.

Read more »