- 追加された行はこの色です。
- 削除された行はこの色です。
*シナリオ作成基礎編 [#pd673fda]
#contents
----
**Q401. シナリオの作り方が解りません。 [#z6fd7ae8]
シナリオデータは「.eve」という拡張子が付いていますが、実際にはテキスト形式ですので、「メモ帳」等のテキストエディタで簡単に見ることも編集する事もできます。
シナリオデータは「.eve」という拡張子が付いていますが、実際にはテキスト形式ですので、「メモ帳」等のテキストエディタで簡単に見ることも編集する事もできます。詳しくはヘルプの &color(purple){データの作成 -> データを作成する前に}; をお読みください。
シナリオデータはプログラム言語の様になっており、ロボットなどのデータに比べて非常に複雑ですが、まずは「ヘルプファイル」をよく読んだ上で、&color(red){既存のシナリオデータを見てみたり}; 、それらを改造してみたりして練習して覚えて行くのが良いでしょう。
有志の方が作ってくださった [[チュートリアルシナリオ (46.8 KB)>http://www.src.jpn.org/neko/scenario/TutorialSaga.zip]]もダウンロードして、実際のシナリオを動かしながら、SRCシナリオの作り方を学んでみてください。
有志の方が作ってくださった [[サンプルシナリオのセット>http://www9.ocn.ne.jp/~alicesrc/sample/SRC_Scenariosample.lzh]]は、特におすすめします。
そのうち、&color(blue){チュートリアルシナリオ};(チュートリアル.eve)は、実際のシナリオを動かしながらSRCシナリオの作り方を学ぶのに有用です。
&color(blue){サンプルシナリオ};(SRCサンプル.eve)と&color(blue){ミニキャンペーン};(決戦!宇宙怪獣○話.eve)は、イベントファイルの中にコマンドなどの詳しい解説が埋め込まれています。 テキストエディタでイベントファイルをのぞきながらプレイすると、シナリオ作成の習得に役立つでしょう。
**Q402. マップの作り方が解りません。 [#b2f865c1]
マップはSRCに添付されている「Mapedit.exe」というツールを使って作製します。使い方はグラフィックツールの要領によく似て簡単ですので、まず試してください。
**Q403. 投稿するシナリオに、既存のビットマップを手直しした物を添付したいのですが? [#n3064df5]
&color(red){基本的にビットマップの画像作者にメールなどで了承を取ってからにしてください。 };
**Q404. 原作アニメを忠実に再現したシナリオや、スーパーロボット大戦をコピーしたシナリオを作っても良いのでしょうか? [#q0b7e92d]
アニメ原作のコピーはある程度OKですが、スーパーロボット大戦のコピーシナリオは同シリーズの発売元であるバンプレストに、経営上のダメージを(規模の大小はともかく)与えてしまう恐れがありますので避けてください。
**Q405. 出来たシナリオを発表したいのですが? [#lf0261e8]
完成したシナリオの発表は、個々の作者でシナリオをダウンロードするホームページを作って頂き、[[シナリオコーナー>http://www.src.jpn.org/neko/scenario/scenariosearch/yomi.cgi]]に登録すると言うのが基本的な流れになっています。詳しくは同コーナーにある[[シナリオコーナー投稿規約>http://www.src.jpn.org/neko/scenario/scenariorules.html]]をご参照ください。
完成したシナリオの発表は、個々の作者でシナリオをダウンロードするホームページを作って頂き、[[シナリオコーナー>http://www.src.jpn.org/neko/scenario/scenariosearch/yomi.cgi]]に登録すると言うのが基本的な流れになっています。 詳しくは同コーナーにある[[シナリオコーナー投稿規約>http://www.src.jpn.org/neko/scenario/scenariorules.html]]をご参照ください。
**Q406. 自作のデータやシナリオで遊ぼうと思ったら、エラーが出て遊べません。 [#le493a35]
SRCでのエラーは、大きく分けて次の2つがあります。
&color(blue){・データがSRCの書式や文法に違反している場合};~
&color(blue){・データがSRCの書式や文法に違反している場合};
&color(blue){・SRC本体のバグによるもの};
前者の場合、エラーメッセージ画面にイベントファイル上のエラー発生個所が表示されます。これを参考にしてデータを修正しましょう。なお[[Q507>その他よくある質問#u7a2e774]]には自作データのよくあるミスの事例を上げていますのでこれも参考にしてください。
前者の場合、エラーメッセージ画面にイベントファイル上のエラー発生個所が表示されます。これを参考にしてデータを修正しましょう。 なお[[Q507>その他よくある質問#u7a2e774]]には自作データのよくあるミスの事例を上げていますのでこれも参考にしてください。
またSRCは非常に複雑なプログラムであり、また頻繁に機能追加が行われるため、予期しないバグが潜んでいる場合があります。あきらかにSRC本体のバグと思われる現象が発生した場合は、その&color(red){具体的な状況や現象(最低でもエラーが発生したシナリオ名)}; をできるだけ詳しく[[バグ報告掲示板>http://www.src.jpn.org/neko/lightbbs/bug/src_custom.cgi]]に報告してください。
またSRCは非常に複雑なプログラムであり、また頻繁に機能追加が行われるため、予期しないバグが潜んでいる場合があります。 あきらかにSRC本体のバグと思われる現象が発生した場合は、その&color(red){具体的な状況や現象(最低でもエラーが発生したシナリオ名)}; をできるだけ詳しく[[バグ報告掲示板>http://www.src.jpn.org/neko/lightbbs/bug/src_custom.cgi]]に報告してください。
関連項目:[[その他よくある質問 / よくあるエラーメッセージとその対策>その他よくある質問/よくあるエラーメッセージとその対策#l7c30311]]
**Q407. ユニットを出撃させたいのですが、上手くいきません。【Createコマンドについて】 [#xc79d5a1]
シナリオを作成する上で最も基本となるのがこの「Createコマンド」です。
そのためシナリオ作成初心者の方が最初にこれでよく悩まれる事も多いので、ここではその解説をします。
そのためシナリオ作成初心者の方が最初にこれでよく悩まれる事も多いので、ここではその解説をします。
''&color(red){<重要>:このコマンドに限らず、シナリオを作成する為には「HELPファイル」をよく参照するのが非常に重要です。必ずHELPファイルのこの項目も同時に見ておく様にしてください。}; ''
''&color(red){<重要>:このコマンドに限らず、シナリオを作成する為には「HELPファイル」をよく参照するのが非常に重要です。 必ずHELPファイルのこの項目も同時に見ておく様にしてください。}; ''
''例) Create 敵 ダイン1号機 1 ジョー 20 5 5''
このコマンドの各項目(引数)の意味は、左から順に……
&color(blue){<Create>=クリエイト。ユニットを作り出す命令です。}; ~
&color(blue){<敵>=「敵、味方、NPC、中立」の所属する陣営の指定。}; ~
&color(blue){<ダイン1号機>=ロボット(ユニット)の指定。}; ~
&color(blue){<1>=機体のランク(改造レベル)の指定。}; ~
&color(blue){<ジョー>=ロボットに搭乗するパイロットの指定。}; ~
&color(blue){<20>=パイロットのレベルの指定。}; ~
&color(blue){<Create>=クリエイト。ユニットを作り出す命令です。};
&color(blue){<敵>=「敵、味方、NPC、中立」の所属する陣営の指定。};
&color(blue){<ダイン1号機>=ロボット(ユニット)の指定。};
&color(blue){<1>=機体のランク(改造レベル)の指定。};
&color(blue){<ジョー>=ロボットに搭乗するパイロットの指定。};
&color(blue){<20>=パイロットのレベルの指定。};
&color(blue){<5 5>=登場時のマップX,Y軸の指定。};
の意となります。よってこの「Create 敵 ダイン1号機 1 ジョー 20 5 5」というコマンドは
の意となります。 よってこの「Create 敵 ダイン1号機 1 ジョー 20 5 5」というコマンドは
''『敵として、改造度が1のダイン1号機というユニットに、ジョーというレベル20のパイロットを乗せ、座標[X]5、座標[Y]5に出撃させる』''
という事を表すことになります。
--------------------------------
なおこのCreateコマンドを使う上でのよくあるエラーは以下の4点です。
なおこのCreateコマンドを使う上でのよくあるエラーは以下の4点です。
''(1) 引数(項目)の数は間違っていないか?''
上記解説の様にこのCreateコマンドには「敵」とか「パイロット名」など、7つ(もしくは8つ)の項目の指定が必要です。その数はチャンと足りているでしょうか?何かが抜けてはいませんでしょうか?
上記解説の様にこのCreateコマンドには「敵」とか「パイロット名」など、7つ(もしくは8つ)の項目の指定が必要です。 その数はチャンと足りているでしょうか? 何かが抜けてはいませんでしょうか?
''(2) 「半角」と「全角」を間違っていないか?''
各引数の数字の指定は「&color(blue){半角数字};」でないといけません。これが全角数字になってはいないでしょうか?
また引数同士は[半角スペース]で間を開けなければいけません。これも「全角スペース」で開けていないでしょうか?(もしくはスペースが抜けているか)
各引数の数字の指定は「&color(blue){半角数字};」でないといけません。 これが全角数字になってはいないでしょうか?
また引数同士は[半角スペース]で間を開けなければいけません。これも「全角スペース」で開けていないでしょうか?(もしくはスペースが抜けているか)
''(3) ユニットかパイロットを「愛称」で指定してはいないか?''
これらは「名称」で指定しなければなりません。
これらは「名称」で指定しなければなりません。
''(4) 「(ザコ)」または「(汎用)」がついていないパイロットを複数出場させようとしていないか?''
同じマップに複数登場するパイロットは、名前の最後に「(ザコ)」または「(汎用)」と付いていなければなりません。 "〜というパイロットは既に登録されています" というエラーが出るときは、このミスの可能性があります。
同じマップに複数登場するパイロットは、名前の最後に「(ザコ)」または「(汎用)」と付いていなければなりません。 "〜というパイロットは既に登録されています" というエラーが出るときは、このミスの可能性があります。
以上、よくチェックしてみてください。
以上、よくチェックしてみてください。
関連項目:[[その他よくある質問 / よくあるエラーメッセージとその対策−ユニット・パイロットなどデータ関係のSRCエラーメッセージ>その他よくある質問/よくあるエラーメッセージとその対策#DataErr]]
**Q408. 合体するユニットを出撃させても、なぜか合体できません。 [#a1bd8200]
合体するユニットは、合体後のユニットをCreateコマンドやUnitコマンドなどであらかじめ作っておかなければなりません。例えば、3体合体のユニットなら
合体するユニットは、合体後のユニットをCreateコマンドやUnitコマンドなどであらかじめ作っておかなければなりません。 例えば、3体合体のユニットなら
Create 味方 ダイン1号機 0 ジョー 2 14 5
Create 味方 ダイン2号機 0 カムイ 2 15 6
Create 味方 ダイン3号機 0 シキイ 2 16 4
Unit 合体機神ダイオン 0
とすると、分離状態のユニットが3機現れ、任意で合体させる事ができます。
**Q409. 同じイベントが何回も余計に起こってしまいます。原因は? [#rbeb151c]
~ 意図しないのにイベントが何回も起こってしまう場合は、以下のミスによることが多いです。
意図しないのにイベントが何回も起こってしまう場合は、以下のミスによることが多いです。
''(1) 直前のイベントに「Exit」が抜けている。''~
イベントは、「Exit」か「Continue」「GameClear」「GameOver」「Quit」などを実行しない限り終わりません。これらのコマンドがないと、イベントラベルを越えてその次のイベントの中味まで実行されてしまい、その次のイベントは本来の起動条件を満たしたときに再び実行されることになります。
''(1) 直前のイベントに「Exit」が抜けている。''
イベントは、「Exit」か「Continue」「GameClear」「GameOver」「Quit」などを実行しない限り終わりません。 これらのコマンドがないと、イベントラベルを越えてその次のイベントの中味まで実行されてしまい、その次のイベントは本来の発生条件を満たしたときに再び実行されることになります。
''(2) イベントを1回だけ起こすつもりだったのに、ClearEvent コマンドがない。''~
イベントは、ClearEvent で無効にしない限り、条件を満たすたびに起動します。
''(2) イベントを1回だけ起こすつもりだったのに、ClearEvent コマンドがない。''
イベントは、ClearEvent で無効にしない限り、条件を満たすたびに発生します。
''(3) エピローグイベントの中に「Continue」コマンドを使っている。''~
Continue は“システム変数「次ステージ」に指定されたステージをセットしたあと、エピローグイベントに移る”、という動作をします。したがって、エピローグイベントのなかで使われると、何度もエピローグイベントの始めからやり直すことになります。
''(3) エピローグイベントの中に「Continue」コマンドを使っている。''
Continue は“システム変数「次ステージ」に指定されたステージをセットしたあと、エピローグイベントに移る”、という動作をします。 したがって、エピローグイベントのなかで使われると、何度もエピローグイベントの始めからやり直すことになります。
~ なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。確認の際はステージの最初からやり直す必要があります。
なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。 確認の際はステージの最初からやり直す必要があります。
**Q410. 起動しないイベントがあります。原因は? [#Q410]
~ この場合、よくある原因は次のものです。
この場合、よくある原因は次のものです。
''(1) 同じ種類のイベントを複数、作成している。''~
同じ種類のイベントを複数作っても、条件を満たしたもののうち最初のイベントしか実行されません。これを防ぐためにはイベントラベルの最初に「*」を付けて常時イベントラベルにします。詳しくはヘルプの 「シナリオの作成」->「イベントラベル」のページの「イベントラベルの引数」と「常時イベントラベル」の項を参照してください。~
また、イベントを一つに統合するという対策手段もあります。いろいろな起動条件のイベントを統合する場合は、Ifコマンドを使って条件を付けます。
''(1) 同じ種類のイベントを複数、作成している。''
同じ種類のイベントを複数作っても、条件を満たしたもののうち最初のイベントしか実行されません。 これを防ぐためにはイベントラベルの最初に「*」を付けて常時イベントラベルにします。 詳しくはヘルプの 「シナリオの作成」->「イベントラベル」のページの「イベントラベルの引数」と「常時イベントラベル」の項を参照してください。
また、イベントを一つに統合するという対策手段もあります。 いろいろな発生条件のイベントを統合する場合は、Ifコマンドを使って条件を付けます。
# 例:次のような二つの攻撃イベントがあったとします。
攻撃 味方 全:
(イベント内容1)
Exit
攻撃 パイロットA ボス:
(イベント内容2)
Exit
# このままでは二つ目のイベントが起こらないので、
# 二つのイベントを統合します。
攻撃 味方 全:
(イベント内容1)
If 対象パイロット = パイロットA And 相手パイロット = ボス Or_
対象パイロット = ボス And 相手パイロット = パイロットA Then
(イベント内容2)
EndIf
Exit
# ただしこれは、パイロットA ・ ボスがともにネームドの場合です。
# ザコ ・ 汎用の場合は、パイロット名とパイロットIDが異なるので、
# 対象ユニットID = UnitID(パイロットA)
# などに書き換える必要があります。
''(2) イベント冒頭の追加条件設定にミスがあり、成立しえない条件になってしまっている。''~
#br
''(2) イベント冒頭の追加条件設定にミスがあり、成立しえない条件になってしまっている。''
たとえば、イベント冒頭に
If ターン数 < 3 And ターン数 > 5 Then
と、不等号をまちがえてしまった場合などです。
と、不等号の向きを逆にしてしまった場合などです。
条件に使う変数のスペルミスやシステム変数の記憶違いなどもありえます。たとえば、第5ターンにイベントを起こそうとして、
If タ‐ン数 = 5 Then
としてしまうなど。音引き「ー」とすべきがハイフン「‐」になっており、この変数は(偶然、他のところで使われてない限り)いつまでたってもゼロのままで条件は成立しません。
''(3) イベントラベルの書式や引数設定にミスがあり、イベントが成立しえない。''
誤り例:
ターン 味方 敵:
ターンイベントの第1引数はターン数を入れるべき場所なので、「味方」は変数名とみなされてしまいます。使っていない「変数」の値は通常ゼロだから、このイベントは起動しません。
ターンイベントの第1引数はターン数を入れるべき場所なので、「味方」は変数名とみなされてしまいます。 使っていない「変数」の値は通常ゼロだから、このイベントは発生しません。
特に多いのは、破壊イベント・攻撃イベント・進入イベントなどの引数のユニット指定がまちがっていることです。そのため、存在しないユニットが破壊されたり攻撃したりした時のイベントになってしまい、けっして起動しないことになります。~
パラメータをデータのファイルと厳密に照合してください。~
特に多いのは、破壊イベント・攻撃イベント・進入イベントなどの引数のユニット指定がまちがっていることです。 そのため、存在しないユニットが破壊されたり攻撃したりした時のイベントになってしまい、けっして発生しないことになります。
パラメータをデータのファイルと厳密に照合してください。
このミスを減らす有力な方法は、データからパラメータにCopy&Pasteすることです。
引数をメインパイロット名またはユニット名にすべきところを、愛称にしてしまうミスもよくあります。~
また、(ザコ)・(汎用)をパイロット名・ユニット名で引数指定すると、個機を特定できません。イベントラベルで個機を指定するにはグループIDを用いてください。
引数をメインパイロット名またはユニット名にすべきところを、愛称にしてしまうミスもよくあります。
また、(ザコ)・(汎用)のパイロット名・ユニット名で引数指定すると、個機を特定できません。イベントラベルで個機を指定するにはグループIDを用いてください。
なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。確認の際はステージの最初からやり直す必要があります。
なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。 確認の際はステージの最初からやり直す必要があります。
''(4) ClearEvent の設定ミス''
たとえば、敵ボスキャラを破壊したとき1回だけ起こるイベントのつもりで、以下のように書いた場合です。
破壊 敵:
If 対象パイロット = ボスキャラ Then
…(中略)
EndIf
ClearEvent
Exit
これだと、最初に「破壊 敵:」イベントが発生したときに ClearEvent されてしまいます。 その結果、ボスキャラの破壊時には(たいてい)すでにイベントが消去されてしまっています。
この場合、ClearEvent は If と EndIf のあいだに書かねばなりません。
**Q411. Ifコマンドの条件分岐が思ったように働きません。または、条件分岐内のコマンドがまったく実行されません。原因は? [#n3e3b983]
<最初にすること>~
このトラブルにあったときには、まず、~
&color(crimson){Ifコマンドの前後の行に『Talk 〜』か『Confirm 〜』を書いて、Ifコマンドそのものが実行されているか、条件分岐を左右する変数が思ったようになっているかを調べてください。};ElseIfやElseを使っているときはこれらの直後の行にも書いてください。(参考:[[Q512>その他よくある質問#Q512]])
**Q411. Ifコマンドの条件分岐が思ったように働きません。または、条件分岐内のコマンドがまったく実行されません。原因は? [#Q411]
<最初にすること>
このトラブルにあったときには、まず、
&color(crimson){Ifコマンドの前後の行に『Talk 〜』か『Confirm 〜』を書いて、Ifコマンドそのものが実行されているか、条件分岐を左右する変数が思ったようになっているかを調べてください};。 ElseIfやElseを使っているときはこれらの直後の行にも書いてください。(参考:[[Q512>その他よくある質問#Q512]])
# 例:
Confirm "If直前 iは、$(i)"
If i <> 0 Then
Confirm "If直後 iは、$(i)"
(一つ目の分岐の処理)
ElseIf Damage(対象パイロット) > 60 Then
Talk
Else直後;対象は$(対象パイロット);ボスダメージは$(Damage(対象パイロット))
ElseIf直後;対象は$(対象パイロット);ボスダメージは$(Damage(対象パイロット))
End
(二つ目の分岐の処理)
#…(後略)
If直前のConfirmの内容が表示されなかったときには、Ifコマンド自体が実行されていません。他の箇所の記述を検討してください。よくあるのは、(1)Ifを含むイベントが実行されていない(参考:[[Q410>#Q410]]) (2)その前に別の「If」や「Switch」があるが「EndIf」「EndSw」で閉じるのを忘れている (3)Ifがどのイベントにも属していない などです。~
If直前のConfirmやTalkの内容が期待どおり表示されたときには、分岐処理の中身に問題があります。~
以下は、Ifコマンド自体は期待どおり実行されているが、IfかElseIfはうまく実行されていない場合のよくあるミスについてです。
If直前のConfirmの内容が表示されなかったときには、Ifコマンド自体が実行されていません。 他の箇所の記述を検討してください。 よくあるのは、(1)Ifを含むイベントが実行されていない(参考:[[Q410>#Q410]]) (2)その前に別の「If」や「Switch」があるが「EndIf」「EndSw」で閉じるのを忘れている (3)[[Ifがどのイベントにも属していない>#OutOfEve]]などです。
If直前のConfirmやTalkの内容が期待どおり表示されたときには、Ifコマンド自身は実行されています。 したがって問題があるのはそれ以降の処理です。
以下は、その場合のよくあるミスです。
<よくあるミス>~
以下、よくあるミスを列挙します。大部分は判別式のまちがいです。~
<よくあるミス>
以下、よくあるミスを列挙します。 大部分は条件式のまちがいです。
- 変数名の誤記~
結果的に未使用の変数を使ったことになります。未使用変数の値はゼロまたは空文字とみなされます。~
- And、Orの誤解~
- 変数名の誤記
結果的に未使用の変数を使ったことになります。 未使用変数の値はゼロまたは空文字とみなされます。
#br
- And、Orの誤解
たとえば、
誤:
If 変数A = (1 Or 2) Then
正:
If 変数A = 1 Or 変数A = 2 Then
といったまちがいです。「Or」は左右の式のどちらかが0以外なら1、ともに0ならば0を出す演算子です。誤まり例のような用法はありません。~
- 変数一つだけの「条件式」の危険性~
といったまちがいです。 「Or」は左右の式のどちらかが0以外なら1、ともに0ならば0を出す演算子です。 誤まり例のような用法はありません。
#br
- 変数一つだけの「条件式」の危険性
たとえば、変数Aが0でなければ分岐処理を実行しようとして、
If 変数A Then
とした場合です。これでもうまくいくかもしれませんが、“「変数A」というパイロットか存在しているかどうか”と解釈される可能性があります。下記のほうが確実です。
とした場合です。 これでもうまくいくかもしれませんが、“「変数A」というパイロットか存在しているかどうか”と解釈される可能性があります。 下記のほうが確実です。
If 変数A <> 0 Then
「Not 変数A」とした場合も同様です。
#br
- 比較演算子「=」の式とSetコマンドとの混同
If Set 変数A 1 Then
これは、(1)Setコマンドの別記法~
変数A = 1~
と、(2)Ifの直後などでの判別式~
If 変数A = 1 Then~
との混同からくる誤解です。~
(1)はSetコマンドの別の表記法であり、コマンドです。あいだにある「=」は代入演算子ではありません(SRC には代入演算子はありません)。~
(2)の「=」は比較演算子であり、この「変数A = 1」は式です。~
これは、
(1)Setコマンドの別記法
変数A = 1
と、
(2)Ifの直後などでの条件式
If 変数A = 1 Then
との混同からくる誤解です。
(1)は Set コマンドの別の表記法であり、コマンドです。 あいだにある「=」は代入演算子ではありません(SRC には代入演算子はありません)。
(2)の「=」は比較演算子であり、この「変数A = 1」は式です。
Ifの直後に来るのは式で、コマンドではありません。
- If の書式まちがい~
#br
- If の書式まちがい
以下のようなミスがこれまで報告されています。
-- イベントラベル書式の流用~
-- イベントラベル書式の流用
# 誤まり例:
If ターン 8 > Then
Ifの直後に来るのは式であり、イベントラベルの書式は適用できません。また、「>」の両側には式がなければいけません。~
-- If分岐のさいちゅうにEndIfを入れてしまう~
-- EndIfのかわりにExitを入れてしまう~
-- 「ElseIf if」と、よけいな「if」を入れてしまう~
Ifの直後に来るのは式であり、イベントラベルの書式は適用できません。 また、「>」の両側には式がなければいけません。
-- If分岐のさいちゅうにEndIfを入れてしまう
-- EndIfのかわりにExitを入れてしまう
-- 「ElseIf if」と、よけいな「if」を入れてしまう
-- 「If」がない。たとえば、下記のように書いてしまっている。
変数A = 1 Then
**Q412. イベントについてよくある誤解 [#v0b27ebe]
#br
**Q412. イベントについてよくある誤解 [#Q412]
ここでは、これまで質問掲示板に出たイベント関連ミスのうち、「イベント」というものへの誤解に関係したものを取り上げます。
''(1)ステージはイベントの集まり''~
ヘルプの「シナリオの作成」->「イベントデータ」の「イベント」の項には、「シナリオはイベントの集まりとして作られれています」と書かれています。~
つまり、&color(darkred){ステージはイベントの集まり};だということです。~
''(1)ステージはイベントの集まり''
ヘルプの「シナリオの作成」->「イベントデータ」の「イベント」の項には、「シナリオはイベントの集まりとして作られれています」と書かれています。
つまり、&color(darkred){ステージはイベントの集まり};だということです。
厳密に言えば作品データ読み込みの指定「@〜」とインクルードの指定「<〜>」だけは例外ですが、それ以外の.eveファイルの記述はすべて、イベントかサブルーチンです。
以下は質問掲示板でしばしば見られるまちがいです。
以下は質問掲示板でしばしば見られるまちがいです。 &aname(OutOfEve);
(前のイベントの中身)
Exit
If ターン数 < 5 Then
全滅 敵:
…(後略)
上の「If〜Then」はどのイベントにも属していません。&color(red){イベントに属していないイベントコマンドはけっして実行されず、無意味です。};~
ヘルプの「Ifコマンド」のページには「''コマンド''を条件付き実行」と書かれています。これは、&color(blue){イベントの中でコマンド列を実行するときに条件付き分岐を行う};という意味であり、「''イベント''を条件付き実行する」という意味ではありません。&color(darkred){「Ifコマンド」はイベントラベルの代わりにはならない};のです。イベント実行に追加条件を付けたいときは[[Q608>シナリオ作成応用編#Q608]]を参照してください。
上の「If〜Then」はどのイベントにも属していません。 &color(red){イベントに属していないイベントコマンドはけっして実行されず、無意味です。};
ヘルプの「Ifコマンド」のページには「''コマンド''を条件付き実行」と書かれています。 これは、&color(blue){イベントの中でコマンド列を実行するときに条件付き分岐を行う};という意味であり、「''イベント''を条件付き実行する」という意味ではありません。 &color(darkred){「Ifコマンド」はイベントラベルの代わりにはならない};のです。 イベント実行に追加条件を付けたいときは[[Q608>シナリオ作成応用編#Q608]]を参照してください。
''(2)イベントはゲーム進行上で起こった情況に応じて起動される''~
たとえば「進入イベント」はユニットが指定された地点に入ったときに起こるイベントです。指定された地点に移動させるイベントではありません。「勝利条件イベント」はマップコマンドメニュー「作戦目的」がクリックされたときに起こるイベントです。勝利条件を設定するイベントではありません。
''(2)イベントはゲーム進行上で起こった情況に応じて発生する''
たとえば「進入イベント」はユニットが指定された地点に入ったときに起こるイベントです。 指定された地点に移動させるイベントではありません。 「勝利条件イベント」はマップコマンドメニュー「作戦目的」がクリックされたときに起こるイベントです。 勝利条件を設定するイベントではありません。
ターン 5 味方:
勝利条件:
(イベント内容)
exit
これは、「“第5ターン味方フェイズ冒頭” と “メニューコマンド『作戦目的』クリック時” の両方で動作するイベント」です。けっして「第5ターン味方フェイズに勝利条件を設定するイベント」ではありません。
''(3)イベントラベル・通常ラベルとラベル指定''~
イベントラベル・通常ラベルはともに、行頭から始まり末尾に「:」が必要です。~
ClearEventコマンドやCallコマンドの引数としてラベルを指定するときは、「:」は必要ありません。~
''(3)イベントラベル・通常ラベルとラベル指定''
イベントラベル・通常ラベルはともに、行頭から始まり末尾に「:」が必要です。
ClearEventコマンドやCallコマンドの引数としてラベルを指定するときは、「:」は必要ありません。
慣れないうちは混同されやすいので、ご注意ください。
''(4)イベントラベル・イベントコマンド・式・変数はそれぞれ別のもの''
''(4)イベントラベル、イベントコマンド、式、変数、パイロット・ユニットデータはそれぞれ別のもの''
# 誤まり例1
UseAbility パイロットA:
(イベント?内容)
Exit
# 誤まり例2
If ターン 5 > Then
・・・(後略)
上の誤まり例1はイベントコマンドをイベントラベルに流用してしまったもの、例2はイベントラベルの書式をIfの判別式に流用してしまったものです。
# 誤まり例3
気力Lv2 パイロットA:
(イベント?内容)
Exit
イベントラベル・イベントコマンド・式・変数などはすべて、それぞれ独自の役割りと独自の書式を持っています。「変数」が「式」ともみなせることをのぞけば、たがいに流用できるものではありません。~
イベントラベルは、イベントファイルの基本的部品で、ゲーム上のできごとに応じてチェックされイベントを起動させます。~
イベントコマンドは、イベントの基本的部品で、イベントで行わせたい動作内容を記述するものです。~
式は、イベントラベルやイベントコマンドのパラメータです。~
上の誤まり例1はイベントコマンドをイベントラベルに流用してしまったもの、例2はイベントラベルの書式をIfの条件式に流用してしまったもの、例3はイベントラベルとユニットデータなどに記述する必要技能とを混同したものです。
''イベントラベル、イベントコマンド、式、変数、パイロット・ユニットデータなどはすべて、それぞれ独自の役割りと独自の書式を持っています''。 「変数」が「式」ともみなせることをのぞけば、''たがいに流用できるものではありません''。
イベントは、ステージの基本的部品で、イベントラベルとイベントコマンドからなっています。
イベントラベルは、イベントの部品の一つで、ゲーム上のできごとに応じてチェックされイベントを発生させます。
イベントコマンドも、イベントの基本的部品で、イベントで行わせたい動作内容を記述するものです。
式は、イベントラベルやイベントコマンドのパラメータです。
変数は、演算子や関数とともに式の部品で、数値や文字列などを保存・参照するものです。
特殊能力や必要技能などのパイロット・ユニットデータは、イベントとはまったく別のものです。 ラベルやコマンドのパラメータ書式で指定していない限り、流用はできません。
イベントラベル・イベントコマンド・式・変数などの理解はSRCのイベントファイル理解の基礎です。これらがあいまいだと、コマンドリファレンスなどについてしばしば、「ヘルプを読んでも理解できない」ことになります。ヘルプの「シナリオの作成」->「イベントデータ」「イベントラベル」など該当項目をよく読んで、しっかり把握してください。
イベントラベル・イベントコマンド・式・変数などの理解はSRCのイベントファイル理解の基礎です。 これらがあいまいだと、コマンドリファレンスなどについてしばしば、「ヘルプを読んでも理解できない」ことになります。 ヘルプの「シナリオの作成」->「イベントデータ」「イベントラベル」など該当項目をよく読んで、しっかり把握してください。
**Q413. Info関数がうまく動きません。どこにミスがあるのでしょうか? [#cce7465a]
**Q413. Info関数がうまく動きません。どこにミスがあるのでしょうか? [#Q413]
&color(red){このトピックは[[ヘルプ補足/Info関数>ヘルプ補足/Info関数#sa9f2a75]]とのあいだで統合または整理される可能性があります。};
質問掲示板などから、過去よくあったミスを列挙します。
info関数の書式:(ヘルプより)~
info関数の書式:(ヘルプより)
> ''Info([データ区分,]データ,情報種類,…)''
- &color(blue){「データ区分」を省略したところ、意図と異なる解釈をされた};~
- &color(blue){「データ区分」を省略したところ、意図と異なる解釈をされた};
ふつうは「データ区分」を省略しないほうが確実です。
#br
- &color(blue){「情報種類」指定文字列と具体的データとの混同};
情報種類を解説したヘルプの記述で、太字に書かれているのは情報の種類を判別するための文字列です。これらはその文字列のまま、Info関数に記載します。
細字で書かれているのは、具体的データを記載すべきところです。
たとえば、「''属性''」と指定されたところは、「属性」と書かねばなりません。「属性タイプ」と指定されたところには、「突」「武」「接」などの具体的な属性を記述します。
#br
- &color(blue){「データ」を指定していない};
[[ヘルプ補足/Info関数の該当部分>ヘルプ補足/Info関数#DataNuke]]を参照してください。
#br
- &color(blue){その他「情報種類」の誤解};
たとえば、
-- Info(ユニット, ユニットA, 武器, 武器A, 属性)
は、武器Aの属性文字列を返します。特定の属性情報のみを返すものではありません。
-- 「情報種類」の書式で「特殊能力名」とあるのは、特殊能力の名称のことです。「弱点=剣」など「=」とそれ以降を含めたものではありません。
#br
- &color(blue){データ区分に「ユニット」を指定したのにデータにはパイロットの名称やIDを入れてしまった。またはその逆。};
[[ヘルプ補足/Info関数>ヘルプ補足/Info関数#DataRei]]に例があります。
#br
- &color(blue){システムで使われている用語を変数名に使っている};
特にInfo関数だけで使われている用語と同じ変数名は、Info関数内で使わない限りエラーになりにくく、数も多いので要注意です。
#br
- &color(blue){Info関数の仕様で使われている指定文字列と同じ名前の変数を設定している};
#br
- &color(blue){バトルコンフィグから呼びだされた式で、バトルコンフィグの変数名と同じ「情報種類」指定文字列を使っている};(参照:[[ヘルプ補足/バトルコンフィグデータ (2)計算式>ヘルプ補足/バトルコンフィグデータ#gb1223aa]])
このトラブルを回避するには、「情報種類」指定文字列を「"」でくくります。
#br
- &color(blue){特定できないデータを指定した};
(ザコ)(汎用)のパイロット・ユニットに対して名称で指定すると特定できません。パイロットID・ユニットID・グループIDで指定してください。
#br
- &color(blue){データ「対象(相手)ユニットID」を「対象(相手)ユニット」と書いてしまった};
Info関数に限りませんが、Info関数で特によくあるミスです。
#br
- &color(blue){「情報種類」指定文字列と具体的データとの混同};~
情報種類を解説したヘルプの記述で、太字に書かれているのは情報の種類を判別するための文字列です。これらはその文字列のまま、Info関数に記載します。~
細字で書かれているのは、具体的データを記載すべきところです。~
たとえば、「''属性''」と指定されたところは、「属性」と書かねばなりません。「属性タイプ」と指定されたところには、「突」「武」「接」などの具体的な属性を記述します。~
**Q414.イベントラベルのいろいろな設定(初歩) [#Q414]
ここでは、さまざまな設定例をあげながら、イベントラベルの初歩的な使い方を説明します。
もう少し複雑な例は、
[[Q608. 発動に追加条件が付いたイベントを設定するには?>シナリオ作成応用編#Q608]]、
[[Q613. 複雑な条件分岐を設定する方法は?>シナリオ作成応用編#Q613]]
などを参照してください。
- &color(blue){「データ」を指定していない};~
[[ヘルプ補足/Info関数の該当部分>ヘルプ補足/Info関数#DataNuke]]を参照してください。
''<パラメータ「全」を使う>''
・ 毎ターン味方フェイズ最初に発生するイベント
ターン 全 味方:
- &color(blue){その他「情報種類」の誤解};~
たとえば、~
--- Info(ユニット, ユニットA, 武器, 武器A, 属性)~
は、武器Aの属性文字列を返します。特定の属性情報のみを返すものではありません。~
--- 「情報種類」の書式で「特殊能力名」とあるのは、特殊能力の名称のことです。「弱点=剣」など「=」とそれ以降を含めたものではありません。
・ 第3ターンの全ての陣営フェイズ始めに発生するイベント
ターン 3 全:
これらのように、イベントラベルの「&color(darkblue){パラメータがどういう場合にも発生させたい};」ときには「&color(forestgreen){''全''};」をもちいます。
&br;
- &color(blue){データ区分に「ユニット」を指定したのにデータにはパイロットの名称やIDを入れてしまった。またはその逆。};~
[[ヘルプ補足/Info関数>ヘルプ補足/Info関数#DataRei]]に例があります。
・ ユニットAが参加する戦闘ならば、どれでも発生するイベント
攻撃 ユニットA 全:
または
攻撃 全 ユニットA:
&br;
- &color(blue){システムで使われている用語を変数名に使っている};~
特にInfo関数だけで使われている用語と同じ変数名は、Info関数内で使わない限りエラーになりにくく、数も多いので要注意です。
・ どの戦闘でも発生するイベント
攻撃 全 全:
&br;
- &color(blue){特定できないデータを指定した};~
(ザコ)(汎用)のパイロット・ユニットに対して名称で指定すると特定できません。パイロットID・ユニットID・グループIDで指定してください。
・ いずれかのユニットがマップ上の地点 (9, 11)に進入したときのイベント
進入 全 9 11:
&br;
- &color(blue){データ「対象(相手)ユニットID」を「対象(相手)ユニット」と書いてしまった};~
Info関数に限りませんが、Info関数で特によくあるミスです。
・ ユニットAのさまざまなアクションで発生するイベント
使用 ユニットA 全:
このイベントは、ユニットAの武器使用、アビリティ、スペシャルパワー、召喚解除、アイテムのアビリティ効果の使用、ユニットコマンドイベントなどのいずれの場合にも発生します。
&br;
''<陣営名パラメータを使う>''
イベントラベルで '''unit''' (メインパイロット名やユニット名)と指定されているパラメータには、「&color(forestgreen){''陣営名''};」を使うことができます。
・ 味方ユニットと中立ユニットとの戦闘で発生するイベント
攻撃 味方 中立:
または
攻撃 中立 味方:
#br
・ 敵ユニットのどれかが損傷率 50%以上になったときのイベント
損傷率 敵 50:
#br
これらの場合の“&color(forestgreen){''陣営名''};”指定は、「&color(darkblue){この陣営に属しているユニットならば、どのユニットであってもイベントを起こす};」という意味です。
&br;
“陣営名”は、少し違った意味で使われることもあります。ターンイベントと全滅イベントでは、「&color(darkblue){この陣営についてのイベント};」という意味で“&color(forestgreen){''陣営名''};”が指定されます。
・ 第4ターン敵フェイズ最初に発生するイベント
ターン 4 敵:
#br
・ 中立陣営が全滅したときのイベント
全滅 中立:
&br;
''<イベントラベルを複数並べる>''
イベントラベルを複数並べると、そのすべてに対し発生するイベントを作ることができます。
・ 第5ターンと第6ターンの敵フェイズ最初に発生するイベント&aname(Honpou);
ターン 5 敵:
ターン 6 敵:
これには[[別法>#Beppou]]があります。
#br
・ ユニットAが損傷率 90%以上になるか破壊されたときに発生するイベント
損傷率 ユニットA 90:
破壊 ユニットA:
&br;
''<If をイベントラベル直後に使う>''
イベントラベルのパラメータでは表現しきれない条件をつけて、イベントを発生させたいときもあります。このようなときには、If を使います。
イベントラベル:
If (条件式) Then
(イベントの内容)
EndIf
Exit
「If ('''条件式''') Then」は、「この直後の行から「EndIf」の直前行までは(「Else」や「ElseIf」がある場合には、その直前行までは)'''条件式''' が満たされているときだけ実行する」という意味です。
// 「If」の初歩的な説明は、[[]]を参照してください
以下は、かんたんな実例です。より詳しい例は[[Q608. 発動に追加条件が付いたイベントを設定するには?>シナリオ作成応用編#Q608]]を参照してください。
・ 味方フェイズ冒頭で敵数が 5 未満のときに実行されるイベント
ターン 全 味方:
If 敵数 < 5 Then
(イベント内容)
Endif
Exit
#br
・ 第5ターンと第6ターンの敵フェイズ最初に実行されるイベント(別法)&aname(Beppou);
ターン 全 敵:
If ターン数 = 5 Or ターン数 = 6 Then
(イベント内容)
Endif
Exit
これは[[上>#Honpou]]にあげたイベントの別法です。
&br;
''<システム変数「対象パイロット」「対象ユニットID」「相手パイロット」「相手ユニットID」などを使う>''
しばしば、イベントを引き起こしたユニットのデータを参照したいときがあります。これらのシステム変数はそういうときに使います。
「&color(forestgreen){対象パイロット};」「&color(forestgreen){対象ユニットID};」にはイベントを引き起こしたユニットのメインパイロット名やユニットIDが入ります。「&color(forestgreen){相手パイロット};」「&color(forestgreen){相手ユニットID};」には、その相手となったユニットのデータが入ります。
・ 進入ユニットの損傷率が 20%以上のときのみ動作する進入イベント
進入 全 3 6:
If Damage(対象ユニットID) >= 20 Then
(イベント内容)
Endif
Exit
#br
・ 特殊能力Aを持ったユニットのメインパイロットがレベルアップしたときのイベント
レベルアップ 全:
If IsAvailable(対象パイロット, 特殊能力A) = 1 Then
(後略)
#br
・ レベル10以下のパイロットが「恐怖」特殊状態のユニットを攻撃したときのイベント
攻撃 全 全:
If Level(対象パイロット) <= 10 And Condition(相手ユニットID, 恐怖) = 1 Then
(後略)
攻撃イベントでは、システム変数「&color(forestgreen){対象〜};」に&color(crimson){戦闘を仕掛けた側のデータ};が、「&color(forestgreen){相手〜};」には&color(crimson){仕掛けられた側};のが代入されています。逆ではありません。
&br;
・ パイロットAの機体が パイロットBに破壊されたとき動作するイベント
破壊 パイロットA:
If 相手パイロット = パイロットB Then
(イベント内容)
EndIf
Exit
・ アイテムAを持ったユニットが味方ユニットに破壊されたときのイベント
破壊 全:
If IsEquiped(対象ユニットID, アイテムA) = 1 And Party(相手ユニットID) = 味方 Then
(後略)
破壊イベントでは、システム変数「&color(forestgreen){対象〜};」に代入されるのは&color(crimson){破壊されたユニットのデータ};です。&color(crimson){そのユニットを破壊したユニットのデータ};は「&color(forestgreen){相手〜};」に代入されます。
&br;
・ 次の例は、まちがいです。
ターン 全 味方:
If Level(対象パイロット) <= 10 Then
(後略)
ターンイベントはユニットの動作によるイベントでは''ない''ので、「&color(forestgreen){対象パイロット};」には''代入されません''。
ターンイベントで、特定のパイロットのレベルをチェックしたいのなら、
ターン 全 味方:
If Level(パイロットA) <= 10 Then
(後略)
味方すべてのレベルをチェックし、10以下なら何かの処理をしたいのなら、
ターン 全 味方:
ForEach 味方
If Level(対象パイロット) <= 10 Then
(処理内容)
EndIf
Next
Exit
とします。
**Q415.変数って何ですか?[#Q415]
ここでは、「変数」について、最も基本的なことだけを解説します。
まず、次に示すのは、最も短い「シナリオ」の一つです。
プロローグ:
Confirm "1 たす 2 は $(1 + 2)"
GameClear
このシナリオは、「1 たす 2 は 3」と表示する、ただそれだけです。(「$(1 + 2)」は、「式 '1 + 2' の結果を文字列にする」といった意味です)
このシナリオの「1」と「2」は、あらかじめ決められた固定した数です。 だから、他の数の和を表示しようとしたら、改めて別のシナリオを作らなければなりません。
これでは不便なので、プレイヤーが入力するどんな数の和でも表示できるように改造します。
プロローグ:
Input i 数字を入れてください
Input j もう一度、数字を入れてください
Confirm "$(i) たす $(j) は $(i + j)"
GameClear
この「i」「j」が変数です。「1」や「2」と違うのは、変数には好きな数を入れておくことができる、ということです。
たとえるなら、変数は「i」「j」などのラベルが貼ってある箱のようなものです。 この箱には好きな数や文字列を入れることができ、「i」や「j」と指定することで箱の中に入っている数や文字列を参照することができます。
このとき、「i」や「j」などのラベルを「&color(red){変数名};」、中に入っている数や文字列を「&color(red){変数の値};」と言います。 また、値を箱に入れることを「&color(red){代入する};」と言います。
また、変数には何度も別の値を代入しなおすことができます。 言い換えれば、変数はその数を何度も変えることもできます。
プロローグ:
i = 1
j = 2
Confirm "$(i) たす $(j) は $(i + j)" //「1 たす 2 は 3」と表示
i = 3
Confirm "$(i) たす $(j) は $(i + j)" //「3 たす 2 は 5」と表示
i = i + 1
Confirm "$(i) たす $(j) は $(i + j)" //「4 たす 2 は 6」と表示
GameClear
上の例では、変数 i に違った値を代入しながら同じ内容の Confirm コマンドを繰り返していますが、表示は i の中味に応じて違っています。
なお、最後の 'i = i + 1' は、「この時点での i の値に 1 を加えた結果を i の新しい値にする」という意味です。 このように、SRC での表現は一般の数式と違うこともあります。
**Q416.If コマンドがよくわかりません[#Q416]
この項目は、ヘルプの &color(purple){Ifコマンド};のページを参照しながらお読みください。
''<If を理解する前に――通常のコマンドの動作>''
SRCは基本的に、&color(darkred){''イベントコマンドを上から一行ずつ、順番に処理していきます''};。
スタート:
Input i 数字を入れてください
Input j もう一度、数字を入れてください
Confirm "合計は、$(i + j)です"
Exit
たとえばこのイベントでは、
(1) 「数字をいれてください」と表示してプレイヤーに入力させ、その値を変数 i に入れる
(2) もう一度入力してもらい、その値を変数 j に入れる
(3) 合計を表示する
(4) スタートイベントを終える
という4つの手続きを順番に処理します。
このように、&color(darkred){''「上から一行ずつ、順番に」''};というのが''イベント処理の基本''ですので、まずこのことをしっかり理解してください。
''<If は処理の順番を変え特別な処理をする>''
けれども、コマンドを順番に処理するだけでは、不便に思うこともあります。 これだけでは、どんな時にも同じ決まりきった処理しかできないからです。
そのためSRCでは、''処理の順番を変える''コマンドが用意されています。 ヘルプの &color(purple){シナリオの作成 -> イベントコマンド の 「(8) 実行操作」};に分類されるコマンド群で、これらは制御コマンドとも呼ばれます。
If コマンド もその一つで、これは''条件に応じて違った処理をさせる''コマンドです。
下記は、上のスタートイベントの割り算版です。
スタート:
Input i 数字を入れてください
Input j もう一度、数字を入れてください
If j <> 0 Then
Confirm "答えは、$(i / j)です"
EndIf
Exit
足し算と違って、割り算には「ゼロで割ってはならない」という制限があります。 これを回避するため、プログラムを二つの「流れ」に分けます。
・ jがゼロでないなら、答えを表示する
・ jがゼロなら、何もしないで 'EndIf' の次の行('Exit')に飛ぶ。
''<条件式とは?>''
'If' に続く 'j <> 0' は''条件式''と呼ばれます。 'If '''条件式''' Then' は、&color(darkred){条件式が成り立つ場合のみ、'If' の次の行から 'EndIf' か 'Else' か 'ElseIf' までを実行する};という動作をします。
条件式が「&color(darkred){成り立つ};」というのは、厳密に言えば、''式の値がゼロ以外''ということです。(ただし、条件式が '''パイロット名''' の場合には、そのパイロットが出撃中のときのみ成り立ちます)
'<>' や '=' ,'<', '<=', '>', '>=', 'And', 'Or', 'Like' は、比較演算子と呼ばれ、右辺と左辺の値を比較してあてはまれば式の値は 1、そうでなければ 0 となります。 たとえば、'j <> 0' は j と 0 が違っていれば 1 となり、同じならば 0 となります。
条件式にはたいていの場合、比較演算子を使った式を使います。
''<Else 付きの If>''
上の割り算イベントは、ゼロで割ろうとしたときメッセージを出すよう改良することもできます。
スタート:
Input i 数字を入れてください
Input j もう一度、数字を入れてください
If j <> 0 Then
Confirm "答えは、$(i / j)です"
Else
Confirm "ゼロで割ることはできません"
EndIf
Exit
この場合は、二つに分かれた処理の流れは、次のようになります。
・ jがゼロでないなら、答えを表示した後、'Else' から 'EndIf' までを飛ばす。
・ jがゼロなら、'Else'の次の行まで飛んで、メッセージを出す。
言い換えれば、If〜Else〜EndIf では、
・ If行と Else とのあいだの行・・・・条件式成立のとき専用の処理
・ Else と EndIf とのあいだの行・・・条件式不成立のとき専用の処理
となります。
関連項目:
[[Q411.If コマンドの条件分岐が思ったように働きません。または、条件分岐内のコマンドがまったく実行されません。原因は?>シナリオ作成基礎編#Q411]]
[[Q613. 複雑な条件分岐を設定する方法は?>シナリオ作成応用編#Q613]]
-----
*コメント [#ia8e7067]
#comment_nospam