Virtua Fighter

A landmark work that truly exemplified Sega’s leadership in the arcade space, the first true 3D CG fighter, Virtua Fighter.
The impact the game had on the Japanese arcade scene really can’t be overstated, and it’s sequel would be one of the Saturn’s killer apps that moved console sales.
Looking in to the game’s data felt like treading on holy ground, but the end result was worth it… and I think even long-time, hardcode fans of the game will be surprised by some of what was found.
Supplemental Sources
Virtua Fighter - The Beginning - a fan disc full of rare materials, many of which are from the internal VF team.
VIRTUA FIGHTER MANIAX - though primarily serving as a strategy guide and documentation of the vibrant VF scene in Japan, it also has a substantial section on early development.
Virtua Fighter History/VF4 - Bonus disc included with the first-press edition of Shenmue 2. Includes a couple video clips of some very early VF tests.
Video Game no Kataribe-tachi
Gamest #117
Development and Design History
There is a rather surprising amount of information and materials from the earliest era of Virtua Fighter’s existence all the way through to its release. That there has been so much retrospective speaks to the massive importance of the series to fighting game culture and the sizable impact it had on that scene in Japan. We’re going to try to sift through these materials and try to understand the evolution of the game’s development.
There are only a handful of exact dates we can pin down. The rest is informed conjecture and best guesses. We know the earliest tests and planning began around the time Virtua Racing was wrapping up, sometime in mid-1992; the game was completed and on sale in December 1993. That is a remarkably fast timeline for such a pioneering game.
We’ll start with the earliest roots of the game, the importance of motion to gameplay, the original design philosophy, and the sharp turn the game made in it’s final months of production.
The Virtua Racing Pit Crew
It’s probably no great shock to say that Virtua Racing is the direct ancestor of Virtua Fighter. There are a handful of graphics and several dangling bits of code from VR that ended up left over (which we’ll discuss later), but that is incidental. The true lineage of Virtua Fighter begins inside Virtua Racing itself.
ドライブには使えなかったけど格闘ゲームには使えるだろうとか、格闘には使えなかったけどシューティングには使えるだろうとかいうものがチョロチョロ出てくるんですよ。さらにやっていくと、これを使えば次はこんなのができるなっていう種ができるんです。種をもうちょっと確実にしたいっていうときに、その前に発売するゲームの中で種を少し大きくするような遊びをしたりすることがあるんですよ。バーチャレーシングのピットの人たちがそう。あの人たちを動かしたら結構面白かったんで、もうちょっと動かす練習をそこですることで確実に格闘ができるって確信したんです。そんな感じで作ってましたね。
…
[During a project’s development,] you start to see things pop up here and there, like, “we can’t use it for a driving game, but maybe it’ll work for a fighting game,” or “we can’t use it for a fighting game, but maybe it’ll work for a shooter.” And as things progress, you get “seeds”: if we use this, next time we can do something like that. And if we want to see the potential of one of those seeds, we’ll play around with it a bit in a game that is going to be released, to help it grow larger. The people of the pit crew in Virtua Racing were exactly that. Animating those people turned out to be quite interesting, so by using that to practice animating a bit more, I became convinced we could definitely do a fighting game. That’s the sort of way we were working.
- SUZUKI Yū, Gamest #117, p.132
まずは人間がちゃんとあのハードで動かせるのかということを、密かに『V.R.』のピットクルーで試してみたんです(笑)。『V.R.』のゲーム中では、11人のピットクルーを同時に動かせたんですが、この時点で『よし、CGで格闘ゲームは作れる!』と確信し、『V.R.』の作業終了後にゴーサインが出たわけです。
…
First we secretly tested whether humans could move properly on that hardware, using V.R.’s pit crew (laughs). In V.R. we could move 11 pit-crew members at once, and at that point I was convinced: “right, we can make a fighting game in CG.” The go-ahead came after work on V.R. finished.
- SUZUKI Yū, Beep! MD 1993 November, p.
In other words, when you see the pit crew, the race queens, and the other humans in the game, you are seeing the earliest prototype of Virtua Fighter. And they survived, to some extent, to the final version of the game:

Both games have the same 16 elements to their body, with identical indexing. In other words, though the meshes became more detailed and the motions more fluid, the structural composition remained unchanged all the way to the final product.
(The hands in Virtua Fighter to not articulated; instead any hand animations are achieved by replacing the entire hand mesh for each keyframe.)
Ishii Seiichi, the lone 3DCG designer on Racing and later the project lead for Fighter, also commented on the “extra curricular” animation work during VR’s development:
3DCGデザイナーは自分しかいなかったので、裕さんの直属でした。そのおかげで『バーチャレーシング』ができるまで、ゲーム作りに関していろいろ学ぶことができましたし、それは今でもすごい財産になっていると思います。
…
I was the only 3DCG designer, so I reported directly to Yu. Thanks to that I learned a lot about game making up to the completion of Virtua Racing, and it’s still a huge asset to me.
- ISHII Seiichi, Video Game no Kataribe-tachi, p.34
余談ですが、『バーチャレーシング』の開発中、モーションの研究として映画『酔拳』に登場するジャッキー・チェンの動きをトレースしたことがありました。その時はまさか自分が3DCG対戦格闘ゲームに関わるとは思っていませんでしたが……
…
As an aside, during Virtua Racing’s development I once traced Jackie Chan’s movements from the film Drunken Master as motion research. At the time I never imagined I’d end up working on a 3DCG fighting game…
- ISHII Seiichi, Video Game no Kataribe-tachi, p.38
While not stated directly, his direct-report status and his role as the only 3D artist means it’s probable that Ishii’s kung fu movie tracing was done with Suzuki’s knowledge and perhaps even at his behest.
In Summer 1992, as the development on VR was starting to wrap up, Suzuki Yū appeared on NHK’s four part series looking at virtual reality and the future of video games, where he showed off the as-yet-unreleased Virtua Racing and had this to say about its naming:

短縮形が常用されてる日本だと、「バーチャル」でバーチャルリアリティまで行っちゃいますからいいんだけど、アメリカの場合は「バーチャルレーシング」だと変な意味になっちゃって。この際ですね、どうせわけ分かんないんだったら、Lを取ってですね。セガとしてですね、これからバーチャルリアリティを意味する言葉として「バーチャ」。バーチャ…バーチャレーシングとか、バーチャバトラーとか、なんかいろいろ「バーチャシリーズ」とかいう形で持っていければと思ってるんですよね。これから新しいマーケットとか、バーチャル関係のものはですね、一つの流れになると思いますね、僕は。なるような気がするんですよ。大きな体感シリーズみたいな一つの流れに、セガでなっていければと思いますね。
…
In Japan, where abbreviations are in everyday use, saying ‘virtual’ alone takes you all the way to ‘virtual reality’, so that’s fine. But in America, ‘Virtual Racing’ takes on an odd meaning. So this time — if nobody’s going to understand it anyway — we drop the L. For Sega, from now on, the word that means virtual reality will be ‘Virtua’. Virtua Racing, Virtua Battler, all sorts — I’d like to carry it forward as a ‘Virtua series’. I think the new market, things to do with virtual, will become a trend of its own. I have that feeling. I’d like it to become one stream at Sega, like the big taikan series.
- SUZUKI Yū, NHK BS Natsuyasumi Special: Kasōgenjitsu Yūgi Taisen - Episode 2, 46:07
Whether the title was not fully decided or whether Suzuki was just being coy we can’t say, but name-dropping a “battle” game as part of a new Virtua series was subtle clue of what was on his mind, I think.
Probably around this same time, Suzuki Yū brought a video tape to the office of managing director Suzuki Hisashi, saying, “This is just something were messing around with, but…”
ビデオテープが回ると、『バーチャレーシング』のピットクルーが出てきたんだが、その動きはゲーム中にはなかった、独自のものだったんだ。人型モデルの関節を動かすデモだったんだ。『バーチャファイター』の原型だよ。 … 3DCGで人間を動かせるはずがない、できると考えるほうがおかしい、そう言われる時代に、裕はやりたいと言ってきた。それがアイツのすごいところなんだ。
…
When the tape rolled, Virtua Racing’s pit crew came out — but their movements weren’t anything in the game; they were original. It was a demo moving the joints of a humanoid model. The origin of Virtua Fighter. … In an era when people said you couldn’t possibly move humans in 3DCG, that it was crazy to think you could, Yu came to me saying he wanted to do it. That’s what’s so amazing about him.
- SUZUKI Hisashi, Video Game no Kataribe-tachi, p.142, 144
What exactly was on the tape that Suzuki H. saw is unclear. Perhaps it was the “secret tests” that Suzuki Y. spoke of; maybe it was the Jackie Chan animation Ishiii did; or perhaps something entirely different. (There’s some more speculation on this in the Demo Reels section below.)
Whatever it was, Suzuki felt the animation was good enough to show to his superiors. Virtua Fighter got the greenlight after Racing was released, likely due to that game’s overwhelming success.
Improving the Motions
As the 3D designer on Racing, Ishii knew firsthand that the methods used for the human motion in VR were too primitive for the level of realism the new project was aiming for.
ピットクルーのモーションは、ポーズを数フレームごとに登録し、その間にあるフレームを補完する手法で作りました。それだと、『バーチャファイター』に必要なリアリティのあるモーションはできないと思ったんです。 … 『バーチャファイター』のようなリアルな動きに基づくゲームを作るためには、従来の2Dゲームの方法論とは違ったやり方が必要で、それを模索し、悩んでいました。また、それと並行して、モーションデザインに対する自信のようなものも生まれていたんです。 そんなとき『CGデザイナーやプログラマーが納得する対戦格闘のモーションを作ってしまえば、何かが大きく変わるかもしれない。最初の一歩、ゲームの方向性を決めるものになるのではないか』と思い至ったんです。自転車に乗っての帰宅中だったので、『明日、会社に行ったら自分でモーションを作ってみよう』と決めました
…
The pit crew’s motion was made by registering a pose every few frames and interpolating the frames in between. That way, I didn’t think you could get the realistic motion Virtua Fighter needed. … To make a game based on realistic movement like Virtua Fighter, you needed a method different from 2D game methodology, and I was searching for it and agonising. In parallel, something like confidence in motion design had grown in me. Then it came to me: ‘If I just make fighting motion that the CG designers and programmers accept, maybe something big will change. Couldn’t that be the first step — the thing that decides the game’s direction?’ I was cycling home at the time, so I decided: ‘Tomorrow,when I get to work, I’ll try making the motion myself.’
- ISHII Seiichi, Video Game no Kataribe-tachi, p.38
Earlier in the same chapter, he explained that he had always been interested in martial arts, with his father being a karate practitioner and having done some judo and kendo himself. He also read all sorts of martial arts manga like Karate Baka Ichidai, Kenji, and, like pretty much every boy in Japan, Dragon Ball.
So he had a good idea of what he wanted to see when he sat down in the morning to animate a 3D high kick. He was done before lunch.
ハイキックが3時間でできたから、1日にいくつかのモーションを作ることだってできる、その気になれば全部自分でできるのではないか、と思いました。 そこから数日で最低限必要な基本のモーションを作り、シリコングラフィックスのIndigoで動くプロトタイプとして完成させました。ここで作られた基本モーションは、製品版でも変わっていません。 そのスピードで作れたのは、インバースキネマティックで人体の動きを研究していたことが大きかったと思います。元々あった知識を増幅できる方法を思いついたという感じで、自分の能力を表現する手段を見つけたような気がしました。
…
The high kick took three hours, so I thought I could make several motions a day — that if I set my mind to it, I could do all of it myself. Over the next few days I made the minimum set of basic motions and finished it as a prototype running on a Silicon Graphics Indigo. The basic motions made there are unchanged in the retail version. I think what let me work that fast was that I’d been studying human movement with inverse kinematics. It felt like I’d hit on a way to amplify knowledge I already had — like I’d found a means of expressing my ability.
- ISHII Seiichi, Video Game no Kataribe-tachi, pp.39-40
Inverse kinematics is a way of animating a jointed figure from the outside in. With forward kinematics, the animator rotates each joint in turn, shoulder then elbow then wrist, for example, to get the hand where they want it. The inverse, then, has the animator placinf the hand or foot where it should end up and the software works backward to find the joint angles that put it there.
The IK tools in Softimage, which were a relatively new feature at the time, let Ishii animate far faster, and far more easily, than had been possible with Racing’s pit crew. It was an authoring tool only, however: Fighter itself does no IK calculation, and stores its animations as keyframed joint angles that it interpolates during play, just as Racing did.
The demo running on his workstation clearly impressed Suzuki. After seeing it, he assigned Ishii the role of Main Designer/Development Lead for the new game.
Christmas Eve 1992
Work continued on the SGI workstations, with the turning point arriving on Christmas Eve 1992.

Here we have the first signs of an actual fighting game, running within a Softimage output window. Like all the other rare internal materials, this photo comes from the The Beginning disc. The description for the photo says it’s the first time the characters moved with a genuinely human motion, the birth of Virtua Fighter as an actual video game. A better description is probably that is the first time all the animations made so far had come together on a (simulated) fighting game stage with (simulated) health bars.
The two characts on the screen are the lovingly named Blue Fighter and Red Fighter. While we don’t have an image of Red, we do have one of Blue.

This comes from the VF Maniax book, indicating it’s the first test model at about 100 polygons. The Beginning also has the same image, though it has a hand written note at the bottom further indicating it is for the IRIS (likely the IRIS Indigo that Ishii had been working on, or at least the same model).
Now that a solid foundation for the animnation was in place, it was time to turn to the actual gameplay.
Motion and Collision
Under Ishii’s leadership, the core philosophy of the game took shape.
そのときに考えたのは、今までの対戦格闘ゲームとは触り心地が違うものにしようということでした。キャラクターたちがリアルに動き、対戦相手のモーションを見て対応できるもの。その結果として、負けても納得できるようなものです。 … 格闘技ならリングアウトもあるだろうし、その一方で飛び道具系の攻撃は絶対に出すべきではない。**また、私闘ではなく競技として誰が一番強いのかを決めるというコンセプトも必須でした。**何でもありの単なる体力勝負ではないし、なんなら自分の意思でリングアウトできる。このようなリアリティの演出は、譲れない部分だったんです。 『バーチャファイター』はルールに則った競技で、キャラクターは自分と一体である……ということを重要視していました。
…
What I thought then [when appointed the role of lead designer] was to make something that felt different to the touch from fighting games so far: characters move realistically, and you can watch the opponent’s motion and respond. As a result, something where you accept it even when you lose. … If it’s a martial art, there’d be ring-outs; on the other hand, projectile-type attacks absolutely should not be in it. The concept of deciding who is strongest as a competitive sport, not a private brawl, was also essential. It isn’t just an anything-goes contest of stamina — you can even ring yourself out of your own will. That kind of realism was non-negotiable. I put weight on Virtua Fighter being a sport governed by rules, with the character at one with yourself.
- ISHII Seiichi, Video Game no Kataribe-tachi, pp.40-41
His vision for the game was realism: no ki blasts here, just two athletes sparring in a ring to determine who was the champion. For him, it was martial arts in the truest sense and not a street fight with flashy characters and fantastic special attacks.
We’ve seen how important motion was to the game’s development: the movement of the humans in Racing that convinced Suzuki a fighting game was possible, and the smooth and realistic animation that Ishii created that got him the role as lead designer. But the motion was more than just spectacle:
『バーチャファイター』は、モーションそのものがゲームシステムであり、ゲームバランスです。モーションの積み重ねと、そのモーションの効果をスクリプトに記入していくことが、ゲームそのものを作っていくことなんです。 それ以前のゲームは、見た目のグラフィックスとコリジョン(当たり判定)、操作性はそれぞれ別に作るものでした。なので、ビジュアルが完成していなくてもゲームとしては成立しているということがあり得たのです」
…
In Virtua Fighter, the motion itself is the game system and the game balance. Stacking up motions, and writing each motion’s effects into a script — that is making the game itself. In games before that, the visible graphics, the collision (hit detection) and the controls were each made separately. So a game could work as a game even if the visuals weren’t finished.
- ISHII Seiichi, Video Game no Kataribe-tachi, p.37
Unlike the 2D fighters of its time, Virtua Fighter eschewed large, coarse hurtboxes and hitboxes that extended past a fist or foot. Instead it relies on collision volumes: all characters use the same 30 spheres, roughly matching the thickness of each body part, placeed on their underlying skeleton. These spheres must actually meet in order to register a hit.

The collision, then, follows the actual motion of the limbs. And when the collision is the body, much of the rest follows naturally: how far a strike reaches is how far the limb travels, and how fast it lands is how many frames the motion takes to get there.
The game stores no speed, power or defense for any character, and health is a game difficulty setting applying to both players. Everything that separates one fighter from another lives in their movements and the numbers attached to them, like damage, recovery delay, string timing, and knockback. The game is thus balanced by motion and not by character attributes.
(The sole exception to this is that some characters have different skeletons, namely Sarah and Pai with slightly smaller upper bodies, which changes their arm length by a very small amount - but this may have been part of the last minute “characterization” that we’ll talk about later, and not a part of the original design.)
This is what Ishii meant when he said, “the motion itself is the game system and the game balance.” What you see is what actually hits, and that makes the movement the most reliable information on the screen.
Players, Not Characters
To that end, the characters were almost a secondary consideration in the grand scheme of the game’s design. Animations, after all, could be attached to any character with a matching bone structure. The characters were originally little more than “skins” to identify each player while the moveset and action was the same.
場する8人、本当は性格づけする予定はなかったんです。それほど感情移入させなくてもいいと。プレイして爽快感が味わえるくらいまでのものだったんですよね。 … アキラになって闘うのではなくて、サラになって闘えるというものではなくて、自分がパワーアップするんですよね。キャラクターはすごく単純な動きしかないんですよ。個性がないといわれるとそれまでなんだけど、ところがもしウチの開発の誰かがやる。そのやっているところは見せない。でも画面を見るだけで誰がやっているのかというのがわかっちゃうんです。これはウチの開発のアイツだってね。**プレイしている本人がそのまま強くなった形で現れるゲームだったんですよ。**これって面白いなって飛びつきましたね。でもこういうのって宣伝の仕方が難しかったり、わかってもらうにはやってもらうしかなくて。成立させるのが非常に難しかったんですよ。当初はそんな感じでいこうと思っていたんです。 … 本来僕がやりたかったものをいうと、今のバーチャファイターは、「2」であって「1」はプレイヤーがそのまま出るタイプにしようと思っていたんです。
“The eight who appear [in Virtua Fighter] — we actually had no plan to give them characterization. The feeling was that it didn’t need to make you identify with them that much. It was only ever meant to go as far as being exhilarating to play. … Not that you become Akira and fight, not that you can become Sarah and fight — you yourself power up. The characters have only very simple movements. If you say that has no individuality, that’s the end of it — but suppose someone in our development team plays. You don’t get shown them playing. And yet just by watching the screen you can tell who it is that’s playing. That’s so-and-so from our dev team. It was a game in which the person playing appears as themselves, made stronger. I leapt at that as an interesting thing. But with something like this, advertising it is hard, and the only way to get it across is to have people play it. Making it work was extremely difficult. Initially I’d meant to go in that direction. … If I say what I originally wanted to make: the Virtua Fighter that exists now is “2”, and for “1” I had intended a type in which the player comes out as they are.
- SUZUKI Yū, Gamest #117, p.133
In other words, the characters were unimportant. What mattered, originally, was just the players at the joysticks and how well they could control their avatar on the screen.
Between Ishii’s goal of a real-world martial arts competition and Suzuki’s vision of players who “power up” and by becoming the character on the screen, Virtua Fighter was leaning further into sports game territory than any other fighting game up to that point.
June 1993 Build
After the Christmas Eve 1992 initial version, the next hard date we have is a build date June 10th, 1993.
https://www.youtube.com/watch?v=LKkgXf5EMSE
Unsurprisingly, this also comes from the The Beginning disc, which accounts for the abysmally low resolution. Nonetheless, it provides a fascinating look at the game at about halfway through its development.
The most noticeable difference is the roster. Practically all of the characters do not appear in the final version, with teh exception of an earlier version of Kage and a near final version of Lau. See the “Prototype Roster” section below for a close look at the characters.
The other key differentce is that the backgrounds are fully rendered 3D, which necessitated a lower polygon count on the characters themselves. There is a desert stage and an oceanside stage. The ring outline appears identical to the later “early Saturn version test,” which means it is likely the same as the one from the Christmas Eve version.
WIN= / =WIN text present, still in final @ fd2e0a

Location Test


The public first got to play the game on August 1, 1993 when it opened for its location test at the Ikebukuro GiGO. The images above show the original MEGALO 50 cabinet with it’s “Virtua Fighters” signage and a roster missing Akira but with Shiba/Majido present. The young man sitting down to play is, according to The Beginning, the very first member of the general public to play the game. The machine earned around 900 credits that first day, with each credit costing 200 yen.

1993 AM Show
Later that month, the game had wider exposure at the 1993 AM Show. The game grabbed the attention of everyone who wandered past Sega’s floor space. While there was much praise, the same complaint apparently kept cropping up.
ショーで発表したとき絶対売れるぞと思っていたんだけど、あそこで個性がないとかさんざんいわれて。やってもらえばわかるのに。あそこで計画を変更して無理矢理8人の性格づけを始めたんです。かなり後半に無理がかかったわけですよ。8人やっとの思いで性格づけをした。技も変えたから強さのバランスを取るのも大変だった。ジェフリーとウルフが弱くてね。
When we showed it at the show I thought it would absolutely sell, but there we got told over and over that it had no individuality — when you’d understand if you just played it. At that point we changed the plan and forced ourselves to start giving the eight characterization. A great strain was put on the back end of the schedule. We gave the eight personalities by the skin of our teeth. And because we changed the moves as well, balancing their strength was hard too. Jeffry and Wolf were weak.”
- SUZUKI Yū, Gamest #117, p.133
Indeed, there are several other quotes from the staff in other interviews that more or less say the same thing: the characters all played the same. The Gamest reviewers certainly made their thoughts clear after the trade show:
キャラが8人もいるのに、ポリゴンだからみんな同じように見えてしまう。やってることがみんな同じなのも… There are eight characters, but because they’re polygons they all look the same. And they all do the same things…
- KAL, Gamest #101, p.53
キャラクターに個性がなく、闘いに充実感が足らないようだ。 The characters have no individuality, and the fights seem to lack substance.
- ずるずる Zuruzuru, Gamest #101, p. 53
ショーの段階では各キャラ間にあまり性能の差がみられませんでしたね。 At the show stage there wasn’t much difference in performance between the characters.
- 石井ぜんじ Ishii Zenji, Gamest #101, p. 55
I think Suzuki’s quote is telling: “we changed the plan and forced ourselves to give the eight characterization.” I’ve edited his quotes together for brevity, but I recommend reading the whole interview in Gamest #117. He sounds frustrated that, in such a short time and against his original plan, they had to give different characters different moves. This ultimately led to issus with balance and with realism.
For example, when Shiba was cut due to an apparent lack of popularity during the location test, Akira stepped in to replace him. Suzuki admits there was no time to research the moves added for balance, and says Akira uses moves that aren’t in his fighting style, Hakkyokuken. His throw is the clearest case:
八極拳には投げはないですからねえ。調整しきれなかったからバーチャ「1」では入ってしまっているわけだし、やはり無いものは入れたくない。投げを外したからといって弱くなることはないです。強いものは強いですから。投げを外したからといって弱くなることはないです。強いものは強いですから。
…
There are no throws in Hakkyokuken, you see. It’s in Virtua “1” because we couldn’t finish the balancing, and I really don’t want to include something that isn’t there. Taking the throw out won’t make him weak. What’s strong is strong.
- SUZUKI Yū, Gamest #117, p.135
The throw was not taken out, however. Virtua Fighter 2 and all the games since still have it and more.
Suzuki: サターンの発売に向けてバーチャファイターを作っています。サターンは業務用のものよりもずっと値段を抑えて作っていますので能力的にはね、業務用のものと同じってことはないわけです。だからといってバーチャファイターの魅力が比率ダウンするかっていうとそんなことはないんです。ハードの中に流れているものっていうか、中に流れる力、バーチャファイターの持つ基本的な力の良さっていうものがあまりハードによらないんだっていうことを家庭用のもので、みんながわかっていただけるかなって。それぐらい魅力的なものにしたいと思っているんですよね。
We’re making Virtua Fighter for the Saturn’s release. The Saturn is built at a far lower price than the arcade machine, so in terms of capability it isn’t the same as the arcade one. But that doesn’t mean Virtua Fighter’s appeal scales down proportionally. What flows inside the hardware, the force that runs within it, the merit of the fundamental strength Virtua Fighter has — that doesn’t depend much on the hardware, and I wonder whether everyone will understand that from the home version. I want to make it appealing enough for that.
ショーに出したときはキャラの顔や体は別々だけど技は同じだったので、特殊技などで差別化をはかろうということで。 When we showed it at the show, the characters’ faces and bodies were separate — different from one another — but the moves were the same, so the idea was to differentiate them by means of special moves and the like.
- K, Gamest #117, p.121
▎ AMショーまでは本当にシンプルで殴る蹴るだけだったんです。
“Right up until the AM Show it was really simple — nothing but punching and kicking.”
[0:34] Okayasu: 私は最初から関わったわけじゃなくて、途中から参加させてもらったんですけれども。
I wasn’t involved from the start. I joined partway through.
[0:39] Watanabe: そうなんですか。最初の第一印象は?
Is that so. What was your first impression?
[0:41] Okayasu: 最初はダンボールの人形みたいなのが2体ガチャガチャ動いてて、これは一体何だろう?と思ったんですけど。
At first there were two things like cardboard dolls clattering about, and I thought, what on earth is this?
[0:48] Watanabe: 最初はあんまり作り込まないものを動かしたと。
So at first you were moving things that weren’t built up much.
[0:51] Okayasu: 最初はやっぱり動きの方を中心に作っていって、しばらくの間その人形はダンボールのままで、後の方になってから徐々にこれを増やして。 [?] 後の方 / 徐々に — ASR: アートの方 / 非常に
At first it was built around the motion. For a while the dolls stayed cardboard, and it was only later that this was gradually increased.
[0:59] Watanabe: 動きがもうこれでいいぞという風になってからCGを作るということですね。
So you build the CG once the motion is at the point where you say, right, that’s it.
[1:02] Watanabe: バーチャって結構CGがすごく綺麗なゲームだって感心される方が多いんですけども、実は褒められていない動きのところの方が制作的には苦労が多かったということですね。
A lot of people are impressed by Virtua as a game with really beautiful CG, but the motion, which doesn’t get the praise, was actually where most of the production effort went.
Q: 実際に作りたかったものというのはどんな形のものだったんでしょうか。
What form did the thing you actually wanted to make take?
Suzuki: アキラになって闘うのではなくて、サラになって闘えるというものではなくて、自分がパワーアップするんですよね。キャラクターはすごく単純な動きしかないんですよ。個性がないといわれるとそれまでなんだけど、ところがもしウチの開発の誰かがやる。そのやっているところは見せない。でも画面を見るだけで誰がやっているのかというのがわかっちゃうんです。これはウチの開
Not that you become Akira and fight, not that you can become Sarah and fight — you yourself power up. The characters have only very simple movements. If you say that has no individuality, that’s the end of it — but suppose someone in our development team plays. You don’t get shown them playing. And yet just by watching the screen you can tell who it is that’s playing. That’s our develop— [continues into band 4]
[サラ — the transcription is サラ ("Sara"), not サラ﹅/サラー. The shipped character's katakana in the game is サラ; rendered "Sarah" here to match the game's Roman spelling.]
Suzuki (continuing, right of the photo): …発のアイツだってね。プレイしている本人がそのまま強くなった形で現れるゲームだったんですよ。これって面白いなって飛びつきましたね。でもこういうのって宣伝の仕方が難しかったり、わかってもらうにはやってもらうしかなくて。成立させるのが非常に難しかったんですよ。当初はそんな感じでいこうと思っていたんです。
…that’s so-and-so from our dev team. It was a game in which the person playing appears as themselves, made stronger. I leapt at that as an interesting thing. But with something like this, advertising it is hard, and the only way to get it across is to have people play it. Making it work was extremely difficult. Initially I’d meant to go in that direction.
Prototype Footage
There are a number of videos of Virtua Fighter in a very early state floating around the internet. All of them came from one of two sources.
The first is VF: The Beginning which we’ve already drawn from extensively in the article and will continue to do so. It is an aboslute treasure trove of information. It’s a fan made disc, but it’s clear that the people behind it were in close contact with the development staff, with internal photos and scans that could have come from the team. It includes several videos, including 3 of VF in various prototype states.
The second is the Virtua Fighter History disc for Dreamcast, bundled with the first-press edition of Shenmue II. There is far less information here overall, but there are two video clips of early VF content.
Those two clips are paired into one video here on youtube:
https://www.youtube.com/watch?v=l123vCUALDU
Virtua Racing - Motion Test of VF
It starts with “Virtua Racing -Motion Test of VF-” which reinforces how Racing was, essentially, the earliest prototype of Fighter. The segment, however, appears at first glance to be nothing more than the normal “good” ending for Virtua Racing.
But if you look closely, you’ll see the camera angle is tighter on the drivers; there are no photographers or reporters; in the grassy space below the billboard there is an odd yellow object that pops out of existence when the camera rotates; and the podium girl awarding second place does not switch hand models when placing the wreath. It remains stuck to her hand while the winner remains wreath-less.
The scene is buggy and sparse compared to the final. I am fairly confident it’s a clip of a (late) prototype VR rather than of anything directly related to VF.
Or is it? It raises the question: why did the dev staff talk so much about the pit crew and but never mention the ending? It has many more humans on screen with far more dynamic movement than just a pit stop. Animating this ending scene had to take a fair amount of work, especially if animating was as rough as Ishii implied.
And then to use a prototype version of that ending as the “Motion Test of VF” is interesting. Maybe Racing’s ending has more to do with the animation tests than initially thought. The content of the tape that Suzuki Hisashi saw is never explained, just that it was the pit crew with movements unlike what were in the game. It is possible that the tape shown to him contained this prototype ending, which then went on to be refined and used in the game.
It’s all conjecture, of course, but for me, this video clip is the biggest remaining mysteries from my research into the game.
Dynamic Material
This was more test footage clearly done on SGI workstations. It highlights the animation of materials breaking into pieces. While there is the an Akira-like figure, it otherwise has practically nothing to do with VF. Perhaps one of the seeds Suzuki talked about, testing breakable materials here for use somewhere else… but who knows.
Battle Motion Test
Unfortunately, we have no information on this segment’s background. There are essentially two parts: one a pair of broad-chested brawlers, and then what is clearly an early version of Jacky. The two brawlers exchange some punches and kicks, but the animation is noticably stiff and slow and unnatural. Meanwhile, the clip of Jacky shadow boxing is fast, fluid and extremely realistic compared to the other two.
I have a feeling that the Jacky clip was part of the inverse kinematics work that Ishii did. Unfortunately there is no high kick in the video clip, which is the one thing we could reliably link, but the difference in quality between the two is like night and day. It’s easy to see how Ishii was promoted if this was the kind of animation he was producing at that early stage.
VF 1 Prototype - Be Born
This is probably the most misrepresented Fighters prototype video online, so let’s set the record straight.
The final section begins with two titlecards: “VF1 PROTOTYPE - Powered by SGI” and then “Be Born.”
(Those title cards aren’t present in the youtube clip above, but they are shown when plaued from the original Dreamcast source and are included in the below copy.)
https://www.youtube.com/watch?v=f0QjutkidDs
The video has multiple brief matches of the characters, with varying polygon counts along the way. It seems to be a test of balancing graphical fidelity with processor load.
The combined implication of the Engrish-y title cards and the polygon count variance is that this is some of the earliest footage of the game, the birth of Virtua Fighter as a working fighting game, with developers still testing hardware capabilities. And that is somewhat true. It is some of the earliest footage… of the Saturn port.
The biggest clue is the characters themselves: Akira is there (in his final black gi instead of the early white gi version); there’s no Majido/Shiba or GI or Anego or Aniki or Red/Blue Fighter; Jeffry and Lau have their proper names, instead of the earlier Willie/Tao. This is the final lineup in a game that was making changes to the roster all the way toi the last minute (which we’ll talk about in an upcoming section).
You see, The Beginning has the same footage, though presented differently, with commentary explaining that it is a simulation for the Saturn version. In fact the wording is presented as a “surprise” for the reader: “As you can tell from the low polygon count, this is still in the experimental stage. But something feels off. Why is Akira, who was added at the last minute, here? That’s because this is for the Saturn version!”
Virtua Fighter was a Saturn launch day title. The staff working on the port were unfamiliar with the hardware and were uncertain about how many polygons they could push.
移植作業もやっぱりオリジナルと同じように張りぼてから作っていって、最初は16ポリゴンくらいしか出さないで、動きの方を中心に作って、動きがある程度見えてから、ポリゴン増やして、キャラクターが。
… The porting work was done the same way as the original: we built it up from simple mock-ups, at first putting out only about 16 polygons, centred on the motion. Once the motion was more or less visible for the characters we increased the polygons.
- OKAYASU Keiji, Sega Video Magazine, 1994 December


According to Okayasu Keiji, the lead programmer of the Saturn version, they basically started over from scratch, recreating the same process as the arcade version: motion first, then characters. And the video clips on The Beginning and on the VF History disc are from this stage of development.
So while they are interesting clips, they unfortunately don’t tell us much about the early days of the original game.
Or do they? Let’s revisit that photo of the Christmas Eve 1992 milestone.

It is somewhat difficult to tell since everything is postage stamp resolution and dithered to oblivion, but it seems that the Saturn testing was done in the same Softimage setup as the original, with the same simple ring, sky and background, and the same health bar, time, and win count elements. The only major difference is the models themselves.
So while we can’t see the original Blue and Red fighters going at it, we can get an idea of how things looked at that early milestone.
Virtua Racing Leftovers
Now that we’ve discussed the early days of the game’s development through the voice of staff interviews and footage of prototype builds and demo reels, let’s begin to actually look at the final game’s data.
Virtua Fighter was built on top of Virtua Racing’s code base.
TODO: how much is VR and how much is shared among other Model 1 games.
Very little of VR’s code is still used in the final VF, and what is there is primarily hardware library routines: tilemap renders, text formatting, power-on init, fixed-point math, the TGP coprocessor driver, etc. There is some VR leftovers that go unused, which we’ll talk about later, but the most substantial bit of Virtua Racing DNA that still exists in Virtua Fighter is the composition of the character models themselves.
A Constantly Shifting Roster
In fact, the roster of characters in the game is a bit of a roller coaster, with characters added, removed, renamed all throughout the development cycle.
Some characters remained pretty much unchanged through the whole development saga - Pai, Wolf, Sarah and Jacky in particular didn’t have much variance, but everyone else sure did.
Early Designs
Prototype Roster
Red and Blue
Anego, Aniki
Lau, G.I.
Late Cut Characters
Kenji and Yamato


Cut Characters in the Final Version
Probably the most well-known of Virtua Fighter’s cut content is several additional character models. The roster as it appeared close to release included three additional fighters: Majido, Jeffry, and Takeru.
Majido
Majido very nearly made it into the final game. He was present in the Ikebukuro location test as well as the AM Show demo later that month, but apparently was the least chosen character, thus putting him on the chopping block when the last-minute character “redesign” occurred.
He retains a profile card, name labels, and a voice set which go unused in the final game, making him the most complete of the cut characters. He was essentially complete.
Jeffery
A US military themed character was considered from at least the mid-point of the game’s development, as the design documents from around the time of the game’s internal play test show a character called GI - as in G.I., not the Japanese word “gi”.

He was eventually given the name Jeffery:
G.Iですね。このキャラはなんでいなくなっちゃったかというと、これはジェフリーの前身なんですよ。話せば長くなるんですが・・・。以前、米海兵隊だったジェフリーというデザイナーがセガに入社したんです。彼がマッチョな体格の持ち主で、じゃぁ、ジェフリーをモデルに一体作ろう、っていうことになったんですが、いろいろあって・・・結局はアッチに落ちつきましたね
…
That’s G.I. As for why this character vanished — he’s the predecessor of JEFFRY. It’s a long story… A designer called Jeffery, formerly of the US Marine Corps, joined Sega. He had a macho physique, so it was decided we’d build a body modelled on Jeffery — but for a variety of reasons… in the end we settled on the other one.
- Nakajima, AM2, The Beginning
When being cut, his name went to the Jeffry we know of today, who previously went by the name Willie. Note the difference in spelling: Jeffery with an extra ’e’ was the U.S. Marine, while Jeffry is the Australian fisherman.
(title card, screenshot)
Takeru

Mid-Bosses
Character Renames
Hattori -> Yagyu -> Kage
Lee -> Tao -> Lau
Willy / Willie -> Jeffery / Jeffry / Jeff?
Jackie -> Jacky
Shiba -> Majido
Yamato -> Akira
Kenji -> Takeshi? -> Takeru?
and …. Sound test “J” for Akira?
Stickers over Final Character Info/Names
Other Unused Name Graphics
Multiple Rosters
The game has six rosters of characters in the game:
| # | table | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|---|
| 0 | FD2EF7 | DURAL | JEFFRY | SARAH | KAGE | LAU | MAJIDO | JACKY | WOLF |
| 1 | FD2F00 | PAI | JEFFRY | SARAH | KAGE | LAU | MAJIDO | JACKY | WOLF |
| 2 | FD2F09 | WILLIE | TAKERU | AKIRA | DURAL | DURAL | DURAL | JACKY | WOLF |
| 3 | FD2F12 | WILLIE | TAKERU | AKIRA | KAGE | LAU | MAJIDO | JACKY | WOLF |
| 4 | FD2F1B | AKIRA | PAI | LAU | WOLF | JEFFRY | KAGE | SARAH | JACKY |
| 5 | FD2F24 | AKIRA | PAI | LAU | WOLF | JEFFRY | KAGE | SARAH | JACKY |
roster0 DURAL_BOSS1 JEFFRY_1 SARAH_1 KAGE_1 LAU_1 MAJIDO_1 JACKY_1 WOLF_1 || DURAL_1
roster1 PAI_1 JEFFRY_1 SARAH_1 KAGE_1 LAU_1 MAJIDO_1 JACKY_1 WOLF_1 || DURAL_1
roster2 WILLIE_1 TAKERU_1 AKIRA_1 DURAL_BOSS1 DURAL_BOSS2 DURAL_BOSS3 JACKY_1 WOLF_1 || DURAL_BOSS1
roster3 WILLIE_2 TAKERU_2 AKIRA_2 KAGE_2 LAU_2 MAJIDO_2 JACKY_2 WOLF_2 || DURAL_BOSS1
roster4 AKIRA_2 PAI_1 LAU_1 WOLF_1 JEFFRY_1 KAGE_1 SARAH_1 JACKY_2 || DURAL_1
roster5 AKIRA_1 PAI_2 LAU_2 WOLF_2 JEFFRY_2 KAGE_2 SARAH_2 JACKY_1 || DURAL_1
there were no mirror characters at first - old code for tournament character select allows only one appearance of a character - double check if we have the code for the 1p char select
My theory - the roster list is “layers” of archaeology roster 0 and 1 are practically identical, and 1 matches the AM show select. My feeling is this is a copy and paste, with perhaps that first slot of roster 0 being a “quick test” for devs to put anyone there for quick testing
Roster 2 and 3 are the first revision after the results of the AM show. Note that roster 3 has the 2nd variant, something that didn’t exist before the AM Show. THe big difference here is the presence of the cut sub-bosses in roster 2 - why they’re there is a bit confusing - perhaps testing them as rivals?
and of course 4 and 5 are used in game.
These lists determine who will appear in the character select and during a 1 player match, and in what order.
Number 4 is the one used by the game. Interestingly, #1 is the ordering for the older player select that appeared at the AM Show.
Which roster is chosen is actually a configuration settings (cfg__roster_select) that has been removed as an option from the menu, but whose valus is till read by live code. It is initialized to 4 - but you could set it to any of the
We’ll come back to this for reference.
Every fighter in the game resolves through one lookup in match__phase_00__setup_round (0xFE1599):
00fe1824: mov.w 0x0050126c{ptr__roster_table}, R1
00fe182b: movz.bw [R1](R0), R2 ; R2 = roster[cell]
00fe1833: mov.w 0xfd2e8f{ptbl__character_records}(R2), -0x50[R19]
Only the cell differs by source (game__input_source_mode, 0x501299/0x50129A): 0 = the human's own select pick, 1–0x3F = CPU script, ≥0x80 = barcode entrant. In 1P the CPU's byte is set to the round number, so the cell comes from the script block's header — each of the nine blocks at 0xFD054C is name + NUL + index byte + 0x400 notation, and that index byte is the opponent's select cell.
Fixed ladder cells: 7, 4, 6, 5, 1, 3, 2, 0, 8. Resolved:
┌───────┬─────────┬──────────┬────────┬────────┬────────┬─────────────┬────────┐
│ round │ script │ roster 0 │ 1 │ 2 │ 3 │ 4 (shipped) │ 5 │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 1 │ Level1 │ WOLF │ WOLF │ WOLF │ WOLF │ JACKY │ JACKY │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 2 │ JUMP │ LAU │ LAU │ DURAL │ LAU │ JEFFRY │ JEFFRY │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 3 │ Level5 │ JACKY │ JACKY │ JACKY │ JACKY │ SARAH │ SARAH │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 4 │ NAGE │ MAJIDO │ MAJIDO │ DURAL │ MAJIDO │ KAGE │ KAGE │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 5 │ PUNCH │ JEFFRY │ JEFFRY │ TAKERU │ TAKERU │ PAI │ PAI │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 6 │ Level7 │ KAGE │ KAGE │ DURAL │ KAGE │ WOLF │ WOLF │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 7 │ Level7d │ SARAH │ SARAH │ AKIRA │ AKIRA │ LAU │ LAU │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 8 │ Level8 │ DURAL │ PAI │ WILLIE │ WILLIE │ AKIRA │ AKIRA │
├───────┼─────────┼──────────┼────────┼────────┼────────┼─────────────┼────────┤
│ 9 │ Level8 │ DURAL │ DURAL │ DURAL │ DURAL │ DURAL │ DURAL │
└───────┴─────────┴──────────┴────────┴────────┴────────┴─────────────┴────────┘
Roster 4's column is the known arcade order exactly — that's the positive control, so the cut-character rows are trustworthy. MAJIDO becomes the round-4 opponent under rosters 0/1/3; TAKERU round 5 and WILLIE round 8 under rosters 2/3 — fightable, not just models on a select screen. Note the script is picked by round, not by character, so a cut fighter runs notation authored for whoever normally occupies that cell.
Two things that fell out of this:
- The ±9 bump at 0xFE17C7 is the mirror match. Roster tables are contiguous on a 9-byte stride, so cell+9 is the same cell of the next table — and roster 4 → roster 5 is the same eight fighters from the other model set. That's what the 0/1, 2/3, 4/5 pairing is for.
- Roster 5 has no successor. Ladder cells are always 0–8 so the bump is always +9; from 0xFD2F24 that reads ptbl__roster_tables itself, yielding record index 0xF7 against a 26-entry table. Latent overrun, only reachable via the roster cheat on table 5 when you pick the round's own fighter.
Early Storyline
As we discussed above when looking at interviews with Suzuki and Ishii, the original vision for the game seemed to be a refined simplicity, where players squared off with visually distinct but otherwise equally matched characters to determine who was simply more skilled with a joystick. There was no contrived motivation for the characters, no storyline to propel them from stage to stage - it was pure gameplay.
Somewhere along the line, that began to change. The primary complaint from the AM Show in August 1993 was that all the characters played the same, that there was no variety. The dev team scrambled to change things up, giving unique moves to different characters, even at the expense of some balance.
While not stated directly, my feeling is this is when the team decided to also lean into some of the fighting game tropes, such as a world-wide tournament and a shadowy organization. After all, Virtua Fighter was going up against Street Fighter 2, and the general public at the AM Show didn’t seem to “get” the design philosophy. So they needed a story settings, quickly.
What they camne up with was the Red Scorpion Organization.


Removed Configuration Options
The Game Assignment submenu in the Service Menu normally has nine entries, like so:

The pointer table for these strings is at 0xFCD000 while the actual text immediately following it:
MATCH COUNT(1P)
MATCH COUNT(VS)
DIFFICULTY
ENERGY MAX
STAGE WIDTH
REPLAY
VOICE
ADVERTISE SOUND
CONTINUE
START ROUND (DEBUG)
COUNTRY
CABINET TYPE
INITIALIZE
EXIT
You’ll notice ENERGY MAX, STAGE WIDTH, REPLAY, VOICE and START ROUND (DEBUG) are missing from the menu.
The width of the stage and the maximum player health are both set by the game’s difficulty, and the Game Assignment menu displays their value per difficulty level. This seems to indicate those two values were changeable in an earlier version, likely for debugging rather than as operator options.
The stage width/max energy settings in the config are not read anywhere in the actual game, though it turns out the other cut options (Replay, Voice, Start Round) have their functionality intact.
Start Round plainly identifies itself as a debug function, setting the initial stage when starting a game. Replay enables or disables the end of round replay, enabled by default. Voice enables or disables the in-game announcer commentary, disabled by default.
Wait, announcer commentary?? Yup! We’ll discuss that in greater depth later, but spoiler: there was an option to have the announcer call out certain attacks during gameplay.
Removing the start stage as an option is understandable and expected, but I have no idea why they removed Replays and the announcer as toggle options…
There were at least two more entries on this page (or somewhere in the game config menu): one for competition mode and one for roster selection.
At 0xFCD150 we have a pointer table and four strings:
NORMAL
TOURNAMENT
LEAGUE
TOURNAMENT BARCODE
And not far below, at 0xFCD1CE we have another table/string pair:
REAL1
REAL2
TOY1
TOY2
SELECT1
SELECT2
These are stored with other Game Assignment menu strings and enumerate the options available for a given entry. The accompanying entries that would be in the menu (the string table we just looked at above) for these two options are gone. So while we don’t know exactly how they were labeled, we know from other discoveries what they do.
The first set is obvious: alternate competition modes. The second set is more mysterious, but it turns out it (maybe) relates to selecting alternate roster lists… and ultimately ties back in with the alternate comptetition modes.
We’ll talk more about that in the next section.
Technical
The game configuration is stored in a block of 128 bytes beginnig at 0x40FF00 within NVRAM. It is partitioned into 8 groups of 16 bytes each, with entries added sequentially and the tail kept unused, probably for adding related settings later. In other words, the game config data does not run together in a continuous block, but has gaps at the end of groups that do not fully fill out the 16 byte line.
The map of which menu option is stored at which offset in this block is defined at 0xFCCFDC. It is a seven entry array, one for each of the configurable options on the Game Assignment page.
Four of those seven are in the 0x30 group. The ofset list has 0x30 (Match Count 1P), 0x31 (Match Count VS), 0x37 (Enable Continue), and 0x3A (Enable Attract Mode Sound). With 0x3A as the upper bound, we are missing 0x32 to 0x36, then 0x38 and 0x39. That’s seven config bytes unaccounted for.
The five removed options are very likely among those. Their menu strings and their config grouping info, but the actual space for them is still reserved in NVRAM. We just don’t know which byte does what.
The only way to figure it out is to find that actual functionality in the code and hope it still reads from the config in NVRAM. Well, we’re lucky that three of them do just that: REPLAY uses byte 0x38 (checked at 0xFE2671); VOICE uses 0x36 (checked at 0xFE0179); and START ROUND (DEBUG) uses 0x39 (checked at 0xFCC9EC, 0xFE0C2C, 0xFE3106).
What about the other two, the Stage Width and Max Health settings? Though they do have space in NVRAM at 0x32 and 0x33 (by process of elimination), they are not read by any code. It was likely fully removed when they became aspects of the game difficulty.
That leaves two bytes in the 0x30 row: 0x38 for the roster select and 0x34 for the competition mode, both of which will be discussed in depth later.
Cheats
There isn’t an easy eay to restore the entries to the Game Assignment menu; it would require changes in several locations for something would ultimately just be a visual fix. It’s much simpler to just set the values directly in NVRAM.
A caveat though: the config block of NVRAM is verified on startup with a CRC16 checksum of the settings. This means if you want the settings to persist, you will need to go to the test menu, then Game Assignment, set the cheat, then go to Exit. This will apply your NVRAM setting with a properly calculated checksum. If you want to reset to the default setting after you’ve previously changed it and saved it, toggle the cheat on then back off while on Game Assignment to force the value to update, then Exit to save.
A second, related caveat: while the program reads the replay and round start settings directly from NVRAM and thus can be changed with a cheat as the game runs, the VOICE option is instead read once at startup, which sets a gameplay flag that is used as the actual check for whether to use the announcer voice or not. This means the only way to enable the VOICE setting “properly” in NVRAM is to go to the settings menu and save, as detailed in the previous paragraph, so that the CRC check passes on startup. The workaround is to set that gameplay flag directly at runtime, which bypasses the NVRAM setting directly. Either has the same result but the “direct” method is faster, especially if you just want to test it.
<cheat desc="Disable REPLAY option">
<comment>Disables post match replays</comment>
<script state="on">
<action>maincpu.pb@40FF35=00</action>
</script>
<script state="off">
<action>maincpu.pb@40FF35=01</action>
</script>
</cheat>
<cheat desc="Enable VOICE option (PROPER)">
<comment>The announcer calls out some moves during gameplay. This requires a settings save to enable.</comment>
<script state="on">
<action>maincpu.pb@40FF36=01</action>
</script>
<script state="off">
<action>maincpu.pb@40FF36=00</action>
</script>
</cheat>
<cheat desc="Enable VOICE option (DIRECT)">
<comment>The announcer calls out some moves during gameplay. Applied immediately; does not require restart or settings save.</comment>
<script state="run">
<action>maincpu.pd@501272=maincpu.pd@501272|00040000</action>
</script>
<script state="off">
<action>maincpu.pd@501272=maincpu.pd@501272 BAND ~00040000</action>
</script>
</cheat>
<cheat desc="Set START ROUND option">
<comment>Sets the starting round for a new game</comment>
<parameter min="1" max="9" step="1"/>
<script state="change">
<action>maincpu.pb@40FF39=(param)</action>
</script>
</cheat>
Task Names
At 0xFD018C is an array of 32 task definitions which are installed at startup by the initializer at 0xFE04A1. Each of these tasks represents some core part of program execution and gameplay. And this table is especially useful to someone disassembling the game since there is a 5 character string attached to each one which gives a hint as to what that code does!
These strings are unused in the final game, but they were probably part of a runtime debugger that indicated which task was currently being executed.
Here is the full list of task names:
Windw ParmD AdvDs Enemy Play0 Ctrl0 Ctrl1 Acti0 Acti1 Coli_
Aftr0 Aftr1 Enin0 Enin1 Camra Disp0 Disp1 Expnd Leagu PEfc0
PEfc1 Efct0 Efct1 Efct2 Efct3 Efct4 AreaD SelDs Slct0 Slct1
Sound GCrak
You’ll notice some have 0 and 1 suffixes, indicating two instances of the same code but with different contexts in memory. These are the code for the two players. There are two consecutive strings at 0xFD0178 (right above the task list) that read PLAYER1 and PLAYER2 - these too may have been part of a task debugger, indicating which player “owned” that task.
Debug Tools
TODO: see if we can make a better debug “master switch”
The game has several debug tools remaining, including readouts and a pause.
functions contingent on flags set on dbg__flags (0x5012A4)
State Monitor
0xFD9D5D
Pause / frame advance
dead__dbg__draw_fighter_params 0xfcfa81
Runtime Data Readout
The actual entry point for above: fcf954
depends on bit 1a in the debug long
code is uncalled though, needs a proper call site
Removed “Move Name” display
The developer tool draws a line that was meant to name the move each fighter is performing. It cannot, and the reason is a deliberately gutted routine.
00fcf9bc: mov.w 0x200000{dead__ptr__anim_block__null}, R0
00fcf9c3: movz.hw -0x38[R19], R1 ; mot_num
00fcf9c7: jsr 0x00ff4370{dead__dbg__motion_name_lookup_stub}
00fcf9cd: movea.w 0x701706, R1 ; tilemap destination
00fcf9d4: jsr 0x00ff3505{gfx__draw_string}
0xFF4370 is a single rsr instruction and nothing else. It is not a fallthrough:
0xFF436F is the rsr that ends the previous routine, and 0xFF4370 is a second rsr
byte that exists only to be called. The body was removed and the call site left in place.
So R0 is never converted from a motion number into a name pointer. It keeps the value
loaded at 0xFCF9BC, which is the ROMX pad dword at 0x200000. That dword points at
0x200A04, a 50-byte block of zeros that no motion ever reaches, so the tool draws an empty
line. (The real animation-block table starts one dword later, at 0x200004.)
No motion-name table was shipped. Both ROMs were searched exhaustively: a scan of the full 1 MB data ROM for NUL-terminated alphanumeric runs returned 20 candidates, every one of them random binary that happens to fall in the printable range. The names existed only in a development build. This is the one disconnected feature in the game that cannot be reconnected — the code survived, the data did not.
Barely Used “Input matcher” Subsystem
dead__dbg__draw_cmd_matcher_record (0xFFDCC2) has no reference of any kind, and putting it
back exposes a whole subsystem the shipped game barely uses.
The instrument
It takes R11 = one matcher record and R1 = a text-RAM cursor, and prints record bytes 1, 0, 2
and 3 through gfx__draw_number:
00ffdcc2: movz.bw 1[R11], R0 ; frames left before the command lapses
00ffdcc6: jsr 0x00ff3533{gfx__draw_number}
00ffdccc: add.w #0xC, R1 ; next column, six cells over
00ffdccf: movz.bh 0[R11], R0 ; current step opcode
00ffdcd3: jsr 0x00ff3533{gfx__draw_number}
00ffdcd9: add.w #0xC, R1
00ffdcdc: movz.bh 2[R11], R0 ; step index into the command's stream
00ffdce0: jsr 0x00ff3533{gfx__draw_number}
00ffdce6: add.w #0xC, R1
00ffdce9: movz.bh 3[R11], R0 ; matched flag
00ffdced: jsr 0x00ff3533{gfx__draw_number}
00ffdcf3: add.w #0xC, R1
00ffdcf6: add.w #0x50, R1 ; and on to the next text row
00ffdcfd: rsr
gfx__draw_number writes a sign cell and five digits — six cells, twelve bytes — so four numbers
plus that trailing 0x50 comes to exactly 0x80, one full 64-cell text row. The routine is
built to be called once per record from a loop and to leave the cursor on the next line. The loop
is the only thing missing, which is why restoring it takes nine instructions.
The matcher it watches
input__command_matcher__tick (0xFFDB43) runs every frame from boot__main, for both players.
It tracks five commands per player in a 4-byte record each (0x508100 for P1, 0x508200 for
P2), against a notation language of 51 opcodes — button presses, the four cardinals, all eight
diagonals, eight release transitions, three button chords, and twenty-five direction+button
combinations. The language and the record layout are in FORMATS.md §6a.
The five commands the shipped ROM defines:
| # | input, step by step | window per step | flag at | read by |
|---|---|---|---|---|
| 0 | Right → Down-Right → release Right → Punch | 50 frames | +0x03 | nothing |
| 1 | Punch+Guard → Kick+Guard → Punch+Kick+Guard | 50 frames | +0x07 | nothing |
| 2 | Up-Left+Punch → Up+Punch → Up-Right+Punch → Right+Punch | 50 frames | +0x0B | nothing |
| 3 | Down-Left → Down → Down-Right | 3 frames | +0x0F | fighter__command_interpreter |
| 4 | Down-Right → Down → Down-Left | 3 frames | +0x13 | fighter__command_interpreter |
Commands 3 and 4 are a mirrored pair of very tight quarter-rolls along the bottom of the gate, and
they are the only two with a consumer. fighter__command_interpreter picks move-table entry 0x17
or 0x18 from them depending on which way the fighter faces.
Commands 0, 1 and 2 are matched every frame, for both players, and their results are read by nothing. Two of the three are the shape of a fighting-game special-move input — a quarter-circle finished with Punch, and a sweep across the top of the gate holding Punch. The third is a pure three-chord button sequence with a generous 50-frame window between chords, which is the shape of a developer unlock rather than a move.
⚠️ The consumer takes its record offset indirectly out of ROM, so an address sweep does not find it:
00fe8d8f: test.b [0x00ffded7](R0) ; R0 = 0x508100 or 0x508200; the +0x0F comes from ROM
00fe8dd4: test.b [0x00ffdee2](R0) ; likewise +0x13
Those two bytes are the ones that sit immediately after each command stream’s 0xFF terminator,
and each equals 4n+3 — the offset of command n’s matched flag. There are exactly two
instances of that addressing idiom in the whole 512 kB image, and both resolve to commands 3 and
4. Together with zero cross-references to the three orphan flags and no 32-bit literal naming them,
that is what makes the negative solid.
Measured
With the readout restored, tapping Punch+Guard, then Kick+Guard, then all three walks command 1 to its match — on the shipped ROM, with nothing else patched:
opcode column 5 23 41 13 11 <- first step of each of the five streams
idle timer 0 step 0 matched 0 (all five)
after P+G cmd 1: timer 46 opcode 24 step 1
after K+G cmd 1: timer 46 opcode 25 step 2
after P+K+G cmd 1: opcode 23 step 0 MATCHED 1
media/cmd_matcher/matcher_readout_sheet.png is the four states, cropped to the readout.
Cheat: Debug: input command matcher readout (needs the Debug MASTER SWITCH).
Competition Modes
Perhaps the biggest finds are the remains of the competition modes that were exhibited at the AM Show in late August 1993. This includes a tournament mode, a league mode, and a barcode battle mode.
These were meant for special events and were only available via the Game Assignment screen in the operator menu. They allowed a maximum of eight players to face off against each other and to eventually determine a singular champion for the event. We lump all three together with the term “competition modes” to differentiate them from standard one- or two-player gameplay.
Gameplay itself in these competetion modes would be identical to standard versus mode. The big difference is the automatic orchestration of those matches. Instead of a “referee” at a whiteboard manually updating a bracket or scoreboard, the game would take care of tracking wins and losses, signaling who was up next, and drawing the standings diagram.
We briefly mentioned these modes earlier, in the cut config options section. The available options were:
NORMAL
TOURNAMENT
LEAGUE
TOURNAMENT BARCODE
Internally, the values for choices are 0, 1, 2, and 3, and the chosen option was stored in 0x40FF34 in NVRAM back when it was a working entry in the config menu.
Let’s dive in and take a look at what was planned, how each mode played, and what remains in the final version of the game. A bit of a warning: this section is somewhat messy. All three competition modes, by their nature, share some components, so it’s difficult to introduce one thing at a time, individually. We’ll go over each mode and the graphics that remain, then we’ll jump back and discuss what sort of functionality still exists for all three.
Tournament Mode
A tournament is a single-elimination bracket, meaning that if you lose a match, you’re out for good. If you win, you advance to the next opponent. You’re eventually left with only two players, and that outcome determines the overall victor.
Such tournaments are usually visualized as a horizontal “tree,” with each branch indicating a match pairing. Incredibly, The Beginning disc has a couple images from the dev team’s planning document that indicate this was exactly the plan:

**JA:** トーナメントゲーム。
こんなモードも当初は用意されていた。
まだレッドファイターが残っているが、それより、「アニキ」「アネゴ」といったすさまじいキャラ名が目を引く。
ただし、最終的なロムではラウを含め、すべてのキャラを作り替えたため、この中のキャラは一人も残ってはいない。
この頃は、このような各種モードを入れた方がいいのではないか的な意見がスタッフ間にあったが、結局絞り切って、現在の形に落ちついた。
これが遊び方を分かり易くしたことで、結果的には良かったといえるだろう。
段位認定モードが唯一、この時期のアイディアから復活したモードである。
**EN:** Tournament Game.
A mode like this was prepared at first, too.
Red Fighter is still hanging around, but what really catches the eye are the outrageous character names — "ANIKI" (big brother) and "ANEGO" (big sister).
In the final ROM, though, every character including Lau was rebuilt from scratch, so not one of the characters here survives.
At this stage there were voices among the staff arguing it might be better to put in various modes like this, but in the end they pared everything back and arrived at the current form.
Since that made the game easier to understand, you'd have to call it the right call.
The Kyu/Dan Ranking Mode is the one and only mode to have been revived from the ideas of this period.

**JA:** 93/08/27 AOUショー'93
「バーチャファイター」プロトタイプでは、「バーコードバトル」の可能性が模索されていた。
バーコードバトルとは、日用雑貨品などに付いているバーコードを筐体のバーコードリーダーから読み込み、その数値を一定のアルゴリズムに従ってパンチやキックといった動作に置き換えて勝敗を決定するシステムである。もし、これが採用されていれば、プレイヤーは操作をマスターすることより、むしろ、強いバーコードを求めてコンビニを徘徊することを主眼とするようになったかもしれない。・・・ならなかったとは思うけど。
もちろん、現在のように直接操作によるゲームモードはきちんと存在していたし、これがメインの遊び方ではあった。
**EN:** 93/08/27 AOU Show '93
The "Virtua Fighter" prototype explored the possibility of a "Barcode Battle."
Barcode Battle was a system in which barcodes off everyday household goods were read in through a barcode reader on the cabinet, and the resulting numbers were converted, via a fixed algorithm, into actions like punches and kicks that decided the outcome of the match. Had it been adopted, players might have ended up less concerned with mastering the controls than with roaming convenience stores in search of a powerful barcode. ...Though I doubt it would have actually gone that way.
There was, of course, a properly directly-controlled game mode as there is today, and that was the main way to play.
Here we can see a mockup of their plan for the bracket screen. And in the second image we can also see that a bracket “minimap” during gameplay was at least considered.
But more importantly, we can see how it was actually implemented is this shot from the AM (JAMMA) Show in August 1993, also taken from The Beginning:

**JA:** 93/08/27 AOUショー'93
バーコードバトルトーナメントモードの司会に熱く燃える光吉氏。
驚いたことに、衣装は自前。この頃、すでにレコードを出していたということなので、その関係で使った衣装か。
まさか、
この日のために新調したのでは・・・?
それにしても、楽しそうである。
**EN:** 93/08/27 AOU Show '93
Mr. Mitsuyoshi, burning with enthusiasm as MC of the Barcode Battle tournament mode.
Astonishingly, the outfit is his own. He had apparently already released a record by this point, so perhaps it's a costume from that line of work.
Surely he didn't
have it made specially for the day...?
Either way, he looks like he's having a great time.
This is MITSUYOSHI Takenobu, a member of AM2’s sound team who is now best known as the voice behind DAY-TOOO-NAAA, hosting a tournament. Though the image is low resolution and dithered to oblivion, we can see a bracket, a character name list, character head icons (with Majido and no Akira), a banner at the top, and the brushed-metal blue background reading Virtua Fighters.
(Per the commentary on the image, this is actually from the barcode tournament, but as we’ll discuss when we get to that section, the bracket and progression was very likely to be the same.)
So clearly this mode was complete enough to be actually used. Yet by the time the game came out three months later, it had been removed.
Well, not totally removed…
Graphic Remnants
While the code for the tournament screen itself was gutted, some graphics remain.

In ROMO Bank3 at 0x1D4785 is this banner, “Tournament Battle”, which we can see at the top of the screen from the AM Show tournament photo.

And in ROMX at 0x2D8A48 and 0x2D8A54 we have these two single quad polygons. While their use isn’t clear, the coloring of each matches the red and yellow lines on the tournament bracket. Although we can’t be 100% sure since they’re orphaned, I’d bet money that these were dynamically resized at runtime to form the lines of the bracket.

Immediately before the bracket line quads we have this simple sphere with a base color identical to the red line in the bracket. If it were rendered without any lighting, it would appear as a flat red circle, exactly matching the color of the red line. It doesn’t appear the photo we have, but its color and adjacency to the line polygons hints that it may have been part of the Tournament mode in some way.
The heads themselves are a bit interesting. At first I thought they were the “single piece” heads, but that doesn’t seem to be the case. Note that Pai seems to have her hat but does not have her braids, just as she appears in the standard character select.
In any case, we have pretty much everything we need to recreate this screen:

The only significant difference is the background. The one in the photo reads “Virtua Fighters” (plural) but that graphic did not survive to the final data. Instead we’re using the “Virtua Fighter” (singular) version from the final game.
There’s more to the tournament mode left in the data, but for now let’s switch over to…
League Mode
League mode is slower than tournament. Here, each competitor goes one match with every other player with points tallied for wins and losses. The player with the highest score at the end is the champion.
Unfortunately, there doesn’t seem to be any surviving photos of this mode in action. It is not mentioned in The Beginning or any developer interviews like the other two competition modes are. It may have never been exhibited, or simply have never reached a state where it was playable.
But there are a couple graphics leftover in the game’s data from this nebulous mode.

In ROMO Bank3 at 0x1D4643 is this banner reading “League Battle”, similar to the tournament banner.


And immediately following that banner in the data, we have these two sets of symbols. The first are icons commonly used in Japan to indicate outcomes: ◯ for good, ✕ for bad, and △ for any other situation (like a tie, or one person injured, etc), with the ・ likely being a placeholder.
The second is a set of kanji: 名 前 勝 敗 分 得 失 点. The first two were almost certainly put together to form 名前 namae (Name). The rest are 勝 kachi (Wins), 敗 hai (Defeats), 分 bun (Draws), 得 toku (Gains), 失 shitsu (Losses), 点 ten (Points).
These would have been column header labels for various point values. Wins, Defeats, and Draws are pretty self explanatory (and align with ◯/✕/△). The next two, 得 and 失, very likely combined with 点 for 得点 tokuten and 失点 shitten - set wins and set losses. In other words, overall wins and losses for a round are tracked with kachi/hai, while the results of individual fights within each round are tracked by tokuten/shitten.
Taken together, these symbols imply a standings chart for tracking wins, losses, and points.
But as with the Tournament bracket, though some graphics survive, the code to actually lay them out on the screen has been removed. We were just very lucky to have a photo of the Tournament screen; we’re not so lucky here. There’s not much we can say about how the League standings screen actually looked with any certainty.
The identicality of the League banner with the Tournament banner hints that the two screens were alike in some ways. It’s a pretty safe bet that the banner aligned to the top of the screen and that the background was the same blue brushed-metal logo. But beyond that is anyone’s guess.
So… Let’s do just that: guess.
Mockups
Conventions for recording wins and losses have been well-established in Japan thanks to the long popularity and regulation of sumo wrestling.

In sports games too, league matches were already a well-developed concept.


So we have plenty of examples both in video games and sports for how this might look. Generally, there is a grid with a list of entrants and the result of each match. Point values are also present in varying degrees of detail, either on the same grid or in a separate layout.
With that in mind, here are some mockups on how the League standings screen may have looked.
If you’re just skimming this article, the below images are speculations, not actual screenshots.

Here we’ve kept the character head icons from the tournament screen and recorded match outcomes in a simple hoshitori style from traditional sumo results. We’ve also adde point tallies and given a yellow border to the rows of players who are up next.
In this format, we can see the overall record of wins and losses, but we can’t determine with whom each match result was determined It’s a nice, clean layout but it isn’t one I’ve actually seen used in any games or sports outside of sumo.

If we’re going to keep this compact, all-in-one layout, then this “cross table” format is more realistic. Here, the match slots on the horizontal axis are ordered the same as the vertical axis, so the result is “linked” to the opponent. A player cannot fight themselves, of course, so that slot is marked with a slash, for lack of a better symbol.
Things are pretty crowded here. Some games break things up into two screens: a win/loss grid and a points table.


I prefer this style the most. A seperate taisenhyō (battle sheet) grid and points table.
You may have noticed the nice bordering used in the images. This actually comes from the “main” font in the game:

Note the “circles” at the end of the font and the bars above them. Though the font is used in the game, these particular symbols are not. When broken apart as individual 8x8 tiles, they can be arranged to form simple boxes with rounded edges. Notably, there are two color variants: yellow and white, which seems to imply some boxes could be highlighted rows.
There is no evidence that these lines or this font was used on the League standings screen, but there’s also no evidence that they weren’t… and I think they look nice this way.
Character Select
Both the Tournament and League modes use an older style of character select.





The first things that jump out are the old name “Virtua Fighters” (plural) and that Akira is missing from the icon set, with Majido in his place. Also notable is how simplistic the design is: flat colors and basic fonts (hello again, Helvetica!). That is due to the unfinished state of the game at the time, of course, and less a statement about the designers.
The screens above are not recreations. Not only are these graphics still present, the character select code still works as well!
It’s a little quirky, however. The icon, name plate, and rendered 3D head do not align at all. That is somewhat correctable by changing the roster ID to the one that matches the icon order. The nameplates, though changed with the roster list, still do not match however.
The Japanese on the countdown panel reads “Tournament”, “Game Entries Now Being Accepted”, and “x Seconds Remaining”. Pressing start changes the entry countdown panel to player select. After selecting a character, the panel will revert to the countdown, waiting for additional players to join in the tournament. For each player that joins, the panel changes to a new color.
An interesting feature of this version of player selection is that you cannot choose a previously chosen character - there are no mirror matches here. The cursor will jump over previously selected characters and over the character the opponent currently has highlighted.
Despite the text reading “Tournament,” this was also used for the League mode. The code in the SelDs task at 0xFCE3AE specifically checks the competion type either 1 or 2 (Tournament or League) and routes to this screen if true. Which makes sense: the player entry and setup is the same process. Had the feature made it to shipment, it presumably would have been fleshed out a little more.
Barcode Tournament does land on this character select screen as well, but this is very likely not the original intention. We’ll discuss that more in its own section below.
Barcde Tournament
One of the most unique features planned for Virtua Fighter was the inclusion of a Barcode Battler-style versus mode.
Barcode Battler was a toy first released in 1991 that used barcodes to generate players, enemies and powerups. Players could then battle each other or the CPU. It was a game of numbers, with the scren itself nothing more than a simple LCD panel displaying digits, essentially a glorified calculator.
the cards with the barcodes had colorful illustrations with a fantasy RPG theme.
But it also a game of imagination. The most interesting feature was compatibility any standard, consumer product barcode. A candy wrapper or a soda bottle could be a powerful warrior or weapon. The search to find the very best barcodes enthralled kids around Japan, and the toy was a tremendous success.
So successful that an improved version - Barcode Battler 2 - was released in 1992, now with an output port to connect to other devices. Nintendo released adapters for the Famicom and Super Famicom along with several games that interfaced with the Barcode Battler, essentially turning it into a simple barcode scanner while the action happened on screen.
With Barcode Battle Mania in full swing as development of Virtua Fighter began, it’s not totally surprising that they decided to integrate that mechanic into the game.
The Beginning has a fair bit of commentary and background information on this mode:
ただし、操作の難しさが開発スタッフからも少なからず指摘されていたのである。そこで、子供たちにも遊んでもらえる方法をと考えられたのが、この「バーコードバトル」だったのだ。
…
でも、流行の要素をサッとゲームに取り入れちゃうあたり、AM2研らしいという気はしますよね。
However, the development team had pointed out on more than a few occasions that the game was difficult to play. As a result, the “Barcode Battle” concept is what they they came up with in an effort to create a game that even children could enjoy.
…
Still, whipping a hot new trend straight into the game does feel very AM2, doesn’t it?

Technical
00fceace: cmp.b #0x3, 0x0040ff34 ; mode 3 (BARCODE)?
00fcead6: be 0x00fceae2 ; -> the shipped select screen
00fcead9: test.b 0x0040ff34 ; mode 0 (NORMAL)?
00fceadf: bne 0x00fceff4 ; modes 1 and 2 -> A DIFFERENT SELECT
Remnant Code
There are some bits of competition mode code that still exists orphaned in the final version, as well as references and checks against now unused variables on live code paths.
Unfortunately, there is not enough code to run any of the competition modes as they were intended. The largest chunk of still-functioning program code is the character select for Tournmanet/League modes that we discussed earlier.
Entrant Table
Once a character is chosen from the competition mode character select,
There are still some quirks, of course. First there doesn’t seem to be a background.
0xFCE3AE - task__SelDs - live in the code, but checks the competition type setting in NVRAM - does nothing in mode 3, calls fce360 competition_select__display_entry for modes 1 & 2; mode 0 (normal) shows the standard char select screen
there are a couple inert checks on barcode mode - see 0fce3d6 and 0fe0fd6
Q: how is uk__game__select_variant 501298 differnet from cfg__competition_mode 40ff34?
0xFCE9C2 competition_select__draw_cell 0xFCF0E0 competition_select__draw_countdown 0xFCF1DD competition_select__draw_panels
" the wrong graphics package gets loaded by program_state__06__select_setup hardcoding package 3 instead of 4, while the panel-drawing functions correctly reference package 4, and only competition_select__draw_countdown has a genuinely bad pointer (using package 1’s digit sheet). "
Toy Mode
Bugs
Dural’s broken brainbuster
Leftover bit of Live Mode
The second reader is not dead code, and it has a visible effect:
00fe4c75: cmp.b #0x3, 0x40ff0e{cfg__link_id} ; == LIVE
00fe4c7d: be 0x00fe4d2c ; ...then draw no coin prompt at all
attract__draw_coin_prompt (0xFE4C6C) paints the blinking coin/credit banner along the bottom
of the attract screen. A cabinet set to LIVE — the spectator station of a linked Virtua Racing
bank, which takes no coins of its own — draws nothing. Forcing 0x40FF0E to 3 in Virtua Fighter
removes the attract-mode coin prompt.
The value names survive too, at dead__ptbl__link_id_value_names (0xFCD18C): NO LINK,
MASTER, SLAVE, LIVE. The table is unreferenced — the live value-list selector at 0xFCD0DB
never points at it — but the two surviving comparisons, == 1 and == 3, land exactly on
MASTER and LIVE.
A second unreachable setting, one byte away
0x40FF0D sits directly beside cfg__link_id in 0x40FF0C–0x40FF0F — the only stretch of the
settings block that the version-mismatch repair path at 0xFE451F does not reset. Like its
neighbour it is read seven times and written never, and every read is the same comparison:
00ff3b5d: cmp.b #0x1, 0x40ff0d{cfg__uk__view_param_scale}
All seven are inside 0xFF3B48, which copies seven 0x30-byte render parameter blocks out of
ROM (0xFD1BE7, 0xFD1C0F, 0xFD1C37, …) into RAM at 0x502000, 0x502030, 0x502060, … For
each block, when the flag is set, the second word is routed through the TGP geometry
coprocessor before it is stored:
00ff3b67: mov.w #0x1000000,[R24] ; TGP command 0x01
00ff3b6f: mov.w #0x3f400000,[R24] ; the float 0.75
00ff3b77: mov.w R2,[R24] ; the parameter
00ff3b7a: in.w [R23],R2 ; take the result back
The field it scales is zoom x and only zoom x — tgp__upload_constants (0xFF3B48) applies
the factor per scene record at upload time. So the byte is a horizontal zoom scale, squeezing the
picture to three-quarters width and leaving the vertical alone. Given that it sits in the block of
link-cabinet settings, the obvious use is a cabinet whose monitor has a different aspect from the
standard one; the setting survives, but nothing in the shipped game writes the byte.
Utilization Ramp
(the color behind the TIME text)
Announcer Commentary
Apparently one of the features during development was the announcer calling out certain attacks when they land: “turning kick”, “high kick”, “overhead throw” and so on. Here’s the whole playlist of announcer calls:
This is the same announcer voice heard at the beginning and end of a round: “Fight 1”, “Ready, Go” and “KO” and so on, but the attack callouts have never been heard before as they are not included in the sound test list.
This concept got pretty far along, as the functionality for it is implemented in the game and locked behind a removed game config option. Re-enabling it is really just as simple as manually setting that value in the config stored in NVRAM (see the Removed Configuration Option section above).
Additional Unused Commentary
But it doesn’t end there. It turns out the commentary lines used by the announcer are just a subset of what was fully recorded! Within the ROM for the second MultiPCM chip, right alongside the used lines, are 58 additional, unused phrases:
These are particularly interesting because they include many Japanese lines, such as “ura nage” and “ōuchigari.” In the latter half there is actual commentary and not just move names: “It was a too easy victory”, “For the finishing blow”, “What happened?” and so on.
Especially given the direct lineage of the game from Virtua Racing, one can’t help but make a comparison to Virt McPolygon, the race commentator in the options live screen for Virtua Racing and on unused terminals on Virtua Formula.
Wait… did VF have a Live mode planned?
A Planned Live Mode?
There is some evidence in the data that a spectator mode, similar to the Live Mode in Virtua Racing was in the works.
The biggest piece is two graphics sitting in Bank 3 at 0x1C1055 and 0x1C10B9:


A large and small yellow LIVE graphic, alongside all the other gameplay message graphics (DRAW, K.O. CHALLENGER COMES, etc). Most of those other graphics are used, but interestingly, right next to it at 0x1C1283 and 0x1C1327 are two REPLAY graphics:


The second one, the smaller of the two, is actually used by the game while the larger one is not.
Only REPLAY and LIVE have pairs like this, and to me that shows some kind of relationship. Perhaps the unused Replay graphic was meant for a spectator screen?
The LIVE graphics and the announcer commentary are the strongest proof of a spectator mode. Apart from that there is some circumstantial evidence in the code as well. As we’ll discuss later, Fighter was built from Racing’s codebase. There are dangling bits of Racing code here and there which are ultimately harmless but prove the game’s lineage. Of these leftover bits, several are related to the communications board, the piece that connected multiple Racing machines together, including the optional spectator monitor with the Live Mode on screen. Fighter does not have this board so any code trying to touch it has no effect.
But there is still reserved space in the game configuration for the old Virtua Racing comm board settings, including the Link ID to indicate whether the machine is Master, Slave, Live or network disabled. This setting was removed from the menu, of course, but it value is still checked in a couple place in the code.
One of them is actually in the main program mode dispatch, where it increments a synchronization counter if set to Master. So on every frame in the final version, it’s checking the link ID type, which always resolves to network disabled and thus skips the increment.
The other is in the Insert Coin draw routine, at 0xFE4C6C. Here it checks if the link ID is set to Live and skips drawing the coin prompt entirely if it is. This is the same behavior as Racing.
In fact, this Insert Coin draw code is very similar to Racing’s - it was clearly re-used and modified. Notably, there was another check in the Credits draw routine, so the Live screen in Racing did not display either Insert Coin or Credits. This check was removed in Fighters: Insert Coin is gone, but the Credits count remains.
Unfortunatly, this is not strong evidence. This could very easily just be overlooked leftovers in what was a pretty fast development cycle. There aren’t any signs the code was written in C, and if it was all in assembly, something like these checks may have just been glossed over.
But equally unprovable is that this was not intentionally carried over, with some comm board code left in in case they decided to ultimately go that route.
Unused Sega Logos
At ROMO bank 3 0x1c2c03 is an unused, simple sega logo screen:

There is also an unused music clip in the sound test, appropriately named segalogo:
The two were likely paired together. Both are orphaned in the final version.
But much more interesting than either of these (in my opinion) is this unused set of polygons in the ROMX section, beginning at 0x2DD000:

It’s the Pasela style Sega logo along with AM2, the game’s development team. But there’s something hidden here: the number of triangles (faces) per character is the same for both logos:
S = 62 faces E = 8 faces G = 53 faces A = 4 faces
A = 62 faces M = 8 faces 2 = 53 faces . = 4 faces
This is a pretty strong hint that one was meant to morph into the other:

To be clear, there are no intermediate key frames or anything else to indicate a tween animaion in the code, so this is a guess. We have no idea what speed it would have run. Or maybe it didn’t morph at all.
But the identical face counts is too big of a coincidence to ignore, in my opinion, and a morph is entirely plausible. Whether it did animate or not, this is a really unique and stylish logo and I wish it had been used in the game.
Unused Stage Backgrounds
A stage’s scenery is a 360° panorama split into eight views, one per camera angle: eight
pointers at package header +0x08, each to a record in the package’s own bank — 32×32 tiles
(256×256 px) in most packages, but 48×32 (256×384 px) in bank 1 packages 0, 3, 9 and 10, so
the shape is per-package and not a constant. Virtua Fighter ships eight stages, one per fighter, and they are bank 1 packages [0]–[7].
Bank 1 contains eleven packages. The table that selects them does not:
0xFD1711 {tbl__stage_gfx_package}: 40 41 43 44 46 42 45 47 47
└── bank 1, packages 0-7, with 7 repeated for the ninth slot
Nine bytes, and the highest package index in it is 7. Packages [8], [9] and [10] — 2453,
1079 and 3792 tiles — are never named by it, and gfx__package_select (0x5014B0) has only three
writers in the whole program: a constant #0x3 at 0xFCE379, and two sites that read this table.
Nothing can produce 8, 9 or 10.
Bank 2 holds three more ([8] [9] [10], 2368 / 2391 / 1430 tiles), and those are unreachable for
a different and stronger reason: gfx__load_package forms its table address as
bank_base + 0x100000, and bank 2’s package table is at offset 0x160000. No selector value can
index it. Reaching bank 2’s artwork would need a code change, not a data change.
All six are complete — eight distinct views each, their own palettes, no missing blobs:
| package | header | what it shows |
|---|---|---|
bank 1 [8] | 0x1B0360 | deep blue sky, heavy cumulus, sand horizon |
bank 1 [9] | 0x1C7950 | blue sky over a green plain (four views, each used twice) |
bank 1 [10] | 0x1D32C4 | forested hills under cloud, with a castle ruin on a hilltop |
bank 2 [8] | 0x1A78B0 | pale sky, light sand |
bank 2 [9] | 0x1BA380 | orange dusk over a mountain range |
bank 2 [10] | 0x1CD13C | violet sky over pale ground |
They are not duplicates of the shipped eight: rendering view 0 of all fourteen stage packages and
hashing the pixels gives fourteen distinct results. media/unused_stage_backdrops.png shows the
six as full panoramas, media/typing_2026_09_22/unreachable_stage_panoramas.png is the same six
in one sheet, and media/stage_backdrops_all.png puts them beside the shipped eight.
Old title screens
Hakkyoku-ken (or bājíquán in its native Chinese) is the style of martial arts practiced by Akira. But remember that Akira was a pretty late addition to the game. It seems that hakkyoku-ken had earlier connections to the game.
『拳児』の単行本には、至るところに付箋が貼ってありました。部長の裕さんにも強く勧めましたし、スタッフにも参考資料として読んでほしいと紹介したのを覚えています。
裕さんはかなり拳児にハマってしまったようで、会社のブックスタンドに置いてあった単行本を海外出張に持って行ってしまったこともありました。
そんな経緯もあり、裕さんはタイトル名を『バーチャファイター 八極拳(はっきょくけん)』にしたがっていましたが、もし、そうなっていたら、まったく違う世界観のゲームになっていたかもしれませんね
… My volumes of [martial arts manga] Kenji had sticky notes everywhere. I recommended it strongly to Yū, the department head, and I remember introducing it to the staff as reference I wanted them to read.
Yū seems to have got quite hooked — he once took the volumes off the office bookstand with him on an overseas business trip.
Partly because of that, Yū wanted the title to be Virtua Fighter Hakkyoku-ken.
- ISHII Seiichi, Video Game no Kataribe-tachi, pp.44
Ishii was a big fan of the Kenji manga, which he used for inspiration when designing his moves for the early prototype. The titular main character is a practitioner of hakkyoku-ken, and apparently this stuck a chord with Suzuki Yū.
It seems the title change was more than just a passing whim, as within the game’s data are what appear to be some unused title cards featuring the Hakkyoku-ken text. In fact, given the relative sizing, he may have even been considering the primary name as Hakkyoku-ken with Virtua Fighter as a subtitle.




Another interesting note about hakkyoku-ken: if we look at the actual kanji for hakkyokuken/bājíquán, 八極拳, the meaning if each characters literally is eight-extremes fist. The “extremes” referred to here are part of the ancient Chinese cosmology, so that is already a set meaning. But I do find it interesting that the roster of characters was eight the entire time. They never added or removed characters; they only replaced them. That was the only real constant of the roster throughout development: eight characters. This is not addressed in any interviews, but I think it makes for some good word play for a native Japanese speaker.
Saturn Version / Home Video Countdown

Now this one is kind of a head scratcher. It is several Japanese words split into individual graphics. Taken altogether, it seems to describe a countdown screen to the relase of either the Saturn home port of the game, or a home video of some sort.
None of these graphics are referenced, sitting alongside the rest of unused graphics in Bank 2.
The graphics exist in the data in the order presented here, from the left column going down then the right column. In that order we have
日 nichi - Day
ホームビデオ hōmu bideo - Home Video
まであと made ato - Remaining Until
中 chū - Currently
絶賛 zessan - Rave Reviews
発売 hatsubai - Goes On Sale
家庭用 kateiyō - For Home/Personal Use
サターン sataan - Saturn
In this order, there’s no real grammar to speak of. There were also very likely numbers involved, from one of the fonts. And also consider that 2D graphics went through a tile deduplication pass and the same logic likely applies here: when constructed for its intended display, any of these words could be used multiple times.
Phrases like hatsubai “Goes On Sale” and made ato “Remaining Until”, especially paired with nichi “Day(s)” set a clear overall meaning for the screen: X Days Until Y Goes On Sale. The chū “Currently” and zessan “Rave Reviews” indicate phrasing for after that day passes: Y Now On Sale To Rave Reviews, which may seem somewhat presumptive to write ahead of times, but this is actually pretty standard Japanese advertising copy.
But the real mystery is: What was going on sale? The remaining words are “Home Video” as well as “For Home Use,” “Saturn” and “Version.”
The first thing that likely comes to mind is “Saturn Version,” perhaps including For Home Use to mean For Home Console. It’s a possibility - but was a Saturn version even in the cards at this point? Note that the graphics are in Bank 2, part of the mask ROM and not in the “quick fix” ROMX area. They are older graphics.
Even if we assume it’s talking about a Saturn port, what is this Home Video it mentions? Things are made even more muddied by the fact that commercial video cassettes in Japan were released in two versions - for Rental and for Home Use, the exact same phrasing that also appears here.
The first VF related video tape to come out was the CGMV tape, released in February 1994. It features arcade game footage and discusses strategies. It does not mention anything about a Saturn port, however.
Other Unused Tile Graphics
Win Markers
Look closely at the the win count icons below the HP bar.

Notice anything? Look at the HP bar frame on both player sides, then at the win icons again.
The HP bars have mirrored shading, with the “lighting” on the lower left of P1 and lower right of P2. The win icons do not: the lighting is on the lower right for both.
But there is a set of unused, properly mirrored icons in the data, as shown here with the unused set on top and the used set on the bottom:

Each of the 16x16 icons have been resized to 64x64 and given a blue background here for visibility. This illustrates the 2 pixel margin that they have. And because those margins exist…

The icons are ever so slightly misaligned in the final game.
HUD Name Font
Some names are hardcoded, some are spelled out using a full font
b3_1C1FB9__b0_128390__used__ix-hud-name_letters.png
1P Mode Opponents are Barely AI
And They’re Broken
Have you ever seen a CPU opponent jump?
No, because the scripting system is broken.
If you enjoyed this article and found it useful, please consider contributing to our Ko-fi. Thank you! 🩷