Add aspirin 15-puzzle and auto-solver apps for Ontrol Orion
- gen_aspirin.py generates aspirin.sax (playable) and aspirin_solver.sax (30-move shuffle, then one inverse move per second) from stock kits - build.py compiles with sedonac and packages simulator backup zips - verify_logic.py models the Sedona scan engine to test both apps offline - viewer/OxViewer.java shows the headless simulator's screen live over SOX Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
"""Builds aspirin(.sax/_solver.sax) -> .sab and packages app-ORION-<name>.zip for simulatorLauncher.exe.
|
||||
|
||||
Zip layout matches the launcher's ExampleApp backups:
|
||||
app.sax, device/app.sab, device/kits.scode, device/fonts/*.oxfl, fontBankXL/*.oxfl
|
||||
"""
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import zipfile
|
||||
|
||||
SEDONA = r"C:\Users\aa\OneDrive - Ontrol\Documents\_is\NiagaraAXSedona\sedona"
|
||||
SIM = os.path.join(SEDONA, "ontrol", "ontrolSimulator")
|
||||
EXAMPLE = os.path.join(SIM, "ExampleApp", "app-ORION-VM_miniini.zip") # source of Orion kits.scode
|
||||
FONTS = os.path.join(SEDONA, "ontrol", "fontBankXL")
|
||||
USED_FONTS = ["18pt Tahoma.oxfl", "24pt Tahoma.oxfl", "32pt Tahoma.oxfl",
|
||||
"bold 32pt Tahoma.oxfl", "bold 36pt Tahoma.oxfl", "bold 48pt Tahoma.oxfl",
|
||||
"bold 52pt Tahoma.oxfl"]
|
||||
|
||||
here = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(here)
|
||||
env = dict(os.environ, sedona_home=SEDONA)
|
||||
with zipfile.ZipFile(EXAMPLE) as src:
|
||||
scode = src.read("device/kits.scode")
|
||||
|
||||
for name, args in (("aspirin", []), ("aspirin_solver", ["--solver"])):
|
||||
subprocess.check_call([sys.executable, "gen_aspirin.py"] + args)
|
||||
subprocess.check_call([os.path.join(SEDONA, "bin", "sedonac.exe"), f"{name}.sax"], env=env)
|
||||
out = f"app-ORION-{name}.zip"
|
||||
with zipfile.ZipFile(out, "w", zipfile.ZIP_DEFLATED) as z:
|
||||
z.write(f"{name}.sax", "app.sax")
|
||||
z.write(f"{name}.sab", "device/app.sab")
|
||||
z.writestr("device/kits.scode", scode)
|
||||
for f in USED_FONTS:
|
||||
p = os.path.join(FONTS, f)
|
||||
z.write(p, f"device/fonts/{f}")
|
||||
z.write(p, f"fontBankXL/{f}")
|
||||
print("wrote", out)
|
||||
Reference in New Issue
Block a user