読者です 読者をやめる 読者になる 読者になる

megamouthの葬列

長い旅路の終わり

無N.O.の人

プログラマのための練習曲

「頭の悪い奴にはできないが、本当に頭の良い奴はこんな仕事はしない」

とは、ある戦闘機パイロットの言葉らしいが、プログラマも似たようなもので、多くの技術書や、他人のコードを読み下し、膨大な知識を頭の中に放り込まないとまともなプログラムが書けない反面、それに見合った報酬はもらえないし、営業から居丈高に、あるいは哀願されて急なオーダーが通され、ひどいプレッシャーの中で間に合わせの実装をしたり、その後、理不尽としか思えない理由で仕様が変更されて、ようやく書けたコードを削除する時、そしてそれが原因でバグが発生した時は特に、歯ぎしりするほど悔しくなって「何を好き好んでこんな仕事をしているのだ」と思う事がある。

そんな私がプログラマになったのは、ほぼ成り行きに近いものがあるが、幾つか決定的な出来事があったようにも思う。その一つを今日は思い出してみたい。

無能の人

まだ大学4回生だった頃、とっくに講義に出なくなっていて卒業の見込みもなくなってしまっていた私は、気が向くと普通の通学路とは別の道を通って大学に行った。住宅街の中を通って、坂を登るそのルートを行くと、在校生にほとんど会わずに、また講義棟を見ることもなく、直接サークルの部室に向かえるのだった。

人気のない部室に入ると、私は誰かが置いていったCDをかけたり、本棚にある漫画を読んで時間を過ごした。その頃の私は、サークルの活動からは距離を置いていて、講義の合間にやってきたサークルの後輩と雑談をしたり、隣の部室にいる年上の知り合い(ようするに留年生である)と麻雀をしたりして夕方までの時間を過ごしていた。

こう書くとずいぶん楽しそうだが、実際には、将来の見えない不安と罪悪感で、心の休まらない日々であった。ようするに私は現実から逃げていたのだ。今で言えば、会社にも学校にも行かずにネットゲームをし続ける引きこもりのような心境だろうか。



その日も私は、同じく今セメスターの単位を諦めたダメ先輩たちと麻雀を打っていた。


「そういえば、もうすぐ学祭やな」

牌を切りながら、誰かが言った。

「講義も休みやから、連休やけど、俺らには大して関係あらへんな。」

何しろ俺らは毎日が日曜みたいなものやから、と5年は講義に出ていないと豪語する先輩は笑った。

「そういえば、学祭って誰でも部屋借りられるらしいですよ」

と私は言った。サークルの活動で、前に、何度か部屋を借りたことがあるのだが、講義棟の部屋を展示などで借りるには、公認サークルである必要はなく、むしろサークルの実在性すら問われないことを私は知っていたのだ。

「へえ。そんなもんなんやな」

と、次の手番の先輩が大して興味もなさそうに牌を切った。捨て牌から推測するに、早々と和了(あが)りそうだ。

「勝手に展示とかしたらおもろいかもしれんな。」

ふと、対面の男が言った。

「何をするんや?雀卓でも置いて麻雀するか?」

「麻雀研究会か」

「それは実際にあるしな」

確かに。私は先輩の上がり牌を切らないように、微妙に手を変えて牌を捨てた。

「石でも展示したったらいいんちゃうか」

つげ義春の『無能の人』みたいやな」

「サークル『無能の人』の部屋行ったら、無造作に石ばっかり置いてあったら、ちょっとおもろいな」

と、和了(あが)りそうな先輩が、ツモった牌を無造作に捨てる。

「サブカル臭がなんとも、やけどな」

「部屋だけでも抑えときましょうか。何も思いつかんかったら、石でも適当に置いとったらいいんで」

と私は言った。

「ええの?面倒くさいんちゃう?」

「だって他にやることがあるわけでもないし」

私は答えた。



そうして、私達は確たる目的もなく、講義棟の一室を借りた。学祭の実行委員会に展示内容を聞かれたので、「石展」だ、と言っておいた。

しばらくして、久しぶりに部室に訪れると、綺麗な石が机に山と積まれていた。「この前みんなで河原で拾ってきたんや」とダメ先輩たちが言った。なんだ結構乗り気じゃないか。と私は思った。

後から講義を終えたサークルの後輩たちがやってきて、石の山を見つけて「何ですかこれは」と驚いて言ったので、私は、事のおおよそを説明した。

「先輩たちも学祭やるんですか。どうせなら、アトラクション的のものも作りましょうよ」とよくわからないことを後輩たちは言った。そして、そのまま近くのホームセンターに行って、釣り糸や塩ビパイプなどを買ってきて、石の滑り台や、石のケーブルカーなど、よくわからないものを作り始めた。

なるほど、こうすれば、少しは見栄えがするかもしれないな、と私は思った。


さらに翌週、部室に行くと、石をイメージしたマスコットキャラクターのようなものが印刷された紙が置いてあった。「作ってみたんです」と後輩の一人が誇らしげに言った。そういえば彼はイラストが得意で、よく自作のTシャツなどを作っていた。

「材料費は出すから、アイロンプリントでこれのTシャツ何枚か作ってくれへんか?あとこのキャラのデータ送って欲しい」

と私は言った。

「いいですよ。何かするんですか?」

「わからんけど。一応」

なんだか知らないが、「石展」は妙な盛り上がり方をしているようだった。そうなると私も何か作らなければいけないような気がしてきたのだ。


自宅に帰った私は、後輩から送られたデータをいじくりながら、どうしようかと考えていた。その頃の私は、少しプログラムに手を出していて、サークルのホームページなどの掲示板のCGIPerlで書いたりしていたので、部室に転がっている旧型のPCを使って、何か展示物が作れないか、考えていたのだ。

やはり、エンターテイメント性を考えるならゲームだろう。と私は思った。マスコットキャラは顔のある石に手足が生えているようなデザインだったので、なんとなく格闘ゲームにしようと思った。

部室のPCでも動くような、旧世代のDirectXで動くフレームワークを探さないといけなかった。当時、よくそのブログを読んでいたやねうらお氏がYaneSDKだったか、DirectXバインドされたスクリプト言語を作っていたので、それを採用することにした。

ジョイスティックでキャラが上下に移動するサンプルはすぐにできた。なんとなくいけるかもしれないな、と私は思ったが、そこで、早々と飽きてしまってもいたので、そのまま寝てしまった。

前夜

そうこうしているうちに学祭の前日になった。ダメ先輩たちはどこかに行ってしまったので、とりあえず私は後輩の手を借りて、石を丁寧に並べ、塩ビパイプで作られられた「石滑り」や「石ケーブル」などの「アトラクション」を設置した。

なんとも言えないシュールな展示だった。広々とした講義室の机に、点々とおかれた石と、意味不明の粗末なアトラクションという名のオブジェ。この部屋に合理的な説明をつけるとすれば、閑散とした資材置き場か、何かの魔術を行った後。といった印象だろうか。

そこにTシャツを作ってきた後輩が合流した。さっそく石キャラのTシャツを5枚ほど、入り口の近くにおいてみる。

ギャラリー・ショップ的な雰囲気が足されて、少しはマシになった気がするが、やはり決定的にエンターテイメント性に欠けていることは明らかだった。後輩たちのテンションも明らかに盛り下がっていた。

私は腹をくくった。

「今からゲーム作るわ」

「えっ」

と後輩たちが言った。「今からですか?」

「うん。部室にPCあるし、データーは持ってきてあるから。」

私は部室に戻って、CD-Rに焼いた作りかけ(といってもサンプル程度だが)のゲームデータとyaneSDKのリファレンスを部室のPCで読み込むと、そのままプログラミングを始めた。

当時は、スマホテザリングはおろか、WiFiすら部室になかったので、部室のPCはインターネットに接続されていなかった。なので、私は矢継ぎ早に後輩に指示を出した。

「背景になる画像をいくつか持ってきてくれ」

「君は、効果音だ。格ゲーで使えるやつ。ネットでもなんでもいいから適当に拾ってきてくれ」

「えっと、君の下宿は大学のすぐそばだったな、とりあえず夜2時ぐらいに夜食を持ってきてくれるか」

後輩は戸惑いつつ、めいめい家に帰った。

私は古いCRTのボヤケた文字に苦戦しながら、格闘ゲームを作り始めた。


まず、マスコットキャラをただ表示するだけでは、動きが足りないことがわかった。格闘ゲームというのは、キャラが移動していない間も、息遣いなどでキャラが常に動いていないとダメなのだと、その時気づいた。

だからといって、素材はこれ以上ない。私はキャラの頭と体のパーツを分離し、常に頭を上下運動させることにした。なんとなく格闘ゲームっぽくなった。困ったのは、どうも頭の移動ルーチンにバグがあるらしく、段々と頭が上空に浮かび上がっていき、10分ほど放置すると、頭だけが画面の外に出てしまうのだった。

とにかく時間がないので、そのままにした。パンチとアッパーとキックはデータを適当に編集してパターンを作って、ジャンプは同じ姿勢のまま上昇、必殺技は残像(同じパターンを座標と透明度をずらしながら表示すればよい)で誤魔化した。

続々と後輩たちが帰ってきて、素材が集まってきた。

格闘ゲームと言ったのに、背景係はなぜか能舞台とか、イルカが水面から飛び上がっている画像などを持ってきた。まあいい、時間がない。

効果音係が帰ってきた。格闘ゲームと言ったのに、なぜか生生しい呻き声や吐息、何かを包丁で切る音を持ってきた。まあいい、時間がない。

私は素材をすぐにゲームに組み込んだ。能舞台の真ん中で呻き声を上げながら頭と胴体が分離するキャラが飛び跳ねる光景は彼らの爆笑を誘った。「これいいですよ!」と彼らは嫌味なく絶賛するのだった。

終電がすぎても、私は黙々と必殺技(方向キーの入力キューを判別して、ストⅡ風のコマンド入力を実現した)の実装や、ダウン時のスローモーション処理などを実装した。

夜半、夜食係が到着した。彼が買ってきてくれたサンドイッチを頬張りながら、私はその時点のゲームを見せた。「もうこんなに出来てるんですか」と後輩は素直に驚いた。とはいえ、敵キャラ(プレイヤーと同じ石キャラの色を変えただけ)は動かないし、まだまだ未実装の部分がある。というか、どこまで実装するつもりなのか、その時点では自分でも検討がついていなかった。

学祭の前夜の午前2時半。部室棟に、まだちらほら人が残っていることに私は気づいた。看板を作るためにトンカンと金槌を振るう音、最後のバンド練習に明け暮れるもの。皆めいめい残された時間を過ごしている。

そうか、私はこういう時間を過ごすことを望んでいたのだ。と私は思った。まるで明日には人生が終わってしまうかのように、結局は何もできないかもしれないのに、それでも何かを作り続ける時間。

私の精神は途方もなく高揚していた。後にも先にも、プログラミングというものが私の魂をあれほどまでに燃やしたのはあの時が最初で最後であった、と今は思う。

石展

夜が明けた。私は敵CPUの処理を実装していた。作り始める前は実際どう実装したらいいのかさえ、さっぱりわからなかったのだが、プレイヤーとの距離、現在の自分の位置と、ランダム要素を組み合わせて、適当に技を出したり移動したりするだけの処理を書いてみると、何故かそれなりに敵CPUしていた。

ゲームのシステムとしては、敵を倒すと、さらに強い敵がでてきて(といっても外見は全く同じなので、背景だけランダムで変わる)、延々と敵が強くなり続けてクリアなどは特にない、というロクでもないシステムであったので、どこかで必ずプレイヤーを殺す必要があった。

なので、最強に近くなると、敵CPUは間合いに入るやいなや急速に接近して、必殺技を繰り出し、浮き上がったプレイヤーを連続で空中必殺技で仕留めるという理不尽さだった。

朝、出来上がったゲームを、私はPCごと、展示会場に運び込んだ。気を利かした後輩が、家のジョイスティックを持ってきてくれて、どうにかゲーム筐体っぽくなった。

ゲームは「石げんか」と名付けられた。後輩が必殺技の出し方などを記した、手書きのインストラクションシートを作ってくれた。

それらが、設置された展示場をざっと見渡すと、昨日より格段にエンターテイメントになった気がしたので私は満足した。



やがて、開場時間になった。一晩寝ていないかった私は、展示場の端に座ってうたた寝をしていた。

まばらな来場者が、おそるおそる中を覗いて、自作の格闘ゲームに気づいて、おずおずと入ってくると、やがてジョイスティックに手を伸ばした。

やがて、キャラの出すうめき声に混じって、嬌声が上がる。それをまた廊下を歩く他の来場者が怪訝な顔つきで見ている。

全てが満足だった。それは幸せな眠りで、夢だった。




いつの間にか本格的に眠っていたらしい私は、誰かに揺り起こされた。

ダメ先輩たちだった。

「お前さあ、なんでこんなゲーム作ったんだよ」

と彼らは笑った。

「ひどいなあ。まったく、この展示はひどい!」

とダメ先輩は満面の笑みで叫んだ、私はまどろみの中で微笑んでそれに答えた。





告知

どうもこのブログをtwitter経由でご覧くださる方が多いようなので、更新情報を流すtwitterアカウントを作りました。

twitter.com

意味があるかわかりませんが、更新情報を知りたい方はフォローくだされば光栄です。

あと、フォーム的なものもこのブログにありませんので、DMも無差別に受け付けております。
返信するかどうかは気分しだいですが、何かありましたら、こちらまで。