One-off instruments from the investigation that produced docs/research/. They
are not part of the application, not covered by CI, and not supported. They are kept because
they are the reproducible evidence behind the claims in those documents, and because the memory
path they exercise is still live code in warframe-acquisition.
Two files are exceptions, being real build tooling rather than research instruments:
build-linux-bundles.sh, the bundle helper, documented inpackaging/.tauri.mjs, which is whatpnpm tauriruns. It forwards to the Tauri CLI, settingNO_STRIPon Linux because linuxdeploy's bundledstrippredates RELR relocations and fails on distributions whose toolchain emits.relr.dyn. An explicitNO_STRIPfrom the caller always wins.
Python 3.8 or newer, and NumPy for scan_response_records.py, which
is the only script here that needs anything outside the standard library. You also need a
running Warframe session under Wine/Proton and the same /proc access the app needs. These are
Linux-only research instruments, not shipped code. The screen ones shell out to xwininfo,
import, magick and tesseract; the app itself spawns two of those four.
No paths are hardcoded: _paths.py finds the Wine prefix from the live process's own
mappings, the same way the app does. Override with TENNOSCOPE_EE_LOG and TENNOSCOPE_CATALOG to
run against an archived log or catalog with no game running.
| Script | Purpose |
|---|---|
watch_reward_visual.py |
Fire captures when the reward screen becomes visible, not when the log says so. |
watch_reward_capture.py |
Same, triggered from the Got rewards log line. |
capture_reward_screen.py |
Grab frames of the reward screen while it is up. |
capture_reward_players.py |
Bounded player-id to reward-pointer associations. |
capture_reward_order.py |
Bounded reward string/object evidence, in screen order. |
capture_reward_layout.py |
Dump the object layout around a reward site. |
scan_response_records.py |
Sweep every readable mapping for reward artefacts. One run answers where remote players' rewards live. |
find_reward_array.py |
Look for an ordered reward array among a sweep's pointer sites. |
analyze_reward_ui_graph.py |
Walk the persistent reward UI graph from a capture. |
ocr_reward_cards.py |
Read card titles off a screenshot against the run's relic pool. The prototype for reward_ocr.rs. |
Nothing here writes to the application's database, and none of them modify game memory.