*シナリオ作成基礎編 [#pd673fda]
 #contents
 ----
 **Q401. シナリオの作り方が解りません。 [#z6fd7ae8]
 
  シナリオデータは「.eve」という拡張子が付いていますが、実際にはテキスト形式ですので、「メモ帳」等のテキストエディタで簡単に見ることも編集する事もできます。
 
  シナリオデータはプログラム言語の様になっており、ロボットなどのデータに比べて非常に複雑ですが、まずは「ヘルプファイル」をよく読んだ上で、&color(red){既存のシナリオデータを見てみたり}; 、それらを改造してみたりして練習して覚えて行くのが良いでしょう。
 
  有志の方が作ってくださった [[チュートリアルシナリオ (46.8 KB)>http://www.src.jpn.org/neko/scenario/TutorialSaga.zip]]もダウンロードして、実際のシナリオを動かしながら、SRCシナリオの作り方を学んでみてください。
 
 
 **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]]をご参照ください。
 
 
 **Q406. 自作のデータやシナリオで遊ぼうと思ったら、エラーが出て遊べません。 [#le493a35]
  SRCでのエラーは、大きく分けて次の2つがあります。
 
 &color(blue){・データがSRCの書式や文法に違反している場合};~
 &color(blue){・SRC本体のバグによるもの};
 
  前者の場合、エラーメッセージ画面にイベントファイル上のエラー発生個所が表示されます。これを参考にしてデータを修正しましょう。なお[[Q507>その他よくある質問#u7a2e774]]には自作データのよくあるミスの事例を上げていますのでこれも参考にしてください。
 
  またSRCは非常に複雑なプログラムであり、また頻繁に機能追加が行われるため、予期しないバグが潜んでいる場合があります。あきらかにSRC本体のバグと思われる現象が発生した場合は、その&color(red){具体的な状況や現象(最低でもエラーが発生したシナリオ名)}; をできるだけ詳しく[[バグ報告掲示板>http://www.src.jpn.org/neko/lightbbs/bug/src_custom.cgi]]に報告してください。
 
 関連項目:[[その他よくある質問 / よくあるエラーメッセージとその対策>その他よくある質問/よくあるエラーメッセージとその対策#l7c30311]]
 
 **Q407. ユニットを出撃させたいのですが、上手くいきません。【Createコマンドについて】 [#xc79d5a1]
  シナリオを作成する上で最も基本となるのがこの「Createコマンド」です。
 そのためシナリオ作成初心者の方が最初にこれでよく悩まれる事も多いので、ここではその解説をします。
 
 ''&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){<5 5>=登場時のマップX,Y軸の指定。}; 
 
 の意となります。よってこの「Create 敵 ダイン1号機 1 ジョー 20 5 5」というコマンドは
 
 ''『敵として、改造度が1のダイン1号機というユニットに、ジョーというレベル20のパイロットを乗せ、座標[X]5、座標[Y]5に出撃させる』''
 
 という事を表すことになります。
 --------------------------------
 
 なおこのCreateコマンドを使う上でのよくあるエラーは以下の4点です。
 
 ''(1) 引数(項目)の数は間違っていないか?''
 
 上記解説の様にこのCreateコマンドには「敵」とか「パイロット名」など、7つ(もしくは8つ)の項目の指定が必要です。その数はチャンと足りているでしょうか?何かが抜けてはいませんでしょうか?
 
 ''(2) 「半角」と「全角」を間違っていないか?''
 
 各引数の数字の指定は「&color(blue){半角数字};」でないといけません。これが全角数字になってはいないでしょうか?
 また引数同士は[半角スペース]で間を開けなければいけません。これも「全角スペース」で開けていないでしょうか?(もしくはスペースが抜けているか)
 
 ''(3) ユニットかパイロットを「愛称」で指定してはいないか?''
 
 これらは「名称」で指定しなければなりません。
 
 ''(4) 「(ザコ)」または「(汎用)」がついていないパイロットを複数出場させようとしていないか?''
 
 同じマップに複数登場するパイロットは、名前の最後に「(ザコ)」または「(汎用)」と付いていなければなりません。 "〜というパイロットは既に登録されています" というエラーが出るときは、このミスの可能性があります。
 
 以上、よくチェックしてみてください。
 
 関連項目:[[その他よくある質問 / よくあるエラーメッセージとその対策−ユニット・パイロットなどデータ関係のSRCエラーメッセージ>その他よくある質問/よくあるエラーメッセージとその対策#DataErr]]
 
 
 
 **Q408. 合体するユニットを出撃させても、なぜか合体できません。 [#a1bd8200]
  合体するユニットは、合体後のユニットを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」などを実行しない限り終わりません。これらのコマンドがないと、イベントラベルを越えてその次のイベントの中味まで実行されてしまい、その次のイベントは本来の起動条件を満たしたときに再び実行されることになります。
 
 ''(2) イベントを1回だけ起こすつもりだったのに、ClearEvent コマンドがない。''~
  イベントは、ClearEvent で無効にしない限り、条件を満たすたびに起動します。
 
 ''(3) エピローグイベントの中に「Continue」コマンドを使っている。''~
  Continue は“システム変数「次ステージ」に指定されたステージをセットしたあと、エピローグイベントに移る”、という動作をします。したがって、エピローグイベントのなかで使われると、何度もエピローグイベントの始めからやり直すことになります。
 
 ~ なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。確認の際はステージの最初からやり直す必要があります。
 
 
 **Q410. 起動しないイベントがあります。原因は? [#Q410]
 ~ この場合、よくある原因は次のものです。
 
 ''(1) 同じ種類のイベントを複数、作成している。''~
  同じ種類のイベントを複数作っても、条件を満たしたもののうち最初のイベントしか実行されません。これを防ぐためにはイベントラベルの最初に「*」を付けて常時イベントラベルにします。詳しくはヘルプの 「シナリオの作成」->「イベントラベル」のページの「イベントラベルの引数」と「常時イベントラベル」の項を参照してください。~
  また、イベントを一つに統合するという対策手段もあります。いろいろな起動条件がある場合は、Ifコマンドを使って条件を付けます。
 
 
 ''(2) イベント冒頭の追加条件設定にミスがあり、成立しえない条件になってしまっている。''~
  たとえば、イベント冒頭に
  If ターン数 < 3 And ターン数 > 5 Then
 と、不等号をまちがえてしまった場合などです。
 
  条件に使う変数のスペルミスやシステム変数の記憶違いなどもありえます。たとえば、第5ターンにイベントを起こそうとして、
  If タ‐ン数 = 5 Then
 としてしまうなど。音引き「ー」とすべきがハイフン「‐」になっており、この変数は(偶然、他のところで使われてない限り)いつまでたってもゼロのままで条件は成立しません。
 
 ''(3) イベントラベルの書式や引数設定にミスがあり、イベントが成立しえない。''
  誤り例:
  ターン 味方 敵:
  ターンイベントの第1引数はターン数を入れるべき場所なので、「味方」は変数名とみなされてしまいます。使っていない「変数」の値は通常ゼロだから、このイベントは起動しません。
 
  特に多いのは、破壊イベント・攻撃イベント・進入イベントなどの引数のユニット指定がまちがっていることです。そのため、存在しないユニットが破壊されたり攻撃したりした時のイベントになってしまい、けっして起動しないことになります。~
  パラメータをデータのファイルと厳密に照合してください。~
  このミスを減らす有力な方法は、データからパラメータにCopy&Pasteすることです。
 
  引数をメインパイロット名またはユニット名にすべきところを、愛称にしてしまうミスもよくあります。~
  また、(ザコ)・(汎用)をパイロット名・ユニット名で引数指定すると、個機を特定できません。イベントラベルで個機を指定するにはグループIDを用いてください。
 
  なお、イベントラベルのミスは、クイックロードでは訂正が反映されません。確認の際はステージの最初からやり直す必要があります。
 
 
 **Q411. Ifコマンドの条件分岐が思ったように働きません。または、条件分岐内のコマンドがまったく実行されません。原因は? [#n3e3b983]
 <最初にすること>~
  このトラブルにあったときには、まず、~
  &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(対象パイロット))
     End
    (二つ目の分岐の処理)
  #…(後略)
  If直前のConfirmの内容が表示されなかったときには、Ifコマンド自体が実行されていません。他の箇所の記述を検討してください。よくあるのは、(1)Ifを含むイベントが実行されていない(参考:[[Q410>#Q410]]) (2)その前に別の「If」や「Switch」があるが「EndIf」「EndSw」で閉じるのを忘れている (3)Ifがどのイベントにも属していない などです。~
  If直前のConfirmやTalkの内容が期待どおり表示されたときには、分岐処理の中身に問題があります。~
  以下は、Ifコマンド自体は期待どおり実行されているが、IfかElseIfはうまく実行されていない場合のよくあるミスについてです。
 
 <よくあるミス>~
  以下、よくあるミスを列挙します。大部分は判別式のまちがいです。~
 
 - 変数名の誤記~
  結果的に未使用の変数を使ったことになります。未使用変数の値はゼロまたは空文字とみなされます。~
 
 - And、Orの誤解~
  たとえば、
  誤:
  If 変数A = (1 Or 2) Then
  
  正:
  If 変数A = 1 Or 変数A = 2 Then
 といったまちがいです。「Or」は左右の式のどちらかが0以外なら1、ともに0ならば0を出す演算子です。誤まり例のような用法はありません。~
 
 - 変数一つだけの「条件式」の危険性~
  たとえば、変数Aが0でなければ分岐処理を実行しようとして、
  If 変数A Then
 とした場合です。これでもうまくいくかもしれませんが、“「変数A」というパイロットか存在しているかどうか”と解釈される可能性があります。下記のほうが確実です。
  If 変数A <> 0 Then
  「Not 変数A」とした場合も同様です。
 
 - 比較演算子「=」の式とSetコマンドとの混同
  If Set 変数A 1 Then
  これは、(1)Setコマンドの別記法~
 変数A = 1~
 と、(2)Ifの直後などでの判別式~
 If 変数A = 1 Then~
 との混同からくる誤解です。~
  (1)はSetコマンドの別の表記法であり、コマンドです。あいだにある「=」は代入演算子ではありません(SRC には代入演算子はありません)。~
  (2)の「=」は比較演算子であり、この「変数A = 1」は式です。~
  Ifの直後に来るのは式で、コマンドではありません。
 
 - If の書式まちがい~
  以下のようなミスがこれまで報告されています。
 -- イベントラベル書式の流用~
  # 誤まり例:
  If ターン 8 > Then
  Ifの直後に来るのは式であり、イベントラベルの書式は適用できません。また、「>」の両側には式がなければいけません。~
 -- If分岐のさいちゅうにEndIfを入れてしまう~
 -- EndIfのかわりにExitを入れてしまう~
 -- 「ElseIf if」と、よけいな「if」を入れてしまう~
 -- 「If」がない。たとえば、下記のように書いてしまっている。
  変数A = 1 Then
 
 
 **Q412. イベントについてよくある誤解 [#v0b27ebe]
  ここでは、これまで質問掲示板に出たイベント関連ミスのうち、「イベント」というものへの誤解に関係したものを取り上げます。
 
 ''(1)ステージはイベントの集まり''~
  ヘルプの「シナリオの作成」->「イベントデータ」の「イベント」の項には、「シナリオはイベントの集まりとして作られれています」と書かれています。~
  つまり、&color(darkred){ステージはイベントの集まり};だということです。~
  厳密に言えば作品データ読み込みの指定「@〜」とインクルードの指定「<〜>」だけは例外ですが、それ以外の.eveファイルの記述はすべて、イベントかサブルーチンです。
 
  以下は質問掲示板でしばしば見られるまちがいです。
    (前のイベントの中身)
  Exit
  
  If ターン数 < 5 Then
  全滅 敵:
    …(後略)
  上の「If〜Then」はどのイベントにも属していません。&color(red){イベントに属していないイベントコマンドはけっして実行されず、無意味です。};~
  ヘルプの「Ifコマンド」のページには「''コマンド''を条件付き実行」と書かれています。これは、&color(blue){イベントの中でコマンド列を実行するときに条件付き分岐を行う};という意味であり、「''イベント''を条件付き実行する」という意味ではありません。&color(darkred){「Ifコマンド」はイベントラベルの代わりにはならない};のです。イベント実行に追加条件を付けたいときは[[Q608>シナリオ作成応用編#Q608]]を参照してください。
 
 ''(2)イベントはゲーム進行上で起こった情況に応じて起動される''~
  たとえば「進入イベント」はユニットが指定された地点に入ったときに起こるイベントです。指定された地点に移動させるイベントではありません。「勝利条件イベント」はマップコマンドメニュー「作戦目的」がクリックされたときに起こるイベントです。勝利条件を設定するイベントではありません。
  ターン 5 味方:
  勝利条件:
    (イベント内容)
  exit
  これは、「“第5ターン味方フェイズ冒頭” と “メニューコマンド『作戦目的』クリック時” の両方で動作するイベント」です。けっして「第5ターン味方フェイズに勝利条件を設定するイベント」ではありません。
 
 ''(3)イベントラベル・通常ラベルとラベル指定''~
  イベントラベル・通常ラベルはともに、行頭から始まり末尾に「:」が必要です。~
  ClearEventコマンドやCallコマンドの引数としてラベルを指定するときは、「:」は必要ありません。~
  慣れないうちは混同されやすいので、ご注意ください。
 
 ''(4)イベントラベル・イベントコマンド・式・変数はそれぞれ別のもの''
  # 誤まり例1
  UseAbility パイロットA:
    (イベント?内容)
  Exit
 
  # 誤まり例2
  If ターン 5 > Then
  ・・・(後略)
 
  上の誤まり例1はイベントコマンドをイベントラベルに流用してしまったもの、例2はイベントラベルの書式をIfの判別式に流用してしまったものです。
 
  イベントラベル・イベントコマンド・式・変数などはすべて、それぞれ独自の役割りと独自の書式を持っています。「変数」が「式」ともみなせることをのぞけば、たがいに流用できるものではありません。~
  イベントラベルは、イベントファイルの基本的部品で、ゲーム上のできごとに応じてチェックされイベントを起動させます。~
  イベントコマンドは、イベントの基本的部品で、イベントで行わせたい動作内容を記述するものです。~
  式は、イベントラベルやイベントコマンドのパラメータです。~
  変数は、演算子や関数とともに式の部品で、数値や文字列などを保存・参照するものです。
 
  イベントラベル・イベントコマンド・式・変数などの理解はSRCのイベントファイル理解の基礎です。これらがあいまいだと、コマンドリファレンスなどについてしばしば、「ヘルプを読んでも理解できない」ことになります。ヘルプの「シナリオの作成」->「イベントデータ」「イベントラベル」など該当項目をよく読んで、しっかり把握してください。
 
 
 **Q413. Info関数がうまく動きません。どこにミスがあるのでしょうか? [#cce7465a]
  &color(red){このトピックは[[ヘルプ補足/Info関数>ヘルプ補足/Info関数#sa9f2a75]]とのあいだで統合または整理される可能性があります。};
 
  質問掲示板などから、過去よくあったミスを列挙します。
 
 info関数の書式:(ヘルプより)~
 > ''Info([データ区分,]データ,情報種類,…)''
 
 - &color(blue){「データ区分」を省略したところ、意図と異なる解釈をされた};~
  ふつうは「データ区分」を省略しないほうが確実です。
 
 - &color(blue){「情報種類」指定文字列と具体的データとの混同};~
  情報種類を解説したヘルプの記述で、太字に書かれているのは情報の種類を判別するための文字列です。これらはその文字列のまま、Info関数に記載します。~
  細字で書かれているのは、具体的データを記載すべきところです。~
  たとえば、「''属性''」と指定されたところは、「属性」と書かねばなりません。「属性タイプ」と指定されたところには、「突」「武」「接」などの具体的な属性を記述します。~
 
 - &color(blue){「データ」を指定していない};~
  [[ヘルプ補足/Info関数の該当部分>ヘルプ補足/Info関数#DataNuke]]を参照してください。
 
 - &color(blue){その他「情報種類」の誤解};~
  たとえば、~
 --- Info(ユニット, ユニットA, 武器, 武器A, 属性)~
 は、武器Aの属性文字列を返します。特定の属性情報のみを返すものではありません。~
 --- 「情報種類」の書式で「特殊能力名」とあるのは、特殊能力の名称のことです。「弱点=剣」など「=」とそれ以降を含めたものではありません。
 
 - &color(blue){データ区分に「ユニット」を指定したのにデータにはパイロットの名称やIDを入れてしまった。またはその逆。};~
  [[ヘルプ補足/Info関数>ヘルプ補足/Info関数#DataRei]]に例があります。
 
 - &color(blue){システムで使われている用語を変数名に使っている};~
  特にInfo関数だけで使われている用語と同じ変数名は、Info関数内で使わない限りエラーになりにくく、数も多いので要注意です。
 
 - &color(blue){特定できないデータを指定した};~
  (ザコ)(汎用)のパイロット・ユニットに対して名称で指定すると特定できません。パイロットID・ユニットID・グループIDで指定してください。
 
 - &color(blue){データ「対象(相手)ユニットID」を「対象(相手)ユニット」と書いてしまった};~
  Info関数に限りませんが、Info関数で特によくあるミスです。