---
source_url: https://jkm.dev/posts/how-2004-runescape-fit-a-multiplayer-rpg-into-56k-dialup/
source_title: "How 2004 RuneScape fit a multiplayer RPG into 56k dial-up · jkm.dev"
hero_image: https://jkm.dev/images/blog/runescape-networking/varrock-fountain.png
tags: runescape,network-protocol,optimization
generated_at: 2026-09-01T04:01:08.106Z
model: claude-haiku-4-5
---
# 2004年のRuneScapeが56kダイアルアップで多人数RPGを実現した仕組み

2004年のRuneScapeは、56kモデムの実速度5 KB/sという極限の帯域幅制約下で、数千人のプレイヤーが同時接続する3D多人数RPGをブラウザで動作させた。Jagexが実装した極度の帯域幅最適化技術により、このアーキテクチャが成立していた。

2004年、RuneScapeは56kダイアルアップ接続でプレイ可能な多人数3D RPGとして機能していた。実際の下り速度は56 kilobits per secondの理論値から5 KB/sであり、この制約下でサーバー当たり約2000人のプレイヤーが同時接続し、画面上には数十人が表示される状況が実現していた。この技術成果の背景には、Jagexによる「バイトを無駄にしない、ほぼ執着的な取り組み」があった。

## ネットワークプロトコルの最適化設計

RuneScapeのゲームサーバーは600ミリ秒ごとの離散的なサイクル（ティック）で動作していた。クライアントは20ミリ秒の間隔でパケットをフラッシュしており、この構造によりレイテンシーよりもバイト単位での最適化が設計の中心となっていた。

プロトコル設計の基本原則は、「変化なし」という既定状態を1ビットで表現することにあった。ローカルプレイヤーの移動や詳細情報に変更がない場合、わずか1ビットでこれを示すことができた。一方、ローカルプレイヤーが1ステップ移動する場合は7ビット、その他の詳細変更を除いた移動ステップは4ビットの容量が必要とされた。

## プレイヤー位置情報の伝送最適化

プレイヤーの位置情報は絶対座標ではなく相対座標で送信された。絶対座標には16ビット数値を用いた32ビットの容量が必要だったのに対し、相対座標は軸当たり5ビット計10ビットで済んだ。この相対座標方式の最大可視範囲は約15タイルであり、ロード済み領域の直径は約104タイルであった。テレポート時には7ビット幅の座標値が使用された。

新規プレイヤーの識別には11ビットのプレイヤーIDが割り当てられ、2047がセンチネル値として機能していた。新規プレイヤーの位置送信時には、軸当たり5ビット計10ビットで位置を表現していた。

## プレイヤーの移動・操作データの圧縮

クライアント側の経路探索は先読み幅優先探索を用いてローカルで実行され、サーバーにはウェイポイント角のみが送信された。単一ステップの歩行パケットは7バイトの容量（オプコードと長さマーカー含む）であり、ペイロード本体は5バイトであった。パケット内には開始位置4バイト（2つのshort）、その後の各ウェイポイント差分2バイト、Ctrlキーフラグ1バイトが含まれた。サーバーは自身の衝突マップに対してパスを検証していた。

## プレイヤー詳細情報の更新構造

プレイヤー詳細更新はバイト境界に合わせられており、最も高コストな要素だった。更新タイプは1バイトで表現され、9個の更新フラグが存在していた。高バイトマーカーが設定された場合、フルサイズは2バイトとなった。

プレイヤー外観セクションは名前、戦闘レベル、体の部位、装備アイテム、色、アニメーション、性別、頭部アイコンを含む情報を保持していた。このセクションのサイズは最小44バイトから最大80バイトであった。プレイヤーが特定のエンティティを向く更新では2つのshort（対象エンティティID）、プレイヤーのアニメーション更新では2つのshort（アニメーションID）と1バイト（アニメーション遅延）が必要とされた。

暗号化はオプコードバイトのみにISAAC流暗号を適用し、パケットボディ全体は暗号化されなかった。

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典

jkm.dev "How 2004 RuneScape fit a multiplayer RPG into 56k dial-up"
https://jkm.dev/posts/how-2004-runescape-fit-a-multiplayer-rpg-into-56k-dialup/
