各種能力の書式 – オラクル解析 vol.3

奮闘記第3回、今回はいよいよ解析の基本となる「能力の書式」にメスを入れます。

ありがたい事に基本となる書式は Wiki で確認出来るので、まずはそれを頼りに進めますが、確実になんかよく分からん事になるのは容易に想像出来ますね!

ゆうてどうしようもないので、愚直に突き進むのみです。

 


起動型能の書式

では書式の確認と、実際のオラクルを見比べながら理解を深めていきましょう。

起動型能力は「コスト:効果」という形式で書かれている。書式には、必ずコロン(:)が含まれる。コロンの前に書かれたコストは起動コストと呼ばれる。また、ルール上の定義がこの形式で書かれるキーワード能力は、起動型能力である。

これは分かりやすいですね、文字列検索でサクッと見つけられそうです。

オラクルも確認してみましょう。

Lumbering Falls enters the battlefield tapped.
{T}: Add {G} or {U}.
{2}{G}{U}: Lumbering Falls becomes a 3/3 green and blue Elemental creature with hexproof until end of turn. It's still a land.

例えばこの《伐採地の滝/Lumbering Falls》だと「マナを出す」「クリーチャー化する」と言う、2つの起動型能力を持っている訳ですね。

コストや効果に書かれている「{}」はマナを表すようですが、パーマネントを生贄に捧げたり、ライフを支払ったりといくつか種類があるので、パターンをリスト化する必要がありそうです。

また、複数種類の起動コストが求められる場合、カンマ( , )で区切られる。との事なので、スプリットして中身を舐める流れになります。

クリーチャー化すると呪禁(=キーワード能力)を持つと言うテキストは、今は見えないフリをしましょう、これが長く生きるためのコツです。

 


誘発型能力の書式

続いて誘発型能力の書式。

誘発型能力は「〜とき/when」「〜たび/whenever」「〜時に/at」の語を含む一節から始まる「[誘発条件]、[効果]」という書式で書かれている。誘発条件の後に、追加の条件が書かれている場合もある(if節ルール)。また呪文能力や起動型能力、他の誘発型能力の文章の途中に、新たに誘発する誘発型能力が描かれているものがある(遅延誘発型能力、再帰誘発型能力)。イベントではなくゲームの状況に基づいて誘発するものもある(状況誘発)。

んー、この if 説ってのは《溶鉄の尖峰、ヴァラクート/Valakut, the Molten Pinnacle》で散々焼き散らかされた事を思い出すな…。

勿論今は見えないフリをしますけど。

Hexproof
Lotus Field enters the battlefield tapped.
When Lotus Field enters the battlefield, sacrifice two lands.
{T}: Add three mana of any one color.

で、肝心のオラクルの表記。

3つ目の能力に「When」から始まる一節がありますね、これが誘発型能力って事か。

英文なので大文字から始まる、と言う認識で良いのかな。

 


常在型能力の書式

そして常在型能力ですが…。

常在型能力は起動したり誘発したりするわけではなく、スタックにも乗らない。それが効果を発揮する領域にある間、常に何かをし続ける(あるいはするのを待っている)。例えば、栄光の頌歌/Glorious Anthemをコントロールしている状況で灰色熊/Grizzly Bears(2/2)が戦場に出る場合、3/3のクリーチャーとして戦場に出る。「2/2で戦場に出て、それから3/3になる」わけではない。

一部の例外(CR:113.6)を除き、インスタント呪文とソーサリー呪文の能力はそれがスタック上にある時にだけ機能し、それ以外のオブジェクトの能力はそれが戦場にある時にだけ機能する。

定型の書式が行方不明な模様、どうすんだこれw

Razortide Bridge enters the battlefield tapped.
Indestructible
{T}: Add {W} or {U}.

この《剃刀潮の橋/Razortide Bridge》のオラクル、目で見れば「タップインする」と言う常在型能力を持っていることが簡単にわかるのですが、これを機械的に判断出来るものなんだろうか…。

なお、もう一つの常在型能力の破壊不能はキーワード能力なので、別軸で自動的に判断する事が可能です。

 


呪文能力の書式

最後は呪文能力、これも定型の書式が無い模様。

インスタントまたはソーサリー呪文が解決される間に処理される能力。インスタントやソーサリー呪文が持つ能力のうち、起動型能力でも誘発型能力でも常在型能力でもないものが呪文能力である。

うーん、とりあえずインスタントかソーサリーのみが持つ能力で、上記3つに当てはまらないものが全て呪文能力と言う事になるらしい。

This spell can't be countered.
Counter target noncreature spell.

何とかして常在型能力の法則みたいなのを見つけないと、《ドビンの拒否権/Dovin’s Veto》みたいに「この呪文は打ち消されない。」(=常在型能力)とか書いてるカードの振り分けが出来ない事になります。

 


時が来れば戦えばよいのだ

てな訳で今回得た情報を元に、振り分けするのひな形を書いてみる。

$text = explode("\n", $oracle->text);

foreach($text as $t) {
	if(preg_match("/^\(/", $t)) {
		// カッコから始まるので中身を取り出す
		preg_match("/\(.*\)/", $t, $temp);
		$t = preg_replace("/\(|\)/", "", $temp[0]);
	} else if(preg_match("/\(/", $t)) {
		// カッコから始まらないがカッコを含むので中身を削除する
		$t = preg_replace("/\(.*\)/", "", $t);
	}
	
	if(preg_match("/:/", $t)) {
		// コロンが含まれるので起動型能力
	} else if(preg_match("/^When|^Whenever|^At/", $t)) {
		// 定型句から始まるので誘発型能力
	} else {
		// この時点で「キーワード能力」「常在型能力」「呪文能力」のどれか
		// Cycling {3} などを判定出来るように半角スペースでスプリット
		// 0 番目の単語でキーワード能力を判定する
		$key = explode(" ", $t)[0];

		if(isset($keywords->{$key})) {
			// キーワードが存在すればキーワード能力
		} else if(in_array("Instant", $oracle->types) || in_array("Sorcery", $oracle->types)) {
			// インスタントかソーサリーの場合は何らかの判定が必要
			// 常在型能力か呪文能力に振り分け(ここが分からん)
		} else {
			// 全てすり抜けたら常在型能力
		}
	}
}

多分こんな感じで呪文能力以外は全部判定できるはず。

常在型能力の判定条件がカギになっていて、それさえ分かれば振り分けの大枠は完成となりそうです。

 


あとがき

今回の記事で何度か書きましたが「一時的に見ないフリをする」は、言い換えれば戦略的撤退です。

これはプログラミングだけに限らず、何かに挑戦する時は「立ち止まるより分からないなりに進む」と言う行動を取った方が遥かに建設的だと言うのが管理人の持論です。

 

うん?新弾の「機械兵団の進軍」のフルスポが来た?

しかたないなー、データ作成しなきゃだから遅れてもしかたないなー()

 

現行シミュレータのバトルの実装、どうしよう…w

分析,雑談

Posted by theuri