diff --git a/art-src/cards/10_of_clubs.svg b/art-src/cards/10_of_clubs.svg
new file mode 100644
index 0000000..2e7788c
--- /dev/null
+++ b/art-src/cards/10_of_clubs.svg
@@ -0,0 +1,281 @@
+
+
+
+
+
diff --git a/art-src/cards/10_of_diamonds.svg b/art-src/cards/10_of_diamonds.svg
new file mode 100644
index 0000000..3d0b1c0
--- /dev/null
+++ b/art-src/cards/10_of_diamonds.svg
@@ -0,0 +1,401 @@
+
+
+
+
+
diff --git a/art-src/cards/10_of_hearts.svg b/art-src/cards/10_of_hearts.svg
new file mode 100644
index 0000000..c57575e
--- /dev/null
+++ b/art-src/cards/10_of_hearts.svg
@@ -0,0 +1,407 @@
+
+
+
+
+
diff --git a/art-src/cards/10_of_spades.svg b/art-src/cards/10_of_spades.svg
new file mode 100644
index 0000000..a14767c
--- /dev/null
+++ b/art-src/cards/10_of_spades.svg
@@ -0,0 +1,230 @@
+
+
+
+
+
diff --git a/art-src/cards/6_of_clubs.svg b/art-src/cards/6_of_clubs.svg
new file mode 100644
index 0000000..306754e
--- /dev/null
+++ b/art-src/cards/6_of_clubs.svg
@@ -0,0 +1,244 @@
+
+
+
+
+
diff --git a/art-src/cards/6_of_diamonds.svg b/art-src/cards/6_of_diamonds.svg
new file mode 100644
index 0000000..6f12a53
--- /dev/null
+++ b/art-src/cards/6_of_diamonds.svg
@@ -0,0 +1,340 @@
+
+
+
+
+
diff --git a/art-src/cards/6_of_hearts.svg b/art-src/cards/6_of_hearts.svg
new file mode 100644
index 0000000..9c319ad
--- /dev/null
+++ b/art-src/cards/6_of_hearts.svg
@@ -0,0 +1,344 @@
+
+
+
+
+
diff --git a/art-src/cards/6_of_spades.svg b/art-src/cards/6_of_spades.svg
new file mode 100644
index 0000000..83e8feb
--- /dev/null
+++ b/art-src/cards/6_of_spades.svg
@@ -0,0 +1,177 @@
+
+
+
+
+
diff --git a/art-src/cards/7_of_clubs.svg b/art-src/cards/7_of_clubs.svg
new file mode 100644
index 0000000..11329b1
--- /dev/null
+++ b/art-src/cards/7_of_clubs.svg
@@ -0,0 +1,252 @@
+
+
+
+
+
diff --git a/art-src/cards/7_of_diamonds.svg b/art-src/cards/7_of_diamonds.svg
new file mode 100644
index 0000000..d8483a7
--- /dev/null
+++ b/art-src/cards/7_of_diamonds.svg
@@ -0,0 +1,349 @@
+
+
+
+
+
diff --git a/art-src/cards/7_of_hearts.svg b/art-src/cards/7_of_hearts.svg
new file mode 100644
index 0000000..8d5fd98
--- /dev/null
+++ b/art-src/cards/7_of_hearts.svg
@@ -0,0 +1,356 @@
+
+
+
+
+
diff --git a/art-src/cards/7_of_spades.svg b/art-src/cards/7_of_spades.svg
new file mode 100644
index 0000000..3146b44
--- /dev/null
+++ b/art-src/cards/7_of_spades.svg
@@ -0,0 +1,186 @@
+
+
+
+
+
diff --git a/art-src/cards/8_of_clubs.svg b/art-src/cards/8_of_clubs.svg
new file mode 100644
index 0000000..28ae6fb
--- /dev/null
+++ b/art-src/cards/8_of_clubs.svg
@@ -0,0 +1,260 @@
+
+
+
+
+
diff --git a/art-src/cards/8_of_diamonds.svg b/art-src/cards/8_of_diamonds.svg
new file mode 100644
index 0000000..d6d1b0e
--- /dev/null
+++ b/art-src/cards/8_of_diamonds.svg
@@ -0,0 +1,358 @@
+
+
+
+
+
diff --git a/art-src/cards/8_of_hearts.svg b/art-src/cards/8_of_hearts.svg
new file mode 100644
index 0000000..ac8d5ba
--- /dev/null
+++ b/art-src/cards/8_of_hearts.svg
@@ -0,0 +1,364 @@
+
+
+
+
+
diff --git a/art-src/cards/8_of_spades.svg b/art-src/cards/8_of_spades.svg
new file mode 100644
index 0000000..0e5bd89
--- /dev/null
+++ b/art-src/cards/8_of_spades.svg
@@ -0,0 +1,195 @@
+
+
+
+
+
diff --git a/art-src/cards/9_of_clubs.svg b/art-src/cards/9_of_clubs.svg
new file mode 100644
index 0000000..85cde35
--- /dev/null
+++ b/art-src/cards/9_of_clubs.svg
@@ -0,0 +1,254 @@
+
+
+
+
+
diff --git a/art-src/cards/9_of_diamonds.svg b/art-src/cards/9_of_diamonds.svg
new file mode 100644
index 0000000..05292f2
--- /dev/null
+++ b/art-src/cards/9_of_diamonds.svg
@@ -0,0 +1,367 @@
+
+
+
+
+
diff --git a/art-src/cards/9_of_hearts.svg b/art-src/cards/9_of_hearts.svg
new file mode 100644
index 0000000..0f6a211
--- /dev/null
+++ b/art-src/cards/9_of_hearts.svg
@@ -0,0 +1,378 @@
+
+
+
+
+
diff --git a/art-src/cards/9_of_spades.svg b/art-src/cards/9_of_spades.svg
new file mode 100644
index 0000000..2359db5
--- /dev/null
+++ b/art-src/cards/9_of_spades.svg
@@ -0,0 +1,198 @@
+
+
+
+
+
diff --git a/art-src/cards/ace_of_clubs.svg b/art-src/cards/ace_of_clubs.svg
new file mode 100644
index 0000000..be74fe0
--- /dev/null
+++ b/art-src/cards/ace_of_clubs.svg
@@ -0,0 +1,258 @@
+
+
+
+
+
diff --git a/art-src/cards/ace_of_diamonds.svg b/art-src/cards/ace_of_diamonds.svg
new file mode 100644
index 0000000..e5636a4
--- /dev/null
+++ b/art-src/cards/ace_of_diamonds.svg
@@ -0,0 +1,311 @@
+
+
+
+
+
diff --git a/art-src/cards/ace_of_hearts.svg b/art-src/cards/ace_of_hearts.svg
new file mode 100644
index 0000000..24702e2
--- /dev/null
+++ b/art-src/cards/ace_of_hearts.svg
@@ -0,0 +1,324 @@
+
+
+
+
+
diff --git a/art-src/cards/ace_of_spades.svg b/art-src/cards/ace_of_spades.svg
new file mode 100644
index 0000000..db32c06
--- /dev/null
+++ b/art-src/cards/ace_of_spades.svg
@@ -0,0 +1,131 @@
+
+
+
+
+
diff --git a/art-src/cards/jack_of_clubs.svg b/art-src/cards/jack_of_clubs.svg
new file mode 100644
index 0000000..a350305
--- /dev/null
+++ b/art-src/cards/jack_of_clubs.svg
@@ -0,0 +1,224 @@
+
+
+
+
+
diff --git a/art-src/cards/jack_of_diamonds.svg b/art-src/cards/jack_of_diamonds.svg
new file mode 100644
index 0000000..d531541
--- /dev/null
+++ b/art-src/cards/jack_of_diamonds.svg
@@ -0,0 +1,338 @@
+
+
+
+
+
diff --git a/art-src/cards/jack_of_hearts.svg b/art-src/cards/jack_of_hearts.svg
new file mode 100644
index 0000000..dc95ce1
--- /dev/null
+++ b/art-src/cards/jack_of_hearts.svg
@@ -0,0 +1,330 @@
+
+
+
+
+
diff --git a/art-src/cards/jack_of_spades.svg b/art-src/cards/jack_of_spades.svg
new file mode 100644
index 0000000..281113f
--- /dev/null
+++ b/art-src/cards/jack_of_spades.svg
@@ -0,0 +1,336 @@
+
+
+
+
+
diff --git a/art-src/cards/king_of_clubs.svg b/art-src/cards/king_of_clubs.svg
new file mode 100644
index 0000000..fe6e676
--- /dev/null
+++ b/art-src/cards/king_of_clubs.svg
@@ -0,0 +1,254 @@
+
+
+
+
+
diff --git a/art-src/cards/king_of_diamonds.svg b/art-src/cards/king_of_diamonds.svg
new file mode 100644
index 0000000..f983c6a
--- /dev/null
+++ b/art-src/cards/king_of_diamonds.svg
@@ -0,0 +1,351 @@
+
+
+
+
+
diff --git a/art-src/cards/king_of_hearts.svg b/art-src/cards/king_of_hearts.svg
new file mode 100644
index 0000000..7250745
--- /dev/null
+++ b/art-src/cards/king_of_hearts.svg
@@ -0,0 +1,337 @@
+
+
+
+
+
diff --git a/art-src/cards/king_of_spades.svg b/art-src/cards/king_of_spades.svg
new file mode 100644
index 0000000..ac4338d
--- /dev/null
+++ b/art-src/cards/king_of_spades.svg
@@ -0,0 +1,329 @@
+
+
+
+
+
diff --git a/art-src/cards/queen_of_clubs.svg b/art-src/cards/queen_of_clubs.svg
new file mode 100644
index 0000000..6a636f7
--- /dev/null
+++ b/art-src/cards/queen_of_clubs.svg
@@ -0,0 +1,250 @@
+
+
+
+
+
diff --git a/art-src/cards/queen_of_diamonds.svg b/art-src/cards/queen_of_diamonds.svg
new file mode 100644
index 0000000..76b62db
--- /dev/null
+++ b/art-src/cards/queen_of_diamonds.svg
@@ -0,0 +1,339 @@
+
+
+
+
+
diff --git a/art-src/cards/queen_of_hearts.svg b/art-src/cards/queen_of_hearts.svg
new file mode 100644
index 0000000..90ede78
--- /dev/null
+++ b/art-src/cards/queen_of_hearts.svg
@@ -0,0 +1,331 @@
+
+
+
+
+
diff --git a/art-src/cards/queen_of_spades.svg b/art-src/cards/queen_of_spades.svg
new file mode 100644
index 0000000..8dc5540
--- /dev/null
+++ b/art-src/cards/queen_of_spades.svg
@@ -0,0 +1,324 @@
+
+
+
+
+
diff --git a/assets/art/cards/10_of_clubs.png b/assets/art/cards/10_of_clubs.png
new file mode 100644
index 0000000..ea0ae2a
Binary files /dev/null and b/assets/art/cards/10_of_clubs.png differ
diff --git a/assets/art/cards/10_of_clubs.png.meta b/assets/art/cards/10_of_clubs.png.meta
new file mode 100644
index 0000000..69f9786
--- /dev/null
+++ b/assets/art/cards/10_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d@6c48a",
+ "displayName": "10_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d",
+ "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": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d@f9941",
+ "displayName": "10_of_clubs",
+ "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": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "28193cb3-67e1-4af5-a5f4-e954e4c6cb6d@6c48a"
+ }
+}
diff --git a/assets/art/cards/10_of_diamonds.png b/assets/art/cards/10_of_diamonds.png
new file mode 100644
index 0000000..23e37e9
Binary files /dev/null and b/assets/art/cards/10_of_diamonds.png differ
diff --git a/assets/art/cards/10_of_diamonds.png.meta b/assets/art/cards/10_of_diamonds.png.meta
new file mode 100644
index 0000000..10cd503
--- /dev/null
+++ b/assets/art/cards/10_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "fc43693c-ba7d-4662-b53b-38a5714b3c90",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "fc43693c-ba7d-4662-b53b-38a5714b3c90@6c48a",
+ "displayName": "10_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "fc43693c-ba7d-4662-b53b-38a5714b3c90",
+ "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": "fc43693c-ba7d-4662-b53b-38a5714b3c90@f9941",
+ "displayName": "10_of_diamonds",
+ "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": "fc43693c-ba7d-4662-b53b-38a5714b3c90@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "fc43693c-ba7d-4662-b53b-38a5714b3c90@6c48a"
+ }
+}
diff --git a/assets/art/cards/10_of_hearts.png b/assets/art/cards/10_of_hearts.png
new file mode 100644
index 0000000..d967f16
Binary files /dev/null and b/assets/art/cards/10_of_hearts.png differ
diff --git a/assets/art/cards/10_of_hearts.png.meta b/assets/art/cards/10_of_hearts.png.meta
new file mode 100644
index 0000000..a8f47ef
--- /dev/null
+++ b/assets/art/cards/10_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "42ec6e2c-3984-4ae8-9b86-245cc6e30987",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "42ec6e2c-3984-4ae8-9b86-245cc6e30987@6c48a",
+ "displayName": "10_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "42ec6e2c-3984-4ae8-9b86-245cc6e30987",
+ "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": "42ec6e2c-3984-4ae8-9b86-245cc6e30987@f9941",
+ "displayName": "10_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": "42ec6e2c-3984-4ae8-9b86-245cc6e30987@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "42ec6e2c-3984-4ae8-9b86-245cc6e30987@6c48a"
+ }
+}
diff --git a/assets/art/cards/10_of_spades.png b/assets/art/cards/10_of_spades.png
new file mode 100644
index 0000000..4460543
Binary files /dev/null and b/assets/art/cards/10_of_spades.png differ
diff --git a/assets/art/cards/10_of_spades.png.meta b/assets/art/cards/10_of_spades.png.meta
new file mode 100644
index 0000000..e2dad3b
--- /dev/null
+++ b/assets/art/cards/10_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "95a72b57-743f-47be-8594-f6020bd0da33",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "95a72b57-743f-47be-8594-f6020bd0da33@6c48a",
+ "displayName": "10_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "95a72b57-743f-47be-8594-f6020bd0da33",
+ "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": "95a72b57-743f-47be-8594-f6020bd0da33@f9941",
+ "displayName": "10_of_spades",
+ "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": "95a72b57-743f-47be-8594-f6020bd0da33@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "95a72b57-743f-47be-8594-f6020bd0da33@6c48a"
+ }
+}
diff --git a/assets/art/cards/6_of_clubs.png b/assets/art/cards/6_of_clubs.png
new file mode 100644
index 0000000..fa11a59
Binary files /dev/null and b/assets/art/cards/6_of_clubs.png differ
diff --git a/assets/art/cards/6_of_clubs.png.meta b/assets/art/cards/6_of_clubs.png.meta
new file mode 100644
index 0000000..edef479
--- /dev/null
+++ b/assets/art/cards/6_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211@6c48a",
+ "displayName": "6_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211",
+ "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": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211@f9941",
+ "displayName": "6_of_clubs",
+ "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": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "fdb5a26a-7c59-4f8b-abf9-97c4ef613211@6c48a"
+ }
+}
diff --git a/assets/art/cards/6_of_diamonds.png b/assets/art/cards/6_of_diamonds.png
new file mode 100644
index 0000000..93f96ad
Binary files /dev/null and b/assets/art/cards/6_of_diamonds.png differ
diff --git a/assets/art/cards/6_of_diamonds.png.meta b/assets/art/cards/6_of_diamonds.png.meta
new file mode 100644
index 0000000..f150ae7
--- /dev/null
+++ b/assets/art/cards/6_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "2912f7cc-6d34-48b8-9e57-9a5783a27238",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "2912f7cc-6d34-48b8-9e57-9a5783a27238@6c48a",
+ "displayName": "6_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "2912f7cc-6d34-48b8-9e57-9a5783a27238",
+ "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": "2912f7cc-6d34-48b8-9e57-9a5783a27238@f9941",
+ "displayName": "6_of_diamonds",
+ "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": "2912f7cc-6d34-48b8-9e57-9a5783a27238@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "2912f7cc-6d34-48b8-9e57-9a5783a27238@6c48a"
+ }
+}
diff --git a/assets/art/cards/6_of_hearts.png b/assets/art/cards/6_of_hearts.png
new file mode 100644
index 0000000..68e6475
Binary files /dev/null and b/assets/art/cards/6_of_hearts.png differ
diff --git a/assets/art/cards/6_of_hearts.png.meta b/assets/art/cards/6_of_hearts.png.meta
new file mode 100644
index 0000000..24ec665
--- /dev/null
+++ b/assets/art/cards/6_of_hearts.png.meta
@@ -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"
+ }
+}
diff --git a/assets/art/cards/6_of_spades.png b/assets/art/cards/6_of_spades.png
new file mode 100644
index 0000000..d29f659
Binary files /dev/null and b/assets/art/cards/6_of_spades.png differ
diff --git a/assets/art/cards/6_of_spades.png.meta b/assets/art/cards/6_of_spades.png.meta
new file mode 100644
index 0000000..4dce3b3
--- /dev/null
+++ b/assets/art/cards/6_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "86389e06-fb0d-412b-8f29-56f4741cac87",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "86389e06-fb0d-412b-8f29-56f4741cac87@6c48a",
+ "displayName": "6_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "86389e06-fb0d-412b-8f29-56f4741cac87",
+ "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": "86389e06-fb0d-412b-8f29-56f4741cac87@f9941",
+ "displayName": "6_of_spades",
+ "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": "86389e06-fb0d-412b-8f29-56f4741cac87@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "86389e06-fb0d-412b-8f29-56f4741cac87@6c48a"
+ }
+}
diff --git a/assets/art/cards/7_of_clubs.png b/assets/art/cards/7_of_clubs.png
new file mode 100644
index 0000000..1ddd823
Binary files /dev/null and b/assets/art/cards/7_of_clubs.png differ
diff --git a/assets/art/cards/7_of_clubs.png.meta b/assets/art/cards/7_of_clubs.png.meta
new file mode 100644
index 0000000..e7158d0
--- /dev/null
+++ b/assets/art/cards/7_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "763bd99a-50c0-4e01-8f3c-6718c633593d",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "763bd99a-50c0-4e01-8f3c-6718c633593d@6c48a",
+ "displayName": "7_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "763bd99a-50c0-4e01-8f3c-6718c633593d",
+ "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": "763bd99a-50c0-4e01-8f3c-6718c633593d@f9941",
+ "displayName": "7_of_clubs",
+ "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": "763bd99a-50c0-4e01-8f3c-6718c633593d@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "763bd99a-50c0-4e01-8f3c-6718c633593d@6c48a"
+ }
+}
diff --git a/assets/art/cards/7_of_diamonds.png b/assets/art/cards/7_of_diamonds.png
new file mode 100644
index 0000000..eb6ca8d
Binary files /dev/null and b/assets/art/cards/7_of_diamonds.png differ
diff --git a/assets/art/cards/7_of_diamonds.png.meta b/assets/art/cards/7_of_diamonds.png.meta
new file mode 100644
index 0000000..b538fdd
--- /dev/null
+++ b/assets/art/cards/7_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "d2420d8f-97c9-4014-9a16-840f5d42392e",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "d2420d8f-97c9-4014-9a16-840f5d42392e@6c48a",
+ "displayName": "7_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "d2420d8f-97c9-4014-9a16-840f5d42392e",
+ "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": "d2420d8f-97c9-4014-9a16-840f5d42392e@f9941",
+ "displayName": "7_of_diamonds",
+ "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": "d2420d8f-97c9-4014-9a16-840f5d42392e@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "d2420d8f-97c9-4014-9a16-840f5d42392e@6c48a"
+ }
+}
diff --git a/assets/art/cards/7_of_hearts.png b/assets/art/cards/7_of_hearts.png
new file mode 100644
index 0000000..1f437de
Binary files /dev/null and b/assets/art/cards/7_of_hearts.png differ
diff --git a/assets/art/cards/7_of_hearts.png.meta b/assets/art/cards/7_of_hearts.png.meta
new file mode 100644
index 0000000..73b189c
--- /dev/null
+++ b/assets/art/cards/7_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "9fee197f-b839-4a8c-96ae-ca401032cbcb",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "9fee197f-b839-4a8c-96ae-ca401032cbcb@6c48a",
+ "displayName": "7_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "9fee197f-b839-4a8c-96ae-ca401032cbcb",
+ "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": "9fee197f-b839-4a8c-96ae-ca401032cbcb@f9941",
+ "displayName": "7_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": "9fee197f-b839-4a8c-96ae-ca401032cbcb@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "9fee197f-b839-4a8c-96ae-ca401032cbcb@6c48a"
+ }
+}
diff --git a/assets/art/cards/7_of_spades.png b/assets/art/cards/7_of_spades.png
new file mode 100644
index 0000000..a2da07a
Binary files /dev/null and b/assets/art/cards/7_of_spades.png differ
diff --git a/assets/art/cards/7_of_spades.png.meta b/assets/art/cards/7_of_spades.png.meta
new file mode 100644
index 0000000..7f6d65e
--- /dev/null
+++ b/assets/art/cards/7_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "0a8dea81-2696-4035-abb6-423c2ae8d0b8",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "0a8dea81-2696-4035-abb6-423c2ae8d0b8@6c48a",
+ "displayName": "7_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "0a8dea81-2696-4035-abb6-423c2ae8d0b8",
+ "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": "0a8dea81-2696-4035-abb6-423c2ae8d0b8@f9941",
+ "displayName": "7_of_spades",
+ "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": "0a8dea81-2696-4035-abb6-423c2ae8d0b8@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "0a8dea81-2696-4035-abb6-423c2ae8d0b8@6c48a"
+ }
+}
diff --git a/assets/art/cards/8_of_clubs.png b/assets/art/cards/8_of_clubs.png
new file mode 100644
index 0000000..1d10f4b
Binary files /dev/null and b/assets/art/cards/8_of_clubs.png differ
diff --git a/assets/art/cards/8_of_clubs.png.meta b/assets/art/cards/8_of_clubs.png.meta
new file mode 100644
index 0000000..5379d70
--- /dev/null
+++ b/assets/art/cards/8_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "68bea15f-a1a9-4fea-acf6-6f92e3577be9",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "68bea15f-a1a9-4fea-acf6-6f92e3577be9@6c48a",
+ "displayName": "8_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "68bea15f-a1a9-4fea-acf6-6f92e3577be9",
+ "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": "68bea15f-a1a9-4fea-acf6-6f92e3577be9@f9941",
+ "displayName": "8_of_clubs",
+ "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": "68bea15f-a1a9-4fea-acf6-6f92e3577be9@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "68bea15f-a1a9-4fea-acf6-6f92e3577be9@6c48a"
+ }
+}
diff --git a/assets/art/cards/8_of_diamonds.png b/assets/art/cards/8_of_diamonds.png
new file mode 100644
index 0000000..5331baa
Binary files /dev/null and b/assets/art/cards/8_of_diamonds.png differ
diff --git a/assets/art/cards/8_of_diamonds.png.meta b/assets/art/cards/8_of_diamonds.png.meta
new file mode 100644
index 0000000..b33033a
--- /dev/null
+++ b/assets/art/cards/8_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "5988f800-2984-4452-ba9f-b07961c7906c",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "5988f800-2984-4452-ba9f-b07961c7906c@6c48a",
+ "displayName": "8_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "5988f800-2984-4452-ba9f-b07961c7906c",
+ "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": "5988f800-2984-4452-ba9f-b07961c7906c@f9941",
+ "displayName": "8_of_diamonds",
+ "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": "5988f800-2984-4452-ba9f-b07961c7906c@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "5988f800-2984-4452-ba9f-b07961c7906c@6c48a"
+ }
+}
diff --git a/assets/art/cards/8_of_hearts.png b/assets/art/cards/8_of_hearts.png
new file mode 100644
index 0000000..94c1d11
Binary files /dev/null and b/assets/art/cards/8_of_hearts.png differ
diff --git a/assets/art/cards/8_of_hearts.png.meta b/assets/art/cards/8_of_hearts.png.meta
new file mode 100644
index 0000000..a2f6ae9
--- /dev/null
+++ b/assets/art/cards/8_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "52719926-fb59-483c-9d8c-a815914d430a",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "52719926-fb59-483c-9d8c-a815914d430a@6c48a",
+ "displayName": "8_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "52719926-fb59-483c-9d8c-a815914d430a",
+ "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": "52719926-fb59-483c-9d8c-a815914d430a@f9941",
+ "displayName": "8_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": "52719926-fb59-483c-9d8c-a815914d430a@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "52719926-fb59-483c-9d8c-a815914d430a@6c48a"
+ }
+}
diff --git a/assets/art/cards/8_of_spades.png b/assets/art/cards/8_of_spades.png
new file mode 100644
index 0000000..d958c4f
Binary files /dev/null and b/assets/art/cards/8_of_spades.png differ
diff --git a/assets/art/cards/8_of_spades.png.meta b/assets/art/cards/8_of_spades.png.meta
new file mode 100644
index 0000000..ae9b754
--- /dev/null
+++ b/assets/art/cards/8_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "b4c1eb38-c13f-4e0c-89c1-59092a57542c",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "b4c1eb38-c13f-4e0c-89c1-59092a57542c@6c48a",
+ "displayName": "8_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "b4c1eb38-c13f-4e0c-89c1-59092a57542c",
+ "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": "b4c1eb38-c13f-4e0c-89c1-59092a57542c@f9941",
+ "displayName": "8_of_spades",
+ "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": "b4c1eb38-c13f-4e0c-89c1-59092a57542c@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "b4c1eb38-c13f-4e0c-89c1-59092a57542c@6c48a"
+ }
+}
diff --git a/assets/art/cards/9_of_clubs.png b/assets/art/cards/9_of_clubs.png
new file mode 100644
index 0000000..8c0c1ff
Binary files /dev/null and b/assets/art/cards/9_of_clubs.png differ
diff --git a/assets/art/cards/9_of_clubs.png.meta b/assets/art/cards/9_of_clubs.png.meta
new file mode 100644
index 0000000..9dc14e6
--- /dev/null
+++ b/assets/art/cards/9_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "f1687334-2dd6-4f40-9aca-a880333cae51",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "f1687334-2dd6-4f40-9aca-a880333cae51@6c48a",
+ "displayName": "9_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "f1687334-2dd6-4f40-9aca-a880333cae51",
+ "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": "f1687334-2dd6-4f40-9aca-a880333cae51@f9941",
+ "displayName": "9_of_clubs",
+ "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": "f1687334-2dd6-4f40-9aca-a880333cae51@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "f1687334-2dd6-4f40-9aca-a880333cae51@6c48a"
+ }
+}
diff --git a/assets/art/cards/9_of_diamonds.png b/assets/art/cards/9_of_diamonds.png
new file mode 100644
index 0000000..3d61525
Binary files /dev/null and b/assets/art/cards/9_of_diamonds.png differ
diff --git a/assets/art/cards/9_of_diamonds.png.meta b/assets/art/cards/9_of_diamonds.png.meta
new file mode 100644
index 0000000..3994921
--- /dev/null
+++ b/assets/art/cards/9_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52@6c48a",
+ "displayName": "9_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52",
+ "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": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52@f9941",
+ "displayName": "9_of_diamonds",
+ "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": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "b79a5c7a-e942-4e4c-a2bf-65aa751a3c52@6c48a"
+ }
+}
diff --git a/assets/art/cards/9_of_hearts.png b/assets/art/cards/9_of_hearts.png
new file mode 100644
index 0000000..dcd11b1
Binary files /dev/null and b/assets/art/cards/9_of_hearts.png differ
diff --git a/assets/art/cards/9_of_hearts.png.meta b/assets/art/cards/9_of_hearts.png.meta
new file mode 100644
index 0000000..5291989
--- /dev/null
+++ b/assets/art/cards/9_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "efa31ea2-3d24-44ee-8558-b66050469991",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "efa31ea2-3d24-44ee-8558-b66050469991@6c48a",
+ "displayName": "9_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "efa31ea2-3d24-44ee-8558-b66050469991",
+ "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": "efa31ea2-3d24-44ee-8558-b66050469991@f9941",
+ "displayName": "9_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": "efa31ea2-3d24-44ee-8558-b66050469991@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "efa31ea2-3d24-44ee-8558-b66050469991@6c48a"
+ }
+}
diff --git a/assets/art/cards/9_of_spades.png b/assets/art/cards/9_of_spades.png
new file mode 100644
index 0000000..7ab643a
Binary files /dev/null and b/assets/art/cards/9_of_spades.png differ
diff --git a/assets/art/cards/9_of_spades.png.meta b/assets/art/cards/9_of_spades.png.meta
new file mode 100644
index 0000000..4eadfe6
--- /dev/null
+++ b/assets/art/cards/9_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "306b25d4-be5b-4906-b1bc-c100d9f61e02",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "306b25d4-be5b-4906-b1bc-c100d9f61e02@6c48a",
+ "displayName": "9_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "306b25d4-be5b-4906-b1bc-c100d9f61e02",
+ "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": "306b25d4-be5b-4906-b1bc-c100d9f61e02@f9941",
+ "displayName": "9_of_spades",
+ "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": "306b25d4-be5b-4906-b1bc-c100d9f61e02@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "306b25d4-be5b-4906-b1bc-c100d9f61e02@6c48a"
+ }
+}
diff --git a/assets/art/cards/ATTRIBUTION.md b/assets/art/cards/ATTRIBUTION.md
new file mode 100644
index 0000000..bec17d5
--- /dev/null
+++ b/assets/art/cards/ATTRIBUTION.md
@@ -0,0 +1,29 @@
+# Card face attribution
+
+The 36 card faces in this folder are rendered from **Vector Playing Cards** by
+**Chris Aguilar** (`totalnonsense.com/open-source-vector-playing-cards/`,
+originally `code.google.com/p/vector-playing-cards/`).
+
+- **Licence:** LGPL-3.0
+- **Attribution is a requirement of the licence** and must appear in the shipped
+ game — a credits screen, an about box, or the store listing description.
+- The unmodified vector sources are kept in [`art-src/cards`](../../../art-src/cards)
+ so the LGPL obligation to make the source form available is met, and so the
+ sprites can be regenerated: `npm run build:art`.
+
+The court cards (J, Q, K) come from the set's alternate variants, which carry the
+proper court illustrations; the plain variants are only a large suit pip.
+
+Everything else in `assets/art` — the card back, the table surface, the panels
+and the buttons — was authored for this project in
+[`scripts/build-art.mjs`](../../../scripts/build-art.mjs) and carries no third
+party licence.
+
+## Note for whoever ships this
+
+LGPL-3.0 is a copyleft licence. It is usable in a closed-source game as long as
+the licensed part stays separable and replaceable and its source is available —
+which is why the SVGs are in the repository rather than deleted after the build.
+If that is not acceptable for this product, the 36 faces are the only thing that
+has to be replaced; nothing in the code depends on their appearance, only on the
+file names, which follow `_of_.png` (see `Card.assetName`).
diff --git a/assets/art/cards/ATTRIBUTION.md.meta b/assets/art/cards/ATTRIBUTION.md.meta
new file mode 100644
index 0000000..c685ab0
--- /dev/null
+++ b/assets/art/cards/ATTRIBUTION.md.meta
@@ -0,0 +1,11 @@
+{
+ "ver": "1.0.1",
+ "importer": "text",
+ "imported": true,
+ "uuid": "f4cee03d-5eb5-4791-b3c3-f82ec86da849",
+ "files": [
+ ".json"
+ ],
+ "subMetas": {},
+ "userData": {}
+}
diff --git a/assets/art/cards/ace_of_clubs.png b/assets/art/cards/ace_of_clubs.png
new file mode 100644
index 0000000..072f189
Binary files /dev/null and b/assets/art/cards/ace_of_clubs.png differ
diff --git a/assets/art/cards/ace_of_clubs.png.meta b/assets/art/cards/ace_of_clubs.png.meta
new file mode 100644
index 0000000..75dfb37
--- /dev/null
+++ b/assets/art/cards/ace_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "ccfbbd71-a87c-4648-847f-9ac47f92e122",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "ccfbbd71-a87c-4648-847f-9ac47f92e122@6c48a",
+ "displayName": "ace_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "ccfbbd71-a87c-4648-847f-9ac47f92e122",
+ "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": "ccfbbd71-a87c-4648-847f-9ac47f92e122@f9941",
+ "displayName": "ace_of_clubs",
+ "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": "ccfbbd71-a87c-4648-847f-9ac47f92e122@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "ccfbbd71-a87c-4648-847f-9ac47f92e122@6c48a"
+ }
+}
diff --git a/assets/art/cards/ace_of_diamonds.png b/assets/art/cards/ace_of_diamonds.png
new file mode 100644
index 0000000..f4af394
Binary files /dev/null and b/assets/art/cards/ace_of_diamonds.png differ
diff --git a/assets/art/cards/ace_of_diamonds.png.meta b/assets/art/cards/ace_of_diamonds.png.meta
new file mode 100644
index 0000000..2f5ab34
--- /dev/null
+++ b/assets/art/cards/ace_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "91eca522-c05a-43a1-8a32-ba20936d8ce9",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "91eca522-c05a-43a1-8a32-ba20936d8ce9@6c48a",
+ "displayName": "ace_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "91eca522-c05a-43a1-8a32-ba20936d8ce9",
+ "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": "91eca522-c05a-43a1-8a32-ba20936d8ce9@f9941",
+ "displayName": "ace_of_diamonds",
+ "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": "91eca522-c05a-43a1-8a32-ba20936d8ce9@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "91eca522-c05a-43a1-8a32-ba20936d8ce9@6c48a"
+ }
+}
diff --git a/assets/art/cards/ace_of_hearts.png b/assets/art/cards/ace_of_hearts.png
new file mode 100644
index 0000000..9576b02
Binary files /dev/null and b/assets/art/cards/ace_of_hearts.png differ
diff --git a/assets/art/cards/ace_of_hearts.png.meta b/assets/art/cards/ace_of_hearts.png.meta
new file mode 100644
index 0000000..996996a
--- /dev/null
+++ b/assets/art/cards/ace_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2@6c48a",
+ "displayName": "ace_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2",
+ "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": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2@f9941",
+ "displayName": "ace_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": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "488aaf63-37db-4dc6-ab7c-4b1490a66cd2@6c48a"
+ }
+}
diff --git a/assets/art/cards/ace_of_spades.png b/assets/art/cards/ace_of_spades.png
new file mode 100644
index 0000000..a840271
Binary files /dev/null and b/assets/art/cards/ace_of_spades.png differ
diff --git a/assets/art/cards/ace_of_spades.png.meta b/assets/art/cards/ace_of_spades.png.meta
new file mode 100644
index 0000000..36cec18
--- /dev/null
+++ b/assets/art/cards/ace_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "6c752410-2fa7-41b8-a3de-5286dffb0685",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "6c752410-2fa7-41b8-a3de-5286dffb0685@6c48a",
+ "displayName": "ace_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "6c752410-2fa7-41b8-a3de-5286dffb0685",
+ "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": "6c752410-2fa7-41b8-a3de-5286dffb0685@f9941",
+ "displayName": "ace_of_spades",
+ "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": "6c752410-2fa7-41b8-a3de-5286dffb0685@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "6c752410-2fa7-41b8-a3de-5286dffb0685@6c48a"
+ }
+}
diff --git a/assets/art/cards/card_back.png b/assets/art/cards/card_back.png
new file mode 100644
index 0000000..3ef72f4
Binary files /dev/null and b/assets/art/cards/card_back.png differ
diff --git a/assets/art/cards/card_back.png.meta b/assets/art/cards/card_back.png.meta
new file mode 100644
index 0000000..118a18b
--- /dev/null
+++ b/assets/art/cards/card_back.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "906dc548-5441-4994-8bde-8d754a970331",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "906dc548-5441-4994-8bde-8d754a970331@6c48a",
+ "displayName": "card_back",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "906dc548-5441-4994-8bde-8d754a970331",
+ "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": "906dc548-5441-4994-8bde-8d754a970331@f9941",
+ "displayName": "card_back",
+ "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": "906dc548-5441-4994-8bde-8d754a970331@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "906dc548-5441-4994-8bde-8d754a970331@6c48a"
+ }
+}
diff --git a/assets/art/cards/cards.pac b/assets/art/cards/cards.pac
new file mode 100644
index 0000000..39b3c02
--- /dev/null
+++ b/assets/art/cards/cards.pac
@@ -0,0 +1,3 @@
+{
+ "__type__": "cc.SpriteAtlas"
+}
diff --git a/assets/art/cards/cards.pac.meta b/assets/art/cards/cards.pac.meta
new file mode 100644
index 0000000..fbf62b7
--- /dev/null
+++ b/assets/art/cards/cards.pac.meta
@@ -0,0 +1,35 @@
+{
+ "ver": "1.0.8",
+ "importer": "auto-atlas",
+ "imported": true,
+ "uuid": "914afa5f-3f77-4d7d-835e-530e298c6816",
+ "files": [],
+ "subMetas": {},
+ "userData": {
+ "maxWidth": 2048,
+ "maxHeight": 2048,
+ "padding": 2,
+ "allowRotation": false,
+ "forceSquared": false,
+ "powerOfTwo": true,
+ "algorithm": "MaxRects",
+ "format": "png",
+ "quality": 80,
+ "contourBleed": true,
+ "paddingBleed": true,
+ "filterUnused": true,
+ "removeTextureInBundle": true,
+ "removeImageInBundle": true,
+ "removeSpriteAtlasInBundle": true,
+ "compressSettings": {},
+ "textureSetting": {
+ "wrapModeS": "repeat",
+ "wrapModeT": "repeat",
+ "minfilter": "linear",
+ "magfilter": "linear",
+ "mipfilter": "none",
+ "anisotropy": 0
+ },
+ "filterMode": "Bilinear"
+ }
+}
diff --git a/assets/art/cards/jack_of_clubs.png b/assets/art/cards/jack_of_clubs.png
new file mode 100644
index 0000000..fff20d5
Binary files /dev/null and b/assets/art/cards/jack_of_clubs.png differ
diff --git a/assets/art/cards/jack_of_clubs.png.meta b/assets/art/cards/jack_of_clubs.png.meta
new file mode 100644
index 0000000..2601927
--- /dev/null
+++ b/assets/art/cards/jack_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20@6c48a",
+ "displayName": "jack_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20",
+ "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": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20@f9941",
+ "displayName": "jack_of_clubs",
+ "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": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "35c2d7aa-3ae3-40ce-96dc-4107f336aa20@6c48a"
+ }
+}
diff --git a/assets/art/cards/jack_of_diamonds.png b/assets/art/cards/jack_of_diamonds.png
new file mode 100644
index 0000000..2b6d4a2
Binary files /dev/null and b/assets/art/cards/jack_of_diamonds.png differ
diff --git a/assets/art/cards/jack_of_diamonds.png.meta b/assets/art/cards/jack_of_diamonds.png.meta
new file mode 100644
index 0000000..12ac5a3
--- /dev/null
+++ b/assets/art/cards/jack_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "118ae397-72ff-4459-a391-aef88ff6b4f8",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "118ae397-72ff-4459-a391-aef88ff6b4f8@6c48a",
+ "displayName": "jack_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "118ae397-72ff-4459-a391-aef88ff6b4f8",
+ "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": "118ae397-72ff-4459-a391-aef88ff6b4f8@f9941",
+ "displayName": "jack_of_diamonds",
+ "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": "118ae397-72ff-4459-a391-aef88ff6b4f8@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "118ae397-72ff-4459-a391-aef88ff6b4f8@6c48a"
+ }
+}
diff --git a/assets/art/cards/jack_of_hearts.png b/assets/art/cards/jack_of_hearts.png
new file mode 100644
index 0000000..c20ed19
Binary files /dev/null and b/assets/art/cards/jack_of_hearts.png differ
diff --git a/assets/art/cards/jack_of_hearts.png.meta b/assets/art/cards/jack_of_hearts.png.meta
new file mode 100644
index 0000000..4a6bc53
--- /dev/null
+++ b/assets/art/cards/jack_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a@6c48a",
+ "displayName": "jack_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a",
+ "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": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a@f9941",
+ "displayName": "jack_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": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "7ed109ab-9bc8-48ec-bd7d-511132e2e25a@6c48a"
+ }
+}
diff --git a/assets/art/cards/jack_of_spades.png b/assets/art/cards/jack_of_spades.png
new file mode 100644
index 0000000..c9cc62a
Binary files /dev/null and b/assets/art/cards/jack_of_spades.png differ
diff --git a/assets/art/cards/jack_of_spades.png.meta b/assets/art/cards/jack_of_spades.png.meta
new file mode 100644
index 0000000..1052119
--- /dev/null
+++ b/assets/art/cards/jack_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25@6c48a",
+ "displayName": "jack_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25",
+ "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": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25@f9941",
+ "displayName": "jack_of_spades",
+ "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": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "80bb979b-f2a9-4ec3-8f20-5f38b4d6ad25@6c48a"
+ }
+}
diff --git a/assets/art/cards/king_of_clubs.png b/assets/art/cards/king_of_clubs.png
new file mode 100644
index 0000000..82d443f
Binary files /dev/null and b/assets/art/cards/king_of_clubs.png differ
diff --git a/assets/art/cards/king_of_clubs.png.meta b/assets/art/cards/king_of_clubs.png.meta
new file mode 100644
index 0000000..825bca5
--- /dev/null
+++ b/assets/art/cards/king_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "ee70e9f9-62f4-446d-91b2-5ed085c7a281",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "ee70e9f9-62f4-446d-91b2-5ed085c7a281@6c48a",
+ "displayName": "king_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "ee70e9f9-62f4-446d-91b2-5ed085c7a281",
+ "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": "ee70e9f9-62f4-446d-91b2-5ed085c7a281@f9941",
+ "displayName": "king_of_clubs",
+ "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": "ee70e9f9-62f4-446d-91b2-5ed085c7a281@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "ee70e9f9-62f4-446d-91b2-5ed085c7a281@6c48a"
+ }
+}
diff --git a/assets/art/cards/king_of_diamonds.png b/assets/art/cards/king_of_diamonds.png
new file mode 100644
index 0000000..ef0e42d
Binary files /dev/null and b/assets/art/cards/king_of_diamonds.png differ
diff --git a/assets/art/cards/king_of_diamonds.png.meta b/assets/art/cards/king_of_diamonds.png.meta
new file mode 100644
index 0000000..d19d1e0
--- /dev/null
+++ b/assets/art/cards/king_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "bc9b27fb-1701-4259-9a77-032ab8e02db4",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "bc9b27fb-1701-4259-9a77-032ab8e02db4@6c48a",
+ "displayName": "king_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "bc9b27fb-1701-4259-9a77-032ab8e02db4",
+ "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": "bc9b27fb-1701-4259-9a77-032ab8e02db4@f9941",
+ "displayName": "king_of_diamonds",
+ "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": "bc9b27fb-1701-4259-9a77-032ab8e02db4@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "bc9b27fb-1701-4259-9a77-032ab8e02db4@6c48a"
+ }
+}
diff --git a/assets/art/cards/king_of_hearts.png b/assets/art/cards/king_of_hearts.png
new file mode 100644
index 0000000..fc28d96
Binary files /dev/null and b/assets/art/cards/king_of_hearts.png differ
diff --git a/assets/art/cards/king_of_hearts.png.meta b/assets/art/cards/king_of_hearts.png.meta
new file mode 100644
index 0000000..1d8fe8f
--- /dev/null
+++ b/assets/art/cards/king_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "011d6dce-d292-40aa-be23-69c7d696a6f2",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "011d6dce-d292-40aa-be23-69c7d696a6f2@6c48a",
+ "displayName": "king_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "011d6dce-d292-40aa-be23-69c7d696a6f2",
+ "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": "011d6dce-d292-40aa-be23-69c7d696a6f2@f9941",
+ "displayName": "king_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": "011d6dce-d292-40aa-be23-69c7d696a6f2@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "011d6dce-d292-40aa-be23-69c7d696a6f2@6c48a"
+ }
+}
diff --git a/assets/art/cards/king_of_spades.png b/assets/art/cards/king_of_spades.png
new file mode 100644
index 0000000..50865dc
Binary files /dev/null and b/assets/art/cards/king_of_spades.png differ
diff --git a/assets/art/cards/king_of_spades.png.meta b/assets/art/cards/king_of_spades.png.meta
new file mode 100644
index 0000000..bb75059
--- /dev/null
+++ b/assets/art/cards/king_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4@6c48a",
+ "displayName": "king_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4",
+ "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": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4@f9941",
+ "displayName": "king_of_spades",
+ "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": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "e04331cd-5dd9-4dd9-a33f-d5b885d42be4@6c48a"
+ }
+}
diff --git a/assets/art/cards/queen_of_clubs.png b/assets/art/cards/queen_of_clubs.png
new file mode 100644
index 0000000..71d45f2
Binary files /dev/null and b/assets/art/cards/queen_of_clubs.png differ
diff --git a/assets/art/cards/queen_of_clubs.png.meta b/assets/art/cards/queen_of_clubs.png.meta
new file mode 100644
index 0000000..123a0bb
--- /dev/null
+++ b/assets/art/cards/queen_of_clubs.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19@6c48a",
+ "displayName": "queen_of_clubs",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19",
+ "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": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19@f9941",
+ "displayName": "queen_of_clubs",
+ "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": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "388dfa95-fbe8-4c89-9a8a-10c09ee34a19@6c48a"
+ }
+}
diff --git a/assets/art/cards/queen_of_diamonds.png b/assets/art/cards/queen_of_diamonds.png
new file mode 100644
index 0000000..a160440
Binary files /dev/null and b/assets/art/cards/queen_of_diamonds.png differ
diff --git a/assets/art/cards/queen_of_diamonds.png.meta b/assets/art/cards/queen_of_diamonds.png.meta
new file mode 100644
index 0000000..62e4e61
--- /dev/null
+++ b/assets/art/cards/queen_of_diamonds.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc@6c48a",
+ "displayName": "queen_of_diamonds",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc",
+ "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": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc@f9941",
+ "displayName": "queen_of_diamonds",
+ "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": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "87676eff-7968-4c8e-b1c4-4f9e98e16ecc@6c48a"
+ }
+}
diff --git a/assets/art/cards/queen_of_hearts.png b/assets/art/cards/queen_of_hearts.png
new file mode 100644
index 0000000..a7299c9
Binary files /dev/null and b/assets/art/cards/queen_of_hearts.png differ
diff --git a/assets/art/cards/queen_of_hearts.png.meta b/assets/art/cards/queen_of_hearts.png.meta
new file mode 100644
index 0000000..241935a
--- /dev/null
+++ b/assets/art/cards/queen_of_hearts.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6@6c48a",
+ "displayName": "queen_of_hearts",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6",
+ "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": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6@f9941",
+ "displayName": "queen_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": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "03b1b00d-fe81-4e54-bc1c-37e94a9869f6@6c48a"
+ }
+}
diff --git a/assets/art/cards/queen_of_spades.png b/assets/art/cards/queen_of_spades.png
new file mode 100644
index 0000000..ee31447
Binary files /dev/null and b/assets/art/cards/queen_of_spades.png differ
diff --git a/assets/art/cards/queen_of_spades.png.meta b/assets/art/cards/queen_of_spades.png.meta
new file mode 100644
index 0000000..ab5b07f
--- /dev/null
+++ b/assets/art/cards/queen_of_spades.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "77fd0470-db1d-4dbb-b747-c1f054607e47",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "77fd0470-db1d-4dbb-b747-c1f054607e47@6c48a",
+ "displayName": "queen_of_spades",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "77fd0470-db1d-4dbb-b747-c1f054607e47",
+ "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": "77fd0470-db1d-4dbb-b747-c1f054607e47@f9941",
+ "displayName": "queen_of_spades",
+ "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": "77fd0470-db1d-4dbb-b747-c1f054607e47@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "77fd0470-db1d-4dbb-b747-c1f054607e47@6c48a"
+ }
+}
diff --git a/assets/art/ui/button.png b/assets/art/ui/button.png
new file mode 100644
index 0000000..8972d5e
Binary files /dev/null and b/assets/art/ui/button.png differ
diff --git a/assets/art/ui/button.png.meta b/assets/art/ui/button.png.meta
new file mode 100644
index 0000000..d2890cc
--- /dev/null
+++ b/assets/art/ui/button.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "9aed220f-5475-4846-9698-3415836ee61a",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "9aed220f-5475-4846-9698-3415836ee61a@6c48a",
+ "displayName": "button",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "9aed220f-5475-4846-9698-3415836ee61a",
+ "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": "9aed220f-5475-4846-9698-3415836ee61a@f9941",
+ "displayName": "button",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "9aed220f-5475-4846-9698-3415836ee61a@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "9aed220f-5475-4846-9698-3415836ee61a@6c48a"
+ }
+}
diff --git a/assets/art/ui/button_disabled.png b/assets/art/ui/button_disabled.png
new file mode 100644
index 0000000..484dc0a
Binary files /dev/null and b/assets/art/ui/button_disabled.png differ
diff --git a/assets/art/ui/button_disabled.png.meta b/assets/art/ui/button_disabled.png.meta
new file mode 100644
index 0000000..ffc2b98
--- /dev/null
+++ b/assets/art/ui/button_disabled.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "c1b43015-8413-4a09-8995-bbefa3b349ab",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "c1b43015-8413-4a09-8995-bbefa3b349ab@6c48a",
+ "displayName": "button_disabled",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "c1b43015-8413-4a09-8995-bbefa3b349ab",
+ "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": "c1b43015-8413-4a09-8995-bbefa3b349ab@f9941",
+ "displayName": "button_disabled",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "c1b43015-8413-4a09-8995-bbefa3b349ab@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "c1b43015-8413-4a09-8995-bbefa3b349ab@6c48a"
+ }
+}
diff --git a/assets/art/ui/button_pressed.png b/assets/art/ui/button_pressed.png
new file mode 100644
index 0000000..d3497e7
Binary files /dev/null and b/assets/art/ui/button_pressed.png differ
diff --git a/assets/art/ui/button_pressed.png.meta b/assets/art/ui/button_pressed.png.meta
new file mode 100644
index 0000000..2243c6d
--- /dev/null
+++ b/assets/art/ui/button_pressed.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "3ab54557-015a-4b87-be9c-762799ecc41a",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "3ab54557-015a-4b87-be9c-762799ecc41a@6c48a",
+ "displayName": "button_pressed",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "3ab54557-015a-4b87-be9c-762799ecc41a",
+ "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": "3ab54557-015a-4b87-be9c-762799ecc41a@f9941",
+ "displayName": "button_pressed",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "3ab54557-015a-4b87-be9c-762799ecc41a@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "3ab54557-015a-4b87-be9c-762799ecc41a@6c48a"
+ }
+}
diff --git a/assets/art/ui/button_quiet.png b/assets/art/ui/button_quiet.png
new file mode 100644
index 0000000..1a88109
Binary files /dev/null and b/assets/art/ui/button_quiet.png differ
diff --git a/assets/art/ui/button_quiet.png.meta b/assets/art/ui/button_quiet.png.meta
new file mode 100644
index 0000000..e4c1e48
--- /dev/null
+++ b/assets/art/ui/button_quiet.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4@6c48a",
+ "displayName": "button_quiet",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4",
+ "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": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4@f9941",
+ "displayName": "button_quiet",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "26956b37-4fae-4ae7-90cf-76c1d9c4a7f4@6c48a"
+ }
+}
diff --git a/assets/art/ui/card_slot.png b/assets/art/ui/card_slot.png
new file mode 100644
index 0000000..9385872
Binary files /dev/null and b/assets/art/ui/card_slot.png differ
diff --git a/assets/art/ui/card_slot.png.meta b/assets/art/ui/card_slot.png.meta
new file mode 100644
index 0000000..edcee46
--- /dev/null
+++ b/assets/art/ui/card_slot.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "610347f5-8934-4a68-8e68-70269c912a7a",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "610347f5-8934-4a68-8e68-70269c912a7a@6c48a",
+ "displayName": "card_slot",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "610347f5-8934-4a68-8e68-70269c912a7a",
+ "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": "610347f5-8934-4a68-8e68-70269c912a7a@f9941",
+ "displayName": "card_slot",
+ "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": "610347f5-8934-4a68-8e68-70269c912a7a@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "610347f5-8934-4a68-8e68-70269c912a7a@6c48a"
+ }
+}
diff --git a/assets/art/ui/panel.png b/assets/art/ui/panel.png
new file mode 100644
index 0000000..c9098db
Binary files /dev/null and b/assets/art/ui/panel.png differ
diff --git a/assets/art/ui/panel.png.meta b/assets/art/ui/panel.png.meta
new file mode 100644
index 0000000..e78fda1
--- /dev/null
+++ b/assets/art/ui/panel.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "a1a282c3-c540-4933-a400-ab611b8857cb",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "a1a282c3-c540-4933-a400-ab611b8857cb@6c48a",
+ "displayName": "panel",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "a1a282c3-c540-4933-a400-ab611b8857cb",
+ "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": "a1a282c3-c540-4933-a400-ab611b8857cb@f9941",
+ "displayName": "panel",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "a1a282c3-c540-4933-a400-ab611b8857cb@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "a1a282c3-c540-4933-a400-ab611b8857cb@6c48a"
+ }
+}
diff --git a/assets/art/ui/panel_light.png b/assets/art/ui/panel_light.png
new file mode 100644
index 0000000..c75be16
Binary files /dev/null and b/assets/art/ui/panel_light.png differ
diff --git a/assets/art/ui/panel_light.png.meta b/assets/art/ui/panel_light.png.meta
new file mode 100644
index 0000000..f657de5
--- /dev/null
+++ b/assets/art/ui/panel_light.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "aa33fa26-eeba-43bd-82ec-48e54101acf0",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "aa33fa26-eeba-43bd-82ec-48e54101acf0@6c48a",
+ "displayName": "panel_light",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "aa33fa26-eeba-43bd-82ec-48e54101acf0",
+ "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": "aa33fa26-eeba-43bd-82ec-48e54101acf0@f9941",
+ "displayName": "panel_light",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 120,
+ "height": 120,
+ "rawWidth": 120,
+ "rawHeight": 120,
+ "borderTop": 40,
+ "borderBottom": 40,
+ "borderLeft": 40,
+ "borderRight": 40,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -60,
+ -60,
+ 0,
+ 60,
+ -60,
+ 0,
+ -60,
+ 60,
+ 0,
+ 60,
+ 60,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 120,
+ 120,
+ 120,
+ 0,
+ 0,
+ 120,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -60,
+ -60,
+ 0
+ ],
+ "maxPos": [
+ 60,
+ 60,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "aa33fa26-eeba-43bd-82ec-48e54101acf0@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "aa33fa26-eeba-43bd-82ec-48e54101acf0@6c48a"
+ }
+}
diff --git a/assets/art/ui/table_bg.png b/assets/art/ui/table_bg.png
new file mode 100644
index 0000000..b4d809a
Binary files /dev/null and b/assets/art/ui/table_bg.png differ
diff --git a/assets/art/ui/table_bg.png.meta b/assets/art/ui/table_bg.png.meta
new file mode 100644
index 0000000..1d0bf7e
--- /dev/null
+++ b/assets/art/ui/table_bg.png.meta
@@ -0,0 +1,134 @@
+{
+ "ver": "1.0.27",
+ "importer": "image",
+ "imported": true,
+ "uuid": "d5553c08-e820-46af-a832-40d807724dfb",
+ "files": [
+ ".json",
+ ".png"
+ ],
+ "subMetas": {
+ "6c48a": {
+ "importer": "texture",
+ "uuid": "d5553c08-e820-46af-a832-40d807724dfb@6c48a",
+ "displayName": "table_bg",
+ "id": "6c48a",
+ "name": "texture",
+ "userData": {
+ "wrapModeS": "clamp-to-edge",
+ "wrapModeT": "clamp-to-edge",
+ "imageUuidOrDatabaseUri": "d5553c08-e820-46af-a832-40d807724dfb",
+ "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": "d5553c08-e820-46af-a832-40d807724dfb@f9941",
+ "displayName": "table_bg",
+ "id": "f9941",
+ "name": "spriteFrame",
+ "userData": {
+ "trimThreshold": 1,
+ "rotated": false,
+ "offsetX": 0,
+ "offsetY": 0,
+ "trimX": 0,
+ "trimY": 0,
+ "width": 540,
+ "height": 960,
+ "rawWidth": 540,
+ "rawHeight": 960,
+ "borderTop": 0,
+ "borderBottom": 0,
+ "borderLeft": 0,
+ "borderRight": 0,
+ "packable": true,
+ "pixelsToUnit": 100,
+ "pivotX": 0.5,
+ "pivotY": 0.5,
+ "meshType": 0,
+ "vertices": {
+ "rawPosition": [
+ -270,
+ -480,
+ 0,
+ 270,
+ -480,
+ 0,
+ -270,
+ 480,
+ 0,
+ 270,
+ 480,
+ 0
+ ],
+ "indexes": [
+ 0,
+ 1,
+ 2,
+ 2,
+ 1,
+ 3
+ ],
+ "uv": [
+ 0,
+ 960,
+ 540,
+ 960,
+ 0,
+ 0,
+ 540,
+ 0
+ ],
+ "nuv": [
+ 0,
+ 0,
+ 1,
+ 0,
+ 0,
+ 1,
+ 1,
+ 1
+ ],
+ "minPos": [
+ -270,
+ -480,
+ 0
+ ],
+ "maxPos": [
+ 270,
+ 480,
+ 0
+ ]
+ },
+ "isUuid": true,
+ "imageUuidOrDatabaseUri": "d5553c08-e820-46af-a832-40d807724dfb@6c48a",
+ "atlasUuid": "",
+ "trimType": "none"
+ },
+ "ver": "1.0.12",
+ "imported": true,
+ "files": [
+ ".json"
+ ],
+ "subMetas": {}
+ }
+ },
+ "userData": {
+ "type": "sprite-frame",
+ "fixAlphaTransparencyArtifacts": false,
+ "hasAlpha": true,
+ "redirect": "d5553c08-e820-46af-a832-40d807724dfb@6c48a"
+ }
+}
diff --git a/docs/PLAN.md b/docs/PLAN.md
index a5f65d8..3933651 100644
--- a/docs/PLAN.md
+++ b/docs/PLAN.md
@@ -57,11 +57,11 @@ progress. The Cocos layer only renders state and turns taps into actions.
- [x] Versioning + tolerant load (unknown or missing sections do not break a load)
- [x] Tests for save/load round-trip and corrupted-payload recovery
-### M4 — Art pipeline `[ ]`
-- [ ] Pick the 36 needed faces from `local/`, downscale to the 1080-wide budget
-- [ ] Author the missing pieces: card back, table background, UI panels/buttons
-- [ ] Import into `assets/art/`, configure sprite frames and atlasing
-- [ ] Remove consumed source art from `local/`, record attribution/licence
+### M4 — Art pipeline `[x]`
+- [x] Pick the 36 needed faces from `local/`, downscale to the 1080-wide budget
+- [x] Author the missing pieces: card back, table background, UI panels/buttons
+- [x] Import into `assets/art/`, configure sprite frames and atlasing
+- [x] Remove consumed source art from `local/`, record attribution/licence
### M5 — Scenes and bootstrap `[ ]`
- [ ] `loader` scene: module initialisation, then transition to `lobby`
diff --git a/docs/TECHNICAL.md b/docs/TECHNICAL.md
index d6ddb0a..de4fcfd 100644
--- a/docs/TECHNICAL.md
+++ b/docs/TECHNICAL.md
@@ -41,8 +41,8 @@ assets/
card.prefab one playing card, face or back
...
art/
- cards/ 36 faces + back, atlased
- ui/ panels, buttons, table surface
+ cards/ 36 faces + back, packed into cards.pac (2048²)
+ ui/ table surface, nine-slice panels and buttons
scripts/
core/ PURE TS — no engine imports
cards/ Suit, Rank, Card, Deck
@@ -62,8 +62,10 @@ tests/
core/ vitest specs against assets/scripts/core
support/ position fixtures and the state invariant checker
tools/ measuring tools, not part of the suite
+art-src/cards/ vector sources for the card faces (LGPL, kept)
docs/ specs, this file, plan, decisions
local/ scratch art storage; contents get consumed
+scripts/ build and check tools run through npm
extensions/cocos-code-mode/ editor tool server
```
@@ -155,6 +157,35 @@ Scripts and other text assets are written to disk directly and picked up by the
editor's asset watcher. Scenes and prefabs are authored through the tools —
never by hand-editing the `.scene`/`.prefab` JSON.
+### Art
+
+```bash
+npm run build:art
+```
+
+Regenerates every sprite in `assets/art` from source. Card faces are rasterised
+from the vectors in `art-src/cards`; the card back, table and UI chrome are
+authored as SVG inside [`scripts/build-art.mjs`](../scripts/build-art.mjs) and
+rasterised from there, so a colour or radius is changed in one readable place
+rather than in a binary.
+
+Fixed numbers the layout depends on:
+
+| | |
+|---|---|
+| Card sprite | 220 × 320 px |
+| Nine-slice border | 40 px on 120 × 120 tiles |
+| Table background | 540 × 960, drawn at 2× |
+
+Card sprite frames have trimming switched off, because layout maths assumes
+every card rect is exactly 220 × 320. Card faces are named `_of_`,
+matching `Card.assetName` — that string is the only contract between the rules
+core and the art.
+
+Licence: the faces are LGPL-3.0 and attribution is mandatory. See
+[`assets/art/cards/ATTRIBUTION.md`](../assets/art/cards/ATTRIBUTION.md), which
+also explains what would have to change to drop the dependency.
+
### Builds
Web: `web-mobile` template. Mobile: ASTC textures per [ART.md](ART.md), PNG for
diff --git a/package.json b/package.json
index f8228cc..f8ede53 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"test:watch": "vitest",
"typecheck": "tsc -p tsconfig.test.json",
"check:core-purity": "node scripts/check-core-purity.mjs",
- "stats:bot": "vitest run --config vitest.stats.mts"
+ "stats:bot": "vitest run --config vitest.stats.mts",
+ "build:art": "node scripts/build-art.mjs"
}
}
diff --git a/scripts/build-art.mjs b/scripts/build-art.mjs
new file mode 100644
index 0000000..49fe005
--- /dev/null
+++ b/scripts/build-art.mjs
@@ -0,0 +1,219 @@
+// Builds every sprite the game ships from its sources, so the art in
+// assets/art is reproducible rather than hand-placed.
+//
+// node scripts/build-art.mjs
+//
+// Card faces are rendered from the vector sources in art-src/cards (see
+// assets/art/cards/ATTRIBUTION.md). Everything else — the card back, the table,
+// the UI chrome — is drawn here as SVG and rasterised, which keeps it tweakable
+// in one place instead of scattered across binary files.
+//
+// Sizes follow docs/ART.md: the screen is 1080 design units wide, so nothing is
+// authored larger than it will ever be drawn.
+import { mkdirSync, readdirSync } from 'node:fs';
+import { join } from 'node:path';
+import sharp from 'sharp';
+
+const CARD_SRC = 'art-src/cards';
+const CARDS_OUT = 'assets/art/cards';
+const UI_OUT = 'assets/art/ui';
+
+/** Card sprite size. 37 of these pack into a single 2048² atlas with room to spare. */
+export const CARD_W = 220;
+export const CARD_H = 320;
+
+const INK = '#141414';
+const FELT_DARK = '#0b3c22';
+const FELT_LIGHT = '#1b7a48';
+
+// ---------------------------------------------------------------------------
+// Drawings
+// ---------------------------------------------------------------------------
+
+/**
+ * The back of a card. Matches the silhouette of the faces — same rounded
+ * rectangle, same dark hairline — so a face-down card sits in a fan without
+ * looking like a different object.
+ */
+function cardBack() {
+ const inset = 11;
+ const w = CARD_W;
+ const h = CARD_H;
+ return ``;
+}
+
+/**
+ * The table. Authored at half the design resolution and drawn at 2× — it is a
+ * soft gradient with no detail to lose, and that saves three quarters of the
+ * texture memory for no visible difference.
+ */
+function tableBackground() {
+ const w = 540;
+ const h = 960;
+ return ``;
+}
+
+/** Outline of a place where a card can go. Drawn under the table slots. */
+function cardSlot() {
+ return ``;
+}
+
+/** Nine-slice border used by every tile below, and by the sprites in the scene. */
+export const NINE_SLICE_BORDER = 40;
+
+/**
+ * A nine-slice tile: 120×120 with a 40px border, so only the flat middle 40×40
+ * is ever stretched and a button scales to any size without distorting its
+ * corners. Nothing with detail may cross into that middle band — the gloss
+ * below stops just short of it for exactly that reason.
+ */
+function nineSlice({ fill, stroke, strokeWidth = 4, radius = 34, highlight = null, fillOpacity = 1 }) {
+ const size = 120;
+ const gradient = typeof fill === 'object'
+ ? `
+
+
+ `
+ : '';
+ const paint = typeof fill === 'object' ? 'url(#f)' : fill;
+ const gloss = highlight
+ ? ``
+ : '';
+
+ return ``;
+}
+
+const DRAWINGS = {
+ [`${CARDS_OUT}/card_back.png`]: cardBack(),
+ [`${UI_OUT}/table_bg.png`]: tableBackground(),
+ [`${UI_OUT}/card_slot.png`]: cardSlot(),
+ [`${UI_OUT}/panel.png`]: nineSlice({
+ fill: '#062718', fillOpacity: 0.88, stroke: '#2f7a52', strokeWidth: 4, radius: 34,
+ }),
+ [`${UI_OUT}/panel_light.png`]: nineSlice({
+ fill: '#ffffff', fillOpacity: 0.12, stroke: '#ffffff', strokeWidth: 3, radius: 30,
+ }),
+ [`${UI_OUT}/button.png`]: nineSlice({
+ fill: { from: '#f4c245', to: '#c98a0e' }, stroke: '#7d5406', strokeWidth: 5,
+ radius: 34, highlight: '#ffffff',
+ }),
+ [`${UI_OUT}/button_pressed.png`]: nineSlice({
+ fill: { from: '#c99a20', to: '#a06d08' }, stroke: '#6a4605', strokeWidth: 5, radius: 34,
+ }),
+ [`${UI_OUT}/button_disabled.png`]: nineSlice({
+ fill: { from: '#6d6d6d', to: '#4a4a4a' }, stroke: '#333333', strokeWidth: 5, radius: 34,
+ }),
+ [`${UI_OUT}/button_quiet.png`]: nineSlice({
+ fill: '#0d3624', fillOpacity: 0.9, stroke: '#3f8f63', strokeWidth: 4, radius: 34,
+ }),
+};
+
+// ---------------------------------------------------------------------------
+// Build
+// ---------------------------------------------------------------------------
+
+async function buildCardFaces() {
+ const sources = readdirSync(CARD_SRC).filter((f) => f.endsWith('.svg'));
+ if (sources.length !== 36) {
+ throw new Error(`Expected 36 card sources in ${CARD_SRC}, found ${sources.length}`);
+ }
+
+ for (const file of sources) {
+ // A high density makes librsvg rasterise from the vectors at full size
+ // before the resize, instead of scaling up a small bitmap.
+ await sharp(join(CARD_SRC, file), { density: 600 })
+ .resize(CARD_W, CARD_H, { fit: 'fill' })
+ .png({ compressionLevel: 9 })
+ .toFile(join(CARDS_OUT, file.replace(/\.svg$/, '.png')));
+ }
+ return sources.length;
+}
+
+async function buildDrawings() {
+ for (const [target, svg] of Object.entries(DRAWINGS)) {
+ // Rasterise well above the final size and scale back down, so the
+ // rounded corners and hairlines come out properly anti-aliased. The
+ // authored size is taken from the SVG itself.
+ const width = Number(/width="(\d+)"/.exec(svg)[1]);
+ const height = Number(/height="(\d+)"/.exec(svg)[1]);
+
+ await sharp(Buffer.from(svg), { density: 72 * 4 })
+ .resize(width, height, { fit: 'fill' })
+ .png({ compressionLevel: 9 })
+ .toFile(target);
+ }
+ return Object.keys(DRAWINGS).length;
+}
+
+async function main() {
+ mkdirSync(CARDS_OUT, { recursive: true });
+ mkdirSync(UI_OUT, { recursive: true });
+
+ const faces = await buildCardFaces();
+ const drawings = await buildDrawings();
+
+ console.log(`${faces} card faces -> ${CARDS_OUT}`);
+ console.log(`${drawings} generated sprites`);
+}
+
+main().catch((error) => {
+ console.error(error);
+ process.exit(1);
+});