blob: f41afd2f6d9f92fd9562f52a63efb2abac82c26b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# 第三方像素素材来源与许可
P33 开始把「程序几何绘制」的样例村庄逐步替换为**真实像素素材**(统一像素风格),
P34 扩展到水面 / 屋顶 / 墙体 / 栏杆等构件。仍是竖直切片,不做全村,其余走原程序绘制
江南图集作为 fallback。
- **开关**:`LV_ASSET_PACK=cc0` 时启用真实素材包;未设置或取其它值一律回退到程序绘制
图集(`Assets/jiangnan-*.png`)。图集选择入口见 `src/LivingVillage.Desktop/VillageArt.fs`
的 `useCc0Pack` / `selectedGroundAtlasRelativePath` / `selectedCharacterAtlasRelativePath`。
- **构建命令**(确定性,二次运行 byte-identical):
```bash
python3 scripts/make-cc0-art.py
# -> src/LivingVillage.Desktop/Assets/cc0-tiles.png 672x32 (21 个 32x32 格)
# -> src/LivingVillage.Desktop/Assets/cc0-characters.png 3840x48 (5 变体 x 4 向 x 6 帧, 32x48 格)
```
`cc0-tiles.png` 前 4 格来自 Kenney(源 16x16,**整数 2x NEAREST** 到 32x32),后 17 格为
自绘(P34 的 8 格 + P39 的 7 格 + P40 的 2 格,详见第 3、4、5 节);角色图为 Puny 源 16x24
整数 2x 到 32x48。缩放断言见 `src/LivingVillage.Desktop.Tests/AssetPackTests.fs`。
## 1. Kenney Tiny Farm(地块)
- 名称/版本:Tiny Farm(1.0),作者 Kenney。
- 来源页:<https://kenney.nl/assets/tiny-farm>
- 直链:<https://kenney.nl/media/pages/assets/tiny-farm/dfded1ae3e-1782913588/kenney_tiny-farm.zip>
- 许可:**CC0 1.0**(包内 `License.txt` 已保留于 `third_party/kenney_tiny-farm/License.txt`)。
- 本地原始包:`third_party/kenney_tiny-farm.zip`
- SHA-256:`a06f75f312c27eff15a2288475612e6f6699411be7259d408323cd15a790decc`(191128 bytes)
- 获取日期:2026-09-21
- 用法:取 `Tilemap/tilemap_packed.png`(192x176,12x11 格,**无间距、16px pitch**;带间距的
`tilemap.png` 为 203x186/17px)。取 (9,8)/(10,8) 两档草 + (4,8)/(4,9) 石板,整数 2x 生成
`Assets/cc0-tiles.png` 的 0-3 格。**Tiny Farm 是农场包,无水面 / 屋顶 / 墙体 / 栏杆素材**
(已逐格核查:无蓝色水面格),故这些构件自绘,见第 3 节。
## 2. Puny Characters(角色)
- 名称:Puny Characters,作者 Shade。
- 来源页:<https://opengameart.org/content/puny-characters>(附件直链 `puny-characters.zip`)
- 许可:**CC0 1.0**(OpenGameArt 页面 License(s): CC0,itch.io 发布页同为 CC0;包内无独立
许可文件,以发布页为准)。
- 本地原始包:`third_party/puny-characters.zip`
- SHA-256:`971d7b07eea18fb2cce475cd6554a176ebf783bb064dec5a637ba33c7829320e`(235985 bytes)
- 获取日期:2026-09-21
- 用法:每个角色图 768x256(8 行 x 24 列,约 32px pitch);取南向 16x24 取带,整数 2x 放到
32x48 格。包只提供南向姿态,北向复用南向、东/西为镜像(限制沿用 `scripts/make-cc0-art.py`
注释)。生成 `Assets/cc0-characters.png`。
## 3. 自绘补绘构件(P34,原创,无第三方来源)
Kenney Tiny Farm 无合适的瓦屋顶 / 白墙 / 木格窗 / 栏杆 / 水波 / 门素材,按任务要求用仓库
自绘 32px 像素图补入 `cc0-tiles.png` 的 4-11 格(**原创,无外部来源,无需第三方许可**),
统一江南调色板:青灰瓦、白灰墙、暖木构件、碧水。逐格:
| 索引 | 内容 | 说明 |
| --- | --- | --- |
| 4 | 水面 A | 自绘 2 相位水波之一 |
| 5 | 水面 B | 相位相对 A 位移 4px(两相位差 256px) |
| 6 | 屋顶正脊 | 青灰瓦脊 + 亮脊线 |
| 7 | 屋顶檐口 | 青灰瓦 + 檐口高光/滴水 |
| 8 | 墙体(木构) | 白灰墙 + 上下暖木梁 |
| 9 | 木格窗 | 白灰墙 + 中心木格窗 |
| 10 | 栏杆 | 木栏杆(用于桥面) |
| 11 | 门 | 暖木双扇门 |
- 自绘代码位于 `scripts/make-cc0-art.py`(`draw_water`/`draw_roof_*`/`draw_wall`/`draw_railing`/`draw_door`),
确定性、可复现,无外部素材。
- 水网/水田(生成器 `code=4`)与样例河道共用同一自绘 2 相位水面。
## 4. 自绘中式元素补绘(P39,原创,无第三方来源)
在不引入新付费素材的前提下扩展 cc0 图集自绘部分,让江南味道更足:追加 7 个 32px 自绘格到
`cc0-tiles.png` **尾部(索引 12-18)**,**旧格 0-11 索引与像素逐字节不变**(向后兼容)。与 P34
同一江南调色板(青灰瓦、白灰墙、暖木构件、碧水),全部**原创、无外部来源、无需第三方许可**。
逐格:
| 索引 | 内容 | 说明 |
| --- | --- | --- |
| 12 | 石桥中段 | 拱桥石桥面 + 木栏杆,下层留透明拱洞露出水波 |
| 13 | 石桥桥台 | 岸边石阶(上桥台阶)+ 端柱 |
| 14 | 乌篷船(左半) | 深色船体 + 竹篷篷顶;浮在水面画法(船帮以下留水面波纹) |
| 15 | 乌篷船(右半) | 与左半连续成 2 格整船 |
| 16 | 石灯笼 | 石座/石身 + 暖色发光窗芯(夜帧接光晕) |
| 17 | 路摊/菜摊 | 红白条纹棚 + 柜台 + 果蔬筐 |
| 18 | 芦苇 | 多株茎秆 + 叶 + 穗,贴水岸格 |
- 自绘代码位于 `scripts/make-cc0-art.py`(`draw_bridge_center`/`draw_bridge_end`/`draw_boat`/
`draw_stone_lantern`/`draw_stall`/`draw_reeds`),确定性、可复现,无外部素材;全部在最终 1x
分辨率下直接落像素(无重采样),故 2x NEAREST 放大后无混色。
- 生成器:`python3 scripts/make-cc0-art.py` -> `cc0-tiles.png` **608x32(19 格)**;
二次运行 byte-identical。
- 摆放规则(`src/LivingVillage.Desktop/VillageArt.fs`,均为 (map, seed) 纯函数,不写瓦片、不改可达性):
- 桥(12/13):每座桥列的最上一格铺中段、再上一格铺桥台——桥跨河,桥台贴岸。
- 船(14/15):开阔水面泊 2 格船,优先靠近某座桥(桥/船/苇常同框),距离平局按 hash 裁决。
- 石灯笼(16):沿主路中心线每隔 12 列一盏;并入 `nightLightTiles`,复用 P29/P32 夜晚光晕路径。
- 路摊(17):主路灯笼之间(错开 6 列)一格,仅美术,不接交互逻辑。
- 芦苇(18):陆地格且上下邻格为水(贴岸),每 4 列一格。
- **fallback(非 cc0)模式不摆放这些新元素**,仍走原程序绘制江南图集。
## 5. 自绘美术深化(P40,原创,无第三方来源)
P40 深化 P39 切片:石板路衔接、乌篷船特征、石灯笼/红灯笼形态区分。图集由 19 格扩到
**21 格(672x32)**,追加索引 19-20,并**重绘 14/15(乌篷船)与 16(石灯笼)**;其余索引
0-13、17-18 逐字节不变。全部**原创、无外部来源**。
| 索引 | 内容 | 说明 |
| --- | --- | --- |
| 19(新) | 石板路格 | 石板块 + 错缝接缝 + 明暗高光,拼成连贯石板带 |
| 20(新) | 红灯笼 | 红纸圆身 + 竖向竹骨 + 暖芯 + 金穗 + 木顶盖(三段:底座/灯室/顶盖) |
| 14/15(重绘) | 乌篷船左右半 | 放大到满格、船体加高,醒目**拱形竹篷**(篷顶高拱 + 竹骨 + 脊线),桥上/岸上一眼可辨 |
| 16(重绘) | 石灯笼 | 三段石结构强化:宽石座/石室(暖芯)/外挑石顶盖 + 宝顶,与红灯笼形态明确区分 |
- 自绘代码新增 `draw_paving` / `draw_red_lantern`,`draw_boat` / `draw_stone_lantern` 重绘;均在最终
1x 分辨率直接落像素(无重采样),2x NEAREST 放大无混色。
- 生成器:`python3 scripts/make-cc0-art.py` -> `cc0-tiles.png` **672x32(21 格)**;二次运行
byte-identical。旧索引复验:`git show HEAD:...` 比对新图前 448px(0-13)与 544-608px(17-18)
逐字节一致。
- 摆放规则(`src/LivingVillage.Desktop/VillageArt.fs`,纯函数,不写瓦片、不改可达性):
- **石板路(19)**:`cc0PavingTiles map` 返回「本身或四邻属于 `map.Paths`(主路/桥引道/门口)
或 `map.Bridges`(桥面)」的石板格;cc0 模式下只有这些格铺连贯石板带,稀疏
`DecorativeStones` 孤立散布石板改画草地,故场地上不再出现游离石板。fallback 保持原样。
- **红灯笼(20)**:`cc0RedLanternTiles map` 在每户民居门口(门格)挂一盏,与主路石灯笼形态区分;
并入 `nightLightTilesWith`,与石灯笼复用同一条 **P14 预乘 alpha 径向光晕**路径,不新增光照系统。
- **fallback(非 cc0)模式不摆放新元素**,仍走原程序绘制江南图集。
## 说明
- Kenney/Puny 原始 zip 均随仓库记录于 `third_party/`(`PROVENANCE.md` 为总来源记录),仓库
分发的只是上述再生成图集,不声称拥有未包含素材;自绘构件为原创。
- 版权/许可复核:见 `third_party/` 内原始文件与发布页;重跑 `make-cc0-art.py` 前后对
`third_party/*.zip` 重新 `sha256sum` 校验。
- 范围仍为切片:动画全套 / 全村 / 更多中式元素补绘留待后续。
|