第69回 yaneGameScript2000(ほくほく度120%...?) 99/8/11
yaneuraoGameSDK1.00α5を良く見た人ならば、スクリプト機能(Cコンパイラもどき)が付随していることに気付いただろう。かなりデバッグもしたし、安定動作している。こいつを単独で分離し、このスクリプトから呼び出せるように、いくつかのゲーム用の関数をユーザーに公開することで、開発環境なしにお手軽にゲームプログラミングが出来るのである。(というか、もう実際そうやってゲームを作っているわけで)
そんなわけで近いうちに、それも公開なんかしちゃったりする。このスクリプトをコンパイルしたバイナリコードは仮想CPUを実装して実行しているからして、バイナリ互換性を保ったまま他のプラットホームに持っていくことも考えられるわけである。以前言っていたコモンプラットホーム構想が、意外な形で具現化してきたわけである。
もちろん、やねうらおのことだから、可能な限り、これらのコードをフリーで公開するつもりである。ソースフリー。ロイヤリティフリーである。同人で使おうが、何しようが構やしない。こういうものを自分だけのものにして金をとっても仕方がない。研究成果やライブラリは、どんどん公開すべきである。それをひた隠しに隠して他者をだし抜こう(?)だなんて性格が悪すぎる。あるいは、公開できないほど恥ずかしいソースだというならば、技術者失格である。僕なら、そう思う。
しかし、自分では、そのスクリプトでゲームは作っていなかったりする。というか、スクリプトに関数追加&トライアル&デバッグで、ゲームまで作る時間がないのである。でもって、結局そのスクリプトでゲームを作っているのは、プロのゲームデザイナーの人なのである。自分の作ったスクリプト言語を、プロのゲームデザイナーの方に使っていただいて、リアルタイムに感想やら、改善要望やらが伺えるというのは、この上なき至福である。(改善要望どころか、不満やら罵倒やらもたっぷり頂戴できるが)、それでいておまけに印税がぽーとかもらえた日にゃあ、至福で至福で至福が肥えて困るのである。(意味わからんがな、お前!) しかし、メインプログラム一行も書いとらんから、印税がぽーは、まあ、ないんやろな...。
ともかく、このスクリプトは、3万本近く売るソフトに使われているわけである。特別な開発環境なんかなくって、プログラミングもあまりよくわかってない人も、テキストエディタとグラフィックツール、音楽だけなんとかすれば、ゲームが作れてしまうわけである。ゲームが面白くて、かつ販売能力さえあれば、何十万本も夢ではない。そのスクリプトを動かすためのプログラムが、もうすぐ無料で公開っちゅーことなんや!だからして、このスクリプトで面白いゲーム作ったら、同人なんかで売らずに、販売してあげっからやねうらおのところまで持ってきてね。(でも審査は厳しいので覚悟しておくように)
しかしやねぇ、ゲームの制作で死ぬほど忙しいっちゅーときに、ゲームラボの編集子から、「MODチップの制作について書きませんか」とか言われた。うーん。なんで私なのかなぁ(笑) 加島さんを始めとして、適任者って、いっぱいいると思うんですけど...。そのあと、徹夜続きで疲れているところに、弟子がホームページを作り方おせーて、とか言って遊びに来やがった。まだマップエディタ修正せなあかんねやー。そもそもやなぁ、ホームページの作りかたなんてなぁ、んなもん、俺が知りたいやい!まあ、泣く子には勝てんので、WORD98でHTMLに変換したらー?とか無責任なことを言って逃げた。なんかわかったようなわからんような顔をして、弟子は帰って行った。彼女が何のページ作ってるのかよくは知らないけど、なんでも、ファーストフードのバイトのときに使ってた制服とかを売るとか...。彼女のことだから、金になるんなら、最後には自分のパンツまで売りかねんから心配である。(しかし、あいつ、ホンマにここ見てへんねやろな...見てたら俺、刺されるかもな...このままもしこのホームページの更新が途絶えたら、どうか彼女を全国的に指名手配してください。えーっと彼女の名前はげげ!どうやら忘れ物を取りに帰ってきたらしい。刺されるのか、このまま刺されてしまうのか。俺様、今世紀の最大のピーンチ!ゲフッ。
第6A回 yaneGameScript2000その2(速度検証) 99/8/15
yaneGameScript、そろそろ仕様が固まってきたので、公開しようと思う。しかし、友達からyaneGameScriptは仮想CPUをエミュレーティングしとるから、遅いのではないかーという指摘をもらった。パケかー!!そもそも、Z80とか8ビットCPUをエミュレートしてるエミュレータの類でさえ遊べるだけのゲーム速度が出てるんだから、今風に4バイト命令セットの仮想CPUを採用して、これでゲームが遊べないはずがないやろー。ちゅーか、これで、もうゲーム作って発売間近なんや!いらんことゆうてくな!こっちも不安になってくるやろ...(なんや、たいして自信あらへんのか>俺) いやいや、マップ画面でPentium133ですら、60FPS出てたからそのへんは大丈夫だと思うけど...
まあ、マップ表示部分とかは、スクリプト側から関数呼び出すだけになってるんで、スクリプト側では実はたいしたことはやっていない。それでも遅けりゃ、スクリプトはC言語風なので、簡単なコンバータを作れば、C言語のプログラムに早変わりときたもんだ。あとは、Cコンパイラを通せば、スクリプトがネイティブコードになる仕組みである。しかし、そこまでしなくてもスクリプトは十分速いように思うけど...気が向いたら、BMSファイルを読み込む関数なんて用意して、スクリプトを使って誰でも自分だけの音ゲーが簡単に作れるようにしてしまうつもりだ。おまけに、特別な開発ツールは一切不要。もち、Cコンパイラなんて不要。メモ帳だけあればOK。マニュアルもすべて付属ときたもんだ!なんか、夢のような夢の話である。(夢の話なんか?それじゃ全然あかんやん...)
そんなことよりやねー、今月号のεLogin見た?えっ?εLoginを知らない?そもそも、それは何て読むのかって?エログインって読むのよ。エロがグインなわけよ。エログが淫!かも知らねぇし、ひょっとするとエログロがイーンかも..(お前、ゆうてること全然意味わからんて...)いや、違うのよ。それ見て、驚いたのよ!今、作ってるゲーム、9月3日発売予定って書いてあるのよ。最初のほうのページに2ページにも渡って紹介されてるんよ。おまけに、出来てもいないゲーム画面が(笑) あれは、きっとペイントツールで描いているに違いないのだわ(マジで) しかし、9月3日発売予定って...そりゃ、びっくる様もびっくりだにゃ!ちゅーことは、もうほとんど完成してんとあかんのちゃうんけ...マスターアップっていつなんや?ソフ倫はちゃんと申請済みなのか?体験版って、どうなってんのや?予約特典とかあんのか?あったら予約しに行きたいねんけど。(なんや作ってるくせに、自分で金出して製品版買うんかい!) ちゅーか、製品版がもうすぐ出るんやったら、それ買ってきてやなぁ、そのプログラムを見て作ったらええんや。(だから、お前が作らんことには、製品版でないんだってば!>俺) このゲーム、あえてタイトルは言わないけど、エロゲーなのにリアルタイムアクションがあるんよなー。めずらしいっちゅーか。プログラマ泣かせっちゅーか。エロゲーって、紙芝居でええんちゃうん?とか思っていたやねうらおに、ゲームデザイナーの人は、アダルトだからと言って妥協せずゲーム性を追求しなさい!とホペタビシバシしてくれたのよ。だから、買ってよ!(買って欲しかったら、ゲーム名ぐらい言え!>俺)
そういや、このゲームスクリプトは仮想CPUのエミュレーション技術によって支えられているわけなのだけれど、最近のエミュブームを支えているのは、マシン速度の飛躍的な向上にあるのだと思う。そもそも、エミュとは...
エミュー(英 emu) エミュー科の鳥。ダチョウに似ているが、やや小形。体長170p前後。全体に灰褐色で、首のあたりはやや青みを帯びる。オーストラリアの平原にすみ、果実、草などを食べる。(小学館「例文で読むカタカナ辞典」より)
な、なんだ。てっきり、ファミコンやらプレステがパソコンで遊べるのかと思ったぞ。どうやら僕の勘違いだったようだ。ごめんごめん。(なんのこっちゃ)
それはともかく、VCの最適化はかなりのもので、エミュブームを支えている要因として、この最適化精度の向上も影にありそうだ。GNUのCコンパイラ(以下gcc)もそれなりのコードは生成するのだが、VCの最適化に比べたら子供だましみたいなもので、しかも386コードしか吐けないというのでは既に終わっている。Linuxのネットワークパフォーマンスの悪さは、実は、そのへんに根差すものだとよく言われる。(Linuxはカーネル自体が小さいから、少ないメモリでならWinNTより有利なケースもあるのだが、最近のパソコンで比較するとたいていWinNTよりパフォーマンスが悪い。まあ、サーバは安定度やセキュリティのほうが大切だから、単純な速度比較はあまり意味がないかも知れないが...)
仮にいま、およよよCPU用のCコンパイラが無いとする。それならばと、gccを移植する人は山のようにいる。たとえばPIC(ハードウェア工作のところで紹介したワンチップマイコン)用のgccすら存在する。gccを他のプラットフォームに持って行ったり、他のCPUに対応させたりする人はゴマンといるというのに、何故、gcc以上のCコンパイラを作ってやろうという人が誰も出てこないのか僕には不思議で仕方がない。gccの最適化なんて、コンパイラの厚めの教科書に載っている程度のことしかやってないんだから、あれと同じものを作るぐらい何ということはないし、Pentiumで実行されることを考慮したコードを吐くようにするだけでもずいぶんと違うだろう。そういう人が出てきて、周囲がそれをサポートする...そんなのが理想なのだが、残念ながら日本にそういう環境はないし、日本の学生(こういうのは、時間に余裕があって探求心旺盛な学生の仕事だす)に、それほどのチカラもない。日本の学生は、大学に入るまで海外の文献に目も通さないし、海外の論文を照会することとすらしない(照会の仕方すら知らないのが普通だろうし) 僕に言わせれば、これはかなりの異常事態なのだが、誰もそんなことを騒ぎはしない。
つねづね、プログラミングとは本来サイエンスの一分野であるべきと思っているのだが、そのためには研究を発表できる場所が必要である。別に、高尚な内容でなくても、「オブジェクト指向データベースによるカードキャプターさくらの衣装論考」であっても良いし、「遺伝的アルゴリズムによるメイドさん育成シミュレーション」であっても良い。「サザエボンにおける、サザエとバカボンの因子分析レポート」とか「こっくりさんによるオカルト的プログラミング」でも、「離散系におけるデジキャラット」でも、まあ、なんでもいいから(なんでもいいんか?)、あるレベルの者が集まって、そういう馬鹿なことを気軽に書けて、意見交換をする場所が無いのである。やるとしたら、内輪同士のメーリングリストになってしまうのだろうけれど、それはまた違うんでないかなぁ...どちらかと言えば、不特定多数でやりたいのよ。うーん。そんなの期待するだけ無駄なのかなぁ。あなたなら、どうされますか?
第6B回 市販のゲームを検証する(自分のを検証されるのは嫌:p) 99/8/21
仮に、売り物にするのならば、ある程度の安定性が要求される。ユーザーは、いつなんどき画面解像度を切り替えるかわからないし、リアルタイムアクションでスピードが要求されるというのに、trueカラーで立ちあげる奴もいるかも知れない。バックでMP3プレイヤー動かしてる奴もいるだろうし、テレホだからインターネットは、つないだまま!なんて奴もいるに違いない。ダブルクリックで良いところ、なかなか立ち上がらないもんだからトリプルダブルクリックして、3つぐらい起動するやつもいるだろうし、学校でネットワークコンピュータを介して起動!なんて奴もいる。フルスクリーンにすると640×480は疑似表示になってドットが潰れるノートパソコン(Sony Vaioとか)とか、PentiumIIのくせして5年前のビデオカードかと思わせるような粗悪なNEC LaVieNXなど、これらの劣悪な環境(?)に対応するのは、並大抵のことではない。
ところで、いま、手元に先週買ってきた、市販のゲームがある。例によって、紙芝居方式のゲームなのである...誰や?そこでエロゲーだろとかゆうてる奴は...。エロゲーを馬鹿にしてはいかーん!味方を知る為には、まず敵から、である。(そんな諺、いつ出来たんや...)
ときに、このゲームのメッセージ表示部分には、減算ブレンドが使われている。これは、メッセージ表示部分のビットマップ画像の明度を下げて、文字を読みやすくするためのものである。この機能を見て、ブレンド転送をyaneuraoGameSDK1.00α5で実装したのである。なかなか効果としては面白いものがある。しかしやねー、これ、多色モードだからこそ出来る芸当であって、これが256色だと、近似色をパレットから探す作業が入るので、こうは簡単にいかない。ちなみに、このゲーム、256色は非対応のようである。アクションシーンがなければ、256色対応なんて、何のメリットもないから当然かも知れない。外人のプログラマの友達に256対応のゲーム作ってますとか言ったら、Oh〜!クレイジージャパニーズ!とか言って、笑い飛ばされた。なんや、失礼なやっちゃなー! お前、外人のくせに、日本語も知らんのか!(そら普通、知らんやろ)誰がクレイジージャパニーズやねん!ニゴロカラーズアーベリーインポータン!インジャパン、アダルトゲーム、ハブ、ア、ラージマーケット!ユーノー!ユーマスント、イグノアイット。ユーマスント、スライト、ニゴロカラーズ。ジャパニーズ、オルウェイズ、セズ「エロゲーを馬鹿にする者は、エロゲーに泣く」 イッツ、ザ・ベストアプローチ!ユーアンダースターン?ここまで、言ってて思ったのだが、俺ってクレイジージャパニーズなんやろか...?
ところで、最近、圧縮ルーチンを書く必要に迫られた。個人的には、日本で、圧縮率の非常に悪いlzh形式が幅を利かせているのも、かなり異様な光景だと思うのだか、みなさんは、いかがだろうか。rar形式(知らない人もいるだろうが、WindowsならばWinRarというソフトで圧縮する。ファイルの分割機能もついていて、非常に使いやすい)と圧縮率だけ比べても、lzh形式は勝てない。速度面で劣り、圧縮性能で劣り、ツールの利便性で劣るという、ヘレンケラーのような3重苦を抱えながら、なぜそこまで頑張るのだろうか…。
データというのは、そもそもエントロピーっちゅーものがあって、特殊な特性がデータに存在しない限り、どんな圧縮法を使ってもエントロピー周辺に落ち着くと考えるのが普通である。lzh形式とrar形式で10%も20%も圧縮後サイズに差が生じるのはおかしいのである。まあ、最近のHDD容量を考慮するに、huffman符号化であろうが、lampel-zip法であろうが、劇的にファイルサイズが小さくなるわけではなく、不可逆圧縮ならばMPEG2やらMP3が代表的で、いまさら、それに代わる圧縮法の研究のためウェーブレット解析なんて勉強したくないし、ゲームで使う類の可逆圧縮ならファイルを一つに束ねることによって、キャッシュヒットの無駄や、クラスタの無駄を無くすぐらいでもいいんでないかなーと思うようになった。そんなわけで、その機能を次回のyaneuraoGameSDK1.00α7(いつまでαバージョンのつもりやねん...)のほうに盛り込む予定である。
第6C回 弟子失踪(奈落の果て) 99/8/22
弟子が失踪した。あまりの苦行に耐えられなくなったわけではない。彼女の友達の話では、ここのところ連日連夜、コミックなんちゃらとコスパ(やねうらおは、サラスパとかの類だと思うのだが、多分違うのだろう)に行っているらしい。せっかく、やねうらおが、ゲーラボの原稿を書き終えて(結局引き受けてしまったのだ)、9月発売のゲームのほうも自分の担当分は終わって(最終調整残ってるけど)、ちょっくら遊んでやろかいなーとか思った矢先にこれだ。しゃーないなー、暇つぶしに、誉めパゲ(HomePageのことらしい)でも更新するとすっかー、とか思ってyaneuraoGameScript2000β1の公開に踏み切ったわけである。(あれは、あんたの暇つぶしやったんかい!)
そんなわけで、今回は、yaneGameScript2000の活用方法について書く。
まず、プログラムは、使い方は、実行ファイルygs2000.exeの存在するフォルダにscriptというフォルダを作り、そこにgamestart.cというテキストファイルを作成し、そのファイルにプログラムを書いていけばOKなのである。一番大切なことのような気がしないでもないが、書き忘れていた。
次に、なんだかんだ言っても欲しいと思う機能が無いこともある。そういうときは、関数の追加が出来る。(もち、VC++が必要だけど)
手順は、
1.TScript.hのTScriptクラスに関数メンバを追加する。
例) static TUserFunc(BBBB); // BBBBというメンバ関数を用意する
2.その関数メンバをTScript.cppのTScript::TScript(void)内で登録する。
例) RegistUserFunction("AAAA",BBBB); // スクリプト側からのAAAAという関数呼出しは、BBBBの呼出しになる
3.そのメンバ関数を実装する。
例) TUserFunc(TScript::BBBB) { return *p + *(p+1); }
たったこれだけである。
このとき、ある仕掛けがあって、*pは、スクリプト側の第一引数、*(p+1)はスクリプト側の第二引数というように、引数列へのポインタ(LONG*)がpに入ってくるのである。引数チェックはしていないから、いくらでも無制限に入ってくる。そして、returnがスクリプト側のこの関数の返し値となる。よって、上の例であれば、スクリプト側で、
x = AAAA(10,23); // TScript::BBBB( )が呼び出される
とやれば、xには、10+23で33が返ってくるというわけである。これを利用すれば、スクリプト側で不足している機能だけC言語側で関数を提供してやれば、なんとかなるのである。よって、デザイナーの人にスクリプトでプログラムを書いてもらって、不足している機能だけ要望をもらい、それを処理する関数を実装するという流れでゲームの製作が出来るというわけである。今回の開発で、デザイナーの人と距離があって電子メールとのやり取りが続いたわりには、案外すんなりと行ったのは、そのへんに成功の要因がある。
ちなみに、そのゲーム、イラストレータの人は1枚描くのに1日以上費やしていた。えらく時間かけてはるんですねーとか言ったら、本当は、1枚に3日ぐらいかけたいんですけどと言われた。なんでも、ELFなんかだと1枚に7日費やしているそうである。うーん。そういうもんなんかー。この絵でも十分綺麗だと思うんだけど...プロの世界って厳しいんやね。
そんなわけで来月号のεLoginに体験版ついてるから、面白そうだったら買ってくれよなー。(だから、ゲームの名前を言わんと買いたくっても買われへんねんてば!!>俺)
第6D回 矩形対矩形の交差判定(体験版のバグ...やっちゃったよ、おい!) 99/8/24
その問題の、来月号についてくるεLoginについている体験版なのだが、実はバグ入りだった(笑)
このバグの話をする前に、いくつか説明しておこう。このゲームは、アクションシーンというのが大部分を占めるのだが、このアクションシーンというのは、マップ上をらりらりと移動するタイプなのだ。そこに、警備員や監視カメラが出てくる。そいつの警戒視界がビジュアルに表示されているわけだ。
ひとつのマップチップは、32×32。そいつが主人公の動きに合わせてドット単位でスクロールする。主人公の移動は、一応一歩が4ドットなので、4ドット単位でスクロールするとも言える。警備員・監視カメラについては、その移動量をドット単位で設定できるようになっている。床判定は、1/4チップ(16×16)単位で、この床判定がある部分は、警戒範囲が遮断される。
警戒範囲は、半透明表示される。リアルタイムに半透明処理やってたら重くなるから、あらかじめ床チップに対応する半透明チップをスクリプト側で設定することによって、警戒範囲については、その半透明チップが適切な位置に表示されるという仕組みである。
ところが、警備員・監視カメラは、ドット単位で動くので、その半透明チップもドット単位で転送しなければならない。しかも、床判定に応じて警戒範囲が遮断されるという処理が必要になってくる。非常にややこしい。まず、アルゴリズムは、こうだ。
遮断されるからには、スキャン方向を決定しておかなくてはならない。キャラが下を向いているならば、スキャン方向は、下方向と固定してしまう。これでも不自由はない。スキャンが、床判定にしたがって遮断されるということは、床判定幅(16ドット)でスキャンしなくてはならない。いま、仮に、キャラは下を向いているとする。左右の端は、1/4チップからはみ出る中途半端なドットから始まる可能性もあるので、両端のスキャンは特別な処理にする。また、スキャン開始y座標も1/4チップからはみ出るかも知れないし、そうなってくると終了y座標も、1/4チップからはみ出るかも知れない。ということは、
1.左端のスキャン (開始位置調整・中間部・終了位置調整)
2.中央のスキャン (開始位置調整・中間部・終了位置調整)
3.右端のスキャン (開始位置調整・中間部・終了位置調整)
という、9つの異なる処理が必要になる。
これが4方向に対してだから、4×9=36の処理が必要になる。高速化もあるがともかく、余計なことは考えたくなかったので、原始人のように、そのままカット&ペーストを繰り返し、このルーチンを完成させた。ただ、回転をともなうので、変数置き換え等は注意しなければならないのだが、最後の最後、30回目〜35回目あたりの置き換えのときに、睡魔に襲われて、どうもいくつか間違えてしまっていたのだ。それだけならば、まだ表示がちょっとズレてるかな?という程度で済んだはずなのだが、主人公がこの警戒視界に入ったかを検出する処理を行なっている部分、それは当然、床判定によって警戒視界が遮られることもあるので、警戒視界の表示と一致している必要があり、スキャンループの中でそのチェックを行なっているのだが、主人公の判定領域は矩形であり、その警戒視界も矩形であるから、矩形対矩形の交差判定になるわけである。これは、たいていのゲームにおいて必要なので、覚えておいて損はない。矩形対矩形の交差判定は、
if ((m_PosX[0]+m_nFSX<x+cx2) &&
(m_PosX[0]+m_nFEX>x) &&
(m_PosY[0]+m_nFSY<y+cy2) && (m_PosY[0]+m_nFEY>y)) {
m_bFound = true; //
見つかっちゃった
}
と言うように、「矩形Aと矩形Bが交差領域を持たない」という条件を考えて(具体的には、1.矩形Aの下端が、矩形Bの上端よりも上にある,2.矩形Aの右端が矩形Bの左端より左にある,3.矩形Aの左端が、矩形Bの右端より右にある,4.矩形Aの上端が矩形Bの下端より下にある,という4条件が必要条件であって、この4条件のORが、実は命題の必要十分条件になっている/証明略)、そいつの否定をとった(多項のド・モルガン則でAND条件に書き直した)のが上のプログラムである。というか、この説明では何を言っているのかまったくわからない人もいるだろうが、そういう人は、実際にこのゲームを買って研究していただきたい。(だから、ゲーム名を言えって!>俺)
まあ、わかる人にはわかるだろうけれど、この判定方法だと、判定矩形にマイナスの大きさなどを与えられると、おかしいことになってしまう。先に述べたバグと、この判定方法が原因で、警備員がある条件を満たすとき、主人公は見つかってもいないのに、見つかってしまうのである。体験版をアップした次の日に気付いてfixしたのだが、付録につけるための体験版としてデモ版と、ちょっと遊べる版をεLoginの編集に送ったうち、もし後者が採用されていたなら、バグ付きということになる。まあ、体験版だからどうでもいいんだろうけど、ブランドイメージにかかわるからなー。やっぱり体験版であっても、この手のバグがあるのとないのとでは、クロネコヤマトと宇宙戦艦ヤマトぐらい違うからなー。(どんだけ違うんや?言えるもんなら言うてみいや>俺...)
第6E回 異次元空間(26次元グラフィックス) 99/8/30
やねうらおは、いま生きているこの空間が何次元空間だかは知らない。単純に考えると空間軸と時間軸を含めて4次元か?とか思えるのだが、少なくともグラビティが空間軸・時間軸に作用するだろうし、ホーキング博士は虚数単位を空間軸に導入してなんかやってたし(そこまでするんなら質量にも虚数単位を導入すりゃいいのにとか思わんでもないけど)、そもそもやねぇ、そのポイントを表すパラメータの数で次元が決まるのだとしたら、多元数を導入すれば1つのパラメータで表せるわけだし、そういう意味では1次元かなーなんて、いつもやる気のない結論になってしまい周囲の者の失笑を買っている。
その昔、僕の知人が、4次元グラフィックスに凝っていた。(x,y,z,w)で空間を表すのだが、w方向は画面に投影せず、平面w=0でのスライス(4次元図形と平面との交差領域は3次元図形になる。一般にn次元図形と平面との交差領域はn−1次元図形)して、それを画面に表示する。時間tに対して、平面w=tでのスライスを画面に表示すれば、その4次元図形の断面(=3次元図形)がわかるわけである。それを時間方向に堆積させたものが、その4次元図形というわけである。理屈は、まあわかるのだが、見ていても感覚的に受け付けないものがある。彼の話は、さらに続く。「次に回転をさせよう。3次元では、3C2=3通りだが、4次元では4C2=6通りの回転が出来るわけだ」とか何とか言って、zw平面で回転だとか、yw平面で回転だとか見せてくれるわけである。しかし、何がどうなっているのかさっぱり理解できない。何もない空間に突然ぼわっと、三角錘が出てきて、それがいびつな球形になって、12面体になって、直方体になって消えるとか、そんな調子である。しばらく考え込んでいると、「やね君は馬鹿だなぁ。宇宙人がzw平面で回転しながら出てきたら、一発で食べられてしまうぞ」と言って笑われた。すんませんねー。そんときゃ、おとなしく食べられることにしますから…。
ところで、最近、やねうらお邸のご近所になんだか怪しげな研究所の人が引っ越してきたらしい。やねうらお邸についてご存知ないかたがおられるだろうが(ちゅーか、誰も知らんて…)、大阪・梅田から、電車で一時間、もよりの駅は、近鉄八尾駅、隣の駅からは田畑が広がっている。つまり、田舎との境界に存在しているのだ。
逆に言えば、結構便利な立地条件なのだが、土地が安いのである。近くにはゲーム会社の日本クリエイトがあるし(さーむらさん元気かなー?)、数年前には、アリスソフトの長谷川さん(プログラマのヨシタカさんね)が越してきたし、家から自転車で20分のところに、瀬野っちで有名な近畿大学があるし(近畿大学はシャ乱Qのつんくのほうが有名?)、ご近所には太陽光発電で有名な会社から、明治乳業の工場、コカコーラボトラーズ工場、果ては、四次元パワー研究所、日本光学研究所が普通の民家にまぎれて溶け込んでおり、すでに異次元空間の様相を呈している。
そこに、怪しげな研究所の人!!である。今度、ウイローでも持って挨拶に行こうと思っているのだが、なんでも天候をコントロールする研究をしている人らしい。詳細は不明だが、その人が越してきてから、超局所的集中豪雨に見舞われること数回。どれくらい局所的かというと「いまから行ってええかな?」とか友達から電話が掛かってきて「えっ?いま、大雨降ってんで」「こっち降ってへんよ」「ほな来てよー」とか言って、電話を切って、五分後、彼が来たのだが、彼は傘を持っておらず、ずぶ濡れである。「なんで傘、持ってきてへんねんな」「だって雨降ってなかってんもん。この雨かって、そこのタバコ屋曲がったところから、どかーんって」「タバコ屋って、こっから10メータほどしかないやん?」「そう。そこから突然、雨が」と、こんな調子である。こんな感じの超局所的集中豪雨に見舞われること数回。いくらなんでも、これはおかしい。はやくウイローでも持っていかねば、このあと何されるかわからん!(脅されとんのか>俺)
第6F回 夢と希望のゲームプログラマへの道(誰でもなれるんけ?) 99/8/31
最近、ゲームプログラマって、誰でもなろうと思えばなれるような気がしないでもない。子供のころ、プログラマと言えば、天性の才能と知性に恵まれた職人気質を持つ一部の人たちだけかと思っていたが、そうではないらしい。先日、電車に乗ったら、前に座ってるハゲのおっさんは、COBOLの馬鹿長いソースを打ち出して何やらうなってるし、となりのねーちゃんは、Linuxで構築するネットワークの本読んでるし、横に立っている頭の悪そうな高校生は、C言語の入門書を読んでいる。しかも、やねうらおは、自分のゲームのソースを印刷してデバッグときたもんだ。まわりからしてみれば、かなり異様な光景だっただろうが、かくいうやねうらおも、あんときだけは背筋に悪寒が走った。
そんなことはどうでもいいのだが、Windowsのゲームは、マーケットがでかいので、引く手あまたなのだ。(但しアダルトゲーム主体) 先日まで作ってたゲーム(すでに過去形)の発売日は9月24日(金)に決定したのだが、この日に同時に発売されるゲーム(アダルト)が5本ぐらいある。月間、100本以上新しいアダルトゲームが発売されていると言っても過言ではない。その影に何百人というWindowsの(アダルト)ゲームプログラマが存在しているということだ。
余談ではあるが、このゲーム、256色でも動くようにと言われてパレットやら何やら苦労して実装したのに、どうも65536色以上専用になりそうな気配である。くれぐれも言っておくが、決して、やねうらおのプログラムがしおしおだからではないぞよ!制作サイドが、主人公とマップ用のビットマップを異なるパレットで描いてしまっただとか、やはり統一パレットだと何かと手間がかかるので、その調整をやっていると発売日に間に合いそうにないだとか、大人の事情ってものがあるんよ。大人の事情ってのが。大人の情事でないだけいいじゃん。(何言ってんだー>俺)
ちなみに、「yaneuraoGameSDKを参考にプログラミング勉強中です〜」なんてメールもらって、その後、メール交換している人のなかにも、そういったソフトメーカーの人達が、結構含まれていたりするので、単純に考えると僕にはゲーム会社に勤務するプログラマに知り合いが何十人もいることになる。(自分でも、ほんまかいな?とか思うけど、本当らしい)
失礼を承知で言うけどやねー、僕のソース見て勉強してはるプロの人っちゅーのは、まー、たいしたことがない。でも、たいしたことないにせよ、それで立派に仕事をこなせてるわけだから、この職種、仕事上でそれほど能力は要求されていないんでないかなぁとか思う。
とは言っても、実力がなければ何も生産できないし、ゲームプログラマは、その場その場での対応が問われるので、販売管理システムやらデータベースいじくりまわすプログラムより遥かに難しい部分もある。まー、問われる経験の質が違うので、そんな単純比較は成立しないんだろうけど、どちらが大変かと言えば、ゲームプログラマだと思う。
さて、その(フリーの)ゲームプログラマがいくらもらえるかだが、やねうらおの時給は、今回制作したゲームで計算したら、約7,000円/hだった。(yaneuraoGameSDKはロイヤリティフリーなので製作時間に含めていない。ただし、そちらのほうはゲーム本体より遥かに時間を費やしているのだが...) これを多いと感じるか少ないと感じるかは、判断の分かれるところで、仕事内容からすれば相場よりは多いが(相場は今回の仕事レベルならば3〜4,000円/h程度だと思う)、会社側の利益とくらべたら、蛇に睨まれた蛙である。(それ意味あってへんて...)
ちゅーかねぇ、たかだか、7,000円/hしかもらわれへんから、やねうらおの年収がいつまでたっても一千万にも遠く及ばないのよ!サラリーマンで、会社から教えこまれた通りの仕事してんじゃないんだから!(というか、サラリーマンやりながら、アルバイトでゲーム作ってんですけど) こっちは、年間何十万円という金を出して資料を買いあさり、ほとんど毎日、英語の論文を読みあさり、ときには徹夜し、ときにはイタリア語とラテン語とヘブライ語を勉強し、ときには人のソースコードを解析し、行きの電車のなかでは昨日書いたプログラムプリントアウトしたやつデバッグし、帰りの電車のなかではSTL勉強して、友人と酒のみながらでも不動点による再帰計算の停止性について語り、ドラムマニアやりながらでもシーケンシャルなデータ構造に対する最適なソート法について考え、不良高校生のバイク集団に会社帰りに囲まれても多値論理を使った論理回路最適化問題について考えてんだから!(って、こんなん書いたら、全部鵜呑みにする奴、いるんだろなぁ…) これでは、お盆も夏休みもあったもんではない。毎日が、受験勉強なりよ!これだけのブレインを会社経営にでも向けたら、あと10倍は軽く稼げてると思う。(稼いでから言え!とか言われそうだけど…)
しかしやねぇ、会社経営で年間一億稼ぎ出す人は日本に何千人、何万人といるけど、純粋にプログラムだけで年間一億以上、稼ぐ人って日本では数えるほどしかいないんじゃないかなぁ。ちゅーか、表の世界にプログラムだけで年間一億も稼ぐ人っているんか?
何を当たり前のことを言ってんだ、こいつーとか思われてるかも知んないけど、そこが重要なポイントなんよねー。まー、仮に、僕がゲーム会社を設立したとする。まあ、プログラムは自分で組めるし、お絵描きさんなんて周りにいくらでもいる。音楽は外注するし、シナリオ書きもプロの人が周りに何人かいる。流通にある程度コネがあるし、雑誌社にもなぜか顔が利く。要するに、いますぐゲーム会社を始めて、年間何億もの利益をあげるのに十分な関係性が整っているわけだ。(しかし、それをやるだけの企画能力と経営能力が自分には足りないのだが) そんなの考えてたら、プログラムなんてちんたらやってられっかい!なんて気分にもなってくる。いかんいかん。こういうことを考えていては、まともにプログラミングが出来ん。健全なプログラミングは健全な精神に宿るのだ。(なんのこっちゃ…)
そんなわけで、これを見てるゲーム会社の方々、よかったらお仕事ください(笑) このままでは、蛇に睨まれた蛙なもんで。(だから、それも用法おかしいねんて!>俺)