効果システム
本ドキュメントは効果の表現方法を定義する。個々のページが持つ効果と数値は
data/側のデータが持つ(データの契約)。数値のレンジと設計意図は バランス。 用語の正式な定義は 用語集。ページの設計指針は ページカタログ。
効果とは、状態変数への作用の列である(ADR-0030)。面はこの列を持ち、プレイするとその順に実行される。
よく使う作用の組み合わせに名前を付けない(ADR-0035)。ページを設計するときに書くのは、名前ではなく作用の列そのものである。
分類が必要になったら、そのとき付ければよい。 何が「よく使う組み合わせ」なのかは、プレイ体験を確かめるまで決められない。先に名前を付けると、それが型の単位になり、そこから仕様の語彙へ逆流する。
変数を1つ増やすたびに、それを参照する効果と、それに作用する効果が同時に生まれる。 組み合わせの数がそのままバリエーションになる。
変数の型
| 型 | 性質 | 作用の対象になるか |
|---|---|---|
| 現在値 | ある時点の値。スカラー | なる |
| 累計量 | ある期間中の合計。スコープ添字を持つベクトル | ならない(下記) |
| 恒久パラメータ | ルールの係数 | なる |
| 内部フラグ | 名前付きの整数。効果どうしを繋ぐための入れ物 | なる |
累計量は作用の対象にならない
累計量に書き込む先は存在しない。 現在値を動かすか、操作を行えば、対応する累計量が自動的に積まれる。
綻びの現在値を +40 する → 増えた綻び[ステージ] と 増えた綻び[ラン] が同時に +40 される
したがって「破る回数を増やす」効果は、破った回数[ステージ] を減らすのではなく、破る回数の上限(恒久パラメータ)を +1 する。
累計量には2種類ある。
| 種類 | 何のログか |
|---|---|
| 変化量ログ | 現在値への作用。減ったHP・増えた綻び・使用した歩・得た防御・与えたダメージ |
| 操作ログ | 操作の発生回数。プレイ枚数・破った回数・ペン回数・跨いだ回数・ドロー枚数 |
跨いだ回数は操作ログである。 刻の更新の副産物に見えるが、独立して数えられる。
3つの軸
スコープ
プレイ ⊂ ターン ⊂ ステージ ⊂ ラン
累計量の添字であり、効果の持続範囲でもある。加えてアンカー付きスコープがある — 「この作用が乗ってから n 回のプレイまで」のように、起点が固定の区間ではなく作用の側にあるもの。
領域
ページがどこにあるかを表す。
領域 ∈ { 手札, 山札, 捨て札, 除外 }
合算 ∈ { 山札+捨て札, 山札+捨て札+手札 }
符号
移動には2つの量がある。
| 量 | 符号 | 例(刻 30 → 44 → 22 のターン) |
|---|---|---|
| 総移動距離 | なし | 14 + 22 = 36 |
| 正味変位 | あり | 22 − 30 = −8 |
符号を使ってよいのは効果の参照だけであり、コスト計算には持ち込まない。 歩の支払いは常に距離で決まる(柱1)。
累計量とスコープの対応
● は中核として使うもの、○ は定義されるが現在は参照されないもの、× は意味を持たないもの。
| 累計量 | プレイ | ターン | ステージ | ラン |
|---|---|---|---|---|
| 使用した歩(=総移動距離) | ● | ● | ○ | ○ |
| 正味変位 | ● | ○ | ○ | ○ |
| 跨いだ回数 | ● | ● | ○ | ○ |
| プレイ枚数 | × | ● | ○ | ○ |
| 与えたダメージ | ● | ○ | ○ | ○ |
| 消した Intent 個数 | ○ | ● | ○ | ○ |
| 減ったHP | ● | ● | ● | ○ |
| 得た防御 | ○ | ● | ○ | ○ |
| ドローした枚数 | ○ | ● | ○ | ○ |
| 増えた綻び | × | ○ | ● | ● |
| 破った回数 | × | ○ | ● | ● |
| 使用したペン回数 | × | ○ | ● | ● |
| 使用した通貨 | ● | ○ | ○ | ● |
× は「その組み合わせを参照する効果を作らないと決めた」ことを意味する。
| セル | 理由 |
|---|---|
プレイ枚数[プレイ] | 常に 1 であり、定数と区別できない |
増えた綻び[プレイ] 破った回数[プレイ] ペン回数[プレイ] | 綻びが増えるのはペンと破るのみで、どちらもプレイではない |
使用した歩[プレイ] と 総移動距離[プレイ] は、刻の更新を抑制する効果が無いかぎり常に一致する。
作用
作用は1つの変数に対する1つの操作である。 面はその順序付きの列を持ち、記述順に適用する。
面の効果 = [ 作用₁, 作用₂, 作用₃, ... ]
打点が 3 と 7 の2発を持つページは、敵HPへの作用を2つ並べる。攻撃回数という変数は存在せず、列の長さがそれを表す。
作用は6つの項を持つ。
| 項 | 内容 | スコープ添字 |
|---|---|---|
| 対象変数 | 何を動かすか | 不要 |
| 演算 | どう動かすか | 不要 |
| 基準値 | 定数、または参照式(参照カウンタ × 係数) | 参照式なら必要 |
| 値の寿命 | 生まれた値がいつ消えるか | スコープそのもの |
| 発動タイミング | いつ発動するか | — |
| 繰り返し範囲 | いつまで繰り返し発動するか(終了スコープ + 最大発動回数) | スコープそのもの |
値の寿命と繰り返し範囲は別物である。
毎ターン開始時に防御を得る効果(ラン永続)
繰り返し範囲 = ラン ラン中ずっと毎ターン発動する
値の寿命 = ターン終了 生まれた防御はそのターンで消える
演算
| 族 | 演算 | 補正を受けるか |
|---|---|---|
| 数値 | 加算 / 乗算(下記) | 着地と組み合わせで決まる |
| 設定 | 代入(他ページの銘・内部フラグ・面の記入状態のみ) | 受けない |
| パラメータ | 上限変更 | 受けない |
| 制御 | 抑制(刻の更新を行わせない) | — |
| 領域 | 移動 / 追加(生成・複製) | 受けない |
数値演算の着地と補正
数値族の演算は、着地(対象にどう作用するか)と補正を受けるかの2つの軸を持つ(ADR-0036)。
| 着地 | 補正を受ける | 固定 |
|---|---|---|
加算(対象 += 値) | 実効値を計算式で解決する | 基準値をそのまま加える(例:「補正を無視して必ず n 減らす」) |
乗算(対象 *= 値) | 存在しない(構築時に拒否する) | 対象の現在値そのものに基準値を掛ける |
乗算の着地は常に固定である。 補正を受ける乗算という組み合わせは無い。
乗算の着地と、乗算補正(攻撃倍率・綻び倍率など)は別物である。 前者は対象の現在値を直接書き換える1つの作用であり、後者は加算着地の作用が実効値を組み立てる際に掛かる係数(Π乗算補正、計算式参照)である。どちらも「乗算」と呼ぶが、対象にしているものが違う。
列内の適用順序は、着地の種類によらず常に記述順である。 ある作用が加算着地か乗算着地かによって、列の中で先送りや繰り上げが起きることはない。計算式の「加算が先、乗算が後」は、1つの補正付き加算着地の作用が自分の実効値を組み立てる内部の順序であり、列全体の順序とは無関係である。
発動タイミング
| 族 | タイミング |
|---|---|
| ターン内のフェイズ境界 | ターン開始時 / 歩の回復後 / ドロー後 / プレイ時 / ターン終了宣言時 / 防御獲得後 / 敵の行動前 / 敵の行動後 / ターン終了時 |
| 外側のスコープ | ステージ開始時 / ステージ終了時 / ラン開始時 / ラン終了時 |
| イベント | 被弾時 / 座を跨いだ時 / 破った時 / ペンを使った時 / ページが除外された時 / 敵のHPが 0 になった時 |
| 常時 | 補正がこれにあたる |
「敵の行動前」と「敵の行動後」を分けているのは、そのターンの生死が変わるためである。 行動前に敵を倒しきれば、残った Intent は実行されない。
参照式が読む値は、刻の更新前に確定する
すべての参照は、刻を更新する前の値で評価する。 これで足りることは確認されている。
| 参照したいもの | 更新前に計算できる根拠 |
|---|---|
| このプレイの移動量 | |銘 − 更新前の刻| |
| このプレイで座を跨ぐか | 座が更新前の刻と銘の間にあるか |
跨いだ回数[ターン] | このプレイを含まない(「既に跨いだ回数」) |
したがって「移動の途中」という第3の時点は要らない。
計算式
加算着地かつ補正を受ける数値演算は、発動の瞬間に次の式で解決する。固定の数値演算(加算固定・乗算固定)はこの式を経由せず、基準値をそのまま対象へ適用する。
実効値 = ( 基準値 + Σ加算補正 ) × Π乗算補正
- 加算が先、乗算が後。 作用ごとに順序は変わらない
- 乗算どうしは掛け合わせる。 累積綻びによる攻撃倍率と、破却効果による倍率は互いに掛かる
- 補正は発動の瞬間に評価する。 継続作用は、発動のたびにその時点の補正を拾い直す
途中は小数で保持し、対象変数へ適用する瞬間に切り捨てる。 作用ごとに丸めると、同じ合計値でも打点の分け方で結果がずれる。この切り捨ては着地・補正の有無を問わず数値演算の作用すべてに掛かる — 防御に乗る値も例外ではない。
補正変数の一覧は設計しない
どの補正がどの作用に効くかは、対象変数が決める。 対象変数の一覧が決まれば、補正変数の一覧は自動的に決まる。
補正変数 = 対象変数ごとの { 加算補正, 乗算補正 } のペア
| 対象変数 | その加算補正の通称 | その乗算補正の通称 |
|---|---|---|
| 敵HP | 攻撃力補正 | 攻撃倍率(累積綻び由来)・烙印 |
| 綻び | — | 綻び倍率(そのページ固有) |
| 防御 | 防御補正 | — |
| 歩の支払い | — | 支払い倍率 |
攻撃倍率も綻び倍率も、その正体は「その対象変数への乗算補正」である。 出どころが違うだけで、書き方は他の補正と変わらない。
面の記入状態への代入は、敵の白紙化専用である(ADR-0033)。ページ効果からこれを操作する手段は用意しない。
補正の出どころは2系統あるが、式の上では区別しない。
| 出どころ | 例 |
|---|---|
| 自前 | そのページに書かれた固定の加算・乗算 |
| 外部 | 場に乗っている継続作用・破却効果・累積綻び |
継続作用
場に乗り、タイミングが来るたびに発動し、繰り返し範囲が尽きると消える作用を継続作用と呼ぶ。
| 例 | 対象 | タイミング | 繰り返し範囲 |
|---|---|---|---|
| 毎ターン開始時に防御を得る | 防御 | ターン開始時 | ラン・無制限 |
| 敵の行動後に敵HPを削る | 敵HP | 敵の行動後 | ステージ・最大 n 回 |
| 以降 n 回のプレイまで攻撃力を上げる | 攻撃力補正 | 常時 | 以降 n プレイ |
補正・破却効果・遅延ダメージは、すべて継続作用である。 別の機構を持たない。
継続作用の基準値は控えめに置く。 発動のたびに現在の補正を拾い直し、乗算どうしが掛け合わされるため、ターン数に比例して伸びる。
防御は多重集合である
防御はスカラーではなく、(値 × 消滅契機)の集まりとして持つ。
| 消滅契機 | 意味 |
|---|---|
| 被弾1回 | Intent を1個受けたら、残っていても消える |
| ターン終了 | 既定。|刻 − 座| から得る防御はこれ |
| ステージ終了 | ターンを跨いで残る |
| ラン終了 | 消えない |
- 消費順序は、寿命の短いものから。 被弾1回 → ターン → ステージ → ラン
- 上限はない
- 既定の防御は持ち越されない。 長い寿命の防御を配れるのはページの効果だけである
「被弾1回で消える防御」は値の大小に関わらず Intent を1個だけ受け止める。 重い1発を持つ敵に強く、軽い多数を持つ敵に弱い。
クランプ
| 変数 | 規則 |
|---|---|
| 防御 | 上限なし |
| HP | 上限を超えたぶんは切り捨てる |
| 歩 | 負にならない |
クランプ(上限・下限)と、計算式の小数切り捨ては別の軸である。 防御に上限はないが、他の対象変数と同じく小数点以下は適用の瞬間に切り捨てる。
歩の「負にならない」は、作用が歩を対象にしたときの規則である。 プレイそのものが払う歩(|銘 − 更新前の刻|)はこの対象ではない — プレイ条件が先に判定し、払えないプレイはクランプする前に拒否する。
プレイ条件
条件は作用ではなく面に紐づく。 満たさない面はプレイできない(歩も消費せず、刻も動かない)。白紙の面と同じ扱いになる。
プレイそのものが払う歩が足りないときも、同じ扱いである。 残り歩 < |銘 − 更新前の刻| のプレイは、下表のどの条件とも無関係に拒否される(歩も消費せず、刻も動かない)。下表の「予算」行はページ効果が明示的に課す追加の条件であり、この基礎コストの可否判定はそれとは別に常に行う(バトルシステム)。
| 分類 | 条件 |
|---|---|
| 位置 | 刻の範囲 / |銘 − 刻| ≥ n / このプレイで座を跨ぐ・跨がない |
| 予算 | 残り歩 ≥ n |
| 領域の枚数 | 手札 / 山札 / 捨て札 / 合算 の枚数 |
| 特定ページの枚数 | 指定したページが、指定した領域に n 枚あること |
| 残り回数 | 残りペン回数 / 残り破り回数 |
| 累計量の閾値 | 跨いだ回数[ターン] / プレイ枚数[ターン] / 破った回数[ステージ] / 減ったHP[ステージ] / 増えた綻び[ラン] など |
| 資源 | HP ≥ n / 通貨 ≥ n |
| フラグ | 内部フラグ |
閾値は「出せるか」に、線形は「どれだけ効くか」に
条件だけが閾値を持つ。 作用の値は参照式なので、参照カウンタに対して線形に伸びる。この役割分担により、プレイヤーは押す前に結果を暗算できる。
プレイ条件は片面ページの脆さを二重にする
発動する面は刻が決めるため、プレイヤーは条件のある面を避けられない(ADR-0025)。片面ページに条件を付けると「刻がこの範囲にあり、かつ条件を満たすとき」しか出せなくなる。引き直しの発火率に直結するため、条件付きページの配布量は管理する。
ページと面が持つ変数
| 保有者 | 変数 |
|---|---|
| ページ | 銘 / 綻び倍率 / 出自 / プレイ後の行き先 / デッキ内上限枚数 / 出現条件 |
| 面(未来・過去で独立) | 記入状態 / プレイ条件 / 作用列 / ペン強化の内容 |
ペンの状態も作用列も面ごとに持つ。 ページ単位のフラグ1つでは表現できない(データの契約)。
プレイ後の行き先
| 行き先 | 挙動 |
|---|---|
| 捨て札 | 既定。山札が尽きればシャッフルで戻る |
| 除外(ステージ) | このステージ中は戻らない。次のステージで復帰する |
| 除外(ラン) | 二度と戻らない |
「除外(ラン)」は破ることとは別物である。 破ると違い、綻びも破却効果も生まれない。したがって除外を伴うページは、その1回のプレイが強くなければ成立しない。
ペン強化
白紙の面にペンを入れると、その面が使えるようになる(ADR-0025)。書かれている面にペンを入れると、その面の作用列が丸ごと、あらかじめ定義された別の作用列に差し替わる(ADR-0038)。
差し替え後の列は面ごとに1つだけ定義され、プレイヤーが強化先を選ぶことはできない。何が起きるかは、使う前から見えている。各面につき1回まで(ADR-0025)。数値の目安は バランス#ページの作用 を参照。
出現条件とプレイ条件は別物である
| 判定するとき | 満たさないと | |
|---|---|---|
| 出現条件 | 報酬・古物商の抽選時 | プールに現れない |
| プレイ条件 | 手札から出そうとしたとき | 出せない(手札には残る) |
出現条件は、クリアしたステージ数・通過したマス種別の回数・内部フラグを参照できる。
ページの生成と複製
デッキに無いページを作る作用と、手札のページを複製する作用が存在する。 差し込み先は手札とデッキのいずれか。
- 生成されるページの寿命はページごとに指定する(ステージ限り/ラン永続)
- デッキ内上限枚数に達している場合、生成は失敗する(何も起きない)
- ランダム生成の抽選範囲はフィルタで指定する(出自・銘の範囲など)。抽選は必ずシード付き乱数を通す(ADR-0013)
プレイヤーの選択を要求する作用
デッキサーチのように、プレイヤーの入力を待つ作用が存在する。
選択は原子的な操作として扱い、選択の途中では中断できない。 選択待ち状態はセーブ対象に含めない(セーブ/開発者モード)。
山札を見せる作用は、見せた順序どおりに引けなければならない。
歩以外の代償
全ページ共通のプレイコストは歩だけである(ADR-0022)。そのうえで、ページ固有の作用としてHPと通貨の支払いを持たせてよい(ADR-0031)。これはそのページだけが負う賭けであり、共通コストへ昇格させない。
効果を設計するときのチェックリスト
- 作用の対象が、現在値・恒久パラメータ・内部フラグのいずれかであること(累計量を対象にしていない)
- 参照する累計量に、スコープ添字が付いていること
- 値の寿命と繰り返し範囲を、それぞれ独立に決めていること
- 閾値を作用ではなくプレイ条件に置いていること
- 継続作用の基準値が、発動時評価と乗算の掛け合わせに耐える大きさであること
- デザインピラー のどの柱も弱めていないこと
関連
- ページカタログ — ページの設計指針と銘の分布
- バトルシステム — 歩・面・破るの規則
- バランス — 数値のレンジと設計意図
- データの契約 — 定義データとセーブデータ
- ADR-0030 — 効果を状態変数への作用の列とする決定
- ADR-0035 — 効果の入れ物を作用の列に一本化し、組み合わせに名前を付けないとする決定
- ADR-0038 — ペン強化を作用列の差し替えとして表す決定