Trace shots against current map geometry instead of stale render depth. Preserve outline counters across volatile pixel calls and freeze gameplay on cinematic, transition and death ticks. Clamp packed HP before narrowing and match legacy archetype rules. Publish IDE saves atomically; failed saves block file switches and builds. Drain compiler output while hidden. Verify runtime/editor builds, 112 editor checks, 148 ASM checks and live preview parity. Record remaining stages in docs/STABILIZATION.md.
67 lines
3.5 KiB
Markdown
67 lines
3.5 KiB
Markdown
# Stabilization roadmap
|
|
|
|
Stages are delivered separately. Each completed stage is tested, committed and
|
|
pushed before work stops for confirmation. Editor and runtime UI redesign will
|
|
use an Unreal Engine 5-inspired visual style; stage 1 does not redesign UI.
|
|
|
|
## Stage 1 — correctness and data safety
|
|
|
|
Implemented:
|
|
|
|
- `DrawRectOutline` keeps loop counters in a callee-saved register, not the
|
|
volatile registers overwritten by `DrawPixel`. Nonpositive sizes draw nothing.
|
|
- `TraceShotWall` traverses current map cells independently of rendering. Distances
|
|
are 24.8 world units; closed doors, glass, portals and out-of-map cells block
|
|
shots. Open doors do not. Corner-adjacent walls block diagonal seam shots.
|
|
- Hitscan chooses the nearest live guard intersecting the forward billboard
|
|
hitbox. Half-width is 16 world units times authored scale (zero scale means
|
|
legacy 1.0), not a constant number of screen pixels.
|
|
- `IsGameplayBlocked` centralizes gameplay gating. `UpdatePlayer` latches blocked
|
|
ticks before processing cinematic state. AI, pickups and weapon timers freeze
|
|
during active/pending cutscenes and room fades. END/skip and instant transitions
|
|
cannot resume AI or fire stale input halfway through a tick. Death blocks player
|
|
movement, turning and firing; lethal damage stops the remaining entity pass.
|
|
- Packed entity metadata remains binary-compatible. Only `flags == 0` enables
|
|
legacy texture-based archetypes; any nonzero flags explicitly encode the low
|
|
type byte, including Prop. Health uses one byte: 1..255, zero = legacy 100 HP.
|
|
The C++ setter clamps before narrowing, and the inspector exposes 1..255.
|
|
- IDE source writes use a unique sibling temporary file, checked full write,
|
|
flush, close and atomic replacement. Failure preserves disk contents and dirty
|
|
buffer. Loading publishes a new document only after a complete valid text read.
|
|
File switches and builds stop on failed autosave. Saves target the file actually
|
|
opened, not a newly resolved fallback path.
|
|
- Compiler output is drained even with the IDE hidden. Process startup uses the
|
|
system command processor with quoting for project paths containing spaces.
|
|
|
|
### Verification
|
|
|
|
Windows commands:
|
|
|
|
```cmd
|
|
build.bat
|
|
editor\build_editor.bat
|
|
python tools\test_regressions.py
|
|
```
|
|
|
|
Results: editor **112/112**, ASM **148/148**. The suite also checks live x86/x64
|
|
preview IPC, DX11 pixel equality, cinematic trace equality and unchanged project
|
|
assets. New tests exercise production gameplay and IDE procedures, including
|
|
failed atomic replacement under a Windows sharing lock and hidden compiler output
|
|
exceeding pipe capacity. Interactive UI playtesting remains separate.
|
|
|
|
## Remaining stages
|
|
|
|
2. Predictable simulation: fixed 60 Hz ticks, fractional movement, normalized
|
|
input, complete collision shape, current-room restart/reset policy. Extend
|
|
gameplay gating into explicit states and separate cinematic camera ownership.
|
|
3. Honest editor/gameplay: complete undo, keys/switches and supported interactions;
|
|
UE5-inspired editor/runtime UI redesign.
|
|
4. Project lifecycle and validated, safe standalone export.
|
|
5. Measurements and targeted renderer/editor optimizations.
|
|
6. Finished multi-room demo game and release verification.
|
|
7. Data-driven extensions and subsequent rendering features.
|
|
|
|
Stage 1 intentionally does not claim that all audit findings are fixed: restart
|
|
semantics, fixed timing, collision/AI visibility, full undo and exporter safety
|
|
remain assigned to subsequent stages. Existing map and texture assets are not
|
|
migrated or rewritten.
|