はじめに
ここでは XVM のカスタマイズについて解説していきます。
対象とする XVM のバージョン
ここでは XVM 公式の最新バージョンを対象としています。 nightly builds や各種 mod pack にのみ含まれているものは原則として扱いませんが、 公式バージョンと仕様が一致している範囲では適用可能ですので、適宜読み替えるなどしてください。
なお、記事執筆時点での XVM 公式の最新バージョンは 6.4.2.1 です (一部画像に古いバージョンのものがあります)。
XVM のフォルダ構成
XVM のフォルダ構成はおおむね以下のようになっています。 設定ファイルは res_mods\configs\xvm 以下にまとまっていて、デフォルトの設定は default フォルダの中にあります。 設定をカスタマイズする場合は default フォルダにある設定ファイルを直接編集してもよいのですが、 いつでも元の設定に戻せるように別のフォルダ (custom など) にコピーしてそちらを編集するのがおすすめです。 設定ファイルはフォルダ単位で参照先を切り替えることができます。
C:\Game\World_of_Tanks\res_mods
├─0.9.15.1.1
│ ├─gui
│ └─scripts
├─configs
│ └─xvm
│ ├─default
│ ├─py_macro
│ └─sirmax
└─mods
├─packages
├─shared_resources
└─xfw
設定ファイル
設定ファイルは拡張子が ".xc" で JSON 風のフォーマットになっています。コメントが記述できるように拡張されており、"//" 以降行末までがコメントとして扱われます。
データはキーと値が ":" で区切られます。値は "{}" で括ったデータ構造を入れることができ、階層を持たせることができます。
{
"def": {
"al": "0x72E500",
"en": "0x867EE5"
}
}
この文書では、上の例で "def" の中にある "al" を指すときに "def.al" と表現します。
付属ドキュメント
XVM 付属のドキュメントとして readme-en.txt と macros.txt, macros-hangar.txt があります。いずれも res_mods\mods\shared_resources\xvm\doc にあります。
表示の書式
テキストの表示には HTML に似た書式が使用できます。 ActionScript3 の htmlText プロパティ でサポートされている HTML タグが使用可能です。
ログ
ログは WoT のインストールフォルダの python.log, xvm.log に出力されます。 動作がおかしいときは内容を確認してみてください。
各コンポーネント
プレイヤーパネル (playersPanel.xc)
プレイヤーパネルは戦闘画面の左右に表示されるプレイヤー一覧とそれに付随する情報欄で、 playersPanel.xc で定義されています。
プレイヤーパネルの構造
プレイヤーパネルは standardFields と extraFields という2つの表示領域、そして車輌アイコンと小隊マーカーで構成されています。 standardFields は標準の表示領域で nick, vehicle, frags の3つの表示領域が含まれます。 extraFields は拡張用の表示領域で複数の表示が重なりあっています (位置を指定して重ならないように見せることも可能です)。
さらに、オリジナルのクライアントと同様に表示モードとして none, short, medium, medium2, large の5種類のモードがあり、表示モード毎に設定を行うようになっています。
表示領域は味方側 (Left) と敵側 (Right) それぞれについて設定し、さらに4つの表示域に分かれています。
- nickFormatLeft, nickFormatRight
- プレイヤー名と戦績を表示する領域
- vehicleFormatLeft, vehicleFormatRight
- 車輌名を表示する領域
- fragsFormatLeft, fragsFormatRight
- 撃破数を表示する領域
- extraFieldsLeft, extraFieldsRight
- XMQPサービスマーカー (味方側のみ)、被スポットマーカー (敵側のみ)
例えば、味方のプレイヤー名の表示は nickFormatLeft で設定されており、 large モードでの完全名は playersPanel.large.nickFormatLeft になります。
プレイヤーパネルの表示位置詳細
各プレイヤー毎に高さ 25px の領域が割り当てられていて、その中にプレイヤーに関する情報を表示するようになってます。
各表示領域の幅は以下のようになっています。 extraFields に表示するコンポーネントは位置指定が可能で、 bindToIcon が false のときスクリーンの左端から、 bindToIcon が true のとき車輌アイコン (vehicleIcon) の左端からの指定になります (左パネルの場合)。
squadIcon, vehicleIcon, vehicleLevelIcon は WoT クライアントオリジナルのものが表示されるので、 表示を入れ替えるためには removeSquadIcon, iconAlpha, vehicleLevelAlpha などでオリジナルの表示を消す必要があります。
車輌アイコンの位置は standardFields の内容によって変動します。 プレイヤー名の幅は通常可変で nickMinWidth, nickMaxWidth の範囲で変動します。 車輌アイコンの位置を固定したい場合は nickMinWidth と nickMaxWidth に同じ値を設定します。
また、公式ドキュメントに記述は見当たらなかったのですが standardFields と車輌アイコンの間に 13 pixel 程度のマージンがありました (実測による)。
| squadIcon | 24 |
| frags | 24 (fragsWidth で変更可能) |
| nick | 46~158 可変 (下限と上限をそれぞれ nickMinWidth, nickMaxWidth で変更可能 |
| vehicle | 72 (vehicleWidth で変更可能) |
車輌マーカー (markersAliveNormal.xc)
表示位置詳細
下の図はXVMデフォルトの車輌マーカーです。
原点の正確な位置は不明ですが、各項目の設定値と表示位置から逆算しておおよその位置を算出しています。 図では vehicleIcon (ここでは軽戦車記号) の中心よりやや下の位置に原点がきています。
文字列の参照点は下部になっているので、位置指定をした点の上部に文字が描画され、 水平方向の位置は textFormat.align の値によります。 ここでは playerName, tankName, tankHp, rating が文字列で、 playerName, tankName, tankHp の align が center, rating の align が right です。 playerName は小隊のメンバーかランダム戦以外でしか表示されません。 また、rating は文字として描画されています (字形は XVM フォントにあります)。
healthBar の参照点は左上なので、位置指定をした点から右下に向かって描画されます。 デフォルトでは width: 70, height: 12, border.size: 1 なので、 境界を含めて幅72, 高さ14の矩形が描画されます。
その他の図形の参照点は上部中央になります。
マクロ
マクロの解説は作成中です。 User:Chirimen/XVMマクロ を参照してください。
設定例
味方や敵の表示色を変える
WoT にはカラーバリアフリーのための設定がありますが、XVM には引き継がれません。 設定ファイル colors.xc で表示色を変更し、カラーバリアフリー対応っぽくすることは可能です。
具体的には colors.xc の def.al, def.en, colors.system.ally_dead, colors.system.ally_blowedup, colors.system.enemy_dead, colors.system.enemy_blowedup を以下のように変更します (赤字の部分です)。
{
"def": {
"al": "0x72E500", // 味方 / (HSV = 90:100:90)
"sq": "0xFFB964", // squadman
"tk": "0x00EAFF", // teamKiller
"en": "0x867EE5", // 敵 / (HSV = 245:45:90)
"pl": "0xFFDD33", // player
// 略
},
"colors": {
"system": {
"ally_alive": ${"def.al"},
"ally_dead": "0x4C9900", // (HSV = 90:100:60)
"ally_blowedup": "0x336600", // (HSV = 90:100:40)
"squadman_alive": ${"def.sq"},
"squadman_dead": "0xCA7000",
"squadman_blowedup": "0xA45A00",
"teamKiller_alive": ${"def.tk"},
"teamKiller_dead": "0x097783",
"teamKiller_blowedup": "0x096A75",
"enemy_alive": ${"def.en"},
"enemy_dead": "0x565499", // (HSV = 245:45:60)
"enemy_blowedup": "0x3B3866", // (HSV = 245:45:40)
"ally_base": ${"def.al"},
"enemy_base": ${"def.en"}
},
// 略
実際に表示されるマーカーは半透明なので、指定のカラーコードとは違った色合いに見えます。 特に dead や blowedup の色合いは暗くて確認しづらいので alive 時の色相 (H) と彩度 (S) を固定して明度 (V) を落とす形にして色を決定しました。
左下の図は XVM でカラーバリアフリーを設定したときのものです。 車輌の輪郭や車輌マーカーは青くなっていますが HP など車輌情報の色は赤いままです。 上記の設定をすることで右下の図のように統一感を持たせることができます。
車輌マーカーをカスタマイズする
車輌マーカーのカスタマイズは、表示内容だけでなく位置も合わせて調整する必要があります。
通常の車輌マーカーは markersAliveNormal.xc で定義されています。修正内容は以下を参照してください。
設定ファイル markersAliveNormal.xc
{
"def": {
// 略
"tankName": {
// 略
"y": -51, // デフォルトは -36、playerName と位置を入れ替え
// 略
},
"playerName": {
// 略
"y": -36, // デフォルトは -51、tankName と位置を入れ替え
// 略
"format": "{{name}} <font alpha='#A0'>{{clan}}</font>" // プレイヤー名とともにクラン名を常に表示
},
"tankHp": {
// 略
"y": -19, // デフォルトは -20、位置調整で少し下げる
// 略
"format": "<font size='{{ally?0|{{battletype?11|0}}}}'>[{{position}}]</font> {{hp}} / {{hp-max}}" // 現在HPとともに元のHPも表示、クラン戦などでは通番も表示 (敵のみ)
},
"rating": {
// 略
"enable": false, // HPバー右側のレーティング表示ボックスを非表示に
// 略
},
"xmqpEvent": {
// 略
"enable": false, // xmqpイベントを表示しない
// 略
},
"position": {
// 略
"enable": false, // 通番は tankHp で表示したのでここでは表示しない
// 略
}
},
"ally": {
// 略
"healthBar": {
// 略
"x": -41, // デフォルトは -36。レーティング欄を非表示にした分左にずらす
// 略
"width": 80, // デフォルトは 70。レーティング欄を非表示にした分拡大 (+10px) させる
// 略
},
"levelIcon": {
"enable": true,
"x": 0,
"y": -81, // デフォルトは -21
"alpha": 100
},
// 略
},
"enemy": {
// 略
"healthBar": {
// 略
"x": -41, // デフォルトは -36。レーティング欄を非表示にした分左にずらす
// 略
"width": 80, // デフォルトは 70。レーティング欄を非表示にした分拡大 (+10px) させる
// 略
},
"levelIcon": {
"enable": true,
"x": 0,
"y": -81, // デフォルトは -21
"alpha": 100
},
// 略
"textFields": [
${ "def.tankName" },
${ "def.playerName" }, // 敵のプレイヤー名も表示
${ "def.tankHp" },
// 略
]
}
}
プレイヤーパネルをカスタマイズする
プレイヤーパネルは戦闘画面の左右に表示されるプレイヤー一覧とそれに付随する情報欄で、 playersPanel.xc で定義されています。
戦績表示
読みやすいように <!-- --> を入れて改行していますが、実際には " (ダブルクォート) で囲まれた箇所は1行です。 nickFormatLeft などではマクロや html の font タグのようなものが使用できます。 ダブルクォートで囲まれた文字列中で改行したい場合は html と同様に <!-- --> がコメントとして無視されるので 改行個所が <!-- --> の中に位置するようにします。
"{{", "}}" で囲まれた部分は XVM のマクロです。 マクロの一覧は res_mods\mods\shared_resources\xvm\doc\macros.txt にあります。
"large": {
// 略
"nickFormatLeft": "<font face='mono' size='{{xvm-stat?13|0}}' alpha='{{alive?#FF|#80}}'><!--
--><font color='{{c:r}}'>{{r}}</font> <font color='{{c:kb}}'>{{kb%2d~k|--k}}</font><!--
--><font color='{{c:winrate}}'>{{winrate%2d~%|--%}}</font></font><!--
--> {{name%.15s~..}} <font alpha='#A0'>{{clan}}</font>",
"nickFormatRight": "<font alpha='#A0'>{{clan}}</font> {{name%.15s~..}}<!--
--><font size='{{battletype?13|0}}'>{{position<10? }}[{{position}}]</font><!--
--><font face='mono' size='{{xvm-stat?13|0}}' alpha='{{alive?#FF|#80}}'><!--
--><font color='{{c:winrate}}'>{{winrate%2d~%|--%}}</font><!--
--><font color='{{c:kb}}'>{{kb%2d~k|--k}}</font> <font color='{{c:r}}' >{{r}}</font></font>",
// 略
xvm-stat
xvm の統計値が利用可能な場合に true になります。 {{xvm-stat?13|0}} は xvm-stat が true の場合に 13、false の場合に 0 になるので つまり <font size='{{xvm-stat?13|0}}'>...</font> は xvm の統計値が利用できる場合のみ font タグで囲まれた部分を表示するという意味になります。
alive
生存している場合に true 、そうでない場合は false です。 <font alpha='{{alive?#FF|#80}}'>...</font> は 撃破されている場合の不透明度を 50% に下げます。
c:r, r
プレイヤーレーティングの色および数値を表します。 xvm の公式サイトの設定で指定したレーティング (WN8 など) が使われます。
c:kb, kb
1000戦単位での戦闘数の色表示、および数値です。{{kb%2d~k|--k}} は戦闘数の末尾に単位として k をつけ、 戦闘数が取得できない場合 (XVMのサイトにデータがない場合) は --k という表示になります。
c:winrate, winrate
勝率の色表示、および数値です。 {{winrate%2d~%|--%}} で勝率を % 表示、勝率が取得できない場合は --% とします。
battletype
戦闘タイプを文字列で取得します。ランダム戦は "" (空文字列) です。 {{battletype?13|0}} はランダム戦では 0 、ランダム戦以外では 13 になりるので <font size='{{battletype?13|0}}'>...</font> ではランダム戦以外でのみ表示します。 battletype が返す文字列は texts.xc に記述されています。
position
戦闘開始時におけるプレイヤーパネルでの位置です。 {{position<10? }} は 1 ~ 9番目までの場合に (表示位置調整のための) 空白 (EN SPACE) を表示する指定です。
name, clan
プレイヤー名およびクラン名 (ブラケットで囲まれた短縮名) です。 {{name%.15s~..}} は 15文字になるように切り詰め、末尾に .. をつけます。
通番の表示
味方と敵のそれぞれに通し番号を付けます。戦闘中に撃破されて表示順が入れ替わっても各車輌に最初につけた番号は変わりません。
通番はマクロ position で取得できますが、
このマクロは車輌マーカーに対しては動作しないので通番はプレイヤーパネルにしか表示させることができません (XVM-6.4.0 から可能になりました)。
<font size='{{battletype?13|0}}'>{{position<10? }}[{{position}}]</font>
上記の指定を nickFormatRight の挿入したい位置に追加しますが、少し細かく解説します。
<font size='{{battletype?13|0}}'>{{position<10? }}[{{position}}]</font>
ランダム戦ではあまり必要ないので非表示にしています。マクロ battletype はランダム戦では空文字列になるので、{{battletype?13|0}} は、ランダム戦では 0 に、それ以外のクラン戦などでは 13 に評価されます。したがって、ランダム戦ではフォントサイズが 0 になり表示されなくなります。
<font size='{{battletype?13|0}}'>{{position<10? }}[{{position}}]</font>
車輌数が1桁の場合は位置調整のための空白文字を追加します。空白文字にはいろいろな種類がありますが、ここでは数字と幅が同じになるよう   (EN SPACE) を指定します。
残HPバーの作成
playersPanel.xc に車輌マーカーにあったような helthBar の機能はありませんが、 extraFieldsLeft と extraFieldsRight の記述を工夫すれば HP 残量のグラフを表示させることができます。
ここでは、車輌名の下の隙間に高さ 2px 、輪郭を含めて 4px の残HPバーを表示させることにします。
定義は hpIndicatorBG と hpIndicator の2種類で、前者がグラフの背景、後者がグラフ本体です。 playersPanel.xc の前半部分、xmqpServiceMarker の定義の後にこれらの定義を追加し、 後半部分の extraFieldsLeft, extraFieldsRight で呼び出します。
背景を表現する矩形の上に残量を示す小さい矩形を重ねてグラフに見えるようにしました。 背景の矩形はフルHPとグラフの輪郭を表します。 背景として幅68px、高さ4pxの矩形を表示し、その上にHPバーとなる高さ2pxの矩形を表示します。HPの長さは 100% 時に66pxとなるようにしています。背景の方を上下左右1px大きくしているのは境界線と兼用させるためです。車輌名の下部に HP バーが表示されるように、車輌アイコンからの相対位置指定で位置を調整しています。
{
// 略
"xmqpServiceMarker": {
// 略
},
// HP indicator definisions.
// バーの背景
"hpIndicatorBG": {
"enabled": "true",
"x": -85, "y": 21, "bindToIcon": true,
"height": 4, "width": 68,
"bgColor": "0", "alpha": "{{alive?50|0}}"
},
// バーの本体
"hpIndicator": {
"enabled": "true", // ランダム戦では false に
"x": -84, "y": 22, "bindToIcon": true,
"height": 2, "width": "{{hp-ratio:66}}",
"bgColor": "{{c:system}}", "alpha": "{{alive?80|0}}"
},
"playersPanel": {
// 略
"large": {
// 略
"extraFieldsLeft": [
// 略
${"xmqpServiceMarker"},
${"hpIndicatorBG"},
${"hpIndicator"}
],
"extraFieldsRight": [
// 略
${"enemySpottedMarker"},
${"hpIndicatorBG"},
${"hpIndicator"}
]
}
}
}
- 注: XVM-7.8.2 で h, w による高さ、幅の指定が有効でなくなったので height, width に変更しています。
ガレージ日付表示の書式修正
左下のキャプチャは XVM のデフォルト設定でガレージに表示される時計です。 見てわかるように日付部分の書式がおかしくなっています。
英語版のクライアントだと "28 Nov 2015" と表示されているところの月名である "Nov" を中途半端に "11月" と日本語化したために残念なことになったわけです。
clock.xc の clock.format で日付のフォーマットを指定している以下の部分を
<font size='15'>{{D%02d}} {{MM}} {{Y}}</font>
下のように変更すれば右下のキャプチャの表示になります。
<font size='15'>{{Y}} 年 {{MM}} {{D}} 日</font>
カメラ設定 (ズームなど) の変更
XVM のズーム関連機能の設定は camera.xc で行います。 デフォルトでは無効になっているのでまずこれを有効にします。 設定場所は camera.enabled です。
{
"camera": {
// 略
"enabled": true,
// 略
カメラ設定は各モード毎に行うようになっています。 モード名と簡単な説明を以下の表にまとめました。 distRange がカメラを動かせる範囲で、 表に示すように arcade モードの初期値では 2 から 25 の範囲で動かせます。 この 25 を大きくすればカメラを引くことができます。
| モード名 | distRange 初期値 | 概要 |
|---|---|---|
| arcade | [2, 25] | 通常の3人称視点のモード |
| postmortem | [2, 25] | 自車輌が撃破された後のモード |
| strategic | [40, 100] | 自走砲の俯瞰視点モード |
スナイパーモードのズーム設定は設定方法が異なり、 zooms にカメラの倍率を指定します。 倍率は範囲ではなく、有効となる倍率を列挙します。 初期値は [2, 4, 8] で、 これはズーム倍率として 2倍、4倍、8倍 をそれぞれ選択可能という意味です。
| モード名 | zooms 初期値 | 概要 |
|---|---|---|
| sniper | [ 2, 4, 8 ] | スナイパーモード |
ズームアウトとしてカメラを引く設定も、スナイパーモードでのズームイン設定も、 極端に大きな値だとかえって使いにくくなります。 最初は控えめな設定にしておいて、 慣れてきて物足りなくなったら自分好みの設定にするのがよいでしょう。
{
"camera": {
// 略
"enabled": true,
// 略
"arcade": {
// 略
"distRange": [2, 75],
// 略
},
"postmortem": {
// 略
"distRange": [2, 250],
// 略
},
"strategic": {
// 略
"distRange": [40, 150],
// 略
},
"sniper": {
// 略
"zooms": [2, 4, 8, 12, 16, 20, 24],
// 略
}
}
}
その他の機能変更
課金弾、装備品の購入デフォルトをクレジットに
APCR などの課金弾は購入時のデフォルトがゴールドになっているので、 うっかりゴールドを使ってしまった、という人も少なくないでしょう。
そんな失敗も XVM なら防ぐことができます。 設定ファイル hanger.xc の中の hanger.defaultBoughtForCredits を true に設定してください。 課金弾などの購入時デフォルトがクレジットになります。
{
"hangar": {
// 略
"defaultBoughtForCredits": true,
// 略
弾薬購入忘れの防止
砲や砲塔を変更した後、弾薬の自動補給に失敗していることに気がつかずそのまま出撃…。 そんな失敗を未然に防ぎます。
設定ファイル hanger.xc の中の hanger.blockVehicleIfLowAmmo を true に設定すると、 弾薬が少ないときは出撃できなくなります。 判定の基準値はその下の hanger.lowAmmoPercentage で設定します (デフォルトは20%)。
{
"hangar": {
// 略
"blockVehicleIfLowAmmo": true,
"lowAmmoPercentage": 20,
// 略
戦闘画面での勝率予想表示
戦闘画面の左上に現在の勝率予想を表示します。 設定個所は battleLabelsTemplates.xc の def.winChance.enabled です。
{
"def": {
"winChance": {
"enabled": true,
// 略






