यह कैसे काम करता है
- मॉड किसी पल की सूचना देता है।
event("bossKill")जैसा एक कॉल पर्याप्त है। क्लाइंट उसे बैकग्राउंड में भेजता है और गेम को ब्लॉक नहीं करता। - Hovermate मार्कर जोड़ता है। हर इवेंट आपके लेबल के साथ रिकॉर्डिंग और सेशन की टाइमलाइन पर दिखता है।
- खिलाड़ी हाइलाइट चुनता है। क्लिप अनुभाग में गेम का अपना कार्ड मिलता है। खिलाड़ी जिस प्रकार को चालू करता है, उसके इवेंट से क्लिप भी सहेजी जाती है।
SDK चालू होने पर Hovermate अपना पता, टोकन और इनबॉक्स फ़ोल्डर connection.json में लिखता है:
{
"version": 1,
"url": "http://local.hovermate.gg/hovermate/v1/events",
"token": "<random, base64url, 32 bytes>",
"inbox": "C:\\Users\\<user>\\AppData\\Local\\Hovermate\\Sdk\\Inbox"
}url को इसी फ़ाइल से पढ़ें और ठीक वैसे ही इस्तेमाल करें जैसा लिखा है; इसका होस्ट, पोर्ट या पाथ कभी कोड में तय न करें और न बदलें।
क्लाइंट %LOCALAPPDATA%\Hovermate\Sdk\connection.json पढ़ते हैं, या परीक्षण और अलग सेटअप के लिए HOVERMATE_SDK_CONNECTION में दिया पथ लेते हैं। 401 के बाद फिर पढ़ते हैं क्योंकि SDK बंद करके चालू करने पर टोकन बदलता है। फ़ाइल न होने का अर्थ है कि Hovermate इंस्टॉल नहीं है या SDK बंद है; तब क्लाइंट शांत रहता है।
इवेंट भेजने के तीन तरीके
अपने मॉड के वातावरण में उपलब्ध पहला तरीका चुनें।
HTTP
आपका मॉड लोकल नेटवर्क कनेक्शन खोल सकता है।
Authorization: Bearer <token> के साथ दिए URL पर इवेंट POST करें। Origin हेडर वाले अनुरोध अस्वीकार होते हैं, इसलिए वेब पेज इवेंट नहीं भेज सकते।
C#, C++, Java, Python, JavaScript; GDScript में HTTPRequest इस्तेमाल किया जा सकता है।
फ़ाइलें
मॉड फ़ाइल लिख सकता है, पर नेटवर्क इस्तेमाल नहीं कर सकता।
{inbox}\<game.id>.jsonl में हर पंक्ति पर एक JSON इवेंट जोड़ें; टोकन की ज़रूरत नहीं है। Cyber Engine Tweaks जैसे केवल मॉड फ़ोल्डर में लिख सकने वाले सैंडबॉक्स वहाँ hovermate-events.jsonl में लिखते हैं और खिलाड़ी उस फ़ाइल को गेम कार्ड में जोड़ता है।
सभी क्लाइंट इनबॉक्स पर लौट सकते हैं; Lua क्लाइंट मॉड फ़ोल्डर की फ़ाइल में लिखता है।
लॉग पंक्तियाँ
स्क्रिप्ट केवल गेम के अपने लॉग में लिख सकती हैं।
[HOVERMATE] के बाद एक JSON इवेंट ऑब्जेक्ट प्रिंट करें; मार्कर से पहले का सब अनदेखा होता है। गेम चलने पर The Witcher 3 का scriptslog.txt और Skyrim तथा Fallout 4 का Papyrus.0.log अपने-आप पढ़ा जाता है।
Witcher 3 स्क्रिप्ट, Papyrus या स्क्रिप्ट लॉग वाला कोई गेम।
HTTP अनुरोध
POST /hovermate/v1/events HTTP/1.1
Host: local.hovermate.gg
Authorization: Bearer <token from connection.json>
Content-Type: application/json
Content-Length: 95
{"v":1,"game":{"id":"com.example.mygame","name":"My Game"},"type":"kill","label":"Double kill"}उत्तर: 202 {"accepted":1}।
लॉग पंक्ति
[12:00:01] [Script] [HOVERMATE] {"v":1,"game":{"id":"com.example.mygame","name":"My Game"},"type":"bossKill","context":"Act 2"}अन्य लॉग खिलाड़ी क्लिप › गेम कार्ड › फ़ाइल से इवेंट पढ़ें में जोड़ता है; आपका hello भी उसका सुझाव दे सकता है।
शुरुआत करें
हर उदाहरण hello, kill, bossKill और कस्टम parry इवेंट भेजता है। ये SDK के examples फ़ोल्डर की चलने योग्य फ़ाइलें हैं।
C#
- क्लाइंट
- HovermateEvents.cs
- चलने का वातावरण
- C# 7.3 के साथ netstandard2.0, .NET Framework 4.7.2+ और .NET: Unity, BepInEx, MelonLoader।
- सेटअप
- मॉड प्रोजेक्ट में HovermateEvents.cs जोड़ें।
// Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py).
// Run: dotnet run
using System;
using Hovermate.Sdk;
HovermateEvents.Log = Console.WriteLine;
HovermateEvents.Init("com.example.sdkdemo", "SDK Demo", "SdkDemo.exe");
HovermateEvents.Hello(new HovermateOffer[] { "kill", "bossKill", HovermateOffer.Custom("parry", "Parry") });
HovermateEvents.Event("kill", label: "Double kill", tags: new[] { "headshot" }, context: "Act 2");
HovermateEvents.Event("bossKill", label: "The Warden", context: "Act 2");
HovermateEvents.Custom("parry", "Parry", label: "Perfect parry");
Console.WriteLine(HovermateEvents.Flush(2000) ? "sent" : "timed out");
HovermateEvents.Shutdown();examples/csharp में चलाएँ; उदाहरण .NET 8 या बाद के संस्करण के लिए है:
dotnet runC++
- क्लाइंट
- hovermate_events.h
- चलने का वातावरण
- Windows पर C++17। केवल हेडर फ़ाइल; WinHTTP का उपयोग और winhttp.lib से लिंक करता है।
- सेटअप
- hovermate_events.h शामिल करें। DLL अनलोड होने से पहले hovermate::shutdown() बुलाएँ, DllMain के अंदर कभी नहीं।
// Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py).
// Build (Developer Command Prompt): cl /std:c++17 /EHsc /utf-8 /I..\..\cpp example.cpp
#include <cstdio>
#include "hovermate_events.h"
int main() {
hovermate::set_log([](const std::string& message) { std::printf("%s\n", message.c_str()); });
hovermate::init("com.example.sdkdemo", "SDK Demo", "SdkDemo.exe");
hovermate::hello({ "kill", "bossKill", hovermate::Offer::custom("parry", "Parry") });
hovermate::event("kill", { "Double kill", { "headshot" }, "Act 2" });
hovermate::event("bossKill", { "The Warden", {}, "Act 2" });
hovermate::custom("parry", "Parry", { "Perfect parry", {}, {} });
std::printf("%s\n", hovermate::flush(2000) ? "sent" : "timed out");
hovermate::shutdown();
return 0;
}डेवलपर कमांड प्रॉम्प्ट में examples/cpp से चलाएँ:
cl /std:c++17 /EHsc /utf-8 /I..\..\cpp example.cppJava
- क्लाइंट
- HovermateEvents.java
- चलने का वातावरण
- Java 8 या बाद के संस्करण: ModTheSpire, Forge, Fabric।
- सेटअप
- HovermateEvents.java को मॉड में कॉपी करें और पैकेज बदलें या shading के समय उसका स्थान बदलें, ताकि अन्य मॉड की प्रतियों से टकराव न हो।
// Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py).
// Run (Java 8+): javac -d out ../../java/HovermateEvents.java Example.java && java -cp out Example
import gg.hovermate.sdk.HovermateEvents;
import gg.hovermate.sdk.HovermateEvents.Offer;
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
HovermateEvents.log = System.out::println;
HovermateEvents.init("com.example.sdkdemo", "SDK Demo", "SdkDemo.exe");
HovermateEvents.hello(Offer.of("kill"), Offer.of("bossKill"), Offer.custom("parry", "Parry"));
HovermateEvents.event("kill", "Double kill", Arrays.asList("headshot"), "Act 2");
HovermateEvents.event("bossKill", "The Warden", null, "Act 2");
HovermateEvents.custom("parry", "Parry", "Perfect parry", null, null);
System.out.println(HovermateEvents.flush(2000) ? "sent" : "timed out");
HovermateEvents.shutdown(1000);
}
}examples/java से चलाएँ:
javac -d out ../../java/HovermateEvents.java Example.java && java -cp out ExamplePython
- क्लाइंट
- hovermate_events.py
- चलने का वातावरण
- Python 3.7 या बाद के संस्करण, केवल मानक लाइब्रेरी।
- सेटअप
- स्क्रिप्ट के पास hovermate_events.py रखें।
"""Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py).
Run from any folder: python example.py
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'python'))
import hovermate_events as hovermate # noqa: E402
hovermate.set_log(print)
hovermate.init('com.example.sdkdemo', 'SDK Demo', 'SdkDemo.exe')
hovermate.hello(['kill', 'bossKill', hovermate.custom_offer('parry', 'Parry')])
hovermate.event('kill', label='Double kill', tags=['headshot'], context='Act 2')
hovermate.event('bossKill', label='The Warden', context='Act 2')
hovermate.custom('parry', 'Parry', label='Perfect parry')
print('sent' if hovermate.flush(2.0) else 'timed out')
hovermate.shutdown()examples/python से चलाएँ:
python example.pyJavaScript
- क्लाइंट
- hovermate-events.mjs
- चलने का वातावरण
- Node.js 18 या बाद के संस्करण, ES मॉड्यूल के रूप में।
- सेटअप
- hovermate-events.mjs आयात करें।
// Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py).
// Run with Node.js 18+: node example.mjs
import * as hovermate from '../../js/hovermate-events.mjs';
hovermate.setLog(console.log);
hovermate.init('com.example.sdkdemo', 'SDK Demo', 'SdkDemo.exe');
hovermate.hello(['kill', 'bossKill', hovermate.customOffer('parry', 'Parry')]);
hovermate.event('kill', { label: 'Double kill', tags: ['headshot'], context: 'Act 2' });
hovermate.event('bossKill', { label: 'The Warden', context: 'Act 2' });
hovermate.custom('parry', 'Parry', { label: 'Perfect parry' });
console.log((await hovermate.flush(2000)) ? 'sent' : 'timed out');
await hovermate.shutdown();examples/js से चलाएँ:
node example.mjsLua
- क्लाइंट
- hovermate_events.lua
- चलने का वातावरण
- Lua 5.1+ और LuaJIT: Cyber Engine Tweaks और अन्य बिना नेटवर्क वाले सैंडबॉक्स।
- सेटअप
- init.lua के पास hovermate_events.lua रखें। इवेंट मॉड फ़ोल्डर के hovermate-events.jsonl में लिखे जाते हैं; खिलाड़ियों को वह फ़ाइल Hovermate में जोड़ने को कहें।
-- Sends hello, kill, bossKill and a custom "parry" event to Hovermate (or to tools/mock-server.py --watch).
-- Run from the folder that stands in for your mod folder: lua path/to/example.lua
-- It writes hovermate-events.jsonl into the current folder.
--
-- In a Cyber Engine Tweaks mod, copy hovermate_events.lua next to init.lua and call it from your events:
-- local hovermate = require("hovermate_events")
-- registerForEvent("onInit", function()
-- hovermate.init("com.example.mymod", "My Mod", "Cyberpunk2077.exe", { log = print })
-- hovermate.hello({ "kill", "bossKill", hovermate.customOffer("parry", "Parry") })
-- end)
-- Then tell your users to add <game>\bin\x64\plugins\cyber_engine_tweaks\mods\<your mod>\hovermate-events.jsonl
-- in Hovermate: Clips > the game's card > Read events from a file.
local here = (arg and arg[0] or ''):match('^(.*[\\/])') or './'
package.path = here .. '../../lua/?.lua;' .. package.path
local hovermate = require('hovermate_events')
hovermate.init('com.example.sdkdemo', 'SDK Demo', 'SdkDemo.exe', { log = print, writer = print })
print('transport', hovermate.transport())
hovermate.hello({ 'kill', 'bossKill', hovermate.customOffer('parry', 'Parry') })
hovermate.event('kill', { label = 'Double kill', tags = { 'headshot' }, context = 'Act 2' })
hovermate.event('bossKill', { label = 'The Warden', context = 'Act 2' })
hovermate.custom('parry', 'Parry', { label = 'Perfect parry' })
print('log line for script-only mods:', hovermate.logLine('kill', { label = 'Double kill' }))
hovermate.shutdown()मॉड फ़ोल्डर का प्रतिनिधित्व करने वाले फ़ोल्डर में चलाएँ:
lua example.luaक्लाइंट का व्यवहार
| कॉल | काम |
|---|---|
init(gameId, gameName, exe?) | क्लाइंट शुरू करता है। gameId को [a-z0-9._-]{3,64} से मेल खाना चाहिए और मॉड संस्करणों में स्थिर रहना चाहिए; exe गेम की executable फ़ाइल का नाम है। |
hello(offers, log?, files?) | गेम द्वारा भेजे जा सकने वाले प्रकार और वैकल्पिक रूप से पढ़ने के लिए लॉग या मॉड फ़ोल्डर की फ़ाइलें घोषित करता है। |
event(type, {label, tags, context}) | मानक प्रकार का इवेंट भेजता है। |
custom(customType, customLabel, {…}) | आपका कस्टम प्रकार भेजता है; customLabel उसके हाइलाइट टॉगल का नाम देता है। |
flush() / shutdown() | कतार के इवेंट का इंतज़ार करता है और मॉड अनलोड होने पर बैकग्राउंड वर्कर रोकता है। |
- कॉल तुरंत लौटते हैं और गेम में अपवाद नहीं भेजते।
- बैकग्राउंड वर्कर 250 ms टाइमआउट के साथ इवेंट भेजता है और विफल अनुरोध को एक बार फिर आज़माता है।
- कतार में 256 इवेंट आते हैं; भरने पर सबसे पुराना हटाया जाता है।
- HTTP उपलब्ध न हो तो कुछ सेकंड के लिए इवेंट इनबॉक्स में भेजे जाते हैं।
connection.jsonके बिना क्लाइंट शांत रहता है और हर 5 सेकंड में फिर जाँचता है।- हर इवेंट में
game.nameहोता है। पाठ नीचे दी गई सीमा तक काटा जाता है और गलत टैग विफलता के बजाय हटा दिए जाते हैं।
Lua क्लाइंट (hovermate_events.lua) हर इवेंट तुरंत लिखता है। पहले मॉड फ़ोल्डर का hovermate-events.jsonl, फिर absolute पथ मिलने पर इनबॉक्स और अंत में आपके दिए writer फ़ंक्शन, जैसे print, से [HOVERMATE] पंक्तियाँ उपयोग करता है। logLine(type, options) ऐसी पंक्ति लौटाता है जिसे आप प्रिंट कर सकते हैं।
इवेंट ऑब्जेक्ट
{ "v": 1,
"game": { "id": "com.example.mygame", "name": "My Game", "exe": "MyGame.exe" },
"type": "kill",
"label": "Double kill",
"tags": ["headshot"],
"context": "Act 2 · The City",
"time": "2026-11-09T21:15:03.120Z" }| फ़ील्ड | आवश्यक | नियम |
|---|---|---|
v | हाँ | 1 |
game.id | हाँ | [a-z0-9._-]{3,64}: reverse-DNS नाम या छोटा पहचानकर्ता, मॉड संस्करणों में स्थिर |
game.name | पहला इवेंट | सेशन के पहले इवेंट या hello में; अधिकतम 64 अक्षर |
game.exe | नहीं | केवल फ़ाइल नाम। इवेंट को पहचाने गए गेम फ़ोल्डर से जोड़ता है और उस executable को रीप्ले बफ़र शुरू करने देता है |
type | हाँ | नीचे दिया मानक प्रकार या custom |
customType, customLabel | custom के लिए | [a-z0-9_.-]{1,32} और अधिकतम 40 अक्षरों का टॉगल नाम |
label | नहीं | इस इवेंट का पाठ, मार्कर टूलटिप और क्लिप शीर्षक के लिए; अधिकतम 80 अक्षर |
tags | नहीं | अधिकतम 8 टैग, हर एक [a-z0-9_-]{1,24} से मेल खाता हुआ |
context | नहीं | हाइलाइट शीर्षक के लिए मैप, स्तर या क्षेत्र; अधिकतम 64 अक्षर |
time | नहीं | ISO-8601 UTC। Hovermate आगमन का समय लिखता है; उससे 5 सेकंड के भीतर का time उसे अधिक सटीक करता है |
लंबाई UTF-16 कोड इकाइयों में गिनी जाती है, इसलिए इमोजी 2 इकाइयाँ है। पाठ में नियंत्रण अक्षर स्वीकार नहीं हैं। अनजान फ़ील्ड अनदेखे होते हैं, इसलिए अगले संस्करण केवल फ़ील्ड जोड़ते हैं। निजी डेटा न भेजें: लेबल और संदर्भ क्लिप शीर्षक तथा फ़ाइल नामों में दिख सकते हैं।
मानक प्रकार
Hovermate के अंतर्निहित गेम कार्ड के साथ साझा 29 प्रकार। सूची केवल बढ़ती है; अनजान मानक प्रकार अस्वीकार होता है।
killdeathassistmultikillroundWonroundLostmatchWonmatchLostmvpgoalsaveobjectivemissionlapbestLappositioncrashincidentpenaltypitfinishraceWonlandingtakeofffightWonlevelUpbossKillzoneachievement
कस्टम प्रकार
मानक सूची से बाहर के पलों के लिए। हर प्रकार का अपना हाइलाइट टॉगल होता है, जिसका नाम customLabel देता है; हर गेम में अधिकतम 200 प्रकार।
{ "v": 1, "game": { "id": "com.example.mygame" },
"type": "custom", "customType": "parry", "customLabel": "Parry", "label": "Perfect parry" }hello
वैकल्पिक और सुझाया गया। पहले वास्तविक इवेंट से पहले गेम कार्ड और टॉगल बनाता है, ताकि खिलाड़ी पहले से सेटअप कर सके।
{ "v": 1,
"game": { "id": "com.example.mygame", "name": "My Game", "exe": "MyGame.exe" },
"type": "hello",
"offers": ["kill", "death", "bossKill", { "customType": "parry", "customLabel": "Parry" }],
"log": "%LOCALAPPDATA%\\MyGame\\Saved\\Logs\\MyGame.log",
"files": ["C:\\Games\\MyGame\\mods\\my_mod\\hovermate-events.jsonl"] }offersमानक प्रकार और{ "customType", "customLabel" }ऑब्जेक्ट सूचीबद्ध करता है।log,[HOVERMATE]पंक्तियों वाला गेम लॉग सुझाता है;filesमॉड फ़ोल्डर की इवेंट फ़ाइलें सुझाता है। कोई प्रस्तावित पथ पढ़ने से पहले Hovermate खिलाड़ी से अनुमति माँगता है।helloसभी ट्रांसपोर्ट में काम करता है, जिनमें[HOVERMATE]लॉग पंक्ति भी शामिल है।
सीमाएँ और उत्तर
| सीमा | मान |
|---|---|
| हर गेम के इवेंट | 20 प्रति सेकंड। अधिक होने पर 429 मिलता है और पूरा अनुरोध अस्वीकार होता है; hello नहीं गिना जाता |
| बैच | { "events": [ … ] } में 1 से 100 इवेंट, सभी स्वीकार या सभी अस्वीकार। नए गेम का नाम बैच में उसका उल्लेख करने वाले पहले इवेंट में होना चाहिए |
| HTTP बॉडी | 64 KB |
| इनबॉक्स और फ़ाइल की पंक्तियाँ | 4 KB; बड़ी पंक्तियाँ हटा दी जाती हैं |
| कस्टम प्रकार | हर गेम में 200 |
| क्लाइंट टाइमआउट | 250 ms या कम, अधिकतम एक पुनः प्रयास, सीमित कतार जो सबसे पुराना इवेंट हटाती है |
| स्थिति | अर्थ |
|---|---|
202 | स्वीकार: {"accepted": n} |
400 | अमान्य: {"error", "detail", "index"}। index बैच के पहले गलत इवेंट को दर्शाता है |
401 | टोकन गायब या गलत है: connection.json दोबारा पढ़ें |
403 | अनुरोध में Origin हेडर है |
413 | बॉडी 64 KB से बड़ी है |
429 | एक गेम के लिए प्रति सेकंड 20 से अधिक इवेंट |
405, 411, 415 | POST नहीं है, Content-Length गायब है या सामग्री का प्रकार JSON नहीं है |
त्रुटि कोड: invalid_json, version, game, type, custom, label, tags, context, offers, log, files, batch। फ़ाइल की गलत पंक्तियाँ गिनकर गेम कार्ड में अमान्य इवेंट के रूप में दिखाई जाती हैं; Hovermate उनका मूल पाठ लॉग नहीं करता।
Hovermate के बिना परीक्षण
परीक्षण रिसीवर mock-server.py (Python 3.8+, मानक लाइब्रेरी) Hovermate जैसा उत्तर देता है। वह अस्थायी फ़ोल्डर में अपना connection.json बनाता है, वही नियम और त्रुटि कोड लागू करता है, इनबॉक्स और --watch से दी गई फ़ाइलें पढ़ता है और हर इवेंट व त्रुटि प्रिंट करता है।
Hovermate के विपरीत, परीक्षण रिसीवर एक संख्यात्मक लूपबैक पोर्ट पर सुनता है और वही पता अपने connection.json में लिखता है। यह केवल परीक्षण का औज़ार है: क्लाइंट फ़ाइल में जो भी url हो, उसी का इस्तेमाल करते हैं।
python tools/mock-server.py
# In another terminal, with the path it printed:
$env:HOVERMATE_SDK_CONNECTION = "C:\Users\you\AppData\Local\Temp\hovermate-sdk-mock-…\connection.json"
python examples/python/example.pyHovermate SDK mock listening on http://127.0.0.1:52777/hovermate/v1/events
[21:15:03.120] http com.example.sdkdemo hello offers=kill,bossKill,custom:parry
[21:15:03.131] http com.example.sdkdemo kill "Double kill" tags=headshot context="Act 2"
[21:15:03.140] http com.example.sdkdemo bossKill "The Warden" context="Act 2"
[21:15:03.148] http com.example.sdkdemo custom:parry "Parry" "Perfect parry"--watch FILEमॉड फ़ोल्डर केhovermate-events.jsonlया[HOVERMATE]पंक्तियों वाले गेम लॉग की नई पंक्तियाँ पढ़ता है।--follow-proposals,helloके सुझाए पथ ऐसे पढ़ता है जैसे खिलाड़ी ने अनुमति दी हो।--record FILEस्वचालित जाँच के लिए हर स्वीकार और अस्वीकार इवेंट को JSON पंक्ति के रूप में जोड़ता है।
HOVERMATE_SDK_CONNECTION Hovermate में भी ऐसे ही काम करता है, इसलिए परीक्षण असली कनेक्शन फ़ाइल नहीं छूते।
अनुरूपता परीक्षण
SDK में conformance/cases.json है: सही इवेंट से लेकर हर त्रुटि कोड तक अनुरोध और Hovermate के अपेक्षित उत्तर। conformance/run.py उन्हें परीक्षण या किसी अन्य रिसीवर को भेजता है। Hovermate अपने परीक्षणों में वही फ़ाइल उपयोग करता है।
python conformance/run.py
# or against a running receiver:
python conformance/run.py --connection path\to\connection.jsonखिलाड़ी को क्या दिखता है
- नए
game.idका पहला सही इवेंट याhello, क्लिप में SDK कार्ड बनाता है। उसमें गेम का नाम,exeका इंस्टॉल किए गेम से मेल होने पर फ़ोल्डर और कवर, तथा हर घोषित या प्राप्त प्रकार का टॉगल होता है। - हाइलाइट टॉगल शुरू में बंद रहते हैं: खिलाड़ी चुनता है कि कौन से प्रकार क्लिप सहेजें। मार्कर हमेशा लिखे जाते हैं।
- इवेंट अंतर्निहित कार्ड जैसा रास्ता लेते हैं: जर्नल, क्लिप और सेशन मार्कर, हाइलाइट विंडो और सूचनाएँ।
game.exeसामने चल रहे गेम से मिले तो इवेंट उसी गेम के होते हैं। अन्यथा वे केवल रिकॉर्डिंग या रीप्ले बफ़र चलते समय स्वीकार होते हैं।- गलत इवेंट की गिनती कार्ड की स्थिति में दिखती है, जिससे खिलाड़ी समस्या बता सकते हैं।
प्रोटोकॉल और फ़ाइलें
प्रोटोकॉल v1 पूरा अनुबंध है: कनेक्शन खोजना, डिलीवरी के चार तरीके, इवेंट ऑब्जेक्ट, hello और Hovermate का व्यवहार।
SDK के क्लाइंट, उदाहरण, टूल, अनुरूपता परीक्षण और प्रोटोकॉल MIT लाइसेंस में हैं, इसलिए क्लाइंट मॉड में शामिल कर सकते हैं। यह लाइसेंस Hovermate पर लागू नहीं होता।