ラベル Livesplit の投稿を表示しています。 すべての投稿を表示
ラベル Livesplit の投稿を表示しています。 すべての投稿を表示

Livesplit はタイム精度をどのように確保しているか

Livesplit ver1.6 以降では「Windows の機能にある 1 つの高精度タイマーをベースにして、ネットから取得した時刻を用いて補正している」方式になっています。

Livesplit のタイムの精度に関する既存の資料にある説明で「Windows の機能にある 3 種類のタイマーを平均している」といった記述がありますが、これは vre1.5.5 までの古い方式で現在は使われていません。

もくじ
  1. 現行の方式の概要
  2. タイマーのズレは不可避
  3. Livesplit が利用している時計
    1. トリプルタイマー(旧方式)
    2. タイムスタンプ(現行方式)
  4. その他
    1. 2014 年の資料
    2. さいごに

Livesplit のソースコードをコンパイルする手順

世界中の Speedrun・RTA プレイヤーに広く使われているタイマーアプリの Livesplit はオープンソースソフトウェアです。

基本的には公式リポジトリで説明されている手順の通りに操作すればコンパイルすることができます。この記事では、個人的につまづきやすいと思ったポイントを紹介します。

(改訂版)Unity 製ゲームの場合に使用できる、Autosplitter 用の asl で使用したいメモリアドレスの特定方法

asl で利用するためのゲーム内の値を asl で監視するためには、Cheat Engine などのツールを使ってその値が書き込まれているメモリアドレスのポインタパスを特定する必要があります。

値を検索してポインタスキャンをするのがポインタパス特定の基本的な方法ですが、Unity 製ゲームの場合は構造解析機能を利用することで効率よくポインタパスの特定を行うことができます。

もくじ

  1. ご注意
  2. 関連リンク
  3. 全体の流れ
  4. 手順ごとの説明
    1. 1. 欲しい変数を含むクラスの探索
    2. 2. クラスのアドレスを特定
    3. 3. クラス内の変数をポインタスキャン
    4. 4. クラス内の変数のポインタパスを特定
    5. 5. クラスのポインタパスの特定
    6. 6. 欲しい変数のポインタパスを特定
    7. static な変数のポインタパスを特定したい場合

Livesplit コンポーネント開発での動作確認時のチェックポイント

コンポーネントの仕様や性質によっては必ずしもここで挙げている全ての項目を確認する必要はないと思います。 必要に応じて必要な項目を確認しましょう。

チェックシートとして使うにはやや抽象度が高いと思います。 また、注目している点が違うだけで意味としては重複している項目があるかもしれません。 確認項目の参考資料とかチェックシートの土台くらいの気持ちでご利用ください。

Livesplit 用コンポーネント一覧(標準以外まとめ)

Livesplit に標準で付属していない、ユーザーが任意で入手して使用するコンポーネントの一覧です。

多くは Github にて livesplit NOT asl NOT "auto split" NOT "autosplitter" NOT "load removal" NOT "load remover" で検索してヒットしたもの、その他、Twitter などで見かけたものをリストアップしています。

Livesplit 本体と一緒に配布されている標準コンポーネントについては、紹介記事や公式サイトをご覧ください。

もくじ

  1. はじめに
  2. 索引

  1. Timer
  2. List
  3. Information
  4. Media
  5. Control
  6. Other
  7. 通信
  8. 開発用

  1. 連携ツール(非コンポーネント)

Livesplit検証 CPU負荷

目的

Livesplit の動作が重い場合に、Timer の表示桁数を 0.12 から 0.1 や 0 に変更することで、動作が軽くなるという意見を見かける。
 その変更によって軽くなったという意見も見かけるため、動作が軽くなることは事実なのだろう。

では、その変更によってどのくらい軽くなるのか。それを数値的に表してみようと考え、今回の検証を行うことにした。

また、表示桁数を変更する他にも、Livesplit の重さに関係する項目がないかを確認する。

Livesplitの背景を透過する方法

黒背景白文字でルマキー透過したサンプル画像

Livesplit の背景を透過して、ゲーム画面の上に配置している配信レイアウトは少なくないと思います。
 Livesplit には透明度の設定がありますが、これは文字と背景の透明度を一括で変更するための項目であるため、背景のみを透過したい場合は他の項目を設定します。

配信や録画をする場合を前提としますが、Livesplit 側の設定と配信アプリケーション側の設定が必要です。
 配信アプリケーション側の設定は複数の方法があり、それによって Livesplit 側の設定も違いがあります。

ここで紹介している設定内容はほとんどが説明のために簡単に設定したものなので、もっと良い設定があるかもしれませんがご了承を。
 個人的な感触としては、黒背景に白文字だと比較的簡単で、白背景に黒文字だと比較的難易度が高いです。

  1. 基本的な手順
  2. Livesplitの設定例
  3. 配信ソフト側で設定するフィルターの種類
  4. 私が実際に使っている設定
  5. 描画モード

LivesplitのComparisonまとめ

現在のペースが速いのか遅いのかを把握するためには比較する対象が必要です。
 Livesplit ではそのような比較対象タイムのことを Comparison と言い、Personal Best や Best Segment などが標準で備わっています。

もくじ

  1. 基礎知識・説明の前提条件
    1. 2 種類の Comparison
    2. Split Time と Segment Time
    3. 説明用のグラフの説明
  2. 各 Comparison の説明
    1. Personal Best
    2. Best Segments
    3. Worst Segments
    4. Best Split Times
    5. Latest Run
    6. Average Segments
    7. Median Segments
    8. Balanced PB

Livesplit用の自作コンポーネント

私が作った Livesplit 用コンポーネント(拡張機能・プラグイン)の一覧です

一覧(カテゴリ別、公開順。記事本文は公開順。)

  1. はじめに
    1. 共通利用規約
    2. 導入手順
  2. Timer
    1. 改造版タイマー Timer_Plus
    2. 分表示タイマー Timer_minutes
    3. 色指定タイマー Specific Color Timer
    4. 視覚的タイマー Visual Timer
    5. 持続タイマー Continuous Timer
  3. List
    1. 改造版Subsplits Subsplits_Plus
  4. Information
    1. 比較対象タイムの組合せ平均 Combined Comparison Average
    2. 直近の平均 Recent Average
    3. 比較対象タイム表示 Comparison Time
    4. 今回起動中のベストタイム Best Time This Session
    5. 折り返しタイトル Multiline Title
    6. 今回起動中の到達区間 Reached Segment This Session
    7. 平均ラップ Lap Average
  5. Media
    1. タイマー情報読み上げ Speech_Yomiage
    2. 履歴棒グラフ表示 History Bar
    3. 動画再生 Video_API
    4. 2状態のタイムテーブル Binary State
    5. 区間別効果音 Segment Sound Effects
  6. Control
    1. ラップ回数カウント Splitting Counter
    2. タイマーストップのオフセット Offset Stop
    3. 音声操作 Voice Control
  7. Other
    1. 通し番号追加 Split Name Indexer
    2. 自己べペース検知 Might Reach Record
    3. 区間の一括生成 Make Many Segments
    4. 日時表示 Clock
    5. サイズ変更禁止 Resize Blocker
    6. ツイート支援 Share To Twitter
    7. フォーム入力支援 Form Parameters
    8. Discord通知 Run Log To Discord
    9. 角の装飾 Corner Decoration
    10. 模様付スペース Hatch Pattern Space
    11. 改造版SGL Speed Guides Live_Plus
    12. 比較対象タイム並替え Comparison Order

おまけ(他の方が作成されたコンポーネントなどの紹介)

  1. 公式以外のコンポーネント一覧
  2. おすすめのコンポーネント
  3. 開発者向けのコンポーネント
  4. その他、個人的に興味をひかれたコンポーネント

Livesplit用の自作Autosplitter用スクリプト

私が作った、Livesplit 用の Autosplitter 用スクリプトファイル(.asl ファイル)の一覧です

ご注意

  • 常識の範囲であれば、私の Autosplitter 一覧ページへのリンク、Autosplitter の再配布は制限いたしません。

    制作者を騙ったり、私が無料で公開しているものを有料で配布とかしないでね、くらいのかなり緩い制限です。

  • git、Github 管理の Autosplitter は Livesplit の Splits Editor から、Google Drive 管理のものは Layout Editor から利用します。

  • 私は SRC の外にいる人間なので SRC 内でのアクションは致しません。

    SRC 内で Autosplitter の情報が共有されることが公平だと思われた場合は、Guides や Resources を編集できる方、あるいは Forum へ投稿できる方が紹介してくださると助かります。

タイムの精査を推奨

ルール通りのタイミングでのタイマー操作は保証していないため、タイムの精査を推奨しています。

このAutosplitterは60Hzでゲームの内部値を監視することでタイマー操作タイミングを判定しています。
ゲームの内部値が変わったタイミングとルール上のスタートand orストップのタイミングとが厳密に一致するとは限らないため、ルール通りのタイミングでタイマー操作することは保証できません。

一覧

  1. 14種類のマインスイーパーバリエーション
  2. Beltmatic
  3. Bomb Chicken
  4. Donut Dodo
  5. Linelight
  6. Racing Pitch
  7. Typoman
  8. Underparty
  9. いるかにうろこがないわけ
  10. 今日は左と上の数字を見てマス目を塗りつぶすアレを無限にやりたい!
  11. 高速廻転寿司
  12. スペルトナエル
  13. スリップゾーンがたくさん置いてあって2段ジャンプと空中ダッシュができてパラメータの違う車種の選択要素があるサメトラックのレースゲーム
  14. スリップダメージが主な攻撃で弾幕がすごくてゲーム内タイム計測ができる横スクロールアクションゲーム
  15. ネタバレが激しすぎるRPG
  16. 溶鉄のマルフーシャ

  1. TETRIS THE GRAND MASTER 3 -Terror Instinct-

  1. 異種姦ソリティア
  2. ウィッチパズリズム
  3. エンプレスカード
  4. 逆境強化のスージー
  5. バグと魔法使い

Signature scanで欲しい値があるメモリアドレスを見つける方法

Signature scan はゲームプログラムの特定のバイナリ値の並びを使ってメモリ検索を行うことで、そのプログラムが書き込んているアドレスを特定する方法です
 Signature は Array of Bite、AOB などと書かれていることもあります
Sig scanの概要

もくじ

  1. 概要
    1. Signature scan を使用するメリット
  2. 作業手順
    1. 1. 欲しいアドレスへのポインタを含む命令文を探す
    2. 2. Signature の作成
    3. 3. Sig scan に対応した asl の記述

Livesplit用コンポーネントの作り方

コンポーネント開発に興味を持った方が開発に必要な情報を調べようとした時に少しでも助けになればと思い、私が調べた情報などを紹介するためにこの記事を書きました。

この記事はコンポーネント開発に必要な全ての情報を記載している訳ではありませんが、公式のソースコードを読み解くための参考資料として活用していただけると幸いです。

この記事の中で My~ と書いている部分は開発するコンポーネント名と考えてください。

もくじ

  1. 開発資料リンク
  2. あらかじめ知っておきたい C# の知識
    1. C# の仕様関連で知っていると便利なこと
    2. 標準ライブラリ関連で知っていると便利なこと
  3. コンポーネント開発の始めに
    1. 環境構築
    2. コンポーネントのプロジェクトに含まれるファイル
    3. コンポーネント開発の始めの一歩
    4. プロジェクトのプロパティ設定
  4. コンポーネント開発で利用する定番クラス
  5. コンポーネントの処理の流れ
    1. クラスの実体化やメソッド呼び出しのタイミング・順序
    2. コンポーネントで発生した例外
  6. タイマー画面への描画
  7. 設定画面
    1. AutoScaleMode に注意
    2. MyComponentSettings ユーザーコントロール
    3. 配置するコントロール類
    4. 設定画面に関係するイベント
    5. 設定項目の値
  8. 実際にタイムの値が格納されている場所
    1. LiveSplitState からアクセスできるタイム
    2. 計測中のタイム
    3. 自己ベストタイム
    4. 履歴タイム
    5. 比較対象タイム
  9. 比較対象タイム Comparison の生成
    1. タイムを生成する ComparisonGenerator
    2. Comparison の名前の設定
    3. LivesplitState に含まれている各 Comparison
    4. 注意したい Splits コンポーネント、Subsplits コンポーネントの仕様
  10. 各種イベント
    1. LiveSplitState
    2. TimerModel
    3. Run
    4. その他
  11. コンポーネントのデバッグ
  12. 自動更新

フォルダごとの紹介・説明

  1. LiveSplit.Core/UI/Components
  2. LiveSplit.Core/UI
  3. LiveSplit.Core/Model
  4. LiveSplit.Core/TimeFormatters
  5. LiveSplit.Core/Model/Comparisons
  6. LiveSplit.Core/Model/RunSavers
  7. LiveSplit.Core/Model/RunFactories
  8. LiveSplit.Core/Options
  9. LiveSplit.View/View
  10. UpdateManager

Unity 製ゲームの場合に使用できる、Autosplitter 用の asl で使用したいメモリアドレスの特定方法

お知らせ

この記事の改訂版を公開しました。

(改訂版)Unity 製ゲームの場合に使用できる、Autosplitter 用の asl で使用したいメモリアドレスの特定方法



Cheat Engine を使って asl ファイルで利用するための静的アドレスを特定する場合、一つの値に的を絞って値を検索して特定する方法があります
 が、その場合は欲しい値が存在している保証がなく、また、欲しい値の数だけ検索を繰り返す必要があります

Unity 製ゲームの場合は mono の分析機能を利用することで、欲しい値を格納しているフィールドの有無を知ることができ、さらにはクラス単位でフィールドの値を格納している静的アドレスを特定することができます

この記事はメモリアドレスを特定する方法のみの記事です
asl の全体的な説明や基本的な作り方などをまとめた記事もありますので、よろしければこちらもご覧ください

また、構造解析機能を使ってメモリアドレスを調べる部分の実演をした動画を公開しておりますので、よろしければこちらも参考としてご覧ください

手順
  1. 1. 欲しいフィールドを含むクラスの探索
  2. 2. クラス内のフィールドの動的アドレスの特定
  3. 3. フィールドのポインタ検索
  4. 4. クラスの静的アドレスの特定
  5. 5. 欲しいフィールドの静的アドレスを決定

Livesplit で区間ごとにラップを切った回数をカウントしてくれるコンポーネント

Livesplit は標準で含まれている機能の他に、コンポーネントを追加することで機能を追加することができます
 Split Incrementer(レイアウトエディタで表示される名称は Split Name Auto Incrementer)を追加すると、区間ごとにラップを切った回数をカウントしてくれるようになります

Livesplit には標準で挑戦回数と完走回数を表示してくれる機能がありますが、区間ごとにラップを切った回数(あるいはリセットした回数など)は表示してくれません
 このコンポーネントがラップを切った回数をカウントしてくれることで、「とある区間でラップを切った=そこまでは到達した」と考えて区間ごとの突破率を計算する材料にしたり、「とある区間でリセットした=記録更新を諦める出来事があった」と考えてどの区間練習をするかの参考にするといったことに利用できると思います


2021/11/23 追記
ここで紹介している Split Incrementer にインスパイアされて、自分でも同じような機能のコンポーネントを作ってみました
 初期設定を簡単にしたり、履歴データからラップ回数を集計したり、ラップした回数だけでなくその割合を表示することもできたりと、私自身が欲しいと思った機能を詰め込んでいます
 ご興味があれば、SplittingCounter もお試しください

文字機能の観点から考えた LiveSplit に適したフォントの話

  1. はじめに
  2. 初期設定のフォント
  3. おすすめのフォント
  4. 使用できないフォント


はじめに

LiveSplitで「文字の見やすさ」という機能性を重視したときにおすすめするフォントの紹介です。

この記事では「ゲームのイメージに合わせたフォントを使用したい」など、デザイン性を重視する場合を考慮しておりません。

ただし、最後の使用できないフォントについてはどちらの場合にも関係する内容ですので、目を通していただけると幸いです。

LiveSplitで自己ベストの記録を誤って上書きしてしまったときに手動で復元する方法

  1. はじめに
  2. 記録データの構造
  3. 自己ベストタイムの確認
  4. 遅いタイムで上書きしてしまった場合
  5. 完走していないタイムで上書きしてしまった場合



はじめに

LiveSplit で自己ベストの記録を誤って上書きしてしまったときに、記録データを手動で変更して復元する方法を紹介します。

そもそもバックアップを取っていれば、こんなことをしなくて済みます。バックアップを取っておく方が確実で安全です。

ここで紹介する方法は、あくまで応急手段であり、場合によっては記録データが破損して読み込めなくなる可能性もあります。

実施する際は自己責任にてお願いします。