ドキュメント リファレンス
データの出どころ
データの種類ごとの取得元と精度。「何かおかしい」と思ったら、まずこのページを確認してください。
| データ | 取得元 | 精度 |
|---|---|---|
| ユニット、資源、オーダー、スキル、バフ、インベントリ | ランタイムが 50 ms ごとにプッシュするワールドブロック | 発行周期(16 ms まで調整可能) |
| ダメージ、キルイベント | ランタイムがゲームスレッド上でその場で記録。1 回ごと | 即時 |
| その他のイベント(出現、死亡、オーダー変更、レベルアップ……) | 連続する 2 回の発行を比較 | 発行周期 |
| 生産表(訓練 / 研究 / 建設 / アップグレード) | エンジンの生産アビリティのタイマーフィールド + ランタイムによる経過時間の累積 | 約 ±0.2 ゲーム秒 |
| 戦闘ステータス、相性表 | ゲーム付属のデータ表(あなたのマシンのゲームから抽出) | アイテム、オーラ、バフによる補正は含まない |
| 経路探索 | エンジンの地形の通行可能性(1 マス 128)+ 樹木 + 建物の占有範囲、SDK 側の A* | 1 マス。1 マスより狭い隙間は通れないと判定 |
| ゲーム内時刻 | JASS GetFloatGameState(GAME_STATE_TIME_OF_DAY) | 発行周期 |
| 可視性 | ランタイムがユニットごと・プレイヤーごとに計算した可視性マスク | 発行周期 |
| テクノロジー数、実行可否、金鉱の残量 | ファストレーンのクエリで、エンジンに直接問い合わせ | 即時 |
ゲームデータはコードと一緒に配布しない
ユニット表、スキル、アイテム、ヒーロー、バフ、ダメージ相性表などは Blizzard のゲームファイルに由来するため、リポジトリには含めません。Farsight の「コントロールセンター」でゲームディレクトリを設定すると、あなた自身のゲームから自動で抽出されます。手動で実行することもできます。
python data/tools/extract_game_data.py
抽出結果は data/game/(git には含めない)に置かれます。元の .slk / .txt と、整形済みの units.json、names.json、skills.json、items.json、heroes.json、buffs.json です。
具体的な数値
| 項目 | 値 |
|---|---|
| 1 日 | 480 ゲーム秒(昼と夜がそれぞれ 240 秒)、1 時間 = 20 ゲーム秒。開始時は朝 8 時 |
| 昼 | 6:00 〜 18:00 |
| アーマー係数 | 0.06(ゲームのデータ表より) |
| ワールドブロックの容量 | プレイヤー 16、ユニット 1024、ユニット詳細 256、地面のアイテム 256、生産 128 |
| 樹木 | 破壊可能オブジェクト最大 4096、2 秒ごとに更新 |
| イベントリング | 8192 件。読み取りが遅すぎると取りこぼす(SDK が検出可能) |
| マップのマス | 1 マス 128 ゲーム単位、最大 256 × 256 |
実測で校正した例
- 生産時間:ピーザント 14.9、ファーム 34.9、Iron Forged Swords 59.9 ゲーム秒。ランタイムがプッシュした値と一致(誤差 0.2 秒未満)。
- 戦闘ステータスをゲーム内のパネルと照合:パラディン HP 650、マナ 255、アーマー 3.9、攻撃力 24 〜 34。攻撃アップグレード 1 段階のフットマン 13 〜 15。
- エンジンのダメージイベントにあるアーマー適用前のダメージ(14 / 15 / 15)は、
stats()が計算した範囲に収まっている。 - 経路探索:Echo Isles 116 × 88 マス、相手のタウンホールまでの地上距離 10642(直線 9856)、グリッド構築 18 ms、A* 1 回約 1 ms。