はじめに
Adventure gear(ADV_FederatedTerritories.txt)のGlobalStoryPatternコマンドを利用したテスト用ストーリーの作成。
以下のテキストファイルをSeriesフォルダ内に作成し、それぞれの内容をコピペする。
ファイル名 |
種類 |
説明 |
TS_GSP_test_STORY.txt |
Story gear |
複数のプロットを管理する |
TS_GSP_test_PLOT.txt |
Plot gear |
個々のプロット |
TS_GSP_test_SCENE.txt |
Scene gear |
プロットで用いるDynamic Scene |
準備ができたら新規キャンペーンを開始し、Hogye村を出入りしてプロットがロードされたか確認する(ダイアログにメッセージが出る)。確認できたらHogye村の食堂NPCに話しかけてみよう。
Story Gear
Story
Name <Story : Test>
% ファイル冒頭の"Story"はこのファイルがStoryファイルであることを示す。
% ストーリーのエレメントを記述する。
% エレメントで指定されたGearのIDはN1~の変数に格納される。
% Element1(N1) = このストーリーがロードされたマップ(GlobalStoryPatternコマンドで自動的に指定される)。
% Element2(N2) = プロットをロードするマップの条件。ここではランダムではなくStatを用いてHogye村を指定する。
Element2 <Scene>
Stat 2 2
% ストーリー本体のスクリプトを記述する。
% 以下はこのストーリーで使う変数。
% V1(S1) = 初期化カウンタ
% V2(S2) = ストーリー終了フラグ
% Start : 別のマップに入った直後に処理を実行するトリガー。
% 初期化およびプロットをロードする処理。
Start <if= V1 0 else GoCheckEnd StoryLine .testplot else GoError Print 1 V= 1 1>
% テスト用プロットのファイル名をラベル.testplotで指定。
% ラベルには好きな名前を付けてよい。
.testplot <TS_GSP_test_PLOT.txt>
% ロードに失敗したときの処理。
% GoErrorなど特に説明がないトリガーもラベルで、elseやGotoの処理の続きを記述する。
GoError <EndStory Print 2>
% ストーリーの終了をチェックする処理。
GoCheckEnd <if= V2 1 EndStory Print 3>
% メッセージとして表示するテキスト。
% Printコマンドは画面下部のダイアログにメッセージを表示する。
Msg1 <テスト用Plotファイルのロードに成功しました。>
Msg2 <テスト用Plotファイルのロードに失敗しました。テスト用Storyを終了します。>
Msg3 <テスト用Storyを終了します。>
Plot Gear
Plot 0
Name <Plot : Test>
% ファイル冒頭の"Plot 0"はこのファイルがPlotファイルであることを示す。
% プロットのエレメントを記述する。
% エレメントで指定されたGearのIDはE1~の変数に格納される。
% Element1(E1) = 親のStoryファイルのElement 2を参照する(Hogye村)。
% Element2(E2) = プロットをロードするNPCの条件を指定する(職業がCook、E1にいる)。
% Element3(E3) = インベントリのGearを参照する(フラグ発生装置)。
Element1 <Grab 2>
Element2 <Character Cook !Near 1>
Element3 <Prefab>
% プロット本体のスクリプトを記述する。
% 以下はこのプロットで使う変数。
% V1(P1) = 初期化カウンタ
% V2(P2) = 戦闘インジケータ(1 : 戦闘開始 2 : 敗北 3 : 勝利)
% Cleanup : Storyが終了したときに1度だけ実行されるトリガー。
% プロットを消去する処理のラベルへジャンプ。
Cleanup <Goto GoCleanDelete>
% Start : 別のマップに入った直後に処理を実行するトリガー。
% 初期化およびプロットの消去をチェックする処理。
Start <ifPersona E2 else GoCleanDelete if= V1 0 Print 1 V= 1 1>
% プロットを消去する処理。
GoCleanDelete <ifItemOK E3 else GoDelete DeletekeyItem E3 Goto GoDelete>
GoDelete <S= 2 1 AdvancePlot 0 Print 2>
% 戦闘の勝敗について
%
% 勝敗の判定には戦闘マップとなるDynamic Sceneのローカル変数を用いることが多い。
% したがって、判定を行う時点ではそのDynamic Sceneにいることが確実でなければならない。
% Startのように町に戻った後に実行されるトリガーだと、町マップのローカル変数を参照することになるので不適切。
%
% このプロットではNU1トリガーを使い、さらに以下の条件をつけている。
%
% V2 = 1 : 戦闘開始後~勝敗のフラグが立つ前
% T1 = 0 : PC(@)チームが全滅もしくは撤退(T1 = PCチームのメンバー数)
%
% トリガーは子Plot → 親Story → Dynamic Sceneの順に実行されるので、
% PCがDynamic Sceneを去ろうとしたときの処理は以下のようになる。
%
% 1. PCがDynamic Sceneを去る
% 2. PlotのNU1トリガー(勝敗判定の処理)が実行される
% 3. Dynamic SceneのNU1トリガー(脱出する処理)が実行される
% 4. PCがHogye村に戻る
%
% デバッグ用のメッセージを作って動作を確認してみるといい。
% NU[n] : チーム[n]のメンバーが変更されたときに処理を実行するトリガー。チーム1は既定でPCチーム。
% 勝敗の判定を行う処理。
NU1 <if= V2 1 if= T1 0 if= L2 1 else GoLoss V= 2 3>
GoLoss <V= 2 2>
% メッセージとして表示するテキスト。
Msg1 <テスト用Plotを開始します。>
Msg2 <テスト用Plotを終了します。>
sub
% サブコンポーネントには以下のGearを記述することができる。
% Persona
% Plot(サブプロット)
% NPCの会話スクリプトを記述する。
% このプロットではNPC E2に対応してPersona 2となる。
% 本来は固有のID番号を付けるが、プロット内ではエレメントのインデックス番号を使用する。
Persona 2
% Greeting : 対象のNPCに話したかけたときに処理を実行するトリガー。
% プロット変数P2(戦闘インジケータ)の値に応じて敗北・勝利・戦闘前の処理に分岐する。
Greeting <NewChat if= P2 2 else GoCheckWin Say 1 Goto GoCleanDelete>
GoCheckWin <if= P2 3 else GocheckMission Say 2 Goto GoCleanDelete>
GoCheckMission <if= P2 0 else GoCleanDelete Say 3 AddChat 1 AddChat 2>
% プロットを消去する処理。
GoCleanDelete <ifItemOK E3 else GoDelete DeletekeyItem E3 Goto GoDelete>
GoDelete <S= 2 1 AdvancePlot 0 Print 101>
% Result[n] : 選択肢を選んだ後の処理を実行するトリガー。
% テスト用Dynamic Sceneへ行く選択肢を選んだ後の処理。
% ここではあらかじめ用意したDynamic Scene用ファイルを使ってマップを生成する。
Result1 <EndChat Say 4 SavePos LoadD .testscene DynaItemTeam E3 2 P= 2 1>
% テスト用Dynamic Sceneのファイル名をラベルで指定。
.testscene <TS_GSP_test_SCENE.txt>
% テスト用Dynamic Sceneへ行かない選択肢を選んだ後の処理。
Result2 <EndChat Say 5>
% メッセージとして表示するテキスト。
% Sayコマンドは会話画面にメッセージを表示する。
Msg1 <%JSは敗北した%JG…。>
Msg2 <%JSは*勝利*した%JG!>
Msg3 <%JFはテスト用Plotを担当している%JG。テスト用Dynamic Sceneに行く?>
Msg4 <いってらっしゃい。>
Msg5 <それじゃ、また後で来るといい%JG。>
Msg101 <テスト用Plotを終了します。>
% 選択肢として表示するテキスト。
Prompt1 <もちろん。>
Prompt2 <やめとく。>
end
inv
% インベントリにはこのプロットが生成するNPCやアイテムなどを記述する。
% Prefabを指定したエレメントはインベントリのGearを上から順に検索する。
% このプロットではElement3にPrefabが指定されているので、インベントリ中の最初のGearがE3になる。
STC MONOLITH
Name <フラグ発生装置>
% Use : 対象のGearを使用したときに処理を実行するトリガー。
% 2択を表示する警告画面を出し、勝利フラグを立てる処理。
Use <if= V1 0 else GoDid ifYesNo 1 2 3 L= 2 1 Print 4 V= 1 1>
GoDid <Print 5>
Msg1 <フラグ発生装置だ。勝利フラグを立てますか?>
Msg2 <勝利フラグを立てる。>
Msg3 <やめとく。>
Msg4 <勝利フラグを立てた。>
Msg5 <もうこの装置に用はない。>
end
Scene Gear
Scene 0 0
% ファイル冒頭の"Scene"はこのファイルがSceneファイルであることを示す。
% 最初の数字はScene ID(Dynamic Sceneの場合は0)、次の数字はスケール。
% マップ本体のスクリプトを記述する。
% 以下はこのマップで使う変数。
% V1(L1) = 初期化カウンタ
% V2(L2) = 勝敗フラグ(プロットの方で用いる)
% マップ全体の地形や特殊な条件。
WildMap
Special <ShowAll>
% Start : 別のマップに入った直後に処理を実行するトリガー。
% 初期化の処理。
Start <if= V1 0 Print 1 V= 1 1>
% NU[n] : チーム[n]のメンバーが変更されたときに処理を実行するトリガー。
% Dynamic Sceneから脱出する処理。
NU1 <if= T1 0 Return Print 2>
% メッセージとして表示するテキスト。
Msg1 <テスト用Sceneに入った。>
Msg2 <テスト用Sceneを出た。>
sub
% サブコンポーネントには以下のGearを記述することができる。
% Team
% MapFeature
% Persona
% Teamの記述。敵対/友好関係やマップの開始地点(ホーム)を設定する。
Team 1
SetAlly 2
Team 2
SetAlly 1
Home <廃墟>
% MapFeatureの記述。建物などの個別の地形。
Room 12 12
BorderType 29
FloorType 14
Name <廃墟>
end
inv
% インベントリにはこのマップが生成するNPCやアイテムなどを記述する。
Prop 50
Name <ガラクタ>
SetTeam 2
% Use : 対象のGearを使用したときに処理を実行するトリガー。
% ダイアログにメッセージを表示する処理。
Use <Print 1>
Msg1 <何の役にも立たないガラクタがある。>
end
最終更新:2013年03月30日 02:13