**C64ゲーム「Seawolves」(2025)に使用されたコーディングテクニック**

2026/02/19 21:24

**C64ゲーム「Seawolves」(2025)に使用されたコーディングテクニック**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

(以下は英語原文の内容を日本語に訳したものです。技術用語はそのまま保持しています。)


Summary

Seawolves、2025年7月15日にリリースされた作品は、著者初の商業的コンモドール64ゲームです。その卓越した品質は、6502プロセッサを効率的に稼働させる低レベル最適化セットに由来します。

  1. Raster timing – NMIsとIRQsを同期させることでネストされた割り込みを減らし、ラスタースタール(遅延)を防止します。
  2. Torpedo rendering – 「splites」(8つのスプライトを3つの7ピクセル横断スライスに分割)により、垂直軌跡と波紋効果付きのリアルタイムターボが実現します。
  3. Explosion animation – 高解像度モードでビットシフトを行い、潜水艦のグラフィックを死亡時に分解します。
  4. Ocean waves – 右回転ビットで遠方波を生成し、$D016 が水平リップリングを駆動;この手法は Ecco the Dolphin の「get ready」スクリーンからインスパイアされています。
  5. Water distortion – 垂直バンドがスプライトに y‑expand を有効化し揺れさせます。完全な y‑expand は性能上の理由で除外されました。
  6. Sprite timing – FLD シュートは不良ラインを停止させ、$D011 で1ライン分上方向 Y スクロールしてシフトを修正します。
  7. Memory savings – GFX stream‑ins はスプライト全体の定義を置き換え、変更された部分(例:レーダーターン、ハイドロフォイルスプレー)だけをロードします。
  8. CPU optimisation – ORA を用いた条件結合で分岐命令を削減し、BCC などの条件付きジャンプで全体 JMP より1バイト節約しています。

ゲームは「sea mist」レベルでパララックススクロールを採用し、Parallaxian audio 用にカスタム SFX プレイヤーを搭載しています。

Seawolves は £4.99 で販売され、著者は購入または PayPal 寄付を推奨しています。隠れたトリックの収集は将来のデモや拡張機能でさらなる最適化を示す可能性があります。


このバージョンはリストから全ての主要ポイントを取り込み、元文に含まれていない推測内容を削除し、読者にとって明確かつ簡潔な概要を提供しています。

本文

2025年7月15日更新


はじめに

Commodore 64で初めて商業ゲームをリリースした際、Seawolves を制作する過程を共有したいと考えました。
最初から「コードがほぼない」手法(デモシーンの狂気とも言える奇抜なやり方)に備えてください。

主な特徴

  • NMIs + IRQs が同期して動作
  • Splites を使ったリアルタイム魚雷
  • リアルタイムで進化する爆破アニメーション
  • リアルタイム海面波
  • リアルタイム水の歪み効果
  • FLD シフト + 上方向補正
  • GFX ストリームイン
  • 迅速なロジック
  • ブランチジャンプ

それぞれ見ていきましょう。


#1 NMIs + IRQs の同期実行

最初に Parallaxian、次に The Wild Wood で NMIs と IRQs を組み合わせました。メリットは以下の通りです。

メリット説明
割込み柔軟性ラスタIRQを短時間・スキャンライン正確なタスク用にNMIで中断でき、IRQの入れ子が不要になります。
安全網特定のIRQが停止した場合(稀に発生する負荷条件など)でも、最終的なNMIハンドラがトップオブスクリーンIRQへのポインタをリセットし、停止が拡散しないようにします。
タイミング精度NMIsは任意のスキャンライン上で発火するタイマー割込みで、NOP配置が必要なラスタIRQよりも細かい制御が可能です。

実装ノート

  • NMIはCIA #2 タイマ(
    $DD04/$DD05
    は Timer A、
    $DD06/$DD07
    は Timer B)で制御します。
  • 16ビット周期カウントはこれらのレジスタに格納されます。正しい値を計算するためにはスプレッドシートが便利です。
  • ゲーム初期化時には同じスキャンライン上で一貫した開始サイクルが不可欠です。

詳細については、NMI の設定ガイドをご覧ください。


#2 “Splites” を使ったリアルタイム魚雷

魚雷はマルチプレクスされたキャンバス上にリアルタイムで描画されるスプライトです:

  1. 構成 – 8縦スプライト × 3横切片(splite)=24 splite、各7ピクセル高(合計高さ21ピクセル)。
  2. 配置 – 割込みが毎7ラインで発生し、各 splite はユニークな X 座標と MSB 値を持ちます。
  3. 描画制約 – 魚雷が次の splite に移動する際にアーティファクトを防ぐため、魚雷間に最低7スキャンラインの縦スペースを確保します。
  4. 連続性 – 移動中は影響を受ける splite が同じ X 座標を共有します。

魚雷を1ピクセル上へ移動させた後、最後のラインのグラフィックデータをそのままにしておくと、垂直な軌跡が徐々に薄くなる「ワッケイエフェクト」が得られます。魚雷はキャラクターデータ前後でちらつき、泡立ったような見た目になります。


#3 リアルタイム爆破アニメーション

プレイヤーの潜水艦が死亡すると、圧力により分解します:

  • Hi‑Res モードへ切り替え。
  • ビットシフト命令を使って、表示中の潜水艦グラフィックデータをリアルタイムで破壊します。

#4 リアルタイム海面波エフェクト

同じビットローテーション手法で遠距離の波と前景の乱れ(Ecco the Dolphin からインスパイア)をアニメートします。水平方向成分は

$D016
を左右に振動させ、変化率を調整して追加します。シンプルですが効果的です。


#5 リアルタイム水の歪みエフェクト

初期の水の歪みは縦バンドで Y 拡張を有効にし、上下揺らすものでした。完全な Y ストレッチ(>2×)も試しましたが、最終ゲームではリソースが高すぎました。


#6 FLD シフト + 上方向 Y スクロール補正

多くのスプライトを中盤で移動させる際、「バッドライン」が CPU を消費することがあります。解決策は:

  1. 影響を受けたスプライトの Y 位置で FLD を実行し、バッドラインを止めます。
  2. バッドラインが次のスキャンラインに移動し、スプライト(例:splite 列)を描画する時間を確保します。
  3. $D011
    でキャラクターをもう一度上方向へシフトして補正します。

#7 GFX ストリームイン

各アニメーションフレームごとに別々のスプライト定義を割り当てる代わりに:

  • 回転するレーダー、ハイドロフォイル噴射、ヘリコプター回転翼など、変更されたグラフィックデータだけをストリームインします。
  • プレイヤー潜水艦が方向を変えると、即座に鏡像(照明保持のため完全なミラーではない)で再描画されます。

#8 クイックロジック

複数の「論理ゲート」がサブルーチンを制御する場合、複数の

LDA
とブランチ命令よりも:

LDA CONDITION_0
ORA CONDITION_1
...
BNE  <branch_target>

と書くことで CPU 時間と RAM を節約できます。

「OR A: ブランチテストにおける特殊使用法」 というブログ記事でさらに詳しく解説しています。


#9 ブランチジャンプ

JMP $xxxx
の代わりに、フラグ状態が既知かつジャンプ距離がブランチ範囲内なら
BCC
などのブランチ命令を使って1バイト節約できます。


閉じるコメント

これらは Seawolves に使用した技術の一部です。海霧レベルでのパララックススクロールや、Parallaxian を念頭に開発した独自 SFX プレイヤーの詳細は省略しています。見た目はシンプルですが、内部構造はデモシーン風プログラミングの典型的な高度技術です。

さらに隠れたトリックがあるので、ぜひ探ってみてください。
この記事を楽しんだ方は、ゲーム(価格 £4.99)や小額の PayPal 寄付で応援していただけると幸いです。

同じ日のほかのニュース

一覧に戻る →

2026/02/20 0:19

「Gemini 3.1 Pro」 (そのままカタカナ表記で)

## Japanese Translation: > **Gemini 3.1 Pro** – Google の最新 AI モデルで、複雑なタスクに対する高度な推論を目的として設計されています。 > > • **パフォーマンス:** ARC‑AGI‑2 ベンチマークで 77.1 % を達成し、Gemini 3 Pro のスコアの 2 倍以上となり、推論能力が大幅に向上したことを示しています。 > > • **新機能:** > – テキストプロンプトからウェブサイト用の高解像度アニメーション SVG を生成し、スケーリングもクリスプでファイルサイズも小さく保ちます。 > – 複雑な API をユーザーフレンドリーな設計に統合(例:国際宇宙ステーションのテレメトリを表示するライブ航空宇宙ダッシュボード)。 > – 手入力追跡と生成音声が連動した、操作可能なスターリング・マルミュレーションなどのインタラクティブ 3D エクスペリエンスをサポートします。 > – 文学的テーマを機能的コードに変換し、エミリー・ブルントー風のポートフォリオウェブサイトで実証されています。 > > • **入手可能性:** 現在はプレビュー版です。検証とさらなるエージェンシーワークフローの進化後に一般公開されます。 > – 開発者は Gemini API、Google AI Studio、Gemini CLI、Antigravity、Android Studio、および Vertex AI を通じてアクセスできます。 > – 企業は Vertex AI または Gemini Enterprise を介して統合できます。 > – Gemini アプリでは、Google AI Pro/Ultra プランのユーザーがより高い使用制限を受け取り、NotebookLM は Pro/Ultra ユーザーに限定されます。 > > • **開発背景:** 11 月の Gemini 3 Pro 発表以来、ユーザーフィードバックによる迅速な改善が進み、このプレビューリリースにつながりました。

2026/02/20 4:42

**マイクロペイメント:ニュースサイトにとっての現実的検証**

## Japanese Translation: **改善された要約** マイクロペイメントは、購読モデルを損なうことなく分散したニュース消費を収益化する方法として出版社に提供されます。代わりに広告収入の乗数効果として機能します。支払履歴は、本物の人間のエンゲージメントを独立して証明し、広告主の信頼性を高めます。モバイルアプリ内購入(IAP)は、二段階通貨交換が小額支払いを受け入れやすくすることを示しています。約80 % のモバイルゲーマーはゲームをプレイしながら IAP を行っており、マイクロペイメントの実用的な市場シェアを示唆しています。出版社は「パブリッシャコイン」をサブスクライバー向けのボーナス機能として導入でき、それが非サブスクライバーにも拡散されます。これは、習慣を形成するために無料コインを配布するゲームメカニクスと同様です。 正当なサイトは、広告主が AI 主導の帰属推定やビッグテックの不透明なレポートに対してますます懐疑的になる中で、信頼できる人間観客指標を必要とします。広告主 ROI はビッグテック評価の上昇とともに低下し、ランダム化実験は広告効果の因果関係を証明する唯一の確立された方法です。ビッグテックは W3C 承認済みのブラウザ内帰属システムを推進しており、これがブラウザベンダーに測定を集中させる可能性があります。これは、独立したサイトが自らの利益と合致しない場合、不利になる恐れがあります。 ビッグテックデータフローへの過度な依存を避けるため、正当な出版社は迅速に代替帰属手法(例:「rickcentralcontrolcom/geo-rct-methodology」)を採用する必要があります。統一されたマイクロペイメントプラットフォームは、複数の同意ダイアログ、メール登録、および通知プロンプトを排除し、ユーザーにかかる負担を軽減できます。 この記事ではさらに業界全体の動向にも言及しています:チャイニーズオープンソース AI の採用率(約80 % が中国モデルを使用)、プライバシー懸念から内蔵 AI 機能を禁止する EU、デジタルコンテンツ配信を規制する EPIC の年齢適切設計法案など。

2026/02/20 0:54

**Show HN:** *Micasa – ターミナルからあなたの住まいを追跡する*

<|channel|>final <|constrain|>## Japanese Translation: **Micasa**は、ホームオーナーが家のメンテナンスに関するすべての側面(タスク・プロジェクト・インシデント・機器・ベンダー・見積もり・ドキュメント)を単一のローカルSQLiteデータベースで管理できる、軽量で端末ベースのUIです(クラウドやサブスクリプションは不要)。 自動的に期日を計算し、設計図から完成までプロジェクトを追跡し、見積もりを横並びで比較し、保証とインシデントの詳細を記録し、ベンダー情報を保存し、ファイルを直接レコードに添付します。 インターフェースは完全にキーボード駆動で、Vimスタイルのモーダルナビゲーション、ファジー検索、ソート、列非表示、関連レコードへのドリルダウンが可能です。ヘルプ画面からフルキー绑定参照を確認できます。 Micasaは、家のメンテナンス管理に使われる物理的なショーボックス・バインダー・付箋紙を置き換えます。そのデザインはVisiDataのモーダル操作モデルからインスパイアされています。 Goでのインストール(`go install github.com/cpcloud/micasa/cmd/micasa@latest`)またはバイナリ(Linux、macOS、Windows;amd64 & arm64)のダウンロードによりセットアップできます。クイックスタートコマンドには `micasa --demo`、`micasa`、および `micasa --print-path` が含まれます。 アプリはすべてのデータを単一のSQLiteファイルにローカル保存し、`cp` で手動バックアップが可能です。 ## Text to translate (revised for completeness and accuracy):** > **Micasa** is a lightweight, terminal‑based UI that lets homeowners track all aspects of home maintenance— tasks … (the rest)