Bot can never be trapped in rock: nudge, retrace trail, fly out (t72)

This commit is contained in:
2026-10-29 18:25:37 -04:00
parent fc29214162
commit b655d754b9
8 changed files with 196 additions and 15 deletions
+48
View File
@@ -0,0 +1,48 @@
"""t72: rescue messages and keyboard escape in the pixel game."""
import pathlib
import sys
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / 'tools'))
from use_venv import ensure_playwright; ensure_playwright()
from browser import launch, consume_gpu_option
consume_gpu_option()
ROOT = pathlib.Path(__file__).resolve().parents[1]
with launch(viewport={'width': 1280, 'height': 760}) as (_, page, url):
errors = []
page.on('pageerror', lambda e: errors.append(str(e)))
page.goto(url)
page.evaluate("""() => {
const enter=enterGame;enterGame=()=>{enter();GAME.paused=true;};
SET.look='pixel';SET.workerCap=0;SET.cameraLead=false;SET.autosave=0;
startNewWorld(7,768,600);
}""")
page.wait_for_function('GAME.running', timeout=60000)
page.evaluate("""() => {
mat.fill(EMPTY);flags.fill(0);temp.fill(20);bgm.fill(0);fog.fill(255);
machines=[null];molds=[];ents=[];flyers=[];treeBases=[];saplings=[];
weather.next=1e15;weather.shower=null;surfY.fill(300);updateRoof();
botTrailCount=botTrailHead=0;botEscape=false;bot.vx=bot.vy=0;bot.y=200;
for(let x=200;x<=360;x+=4){bot.x=x;botStep(0,0,false);}
for(let y=140;y<280;y++)for(let x=240;x<450;x++)setCell(y*W+x,BASALT,20,F_NAT);
document.querySelectorAll('.card,.toast').forEach(e=>e.remove());
botStep(0,0,false);drainEvents();
SET.zoom=6;resizeRender();snapCamera();renderDirty.fill(1);GPU.world=null;SM.surf=-1;
}""")
assert page.evaluate('bot.x===232 && !botOverlapSolid(bot.x,bot.y)')
assert page.get_by_text('Dug out: back where you came from', exact=True).is_visible()
page.screenshot(path=str(ROOT / 'shots/t72-retrace.png'))
page.evaluate("""() => {
document.querySelectorAll('.toast').forEach(e=>e.remove());
botTrailCount=botTrailHead=0;bot.x=360;bot.y=200;bot.vx=bot.vy=0;
botStep(0,0,false);drainEvents();snapCamera();
}""")
assert page.get_by_text('Dug out: Fly through the rock to open space', exact=True).is_visible()
page.screenshot(path=str(ROOT / 'shots/t72-escape.png'))
page.keyboard.down('d')
page.evaluate('GAME.paused=false')
page.wait_for_function('bot.x>=450 && !botEscape', timeout=15000)
page.keyboard.up('d')
page.evaluate('GAME.paused=true')
assert page.evaluate('!botOverlapSolid(bot.x,bot.y)')
page.screenshot(path=str(ROOT / 'shots/t72-open.png'))
assert not errors, errors
print('PASS pixel retrace toast, fallback toast, real keyboard flight through basalt and exit; no page errors')