
2025/12/07 10:47
Oblast: A better Blasto game for the Commodore 64
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改訂要約
この文章は、1978年のアーケードゲーム Blasto の進化を追っています。Blasto は Gremlin の Blockade から派生した Hustle ハードウェア上で動作し、ROM がわずか 2 K に収まる設計です。その後、Milton Bradley が TI‑99/4A 用にライセンスを取得し、コアゲームプレイは維持しつつ、音楽・カラーグラフィックス・設定可能な速度・迷路描画・ミン密度・無限ライフ(時間制限付き)といった機能を追加しました。また、各プレイヤーが一度に1発の弾しか撃てない単一画面レイアウトに変更されました。
著者は次に Oblast を紹介します。これは Commodore 64 用のリメイクで、GitHub 上でオープンソース(Floodgap Free Software License)として公開されています。Oblast はシングルプレイヤー専用ですが、元のコンセプトを拡張し、最大 384 個の手続き的に生成されたスクリーンと迷路密度・トレイル生成・燃料制限・無敵状態・弾丸サイクリングの完全な設定が可能です。VIC‑II ECM モードを利用して追加背景色を実現し、カスタム 64 字符フォントと三つのスプライト(タンク本体・トレッド・アクセント)で弾を描画します。リロードは移動時間に連動しているため、一度に表示できる弾は四発までです。爆発はフレームごとに文字ベースのプレイフィールドをスキャンし、黄色背景ビットを遅延マーカーとして使用することで処理されます。ゲームロジックは 240 Hz で実行され、より滑らかな動きを実現しています。
音声は SID の三つすべてのボイスを使用します。ボイス 3 はエンベロープをサンプルし、VIC‑II の細かい X/Y スクロールを駆動させることで画面揺れを同期させます。ゲームには四つのプリセットモード(Regular Duty、Increased Bombs、Classic Blasto、Gonzo)があり、完全な設定画面と「ドットマトリクス」ブリーフィング付きのアトラクトモードがあります。得点は各スクリーン後にボーナスが付与され、高得点メダルは ECM スクロール効果を使用します。ゲーム全体がメモリ上で動作するため、カセットやテープからロードせずにプレイできます。
ビルドツールには Perl 5、xa65 アセンブラ、およびオプションの pucrunch 圧縮が含まれます。バイナリは C64 エミュレータ用または物理メディア用に .prg ファイルとして配布されます。
本文
昔(実際は半年ほど前)に、Gremlin Blasto のアーケードボードをワイヤリングしていたときに、1978 年のゲーム史やミルトン・ブラッドリーがテキサス・インスツルメンツ 99/4A に移植した唯一の公式ホームコンピュータ版について長々話しました。
単体プレイモードでは迷路を走り回り、すべてのミネを爆破しつつ、時に印象的な連鎖反応を起こしますが、自分自身が燃え上がらないよう注意するゲームです。
TI‑99/4A 版は私が最初に覚えている Blasto で、アーケード版の Blasto は実際にはプレイしたことがありません。
(また、ここではソニーの PlayStation 用「Blasto」(Phil Hartman の声優を除けば、開発者と少数のプレイヤーにとってはトラウマ的な苦闘だった)とは関係ないことに注意してください。)
三名の作家によるコンポジットで、TI‑99/4A 版は機能的で正確な変換であり、設定可能なオプション・カラーグラフィックス・音楽を追加しています。実際、TI の Blasto は /4A 上で私のお気に入りのゲームで、他のカートリッジよりも好きです。ただし、正確に移植されているため、アーケードハードウェアの CPU と ROM 容量が限られていたことから来る弱点をすべて継承しています。
記事では将来的な Blasto プロジェクト 2 件について触れました。
1 つ目はカスタムアーケードキャビネットに板を入れるための貯金、2 つ目は TI Blasto を自分仕様で改良することです。このプロジェクトはバケットリストの第 2 件として完了しました。数年かけて作業し、やっと完成です――高速アクションとアニメーション、大量の手続き的に生成された画面、完全に設定可能なゲームプレイ。
Oblast(オブラスト) と名付けました。実際の Commodore 64 またはエミュレーターで無料で遊べます。以下に同じ点と異なる点をまとめます。
1978 年版 Blasto の概要
- ハードウェア:Hustle(Gremlin の Blockade を派生させたもの、Lane Hauck が設計)。
- プログラマ:Bill Blewitt はキャラクタグラフィックを除き、全コードを 2 KB の ROM に詰め込みました。
- 機能:迷路生成・プレイヤー入力(1〜2 人)・弾の処理・衝突判定・音声と「爆発」回路制御・連鎖爆発を同時に起こすロジックを実装。
- フリープレイ:上面版には無料ゲームロジックもありました。
ミルトン・ブラッドリーが Gremlin の新オーナー Sega からライセンスを取得し、TI 99/4 開発者として作業した際、基本的なゲームプレイとルールはほぼ同じに保ちつつ、音楽トラック・カラー表示・複数の設定オプション(速度・迷路描画スタイル・トレイル有無・ミネ密度など)を追加しました。
- MB 版:緑色の地球ベースの背景に青いミネ、宇宙船をタンクへ変更。
- ミネ密度:速度よりもゲームプレイへの影響が大きく、ミネが多いほどスピーディで爆発的なゲームになります。
- サウンド:TMS9919/SN76489 のノイズ出力は弱く、音質に制限があります。
- メロディ:シンプルなチューンを再生しようとしますが、弾射撃やミネ爆発の効果音で中断されます。
元ゲーム同様、無限ライフですが時間は有限です。2 人プレイ時に爆発に足を取られたり相手に撃たれると、再生まで貴重な秒数が失われます。ただし、再生成は「テレポート」的に元のスポーンポイントから始まります ― これは地上タンクにはあり得ない動作です。
主な quirks(奇妙さ)
- 各プレイヤーは同時に 1 発だけ弾を発射可能。衝突後すぐにもう一度撃てます。
- 爆発や連鎖反応中でも移動はできますが、フレームレートが若干低下します。ただし、爆発が止まるまで射撃はできません。
- タンクはミネ・障害物を通過できず、完全に不通過の障壁です。
- 画面は 1 つのみ。全ミネを時間内にクリアすると、上面版では無料ゲームが与えられます(フリープレイが合法である管轄下)。TI ポートではミネをすべて撃破した時点で「ゲームオーバー」画面が無料で表示されます ― 同じ報酬が勝敗に関係なく得られます。
Oblast – 新しい機能
- 単一プレイヤーモード専用。
- TI Blasto の設定性を保持しつつ、迷路生成とコアルールセットも拡張。
- 設定は BASIC スタブで書かれ、速度向上のために 6502 アセンブリヘルパーが利用されます。メインゲームループの大部分はアセンブリです。
プレセット
4 種類をテストプレイ後選択:
- Typical – Attract モードで表示されるデフォルト。
- Increased bombs – ミネ増加。
- Classic Blasto‑style – トレイルと従来のルール。
- Gonzo – 個人的に好き。
また、完全なゲーム設定画面からさらに微調整可能です(ゲームモード・開始レベル/画面(0–255)・ミネ/障害物密度・トレイルオプション・燃料計挙動・弾発射速度など)。Oblast は最大 384 個の手続き的に生成された画面をサポートし、0〜255 の任意の番号から開始できます。画面は固定シードデータ(64 の BASIC ROM)から生成され、同じパラメータであれば常に同一画面が作られます。
視覚
- カスタム文字セットを使用し高速化しつつ、VIC‑II の拡張背景色モード (ECM) でカラー柔軟性を保持。
- ECM は同じ画面上で最大4 色の背景をサポート。Oblast は緑背景に加えて情報パネル用黒と爆発アニメーション用黄を追加。
- 標準256 エントリセットから 64 文字のみ使用し、上位2ビットは背景色選択に使われます。
- カスタムフォント(Ultrafont+)はメモリ節約のため、一部文字をグラフィック形状で置き換えています。
メカニクス
- 爆発:フレームごとにプレイフィールド全体を走査し、アニメーションは一定フレームレートに固定。
- タンク移動:3 つのスプライト(トラック・ボディ・アクセント)で90°角のピクセル単位移動を実現し、高度な三角法不要。
- 弾:同時に最大4 発が画面上に存在可能。燃料計ニードルスプライトでリロード状況を表示(暗青3つ=リローディング、鮮やかなシアン1つ=発射準備完了)。リロード時間は任意方向で弾が画面を横断する最大時間に等しい。
- 衝突処理:タンク座標の更新速度は VIC‑II の描画速度より速く、衝突時には急停止ではなく減速効果として現れます。
音響
3 つの SID ボイスをノイズ生成に使用:
- Voice 1 – 発射時に鳴る。
- Voice 2 – タンクエンジン音(速度・回転で周波数変化)。
- Voice 3 – 爆発音;波形出力とエンベロープ振幅をサンプルし、VIC‑II の微細 X スクロールにフィード。これが画面揺れ(スクリーンシェイク)を音楽と同期させます。
スコア & ハイスコア
- 画面完了後に静かにボーナス付与、終了時に合計表示。
- 一部ボーナスは相互排他的または設定によって無効化。
- チャンピオンメダルは ECM を使用しマスク多色バー効果を実現;横分割は不要。
技術的ノート
- 全体がメモリに収まる ― 読み込みやディスクアクセス不要、カセットタープからも動作可能。
- メモリレイアウト:2 つの文字セット、スプライトバンク、2 つのハイレゾタイトル画面(BASIC ROM の下に配置し8 KBを解放)。
- コアサブルーチンと音楽トラックはこれら資産周辺に分散。BASIC メニュースタブは変数用メモリが十分残っています。
- Attract モードの再設計では、クレジットシーケンスでダブルバッファスクロールを使用。
入手方法
Oblast はフリーウェア/オープンソースで GitHub の Floodgap Free Software License にて公開しています。ビルドには:
- Perl 5
- xa65 クロスアセンブラ
- (任意)pucrunch 圧縮ツール
Perl ツールはスプライト、トークナイズ済み BASIC コード、圧縮されていない実行可能リンク版を生成します。プレセット変更は BASIC コード内の
DATA ステートメントを編集し、make を実行すれば新しいバイナリが得られます(混同防止のため別名で保存してください)。
ゲームだけ再生したい場合は GitHub リリースにフロッピー/ディスク/タープ用の圧縮版と未圧縮 (.prg) ビルドがあります。ポート2 にジョイスティックまたは同等機器が必要です。PAL でも NTSC の Commodore 64 でも動作します。
これは私のバケットリスト上の最後のプロジェクトではありませんが、もう一つの完成したものです。
もし遊んで楽しめたらコーヒー(Pibb)をいただければ幸いです。