TACS for Flash 講座


ここではシナリオソースの基本的な書き方を説明します。
では、サンプルゲーム殺人事件のシナリオソースを例にとって、説明致しましょう。

まずは、シナリオソースをみてみましょう。
下記リンクのシナリオソースをテキストエディタで開いて下さい。
http://atelier-c.fiw-web.net/tacs27/samplegame/tacs27sample_avg1/tacs.avg

■1行目(最初の行)と1891行目(最後の行)
&tacsscenariodata=
&
旧バージョンでは、TACSはこの記述の間に記載されている内容を、シナリオソースとして認識致していました。
現行版ではこの表記は必須ではなくなりました。
が…一応のこしておいたほうが、役立つ日可能性があるかもしれません。
(消してもOKですが、作者的には残しておいて頂くのが推奨です)

■2〜5行目
//----------------------------------------
#初期設定
LODING_SIGNAL 608,32
PIC 5,data/cg/bg/title01.jpg;			//背景設置
// はコメント行です。ゲーム中には無視される命令なので、作成中のシナリオソースの整理などにご利用下さい。

LODING_SIGNAL 608,32 で、画像ファイルの読み込み中を示す、ローディング中アイコンを出す座標を指定しています。この指定により画面右上に表示されます。この命令をおこなってない場合は、画面左下に表示されます。画面外を指定した場合は結果的に表示されなくなりますが…表示させないメリットはない筈?

PIC 5,data/cg/bg/title01.jpg で、レイヤー5番(手前から数えて5番目)に画像ファイルを読み込み・表示させます。このように記述した場合(ファイル名の後に,0,0等の数値をつけない)は、読み込み完了まで待ってから、次の処理を開始します。


■7〜16行目
//各種ウインドウの位置設定
FRAME_CHANGE 7,8
FRAME_CHANGE 6,8
FRAME_CHANGE 5,8
FRAME_CHANGE 4,8
FRAME_CHANGE 3,8
FRAME_CHANGE 2,8
FRAME_CHANGE 1,8
FRAME_CHANGE 0,8
FRAME_CHANGE -1,8
このサンプルゲームでは、8番レイヤーにメッセージログウインドウを表示させようという予定です。
ただ8番レイヤーだと、画面の奥にある為。FRAME_CHANGE 命令を使って、-1〜7番のレイヤーと次々と位置を入れ替え、「8番以外のレイヤーの並び順を変えないまま、8番レイヤーを画面の一番手前に移動」させています。


■18〜26行目
FRAME_POS 1,0,340;
FRAME_ACTION 1,-1;	//メッセージスピード( -1:瞬間表示 )

FRAME_CHANGE 2,1;	//フェイス用ウインドウをメッセージウインドウより手前にする
FRAME_POS 2,0,180

FRAME_POS 0,20,20

BACKLOG_START
これからレイヤーに配置する予定にあわせて、あらかじめレイヤーの座標位置や重ね合わせ順番をいじっています。
起動直後のまだなにも表示させていないレイヤー達は、いわば透明の画像が設置されているようなものです。
まあ、ようするに。目に見えないうちに都合の良い、座標・大きさ・重ね合わせ順にしているわけですね。

1番レイヤーには、ゲーム中の文章を表示させるメッセージウインドウを配置予定なので、
FRAME_POS命令で、画面下部に移動。
FRAME_ACTION命令で、メッセージスピードを指定しています。(-1を入れると瞬間表示です)

2番レイヤーには、登場人物のセリフを表示する時に、その登場人物の顔の画像を表示するレイヤーにしたいと考えています。
その為。メッセージウインドウより下に指定しておくと重なって隠れてしまう事を危惧して、FRAME_CHANGE命令を使用して、1番レイヤーより手前にさせました。
更にFRAME_POS命令でメッセージウインドウの少し上の座標に表示されるよう指定しました。
※表示させる時になってから、問題のない座標を指定してもいいのですが、念の為あらかじめ指定しました。


0番レイヤーには、「見る」「調べる」「移動」などの選択肢を表示させる予定です。
画面の左上付近に表示させたいので、FRAME_POS 0,20,20と記述し、画面左隅よりちょっとだけ中央にむかって動かした位置に指定しました。

BACKLOG_START 命令で、メッセージログの取得を開始します。
まだメッセージウインドウも表示さえさせてないのですが、指定自体はいつでもできるので、今の時点で指定しておきました。
これでゲーム中に表示された文章は、全てメッセージログとして記録されます。


■28〜31行目
SYSTEM_NEXT    -1, 3;	//ポーズボタン設置
SYSTEM_SELECT   0, 7;	//選択肢ウインドウ設置
SYSTEM_MESSAGE  1, 2;	//メッセージウインドウ設置
SYSTEM_LOG      8, 1;	//メッセージログウインドウ設置
システムウインドウを一挙に表示しました。この命令が実行された瞬間、全てが画面に有効化されます。
…当然ですが「ポーズボタン」や「選択肢ウインドウ」を設置する前に、ポーズボタンを要求する PAUSE 命令を記述したり。選択肢を記述したりしたら、まだ有効化されていない(画面に表示されていない)のでそのまま何も出来ない・動かない状態になるので注意して下さい。

「メッセージウインドウ」や「メッセージログウインドウ」は、この瞬間に画面に表示されます。
特に「メッセージウインドウ」は、表示する前に座標を指定しておかないと変な位置に表示されてしまう可能性もありますので、このサンプルゲームのように「座標指定→表示」の順番でシナリオを記述するようにしたほうが見栄えが良いとおもわれます。


■40〜57行目
*最初から捜査開始
	"主人公の男性の名前は、デフォルトでは【拓也】となります。\nこのままで開始するか、名前変更を行うか選択して下さい。"
	-デフォルトの名前で開始する
		!name=拓也
		#>オープニング
	-主人公の名前を変更する
		#>名前選択

*各章の最初から捜査開始
	FLAG_LOAD dounatudata
	?jyoukyou=0;"セーブデータがありません!\n(ゲーム本編の章の区切り部分でセーブをした場合に、こちらは有効となります)"
	?jyoukyou>=1;-11時8分 捜査開始直後
	?jyoukyou>=1;	#>捜査開始2
	?jyoukyou>=2;-11時55分 キッチンで一息
	?jyoukyou>=2;	#>捜査開始3
	?jyoukyou>=3;-13時6分 所長室の調査
	?jyoukyou>=3;	#>捜査開始4
	?jyoukyou>=1;-<<キャンセル>>
選択肢と、その選択肢を選んだ結果の記述方法の一例です。私なりにわかりやすくしようとタブを入れておりますが、タブ自体は入れても入れなくても動作致します。
これを眺めながら、実際のサンプルゲームで選択肢を選べば一目瞭然だとおもわれます。

フラグの使い方の一例も記述されています。
注目点は、!name=拓也?jyoukyou=0の表記以降の記述です。
フラグの宣言及び格納は、! の記述で行います。この例では、name というフラグに「拓也」というデータを入れたわけですね。この先は、主人公の名前を使用したい時は(文章に表示する等)、nameというフラグを使えばよいわけです。

?jyoukyou=0 等の、?から始まる記述で、フラグのデータをチェックしています。この際、一度も設定してないフラグの中身は 0 として扱います。
つまりこの一連の処理部分は、jyoukyou というフラグにゲームの進行度にあわせて数値を+1させていくから、「フラグjyoukyouを調べて、ゲームの進行度にあわせて選択肢を表示する」という動作をしているわけです。

他には FLAG_LOAD dounatudata の記述の、フラグのロードもおこなわれていますが、こちらの説明はこのすぐ下で説明します。


■49行目と375行目
FLAG_LOAD dounatudata
FLAG_SAVE dounatudata
TACSはゲームの状況を、いくつかの方法でセーブ&ロードができます。
その方法の一例です。
FLAG_SAVEFLAG_LOAD で、ゲーム内で出現したすべてのフラグをセーブ&ロードできます。
FLAG_SAVE dounatudata で、 dounatudata というファイル名でデータを自動セーブします。
FLAG_LOAD dounatudata で、 dounatudata というファイル名でデータを自動ロードします。その際今まで使用されていたフラグの内容は全て消去され、セーブした時のフラグの値に全ていれかわります。なお、もしまだセーブしてない場合は、この命令は無視されます。
その為、特にFLAG_LOAD命令の直後には、フラグのデータによってどのシーンに移動する等の、フラグ管理をきちんとする必要があると思われます。


■60行目と146行目
quick_load tyudan1
quick_save tyudan1
TACSのもう一つのセーブ&ロード方法、quick_savequick_loadです。
このセーブ&ロードの機能は単純明快で、セーブした時とまったく同じ状況にロードします。
具体的にはセーブをすると、「指定されていたシステムウインドウ」「表示されていた画像」「再生されていた音楽」「全てのフラグデータ」「全てのメッセージログデータ」「シナリオファイル内の現在実行されている命令行」を全て記録し…
ロードをした際に、上記の全てのデータに即時に戻します。

特に注意する点は「シナリオファイル内の現在実行されている命令行」です。シナリオファイルを書き足した際に、セーブ命令をした行がずれると、当然ロードした際の開始位置はずれる前の行から命令が開始されるので、動きがおかしくなる可能性があります。

他には(このサンプルゲームでは使用されていませんが)、
MENUBAR_ON 命令を実行すると。左上にマウスカーソルをもっていった際に「どこでもセーブ・ロード」ができるようになります。
このセーブ&ロードの仕様も、quick_save & quick_load と同じですので、「シナリオファイル内の現在実行されている命令行」が変わる際には注意して下さい。