toxic-royale-env / scripts /bluestacks_debug_elixir.py
omm7's picture
Upload folder using huggingface_hub
b0620f3 verified
from __future__ import annotations
"""
Debug elixir estimation end-to-end.
Usage:
cd toxic_royale_env
BS_DEBUG_ELIXIR=1 python3 scripts/bluestacks_debug_elixir.py
It will:
- take a screenshot via scripts/bluestacks_screenshot.sh
- estimate elixir using the same algorithm as bluestacks_autoplay_deck_rules.py
- save ROI image to outputs/bluestacks/debug_elixir_roi_best.png (when BS_DEBUG_ELIXIR=1)
"""
import json
import os
import subprocess
import importlib.util
import sys
from pathlib import Path
def _load_estimator(root: Path):
"""
Load _estimate_elixir from scripts/bluestacks_autoplay_deck_rules.py without
requiring scripts/ to be a Python package.
"""
mod_path = root / "scripts" / "bluestacks_autoplay_deck_rules.py"
spec = importlib.util.spec_from_file_location("bluestacks_autoplay_deck_rules", mod_path)
if spec is None or spec.loader is None:
raise RuntimeError(f"Could not load module from {mod_path}")
module = importlib.util.module_from_spec(spec)
sys.modules[spec.name] = module
spec.loader.exec_module(module)
est = getattr(module, "_estimate_elixir", None)
if est is None:
raise RuntimeError("Missing _estimate_elixir in bluestacks_autoplay_deck_rules.py")
return est
def _run(cmd: list[str]) -> None:
subprocess.run(cmd, check=False)
def main() -> int:
root = Path(__file__).resolve().parents[1]
cfg_path = root / "config" / "bluestacks_gameplay.local.json"
if not cfg_path.exists():
raise SystemExit("Missing calibration: config/bluestacks_gameplay.local.json")
cfg = json.loads(cfg_path.read_text(encoding="utf-8"))
out_dir = root / "outputs" / "bluestacks"
out_dir.mkdir(parents=True, exist_ok=True)
img = out_dir / "debug_elixir_current.png"
_run([str(root / "scripts" / "bluestacks_screenshot.sh"), str(img)])
estimate = _load_estimator(root)
el = estimate(img_path=img, cfg_obj=cfg)
print("screenshot:", img)
print("elixir_est:", el)
if os.environ.get("BS_DEBUG_ELIXIR", "0") == "1":
print("roi:", out_dir / "debug_elixir_roi_best.png")
return 0
if __name__ == "__main__":
raise SystemExit(main())