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 the three stages of a Control map 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.opy,src/devMain.opy, andsrc/externalMain.opystructurally aligned whenever practical. - When changing event logic, validate the shared catalog and both order files:
src/events/catalog/eventCatalog.opysrc/events/catalog/eventCatalogMain.opy/src/events/catalog/eventCatalogDev.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
- Code is the source of truth.
docs/README.mdindexes the rules and contracts. - 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.
When preparing a Bastion build, sync the platform's current metadata from the read-only Agents APIs:
pnpm run sync:platform-dataThe public Agents response omits numeric player IDs, which the sync does not consume. BASTION_BUILD_TOKEN may still be configured and is then sent as a Bearer token, but it is not required.
The sync validates stable IDs, supported enums, and cross-resource references, updates generated data, and then compiles the OverPy entries. Bastion retains responsibility for stable IDs, OverPy implementations, and compilation. This flow does not use a Release API, Candidate or Draft lifecycle, data locks, consistency snapshots, or platform build tasks.
GitHub Actions compiles and releases the Workshop files when a push to main changes src/**, on a schedule every two days, or on manual dispatch:
- Workflow file:
.github/workflows/release.yml - Release artifacts:
build/cn-zh-CN.owbuild/external-en-US.ow
- Package manager:
pnpm
Local build:
pnpm install
pnpm run buildpnpm run build first synchronizes current platform metadata through the Agents API, then compiles CN zh-CN, External en-US, External zh-CN, and CN development zh-CN. The release build emits the CN and External production artifacts.
Build scripts use the Wright CLI (wright compile ...) with the OverPy provider. Install Wright from https://wrightkit.dev and run wright update provider opy once. CI and release install the Wright CLI with wrightkit/setup-wright and use the latest provider.
Build each entry independently:
pnpm run build:cn:zh
pnpm run build:external:en
pnpm run build:external:zh
pnpm run build:dev:cn:zhThe platform website now owns the title, event, glossary, and allocator views. Bastion keeps only the source data, OverPy generation, and build validation.
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.