diff --git a/.vscode/settings.json b/.vscode/settings.json
index 6cf580aa..acd4457e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -23,6 +23,7 @@
"Hitomi",
"Hokenshitsu",
"iconify",
+ "indexdb",
"INTLIFY",
"Irotoridori",
"Joshu",
diff --git a/src/assets/images/ren/2337.webp b/src/assets/images/ren/2337.webp
deleted file mode 100644
index 831fec8a..00000000
Binary files a/src/assets/images/ren/2337.webp and /dev/null differ
diff --git a/src/assets/images/ren/2338.webp b/src/assets/images/ren/2338.webp
deleted file mode 100644
index ccdba1e0..00000000
Binary files a/src/assets/images/ren/2338.webp and /dev/null differ
diff --git a/src/assets/images/ren/2339.webp b/src/assets/images/ren/2339.webp
deleted file mode 100644
index a4c97d86..00000000
Binary files a/src/assets/images/ren/2339.webp and /dev/null differ
diff --git a/src/assets/images/ren/2340.webp b/src/assets/images/ren/2340.webp
deleted file mode 100644
index c4b63453..00000000
Binary files a/src/assets/images/ren/2340.webp and /dev/null differ
diff --git a/src/assets/images/ren/2345.webp b/src/assets/images/ren/2345.webp
deleted file mode 100644
index 96fd9567..00000000
Binary files a/src/assets/images/ren/2345.webp and /dev/null differ
diff --git a/src/assets/images/ren/2346.webp b/src/assets/images/ren/2346.webp
deleted file mode 100644
index 3bfac89a..00000000
Binary files a/src/assets/images/ren/2346.webp and /dev/null differ
diff --git a/src/assets/images/ren/2352.webp b/src/assets/images/ren/2352.webp
deleted file mode 100644
index f3e4390e..00000000
Binary files a/src/assets/images/ren/2352.webp and /dev/null differ
diff --git a/src/assets/images/ren/2356.webp b/src/assets/images/ren/2356.webp
deleted file mode 100644
index 6a6e11fe..00000000
Binary files a/src/assets/images/ren/2356.webp and /dev/null differ
diff --git a/src/assets/images/ren/2360.webp b/src/assets/images/ren/2360.webp
deleted file mode 100644
index 5e542d96..00000000
Binary files a/src/assets/images/ren/2360.webp and /dev/null differ
diff --git a/src/assets/images/ren/2364.webp b/src/assets/images/ren/2364.webp
deleted file mode 100644
index 1e882523..00000000
Binary files a/src/assets/images/ren/2364.webp and /dev/null differ
diff --git a/src/assets/images/ren/2369.webp b/src/assets/images/ren/2369.webp
deleted file mode 100644
index 046af1b8..00000000
Binary files a/src/assets/images/ren/2369.webp and /dev/null differ
diff --git a/src/assets/images/ren/2842.webp b/src/assets/images/ren/2842.webp
deleted file mode 100644
index 92664588..00000000
Binary files a/src/assets/images/ren/2842.webp and /dev/null differ
diff --git a/src/assets/images/ren/2843.webp b/src/assets/images/ren/2843.webp
deleted file mode 100644
index 53fca497..00000000
Binary files a/src/assets/images/ren/2843.webp and /dev/null differ
diff --git a/src/assets/images/ren/2844.webp b/src/assets/images/ren/2844.webp
deleted file mode 100644
index 05418792..00000000
Binary files a/src/assets/images/ren/2844.webp and /dev/null differ
diff --git a/src/assets/images/ren/2845.webp b/src/assets/images/ren/2845.webp
deleted file mode 100644
index fe79e492..00000000
Binary files a/src/assets/images/ren/2845.webp and /dev/null differ
diff --git a/src/assets/images/ren/2846.webp b/src/assets/images/ren/2846.webp
deleted file mode 100644
index 86266ba8..00000000
Binary files a/src/assets/images/ren/2846.webp and /dev/null differ
diff --git a/src/assets/images/ren/2847.webp b/src/assets/images/ren/2847.webp
deleted file mode 100644
index 375d7020..00000000
Binary files a/src/assets/images/ren/2847.webp and /dev/null differ
diff --git a/src/assets/images/ren/2848.webp b/src/assets/images/ren/2848.webp
deleted file mode 100644
index 848e3e7c..00000000
Binary files a/src/assets/images/ren/2848.webp and /dev/null differ
diff --git a/src/assets/images/ren/2850.webp b/src/assets/images/ren/2850.webp
deleted file mode 100644
index c2ea446b..00000000
Binary files a/src/assets/images/ren/2850.webp and /dev/null differ
diff --git a/src/assets/images/ren/2851.webp b/src/assets/images/ren/2851.webp
deleted file mode 100644
index 8edf5abc..00000000
Binary files a/src/assets/images/ren/2851.webp and /dev/null differ
diff --git a/src/assets/images/ren/2853.webp b/src/assets/images/ren/2853.webp
deleted file mode 100644
index 66e48301..00000000
Binary files a/src/assets/images/ren/2853.webp and /dev/null differ
diff --git a/src/assets/images/ren/2854.webp b/src/assets/images/ren/2854.webp
deleted file mode 100644
index 46843e0b..00000000
Binary files a/src/assets/images/ren/2854.webp and /dev/null differ
diff --git a/src/assets/images/ren/2855.webp b/src/assets/images/ren/2855.webp
deleted file mode 100644
index 91c64101..00000000
Binary files a/src/assets/images/ren/2855.webp and /dev/null differ
diff --git a/src/assets/images/ren/2856.webp b/src/assets/images/ren/2856.webp
deleted file mode 100644
index 535b81dc..00000000
Binary files a/src/assets/images/ren/2856.webp and /dev/null differ
diff --git a/src/assets/images/ren/2857.webp b/src/assets/images/ren/2857.webp
deleted file mode 100644
index f3134bfb..00000000
Binary files a/src/assets/images/ren/2857.webp and /dev/null differ
diff --git a/src/assets/images/ren/2859.webp b/src/assets/images/ren/2859.webp
deleted file mode 100644
index 964ecae5..00000000
Binary files a/src/assets/images/ren/2859.webp and /dev/null differ
diff --git a/src/assets/images/ren/2861.webp b/src/assets/images/ren/2861.webp
deleted file mode 100644
index 3a9fad42..00000000
Binary files a/src/assets/images/ren/2861.webp and /dev/null differ
diff --git a/src/assets/images/ren/2862.webp b/src/assets/images/ren/2862.webp
deleted file mode 100644
index 066b322c..00000000
Binary files a/src/assets/images/ren/2862.webp and /dev/null differ
diff --git a/src/assets/images/ren/2864.webp b/src/assets/images/ren/2864.webp
deleted file mode 100644
index 7fe998dd..00000000
Binary files a/src/assets/images/ren/2864.webp and /dev/null differ
diff --git a/src/assets/images/ren/2865.webp b/src/assets/images/ren/2865.webp
deleted file mode 100644
index b7b2b8aa..00000000
Binary files a/src/assets/images/ren/2865.webp and /dev/null differ
diff --git a/src/assets/images/ren/2869.webp b/src/assets/images/ren/2869.webp
deleted file mode 100644
index aef79bc6..00000000
Binary files a/src/assets/images/ren/2869.webp and /dev/null differ
diff --git a/src/assets/images/ren/2870.webp b/src/assets/images/ren/2870.webp
deleted file mode 100644
index eac457f1..00000000
Binary files a/src/assets/images/ren/2870.webp and /dev/null differ
diff --git a/src/assets/images/ren/2876.webp b/src/assets/images/ren/2876.webp
deleted file mode 100644
index 96016b6c..00000000
Binary files a/src/assets/images/ren/2876.webp and /dev/null differ
diff --git a/src/assets/images/ren/2877.webp b/src/assets/images/ren/2877.webp
deleted file mode 100644
index 88c881eb..00000000
Binary files a/src/assets/images/ren/2877.webp and /dev/null differ
diff --git a/src/assets/images/ren/2880.webp b/src/assets/images/ren/2880.webp
deleted file mode 100644
index 9e3e4a14..00000000
Binary files a/src/assets/images/ren/2880.webp and /dev/null differ
diff --git a/src/assets/images/ren/2881.webp b/src/assets/images/ren/2881.webp
deleted file mode 100644
index 70175820..00000000
Binary files a/src/assets/images/ren/2881.webp and /dev/null differ
diff --git a/src/assets/images/ren/2882.webp b/src/assets/images/ren/2882.webp
deleted file mode 100644
index 38fa3f37..00000000
Binary files a/src/assets/images/ren/2882.webp and /dev/null differ
diff --git a/src/assets/images/ren/2885.webp b/src/assets/images/ren/2885.webp
deleted file mode 100644
index 82eed535..00000000
Binary files a/src/assets/images/ren/2885.webp and /dev/null differ
diff --git a/src/assets/images/ren/2886.webp b/src/assets/images/ren/2886.webp
deleted file mode 100644
index 29cfacdf..00000000
Binary files a/src/assets/images/ren/2886.webp and /dev/null differ
diff --git a/src/assets/images/ren/2887.webp b/src/assets/images/ren/2887.webp
deleted file mode 100644
index ea5bffa1..00000000
Binary files a/src/assets/images/ren/2887.webp and /dev/null differ
diff --git a/src/assets/images/ren/2891.webp b/src/assets/images/ren/2891.webp
deleted file mode 100644
index 0f8f5f3a..00000000
Binary files a/src/assets/images/ren/2891.webp and /dev/null differ
diff --git a/src/assets/images/ren/2892.webp b/src/assets/images/ren/2892.webp
deleted file mode 100644
index 1240edc1..00000000
Binary files a/src/assets/images/ren/2892.webp and /dev/null differ
diff --git a/src/assets/images/ren/2893.webp b/src/assets/images/ren/2893.webp
deleted file mode 100644
index a3616059..00000000
Binary files a/src/assets/images/ren/2893.webp and /dev/null differ
diff --git a/src/assets/images/ren/2896.webp b/src/assets/images/ren/2896.webp
deleted file mode 100644
index 132eabc6..00000000
Binary files a/src/assets/images/ren/2896.webp and /dev/null differ
diff --git a/src/assets/images/ren/2897.webp b/src/assets/images/ren/2897.webp
deleted file mode 100644
index fb8bec93..00000000
Binary files a/src/assets/images/ren/2897.webp and /dev/null differ
diff --git a/src/assets/images/ren/2899.webp b/src/assets/images/ren/2899.webp
deleted file mode 100644
index 16069016..00000000
Binary files a/src/assets/images/ren/2899.webp and /dev/null differ
diff --git a/src/assets/images/ren/2902.webp b/src/assets/images/ren/2902.webp
deleted file mode 100644
index f989b6bb..00000000
Binary files a/src/assets/images/ren/2902.webp and /dev/null differ
diff --git a/src/assets/images/ren/2903.webp b/src/assets/images/ren/2903.webp
deleted file mode 100644
index d4caa4af..00000000
Binary files a/src/assets/images/ren/2903.webp and /dev/null differ
diff --git a/src/assets/images/ren/2905.webp b/src/assets/images/ren/2905.webp
deleted file mode 100644
index 80535184..00000000
Binary files a/src/assets/images/ren/2905.webp and /dev/null differ
diff --git a/src/assets/images/ren/2908.webp b/src/assets/images/ren/2908.webp
deleted file mode 100644
index cc738700..00000000
Binary files a/src/assets/images/ren/2908.webp and /dev/null differ
diff --git a/src/assets/images/ren/2909.webp b/src/assets/images/ren/2909.webp
deleted file mode 100644
index 731e97cf..00000000
Binary files a/src/assets/images/ren/2909.webp and /dev/null differ
diff --git a/src/assets/images/ren/2910.webp b/src/assets/images/ren/2910.webp
deleted file mode 100644
index 0b8fcdfb..00000000
Binary files a/src/assets/images/ren/2910.webp and /dev/null differ
diff --git a/src/assets/images/ren/2913.webp b/src/assets/images/ren/2913.webp
deleted file mode 100644
index d1275abb..00000000
Binary files a/src/assets/images/ren/2913.webp and /dev/null differ
diff --git a/src/assets/images/ren/2914.webp b/src/assets/images/ren/2914.webp
deleted file mode 100644
index 89801a17..00000000
Binary files a/src/assets/images/ren/2914.webp and /dev/null differ
diff --git a/src/assets/images/ren/2915.webp b/src/assets/images/ren/2915.webp
deleted file mode 100644
index cf90ef77..00000000
Binary files a/src/assets/images/ren/2915.webp and /dev/null differ
diff --git a/src/assets/images/ren/2916.webp b/src/assets/images/ren/2916.webp
deleted file mode 100644
index 6cadc38f..00000000
Binary files a/src/assets/images/ren/2916.webp and /dev/null differ
diff --git a/src/assets/images/ren/2917.webp b/src/assets/images/ren/2917.webp
deleted file mode 100644
index 4107bc34..00000000
Binary files a/src/assets/images/ren/2917.webp and /dev/null differ
diff --git a/src/assets/images/ren/2918.webp b/src/assets/images/ren/2918.webp
deleted file mode 100644
index 2d47851f..00000000
Binary files a/src/assets/images/ren/2918.webp and /dev/null differ
diff --git a/src/assets/images/ren/2920.webp b/src/assets/images/ren/2920.webp
deleted file mode 100644
index a5b09144..00000000
Binary files a/src/assets/images/ren/2920.webp and /dev/null differ
diff --git a/src/assets/images/ren/2921.webp b/src/assets/images/ren/2921.webp
deleted file mode 100644
index b4430bbd..00000000
Binary files a/src/assets/images/ren/2921.webp and /dev/null differ
diff --git a/src/assets/images/ren/2933.webp b/src/assets/images/ren/2933.webp
deleted file mode 100644
index 03593cfa..00000000
Binary files a/src/assets/images/ren/2933.webp and /dev/null differ
diff --git a/src/assets/images/ren/2934.webp b/src/assets/images/ren/2934.webp
deleted file mode 100644
index 7c1b5da7..00000000
Binary files a/src/assets/images/ren/2934.webp and /dev/null differ
diff --git a/src/assets/images/ren/2961.webp b/src/assets/images/ren/2961.webp
deleted file mode 100644
index 61a15689..00000000
Binary files a/src/assets/images/ren/2961.webp and /dev/null differ
diff --git a/src/assets/images/ren/2969.webp b/src/assets/images/ren/2969.webp
deleted file mode 100644
index 7fbdd3de..00000000
Binary files a/src/assets/images/ren/2969.webp and /dev/null differ
diff --git a/src/assets/images/ren/2980.webp b/src/assets/images/ren/2980.webp
deleted file mode 100644
index e01e8b23..00000000
Binary files a/src/assets/images/ren/2980.webp and /dev/null differ
diff --git a/src/assets/images/ren/3020.webp b/src/assets/images/ren/3020.webp
deleted file mode 100644
index f583583b..00000000
Binary files a/src/assets/images/ren/3020.webp and /dev/null differ
diff --git a/src/assets/images/ren/3022.webp b/src/assets/images/ren/3022.webp
deleted file mode 100644
index 852dd453..00000000
Binary files a/src/assets/images/ren/3022.webp and /dev/null differ
diff --git a/src/assets/images/ren/3023.webp b/src/assets/images/ren/3023.webp
deleted file mode 100644
index df393f66..00000000
Binary files a/src/assets/images/ren/3023.webp and /dev/null differ
diff --git a/src/assets/images/ren/3024.webp b/src/assets/images/ren/3024.webp
deleted file mode 100644
index dc3018fe..00000000
Binary files a/src/assets/images/ren/3024.webp and /dev/null differ
diff --git a/src/assets/images/ren/3025.webp b/src/assets/images/ren/3025.webp
deleted file mode 100644
index db6d5e90..00000000
Binary files a/src/assets/images/ren/3025.webp and /dev/null differ
diff --git a/src/assets/images/ren/813.webp b/src/assets/images/ren/813.webp
deleted file mode 100644
index 7a57d6f8..00000000
Binary files a/src/assets/images/ren/813.webp and /dev/null differ
diff --git a/src/assets/images/ren/ren.json b/src/assets/images/ren/ren.json
deleted file mode 100644
index f786d0ba..00000000
--- a/src/assets/images/ren/ren.json
+++ /dev/null
@@ -1,802 +0,0 @@
-[
- {
- "name": "汗",
- "left": 287,
- "top": 425,
- "width": 12,
- "height": 14,
- "visible": 1,
- "layer_id": 2961,
- "group_layer_id": 2931
- },
- {
- "name": "追真剣",
- "left": 234,
- "top": 383,
- "width": 76,
- "height": 27,
- "visible": 1,
- "layer_id": 3022,
- "group_layer_id": 2923
- },
- {
- "name": "笑1",
- "left": 232,
- "top": 380,
- "width": 78,
- "height": 29,
- "visible": 1,
- "layer_id": 2842,
- "group_layer_id": 2923
- },
- {
- "name": "笑2",
- "left": 235,
- "top": 385,
- "width": 76,
- "height": 32,
- "visible": 1,
- "layer_id": 2845,
- "group_layer_id": 2923
- },
- {
- "name": "怒1",
- "left": 239,
- "top": 382,
- "width": 63,
- "height": 28,
- "visible": 1,
- "layer_id": 2848,
- "group_layer_id": 2923
- },
- {
- "name": "怒2",
- "left": 240,
- "top": 382,
- "width": 60,
- "height": 26,
- "visible": 1,
- "layer_id": 2864,
- "group_layer_id": 2923
- },
- {
- "name": "悲1",
- "left": 237,
- "top": 386,
- "width": 70,
- "height": 28,
- "visible": 1,
- "layer_id": 2855,
- "group_layer_id": 2923
- },
- {
- "name": "悲2",
- "left": 238,
- "top": 391,
- "width": 66,
- "height": 28,
- "visible": 1,
- "layer_id": 2859,
- "group_layer_id": 2923
- },
- {
- "name": "泣1",
- "left": 243,
- "top": 388,
- "width": 58,
- "height": 30,
- "visible": 1,
- "layer_id": 2865,
- "group_layer_id": 2923
- },
- {
- "name": "泣2",
- "left": 240,
- "top": 386,
- "width": 65,
- "height": 31,
- "visible": 1,
- "layer_id": 2870,
- "group_layer_id": 2923
- },
- {
- "name": "驚1",
- "left": 232,
- "top": 379,
- "width": 78,
- "height": 31,
- "visible": 1,
- "layer_id": 2877,
- "group_layer_id": 2923
- },
- {
- "name": "驚2",
- "left": 232,
- "top": 379,
- "width": 78,
- "height": 33,
- "visible": 1,
- "layer_id": 2882,
- "group_layer_id": 2923
- },
- {
- "name": "照1",
- "left": 234,
- "top": 382,
- "width": 77,
- "height": 31,
- "visible": 1,
- "layer_id": 2887,
- "group_layer_id": 2923
- },
- {
- "name": "照2",
- "left": 239,
- "top": 385,
- "width": 70,
- "height": 31,
- "visible": 1,
- "layer_id": 2893,
- "group_layer_id": 2923
- },
- {
- "name": "えっへん",
- "left": 235,
- "top": 384,
- "width": 72,
- "height": 25,
- "visible": 1,
- "layer_id": 2899,
- "group_layer_id": 2923
- },
- {
- "name": "ギャグ笑",
- "left": 234,
- "top": 383,
- "width": 76,
- "height": 33,
- "visible": 1,
- "layer_id": 2905,
- "group_layer_id": 2923
- },
- {
- "name": "ギャグ怒",
- "left": 239,
- "top": 384,
- "width": 61,
- "height": 29,
- "visible": 1,
- "layer_id": 2910,
- "group_layer_id": 2923
- },
- {
- "name": "ギャグ泣",
- "left": 239,
- "top": 389,
- "width": 63,
- "height": 26,
- "visible": 1,
- "layer_id": 2915,
- "group_layer_id": 2923
- },
- {
- "name": "ギャグ驚",
- "left": 235,
- "top": 383,
- "width": 66,
- "height": 23,
- "visible": 1,
- "layer_id": 2918,
- "group_layer_id": 2923
- },
- {
- "name": "追真剣",
- "left": 238,
- "top": 392,
- "width": 78,
- "height": 41,
- "visible": 0,
- "layer_id": 3020,
- "group_layer_id": 2925
- },
- {
- "name": "笑1",
- "left": 238,
- "top": 390,
- "width": 78,
- "height": 43,
- "visible": 0,
- "layer_id": 2843,
- "group_layer_id": 2925
- },
- {
- "name": "笑2",
- "left": 244,
- "top": 395,
- "width": 69,
- "height": 37,
- "visible": 0,
- "layer_id": 2846,
- "group_layer_id": 2925
- },
- {
- "name": "怒1",
- "left": 238,
- "top": 391,
- "width": 78,
- "height": 42,
- "visible": 0,
- "layer_id": 2850,
- "group_layer_id": 2925
- },
- {
- "name": "怒2",
- "left": 238,
- "top": 391,
- "width": 78,
- "height": 42,
- "visible": 0,
- "layer_id": 2853,
- "group_layer_id": 2925
- },
- {
- "name": "悲1",
- "left": 238,
- "top": 392,
- "width": 78,
- "height": 41,
- "visible": 0,
- "layer_id": 2856,
- "group_layer_id": 2925
- },
- {
- "name": "悲2",
- "left": 240,
- "top": 396,
- "width": 75,
- "height": 37,
- "visible": 0,
- "layer_id": 2861,
- "group_layer_id": 2925
- },
- {
- "name": "泣1",
- "left": 243,
- "top": 396,
- "width": 71,
- "height": 37,
- "visible": 1,
- "layer_id": 3025,
- "group_layer_id": 2925
- },
- {
- "name": "泣2",
- "left": 238,
- "top": 394,
- "width": 78,
- "height": 60,
- "visible": 0,
- "layer_id": 3024,
- "group_layer_id": 2925
- },
- {
- "name": "驚1",
- "left": 238,
- "top": 390,
- "width": 78,
- "height": 43,
- "visible": 0,
- "layer_id": 2880,
- "group_layer_id": 2925
- },
- {
- "name": "驚2",
- "left": 238,
- "top": 390,
- "width": 78,
- "height": 43,
- "visible": 0,
- "layer_id": 2885,
- "group_layer_id": 2925
- },
- {
- "name": "照1",
- "left": 238,
- "top": 392,
- "width": 78,
- "height": 41,
- "visible": 0,
- "layer_id": 2891,
- "group_layer_id": 2925
- },
- {
- "name": "照2",
- "left": 244,
- "top": 395,
- "width": 69,
- "height": 37,
- "visible": 0,
- "layer_id": 2896,
- "group_layer_id": 2925
- },
- {
- "name": "えっへん",
- "left": 244,
- "top": 396,
- "width": 68,
- "height": 38,
- "visible": 0,
- "layer_id": 2902,
- "group_layer_id": 2925
- },
- {
- "name": "ギャグ笑",
- "left": 244,
- "top": 395,
- "width": 69,
- "height": 37,
- "visible": 0,
- "layer_id": 2908,
- "group_layer_id": 2925
- },
- {
- "name": "ギャグ怒",
- "left": 244,
- "top": 401,
- "width": 66,
- "height": 33,
- "visible": 0,
- "layer_id": 2913,
- "group_layer_id": 2925
- },
- {
- "name": "ギャグ泣",
- "left": 244,
- "top": 405,
- "width": 66,
- "height": 47,
- "visible": 0,
- "layer_id": 2916,
- "group_layer_id": 2925
- },
- {
- "name": "ギャグ驚",
- "left": 248,
- "top": 395,
- "width": 57,
- "height": 37,
- "visible": 0,
- "layer_id": 2920,
- "group_layer_id": 2925
- },
- {
- "name": "追開け",
- "left": 270,
- "top": 430,
- "width": 19,
- "height": 16,
- "visible": 1,
- "layer_id": 2980,
- "group_layer_id": 2927
- },
- {
- "name": "追閉じ",
- "left": 271,
- "top": 430,
- "width": 18,
- "height": 14,
- "visible": 0,
- "layer_id": 2969,
- "group_layer_id": 2927
- },
- {
- "name": "追真剣",
- "left": 273,
- "top": 433,
- "width": 12,
- "height": 13,
- "visible": 0,
- "layer_id": 3023,
- "group_layer_id": 2927
- },
- {
- "name": "笑1",
- "left": 269,
- "top": 429,
- "width": 21,
- "height": 18,
- "visible": 0,
- "layer_id": 2844,
- "group_layer_id": 2927
- },
- {
- "name": "笑2",
- "left": 268,
- "top": 428,
- "width": 24,
- "height": 22,
- "visible": 0,
- "layer_id": 2847,
- "group_layer_id": 2927
- },
- {
- "name": "怒1",
- "left": 272,
- "top": 433,
- "width": 15,
- "height": 12,
- "visible": 0,
- "layer_id": 2851,
- "group_layer_id": 2927
- },
- {
- "name": "怒2",
- "left": 268,
- "top": 428,
- "width": 25,
- "height": 23,
- "visible": 0,
- "layer_id": 2854,
- "group_layer_id": 2927
- },
- {
- "name": "悲1",
- "left": 272,
- "top": 434,
- "width": 14,
- "height": 11,
- "visible": 0,
- "layer_id": 2857,
- "group_layer_id": 2927
- },
- {
- "name": "悲2",
- "left": 272,
- "top": 435,
- "width": 15,
- "height": 12,
- "visible": 0,
- "layer_id": 2862,
- "group_layer_id": 2927
- },
- {
- "name": "泣1",
- "left": 270,
- "top": 431,
- "width": 21,
- "height": 17,
- "visible": 0,
- "layer_id": 2869,
- "group_layer_id": 2927
- },
- {
- "name": "泣2",
- "left": 270,
- "top": 433,
- "width": 22,
- "height": 13,
- "visible": 0,
- "layer_id": 2876,
- "group_layer_id": 2927
- },
- {
- "name": "驚1",
- "left": 272,
- "top": 432,
- "width": 14,
- "height": 16,
- "visible": 0,
- "layer_id": 2881,
- "group_layer_id": 2927
- },
- {
- "name": "驚2",
- "left": 268,
- "top": 427,
- "width": 26,
- "height": 25,
- "visible": 0,
- "layer_id": 2886,
- "group_layer_id": 2927
- },
- {
- "name": "照1",
- "left": 269,
- "top": 431,
- "width": 20,
- "height": 15,
- "visible": 0,
- "layer_id": 2892,
- "group_layer_id": 2927
- },
- {
- "name": "照2",
- "left": 268,
- "top": 430,
- "width": 23,
- "height": 19,
- "visible": 0,
- "layer_id": 2897,
- "group_layer_id": 2927
- },
- {
- "name": "えっへん",
- "left": 269,
- "top": 429,
- "width": 22,
- "height": 20,
- "visible": 0,
- "layer_id": 2903,
- "group_layer_id": 2927
- },
- {
- "name": "ギャグ笑",
- "left": 267,
- "top": 427,
- "width": 26,
- "height": 24,
- "visible": 0,
- "layer_id": 2909,
- "group_layer_id": 2927
- },
- {
- "name": "ギャグ怒",
- "left": 270,
- "top": 430,
- "width": 20,
- "height": 16,
- "visible": 0,
- "layer_id": 2914,
- "group_layer_id": 2927
- },
- {
- "name": "ギャグ泣",
- "left": 270,
- "top": 434,
- "width": 19,
- "height": 11,
- "visible": 0,
- "layer_id": 2917,
- "group_layer_id": 2927
- },
- {
- "name": "ギャグ驚",
- "left": 267,
- "top": 427,
- "width": 25,
- "height": 24,
- "visible": 0,
- "layer_id": 2921,
- "group_layer_id": 2927
- },
- {
- "name": "G頬",
- "left": 249,
- "top": 415,
- "width": 59,
- "height": 28,
- "visible": 0,
- "layer_id": 813,
- "group_layer_id": 2314
- },
- {
- "name": "頬1",
- "left": 246,
- "top": 410,
- "width": 65,
- "height": 35,
- "visible": 0,
- "layer_id": 2369,
- "group_layer_id": 2314
- },
- {
- "name": "頬2",
- "left": 245,
- "top": 410,
- "width": 66,
- "height": 35,
- "visible": 0,
- "layer_id": 2364,
- "group_layer_id": 2314
- },
- {
- "name": "頬3",
- "left": 245,
- "top": 408,
- "width": 66,
- "height": 38,
- "visible": 0,
- "layer_id": 2360,
- "group_layer_id": 2314
- },
- {
- "name": "頬4",
- "left": 242,
- "top": 406,
- "width": 69,
- "height": 44,
- "visible": 1,
- "layer_id": 2356,
- "group_layer_id": 2314
- },
- {
- "name": "頬5",
- "left": 245,
- "top": 410,
- "width": 66,
- "height": 36,
- "visible": 0,
- "layer_id": 2352,
- "group_layer_id": 2314
- },
- {
- "name": "斜め1",
- "left": 148,
- "top": 323,
- "width": 309,
- "height": 600,
- "visible": 1,
- "layer_id": 2346,
- "group_layer_id": 2086
- },
- {
- "name": "斜め2",
- "left": 148,
- "top": 323,
- "width": 309,
- "height": 600,
- "visible": 0,
- "layer_id": 2345,
- "group_layer_id": 2086
- },
- {
- "name": "斜め1",
- "left": 147,
- "top": 323,
- "width": 313,
- "height": 600,
- "visible": 1,
- "layer_id": 2934,
- "group_layer_id": 2090
- },
- {
- "name": "斜め2",
- "left": 147,
- "top": 323,
- "width": 313,
- "height": 600,
- "visible": 1,
- "layer_id": 2933,
- "group_layer_id": 2090
- },
- {
- "name": "斜め1",
- "left": 137,
- "top": 323,
- "width": 367,
- "height": 602,
- "visible": 1,
- "layer_id": 2340,
- "group_layer_id": 2094
- },
- {
- "name": "斜め2",
- "left": 137,
- "top": 323,
- "width": 367,
- "height": 602,
- "visible": 1,
- "layer_id": 2339,
- "group_layer_id": 2094
- },
- {
- "name": "斜め1",
- "left": 148,
- "top": 323,
- "width": 294,
- "height": 599,
- "visible": 0,
- "layer_id": 2338,
- "group_layer_id": 2098
- },
- {
- "name": "斜め2",
- "left": 148,
- "top": 323,
- "width": 290,
- "height": 599,
- "visible": 1,
- "layer_id": 2337,
- "group_layer_id": 2098
- },
- {
- "name": "汗",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2931,
- "group_layer_id": 974
- },
- {
- "name": "眉",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2923,
- "group_layer_id": 974
- },
- {
- "name": "目",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 1,
- "layer_id": 2925,
- "group_layer_id": 974
- },
- {
- "name": "口",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2927,
- "group_layer_id": 974
- },
- {
- "name": "頬",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2314,
- "group_layer_id": 975
- },
- {
- "name": "喫茶店服",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2086,
- "group_layer_id": 975
- },
- {
- "name": "パジャマ",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2090,
- "group_layer_id": 975
- },
- {
- "name": "私服2",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 0,
- "layer_id": 2094,
- "group_layer_id": 975
- },
- {
- "name": "私服1",
- "left": 0,
- "top": 0,
- "width": 0,
- "height": 0,
- "visible": 1,
- "layer_id": 2098,
- "group_layer_id": 975
- }
-]
\ No newline at end of file
diff --git a/src/components/setting-panel/components/Loli.vue b/src/components/setting-panel/components/Loli.vue
index ba31c544..1c8db00c 100644
--- a/src/components/setting-panel/components/Loli.vue
+++ b/src/components/setting-panel/components/Loli.vue
@@ -1,5 +1,5 @@
@@ -72,7 +72,7 @@ onMounted(() => {
position: absolute;
z-index: 9999;
top: -270px;
- left: 150px;
+ left: 130px;
}
.body {
position: absolute;
diff --git a/src/hooks/useLoli.ts b/src/hooks/useLoli.ts
new file mode 100644
index 00000000..eff05f3d
--- /dev/null
+++ b/src/hooks/useLoli.ts
@@ -0,0 +1,80 @@
+import { useKUNGalgameUserStore } from '@/store/modules/kungalgamer'
+
+// 这里比较怪异,buffer 上有个 data 属性,不知道哪里来的
+interface LoliBuffer {
+ data: Uint8Array
+}
+
+export interface LoliData {
+ loliBodyLeft: string
+ loliBodyTop: string
+ loliEyeLeft: string
+ loliEyeTop: string
+ loliBrowLeft: string
+ loliBrowTop: string
+ loliMouthLeft: string
+ loliMouthTop: string
+ loliFaceLeft: string
+ loliFaceTop: string
+
+ body: LoliBuffer
+ eye: LoliBuffer
+ brow: LoliBuffer
+ mouth: LoliBuffer
+ face: LoliBuffer
+}
+
+export type LoliDataResponseData = KUNGalgameResponseData
+
+const fetchGetLoliData = async (): Promise<
+ KUNGalgameResponseData
+> => {
+ const baseUrl = import.meta.env.VITE_API_BASE_URL
+ const url = `/loli/image`
+ const fullUrl = `${baseUrl}${url}`
+ const response = await fetch(fullUrl, {
+ method: 'GET',
+ headers: {
+ Authorization: `Bearer ${useKUNGalgameUserStore().getToken()}`,
+ },
+ })
+
+ return await response.json()
+}
+
+// 这里不缓存 loli 数据了,不然 indexdb 数据太多了太难看了
+const createImageUrl = (imageBuffer: LoliBuffer) => {
+ const uint8Array = new Uint8Array(imageBuffer.data)
+ const blob = new Blob([uint8Array], { type: 'image/webp' })
+ return URL.createObjectURL(blob)
+}
+
+export const useLoliDataURL = async () => {
+ const loliData = (await fetchGetLoliData()).data
+
+ const imageUrls = [
+ createImageUrl(loliData.body),
+ createImageUrl(loliData.eye),
+ createImageUrl(loliData.brow),
+ createImageUrl(loliData.mouth),
+ createImageUrl(loliData.face),
+ ]
+
+ return {
+ loliBodyLeft: loliData.loliBodyLeft,
+ loliBodyTop: loliData.loliBodyTop,
+ loliEyeLeft: loliData.loliEyeLeft,
+ loliEyeTop: loliData.loliEyeTop,
+ loliBrowLeft: loliData.loliBrowLeft,
+ loliBrowTop: loliData.loliBrowTop,
+ loliMouthLeft: loliData.loliMouthLeft,
+ loliMouthTop: loliData.loliMouthTop,
+ loliFaceLeft: loliData.loliFaceLeft,
+ loliFaceTop: loliData.loliFaceTop,
+ body: imageUrls[0],
+ eye: imageUrls[1],
+ brow: imageUrls[2],
+ mouth: imageUrls[3],
+ face: imageUrls[4],
+ }
+}
diff --git a/src/utils/loli.ts b/src/utils/loli.ts
deleted file mode 100644
index 78791bb8..00000000
--- a/src/utils/loli.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-/* KUNGalgame 全局看板娘数据的读取文件 */
-
-// 读取 JSON 文件数据
-import loliData from '@/assets/images/ren/ren.json'
-
-/* 随机数 */
-import { randomNum } from './random'
-
-export const getLoli = () => {
- // 获取本地图片文件,注意这里不能用 @ 作为基础路径,只能用 ..
- const getAssetsFile = (url: number) => {
- return new URL(`../assets/images/ren/${url}.webp`, import.meta.url).href
- }
-
- /* 随机汗水 ? */
- // const randomSweat = randomNum(0, 1)
- /* 随机眉毛 */
- const randomBrow = randomNum(1, 18)
-
- /* 随机眼睛 */
- const randomEye = randomNum(19, 36)
-
- /* 随机嘴巴 */
- const randomMouth = randomNum(37, 56)
-
- /* 随机腮红 */
- const randomFace = randomNum(57, 62)
-
- /* 随机衣服 */
- const randomSkirt = randomNum(63, 70)
-
- // 定义一个 loli 对象
- const loli = {
- lass: loliData[randomSkirt],
- eye: loliData[randomEye],
- brow: loliData[randomBrow],
- mouth: loliData[randomMouth],
- face: loliData[randomFace],
- }
-
- // 身体定位
- const loliBodyLeft = loli.lass.left + 'px'
- const loliBodyTop = loli.lass.top + 'px'
-
- // 眼睛定位
- const loliEyeLeft = loli.eye.left + 'px'
- const loliEyeTop = loli.eye.top + 'px'
-
- // 眉毛定位
- const loliBrowLeft = loli.brow.left + 'px'
- const loliBrowTop = loli.brow.top + 'px'
-
- // 嘴巴定位
- const loliMouthLeft = loli.mouth.left + 'px'
- const loliMouthTop = loli.mouth.top + 'px'
-
- // 腮红定位
- const loliFaceLeft = loli.face.left + 'px'
- const loliFaceTop = loli.face.top + 'px'
-
- // 身体的图片资源链接
- const body = getAssetsFile(loli.lass.layer_id)
-
- // 眼睛的图片资源链接
- const eye = getAssetsFile(loli.eye.layer_id)
-
- // 眉毛的图片资源链接
- const brow = getAssetsFile(loli.brow.layer_id)
-
- // 嘴巴的图片资源链接
- const mouth = getAssetsFile(loli.mouth.layer_id)
-
- // 腮红的图片资源链接
- const face = getAssetsFile(loli.face.layer_id)
-
- // 导出模块
- return {
- loliBodyLeft,
- loliBodyTop,
- loliEyeLeft,
- loliEyeTop,
- loliBrowLeft,
- loliBrowTop,
- loliMouthLeft,
- loliMouthTop,
- loliFaceLeft,
- loliFaceTop,
- body,
- eye,
- brow,
- mouth,
- face,
- }
-}