feat(hunt): 《围猎》2-4人实时联机纯音频协作守卫——纯音频MMORPG第一阶段切片
- 设计: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端到端冒烟通过
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
<!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>
|
||||
Reference in New Issue
Block a user