player.appearance添加本地玩家和远端玩家化身的装饰模型;不能修改碰撞、身份或联机位置。
作者声明:只影响本地表现
《Escpace Backrooms》创意工坊
收藏用于稍后查找;“开启”决定下次启动时加载哪些 Mod。所有已开启 Mod 会一起进入游戏。
推荐方式 · 不需要懂编程
Prompt 只注入作品、能力、依赖和你的 Mod ID,并要求 Agent 实时读取唯一官方 Skill;固定命令与规则不再复制到任务文本中。
发布 Mod 时必须声明使用哪些能力。以下内容是作者约定,平台不会扫描或限制 Mod 代码;只安装你信任的内容。
联机策略:游戏进入联机前应禁用全部 Mod
player.appearance添加本地玩家和远端玩家化身的装饰模型;不能修改碰撞、身份或联机位置。
作者声明:只影响本地表现
audio.custom注册并播放 Mod 自带的本地音效;不能读取账号音频权限或替换网络音频协议。
作者声明:只影响本地表现
audio.monster监听怪物攻击/击败事件并播放本地怪物音效;不能改变联机攻击结果。
作者声明:只影响本地表现
world.decoration在迷宫或 B1 停车场添加视觉模型、灯光和非碰撞装饰;不能替换核心地图网格。
作者声明:只影响本地表现
item.custom注册、生成和拾取自定义道具;道具只在本地练习中生效。
作者声明:联机时不应使用
item.heal-san-battery自定义道具可以恢复生命、理智、体力或手电电量;不能影响联机玩家。
作者声明:联机时不应使用
item.monster-damage自定义道具可以在本地练习中对影者、笑靥或伪装者造成伤害;不能伪造联机击杀。
作者声明:联机时不应使用
rules.player-values调整本地玩家移速、冲刺速度、手电消耗和理智消耗;必须使用受限规则 ID。
作者声明:联机时不应使用
rules.monster-values调整本地怪物速度和攻击伤害;不能修改联机协议或房主验证。
作者声明:联机时不应使用
ui.hud-widget在工坊专用 HUD 容器中显示状态和 Mod 信息;不能依赖私有 DOM 节点。
作者声明:只影响本地表现
events.round-zone监听游戏启动、回合开始/结束、区域和怪物事件;不能覆盖游戏生命周期。
作者声明:只影响本地表现
Agent 会同时收到下面这份本游戏专属规范。
当前游戏是静态多脚本 Three.js 网页游戏。创意工坊 Mod 可以通过公开的 window.EscapeBackroomsWorkshop 注册表扩展:
地图 Mod 只能添加装饰和道具,不能替换核心碰撞网格、网络协议、账号系统或房间状态机。
唯一公共入口:window.EscapeBackroomsWorkshop。游戏同时公开 window.Game 作为运行时上下文,但 Mod 不应修改其私有字段。
所有注册 ID 必须使用小写英文、数字、.、-、_,并且在所有启用 Mod 中唯一。重复 ID 会被拒绝,不会静默覆盖。
EscapeBackroomsWorkshop.registerPlayerAppearance({
id: 'my-mod.yellow-suit',
create({ THREE, host, context }) {
const mesh = new THREE.Mesh(
new THREE.BoxGeometry(0.45, 0.8, 0.3),
new THREE.MeshStandardMaterial({ color: 0xe0b52a })
);
mesh.position.y = 1.1;
return mesh;
},
});
create 返回的 THREE.Object3D 会挂到本地玩家或远端玩家化身上。context.kind 为 local-player 或 remote-player。
EscapeBackroomsWorkshop.registerSound({
id: 'my-mod.reload',
src: './mods/my-mod/reload.mp3',
volume: 0.8,
});
EscapeBackroomsWorkshop.registerMonsterSound({
id: 'my-mod.smiler-roar',
src: './mods/my-mod/smiler-roar.mp3',
});
EscapeBackroomsWorkshop.playSound('my-mod.reload');
src 应指向工坊 Mod 自己携带的静态资源。不要使用账号凭据、Token、管理接口或私有网络资源。
EscapeBackroomsWorkshop.registerProp({
id: 'my-mod.warning-lamp',
zones: ['maze', 'garage'],
create({ THREE, group, world, zone }) {
const lamp = new THREE.PointLight(0xff3344, 1.2, 8);
lamp.position.set(0, 2.3, 0);
group.add(lamp);
return { dispose() { group.remove(lamp); } };
},
});
world 是当前区域的公开世界对象;装饰必须自行清理,不能修改 world.maze.grid 的碰撞值。
EscapeBackroomsWorkshop.registerItem({
id: 'my-mod.medkit',
name: '急救包',
icon: '急救',
color: 0xff3355,
createMesh({ THREE }) {
return new THREE.Mesh(
new THREE.BoxGeometry(0.3, 0.18, 0.22),
new THREE.MeshStandardMaterial({ color: 0xff3355 })
);
},
onUse({ heal, message }) {
heal(35);
message('急救包:生命 +35');
},
});
EscapeBackroomsWorkshop.on('round:start', ({ game }) => {
const world = game.worlds[0];
EscapeBackroomsWorkshop.spawnItem({
itemId: 'my-mod.medkit',
zone: 0,
position: { x: world.toWX(3), y: 0, z: world.toWZ(3) },
});
});
道具 onUse 可以调用 heal(amount)、restoreSan(amount)、restoreStamina(amount)、restoreBattery(amount);也可以调用 damageMonster(monsterId, amount)。怪物伤害只在本地练习模式有效。
EscapeBackroomsWorkshop.registerRule({
id: 'player.battery-drain',
defaultValue: 1,
min: 0,
max: 5,
});
EscapeBackroomsWorkshop.setRule('player.battery-drain', 0.5);
当前游戏读取的稳定规则 ID:
player.walk-speedplayer.sprint-speedplayer.battery-drainplayer.sanity-drainmonster.speed-multipliermonster.humanoid-damagemonster.smiler-damage规则值会被 Mod 自己声明和修改;能力声明不是安全沙箱。
const off = EscapeBackroomsWorkshop.on('monster:attack', ({ monsterId, damage }) => {
EscapeBackroomsWorkshop.playSound('my-mod.alert');
});
off();
EscapeBackroomsWorkshop.registerHudWidget({
id: 'my-mod.status',
mount(element) { element.textContent = 'Mod 已加载'; },
update(element, { zone }) { element.textContent = `区域:${zone}`; },
});
事件:game:start、round:start、round:end、zone:changed、monster:attack、monster:defeated、item:used、tick。
事件参数是普通对象,事件监听器抛出的异常会记录到 EscapeBackroomsWorkshop.errors,不会覆盖游戏主循环。
<script>
EscapeBackroomsWorkshop.registerItem({
id: 'example.water',
name: '示例杏仁水',
icon: '水',
onUse({ restoreSan, restoreStamina, restoreBattery, message }) {
restoreSan(20);
restoreStamina(20);
restoreBattery(10);
message('示例道具已使用');
},
});
EscapeBackroomsWorkshop.on('round:start', ({ game }) => {
const world = game.worlds[0];
EscapeBackroomsWorkshop.spawnItem({
itemId: 'example.water',
zone: 0,
position: { x: world.toWX(2), y: 0, z: world.toWZ(2) },
});
});
</script>
启动顺序由游戏固定为:
https://vibe.lumigrav.space/workshop/loader/v1.js。window.EscapeBackroomsWorkshop。Game.gl,但不启动逻辑循环和网络初始化。window.VibeHubWorkshop.beforeStart;工坊 Mod 应在此之前完成注册。EscapeBackroomsWorkshop.startGame(),启动渲染循环和游戏网络初始化。window.VibeHubWorkshop.markGameReady(),再等待 afterStart。外观、音效、规则、地图装饰和道具注册应在启动前完成。HUD 小组件可以在启动后注册,但建议仍在启动前注册以避免闪烁。回合内只通过 round:start 创建位置相关道具。
可作为公共前置依赖的内容:
EscapeBackroomsWorkshop.on(...) 监听事件。spawnItem 创建回合道具,并在 round:end 后允许游戏清理。禁止跨阶段依赖:
beforeStart 不能假设玩家已经进入房间、已经生成迷宫或已经存在怪物。round:start 不能假设玩家已经逃脱,也不能保存上一局的对象引用。afterStart 不能要求重新执行启动前注册,也不能阻塞游戏主循环。作者或 Mod slug.功能,例如 alice.medkit。setRule 决定,作者应避免多个 Mod 同时修改同一规则。mods-disabled:检测到启用 Mod 时,游戏拒绝创建或加入联机房间;本地练习可以使用 Mod。VibeHubWorkshop.getEnabledMods() 执行,不是平台代码扫描,也不是安全沙箱。平台不会阻止越权 Mod 代码。1.0.0;依赖私有字段的 Mod 不保证兼容。window.Game 或重复加载游戏脚本。Mod 不得:
Game.tick、Net、Player.update、内部 DOM 事件、Three.js 渲染器或网络消息处理器。world.maze.grid、强行改变其他玩家位置、伪造联机事件或绕过 mods-disabled。登录后可以上传完整 Mod 包或单脚本。
登录反馈渠道
有任何问题、建议或反馈,请加 VibeHub 官方支持群:
QQ 752883513
进群后请直接在群里提反馈,我们会及时关注并处理。