まずは、とっくに20年たっている話。バイト時代の話から始めましょう。
1991年、大学2年の時に、横浜にある「ARC」というゲーム会社でアルバイトしていました。ごく短期。
名称変更はありましたが今でも存在している会社ですね。
たしか、アルバイトの応募で、「コメット」持っていったのではなかったかな。
1年の秋に大学祭のために作って、冬頃に満開製作所から発売してもらったゲームね。
この会社には運よく X68k があったので見てもらえて、それなりにプログラムできる、ということでバイト採用。
仕事内容は雑用。
プログラムできるならちょっとやってみな、と言われ、その時作っていた業務用プロレスゲームの、レフェリーの座標移動作りました。
プログラムをしたというよりは、どの程度のことができるのかテストされた、という程度です。
レスラー2人の座標を渡すので、その中間よりちょっと上あたりにレフェリーの座標をセットして、という課題でした。
プログラムが判る人には簡単な話で、平均位置を出して「そのちょっと上」に表示すればいいのですね。
アセンブラでも、足して1ビットシフト(2で割るのに相当)すれば平均が出せます。
どうも、テストとして求められていたのはその程度で良かったようです。
当たり前のことが当たり前に出来るかどうか。それすらできなければ「使い物にならない人材」ですから。
でも、平均位置に表示するだけだと、レフェリーの動きが不自然になる、と僕は考えました。
そこで、レフェリーの座標を、前回位置を元にして「平均位置に向かうように移動」するように作りました。
その際、座標のあたり判定をして、どちらかのレスラーに表示がぶつかりそうなら、移動しないようにします。
すでにぶつかっていたら、速やかにぶつからなくなる方向に向かって逃げます。
そうしないと、レスラーが縦に並んだ時に、上のレスラーと重なっちゃうかもしれないからね。
同じ位置に人が二人いることになったら、それは不自然な表示です。
CPU が何だったかは忘れたけど、ニーモニック表を見ながら30分くらいでプログラム作ります。
テキストファイルで組んだだけで、アセンブラとかは環境にないので、念のためじっくり見直し。
これでプログラマーの方に渡して、組み込んでもらいます。
大きなエラーもなく、一発で思ったような動きをして驚かれました。
(「レスラーにぶつからないように」とかは指示されてなかったのに作っていたので、それも含めて。)
今調べた限り、この会社がプロレスゲームを出したという記録は無いみたい?
記録漏れかもしれませんし、名前を出さない下請け仕事かもしれません。
#記録って言っても、所詮は Wikipedia に書いてあったのを調べただけです。
メイン取引先のライバルからの受注もあったりしたので、名前を出せない仕事もしていましたし、隠れて仕事をするために近くのマンションに別室も用意されていました。
これで「出来る奴」と認めてもらい、雑用とはいえゲーム作成に関わらせてもらえます。
とはいえ、プログラムではなくて、データ作成など。
ゲームギアで、当時流行していた「ちびまる子ちゃん」のミニゲーム集作っていて、仕様書を元に「スゴロク」のマップを埋めました。
スゴロクなので、通るマスは決められたキャラで。それ以外の部分は適当にって、そんな仕事。
このゲーム、後で企画変更になって、ちびまる子ちゃんではなくなった。
理由は知らないけど、版権取れなかったのではないかな。
たしか、絵とか変更して「クニちゃんのゲーム天国」になったのだと思う。
僕が埋めたマップがどうなったのかは知らない。
#基本的に仕様通りに埋めただけなので、自分が自由にしてよい場所をどう作ったかは覚えていない。
そのため、同じかどうかすら不明。
会社に、当時は珍しかったカラーインクジェットプリンタがありました。
シャープのIO-735X というやつ。今調べたら、定価で24万8千円だったようです。
#当時はプリンタ自体持っている人が少ない時代。
持っていても白黒。よくてカラー熱転写。
ワープロで使われるのが普通で、それ以上のことがしたければ自分でプログラムを作る必要があった。
画面のイメージをプリントアウトして発注主に見せられる、という思惑で買ったらしいのですが、プリントアウトするためのプログラムが無い。
試しに作ってみてよ、と言われ、作ることになりました。
プリンタ自体の制御は、MSX で熱転写プリンタに印刷するプログラムとか作ったことがありました。
これは難しくない。
まずは、白黒前提でスーパーファミコンのキャラクタデータを印刷するプログラムを作ってみます。
ここまでは、比較的簡単に出来ました。
これだけでも、「進捗状況を見せられる」と喜ばれました。
そこからカラー対応。
当時はカラープリンタ自体珍しく、画面の色をどうやったらカラー印刷できるのか、解説した本なんかもない。
「あらゆる組み合わせで印刷しみてさ、それらしい色を探し出せばいいよ」みたいに社長が言うので、組み合わせを片っ端から印刷するプログラムを作ってみますが…
先に前提を書いておきましょう。
最終目的は、スーファミのゲームの画面などをプリントアウトすること。
スクリーンショットではなく、専用ツールで書いた「キャラクター」や、そのキャラクターを並べた「マップ」のファイルを印刷します。
スーパーファミコンは 32768色。
一方、カラープリンタは、CMYK の4色のインクの有無の組み合わせで色を出すので、論理上16色。
16色ではとてもスーファミの色を表現しきれないので、これを 4x4 ドットで扱います。
1色について17階調の表現ができるようになります。
(4x4 の 16ドットについて、0ドット塗る、1ドット塗る、2ドット塗る…16ドット塗る、の17段階)
IO-735X は180dpi だったので、A4 横方向が8インチとして、1440dot位印刷できます。
4x4 でファミコンの1ドットを表現すると、横に 360dot が印刷できることになります。
スーファミは画面上、横に 256dot 表示できますが、これがちゃんと収まります。
「1画面が収まって少しあまる」サイズで印刷した覚えがあるから、多分このサイズで作ったのではないかな。
色の表現方法はこれで良いとして、社長の示唆するように、あらゆる組み合わせを印刷してみようとします。
…4つのインクが17階調ですから、17x17x17x17 = 83521 の組み合わせがあるんですね。
どの色がどのような配合かも示さないといけないので、少し色を塗ったら、横に CMYK の割合を表示しました。
たしか、1行に4色分くらい、縦に32行位表示するとちょうどよかったような。
1ページに128色が印刷されることになる。
ちょっと計算してみると…653ページ印刷しないといけない。
そして、その中から「スーファミの色に近い色」を、32768色選び出してテーブルを作らないといけない。
できるわけありません。数ページ印字したところで気づいてやめました。
2~3日、ひたすらいろんな印刷を試しては、にらめっこ。
まずは、CMYK 共に値が大きいときは、インクが多すぎて紙がふやけ、使い物にならないことを知りました。
でも、この時点では実験なのでこの問題は無視。とにかくいろいろな色を試してみます。
そのうち、「なるほど、RGB の補色が CMY なのか」という、今考えれば当たり前のことに気付きます。
これがかなりの進展。
そして、色を混ぜれば「黒く」なるのだから、CMY 共に値が大きい場合は、一番少ない値の分だけ黒を混ぜ、その分 CMY の使用を差し引くと「紙がふやけない」ことに気付きます。
色合いが多少おかしいながらも、それらしい印刷をするプログラムが出来上がりました。
今考えれば、ガンマ補正とか付けないといけないのだけど、当時はそこまで知識が無い。
あと、キャラクターを並べて「マップ」を表示するようにも対応します。
僕のプログラムはここまで。
社長が想像していた「カラーで美しい印刷」とまではいかなかったようなのですが、買っただけで使えていなかったプリンタが動くようになった、というだけでも喜ばれました。
この時の経験、結構後まで役に立ちました。
同じテーマの日記(最近の一覧)
関連ページ
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |