Skip to content

Evert playground - #294

Draft
evertvorster wants to merge 37 commits into
masterfrom
evert-playground
Draft

evertvorster wants to merge 37 commits into
masterfrom
evert-playground

Conversation

@evertvorster

@evertvorster evertvorster commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

This is my playground

Here are bugfixes, features and things far exceeding what's in git master.
As such, I might pull features, rewrite them or work on something completely different.

However, it represents the VegaStrike I actually play, and enjoy playing.

So, if you are interested in what I'm working on, pull this branch and the accompanying branch from Engine, and have a go.

If you would like to see a feature here in master, then just contact me and I can back-port it.

Danny Gehl and others added 30 commits July 18, 2026 08:27
… split)

PR #266 (Aug 8) changed config.json maintenance_factor 0.05 -> 0.01, but the
config-split (#270, Aug 9) moved this setting into engine.json base.components.
shield and carried over the old 0.05. With the engine now reading engine.json
base (post-split), shields drain the capacitor at 5% again. Restore 0.01 so
shields don't drain the capacitor at full health (pairs with engine #1698).
- can_auto_through_planets: false -- stop the route planner committing a
  straight course through a planet.
- warp_clearance_attract: 0.7 -- the destination's far-field pull, now compared
  directly against a normalized obstacle repulsion. Replaces the removed
  warp_clearance_repel and warp_clearance_hard_body_mult keys.
Neither has a consumer in the engine: auto_pilot_spec_lining_up_angle only had
a vestigial field and reader (removed in the companion engine change), and
auto_pilot_compensate_for_interdiction was not referenced at all. Drop both
from the shipped engine defaults and from the settings-app advanced template.
…to evert-playground

# Conflicts:
#	engine.json
The engine highlights objects compressing the SPEC field: a repulsor
blip/box and the tracked-target cross while SPEC is active. Give both a
theme colour so they can be tuned without a rebuild (the engine carries
matching defaults).
Match the engine default: the streak band now starts at about 1% of the
top SPEC speed and saturates at it, instead of the old 10k..50k band
that the compression model outgrew.
graphics.vsync (off/on/adaptive), graphics.frame_limit_mode
(unlimited/half/fixed) and graphics.max_framerate for the fixed cap.
Half monitor is detected from the current monitor's refresh rate.
The HUD FPS display has been part of the game for years, so the shipped default keeps it visible; the setting is still there to hide it.
The in-game config screen (Alt+C) now owns settings editing, reading and
writing the split JSON config directly, so the standalone Kivy app is
superseded. Remove it and everything that only existed to launch or
configure it:

- python/settings_app/ (the app itself)
- vega-settings (launcher script)
- vegasettings.desktop + vegastrike_settings.png (its menu entry + icon)
- setup.config (config for the legacy vscsetup utility)
- vsinstall.sh (pre-0.10 installer that launched vegasettings)

and drop their CMake install rules.
The engine no longer parses vegastrike.config; it reads the split JSON
config (config.json, bindings.json, theme.json, engine.json) from the
data directory plus the user overlay. Remove the file and its CMake
install rule, drop the dead settings_app block from config.json (only
the removed Kivy app ever wrote it), and update the readme's control
instructions to describe the in-game settings screen and bindings.json.
Legacy Python 2 CGI server that rewrote vegastrike.config for account
registration. The config XML is gone and the server has not been used in
years; drop it and its CMake install rule.
# Conflicts:
#	engine.json
#	python/settings_app/templates/advanced_template.json
# Conflicts:
#	python/settings_app/templates/advanced_template.json
He is the project lead, alongside the other authors already listed.
Multiplayer is not supported at this time outside the 0.5 Legacy edition,
so remove the ALPHA Online Multiplayer Mode section (LAN/Deathmatch and
MMO style play), its Contents entry, the stale New Features bullet, and
renumber the License section.

Addresses stephengtuggy's and BenjamenMeyer's review comments on #296.
The repair and sale economics moved off the flat per-component fee. A component is worth the
price of the part the ship fitted, or the nearest tier the shops would sell where the ship
has no part for it - and where they sell nothing like it, a share of the ship's own price.
A ship is worth its resale value less a share of the damage it carries, never less than what
it weighs in scrap.

Adds the three settings that need, and drops the two the change leaves unread: repair_price,
since charging is now per component, and sellback_shipping_price, which nothing has read for
some time - the shipping charged on a sale is the fleet entry's own transfer_price.
Llama.begin was listed at 1 credit - a placeholder - and the fleet entry takes its price from
that list on load, so everything about the campaign's starting ship came out as pocket change:
its components priced against 5% of one credit, and selling it paid nothing at all.

It is the same hull as Llama.stock (900,000), aged, so it is now 810,000: market price less a
little for wear and tear. What it has actually worn through is priced separately - the save
carries each component's damaged caps, and the repair and resale prices are charged against
those.
Two changes that go with restoring the interdiction SPEC model in the engine.

engine.json: ship the physics knobs the interdiction model reads, with the values
the 0.5.4 release line has -- warp_region0/1, warp_cruise_mult, warp_curve_degree,
min/max_warp_effect_size, default_interdiction, enough_warp_for_cruise,
warp_perpendicular, warp_orbit_multiplier, min_warp_orbit_radius, warp_behind_angle,
and the two autopilot knobs. auto_pilot_spec_lining_up_angle is set to 30 degrees
rather than 0.5.4's 3, because at 3 an ordinary turn crosses the threshold
repeatedly and toggles the drive in and out. Three values that had drifted are set
back (warp_ramp_down_time 0.5, auto_pilot_ramp_warp_down false,
auto_pilot_planet_radius_percent 0.2), and the four compression-only keys are
retired.

units.json and ships.json: rename Spec_Interdiction to ftl_interdiction, the name
ShipFunctions::Load asks for. Without it the per-unit value was unreachable and
every non-planet fell through to default_interdiction -- a hundredth, which
multiplies the distance by a hundred before the curve is applied -- so a ship could
hold SPEC right up to a base, and the data's own 0.75 for stations and 0.5 for
wormholes never applied. Renaming the data rather than the lookup is what leaves
read, write and data agreeing.
flt_orthogonal_thrust_* reads as "flight" and collides with the _dbl/_flt suffix
pair the engine uses for its numeric settings. These two price a course change
in FTL speed, so rename them to ftl_orthogonal_thrust_*, matching the engine
change in Vega-Strike-Engine-Source. Values are unchanged.
Both keys price a course change in FTL speed, and the warp block holds the rest
of the FTL speed settings (warp_multiplier_min, warp_ramp_*, warp_memory_effect).
Move them there from physics, matching the engine change in
Vega-Strike-Engine-Source. Values are unchanged.
base_locationmarker.spr is still in the pack and the engine still draws it at the
centre of every hotspot -- the sprite the player is meant to see as they move the
cursor towards a clickable area. The setting that names it was never carried into
the JSON config, so it has been empty since the split, and the marker has not been
drawn at all. Vega Strike 0.5.4's vegastrike.config named the sprite; the engine
no longer reads the XML.

Sets graphics.bases.location_marker_sprite to base_locationmarker.spr, which is
the value the old config used and what enable_location_markers and
draw_location_text (both already true) were written to work with.
…n them

The config screen writes config.json, so a docking setting that lives in
engine.json cannot be one the player changes. Move the simple rule's range and the
planet distance here with the values they already had, and add the new mode key
("simple" or "zones"), the same way the config split moved the font and HUD FOV
settings.

engine.json keeps the dock keys that are engine tuning rather than a player
choice: count_to_dock_range (the HUD countdown) and the planet dock port sizes.
planet_dock_port_size has no reader: the port a planet gets is sized from
dock_planet_radius_percent, so that one setting defines the planet's docking zone.
The other two went nowhere already -- the planet dock keys under "physics" were
parsed and never read, while planet.cpp uses dock.planet_dock_port_min_size, which
stays.
The config screen writes config.json, so a docking setting that lives in engine.json
cannot be one the player changes. The simple rule's range and the planet zone move
here with the values they had, and the new mode key joins them.

engine.json keeps the dock keys that are engine tuning rather than a player choice:
count_to_dock_range (the HUD readout) and the planet port's floor.
…nterdiction

The two knobs the orthogonal thrust cost reads collided with the codebase's _flt
float suffix and were filed in the physics block; they are named ftl_* and live in
the warp block with the rest of the drive's tuning.

auto_pilot_planet_radius_percent is the interdiction's own planet fraction and is
kept in one place now, at the value the game was running with - the copy in
config.json was overriding the value set here, which is why that never took effect.
The planet dock port keys that nothing read are gone.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants