超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-

26,220
-1

Published on

0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
26,220
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
30
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

超連射68K 開発日記 -弾幕世代以前の90年代 STG のこと-

  1. 1. 「超連射68K 開発日記」 - 弾幕世代以前の 2D STG のこと - by ファミベのよっしん 2010/02/20 1
  2. 2. 自己紹介 ● ファミベのよっしん(吉田弘一) ● STG 大好きです ※ただし 2D に限る ● 80~90年代、趣味の一環として STG を作成 ● 雑誌にプログラムを投稿、同人ソフト販売 ● 2000年代 SCE 在籍 ● タイトル向け社内ライブラリ制作 2
  3. 3. 80年代につくったもの ↓当時のメインマシン、ファミリーベーシック V3 3
  4. 4. 90年代につくったもの 4
  5. 5. 90年代前半期の STG と それを取り巻く状況 5
  6. 6. 当時のゲーセン=ゲーマー交流の場 ● インターネットは無い時代 ● 情報伝達速度は今ほど早くは無い ● 「コミュニケーションノート」という雑記帳があった ● 馴れ合い、罵り合い、絵師の落書き etc... ● 今で言う掲示板 ● ノートを軸に常連客コミュニティが形成される 6
  7. 7. 熾烈なハイスコア競争が展開される ● 雑誌が全国のゲーセンのハイスコアを集計 ● 毎月全国TOPプレイヤを決定する仕組み ● 攻略法研究の遠方ゲーセン訪問が流行 ● 「遠征」という ● 他店の常連が遠征に来ると、スパられないよう(=スパイされな いようという意)ダンボール箱を被ってプレイする者が出現する ● エスカレートするスコア競争 ● スコアをめぐり、リアル抗争に発展する例も珍しくない 7
  8. 8. 当時ゲーセンで稼動していたSTG ● STGはまだまだ花形ジャンル ● スーパープレイと言えば STG。スーパープレイは希少 ● STG=指鍛錬 ● シューター曰く「STG に萌え要素など、公私混同も甚だしいわ」 ● 今で言う弾幕ものはまだない ● 弾幕は高次周回でのみ見られる現象だった 8
  9. 9. 当時のSTGデザインの傾向 ● 張り付き撃ち速攻の美学 ● 敵の隙をつき懐にもぐり込む→張り付き撃ち(手連射)→瞬殺 ● スピード狂推奨 ● 自機速度を MAX に上げ、張り付いたり安全地帯に入ったり ※一方、弾幕世代は弾避けに専念できるデザイン ● 弾避けに専念していても、敵にダメージを与え続けられる ● オート連射機能。敵の耐久力=残り時間になってしまう傾向 ● 張り付き要素との両立は各タイトル工夫されているようです 9
  10. 10. 90年代半ばは STG 苦難の時期 ● 進化の方向性を模索するが糸口が見えない ● 行き過ぎたマニア化をどう是正するか ● 3D 表現に移行しなければならないというプレッシャー ● インカム効率(売上げ)で対戦格闘ゲームに及ばず ● 対戦=どんなに上手いプレイヤでも必ずどっちかが死ぬ ● 格闘ゲームは数分で1コイン、一方 STG は数十分で1コイン ● STGに強いメーカーの撤退が相次ぐ ● 東亜プラン倒産、旧アイレム一時撤退 10
  11. 11. 一方、ホビーパソコンの動き ● 草の根 BBS の普及 ● 草の根BBS=当時のネット環境に構築された掲示板 ● ユーザー同士で活発に技術情報交換 ● 個人でも市販クオリティのソフトが作成可能に ● フリーソフトで制作環境が一式揃った ● 当時それは画期的なことだった ● ホビーのゲームプログラミング加速 11
  12. 12. X68K ユーザーは STG を作りまくった ● アーケード仕様の STG を好むユーザーが多い ● X68Kには移植版 グラディウスI が標準添付されていた ● それを目的に購入した人が多い。つまりシューターホイホイ ● 「無いなら作るの X68K 魂」がスローガン ● とにかく何か作らないといけない気運、異様なテンション ● コミケの X68K 枠は STG で溢れ返る結果に ● STGメーカーの撤退に連動。無いなら作ればいい 12
  13. 13. ここで動画デモ 13
  14. 14. 超連射68K の制作について 14
  15. 15. 開発時系列 ● 1993 年ごろ ● X68K の基礎ライブラリ整備 ● 1995 年 ● 超連射68K バージョン 0.10 コミケ(C47だったと思う)で販売 ● 1998 年 ● 超連射68K バージョン 1.00 完成 ● 2001 年 ● Windows 移植版作成、フリーソフト化 15
  16. 16. 開発体制 ● プログラムとドット絵 ● 私(よっしん)が一人で兼任 ● BGM ● 柏木るざりん氏 (http://loserkashiwagi.com/) ● 2003 年に「巫女みこナース・愛のテーマ」発表。電波ソング方面 をはじめ幅広く活動中 16
  17. 17. 当時のコミケ ● 晴海埠頭で開催(C49 まで) ● なぜか毎年晴天に恵まれる。台風が進路を曲げる ● オタクの熱気が作る上昇気流によるものであるという都市伝説も ● 広く作品発表できる唯一の機会 ● インターネットが無い時代、オタクにとっては甲子園のようなもの ● 同人ソフトはまだマイナーな扱いだった ● 新館2Fという劣悪スペースに配置 ● 夏はサウナ状態。館内に熱気で雲ができたという都市伝説あり 17
  18. 18. コミケ参加が超連射68K制作の推進力 ● 年二回、絶対に動かせない締め切りがやってくる ● 絶妙に妥協できない感じ ● ユーザーからのフィードバックを反映して ver UP ● コミケの度に ver UP(悪く言うと ver UP 商法) ● 頒布価格は 500 円と、低めの設定にしていた ● 完成まで中断できないサイクルに突入 ● 当時、学業が結構忙しく辛かった 18
  19. 19. 超連射68K の実装技術面について 19
  20. 20. SHARP X68K はこんなマシン ● CPU ● MC68000 10MHz ● スプライト(ハードウェアによるビットマップ描画) ● 16x16 dot サイズが 1 画面中 128 枚まで表示できる ● 16x16 dot の絵が 256 種まで登録できる ● サウンド ● FM 音源(8チャンネル) ● ADPCM(周波数固定1チャンネル) 20
  21. 21. 90年代すでにX68Kに陳腐化の兆し ● 夢のマシンのはず、だったのに。。。 ● 後発機も基本スペックを維持するのが SHARP のポリシー ● X68K 成功要因の一つだが、副作用としての陳腐化は不可避 ● スプライト機能の貧弱さが顕著になってきた ● その時、すでに普及帯の家庭用ゲーム機と同等以下 ● プログラムの工夫でカバーしないといけない ● ファミリーベーシックの制約から逃れられたと思ったのも束の間、 再びギリギリコーディングに(とか言いつつ結構楽しんでいた) 21
  22. 22. スプライトを増やせ! ● スプライトは走査線が通過した時に表示される ● 表示後、走査線より下に移動すれば、再表示可能 ● これによりスペックの 4 倍の 512 枚表示を実現 走査線が通過した #0 #1 を走査線の #0 #1 に走査線が #0 #1 は表示済み 下に移動する 通過して再表示 22
  23. 23. スプライト VRAM 不足を解消しろ! ● 16x16 dot の絵が 256 種しか定義できない ● 狭いが、仮想メモリだと考えれば十分なサイズ ● メインメモリからVRAMへ動的に割り当て開放 ←動作中のスプライトVRAM全体像 たったこれだけの領域しかない 動的割り当てにより狭さを解消 23
  24. 24. 当時、重い処理と言えば衝突判定 ● 32 vs 32 ごときで 60fps 維持できない /* これしきで CPU 処理時間を 100% 食いつぶす */ for( i=0 ; i<32 ; i++ ){ /* 敵 */ for( j=0 ; j<32 ; j++ ){ /* 自機の弾 */ 衝突判定( i , j ); /* 1024 回実行される */ } } ● スプライトは増えたが沢山のキャラは出せない? ● それでは意味がないので高速化を考えることにした 24
  25. 25. 衝突判定の高速化(1) ● 「仮想ビットマップ方式」と当時呼んだ手法を採用 ● 画面をマスで区切ってキャラの居るところにマーク ● マークを見つけたら実際に座標で比較 ● 衝突判定の面積に比例した処理負荷が生じるという欠点あり 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 4 0 衝突の可能性が 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 あるなら厳密に 0 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 判定を取る 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 8 0 キャラの居る位置にマーク 判定を取る時は、衝突判定 各ビットがキャラ番号に対応 範囲内のマークを調べる 25
  26. 26. 衝突判定の高速化(2) ● 最終的には以下のような形に落ち着いた ● X軸 Y軸 個別に 1 次元のマスを用意し、論理積で評価する ● X軸評価時点で判定無しと判断可(アーリーアウトによる高速化) ● 負荷は衝突判定の面積でなくサイズに比例(先の手法より高速) 0 1 2 0 0 0 C 0 0 1 2 0 0 0 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 2 0 0 0 0 0 2 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 8 0 8 0 0 0 0 0 0 8 0 X軸 Y軸 対応の1 次元配列にマーク X軸 Y軸 の論理積で衝突検出する 26
  27. 27. STGを取り巻く状況 90年代後半に起きた変化 27
  28. 28. 同人ソフトに Windows95 の波が直撃 ● 大半のコード資産が無駄になった ● X68K 的にはエンディアンが逆になったのは非常につらかった ● 当時の Windows はまだゲームが作りづらかった ● DirectX3 が出た頃。初期化だけでコードが1000行以上に ● 高額なコンパイラ、少ない技術資料、GPUの状況も流動的 ● 一時期、同人ゲームがかなり減ってしまった 28
  29. 29. ゲーセンで起きた変化 ● コミュニケーションノートがその役割を終えていく ● インターネットが普及し、取って代わられていく ● それに連動して、常連コミュニティの世代交代 ● ゲーメスト廃刊、ベーマガのハイスコア集計終了 ● アルカディア誌に引き継がれるが規模は年々縮小の傾向 ● 弾幕系STGというフォーマットが出現 29
  30. 30. スーパープレイの位置付けが変化 ● YouTube やニコニコ動画で観られるようになった ● 手軽で良い。しかし、本物スーパープレイである保障は無い ● TAS(Tool-Assisted Superplay)の台頭 ● エミュレータ等を駆使して作成したスーパープレイ動画 ● 処理落ち環境でリプレイ採取しただけのお手軽TASも横行 ● 本物スーパープレイのカリスマ性低下 ● STGはスーパープレイのカリスマ性と二人三脚で進化してきた ● 特にTASはそれを根底から揺るがす可能性がある 30
  31. 31. 90年代に積み残した問題 リプレイデータが本物であることをどう証明するか? 31
  32. 32. 某全国TOP神シューター曰く ※シューター=2D STG を好むゲームプレイヤのこと 「ネットに公開されてるハイスコアは信用ならない」 「仮にリプレイデータがあっても本物か判らない」 「だから今でも競う土俵はネットでなくゲーセン」 「ネットに移行できれば競う相手も増えるのに」 不可能を可能にしてきた彼らだからこそ、偽装「不可能」な リプレイデータもまた存在し得ない=リプレイを利用してハ イスコアの証明はできない、という解釈になる。 32
  33. 33. この問題をプログラマの視点で整理 ● 「競う土俵」に求められる特性 ● 明確なレギュレーション(ルール)があり、違反は100%検出可能 ● たとえ違反発生率がゼロでも、違反できる余地がある時点でNG ● シューターにとってネットは競う土俵として不完全 ● ハイスコアが本物であると証明する方法がない ● リプレイ添付でも、精巧な本物プレイっぽいTASの可能性がある ● 技術的な問題にすぎない ● TAS 利用チートを 100% 検出できれば良いのではないか? 33
  34. 34. どうすればTASは防止できるか? ● リプレイデータの改竄防止という方向性ではダメ ● 暗号化しても TAS には勝てない ● 「TAS の弱点=実プレイ時間」に着目 ● TAS は繰り返しリトライするため実プレイ時間が非常に長い ● 実プレイ時間を計測できれば TAS 利用チートは検出可能 ● 乱数を予測不能にしてやれば良いのでは? ● 乱数予測系のTAS(例:テトリス電源パターン系)防止のため 34
  35. 35. 超連射68KでTAS対策を実験してみた ● 従来のランキングサーバー方式をちょっと改良 1)ゲーム開始時、サーバーからゲーム内乱数シードを発行 2)ゲーム終了時、リプレイデータのハッシュ値をサーバーに返す プレイ時間=(2)-(1)。これとハッシュ値をサーバーに保存、公開 ● ハイスコアが TAS 利用でないことを確認する手順 1)プレイヤからリプレイデータを提出してもらう 2)ハッシュ値とプレイ時間がサーバー記録と一致することを確認 ● これだけで大半の TAS が不可能になった 35
  36. 36. 依然可能なTAS利用チートがある… ● AI 利用 ● 画像解析で自律プレイ(ぷよぷよでは実装例があるらしい) ● 弾幕を避ける AI が作られる可能性はゼロではない ● ゲームを早回しして時間をストック ● 常時 70fps ぐらいでプレイしておき、難所で処理落ちさせる ● さらなる改良案が必要 ● 皆さんも考えてみて下さい 36
  37. 37. 以上です 37

×