http://diarynote.jp/d/64931/20050916.html

問題:
あるプレビュー・カードに書かれた表記はこんなものだった。

----------------
Mysterious card

????? -- Urza’s Shrine

Tap : Mysterious card deals 1 damage to target creature.
----------------

このカードの、考え得るカード・タイプは何か。
現行のルール(2005/09/16現在)で考えて欲しい。

また、その根拠は?


直感でアーティファクト、または土地、と答えてみたいが
根拠も自分なりに調べてみる。

とりあえず問題文からLegendary,Snow-Covered,World..は特殊タイプなので無視してよい。

205.3d. ほとんどのカード・タイプには、それぞれ独立なサブタイプの組が存在する(この文章の後半にある用語集の、「クリーチャー・タイプ」「土地タイプ」などの項目に完全なリストが添付されている)。例外として、インスタントとソーサリーはサブタイプが共用されうる。インスタントとソーサリーのサブタイプを、総称として呪文 タイプと呼ぶ。

208.1. クリーチャー・カードの右下には、スラッシュで区切られた二つの数字が記されている。一つめの数字はクリーチャーのパワー(戦闘中に与えるダメージの量)であり、二つめの数字はタフネス(破壊されるのに必要なダメージの量)である。例えば、2/3というのはそのクリーチャーが2のパワーと3のタフネスを持つことを示している。パワーやタフネスは、効果によって変更されることがありうる。

212.5d. インスタントが場に出ることはない。場に出るような場合、その代わりにもとあった領域に残る。

212.7d. ソーサリーが場に出ることはない。場に出るような場合、その代わりにもとあった領域に残る。


205.3dからURZA’sとShrineを持っているのでこのカードはエンチャントであり土地でもある。
208.1からクリーチャタイプは否定される。このカードにはP/Tがない。
212.5dと212.7dからインスタントとソーサリータイプは否定される。場に出ないのでタップされることはない。

アーティファクトの可能性を否定するルールは見つけられなかったのでカードタイプはつぎのいずれか。

「エンチャント・土地」
「エンチャント・アーティファクト・土地」

212.6g. あるオブジェクトが土地であり、かつ他のタイプでもある場合、それは土地としてプレイされる。呪文としてプレイされることはない。


・・・・バドさんと同じ結論ですた。
■「桜木 スラル」
 アクセス元ネタ。
msnのサーチエンジンが「桜木霊」を「桜木」「霊」と認識した模様。
それにしても「桜木 スラム」ではなく「桜木 スラル」。

この彼は何を探したかったのだろう?

あまりにも気になったのでmsnで検索すると・・・・
「"桜木 スラル" を含む 1 件のうち 1 ページ目を表示 (0.09 秒)」

真相は不明。

桜木霊=「桜ぞくのちょうろう」+「木霊のてのうち」の
つもりでした。反省しています。

■SCENAメモ:
ラブニカの考察記事じゃないです。

ギルドマナ。
ユーザに見えない部分で動く記号なんて適当に
決めればいいと思ってる。
------
’ManaCost’プロパティの格納形式
 例1) (2)(W)(W): ’2WW’
 例2) (X)(Y)(R): ’XYR’
 例3) (B/U)(B/U): ’DD’

 W : White
 U : blUe
 B : Black
 R : Red
 G : Green
 A : W/U (Adarkar waste)
 D : U/B (unDerground River)
 S : B/R (Sulflous Spring)
 K : R/G (Kaprusan forest)
 H : W/G (brusH land)
 C : W/B (Caves of coilos)
 V : U/R (shiVan reef)
 L : B/G (Llanowar waste)
 F : W/R (battleField forge)
 Y : U/G (Yavimaya coast)

そろそろ再開の目処をつけなきゃ。
そんだけ。

■ラブニカ現在の予定:
 現在のスポイラーで。
 トーナメント: 2〜3 box
(ドイツ語販売する店があればそこから。輸入先検討中)
 アンコモンセット x 1〜2(茄子商店?)
 レアシングル:
   3 Overgrown Tomb(BG)
   4 Sacred Foundry(WR)
   3 Watery Grave(UB)
   2 Primordial Sage: りさいくる
   2 Circu, Dimir Lobotomist:みる
   3 Dimir Cutpurse:  2/2ちえへび
   3 Glimpse the Unthinkable:ぷちとらうま。
 偏ってる・・。
ここ最近のマジックへの関わり方。
・6/30 CARDHAUSとKardKastleで買い物。
・7/10 買い物・かがり火見学
・7/15 イグニス店長のランデスデッキ(60枚)でタワー。
・7/14〜7/16 コモン1killシミュレーション
・*/* SCENA
.....ゼンゼンダメじゃん!!構築と対戦入ってないし!!!

ゴメン>池袋2CHD,AMC

■初めてです。
りみてっど研究室さま経由のアクセスを頂きました。
http://rimiken.com/

ダイアリーノート以外では初めてのマジック関係サイトからのリンクです。

■Kard Kastleキター!!
Kard Kastleに発注してたいくつかのカードをようやく受け取りました。
が、これを使ったデッキを組むのは当面先の予定orz

■SCENA
ここしばらく全く進んでません。
そもそもマジックしてないのでそっちが先だと思います。

---
ここしばらくで解決できた(ハズの)こと。
全部マナオブジェクト(*1)関係。

1)Mishra’s Workshop(用途限定マナ)のサポート方法。
 マナプール表示/マナコストの支払いにフィルタを掛けるだけ。
 具体的には UseFor プロパティを持たせる。

SELECT o.SID, o.OID, o.BNM, pv.VAL AS Qty, pu.VAL AS UseFor
FROM
  T_OBJE o INNER JOIN
  T_PROP pv ON o.BID = pv.OID LEFT OUTER JOIN
  T_PROP pu ON pv.OID = pu.OID
WHERE
    pv.PNM = ’Qty’
  AND pu.PNM = ’UseFor’

SID, OID, BNM, Qty, UseFor
1,205,’W’,’0’,’-’
1,205,’U’,’0’,’-’
1,205,’B’,’0’,’-’
1,205,’R’,’0’,’-’
1,205,’G’,’2’,’-’
1,205,’0’,’0’,’-’
1,205,’0’,’3’,’Artifact’

たぶんこんな感じではないかと。
少なくともマナオブジェクトがたった6種類ってことは無い。

2)Boseiju (マナの支払いによって呪文・能力に影響を及ぼすマナ)のサポート方法。
 「呪文または起動型能力のプレイ」ルールシナリオをいじるだけ。
 バイバックなどの宣言(409.1b)と同じ方法でプレイ中に能力を付加。
 ※遊びたいので当面コーディングする予定なし。(ワーイw

---
ここしばらくで発生した問題。
1)マナバーンしないマナ(Upwelling、Shizuko)のサポート方法。

 Shizukoはマナオブジェクトの効果期間(EFZ)を利用するのがよさげ。
 「マナバーン」シナリオではマナバーンしないマナを見分けるが、
 「マナバーンしないマナオブジェクト」はデフォルトで作成しない。
 それらのカードが「デッキ/サイドボード」領域から
 「ライブラリ/ゲーム外」領域へ移動する際に作成する。

 一方、Upwellingはマナバーンのルールシナリオのトリガーを
 利用しないとこれが場を離れたときの考慮がいるので酷い事になる。
 ※これも当面コーディングする予定なし。

---
やばいかもしれないもの。

ま い ん ど す れ い ば ぁ

目的が目的だけに意図的に無視してましたw
(マジックの完全なシミュレータを作るのが目的ではないので)
でもUIへの接続方法もそこそこ描いておかないと後でおかしくなる気がしてきたので少しだけ考察。

例)
Player1: Hrurr
Player2: AP (*2)

通常はAPのコントロールするカードの操作情報はAPの端末から発信されてくる。
ところがMindSlaverの解決中はAPの画面操作情報はHrurrが発信しAPは傍観のみ。
この間、Hrurrは自分のコントロールするカードとAPのコントロールする
カードの二つを操作しなければならない。
・・・・ということは。

例)HrurrがMind Slaverを起動した直後のAPのターン
1.APのターン終了までの常在効果に「マナバーンしない」効果を追加。
2.Hrurrの端末の「APの画面」をプレイヤーモードに、
 APの端末の「APの画面」を観戦モードに切り替え。
3.ターン開始。
4.APのターンが終了したら端末状態を元にもどす。


こんな感じになればイイノカナ?とおもってみた。
これだとセッション内にいる人≠プレイヤーとは限らない扱いに
なっちゃう、とか、複数入力系統(ソリティアモード)と観戦モード
の実装といっしょじゃん、とか、ゲーム中の入力系統の切り替えあり、
とか、そんなことも考えなきゃいけない気がする。
・・・イヤダナァw

下のモデルだと問題があるので無しで

というわけで、イメージのみ掴んでみる。

[SCENA]
 ||・セッションオーナー = Rebecca
 ||・プレイヤー = (Hrurr,AP)
 ||・セッション参加者 = (Rebecca,Hrurr,AP,Netamakidoki,...n)
 |
 〜
(ここから下は作る気ありません)
 〜
 |
[SERVER_I/F]
 |
 〜
 |
 ├[CLIENT_PC] 参加者ID=1,プレイヤーID=Null、観戦者RebeccaのPC
 | ├[CLIENT_CONSOLE](ConID=101,PlayerID=1(Hrurr),観戦モード)
 | :
 | └[CLIENT_CONSOLE](ConID=102,PlayerID=2(AP),観戦モード)
 |
 ├[CLIENT_PC]:参加者ID=2,プレイヤーID=1、プレイヤーHrurrのPC
 | ├[CLIENT_CONSOLE](ConID=103,PlayerID=1(Hrurr),プレイヤーモード)
 | :
 | └[CLIENT_CONSOLE](ConID=104,PlayerID=2(AP),観戦モード)
 |
 ├[CLIENT_PC]:参加者ID=3,プレイヤーID=2、プレイヤーAPのPC
 | ├[CLIENT_CONSOLE](ConID=105,PlayerID=1(Hrurr),観戦モード)
 | :
 | └[CLIENT_CONSOLE](ConID=106,PlayerID=2(AP),プレイヤーモード)
 |
 ├[CLIENT_PC] 参加者ID=4,プレイヤーID=Null、観戦者NetamakidokiのPC
 | ├[CLIENT_CONSOLE](ConID=107,PlayerID=1(Hrurr),観戦モード)
 | :
 | └[CLIENT_CONSOLE](ConID=108,PlayerID=2(AP),観戦モード)
 :


早いうちに解決しないと後まで問題を引きずりそうだけど。
とりあえず後回し!!(コラ

〜〜〜〜〜〜
*1:SCENAではマナもトークンも人も全部オブジェクト(SCENA Object)扱いです。
*2:この例はなぜかAPでないとダメだそうです。
先日の問題全部のコモンに広げたらどうなるか・・・と思ってたら、
あれこれやり繰りしてるうちに

使い魔 Ux3,Bx4、漆黒の手の信徒、血の執行司祭、がでてしまい、

甲鱗のワーム
流れ込む知識(8ドロー)
エネルギーのタップ(8マナ)
メタモルフォーゼ(生物専用9マナ)
死体発掘(ワームをアンタップ)
無政府主義者(いろいろ回収)
公証人(集い回収)
集い(メタモ、知識で失ったライフを取り返す)
中断された埋葬
アシュノッドの供儀台(無政府主義者をマナに変換)

という無限増殖ループが出来てしまいましたとさ。

とりあえずストームで+1000000/+2000000くらいされた
甲鱗のワーム様を回れ右して無謀な突進で。
■文字化けの件
読めることは読めるんでたまにはOK。
母なる大地をああ〜っ!
って曲は中学生には難しいと思いますです、と書いてあります。

■剛毛
左腕はなぜかすんごい勢いで回復しちゃったのでほとんど
完治状態です。
他の場所にできた傷なんて半年くらい残ってるのもあるので、
この場所だけ高速で治ってしまうと返って気持ちワルイ。

■ポータル2の構築済みとかもうありませんから
以前石神井公園のおもちゃ屋にポータルの構築済みが大量に
残ってたのを思い出していってみる。
案の定ひとつも残ってませんでした。

めぼしい割引モノは・・・・IAのイタ語が210えん。
5E英語のスターターが768えん。
全然ハァハァできないないのでスルー。

仕方ないので無駄遣いする気満々で大泉イグニスに遊びに行く。

■大泉イグニス
6Eのエクテン落ちが迫ってきたせいかばんちうなどが値下がり
し始めてます。一方ダメランはすごく高騰。
IAのダメランが2k超え。むぅ・・・。

いろいろ物色してるとなにやら私個人メタの商売があるらしく
カードの束を取り出してきます。

マ:「これ、買いませんか?」
ぅ:「???・・・デュアルランドかいw」

みれば{ /4:UB /4:WU /3:UG /1:UR /3:RU /2:WB }というセット。
2セット以上持っててもなぁ・・と思いつつ、でも
/4:UB /4:WU /3:UGというあたりに惹かれてみる。

ぅ:「WRとかWBとかぶっちゃけイラナイんだけど・・」
マ:「もうしわけありませんがセットでお願いします。」

マエモンド師匠よくわかってますw
提示された値段にとりあえず納得し、まあいいや、で買う。
(値段はナイショ。安いです。)

このお店の個人メタ商売のおかげで相当散財してるな。
いやいや、いつもお世話になってます。>イグニス大泉店様

■SCENA
どんどん手直ししたくなります。
イヤン♪

---------
[(SID)Session=T_SESS](SID)1
 ├→n(OID)[(BID,BNM,VER)GameMaster=T_OBJE](BID)1
 │ ├→n(OID)[(BID)GameScenario=T_OBJE](BID)1
 │ │ ├→n(OID)[(NID,ODR,VER)Scenario=T_SENA]
 │ │ └→n(OID)[(PID,PNM,VER)ScenarioProperty=T_PROP]
 │ ├→n(OID)[(BID,PNM,VER)GameProperty=T_PROP]
 │ └→n(OID)[(LVL)GameStack=T_STAK]
 └→n(OID)[(BID,BNM,VER)Player=T_OBJE](BID)1
   ├→n(OID)[(PID,PNM,VER)PlayerProperty=T_PROP]
   ├→n(OID)[(BID,BNM,VER)Deck=T_OBJE]
   └→n(OID)[(BID,BNM,VER)Zone=T_OBJE](BID)1
     ├→n(OID)[(NID,ODR,VER)CardScenario=T_SENA]
     └→n(OID)[(PID,PNM,VER)CardProperty=T_PROP]

ゲームマスターやプレイヤーにバージョン管理とか頭悪いです。Shahrazadはキライです。

■アクセス元検索文字列
いろはもみじ(google)
fetch next(google)
剛毛(biglobe)
剃り跡(google)

・・・・剛毛って何を検索してたんだろう?
一応サルベージ。
海外企業敵にまわすのやだしね。

http://game9.2ch.net/test/read.cgi/tcg/1113999189/301-400



343 :名無しプレイヤー@手札いっぱい。:2005/06/02(木) 01:49:47 ID:bDiGzkmA
http://diarynote.jp/d/68000

これってMWSみたいなのか?

364 :名無しプレイヤー@手札いっぱい。:2005/06/05(日) 02:43:09 ID:XFwpUcZ1
>>343
できればいいけど間違いなくムリです。
APレベルでも下記の1,2,3は私にスキルがありません。
MOレベルだと4,5が必要になりますので完璧に個人作業の域を逸脱します。

1.クライアントUIを記述できる人、
2.サーバインタフェイスを記述できる人
3.サーバを提供できる人、
4.MTGルールをSQL Serverとシナリオ言語で記述できる人、
5.膨大なカードをSQL Serverとシナリオ言語で記述できる人
6.etc.

基本エンジンの設計とその実証以上はやらないとおもいますので
生暖かく見守ってください


アクセス元をみると最近のは殆どDB関係の御用事のようです。
そのせいか最近はアクセス元もgoogleからのリンクは↓こんなのばっかりです。

1)q=sqlplus 戻り値
2)q=SQLServer ストアド呼び出し
3)q=SQLServer トリガー
4)q=create procedure oracle exec
5)q=SQLPLUS ストアド 呼び出し

試しにいくつか試してみると・・・・マジで出てきましたw

1)出てきません。(167件)
2)上から1番目。(8件)
3)上から7番目。(224件)
4)上から30番目。(309件)
5)上から2番目。(59件)

ごめんなさい。そういう記事扱ってませんですw
常日頃あまり使わないRDBを使って遊んでみよう企画ですから。

以前のようなアクセス元「ラーメン二郎」とか「人間凶器」みたく物騒なのは
無くなりましたがすげー無味乾燥な気分。

-----------------------------------------
■ごっこ遊び
(その1)
DBインスタンスはSE(Senario Engine)という名前に決定。
基本部分をぼちぼち書いて基礎実験と考えの整理。
うわぁぁ、ぜんぜんまとまってねぇw
湧き出る疑問に溺れ気味。

(その2)
なにげなく使ってるのってホントにイヤ。
ついさっきまでSQL Serverでスキーマ使えると思ってた。
(SQLServer 2000だとCREATE SCHEMAという構文は存在するがOracleな人や
Postgresな人が期待するようなスキーマは作成されないです。)
そういやあユーザ部門のAccess97(現役ですが何か?)からODBC経由でみたら、
SQLServerは違和感感じないけどORACLEだとスキーマがある都合で嫌な名前になるんだっけ。

「いつも何を見てるんだ?」

とかいわれそうだけどいつも見てるのはメインフレームの階層DBだったりする。
(知らない人が多いと思いますがRDBが開発される遥か以前から使われてるDBです)
なのでここからそっちは初心者並みの知識しかない。

このBlogに期待できる技術的知識などないぞ、と開き直ってみる。

(その3)
ちなみにYukonだとSCHEMAはまともなものがサポートされてる模様。
でも.NETは触ったことない。
(ADOとかDAOはVBAから叩いたことあるけどほんの数千行程度。てかVBAでそんなことするな)

(その4)
CounterSpellとかマジ嫌いです。
下のほうのスタック勝手に取り除かないで下さい。
ヘルメットがなかったら即死だったかもしれません。
戦闘ダメージとかもどっかいって下さい。
あんたいろんなもんごっちゃにして一まとめにしすぎですから。
あんたに比べたら謙虚のほうがマシです(いいすぎ)。

(その5)
エラヨウをつくるとシナリオで7本?
1)レジェンドのシナリオ
2)プレイの能力シナリオ(熊と互換)
3)反転する能力シナリオ(特性値を書き換える)
4)プレイヤーのプレイをトリガすトリガシナリオ(有効期間=ゲーム中ずっと)
 正常:このターンにプレイされた呪文が4つでこの能力の親オブジェクトが
 場にある場合反転するシナリオをスタックに積む。
 反転:そのプレイヤがコントローラでない場合打消しの能力オブジェクトをスタックに積む。
5)ターンの開始時にプレイされたカウントをゼロにするトリガシナリオ。
6)打ち消し(対象は取らない)の能力オブジェクトシナリオ

--------------------------------------------
■8Mox
なぜかネタ蒔きがまわしてる時間の方が長いデッキ。
TimeTwisterをいれて「弱体化」してみる。

(25)
8 Islands
3 Fetch:WU
8 Moxen:UUUUWBRG
3 Alex.
4 Sol Ring
(3)
3 Morphling
(12)
4 Counterspell
4 Mana Drain
4 FoW
(20)
4 Isochron Scepter
4 Ancestral Recall
3 FoF
3 Time Walk
4 Brainstorm
1 Time Twister
3 Fact or Fiction
1 Amnesia
一番楽しいのは名前を考えてるときらしい。
たぶんあっさり「SE(Senario Engine)」でいいや、って
なっちゃうんだろうけど。

■解決中。
・Shahrazad(AN;Rule506)
 カードや能力の二重帳簿は考えていたがゲーム状態やプレイヤーまで二重帳簿??。
 サポートしたくない、というあたりで解決するとおもう。
・毒カウンター:
 プレイヤーはPYRゾーンに存在するカードの一つにしてしまえばいいと思う。
 ダメージの解決も非常に楽になる。
・Shizuko, Caller of Autumn(SK), Food Chain(MM)
 安直なマナプールの考え方を根底からぶち壊す。ひどい奴だ。
 ええい、マナプールもカードの一つにしてしまえ。(・・・いいのか?)
・Fire/Ice(AP) カードの特性値が一つでない例。
 頭では判っていても厄介。反転カードは全然楽。

【メモ】
 オブジェクトのインスタンス(プロパティ)に有効期間を設けることでシナリオの記述を
 軽減しようとしてたらオブジェクトの有効期限もあったほうがいいことに気づく。
 シナリオで書くよりはよほど美しいと思う。
 でも一方でCEF(常在能力)領域以外ではあまり有効でない気もしてる。

 --------------------------------------------------------------------
■*** MUSICAL BATON ***

音楽協会かどこかの陰謀じゃねーのと思ってみる。

*Total volume of music files on my computer
 NO FILES ON MY PC.
 I listen to music with only CD player.
 ・・・こういうことをやってるからCDが棚に数百枚ストックされちゃったりするわけだ。

*Song playing right now
 Innocent O.S.T
 一年経ってようやく買いました。お目当てはFollow Me。

*The last CD I bought
 ドリフだョ!全員集合(赤盤)

*Five songs(tunes) I listen to a lot, or that mean a lot to me
 ・・・聞くものの殆どがインスツルメンタルなんで強引にでっちあげ。

1.GUSTAV MAHLER: Das Lied von der Erde
 自分にとって古典音楽のポータルとなった曲の一つ。
 マーラーから選ぶなら交響曲No.1かNo.4。
2.YUJI OHNO: LUPIN THE THIRD Theme
 先生!原曲に歌詞ありません!
3.TORAZO HIROSAWA: 清水次郎長伝 石松三十石船道中
 「旅行けば 駿河の国に 茶の香り...」・・・・SONGちゃうやん!!
4.ヘドロ: ヘドロのテーマ 〜from Princess PrinPrin
 ♪わたしはヘドロ ヘドロ
  世界で一番いいオンナ 好きな色は 赤と黒
  レッドアンドブラック レッドアンドブラック
  赤は血の色 黒は罪の色 オーレ!♪
 ・・・若者置き去りw
5.ZUNTATA: セラミックハート
 ゲーム音楽から一つあげてみたかっただけ。
 ゲー天の「ラブリースター」でもいいや。ステージ好きだし。

*Five people to whom I’m passing the baton
>NUL
>NUL
>NUL
>NUL
>NUL
・・・めんどいのでアースしときます。

─┐
─┴─
/////
あちこち省略してるけど、一応6/11のシナリオ言語(手抜き仕様)の雰囲気をつかんでみる。
ついでにシナリオスタックの振る舞いも。

■事例6

こんたはネタのアップキープに時間停止を撃った。

------------------------------
下の1〜6がこんたのTimeStopを説明するのに必要になりそうなシナリオサンプル一式。
TimeStopを解決する瞬間はおおよそ↓のの1〜5のシナリオが入れ子で実行されている。

1.プレイヤのループ
[MTG_SENA_APP_PHASE_LOOP]
EXEC,NULL,"MTG_APP_STAT_SetActivePlayer" //次のプレイヤを得る。
CALL,NULL,"MTG_SENA_APP_PHASE_LOOP" //フェイズ一式のシナリオを呼び出す。
EXIT,"MTG_GET_GAME_END","MTG_APP_START_MATCH" //自己ループさせる。
(おしまい)

2.フェイズ一式(300.1)
[MTG_SENA_APP_PHASE]
 :
CALL,NULL,"MTG_SENA_PH_BGN" //開始フェイズ。
CALL,NULL,"MTG_SENA_PH_MN1"
CALL,NULL,"MTG_SENA_PH_CBT"
CALL,NULL,"MTG_SENA_PH_MN2"
CALL,NULL,"MTG_SENA_PH_END"
 :
(おしまい)

3.開始フェイズ(301)
[MTG_SENA_PH_BGN]
 :
CALL,NULL,"MTG_SENA_PH_BGN_PHA" //302.1
CALL,NULL,"MTG_SENA_PH_BGN_UNT" //302.2
CALL,NULL,"MTG_SENA_PH_BGN_UPK" //303
CALL,NULL,"MTG_SENA_PH_BGN_DRW" //304
 :
(おしまい)

4.アップキープステップ
[MTG_SENA_PH_BGN_UPK] (303)
:
EXEC,NULL,"MTG_APP_EFCT_CHK","(’At beginning upkeep’)" //効果的なパラメタ渡しの方法は考えてないw
CALL,NULL,"MTG_SENA_PH_BGN_UPK_PUSH_STK" //スタックに積むシナリオ
CALL,NULL,"MTG_SENA_PRIORITY" // 優先権シナリオ
(おしまい)

5.優先権シナリオ
[MTG_SENA_PRIORITY]
EXIT,"MTG_GET_PRIORITY_END",NULL //優先権の入れ子直後ならそのまま終了。
 :
 //スタック解決へ。
 :
EXIT,"MTG_GET_PRIORITY_END","MTG_SENA_PRIORITY"
  // スタックが空か両方のプレイヤーがパスするか
  // 状況起因効果と誘発型効果のスタック待ちがなくなるまで自己ループさせる。
(おしまい)

6.時間停止能力(509.1a〜c)
[MTG_CARD_Time_Stop_Effect0]
EXEC,NULL,"MTG_APP_RMV_OBJ" //スタックからオブジェクトを、戦闘から生物を取り除く
EXEC,NULL,"MTG_APP_EFCT_CHK","(’State-Based Effects’)" //※4.に同じ。
EXEC,NULL,"MTG_APP_PH_PH_END" //フェイズの終了処理。まだなんも考えてない。
CALL,NULL,"MTG_SENA_PH_END_CUP" //クリンナップステップを行なう。
EXEC,NULL,"MTG_APP_EXIT_TO’MTG_SENA_PH_BGN’"
//残りのフェイズステップをすっとばして、フェイズ一式を終了させる。"
(おしまい)

------------------------------
TimeStopが解決に入る直前のシナリオスタックは↓のような感じ。

[SP]=5 //スタックポインタ
[SENA_STK] //シナリオスタック
LV, SENA_NM
-----------------------------------
5, ’MTG_SENA_PRIOT’
4, ’MTG_SENA_PH_BGN_UPK’
3, ’MTG_SENA_PH_BGN’
2, ’MTG_SENA_APP_PHASE’
1, ’MTG_SENA_APP_PHASE_LOOP’
------------------------------------

で、5解決に入ってクリンナップしてるとき。

[SP]=7 //スタックポインタ
[SENA_STK] //シナリオスタック
LV, SENA_NM
-----------------------------------
7, ’MTG_SENA_PH_END_CUP’
6, ’MTG_CARD_Time_Stop_Effect0’
5, ’MTG_SENA_PRIOT’
 :
(略)
------------------------------------

「残りのフェイズステップをすっとばして、フェイズ一式を終了させる」とき。

[SP]=6 //スタックポインタ
[SENA_STK] //シナリオスタック
LV, SENA_NM
-----------------------------------
6, ’MTG_CARD_Time_Stop_Effect0’
5, ’MTG_SENA_PRIOT’
4, ’MTG_SENA_PH_BGN_UPK’
3, ’MTG_SENA_PH_BGN’
2, ’MTG_SENA_APP_PHASE’
1, ’MTG_SENA_APP_PHASE_LOOP’
------------------------------------
DBのストアドでなにをしなきゃいけないかというと、
スタックを遡りながら
1.パラメタで示されたシナリオまでのシナリオスタックを全てDELETEする。
2.親シナリオで発生した一時的なスタックやヒープがあれば削除する。

T-SQLのストアドだと多分こんな感じ。
昔一回使ったきりだからよく覚えてないけど・・。
CREATE PROCEDURE MTG_APP_EXIT_TO (@argSNM VARCHAR(32))
AS
BEGIN
  -- 引数のチェック
  DECLARE @plv INT;
  SET @plv = SELECT LV FROM SENA_STK WHERE SNM = @argSNM;
  IF @plv IS NULL
  BEGIN
    RAISERROR(どいつが親じゃゴルア!)
  END;
  -- シナリオスタックのお掃除。
  -- スタックだけなら一挙に削ってしまえるがわざわざループにしてるのは
  -- シナリオごとに「スコープやオーナがそのシナリオである」
  -- スタックとヒープの掃除を正しくしてまわらなくちゃいけないと思ってるから。
  -- たとえばFinal Fortuneは遅延効果を特定のプレイヤーのターン終了時に
  -- 発生させるため、ターン終了時以外のトリガーに加え、"最終(Final)ターン"が
  -- 始まったことを記録するための情報をヒープに確保する。
  -- (DBでそんなところまで実装すべきじゃないが手抜きのためなら何でもする)
  -- シナリオスタックの関係で言えばストーム持ちのカードがデッキに入ってる場合
  --「フェイズ一式300.1」のシナリオを上書きした「ストーム入りフェイズ一式」の
  -- シナリオを作成する。しかしこれは永続的な上書きなので書き換えられちゃ困る。
  -- (ぱっと聞いただけだと意味不明だと思うけど)
  DECLARE @lv INT;
  DECLARE @snm VARCHAR(32);
  DECLARE c CURSOR LOCAL FORWARD_ONLY STATIC FOR
    SELECT LV,SENA_NM
    FROM SENA_STK
    WHERE LV >= @plv
    ORDER BY LV DESC;
  OPEN c;
  FETCH NEXT FROM c INTO @lv, @snm;
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- シナリオの変数スタックを削除。
    EXEC MTG_DELETE_SENA_HEAP, @snm;
    -- シナリオスタックを削除。
    EXEC MTG_DELETE_SENA_STAK, @snm;
    FETCH NEXT FROM c INTO @lv, @snm;
  END;
  CLOSE c;
  DEALLOCATE c;
END;

考えがまとまるまでもう少しかな・・・。
#多少修正
完全に普通のマジックプレイヤーを置き去りにしてる自分に気づく。

6月10日の事例4とか5とか見てイヤーな感じがした人は多分正解。
当初はループ構造とか条件分岐を「シナリオ仕様」に盛り込もうと思ってたけど止めちゃってます。

条件分岐はあってもELSEがないとか
ループ構造はサブルーチン呼び出しの出口コードをスタックでいじって制御するとか。
でもこうすることでインタプリタ上でGOTO(プログラムカウンタ)制御をしなくてすむのでそれはそれ。
シナリオの文法制御をどうするか、について「スタックマシン」にモデルを求めてますのでこうなってます。

スタックマシンといっても知らない人がほとんどだと思いますが
(私も学生のころに少し勉強したくらいで、概念くらいしか覚えてません)
P-CODEとかFORTHとか最近だとPostScriptとかのあれです・・・って普通しらねぇw

■手抜きの方針。
1.通常処理はDBのストアド呼び出し or シナリオ呼び出し。
 パラメタとして呼び出すための条件を指定できる。
2.シナリオは途中で呼び出し側に戻ることができる。
 パラメタとして呼び出し側に戻るための条件を指定できる。
 Cでいうところのreturn。戻り値として指定できるのは
 「なし」か「次に実行するシナリオの名前」のみ。
4.条件分岐は2.で実現できる。ELSEはサポートしない。
5.繰り返し制御は3.で実現できるのでサポートしない。
6.演算はDBエンジンに任せてもできるのでサポートしない。
7.多少のI/O制御は必要かもしれない。手抜きできそうならそのためのステートメントのみ追加。

うひゃw

ステートメントの名前とかどんなのがいいか考えてないです。
EXEC IF条件,[シナリオ名],パラメタ文字列 //シナリオスタックは変化しない。
CALL IF条件,[ストアド名],パラメタ文字列 //シナリオスタックに積むものはまだ見えてない。
EXIT IF条件,{ストアド名} //CALLで作られたスタックは除去。ストアド名があればそれを制御スタックに積む。
 :
osqlコンソールに見えてきた・・・orz。いっそPERFORMとか使って嫌悪感をアップさせr(ry

ところでこれを考えてるときにAccessマクロを思い出してしまいますた。
(業務でつかったことは3つくらいしかありませんが苦痛の限りのシロモノですw)
あれにラベルがなくても繰り返しとか実現できるかも・・・とか思ってしまった。
んでもって、CDCの人が「Accessでつくれば?」とかいってたのを一瞬マジに検討してしまった。
Accessマクロで書かれたシナリオが数千単位で登録されてるクライアントも面白いかも・・・とか。
(ちなみにAPとかMWSレベルのシナリオならAccessで作れます)

自分メモ:68000のbra命令も思い出してみた。
---------
参考にならなさそうな面白いなリンクを見つけたので貼り付け。
http://mag.autumn.org/Content.modf?id=20050517171824
http://homepage3.nifty.com/murasakigawa/junk/rpn2001c.htm
http://www-lab.ee.uec.ac.jp/text/forth/man/man.html
用語として「タイムスタンプ」を使うのがややこしくなってきたので
「バージョン」と表現してみる。

■ダイナミックに書き換えられるシナリオを処理する方法。

シナリオを実行しているとき、ネストして呼び出された
シナリオが呼び出し側のシナリオを書き換えることがある。
たとえばRelentless Assaultは第二メインフェイズの終了後に実行が
期待されているシナリオを書き換えてしまう。
(エンドフェイズ→戦闘フェイズ。加えて言えば、戦闘フェイズ開始
と同時に自分が書き換えたシナリオを元に戻す。)

これって誰に管理させるの?
・・・と考えてるうちに再び頭がこんがらかってきた。

------------
シナリオを実行するにあたってエンジンはそのシナリオ全文をロードする。

シナリオを一行ずつ実行する。
------------
で、気づいたのはその一行がシナリオの途中で書き換わるしくみが設計できてないw

Untap→Upkeep→Draw→Main1→Combat→Main2→EndOfTurn...
というメインシナリオをロードしたのち後、Relentless Assaultを行なうと
Main1なり2の終了後に実行されるシナリオが書き換わる。

最初にシナリオを静的に読み込むのでは刻々と変化するシナリオに対応できない。
シナリオの上書きみたいなことを先日書いてた気もするがそれだと追加されたり
スキップされたりするシナリオが奇妙なことになってしまう。

もう一つ何かの工夫がいる。

「シナリオ割り込み」の事例をいくつか作ってみる。
------------------------------------------------
事例1 

こいずみのこうげき。
 くまは ねたまき に 2点のダメージをあたえた!
 ねたまき のライフは 3点になった。
こいずみ は連続突撃Aをとなえた!
こいずみ は連続突撃Bをとなえた!

・・・・どっちから解決するんだっけ??

------------------------------------------------
事例2

あぷ はくりんなっぷをせんげんした!
あぷ はてふだを9まいもっている。
 あぷ はるーとわらC をすてた。
  るーとわらC は狂気した!
 あぷ はるーとわらDをすてた。
  るーとわらD は狂気した!
条件がそろっているので(RC:314.3)が発動した!

複数のスタック待ちが発生している場合どっちからスタックにつむの??
#いくつか修正
------------------------------------------------
事例3

まめーは一望の鏡をとりだした。
まめーは催眠の宝珠をとりだした。

まめーのあんたっぷすてっぷに島が4つあんたっぷした。
まめーのあっぷきーぷ。

・・・鏡と宝珠はどちらを先にスタックに積むのが正解?

-----------------------------------------------------
事例4

アップキープシナリオ開始。
↓「アップキープの開始時」チェック(誘発能力ををスタック待ちにぶちこむ)★
↓「スタック積み上げ」シナリオ開始。
↓ ↓スタック待ちがなければ(おしまい)
↓ ↓ユーザ別チェックリスト作成。
↓ ↓「スタックに積む順序を各ユーザに要求するシナリオ」開始(@「ユーザ別チェックリスト」)
↓ ↓ ↓ユーザリストから一人を得る。
↓ ↓ ↓スタック待ちから能力・効果リストを作成しそのユーザに並べ替えを要求する。
↓ ↓ ↓返答待ちをシナリオエンジンに要求。
↓ ↓ ↓レスポンスを得て内容チェック。
↓ ↓ ↓問題なければそのユーザにチェックをつける。
↓ ↓ ↓ユーザ全員にチェックがついていなければ次に実行するシナリオとして
↓ ↓ ↓  「スタックに積む順序を各ユーザに要求するシナリオ」を要求。
↓ ↓(おしまい)
↓ ↓#スタックに積む順序を各ユーザに要求するシナリオ開始(@「ユーザ別チェックリスト」)
↓ ↓# ↓(途中略)
↓ ↓#(おしまい)
↓ ↓ユーザ別チェックリスト廃却。
↓(おしまい)
↓優先権シナリオ(内容略)
(おしまい)
-------------------------------------------------
事例5

優先権シナリオ
↓ユーザ別チェックリスト作成。(hrurr,netanosuke,rebecca,namotaro)
↓「ユーザに優先権を告知するシナリオ(パスしますか?)」開始(@「ユーザ別チェックリスト」)
↓ ↓ユーザリストから一人を得る。(hrurr)
↓ ↓そのユーザの可能な操作を告知するシナリオを開始。
↓ ↓ ↓(途中略)
↓ ↓(おしまい)
↓ ↓返答待ちをシナリオエンジンに要求。
↓ ↓返答を得てユーザにチェックをつけ「パス」なら(おしまい)。
↓ ↓返答が何かのシナリオを起動するならそのシナリオを開始。
↓ ↓ユーザ全員にチェックがついていなければ次に実行するシナリオとして
↓ ↓  「ユーザに優先権を告知する」シナリオを要求。
↓(おしまい)
↓#「ユーザに優先権を告知する」シナリオ(パスしますか?)開始(@「ユーザ別チェックリスト」)
↓# ↓(途中略)
↓#(おしまい)
↓ユーザ別チェックリスト廃却。
↓「スタック積み上げシナリオ」開始
↓ ↓(途中略)
↓(おしまい)
↓「スタック解決」シナリオ開始。
↓ ↓スタックが空なら(おしまい)
↓ ↓スタックの最上位に「ショックでくまに2点ダメージ」がつまれていてそれには
↓ ↓ 「ダメージをあたえる」シナリオをトリガしろとかかれていた。(この辺曖昧だ)
↓ ↓「ダメージをあたえる」シナリオ開始。
↓ ↓ ↓「ダメージを与えない」効果があれば(おしまい)。
↓ ↓ ↓「ダメージ軽減」シナリオ開始。
↓ ↓ ↓ ↓(途中略)
↓ ↓ ↓(おしまい)
↓ ↓ ↓対象オブジェクトのダメージプロパティにのこりのダメージを加算。
↓ ↓ ↓「致死ダメージ」シナリオ開始。
↓ ↓ ↓ ↓(途中略)
↓ ↓ ↓「ダメージを与えた」トリガーのチェック。
↓ ↓ ↓(おしまい)
↓ ↓(おしまい)
↓(おしまい)
(おしまい)
--------------------------------------------------

とにかくこんなことを考慮しながらあれこれぐちゃぐちゃと。

[自分なりの答え]
1.B→A。RC.300.7。
2.自分が選ぶ。RC.410.3同時に複数発生した能力は順序を選べる。RC.418.5eも参照
3.自分が選ぶ。RC:303 + RC410.3

誘発型とか置き換え効果のシミュレーションが不十分なのでもう少し悩むっぽい。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
※アクセス元で「人間凶器」が引っかかってた。どんな人だろうw
・サクラエディタ
 http://members.at.infoseek.co.jp/sakura_editor/
 
 MKとかVXとかありますが、現状でこれが一番使いやすく高速動作で高機能。
 モノ書きにデータ加工に縦横無尽。
 今の仕事やり始めて初めて矩形選択のありがたさが身にしみてたり。
 惜しむらくはアイコンがカッコ悪いとか、検索ショートカットがCtrl+Rなところとか、
 機能多すぎてメニュー項目が多すぎるとか。

・Sol (Smart Out Line)
 http://homepage1.nifty.com/knowledge-osmo/main.htm

 Actaライクなアウトラインプロセッサ。
 「Actaライク」これだけで使う理由になりますです。

■ゴッコ遊び。
別に急ぐものでもないのでゆっくりと考え中。

ルールブックって事細かに読まなきゃ駄目だね。
で、200と400〜409あたりを読んだ。
でも領域で管理べき事柄とシナリオで管理する事柄がはっきり
区切れずシミュレーションの繰り返しで頭を整理中。

・シミュレーションサンプルとして面白そうなカード。
 Skyshroud Elf : マナ能力のサンプル。
 Saplloring Burst : いろんな能力の塊。
 Necrogia : 「ターン終了時しか唱えられない」の処理の仕方。
 Urza’s Bauble : 遅延効果
 Fireball : うざいことこの上ないカード。
 COP:Red : 戦闘ダメージの処理の仕方
 親和+とりにすへあ+わーくしょっぷ

血を吐きつつあたまぐるぐる。

お気に入り日記の更新

最新のコメント

この日記について

日記内を検索