- 录像需要处理:缺位置 / 时间字段、无效压缩包、不兼容格式会说明原因并停止自动重试;临时读取错误最多连续重试三次。文件更新后自动重新检查,也可选中内容点「重试所选」或「忽略相关文件」。忽略不删除文件;重新下载到新路径后仍会自动发现。解析器版本更新会重新检查此前因解析兼容性而停下的任务。
- 按内容归并:同一份解压后 DEM 的 SHA-256 只显示一行,可展开全部副本与诊断,搜索任何副本路径都能找到它。一个 ZIP 中的多份录像分别显示各自结果;一份损坏不会阻止同包其他 DEM 的检查。归并副本不等于确认了比赛配对。
- 按方向看趋势:「长期趋势」和「键盘参数」可选择全部方向、A→D、D→A、W→S、S→W。图表、样本数、逐局列表、参数对照和点击后的动作明细保持同一方向。全方向视图会提醒方向比例影响总波动。
- 持久化会话索引:首次升级建立
session-index.json;之后重启只加载小报告与变化的原始会话。未变化的报告不重写;索引损坏或版本过期可自动重建,不代替原始录制。
按键习惯仍可使用未配对的可信本地记录;实战验证和键盘参数对比仍需可靠 Demo。低初速、缺输入边沿或低置信度不会被这些更新放进实战统计。
「长期趋势」顶部现在有两个独立的数据入口,默认打开「按键习惯 · 无需 Demo」:
- 按键习惯:已结束、非诊断录制中的可信本地片段直接参与。查看两键同按、双键空档、换向到按下 Mouse1,以及交接中位数 / 波动、直方图、方向差异。按同一种武器和记录到的蹲 / 慢走 / 跳键状态分组,不推断游戏姿态和速度。仍要求换向后 500 ms 内有 Mouse1、输入连续、边沿完整且没有开枪前再次换向。
- 实战验证:沿用可信 Demo 同步、反向前初速 ≥34 u/s、连续运动与输入检查;按武器、姿态和起速分组。键盘方案对比始终使用这一来源。
- 本地交接样本不是合格急停次数;低速、空中等游戏条件不会在按键习惯页筛除,也不会据此判断制动效果、命中率或最佳 RT。实战页的初速门槛没有降低。
- 按键视图显示未配对录制贡献的样本数量。点击图中一局或「查看所选按键」可查看原始时序和时间线;不必等待 Demo。两种来源分别保留所选分组,切换参数页再返回会恢复原视图,未保存的方案草稿保留。
- 直接读取已有 v4 小报告,无需重写原始录制或重跑全部 Demo;之后配对成功时,同一按键片段仍只计一次。关闭统计窗口后,原有后台采集和报告生成机制继续工作,完成对局并退出 CS2 后刷新。
A 方向战术分析台:黑底黄绿、顶部导航、巨幅交接读数与主趋势图。支持登录自启动与独立托盘采集,退出游戏后解析已下载录像。初速 ≥34 的统计口径保持不变;慢走、蹲伏分别统计。详见 验证边界。
Windows x64 本地急停分析工具。主程序为 C# / .NET 8 WPF;发布包包含 .NET 运行时和 Demo 解析所需的 Python / demoparser2。运行时不需要联网,也不需要安装 Python。
- 长期趋势展示当前组的交接波动、中位数、完整样本及最近 12 局曲线。色带为中间 50% 范围,少样本用空心点;空数据提供采集/导入入口。
- 新增含零线的交接直方图和方向对比;负值是空档,正值是同按。已确认的方案变更可在图中核对,不用缺失记录猜参数。
- 点击图表、按方向键及 Enter,或选择逐局列表后点「查看所选对局」,可核对对应动作;返回时保留趋势分组。
- 键盘参数页区分建议、实际方案记录和前后对照。页面切换保留未保存草稿;错误提示指出需要修改的字段。
- Demo 资料库提供任务状态计数、筛选和文件名/路径搜索;采集页整合启动、Hall、资源与缓存清理。
- 采用 #0B0C0A 黑底、#C6FF4A 黄绿、直角细线和内嵌等宽字体;导航移至顶部,表格与按键时间线同步改版。支持最小 960×700 逻辑窗口及原生窗口缩放,宽表可横向滚动。实时诊断入口保留原功能。
设计依据、状态与交互约定见 界面设计记录。统计资格、初速门槛、Hall 协议与移动模型沿用原实现。
- 解压整个发布目录,双击
StrafeLab.exe。它打开统计中心并启动独立托盘采集。保留所有 DLL、demo-python、demo-runtime文件夹。 - 在「采集设置」勾选登录 Windows 后自动启动。自启动只启动托盘,不弹统计窗口;可在同一页关闭,或在托盘暂停 / 退出采集。开启后不要移动程序目录;移动后重新勾选。
- ACE68 Air 保持 USB 有线模式。CS2 启动后才尝试 Hall;数字按键始终使用 Raw Input。使用官方 M HUB 调参数前,在「采集设置」关闭 Hall 并等待状态更新;Raw Input 仍可继续记录。未知固件或设备未连接时自动降级。
- 托盘初始化时安装自己的 GSI 配置;内容未改变时不重写。先开 StrafeLab,再启动 / 重启 CS2。CS2 在前台且 GSI 确认正在操控自己时记录;切出、死亡 / 观战时暂停。地图切换、gameover、长期断开或退出游戏时保存。
- 自己下载平台 Demo,然后在「Demo 资料库」添加下载目录或导入文件。关闭统计窗口后,托盘仍会扫描
.dem、.zip、.dem.bz2并匹配本地记录。游戏运行时让解析等待,退出后继续。不会登录平台替你下载。 - 旧实时诊断界面仍可用
StrafeLab.exe --realtime打开;先退出托盘采集,避免双重监听。游戏外测试需显式勾选「桌面诊断模式」。--analysis-only只打开统计,--collector只启动托盘。
用 tools/install-local.ps1 -SourceDirectory <发布目录> 可安装到 %LOCALAPPDATA%/Programs/StrafeLab、创建桌面快捷方式并开启当前用户的登录启动,无需管理员。已有程序、快捷方式、自启动值先备份到数据目录。关闭自启动只删除本程序的 HKCU Run 值。
双击发布目录的 Start-Analysis.cmd(等同于 StrafeLab.exe --analysis-only)打开分析中心。它只使用本地录制文件,不启动 Hall、Raw Input、GSI 或游戏配置安装,适合旧采集程序仍在录制时查看统计。分析中心与完整程序共享报告;同一数据目录通过独占文件租约只允许一个后台写入队列,另一个窗口只读查看。关闭拥有任务的窗口后,另一个会自动接管。
在「采集设置 → 存储与清理」查看缓存总量与本次可释放空间,点击「清理解压缓存」并确认。清理前后都会核对文件,界面显示实际释放大小与跳过数量。
- 只删除能对应到仍存在的原 ZIP / DEM.BZ2 的程序解压副本,以及超过 24 小时的程序临时文件。
- 保留原始 Demo、压缩包、录制会话、分析报告、键盘参数和同步索引。找不到原压缩包、无法确认来源、用户主动导入的缓存文件与目录链接均不清理;不递归删除目录。
- 扫描或解析进行中、另一个窗口持有后台任务锁、CS2 运行中会提示稍后重试。文件正被使用或在预览后变化时跳过。
- 清理后可以继续查看已有统计;新分析需要时会重新解压。不会自动清理,也不会修改 Demo 队列的配对结果。
- 打开「趋势总览」,选择时间范围和同一种武器 / 姿态 / 初速组。首页显示「相反两键同时按住」「两键都松开的空档」「换向后多久开枪」,不用先理解 gap、overlap 或 QPC。
- 每点一局,下拉框选择一个指标。交接稳定性显示交接时长的四分位距(中间一半的跨度),其余显示中位数和 25%–75% 范围竖线。不足 5 次的点为空心,不用于趋势判断。少于 6 局仅描述首末局;至少 6 局后,比较互不重叠的较早 / 最近各 3–5 局,每局等权取中位数。时间不是越短越好,波动缩小不代表精度提高。交接顺序的次数分布也不作为好坏评分。
- 悬停查看数据量和参数方案;点击趋势点或每局记录,直接跳转该组动作。明细用文字和时间线解释按键、两键重叠、鼠标点击,技术字段可展开核对。
- 「键盘参数」编辑器按此前用户截图预填 A/D 0.50、W/S 0.85、RT 按下 / 抬起 0.11 mm。**这是待用户核对的历史预填,不是程序推荐值,也不会自动保存或写入键盘。**在官方驱动手动应用后点击「已在驱动应用,记录为当前方案」。每次保存为一个新方案,保留旧值。
- 方案只自动关联保存之后开始的对局,不猜测以前的设置。确定旧局参数时可手动补记;已知中途换过方案的局不自动归属,也可手动标「未知 / 中途变更」。它仍参与表现趋势,但不参加参数方案比较。
- 旧 / 新方案仅在同一武器、姿态、初速组比较。每组建议至少 3 局 / 30 次,这是收集数据的提示门槛,不是统计显著性保证。没有参数历史或样本不足时,给出保留现值、继续记录的建议;有足够数据时只描述时序与波动的变化,不宣布最佳 RT,不把相关性当因果。
参数方案单独保存在 %LOCALAPPDATA%/StrafeLab/keyboard-profiles.json,写入前备份为 .bak,不改原始会话。每次试调只改一个变量,并在备注记录回报率、模式、练习等;它们尚未自动作为可比条件建模。
- 旧实时诊断窗口保留 WASD 四个实时键程条,显示固件报告的毫米换算值。
- A→D、D→A、W→S、S→W 的 gap、overlap、反向键持键时长、Mouse1 相对切换时刻。
- 地面移动估算、速度曲线、严格低移速窗口,带置信度筛选。
- GSI 武器、玩家身份、地图、回合、生命状态;只绑定
127.0.0.1,使用本机随机 token。 - 每 5 秒原子保存,正常关闭也等待保存完成。会话位于
%LOCALAPPDATA%/StrafeLab/sessions。 - “分析与统计”按日期、地图、武器、对局、姿态、起速筛选;按武器 × 姿态 × 起速分组展示原速度、开枪速度、反向轴速度变化。慢走和蹲姿可以计入。CSV 包含资格、上下文、原因、轴向速度、蹲伏量与统计版本;只切换动作明细范围不改变汇总条件。
- 分析报告独立保存在
%LOCALAPPDATA%/StrafeLab/analysis,队列和监控目录保存在demo-library.json,解压缓存保存在demo-cache;不改原始录像及输入记录。 - 默认监控 Windows 用户 Downloads、完美
%APPDATA%/Wmpvp/demo、已识别的 CS2 安装目录和程序旁的 incoming。特殊位置用“添加目录”;不扫描整个磁盘。 - 统计窗口每 20 秒扫描;只有托盘运行时,每 60 秒检查文件元数据,发现变化或待处理任务后启动临时解析进程;文件体积和修改时间稳定至少 10 秒后、能够阻止同时写入时才处理。忽略
.info、.crdownload等临时文件。一次只解析一份,子进程低优先级并限制解析线程。 - SHA-256 内容去重;缓存小型事件锚点,记录已经尝试的会话,避免新一局结束后重复完整解析所有旧文件;ZIP 内多份 DEM 分别处理。临时失败指数退避、最多连续三次;确定性失败标为「需处理」。未匹配文件在新记录出现时重试,剩余任务会继续进入后续后台批次,也可手动重试。路径和下载时间不作为匹配凭据,没有旧版 48 小时/最近 5 局限制。
- 关闭统计窗口后托盘继续采集与安排解析。没有 CS2 时不打开 Raw Input / HID / GSI 服务;仅安装预先所需的 GSI 配置。游戏启动后开启采集,退出后保存并释放整局对象。解析进程完成后退出,游戏再次启动时取消解析、保留待办。可选 HKCU Run 自启动,不安装服务、不自动登录平台下载。
- JSON 保留输入、Hall、GSI、物理样本、同步/校准结果。默认只保存游戏内有效记录,桌面诊断需要显式打开。
本次实机为 USB 名称 Ace 68 Air-II,VID 41E4 / PID 2120,固件字节 17 01(协议值 0x0117)。这对应用户当前连接的设备;不根据驱动里的营销标签推断普通版/电竞版。
关键通道是 MI_01 / Usage Page 0x0001 / Usage 0x0000 / Report ID 0。开启官方 debugMode 位后,收到 0xA0 开头的变化报告。当前实现只对这组已验证 VID/PID/固件启用监测,不对其它型号猜命令。
程序需要通过 HID 功能配置命令暂时打开监测位:先保存原值,仅修改配置字节 7 的 bit 3,正常退出时读回并恢复该位。其它配置位保留;不修改触发行程、RT、SOCD、校准数据、灯光或固件。异常退出/拔线时留下 hall-debug-recovery.json,同一设备重新连接并启动程序后恢复。不要在监测期间同时用其它驱动修改键盘配置。
原始键程 0–341,按官方 100 单位/mm 换算为 0–3.41 mm。这里是固件给出的键程值,不是独立测量的机械位移精度。报告是随变化上报,不能把它的速率等同于键盘的扫描率/8 kHz 键盘轮询率。HID 监测对游戏时的延迟影响尚未做对照实测。
数字触发始终使用 Raw Input。「采集设置」可关闭 Hall 监测并恢复原监测位;重新勾选可重新连接。旧实时窗口也保留此开关。 Hall 深度不通过固定阈值变成按键边沿,避免错误模拟 RT。
- gap:旧方向松开 → 新方向按下的空档,候选最大 500 ms。
- overlap:新方向按下后,两键同时保持按下,直到其中一键首次释放。尚未释放显示
…。 - reverse hold:新方向实际按下 → 实际释放。中途结束记录的未完成样本保留为空。
- timing:Mouse1 按下减去最近 500 ms 内的反向切换时间。Mouse1 是开枪意图,不等同于每一发子弹;持续扫射的所有子弹只存在 Demo 事件中。
- 输入使用独立 Raw Input 线程与 QPC 微秒时间戳。这是应用接收时刻,不是键盘硬件/游戏 subtick 的原生时间戳。消息排队延迟较大时降低置信度。
- 模型是 128 Hz 最大子步长的地面 friction / acceleration 近似,带武器速度基线。它不是完整 CS2 引擎复刻,无法从普通 GSI 获知碰撞、接地、视角和开镜的完整状态。跳跃、蹲伏、鼠标转向、未知开镜状态等降低模型置信度。
- 界面的低移速窗口使用保守的 34 u/s 阈值,不代表后坐力、开镜、跳跃误差已恢复,也不保证子弹精确命中。武器速度基线不是自动获取的服务器参数。
- 默认假定 WASD、Shift 慢走、Ctrl 蹲伏、Space 跳跃、Mouse1 开火。自定义绑定、游戏内聊天/菜单消耗输入等可能使物理估算不成立。
Demo 使用独立进程中的 demoparser2 0.42.0,只读取本地文件。只认 PBDEMS2,用玩家 game_time 与 tick 差分核验时钟速率;时钟不稳定或缺字段时拒绝分析。压缩包最多 16 份 DEM / 总计 8 GB、单份解压最大 2 GB。
同步以本机 SteamID 过滤玩家,使用 Mouse1 / weapon_fire 的 burst onset,以及 GSI freezetime→live、重生和 Demo 对应事件。候选 offset 投票、单调一对一匹配、MAD 剔除、仿射时钟拟合;要求至少 6 个锚点、2 类事件、跨度 30 秒、残差 ≤50 ms、时钟倍率偏差 ≤0.2%,且没有接近的竞争匹配。
1.1 的复盘速度改为连续位置差除以对应 game_time 差,取区间终点时间;缺 tick 时保持未知。修正了 demoparser2 0.42 速度别名相对当前位置区间错后一 tick 的问题(参见解析器速度实现)。这仍是 tick 区间平均速度,不是服务器 sub-tick 瞬时速度。
每次反向只取 500 ms 内的第一次有效 Mouse1,要求正式 live 回合、本人存活、枪械、输入可信且片段连续;旧持键时长根据原始边沿重查,缺失不填零。匹配要求同玩家/回合/武器、唯一开枪事件、残差 ≤25 ms 且处于锚点覆盖区间。当前匹配残差是对拟合时钟的一致性度量,不能当作硬件时间误差。历史 Verdict / CSV legacy_speed_band 字段仍保留开枪附近的 34 u/s 速度标记以便审计,不拿它计算急停成功率、筛选资格或绘制趋势;下述反向前初速门槛单独检查。
慢走或蹲伏不直接决定统计资格;初速门槛单独判断。上述记录先作为候选,再检查:
- 原方向有可信 Down 边沿;短按也允许,不再用 50 ms 门槛。反向后 500 ms 内首击均可检查,超过 250 ms 只提示可能已经重新加速;开枪前再次改变移动方向仍无法归于这次反向。
- 唯一开枪 tick 回推反向时刻。**初速取严格位于反向之前的三个连续 tick 的水平总速度中位数;小于 34 u/s 排除,等于 34 保留,按未四舍五入值判断。**这是当前统计口径,不宣称 34 是所有武器、姿态通用的游戏精度阈值;不使用开枪速度或单一方向分量替代初速。排除动作保留明细和原因,不影响时序中位数、分组或趋势;CSV 导出
prior_speed和minimum_initial_speed供核对。 - 按当时视角固定原移动轴,反向前三 tick 至少两个有正向分量,且中位分量大于 0.5 u/s 的近零噪声容差。容差用于区分位置差分噪声,不是射击精度门槛;近静止只表示缺制动证据,不算成功或失败。
- 从反向前 150 ms 到开枪后一 tick 必须有连续、同回合/武器、存活且接地的有效速度。用接地标志判断,楼梯和坡面不因垂直速度大于 10 而自动剔除。缺速度、缺 tick、不同步等仍保留为待确认。
- 慢走、稳定蹲姿、蹲起变化、站姿、姿态未知各自分组;未知姿态不伪装为站姿,也不否定已经可靠测到的运动。开镜、受击、转向等记上下文,速度变化不能单独归因于手指或反向按键。
- 复合移动用反向轴分量比较:例如 W+D 松 D 按 A 时,仍有前向速度,不把总速度高直接当失败。展示轴向速度降低值,正数为降低,负数为速度大小增加;不按结果挑选样本。
- 所有枪械均可观察反向动作,按具体武器分别展示,不把冲锋枪/手枪等动作直接混成步枪的成功率。起速分组 <50 / 50–150 / ≥150 u/s 仅用于比较,不控制资格。尚无枪械 × 姿态 × 距离的可靠精度模型,不声称能判定每次交火是否必须急停。
- 无反向关联点击单计数量,不算急停失败。没有可靠 Demo 时保留本地候选和时序,暂不给速度评估。统计页不再显示全枪械、全姿态的统一低速占比;趋势展示可评估动作数和输入时序。
实时模型原有蹲伏约 0.34 倍、慢走约 0.52 倍的速度上限缩放只是简化;不能还原连续蹲起和射击精度。1.2 在按下或释放蹲键后继续降低估算置信度一秒,慢走也降置信度;正式报告使用 Demo 蹲伏量。实时页模型比例明确标注“非急停评分”。一秒是本地保守窗口,不宣称游戏蹲起时长。
报告升级会重新排队分析。1.3.1 恢复初速 ≥34 门槛,保留 1.3 的姿态与武器分组;旧版报告不与新版趋势混用。原始会话与 Demo 不修改。
移动模型拟合代码和保守门槛仍保留供开发验证,但 1.1 后台任务不把区间平均速度用于瞬时物理模型自动校准,会明确显示“保留原参数”。未来需要验证相应观测模型和输入时延后再启用。
程序不会替你下载受账户保护的比赛 Demo。没有对应文件或可信锚点时保留原模型,这是正常结果。
dotnet restore .\StrafeLab.sln
dotnet test .\StrafeLab.sln
dotnet run --project .\src\StrafeLab完整离线发布(构建阶段需要联网、.NET SDK,以及带 pip 的 Python;终端用户运行不需要这些):
.\tools\prepare-offline-runtime.ps1
.\tools\publish.ps1
python .\tools\package-release.py准备脚本下载校验过的 Python 3.12.10 embeddable,并按 tools/demo-requirements.txt 安装固定版本的 Windows 解析依赖到项目 work/。发布脚本不把会话、token、完整抓包或浏览器日志放入发布包。ZIP 包含文件清单,外部 SHA256SUMS.txt 可检查下载完整性。
开发环境可运行 tools/install-demo-parser.ps1 安装解析依赖。可用 STRAFELAB_PYTHON、STRAFELAB_DEMOPARSER_PATH 指定已有运行时;STRAFELAB_DATA_DIR 可指定独立数据目录。完整发布包已包含所需依赖。
研究与验证细节见 RESEARCH.md、VERIFICATION.md。evidence/ 包含去除设备路径的 HID 描述符清单、仅 WASD 的受控抓包 CSV、独立 C# 样本和验证摘要。
本程序不生成游戏输入、不自动急停、不读取 CS2 内存、不注入游戏。灯光反馈尚未对当前固件验证,未启用。