正月から打ち込んでいたプログラムが打ち終わったのでご紹介。今年一本目は1986年頃のポプコムに掲載された「UNCHANMAN」です。
主人公ウンチャンマンを操り、魔王ドクソクサイをやっつけに行くという内容で、一対一のタイマン勝負で敵と戦っていくアクションゲームです。
名前のとおり、ウンチャンマンはウンコのような姿をしています。剣で斬りつけるほか、敵の頭上にウンコを落とす「うんタラ」爆撃という、見たままそのままの攻撃が可能です。
作者さんは、当時小学校から中学校に上がったばかりした。ゲームデザインには、いかにもその年頃のガキんちょが好きそうな下品さが、そこはかとなく盛り込まれています*1。
ゲーム自体は技術の稚拙さやゲーム設計のまずさ、バランスの厳しさゆえ、まともに遊ぶのが難しいほど(おい)。まぁ、名実ともに「クソゲー」といったところでしょうか。今風に言うならば、作者は「バカゲー」を目指していたのだと思います。
雑誌に載った紹介文によれば、作者はキャラクターどうしの当たり判定をどう組むかで苦労したようです。本作のリストを読むと、その苦闘の跡が伺えます*2。
ちょっと技術的な話になりますが、MSXにはON SPRITE GOSUBという命令があります。2枚のスプライトがぶつかった場合、割り込み処理に飛ばすというものなのですが、本作では当たり判定にこのON SPRITE GOSUBを使っています。
一見便利そうなこの命令ですが、割り込み処理を発生させるスプライトは任意に指定できない、つまりどのキャラクターとどのキャラクターがぶつかったかを判定することはできません。そのため例えば「自機の放った弾が敵にぶつかった」「自機と敵機が衝突した」ということを区別できないので、ゲームプログラミングではいまひとつ使えません。
しかし本作では、ウンチャンマンのアクションごとに割り込み処理の行き先を変えることで、その問題を解決しています。
たとえば剣を振っている最中にスプライト割り込みが発生すれば、敵がやられる処理に、うんタラ爆撃中だったらうんタラダメージ処理に、それ以外ならウンチャンマンやられ処理にといった具合。
確かによく考えて工夫したつくりではあるのですが、挙動はけっこう大雑把*3。ON SPRITE GOSUBできちんとした当たり判定処理を組むのはやはり限界があるといったところでしょうか。