diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c15aa4b3..adfd29853 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1700,6 +1700,128 @@ set(EXPECTED_DATA skins/whis.png skins/x_ninja.png skins/x_spec.png + skins7/beaver.json + skins7/bluekitty.json + skins7/bluestripe.json + skins7/body/bat.png + skins7/body/bear.png + skins7/body/beaver.png + skins7/body/dog.png + skins7/body/force.png + skins7/body/fox.png + skins7/body/hippo.png + skins7/body/kitty.png + skins7/body/koala.png + skins7/body/monkey.png + skins7/body/mouse.png + skins7/body/piglet.png + skins7/body/raccoon.png + skins7/body/spiky.png + skins7/body/standard.png + skins7/body/x_ninja.png + skins7/bot.png + skins7/brownbear.json + skins7/bumbler.json + skins7/cammo.json + skins7/cammostripes.json + skins7/cavebat.json + skins7/decoration/hair.png + skins7/decoration/twinbopp.png + skins7/decoration/twinmello.png + skins7/decoration/twinpen.png + skins7/decoration/unibop.png + skins7/decoration/unimelo.png + skins7/decoration/unipento.png + skins7/default.json + skins7/eyes/colorable.png + skins7/eyes/negative.png + skins7/eyes/standard.png + skins7/eyes/standardreal.png + skins7/eyes/x_ninja.png + skins7/feet/standard.png + skins7/force.json + skins7/fox.json + skins7/greycoon.json + skins7/greyfox.json + skins7/hands/standard.png + skins7/hippo.json + skins7/koala.json + skins7/limedog.json + skins7/limekitty.json + skins7/marking/bear.png + skins7/marking/belly1.png + skins7/marking/belly2.png + skins7/marking/blush.png + skins7/marking/bug.png + skins7/marking/cammo1.png + skins7/marking/cammo2.png + skins7/marking/cammostripes.png + skins7/marking/coonfluff.png + skins7/marking/donny.png + skins7/marking/downdony.png + skins7/marking/duodonny.png + skins7/marking/fox.png + skins7/marking/hipbel.png + skins7/marking/lowcross.png + skins7/marking/lowpaint.png + skins7/marking/marksman.png + skins7/marking/mice.png + skins7/marking/mixture1.png + skins7/marking/mixture2.png + skins7/marking/monkey.png + skins7/marking/panda1.png + skins7/marking/panda2.png + skins7/marking/purelove.png + skins7/marking/saddo.png + skins7/marking/setisu.png + skins7/marking/sidemarks.png + skins7/marking/singu.png + skins7/marking/stripe.png + skins7/marking/striped.png + skins7/marking/stripes.png + skins7/marking/stripes2.png + skins7/marking/thunder.png + skins7/marking/tiger1.png + skins7/marking/tiger2.png + skins7/marking/toptri.png + skins7/marking/triangular.png + skins7/marking/tricircular.png + skins7/marking/tripledon.png + skins7/marking/tritri.png + skins7/marking/twinbelly.png + skins7/marking/twincross.png + skins7/marking/twintri.png + skins7/marking/uppy.png + skins7/marking/warpaint.png + skins7/marking/warstripes.png + skins7/marking/whisker.png + skins7/marking/wildpaint.png + skins7/marking/wildpatch.png + skins7/marking/yinyang.png + skins7/monkey.json + skins7/paintgre.json + skins7/pandabear.json + skins7/panther.json + skins7/pento.json + skins7/piggy.json + skins7/pinky.json + skins7/raccoon.json + skins7/redbopp.json + skins7/redstripe.json + skins7/saddo.json + skins7/setisu.json + skins7/snowti.json + skins7/spiky.json + skins7/swardy.json + skins7/tiger.json + skins7/tooxy.json + skins7/toptri.json + skins7/twinbop.json + skins7/twintri.json + skins7/warmouse.json + skins7/warpaint.json + skins7/x_ninja.json + skins7/xmas_hat.png strong_weak.png themes/auto.png themes/autumn.png diff --git a/data/skins7/beaver.json b/data/skins7/beaver.json new file mode 100644 index 000000000..a9a3c4bfe --- /dev/null +++ b/data/skins7/beaver.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "beaver", + "custom_colors": "true", + "hue": 19, + "sat": 105, + "lgt": 85 + }, + "marking": { + "filename": "twinbelly", + "custom_colors": "true", + "hue": 32, + "sat": 59, + "lgt": 209, + "alp": 198 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 133, + "lgt": 121 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 17, + "sat": 129, + "lgt": 38 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 23, + "sat": 202, + "lgt": 45 + }} +} diff --git a/data/skins7/bluekitty.json b/data/skins7/bluekitty.json new file mode 100644 index 000000000..6951315b9 --- /dev/null +++ b/data/skins7/bluekitty.json @@ -0,0 +1,40 @@ +{ + "skin": { + "body": { + "filename": "kitty", + "custom_colors": true, + "hue": 132, + "sat": 118, + "lgt": 184 + }, + "marking": { + "filename": "whisker", + "custom_colors": true, + "hue": 130, + "sat": 109, + "lgt": 219, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": true, + "hue": 120, + "sat": 82, + "lgt": 235 + }, + "feet": { + "filename": "standard", + "custom_colors": true, + "hue": 135, + "sat": 82, + "lgt": 233 + }, + "eyes": { + "filename": "negative", + "custom_colors": true, + "hue": 137, + "sat": 255, + "lgt": 0 + } + } +} diff --git a/data/skins7/bluestripe.json b/data/skins7/bluestripe.json new file mode 100644 index 000000000..f2f90f48c --- /dev/null +++ b/data/skins7/bluestripe.json @@ -0,0 +1,31 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 155, + "sat": 116, + "lgt": 122 + }, + "marking": { + "filename": "stripes", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 11, + "sat": 117, + "lgt": 0 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 29, + "sat": 173, + "lgt": 87 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/body/bat.png b/data/skins7/body/bat.png new file mode 100644 index 000000000..1e9da2647 Binary files /dev/null and b/data/skins7/body/bat.png differ diff --git a/data/skins7/body/bear.png b/data/skins7/body/bear.png new file mode 100644 index 000000000..f4ad63ed5 Binary files /dev/null and b/data/skins7/body/bear.png differ diff --git a/data/skins7/body/beaver.png b/data/skins7/body/beaver.png new file mode 100644 index 000000000..4e9e7c492 Binary files /dev/null and b/data/skins7/body/beaver.png differ diff --git a/data/skins7/body/dog.png b/data/skins7/body/dog.png new file mode 100644 index 000000000..e09936861 Binary files /dev/null and b/data/skins7/body/dog.png differ diff --git a/data/skins7/body/force.png b/data/skins7/body/force.png new file mode 100644 index 000000000..00fe21c86 Binary files /dev/null and b/data/skins7/body/force.png differ diff --git a/data/skins7/body/fox.png b/data/skins7/body/fox.png new file mode 100644 index 000000000..d37981466 Binary files /dev/null and b/data/skins7/body/fox.png differ diff --git a/data/skins7/body/hippo.png b/data/skins7/body/hippo.png new file mode 100644 index 000000000..35370aaef Binary files /dev/null and b/data/skins7/body/hippo.png differ diff --git a/data/skins7/body/kitty.png b/data/skins7/body/kitty.png new file mode 100644 index 000000000..d1bfaf742 Binary files /dev/null and b/data/skins7/body/kitty.png differ diff --git a/data/skins7/body/koala.png b/data/skins7/body/koala.png new file mode 100644 index 000000000..85d58d255 Binary files /dev/null and b/data/skins7/body/koala.png differ diff --git a/data/skins7/body/monkey.png b/data/skins7/body/monkey.png new file mode 100644 index 000000000..361d9a153 Binary files /dev/null and b/data/skins7/body/monkey.png differ diff --git a/data/skins7/body/mouse.png b/data/skins7/body/mouse.png new file mode 100644 index 000000000..1784adc0f Binary files /dev/null and b/data/skins7/body/mouse.png differ diff --git a/data/skins7/body/piglet.png b/data/skins7/body/piglet.png new file mode 100644 index 000000000..935bb12bc Binary files /dev/null and b/data/skins7/body/piglet.png differ diff --git a/data/skins7/body/raccoon.png b/data/skins7/body/raccoon.png new file mode 100644 index 000000000..bab32b4cb Binary files /dev/null and b/data/skins7/body/raccoon.png differ diff --git a/data/skins7/body/spiky.png b/data/skins7/body/spiky.png new file mode 100644 index 000000000..2fa3cf857 Binary files /dev/null and b/data/skins7/body/spiky.png differ diff --git a/data/skins7/body/standard.png b/data/skins7/body/standard.png new file mode 100644 index 000000000..6f0bcfcf6 Binary files /dev/null and b/data/skins7/body/standard.png differ diff --git a/data/skins7/body/x_ninja.png b/data/skins7/body/x_ninja.png new file mode 100644 index 000000000..aff5afbf3 Binary files /dev/null and b/data/skins7/body/x_ninja.png differ diff --git a/data/skins7/bot.png b/data/skins7/bot.png new file mode 100644 index 000000000..8b8ac416b Binary files /dev/null and b/data/skins7/bot.png differ diff --git a/data/skins7/brownbear.json b/data/skins7/brownbear.json new file mode 100644 index 000000000..09bbd0332 --- /dev/null +++ b/data/skins7/brownbear.json @@ -0,0 +1,39 @@ +{"skin": { + "body": { + "filename": "bear", + "custom_colors": "true", + "hue": 16, + "sat": 133, + "lgt": 121 + }, + "marking": { + "filename": "bear", + "custom_colors": "true", + "hue": 17, + "sat": 110, + "lgt": 168, + "alp": 255 + }, + "decoration": { + "filename": "hair", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 133, + "lgt": 121 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 17, + "sat": 129, + "lgt": 38 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/bumbler.json b/data/skins7/bumbler.json new file mode 100644 index 000000000..069d54589 --- /dev/null +++ b/data/skins7/bumbler.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "raccoon", + "custom_colors": "true", + "hue": 150, + "sat": 16, + "lgt": 29 + }, + "marking": { + "filename": "setisu", + "custom_colors": "true", + "hue": 34, + "sat": 183, + "lgt": 220, + "alp": 96 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 138, + "lgt": 158 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 103, + "lgt": 143 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 28, + "sat": 107, + "lgt": 54 + }} +} diff --git a/data/skins7/cammo.json b/data/skins7/cammo.json new file mode 100644 index 000000000..c28689c1b --- /dev/null +++ b/data/skins7/cammo.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 81, + "sat": 101, + "lgt": 70 + }, + "marking": { + "filename": "cammo2", + "custom_colors": "true", + "hue": 76, + "sat": 97, + "lgt": 45, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 11, + "sat": 117, + "lgt": 0 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 29, + "sat": 173, + "lgt": 87 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/cammostripes.json b/data/skins7/cammostripes.json new file mode 100644 index 000000000..71d6d4186 --- /dev/null +++ b/data/skins7/cammostripes.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 81, + "sat": 101, + "lgt": 70 + }, + "marking": { + "filename": "cammostripes", + "custom_colors": "true", + "hue": 29, + "sat": 142, + "lgt": 0, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 11, + "sat": 117, + "lgt": 0 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 29, + "sat": 173, + "lgt": 87 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/cavebat.json b/data/skins7/cavebat.json new file mode 100644 index 000000000..e2d72dafb --- /dev/null +++ b/data/skins7/cavebat.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "bat", + "custom_colors": "true", + "hue": 16, + "sat": 167, + "lgt": 185 + }, + "marking": { + "filename": "belly2", + "custom_colors": "true", + "hue": 10, + "sat": 39, + "lgt": 45, + "alp": 152 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 10, + "sat": 45, + "lgt": 72 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 14, + "sat": 123, + "lgt": 156 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 8, + "sat": 112, + "lgt": 47 + }} +} diff --git a/data/skins7/decoration/hair.png b/data/skins7/decoration/hair.png new file mode 100644 index 000000000..d7b97d5d4 Binary files /dev/null and b/data/skins7/decoration/hair.png differ diff --git a/data/skins7/decoration/twinbopp.png b/data/skins7/decoration/twinbopp.png new file mode 100644 index 000000000..5c1de1a87 Binary files /dev/null and b/data/skins7/decoration/twinbopp.png differ diff --git a/data/skins7/decoration/twinmello.png b/data/skins7/decoration/twinmello.png new file mode 100644 index 000000000..677e09154 Binary files /dev/null and b/data/skins7/decoration/twinmello.png differ diff --git a/data/skins7/decoration/twinpen.png b/data/skins7/decoration/twinpen.png new file mode 100644 index 000000000..9c640f37f Binary files /dev/null and b/data/skins7/decoration/twinpen.png differ diff --git a/data/skins7/decoration/unibop.png b/data/skins7/decoration/unibop.png new file mode 100644 index 000000000..6b6435d50 Binary files /dev/null and b/data/skins7/decoration/unibop.png differ diff --git a/data/skins7/decoration/unimelo.png b/data/skins7/decoration/unimelo.png new file mode 100644 index 000000000..2b86882ed Binary files /dev/null and b/data/skins7/decoration/unimelo.png differ diff --git a/data/skins7/decoration/unipento.png b/data/skins7/decoration/unipento.png new file mode 100644 index 000000000..9f39b858a Binary files /dev/null and b/data/skins7/decoration/unipento.png differ diff --git a/data/skins7/default.json b/data/skins7/default.json new file mode 100644 index 000000000..c43f9fa7e --- /dev/null +++ b/data/skins7/default.json @@ -0,0 +1,27 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 111, + "lgt": 116 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 117, + "lgt": 158 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 135, + "lgt": 62 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/eyes/colorable.png b/data/skins7/eyes/colorable.png new file mode 100644 index 000000000..3b2cad4a8 Binary files /dev/null and b/data/skins7/eyes/colorable.png differ diff --git a/data/skins7/eyes/negative.png b/data/skins7/eyes/negative.png new file mode 100644 index 000000000..411188be7 Binary files /dev/null and b/data/skins7/eyes/negative.png differ diff --git a/data/skins7/eyes/standard.png b/data/skins7/eyes/standard.png new file mode 100644 index 000000000..eebee95a9 Binary files /dev/null and b/data/skins7/eyes/standard.png differ diff --git a/data/skins7/eyes/standardreal.png b/data/skins7/eyes/standardreal.png new file mode 100644 index 000000000..2c1fa80bd Binary files /dev/null and b/data/skins7/eyes/standardreal.png differ diff --git a/data/skins7/eyes/x_ninja.png b/data/skins7/eyes/x_ninja.png new file mode 100644 index 000000000..615acbc92 Binary files /dev/null and b/data/skins7/eyes/x_ninja.png differ diff --git a/data/skins7/feet/standard.png b/data/skins7/feet/standard.png new file mode 100644 index 000000000..0bbfe75e3 Binary files /dev/null and b/data/skins7/feet/standard.png differ diff --git a/data/skins7/force.json b/data/skins7/force.json new file mode 100644 index 000000000..da511e6c4 --- /dev/null +++ b/data/skins7/force.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "force", + "custom_colors": "true", + "hue": 24, + "sat": 19, + "lgt": 52 + }, + "marking": { + "filename": "wildpaint", + "custom_colors": "true", + "hue": 30, + "sat": 54, + "lgt": 3, + "alp": 54 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 63 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 0, + "lgt": 0 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 0 + }} +} diff --git a/data/skins7/fox.json b/data/skins7/fox.json new file mode 100644 index 000000000..c54419959 --- /dev/null +++ b/data/skins7/fox.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "fox", + "custom_colors": "true", + "hue": 16, + "sat": 210, + "lgt": 107 + }, + "marking": { + "filename": "fox", + "custom_colors": "true", + "hue": 16, + "sat": 255, + "lgt": 242, + "alp": 227 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 180, + "lgt": 99 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 210, + "lgt": 114 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 21, + "sat": 255, + "lgt": 96 + }} +} diff --git a/data/skins7/greycoon.json b/data/skins7/greycoon.json new file mode 100644 index 000000000..44a9fa825 --- /dev/null +++ b/data/skins7/greycoon.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "raccoon", + "custom_colors": "true", + "hue": 14, + "sat": 0, + "lgt": 147 + }, + "marking": { + "filename": "coonfluff", + "custom_colors": "true", + "hue": 23, + "sat": 0, + "lgt": 105, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 171 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 19, + "sat": 0, + "lgt": 152 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 143, + "lgt": 50 + }} +} diff --git a/data/skins7/greyfox.json b/data/skins7/greyfox.json new file mode 100644 index 000000000..24068f7f0 --- /dev/null +++ b/data/skins7/greyfox.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "fox", + "custom_colors": "true", + "hue": 16, + "sat": 10, + "lgt": 67 + }, + "marking": { + "filename": "cammostripes", + "custom_colors": "true", + "hue": 23, + "sat": 21, + "lgt": 191, + "alp": 32 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 156, + "sat": 28, + "lgt": 19 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 32, + "sat": 12, + "lgt": 56 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 28, + "sat": 90, + "lgt": 65 + }} +} diff --git a/data/skins7/hands/standard.png b/data/skins7/hands/standard.png new file mode 100644 index 000000000..791ad0b3f Binary files /dev/null and b/data/skins7/hands/standard.png differ diff --git a/data/skins7/hippo.json b/data/skins7/hippo.json new file mode 100644 index 000000000..0d2f41a9d --- /dev/null +++ b/data/skins7/hippo.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "hippo", + "custom_colors": "true", + "hue": 174, + "sat": 176, + "lgt": 183 + }, + "marking": { + "filename": "hipbel", + "custom_colors": "true", + "hue": 191, + "sat": 0, + "lgt": 255, + "alp": 178 + }, + "decoration": { + "filename": "hair", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 189, + "sat": 72, + "lgt": 160 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 209, + "sat": 50, + "lgt": 36 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 198, + "sat": 196, + "lgt": 45 + }} +} diff --git a/data/skins7/koala.json b/data/skins7/koala.json new file mode 100644 index 000000000..08b3cadb7 --- /dev/null +++ b/data/skins7/koala.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "koala", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 184 + }, + "marking": { + "filename": "twinbelly", + "custom_colors": "true", + "hue": 21, + "sat": 12, + "lgt": 226, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 184 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 149, + "sat": 4, + "lgt": 71 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/limedog.json b/data/skins7/limedog.json new file mode 100644 index 000000000..e9e772797 --- /dev/null +++ b/data/skins7/limedog.json @@ -0,0 +1,40 @@ +{ + "skin": { + "body": { + "filename": "dog", + "custom_colors": true, + "hue": 36, + "sat": 185, + "lgt": 169 + }, + "marking": { + "filename": "whisker", + "custom_colors": true, + "hue": 0, + "sat": 153, + "lgt": 255, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": true, + "hue": 12, + "sat": 178, + "lgt": 136 + }, + "feet": { + "filename": "standard", + "custom_colors": true, + "hue": 14, + "sat": 205, + "lgt": 112 + }, + "eyes": { + "filename": "negative", + "custom_colors": true, + "hue": 18, + "sat": 180, + "lgt": 118 + } + } +} diff --git a/data/skins7/limekitty.json b/data/skins7/limekitty.json new file mode 100644 index 000000000..ae66e4ff6 --- /dev/null +++ b/data/skins7/limekitty.json @@ -0,0 +1,40 @@ +{ + "skin": { + "body": { + "filename": "kitty", + "custom_colors": true, + "hue": 70, + "sat": 98, + "lgt": 195 + }, + "marking": { + "filename": "whisker", + "custom_colors": true, + "hue": 69, + "sat": 98, + "lgt": 224, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": true, + "hue": 58, + "sat": 104, + "lgt": 239 + }, + "feet": { + "filename": "standard", + "custom_colors": true, + "hue": 58, + "sat": 104, + "lgt": 239 + }, + "eyes": { + "filename": "negative", + "custom_colors": true, + "hue": 125, + "sat": 250, + "lgt": 0 + } + } +} diff --git a/data/skins7/marking/bear.png b/data/skins7/marking/bear.png new file mode 100644 index 000000000..06c805ed9 Binary files /dev/null and b/data/skins7/marking/bear.png differ diff --git a/data/skins7/marking/belly1.png b/data/skins7/marking/belly1.png new file mode 100644 index 000000000..65eb8d4d0 Binary files /dev/null and b/data/skins7/marking/belly1.png differ diff --git a/data/skins7/marking/belly2.png b/data/skins7/marking/belly2.png new file mode 100644 index 000000000..1c6cdc93b Binary files /dev/null and b/data/skins7/marking/belly2.png differ diff --git a/data/skins7/marking/blush.png b/data/skins7/marking/blush.png new file mode 100644 index 000000000..e579d5303 Binary files /dev/null and b/data/skins7/marking/blush.png differ diff --git a/data/skins7/marking/bug.png b/data/skins7/marking/bug.png new file mode 100644 index 000000000..bfd7e2cf6 Binary files /dev/null and b/data/skins7/marking/bug.png differ diff --git a/data/skins7/marking/cammo1.png b/data/skins7/marking/cammo1.png new file mode 100644 index 000000000..adbfb5566 Binary files /dev/null and b/data/skins7/marking/cammo1.png differ diff --git a/data/skins7/marking/cammo2.png b/data/skins7/marking/cammo2.png new file mode 100644 index 000000000..e194a0367 Binary files /dev/null and b/data/skins7/marking/cammo2.png differ diff --git a/data/skins7/marking/cammostripes.png b/data/skins7/marking/cammostripes.png new file mode 100644 index 000000000..c0519778e Binary files /dev/null and b/data/skins7/marking/cammostripes.png differ diff --git a/data/skins7/marking/coonfluff.png b/data/skins7/marking/coonfluff.png new file mode 100644 index 000000000..fa59bbb88 Binary files /dev/null and b/data/skins7/marking/coonfluff.png differ diff --git a/data/skins7/marking/donny.png b/data/skins7/marking/donny.png new file mode 100644 index 000000000..69197bcb1 Binary files /dev/null and b/data/skins7/marking/donny.png differ diff --git a/data/skins7/marking/downdony.png b/data/skins7/marking/downdony.png new file mode 100644 index 000000000..e489e2192 Binary files /dev/null and b/data/skins7/marking/downdony.png differ diff --git a/data/skins7/marking/duodonny.png b/data/skins7/marking/duodonny.png new file mode 100644 index 000000000..7d3b0e942 Binary files /dev/null and b/data/skins7/marking/duodonny.png differ diff --git a/data/skins7/marking/fox.png b/data/skins7/marking/fox.png new file mode 100644 index 000000000..a36ac49da Binary files /dev/null and b/data/skins7/marking/fox.png differ diff --git a/data/skins7/marking/hipbel.png b/data/skins7/marking/hipbel.png new file mode 100644 index 000000000..703dd4eb6 Binary files /dev/null and b/data/skins7/marking/hipbel.png differ diff --git a/data/skins7/marking/lowcross.png b/data/skins7/marking/lowcross.png new file mode 100644 index 000000000..559dd24b7 Binary files /dev/null and b/data/skins7/marking/lowcross.png differ diff --git a/data/skins7/marking/lowpaint.png b/data/skins7/marking/lowpaint.png new file mode 100644 index 000000000..eeb5bd83a Binary files /dev/null and b/data/skins7/marking/lowpaint.png differ diff --git a/data/skins7/marking/marksman.png b/data/skins7/marking/marksman.png new file mode 100644 index 000000000..ef7c10895 Binary files /dev/null and b/data/skins7/marking/marksman.png differ diff --git a/data/skins7/marking/mice.png b/data/skins7/marking/mice.png new file mode 100644 index 000000000..1607b00f3 Binary files /dev/null and b/data/skins7/marking/mice.png differ diff --git a/data/skins7/marking/mixture1.png b/data/skins7/marking/mixture1.png new file mode 100644 index 000000000..65a3b825b Binary files /dev/null and b/data/skins7/marking/mixture1.png differ diff --git a/data/skins7/marking/mixture2.png b/data/skins7/marking/mixture2.png new file mode 100644 index 000000000..b0741ff06 Binary files /dev/null and b/data/skins7/marking/mixture2.png differ diff --git a/data/skins7/marking/monkey.png b/data/skins7/marking/monkey.png new file mode 100644 index 000000000..c4cb6fe52 Binary files /dev/null and b/data/skins7/marking/monkey.png differ diff --git a/data/skins7/marking/panda1.png b/data/skins7/marking/panda1.png new file mode 100644 index 000000000..0517a8935 Binary files /dev/null and b/data/skins7/marking/panda1.png differ diff --git a/data/skins7/marking/panda2.png b/data/skins7/marking/panda2.png new file mode 100644 index 000000000..c4aaa615a Binary files /dev/null and b/data/skins7/marking/panda2.png differ diff --git a/data/skins7/marking/purelove.png b/data/skins7/marking/purelove.png new file mode 100644 index 000000000..447553526 Binary files /dev/null and b/data/skins7/marking/purelove.png differ diff --git a/data/skins7/marking/saddo.png b/data/skins7/marking/saddo.png new file mode 100644 index 000000000..0540a0c8a Binary files /dev/null and b/data/skins7/marking/saddo.png differ diff --git a/data/skins7/marking/setisu.png b/data/skins7/marking/setisu.png new file mode 100644 index 000000000..6b4196ac9 Binary files /dev/null and b/data/skins7/marking/setisu.png differ diff --git a/data/skins7/marking/sidemarks.png b/data/skins7/marking/sidemarks.png new file mode 100644 index 000000000..c0ab94463 Binary files /dev/null and b/data/skins7/marking/sidemarks.png differ diff --git a/data/skins7/marking/singu.png b/data/skins7/marking/singu.png new file mode 100644 index 000000000..56e6c432a Binary files /dev/null and b/data/skins7/marking/singu.png differ diff --git a/data/skins7/marking/stripe.png b/data/skins7/marking/stripe.png new file mode 100644 index 000000000..5fb8d2693 Binary files /dev/null and b/data/skins7/marking/stripe.png differ diff --git a/data/skins7/marking/striped.png b/data/skins7/marking/striped.png new file mode 100644 index 000000000..c5ccaf7c5 Binary files /dev/null and b/data/skins7/marking/striped.png differ diff --git a/data/skins7/marking/stripes.png b/data/skins7/marking/stripes.png new file mode 100644 index 000000000..77bd4dd0e Binary files /dev/null and b/data/skins7/marking/stripes.png differ diff --git a/data/skins7/marking/stripes2.png b/data/skins7/marking/stripes2.png new file mode 100644 index 000000000..adf0120d1 Binary files /dev/null and b/data/skins7/marking/stripes2.png differ diff --git a/data/skins7/marking/thunder.png b/data/skins7/marking/thunder.png new file mode 100644 index 000000000..d15b03916 Binary files /dev/null and b/data/skins7/marking/thunder.png differ diff --git a/data/skins7/marking/tiger1.png b/data/skins7/marking/tiger1.png new file mode 100644 index 000000000..83303a0e0 Binary files /dev/null and b/data/skins7/marking/tiger1.png differ diff --git a/data/skins7/marking/tiger2.png b/data/skins7/marking/tiger2.png new file mode 100644 index 000000000..aed2bffe1 Binary files /dev/null and b/data/skins7/marking/tiger2.png differ diff --git a/data/skins7/marking/toptri.png b/data/skins7/marking/toptri.png new file mode 100644 index 000000000..25549ae3d Binary files /dev/null and b/data/skins7/marking/toptri.png differ diff --git a/data/skins7/marking/triangular.png b/data/skins7/marking/triangular.png new file mode 100644 index 000000000..3eef5a07b Binary files /dev/null and b/data/skins7/marking/triangular.png differ diff --git a/data/skins7/marking/tricircular.png b/data/skins7/marking/tricircular.png new file mode 100644 index 000000000..18df60379 Binary files /dev/null and b/data/skins7/marking/tricircular.png differ diff --git a/data/skins7/marking/tripledon.png b/data/skins7/marking/tripledon.png new file mode 100644 index 000000000..5b899d5d1 Binary files /dev/null and b/data/skins7/marking/tripledon.png differ diff --git a/data/skins7/marking/tritri.png b/data/skins7/marking/tritri.png new file mode 100644 index 000000000..28d90a60a Binary files /dev/null and b/data/skins7/marking/tritri.png differ diff --git a/data/skins7/marking/twinbelly.png b/data/skins7/marking/twinbelly.png new file mode 100644 index 000000000..7d5d51927 Binary files /dev/null and b/data/skins7/marking/twinbelly.png differ diff --git a/data/skins7/marking/twincross.png b/data/skins7/marking/twincross.png new file mode 100644 index 000000000..9a47093c9 Binary files /dev/null and b/data/skins7/marking/twincross.png differ diff --git a/data/skins7/marking/twintri.png b/data/skins7/marking/twintri.png new file mode 100644 index 000000000..61da03ce2 Binary files /dev/null and b/data/skins7/marking/twintri.png differ diff --git a/data/skins7/marking/uppy.png b/data/skins7/marking/uppy.png new file mode 100644 index 000000000..9a31ddd50 Binary files /dev/null and b/data/skins7/marking/uppy.png differ diff --git a/data/skins7/marking/warpaint.png b/data/skins7/marking/warpaint.png new file mode 100644 index 000000000..e403b5adf Binary files /dev/null and b/data/skins7/marking/warpaint.png differ diff --git a/data/skins7/marking/warstripes.png b/data/skins7/marking/warstripes.png new file mode 100644 index 000000000..bed937b08 Binary files /dev/null and b/data/skins7/marking/warstripes.png differ diff --git a/data/skins7/marking/whisker.png b/data/skins7/marking/whisker.png new file mode 100644 index 000000000..a96b1c920 Binary files /dev/null and b/data/skins7/marking/whisker.png differ diff --git a/data/skins7/marking/wildpaint.png b/data/skins7/marking/wildpaint.png new file mode 100644 index 000000000..ccad83538 Binary files /dev/null and b/data/skins7/marking/wildpaint.png differ diff --git a/data/skins7/marking/wildpatch.png b/data/skins7/marking/wildpatch.png new file mode 100644 index 000000000..9b1a03d49 Binary files /dev/null and b/data/skins7/marking/wildpatch.png differ diff --git a/data/skins7/marking/yinyang.png b/data/skins7/marking/yinyang.png new file mode 100644 index 000000000..caf6a6e87 Binary files /dev/null and b/data/skins7/marking/yinyang.png differ diff --git a/data/skins7/monkey.json b/data/skins7/monkey.json new file mode 100644 index 000000000..224fbdd10 --- /dev/null +++ b/data/skins7/monkey.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "monkey", + "custom_colors": "true", + "hue": 21, + "sat": 175, + "lgt": 196 + }, + "marking": { + "filename": "monkey", + "custom_colors": "true", + "hue": 22, + "sat": 132, + "lgt": 50, + "alp": 255 + }, + "decoration": { + "filename": "hair", + "custom_colors": "true", + "hue": 35, + "sat": 230, + "lgt": 155 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 25, + "sat": 82, + "lgt": 144 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 19, + "sat": 113, + "lgt": 175 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/paintgre.json b/data/skins7/paintgre.json new file mode 100644 index 000000000..d534c2eb7 --- /dev/null +++ b/data/skins7/paintgre.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 36, + "sat": 154, + "lgt": 106 + }, + "marking": { + "filename": "lowpaint", + "custom_colors": "true", + "hue": 52, + "sat": 255, + "lgt": 255, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 39, + "sat": 171, + "lgt": 139 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 32, + "sat": 132, + "lgt": 59 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/pandabear.json b/data/skins7/pandabear.json new file mode 100644 index 000000000..11caa1029 --- /dev/null +++ b/data/skins7/pandabear.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "bear", + "custom_colors": "true", + "hue": 150, + "sat": 16, + "lgt": 78 + }, + "marking": { + "filename": "panda1", + "custom_colors": "true", + "hue": 158, + "sat": 42, + "lgt": 233, + "alp": 255 + }, + "decoration": { + "filename": "hair", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 158 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 0, + "lgt": 62 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 160, + "lgt": 255 + }} +} diff --git a/data/skins7/panther.json b/data/skins7/panther.json new file mode 100644 index 000000000..844a28608 --- /dev/null +++ b/data/skins7/panther.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "kitty", + "custom_colors": "true", + "hue": 165, + "sat": 0, + "lgt": 0 + }, + "marking": { + "filename": "wildpaint", + "custom_colors": "true", + "hue": 0, + "sat": 255, + "lgt": 255, + "alp": 43 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 16 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 0, + "lgt": 54 + }, + "eyes": { + "filename": "negative", + "custom_colors": "true", + "hue": 32, + "sat": 255, + "lgt": 59 + }} +} diff --git a/data/skins7/pento.json b/data/skins7/pento.json new file mode 100644 index 000000000..20b7921e8 --- /dev/null +++ b/data/skins7/pento.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 158, + "sat": 178, + "lgt": 123 + }, + "marking": { + "filename": "triplate", + "custom_colors": "true", + "hue": 0, + "sat": 255, + "lgt": 255, + "alp": 209 + }, + "decoration": { + "filename": "unipento", + "custom_colors": "true", + "hue": 158, + "sat": 178, + "lgt": 123 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 184 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 152, + "sat": 137, + "lgt": 157 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/piggy.json b/data/skins7/piggy.json new file mode 100644 index 000000000..c1deb4cf6 --- /dev/null +++ b/data/skins7/piggy.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "piglet", + "custom_colors": "true", + "hue": 251, + "sat": 220, + "lgt": 180 + }, + "marking": { + "filename": "hipbel", + "custom_colors": "true", + "hue": 3, + "sat": 101, + "lgt": 112, + "alp": 171 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 249, + "sat": 189, + "lgt": 147 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 252, + "sat": 180, + "lgt": 143 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 0, + "sat": 255, + "lgt": 128 + }} +} diff --git a/data/skins7/pinky.json b/data/skins7/pinky.json new file mode 100644 index 000000000..c6a68e805 --- /dev/null +++ b/data/skins7/pinky.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 242, + "sat": 201, + "lgt": 187 + }, + "marking": { + "filename": "whisker", + "custom_colors": "true", + "hue": 243, + "sat": 198, + "lgt": 214, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 229, + "sat": 137, + "lgt": 218 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 229, + "sat": 137, + "lgt": 218 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/raccoon.json b/data/skins7/raccoon.json new file mode 100644 index 000000000..44a82f4da --- /dev/null +++ b/data/skins7/raccoon.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "raccoon", + "custom_colors": "true", + "hue": 16, + "sat": 133, + "lgt": 121 + }, + "marking": { + "filename": "coonfluff", + "custom_colors": "true", + "hue": 17, + "sat": 110, + "lgt": 54, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 16, + "sat": 133, + "lgt": 121 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 17, + "sat": 129, + "lgt": 38 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 23, + "sat": 196, + "lgt": 45 + }} +} diff --git a/data/skins7/redbopp.json b/data/skins7/redbopp.json new file mode 100644 index 000000000..db74aca51 --- /dev/null +++ b/data/skins7/redbopp.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 246, + "sat": 216, + "lgt": 108 + }, + "marking": { + "filename": "donny", + "custom_colors": "true", + "hue": 2, + "sat": 217, + "lgt": 202, + "alp": 255 + }, + "decoration": { + "filename": "unibop", + "custom_colors": "true", + "hue": 246, + "sat": 216, + "lgt": 108 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 246, + "sat": 216, + "lgt": 108 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 116, + "sat": 85, + "lgt": 233 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/redstripe.json b/data/skins7/redstripe.json new file mode 100644 index 000000000..1950ddaf6 --- /dev/null +++ b/data/skins7/redstripe.json @@ -0,0 +1,31 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 248, + "sat": 214, + "lgt": 123 + }, + "marking": { + "filename": "stripe", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 184 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 149, + "sat": 4, + "lgt": 71 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/saddo.json b/data/skins7/saddo.json new file mode 100644 index 000000000..e3acbdde7 --- /dev/null +++ b/data/skins7/saddo.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 109, + "sat": 109, + "lgt": 127 + }, + "marking": { + "filename": "saddo", + "custom_colors": "true", + "hue": 108, + "sat": 54, + "lgt": 68, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 55, + "sat": 141, + "lgt": 170 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 88, + "sat": 97, + "lgt": 119 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/setisu.json b/data/skins7/setisu.json new file mode 100644 index 000000000..b841f4aec --- /dev/null +++ b/data/skins7/setisu.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 12, + "sat": 255, + "lgt": 52 + }, + "marking": { + "filename": "setisu", + "custom_colors": "true", + "hue": 34, + "sat": 255, + "lgt": 198, + "alp": 178 + }, + "decoration": { + "filename": "hair", + "custom_colors": "true", + "hue": 25, + "sat": 70, + "lgt": 41 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 30, + "sat": 147, + "lgt": 63 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 25, + "sat": 154, + "lgt": 76 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/snowti.json b/data/skins7/snowti.json new file mode 100644 index 000000000..ca8636042 --- /dev/null +++ b/data/skins7/snowti.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "kitty", + "custom_colors": "true", + "hue": 23, + "sat": 0, + "lgt": 255 + }, + "marking": { + "filename": "tiger2", + "custom_colors": "true", + "hue": 28, + "sat": 107, + "lgt": 0, + "alp": 204 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 22, + "sat": 0, + "lgt": 173 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 22, + "sat": 0, + "lgt": 192 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 28, + "sat": 147, + "lgt": 42 + }} +} diff --git a/data/skins7/spiky.json b/data/skins7/spiky.json new file mode 100644 index 000000000..8b7b9c3f0 --- /dev/null +++ b/data/skins7/spiky.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "spiky", + "custom_colors": "true", + "hue": 28, + "sat": 0, + "lgt": 255 + }, + "marking": { + "filename": "warstripes", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 0, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 255 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 135, + "lgt": 255 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 28 + }} +} diff --git a/data/skins7/swardy.json b/data/skins7/swardy.json new file mode 100644 index 000000000..4c1e31902 --- /dev/null +++ b/data/skins7/swardy.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "spiky", + "custom_colors": "true", + "hue": 75, + "sat": 171, + "lgt": 32 + }, + "marking": { + "filename": "duodonny", + "custom_colors": "true", + "hue": 85, + "sat": 52, + "lgt": 189, + "alp": 96 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 85, + "sat": 112, + "lgt": 0 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 85, + "sat": 87, + "lgt": 156 + }, + "eyes": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 178, + "lgt": 94 + }} +} diff --git a/data/skins7/tiger.json b/data/skins7/tiger.json new file mode 100644 index 000000000..c759e5a9f --- /dev/null +++ b/data/skins7/tiger.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "kitty", + "custom_colors": "true", + "hue": 22, + "sat": 210, + "lgt": 107 + }, + "marking": { + "filename": "tiger1", + "custom_colors": "true", + "hue": 19, + "sat": 255, + "lgt": 219, + "alp": 220 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 22, + "sat": 180, + "lgt": 99 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 22, + "sat": 210, + "lgt": 114 + }, + "eyes": { + "filename": "colorable", + "custom_colors": "true", + "hue": 28, + "sat": 255, + "lgt": 0 + }} +} diff --git a/data/skins7/tooxy.json b/data/skins7/tooxy.json new file mode 100644 index 000000000..1a8a0b54e --- /dev/null +++ b/data/skins7/tooxy.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 72, + "sat": 214, + "lgt": 123 + }, + "marking": { + "filename": "wildpaint", + "custom_colors": "true", + "hue": 65, + "sat": 0, + "lgt": 128, + "alp": 218 + }, + "decoration": { + "filename": "unimelo", + "custom_colors": "true", + "hue": 244, + "sat": 0, + "lgt": 140 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 184 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 149, + "sat": 4, + "lgt": 71 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/toptri.json b/data/skins7/toptri.json new file mode 100644 index 000000000..e74314f55 --- /dev/null +++ b/data/skins7/toptri.json @@ -0,0 +1,31 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 93, + "sat": 95, + "lgt": 163 + }, + "marking": { + "filename": "toptri", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 55, + "sat": 141, + "lgt": 170 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 88, + "sat": 97, + "lgt": 119 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/twinbop.json b/data/skins7/twinbop.json new file mode 100644 index 000000000..98d461921 --- /dev/null +++ b/data/skins7/twinbop.json @@ -0,0 +1,42 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 233, + "sat": 158, + "lgt": 183 + }, + "marking": { + "filename": "duodonny", + "custom_colors": "true", + "hue": 231, + "sat": 146, + "lgt": 218, + "alp": 255 + }, + "decoration": { + "filename": "twinbopp", + "custom_colors": "true", + "hue": 233, + "sat": 158, + "lgt": 183 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 233, + "sat": 158, + "lgt": 183 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 146, + "lgt": 224 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/twintri.json b/data/skins7/twintri.json new file mode 100644 index 000000000..440b9d318 --- /dev/null +++ b/data/skins7/twintri.json @@ -0,0 +1,35 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 52, + "sat": 156, + "lgt": 124 + }, + "marking": { + "filename": "twintri", + "custom_colors": "true", + "hue": 40, + "sat": 222, + "lgt": 227, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 185 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 147, + "sat": 4, + "lgt": 72 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/warmouse.json b/data/skins7/warmouse.json new file mode 100644 index 000000000..ecc15c354 --- /dev/null +++ b/data/skins7/warmouse.json @@ -0,0 +1,38 @@ +{"skin": { + "body": { + "filename": "mouse", + "custom_colors": "true", + "hue": 28, + "sat": 0, + "lgt": 213 + }, + "marking": { + "filename": "mice", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 255, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 27, + "sat": 0, + "lgt": 255 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 28, + "sat": 135, + "lgt": 255 + }, + "eyes": { + "filename": "negative", + "custom_colors": "true", + "hue": 0, + "sat": 200, + "lgt": 28 + }} +} diff --git a/data/skins7/warpaint.json b/data/skins7/warpaint.json new file mode 100644 index 000000000..b4543ef14 --- /dev/null +++ b/data/skins7/warpaint.json @@ -0,0 +1,31 @@ +{"skin": { + "body": { + "filename": "standard", + "custom_colors": "true", + "hue": 29, + "sat": 173, + "lgt": 87 + }, + "marking": { + "filename": "warpaint", + "custom_colors": "false" + }, + "hands": { + "filename": "standard", + "custom_colors": "true", + "hue": 11, + "sat": 115, + "lgt": 1 + }, + "feet": { + "filename": "standard", + "custom_colors": "true", + "hue": 29, + "sat": 173, + "lgt": 87 + }, + "eyes": { + "filename": "standard", + "custom_colors": "false" + }} +} diff --git a/data/skins7/x_ninja.json b/data/skins7/x_ninja.json new file mode 100644 index 000000000..595a729f5 --- /dev/null +++ b/data/skins7/x_ninja.json @@ -0,0 +1,29 @@ +{"skin": { + "body": { + "filename": "x_ninja", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 0 + }, + "marking": { + "filename": "uppy", + "custom_colors": "true", + "hue": 0, + "sat": 0, + "lgt": 64, + "alp": 255 + }, + "hands": { + "filename": "standard", + "custom_colors": "false" + }, + "feet": { + "filename": "standard", + "custom_colors": "false" + }, + "eyes": { + "filename": "x_ninja", + "custom_colors": "false" + }} +} diff --git a/data/skins7/xmas_hat.png b/data/skins7/xmas_hat.png new file mode 100644 index 000000000..28c0b022f Binary files /dev/null and b/data/skins7/xmas_hat.png differ diff --git a/src/base/system.cpp b/src/base/system.cpp index b7320fff9..003525d17 100644 --- a/src/base/system.cpp +++ b/src/base/system.cpp @@ -3985,6 +3985,24 @@ int str_utf8_check(const char *str) return 1; } +void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num) +{ + int new_cursor; + int cursor = 0; + + while(src[cursor] && num > 0) + { + new_cursor = str_utf8_forward(src, cursor); + if(new_cursor >= dst_size) // reserve 1 byte for the null termination + break; + else + cursor = new_cursor; + --num; + } + + str_copy(dst, src, cursor < dst_size ? cursor + 1 : dst_size); +} + void str_utf8_stats(const char *str, size_t max_size, size_t max_count, size_t *size, size_t *count) { const char *cursor = str; diff --git a/src/base/system.h b/src/base/system.h index 260b6abf7..438432707 100644 --- a/src/base/system.h +++ b/src/base/system.h @@ -2395,6 +2395,22 @@ int str_utf8_encode(char *ptr, int chr); */ int str_utf8_check(const char *str); +/* + Function: str_utf8_copy_num + Copies a number of utf8 characters from one string to another. + + Parameters: + dst - Pointer to a buffer that shall receive the string. + src - String to be copied. + dst_size - Size of the buffer dst. + num - maximum number of utf8 characters to be copied. + + Remarks: + - The strings are treated as zero-terminated strings. + - Garantees that dst string will contain zero-termination. +*/ +void str_utf8_copy_num(char *dst, const char *src, int dst_size, int num); + /* Function: str_utf8_stats Determines the byte size and utf8 character count of a utf8 string. diff --git a/src/game/client/components/skins7.cpp b/src/game/client/components/skins7.cpp index 183ce886a..2b19f52ad 100644 --- a/src/game/client/components/skins7.cpp +++ b/src/game/client/components/skins7.cpp @@ -25,6 +25,8 @@ char *CSkins7::ms_apSkinVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}} int *CSkins7::ms_apUCCVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}}; int *CSkins7::ms_apColorVariables[NUM_DUMMIES][protocol7::NUM_SKINPARTS] = {{0}}; +#define SKINS_DIR "skins7" + // TODO: uncomment // const float MIN_EYE_BODY_COLOR_DIST = 80.f; // between body and eyes (LAB color space) @@ -48,7 +50,7 @@ int CSkins7::SkinPartScan(const char *pName, int IsDir, int DirType, void *pUser return 0; char aFilename[IO_MAX_PATH_LENGTH]; - str_format(aFilename, sizeof(aFilename), "skins/%s/%s", CSkins7::ms_apSkinPartNames[pSelf->m_ScanningPart], pName); + str_format(aFilename, sizeof(aFilename), SKINS_DIR "/%s/%s", CSkins7::ms_apSkinPartNames[pSelf->m_ScanningPart], pName); CImageInfo Info; if(!pSelf->Graphics()->LoadPng(Info, aFilename, DirType)) { @@ -118,7 +120,7 @@ int CSkins7::SkinScan(const char *pName, int IsDir, int DirType, void *pUser) // read file data into buffer char aFilename[IO_MAX_PATH_LENGTH]; - str_format(aFilename, sizeof(aFilename), "skins/%s", pName); + str_format(aFilename, sizeof(aFilename), SKINS_DIR "/%s", pName); void *pFileData; unsigned JsonFileSize; if(!pSelf->Storage()->ReadFile(aFilename, IStorage::TYPE_ALL, &pFileData, &JsonFileSize)) @@ -276,7 +278,7 @@ void CSkins7::OnInit() // load skin parts char aBuf[64]; - str_format(aBuf, sizeof(aBuf), "skins/%s", ms_apSkinPartNames[Part]); + str_format(aBuf, sizeof(aBuf), SKINS_DIR "/%s", ms_apSkinPartNames[Part]); m_ScanningPart = Part; Storage()->ListDirectory(IStorage::TYPE_ALL, aBuf, SkinPartScan, this); @@ -313,7 +315,7 @@ void CSkins7::OnInit() // load skins m_vSkins.clear(); - Storage()->ListDirectory(IStorage::TYPE_ALL, "skins", SkinScan, this); + Storage()->ListDirectory(IStorage::TYPE_ALL, SKINS_DIR, SkinScan, this); GameClient()->m_Menus.RenderLoading(Localize("Loading DDNet Client"), Localize("Loading skin files"), 0); // add dummy skin @@ -322,7 +324,7 @@ void CSkins7::OnInit() { // add xmas hat - const char *pFileName = "skins/xmas_hat.png"; + const char *pFileName = SKINS_DIR "/xmas_hat.png"; CImageInfo Info; if(!Graphics()->LoadPng(Info, pFileName, IStorage::TYPE_ALL) || Info.m_Width != 128 || Info.m_Height != 512) { @@ -342,7 +344,7 @@ void CSkins7::OnInit() { // add bot decoration - const char *pFileName = "skins/bot.png"; + const char *pFileName = SKINS_DIR "/bot.png"; CImageInfo Info; if(!Graphics()->LoadPng(Info, pFileName, IStorage::TYPE_ALL) || Info.m_Width != 384 || Info.m_Height != 160) { diff --git a/src/game/client/gameclient.cpp b/src/game/client/gameclient.cpp index 5cc75cb63..c872c0a3c 100644 --- a/src/game/client/gameclient.cpp +++ b/src/game/client/gameclient.cpp @@ -2334,6 +2334,12 @@ void CGameClient::CClientData::Reset() m_Country = -1; m_aSkinName[0] = '\0'; m_SkinColor = 0; + for(int i = 0; i < protocol7::NUM_SKINPARTS; ++i) + { + m_aaSkinPartNames[i][0] = '\0'; + m_aUseCustomColors[i] = 0; + m_aSkinPartColors[i] = 0; + } m_Team = 0; m_Emoticon = 0; m_EmoticonStartFraction = 0; diff --git a/src/game/client/gameclient.h b/src/game/client/gameclient.h index 6a2732bb9..2ec09e4c5 100644 --- a/src/game/client/gameclient.h +++ b/src/game/client/gameclient.h @@ -365,6 +365,12 @@ public: int m_Country; char m_aSkinName[24]; int m_SkinColor; + + // 0.7 Skin + char m_aaSkinPartNames[protocol7::NUM_SKINPARTS][protocol7::MAX_SKIN_LENGTH]; + int m_aUseCustomColors[protocol7::NUM_SKINPARTS]; + int m_aSkinPartColors[protocol7::NUM_SKINPARTS]; + int m_Team; int m_Emoticon; float m_EmoticonStartFraction; @@ -485,6 +491,8 @@ public: void OnInit() override; void OnConsoleInit() override; void OnStateChange(int NewState, int OldState) override; + template + void ApplySkin7InfoFromGameMsg(const T *pMsg, int ClientId); void *TranslateGameMsg(int *pMsgId, CUnpacker *pUnpacker, int Conn); void OnMessage(int MsgId, CUnpacker *pUnpacker, int Conn, bool Dummy) override; void InvalidateSnapshot() override; diff --git a/src/game/client/render.cpp b/src/game/client/render.cpp index ed2974a7a..8f6246b72 100644 --- a/src/game/client/render.cpp +++ b/src/game/client/render.cpp @@ -325,7 +325,7 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn SelectSprite7(client_data7::SPRITE_TEE_BOT_FOREGROUND, 0, 0, 0); Item = BotItem; Graphics()->QuadsDraw(&Item, 1); - Graphics()->SetColor(pInfo->m_Sixup.m_BotColor.r, pInfo->m_Sixup.m_BotColor.g, pInfo->m_Sixup.m_BotColor.b, pInfo->m_Sixup.m_BotColor.a); + Graphics()->SetColor(pInfo->m_Sixup.m_BotColor); SelectSprite7(client_data7::SPRITE_TEE_BOT_GLOW, 0, 0, 0); Item = BotItem; Graphics()->QuadsDraw(&Item, 1); @@ -338,7 +338,7 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn Graphics()->TextureSet(pInfo->m_Sixup.m_aTextures[protocol7::SKINPART_DECORATION]); Graphics()->QuadsBegin(); Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2); - Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_DECORATION].r, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_DECORATION].g, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_DECORATION].b, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_DECORATION].a); + Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_DECORATION]); SelectSprite7(OutLine ? client_data7::SPRITE_TEE_DECORATION_OUTLINE : client_data7::SPRITE_TEE_DECORATION, 0, 0, 0); Item = BodyItem; Graphics()->QuadsDraw(&Item, 1); @@ -356,7 +356,7 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn } else { - Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_BODY].r, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_BODY].g, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_BODY].b, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_BODY].a); + Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_BODY]); SelectSprite7(client_data7::SPRITE_TEE_BODY, 0, 0, 0); } Item = BodyItem; @@ -369,8 +369,8 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn Graphics()->TextureSet(pInfo->m_Sixup.m_aTextures[protocol7::SKINPART_MARKING]); Graphics()->QuadsBegin(); Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2); - Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].r * pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].a, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].g * pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].a, - pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].b * pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].a, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING].a); + ColorRGBA MarkingColor = pInfo->m_Sixup.m_aColors[protocol7::SKINPART_MARKING]; + Graphics()->SetColor(MarkingColor.r * MarkingColor.a, MarkingColor.g * MarkingColor.a, MarkingColor.b * MarkingColor.a, MarkingColor.a); SelectSprite7(client_data7::SPRITE_TEE_MARKING, 0, 0, 0); Item = BodyItem; Graphics()->QuadsDraw(&Item, 1); @@ -399,11 +399,11 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2); if(IsBot) { - Graphics()->SetColor(pInfo->m_Sixup.m_BotColor.r, pInfo->m_Sixup.m_BotColor.g, pInfo->m_Sixup.m_BotColor.b, pInfo->m_Sixup.m_BotColor.a); + Graphics()->SetColor(pInfo->m_Sixup.m_BotColor); Emote = EMOTE_SURPRISE; } else - Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_EYES].r, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_EYES].g, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_EYES].b, pInfo->m_Sixup.m_aColors[protocol7::SKINPART_EYES].a); + Graphics()->SetColor(pInfo->m_Sixup.m_aColors[protocol7::SKINPART_EYES]); if(Pass == 1) { switch(Emote) @@ -433,33 +433,32 @@ void CRenderTools::RenderTee7(const CAnimState *pAnim, const CTeeRenderInfo *pIn } Graphics()->QuadsEnd(); - // TODO: ddnet has own hats // draw xmas hat - // if(!OutLine && pInfo->m_HatTexture.IsValid()) - // { - // Graphics()->TextureSet(pInfo->m_HatTexture); - // Graphics()->QuadsBegin(); - // Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi * 2); - // Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); - // int Flag = Direction.x < 0.0f ? SPRITE_FLAG_FLIP_X : 0; - // switch(pInfo->m_HatSpriteIndex) - // { - // case 0: - // SelectSprite7(SPRITE_TEE_HATS_TOP1, Flag, 0, 0); - // break; - // case 1: - // SelectSprite7(SPRITE_TEE_HATS_TOP2, Flag, 0, 0); - // break; - // case 2: - // SelectSprite7(SPRITE_TEE_HATS_SIDE1, Flag, 0, 0); - // break; - // case 3: - // SelectSprite7(SPRITE_TEE_HATS_SIDE2, Flag, 0, 0); - // } - // Item = BodyItem; - // Graphics()->QuadsDraw(&Item, 1); - // Graphics()->QuadsEnd(); - // } + if(!OutLine && pInfo->m_Sixup.m_HatTexture.IsValid()) + { + Graphics()->TextureSet(pInfo->m_Sixup.m_HatTexture); + Graphics()->QuadsBegin(); + Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2); + Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f); + int Flag = Direction.x < 0.0f ? SPRITE_FLAG_FLIP_X : 0; + switch(pInfo->m_Sixup.m_HatSpriteIndex) + { + case 0: + SelectSprite7(client_data7::SPRITE_TEE_HATS_TOP1, Flag, 0, 0); + break; + case 1: + SelectSprite7(client_data7::SPRITE_TEE_HATS_TOP2, Flag, 0, 0); + break; + case 2: + SelectSprite7(client_data7::SPRITE_TEE_HATS_SIDE1, Flag, 0, 0); + break; + case 3: + SelectSprite7(client_data7::SPRITE_TEE_HATS_SIDE2, Flag, 0, 0); + } + Item = BodyItem; + Graphics()->QuadsDraw(&Item, 1); + Graphics()->QuadsEnd(); + } } // draw feet diff --git a/src/game/client/render.h b/src/game/client/render.h index ed5a31a9f..53e8216c7 100644 --- a/src/game/client/render.h +++ b/src/game/client/render.h @@ -81,6 +81,12 @@ public: for(auto &Texture : m_aTextures) Texture = IGraphics::CTextureHandle(); m_BotTexture = IGraphics::CTextureHandle(); + for(ColorRGBA &PartColor : m_aColors) + { + PartColor = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f); + } + m_HatSpriteIndex = 0; + m_BotColor = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f); } bool Valid() const { @@ -91,9 +97,11 @@ public: } IGraphics::CTextureHandle m_aTextures[protocol7::NUM_SKINPARTS]; - vec4 m_aColors[protocol7::NUM_SKINPARTS]; + ColorRGBA m_aColors[protocol7::NUM_SKINPARTS]; + IGraphics::CTextureHandle m_HatTexture; IGraphics::CTextureHandle m_BotTexture; - vec4 m_BotColor; + int m_HatSpriteIndex; + ColorRGBA m_BotColor; }; CSixup m_Sixup; diff --git a/src/game/client/sixup_translate_game.cpp b/src/game/client/sixup_translate_game.cpp index bd918b33d..a93ef0730 100644 --- a/src/game/client/sixup_translate_game.cpp +++ b/src/game/client/sixup_translate_game.cpp @@ -74,6 +74,52 @@ void CGameClient::DoTeamChangeMessage7(const char *pName, int ClientId, int Team m_Chat.AddLine(-1, 0, aBuf); } +template +void CGameClient::ApplySkin7InfoFromGameMsg(const T *pMsg, int ClientId) +{ + CClientData *pClient = &m_aClients[ClientId]; + char *apSkinPartsPtr[protocol7::NUM_SKINPARTS]; + for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) + { + str_utf8_copy_num(pClient->m_aaSkinPartNames[Part], pMsg->m_apSkinPartNames[Part], sizeof(pClient->m_aaSkinPartNames[Part]), protocol7::MAX_SKIN_LENGTH); + apSkinPartsPtr[Part] = pClient->m_aaSkinPartNames[Part]; + pClient->m_aUseCustomColors[Part] = pMsg->m_aUseCustomColors[Part]; + pClient->m_aSkinPartColors[Part] = pMsg->m_aSkinPartColors[Part]; + } + m_Skins7.ValidateSkinParts(apSkinPartsPtr, pClient->m_aUseCustomColors, pClient->m_aSkinPartColors, m_pClient->m_TranslationContext.m_GameFlags); + + if(time_season() == SEASON_XMAS) + { + pClient->m_SkinInfo.m_Sixup.m_HatTexture = m_Skins7.m_XmasHatTexture; + pClient->m_SkinInfo.m_Sixup.m_HatSpriteIndex = ClientId % CSkins7::HAT_NUM; + } + else + pClient->m_SkinInfo.m_Sixup.m_HatTexture.Invalidate(); + + for(int Part = 0; Part < protocol7::NUM_SKINPARTS; Part++) + { + int Id = m_Skins7.FindSkinPart(Part, pClient->m_aaSkinPartNames[Part], false); + const CSkins7::CSkinPart *pSkinPart = m_Skins7.GetSkinPart(Part, Id); + if(pClient->m_aUseCustomColors[Part]) + { + pClient->m_SkinInfo.m_Sixup.m_aTextures[Part] = pSkinPart->m_ColorTexture; + pClient->m_SkinInfo.m_Sixup.m_aColors[Part] = m_Skins7.GetColor(pClient->m_aSkinPartColors[Part], Part == protocol7::SKINPART_MARKING); + } + else + { + pClient->m_SkinInfo.m_Sixup.m_aTextures[Part] = pSkinPart->m_OrgTexture; + pClient->m_SkinInfo.m_Sixup.m_aColors[Part] = ColorRGBA(1.0f, 1.0f, 1.0f, 1.0f); + } + if(pClient->m_SkinInfo.m_Sixup.m_HatTexture.IsValid()) + { + if(Part == protocol7::SKINPART_BODY && str_comp(pClient->m_aaSkinPartNames[Part], "standard")) + pClient->m_SkinInfo.m_Sixup.m_HatSpriteIndex = CSkins7::HAT_OFFSET_SIDE + (ClientId % CSkins7::HAT_NUM); + if(Part == protocol7::SKINPART_DECORATION && !str_comp(pClient->m_aaSkinPartNames[Part], "twinbopp")) + pClient->m_SkinInfo.m_Sixup.m_HatSpriteIndex = CSkins7::HAT_OFFSET_SIDE + (ClientId % CSkins7::HAT_NUM); + } + } +} + void *CGameClient::TranslateGameMsg(int *pMsgId, CUnpacker *pUnpacker, int Conn) { if(!m_pClient->IsSixup()) @@ -228,22 +274,7 @@ void *CGameClient::TranslateGameMsg(int *pMsgId, CUnpacker *pUnpacker, int Conn) CTranslationContext::CClientData &Client = m_pClient->m_TranslationContext.m_aClients[pMsg7->m_ClientId]; Client.m_Active = true; - CClientData *pClient = &m_aClients[pMsg7->m_ClientId]; - for(int p = 0; p < protocol7::NUM_SKINPARTS; p++) - { - int Id = m_Skins7.FindSkinPart(p, pMsg7->m_apSkinPartNames[p], false); - const CSkins7::CSkinPart *pSkinPart = m_Skins7.GetSkinPart(p, Id); - if(pMsg7->m_aUseCustomColors[p]) - { - pClient->m_SkinInfo.m_Sixup.m_aTextures[p] = pSkinPart->m_ColorTexture; - pClient->m_SkinInfo.m_Sixup.m_aColors[p] = m_Skins7.GetColor(pMsg7->m_aSkinPartColors[p], p == protocol7::SKINPART_MARKING); - } - else - { - pClient->m_SkinInfo.m_Sixup.m_aTextures[p] = pSkinPart->m_OrgTexture; - pClient->m_SkinInfo.m_Sixup.m_aColors[p] = vec4(1.0f, 1.0f, 1.0f, 1.0f); - } - } + ApplySkin7InfoFromGameMsg(pMsg7, pMsg7->m_ClientId); // skin will be moved to the 0.6 snap by the translation context // and we drop the game message return nullptr; @@ -445,23 +476,7 @@ void *CGameClient::TranslateGameMsg(int *pMsgId, CUnpacker *pUnpacker, int Conn) str_copy(Client.m_aName, pMsg7->m_pName); str_copy(Client.m_aClan, pMsg7->m_pClan); Client.m_Country = pMsg7->m_Country; - CClientData *pClient = &m_aClients[pMsg7->m_ClientId]; - for(int p = 0; p < protocol7::NUM_SKINPARTS; p++) - { - int Id = m_Skins7.FindSkinPart(p, pMsg7->m_apSkinPartNames[p], false); - const CSkins7::CSkinPart *pSkinPart = m_Skins7.GetSkinPart(p, Id); - if(pMsg7->m_aUseCustomColors[p]) - { - pClient->m_SkinInfo.m_Sixup.m_aTextures[p] = pSkinPart->m_ColorTexture; - pClient->m_SkinInfo.m_Sixup.m_aColors[p] = m_Skins7.GetColor(pMsg7->m_aSkinPartColors[p], p == protocol7::SKINPART_MARKING); - } - else - { - pClient->m_SkinInfo.m_Sixup.m_aTextures[p] = pSkinPart->m_OrgTexture; - pClient->m_SkinInfo.m_Sixup.m_aColors[p] = vec4(1.0f, 1.0f, 1.0f, 1.0f); - } - } - + ApplySkin7InfoFromGameMsg(pMsg7, pMsg7->m_ClientId); if(m_pClient->m_TranslationContext.m_aLocalClientId[Conn] == -1) return nullptr; if(pMsg7->m_Silent || pMsg7->m_Local)