Repository navigation
1.0.0
First public release. The mod was previously a single unreleased KRPC.Bridge.dll; this
version splits it into a Core plus three plugins and adds a large amount of FMRS surface
that was verified against the mod's source but never exposed.
Added
FMRS
recovery_report()andrecovered_funds()— read FMRS's recovery ledger. The only place
the outcome of a booster recovery is stated as a number rather than inferred by diffing
the funds counter. Covers funds, science, contracts, kerbals lost and buildings destroyed.recover_current()— recover the dropped stage you are flying, through FMRS's own
settlement path.revert_to_launch()— FMRS's Revert To Launch, which still works after a jump when KSP's
own revert is gone.delete_dropped()anddelete_all_dropped()— stop tracking a stage and delete its save.separation_times— UT per FMRS save file, so a stage's separation time comes from what
FMRS recorded rather than from when a poll happened to notice it.kerbals_aboard— which dropped stage each kerbal is on.set_vessel_state()— repair a stage wrongly markedRECOVEREDso a landing series can
continue.launched_at,enabled,kick_to_main— mission clock, plugin state, and advance
warning that FMRS is about to drag the game back into the main mission.track_parachutes,control_uncontrollable,auto_cut_off,screen_messages,
window_hidden— the session settings that decide whether a booster is tracked at all,
plus two for recording.
Core (conn.bridge)
- An ordered, id-numbered event log:
poll_events(),on_event(),mark(),
events_recorded. Lets a script observe an instant — a separation, a part dying —
rather than sampling a value and hoping. Hooks ten stock GameEvents plus
fmrs.dropped,fmrs.forgotten,fmrs.on_dropped,fmrs.on_mainand
ocisly.rearmed. describe_type()— list any loaded mod type's members from Python, without a rebuild.plugins,available_plugins,has_plugin()— what loaded and, when it did not, why.hide_ui(),show_ui(),ui_visible— fires the GameEvents F2 fires, so mod windows go
away too.- Background jobs (
await_joband friends) for work too expensive to run inside a single
RPC. Scaffolding for plugins you write; nothing shipped here uses it.
Build
build/scanruns kRPC's ownScanner.GetServicesagainst the built DLLs, catching a
malformed signature — which would disable the entire kRPC server in game — in about a
second.build.cmdruns it on every build.build/verifynow globssrc/**/*.csinstead of listing files, so a new plugin cannot
be left unchecked by omission.
Changed
- Split into Core plus plugins. One
KRPC.Bridge.dllbecomesKRPC.Bridge.Core.dllat
the root of the mod folder, withFmrs,OcislyandMechJebunderPlugins/. Load
order is declared withKSPAssembly/KSPAssemblyDependency, so a plugin whose Core is
missing is skipped by KSP with a log line rather than throwing on first use. - FMRS now works outside flight. The service bound only to the flight
KSPAddon, but
FMRS keeps its state on a base class shared by four per-scene subclasses. Resolving
against the base makes the tracked stages and the recovery ledger readable from the space
centre — which is where you want them. MechJeb.ascent_setting_names,ascent_flag_namesandcore_membersare cached. They
are reflection walks, a client can put a stream on any property, and a streamed property
re-runs every physics tick.- HUD control moved from the FMRS-era
Bridgeservice to the Core; the automatic hide
after a scene load stays onconn.ocisly, because it has to happen after the cameras are
restored and only that coroutine knows when they are. - Every XML docstring rewritten against verified FMRS 1.2.9.6 and kRPC 0.6.0 behaviour, and
checked against the tags the kRPC Python client actually parses.
Fixed
jump_to_vesselbound the FMRS overload by exact parameter types. FMRS declares three,
two of which take two arguments —(Guid, bool)and(Guid, string)— so binding by
name or arity can select the wrong one.ocisly.rearm()now raises the game HUD for the half second it needs and puts it back.
OCISLY refuses to open a camera while the UI is hidden and refuses silently, so with
hide_ui_on_scene_loadon — the configuration for a recorded flight — a manual rearm
armed nothing and reported success. It also counts cameras the mod actually took, rather
than calls that did not throw.jump_to_main()returns immediately when you are already on the main mission. FMRS's own
entry point early-returns there, so nothing reloaded and the wait ran to its 90-second
timeout before throwing — on a call the guard-rail advice tells you to make defensively.mech_jeb.ascent_setting_namesandascent_flag_namesno longer advertise MechJeb's
public backing fields._autostagesits next toAutostageand writing it skips the
staging registration, so the list offered two names of which one silently did nothing.fmrs.main_vessel_idreturns an empty string rather than the zero GUID when no flight is
armed. The zero GUID is truthy in Python.
Documentation
docs/API.md,docs/SCRIPTING.md,docs/ARCHITECTURE.md, all in English.LICENSE(MIT) andNOTICErecording that the mod links against kRPC (LGPL v3) using
the player's own copy, and reaches FMRS, MechJeb, OCISLY and HullcamVDS purely by
reflection with nothing redistributed.