| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
- 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
|
| |
|
|
|
|
|
|
| |
- VillageArt: cc0PavingTiles 纯函数(路径/门口/桥相连石板格),drawTerrainTile cc0
分支只铺连贯石板带(19)、孤立散布石板改画草地;fallback/大世界原样
- cc0RedLanternTiles 门口红灯笼(20),并入 nightLightTilesWith 复用 P14 预乘 alpha 光晕
- Game: LV_P40_SHOT 钩子拍 p40-day/night/boat(PrepareP40Shot/CaptureP40Shot)
- 不写瓦片/不改可达性/不动 Sim.step
|
| |
|
|
|
|
|
|
|
|
| |
- 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
|
| |
|
|
|
|
|
| |
顶部常驻条每个状态段前加 7x7 原创点阵图标(用 pixel 贴图绘制,无外部素材):
时段=太阳、时间=钟、倍速=双箭头、体力=心形、钱币=圆形钱眼。图标占
iconWidth+iconGap 后接文本,段总宽含图标;底色药丸与 1px 描边同覆盖图标与文本,
昼夜两套调色板均可读;仍为半透明窄条(barHeight 不变,非大黑块)。
|
| |
|
|
|
| |
从主菜单进入「选择职业」页截图,按 LV_P37_OCCUPATION 选定职业(默认渔夫)
开局并打开任务面板截 HUD/任务列表后退出;仅证据用,不影响默认玩法。
|
| |
|
|
|
|
| |
复用 sample 脚本走位/互动序列,在自然状态下抓 4 帧关键帧
(靠近→提示出现→对话层打开且世界交互被隔离→关闭走远提示消失)
并逐帧打印 panel/prompt/home 对照点,第 4 帧后退出。仅证据用,不影响默认玩法。
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 锁定不变。
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- 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-*。
|
| |
|
|
|
| |
- LV_MAPGEN_NIGHT=1 时整图按 23:30 的 WorldTint 与 golden/moonlight veil 渲染
- RenderMapGen 参数化 tint/veil tick,与 DrawWorldView 共用同一套纯函数
|
| |
|
|
|
| |
- LV_MAPGEN_FIT_WIDTH/HEIGHT 额外渲染整图到指定像素目标(1024x768 -> 恰 2px/tile)
- 仅取证模式触发,不进入正常游戏循环
|
| |
|
|
| |
描边(昼/夜可读)
|
| |
|
|
| |
灯笼光晕径向无方斑回归
|
| |
|
|
|
|
|
|
| |
村民巡游钩子提升屏内可见村民(P25)
- NPC 行动目标固定在 Sim 四活动点(厨房/家/集市/工位),原桥/门/核心巡游大多帧
屏内仅 0-3 人;新钩子改为在这些活动点间环游,150s 采样 >=8 村民占 74%(村庄段 89-91%)。
- 仅 Desktop 取证路径,不动 Kernel/Sim 数值。
|
| |
|
|
|
|
|
| |
村民可见性日志钩子(P24)
- drawMapStructures 用 RoofRidge/RoofEave + WallWood/WallWindow + Door 精灵替换原矩形色块。
- LV_NPC_VISIBLE_LOG=1 每秒打印 visible-npcs=K of 30,作为大世界村民渲染证据。
|
| |
|
|
|
|
| |
生成器世界(P23)
- 默认仍是 256x192,不改默认世界;仅让巡游/性能取证可跑 512x384。
|
| |
|
|
|
|
|
| |
世界也能长时帧率采样(P22)
- sample 脚本跑完一轮后若未到 soak 秒数则回到开头继续,用于与 256x192
巡游做同口径的解锁帧率对比;默认 0 行为不变。
|
| |
|
|
|
|
| |
- LV_UNLOCK_FPS=1 关闭 vsync/固定步长以测真实渲染上限;
LV_PERF_SUMMARY=1 退出时用 PerformanceSummary 打印 mean/min/max。
- LV_RIVERSCAPE_SECONDS=N 让巡游循环到 N 秒,支撑 60s 稳定采样。
|
| |
|
|
|
| |
LV_AUTOPLAY_SAMPLE(非巡游)仍走旧 64x48 以确保既有录像可复现;
LV_RIVERSCAPE_TOUR=1 时才启用 256x192 生成器世界。新增 world-mode 启动日志。
|
| |
|
|
|
|
|
|
|
|
|
|
| |
第三步 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 录屏前缀(证据用)。
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
第二步)
- 河道改为贯穿全图连续水带(每列一段、宽度 >= RiverWidth),置于核心区上下
两侧且不相交;新增不变量测试:逐列水段数恒定、每段宽度下限、任意水格
>=2 个水邻居(禁止断裂缺口与孤立水点)。
- Result 新增 Rivers/Bridges/Paths/Buildings/BridgeCrossingsOk;每河 2 座桥、
横贯主路 + 垂直连接路 + 远岸路 + 白墙黑瓦民居(门朝路)。
- 公开 isWalkable/floodFill;ReachabilityOk 现覆盖 30 spawn + 所有门 + 所有桥面,
BridgeCrossingsOk 保证每桥两岸同连通域。
- 回归:Desktop 115->119、Kernel 90 不变;final_digest 与基线一致。
|
| |
|
|
|
|
|
|
|
|
| |
- 新增纯函数 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 与基线一致。
|
| |
|
|
| |
双窗口光照 + 时段标签对齐)
|
| |
|
|
| |
路径生效(resolveStartTick 纯函数 + 回归 + 重拍证据)
|
| |
|
|
| |
证据与 docs 记录
|
| |
|
|
| |
真实菜单证据补拍
|
| |
|
|
| |
顶部窄信息条(时段/时间/倍速/体力/钱币)+ 冬夜冷色 + 面板/提示渐变重绘
|
| |
|
|
| |
开始界面收敛三项(开始/读档/退出)+ CJK 补字 238
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
开局职业选择页——新档四选一+暂不选择,接入 v3 存档与当日任务
- MenuState:新增 OccupationSelect 页与 StartNewGameWith 命令;occupationOptions=农夫/渔夫/货郎/书生/暂不选择,
默认高亮「暂不选择」= 不写职业的旧行为;四选一确认后发 StartNewGameWith,ESC 返回主菜单(既有 MainMenu
行为与测试不变)。
- WorldBootstrap.occupationStateFor/refreshOccupationToday:按 seed+职业种子生成/跨日刷新当日 Offered 任务。
- Game:主菜单「开始新游戏」→ 职业选择页;选定后 initialWorldWithOccupation 注入 Money/Energy 与 Today,
m5View.Task 随之写入 v3 存档;游玩中按日刷新;autoplay/flow 默认走「暂不选择」保持旧演示行为;DrawMenu 渲染职业页。
- 测试 Desktop 93(新增 6):职业页选项顺序/默认 None/标签、确认命令与返回、bootstrap 四职业 Money/Energy+当日池内
Offered 任务、四职业 v3 round-trip(职业+任务逐字段)、T 面板显示所选职业的模板名与「待接受」、跨日刷新保持同日。
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
预乘并改径向层叠,消除夜间纯白方块
- 新增 VillageArt.premultiply:MonoGame SpriteBatch 默认预乘混合,直传
Color(r,g,b,a) 会直接加 rgb 导致多层暖色饱和成 75x75 纯白块
- lanternGlowLayers 用同心圆 pixel run 做径向衰减,逐层预乘,只在
RiverLantern 实体处绘制
- 水面相位改 waterFrameTickAt=(tick/32+x+2y)%3,同一帧相邻砖相位不同
- 炊烟改为 drawWorld 末尾独立一遍,位置 offsetTile 0 -3,画在屋瓦/竹子之上
- 角色脚底对齐 characterFeetOffset=16 并加预乘椭圆接触阴影
- 补全 Interaction.itemName 的 ItemKind 匹配(否则非 Food 交易会崩溃且告警)
|
| |
|
|
|
|
|
| |
- 新增 avatarMoving(比较前后位置)驱动走路/待机帧切换,
覆盖采样、地图巡游与手动输入三条路径
- 录帧目录与间隔改为环境变量 LV_RECORD_DIR / LV_RECORD_EVERY
(默认 /tmp/lv-p5-prompt、25),便于证据落到指定目录
|
| |
|
|
| |
键任务页、Offered/Active/Done 三态+职业名,存读档字段级携带职业
|
| |
|
|
| |
Game.fs 733/741 两条编译警告(FS0049 未限定模式绑 + FS0026 不可达)由 Qualified VillageArt.RenderPropKind.RiverLantern 修复,全仓 0 警告;Leader 所指 Interaction.fs:191 并无编译警告(已记录于验资说明);docs/维护说明.md 首开:模块职责/O 不变量/信息 digest 变化处理/可复制命令。
|
| |
|
|
| |
LV_MAP_TOUR 需自动开局(复用 LV_AUTOPLAY 的菜单自动确认路径),更新 autoplay 判定并提交;巡游/周边日志等已在前一单。
|
| |
|
|
| |
ProceduralMap 纯函数生成器:splitmix64 随机游走河道(三条西→东,宽 3,穿核心禁入)、三倍频值噪声草地/泥炭变化、泊松式最小距离布点(800 次尝试),村核矩形(24..38 x 16..34)由生成器不变式保证可通行;VillageArt 于大世界模式下按 terrain code 逐格绘制(可视化范围裁剪,无每帧分配);Game 新增 LV_MAP_SCALE(默认 1,表示规模倍数)与 LV_MAP_TOUR 巡游采样(八个地标位置含角/中心/河带);快照回归断言:同 seed 逐字节一致、异 seed 必然差异、核心矩形无水面。
|
| |
|
|
| |
夜晚灯笼光晕由三层高不透明矩形改为四层宽环径向衰减(外圈 alpha 9→渐强),核心亮度压到 34 并去掉全白芯层,灯笼本图块在夜色下保持可读;Xvfb 夜景 hěllo 帧自证:暖色簇 776/745 采样像素、近白过曝核心消失。
|
| |
|
|
| |
entranceProgress 纯函数按帧计数(固定 60Hz 步长,禁实时时钟):黛瓦天际线自上 36px 落定、标题自下 24px 升起、水面带 2s 淡入、灯笼/面板同步;快照回归断言进度锚点(0/60/120/超时)与确定性;LV_AUTOPLAY_FLOW 标题停留 60 帧可直接采样入场过程。
|
| |
|
|
| |
新增 lightingBlend 纯函数(黎明明 4:00-6:00、暮色 20:00-22:00 线性过渡,边界与 isNightTick 对齐),天空底色/世界 tint 按混合插值渲染,夜晚灯笼暖光晕强度=LanternGlow(纯叠加矩形、无每帧分配风险);回归测试含锚点/单调斜坡/确定性/光晕开关。
|
| |
|
|
| |
LV_AUTOPLAY_RECORD=1 且样例模式下每 25 帧经 GetBackBufferData 保存 PNG 到 /tmp/lv-p5-prompt/,用于靠近→提示→交互→关闭→离开片段取证;仅记录模式触发,不影响普通运行路径。
|
| |
|
|
| |
新增 FloatingPrompt 纯布局模块(含 measureWidth 与 PixelText 等宽规则):短提示锚定在唯一目标头顶上方,水平居中并钳制在视口内,避开左下 HUD 带(height-160)与右上状态条带(宽度 248);沿用现有 CJK 图集字体路径,不新造字形;对话/需求面板与菜单打开时不显示(复用 worldInputAllowed 判定与渲染门)。回归测试覆盖 1280x720/1920x1080 五个极限锚点、宽度测量、面板开启时提示为空且禁用世界输入。
|
| |
|
|
| |
键位页内容行与标题改为相对 ControlsPanelY 锚定(标题=面板顶+20、首行=面板顶+60),controlRowRects 同步采用该锚点;实测末行与页脚不再重叠,逐行键名/动作列保持不相交。
|
| |
|
|
| |
Controls 页按键名列独立成列(ControlsKeyX/KeyWidth=120/ActionX),controlRowRects 纯函数返回键名与动作矩形,回归测试断言逐行矩形不相交、全部行键名列 x/宽度一致、列宽容纳最长键名 F1/F2/F3;面板上移至 ControlsPanelY 保证 14 行键位加页脚完整落入视口。
|
| |
|
|
| |
根因:页面标题行(panelY+24)与首行内容(MenuTopY)同为 y=320 造成两串文字叠印。修复:TitleScreen 布局新增 HeadingY/FirstItemY 分层与独立光标列(CursorX/CursorWidth/TextX),selectionRects 纯函数返回光标与文字矩形,回归测试断言逐行矩形不相交且标题行净空≥32px;渲染改为光标、文字分别绘制。
|
| |
|
|
| |
LV_AUTOPLAY_FLOW 在主菜单标题画面与操作说明页各停留 60 帧,使 10fps 录屏可稳定采样两页证据帧;其余流程步骤与日志保持不变。
|
| |
|
|
| |
P 键改为打开暂停帮助页(完整键位说明),打开时暂停模拟并保留原控制状态,返回游戏时精确恢复(速度/暂停原状);常驻 HUD 不放全键位清单。MenuState 新增 enterPauseHelp/exitPauseHelp 纯函数与回归测试。
|
| |
|
|
| |
常驻 HUD 新增右上角半透明状态条:天数(world.Tick/ticksPerDay+1)与金钱/精力(直接取自 avatar.Mind.Needs 真实数据,无编造数值源);新增 cornerStatusLines 纯函数与回归测试,UI 文案目录补 天数/金钱/精力(字符表已含,无需重生成图集)。
|
| |
|
|
| |
新增 TitleScreen 纯布局模块(确定性、可测):五段暮色渐变天幕、黛瓦屋脊/檐口轮廓带(复用图集 8/9 号地块)、水面倒影带(1 号地块)、岸边灯笼光晕、江南水乡四倍大字标题;主菜单改为纵向简洁排布浮于其上,子页面板按内容自适应高度,去除全屏暗色遮罩大黑块。Xvfb 截图像素自查通过。
|
| |
|
|
| |
场景改为沿村蜿蜒水带(北岸凸湾、中段横贯、南段收窄),南北两岸石板路沿河展开,木桥三块纵跨全河连接民居门前石径;水面新增第二张波纹图块,按世界 tick/32 取模确定性交替,绘制无新增每帧分配。
|
| |
|
|
| |
字符表扩充至 197 字(补 间/门/谈/体/屋/返/×/,/:等全部 UI 用字),用 Noto Sans CJK 重新生成图集并逐字校验;新增字符表覆盖全部 UI 文案、瞬态状态 2.5 秒过期、对话完成后回到轻量面板等回归测试;户外与室内统一左下角轻量 HUD,互动日志改为短暂反馈;样例脚本保留 E 交谈 提示与对话菜单停留帧。
|