オリジナルのランダムマップを作る【AoE2DE】

Oct. 14, 2022, 3:10 p.m. edited Oct. 28, 2022, 12:56 p.m.

#AoE2 

AoE2DE のアラビアのようなプレイするたびに変化するランダムマップは自分で作ることができる。

最強の情報源は Definitive Random Map Scripting Guide に貼ってある Google Docs の Definitive Random Map Scripting Guide。英語だけれど至れり尽くせりの内容。これを読みつつ作ればほとんど問題ない。特に、この中の項目である Syntax Skeleton のとおりにランダムマップは作られている。

ここで、いきなり自分で一からオリジナルのマップを作るのは難しいと思うので、まずはアラビアなど既存のマップをコピーして改造するのが良いだろう。まず、アラビアなどのファイルは C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\drs\gamedata_x2\Arabia.rms に存在する。これを C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\random-map-scripts\ 内にコピーする。すると、スカーミッシュやマルチでホストした際に出てくるマップを選択する画面にて、カスタムにすることで選べるようになる。

大事なことなのでもう一度。 random-map-scripts フォルダへコピーすること。 gamedata_x2 フォルダ内のファイルをそのまま書き換えないこと!

さて、かんたんな例から挙げていくと、例えば町の人の HP を 100 にするのは <PLAYER_SETUP> の下あたりに

effect_amount SET_ATTRIBUTE VILLAGER_CLASS ATTR_HITPOINTS 100

とすれば良い。また、開始食料を 1000 加えるなら

effect_amount MOD_RESOURCE AMOUNT_STARTING_FOOD ATTR_ADD 1000

とすれば良いことになる。この辺の属性に使える定数は Attribute Constants の項目に載っている。また、攻撃・防御まわりは少し複雑で What are the armor classes? Needed to calculate ATTR_ATTACK and ATTR_ARMOR を見ると良さそう(下に補足)。

さて、最も需要があるであろうオブジェクトの配置まわりだが、基本的には create_object を使えば良い。が、プレイヤーからどのくらいの距離感で配置するかはなかなか難しいので、 create_object の項目を見つつパラメータをいじって試行錯誤すると良いだろう。指定できるパラメータは Syntax Skeleton の create_object を見るとわかりやすい。

また、既存のマップを流用する際に注意すべき点として、例えば Arena.rms (アリーナ) では #define GNR_ARENAWALL のように定数を定義し、その後 #include_drs GeneratingObjects.inc により C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\drs\gamedata_x2\GeneratingObjects.inc にて GNR_ARENAWALL が定義されているなら壁を create_object するというような処理となっている。ゆえに、そういう生成を除外したいならそのような行をコメントアウト(/* */)したり削除したりする必要がある。

オブジェクト関連で重要なこととして、それぞれのオブジェクトをどう指定するかだが、いくつかのオブジェクトはクラスでまとめられている。たとえば壁というと柵や石壁など色々あるが、それらをまとめて WALL_CLASS で扱える。これらは Class Constants の項目にまとめられている。ユニット個別の定数については C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\resources\_common\drs\gamedata_x2\random_map.def に載っている。そこに載っていないユニットについては、 C:\Program Files (x86)\Steam\steamapps\common\AoE2DE\Tools_Builds\AdvancedGenieEditor3.exe を開いて、そこで Age of Empires II: Definitive Edition を選び Open することで見つけられる(使い方難しいけど)

攻撃・防御の補足

攻撃・防御はそれぞれたった 1 つの値ですべてのクラス(属性)について設定される。その方法は、対象のクラスを \(\mathit{class}\) 、設定したい値を \(\mathit{value}\) とすると、 effect_amount にて設定する値は

$$256\times\mathit{class}+\mathit{value}$$

となる。それぞれのクラスに対応する値は次のようになる(Reddit の投稿から引用)。

\(\mathit{class}\) 対応する値
Unused 0
Infantry 1
Turtle Ships 2
Base Pierce 3
Base Melee 4
War Elephants 5
Unused 6
Unused 7
Cavalry 8
Unused 9
Unused 10
All Buildings (except Port) 11
Unused 12
Stone Defense 13
FE Predator Animals 14
Archers 15
Ships & Camels & Saboteurs 16
Rams 17
Trees 18
Unique Units (except Turtle Ships) 19
Siege Weapons 20
Standard Buildings 21
Walls & Gates 22
FE Gunpowder Units 23
Boars 24
Monks 25
Castle 26
Spearman 27
Cavalry Archers 28
Eagle Warriors 29
HD Camels 30

したがって、例えば、町の人の近接攻撃を 30 にしたいなら

$$256\times 4+30=1054$$

より、

effect_amount SET_ATTRIBUTE VILLAGER_CLASS ATTR_ATTACK 1054

とすれば良い。