メインコンテンツまでスキップ

効果システム

本ドキュメントは効果の表現方法を定義する。個々のページが持つ効果と数値は 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)。これはそのページだけが負う賭けであり、共通コストへ昇格させない。

効果を設計するときのチェックリスト​

  1. 作用の対象が、現在値・恒久パラメータ・内部フラグのいずれかであること(累計量を対象にしていない)
  2. 参照する累計量に、スコープ添字が付いていること
  3. 値の寿命と繰り返し範囲を、それぞれ独立に決めていること
  4. 閾値を作用ではなくプレイ条件に置いていること
  5. 継続作用の基準値が、発動時評価と乗算の掛け合わせに耐える大きさであること
  6. デザインピラー のどの柱も弱めていないこと

関連​

  • ページカタログ — ページの設計指針と銘の分布
  • バトルシステム — 歩・面・破るの規則
  • バランス — 数値のレンジと設計意図
  • データの契約 — 定義データとセーブデータ
  • ADR-0030 — 効果を状態変数への作用の列とする決定
  • ADR-0035 — 効果の入れ物を作用の列に一本化し、組み合わせに名前を付けないとする決定
  • ADR-0038 — ペン強化を作用列の差し替えとして表す決定

Implementation Notes​