No Paint: Construct Recovery and Aesthetic Computer Migration #
Source recovered #
- Dropbox source:
/Apps/Construct 3/No Paint/No Paint.c3p - Dropbox modified:
2021-10-16T21:52:49Z - Size:
7,444,479bytes - SHA-256:
1550856d224332eca2615736ae4526a404d235e9d9464e75d8058654d02aa7e2 - Recovery date: 2026-07-17
- The archive passes
unzip -tand was inspected read-only outside the repo.
The .c3p is a ZIP archive containing the complete editable Construct project,
not merely an exported build. Keep the Dropbox original immutable and make any
Construct experiments on a copy.
Why current Construct will not open it #
The project embeds its missing addon at:
addons/plugin/StraniAnelli_InjectCSS_v2.c3addon
It also embeds the two custom effects it needs:
addons/effect/skymen_RGBSplit.c3addonaddons/effect/Mikal_MirrorY.c3addon
The CSS addon is present; current Construct rejects it because it uses legacy SDK v1. Construct r449 LTS is the final line that supports SDK v1 and should be used to open and export the preserved project.
The CSS addon is not part of No Paint's painting engine. It is referenced only
twice in eventSheets/splash.json:
- Load the bundled
background.css. - Add the class
mobiletobody, html.
The entire stylesheet is one rule which changes the mobile page background to
rgb(235, 235, 235). This can be removed or replaced with ordinary host CSS.
Recovered project anatomy #
- 45 event sheets plus their UI-state files
- 82 layouts plus their UI-state files
- 205 object types
- 1,197 images
- 128 sounds and 2 music tracks
- 3 fonts
- 2 JavaScript files
- 3 bundled addons
- 35 unique weighted brush/filter choices
The project is significantly more than the current AC nopaint.mjs prototype.
Besides the painting loop it contains prompt commands, playlists, camera input,
parameter hints, save/load, music, stamps contributed under painter handles,
and painter-story/profile layouts.
Recovered proposal vocabulary #
Native/generative brushes:
Softy, Build, Bubbles, Banner, Dark Window, Wafer, Walker,
Aura, Box, Triangle, Line, Ellipse, Breathe, Vignette,
Caterpillar, Frame, Grid Worm, Stamp, and Rainbow.
Painting transforms and filters:
Wipe, Blur, Sharpen, Mirror, Noise, Flip, Saturate, Invert,
Scroll, Contrast, Zoom, Recurse, Quicksand, Spin, Light Bump,
and Turn.
Stamp has the highest proposal weight (2), followed by Softy (1.5).
Walker is deliberately rare (0.2). The picker also contains a second Box
entry, which raises Box's aggregate probability.
Original state machine #
No Paint's essential behavior is small even though its Construct UI is large:
pick weighted brush/filter + parameters
|
v
animate a live proposal
/ \
No Paint
| |
discard proposal freeze time
| commit into Painting
| store painting/date
\____________________/
|
pick next
The recovered No() function kills playlist timers, restores time scale, and
returns to the Index layout without committing. Paint() freezes time, sets
the Painting flag, waits for the brush's "painted" signal, stores the
result, clears the temporary canvas region, restores time, and returns to the
Index. This is the conceptual core to port; Construct layouts are an
implementation detail.
What Aesthetic Computer already provides #
system/public/aesthetic.computer/systems/nopaint.mjs already has the hard
platform layer needed for the remake:
- a separate proposal buffer over the persistent painting
- present/bake behavior
- brush transforms and gesture recording
- pan and zoom
- undo paintings
- brush parameter and color parsing
- robot/synthetic input
- a native-compatible nopaint implementation
The current disks/nopaint.mjs only imports rect and emits random drag boxes.
It should become the conductor for the mature nopaint system rather than grow a
second painting engine.
Existing AC brushes give the first porting set:
| Construct concept | AC starting point |
|---|---|
| Box | rect |
| Ellipse | oval |
| Line | line |
| Wipe | wipe |
| Camera | camera |
| Stamp | paste, icon, and painting assets |
| Paint/commit | nopaint bake/present path |
| No/discard | clear/recreate the proposal buffer |
| Prompt commands | AC prompt and colon parameters |
Migration sequence #
0. Preserve #
- Keep the canonical
.c3pin Dropbox unchanged. - Record its hash and provenance (above).
- Open a copy in Construct r449 LTS.
- Export a static web build as a playable reference.
- Preserve that build at a stable classic URL, not as the new implementation.
1. Make the native loop real #
Replace the one-brush timer in disks/nopaint.mjs with explicit states:
choosingproposingcommittingdiscardingpaused
Start with rect, oval, line, wipe, and camera. Preserve the original
weighted picker. Expose two unmistakable actions: No and Paint. Keyboard,
pointer, touch, voice, and robot controls should all call those same actions.
2. Port authored brushes #
Port one event sheet at a time as a normal AC piece. Treat the Construct event sheet as a behavioral score, not source code to translate mechanically. Begin with visually distinctive, low-dependency brushes: Softy, Bubbles, Grid Worm, Walker, Banner, and Wafer.
3. Recover the social artwork #
The 1,197 images and painter profiles are culturally central. Build a manifest that retains original filename, Construct object/layout, painter handle, dimensions, and source archive hash. Bring stamps into AC's existing publishing and handle system instead of hard-coding them into a new monolith.
4. Restore the language #
Map old playlists and brush parameter strings onto the AC prompt. A historical playlist can become a sequence of URL-addressable AC commands. This is where the predecessor becomes visibly continuous with Aesthetic Computer rather than merely reskinned.
5. Present the lineage #
Use nopaint.art as the canonical public home. It already has history and is
the strongest name for the work. Suggested routing:
nopaint.art— the new native work and its short explanationnopaint.art/classic— preserved 2021 Construct buildaesthetic.computer/nopaint— the same live native piece inside ACnopaint.art/story— 2016 to 2020/21 to Aesthetic Computer to the present
The award submission can frame the work as No Paint, 2016–present: a long collaboration between a person, a proposing machine, and a community of brush and stamp makers. The Construct recovery is evidence of lineage; the native AC remake is the current artwork.
First shippable milestone #
A useful first milestone is intentionally narrow:
- Native AC No Paint proposes
rect,oval,line,wipe, orcamera. - No discards the current buffer immediately.
- Paint commits it and proposes the next operation.
- The proposal weights are deterministic from a session seed.
- A painting can be saved/shared through AC.
nopaint.artlaunches this piece while/classicpreserves the old build.
That is enough to recover the original artwork's agency and make a credible award submission. The remaining brushes, profiles, sounds, and playlists can then return incrementally without blocking the relaunch.