ECLIPTICA ACT

ECLIPTICA Advanced Combat Tracker

VRChat ワールド ECLIPTICA 専用の、戦闘ログ解析ダメージメーター & HUD オーバーレイです。 VRChat が書き出すログをリアルタイムに読み取り、与ダメージ・DPS・被ダメージ・死亡数・ヘイト対象を 集計して、ゲーム画面の上に重ねて表示します。

概要

ダッシュボード(メインウィンドウ)の全体像
ダッシュボード(メインウィンドウ)の全体像

できることは次のとおりです。

内容
リアルタイム集計 与ダメージ / 10秒 DPS / ラン平均 DPS / 被ダメージ / 最大クリティカル / 死亡数、そしてフェーズ 0 からどれだけ強くなったかを自動で記録(ダッシュボードの見方
HUD オーバーレイ ゲーム画面の上に半透明・クリック透過のパネルを 8 枚重ねて表示(HUD オーバーレイ
同じパネルを VR 内にも HUD を SteamVR オーバーレイとしてヘッドセット内に表示し、コントローラで配置できる(VR オーバーレイ
トークンとモブ ウェーブごとのトークン取得数と取り残し(トークン)、このセッションで湧いた敵の一覧(ダッシュボードの見方
ターゲット通知音 自分が狙われた瞬間に音で知らせる。MP3 など好きな音源を指定できる(ターゲット通知音
パーティ共有 同じルームIDのメンバーと DPS をリアルタイム共有(お試し提供中 / パーティ共有
記録と出力 セッションが終わるたびに JSONL の記録を自動保存。手動での全期間エクスポートも可能(セッション記録 / ラン結果のエクスポート

VRChat 側には一切干渉しません。ログファイルを読むだけのツールで、ゲームへの入力もメモリ操作も行いません。

先に読んでください: ECLIPTICA が出す情報の一部は、VRChat をデバッグログ有効で 起動していないとログファイルに残らないため、その分の機能が使えません。 VRChat 側の設定 を参照してください。

配布ページ: BOOTH ショップ

動作環境

  • Windows 10 / 11
  • VRChat(Steam 版 / スタンドアロン版どちらでも可)
  • 追加のランタイム不要(単体 exe)

デスクトップでも VR でも使えます。 デスクトップモードではゲーム画面の上に HUD ウィンドウを 重ね、VR では同じパネルを SteamVR 経由でヘッドセット内に描画します(VR オーバーレイ)。 デスクトップモード限定ではなくなりました。

インストール

  1. BOOTH ショップから入手し、ZIP を展開して 書き込み可能な好きなフォルダに置きます(デスクトップやドキュメント配下など)。 インストーラーはありません。展開したフォルダーから起動してください (ZIP の中から直接起動すると動きません)。
  2. Ecliptica ACT.exe をダブルクリックで起動します。初回は Windows SmartScreen の警告が 出ることがあります。その場合は [詳細情報]→[実行] を選んでください。
  3. 設定ファイルとセッション記録は %APPDATA%\dev.rtail\eact\ に作られます (設定リファレンス)。

アンインストールは展開したフォルダーを削除するだけです。設定とセッション記録も消したい場合は %APPDATA%\dev.rtail\eact\ フォルダを削除してください。

VRChat 側の設定

できればやっておいてください。 この設定が無くてもアプリは動きますが、 一部の機能が使えません —— ECLIPTICA が出す情報の一部は、VRChat を デバッグログ有効で起動していないとログファイルに残らないためです。

1. 起動オプションを設定する

Steam 版の場合:ライブラリで VRChat を右クリック →[プロパティ]→[起動オプション] に 以下をそのまま貼り付けます。Steam 以外(ショートカットから起動している)場合は、 ショートカットの「リンク先」の末尾に半角スペースを空けて追記してください。

--enable-udon-debug-logging

アプリに任せることもできます。 メインウィンドウ左上の [▶ VRChat を起動] は、 このオプションを付けた状態で Steam 経由で VRChat を起動し、そのまま ECLIPTICA へ向かいます。 Steam が見つからない場合はステータス欄にそう表示されるので、そのときは上記の手順で 自分で設定してください。

2. ログ出力を最大にする

起動オプションに加えて、VRChat 内の設定でログ出力レベルを最大にしておきます。 VRChat のメニューから Settings → Debug を開き、ログ関連の項目を有効(最大)にしてください。

VRChat の Debug 設定でログ出力を最大にする
VRChat の Debug 設定でログ出力を最大にする

使い始める

できれば VRChat を先に起動してください。 ユーザー名の自動入力はログから読むため、 ログが既にある状態でないと働きません。

  1. VRChat を起動して ECLIPTICA に入る。 アプリがログからあなたのユーザー名を拾って「対象ユーザー」に自動入力します。 VRChat が起動していないと空欄のままです。 アプリの [▶ VRChat を起動] から起動しても構いません (VRChat 側の設定)。
  2. Ecliptica ACT.exe を起動する。 右上に 監視中: output_log_....txt と出れば、ログの監視が始まっています。
  3. 戦闘する。 ダメージを与えると各数値が動き出し、HUD にも反映されます。

ゲームの途中で起動しても大丈夫です。 アプリは起動時にログを遡って、いま入っている セッションを、ログに書かれている時刻のまま読み直します。30 分潜ってから起動しても、 その 30 分がそのまま表示されます。遡る範囲は今のセッションだけなので、前のインスタンスの 戦績が混ざることはありません。

VRChat を再起動して新しいログファイルができた場合は、アプリが自動でそちらに切り替わります。

アップデート通知

アプリは起動時に新しいバージョンがあるかを確認します。あればメインウィンドウ上部に バナーが出て、[ダウンロード] でダウンロードページを開けます ([閉じる] でその回だけ非表示にできます)。

通知するだけの機能です。 自動でのダウンロードやインストールは行いません。 更新は新しい ZIP を自分で取得して展開してください。

  • 最新の場合、および確認に失敗した場合は、起動時のチェックは何も表示しません。
  • 手動で確認したいときは、設定ウィンドウ 一般 タブの [更新を確認] を使います。 こちらは結果をステータス欄に表示します。
  • 実行中のバージョンは、メインウィンドウ右下に表示されています。

ダッシュボードの見方

メインウィンドウは、ヘッダー + 4 つのセクションで構成されています。

ダッシュボードの各エリア
ダッシュボードの各エリア

ヘッダーには [▶ VRChat を起動]VRChat 側の設定)、[⚙ 設定]、 監視中のログ名が並びます。

フェーズ進行度

現在のフェーズ値・ステージ名・クラス名、ボス戦中はボス名を表示します。 右側の「ステージ死亡 / セッション死亡」は、それぞれ今いるステージ今の戦闘での死亡数です。

フェーズバー。到達済みの区間が明るく塗られる
フェーズバー。到達済みの区間が明るく塗られる

現在のラン パフォーマンス分析

15 個のカードで現在のランを要約します。

カード 内容
セッション / フェーズ / チェックポイント 3 つの時計を色分けして 1 枚にまとめたもの(3 つの時計
ラン与ダメージ ラン全体の累計与ダメージ
10秒 DPS 直近 10 秒間に与えたダメージ ÷ 10(用語
ラン平均 DPS ラン累計ダメージ ÷ ラン経過時間。インターミッションも分母に入ります
被ダメージ ラン全体で受けたダメージ
ヒット / 被弾 与えた回数 / 受けた回数
最大クリティカル 最大の単発ダメージ。ログにクリティカル判定は無いので、その代用です
平均ダメージ/発 累計ダメージ ÷ 振った回数成長度(フェーズ 0 比)
成長度(フェーズ0比) そのランのフェーズ 0 と比べて 1 振りがどれだけ重くなったか(成長度(フェーズ 0 比)
最終ダメージ源 直近に自分へダメージを与えた相手
ヘイト対象 直近にヘイトが移った 敵 -> プレイヤー開発中 / HUD オーバーレイ
ラン死亡数 ラン全体の死亡数
トークン(ウェーブ) このウェーブでの取得数 / 出現数(トークン
所持トークン 現在の所持数(取得 − 消費)
トークン(ラン累計) ランの累計と、取り逃した数

定義に説明が要るカードにはツールチップが付いています。アプリ上でカードにマウスを乗せてください。

湧いたモブ

このセッションで湧いた敵を名前ごとに数えて並べます(既に倒した分も含みます)。 右端の 生存 N は、そのうち今フィールドに残っている数です。

  • フェーズ: で 1 区間だけに絞り込めます。「UMBRA では何が出たか」を後から確認できます。
  • ボスはここには出ません。
  • 一覧がリセットされるのはロビーに戻ったときで、ランのリセットでは消えません。
  • セクション自体は、設定ウィンドウ 一般 タブの [「湧いたモブ」パネル] で隠せます。

セッション履歴ログ

ステージと戦闘が発生順に積み上がります。フェーズ 0 / 新規ラン の区切り行は、 そこから新しいランが始まったことを示します。

セッション履歴ログ
セッション履歴ログ

フェーズとラン

ECLIPTICA の進行度は 0.0 〜 1.0 のフェーズ値で表され、アプリはこれを 5 つの区間に分けて 表示します。

区間 フェーズ値
PRIME 0.0 – 0.2
PENUMBRA 0.2 – 0.4
ANTUMBRA 0.4 – 0.6
UMBRA 0.6 – 0.8
ECLIPSE 0.8 – 1.0

フェーズバーは、到達済みの部分が元の色、未到達の部分が暗く落とした色で描かれます。 HUD 側のコンパクトなバーとメインウィンドウのバーは同じ塗り分けです。

「ラン」の区切り方

アプリは フェーズ値が 0 に戻った瞬間を新しいランの開始と判断します。

新しいランが始まると、次がリセットされます。

  • ラン集計(与ダメ・被ダメ・死亡数・最大クリティカル・ヒット数)
  • DPS グラフの「長尺」ライン(DPS グラフ
  • 履歴テーブルに区切り行を追加

一方、セッション履歴とエクスポート用のイベントログはリセットされません。 アプリを起動してから閉じるまでの全ランが残ります。

3 つの時計

セッション / フェーズ / チェックポイント のカードには、3 つの別々のタイマーが色分けで並んでいます。 タイマー HUD にはこのうち前 2 つが出ます(HUD オーバーレイ)。

時計 数えているもの
セッション 最後にロビーを出てからワールドで過ごした時間。ロビー後の最初のステージで動き出し、ロビーに戻った時点で止まります
フェーズ 今いるステージの経過時間
チェックポイント 今の戦闘(Mob / Boss / Rest)の経過時間

ロビーで待っている時間は加算されないので、セッションは「この潜行が何分続いているか」を 素直に表します。

ロビーでは各時計は 0 に戻らず、止まって値を保持します。 フェーズとチェックポイントは 直前のステージ・直前の戦闘を表示し続けるので、終わったばかりのランの数値をそのまま読めます。 再びダメージを与えると新しいランが始まります。

成長度(フェーズ 0 比)

開発中(WIP)の指標です。 計算方法は今後のバージョンで変わる可能性があります。

「このランで実際に強くなっているか」を答えるカードです。今いるフェーズの 1 振りあたりの総ダメージを、そのランのフェーズ 0 の同じ値と比べます。

  • 基準となるフェーズ 0 にいる間は、倍率ではなく基準値そのもの(基準 50.1)を表示します。
  • それ以外では x1.56(+56%) 50.1 の形で、倍率・差分(%)・現在の 1 振りあたりの値を並べます。
  • フェーズ 0 を観測していてかつ1 発でも当てるまでは - です。ランの途中から参加した場合は 基準が無いので、そのランの間は - のままになります。

継続ダメージ(毒・炎上)はダメージには入りますが、振った回数には数えません。そのため毒が 入りやすくなっても数値が下がることはありません。平均ダメージ/発 のカードも同じ数え方です。

トークン

トークンの集計は戦闘集計とは独立していて、リセットされるのはロビーに戻ったときだけです (フェーズ 0 でのランのリセットでは消えません)。

カード 内容
トークン(ウェーブ) このウェーブでの取得数 / 出現数。取り残しがあるままボス戦に入ると赤くなり、トークン HUD が残り個数を知らせます
所持トークン 現在の所持数(取得 − 消費)。ロビーに戻るとクリアされます
トークン(ラン累計) ランの累計と 取り逃し。取り逃しはそのウェーブがインターミッションに入ってから数えます(それまでは拾える可能性があるため)

ランの途中から参加した場合、所持トークンは - になります。 所持数は「取得 − 消費」で、 途中参加ではワールドが開始トークンを配るため、ランの最初から見ていないと実際の数を復元 できません。ウェーブごとの取得数・取り逃しには影響しません。ロビーに戻ってフェーズ 0 から 始めれば所持数の表示も戻ります。

HUD オーバーレイ

HUD は 8 枚の独立したウィンドウで、常に最前面・半透明・クリック透過(配置モード以外では マウス操作がそのまま VRChat 側に抜ける)です。

初期状態の HUD 配置(1920×1080 の画面に重ねた例)
初期状態の HUD 配置(1920×1080 の画面に重ねた例)
パネル 既定位置 内容
タイマー HUD 左上 セッション時間とフェーズ時間(3 つの時計
フェーズ HUD 上端中央 ステージ名・ボス名・コンパクトなフェーズバー(区間名と %)
ステータス HUD 右上 与ダメ / DPS / 被ダメ / 死亡 / クリ
パーティ HUD 右・ステータス HUD の下 同室メンバーの DPS 表(既定は非表示)
ヘイト HUD 画面中央 ヘイト対象。自分に来ていると赤い警告表示(開発中
トークン HUD 中央・ヘイト HUD の下 フィールドに残っているトークンの数。残っているときだけ表示
スポーン中モブ HUD 左・画面の中ほど 今生きている敵を 1 体 1 行で表示
DPS グラフ HUD 右下 3 本の時間スケールで DPS 推移を描画
フェーズ HUD
タイマー HUD。セッション時間とフェーズ時間をそれぞれの色で表示
ステータス HUD。数字が伸びても隣の項目がずれない固定レイアウト
トークン HUD。トークンが残っているときだけ現れる
スポーン中モブ HUD。生きている敵を 1 体 1 行で表示
ヘイト HUD。自分がターゲットされている状態

トークン HUD は平常時は完全に見えません。 ウェーブが順調なときは伝えることが無いので、 背景ごと一切描画しません。トークンの取り残しが判明したときだけ、残り個数を知らせるために 現れます(トークン)。

ヘイト表示は開発中(WIP)です。 敵の所有権(オーナーシップ)が移った先をヘイト対象と みなす簡易的な判定なので、実際のターゲットと一致しないことがあります。表示を鵜呑みにせず、 参考程度に見てください。判定方法は今後変わる可能性があります。

表示の切り替え

設定ウィンドウ(メインウィンドウ右上の ⚙ 設定)から操作します。設定は 一般 / HUD / VR / パーティ の 4 タブに分かれていて、HUD 関連は HUD タブにあります。

設定ウィンドウ(HUD タブ)
設定ウィンドウ(HUD タブ)
  • HUD ウィンドウを表示 — すべての HUD をまとめて表示 / 非表示
  • HUD 背景 — 背景の角丸パネルを描くかどうか
  • オーバーレイ の各行 — パネル 1 枚が 1 行で、それぞれ 4 つの設定を持ちます
設定 内容
チェックボックス そのパネルをデスクトップに出すかどうか。既定でオフなのはパーティ HUD だけ
背景色 パネルごとの背景色
背景の濃さ 背景の不透明度(0〜100%)
文字の濃さ 文字とグラフの線の不透明度(10〜100%)

背景の濃さと文字の濃さは独立に効きます。 「背景は 25%、文字は 45%」のように、 背景だけ薄くして文字は読める状態にできます。各設定の隣の ボタンは、 その項目だけを既定値へ戻します。

VR 内に出すかどうかは、VR タブの同じ並びにある別のチェックで決めます。 デスクトップには出さず VR にだけ出す、という設定ができます(VR オーバーレイ)。

背景をオフにすると文字だけが浮きます。ゲーム画面をなるべく隠したくない場合はこちらです。

背景オフのステータス HUD
背景オフのステータス HUD

ヘイト表示が追う敵

既定では、ヘイト表示はそのウェーブのボスだけを追います。雑魚モブの所有権移動で 表示がちらつかないようにするためです。

雑魚モブの所有権も追いたい場合は、HUD タブの ヘイト表示 にある [雑魚モブも表示する] にチェックを入れてください。外すとボス以外の項目は消えます。

ターゲット通知音

自分がターゲットになった瞬間に音で知らせます。画面から目を離していても分かるので、 HUD のヘイト表示と組み合わせて使ってください。設定ウィンドウ 一般 タブの ターゲット通知音 グループで設定します(設定リファレンス)。

項目 内容
自分がターゲットになったら音を鳴らす 機能そのもののオン / オフ
効果音 同梱の SE 1SE 3、または [ファイルを指定...][参照...] で自分の音源
鳴らし方 1回だけ / ターゲット中は鳴らし続ける
音量 0 〜 100%。[試聴] でその場で確認できます

鳴る条件は 2 つあります。

  • 「対象ユーザー」に自分の名前が入っていること。 一般タブのいちばん上の項目で、通常は 起動時にログから自動入力されます。ここが空だと誰がターゲットにされたのか判定できないので、 音は鳴りません。
  • どの敵を「狙われた」と見なすかは、HUD タブのヘイト設定に従うこと。 既定はボスのみなので、雑魚モブに狙われたときも鳴らしたい場合は [雑魚モブも表示する]ヘイト表示が追う敵)を有効にしてください。

使える音源の形式

WAV / MP3 のほか、Windows がデコードできる形式(M4A・AAC / WMA / FLAC)はそのまま指定できます。 24bit や 32bit float の WAV も変換なしで使えます。長さの制限はありません —— 数分の曲を 丸ごと指定しても構いません。

  • 短い音源はループの継ぎ目がありません。 警報として鳴らす短い音は、 ターゲット中は鳴らし続ける にしても途切れずに回ります。
  • 数分あるような長い音源は、変換せずそのまま再生します。この場合はループの折り返しに わずかな間が入りますが、警報音としての用途では折り返しまで鳴り続けること自体が ほとんどありません。
  • 読み込みに失敗した音源は、設定画面のその場に理由が出ます(対応していない形式など)。 そのまま前の音源が使われることはありません。

長い音源を選んでいる間、そのファイルはアプリが開いたままにします。 アプリを起動中に その音源を移動・削除・上書きすることはできません。差し替えるときはアプリを閉じてから 行ってください。

HUD の配置とサイズ

初期配置のままで困らなければ何もしなくて構いません。動かしたいときは 配置モードを使います。

  1. 設定ウィンドウ HUD タブの [配置モード(左ドラッグ=移動 / 右ドラッグ=リサイズ)] に チェックを入れる
  2. 各パネルに枠・名前・操作ヒントが出て、マウス操作を受け付けるようになる
  3. 左ドラッグで移動 / 右ドラッグでリサイズ(パネルのどこを掴んでも構いません)
  4. 位置が決まったら [レイアウトを保存]
  5. 配置モードのチェックを外して、クリック透過に戻す
配置モード ON。全パネルに枠と名前が表示される
配置モード ON。全パネルに枠と名前が表示される
配置モードのパネル。右上に[位置][サイズ]、右下に操作ヒントが出る
配置モードのパネル。右上に[位置][サイズ]、右下に操作ヒントが出る

配置モード中は HUD がマウスを受け取るため、VRChat 側の操作がパネルに吸われます。 配置が終わったら必ずチェックを外してください。

配置モード中は、各パネルの右上に [位置][サイズ] のボタンが出ます。 そのパネルだけを既定の位置 / サイズに戻すもので、1 枚だけ変な場所に行ってしまったときに 全体をリセットせずに直せます。[レイアウトをリセット] は全パネルを初期配置に戻します。

配置は画面サイズに対する比率(左からの割合・幅の割合など)で保存されるので、 解像度を変えたりモニターを変えたりしても、だいたい同じ位置・同じ比率で表示されます。

文字サイズはパネルの大きさに追従します。 パネルを大きくすれば文字も大きくなるので、 小さくて読めないときはパネル自体を大きくしてください。

DPS グラフ

DPS グラフ HUD
DPS グラフ HUD

3 本の線はすべて「10秒 DPS」の推移ですが、横軸の時間スケールが違います

範囲
2分 直近 2 分間(今の戦闘の勢いを見る)
30分 直近 30 分間(セッション全体の波を見る)
1h基準 オレンジ 現在のランの経過時間(最短 1 時間、最長 4 時間で自動調整)

左端の数字は縦軸の目盛りで、3 本の中の最大値から自動でスケールされます。 サンプルは 1 秒に 1 点記録されます。谷になっている部分はインターミッションなど、 ダメージを出していない時間帯です。

「2分」「30分」の線はアプリを起動してからのデータ全体(ランをまたぐ)を使い、 「1h基準」の線は現在のランだけを使います。

VR オーバーレイ

デスクトップの HUD ウィンドウはヘッドセット内には映らないため、同じパネルを SteamVR オーバーレイとして描画できます。視界に固定され、位置と濃さはパネルごとに 個別に決められます。

必要な条件: VRChat が SteamVR(OpenVR)経由で動いていること、そして SteamVR 自体が 起動していること。

設定ウィンドウ(VR タブ)
設定ウィンドウ(VR タブ)
  1. 設定ウィンドウの VR タブを開き、[VR オーバーレイ] にチェックを入れる
  2. ヘッドセット内に出したいパネルにチェックを入れる。この列は HUD タブの デスクトップ用チェックとは別なので、グラフはモニターだけ・タイマーは VR だけ、 といった使い分けができます
  3. 配置はコントローラで行います(下記)

チェックは「つなぎたい」という意思表示です。 SteamVR がまだ起動していなくても [VR オーバーレイ]はオンのままにしておいて構いません。SteamVR を起動すると自動で接続されます (SteamVR を終了して再起動した場合も同様です)。

ヘッドセットを外さずに配置する

[VR 配置モード(コントローラで掴む)] を使うと、ヘッドセットを外さずに配置を決められます。

  1. VR タブの [VR 配置モード] にチェックを入れる
  2. パネルを指して トリガーを引く — パネルがその手に追従します
  3. 掴んだまま スティックを上下に倒すと、奥へ送る / 手前へ引き寄せる
  4. 掴んだまま 副ボタンを足して腕を前後させると 拡大縮小
  5. 手を離すと位置が保存されます

配置が終わったらチェックを外してください。 既定はオフで、次回起動には引き継ぎません。 操作を受け付けるオーバーレイは、コントローラを VRChat と奪い合うためです。オンの間は VRChat から見ると AFK 状態になり、トリガー・グリップ・移動が効かなくなることがあります (アプリが使っていない A/B/X/Y はそのまま効きます)。チェックを外せばどちらも元に戻ります。

掴んでも反応しない、意図しない方の手がパネルを持ってしまう、といった場合は 困ったときはの VR の項目を参照してください。

コントローラを使わずに配置する

環境の都合でコントローラ操作が働かない場合は、VR タブのスライダーでも同じことができます。 掴んで離すたびにスライダー側も追従するので、あとから微調整する用途にも使えます。

スライダー 範囲
VR 左右 / VR 上下 視点を基準に左右・上下へ ±5m
VR 奥行き 目の前からの距離。0.3〜7m
VR 背景の濃さ 背景の不透明度(0〜100%)
VR 文字の濃さ 文字の不透明度(10〜100%)
VR サイズ パネルの横幅。0.2〜5m(高さはパネルの縦横比で決まります)

パーティ共有

お試し提供中の機能です。 パーティ共有はサーバーを介する唯一の機能で、現在は試験的に 無償提供しています。いつまで提供するかは未定で、予告なく仕様変更・停止する可能性があります。 提供が終わっても、アプリのそれ以外の機能(集計・HUD・エクスポート)はすべてそのまま使えます。

同じルームIDを入力したメンバー同士で、戦闘ステータスをリアルタイムに共有できます。 パーティ HUD には、与ダメージの多い順に最大 10 人まで表示されます。

パーティ HUD。自分の行は黄色で表示される
パーティ HUD。自分の行は黄色で表示される

使い方

設定ウィンドウ(パーティ タブ)
設定ウィンドウ(パーティ タブ)
  1. 設定ウィンドウ パーティ タブの [ルームID] に、パーティ内で決めた合言葉を入力する (半角英数字がおすすめ。例: eclipse-night
  2. [パーティ共有を有効化] にチェックを入れる
  3. HUD タブの オーバーレイ にある [パーティ HUD] にチェックを入れて表示する (既定はオフ)。ヘッドセット内にも出したい場合は VR タブの同じ行にもチェックを入れる
  4. 同じルームIDを入れた人が自動的に一覧に並ぶ

表示名は[対象ユーザー]の値がそのまま使われます。 自動検出されたユーザー名を変えたい場合は ここを書き換えてください。

パネルに表示されるメッセージの意味は次のとおりです。

表示 状態
パーティ共有はオフです [パーティ共有を有効化]が未チェック
ルームに接続中... サーバーへ接続中、またはルームIDが未入力
メンバーがいません 接続済みだが、同じルームIDの人がまだいない

ルームIDの決め方

ルームIDは合言葉であって、パスワードではありません。同じ文字列を入れた人は誰でも その部屋の一覧に入れます。身内で使うときは、推測されにくい固有の文字列にしてください (testvrchat のような一般的な単語は他人と衝突します)。

送信される情報

パーティ共有を有効にしている間だけ、次の値が 1 秒に 1 回サーバーへ送られ、 同じルームIDのメンバーへ配信されます。

項目 内容
表示名 [対象ユーザー]に入っている文字列
ジョブ 現在のステージのクラス名
DPS 10秒 DPS
与ダメージ / 被ダメージ ランの累計
死亡数 / 最大クリティカル / ヒット数・被弾数 ランの累計
ルームID / 端末識別子 同じ部屋に振り分けるための値

送られないもの:VRChat のアカウント情報、ログファイルの中身そのもの、 インスタンス情報、ワールド内の位置、チャット内容。

  • チェックを外している間は、ネットワーク通信を一切行いません。
  • サーバーはデータベースを持たない中継専用で、退室すると一覧から消えます。
  • 通信は wss://(TLS)です。

表示名はあなたが入力した文字列がそのまま同室の全員に見えます。本名など知られたくない文字列を [対象ユーザー]に入れないでください。

セッション記録

ロビーに戻るたびに、そのセッションの記録が自動保存されます。 1 セッション 1 ファイルで、 ボタン操作は不要です。保存先は次のフォルダです。

%APPDATA%\dev.rtail\eact\sessions\

ファイル名は ecliptica_session_<日時>.jsonl になります。設定ウィンドウ 一般 タブの [セッション記録を開く] でこのフォルダを開けます。

  • 1 セッションは ロビー後の最初のステージから、次にロビーへ戻るまでです。セッション中に アプリを終了した場合も同じように書き出されます。
  • 何も起きていないセッション(ロビーに入り直しただけなど)は書き出しません。空のファイルが 溜まることはありません。
  • どこにも送信していません。ローカルのファイルなので、削除して構いません。

形式は下の手動エクスポートと同じ JSONL で、違うのは対象とする期間です。セッション記録は ロビーからロビーまでの 1 セッション、エクスポートはアプリ起動以降のすべてを含みます。

meta 行には、その時点でアプリが持っていた情報が入っています。ランの累計、ステージごとの 内訳(戦闘 1 件ごとの内訳を含む)、フェーズ 0 を基準にした成長度、ボス名、ヘイト対象、 トークンの集計、モブの一覧、そしてそのセッションを識別する情報です。

セッションの識別と同席者

後から記録を突き合わせられるように、セッション記録には次の情報も入ります。

  • セッションキーinstance.session_key)… インスタンスと ECLIPTICA 側のセッション ID から 作る、そのセッション固有の値です。同じ回に居合わせた全員のログから同じ値が出るので、 複数人の記録を後から結び付けられます。材料になるインスタンスの所有者や招待リンクの鍵は ハッシュを通してあり、キーから元の値は復元できません
  • 同席者players)… そのセッション中にインスタンスに居た人の表示名と、入退室の時刻です。 途中参加・途中離脱もそのタイミングごと残ります。VRChat のユーザー ID(usr_…)は ハッシュにしてから記録するので、記録から個人のプロフィールをたどることはできません。 アプリを途中から起動して入室行を見ていない場合は players.trackedfalse になり、 人数は下限として読む必要があります。
  • パーティのメンバーparty)… パーティ共有が接続中だった場合に限り、 セッション終了時点の各メンバーのラン累計(ダメージ・DPS・被弾・死亡回数)も残ります。 ログから読めるのは自分のダメージだけなので、他の人の数字が入るのはこの経路だけです。
  • ワールドのバージョンinstance.world)… ワールドへ入った時点で VRChat の公開 API にバージョンだけを 1 回問い合わせ、 記録します。前回と変わっていれば、変わったことも残します。ワールドが更新されると数値や ボスの挙動も変わるため、後から古い記録と比較するときの前提になります。 この問い合わせは読み取りのみで、アプリの情報は一切送りません。

ラン結果のエクスポート

設定ウィンドウ 一般 タブの [ラン結果を JSON 出力] で、アプリ起動以降の全イベントを JSONL 形式.jsonl / 1 行に 1 つの JSON)で任意の場所へ保存できます。

  • 1 行目meta。形式版数・アプリ名とバージョン・出力日時・対象ユーザー・監視中のログ名・ 現在ランの集計・ステージごとの内訳・成長度・ボス名・ヘイト対象・トークンとモブの集計
  • 2 行目以降 … 時刻付きのイベントが 1 行ずつ。t は Unix 時刻(秒)、type は種別
{"type":"meta","format_version":2,"app":"Ecliptica Advanced Combat Tracker","app_version":"1.1.0","reason":"manual_export","exported_at":"2026-07-21T20:31:44","target_user":"Rain","run":{"damage":14883.0,"deaths":1,"hits":326,"strike_hits":261}}
{"t":1784981234.51,"type":"stage","name":"BalboaRuins","phase":0.58,"class":"Gunmancer"}
{"t":1784981235.02,"type":"combat","label":"FlyLord","kind":"Boss"}
{"t":1784981236.77,"type":"damage","amount":42.0,"kind":"STRIKE"}
{"t":1784981238.10,"type":"dps_sample","dps10":111.6}

イベントの種別は run_reset / stage / combat / damage / taken / death / boss_defeated / hate / dps_sample / lobby と、インスタンス関連の instance_join / player_join / player_leave / ecliptica_session / world_version です。 デバウンスされたイベント(困ったときはの死亡・ボス撃破の項)は 1 回だけ記録されます。

taken イベントには被弾元を敵名(source_enemy)と技名(source_ability)に割った値が付き、 meta.taken_by_source にはその集計(技ごとの回数・総ダメージ・最大値)が入ります。 death イベントには直前の被弾が killed_by_enemy / killed_by_ability として添えられます (何秒前の被弾かも seconds_since_last_taken に残るので、無関係な被弾を死因と読み違えずに 済みます)。与ダメージ側のログには技名が載らないため、技ごとの内訳が作れるのは被弾だけです。

damage イベントには kind が付きます。STRIKE が直撃、NON-STRIKE が毒・炎上などの 継続ダメージです。run.strike_hits は直撃だけを数えたもので、平均ダメージ/発成長度(フェーズ 0 比) の分母がこれです。run.hits も併せて残してあるので、 同じファイルから旧来の定義(ヒット数で割る)も再計算できます。

イベントはアプリを閉じるまで一切間引かれません。長時間動かすとファイルが大きくなります。

Python で読む例:

import json

with open("ecliptica_run_2026-07-21_20-31-44.jsonl", encoding="utf-8") as f:
    meta = json.loads(f.readline())
    events = [json.loads(line) for line in f]

damage = [e for e in events if e["type"] == "damage"]
print(meta["run"]["damage"], len(damage))

設定リファレンス

設定ウィンドウは 一般 / テーマ / HUD / VR / パーティ の 5 つのタブに分かれています。

一般

設定ウィンドウ(一般 タブ)
設定ウィンドウ(一般 タブ)
項目 内容
対象ユーザー ヘイト判定とパーティ共有の表示名に使う名前。起動時にログから自動入力される
言語 表示言語。初回はシステムのロケールから自動判定
「湧いたモブ」パネル メインウィンドウに「湧いたモブ」セクションを出すかどうか(ダッシュボードの見方
自分がターゲットになったら音を鳴らす ターゲット通知音のオン / オフ(ターゲット通知音
効果音 / 鳴らし方 / 音量 鳴らす音源・1回だけかループか・音量と試聴(ターゲット通知音
ラン結果を JSON 出力 ラン結果のエクスポート
セッション記録を開く 自動保存されたセッション記録のフォルダを開く
アーカイブを開く 月ごとにまとめた過去のセッション記録(.tar.zst)のフォルダを開く
報告用ダンプを作成 不具合報告に添付できる .eactdump を作る(報告用ダンプ
報告フォルダを開く .eactdump とクラッシュの記録を書き出すフォルダを開く
先月以前のセッション記録を自動で圧縮する 前月以前の記録を月ごとに 1 つの .tar.zst へまとめる(下記)
すべての設定をリセット 設定ファイルだけを消して初期値に戻し、再起動する
更新を確認 リリースフィードを手動で確認する(アップデート通知

セッション記録の自動圧縮について。 セッション記録は 1 日あたり数 MB 積み上がるので、放っておくと 1 年で数百 MB になります。 [先月以前のセッション記録を自動で圧縮する](既定でオン)は、前月以前の記録を月ごとに 1 つの sessions\archive\ecliptica_sessions_<年-月>.tar.zst へまとめます。

  • 圧縮はバックグラウンドで行うので、アプリが固まることはありません。
  • 今月の分は触りません(まだ追記される可能性があるため)。
  • まとめ終わってから元のファイルを消します。途中で失敗した場合は元のファイルが残ります。
  • 中身を読むには 7-Zip などのツールが必要です。アプリはアーカイブを読み戻しません。

テーマ

設定ウィンドウ(テーマ タブ)
設定ウィンドウ(テーマ タブ)

アプリ全体の配色を切り替えます。HUD オーバーレイも含めて適用されます。

項目 内容
テーマ Dark(既定)/ Light / High Contrast と、読み込んだテーマ
書き出す... 今の配色を JSON ファイルに書き出す。全色が入るのでそのまま配布できる
読み込む... 配布されたテーマファイルを取り込む。取り込んだものは一覧に並ぶ
フォルダを開く 取り込んだテーマの置き場(settings\themes\)を開く
  • 背景色を自分で指定していないパネルは、テーマに追従します。 HUD タブでパネルの背景色を 指定すると、そのパネルだけテーマから外れます。隣のリセットボタンで追従に戻せます。
  • 読み込んだテーマに使えない項目が混ざっていた場合は、その項目だけを無視して残りを 適用します(手書きのテーマが 1 か所の書き間違いで丸ごと無駄にならないようにするため)。
  • Dark は他のテーマが不足分を補うときの土台なので、上書きできません。

HUD

項目 内容
HUD ウィンドウを表示 すべての HUD の表示 / 非表示(HUD オーバーレイ
HUD 背景 HUD の背景パネルを描くかどうか
雑魚モブも表示する ヘイト表示でボス以外の敵も追う
配置モード HUD をドラッグで移動・リサイズできるようにする(HUD の配置とサイズ
レイアウトを保存 / リセット HUD の位置・サイズの保存と初期化
オーバーレイ パネルごとのデスクトップ表示・背景色・背景の濃さ・文字の濃さ

VR

項目 内容
VR オーバーレイ SteamVR 経由でヘッドセット内にパネルを描画する(VR オーバーレイ
VR 配置モード コントローラでオーバーレイを掴んで配置する。既定はオフで、次回起動には引き継がない
VR の配置の各行 パネルごとの VR 表示・位置・奥行き・濃さ・サイズ

パーティ

項目 内容
ルームID パーティ共有の合言葉(パーティ共有
パーティ共有を有効化 オンの間だけサーバーへ接続して共有する

保存先

設定は変更した時点と終了時に自動保存されます。保存先は次のフォルダです。

%APPDATA%\dev.rtail\eact\
パス 内容
settings\app_settings.json 言語・対象ユーザー・テーマ・通知音・HUD と VR の各設定・ルームID・パネルの表示状態
settings\hud_layout.json HUD の位置とサイズ(画面サイズに対する比率で保存)
settings\themes\*.json 読み込んだ配色テーマ(テーマ
settings\*.bck リセット直前の設定のバックアップ(1 世代だけ、毎回上書き)
sessions\*.jsonl 終了したセッションごとの記録(セッション記録
sessions\archive\*.tar.zst 月ごとにまとめた過去のセッション記録
crashes\*.eactdump 報告用ダンプ(報告用ダンプ

設定をまるごと初期化したい場合は、設定ウィンドウの [すべての設定をリセット] を使ってください。 消えるのは settings\ の中だけで、セッション記録には触れません。直前の設定は .bck として残ります。

報告用ダンプ

不具合を報告するときに必要なファイルを、1 つにまとめて作れます。作り方は 2 通りです。

  • クラッシュしたとき(自動): アプリが異常終了すると報告ウィンドウが出ます。何が起きたかを 表示しながら、裏で必要なデータを集めます。そのまま [再起動] でゲームに戻れます。
  • 任意のタイミング(手動): 設定ウィンドウの [報告用ダンプを作成]。落ちてはいないけれど 挙動がおかしい、というときはこちらです。

できあがるのは crashes\eact-crashlog-<日時>.eactdump で、中身は tar を zstd で圧縮したものです (7-Zip などで開けます)。

自動送信は一切しません。 手元に作られるだけなので、渡すかどうかは毎回あなたが決めます。

含まれるもの:

内容 備考
VRChat のログ(そのセッションの全体) 無加工。同じインスタンスに居た人の表示名が含まれます
設定ファイル app_settings.json / hud_layout.json / 取り込んだテーマ
直近 3 件のセッション記録 セッション記録 と同じもの
クラッシュの記録 Python のトレースバックなど
環境 OS / CPU / メモリ / ディスク空き / GPU、VR 使用時は HMD の製造元とモデル名

HMD のシリアル番号は取得しません。効果音のキャッシュや過去月のアーカイブも入りません。

中身を確認してから渡したい場合は [報告フォルダを開く] から取り出して展開してください。

困ったときは

何も表示されない / 数値が全部 0 のまま

  • 右上に 監視中: output_log_....txt と出ていますか? 出ていなければログが見つかっていません。 VRChat を先に起動してから、アプリを起動し直してください
  • VRChat 側のログ出力レベルと起動オプションは設定済みですか? VRChat 側の設定 を参照してください(未設定だと出ない情報があります)
  • アプリは起動時にいま入っているインスタンスの最新セッションまで遡って読み直します。 それより前の戦闘は反映されません

起動時に「VRChat log folder not found」と出る

%USERPROFILE%\AppData\LocalLow\VRChat\VRChat が存在しません。 VRChat を一度も起動していないか、別ドライブへインストールしています。 VRChat を一度起動してログを作らせてから、アプリを起動し直してください。

HUD が VRChat の上に出てこない

  • VRChat をフルスクリーンで起動していませんか。-screen-fullscreen 0 を付けて ウィンドウモード(またはボーダーレス)にしてください
  • HUD タブの[HUD ウィンドウを表示]と、[オーバーレイ]の該当パネルのチェックが 両方オンになっているか確認してください
  • パーティ HUD は既定でオフです
  • トークン HUD は、トークンの取り残しが無い間は何も描きません(仕様です / HUD オーバーレイ
  • VR ではデスクトップの HUD は原理的に見えません。 VR タブを使ってください (VR オーバーレイ)。VR 側のチェックはデスクトップ側とは別なので、モニターに出ている パネルが必ずしもヘッドセット内でも有効になっているわけではありません

HUD がクリックを吸ってしまう

[配置モード]がオンのままです。チェックを外すとクリック透過に戻ります。

オーバーレイがヘッドセット内に出てこない

  • VR タブの [VR オーバーレイ] がオンで、かつそのタブの列でパネルにチェックが 入っていますか
  • SteamVR が起動していて、VRChat が SteamVR 経由で動いていますか。この機能は OpenVR が 必要で、デスクトップモードの VRChat には描画先のヘッドセットがありません。チェックは オンのままで構いません(SteamVR を起動すると自動で接続します)
  • 単に視界の外にあるだけではありませんか。VR 左右 / VR 上下 を可動範囲の中央付近に、 VR 奥行きを 1m 程度にすると、正面に戻ってきます

VRChat が AFK になる / トリガー・グリップ・移動が効かなくなった

[VR 配置モード]がオンのままです。 チェックを外せばどちらも元に戻ります。オーバーレイを 掴めるようにするには、コントローラをこちら側で受け取る必要があるためです。A/B/X/Y は効くのに トリガー・グリップ・移動だけ効かない場合はこれが原因です (ヘッドセットを外さずに配置する)。

掴んでも反応しない / 意図しない方の手がパネルを持つ

VRChat 起動中に SteamVR がオーバーレイアプリへどこまで入力を渡すかは、環境によって変わります。

  • トリガーを引く前に、レーザーがパネルに乗っているのを目で確認してください。パネルを掴むのは レーザーを当てている側の手です
  • まったく反応しない場合は別のボタンも試してください(拡大縮小の副ボタン以外はすべて「掴み」です)
  • それでも駄目な場合はスライダーを使ってください (コントローラを使わずに配置する

10秒 DPS が 0 になる

直近 10 秒間にダメージを与えていないだけです。10 秒間の合計 ÷ 10 なので、 手を止めれば 10 秒かけて 0 に落ちます。累計は「ラン与ダメージ」を見てください。

死亡数がおかしい / ボス撃破が何回も出る

ECLIPTICA は死亡やボス撃破を繰り返し出力するため、アプリ側では連続したものを 1 回に まとめています。そのため数秒以内に本当に 2 回死んだ場合は 1 回として数えられます。

「最大クリティカル」が実際のクリティカルと合わない

ログにクリティカル判定は出力されません。そのランで最も大きかった単発ダメージを クリティカル扱いで表示しています(用語)。

所持トークンが - になる

ランの途中から参加した場合です。所持数は「取得 − 消費」なので、アプリが見ていない開始トークンを ワールドが配っている状態では実際の数を復元できません。ウェーブごとの取得数・取り逃しは 正確なままです。ロビーに戻ってフェーズ 0 から始めれば表示も戻ります (トークン)。

「成長度(フェーズ0比)」が - のまま

そのランのフェーズ 0 の基準値と、1 発以上の命中が必要です。すでに進行中のランに途中から 参加した場合は比較対象が無いため、次にフェーズ 0 からランが始まるまで - のままになります (成長度(フェーズ 0 比))。

モブが名前ではなく #48 と表示される

その敵の名前がまだ分かっていない状態です。名前が判明するまでは ID で表示されます。

ターゲット通知音が鳴らない

上から順に確認してください(ターゲット通知音)。

  • **[自分がターゲットになったら音を鳴らす]**にチェックが入っていますか
  • 一般タブの [対象ユーザー] に自分の名前が入っていますか。空欄だと誰が狙われたのか 判定できないので鳴りません
  • 雑魚モブに狙われて鳴らしたい場合は、HUD タブの [雑魚モブも表示する] が必要です。 既定はボスのみです
  • [試聴] で鳴りますか。鳴らない場合は音源側の問題です。設定画面のその場に理由が 出ているので確認してください(対応していない形式など)
  • Windows 側でアプリごとの音量がゼロになっていないか(音量ミキサー)

パーティ HUD に自分しか出ない / 誰も出ない

  • 全員がまったく同じルームIDを入力していますか(大文字小文字・記号も一致が必要)
  • 全員が[パーティ共有を有効化]にチェックを入れていますか
  • 「ルームに接続中...」から変わらない場合、ネットワーク(ファイアウォールや VPN)が wss:// の接続をブロックしている可能性があります

レイアウトが保存されない

移動・リサイズしたあとに [レイアウトを保存] を押す必要があります (アプリを閉じたときにも保存されます)。

クラッシュしたときは

異常終了すると、何が起きたかを表示する報告ウィンドウが自動で出ます。表示している間に 不具合の解析に必要なデータを集めて 1 つのファイルにまとめるので、 [報告ファイルを保存…] で任意の場所に保存し、不具合報告に添付してください。 [再起動] を押せばそのままゲームに戻れます(収集の完了を待つ必要はありません)。

自動送信は一切しません。 渡すかどうかは毎回あなたが決めます。中身については 報告用ダンプを参照してください。

落ちてはいないけれど様子がおかしい、という場合は、設定ウィンドウの [報告用ダンプを作成] から同じものを作れます。

「既に起動しています」と出る

Ecliptica ACT は同時に 1 つしか起動できません。タスクバーで既存のウィンドウを探してください。 見当たらない場合は、タスクマネージャーで Ecliptica ACT.exe を終了してから起動し直してください。

「Ecliptica ACT.exe から起動してください」と出る

assets フォルダーの中にある exe を直接起動したときに出ます。フォルダー直下の Ecliptica ACT.exe から起動してください。直接起動するとクラッシュしても記録が残りません。

設定を変えてから調子がおかしい

設定ウィンドウの [すべての設定をリセット] で初期値に戻せます。消えるのは設定だけで、 セッション記録には触れません。直前の設定は同じフォルダに .bck として残ります。

用語

用語 定義
10秒 DPS 直近 10 秒間に与えたダメージの合計 ÷ 10。瞬間的な火力の指標で、手を止めると下がります
ラン平均 DPS ラン累計ダメージ ÷ ラン経過時間。移動やインターミッションも分母に入るため、10秒 DPS よりかなり低い値になります
最大クリティカル そのランで最も大きかった単発ダメージ。ログにクリティカル判定が無いための代用値です
ラン フェーズ値が 0 に戻ってから次に 0 に戻るまで。集計のリセット単位(フェーズとラン
ステージ ECLIPTICA の 1 ステージ。ラン内に複数含まれます
チェックポイント ステージ内の 1 区切り(Mob / Boss / Rest)。3 つ目の時計が数えているもの(3 つの時計
セッション ロビー後の最初のステージから、次にロビーへ戻るまで。セッション記録の単位(セッション記録
振った回数 直撃の回数。継続ダメージは分子(ダメージ)には入るが振った回数には数えず、平均ダメージ/発 と成長度はこれで割る(成長度(フェーズ 0 比)
ヘイト 敵の所有権(オーナーシップ)が移った先のプレイヤー。ログの ownership 転送行から判定しています(開発中。実際のターゲットと一致しないことがあります)
フェーズ ラン全体の進行度 0.0〜1.0。5 区間に分けて表示します

ライセンス

本ソフトウェアについて

ECLIPTICA Advanced Combat Tracker(以下「本ソフトウェア」)の著作権は作者に帰属します。

  • 個人での利用・配信などでの使用は自由です
  • 作者の許可なく再配布・転載・販売・改変物の公開を行うことはできません
  • 本ソフトウェアは現状有姿で提供され、利用によって生じたいかなる損害についても 作者は責任を負いません

本ソフトウェアは VRChat ワールド「ECLIPTICA」の非公式ツールであり、 VRChat Inc. およびワールド制作者とは関係がありません。

同梱ライブラリ

以下の表記とライセンス全文は、アプリ本体の右下[ライセンス]ボタンからも読めます (配布フォルダーの THIRD-PARTY-NOTICES.mdlicenses/ をそのまま表示しています)。

本ソフトウェアには以下のソフトウェアが含まれています。 それぞれの著作権は各権利者に帰属し、各ライセンスの条件に従って再配布されています。

ソフトウェア ライセンス 用途
Python PSF License Agreement 実行環境
Qt — The Qt Company Ltd. ほか LGPL v3 GUI / HUD 描画
Qt for Python (PySide6 / Shiboken6) LGPL v3 Qt の Python バインディング
watchdog Apache License 2.0 VRChat ログファイルの監視
OpenVR SDK — Valve Corporation BSD 3-Clause SteamVR オーバーレイ(VR オーバーレイ
pyopenvr BSD 3-Clause OpenVR の Python バインディング
python-zstandard - Zstandard (Meta) を同梱 BSD 3-Clause 過去のセッション記録の月次アーカイブ圧縮

ネイティブの libopenvr_api_64.dll は実行ファイルと同じ階層に同梱しています。

ビルドにのみ使用し、配布物には含まれないもの:

ソフトウェア ライセンス 用途
Nuitka Apache License 2.0 Python → exe のコンパイル
ordered-set MIT License Nuitka の依存

Qt / LGPL v3 についての注記

本ソフトウェアは Qt および Qt for Python を LGPL v3 の条件下で利用しています。 Qt は改変せずそのまま同梱しており、実行ファイル内に動的リンクされる DLL として 含まれています。したがって利用者は、同梱の Qt DLL を同一バージョンの 自前ビルドに差し替えて本ソフトウェアを動作させることができます。

LGPL が適用されるのは同梱の Qt / Qt for Python の部分のみで、 本ソフトウェア自身のコードには適用されません。

パーティ共有サーバー

パーティ共有で使用する中継サーバーは Node.js 上で動作し、 express(MIT License)と ws(MIT License)を使用しています。

このマニュアルの生成に使用

このページは以下のツールで生成しています(本ソフトウェアには含まれません)。

ソフトウェア ライセンス
markdown-it MIT License
markdown-it-attrs MIT License
Pillow MIT-CMU License

ECLIPTICA Advanced Combat Tracker

A combat-log damage meter and HUD overlay built for the VRChat world ECLIPTICA. It reads the log VRChat writes in real time, tracks your damage, DPS, damage taken, deaths and aggro target, and draws it on top of the game window.

Overview

The dashboard (main window)
The dashboard (main window)

Here is what it does.

What it does
Live tracking Damage dealt, 10s DPS, run average DPS, damage taken, max crit, deaths and how much stronger you have got since phase 0 — all recorded automatically (Reading the dashboard)
HUD overlays Eight translucent, click-through panels on top of the game (HUD overlays)
The same panels in VR The HUD as SteamVR overlays, visible inside the headset and placeable with your controller (VR overlays)
Tokens and mobs Tokens picked up per wave, tokens still on the field (Tokens), and every enemy that spawned (Reading the dashboard)
Target alert sound A sound the moment something targets you, from any file you like including MP3 (Target alert sound)
Party sharing Share DPS live with everyone on the same room ID (trial periodParty sharing)
Records and export A JSONL record written automatically at the end of every session, plus a manual full export (Session records / Exporting a run)

It never touches VRChat itself. It only reads a log file — no input injection, no memory access.

Read this first: some of what ECLIPTICA reports only reaches the log file when VRChat is launched with debug logging enabled, so a few features stay dark without it. See VRChat setup.

Download: BOOTH shop

Requirements

  • Windows 10 / 11
  • VRChat (Steam or standalone build)
  • No runtime to install — a single .exe

Desktop and VR both work. In desktop mode the HUD windows sit on top of the game window; in VR the same panels are drawn inside the headset through SteamVR (VR overlays), so you are not limited to desktop mode any more.

Installation

  1. Get it from the BOOTH shop and extract the ZIP anywhere you can write to (Desktop, Documents, …). There is no installer. Run it from the extracted folder — launching it from inside the ZIP does not work.
  2. Double-click Ecliptica ACT.exe. Windows SmartScreen may warn on first launch — choose More info → Run anyway.
  3. Settings and session records are created under %APPDATA%\dev.rtail\eact\ (Settings reference).

To uninstall, delete the extracted folder. To also remove your settings and saved sessions, delete the %APPDATA%\dev.rtail\eact\ folder.

VRChat setup

Worth doing. The app runs without this, but some of its features will not — part of what ECLIPTICA reports only reaches the log file when VRChat is launched with debug logging enabled.

1. Set the launch options

On Steam: right-click VRChat in your library → Properties → Launch Options, and paste this in. If you launch VRChat from a shortcut instead, append it to the end of the shortcut's Target field.

--enable-udon-debug-logging

Or let the app do it. [▶ Launch VRChat] at the top left of the main window starts VRChat through Steam with that option already applied and takes you straight to ECLIPTICA. If Steam cannot be found, the status bar says so — set the option by hand in that case.

2. Turn logging up

On top of the launch options, raise VRChat's own log level. Open the VRChat menu, go to Settings → Debug, and enable (maximise) the logging options.

Maximise logging in VRChat's Debug settings
Maximise logging in VRChat's Debug settings

Getting started

Start VRChat first when you can. The app fills in your user name from the log, which only works if the log already exists.

  1. Start VRChat and enter ECLIPTICA. The app picks up your name from the log and fills it in as the target user. If VRChat is not running, that field stays empty. Starting VRChat from the app's [▶ Launch VRChat] button works too (VRChat setup).
  2. Run Ecliptica ACT.exe. When Watching: output_log_....txt appears at the top right, log watching is live.
  3. Fight. Numbers start moving as soon as you deal damage, and the HUD follows.

Starting the app mid-game is fine. On launch it reads back through the log and replays the session you are currently in, using the timestamps written there — so if you dive for 30 minutes before starting the app, those 30 minutes show up as they happened. It never reaches further back than the current session, so a previous instance cannot bleed into your numbers.

If VRChat restarts and creates a new log file, the app switches to it automatically.

Update notification

On startup the app checks whether a newer version exists. If there is one, a banner appears at the top of the main window with a [Download] button that opens the download page, and [Dismiss] to hide it for this run.

It only notifies. Nothing is downloaded or installed for you — updating means getting the new ZIP and extracting it yourself.

  • If you are already up to date, or the check fails, the startup check stays silent.
  • To check on demand, use [Check for Updates] on the settings window's General tab. That one reports the result in the status bar either way.
  • The version you are running is shown at the bottom right of the main window.

Reading the dashboard

The main window is a header plus four sections, top to bottom.

Areas of the dashboard
Areas of the dashboard

The header holds [▶ Launch VRChat] (VRChat setup), [⚙ Settings], and the name of the log being watched.

Phase progress

Shows the current phase value, stage name and class, plus the boss name during a boss fight. On the right, "Stage deaths / Session deaths" are deaths in the current stage and in the current fight respectively.

The phase bar — reached segments are drawn in full colour
The phase bar — reached segments are drawn in full colour

Current run performance

Fifteen cards summarising the current run.

Card Meaning
Session / Phase / Checkpoint Three clocks in one card, colour-coded — see The three clocks
Run Damage Total damage dealt this run
10s DPS Damage dealt in the last 10 seconds ÷ 10 (Glossary)
Run Avg DPS Run damage ÷ run elapsed time. Intermissions count towards the denominator
Damage Taken Total damage received this run
Hits / Taken Hits dealt / hits received
Max Crit The largest single hit. The log has no crit flag, so this stands in for it
Avg Per Hit Total damage ÷ swings (Growth vs phase 0)
Growth vs Phase 0 How much heavier your swings are than in this run's phase 0 (Growth vs phase 0)
Last Source Whatever hit you most recently
Hate Focus The most recent enemy -> player handover (work in progress — see HUD overlays)
Run Deaths Deaths this run
Tokens (Wave) Tokens picked up in this wave / tokens that spawned in it (Tokens)
Tokens Held Tokens you are currently carrying (collected − spent)
Tokens (Run) Run totals, plus how many were missed

Cards with a definition worth knowing have a tooltip — hover over them in the app.

Spawned mobs

Every enemy that spawned in this session, counted by name, with the ones you already killed included. alive N on the right is how many of them are still on the field.

  • Phase: filters the list down to one phase segment, so you can ask "what came out during UMBRA?" after the fact.
  • Bosses are not listed here.
  • The list resets when you return to the lobby, not when a run resets.
  • The whole section can be hidden with [Spawned Mobs Panel] on the settings window's General tab.

Session history log

Stages and fights stack up in the order they happened. A Phase 0 / new run divider row marks where a new run began.

Session history log
Session history log

Phases and runs

Progress through ECLIPTICA is a phase value from 0.0 to 1.0, which the app splits into five named segments.

Segment Phase value
PRIME 0.0 – 0.2
PENUMBRA 0.2 – 0.4
ANTUMBRA 0.4 – 0.6
UMBRA 0.6 – 0.8
ECLIPSE 0.8 – 1.0

On the phase bar, the reached portion is drawn in the segment's colour and the unreached portion in a darkened version of it. The compact HUD bar and the main-window bar use the same fill.

How a "run" is delimited

The app treats the moment the phase value returns to 0 as the start of a new run.

When a new run starts, these reset:

  • Run totals (damage, damage taken, deaths, max crit, hit counts)
  • The long-scale line on the DPS graph (DPS graph)
  • A divider row is added to the history table

The session history and the exported event log are not reset, so every run from launch to exit stays available.

The three clocks

The Session / Phase / Checkpoint card holds three separate timers, each in its own colour. The Timer HUD shows the first two (HUD overlays).

Clock Counts
Session Time spent in the world since you last left the lobby. It starts at the first stage after a lobby and stops the moment you return to the lobby
Phase Time in the current stage
Checkpoint Time in the current fight (Mob / Boss / Rest)

Time spent waiting in the lobby is not counted, so the session clock answers "how long has this dive been running".

In the lobby the clocks freeze rather than blank out. Phase and checkpoint keep showing the last stage and last fight, so you can still read the numbers of the run that just ended. Dealing damage again starts a fresh run.

Growth vs phase 0

Work in progress. This is still an experimental metric — how it is calculated may change in a future version.

This card answers "am I actually getting stronger this run?" — it compares total damage per swing in the phase you are in against the same figure from this run's phase 0.

  • While you are standing in the baseline phase, the card shows the baseline value itself (baseline 50.1).
  • Anywhere else it shows x1.56 (+56%) 50.1 — the ratio, the difference as a percentage, and the current per-swing figure.
  • It shows - until phase 0 has been observed and you have landed a hit. Joining a run partway means there is no baseline, so it stays - for that run.

Damage over time (poison, burn) counts towards the damage but not towards the swing count, so getting better at applying it never drags the number down. The Avg Per Hit card counts the same way.

Tokens

Tokens are tracked separately from the combat stats, and reset only when you return to the lobby — not when a run resets at phase 0.

Card Meaning
Tokens (Wave) Picked up in this wave / spawned in it. It turns red once the boss fight starts while some are still on the field, and the Token HUD then says how many are left
Tokens Held What you are carrying: collected − spent. Cleared on returning to the lobby
Tokens (Run) Run totals, plus missed. A wave only counts as missed once it reaches its intermission, since tokens can still be picked up until then

Tokens Held shows - if you joined the run partway. The balance is collected − spent, and the world hands out starting tokens to people who join mid-run, so it cannot be reconstructed unless the app watched the run from its start. Per-wave pickups and misses are unaffected. Returning to the lobby and starting from phase 0 brings the balance back.

HUD overlays

The HUD is eight independent windows: always on top, translucent, and click-through — outside of setup mode your mouse passes straight through to VRChat.

Default HUD placement, shown over a 1920×1080 screen
Default HUD placement, shown over a 1920×1080 screen
Panel Default position Contents
Timer HUD Top left Session and phase clocks (The three clocks)
Phase HUD Top centre Stage name, boss name, compact phase bar with segment name and %
Stats HUD Top right DMG / DPS / Taken / Deaths / Crit
Party HUD Right, under the Stats panel DPS table for everyone in your room (hidden by default)
Hate HUD Centre of the screen Current aggro target, with a red warning when it is on you (work in progress)
Token HUD Centre, under the Hate panel How many tokens are still on the field — only when some are
Spawned Mobs HUD Left, about halfway down The enemies currently alive, one per line
DPS graph HUD Bottom right DPS over three different time scales
Phase HUD
Timer HUD — session time and phase time, each in its own colour
Stats HUD — fixed cells, so growing digits never shift their neighbours
Token HUD — it appears only while tokens are still on the field
Spawned Mobs HUD — one line per living enemy
Aggro HUD, showing that the boss is targeting you

The Token HUD is invisible during normal play. It has nothing to say while a wave is going cleanly, so it draws nothing at all — not even a background. It appears only once tokens have demonstrably been left behind, to tell you how many (Tokens).

Aggro display is a work in progress. It infers the target from where an enemy's network ownership was handed to, which does not always match the real target. Treat it as a hint rather than the truth — how it is derived may change.

Showing and hiding

Everything is in the settings window (⚙ Settings, top right of the main window), which is split into four tabs: General, HUD, VR and Party. The HUD lives on the HUD tab.

Settings window — HUD tab
Settings window — HUD tab
  • Enable HUD Windows — shows or hides every HUD at once
  • HUD Background — whether to draw the rounded background panel
  • The Overlays rows — one row per panel, with four controls each:
Control What it does
Checkbox Whether the panel appears on the desktop. Only the Party HUD is off by default
BG Color The panel's background colour, picked per panel
BG Opacity Background opacity, 0–100%
Text Opacity How solid the text and graph lines are, 10–100%

Background and text opacity are independent, so you can pair a faint background with readable text — 25% background and 45% text, for example. The button next to each control resets just that one back to the default.

Whether a panel appears inside the headset is a separate checkbox in the same position on the VR tab, so a panel can be VR-only or desktop-only (VR overlays).

With the background off, only the text floats — useful when you want to obscure as little of the game as possible.

Stats HUD with the background off
Stats HUD with the background off

Which enemies the Hate panel follows

By default the Hate panel follows only the boss of the current wave, so ownership changes on trash mobs never flicker through it.

Tick [Include trash mobs] under HATE TARGETS on the HUD tab to follow ownership of regular enemies as well. Turning it back off drops the non-boss entries again.

Target alert sound

A sound plays the moment something targets you, so you notice even when you are not looking at the screen — pair it with the Hate panel. It is configured under TARGET ALERT on the General tab of the settings window (Settings reference).

Item What it does
Play a sound when a target locks onto you Turns the whole feature on and off
Sound The bundled SE 1SE 3, or your own file via [Custom file...] + [Browse...]
Play Once / Repeat while targeted
Volume 0–100%. [Test] plays it right there

Two conditions have to hold for it to play.

  • Your name must be in Target User — the first field on the General tab, normally filled in from the log at startup. With it empty there is no way to tell who was targeted, so nothing plays.
  • Which enemies count as targeting you follows the hate setting on the HUD tab. That is bosses only by default, so enable [Include trash mobs] (Which enemies the Hate panel follows) if you want trash mobs to trigger the alert too.

Supported formats

WAV and MP3, plus any other format Windows can decode (M4A/AAC, WMA, FLAC), can be used as-is. 24-bit and 32-bit float WAV files need no conversion either. There is no length limit — a several-minute track is fine.

  • Short sounds loop without a seam. A short alert set to Repeat while targeted comes back around with no gap.
  • A long source is played as-is, without conversion. Its loop point carries a slight pause, but for an alert sound you will rarely still be targeted when it gets there.
  • If a file cannot be loaded, the reason appears right there in the settings window (an unsupported format, say). The previous sound is never silently kept.

While a long source is selected, the app keeps that file open. It cannot be moved, deleted or overwritten while the app is running — close the app first to replace it.

Moving and resizing the HUD

If the defaults work for you, there is nothing to do. To move things, use setup mode.

  1. Tick [Setup Mode (LMB Move / RMB Resize)] on the settings window's HUD tab
  2. Every panel gains a border, its name, and a hint — and starts accepting the mouse
  3. Left-drag to move, right-drag to resize (grab anywhere on the panel)
  4. When you are happy, press [Save Layout]
  5. Untick setup mode to go back to click-through
Setup mode on — every panel shows its border and name
Setup mode on — every panel shows its border and name
A panel in setup mode, with its Pos / Size buttons and the hint in the bottom right
A panel in setup mode, with its Pos / Size buttons and the hint in the bottom right

While setup mode is on the HUD takes the mouse, so your clicks no longer reach VRChat. Always untick it when you are done.

Each panel carries its own [Pos] and [Size] buttons in setup mode, which return just that panel to its default position or size — useful when one panel has ended up somewhere silly and you do not want to reset everything. [Reset Layout] restores the defaults for every panel.

Layouts are stored as fractions of the screen (offset and size as a ratio), so changing your resolution or monitor keeps roughly the same placement and proportions.

Text scales with the panel. Making a panel bigger enlarges its text to match, so if a panel is too small to read, make it bigger.

DPS graph

DPS graph HUD
DPS graph HUD

All three lines plot the same 10s DPS value; what differs is the time scale on the x-axis.

Line Colour Range
2m Blue Last 2 minutes — the pace of the fight you are in
30m Purple Last 30 minutes — the shape of the session
1h base Orange The current run's elapsed time (auto-scaled, 1 hour minimum, 4 hours maximum)

The numbers on the left are the y-axis, scaled automatically from the highest value across the three lines. One sample is recorded per second. The troughs are intermissions and other stretches where you are not dealing damage.

The 2m and 30m lines use all data since the app started (spanning runs); the 1h base line uses only the current run.

VR overlays

The desktop HUD windows are invisible inside a headset, so the same panels can be drawn as SteamVR overlays instead. They stay fixed in your view, and each one is placed and dimmed independently.

Requirements: VRChat has to be running through SteamVR (OpenVR), and SteamVR itself has to be running.

Settings window — VR tab
Settings window — VR tab
  1. Open the settings window's VR tab and tick [VR Overlay]
  2. Tick the panels you want in the headset. This column is separate from the desktop checkboxes on the HUD tab, so you can keep the graph on your monitor and show only the timer in VR
  3. Place them with your controller (below)

The toggle is patient. If SteamVR is not running yet, leave [VR Overlay] ticked — the overlays appear by themselves once SteamVR starts. The same applies if you quit and restart SteamVR.

Placing panels from inside the headset

[VR Placement Mode (grab with a controller)] lets you arrange the panels without taking the headset off.

  1. Tick [VR Placement Mode] on the VR tab
  2. Point at a panel and pull the trigger — the panel now rides that hand
  3. While holding, push the stick up or down to send it further away or pull it closer
  4. While holding, add the secondary button and move your arm forward or back to resize it
  5. Let go. The position is saved

Turn placement mode off when you are done. It is off by default and not remembered between launches, because an interactive overlay competes with VRChat for your controller. While it is on, VRChat sees you as AFK and may lose trigger, grip and locomotion (buttons the app does not use, like A/B/X/Y, keep working). Unticking placement mode restores both.

If a grab does nothing, or the wrong hand picks the panel up, see the VR entries in Troubleshooting.

Placing them without a controller

If controller placement will not work on your setup, the sliders on the VR tab do the same job. They also follow along after every grab, so you can use them to fine-tune afterwards.

Slider Range
VR X / VR Y Left–right and up–down, ±5 m from your view
VR Depth How far in front of you the panel sits, 0.3–7 m
VR BG Opacity Background opacity, 0–100%
VR Text Opacity Text opacity, 10–100%
VR Size Panel width, 0.2–5 m (height follows the panel's proportions)

Party sharing

This feature is in a trial period. Party sharing is the only feature that goes through a server, and it is currently offered free of charge on a trial basis. There is no set end date, and it may change or stop without notice. Everything else in the app (tracking, HUD, export) keeps working regardless.

Everyone who types the same room ID shares their combat stats live. The Party HUD lists up to ten people, sorted by damage dealt.

Party HUD — your own row is highlighted in yellow
Party HUD — your own row is highlighted in yellow

How to use it

Settings window — Party tab
Settings window — Party tab
  1. Type the phrase your group agreed on into [Room ID] on the settings window's Party tab (ASCII is safest, e.g. eclipse-night)
  2. Tick [Enable Party Sync]
  3. Tick [PARTY HUD] under OVERLAYS on the HUD tab to show the panel (it is off by default), and/or the same row on the VR tab to show it in the headset
  4. Anyone using the same room ID appears in the list automatically

Your display name is whatever is in [Target user]. Edit that field if you want to show something other than the auto-detected name.

Messages shown in the panel:

Message State
Party sync is off [Enable party sync] is unticked
Connecting to room... Connecting to the server, or the room ID is empty
No members Connected, but nobody else is using this room ID yet

Choosing a room ID

A room ID is a shared phrase, not a password. Anyone who types the same string joins the same list. For a private group, pick something distinctive — common words like test or vrchat will collide with strangers.

What gets sent

Only while party sync is enabled, the following is sent to the server once per second and relayed to everyone with the same room ID.

Field Contents
Display name Whatever is in [Target user]
Job The class name of your current stage
DPS 10s DPS
Damage dealt / taken Run totals
Deaths / max crit / hit counts Run totals
Room ID / client identifier Used to route you to the right room

Not sent: your VRChat account details, the log file itself, instance information, your position in the world, or anything you type in chat.

  • While the checkbox is off, no network traffic happens at all.
  • The server is a relay with no database; leaving removes you from the list.
  • The connection uses wss:// (TLS).

Your display name is visible verbatim to everyone in the room. Do not put anything in [Target user] that you would not want them to see.

Session records

Every time you return to the lobby, the app writes that session out by itself. One ecliptica_session_<timestamp>.jsonl file per session, no button to press, under:

%APPDATA%\dev.rtail\eact\sessions\

[Open Session Folder] on the settings window's General tab opens that folder.

  • A session runs from the first stage after a lobby to the next lobby. Quitting the app while a session is in progress finalises it the same way.
  • A session in which nothing happened (walking back into the lobby, for instance) is not written, so you do not accumulate empty files.
  • Nothing is uploaded anywhere. These are local files, and it is safe to delete them.

The format is the same JSONL as the manual export below; what differs is the slice of time each one covers. A session record holds one lobby-to-lobby session, while the export holds everything since the app was started.

The meta line carries everything the app knew at that moment: run totals, the per-stage breakdown (including one entry per fight), growth against the phase-0 baseline, boss names, the aggro table, the token summary, the mob lists, and what identifies the session itself.

Session identity and who was there

So that records can be matched up later, a session record also carries:

  • A session key (instance.session_key) — derived from the instance and ECLIPTICA's own session ID. Everyone who was there derives the same value from their own log, so several people's records can be tied together afterwards. The ingredients that identify a person — the instance owner and any invite-link nonce — go through a hash, so the key cannot be turned back into them.
  • Who was there (players) — the display names of everyone in the instance during the session, with the times they joined and left, so mid-session joins and departures keep their timing. VRChat user IDs (usr_…) are hashed before being written, so a record cannot be traced back to a profile. If the app was started after you had already joined the instance, players.tracked is false and the count should be read as a lower bound.
  • Party members (party) — if party sharing was connected, each member's run totals at the end of the session (damage, DPS, damage taken, deaths). The log only ever carries your own damage, so this is the one route by which anyone else's numbers appear.
  • The world version (instance.world) — on entering the world the app asks VRChat's public API for the world's version once, and records it, noting when it differs from the last one seen. World updates change numbers and boss behaviour, so this is what makes an old record comparable. The request is read-only and sends nothing about you.

Exporting a run

[Export Run JSON] on the settings window's General tab writes every event since the app started as JSONL (.jsonl — one JSON object per line), wherever you choose.

  • Line 1meta: format version, app name and version, export time, target user, the log being watched, run totals, per-stage breakdown, growth, boss names, the aggro table, and the token and mob summaries
  • Line 2 onwards — one timestamped event per line. t is Unix time in seconds, type is the kind of event
{"type":"meta","format_version":2,"app":"Ecliptica Advanced Combat Tracker","app_version":"1.1.0","reason":"manual_export","exported_at":"2026-07-21T20:31:44","target_user":"Rain","run":{"damage":14883.0,"deaths":1,"hits":326,"strike_hits":261}}
{"t":1784981234.51,"type":"stage","name":"BalboaRuins","phase":0.58,"class":"Gunmancer"}
{"t":1784981235.02,"type":"combat","label":"FlyLord","kind":"Boss"}
{"t":1784981236.77,"type":"damage","amount":42.0,"kind":"STRIKE"}
{"t":1784981238.10,"type":"dps_sample","dps10":111.6}

Event types are run_reset, stage, combat, damage, taken, death, boss_defeated, hate, dps_sample and lobby, plus the instance-side instance_join, player_join, player_leave, ecliptica_session and world_version. Debounced events (see the death / boss-defeat entries under Troubleshooting) are recorded once.

taken events split the source into the enemy (source_enemy) and the ability (source_ability), and meta.taken_by_source holds the roll-up per ability (hits, total, largest). death events carry the hit just before them as killed_by_enemy / killed_by_ability, together with seconds_since_last_taken so an unrelated hit is not mistaken for the killing blow. The outgoing-damage lines carry no ability name, so a per-ability breakdown is only possible for damage taken.

damage events carry a kind: STRIKE is a direct hit, NON-STRIKE is damage over time such as poison or burn. run.strike_hits counts direct hits only, and is the denominator behind Avg Per Hit and Growth vs phase 0; run.hits is kept next to it so the older definition stays recomputable from the same file.

Events are never trimmed while the app runs, so long sessions produce large files.

Reading it in Python:

import json

with open("ecliptica_run_2026-07-21_20-31-44.jsonl", encoding="utf-8") as f:
    meta = json.loads(f.readline())
    events = [json.loads(line) for line in f]

damage = [e for e in events if e["type"] == "damage"]
print(meta["run"]["damage"], len(damage))

Settings reference

The settings window has five tabs: General / Theme / HUD / VR / Party.

General

Settings window — General tab
Settings window — General tab
Setting Meaning
Target User The name used for aggro detection and as your party display name. Auto-filled from the log on launch
Language Display language. Auto-detected from your system locale on first run
Spawned Mobs Panel Whether the Spawned Mobs section appears in the main window (Reading the dashboard)
Play a sound when a target locks onto you Turns the target alert on and off (Target alert sound)
Sound / Play / Volume Which sound, once or looping, volume and test (Target alert sound)
Export Run JSON Exporting a run
Open Session Folder Opens the folder holding the automatic session records
Open Archive Opens the folder holding past session records bundled per month (.tar.zst)
Create Report Dump Builds an .eactdump you can attach to a bug report (Report dumps)
Open Report Folder Opens the folder where .eactdump files and crash records are written
Compress last month's session logs automatically Bundles records from previous months into one .tar.zst per month (see below)
Reset All Settings Deletes the settings files, returns to defaults and restarts
Check for Updates Checks the release feed on demand (Update notification)

About automatic session compression. Session records pile up at a few MB per day, so left alone they approach a few hundred MB in a year. [Compress last month's session logs automatically] (on by default) bundles records from previous months into one sessions\archive\ecliptica_sessions_<year-month>.tar.zst per month.

  • Compression runs in the background, so the app never freezes.
  • The current month is left alone, since more records may still be added to it.
  • The originals are deleted only after the archive is complete. If it fails part-way, the originals stay where they are.
  • Reading one needs a tool such as 7-Zip. The app never reads archives back.

Theme

Settings window — Theme tab
Settings window — Theme tab

Switches the colours of the whole app, including the HUD overlays.

Setting Meaning
Theme Dark (default) / Light / High Contrast, plus any theme you imported
Export... Writes the current colours to a JSON file. It contains every colour, so it can be shared as-is
Import... Takes in a theme file someone shared. Imported themes appear in the list
Open Folder Opens where imported themes are kept (settings\themes\)
  • A panel whose background colour you have not set follows the theme. Setting a panel's background colour on the HUD tab takes that panel out of the theme; the reset button next to it puts it back.
  • If an imported theme contains unusable entries, only those entries are ignored and the rest is applied — one typo should not waste a hand-written theme.
  • Dark is what every other theme falls back to for anything it does not set, so it cannot be overwritten.

HUD

Setting Meaning
Enable HUD Windows Shows or hides every HUD (HUD overlays)
HUD Background Whether to draw the HUD background panel
Include trash mobs Makes the Hate panel follow regular enemies too, not just the boss
Setup Mode Lets you drag HUD panels to move and resize them (Moving and resizing the HUD)
Save / Reset Layout Saves or restores HUD positions and sizes
Overlays Per-panel desktop visibility, background colour, background opacity and text opacity

VR

Setting Meaning
VR Overlay Draws the panels inside the headset through SteamVR (VR overlays)
VR Placement Mode Lets you grab and place the overlays with your controller. Off by default, and not remembered between launches
VR Placement rows Per-panel VR visibility, position, depth, opacity and size

Party

Setting Meaning
Room ID The shared phrase for party sync (Party sharing)
Enable Party Sync Connects and shares only while ticked

Where it is all stored

Settings are saved when you change them and again on exit, under:

%APPDATA%\dev.rtail\eact\
Path Contents
settings\app_settings.json Language, target user, theme, alert sound, HUD and VR settings, room ID, panel visibility
settings\hud_layout.json HUD positions and sizes, stored as fractions of the screen
settings\themes\*.json Colour themes you imported (Theme)
settings\*.bck The settings as they were just before a reset (one generation, overwritten each time)
sessions\*.jsonl One record per finished session (Session records)
sessions\archive\*.tar.zst Past session records bundled per month
crashes\*.eactdump Report dumps (Report dumps)

To start over, use Reset All Settings in the settings window. It clears only settings\; your session records are left alone, and the previous settings are kept as .bck.

Report dumps

Bundles everything a bug report needs into one file. There are two ways to make one.

  • After a crash (automatic). If the app closes unexpectedly, a report window appears. It shows what happened and collects the data in the background. Restart puts you straight back in the game.
  • Whenever you like (manual). Create Report Dump in the settings window — for when nothing crashed but something is behaving oddly.

The result is crashes\eact-crashlog-<timestamp>.eactdump, a tar compressed with zstd (7-Zip and similar tools open it).

Nothing is ever sent anywhere. The file is only written to your machine; handing it over is your call every time.

What is inside:

Contents Notes
The VRChat log (that session's log, in full) Unmodified, so it contains the display names of everyone in the instance
Settings files app_settings.json, hud_layout.json, any imported themes
The three newest session records The same files as Session records
Crash evidence The Python traceback, if there was one
Environment OS, CPU, memory, free disk, GPU, and in VR the HMD's maker and model

The HMD's serial number is never collected. Sound caches and older monthly archives are left out too.

To look before you share, open it from Open Report Folder and extract it.

Troubleshooting

Nothing appears / every number stays at 0

  • Does Watching: output_log_....txt appear at the top right? If not, no log was found — start VRChat first, then restart the app.
  • Is VRChat's own log level turned up, and are the launch options set? See VRChat setup; several things stay empty without them.
  • On launch the app reads back as far as the latest session in the instance you are in. Anything older than that never shows up.

"VRChat log folder not found" on startup

%USERPROFILE%\AppData\LocalLow\VRChat\VRChat does not exist. Either VRChat has never been run, or it is installed on another drive. Launch VRChat once so the log is created, then start the app again.

The HUD does not appear over VRChat

  • Are you running VRChat fullscreen? Add -screen-fullscreen 0 for windowed (or borderless).
  • Check that both [Enable HUD Windows] and the panel's checkbox under OVERLAYS on the HUD tab are ticked.
  • The Party HUD is off by default.
  • The Token HUD draws nothing unless tokens have been left on the field — that is normal (HUD overlays).
  • In VR, the desktop HUD is invisible by design. Use the VR tab instead (VR overlays); its checkboxes are separate from the desktop ones, so a panel you see on the monitor is not necessarily enabled for the headset.

The HUD is swallowing my clicks

[Setup Mode] is still on. Untick it to restore click-through.

The overlays do not show up in my headset

  • Is [VR Overlay] ticked on the VR tab, and is the panel ticked in that tab's own column?
  • Is SteamVR running, and is VRChat running through it? The overlay needs OpenVR — a desktop-mode VRChat has no headset to draw into. You can leave the checkbox on; it connects by itself once SteamVR starts.
  • Is the panel simply out of view? Put VR X / VR Y back near the middle of their range and VR Depth at about 1 m, which brings it straight in front of you.

VRChat went AFK, or lost trigger / grip / walking

[VR Placement Mode] is still on. Untick it and both come back — an interactive overlay has to take the controller to be grabbable. If A/B/X/Y still work while trigger, grip and walking do not, this is what happened (Placing panels from inside the headset).

Grabbing an overlay does nothing, or the wrong hand picks it up

How much controller input SteamVR hands to an overlay while VRChat is running varies between setups.

  • Point at the panel so the laser is visibly on it before pulling the trigger — the hand holding the laser is the one that picks the panel up.
  • If a grab never registers, try a different button. Every button except the resize modifier counts as a grab.
  • Failing that, use the sliders instead (Placing them without a controller).

10s DPS drops to 0

That just means you have not dealt damage in the last 10 seconds — it is a 10-second sum divided by 10, so it decays to zero once you stop. Use "Run damage" for the cumulative figure.

Death counts look wrong / boss defeat fires repeatedly

ECLIPTICA reports deaths and boss defeats repeatedly, so the app collapses a burst into a single event. As a side effect, two genuine deaths a few seconds apart count as one.

"Max critical" does not match the crits I saw

The log has no crit flag. The app shows the largest single hit of the run in its place (Glossary).

Tokens Held shows -

You joined the run partway through. The balance is collected − spent, which cannot reconstruct the real number when the world has handed out starting tokens the app never saw. Per-wave pickups and misses are still accurate. Return to the lobby and start from phase 0 and the balance comes back (Tokens).

"Growth vs Phase 0" stays at -

It needs a phase-0 baseline from this run, plus at least one landed hit. Joining a run that is already underway means there is no baseline to compare against, so the card stays - until the next run starts from phase 0 (Growth vs phase 0).

A mob is listed as #48 instead of a name

That enemy's name is not known yet. It is shown by ID until the name turns up.

The target alert sound does not play

Work down the list (Target alert sound).

  • Is [Play a sound when a target locks onto you] ticked?
  • Is your name in [Target User] on the General tab? With it empty there is no way to tell who was targeted, so nothing plays.
  • To hear it for trash mobs, tick [Include trash mobs] on the HUD tab. Bosses only is the default.
  • Does [Test] play? If not, the problem is the file itself — the reason is shown right there in the settings window (an unsupported format, say).
  • Check that Windows has not muted the app in its volume mixer.

Only I show up in the Party HUD, or nobody does

  • Is everyone using exactly the same room ID (case and punctuation included)?
  • Has everyone ticked [Enable Party Sync]?
  • If it stays on "Connecting to room...", your network (firewall or VPN) may be blocking wss://.

My layout is not saved

Press [Save Layout] after moving or resizing (it is also saved when you close the app).

The app crashed

A report window appears by itself and tells you what happened. While it is up it gathers everything needed to diagnose the problem into a single file, so use [Save Report...] to put it somewhere you can find it and attach it to your bug report. [Restart] puts you straight back in the game — you do not have to wait for the collection to finish.

Nothing is ever sent anywhere. Handing the file over is your call every time. See Report dumps for exactly what goes in it.

If nothing crashed but something looks wrong, Create Report Dump in the settings window produces the same file on demand.

"Ecliptica ACT is already running"

Only one copy can run at a time. Look for the existing window in the taskbar; if there isn't one, end Ecliptica ACT.exe in Task Manager and start it again.

"Please start this app from Ecliptica ACT.exe"

You launched the exe inside the assets folder. Start Ecliptica ACT.exe in the folder above it instead — launched directly, a crash would go unrecorded.

Something broke after I changed a setting

Reset All Settings in the settings window puts everything back to defaults. It only clears settings; your session records are untouched, and the previous settings stay beside them as .bck.

Glossary

Term Definition
10s DPS Damage dealt in the last 10 seconds ÷ 10. A burst metric — it falls when you stop
Run avg DPS Run damage ÷ run elapsed time. Travel and intermissions are in the denominator, so it is far lower than 10s DPS
Max critical The largest single hit of the run — a stand-in, because the log has no crit flag
Run From one phase-0 reset to the next. The unit that stats reset on (Phases and runs)
Stage One ECLIPTICA stage. A run contains several
Checkpoint One encounter within a stage (Mob / Boss / Rest) — what the third clock counts (The three clocks)
Session From the first stage after a lobby to the next lobby. What session records cover (Session records)
Swing One direct hit. Damage over time counts towards damage but not towards swings, which is what Avg Per Hit and Growth divide by (Growth vs phase 0)
Aggro The player an enemy's network ownership was handed to, taken from the ownership-transfer log lines (work in progress — it does not always match the real target)
Phase Whole-run progress from 0.0 to 1.0, displayed as five segments

License

About this software

ECLIPTICA Advanced Combat Tracker ("the Software") is copyright of its author.

  • You are free to use it personally, including while streaming.
  • You may not redistribute, mirror, sell, or publish modified versions of it without the author's permission.
  • The Software is provided as is, without warranty of any kind. The author is not liable for any damage arising from its use.

The Software is an unofficial tool for the VRChat world "ECLIPTICA" and is not affiliated with VRChat Inc. or the world's creators.

Bundled libraries

These notices and the full license texts are also readable in the app itself, via the [Licenses]button at the bottom right — it displays the bundled THIRD-PARTY-NOTICES.md and licenses/ files verbatim.

The application includes the software listed below. Each remains the copyright of its respective holders and is redistributed under its own license.

Software License Used for
Python PSF License Agreement Runtime
Qt — The Qt Company Ltd. and others LGPL v3 GUI / HUD rendering
Qt for Python (PySide6 / Shiboken6) LGPL v3 Python bindings for Qt
watchdog Apache License 2.0 Watching the VRChat log files
OpenVR SDK — Valve Corporation BSD 3-Clause The SteamVR overlays (VR overlays)
pyopenvr BSD 3-Clause Python bindings for OpenVR
python-zstandard - bundles Zstandard (Meta) BSD 3-Clause Compressing past session logs into monthly archives

The native libopenvr_api_64.dll is bundled alongside the executable.

Used only at build time, not shipped in the distributed binary:

Software License Used for
Nuitka Apache License 2.0 Compiling Python to an .exe
ordered-set MIT License Nuitka dependency

Note on Qt / LGPL v3

The Software uses Qt and Qt for Python under the terms of LGPL v3. Qt is bundled unmodified and is included as dynamically linked DLLs inside the executable, so you may replace the bundled Qt DLLs with your own build of the same version and run the Software against it.

The LGPL applies only to the bundled Qt / Qt for Python components, not to the Software's own code.

Party sharing server

The relay server used by Party sharing runs on Node.js and uses express (MIT License) and ws (MIT License).

Used to build this manual

This page is generated with the tools below. They are not part of the Software.

Software License
markdown-it MIT License
markdown-it-attrs MIT License
Pillow MIT-CMU License