{ "entries": [ { "name": "ResearchRollProgressThreshold", "addr": "0x00a2c788", "convention": "data", "prototype": "const float 0.5f -- the progress-ratio threshold in ServerPlayer::ProcessTurn's `ResT != NULL && ResErrRoll != 0 && CONST < progressRatio` gate (events.md ยง3, window 0x008915ec-0x00891624). Read out of dumps/sots.exe: .rdata bytes at 0x00a2c788 are 00 00 00 3f (float 0.5); the following word 0x00a2c78c is float 100.0, so this is a float32, NOT the double an 8-byte read would suggest (that reads as 5.28e13). CONSEQUENCE, measured on the live game: ResErrRoll survives into ProcessResearch only while progress/cost <= 0.5 at the START of the turn, so the OnTechResearched draw (0x0088df20) can fire only when a single turn supplies more than half the target tech's remaining cost. See the board's `research_roll_pending save` row", "status": "verified", "source": "lane O 2026-09-08, PE section walk of dumps/sots.exe + turn-by-turn observation on VM140 (verify/results/saves/zuul-turn1[5-7]-*.sav)" } ] }