summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop
Commit message (Collapse)AuthorAgeFilesLines
* p47: 整改 — ↵Somhairle H. Marisol6 days3-93/+170
| | | | 倒影改暖色垂直光柱(gap-skip穿桥面落水面,最长≥3格)+近景接入倒影+近景屋顶受光/背光双档luma
* p47: 场景细节升级 — ↵Somhairle H. Marisol6 days6-0/+435
| | | | 河道倒影(waterFrameTickAt微抖)+岸边芦苇加密度+鸭/叶漂浮元素+近景屋顶统一光源阴影
* p46: 菜单/启动环境动效 — ↵Somhairle H. Marisol6 days3-8/+199
| | | | 逐格涟漪(复用waterFrameTickAt)+灯笼呼吸+屋脊上双视差云影, 全纯函数可复现
* p45: 角色动画帧升级 — ↵Somhairle H. Marisol6 days4-1/+316
| | | | 四向x(走4+待机2)原创点阵内嵌图集, 行走/停止/idle 接入渲染
* p44: 对话框/文字弹层 — ↵Somhairle H. Marisol6 days3-16/+388
| | | | 完整背景框+中文断行换行+分页翻页+Esc关闭+输入隔离(原创32x64点阵头像)
* p43: HUD 星露谷化切片 — ↵Somhairle H. Marisol6 days2-2/+294
| | | | 右上日历钟卡/体力条形图/底部10格hotbar(1-0选中+高亮+输入隔离)
* p42: 启动/菜单水面涟漪整改 — 振幅0.32+波峰列, 帧差14.3, ↵Somhairle H. Marisol6 days3-11/+120
| | | | 防降振回归 (leader fix: 提交+推送)
* feat(p41): 夜帧船篷对比暗化Somhairle H. Marisol7 days1-2/+10
| | | | | | | | | - VillageArt.drawCc0BoatOverlay 增加夜层专用暗化系数 0.7(仅夜光晕层生效, 白天不调用 overlay,p40-day/p40-boat 逐字节不变) - P40ArtTests 新增 NightBoatAwningIsAtLeast40GreyDarkerThanSurroundingGlow: 内嵌 PNG 解码读取夜帧,断言船 2 瓦包围盒比 24px 光晕环至少暗 40 灰阶 - 新增 scripts/check-p40-night-boat-contrast.py 独立像素守卫 - 重出 docs/evidence/p40-night.png(contrast 103.2 >= 40)
* feat(p40): 乌篷船篷面实心拱形重绘与像素回归Somhairle H. Marisol7 days1-0/+0
| | | | | | | | | | | - make-cc0-art.py 重绘 boat 篷面为实心拱形竹篷:拱线以下逐列实心填充, 连续脊线高光跨越两半在瓦片边界相接,肋骨/端盖/甲板阴影收边(原 1px 竖柱 栅栏式画法改为整片拱面) - 重生成 Assets/cc0-tiles.png(同参数逐字节稳定) - P40ArtTests 新增 BoatAwningIsASolidArchWithAContinuousRidge 像素级断言: 脊线无透明断列、拱下每列有实心竹色、左右两半拱顶同高 属 P40 整改的篷面实心 + 回归部分。
* feat(p40): 乌篷船证据收口(相机遮挡与取景修复)Somhairle H. Marisol7 days2-5/+40
| | | | | | | | | - CenterCameraOnTile 让相机直对船瓦片,avatar 挪到岸上非水瓦片,消除遮挡 - day/night/boat 三个证据镜头统一以船为中心;boat 帧整条船(234-235,50)完整入框 - 夜光晕后重绘船体(drawCc0BoatOverlay),修复桥头灯把船洗白 - make-p40-closeups.py 裁剪框对准船真实包围盒,closeup 不再裁切船 - 相机遮挡修复含 leader 外科修复(CenterCameraOnTile) - 重出 docs/evidence/p40-day/night/boat 及 closeup 2x
* feat(p40): 石板路连贯带 + 红灯笼入夜光 + LV_P40_SHOT 证据钩子Somhairle H. Marisol7 days2-3/+136
| | | | | | | | - VillageArt: cc0PavingTiles 纯函数(路径/门口/桥相连石板格),drawTerrainTile cc0 分支只铺连贯石板带(19)、孤立散布石板改画草地;fallback/大世界原样 - cc0RedLanternTiles 门口红灯笼(20),并入 nightLightTilesWith 复用 P14 预乘 alpha 光晕 - Game: LV_P40_SHOT 钩子拍 p40-day/night/boat(PrepareP40Shot/CaptureP40Shot) - 不写瓦片/不改可达性/不动 Sim.step
* art(p40): 石板/红灯笼新格 + 重绘乌篷船与石灯笼(672x32, 21 ↵Somhairle H. Marisol7 days1-0/+0
| | | | | | | | | 格) - make-cc0-art.py: 新增 draw_paving(19)/draw_red_lantern(20);重绘 draw_boat(14/15) 放大船体 + 醒目拱形竹篷,重绘 draw_stone_lantern(16) 三段石结构强化 - 索引 0-13、17-18 逐字节不变(git show 复核);二次生成 byte-identical - docs/素材来源.md 更新为 21 格并新增第 5 节 P40
* feat(p39): cc0 中式元素确定性摆放 + 夜间灯笼光晕接入Somhairle H. Marisol7 days2-9/+250
| | | | | | | | | | - VillageArt: 新增 splitmix/hash2/tileIsWater 与 cc0BridgeTiles/cc0BoatTile/ cc0LanternTiles/cc0StallTiles/cc0ReedTiles,drawWorld cc0 分支叠加五类元素 - 奇偶 spacing 边界:摆放守卫 spacing<2 返回空集,消除 spacing=1 同余重叠 - nightLightTilesWith(includeRoadLanterns) + drawNightGlows 新参数; 旧 nightLightTiles 语义不变,Game.fs riverscape 分支按 cc0 开启路灯光晕 - LV_P39_SHOT 证据 hook:Update 准备、Draw 落盘(PrepareP39Shot/CaptureP39Shot) - 不写瓦片/不改可达性/不动 Sim.step
* art(p39): 自绘中式元素补入 cc0 图集(索引 12-18,608x32)Somhairle H. Marisol7 days1-0/+0
| | | | | | | - scripts/make-cc0-art.py 由 384x32(12格) 扩到 608x32(19格),新增 draw_bridge_center/end、draw_boat、draw_stone_lantern、draw_stall、draw_reeds - 旧索引 0-11 逐字节不变;产物 1523 bytes,sha256 ef86ced2…6adcb,二次生成一致 - docs/素材来源.md 更新为 19 格并新增第 4 节(P39 清单 + 摆放规则 + fallback 差异)
* feat(desktop): P38 HUD 图标化升级(时段/时间/倍速/体力/钱币)Somhairle H. Marisol7 days2-12/+100
| | | | | | | 顶部常驻条每个状态段前加 7x7 原创点阵图标(用 pixel 贴图绘制,无外部素材): 时段=太阳、时间=钟、倍速=双箭头、体力=心形、钱币=圆形钱眼。图标占 iconWidth+iconGap 后接文本,段总宽含图标;底色药丸与 1px 描边同覆盖图标与文本, 昼夜两套调色板均可读;仍为半透明窄条(barHeight 不变,非大黑块)。
* feat(desktop): P37 职业选择/开局取证钩子 LV_P37_SHOTSomhairle H. Marisol7 days1-0/+50
| | | | | 从主菜单进入「选择职业」页截图,按 LV_P37_OCCUPATION 选定职业(默认渔夫) 开局并打开任务面板截 HUD/任务列表后退出;仅证据用,不影响默认玩法。
* feat(desktop): P36 情境提示取证钩子 LV_P36_SHOTSomhairle H. Marisol7 days1-1/+49
| | | | | | 复用 sample 脚本走位/互动序列,在自然状态下抓 4 帧关键帧 (靠近→提示出现→对话层打开且世界交互被隔离→关闭走远提示消失) 并逐帧打印 panel/prompt/home 对照点,第 4 帧后退出。仅证据用,不影响默认玩法。
* feat(art): P34 素材扩展切片(水面/屋顶/墙体/栏杆)Somhairle H. Marisol7 days2-14/+81
| | | | | | | | | | | - cc0-tiles.png 由 4 格扩到 12 格:0-3 仍 Kenney 地面,4-11 为自绘构件 (4 水A/5 水B/6 屋脊/7 屋檐/8 木构墙/9 木格窗/10 栏杆/11 门) - 自绘 2 相位水面 cc0WaterTileIndexAt=(tick/32+x+2y)%2,单帧覆盖双相位; 河道与水田/水网共用;江南 fallback 不变 - drawWorld 接入:cc0 模式下民居屋顶/墙/窗/门、桥栏杆、水面走真素材,其余道具仍江南 - AssetPackTests 更新图集尺寸(12 格)+整数缩放,新增构件索引与双水相位用例 - docs/素材来源.md 记录自绘清单;同步 assets-and-licenses 与维护说明 P34 小节 - docs/evidence/p34-*.png 昼/夜/2x 特写/水波/对照(check-no-white-blocks 0 命中)
* feat(art): P33 接入 CC0 ↵Somhairle H. Marisol7 days2-6/+30
| | | | | | | | | | | | 真实像素素材样板(地面+角色竖直切片) - 修复 make-cc0-art.py 地块取样间距:packed sheet 无间距(16px pitch),旧 17px 误采错格 - 重选草地/石板格 (9,8)/(10,8)/(4,8)/(4,9),整数 2x NEAREST 重建 cc0-tiles.png - VillageArt 暴露 selectedGround/CharacterAtlasRelativePath 纯函数,保留 LV_ASSET_PACK=cc0 开关与程序绘制江南图集 fallback - 新增 AssetPackTests:图集加载尺寸、整数倍缩放、开关/回退断言 - docs/素材来源.md 记录来源/许可/sha256/构建/开关;同步 assets-and-licenses 与维护说明 P33 小节 - docs/evidence/p33-atlas-*.png 昼/夜/2x 特写/程序绘制对照(check-no-white-blocks 0 命中)
* feat(desktop): P31 step4 story progress display + evidence shotsSomhairle H. Marisol13 days2-2/+85
| | | | | | | | | | | | | | | | - Task panel (T key): a storyline row per occupation, e.g. ju-qing-xian: shui-wei-yu-shou-cheng, zou-fang-zhong (line name + stage name); absent for occupation-free saves. - Occupation select page: minimal hint line showing the selected occupation's storyline name. - Evidence hook LV_STORY_SHOT=1 (+LV_STORY_OCCUPATION, LV_STORY_STAGE): boots a real world through the standard bootstrap, advances the story via the real dialogue pipeline (chooseDialogueWith bias + Story.onDialogue + StoryAnnal append), opens the task panel and saves one back-buffer frame, then exits. 4 Xvfb shots (farmer/fisher/peddler/scholar) captured under art/ (gitignored, not committed). - 4 new desktop tests (156 -> 160): panel storyline lines, bias + story advance through M5Interaction, no-occupation path stays story-free.
* feat(kernel,desktop): P31 step3 story annals + identity entry + glyph atlasSomhairle H. Marisol13 days6-8/+145
| | | | | | | | | | | | | | | | | | - Sim.AnnalKind gains StoryAnnal (summary lives in the existing Summary field); WorldSave v3 serializes it with the new 'story' token. v1/v2 saves never contain the token and stay byte-identical; v3 save -> load -> save roundtrips byte-for-byte (tested). - Occupation.Story.identitySummaryOf: plain chronicle-style identity line written to the yearbook at game start (design section 3), e.g. yi-da-yu-wei-sheng. - Desktop: story summaries render in the chronicle panel; StartNewGame appends the identity annal; chooseIntent now routes responses through Occupation.biasResponse and advances the storyline (one stage per player dialogue) with the summary appended as a StoryAnnal. - M5View gains Seed (world seed source for the story start-day hash). - Chinese copy synced into requiredUiLabels; cjk-glyphs.txt + CjkGlyphAtlas.characterTable extended 238 -> 307 glyphs (384x480), atlas regenerated with the deterministic script. - 4 new kernel tests (115 -> 119); performance digest unchanged.
* feat(desktop): P30 512 民居增密 + 乡村空区填充 + 主路柔化Somhairle H. Marisol13 days3-49/+483
| | | | | | | | | | | | | | | | | | | - MapGen(仅大图尺寸自适应分支,默认 64x48/256x192 不进入、不消费额外 RNG): ① ExtraRiversideHouses 16 -> 30,组团 2-5 座;含基础岸屋的路段优先布组并为每座孤立 基础民居贴格配对,placeGroup 试排后按「与既有/同组民居足迹间隙 <=2」过滤,孤立单屋不落地。 512 seed4242:组团民居 24 -> 45,规模 [5;4x6;3x2;2x3],0 组 <2 座。 ② 新增 GroundTile.PaddyField=4/VegetablePlot=5(成熟 tile;非水可通行)+ Result.Groves (纯视觉)+ Result.Farmhouses(门贴院落路、计入 BFS);18x14 确定性网格铺田块/树丛/农舍, 离水 >=3 格、避开路网/核心/民居。草地瓦片 96.3% -> 83.9%,水田 11595 + 菜畦 12877 格。 ③ Result.MainRoadCenter 逐列中心线,value noise(scale 130、幅度 ±3)确定性缓弯, 相邻列步长 <=1、遇弯补格保证 4 连通;默认图主街仍笔直。 - VillageArt:水田/菜畦/树丛/农舍渲染(复用成熟 sprite 与同一立面纯函数)、农舍门窗计入夜光、 新增 drawMapRegion 局部真实离屏渲染。 - Game:P30 证据钩子 LV_MAPGEN_P30_SHOT=1(整图 3072x2304 day/night + 田块/主路 512x256@4px)。 - 回归 +5:组团规模/空区填充/田块合规/农舍可达确定性/主路确定性弯曲。 Kernel 92 / Desktop 156 全绿;Release 0 警告 0 错误; final_digest=953775FAEB2F… 3 次一致、performance_determinism=PASS; 64x48=6042052、256x192=1284656962 锁定不变。
* feat(desktop): P29 512 聚落组团 + 夜景灯光径向光晕Somhairle H. Marisol13 days3-84/+216
| | | | | | | | | | | | - MapGen:仅大图新增 ClusterSeed(group seeding)与组团布屋——512 沿横向石板路 (主街+河岸路)成排成组:组内 2-4 座/1 格间隙、组间 4-6 格空档,宽度 2/3/4 分层; 垂柳改为确定性成丛(2-3 株/丛、丛间 3-5 格空档)。独立 clusterRng 不触碰 structureRng,默认图仍不消费 RNG,64x48=6042052 / 256x192=1284656962 锁定不变。 - VillageArt:新增 lanternFalloff(二次 1-(d/r)^2,半径 0 处最大、边缘 0、严格单调无平台); lanternGlowLayers 按该衰减逐环累积 alpha;drawNightGlows 对桥头灯笼+民居门窗画半径 4 tile 的柔和径向光晕,整图取证与实机 DrawWorldView 共用同一套纯函数。 - 回归 +6:组团行/成丛/衰减/光源确定性;Desktop 151、Kernel 92 全绿,Release 0/0, final_digest=953775FAEB2F… 3 次一致。证据帧见 art/p29-*。
* feat(desktop): P28 整图夜景取证(真实 tint + 月光 veil)Somhairle H. Marisol13 days1-9/+26
| | | | | - LV_MAPGEN_NIGHT=1 时整图按 23:30 的 WorldTint 与 golden/moonlight veil 渲染 - RenderMapGen 参数化 tint/veil tick,与 DrawWorldView 共用同一套纯函数
* feat(desktop): P28 整图 2px/tile 真实帧取证钩子Somhairle H. Marisol13 days1-0/+18
| | | | | - LV_MAPGEN_FIT_WIDTH/HEIGHT 额外渲染整图到指定像素目标(1024x768 -> 恰 2px/tile) - 仅取证模式触发,不进入正常游戏循环
* feat(mapgen): P28 512 沿河民居加密至 16 并宽度 2/3/4 分层Somhairle H. Marisol13 days1-9/+14
| | | | | | - ExtraRiversideHouses 10 -> 16(沿河 +6 座),宽度加权 2/3/4 形成聚落层次 - 仅 large 分支执行、默认图不消耗 RNG:64x48=6042052、256x192=1284656962 锁定不变 - 新增 LargeMapHouseDensityHierarchyOnlyGrowsLargeMaps 回归
* feat(desktop): P28 ↵Somhairle H. Marisol13 days2-7/+16
| | | | | | | | 民居第二变体强化配色与轮廓(青灰挑檐色阶 + 竖长格栅窗 + 绿院门) - make-jiangnan-art.py slot 28/29/30:B 变体改用亮青灰瓦色阶、竖长木格栅窗、绿双扇院门 - VillageArt 变体 B 渲染:挑檐多叠一层、向两侧各出一格(水面之上不叠),墙身统一格栅窗 - 仅绘制分支,瓦片/可达性零改动
* feat(desktop): P26 HUD 常驻元素半透明底色 + 1px ↵Somhairle H. Marisol13 days2-5/+25
| | | | 描边(昼/夜可读)
* feat(desktop): P26 夜晚冷月光 veil(纯渲染层)+ ↵Somhairle H. Marisol13 days2-0/+20
| | | | 灯笼光晕径向无方斑回归
* feat(mapgen): P26 512 ↵Somhairle H. Marisol13 days3-6/+101
| | | | 大图河岸装饰(护岸石垒/芦苇/垂柳)仅视觉层,不挡通行
* feat(desktop): P26 ↵Somhairle H. Marisol13 days2-12/+38
| | | | 民居立面第二变体(挑檐/木格栅窗/院门)沿河沿路交替
* feat(desktop): LV_RIVERSCAPE_VILLAGE_TOUR ↵Somhairle H. Marisol13 days1-0/+15
| | | | | | | | 村民巡游钩子提升屏内可见村民(P25) - NPC 行动目标固定在 Sim 四活动点(厨房/家/集市/工位),原桥/门/核心巡游大多帧 屏内仅 0-3 人;新钩子改为在这些活动点间环游,150s 采样 >=8 村民占 74%(村庄段 89-91%)。 - 仅 Desktop 取证路径,不动 Kernel/Sim 数值。
* fix(mapgen): 大图关闭孤立装饰石块,杜绝草地上游离石板 ↵Somhairle H. Marisol13 days1-17/+23
| | | | | | | | | tile(P25) - 新增 Params.DecorativeStones(默认 true);paramsForSize 对 >256x192 关闭, 512x384 不再产生 292 个孤立石板(stone 非路网计数归零,石块全部属于路网)。 - 64x48/256x192 保持开启,checksum 6042052/1284656962 不变。 - 新增 NoIsolatedStoneTiles / DecorativeStonesDisabledOnLargeMaps 回归;Desktop 134 -> 136。
* feat(art): 生成器民居改用黛瓦/木墙/门窗部件 + ↵Somhairle H. Marisol13 days2-7/+28
| | | | | | | 村民可见性日志钩子(P24) - drawMapStructures 用 RoofRidge/RoofEave + WallWood/WallWindow + Door 精灵替换原矩形色块。 - LV_NPC_VISIBLE_LOG=1 每秒打印 visible-npcs=K of 30,作为大世界村民渲染证据。
* feat(mapgen): 512x384 沿河民居加密到 18 座且门全部可达(P24)Somhairle H. Marisol13 days1-3/+52
| | | | | | | - Params.ExtraRiversideHouses(默认 0);paramsForSize 仅对 >256x192 设为 10, 从既有路网泊松散布 3x2 民居并接门入网(structureRng 确定性),512x384 共 18 座。 - 64x48/256x192 仍 4 座、checksum 6042052/1284656962 不变(新增用例锁定)。 - 新增 512 民居数量/可达/确定性用例;Desktop 130 -> 134。
* feat(desktop): LV_RIVERSCAPE_WIDTH/HEIGHT 取证钩子支持 512x384 ↵Somhairle H. Marisol13 days1-2/+11
| | | | | | 生成器世界(P23) - 默认仍是 256x192,不改默认世界;仅让巡游/性能取证可跑 512x384。
* feat(mapgen): 512x384 尺寸自适应参数与扩程回归(P23)Somhairle H. Marisol13 days1-5/+30
| | | | | | | | | - paramsForSize:河道数量随高度约每 96 行一条(64x48/256x192 仍 2 条,512x384 得 4 条), 第 3 条起在核心上/下方逐层外扩,互不重叠且不压核心。 - 噪声特征尺度封顶 4x,避免 512x384 退化成过度平滑的放大图。 - 64x48/256x192 生成结果逐字节不变(新增 checksum 锁定用例)。 - 新增 512x384 同 seed 逐字节一致/异 seed 分化/四河道连续/30 spawn 与桥两岸可达用例。 - Desktop 测试 124 -> 130。
* feat(perf): LV_PERF_SOAK_SECONDS 让 64x48/sample ↵Somhairle H. Marisol13 days1-2/+18
| | | | | | | 世界也能长时帧率采样(P22) - sample 脚本跑完一轮后若未到 soak 秒数则回到开头继续,用于与 256x192 巡游做同口径的解锁帧率对比;默认 0 行为不变。
* feat(perf): LV_UNLOCK_FPS 与 LV_PERF_SUMMARY 实机帧率核对钩子(P21)Somhairle H. Marisol13 days1-2/+40
| | | | | | - LV_UNLOCK_FPS=1 关闭 vsync/固定步长以测真实渲染上限; LV_PERF_SUMMARY=1 退出时用 PerformanceSummary 打印 mean/min/max。 - LV_RIVERSCAPE_SECONDS=N 让巡游循环到 N 秒,支撑 60s 稳定采样。
* feat(perf): 帧率采样汇总纯函数 + 测试(P21)Somhairle H. Marisol13 days2-0/+28
| | | | | - PerformanceSummary.summarize:丢弃 warmup 后求每秒 FPS 的均值/最低/最高, 空样本返回 None;含 3 条单测(TDD)。
* fix(mapgen): sample 录像流程保持 64x48,仅显式巡游用生成器世界Somhairle H. Marisol13 days1-2/+9
| | | | | LV_AUTOPLAY_SAMPLE(非巡游)仍走旧 64x48 以确保既有录像可复现; LV_RIVERSCAPE_TOUR=1 时才启用 256x192 生成器世界。新增 world-mode 启动日志。
* feat(mapgen): 默认可玩世界接入生成器 + 河景细节(P20 ↵Somhairle H. Marisol13 days2-63/+170
| | | | | | | | | | | | 第三步 B) - Game:默认 256x192 生成器世界(核心可达区站位),LV_LEGACY_MAP=1 / LV_MAP_SCALE>1 / LV_MAP_TOUR=1 回退旧路径;StartNewGame 走同一站位。 - VillageArt.drawWorld 新增 pixel 与 mapGen option:Some 时按生成器瓦片绘地面 并叠加桥面/沿河民居/门,跳过 64x48 样例平面与道具;水波沿用 waterFrameTickAt。 - 新增 bridgeLanternTiles;夜间 LanternGlow 沿用既有预乘同心圆(无过曝白芯), 生成器世界用桥头灯笼。 - 新增 LV_RIVERSCAPE_TOUR 真走位巡游与 LV_RECORD_NAME 录屏前缀(证据用)。
* feat(mapgen): 生成器序列化 + 世界站位接入(P20 第三步 A)Somhairle H. Marisol13 days3-7/+54
| | | | | | | | | | | - MapGen.serialize:生成结果的确定性序列化(尺寸/seed/瓦片/Rivers/Bridges/ Paths/Buildings),同 seed 逐字节一致,供回归与跨机核对。 - WorldBootstrap.initialWorldWithPlacement:显式站位建世界;旧 64x48 路径 (initialWorld/initialWorldWithOccupation)字节口径不变。 - WorldBootstrap.initialWorldInMap:用生成器核心可达区做站位,30 spawn 全落 可达核心;新增 serialization/placement 两条测试。 - fsproj:MapGen 先于 WorldBootstrap 编译。 - Desktop 119->121,Kernel 90 不变。
* feat(mapgen): 河道连续性不变量 + 桥/石板路网/沿河民居(P20 ↵p20-map-gen-foundationSomhairle H. Marisol13 days3-65/+211
| | | | | | | | | | | | | 第二步) - 河道改为贯穿全图连续水带(每列一段、宽度 >= RiverWidth),置于核心区上下 两侧且不相交;新增不变量测试:逐列水段数恒定、每段宽度下限、任意水格 >=2 个水邻居(禁止断裂缺口与孤立水点)。 - Result 新增 Rivers/Bridges/Paths/Buildings/BridgeCrossingsOk;每河 2 座桥、 横贯主路 + 垂直连接路 + 远岸路 + 白墙黑瓦民居(门朝路)。 - 公开 isWalkable/floodFill;ReachabilityOk 现覆盖 30 spawn + 所有门 + 所有桥面, BridgeCrossingsOk 保证每桥两岸同连通域。 - 回归:Desktop 115->119、Kernel 90 不变;final_digest 与基线一致。
* feat(mapgen): 参数化确定性生成器与视口裁剪(P20 第一步)Somhairle H. Marisol13 days4-19/+423
| | | | | | | | | | - 新增纯函数 MapGen:尺寸参数化(默认 64x48,可 256x192),splitmix64 随机游走河道 + 2-3 octave value noise + 泊松式布点;核心区整平后以 BFS 校验 5x6=30 个 spawn 全部可达,不可达确定性修整并复验。 - visibleTileRange/visibleTileCount 纯函数,drawWorld 改为调用之(行为不变); drawMapFitted/drawMapViewport 仅证据用。 - 存档沿用 v2/v3 边界字段,补参数化边界 round-trip 测试,未改 Sim 语义。 - 回归:Desktop 109->115、Kernel 89->90;final_digest 与基线一致。
* fix(desktop): P19 白天色调去偏黄(day tint ↵p19-daylight-tamingSomhairle H. Marisol13 days1-4/+6
| | | | 中性白平衡,黄昏暖橙保留)
* feat(desktop): P18 黄昏暖色真实渲染(加性暖色 veil + ↵Somhairle H. Marisol13 days2-14/+38
| | | | 双窗口光照 + 时段标签对齐)
* fix(desktop): P17-FIX 起时钩子在 sample/autoplay ↵Somhairle H. Marisol13 days2-11/+22
| | | | 路径生效(resolveStartTick 纯函数 + 回归 + 重拍证据)
* test(desktop): P17 取证钩子(LV_AUTOPLAY_START_HOUR 纯函数起时)+ ↵Somhairle H. Marisol13 days2-1/+18
| | | | 证据与 docs 记录
* feat(desktop): P17 清晨/黄昏光照精修(暖色天际 + ↵Somhairle H. Marisol13 days1-18/+51
| | | | 过渡窗口参数化,分数小时平滑)