第2章 Ep5:魔導開発3(弾幕展開)
「波動砲は強力だけど、致命的な欠陥があるわ」
私は冷却中の杖を撫でながら、冷静に分析した。
一撃必殺の威力はある。しかし、発射後の硬直が長すぎる。その間、敵は好きなだけ行動できる。
それに、敵は一直線に並んでくれるわけではない。現実は不親切だ。
「数学的に考えてみてよ。仮に100人の騎士が『縦隊』で行軍してきたとしても、最前線と最後尾の間隔は少なくとも50メートルはある」
私はペンをくるくると回しながら、黒板上の図形へと視線を落とした。
黒板には、騎士たちを表す円形の記号が散らばっている。
「最強の一撃で敵を50人減らしたって、残り450人よ。その間、私はただの『無防備な杖持ち』。次の詠唱を完成させるまでの3秒。敵さんたちはその間に、何メートル突き進むと思う?」
計算は簡単だ。騎士団の行軍速度は秒速15メートル。つまり45メートル。
領地の防壁から決戦地点までは200メートル。波動砲を4発撃つには12秒かかり、その間に敵は180メートル進む。つまり20メートルの距離まで詰められる。
「近い。近すぎる。その距離では、もう波動砲の威力も存分に発揮できない。装甲に阻まれたり、飛び散った破片で防壁が崩れたり、随伴する聖女の妨害魔法を喰らったり……」
私は黒板の図に、複数の矢印を描き足した。上から、左から、右から、異なる角度から敵が流れ込む図だ。
「500人の騎士団が『散開』して攻めてきたら、一本のビームじゃ対処しきれない。物理法則上、不可能よ。必要なのは『面』を制圧する『絶対防御」、もといマウス。いや違った、『弾幕』よ」
言い間違えて自分でため息をついた。前世で20年も過ごせば、こういったことが増える。
「古き良き『弾幕シューティング(バレットヘル)』。10年代後半のSTGの頂点。東方、Caveの流れを汲む、最高の芸術形式」
私は新しいページを開き、弾幕を表現した図を描き始めた。
画面全体を埋め尽くす、無数の点。赤、青、黄、緑、紫。色とりどりの魔力弾が、幾何学模様を形作る美しい図形。
「敵ユニット一体の当たり判定なんて、歩兵の肩幅分くらい。2メートルだ。けど、画面に映る同じサイズの敵に対して、マップ上の100体を同時に狙うなら?」
『でもお嬢、そんなに魔法を乱射したら、魔力回路がショートしちゃうよ?』
ジェムが心配そうに割り込んできた。この使い魔はいつも機敏だ。正しい懸念だ。
『数百個の魔法弾を『同時に』操ると、魔力フロー(魔力の流れ)が複雑化しすぎる。人間の脳(CPU)じゃ、そんな複雑な計算を並行処理できないよ』
「ええ。通常の人間の脳ならね」
私は薄く笑った。
「だから『並列処理』させるのよ。システム設計の基本」
## 2. 魔法陣の民主化
羊皮紙を広げ、私は魔法陣の設計図を複数枚用意した。
基本となるマスター魔法陣はマスターコピー。そこから、同じ構造を持つサブ魔法陣を無数に複製していく。
「重要なのは『責任の分散』よ」
シャルルが机の上から聞いている。
『責任ですか?』
「そ。魔法陣という知性体に『責任』を持たせる。ね、こういうイメージよ」
私は図を描いた。
【親魔法陣】
├→『射撃指令:パターンA、開始』
└→【子魔法陣群】(計64個)
├─① 角度0度方向へ弾を発射。弾道計算は自分でやれ
├─② 角度5.625度方向へ弾を発射。落下計算は自分でやれ
├─③ 角度11.25度方向へ弾を発射。障害物判定は自分でやれ
…以下60個続く…
「メインの魔法陣(親プロセス)がやるのは『撃て』という命令と、『弾幕パターン』の選択だけ。個々の弾道計算、落下判定、衝突判定——全部、独立した子魔法陣たちが『自律的に』処理する」
『つまり、あたしたちが計算の荷物を分け合うってわけね』
ロキが頭をつかんだ。
『そしたら、お嬢の脳負荷は64分の1に?』
「いえ。実際には64個で四捨五入。使い魔どもの処理能力も信用できないから、スケジュール係として20%の余裕も見積もる。つまり、実質『50倍の効率化』ね」
私はペンでマーカーを入れていく。
「パターンA:『自機狙い』。敵の位置情報をキャッチして、全弾がその地点に集中。回避不能の破壊力」
「パターンB:『全方位拡散』。360度全て同時に弾を放つ。特に有効なのは『複数敵が囲んできた時』」
「パターンC:『ランダムばら撒き』。敵の予測を難しくする。見た目も美しい。何より、敵も『どこに着弾するか分からない不安感』に陥る」
私の手はペンを握ったままだった。
「パターンD以降も構想中だけど……とりあえずA〜Cまで実装しよう」
関数の美学に浸っていた。
```
for (int pattern = 0; pattern < 3; pattern++) {
for (int i = 0; i < 360; i += angle_step) {
if (pattern == A) { target_angle = calculate_enemy_position(); }
else if (pattern == B) { target_angle = i; }
else { target_angle = i + random(-30, 30); }
Fire_Child_Process(target_angle);
}
}
```
この美しいループ処理。二重ネストで、複雑な計算を『読みやすく』『簡潔に』表現できている。
「昔のゲーム業界人は、こういう『美しさ』に命を懸けてた。容量が足りなくて、効率を追求し、その結果『古い』ゲームほど洗練されている。何というアイロニー」
『お嬢、いい加減に…』
ロキがぼやいたが、私は聞く耳を持たなかった。
「さあ、実験開始よ。今夜が山場。テスト用のダミー敵を、最大数で展開しなさい」
『了解……。仮想敵設定:難易度『地獄』、敵数40体同時展開をスタンバイ』
ジェムの気のない返事。だが、その声の奥には『もう止められない』という諦めと、ほのかな期待が混じっていた。
## 3. スペルカード発動——美の結晶
午前10時。地下室の空気は既に張り詰めていた。
テスト用の木人たちが、円形の配置で待機している。敵兵を模した40体のダミー。装甲は実物同等のミスリル合金製。重さも、硬度も、すべて本物と変わらない。
私は深呼吸をした。
「来るわよ。『東方の美学』を、異世界へ。歴史に名を残すスペルカード『ハチの巣』」
杖を掲げた。
指先で複雑な軌跡を描く。上、下、左、右、反時計回り一回転。母国の言葉で呪詞を唱える。異世界の言語は間違える危険性があるからだ。
次の瞬間——
杖の先端に、光の粒が集結し始めた。
最初は儚い光。次第に濃度を増す。赤は炎の色。青は冷気の色。黄は電撃の色。その光たちが、無数の結晶へと変化する。
『ひゃっ!? 仲間がいっぱい!』
ロキが外部から中継している。
私の周囲に浮かぶ4つのオプション(実は小型の独立魔法陣)が、高速で回転し始める。毎秒30回転。毎秒300回転。毎秒3000回転。
回転が光の残像となって、私の身体の周りに『円形の壁』を作り出す。
次の瞬間。
ズバババババババッ!!!
破裂音が響いた。
いや、『破裂』ではない。同時に数千の弾が解き放たれる音。魔力が物質化する『歓喜の叫び』だ。
赤、青、黄、緑、紫——5色の魔力弾が、らせん状に拡散していく。
最初の秒間に、空間に50個の弾が存在する。次の秒間に、200個。さらにその次に、800個。
もはや『弾』ではなく『弾の雨』。『弾の霧』。『弾の壁』。
視界は光に満ちた。
『ああああああああ!? 隙間がない!』
ロキが悲鳴を上げる。
その隙間のなさは『意図的』だ。計算された美学。
各弾幕パターンは、60度間隔で放出される。各パターン内では、5.625度間隔で細分化されている。つまり、360度を64分割したグリッド内に、隙間なく弾が配置されるのだ。
この密度なら、『グレイズ』と呼ばれる『かすり判定』すら存在しない。敵が存在する空間そのものが、弾で満たされているからだ。
木人たちは瞬く間に蜂の巣となった。
アニメのように『煙が出る』のではなく、物理的に『削られている』。ミスリル装甲の表面が、魔力弾の連続着弾で、次々と削落される。
10体が消滅。20体が消滅。30体が消滅。
最後の40体目が、弾幕に飲み込まれるのに、要した時間は『3秒』。
だが、弾幕はここで終わらない。
壁に当たった弾が、そのまま『反射』する。
リフレクト機構を実装したのは、数日前だ。弾が壁面に当たった際、その壁の角度によって反射角度を自動計算。跳ね返る弾は、さらにカオスな軌道を描く。
一度反射した弾が、別の壁に当たり、再度反射。その反射した弾が、床に当たり、再度反射。
もはや『チェス盤』の上で『ボールを無限に転がし続ける』状態。
部屋中が光で満ちた。音が満ちた。魔力の臭いが満ちた。
「あ、あはははは…………」
私は笑った。止められなかった。
「見て。『見て、見てよ』!」
笑いの中に、狂気が混じっていた。
いや、違う。これは『喜び』だ。
SEとしての『本能的な喜び』。
自分が設計したロジックが、設計通り『完璧に』動作している。その快感。
何の無駄もない。何の誤算もない。『数学的美学』が、このリアルな世界で『実装』され、『実行』されている。
これは、かつてプログラマーたちが追求した『最高の瞬間』。
容量が限られていた時代。プロセッサが遅かった時代。その中で、いかに『美しく』『効率的に』コードを書くか。
その『芸術性』が、ここに。
このクソみたいな異世界に。
実現している。
『あ、あの……お嬢様?』
シャルルが怯えた声を出した。
『これはもう、『貴族の嗜み』を完全に超えています。もはや……『虐殺兵器』です』
シャルルの言葉は正しかった。
床は焼け焦げ、壁は削られ、天井は穴が開いている。
ダミーの残骸は『粉』になっていた。
だが、私は杖を下ろさなかった。
「あと『6秒』……」
『え?』
「パターン『ハチの巣』のループは12秒が基本。すでに『6秒経過』したから、あと6秒で『一つのサイクルが完成』する」
私の目は、もはや『人間的な輝き』を失っていた。
代わりに、そこにあるのは『開発者の目』。
『この美しい現象をすべて見届けたい』という執念。
残り6秒。弾幕は依然として、反射を繰り返している。
赤と青が衝突して、一瞬『紫』に見える。その瞬間の美しさ。
黄と緑が交差して、『渦』を作る。その渦を貫く別の色の弾。
物理演算とアルゴリズムが、『芸術作品』に昇華している。
ようやく、最後の弾が、壁の最後の反射を終えて、消滅した。
「……はぁ、はぁ」
私が杖を下ろした。
地下室は『焦土』と化していた。
熱風が吹き抜ける。焦げた魔力の臭い。木人の残骸。壁の損傷。
だが、私の目には、そのすべてが『美しく』見えた。
「完璧だ……」
つぶやく。
この瞬間が、『デスマーチの中で最高の瞬間』だった。
『…………お嬢様』
シャルルが、怯えたというより『呆然とした』声を出す。
『あなたは……もう『戦闘兵器』ですね。貴族ではなく』
「失礼ね」
私は額の汗を拭った。
「これは『芸術』よ。兵器ではなく『完成度の追求』」
自分の言葉に、自分が笑った。
## 4. 最適化と統合
テストデータを分析する。
弾幕展開における『魔力消費量』は、波動砲の『3倍』だった。
だが、『効率(ダメージ/魔力消費)』は、波動砲の『5倍』だった。
なぜなら、波動砲の弱点は『敵が散開すると無駄になる』という点。対して弾幕は『どう散開されようと、必ず数体は被弾する』という『確実性』を持つからだ。
散開した500人の騎士団を相手にした場合、波動砲×4では180人程度しか撃破できない。対して、弾幕『ハチの巣』×2なら、240人の撃破が理論値だ。
「これで『火力(波動砲)』と『汎用性(弾幕)』が揃った」
私は黒板に、戦略図を描き直した。
【作戦図】
敵の形態が『縦隊』→波動砲を使用
敵の形態が『散開』→弾幕を使用
敵が『混在』→波動砲+弾幕の『チェイン攻撃』
「あとは、これらを『統合』するだけ。そして……」
私は目を細めた。
「『隠し機能』を仕込む時間も必要ね」
デスマーチはまだ終わらない。
むしろ、ここからが『本番』だ。
「次はいよいよ『仕上げ』よ。完成度を100%に、そして『ボーナスステージ』の実装」
デバッグ合宿。
開発者の特権『隠しコマンド』。
その『裏技』を実装することで、初めて『完全版』となるのだ。
私の目は、依然として血走っていた。
デスマーチ特有の『ランナーズハイ』。
睡眠8時間分を魔力で無理矢理補填する状態。
理性は、ほぼ消滅している。
だが、そこにあるのは『純粋な執念』。
『マリエルとグレン団長を迎え撃つ準備』はいよいよ『最終段階』へと突入した。




