Sortis: 計算可能還元性を用いたペン・アンド・ペーパー型帝国ゲーム
Sortisは、MinecraftやOGameのような、プロシージャルで自動化された資源開発ゲームの体験を、コンピュータを使わずに提供するために設計されたペン・アンド・ペーパー型帝国ゲームです。このゲームの核となる設計思想は「計算可能還元性」にあり、プレイヤーはすべてのターンをシミュレートすることなく、帝国の将来の状態を計算することができます。
LFSRによるプロシージャルなマップ生成
Sortisは、単一のバイトで動作する線形帰還シフトレジスタ(LFSR)を使用して、256x256のグリッド世界を生成します。この手法により、ダイスや計算機を使わずに、ペンと紙だけでプロシージャルに生成されたマップを作成することが可能になります。
生成アルゴリズム
マップを生成するために、プレイヤーは0から255の間(0x0–0xFF)の2つのシード値($s_x$ と $s_y$)を選択します。各軸のシーケンスは、以下の式を用いて生成されます:
$$\text{step}(s) = ((s \ll 1) & \text{0xFF}) \mid (b_8 \oplus b_7 \oplus b_2 \oplus b_1)$$
任意のマス $(x, y)$ について、地形の数値 $v$ は、Xシーケンスの$x$番目の数値とYシーケンスの$y$番目の数値のXORです:
$$v(x, y) = \text{LFSR}^x(s_x) \oplus \text{LFSR}^y(s_y)$$
地形と鉱石のティア
地形は $v$ の値によって決定されます:
| 値 | 地形 |
|---|---|
| $v < \text{0x75}$ | 水 |
| $\text{0x75} \leq v < \text{0xE0}$ | 森 |
| $v \geq \text{0xE0}$ | 山 |
山の場合、鉱石のティアは、値のバイナリ表現における末尾のゼロの数によって決定されます。例えば、0xE0(バイナリ 11100000)の値は、末尾に5つのゼロがあるため、ore(5)となります。これにより、ore(n+1)がore(n)よりも平均して2倍希少であるという分布が生まれます。
ゲームメカニクスと資源の進行
プレイヤーはエージェントを調整して、探索、土地の開墾、建物の建設を行い、ゲームの主な目標であるワークショップのレベルを上げます。
建物の種類とコスト
建物のコストは、建物のレベル $n$ に基づく指数関数的な曲線($2^n$)に従います。
- House: コストは $2^n$ wood。各レベルでエージェントの収容能力が1つ増加します。
- Workshop: コストは $2^n$ ore(n)。他の建物をレベル $n$ に建設またはアップグレードするために必要です。
- Extractor (Sawmill/Mine): コストは $2^n$ wood(sawmill)または $2^n$ ore(0)(mine)。ターンごとに $n+1$ ユニットを生産します。
- Smelter: コストは $2^n$ ore(n)。$2^n$ ore(n) と $2^{n+1}$ wood を $1$ ore(n+1) に変換します。
- Road Segment: コストは ore(d)。陸地では $d=0$ です。橋の場合、$d = \text{distance from shore} + 5$ となります。
エージェントのルールとロジスティクス
エージェントはゲームにおける主要なアクターです。アクションを実行するには、そのマスに物理的に存在している必要があります。
- Locality: 建設を行うには、資源が対象のマスに存在していなければなりません。
- Action Economy: エージェントは1ターンにつき1つのアクション(移動、開墾、建設、または操作)を実行できます。 | Authorization: エージェントがレベル $n$ の建物を建設するために、レベル $\geq n$ のワークショップを訪問する必要があります。
- Movement: 移動コストは地形によって異なります:開墾された土地/道路は1ターン、森は2ターン、山は3ターンです。水は徒歩では通行不可です。
ターン管理と計算可能還元性
すべてのターンをシミュレートすることには代わり、Sortisはプレイヤーが閉形式の公式を用いて、資源の蓄積やエージェントの移動を予測することを推奨しています。
ターンログ
プレイヤーは、重要なイベント(例:建物のアップグレードやエージェントの行動の変化)のみを記録するターンログを保持します。生産は一定であるため、プレイヤーは特定の資源目標が達成される時点まで、数百ターン先へスキップすることが可能です。
エージェントの投影
(エージェントが2点間での資源輸送などのように)サイクル内で移動するエージェントについて、プレイヤーは剰余演算(modulo arithmetic)を用いることで、中間ステップをシミュレートすることなく、任意の将来のターン $t$ におけるエージェントの位置を決定することができます。
コミュニティの洞察と明確化
初期導入者による議論では、元のルールにおけるいくつかの曖昧さの点が指摘されています:
"ルールでは、山には『その16進数表記の値における末尾のゼロの数に等しい鉱石レベルが設定される』とあります。しかし、例示された計算例では、E0がore(5)とされており、これはバイナリで末尾のゼロを数える場合のみ成立します。"
さらに、ユーザーからは、開始時の ore(0) の獲得方法、車両の収容能力に関する正確な公式($2N$ と記載)、および資源の回収や投下が行われることがターンを消費するアクションとしてカウントされるかどうかの質問が寄せられています。