M4: художественный конвейер

- scripts/build-art.mjs: все спрайты игры собираются из исходников,
  а не кладутся руками. Лица карт растеризуются из векторов,
  рубашка/стол/панели/кнопки нарисованы SVG-ом прямо в скрипте
- 36 лиц 220x320 + рубашка, автоатлас 2048x2048, обрезка выключена
  (раскладка рассчитывает на точный размер карты)
- девятипатчевые плитки 120x120 с рамкой 40
- фон стола 540x960, рисуется в 2x — градиенту детализация не нужна,
  а памяти под текстуру уходит вчетверо меньше
- исходные векторы перенесены из local/ в art-src/cards
- ATTRIBUTION.md: LGPL-3.0, атрибуция обязательна; там же написано,
  что менять, если такая лицензия не подходит для релиза

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ftc
2026-09-13 10:52:37 +03:00
co-authored by Claude Opus 5
parent 51117a698c
commit 2056673946
134 changed files with 17075 additions and 8 deletions
+134
View File
@@ -0,0 +1,134 @@
{
"ver": "1.0.27",
"importer": "image",
"imported": true,
"uuid": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd",
"files": [
".json",
".png"
],
"subMetas": {
"6c48a": {
"importer": "texture",
"uuid": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd@6c48a",
"displayName": "6_of_hearts",
"id": "6c48a",
"name": "texture",
"userData": {
"wrapModeS": "clamp-to-edge",
"wrapModeT": "clamp-to-edge",
"imageUuidOrDatabaseUri": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd",
"isUuid": true,
"visible": false,
"minfilter": "linear",
"magfilter": "linear",
"mipfilter": "none",
"anisotropy": 0
},
"ver": "1.0.22",
"imported": true,
"files": [
".json"
],
"subMetas": {}
},
"f9941": {
"importer": "sprite-frame",
"uuid": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd@f9941",
"displayName": "6_of_hearts",
"id": "f9941",
"name": "spriteFrame",
"userData": {
"trimThreshold": 1,
"rotated": false,
"offsetX": 0,
"offsetY": 0,
"trimX": 0,
"trimY": 0,
"width": 220,
"height": 320,
"rawWidth": 220,
"rawHeight": 320,
"borderTop": 0,
"borderBottom": 0,
"borderLeft": 0,
"borderRight": 0,
"packable": true,
"pixelsToUnit": 100,
"pivotX": 0.5,
"pivotY": 0.5,
"meshType": 0,
"vertices": {
"rawPosition": [
-110,
-160,
0,
110,
-160,
0,
-110,
160,
0,
110,
160,
0
],
"indexes": [
0,
1,
2,
2,
1,
3
],
"uv": [
0,
320,
220,
320,
0,
0,
220,
0
],
"nuv": [
0,
0,
1,
0,
0,
1,
1,
1
],
"minPos": [
-110,
-160,
0
],
"maxPos": [
110,
160,
0
]
},
"isUuid": true,
"imageUuidOrDatabaseUri": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd@6c48a",
"atlasUuid": "",
"trimType": "none"
},
"ver": "1.0.12",
"imported": true,
"files": [
".json"
],
"subMetas": {}
}
},
"userData": {
"type": "sprite-frame",
"fixAlphaTransparencyArtifacts": false,
"hasAlpha": true,
"redirect": "43862901-4e5b-4a7a-a0b3-945fd2d6b6dd@6c48a"
}
}