English | 简体中文
This repository uses Apache-2.0 as its base license, with additional non-commercial restrictions. See LICENSE and NON_COMMERCIAL.md.
This is a continued development build based on OW2 Bastion Escape.
It preserves the classic Bastion Escape gameplay and expands it for Overwatch 2.
Players cooperate to sneak past Bastion guards and reach each map's finish line. The challenge increases over time. This mode is also known as Prison Escape / CCTV.
We have added the following content:
Two minutes after the match starts, the system assigns a random event to each surviving player. After each event ends, another one is drawn in about 30-45 seconds until the match ends.
Events are split into buffs, debuffs, and mechanics. Some events help, some are deadly. The goal is unchanged: survive and reach the finish line, while handling constant "surprises" under Bastion fire.
This mode combines three Control maps into one long run. Players must clear all three phases and reach the final finish line. If a player dies, they respawn in the current phase's respawn room.
Supported Maps: - Lijiang Tower - Samoa - Oasis - Busan
- AI Bastions deal increased damage
- AI Bastions launch grenades
- AI Bastion damage reduction cannot be disabled
- Hero selection cannot be skipped
Players can switch between first-person and third-person in the respawn room, or open the in-game menu via Interact + Melee to switch.
Configurable in Workshop settings, up to 4.5 hours.
Enable in Workshop settings.
- This project supports AI-assisted development. Read
AGENTS.mdfirst for architecture and collaboration rules. - Keep
src/main.opyandsrc/devMain.opystructurally aligned whenever practical. - When changing event logic, validate both:
src/config/eventConfig.opysrc/config/eventConfigDev.opy
- Follow server stability rules in
docs/improve-server-stability.md:- Avoid loops without
wait - Default to condition-block gating for continuous rules (
~0.016stop-to-bottom short-circuit) - Put high-selectivity low-cost conditions before expensive checks
- Avoid heavy computation in
Ongoing - Each Playerwhenever possible - Use action-side
If + waitchecks only for explicit frequency control or shared-gate sub-checks - Rules with identical gates are execution-order sensitive (earlier declaration runs first)
- Avoid loops without
- Module docs are under
docs/modules/. Update related docs together with source changes when relevant. - Keep changes minimal; avoid unrelated include-order changes or broad formatting-only diffs.
- Release validation baseline: use the latest Workshop code to open a new room. Existing rooms do not hot-reload new scripts, so in-room script replacement is not an acceptance path.
This project supports automatic compile-and-release of Workshop files via GitHub Actions when pushing to main:
- Workflow file:
.github/workflows/release.yml - Release artifacts (dual-language):
build/en-US.owbuild/zh-CN.ow
- Package manager:
pnpm
Local build:
pnpm install
pnpm run buildBuild scripts use the overpy CLI (overpy compile ...) from the npm package.
Build each entry independently:
pnpm run build:main
pnpm run build:devTitle / event / allocator query page:
pnpm run sync:query-data
pnpm run test:title-data-sync
pnpm run test:event-data-sync
pnpm run build:title-querypnpm run grant:title now updates data/title-source.json and automatically runs title-data sync when it makes changes. The static query page now includes titles, events, glossary terms, and the allocator report. Generated page data flows through the tool scripts into web/title-query/public/data/*.json, and the page is deployed by .github/workflows/pages-title-query.yml.
Dual-language release build:
pnpm run build:releaseTower escape mod made by: WOBBLYOW#2981, NOTBANANA#21520 and PIRATEBOOT#2133.
Hanamura made by: REYDI#21629 (not in current version though)
Blizzard World, Eichenwalde, Hollywood, Junkertown, Paris, Temple of Anubis by DATZENYAT#2990.
Bastion Escape 2 by EfeDursun125#2815
OW2 Bastion Escape by BearWhoLived#1783
Licensed under Apache License 2.0, with additional non-commercial restrictions in NON_COMMERCIAL.md.