CORDEA blog

Android applications engineer

Age of Empires IV で Game Mode の Mod 作るときの tips

小ネタ

Age of Empires IV Mod Workshop

勝敗を決める

Core_SetPlayerVictorious/Core_SetPlayerDefeated を使う
これは新しく Mod 作った時の example code にある

注意点としては、Player が負けて AI が生き残っているような場合を作ると概要が開けず待ちぼうけをくらうことになる
なので、Player が残っていない時点で AI の勝敗も決めておくとよさそう
なお、勝者なしの場合は Core_WinnerlessGameOver を使用する

あと Defeated が呼び出されると Core_IsPlayerEliminated が変わり勝敗が判定できる
勝利条件にもよると思うので変わらなければ Player_IsAlive とかも見るとよさそう

Unit を作成・配置する

UnitEntry_DeploySquads を使う
これも example の通り

もしまだ読み込まれていない Unit (時代が今よりも先, 他国の固有, etc) の場合は、豆腐になるので読み込む必要がある
これには Squad_Precache を使う

第 1 引数は Deploy に渡している Blueprint, 第 3 引数は PlayerID
ここでいう PlayerID は integer ではない、Player_GetID で取得できる値は integer なので注意
他の引数は空でも良い (0 あるいは "")
読み込みが完了したことを検知するには GE_EntityPrecached を使用する、Global Event については下で

Unit の一覧は Content Editor 下部のオブジェクトブラウザから templates > ebps > races 以下を見ればだいたいわかる

Unit の suffix (人種コード)

Player_GetRaceName で得られる人種名は full name なので変換が必要

Race name Race code
abbasid abb
chinese chi
english eng
french fre
hre hre
mongol mon
rus rus
sultanate sul

そのうち Util_ とかで提供されるんじゃないですかね

Unit の殺害 Event

Global Event の中でもよく使いそうな
Unit (Entity) が殺されたことを Event で取得できる
Rule_AddGlobalEvent の第 2 引数に GE_EntityKilled を渡す
function に返る context の中身は

  • victimOwner
    • 被害者側の player
  • victim
    • 対象 Unit
  • victimSquad
  • killer
    • victim を殺した Unit

など。killerOwner とかもあったかも
killer と victim が一緒だと自殺 (Player による delete)

Unit が何人残っているか

Player_GetEntityCountByUnitType を使う

この Unit type が何かというと、自分もオブジェクトブラウザから調べる方法を知らない
チューニングパックを作成すると作られる attrib/*.xml で unit を表示して
extensions > type_ext > unit_type_list の中を見ると書いてあるのが Unit type
なので、村人の場合は "villager"、軍事 Unit 全体の場合は "military"

なお、特定の Unit がどの type かを知るためには Entity_IsOfType が使用できる

Console 出力系

Debug に

  • print
  • Util_PrintIf
  • Util_PrintTable

とりあえずまだ Beta なので Document も完全ではなく割と苦労します。頑張りましょう
いくつかデモで作ったので参考までに

github.com
github.com
github.com