From d8013252c332ae74dcd822ec1722a4d9b78f78ae Mon Sep 17 00:00:00 2001 From: jyelon Date: Mon, 14 Sep 2026 14:43:00 -0400 Subject: [PATCH] ajkhdkjash --- claude/integration-memory/MEMORY.md | 1 + .../project_island_terrain_design.md | 45 +++++++++++++++++++ claude/settings.json | 4 +- ssh/config | 5 +++ ssh/gen-work-key.sh | 2 + 5 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 claude/integration-memory/project_island_terrain_design.md create mode 100755 ssh/gen-work-key.sh diff --git a/claude/integration-memory/MEMORY.md b/claude/integration-memory/MEMORY.md index f121f53..0ef8158 100644 --- a/claude/integration-memory/MEMORY.md +++ b/claude/integration-memory/MEMORY.md @@ -58,6 +58,7 @@ ## Project - [Eris addinfo intentionally removed](project_eris_addinfo_removed.md) — `luaG_runerror` no longer prefixes `file:line:`; traceback machinery handles location info +- [Island terrain design](project_island_terrain_design.md) — downloadable-island terrain replacing Landscape: 257² patches, shared flat mesh + WPO, FHeightField collision ## Feedback diff --git a/claude/integration-memory/project_island_terrain_design.md b/claude/integration-memory/project_island_terrain_design.md new file mode 100644 index 0000000..eab693f --- /dev/null +++ b/claude/integration-memory/project_island_terrain_design.md @@ -0,0 +1,45 @@ +--- +name: project-island-terrain-design +description: Design decisions for the downloadable-island terrain system (replaces Unreal Landscape) +metadata: + node_type: memory + type: project + originSessionId: 38ffbfc6-93fe-4670-9015-1be594a56944 +--- + +Game concept: like visiting Animal Crossing islands — client downloads an island +(heightfield + weightmaps) from a server and builds terrain at runtime in a +packaged build. Stock Landscape is unusable (editor-only construction). Terrain +is smooth sculpted hills (heightfield, NOT voxels, NOT tile-based). Islands can +be large (multi-km); ~5s load budget is fine. + +Decisions as of 2026-06-11: + +- **Patches**: 256×256 quads = 257×257 vertices, driven by a 257×257 non-mipped + height texture region (possibly a sub-rect of one big island texture — left open). +- **LOD**: 3 levels (interiors 256/128/64 segments), but patch *edges always stay + at full 257-vertex resolution* — only interiors decimate. Any two neighbor LODs + fit seamlessly by construction; no stitching, no neighbor bookkeeping. Transition + ring fans coarse interior to full-res edge (the tricky indexing part). +- **One shared mesh**: a single flat (z=0) UStaticMesh with 3 LODs, built at + runtime via FMeshDescription + BuildFromMeshDescriptions(bFastBuild=true), + cached lazily in a GameInstanceSubsystem. Rendered via HISM instances (one per + patch); HISM auto per-instance LOD selection is safe thanks to edge-preserving LODs. +- **Displacement**: material WPO samples height texture (explicit mip 0, point + filter, +half-texel offset). UVs NOT stored in mesh — derived from world position + minus island origin (material params). No per-instance custom data needed. + Pixel shader: splat weightmaps + heightfield-derived normal map (those DO get mips; + weightmaps sized 4096², not 4097, so BC compression works). +- **Collision**: custom UPrimitiveComponent wrapping Chaos::FHeightField (no cook, + ~ms build, built from the same uint16 samples; crib from LandscapeCollision.cpp:1049). + Nobody public has done this (verified via Sourcegraph 2026-06); trimesh PMC path is + scaffolding only. Heightfield wins on memory (34MB vs GBs at 4097²) and query speed. +- **Height data**: uint16 grid, Landscape convention ((worldZ/scale)+32768). +- **Lumen**: project doesn't use it (no RendererSettings overrides; default GI=None). + Flat-proxy WPO terrain is incompatible-ish with Lumen — accepted, documented risk. +- Heightfield texture is NOT mipmapped (LODs sample full-res at sparse points — + exact vs collision; Landscape instead resamples mips + geomorphs, [[its choice]]). + +Code so far: `Source/Integration/TerrainPatch.h/cpp` — USTRUCT FlxTerrainPatch with +stubbed static MakePatch() (returns UStaticMesh*) and editor-only SavePatch() +(writes uasset for debugging; game always generates dynamically). diff --git a/claude/settings.json b/claude/settings.json index c6045dc..8d6b75b 100755 --- a/claude/settings.json +++ b/claude/settings.json @@ -62,7 +62,7 @@ ], "defaultMode": "acceptEdits" }, - "model": "sonnet", "effortLevel": "medium", - "theme": "light" + "theme": "light", + "tui": "fullscreen" } diff --git a/ssh/config b/ssh/config index ed136d7..0cd7d87 100644 --- a/ssh/config +++ b/ssh/config @@ -2,3 +2,8 @@ Host gitlab.com IdentityFile ~/.ssh/id_gitlab IdentitiesOnly yes AddKeysToAgent 8h +Host work + IdentityFile ~/.ssh/id_work + IdentitiesOnly yes + AddKeysToAgent 8h + diff --git a/ssh/gen-work-key.sh b/ssh/gen-work-key.sh new file mode 100755 index 0000000..37c56fc --- /dev/null +++ b/ssh/gen-work-key.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_work -C "jyelon@gmail.com"