- 设计:docs/design/23-hunt.md + voice-ids(84 id,166条)+ 13号断言登记,§15记录10+1条设计裁决 - 服务器:零依赖WebSocket(ws.js)+ 房间管理/服务端权威战斗/bot AI(hunt-room.js),断线30s宽限resume回槽、超时转bot;修复package.json模块类型误判的既有破坏 - 客户端:web/hunt/ 全套(教学T0-T4/听觉视野裁剪R1-R8/结算排行榜/guide接入),playtest 211断言 - 引擎:audio.js 后向兼容 opts.pan(StereoPannerNode),web-engine-api.md 同步 - 资产:166条TTS语音(QC无离群)+ 13件合成sfx(真峰值≤-3dBFS)+ 2首Mureka BGM,终检全绿 - 平衡:bot调参至挂机局71%失守/C、3bot局71% A/B(hunt-balance-scan.mjs 24种子扫描) - 接线:大厅卡片、profiles.js hunt桶、README/roadmap MMO路线条目 验证:hunt-sim 16/16 + api-smoke 12/12 + hunt playtest 211/211 + 既有10游戏与引擎回归零回退 + 真服务器WS端到端冒烟通过
44 lines
1.6 KiB
HTML
44 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<!-- viewport 锁缩放,viewport-fit=cover 适配刘海屏 -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
|
|
<title>围猎 · SoundGame Web</title>
|
|
<link rel="stylesheet" href="../engine/style.css">
|
|
</head>
|
|
<body>
|
|
<!-- 全屏根元素:手势全屏捕获层,封面图放里面 -->
|
|
<div id="game-root">
|
|
<img class="cover" src="cover.png" alt="">
|
|
</div>
|
|
|
|
<!--
|
|
标准接线流程(每个游戏都一样):
|
|
1. new WebAudioEngine('audio/') —— basePath 相对本页面
|
|
2. new HuntGame(audio, root)
|
|
3. await audio.showStartOverlay() —— 遮罩"轻触开始",首次点按/空格/回车解锁音频
|
|
4. game.start() + attachGestures() —— 解锁后才接管手势,避免开始那次点按误触
|
|
联机端点 /ws/hunt 与静态/REST 同服务器同端口(game.js 内按 location 拼接)。
|
|
-->
|
|
<script type="module">
|
|
import { WebAudioEngine } from '../engine/audio.js';
|
|
import { attachGestures } from '../engine/gesture.js';
|
|
import { HuntGame } from './game.js';
|
|
|
|
async function main() {
|
|
const root = document.getElementById('game-root');
|
|
const audio = new WebAudioEngine('audio/');
|
|
const game = new HuntGame(audio, root);
|
|
|
|
await audio.showStartOverlay({ cover: 'cover.png' });
|
|
// 走到这里 AudioContext 已解锁,可以出声了
|
|
game.start();
|
|
attachGestures(root, (g) => game.onGesture(g));
|
|
}
|
|
|
|
main();
|
|
</script>
|
|
</body>
|
|
</html>
|