■概要 |
ブロックには、大きく分けて「ブロック」と「サブルーチン」の2種類があります。
これらは、どちらもラベルの働きをしますが、使用する目的が異なるので、コマンドもCMD_BLOCKと、CMD_FUNCに分かれています。
分岐コマンド(CMD_JUMP)からは、 サブルーチンへ飛ぶことは出来ませんし、サブルーチン呼び出しコマンド(CMD_CALL)から、ブロックを呼び出すこともできません。
それでも、これらに付けられるIDは、明示的かそうでないかに関わらず、ひとつのシナリオ内で一意に識別できなければなりません。
つまり、ひとつのシナリオ内に同じIDを持ったブロックを作成してはいけないと言うことです。 |
|
blockID:999999は、ロード復帰用エントリーとして予約されているため他の用途には使用できません。 |
|
|
■ブロック |
ブロックとは、ブロックコマンドによって区切られる演出の単位で、通常はセーブロードの単位です。
分岐関連のコマンドはすべて、このブロックに付けられたブロックIDを利用して対象を識別します。明示的に番号が指定されていないブロックは、その直前にある、テンポラリ属性を持たないブロック+1の値を持っています。 |
ブロックは次の属性を持つことが出来ます。 |
|
明示的ブロックID |
TP属性 |
セーブコメント |
ブロック |
指定がない場合は直前のブロック番号+1 |
指定可 |
指定可 |
ブロック(TP属性付き) |
指定がない場合は直前のブロック番号+1 |
-- |
指定不可 |
サブルーチン |
必須 |
指定不可 |
指定不可 |
|
何もブロックが指定されていない領域のブロックIDは0です。 |
明示的にブロックIDが指定されているブロックのIDは、指定されたものになります。 |
明示的にブロックIDが指定されていないブロックのIDは、その直前にあるブロックのID+1です。 |
TP属性(テンポラリ属性)を持ったブロックは、ジャンプの飛び先になるときはそのブロックIDが参照されますが、システムが保持しているブロックIDには影響を与えないため、セーブロードのエントリーにはなりません。つまり、単なるラベルと考えて構いません。
|
|
■具体例 |
|
……ここのblockIDは、1000です。 |
|
|
|
……ここのblockIDは、1001です。 |
|
……ここのblockIDは、1002です。 |
|
|
番号無しブロックのIDは、その時点のblockID+1となります。 |
|
|
……ここのblockIDは、1002です。
従って、ここでセーブされると、ブロックEから開始されます。 |
|
|
TP属性はブロックIDを設定しません。 |
|
|
……ここのblockIDは、1003ですが、下記注釈を参照して下さい。 |
|
|
|
|
|
TP付きブロックの直後にあるTPなしブロックに、blockIDが明示的に指定されていない場合、sketchは警告を出します。
上記の例で「ブロックD」のIDは、直感的には2001に見えますが、実際は1003です。構造が複雑な場合、これが大変原因を見つけにくい問題を発生させることがあるため、sketchでは、テンポラリブロックの次に置かれるテンポラリ属性をもたないブロックには、明示的なID指定を強要する設計になっています。
|
|
■サブルーチン |
サブルーチンは、コマンド上ブロックと区別されていますが、システム上は、明示的なブロックID指定が必要な、CMD_RETURNで閉じる特殊なブロックと見なされます。それ以外で、通常のブロックとの明確な違いは次の2点です。
|
|
ブロック番号999999のサブルーチンは、ロード復帰用エントリーとして予約されています。 |
|
ロード復帰用エントリー内で、これから復帰するブロックIDを知るためには、通常レジスタの3番を参照して下さい。このレジスタに、これから復帰するブロックのIDが格納されています。 |
|
|
サブルーチン内にセーブされる可能性のあるブロックを配置することはできません。 |
|
|