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/visual.mjs
import { mkdir } from 'node:fs/promises';
export default async ({ players, check }) => {
  const { page, frame } = players[0];
  await mkdir('.napplet-space/promotion', { recursive: true });
  await page.setViewportSize({ width: 1200, height: 820 });
  await frame.locator('#scene').waitFor();
  await page.screenshot({ path: '.napplet-space/promotion/host.png' });
  await frame
    .locator('#scene')
    .screenshot({ path: '.napplet-space/promotion/scene.png' });
  console.log('BODY', await page.locator('body').innerText());
  check(
    'scene boots',
    (await frame.locator('#scene').getAttribute('data-racing')) === 'false',
  );
  await frame.getByRole('button', { name: 'Race with AI' }).click();
  await frame.waitForFunction(
    () => document.querySelector('#scene').dataset.countdown === '0',
  );
  await frame.locator('#scene').focus();
  await page.keyboard.down('w');
  await page.waitForTimeout(600);
  await page.keyboard.up('w');
  check(
    'driving changes speed',
    Number(await frame.locator('#speed').innerText()) > 0,
  );
  await page.screenshot({ path: '.napplet-space/promotion/race-host.png' });
  await frame.getByRole('button', { name: 'Exit race', exact: true }).click();
  await frame.getByRole('button', { name: 'Workshop', exact: false }).click();
  await page.screenshot({ path: '.napplet-space/promotion/editor-host.png' });
};