XS入門
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
XS超入門的な記事。~
かなりプログラミング色が強くなるので、とりあえず、この記...
-''既存のランダムマップに、エディターの「属性を変更」で変...
ちょー初心者向けなので、プログラミング経験者や、こんなん...
#Contents
*XSとは [#za776e8e]
AoE2DEの公式ガイドによると、External Subroutines(外部サ...
エディターで作成したカスタムシナリオやランダムマップに拡...
~
が、XS自体にいくつかバグがあり、カスタムシナリオでの想定...
ここではランダムマップに焦点を絞った説明をしていく。~
**まだイメージがつきにくいんですが… [#l52197d7]
とりあえず、カスタムシナリオで出てくる、やったら強いユニ...
ランダムマップでも出せるようになる!と考えてくれれば。~
*XSの強み [#lfa65a94]
一回作ってしまえば、複数のrmsファイルに対して使いまわすこ...
またテキストベースで編集するため、慣れてしまえばカスタマ...
*XSの欠点 [#ddc21a2f]
逆に、AoE2DE標準搭載のエディターのような視覚的に判別可能...
また、攻撃力・防御力など、エディターでは簡単にいじれる項...
*推奨環境 [#c679fcf3]
とりあえずはメモ帳でもいいが、プログラミングなので、最低...
インストールが手間でなければvisual studio codeを強く推奨。~
これは、半公式アドオンであるAoE2 XS Scriptingを導入可能で...
&ref(AoE2 XS Scripting.png);~
↑これ。~
*実際に導入するまで [#fb22f5cd]
**ハローワールドまで [#h77ecbcc]
***rmsファイルの入手 [#y252e069]
まずは、xsを導入するランダムマップを決定する。~
ランダムマップについては、→[[RMS入門]](読まなくてもこの...
ここでは、既存の標準ランダムマップに入れることにしてみよ...
AoE2DEのインストール先にある、ランダムマップファイルを一...
インストール先を特に弄ってなければ、~
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
ね。~
拡張子は.rms。例えば、「道」だと、「Michi.rms」になってい...
拡張子の違うファイルや、よくわからんものも入っているので...
これをコピーしたら、
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
フォルダ内にペーストして、適当にリネーム(日本語OK)して...
***rmsファイルへのxs読み込み命令の記載 [#z9380d10]
リネームしたファイルを開き(事故防止のためにコピー元のgam...
最初の#incrude_drsの記載の下あたりに、以下を記載する。~
/* xs */
#includeXS hogehoge.xs
※hogehogeの部分は、xsに付ける予定のファイル名(半角英数)...
※プログラミングの世界では、全角スペースはバグの原因になり...
~
例えば、元のコードが、~
・
・
・
#include_drs F_seasons.inc
<PLAYER_SETUP>
・
・
・
みたいになっていたら、~
・
・
・
#include_drs F_seasons.inc
/* xs */
#includeXS hogehoge.xs
<PLAYER_SETUP>
・
・
・
となるようにして欲しい。~
なお、アラビアなど上記のような形式にになっていないものも...
1.コメントアウト箇所に書かない~
コメントアウトとは、エディターが注釈を書く場所で、rmsの場...
ここに書くと注釈扱いになるのでプログラムとして読み込んで...
2.プログラムの途中に書かない~
よくわからないものには触れないというのが、事故を防ぐ鉄則。~
たとえば、if ほにゃらら…みたいな文章の間に書くと、当然命...
~
なので、おすすめは、なるべく頭のほう。最初のコメントアウ...
***xsファイルの新規作成 [#oa64112e]
次に、xsファイルを作成する。適当なテキストエディタやコー...
// ←このように最初にスラッシュを二回打ち込むとコメント行...
/* このように、
最初にスラッシュと*を打ち込んで、最後を*とスラッシュで閉...
複数行のコメント行にできるよ。
*/
void main() {
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
~これも、まるっとコピペで貼って欲しい。全角の中括弧などは...
記載できたら、ファイルを以下の場所に保存する。~
C:\Users\Username\Games\Age of Empires 2 DE\steamID\reso...
''保存する際のファイル名は、上でrmsファイル内に記載したho...
''拡張子は.xsにしておく。''~
※とくに設定を弄ってない場合の場所~
※UserNameはwindowsで使っているusername。あなたのPCのusern...
※SteamIDは、steam→設定→アカウント→アカウント詳細を表示、...
調べるのが億劫なら、なんかかなりの桁数の数字の羅列のフ...
~
なお、AoE2DEのゲームフォルダがある、~
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
に入れても、スカーミッシュモードだと動作するが、マルチプ...
(こちらのフォルダには、定数名が記載されたconstant.xsとい...
~
~
ここまで出来たら、AoE2DEのスカーミッシュモードで、~
ゲームモード:ランダムマップ、マップスタイル:カスタム~
を選択し、rmsファイルと同名のマップを選択して、ゲームを開...
うまく読み込めているなら、ゲーム開始と同時に左上に、「Hel...
**「属性を変更」の実行 [#n0670b61]
ここでは、「民兵」の「ヒットポイント」を「500」にしてみよ...
これがうまくいけば、あとはこれの応用で属性の変更はマスタ...
***xsファイルの編集 [#s3fb34d3]
''プログラムは、すべて半角で書くこと。''~
''コメント行を作りたい場合は、ダブルスラッシュの後であれ...
~
上記で作成したxsファイルの、~
void main() {
…
}
の中が、プログラムを記載する箇所になる。このvoid main(){}...
答えを先に言ってしまうと、この中に、~
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
と記載すれば、うまくいく(最後の半角;を忘れないように)~
この際、メッセージを出すxsChatDataの上に記載しておくとよ...
~
// ←このように最初にスラッシュを二回打ち込むとコメント行...
/* このように、
最初にスラッシュと*を打ち込んで、最後を*とスラッシュで閉...
複数行のコメント行にできるよ。
*/
void main() {
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
↑完成系はこんな感じ。~
~
では、このプログラムのそれぞれの箇所について解説していく。~
まず、最初の、
xsEffectAmount();
とは、効果量に関する命令を与える際の関数になる。これは不...
この括弧の中に記載するものが、パラメータになる。パラメー...
~
次に、cSetAttributeというのが、「設定する」という命令にな...
このページは入門編なので、以下の三つについて覚えておこう。~
-cSetAttribute:設定する。
-cAddAttribute:加算する。
-cMulAttribute:乗算する。
次の「74」とは、「民兵」のIDを指す。~
このIDはゲーム内のエディターで調べることができる。~
調べ方としては、以下の方法が一番とっつきやすいか。~
~
1.「シングルプレイヤー」から「エディター」を選択~
2.「シナリオを作成」を選択~
3.「トリガー」を選択~
4.シナリオトリガー欄の下の「新規」を選択~
5・条件と効果欄の「新規効果」を選択~
6.効果リストから「属性を変更」を選択~
7.調べたいユニット、建物、英雄をオブジェクトリストの種...
8.アイテムIDの所が変化する。これがそのユニットのIDにな...
&ref(idexample.png);~
↑これで例えば、「戦士育成所」のIDは、12であることがわかる...
~
~
次の、cHitpointsとは、ヒットポイントに変更を加える、とい...
ここの項目については別途、[[attributeID]]のページにまとめ...
また、各値にどういう操作を加えたらどうなるのかについては...
~
最後の500は、効果量になる。~
ここだけ小数点を用いた値や、マイナスの値が入力可能。~
ただし、ヒットポイントに小数を用いた値を入れたりしてもう...
小数は、上記「cMulAttribute」を用いる時に、微妙な値を乗算...
同様にマイナスは、「cAddAttribute」を用いる時に、「引く」...
~
ここまで設定できたら、xsファイルを保存して、実際にスカー...
無事、民兵のヒットポイントが500になっていればOK。~
あとは作成した行を編集したり、コピペしたりして、設定項目...
~
void main() {
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
xsEffectAmount(cMulAttribute, 125, cHitpoints, 5, 7);
xsEffectAmount(cMulAttribute, 125, cMovementSpeed, 2...
・
・
・
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
↑こんな感じに、どんどん設定する項目を増やしていこう。~
インデント数を揃えると、見やすい(プログラミング経験者っ...
~
***プレイヤー毎の設定は? [#k186be2e]
上記の方法だと、すべてのプレイヤーに対し設定が反映される...
その場合は、最後に、設定したいプレイヤーIDのパラメータを...
例えば、上記の設定を、プレイヤー7のみに与えたい場合は、~
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500, 7);
とすればよい。~
※ただし、プレイヤー数が7に満たない場合、相手を7番に設定...
*マルチプレイヤー時の注意点 [#s8f8f826]
xsファイルに変更を加えて保存したら、一度AoE2DEを再起動し...
(スカーミッシュモードで検証する場合はそんなことしなくて...
また、前回やったランダムマップと同一のランダムマップをや...
この場合は、一度ランダムマップの種類を変更して、相手にチ...
もう一度xsを導入したランダムマップを選び、チェックを入れ...
それでもうまくいかない場合は、作成したrmsファイルをリネー...
切替→チェック→ダウンロードの流れでファイルを送付すること...
*その他注意事項 [#ee0f2ea6]
xsChatData("Hello AoE2DE");
は、左上に""で囲んだ範囲のメッセージを出力するという命令...
どうも日本語には対応してない感がある(日本語を入力すると...
また、半角の各種記号は、プログラムが使う記号とダブってい...
つまりは、半角英数だけ使うのが安全だよってこと。~
*練習課題 [#gd2f25cc]
追加で改行を入れて、上記で設定したような設定が民兵以外に...
Q1.「家」のヒットポイントを、「cMulAttribute」を用いて...
Q2.「木を切る人」の作業速度と運搬限度を「cMulAttribute...
※ヒント:木を切る人の男と女のID→[[町の人と内部ID]]~
作業速度と運搬限度の指定→[[attributeID]]~
全部で四行になると思います。~
Q3.プレイヤー2の「粉ひき所」のヒットポイントに、「cAd...
※ヒント:スカーミッシュモードで「マップを公開」を「すべて...
終了行:
XS超入門的な記事。~
かなりプログラミング色が強くなるので、とりあえず、この記...
-''既存のランダムマップに、エディターの「属性を変更」で変...
ちょー初心者向けなので、プログラミング経験者や、こんなん...
#Contents
*XSとは [#za776e8e]
AoE2DEの公式ガイドによると、External Subroutines(外部サ...
エディターで作成したカスタムシナリオやランダムマップに拡...
~
が、XS自体にいくつかバグがあり、カスタムシナリオでの想定...
ここではランダムマップに焦点を絞った説明をしていく。~
**まだイメージがつきにくいんですが… [#l52197d7]
とりあえず、カスタムシナリオで出てくる、やったら強いユニ...
ランダムマップでも出せるようになる!と考えてくれれば。~
*XSの強み [#lfa65a94]
一回作ってしまえば、複数のrmsファイルに対して使いまわすこ...
またテキストベースで編集するため、慣れてしまえばカスタマ...
*XSの欠点 [#ddc21a2f]
逆に、AoE2DE標準搭載のエディターのような視覚的に判別可能...
また、攻撃力・防御力など、エディターでは簡単にいじれる項...
*推奨環境 [#c679fcf3]
とりあえずはメモ帳でもいいが、プログラミングなので、最低...
インストールが手間でなければvisual studio codeを強く推奨。~
これは、半公式アドオンであるAoE2 XS Scriptingを導入可能で...
&ref(AoE2 XS Scripting.png);~
↑これ。~
*実際に導入するまで [#fb22f5cd]
**ハローワールドまで [#h77ecbcc]
***rmsファイルの入手 [#y252e069]
まずは、xsを導入するランダムマップを決定する。~
ランダムマップについては、→[[RMS入門]](読まなくてもこの...
ここでは、既存の標準ランダムマップに入れることにしてみよ...
AoE2DEのインストール先にある、ランダムマップファイルを一...
インストール先を特に弄ってなければ、~
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
ね。~
拡張子は.rms。例えば、「道」だと、「Michi.rms」になってい...
拡張子の違うファイルや、よくわからんものも入っているので...
これをコピーしたら、
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
フォルダ内にペーストして、適当にリネーム(日本語OK)して...
***rmsファイルへのxs読み込み命令の記載 [#z9380d10]
リネームしたファイルを開き(事故防止のためにコピー元のgam...
最初の#incrude_drsの記載の下あたりに、以下を記載する。~
/* xs */
#includeXS hogehoge.xs
※hogehogeの部分は、xsに付ける予定のファイル名(半角英数)...
※プログラミングの世界では、全角スペースはバグの原因になり...
~
例えば、元のコードが、~
・
・
・
#include_drs F_seasons.inc
<PLAYER_SETUP>
・
・
・
みたいになっていたら、~
・
・
・
#include_drs F_seasons.inc
/* xs */
#includeXS hogehoge.xs
<PLAYER_SETUP>
・
・
・
となるようにして欲しい。~
なお、アラビアなど上記のような形式にになっていないものも...
1.コメントアウト箇所に書かない~
コメントアウトとは、エディターが注釈を書く場所で、rmsの場...
ここに書くと注釈扱いになるのでプログラムとして読み込んで...
2.プログラムの途中に書かない~
よくわからないものには触れないというのが、事故を防ぐ鉄則。~
たとえば、if ほにゃらら…みたいな文章の間に書くと、当然命...
~
なので、おすすめは、なるべく頭のほう。最初のコメントアウ...
***xsファイルの新規作成 [#oa64112e]
次に、xsファイルを作成する。適当なテキストエディタやコー...
// ←このように最初にスラッシュを二回打ち込むとコメント行...
/* このように、
最初にスラッシュと*を打ち込んで、最後を*とスラッシュで閉...
複数行のコメント行にできるよ。
*/
void main() {
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
~これも、まるっとコピペで貼って欲しい。全角の中括弧などは...
記載できたら、ファイルを以下の場所に保存する。~
C:\Users\Username\Games\Age of Empires 2 DE\steamID\reso...
''保存する際のファイル名は、上でrmsファイル内に記載したho...
''拡張子は.xsにしておく。''~
※とくに設定を弄ってない場合の場所~
※UserNameはwindowsで使っているusername。あなたのPCのusern...
※SteamIDは、steam→設定→アカウント→アカウント詳細を表示、...
調べるのが億劫なら、なんかかなりの桁数の数字の羅列のフ...
~
なお、AoE2DEのゲームフォルダがある、~
\Program Files (x86)\Steam\steamapps\common\AoE2DE\resou...
に入れても、スカーミッシュモードだと動作するが、マルチプ...
(こちらのフォルダには、定数名が記載されたconstant.xsとい...
~
~
ここまで出来たら、AoE2DEのスカーミッシュモードで、~
ゲームモード:ランダムマップ、マップスタイル:カスタム~
を選択し、rmsファイルと同名のマップを選択して、ゲームを開...
うまく読み込めているなら、ゲーム開始と同時に左上に、「Hel...
**「属性を変更」の実行 [#n0670b61]
ここでは、「民兵」の「ヒットポイント」を「500」にしてみよ...
これがうまくいけば、あとはこれの応用で属性の変更はマスタ...
***xsファイルの編集 [#s3fb34d3]
''プログラムは、すべて半角で書くこと。''~
''コメント行を作りたい場合は、ダブルスラッシュの後であれ...
~
上記で作成したxsファイルの、~
void main() {
…
}
の中が、プログラムを記載する箇所になる。このvoid main(){}...
答えを先に言ってしまうと、この中に、~
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
と記載すれば、うまくいく(最後の半角;を忘れないように)~
この際、メッセージを出すxsChatDataの上に記載しておくとよ...
~
// ←このように最初にスラッシュを二回打ち込むとコメント行...
/* このように、
最初にスラッシュと*を打ち込んで、最後を*とスラッシュで閉...
複数行のコメント行にできるよ。
*/
void main() {
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
↑完成系はこんな感じ。~
~
では、このプログラムのそれぞれの箇所について解説していく。~
まず、最初の、
xsEffectAmount();
とは、効果量に関する命令を与える際の関数になる。これは不...
この括弧の中に記載するものが、パラメータになる。パラメー...
~
次に、cSetAttributeというのが、「設定する」という命令にな...
このページは入門編なので、以下の三つについて覚えておこう。~
-cSetAttribute:設定する。
-cAddAttribute:加算する。
-cMulAttribute:乗算する。
次の「74」とは、「民兵」のIDを指す。~
このIDはゲーム内のエディターで調べることができる。~
調べ方としては、以下の方法が一番とっつきやすいか。~
~
1.「シングルプレイヤー」から「エディター」を選択~
2.「シナリオを作成」を選択~
3.「トリガー」を選択~
4.シナリオトリガー欄の下の「新規」を選択~
5・条件と効果欄の「新規効果」を選択~
6.効果リストから「属性を変更」を選択~
7.調べたいユニット、建物、英雄をオブジェクトリストの種...
8.アイテムIDの所が変化する。これがそのユニットのIDにな...
&ref(idexample.png);~
↑これで例えば、「戦士育成所」のIDは、12であることがわかる...
~
~
次の、cHitpointsとは、ヒットポイントに変更を加える、とい...
ここの項目については別途、[[attributeID]]のページにまとめ...
また、各値にどういう操作を加えたらどうなるのかについては...
~
最後の500は、効果量になる。~
ここだけ小数点を用いた値や、マイナスの値が入力可能。~
ただし、ヒットポイントに小数を用いた値を入れたりしてもう...
小数は、上記「cMulAttribute」を用いる時に、微妙な値を乗算...
同様にマイナスは、「cAddAttribute」を用いる時に、「引く」...
~
ここまで設定できたら、xsファイルを保存して、実際にスカー...
無事、民兵のヒットポイントが500になっていればOK。~
あとは作成した行を編集したり、コピペしたりして、設定項目...
~
void main() {
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500);
xsEffectAmount(cMulAttribute, 125, cHitpoints, 5, 7);
xsEffectAmount(cMulAttribute, 125, cMovementSpeed, 2...
・
・
・
// ↓うまく読み込めると左上のメッセージ欄に表示されま...
xsChatData("Hello AoE2DE");
}
↑こんな感じに、どんどん設定する項目を増やしていこう。~
インデント数を揃えると、見やすい(プログラミング経験者っ...
~
***プレイヤー毎の設定は? [#k186be2e]
上記の方法だと、すべてのプレイヤーに対し設定が反映される...
その場合は、最後に、設定したいプレイヤーIDのパラメータを...
例えば、上記の設定を、プレイヤー7のみに与えたい場合は、~
xsEffectAmount(cSetAttribute, 74, cHitpoints, 500, 7);
とすればよい。~
※ただし、プレイヤー数が7に満たない場合、相手を7番に設定...
*マルチプレイヤー時の注意点 [#s8f8f826]
xsファイルに変更を加えて保存したら、一度AoE2DEを再起動し...
(スカーミッシュモードで検証する場合はそんなことしなくて...
また、前回やったランダムマップと同一のランダムマップをや...
この場合は、一度ランダムマップの種類を変更して、相手にチ...
もう一度xsを導入したランダムマップを選び、チェックを入れ...
それでもうまくいかない場合は、作成したrmsファイルをリネー...
切替→チェック→ダウンロードの流れでファイルを送付すること...
*その他注意事項 [#ee0f2ea6]
xsChatData("Hello AoE2DE");
は、左上に""で囲んだ範囲のメッセージを出力するという命令...
どうも日本語には対応してない感がある(日本語を入力すると...
また、半角の各種記号は、プログラムが使う記号とダブってい...
つまりは、半角英数だけ使うのが安全だよってこと。~
*練習課題 [#gd2f25cc]
追加で改行を入れて、上記で設定したような設定が民兵以外に...
Q1.「家」のヒットポイントを、「cMulAttribute」を用いて...
Q2.「木を切る人」の作業速度と運搬限度を「cMulAttribute...
※ヒント:木を切る人の男と女のID→[[町の人と内部ID]]~
作業速度と運搬限度の指定→[[attributeID]]~
全部で四行になると思います。~
Q3.プレイヤー2の「粉ひき所」のヒットポイントに、「cAd...
※ヒント:スカーミッシュモードで「マップを公開」を「すべて...
ページ名: