The B3 hook's unlock cascade was compare-mode only, so a replace run left the completed node unstamped and no tech unlocked -- and its only per-call counter was gated on the cascade, so a replace run had no instrument of its own saying a completion had happened at all. Lane CR needs both halves to ask whether ProcessResearch can be displaced. research.replace_cascade=on (default off, so the shipped behaviour is unchanged and still measurable) lets a replace-mode call write the four TechNode words SetResearched stamps and the tree's completion-order counter. The ServerPlayer half of the callback stays unmodelled and stays declared: no event is posted, no ObservedTech element is appended, no tech effect is applied. The pair of settings is the measurement -- same binary, one config line, and the leaf difference between the two autosaves is the cascade's own contribution. The per-call log line now prints in every mode and counts completions from the pass's own step results, so 'a completion fired' is a statement by the instrument rather than an inference from the artefact under test.
35 lines
1.4 KiB
Text
35 lines
1.4 KiB
Text
# Lane CR, crreplace0. ProcessResearch in replace; every other registered hook named off.
|
|
# research.replace_cascade=off.
|
|
# exhaustive
|
|
hooks=trace
|
|
hook.Game::EncounterDetect::AssignContacts=off
|
|
hook.Game::EncounterDetect::ProcessTeamRecord=off
|
|
hook.Game::SVSOSlaversRefuel::UpdateDifficultyTier=off
|
|
hook.Game::SVSOSwarmQueen::OnTurnBegin=off
|
|
hook.Game::SVSOSwarmQueen::RegisterHives=off
|
|
hook.Game::SVSOSwarmQueen::TickHives=off
|
|
hook.Game::SectionDictionary::SectionDictionary=off
|
|
hook.Game::ServerPlayer::ComputeBudget=off
|
|
hook.Game::ServerPlayer::OnTechResearched=off
|
|
hook.Game::ServerPlayer::ProcessTurn=off
|
|
hook.Game::ServerSystem::ComputeTotalOutput=off
|
|
hook.Game::ServerSystem::GroupOutput=off
|
|
hook.Game::ServerSystem::ProcessTurn=off
|
|
hook.Game::StrategyApp::RunAI=off
|
|
hook.Game::StrategyHost::Autosave=off
|
|
hook.Game::StrategyServer::ApplyEncounterResult=off
|
|
hook.Game::StrategyServer::BeginProcessTurn=off
|
|
hook.Game::StrategyServer::MoveFleet=off
|
|
hook.Game::StrategyServer::NodeLineDecay=off
|
|
hook.Game::StrategyServer::OnAllCombatDone_Tail=off
|
|
hook.Game::StrategyServer::ProcessFleetMovement=off
|
|
hook.Game::StrategyServer::ProcessNodeSpaceTravel=off
|
|
hook.Game::StrategyServer::ProcessTurn=off
|
|
hook.Game::WeaponDictionary::Init=off
|
|
hook.Mars::GlobalConsts::LoadFile=off
|
|
hook.Mars::RNG::Seed=off
|
|
hook.Game::TechTree::ProcessResearch=replace
|
|
research.replace_cascade=off
|
|
trace.path=C:\SOTS\shim.trace.jsonl
|
|
trace.inline_max=256
|
|
trace.flush=always
|