From 39ad8e85d9de55804a65b5015338a6fed2afb995 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Thu, 10 Sep 2026 17:20:20 +0300 Subject: [PATCH] chore(release): v0.8.0 --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++ VERSION | 2 +- changes/asset-packs.md | 12 -------- changes/boot-splash.md | 9 ------ changes/macos-bundle.md | 9 ------ changes/render3d-island.md | 7 ----- changes/render3d-moon.md | 7 ----- changes/render3d-outline.md | 7 ----- changes/render3d-water-scale.md | 7 ----- 9 files changed, 52 insertions(+), 59 deletions(-) delete mode 100644 changes/asset-packs.md delete mode 100644 changes/boot-splash.md delete mode 100644 changes/macos-bundle.md delete mode 100644 changes/render3d-island.md delete mode 100644 changes/render3d-moon.md delete mode 100644 changes/render3d-outline.md delete mode 100644 changes/render3d-water-scale.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b13765c..25d70a4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,57 @@ change type. Preview the next one with `ludic dev release --dry-run`. A released section may carry a hand-written summary paragraph above its groups (v0.2.0 has one); the generated bullets below it are not edited by hand. +## v0.8.0 — 2026-09-10 + +### Features + +- **A boot splash**, customised by the game. `app splash` in `package.ludic` names + the artwork and `app splash_bg` the colour behind it; the runtime raises a + borderless window from a constructor that runs before `main`, reading the image + out of the asset pack, so it is on screen while the process is still starting + rather than after the slow part it exists to cover. Nothing hides it + automatically - only the game knows when its first real frame is ready, so the + game calls `App.splash_hide()`. +- **Asset packs.** `ludic pack` writes every asset a game opens into one `.lpak` + beside the binary, and the runtime mounts it before `main`. Nothing about how a + game is written changes: the pack is spliced in at `file_open`, the one place + every asset comes through, so `gltf_load`, `tex_load`, `Audio.load`, + `Fs.read_text` and the renderer's own shader loads all find it without knowing + it exists. `Fs.exists` and `Fs.size` consult the packs too. Entries are stored + rather than compressed and the pack is `mmap`'d, so 165 MB of terrain costs one + syscall at startup and pages in only what is touched. Several packs can be + mounted in order, and a later one shadows an earlier one - which is how a patch + replaces individual files without rewriting the base pack. See `docs/SHIPPING.md`. +- **`ludic bundle`** turns a built game into a real macOS `.app`: `Info.plist` and + `PkgInfo` from the manifest, an `.icns` built from one source PNG at every size + macOS asks for, the asset pack in `Contents/Resources`, and an ad-hoc signature + so it launches on Apple silicon. Everything comes from `app` lines in + `package.ludic`, so the command takes no arguments. A bundled game is also moved + to `~/Library/Application Support/` at startup, because Finder starts a + `.app` with its working directory at `/` where no save could ever be written. +- **`ludic.render3d`: `terrain_island(cx, cz, r, fall)`** keeps land out to `r` and then + scales the terrain down into the water over `fall` metres. Scaling rather than blending + to a fixed bed is what makes the coastline come out of the terrain already there: low + ground becomes beach and shallows, high ground becomes cliff. `r = 0` leaves the survey + untouched. +- **`ludic.render3d`: a rim outline on an actor.** An actor gains `outline` (metres of + rim) and `ocol` (its colour). The pass draws the model again with its vertices pushed + along their normals and its front faces culled, so only the far side of the swollen + shell survives - a silhouette exactly `outline` wide, depth-tested against the scene, so + anything standing in front of the actor hides its rim too. +- **`ludic.render3d`: the moon has a phase.** One number, 0 new .. 0.5 full .. 1 new + again, decides the disc's terminator, how much of its light reaches the ground, and + where in the sky it rides - a full moon rises as the sun sets, a new moon travels with + the sun and is never seen. A new moon is now a properly dark night, which is what makes + a carried light worth having. + +### Fixes + +- **`ludic.render3d`: water read the window's size, not the frame it drew into.** The + water shader's `u_screen` and the reflection target were sized from the drawable, but + `gl_FragCoord` there runs over the scene target. They match only at a render scale of 1; + below that the refraction and depth reads landed in the wrong corner of the frame and the + lake showed a squashed copy of it instead of its own bed. ## v0.7.0 — 2026-09-10 ### Features diff --git a/VERSION b/VERSION index faef31a4..a3df0a69 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.7.0 +0.8.0 diff --git a/changes/asset-packs.md b/changes/asset-packs.md deleted file mode 100644 index 3deec212..00000000 --- a/changes/asset-packs.md +++ /dev/null @@ -1,12 +0,0 @@ -bump: minor -type: feat -**Asset packs.** `ludic pack` writes every asset a game opens into one `.lpak` -beside the binary, and the runtime mounts it before `main`. Nothing about how a -game is written changes: the pack is spliced in at `file_open`, the one place -every asset comes through, so `gltf_load`, `tex_load`, `Audio.load`, -`Fs.read_text` and the renderer's own shader loads all find it without knowing -it exists. `Fs.exists` and `Fs.size` consult the packs too. Entries are stored -rather than compressed and the pack is `mmap`'d, so 165 MB of terrain costs one -syscall at startup and pages in only what is touched. Several packs can be -mounted in order, and a later one shadows an earlier one - which is how a patch -replaces individual files without rewriting the base pack. See `docs/SHIPPING.md`. diff --git a/changes/boot-splash.md b/changes/boot-splash.md deleted file mode 100644 index 28ed534d..00000000 --- a/changes/boot-splash.md +++ /dev/null @@ -1,9 +0,0 @@ -bump: minor -type: feat -**A boot splash**, customised by the game. `app splash` in `package.ludic` names -the artwork and `app splash_bg` the colour behind it; the runtime raises a -borderless window from a constructor that runs before `main`, reading the image -out of the asset pack, so it is on screen while the process is still starting -rather than after the slow part it exists to cover. Nothing hides it -automatically - only the game knows when its first real frame is ready, so the -game calls `App.splash_hide()`. diff --git a/changes/macos-bundle.md b/changes/macos-bundle.md deleted file mode 100644 index d0530a3d..00000000 --- a/changes/macos-bundle.md +++ /dev/null @@ -1,9 +0,0 @@ -bump: minor -type: feat -**`ludic bundle`** turns a built game into a real macOS `.app`: `Info.plist` and -`PkgInfo` from the manifest, an `.icns` built from one source PNG at every size -macOS asks for, the asset pack in `Contents/Resources`, and an ad-hoc signature -so it launches on Apple silicon. Everything comes from `app` lines in -`package.ludic`, so the command takes no arguments. A bundled game is also moved -to `~/Library/Application Support/` at startup, because Finder starts a -`.app` with its working directory at `/` where no save could ever be written. diff --git a/changes/render3d-island.md b/changes/render3d-island.md deleted file mode 100644 index c7ea6bf8..00000000 --- a/changes/render3d-island.md +++ /dev/null @@ -1,7 +0,0 @@ -bump: minor -type: feat -**`ludic.render3d`: `terrain_island(cx, cz, r, fall)`** keeps land out to `r` and then -scales the terrain down into the water over `fall` metres. Scaling rather than blending -to a fixed bed is what makes the coastline come out of the terrain already there: low -ground becomes beach and shallows, high ground becomes cliff. `r = 0` leaves the survey -untouched. diff --git a/changes/render3d-moon.md b/changes/render3d-moon.md deleted file mode 100644 index defa7334..00000000 --- a/changes/render3d-moon.md +++ /dev/null @@ -1,7 +0,0 @@ -bump: minor -type: feat -**`ludic.render3d`: the moon has a phase.** One number, 0 new .. 0.5 full .. 1 new -again, decides the disc's terminator, how much of its light reaches the ground, and -where in the sky it rides - a full moon rises as the sun sets, a new moon travels with -the sun and is never seen. A new moon is now a properly dark night, which is what makes -a carried light worth having. diff --git a/changes/render3d-outline.md b/changes/render3d-outline.md deleted file mode 100644 index 020ec446..00000000 --- a/changes/render3d-outline.md +++ /dev/null @@ -1,7 +0,0 @@ -bump: minor -type: feat -**`ludic.render3d`: a rim outline on an actor.** An actor gains `outline` (metres of -rim) and `ocol` (its colour). The pass draws the model again with its vertices pushed -along their normals and its front faces culled, so only the far side of the swollen -shell survives - a silhouette exactly `outline` wide, depth-tested against the scene, so -anything standing in front of the actor hides its rim too. diff --git a/changes/render3d-water-scale.md b/changes/render3d-water-scale.md deleted file mode 100644 index 81dc5b48..00000000 --- a/changes/render3d-water-scale.md +++ /dev/null @@ -1,7 +0,0 @@ -bump: patch -type: fix -**`ludic.render3d`: water read the window's size, not the frame it drew into.** The -water shader's `u_screen` and the reflection target were sized from the drawable, but -`gl_FragCoord` there runs over the scene target. They match only at a render scale of 1; -below that the refraction and depth reads landed in the wrong corner of the frame and the -lake showed a squashed copy of it instead of its own bed.