captures/gameplay-actions.lisp
Make the fully resident grass yard shared by the two action films.
Make a stone wall with one contrasting three-by-three brick panel.
The opening reveals a luminous landmark instead of undifferentiated empty ground after the brick panel is gone.
Make an open yard with an arch-shaped wooden placement scaffold.
Each wood cell is exactly one cell behind its eventual brick. A ray
from the authored play camera therefore hits its front face and asks
edit-luvcraft-block to place the brick at Z=11. The doorway's centre
has no scaffold, so it remains genuinely open in the finished shot.
Pan the first-person camera smoothly between centre-ray targets.
Drive owner-side publication, reporting once a second until settled.
film-luvcraft-session calls this helper between encoded frames. An
edit has dirtied lighting at that point, but no ordinary frame can
reconcile it until BEFORE-FRAME returns. Give the canvas owner the
same refresh turn explicitly, then inspect the resulting boundary.
Perform and verify one ordinary player action at expected-coordinate.
Do not let worker timing choose which filmed frame first contains the edit. The owner publishes the complete current mesh cohort before this action's next frame is encoded.
Call function in one fully resident gameplay-shaped hidden session.
The interactive block world built on luv.
The brick panel swept from top left to bottom right by the mining film.
The two posts and lintel placed by the building film, in play order.
(&key (id (gensym "BLOCK-WORLD-"))
(chunk-width 16)
(chunk-height 16)
(chunk-depth 16)
(cell-extent 1d0)
source)(world x y z)(world x y z)Return one site as BLOCK and :RESIDENT, or NIL and :ABSENT. This sparse world-coordinate accessor constructs coordinate descriptors and a chunk lookup key. It is appropriate for inspectors, ray hits, collision probes, and sparse interaction. Algorithms over many cells should select a chunk/domain once and use…
(world)Solve and publish voxel light from scratch for WORLD's resident chunks. Returns the chunks whose published light changed. The selected production solver must have an explicit SOLVE-LIGHT-REGION-USING method.
(session action)(targets frame first-action-frame frames-between-actions)An explicitly owned AVFrame.
The minimum of compatible quantities.
The maximum of compatible quantities.
Division of two represented quantities.
Subtraction or unary negation.
Addition over compatible quantities.
Multiplication and scalar scaling.
(x y z target-x target-y target-z field-of-view)The block-world camera's 70-degree vertical field of view.
(session title &key (timeout 10d0))(session pathname
&key (seconds 8) (frame-rate 30) before-frame
(include-hud-p t)
(include-viewmodel-p t))Film SESSION for SECONDS of real time into an MP4 at PATHNAME. Frames are captured at FRAME-RATE, paced against the wall clock so that overlay animation driven by real time plays at its true speed. BEFORE-FRAME, when given, is called with the frame index before each capture, and is the place to move the camera. …
(canvas function)Run FUNCTION with a timestamp on CANVAS's native frame/event thread. The initial native implementation is synchronous: the caller waits for the function's values. The protocol leaves room for a real frame scheduler.
(session)(state &optional center)Test whether one compatible scalar is at least another.
(session action expected-coordinate title)One named verb over a session.
Logical conjunction of tests and raw truth values.
Test whether two compatible scalars are equal.
(function title world initial-pose &key selected-block)(function &key title world camera sky-clock sky-profile critters
width height (residency-radius 4) clean-p
(exposure 0.48) (bloom-gain 0.18) (shaft-gain 0.28))(day-fraction)(name (&key figure kind extension (description "") (layout :landscape))
(pathname) &body body)Define one inspectable wiki capture recipe. NAME is its command-line identity. FIGURE is the stable six-character wiki figure ID; KIND is :IMAGE or :VIDEO; EXTENSION is the generated file suffix. LAYOUT is :LANDSCAPE by default or :PORTRAIT for uncropped 9:16 presentation. BODY is an ordinary named renderer function…
(camera pose)(session timestamp)The non-negative remainder of integer division.
Test whether one compatible scalar is less than another.
The little block world is the first luv experiment whose success is mostly felt rather than inferred. It opens a window, gives the player a place to look around, and makes changes in world representation, meshing, lighting, and physics visible immediately. That makes it an unusually good path through otherwise…
The current implementation lives in luvcraft/, split between the renderer-independent model in luvcraft/world.lisp and the visible slice above it (blocks, terrain, meshing, simulation, and the application files): – a voxel-space records a fixed chunk shape and explicit physical cell extent; – distinct world, chunk,…
Two authored play sequences through the ordinary centre-ray edit verb. The wall and scaffold are merely deterministic terrain; every filmed removal and placement still crosses
luvcraft's player mutation, particle, lighting, mesh-publication, and checkpoint-notification path. #B4K7WR #P3L8YX