Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/landing/src/config/projects/featured.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const featuredProjectEntries = [
kind: "live",
url: "https://4po7.test.i0c.cc/",
},
updatedAt: "2026-10-24T17:14:25Z",
updatedAt: "2026-10-24T17:51:49Z",
summary:
"A dreamcore driving game with an endless curving highway, momentum-based drifting, and half-remembered exits.",
kind: "app",
Expand Down
2 changes: 1 addition & 1 deletion apps/liminal-drift/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ The menu overlays the live 3D scene with low-resolution textures from ROHHSA's P

A display layer covers the scene and interface with fine scanlines, a faint RGB phosphor grid, monochrome grain, and shaded glass edges. A very light tracking disturbance affects the whole image, including menus. Lower integrity progressively adds stronger interference, separated color channels, negative-image pulses, and flickering rectangular color dropouts; checkpoint repairs ease them again. Damaging impacts add a 480 ms negative/color burst, including the final hit of a run. Guardrail impacts only strengthen tracking for 360 ms and never trigger that damage burst.

Approaching the rear road boundary continuously strengthens the interference and color dropouts with the closing vignette. Full-image inversion fades out as the opening closes, keeping the black field black while localized colored blocks remain visible. These effects persist through the end dialog until restarting restores the normal low intensity. The effects do not intercept input or request external artwork. Reduced-motion mode uses subdued static color and blocks instead of negative flashes, image displacement, or moving interference. Backgrounding pauses the run and clears driving input, including the moving interference; the pause menu appears immediately even when the browser suspends animation clocks.
Approaching the rear road boundary continuously strengthens the interference and color dropouts with the closing vignette. Full-image inversion fades out as the opening closes, keeping the black field black while localized colored blocks remain visible. Interference and color dropouts persist through the end dialog, while positional screen drift stops so restart controls remain stationary. Restarting restores the normal low intensity and screen drift. The effects do not intercept input or request external artwork. Reduced-motion mode uses subdued static color and blocks instead of negative flashes, image displacement, or moving interference. Backgrounding pauses the run and clears driving input, including the moving interference; the pause menu appears immediately even when the browser suspends animation clocks.

## Project Structure

Expand Down
17 changes: 17 additions & 0 deletions apps/liminal-drift/scripts/checkInteraction.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
import { mkdir } from "node:fs/promises"
import { fileURLToPath } from "node:url"

import { chromium, devices } from "playwright"

import { browserLaunchOptions } from "./browserLaunchOptions.mjs"
import { measureSceneDifference, screenshotCanvas } from "./browserVisualChecks.mjs"
import { checkBackgroundPause } from "./checkBackgroundPause.mjs"

const url = process.argv.find((value) => value.startsWith("http")) ?? "http://localhost:5173/"
const outputDir = new URL("../artifacts/", import.meta.url)

await mkdir(outputDir, { recursive: true })

/**
* @param {string} baseUrl
Expand Down Expand Up @@ -284,6 +290,9 @@ try {
`Expected colored dropouts to persist without whitening the black field: ${JSON.stringify(endedColors)}`,
)
}
await page.screenshot({
path: fileURLToPath(new URL("desktop-road-end.png", outputDir)),
})
await page.getByRole("button", { name: "Drive again", exact: true }).click()
await page.waitForTimeout(800)
if ((await page.locator('[role="dialog"]').count()) !== 0) {
Expand All @@ -303,6 +312,14 @@ try {
await page.keyboard.down("w")
await waitForSpeedAbove(page, 5)
await page.keyboard.up("w")
const hasRunningTracking = await page
.locator(".screen-tracking")
.evaluate((element) =>
element.getAnimations().some((animation) => animation.playState === "running"),
)
if (!hasRunningTracking) {
throw new Error("Expected normal screen drift to resume after restarting the run")
}
console.log("road-end restart ok", { singleClick: true, resetIntensity: "0.060" })
await context.close()
}
Expand Down
5 changes: 5 additions & 0 deletions apps/liminal-drift/src/styles/components/display-texture.css
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@
animation: signal-drift var(--signal-duration) steps(1, end) infinite;
}

/* Keep restart controls stationary while the end-screen interference continues. */
.game-shell[data-status="ended"] .screen-tracking {
animation: none;
}

.signal-interference,
.signal-burst {
position: absolute;
Expand Down
Loading