mirror of
https://github.com/ElHombreAlex/FTL-Faster-Than-Light-VR.git
synced 2026-10-06 01:00:06 +02:00
Fix Flagship visuals, beam aiming, results and Frame controls
This commit is contained in:
1 parent
e857f4eee9
commit
cf9cfca866
27 files changed
+1084
-96
No files matched your search
@@ -45,6 +45,8 @@ Godot uses this state to place and animate visual actors. Native positions, curr
|
||||
|
||||
Projectiles originate from native weapon/drone locations and follow native shot information. Rendering does not determine hits or damage. Pause freezes presentation clocks while keeping actual native paused projectiles visible and removing stale shots. Environmental animation conveys the current hazard; exact hazard timing remains a polish/verification area.
|
||||
|
||||
Artillery uses a separate native `artillerySystems`/projectile-factory list so Flagship guns retain individual mount and shot identities even when regular weapon slots are empty. Enemy hull cells are generated from `hull_max`, with one cell per native hit point. Shields use current native charge, super charge and `shields_shutdown`; propagate shutdown through the main presentation update and include it in the shield-state cache. `Ship::GetBaseEllipse` supplies their unchanged center/radii. Cloaking reads `ship.ship.bCloaked` rather than inferring it from a cooldown or hiding the ship's gameplay state.
|
||||
|
||||
Placed weapon locks use the player's current native `targets`, `target_ship`, `autofire`, beam length and flak radius, independently of the currently armed cursor. The renderer does not infer locks from projectile history or expose enemy weapon intent. Native beam targets supply both endpoints and their sweep direction; incomplete endpoints do not create a fabricated beam lock. Room marks inherit the receiver's transform through pause, movement, tilt and scale. Clearing native targets or leaving the encounter removes their marks.
|
||||
|
||||
Space drones use native IDs and current render space to locate the procedural model's visible muzzle. Bullet launch points stay fixed in that space as the drone moves; a continuing native beam remains attached to its emitter. Ambiguous negative drone IDs use the native origin point at drone height. Native shot kind, live progress, presence and actual collision outcome control presentation. Model bodies, exhaust, emitters and tools share immutable geometry; emission state uses cached materials without changing another drone's glow. Combat, Beam and Defense Mk II variants have distinct hardware.
|
||||
@@ -53,11 +55,15 @@ Jump stretch starts from the native ship `jumping` flag and follows the transfor
|
||||
|
||||
The native missed flag and a post-update event feed evasion feedback so brief missed shots can produce a single MISS cue even between snapshot deliveries. Room condition colors respect native information permissions; role icons and hazards remain, without floor health/status bars or counters. Reactor snapshots distinguish raw availability from usable availability after native capacity/environmental limits; battery availability is separate. Equipped localized weapon/drone metadata is distinct from deployed drone actors, keeping wheel labels tied to actual shortcut slots. Optional collections are normalized by the bridge and parsed defensively by the wheel: Lua may encode an empty table as `{}` rather than `[]`.
|
||||
|
||||
Miss presentation preserves forward progress when switching to a pass-by path; a later native update cannot send the visible shot backward toward its source. It creates no collision or damage event. Beam pointing intersects the enemy deck plane independently of room-floor snapping and maps both freely placed endpoints back to native pixels. Release sends native button-up and the native confirmation click required to complete FTL's aim. The native factory retains its reversed endpoint ordering. Gaps are valid aim positions; the game controls accepted beam geometry and outcomes.
|
||||
|
||||
## Original HUD and floating windows
|
||||
|
||||
The game renders its original HUD into a separate native framebuffer. This retains native fonts, localization and values even when the normal backbuffer displays Tactical, the map or a window. The bridge removes unwanted world/enemy HUD pixels and preserves complete native window content for floating panels. Supplemental capture suppresses native window draw methods, including the separate `MenuScreen::OnRender` and `OptionsScreen::OnRender` methods, so in-run panels are not duplicated on the headset HUD. Normal capture remains unchanged. Gameplay crops the upper native status and crew region to a fixed-size headset-relative panel, omitting the lower strip; Power/Shortcuts/the wheel supply those actions. Main menus and desktop Tactical/map views retain full framing.
|
||||
The game renders its original HUD into a separate native framebuffer. This retains native fonts, localization and values even when the normal backbuffer displays Tactical, the map or a window. The bridge removes unwanted world/enemy HUD pixels and preserves complete native window content for floating panels. Supplemental capture suppresses native window draw methods, including the separate `MenuScreen::OnRender` and `OptionsScreen::OnRender` methods, plus `CombatControl::RenderTarget`, so windows and target graphics do not contaminate the headset HUD. Normal capture remains unchanged. Gameplay crops the upper native status and crew region to a fixed-size headset-relative panel, omitting the lower strip; Power/Shortcuts/the wheel supply those actions. Main menus, defeat/victory results and desktop Tactical/map views retain full framing.
|
||||
|
||||
[hud_anchor.gd](../scripts/hud_anchor.gd) gives the headset-relative pose priority and keeps fixed metre dimensions for readable text. Collision checks use the transformed hull/shield envelope and the panel's swept movement. Only a potential intersection engages the above-ship clamp, with 8 cm clearance; looking down cannot pass the HUD through the ship. The panel returns to headset-relative placement when clearance permits. Pause is attached above the same HUD panel.
|
||||
Result detection reads the native `GameOver` window's inherited `FocusWindow` open flag. Hook resolution validates `CommandGui`'s GameOver offset and the FocusWindow flag against matching signatures; the bridge bounds these read-only probes. A result state hides the encounter, combat effects, locks, controller panel and wheel, leaving the full original result screen interactive. A pending event freeze is still distinct from a result window.
|
||||
|
||||
[hud_anchor.gd](../scripts/hud_anchor.gd) gives the headset-relative pose priority and keeps fixed metre dimensions for readable text. Collision checks use the transformed hull/shield envelope and the panel's swept movement. Only a potential intersection engages the above-ship clamp, with 5 cm clearance; looking down cannot pass the HUD through the ship. The panel returns to headset-relative placement when clearance permits. Pause is attached above the same HUD panel.
|
||||
|
||||
Transport uses atomic raw RGBA files with an `FVR1` header, dimensions, sequence and timestamp. Tactical is captured at a target **30 Hz / 960×540**; map/windows retain **1280×720**. The independent HUD targets **10 Hz / 1280×720**. Native input coordinates remain **1280×720** regardless of capture resolution. PNG previews update at about 1 Hz and are diagnostics rather than the live transport.
|
||||
|
||||
|
||||
+8
-4
@@ -12,7 +12,7 @@ Open **Controls / Help** on the left panel for an illustrated controller diagram
|
||||
|---|---|
|
||||
| Right trigger | Click native HUD/menu controls, select crew, order movement or target a room |
|
||||
| Right trigger held on crew | Grab a movement preview; release over a room on that crew's current ship to order movement |
|
||||
| Right trigger held for a beam | Start at one enemy room and release at the beam's end room |
|
||||
| Right trigger held for a beam | Place the start on the enemy deck plane, then release at the endpoint; points may lie between rooms |
|
||||
| Right B | Native right click on a pointed HUD control; cancel selection/grab/wheel over space |
|
||||
| Right A | Toggle enemy room inspection; change category when the wheel is open |
|
||||
| Right grip, held | Hold the game's Shift modifier |
|
||||
@@ -20,7 +20,8 @@ Open **Controls / Help** on the left panel for an illustrated controller diagram
|
||||
| Right bumper, held | Open the shortcut wheel |
|
||||
| Right stick direction | Select a wheel slot; release bumper to confirm |
|
||||
| Left Dpad Down | Open or close Tactical |
|
||||
| Left View | Pause or resume |
|
||||
| Right Pause / Menu | Pause or resume |
|
||||
| Left View | Hide or show the controller panel |
|
||||
| Left Dpad Up | Open or close System Power |
|
||||
| Left Dpad Left / Right | Previous / next hand-screen page |
|
||||
| Left grip, held + hand motion | Move the encounter |
|
||||
@@ -31,6 +32,8 @@ Open **Controls / Help** on the left panel for an illustrated controller diagram
|
||||
|
||||
The page order is **Navigation → Tactical → Shortcuts → System Power → Jump → Help**. Navigation includes a direct **SYSTEM POWER** button as well as Shortcuts. Point at an available panel button with the right controller and pull the right trigger. Jump, Ship and Store are offered according to native game availability.
|
||||
|
||||
On Steam Frame, use the physical right **Pause / Menu** button to pause. Left **View** hides or restores the controller panel so it can be cleared from your view. Fallback controller profiles may expose these actions on different buttons; check the in-VR Help and active interaction profile.
|
||||
|
||||
## System Power page
|
||||
|
||||
This page changes the contextual controls below. **Steam Frame X/Y are on the right controller.**
|
||||
@@ -51,6 +54,7 @@ The game decides whether a change is allowed. One engine step changes one power
|
||||
- Release over empty space to keep the selection, or use B to cancel the grab.
|
||||
- Trigger-click a door or airlock to toggle it. Native locked, disabled and hacked states still apply.
|
||||
- Select a weapon or targeting system first, then point at its allowed ship and trigger-click a room. Mind control, hacking and teleporters use native targeting rules, including power, cooldown and sensor restrictions.
|
||||
- For a beam weapon, hold the trigger at its start point and release at its end point on the enemy deck plane. Room centers, floor snapping and room boundaries do not constrain these endpoints; a line may cross gaps between rooms. FTL still determines the beam's length, accepted aim and damage.
|
||||
- Tactical retains the original 2D view while allowing 3D crew, room and door interaction.
|
||||
|
||||
Enemy inspection reveals room roles; it does not reveal crew or hazards that FTL's sensors hide.
|
||||
@@ -86,9 +90,9 @@ These are native key equivalents shown on buttons, not extra physical controller
|
||||
|
||||
During an actual native jump, surrounding stars stretch along your ship's bow. Turning your head does not change the travel direction. Arrival restores normal stars, including when the arrival dialog opens. Opening the map or charging FTL alone does not start the stretch.
|
||||
|
||||
Events, Store (including BUY/SELL), upgrades, crew and equipment windows float above the player ship. Their original localized controls stay interactive. Main menus remain complete, head-relative 2D views.
|
||||
Events, Store (including BUY/SELL), upgrades, crew and equipment windows float above the player ship. Their original localized controls stay interactive. Main menus and native defeat/victory results use the complete, head-relative 2D screen. On a result screen, the encounter, target marks, combat effects and controller panel are cleared from view.
|
||||
|
||||
Gameplay uses a **compact HUD anchored to the headset**, retaining native upper status and the crew roster while removing the lower weapons/reactor/system/subsystem strip. Use Power, Shortcuts or the wheel for those lower-strip actions. The HUD keeps a fixed readable size and follows the headset whenever there is room. If that movement would carry the panel into the ship or shield, it stops 8 cm above the ship until clearance permits headset-relative placement again. A raised or oversized table can therefore raise the panel during overlap. The hand panel retains visual and pointing priority where it overlaps the HUD. Ship, shop, pause-menu and Options windows opened during a run appear only above the ship; point at that floating panel to use them. Initial/hangar menus and desktop Tactical/map inspection keep the complete native view.
|
||||
Gameplay uses a **compact HUD anchored to the headset**, retaining native upper status and the crew roster while removing the lower weapons/reactor/system/subsystem strip. Use Power, Shortcuts or the wheel for those lower-strip actions. The HUD keeps a fixed readable size and follows the headset whenever there is room. If that movement would carry the panel into the ship or shield, it stops 5 cm above the ship until clearance permits headset-relative placement again. A raised or oversized table can therefore raise the panel during overlap. The hand panel retains visual and pointing priority where it overlaps the HUD. Ship, shop, pause-menu and Options windows opened during a run appear only above the ship; point at that floating panel to use them. Initial/hangar menus, results and desktop Tactical/map inspection keep the complete native view.
|
||||
|
||||
The native intruder warning keeps its lettering and subtle shadow/fringe on a transparent backdrop; neighboring HUD controls remain visible and pointable.
|
||||
|
||||
|
||||
+8
-3
@@ -29,13 +29,13 @@ After installing the documented Python requirements, run from the repository roo
|
||||
python -m unittest discover -s tools -p "test_*.py"
|
||||
```
|
||||
|
||||
The current suite passed **44 Python tests**, including empty native drone-list, portable-launcher and modal-HUD hook/preflight regressions. The tests exercise synthetic archive/layout/font extraction, bridge schema/input translation, native-pixel filtering, raw frame publication and launcher preflight/error handling. They do not launch FTL. Temporary fixture files are created by the tests. Final Godot and fresh native-game checks for the latest targeting/jump/drone batch are pending; earlier results and focused drone fixture checks are recorded in [STATUS](STATUS.md). Physical headset coverage remains separate.
|
||||
The current correction passed **46 Python tests**, including empty native drone-list, portable-launcher, modal-HUD hook/preflight and native result-window regressions. The tests exercise synthetic archive/layout/font extraction, bridge schema/input translation, native-pixel filtering, raw frame publication and launcher preflight/error handling. They do not launch FTL. Temporary fixture files are created by the tests. Native beam placement/queued-shot acceptance and defeat/main-menu return pass; live native beam/miss outcomes remain unverified. Production state is restored with preserved campaign hashes; development desktop launch/exit and SteamVR preflight pass. Both standalone wrapper checks and source-only package checks pass; see the current delivery evidence in STATUS. Recorded evidence is in [STATUS](STATUS.md). Physical headset coverage remains separate.
|
||||
|
||||
## Godot checks
|
||||
|
||||
Use a **separate development checkout or disposable local-data folder** with the required extracted assets. Some suites write screenshots/test frames under `local_game_data/`; do not run them over an active production bridge or package those outputs. Create the local output folder before graphical suites if it is missing.
|
||||
|
||||
The commands below list eleven suites, including the new target-lock and drone resource/variant checks. The preceding HUD/wheel/bar revision passed nine suites; the following clearance/menu correction reran focused Vulkan HUD-layout and input checks plus native before/after capture checks. The latest batch's final combined Godot run and fresh native proof are pending. See [STATUS](STATUS.md) for evidence and limits. A fresh source checkout lacks game assets; model/input/font checks may fail until local extraction is complete. Existing installations should also rerun [asset extraction](INSTALLATION.md#5-extract-local-presentation-assets) to import the eight placed reticle PNGs.
|
||||
The commands below list twelve suites. The current correction passed eight headless suites and four graphical Vulkan suites, including the new ship-status render check. See [STATUS](STATUS.md) for evidence and remaining native/delivery limits. A fresh source checkout lacks game assets; model/input/font checks may fail until local extraction is complete. Existing installations should also rerun [asset extraction](INSTALLATION.md#5-extract-local-presentation-assets) to import the eight placed reticle PNGs, and refresh [native hooks](INSTALLATION.md#4-resolve-the-local-executable-hooks).
|
||||
|
||||
```powershell
|
||||
godot --headless --xr-mode off --path . --script tools/test_combat.gd -- --demo
|
||||
@@ -47,14 +47,17 @@ godot --headless --xr-mode off --path . --script tools/test_environment.gd -- --
|
||||
godot --xr-mode off --path . --script tools/test_ui.gd -- --desktop
|
||||
godot --xr-mode off --path . --script tools/test_controller_ui.gd -- --demo --desktop
|
||||
godot --xr-mode off --path . --script tools/test_frame_transport.gd -- --desktop
|
||||
godot --xr-mode off --path . --script tools/test_ship_status_render.gd
|
||||
godot --headless --xr-mode off --path . --script tools/test_hud_layout.gd -- --desktop
|
||||
godot --headless --xr-mode off --path . --script tools/test_damage_visuals.gd -- --demo --desktop
|
||||
```
|
||||
|
||||
The UI/controller/transport suites use actual GPU rendering, so keep their graphical mode. Headless runs of them are not equivalent verification. These suites cover effects, room/beam picking, controller context/bindings, model/task distinctions, environmental presentation, original local fonts, UI priority/crops and the raw frame protocol. HUD-layout checks cover headset-relative placement, swept collision prevention and transformed ship/shield clearance. Controller checks include native empty/malformed equipment collections. Damage-visual checks cover permission-aware room colors, absence of floor status bars, native miss presentation and oxygen-dependent breach effects.
|
||||
The UI/controller/transport/ship-status suites use actual GPU rendering, so keep their graphical mode. Headless runs of them are not equivalent verification. The ship-status suite needs owner-local extracted ship assets; its default state is a labelled synthetic renderer fixture using `rebel_long`. To inspect a recorded native enemy instead, add `-- --state=res://local_game_data/recorded-enemy.json --output=res://local_game_data/ship-status`. The corresponding layout/art must also be extracted. Neither mode drives FTL. These suites cover effects, room/beam picking, controller context/bindings, model/task distinctions, environmental presentation, original local fonts, UI priority/crops and the raw frame protocol. HUD-layout checks cover headset-relative placement, swept collision prevention and transformed ship/shield clearance. Controller checks include native empty/malformed equipment collections. Damage-visual checks cover permission-aware room colors, absence of floor status bars, native miss presentation and oxygen-dependent breach effects.
|
||||
|
||||
Target-lock checks cover numbered player-owned native targets, autofire color, beam endpoint direction, pinpoint beams, flak radius, transformed/pause attachment, receiver visibility and cleanup. Drone checks cover distinct Mk II hardware, shared immutable body/exhaust/emitter geometry and independent emission state. Combat checks include native drone muzzle/render-space placement, fixed bullet launch points, continuing beams and authoritative progress/pause/outcome handling. Jump checks use native `jumping` and arrival-dialog fixtures; the action-wheel context checks include resetting each opening to weapons/drones.
|
||||
|
||||
For the current correction, cover one-HP hull cells for differing enemy hull maxima; separate artillery mounts and native shot origins; shield shutdown/charge and native cloak restoration; forward-only miss progress; free beam deck/gap endpoints under encounter transforms; complete result-screen cleanup; 5 cm HUD clearance; and the right Pause/Menu versus left View actions. Native checks must separately establish real artillery/shield/cloak state, accepted beam endpoints, result-window detection and supplemental target isolation. Rendered fixtures establish presentation behavior and must be labelled as fixtures.
|
||||
|
||||
No test command above drives a native game or modifies its saves. Separate **live bridge checks** do run the game and can advance a run or change equipment/state.
|
||||
|
||||
## Native integration checks
|
||||
@@ -72,6 +75,8 @@ When adding a system or command, compare the visible native outcome and snapshot
|
||||
|
||||
A preceding native missed-event check used a private projectile and forced `Evasion.MISS` to exercise the actual flag/event path. It is integration evidence, not a measurement of random evasion probabilities. Enemy room condition colors respect the native visibility rules; floor health/status bars are no longer rendered. Do not infer permission to reveal other hidden state from public icon color or crew-room fog alone.
|
||||
|
||||
For the October 5 correction, native beam aim/release and its queued-shot transition are verified. The tested newly equipped and original saved missile/burst factories queued shots without releasing live projectiles, so this session does not establish a native beam sweep or missed-shot outcome. Keep that limit explicit and do not assign a speculative cause. Graphical miss fixtures prove forward presentation/cleanup only. Controlled Victory/defeat checks prove native result-screen integration, not a completed campaign.
|
||||
|
||||
The preparer, resolver and launcher reject unknown executable fingerprints. To support another executable, identify a known owned build, implement and validate a complete matching route and keep the rejection path. Do not disable fingerprint checks or reuse addresses from a different build.
|
||||
|
||||
## Profiling and visual inspection
|
||||
|
||||
@@ -106,9 +106,9 @@ Use `CApp.zhl` from the matching **win32/1.6.9** directory of the Hyperspace sou
|
||||
"C:\Games\FTL-VR-Lab\hooks.json"
|
||||
```
|
||||
|
||||
Keep the entire signature directory together. The resolver also reads neighboring files such as `CEvent.zhl`, `TextInput.zhl`, `CommandGui.zhl`, `TabbedWindow.zhl`, `ChoiceBox.zhl`, `MouseControl.zhl`, `StarMap.zhl`, `MenuScreen.zhl`, `OptionsScreen.zhl`, `SystemControl.zhl`, `SystemBox.zhl` and `ShipSystem.zhl`. It checks unique signatures and structure probes, then stores the fingerprint and resolved addresses locally. Do not copy somebody else's `hooks.json` as a substitute.
|
||||
Keep the entire signature directory together. The resolver also reads neighboring files such as `CEvent.zhl`, `TextInput.zhl`, `CommandGui.zhl`, `TabbedWindow.zhl`, `ChoiceBox.zhl`, `MouseControl.zhl`, `StarMap.zhl`, `MenuScreen.zhl`, `OptionsScreen.zhl`, `CombatControl.zhl`, `GameOver.zhl`, `FocusWindow.zhl`, `SystemControl.zhl`, `SystemBox.zhl` and `ShipSystem.zhl`. It checks unique signatures and structure probes, then stores the fingerprint and resolved addresses locally. Do not copy somebody else's `hooks.json` as a substitute.
|
||||
|
||||
**Updating an existing installation:** close the client and game, then rerun this step with the current `resolve_hooks.py` against your verified lab executable. The HUD/menu correction requires the new `MenuScreenOnRender` and `OptionsScreenOnRender` addresses. Keep the matching `MenuScreen.zhl` and `OptionsScreen.zhl` beside `CApp.zhl`. No game reinstall or save reset is needed. Run `CHECK-SETUP.cmd` afterward.
|
||||
**Updating an existing installation:** close the client and game, then rerun this step with the current `resolve_hooks.py` against your verified lab executable. In addition to the earlier `MenuScreenOnRender` and `OptionsScreenOnRender` hooks, the current correction requires `CombatControlRenderTarget` and validated native result-window offsets. Keep matching `CombatControl.zhl`, `GameOver.zhl` and `FocusWindow.zhl` beside `CApp.zhl`, together with the earlier neighboring signatures. Run `CHECK-SETUP.cmd` afterward.
|
||||
|
||||
## 5. Extract local presentation assets
|
||||
|
||||
|
||||
+29
-9
@@ -1,6 +1,6 @@
|
||||
# Project status
|
||||
|
||||
**Prepared source snapshot:** `0.1.0-alpha.1`, 2026-10-03, with subsequent gameplay refinements described below.
|
||||
**Prepared source snapshot:** `0.1.0-alpha.1`, with source refinements through 2026-10-05 described below.
|
||||
|
||||
This is a playable experimental client connected to the real game. It is suitable for technical enthusiasts who can follow the source setup instructions and help test supported versions. A broad public release and a portable compiled installer are still future work.
|
||||
|
||||
@@ -10,23 +10,43 @@ This is a playable experimental client connected to the real game. It is suitabl
|
||||
| --- | --- |
|
||||
| Campaign | FTL runs its normal campaign, events, difficulty, combat rules, audio and saves |
|
||||
| Ships | Dynamic local layouts, extruded hull presentation, rooms, weapon mounts, opposing bows in combat and stable movable encounter placement |
|
||||
| HUD | Compact original status/crew panel follows the headset first at a fixed readable size; lower strip removed; clamps 8 cm above the transformed hull/shield only when its movement would intersect the ship; full main menus remain head-relative |
|
||||
| HUD | Compact original status/crew panel follows the headset first at a fixed readable size; lower strip removed; clamps 5 cm above the transformed hull/shield only when its movement would intersect the ship; full main menus and results remain head-relative |
|
||||
| Navigation | Available actions only; actual sector map appears above/ahead of the pilot room and faces the viewer |
|
||||
| Menus/dialogs | Main menus remain 2D; in-run native shop/ship, pause-menu and Options windows appear only above the ship; event choices float in the encounter; BUY/SELL panels are retained |
|
||||
| Menus/dialogs | Main menus and defeat/victory results retain the complete native 2D view; results clear the tabletop presentation; in-run shop/ship, pause-menu and Options windows appear only above the ship; event choices float in the encounter; BUY/SELL panels are retained |
|
||||
| Crew | Native positions/tasks/selection, animated procedural race models, grab preview and native move orders; occupied crew face the viewer |
|
||||
| Targeting | Weapon and beam room targeting; persistent player-owned numbered native locks with red/yellow autofire colors, actual beam endpoints/direction and flak spread radius; native mind-control, teleporter and hacking target routing |
|
||||
| Targeting | Native weapon room targeting and freely placed beam endpoints across the enemy deck/gaps; persistent player-owned numbered locks with red/yellow autofire colors, actual beam direction and flak spread radius; native mind-control, teleporter and hacking target routing |
|
||||
| Systems | Dpad Up and a Navigation button open System Power; native capped reactor availability, storm loss and battery availability remain separate |
|
||||
| Doors | Open/closed, locked, damaged/hacked state and thin tier-dependent armor driven by native strength |
|
||||
| Combat visuals | Shields/super shields, weapon charge strips/pips, native firing/impact/projectile paths, native miss cues/pass-by presentation and enemy hull bar using locally imported vanilla art |
|
||||
| Combat visuals | Native charged/super shields and shutdown, native cloaking flag, separate artillery mounts, weapon charge strips/pips, native firing/impact paths, forward-moving missed shots and one hit point per enemy hull pip |
|
||||
| Drones | Distinct procedural space/interior families and Combat/Beam/Defense Mk II hardware; deployment/power state, native render-space placement and visible muzzle shots with native progress/outcomes |
|
||||
| Hazards | Room fire and cross-shaped breach tiles, oxygen-dependent air wisps, surrounding asteroid/sun/nebula/storm/pulsar presentations and native jump star stretch along the ship bow with arrival reset |
|
||||
| Room feedback | Native role icons and permission-aware condition colors; no floor health/status bars or counters; normal sensor fog still applies |
|
||||
| Input | Steam Frame actions, generic fallback profiles, controller infographic, equipment-name/family/ammo action wheel defaulting to weapons/drones on every opening, and QWERTY rename keyboard |
|
||||
| Input | Steam Frame right Pause/Menu pauses and left View hides/shows the controller panel; generic fallback profiles, illustrated Help, equipment-name/family/ammo wheel defaulting to weapons/drones, and QWERTY rename keyboard |
|
||||
| Lifecycle | Isolated game copy, fingerprinted hooks, separate `hs_ftlvr_` saves, pre-launch backup and graceful save/exit |
|
||||
|
||||
## Verification recorded during development
|
||||
|
||||
### Latest targeting, jump and drone refinements
|
||||
### Latest combat, results and controller corrections — 2026-10-05
|
||||
|
||||
This batch corrects the enemy hull scale to one pip per native hit point; snapshots and renders artillery factories separately from regular weapon slots; uses native shield charge/shutdown and ship cloaking state; keeps missed shots progressing forward; and accepts beam endpoints on the enemy deck plane, including gaps between rooms. The native GameOver window selects the complete 2D result screen and clears tabletop ships, effects and interaction surfaces. The HUD collision clearance is 5 cm. Right Pause/Menu pauses; left View hides or restores the controller panel.
|
||||
|
||||
The supplemental HUD pass also suppresses `CombatControl::RenderTarget`, while the normal capture retains original target graphics. Native result-window detection is read-only and comes from fingerprint-validated `CommandGui`/`GameOver`/`FocusWindow` structure probes. Existing installations must refresh hooks as described in [Installation step 4](INSTALLATION.md#4-resolve-the-local-executable-hooks).
|
||||
|
||||
Current source passes **46 Python tests and twelve Godot suites**: eight headless suites plus graphical Vulkan UI, controller UI, frame transport and ship-status rendering. Five recorded native ship layouts keep every tested hull/keel corner inside the shield volume. GPU hull fixtures show exactly eight lit pips for both 8/15 and 8/22 hull. A five-frame missed-shot fixture progresses forward and clears with zero invented impacts.
|
||||
|
||||
Fresh copied-profile native checks find 4/3/2 artillery factories across the Flagship phases, with powered/firing state and enemy-owned first-phase shot origins. Actual first-phase native cloaking is observed. Every phase's snapshot shield center/radii exactly matches `Ship::GetBaseEllipse`; no geometry-center change is required. The shield correction propagates native shutdown and includes shutdown in the cached presentation state. A private call to the real native Victory function produces complete credits/result state with `end_screen=true`, `capture_full_screen=true`, `blocking=true` and no stale floating panel. The native result PNG was inspected; this is controlled integration evidence, not a completed campaign.
|
||||
|
||||
Native beam placement passes through the production release sequence: button-up followed by FTL's native confirmation click. The factory retains both freely placed off-center/gap points, in its reversed native endpoint order, with at most 0.00003 native-pixel error. Its native charge transition then consumes those targets into a queued shot. The newly equipped private fixture did not release a live beam projectile, so native beam sweep/damage campaign coverage remains open.
|
||||
|
||||
The Vulkan native-Victory presentation was inspected and passed with the full result screen and tabletop cleanup. A fresh native defeat check also passed: the full capture remained opaque, its Vulkan presentation was inspected, and the actual main-menu reset reported `ready=false`, `ui_mode=menu`, `end_screen=false`, `panel_open=false`. The native bridge exited with code 0 and no errors.
|
||||
|
||||
Live native beam projectile/sweep/damage and missed-shot outcomes remain unverified. Newly equipped private factories and the original saved missile/burst factories accumulated queued shots without emitting live projectiles in this QA session. The accepted aim/queue and rendered forward-miss fixtures establish their specific behavior; they do not establish those live outcomes.
|
||||
|
||||
Production archive/settings and the `ftlvr` save prefix are restored. Development and both standalone folders pass setup, SteamVR readiness and desktop Vulkan wrapper launch/exit with code 0, clean logs and disconnected error-free bridges. All four campaign hashes remain unchanged after final launches; both executable fingerprints, active/source Lua, regenerated hooks and absence of private QA events are verified. The matching 127-file source-only package passes publication checks with zero failures/warnings. Local source folders are updated; the verified source snapshot is recorded in Git history. Game assets/runtime/saves remain excluded and license notices are unchanged.
|
||||
|
||||
No physical Steam Frame test has been performed for this revision. These desktop/preflight checks do not establish physical controller coverage or stereo performance. Earlier checks below establish their recorded revisions only; complete campaign coverage and actual native beam/miss outcomes remain open.
|
||||
|
||||
### Preceding targeting, jump and drone refinements
|
||||
|
||||
The source now renders the player's native placed target state as numbered room locks, retaining autofire color, both beam endpoints and native flak radius. Marks remain attached through pause and encounter placement changes; missing targets, destroyed receivers and ended encounters remove them. Only player-owned weapon targets supply these marks. Jump stretch follows the transformed player ship bow and the native `jumping` flag; map opening/FTL charging do not start it. Arrival dialogs reset the sky even while a native jump flag is still clearing. Every wheel opening defaults to weapons/drones, with event choices retaining their separate context.
|
||||
|
||||
@@ -80,9 +100,9 @@ Production combined Vulkan launch/save/exit smoke passed: exit 0, clean client l
|
||||
| Hacking | Enemy room targeting accepted; attachment/effect completion remains unverified |
|
||||
| UI | Native HUD during Tactical/map/store/event/ship modes; enemy-region transparency; BUY/SELL content; rename input and original fonts checked across development revisions |
|
||||
| Drones | Native equipment/special/global lists deduplicated; actual combat and interior battle-drone state inspected |
|
||||
| Automated tests | Current 44 Python tests and eleven Godot suites pass; native normal/cleared/autofire targets, jump/arrival and warning blink captures pass; previous revision results are recorded above |
|
||||
| Automated tests | Current 46 Python tests and twelve Godot suites pass; eight headless plus four graphical Vulkan suites |
|
||||
| Desktop graphics | Vulkan rendering and model/UI inspection checked on RTX 4060 Ti 8 GB |
|
||||
| Save handling | Fresh copied-profile native checks and final launch/exit smokes preserve all four campaign hashes; production prefix/archive/settings and both executable fingerprints are verified |
|
||||
| Save handling | October 5 production restoration and final standalone launch/exit checks preserve all four campaign hashes and both executable fingerprints |
|
||||
| Steam Frame play | Maintainer confirmed playability and substantial partial runs; latest changes need further hardware coverage |
|
||||
|
||||
The automated suite uses synthetic fixtures for many edge cases. A passing test does not establish that every race, layout, weapon, drone, hazard or boss encounter has been exercised in a campaign.
|
||||
|
||||
@@ -18,7 +18,7 @@ Start with `CHECK-SETUP.cmd`, or `CHECK-SETUP.cmd --desktop` if testing without
|
||||
| Lab destination rejected | Use a new empty separate directory outside the installed game. A nonempty unrelated directory is intentionally refused. |
|
||||
| `Hyperspace.ftl`, loader DLL or ftlman error | Verify the full release folder structure and the ftlman executable/version described in Installation. |
|
||||
| Resolver reports a missing/ambiguous signature | Use the matching win32/1.6.9 signature directory from Hyperspace source, with all neighboring `.zhl` files. Do not use other people's hook addresses. |
|
||||
| “Regenerate lab hooks.json ... live native HUD capture” after updating | Close the game and rerun Installation step 4 with the current resolver. The matching signature directory must include `MenuScreen.zhl` and `OptionsScreen.zhl`. Then rerun `CHECK-SETUP.cmd`. |
|
||||
| “Regenerate lab hooks.json ... live native HUD capture” after updating | Close the game and rerun Installation step 4 with the current resolver. Keep the complete matching signature directory, including `MenuScreen.zhl`, `OptionsScreen.zhl`, `CombatControl.zhl`, `GameOver.zhl` and `FocusWindow.zhl`. Then rerun `CHECK-SETUP.cmd`. |
|
||||
| Recorded original installation unavailable | The bridge still reads the original `ftl.dat` for newly encountered ships. Restore that location or rebuild the lab/config against the new installation. |
|
||||
|
||||
To use a real Python installation outside PATH, set `FTLVR_PYTHON` to its executable before running `SETUP.cmd` (see Installation). These scripts do not use the Microsoft Store alias. Set `FTLVR_NO_PAUSE=1` only when calling the launchers from an automated script that captures their output; otherwise failures remain open so they can be read.
|
||||
@@ -33,6 +33,9 @@ To use a real Python installation outside PATH, set `FTLVR_PYTHON` to its execut
|
||||
| “Bridge already running” | Close the existing client and allow graceful shutdown before retrying. Do not start several sessions against one VR save profile. |
|
||||
| Black or stale HUD/tactical image | Check `bridge_status.json` for fresh heartbeat/state/capture and errors. Check the logs. Do not judge the live Tactical stream from diagnostic PNGs: PNG previews update only once per second. |
|
||||
| Ship, pause-menu or Options window appears both on the HUD and above the ship | Update this checkout's source and refresh its configured lab hooks using Installation step 4. Current capture keeps in-run windows only on the floating panel while retaining the status/crew HUD. |
|
||||
| Controller panel has disappeared | Press left View to restore it on Steam Frame. Native defeat/victory results hide it together with the tabletop scene; use the original 2D result controls. |
|
||||
| Left View no longer pauses | The current Steam Frame mapping uses the physical right Pause/Menu button for pause/resume. Left View hides/shows the controller panel. |
|
||||
| Beam endpoint snaps to a room, or native target graphics appear on the compact HUD | Update this checkout's source and refresh its local hooks. Beam endpoints use the enemy deck plane, including gaps; supplemental capture excludes native target graphics while preserving the normal game screen. |
|
||||
| Pointer missing or controller unresponsive | Confirm both controllers are tracked in SteamVR. Inspect the in-game warning, Help diagram and `xr_input.json` for each hand's tracking/profile/trigger values. Some fallback controller bindings remain untested. |
|
||||
| Tactical looks slow | Report headset settings and whether the 3D scene, HUD or Tactical capture is slow. The live Tactical stream targets 30 Hz; mono desktop capture measurements are not stereo headset FPS. |
|
||||
| Poor performance | Close unrelated GPU-intensive programs, record SteamVR resolution/refresh rate and note the encounter type. This alpha still needs physical stereo frame-pacing measurements and broad campaign QA. |
|
||||
|
||||
Reference in new issue
Block a user