Back to Napplet Machines V8
SOURCE / PINNED RELEASE

Made of little things.

Napplet Machines V8

Release
b3f614e739f0…
Author-recorded commit
534f19acb4ba…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-b5572362d4a

Archive hash verified: 0f7feb97e2c3d336…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

tests/capture-corners.mjs
export default async ({ players, check }) => {
  const { page, frame } = players[0],
    element = await frame.frameElement();
  await page.setViewportSize({ width: 1200, height: 750 });
  await element.evaluate((el) =>
    Object.assign(el.style, {
      position: 'fixed',
      top: 0,
      left: 0,
      width: '1200px',
      height: '750px',
      minHeight: 0,
      border: 0,
      zIndex: 9999,
    }),
  );
  await frame.locator('#trackSelect').selectOption('2');
  await frame.getByRole('button', { name: 'Workshop', exact: false }).click();
  const coords = [
    [-38, -24],
    [-6, -29],
    [31, -25],
    [39, 0],
    [16, 8],
    [29, 28],
    [-4, 31],
    [-35, 21],
    [-28, 0],
  ];
  for (const [x, y] of coords) {
    const box = await frame.locator('#plan').boundingBox(),
      scale = Number(await frame.locator('#plan').getAttribute('data-scale'));
    await page.mouse.click(
      box.x + box.width / 2 + x * scale,
      box.y + box.height / 2 + y * scale,
    );
    await frame.locator('#widthInput').fill('20.8');
    await frame.locator('#widthInput').dispatchEvent('input');
  }
  await frame.locator('#allWalls').click();
  await frame.locator('#trackName').scrollIntoViewIfNeeded();
  await page.waitForTimeout(1200);
  await element.screenshot({
    path: '.napplet-space/promotion/filled-corners-workshop.png',
  });
  check(
    'wide elevated hairpins render in the workshop',
    Number(await frame.locator('#scene').getAttribute('data-closed-sections')) >
      0,
  );
};