# 補足事項各種

## 連動ファイル(タイムシート)とは？

「いつ」「どのように」「どの強度(速度)で」玩具を動かすかが記述されたファイルで、「タイムシート」とも呼ばれる。形式としては主に以下のものが存在する。

funscript
  元々はFleshlight Launchを制御するために生まれた形式。拡張子は.funscript。中身はJSON。
Vorze CSV(回転系)
  Vorzeが作成した形式で自ブランドの製品を動かすために生まれた。拡張子は.csvで中身はカンマ区切りの単なるCSV。回転系の機器(サイクロン、UFO SA)と線形の機器(ピストンSA)とでは若干形式が異なる。
  時間(1/10秒単位で記述(15 --- 1.5秒目),方向(0 or 1),速度(0～100)。
  ※本来は回転系のみA10サイクロンSAとUFO SAのみ対応だが、FaPlayerCS_Fanは振動系にも対応している。振動系の場合、方向が無視される
  ※FaPlayerCS_Fanでは吸引系の機器もこの形式のファイルで動かせます。この場合、「方向」が吸引パターンと解釈されて動作します。
Vorze CSV(ピストン)
  時間(1/10秒単位で記述(15 --- 1.5秒目),位置(0～200。200が最奥),速度(0～100※)。
  速度については実限界が100ではなく30であることが有志の調査により判明しています。
Vorze CSV(UFO TW)
  Vorze CSV(回転系)を元にFaPlayerCS_Fan用に勝手に作成した形式。Omorfiもこれで動く。拡張子は.csv。
  時間(1/10秒単位で記述(15 --- 1.5秒目),第一方向(0 or 1),第一速度(0～100),第二方向(0 or 1),第二速度(0～100)
  ※第一…最初に起動した方(Omorfiはクリ側)、第二…次に起動した方(Omorfiは膣側)。
LovenseMax2用CSV(ButtplugでConstrictableである機器とSvakom SamNeoも動きます)
  Vorze CSV(回転系)を元にFaPlayerCS_Fan用に勝手に作成した形式。LovenseMax2の空気圧操作機能を使えるのは、FaPlayerCS_Fanではこの形式のみです。拡張子は.csv。
  時間(1/10秒単位で記述(15 --- 1.5秒目),空気圧系コマンド(0-11),振動強度(0-100)
  空気圧
  →0-5 --- その空気レベルに変化
  →6-11 -- Air:Level:0～5を実行する(その空気圧レベルになるように空気を入れ続けるコマンド？)現時点ではコマンドとして無効のため、無視されます
  →12-255 --- コマンドとして無効のため、無視される
  振動強度
  →0-100 --- その強度で動く(他のVibratable玩具と同じ動き)
  →101-255 --- コマンドとして無効のため、無視される
  この『無視』がポイントで、強度だけ・空気圧だけ変えたい側は値をコマンドとして有効な値に、変えたくない側は値をコマンドとして無効な値を設定することが出来ます。
  なお、SvakomSamNeoも同じCSVで動きますが、以下の違いがあります。
  - 空気圧の1～4は、その空気圧のパターンとして扱われる(1が弱く4が強い…ではなく、1はパターン1、2はパターン2…といった感じで動く)
  - 空気圧の5は4と同じものとして扱われる
  - 5より大きい値については無視される
  - 前の操作と後の操作の間隔が一定以上詰まっている場合(現バージョンでは暫定的に3秒)、コマンドがスキップされる
  ButtplugでScalar(Constrict)に対応した機器の場合は、デフォルトでは以下の通りに動きます。
  - 0～5については空気圧の値に0.2をかけた値が機器に送信される(3 --- 3 × 0.2 = 0.6が送信される)
  - 5より大きい値については無視される
TMS(CycloneX10用タイムシート)
  CycloneX10用のタイムシートで、拡張子は.tmsです。本来はCycloneX10専用ですが、FaPlayerCS_Fanでは回転系と振動系の機器をTMSで動かすことが可能です。既に機器と共に廃れた形式であるため、ここでの詳しい説明は省きます。
TMS(FapHeroMan用タイムシート)
  某所で私が公開していたゲーム「FapHeroMan」用に作られたタイムシートです。CycloneX10のタイムシートのチェック機構が甘い(余計なフィールドが後ろに加わっても動作する(切り捨てられる))のを逆手に取った形式です。拡張子は同じく.tmsで、動かせる機器も同じです。
Lovense JSON(仮称)
  Lovenseの公式プレーヤーで使用されている形式。中身はJSON。当プレーヤーでは非対応

## Buttplug用の連動ファイルについて

何の機器かが予め分かっているプリミティブ連携とは違い、Buttplugは機器を接続するまでそれがどのような動きをするか分かりません。そのため、機器を接続してからでないと連動ファイルを読み込むことが出来ません。

Buttplug動作形式と読み込み可能な連動ファイル形式一覧
対応動作(※) | Funscript | Vorze CSV(回転系) | Vorze CSV(ピストン) | Vorze CSV(UFO TW) | Max2 CSV | TMS
--- | --- | --- | --- | --- | --- | ---
Linearble | 〇 | × | × | × | × | ×
Rotatable | × | 〇 | × | ※2 | × | 〇
Scalar-Rotatable | × | 〇 | × | ※2 | × | 〇
Vibratable | × | 〇 | × | ※2 | × | 〇
Oscillatable | × | 〇 | × | × | × | 〇
Constrictable | × | ※3 | ※3 | ※2※3 | 〇 | ※3

※複数種別に対応している場合、対応しているもの全てが読み込める(例: JoyHub Mariner(Scalar-RotatableでConstrictable→Vorze CSV(回転系)、Vorze CSV(ピストン)、Vorze CSV(UFO TW)、Max2 CSV、TMSが読み込める))

※2 第一方向に指定されているもののみが動く(ステレオの音声をモノラル対応のみの再生機器で再生しようとした感じで動く)。UFO TWとLovense Geminiは正しく動く

※3 回転方向の値(0 or 1)がそのまま吸引の値として使われる

## プリミティブ連携機器の連動ファイルについて

プリミティブ連携機器・連動ファイル対応一覧表
機器名 | Funscript | Vorze CSV (回転系) | Vorze CSV (ピストン) | Vorze CSV (UFO TW) | Max2 CSV | TMS
--- | --- | --- | --- | --- | --- | ---
A10サイクロン | × | 〇 | × | × | × | 〇
UFO SA | × | 〇 | × | × | × | 〇
UFO TW | × | 〇 | × | 〇 | × | 〇
A10ピストン | ×※ | × | 〇 | × | ×※2 | ×
FleshlightLaunch(フレラ) | ×※ | × | 〇 | × | × | ×
Rocket +1D | × | 〇 | × | × | × | 〇
バッハスマート | × | 〇 | × | × | × | 〇
Omorfi | × | 〇 | × | 〇※3 | × | 〇
Lovense Calor | × | 〇 | × | × | × | 〇
Lovense Max2 | × | 〇 | × | × | 〇 | 〇
Lovense Solace | × | 〇※4 | × | × | × | 〇※4
ISynchro(シンクロ) | × | 〇※5 | × | × | × | 〇
loob | 〇(※6) | × | × | × | × | ×
tcode(OSR) | 〇 | × | × | × | × | ×

※Buttplug連携はfuncriptに対応

※2 ピストン用のファイルとして誤検知されて読み込まれるため、意図した通りには動かない

※3 UFO TW用CSVの場合左側がクリ側、右側が膣側として動く(それ以外は両方同じ動きをする)。

※4 Lovense SolaceはCalorやMax2と同様「Vibrate:X;」コマンドで動くようになっているが、細かい位置の調整が出来ないようになっているため(A10ピストンやThe Handyなどとは異なる)

※5 シンクロは6段階までしか速度がないため、A10サイクロンの速度÷16で速度を算出している。

※6 loobの可動範囲は1～1000と思われる(0を送信しても弾かれる)ため、FaPlayerCS_Fanでは10～1000を稼働範囲としています。