_main.cfgファイルができたので、今度は最初のシナリオを作成しましょう。
シナリオマップの作成
すべてのシナリオでは動作するためにマップが必要です。それでは Wesnothを起動してください。
メインメニューに"マップエディタ"というオプションメニューがあります。このオプションをクリックし、エディタを読み込ませます。
デフォルトでは、Wesnothはサイズ44 x 33(幅43、高さ33)の草原のマップを作成します。これらの設定は私たちの目的のためにはちょうど良いので何も変更しません。
カーソルを地図上に置いて、エディタウィンドウの右、ミニマップの下を見ます。カンマで区切られた2つの数字が表示されていますね。
この数字は、カーソルが現在指しているヘックスのX座標とY座標です。カーソルを別のヘックスに移動すると、座標が変更されて新しい位置が表示されます。これは、地図上で座標を見つけるための迅速かつ便利な方法です。
さて、マップはありますが、このままでは面白味がありません。いくつか新しい地形を追加する事にしましょう。
地形パレット(右側の領域の下半分にエディタで使用できる地形が表示されます)を見てください。
(スクリーンショット)
地形パレットの上部に地形カテゴリ選択ボタンがあります。ここから、地形パレットに表示される地形のカテゴリを変更することができます。
(スクリーンショット)
最初に、最初のシナリオから募集するプレイヤー側のリーダーのための城を追加しましょう。 「城」の地形カテゴリボタンをクリックします。
(城の地形カテゴリボタンのスクリーンショット)
このMAP作成のセクション、実はこれで終わっています。きっと作者が飽きたんだろうなー
というわけで、MAP作成に関してはそのうち加筆します(たぶん)。とは言えこのままMapを作らず先に進むわけにはいかないので、一番簡単な方法を記載しておきます。
そしてMAPに関してはアドオンキャンペーン「死の少女」の作者の方が詳しく解説してくれています。ここの記事が完成するまで待てない方は「私にも作れる!? Wesnoth マイキャンペーン」のマップエディタの使い方を見てください。
MAPの自動生成
マップエディタにはMapの自動生成機能が付いているので、それを利用します。
エディタ画面の左上の方に「マップ」というボタンがあるのでクリックします。プルダウンメニューが表示されるので「マップを生成」を選択します。
設定画面が出てきますので、何も考えずに「生成」ボタンをポチります。
するとMapが完成します。簡単ですね、ちゃんとリーダーや敵リーダーの出現位置や城や村などの必須地形も適度に散らばっています。早速これを保存しましょう。エディターが保存場所を聞いてきますので、第2章で作った「my_first_campaign」を探し、その中の「maps」フォルダに保存します。
下図の矢印で指した部分を2回ダブルクリック(私のパソコンはMacなのでMacでのやり方になっています)します。
こんな画面になったら、「data」フォルダをダブルクリックします。
「add-ons」フォルダが見つかるはずです。この中に「my_first_campaign」が入っています。
「maps」フォルダの中まで移動したら、Mapに「my_first_map.map」と名前を付けて保存してください。
シナリオ.cfgファイルの作成
MAPが完成したら次はシナリオファイルを作ります。
キャンペーンフォルダ内の「シナリオ」フォルダに新しいテキストファイルを作成してください。この新しいテキストファイル「my_first_scenario.cfg」という名前を付けましょう。
では、テキストエディタで "my_first_scenario.cfg"ファイルを開いてください。新しいファイルなので、今は完全に空です。しかし、私たちはそれでは終わりません!
最初のお約束
最初に、ファイルの最初の行に、このファイルがどのテキストドメインに属しているかをゲームに伝えます。
忘れているかもしれませんが、このキャンペーンのテキストドメインは「wesnoth-my_first_campaign」です。このように書いてください。
#textdomain wesnoth-my_first_campaign
この1行は、この後いくつも作成することになる .cfg ファイルのほとんどに書き込む事になります。まさにお約束の1行です。
トップレベルタグセットと属性
さて、[scenario]タグセットを追加しましょう:
[scenario] [/scenario]
[scenario]タグセットは、トップレベルのタグセット(すなわち、他のタグセットの子ではない)であり、シナリオの開始位置と終了位置をゲームに指示するためにあります。あなたのシナリオのすべての情報は、このタグセット内側に入ります。次に、[scenario]タグセット内に次のキーを含めます(各キーの前に4つのスペースをインデントすることを忘れないでください)。
id= next_scenario= name= map_data= turns=
これで、 "my_first_scenario.cfg"ファイルの内容は次のようになります。
#textdomain wesnoth-my_first_campaign [scenario] id= next_scenario= name= map_data= turns= [/scenario]
これらの属性のキーについて、今から説明します。
"id"キー
次のように、 "my_first_scenario"という値を "id"キーに割り当てます。
id=my_first_scenario
あなたは "_main.cfg"ファイルの "first_scenario"キーに割り当てた値を覚えていますか?このチュートリアルの指示に従った場合、そのキーの値は"my_first_scenario"にする必要があります。最初のシナリオの「first_scenario」キーと「id」キーの値がまったく同じであることは絶対に必須です。
どちらかに間違った大文字小文字を導入したり、いずれかのタイプの入力ミスをした場合、シナリオを読み込もうとするとエラーメッセージが返されます。
これは、"first_scenario"キーの値が最初のシナリオのIDを参照するためです。値が "_main.cfg"の "first_scenario"キーの値と正確に一致する"id"キーを持つシナリオがない場合、ゲームは最初のシナリオを見つけることができず、キャンペーンをプレイしようとすると、エラーメッセージが表示されます。
"next_scenario"キー
私たちは "next_scenario"キーに "null"という値を割り当てようとしています。
next_scenario=null
"next_scenario"キーは、 "_main.cfg"ファイルにある "first_scenario"キーに近いものです。 「first_scenario」は、その値が「first_scenario」キーの値と一致するidキーを有するシナリオを探すようにゲームに指示するのと同様に、「next_scenario」キーは、プレーヤが現在のシナリオを完了した後にどのシナリオをロードするかをゲームに指示する。 "first_scenario"キーの場合と同様に、"next_scenario"キーの値が次のシナリオのID(アンダースコア、大文字、スペルなど)と正確に一致することが必要です。そうしないと、エラーメッセージが表示されます。次のシナリオがない場合は、ここで行ったように、「next_scenario」キーに値「null」を割り当てます。これは、プレイヤーが現在のシナリオを完了すると、ゲームは次のシナリオがないことを知っているので、キャンペーンは終了します。
"name"キー
この属性については、この翻訳可能な文字列を与えます。
_「私の最初のシナリオ」
翻訳可能な文字列についてのこれまでの議論から思い出されるように、値は二重引用符で囲み、空白、アンダースコア、最初の二重引用符の直前に別の空白を含める必要があります。だからあなたの "name"属性は次のようになります。
_ "My First Scenario."
技術的には、シナリオの名前はシナリオのIDにまったく似る必要はありません。後で混乱を避けるために、シナリオIDとシナリオ名をできるだけ近いものにするをお勧めします。
"map_data"キー
このキーでは、値 "{~add-ons/my_first_campaign/maps/my_first_map.map}"を割り当てます。マップファイルパスは必ず二重引用符で囲む必要があります。そうでない場合はエラーメッセージが表示されます。これは次のようになります。
map_data="{~add-ons/my_first_campaign/maps/my_first_map.map}"
"turns"キー
このキーには「30」という数字を割り当てます:
turns=30
この属性は、プレイヤーがシナリオを完了するために必要なターン数を指定します。プレイヤーがターンが切れる前にシナリオの目標を完了していない場合、プレイヤーはシナリオを失敗します。このキーに値「30」が割り当てられているので、30ターンの終わりまでにシナリオに勝っていなければ負けになるのです。
すべてのキーに値を割り当てたので、 "my_first_scenario.cfg"ファイルの内容は次のようになります。
#textdomain wesnoth-my_first_campaign [scenario] id=my_first_scenario next_scenario=null name=_"My First Scenario." map_data="{~add-ons/my_first_campaign/maps/my_first_map.map}" turns=30 [/scenario]
サイドの定義
"side"タグ
いずれのシナリオでも、常に少なくとも1つのサイド(プレーヤー)が必要であり、通常は少なくとも1つのエネミーサイドも必要となります。このシナリオでは、プレイヤー側と敵側の2つの側面を定義する必要があります。
プレーヤー側から始めましょう。サイドを定義するには、[side]タグセットを[scenario]タグセットの子として含める必要があります。サイドを定義するために追加するすべてのキーは、この[side]タグセット内に入ります。
[scenario] [side] ここにキーを書き込みます。 [/side] [/scenario]
"side"キー
「side」キーは、このサイドのside(またはプレイヤー)番号を記録するために使用されます。通常、プレイヤーはサイド1です。
side=1
"controller"キー
「controller」キーは、この側が「human」か「ai」に属するかをWMLに伝えるために使用されます。この側面は人間に属する。
controller=human
"team_name"キー
「team_name」キーは、WMLがチームを追跡するために使用する内部変数です(ユーザーはその値を見ることはできません)。
同じチーム名のすべてのチームは同盟者とみなされます。
team_name="good"
"user_team_name"キー
「user_team_name」キーには、チーム名のテキストが付加され、それがユーザーに表示されます。画面に表示されるテキストなので、アンダースコア '_'を使用して翻訳可能とマークする必要があります。user_team_nameはteam_nameと同じである必要はなく、同じteam_nameの両側に同じuser_team_nameを持つ必要はないことに注意してください。
user_team_name= _ "My Team"
"id"キー
「id」キーには、このサイドのリーダーのID(識別子)が含まれており、ゲーム内には表示されません。このIDを使用して、WML内からリーダーにアクセスします。
id="MyLeader"
"name"キー
「name」キーは、この側のリーダーの名前を表します。これはゲーム内で見られるため、翻訳可能とマークする必要があります。
name= _ "My Leader"
"type"キー
「type」キーには、このサイドのリーダーのユニットタイプが含まれています。この例では、リーダーはElvish Ranger(エルフのレンジャー)です。
type="Elvish Ranger"
"unrenameable"キー
「unrenameable」キーを「yes」に設定すると、ユーザーはゲーム中のリーダーの名前を変更できなくなります。ほとんどのシナリオでは、これは「yes」に設定する必要があります。
unrenameable=yes
"canrecruit"キー
「canrecruit」キーを「yes」に設定すると、このリーダーはユニットを雇用できます。
canrecruit=yes
"recruit"キー
「recruit」キーは、このリーダーが雇用できるすべてのユニットをコンマで区切ったリストです。私たちのElvish Ranger(エルフのレンジャー)は、以下の記述によってElvish Fighter(エルフの戦士)、Elvish Archer(エルフの射手)、Elvish Shaman(エルフの女呪術師)を雇用することができます:
recruit="Elvish Fighter, Elvish Archer, Elvish Shaman"
"gold"キー
「gold」キーは、このサイドの開始金額に設定されています。このサイドには100ゴールドが与えられます。(難易度レベルに基づいて異なる金額の開始金を与えることは可能ですが、現時点では対象外です。)
gold=100
作成するすべてのサイドでこのプロセスを繰り返します。それでは単純な「ai」のサイドを追加しましょう。
[side] side=2 controller=ai team_name="bad" user_team_name= _ "Bad Guys" id="EnemyLeader" name= _ "My Villain" type= "Orcish Warrior" unrenameable=yes canrecruit=yes recruit="Orcish Grunt, Orcish Archer, Orcish Assassin, Wolf Rider" gold=100 [/side]
これで、 "my_first_scenario.cfg"ファイルの内容は次のようになります。
#textdomain wesnoth-my_first_campaign [scenario] id=my_first_scenario next_scenario=null name=_"My First Scenario." map_data="{~add-ons/my_first_campaign/maps/my_first_map.map}" turns=30 [side] side=1 controller=human team_name="good" user_team_name= _ "My Team" id=MyLeader name= _ "My Leader's Name" type="Elvish Ranger" unrenameable=yes canrecruit=yes recruit="Elvish Fighter, Elvish Archer, Elvish Shaman" gold=100 [/side] [side] side=2 controller=ai team_name="bad" user_team_name= _ "Bad Guys" id="EnemyLeader" name= _ "My Villain" type= "Orcish Warrior" unrenameable=yes canrecruit=yes recruit="Orcish Grunt, Orcish Archer, Orcish Assassin, Wolf Rider" gold=100 [/side] [/scenario]
最初のシナリオを作成する次のステップは、ゲーム内でトリガするイベントを追加することです。