ごっこ遊び(シナリオの実装例)-1
2005年6月15日 SCENA仕様メモあちこち省略してるけど、一応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’"
//残りのフェイズステップをすっとばして、フェイズ一式を終了させる。"
(おしまい)
------------------------------
ついでにシナリオスタックの振る舞いも。
■事例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’"
//残りのフェイズステップをすっとばして、フェイズ一式を終了させる。"
(おしまい)
------------------------------
コメント