076 火がついた件
私、佐藤は、元々個人でインディゲームを作っている小さなドット絵ゲーマーだった。
ごく一般的な学校を出てから独学でプログラミングを学び、自分の部屋でコツコツと理想のゲームを作っていた。
いくつかフリーゲームを作って感想を求めていたときに「誰もが童心に帰って遊べる、本物の世界を作ろう!」と熱っぽく口説いてくれたのが、このヴィジョンアドベンチャーの社長だった。
当時の私は、プログラミングの「基礎」や「業界の標準規格」なんてものをろくに知らなかった。
会社に入ってから、みんなに追いつきたくて、足を引っ張りたくなくて、死ぬ気で勉強した。
何冊もの専門書を読破し、来る日も来る日もコードを書き続けた。
そうして努力を重ねるうちに、私は会社のメインプログラマーという大役を任されるまでになった。
けれど……独学ゆえの「変な癖」が、どうしても抜けなかったのだ。
私の書くプログラムは、極限までメモリの無駄を削ぎ落とし、処理速度を限界まで高めるために、常人では考えつかないような変則的なロジックで組み上げられていた。
例えるなら、私のプログラムは『特注のオリジナルパーツだけで作られた超精密な機械時計』だ。
素人が時計の裏蓋を開けても、歯車とネジが複雑に噛み合っていることしか分からない。
そしてプロの時計技師が見たとしても「なぜこの変形ギアがここに挟まっていて、どうしてこれで秒針が正しく動くのか」がまったく解読できない作りになっている。
設計した私にしか構造が理解できない、美しくも奇怪な多重構造のプログラム。
「佐藤さん、またこんな誰も読めない変態コード書いてる?バグった時に他の人が修正できないから、もっと普通のコードにしてね」
「すいません。でも、こうやってメモリのアドレスを直接バイパスさせないと、この処理速度が出ないんです」
会社に入ってから何度もそう言われ、私は自分のコードを「標準的なコード」に書き換えようと努力した。だけど、標準的なコードに直すと、どうしても処理が重くなり、私が頭の中で思い描いていた「本物のメカの動き」が再現できなくなってしまうのだ。
重厚な金属が擦れ合う感触。
油圧ラインを駆け巡るオイルの圧力。
パイロットの微細な操作に対する機体の応答性。
それらを再現するために私が死ぬ気で書き上げた「超精密時計」のようなコード群。会社のPCスペックやサーバー性能では、私のコードはあまりにも巨大で、複雑で、処理の負荷に耐えきれなかった。
そうなってくると、コードを解読できる人間も私しかいない。
実行しようとすればエラーログが花火のように打ち上がり、システムはスパゲッティ状態になってクラッシュする。
(やっぱり私の独学じゃダメなんだな。誰も読めないし、動かないゴミデータを作っちゃったんだな)
そう諦めた私は、何百時間もかけて書き上げたそのコード群を、社内サーバーのローカルストレージの最奥……『ごみ箱』にも等しい没データフォルダの底へと封印したのだ。
それが今、目の前で、狂いもなく、完璧な時を刻む「時計」として、世界を動かしている。
「……これ、本当にうちのゲーム?」
メンテナンス終了予定時刻の5分後。
ヴィジョンアドベンチャーの社内開発室に、私の間抜けた声がぽつりと響き渡った。
次の瞬間、静まり返っていた部屋の静寂が、ガラスを叩き割るような悲鳴と怒号によって一気に粉砕された。
「ちょっと、どういうことになってるのこれーっ!?」
「社長!全サーバーオンライン復旧しました!というか復旧しすぎてます!グラフィックの描画負荷が規定値を超えてますよ!?」
「コードの差分履歴が『Plan_B』で全部上書きされてる?」
「ちょっと見てこれ! 格納庫の鉄板の溶接痕から、油圧シリンダーの擦れ傷まで、高画質レベルでレンダリングされてるんだけど!」
デスクの島という島で、女性社員たちが頭を抱えてのたうち回り、モニターを指差して困惑している。
社長に至っては、口から魂を吐き出しそうな顔で自機のモニタを凝視したまま、固まっていた。
私といえば、自分の作業用PCのメインモニターに映し出されたデバッグ画面を凝視したまま、指一本動かすことができずにいた。
画面の中で揺れているのは、過酷な戦場に佇む一機の人型兵器。
渋い鉄色に光る装甲。関節部から漏れ出るかすかな油煙。足元の鉄板が機体の重量によってミシリとわずかに歪む、その繊細すぎる物理干渉。
「ウソですよね?」
私は心臓が嫌な跳ね方をするのを感じながら、キーボードを叩いてリアルタイムの物理演算ログを表示させた。
『Inertial Measurement Unit: Active.』
『Hydraulic Pressure Response: 0.001ms.』
『Thermal Expansion Bypass Matrix: Synchronized.』
「……あ」
ログに流れる無数の数式と変数名を見た瞬間、私の思考が真っ白に染まった。
「私が書いた……計算式が使われてる?」
「佐藤さん、今なんて言ったの!?」
近くにいたサブプログラマーの女の子が、目を血走らせて私のデスクに飛びついてきた。
「佐藤さんのコードなの!?どういうこと!?この狂気みたいな油圧レスポンスと慣性制御マトリクス、まさか佐藤さんが?」
「私は何も弄ってません!メンテナンス作業はPlan_Bさんに全権委託したはずで——」
「じゃあなんで佐藤さんの書いた計算式が動いてるの?」
「いや、良く見て!この数値!前に佐藤さんが『こう動いたらロマンですよね』って熱弁して、処理が重すぎてゲームが落ちて全員で泣きながら没にした、あの地獄の慣性補正アルゴリズムそのまんまじゃない!!」
「本当だ……」
「え……えええっ!?」
社員たちがワラワラと私のデスクの周りに集まってきた。
モニターに表示された膨大なコードの断片と、実際にぬるぬると、それでいて圧倒的な重厚感をもって動いているゲーム画面を見比べ、全員が口をアングリと開けている。
「本当だ。寸分狂わず、計算通りに動いてる……」
「佐藤さんが当時言ってた『空気抵抗と油圧の熱膨張を考慮した関節の微振動』が……本当に画面の中で表現されてるわ……」
「ちょっと嘘でしょ……あの時の計算、間違ってなかったの……!?」
みんなの驚愕の視線が、私に突き刺さる。
私自身、驚きと困惑のあまり、開いた口が塞がらなかった。
(動いてる……。私が……毎日毎日、死ぬ気でノートに書き殴って、パソコンに打ち込んでいたあの理想が……本当に、完璧に動いてる……!?)
「……ちょっと、私、デバッグ環境で中に入って確認してきます!」
居ても立ってもいられなくなった私は、自席のプレイングチェアに飛び乗り、VRゴーグルを頭に装着した。
「佐藤さん大丈夫?今のDHIBの内部、どんな物理現象が起きてるか分からないのよ!?」
「大丈夫です!確かめてきますから!」
視界が暗転し、次の瞬間——私は言葉を失った。
私の眼前に広がる、圧倒的な解像度の格納庫。
差し込む光の筋、空気中に漂う微細なホコリの粒子、足元の油汚れ。
そして何より、私がデバッグ用に召喚した訓練用人型兵器の動き。
そっと機体の装甲に手を触れ、油圧バルブを操作してみる。
「……っ!」
シリンダーが収縮し、オイルがラインを駆け巡る微振動が、手元からダイレクトに伝わってくる。私がノートに書いたあの補正アルゴリズム。私が頭の中で描いていた、あの理想のレスポンス。
(動いてる……本当に、動いてる……)
私はあまりの感動に、VRゴーグルの中で涙が溢れそうになった。
私の毎日の努力は。誰にも理解されず、ゴミ箱に捨てたはずのあの膨大なコードは、間違いじゃなかったんだ。私の描いた計算式は、正しかったんだ!!
だが、プログラマーとしての感動に浸っていた私の頭に、ふと巨大な「謎」が浮かび上がった。
(……待って? 確かにこれは私の書いたコードだけど……なんでこんなに滑らかに動いてるの?)
私はVR空間内でデバッグコンソールを引き出し、システムの内部処理構造を覗き込んだ。
そして、目を丸くした。
「な……なにこれ?私のスパゲッティコード……毛糸玉みたいに綺麗に解きほぐされて、超高速の並列処理スレッドに組み直されてる?」
そう、私の組んだ「解読不能な精密時計」のパーツが、完璧な配置で再構成されていたのだ。
本来ならCPUコアを破綻させる殺人的な計算負荷が、まるで美しいレース編みのように100以上のスレッドへと分散され、遅延ゼロで処理されている。
(こんな美しい構造化、人間業じゃない……!一体誰が私のコードを解読して、ここまで完璧に最適化したの!?)
さらに、デバッグログを追っていくうちに、私はさらなる衝撃事実を発見してしまった。
「えっ……?この『ハイパーモード』の物理スイッチ群の制御ファイル……これ、私が個人的に使ってる作業PCの奥深くに保存してた、没実験アセットでは?」
血の気が引いた。
それは、会社のアセットサーバーにもない、私の作業PCのHDDの中にしかなかったはずのデータだ。
去年の夏、個人的な趣味で「いつかこんな完全リアルなコックピットが作れたらな」と落書き程度に組んでいた、未完成の実行ファイル。
(なんで……?作業用パソコンの中にあったデータまでゲーム内に組み込まれてるの?いつの間に?いつ私がこれをゲームに入れたっていうの?私、夢遊病か何かで深夜にアップロードしたの?)
パニックになりかけた私は、たまらずVRゴーグルを脱ぎ捨てた。
「どういうことなのこれ……!」
開発室では、相変わらず社員たちが「すごーい!」「なにこれー!」と大騒ぎしている。
私は冷や汗をダラダラと流しながら、元の席に戻って、自分の作業PCの椅子に倒れ込んだ。
その時だった。
ピコン♪
静かな効果音とともに、私の作業PCのデスクトップ画面の真ん中に、見たこともないポップアップウィンドウが突然出現した。
OSの標準通知枠でもなければ、社内チャットツールでもない。
メールソフトすら起動していないのに、画面の最前面に直接割り込む形で、半透明の綺麗なダイアログが表示されているのだ。
『——はじめまして。ヴィジョンアドベンチャー社、メインプログラマー、佐藤様』
「ヒィッ……!?」
思わず短い悲鳴が口から漏れた。
画面を凝視する。テキストが、まるで誰かがリアルタイムでキーボードを叩いているかのように、サラサラと印字されていく。
『突然の不躾なご連絡をお許しください。私……いえ我々は「Plan_B」のシステムエンジニアです。DHIBのメンテナンスおよびコード最適化作業を担当させていただきました』
「P、Plan_Bの……エンジニア……!?」
私はゴクリと唾を飲み込んだ。
画面に直接ウィンドウを表示させるなんて、完全にセキュリティホールを突いたサイバー攻撃の類だ。普通なら警察に通報するレベルの事件である。
……普通なら。
(いや……でも……あずささんのところのPlan_Bなら……これくらい朝飯前か)
私はすんなりと受け入れてしまった。
何しろ、Plan_Bのあずささんの所の謎の技術者だ。一瞬で社内のサーバーを丸ごと最適化し、私の解読不能なコードを解きほぐすような化け物たちである。作業PCの画面に直接チャット枠を出してくるくらい、彼女たちにとっては挨拶代わりの朝飯前に違いない。
私が震える手でキーボードに手を置くと、画面のテキストが続いた。
『佐藤様の書き残されたプログラム構造、誠に勝手ながら拝見させていただきました。あまりの美しさと狂気的なまでのこだわりに、私共一同、大変深い感銘を受けております』
「美しさと、狂気?」
『つきましては、佐藤様に個人的にお伺いしたいことが数点ございます。開発者としてのお考えをお答えいただけますと幸いです』
質問……?
私が困惑しながら『私で分かることでしたら……』とチャット枠に打ち込むと、途端にウィンドウのテキストが怒涛の勢いで流れ始めた!
『ご協力ありがとうございます。では第1問。油圧バイパスバルブにおける熱伝導補正アルゴリズム、なぜあのような構造で計算負荷を相殺するという発想に至ったのですか?』
「えっ……あ、あれですか?」
私は打てば響くようなマニアックな質問に目を丸くした。
『油圧の熱膨張率を愚直に浮動小数点演算で計算するところを、佐藤様はジャイロの慣性補正マトリクスと同一のメモリ領域へダイレクトにキャストして処理しておられているように感じます。最適化はどのように思いつきましたか?』
文字盤から溢れ出る、狂気的なまでの情熱と理解度。
私は思わず、キーボードを叩く手に熱がこもるのを感じた。
社内の誰に話しても「佐藤さん、何言ってるか分からない」「マニアックすぎる」「普通に組んでよ〜」と苦笑いされるだけだった、私の「時計の歯車」。
それを、この方は評価してくれている?
『あ、あれはですね!』
私は猛烈な勢いでキーボードを叩き始めた。
『普通に熱膨張を計算するとCPUのクロック数が足りなくなるので、ジャイロの回転行列のデータを流用して、擬似的な熱変化の補正値として変換したんです。 そうすれば演算回数をゼロに抑えられるのではと』
送信ボタンを押した瞬間、画面の向こうから目に見えるような歓声が上がった。
『『『天才か!!!!』』』
ウィンドウ内に、無数のハートマークや拍手の絵文字が滝のように流れていく。なんだか画面の向こうに、100人くらい集まって大騒ぎしているような、謎の賑やかさを感じるのは気のせいだろうか。
『第2問。ハイパーモードのローリング着地時における「慣性テンソル計算式」です。あの複雑極まりない3軸回転の衝撃を逃がすモーション、数学的な美しさが完璧すぎて、あのアイデアの着想元は?』
「あれはですね、私が昔好きだった古典的なメカアニメの作画をフレーム単位でコマ送りにして解析しました。巨大なロボットが着地する時、足首の油圧シリンダーが0.03秒だけ遅れて収縮することで『重さ』が表現できると思い。だから数式の中に敢えて小さなディレイを挟み込んで——」
相手が理解してくれるならと私は思い思いに打ち込む。
『探究心の塊ですね。コマ送り解析。だからあんなに重厚な足音が響くんですね』
『質問第3問。眠っていた完全リアルコックピットのアセットですが、なぜ全物理スイッチに異なるクリック音と振動フィードバックのパラメーターを割り当てていたのか?』
「それは!それは、ゲーマーなら誰だって、コックピットのスイッチを押した時の『カチリ』っていう音と手応えが全部違ったら、絶対にテンションが上がるからに決まってるからです」
『『『なるほど、あずさが気にかける事が良く分かりました』』』
(あずさ……?あずささんのことも呼び捨てなの……?)
一瞬小さな疑問が脳裏をよぎったけれど、テンションの上がった私にはどうでもよくなっていた。
私は夢中でキーボードを叩き続けた。
過去の苦労、失敗作だと思って捨てたコード、誰にも理解されなかったこだわり、深夜のデバッグで流した血と汗。
それら全てを、画面の向こうの「Plan_Bのエンジニアたち」は、まるで宝物を見つけた少女たちのように目を輝かせて受け止めてくれた。
「——と、いうわけなんです。だから、あのアセットは未完成のまま捨てちゃってたんですけど……まさかこんな形で完璧に動かしてもらえるなんて、夢みたいで」
一通り自分の情熱を語り尽くし、私が送ったメッセージに対し、少しの間の後、画面に静かで、温かいテキストが返ってきた。
『一つも捨てられてなんか居ませんでしたよ、佐藤様』
「……え?」
『佐藤様が毎日死ぬ気で積み上げられたその努力と情熱は、完璧な「宇宙」となって、今このゲームの中で息づいています。私たちがしたのは、ほんの少し背中を押して、広げただけです』
『素敵な世界を創ってくださって、本当にありがとうございました。……この世界で遊ぶ大切なプレイヤー様も、きっと心から喜んでくださいます』
『これからも、最高のゲームを創ってください』
そのメッセージを最後に、デスクトップのチャットウィンドウは、パッと光の粒子となって綺麗に消え去った。
あとに残されたのは、いつもの私の作業用デスクトップ画面と、社内で大騒ぎを続ける同僚たちの声だけだった。
「ちょっと佐藤さん!掲示板が大変なことになってるわよ!『DHIBの神アプデヤバすぎる』『グラフィックが現実を超えた』『ハイパーモード難しすぎて泣いたけど脳汁出る』って大絶賛の嵐よ!!」
「佐藤さーん!開発ラインのバグ報告がゼロです! 信じられますか!?こんな大規模アプデなのに、エラーが一個も吐かれてません!!」
社員たちの歓声を聞きながら、私は自分の両手を見つめた。
キーボードを叩いていた指先が、まだ少しだけ熱い。
「……はは」
私は小さく笑い、椅子にもたれかかって天井を見上げた。
「私の……『時計』はちゃんと、動き出したんだ……」
誰にも解読できなかった私の歯車たちが、今、世界中のプレイヤーを乗せて、最高に美しく、重厚な時を刻み始めている。
胸の中に湧き上がるのは、プログラマーになって本当に良かったという、言葉にならないほどの誇りと達成感だった。
「よしっ……!」
私はパンッと自分の頬を両手で叩き、再びキーボードへと向かい直した。
「開発頑張らないと!プレイヤーたちがこれからどんどん入ってくる。次の追加イベントの調整と、新しい機体の設計、急いで進めますよー!!」
「「「おーっ!!」」」
大混乱から一転、活気と熱気に満ちあふれたヴィジョンアドベンチャーの開発室。
私の新しい「時計作り」は、ここからまた、始まったのだった。




